• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua I got an issue with talkaction

phern

alysiaots.com
Joined
Nov 2, 2008
Messages
195
Reaction score
2
Location
Poland
Hello everyone. I got a little problem with talkaction script.
Here is the script:
Code:
function onSay(cid, words, param)
	local player = getPlayerByNameWildcard(param)
	if not isPlayer(player) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'blahblabhlah.')
		return true
	end
	local b = not getCreatureNoMove(player)
	doCreatureSetNoMove(player, b)
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, b and 'blahblabhlah.' or 'blahblabhlah.')
	doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, b and 'blahblabhlah.' or 'blahblabhlah.')
	doSendAnimatedText(getThingPos(player), b and 'Frozen' or 'Can Move', b and 64 or 168)
	doSendMagicEffect(getThingPos(player), b and CONST_ME_GIANTICE or CONST_ME_HOLYAREA)
	return true
end

And i want to make this scripts to repeat "frozen" every one second when this command is on (eg. /frozen Player [and then player can not move and sending animated "frozen" every one second untill command is off], /frozen Player [used 2nd time- player is able to move and stopped repeating anything]

I hope You have understood what I meant ;)
 
Last edited:
Its maybe becouse You don't understand how this script works?
Tell me what is unclear and I will try to explain.
 
freez.lua
Lua:
local condition1 = createConditionObject(CONDITION_INFIGHT)
    local condition2 = createConditionObject(CONDITION_EXHAUST)
    local condition3 = createConditionObject(CONDITION_MUTED)
    setConditionParam(condition1, CONDITION_PARAM_TICKS, -1)
    setConditionParam(condition2, CONDITION_PARAM_TICKS, -1)
    setConditionParam(condition3, CONDITION_PARAM_TICKS, -1)

function onSay(cid, words, param)
    if(param == "") then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Name required.")
        return TRUE
    end

    local player = getPlayerByNameWildcard(param)
        local pos = getCreaturePosition(player)
 
        local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
        local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
        local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
        local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
        local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
        local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
if getPlayerGroupId(cid) >= getPlayerGroupId(player) then
if getPlayerStorageValue(player, 12346) < 0 then
    if((doCreatureSetNoMove(player, 1))== LUA_ERROR) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Error.")
    end
        setPlayerStorageValue(player, 12346, 1)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player can now not move.")
        doSendAnimatedText(getCreaturePosition(player), "Frozen", 64)
    return TRUE
            doSendDistanceShoot(nha, pos, 28)
            doSendDistanceShoot(sha, pos, 28)
            doSendDistanceShoot(wha, pos, 28)
            doSendDistanceShoot(eha, pos, 28)
            doSendDistanceShoot(nwa, pos, 28)
            doSendDistanceShoot(nea, pos, 28)
            doSendDistanceShoot(sea, pos, 28)
            doSendDistanceShoot(swa, pos, 28)
                doSendMagicEffect(pos, 52)
        doAddCondition(player, condition1)
        doAddCondition(player, condition2)
        doAddCondition(player, condition3)
elseif getPlayerStorageValue(player, 12346) >= 0 then
    if((doCreatureSetNoMove(player, 0))== LUA_ERROR) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Error.")
    end
        setPlayerStorageValue(player, 12346, -1)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player can now move again.")
        doSendAnimatedText(getCreaturePosition(player), "Can Move", 168)
            doSendDistanceShoot(pos, nha, 37)
            doSendDistanceShoot(pos, sha, 37)
            doSendDistanceShoot(pos, wha, 37)
            doSendDistanceShoot(pos, eha, 37)
            doSendDistanceShoot(pos, nwa, 37)
            doSendDistanceShoot(pos, nea, 37)
            doSendDistanceShoot(pos, sea, 37)
            doSendDistanceShoot(pos, swa, 37)
                doSendMagicEffect(pos, 49)
        doRemoveCondition(cid, CONDITION_INFIGHT)
        doRemoveCondition(cid, CONDITION_EXHAUST)
        doRemoveCondition(cid, CONDITION_MUTED)
end
end
    return TRUE
end
 
Mmm i'm not sure. Try this:

Code:
  local condition1 = createConditionObject(CONDITION_INFIGHT)
    local condition2 = createConditionObject(CONDITION_EXHAUST)
    local condition3 = createConditionObject(CONDITION_MUTED)
    setConditionParam(condition1, CONDITION_PARAM_TICKS, -1)
    setConditionParam(condition2, CONDITION_PARAM_TICKS, -1)
    setConditionParam(condition3, CONDITION_PARAM_TICKS, -1)

