alectrona94
Member
ive snowball script everything is working but the shooting doesnt, !snowball atirar is the command can anyone tell me where's the error from? and no i dont get error in console TFS 0.4
Talkaction.lua
globalevent.lua
Talkaction.lua
Code:
function onSay(cid, words, param, channel)
local k = string.explode(param, ",")
if(k[1] ~= nil) then
if(string.upper(k[1]) == 'INFO') then
local score = {}
local output = "You have " .. getPlayerStorageValue(cid, SBW_SCORE) .. " points.\nYou have "..getPlayerStorageValue(cid, SBW_AMMO).."x munitions.\n------------------\nThe greatest slayer:\n"
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerStorageValue(pid, SBW_INEVENT) then
table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, SBW_SCORE)})
end
end
local lx = table.getn(score)
if(lx > 3) then lx = 3 end
table.sort(score, function(a, b) return a[2] > b[2] end)
for k = 1,lx do
output = output .. k..". "..score[k][1] .." [".. score[k][2] .."].\n"
end
doPlayerPopupFYI(cid, output)
end
if (string.upper(k[1]) == 'SHOOT') then
if(getPlayerStorageValue(cid, SBW_INEVENT) == 1) and not getTileInfo(getThingPos(cid)).protection then
if getPlayerStorageValue(cid, SBW_EXAUSTHED) <= 1 then
if(getPlayerStorageValue(cid, SBW_AMMO) > 0) then
if SBW_STATUS == 'on' then
if(SBW_AMMOINFI == false) then
doPlayerSetStorageValue(cid, SBW_AMMO, getPlayerStorageValue(cid, SBW_AMMO)-1)
end
doPlayerSetStorageValue(cid, SBW_EXAUSTHED, 2)
lineAnimation(getPlayerLookDirection(cid),getCreaturePosition(cid),12,cid,1,0,1,0,0,0,1,0)
addEvent(doPlayerSetStorageValue, SBW_SHOOTEXAUSTHED, cid, SBW_EXAUSTHED, 1)
if (getPlayerStorageValue(cid, SBW_AMMO) ~= 1) then
doPlayerSendTextMessage(cid, 27, "Remain "..getPlayerStorageValue(cid, SBW_AMMO).."x snowballs.")
else
doPlayerSendTextMessage(cid, 27, "Using your last snowball, recharge.")
end
end
else
doPlayerSendCancel(cid, "You are without snowballs, recharge in the center of the field or kill an enemy.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
end
else
doPlayerPopupFYI(cid, "Calm down you should wait to shoot again.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
return false
end
else
doPlayerPopupFYI(cid, "You need to be inside event or out of pz.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
end
end
end
return true
end
function lineAnimation(lookDir,playerPos,effect,cid,fvar,fpos,ffound,fposV,fcheck,fvcid,floopCounter,fvpid, name)
local var = fvar
local pos = fpos
local found = ffound
local posV = fposV
local check = fcheck
local vcid = fvcid
local loopCounter = floopCounter
local vpid = fvpid
local storage = SBW_EXAUSTHED
if var < 2 then
vcid = cid
end
pos = playerPos
if not isInWallArray(convert(lookDir,pos)) then--isInWallArray({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z}) then --isInArray(t.onShoot.misc.walls_id, getThingfromPos({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z, stackpos=0}).itemid) then
doSendDistanceShoot(pos, convert(lookDir,pos),effect)
pos = convert(lookDir,pos)
var=var+1
posV = convertV(lookDir,playerPos)
for _, pid in ipairs(getPlayersOnline()) do
if (getCreaturePosition(pid).x == pos.x and getCreaturePosition(pid).y == pos.y and getCreaturePosition(pid).z == pos.z) then
--if loopCounter > 2 then
vpid = pid
--end
if (vpid ~= vcid) then
if var > 2 then
if (getCreaturePosition(pid).x == posV.x and getCreaturePosition(pid).y == posV.y and getCreaturePosition(pid).z == posV.z) then
killPlayer(pid,pos,getCreatureName(vcid))
if (lookDir == 0) or (lookDir == 2) then
var = 6
else
var = 8
end
end
end
killPlayer(pid,pos,vcid)
if (lookDir == 0) or (lookDir == 2) then
var = 6
else
var = 8
end
end
end
loopCounter = loopCounter +1
end
if (lookDir == 0) or (lookDir == 2) then
if var ~= 6 then
addEvent(lineAnimation, SBW_BALLSPEED, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid)
else
var = 1
end
else
if var ~= 8 then
addEvent(lineAnimation, SBW_BALLSPEED, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid)
else
var = 1
end
end
else
doSendMagicEffect(convert(lookDir,pos),2)
var = 1
end
end
local ret = {}
function convert(lookDir,pos)
local positions = {
[0] = {x = pos.x, y = pos.y-1, z = pos.z},
[1] = {x = pos.x+1, y = pos.y, z = pos.z},
[2] = {x = pos.x, y = pos.y+1, z = pos.z},
[3] = {x = pos.x-1, y = pos.y, z = pos.z}
}
ret = positions[lookDir]
return ret
end
local ret = {}
function convertV(lookDir,pos)
local positions = {
[0] = {x = pos.x, y = pos.y+1, z = pos.z},
[1] = {x = pos.x-1, y = pos.y, z = pos.z},
[2] = {x = pos.x, y = pos.y-1, z = pos.z},
[3] = {x = pos.x+1, y = pos.y, z = pos.z}
}
ret = positions[lookDir]
return ret
end
function isInWallArray(pos)
for k = 0, table.getn(SBW_WALLSID) do
if getTileItemById(pos, SBW_WALLSID[k]).itemid == SBW_WALLSID[k] then --this doesn't even make sense but tried other ways and it gave errors, so meh 2lazy2search
return true
end
end
return false
end
function killPlayer(cid, pos, killer)
local t_l = SBW_AREA[1]
local b_r = SBW_AREA[2]
local posti = {}
local isPossibleToTeleportPlayer = false
while (isPossibleToTeleportPlayer == FALSE) do
doTeleportThing(cid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
if isInWallArray(posti) == FALSE then
isPossibleToTeleportPlayer = TRUE
end
end
doTeleportThing(cid, posti)
doSendMagicEffect(pos,2)
doSendMagicEffect(posti,6)
doSendAnimatedText(pos, ""..getCreatureName(killer).." ", 55)
doPlayerSendTextMessage(cid, 27, "You died to "..getCreatureName(killer)..".")
doPlayerSetStorageValue(killer, SBW_SCORE, getPlayerStorageValue(killer, SBW_SCORE)+SBW_POINTSKILL)
doPlayerSendTextMessage(killer, 27, "You've killed "..getCreatureName(cid)..".")
if SBW_LOSTSCORE then
doPlayerSetStorageValue(cid, SBW_SCORE, getPlayerStorageValue(cid, SBW_SCORE)-1)
end
if SBW_RESETAMMO then
doPlayerSetStorageValue(cid, SBW_AMMO, SBW_MINAMMO)
end
end
globalevent.lua
Code:
function onTime()
function isInWallArray(pos)
for k = 0, table.getn(SBW_WALLSID) do
if (getTileItemById(pos, SBW_WALLSID[k]).itemid == SBW_WALLSID[k]) then
return true
end
end
return false
end
function endsnowball()
local score = {}
if not SBW_USEWAIT then
doRemoveItem(getTileItemById(SBW_TP, 1387).uid)
end
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerStorageValue(pid, SBW_INEVENT) > 0 then
table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, SBW_SCORE)})
doPlayerSetStorageValue(pid, SBW_INEVENT, 0)
doPlayerSetStorageValue(pid, SBW_SCORE, 0)
doPlayerSetStorageValue(pid, SBW_AMMO, 0)
doTeleportThing(pid, SBW_TPEND)
end
end
table.sort(score, function(a, b) return a[2] > b[2] end)
--local random_item = SBW_REWARDS[math.random(1, #SBW_REWARDS)]
local hora = os.date("%X")
local data = os.date("%x")
if table.getn(score) > 0 then
if SBW_ADDREWARD then
for _, pid in ipairs(getPlayersOnline()) do
if getCreatureName(pid) == score[1][1] then
for op,ad in pairs(SBW_REWARDS) do
doPlayerAddItem(pid, ad[1], ad[2])
end
break
end
end
end
db.query("INSERT INTO `snowballwar` VALUES ('', ".. db.escapeString(score[1][1]) .. ",".. score[1][2] ..", ".. db.escapeString(data) ..", ".. db.escapeString(hora) ..");")
db.query("UPDATE `players` SET `sbw_points`=`sbw_points`+".. score[1][2] .." WHERE `name` = " .. db.escapeString(score[1][1]) .. ";")
doBroadcastMessage("[SNOWBALL EVENT] Concluded, congratulations to the player "..score[1][1].." who won the SnowBall Event with "..score[1][2].." points.")
end
return true
end
local t_l = SBW_AREA[1]
local b_r = SBW_AREA[2]
function moveToEvent()
for _, pid in ipairs(getPlayersOnline()) do
if isInRange(getCreaturePosition(pid), SBW_WAITROOM[1], SBW_WAITROOM[2]) then
local posti = {}
local isPossibleToTeleportPlayer = false
while (isPossibleToTeleportPlayer == FALSE) do
doTeleportThing(pid, {x=math.random(t_l.x,b_r.x), y=math.random(t_l.y, b_r.y), z=math.random(t_l.z, b_r.z)})
if (isInWallArray(posti) == FALSE) then
isPossibleToTeleportPlayer = TRUE
end
end
doTeleportThing(pid, posti)
doPlayerSetStorageValue(pid, SBW_INEVENT, 1)
doPlayerSetStorageValue(pid, SBW_AMMO, SBW_MINAMMO)
doPlayerSetStorageValue(pid, SBW_SCORE, 0)
doPlayerSendTextMessage(pid, 27, "[SNOWBALL WAR] Welcome, here are the commands that you will use during the event\n!snowball atirar --Throw a snowball.\n!snowball info --This shows your game points and the amount of snowballs you have. Also shows the ranking of points of the event.\n Recharge your snowballs by clicking in front of the generator in the center of the field.\nHighly recommended add these commands to your hotkeys.")
end
end
doRemoveItem(getTileItemById(SBW_TP, 1387).uid)
addEvent(endsnowball, SBW_DURATION*1000*60)
doBroadcastMessage(SBW_MSGSTART)
end
local time = os.date("*t")
local timeopen1 = math.ceil(SBW_TIMEWAIT / 4)
local timeopen2 = math.ceil(SBW_TIMEWAIT / 2)
if (SBW_STARTAUTO) and (isInArray(SBW_DAYS,time.wday)) then
doBroadcastMessage(SBW_MSGWARNING)
if SBW_USEWAIT then
addEvent(doBroadcastMessage, timeopen1*1000*60, "[SNOWBALL WAR] - Remain ".. timeopen2 .." minute(s) to start the event!")
if (timeopen2 ~= timeopen1) then
addEvent(doBroadcastMessage, timeopen2*1000*60, "[SNOWBALL WAR] - Remain ".. timeopen1 .." minute(s) to start the event!")
end
addEvent(moveToEvent, SBW_TIMEWAIT*1000*60)
local tp = doCreateItem(1387, SBW_TPGO, SBW_TP)
doItemSetAttribute(tp, "aid", 2880)
else
if SBW_TFS == "0.4" then
doSetItemActionId(doCreateItem(tp, SBW_TP), 2880)
else
doSetItemActionId(doCreateItem(tp, SBW_TP), 2880)
end
if(SBW_DURATION > 0) then
addEvent(endsnowball, SBW_DURATION*1000*60)
end
end
end
return true
end