function onSay(cid, words, param)
    if(param == "") then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Name required.")
        return TRUE
    end

    local player = getPlayerByNameWildcard(param)
        local pos = getCreaturePosition(player)
 
        local nha = {x = pos.x, y = pos.y - 3, z = pos.z, stackpos = 255}
        local sha = {x = pos.x, y = pos.y + 3, z = pos.z, stackpos = 255}
        local wha = {x = pos.x - 3, y = pos.y, z = pos.z, stackpos = 255}
        local eha = {x = pos.x + 3, y = pos.y, z = pos.z, stackpos = 255}
        local nwa = {x = pos.x - 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local nea = {x = pos.x + 2, y = pos.y - 2, z = pos.z, stackpos = 255}
        local sea = {x = pos.x + 2, y = pos.y + 2, z = pos.z, stackpos = 255}
        local swa = {x = pos.x - 2, y = pos.y + 2, z = pos.z, stackpos = 255}
if getPlayerGroupId(cid) >= getPlayerGroupId(player) then
if getPlayerStorageValue(player, 12346) < 0 then
    if((doCreatureSetNoMove(player, 1))== LUA_ERROR) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Error.")
    end
        setPlayerStorageValue(player, 12346, 1)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player can now not move.")
                while getPlayerLevel(cid) < 5000 do
        doSendAnimatedText(getCreaturePosition(player), "Frozen", 64)
    return TRUE
            doSendDistanceShoot(nha, pos, 28)
            doSendDistanceShoot(sha, pos, 28)
            doSendDistanceShoot(wha, pos, 28)
            doSendDistanceShoot(eha, pos, 28)
            doSendDistanceShoot(nwa, pos, 28)
            doSendDistanceShoot(nea, pos, 28)
            doSendDistanceShoot(sea, pos, 28)
            doSendDistanceShoot(swa, pos, 28)
                doSendMagicEffect(pos, 52)
        doAddCondition(player, condition1)
        doAddCondition(player, condition2)
        doAddCondition(player, condition3)
elseif getPlayerStorageValue(player, 12346) >= 0 then
    if((doCreatureSetNoMove(player, 0))== LUA_ERROR) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Error.")
    end
        setPlayerStorageValue(player, 12346, -1)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player can now move again.")
        doSendAnimatedText(getCreaturePosition(player), "Can Move", 168)
            doSendDistanceShoot(pos, nha, 37)
            doSendDistanceShoot(pos, sha, 37)
            doSendDistanceShoot(pos, wha, 37)
            doSendDistanceShoot(pos, eha, 37)
            doSendDistanceShoot(pos, nwa, 37)
            doSendDistanceShoot(pos, nea, 37)
            doSendDistanceShoot(pos, sea, 37)
            doSendDistanceShoot(pos, swa, 37)
                doSendMagicEffect(pos, 49)
        doRemoveCondition(cid, CONDITION_INFIGHT)
        doRemoveCondition(cid, CONDITION_EXHAUST)
        doRemoveCondition(cid, CONDITION_MUTED)
end
end
    return TRUE
end
 
Code:
[4/6/2010 21:8:28] [Error - LuaInterface::loadFile] data/talkactions/scripts/frozen.lua:35: 'end' expected (to close 'while' at line 32) near 'doSendDistanceShoot'
[4/6/2010 21:8:28] [Warning - Event::loadScript] Cannot load script (data/talkactions/scripts/frozen.lua)
[4/6/2010 21:8:28] data/talkactions/scripts/frozen.lua:35: 'end' expected (to close 'while' at line 32) near 'doSendDistanceShoot'
 
data/talkactions/scripts/something.lua
Code:
function onSay(cid, words, param, channel)
	local t = string.explode(param, ",")
	local player = getPlayerByNameWildCard(t[2])
	if t[1] == "freeze" then
		if isPlayer(player) then
			doCreatureSetNoMove(cid, true)
		else
			doPlayerSendTextMessage(cid, 27, "Player " .. t[2] .. " not found.")
		end
	elseif t[2] == "unfreeze" then
		if isPlayer(player) then
			doCreatureSetNoMove(cid, false)
		else
			doPlayerSendTextMessage(cid, 27, "Player " .. t[2] .. " not found.")
		end
	else
		doPlayerSendTextMessage(cid, 27, "not enough params.")
	end
	return true
end
talkactions.xml:
Code:
<talkaction words="/" event="script" value="something.lua"/>
usage:
/freeze, player
/unfreeze, player
 
You don't get what i was talking about.
I got fully working script (look first post), but I want someone to edit it (when player is frozen animated text "frozen" is appeared every one second)
I would be pleased if You can do it.
 
Code:
local function repeatAnimated(cid, on, off)
	local repeatEvent = 0
	doSendAnimatedText(getThingPos(cid), "Frozen!", math.random(1, 254))
	if on then
		repeatEvent = addEvent(repeatAnimated, math.random(1, 4) * 1000, cid)
	elseif off then
		stopEvent(repeatEvent)
	end
end
function onSay(cid, words, param, channel)
	local t = string.explode(param, ",")
	local player = getPlayerByNameWildCard(t[2])
	if t[1] == "freeze" then
		if isPlayer(player) then
			doCreatureSetNoMove(cid, true)
			repeatAnimated(cid, on)
		else
			doPlayerSendTextMessage(cid, 27, "Player " .. t[2] .. " not found.")
		end
	elseif t[2] == "unfreeze" then
		if isPlayer(player) then
			doCreatureSetNoMove(cid, false)
			repeatAnimated(cid, off)
		else
			doPlayerSendTextMessage(cid, 27, "Player " .. t[2] .. " not found.")
		end
	else
		doPlayerSendTextMessage(cid, 27, "not enough params.")
	end
	return true
end
 
Error:
Code:
[4/6/2010 22:35:20] [Error - TalkAction Interface] 
[4/6/2010 22:35:20] data/talkactions/scripts/frozen.lua:onSay
[4/6/2010 22:35:20] Description: 
[4/6/2010 22:35:20] data/talkactions/scripts/frozen.lua:12: attempt to call global 'getPlayerByNameWildCard' (a nil value)
[4/6/2010 22:35:20] stack traceback:
[4/6/2010 22:35:20] 	data/talkactions/scripts/frozen.lua:12: in function <data/talkactions/scripts/frozen.lua:10>
 
Back
Top