Postado Maio 11, 2017 8 anos Galera tenho um evento de paintball mas nao consigio colocalo para iniciar sozinho tipo global events pq ele fica na pasta mods queria um script que em tal hora ou em tal horas do dia tipo 12:00, 00:00 ele inicia-se sozinho nele tenho q dar o comando !pb start com o gm pra poder iniciar se alguem souber como faz da um alo ai. <?xml version="1.0" encoding="UTF-8"?> <mod name="Paintball event" version="1.0" author="Bogart" contact="otland.net" enabled="yes"> <description> </description> <config name="config"><![CDATA[ t = { main = { tfs_version = "0.3", --0.3 or 0.4 positions = { paintball_spawn_area = { top_left = {x = 1215, y = 1004, z = 7}, --Top left pos of spawning area bottom_right = {x = 1231, y = 1020, z = 7}--bottom right pos of spawning area }, waiting_room_area = { top_left = {x = 1222, y = 1009, z = 6}, --Top left pos of the waiting room bottom_right = {x = 1229, y = 1016, z = 6}--bottom right pos of the waiting room }, tp_to_paintball = {x = 973, y = 930, z = 7}, --pos where the tp will be created event_ending_pos = {x = 973, y = 932, z = 6} --pos players will be sent after event ending }, storages = { exhaust = 2455, is_in_event = 2460, score = 2465 }, misc = { status = 'on' }, messages = { event_started = "Paintball foi iniciado! va para o templo e entre no portal para participar!",--Message that will be broadcasted after the event has started event_ended = "Paintball acabou!" --same but when event ends }, event_config = { event_duration = 1, --minutes, 0 if it's an always-open event infinite_ammo = true, winner_gets_item = true, prize_item_id = 7732, decrease_score_on_death = true, points_per_kill = 1, randomize_player_start_pos = true, ammo_per_point = 100, reset_bullets_on_death = true, min_bullets_on_spawn = 100, start_automatically = false, use_waiting_room = true, waiting_time = 1 --minutes } }, onShoot = { storages = { ammo = 2400 }, misc = { walls_id = {9371,9372,9377,9399,9373,9370,9376,9370}, bullets_exhaust = 500, --in ms bullet_speed = 150 }, vars = { shootdir = 0 } } } ]]></config> <movevent type="StepIn" actionid ="2880" event="script"><![CDATA[ domodlib('config') function onStepIn(cid, item, pos) local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right 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)}) doPlayerSetStorageValue(cid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(cid, t.main.storages.score, 0) doPlayerSendTextMessage(cid,27,"Bem Vindo ao evento Paintball, -> Comandos:\n!pb tiro -> Comando para atirar.\n!pb placar -> Mostra o Placar atual dos jogadores.") end ]]></movevent> <globalevent name="StartPaintBall" interval="3600" event="script"><![CDATA[ domodlib('config') function onThink(interval, lastExecution, thinkInterval) if t.main.event_config.start_automatically then doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING) if t.main.event_config.use_waiting_room then addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball) else if t.main.tfs_version == "0.3" then doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880) else doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880) end if(t.main.event_config.event_duration > 0) then addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end end end return true end function endPaintball() local score = {} if not t.main.event_config.use_waiting_room then doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) end for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0) doTeleportThing(pid, t.main.positions.event_ending_pos) end end table.sort(score, function(a, b) return a[2] > b[2] end) if table.getn(score) > 0 then if t.main.event_config.winner_gets_item then for _, pid in ipairs(getPlayersOnline()) do if getCreatureName(pid) == score[1][1] then doPlayerAddItem(pid, t.main.event_config.prize_item_id) break end end end doBroadcastMessage("Evento Paintball acabou, "..score[1][1].." ganhou o evento com "..score[1][2].." pontos", MESSAGE_STATUS_WARNING) end end local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right function moveToEvent() for _, pid in ipairs(getPlayersOnline()) do if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then 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)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSendTextMessage(pid,27,"Bem Vindo ao evento Paintball, -> Comandos:\n!pb tiro -> Comando para atirar.\n!pb placar -> Mostra o Placar atual dos jogadores.") end end doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end ]]></globalevent> <talkaction words="!pb" event="script"><![CDATA[ domodlib('config') function onSay(cid, words, param, channel) local k = string.explode(param, ",") if(k[1] ~= nil) then if(string.upper(k[1]) == 'END') and getPlayerGroupId(cid) >= 3 then endPaintball() end if(string.upper(k[1]) == 'START') and getPlayerGroupId(cid) >= 3 then doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING) if t.main.event_config.use_waiting_room then addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball) else if t.main.tfs_version == "0.3" then doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880) else doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880) end if(t.main.event_config.event_duration > 0) then addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end end end if(string.upper(k[1]) == 'PLACAR') then local score = {} local output = "Voce Tem " .. getPlayerStorageValue(cid, t.main.storages.score) .. " pontos.\nVoce tem "..getPlayerStorageValue(cid, t.onShoot.storages.ammo).." munição.\n------------------\nAtual pontuaçao do evento Paintball é:\n" for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.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]) == 'MUNIÇÂO') then if(t.main.event_config.infinite_ammo) then doPlayerSendTextMessage(cid, 27, "Munições infinitas.") else if getPlayerStorageValue(cid, t.main.storages.score) > 0 then doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1) doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid,t.onShoot.storages.ammo)+t.main.event_config.ammo_per_point) doPlayerSendTextMessage(cid, 27, "You have received " .. t.main.event_config.ammo_per_point .. " bullets and you have lost 1 score point.") doSendMagicEffect(getCreaturePosition(cid),4) else doPlayerSendTextMessage(cid, 27, "Você não tem pontos suficientes para comprar munição, você precisa ".. 1-(getPlayerStorageValue(cid, t.main.storages.score)).. " mais.") end end end if (string.upper(k[1]) == 'TIRO') then if(getPlayerStorageValue(cid, t.main.storages.is_in_event) == 1) then if getPlayerStorageValue(cid, t.main.storages.exhaust) <= 1 then if(getPlayerStorageValue(cid, t.onShoot.storages.ammo) > 0) then if t.main.misc.status == 'on' then if(t.main.event_config.infinite_ammo == false) then doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid, t.onShoot.storages.ammo)-1) end doPlayerSetStorageValue(cid, t.main.storages.exhaust, 2) lineAnimation(getPlayerLookDirection(cid),getCreaturePosition(cid),12,cid,1,0,1,0,0,0,1,0) addEvent(doPlayerSetStorageValue,t.onShoot.misc.bullets_exhaust, cid, t.main.storages.exhaust,1) end else doPlayerSendCancel(cid, "Você está fora de munição, troca de munição por pontos com munição tiro ou ser morto por uma recarga") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "A arma está em recarga") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "Você precisa estar no evento.") 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 = t.main.storages.exhaust 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, t.onShoot.misc.bullet_speed, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid) else var = 1 end else if var ~= 8 then addEvent(lineAnimation, t.onShoot.misc.bullet_speed, 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 killPlayer(cid,pos, killer) local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right 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)}) doSendMagicEffect(pos,2) doPlayerSendTextMessage(cid, 27, "Voce foi morto por "..getCreatureName(killer)..".") doPlayerSetStorageValue(killer, t.main.storages.score, getPlayerStorageValue(killer, t.main.storages.score)+t.main.event_config.points_per_kill) doPlayerSendTextMessage(killer, 27, "Você matou "..getCreatureName(cid)..".") doBroadcastMessage("[Event] Paintball: "..getCreatureName(killer).." matou "..getCreatureName(cid)..".", MESSAGE_STATUS_WARNING) if t.main.event_config.decrease_score_on_death then doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1) end if t.main.event_config.reset_bullets_on_death then doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) end end function isInWallArray(pos) for k = 0, table.getn(t.onShoot.misc.walls_id) do if getTileItemById(pos, t.onShoot.misc.walls_id[k]).itemid == t.onShoot.misc.walls_id[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 endPaintball() local score = {} if not t.main.event_config.use_waiting_room then doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) end for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0) doTeleportThing(pid, t.main.positions.event_ending_pos) end end table.sort(score, function(a, b) return a[2] > b[2] end) if table.getn(score) > 0 then if t.main.event_config.winner_gets_item then for _, pid in ipairs(getPlayersOnline()) do if getCreatureName(pid) == score[1][1] then doPlayerAddItem(pid, t.main.event_config.prize_item_id) break end end end doBroadcastMessage("Evento Painball acabou, "..score[1][1].." ganhou o evento com "..score[1][2].." pontos", MESSAGE_STATUS_WARNING) end end local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right function moveToEvent() for _, pid in ipairs(getPlayersOnline()) do if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then 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)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSendTextMessage(pid,27,"Bem Vindo ao evento Paintball, -> Comandos:\n!pb tiro -> Comando para atirar.\n!pb placar -> Mostra o Placar atual dos jogadores.") end end doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end ]]></talkaction> </mod>
Postado Maio 11, 2017 8 anos no proprio mod ja tem o globalevent é so da uma olhada.... troquei de onThink para onTime ou seja vai executar em determinado horario... caso queira mudar so procura o globalevent do mod ali... coloquei 00:00 Spoiler <?xml version="1.0" encoding="UTF-8"?> <mod name="Paintball event" version="1.0" author="Bogart" contact="otland.net" enabled="yes"> <description> </description> <config name="config"><![CDATA[ t = { main = { tfs_version = "0.3", --0.3 or 0.4 positions = { paintball_spawn_area = { top_left = {x = 1215, y = 1004, z = 7}, --Top left pos of spawning area bottom_right = {x = 1231, y = 1020, z = 7}--bottom right pos of spawning area }, waiting_room_area = { top_left = {x = 1222, y = 1009, z = 6}, --Top left pos of the waiting room bottom_right = {x = 1229, y = 1016, z = 6}--bottom right pos of the waiting room }, tp_to_paintball = {x = 973, y = 930, z = 7}, --pos where the tp will be created event_ending_pos = {x = 973, y = 932, z = 6} --pos players will be sent after event ending }, storages = { exhaust = 2455, is_in_event = 2460, score = 2465 }, misc = { status = 'on' }, messages = { event_started = "Paintball foi iniciado! va para o templo e entre no portal para participar!",--Message that will be broadcasted after the event has started event_ended = "Paintball acabou!" --same but when event ends }, event_config = { event_duration = 1, --minutes, 0 if it's an always-open event infinite_ammo = true, winner_gets_item = true, prize_item_id = 7732, decrease_score_on_death = true, points_per_kill = 1, randomize_player_start_pos = true, ammo_per_point = 100, reset_bullets_on_death = true, min_bullets_on_spawn = 100, start_automatically = false, use_waiting_room = true, waiting_time = 1 --minutes } }, onShoot = { storages = { ammo = 2400 }, misc = { walls_id = {9371,9372,9377,9399,9373,9370,9376,9370}, bullets_exhaust = 500, --in ms bullet_speed = 150 }, vars = { shootdir = 0 } } } ]]></config> <movevent type="StepIn" actionid ="2880" event="script"><![CDATA[ domodlib('config') function onStepIn(cid, item, pos) local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right 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)}) doPlayerSetStorageValue(cid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(cid, t.main.storages.score, 0) doPlayerSendTextMessage(cid,27,"Bem Vindo ao evento Paintball, -> Comandos:\n!pb tiro -> Comando para atirar.\n!pb placar -> Mostra o Placar atual dos jogadores.") end ]]></movevent> <globalevent name="StartPaintBall" time="00:00" event="script"><![CDATA[ domodlib('config') function onTime(interval, lastExecution, thinkInterval) if t.main.event_config.start_automatically then doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING) if t.main.event_config.use_waiting_room then addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball) else if t.main.tfs_version == "0.3" then doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880) else doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880) end if(t.main.event_config.event_duration > 0) then addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end end end return true end function endPaintball() local score = {} if not t.main.event_config.use_waiting_room then doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) end for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0) doTeleportThing(pid, t.main.positions.event_ending_pos) end end table.sort(score, function(a, b) return a[2] > b[2] end) if table.getn(score) > 0 then if t.main.event_config.winner_gets_item then for _, pid in ipairs(getPlayersOnline()) do if getCreatureName(pid) == score[1][1] then doPlayerAddItem(pid, t.main.event_config.prize_item_id) break end end end doBroadcastMessage("Evento Paintball acabou, "..score[1][1].." ganhou o evento com "..score[1][2].." pontos", MESSAGE_STATUS_WARNING) end end local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right function moveToEvent() for _, pid in ipairs(getPlayersOnline()) do if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then 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)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSendTextMessage(pid,27,"Bem Vindo ao evento Paintball, -> Comandos:\n!pb tiro -> Comando para atirar.\n!pb placar -> Mostra o Placar atual dos jogadores.") end end doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end ]]></globalevent> <talkaction words="!pb" event="script"><![CDATA[ domodlib('config') function onSay(cid, words, param, channel) local k = string.explode(param, ",") if(k[1] ~= nil) then if(string.upper(k[1]) == 'END') and getPlayerGroupId(cid) >= 3 then endPaintball() end if(string.upper(k[1]) == 'START') and getPlayerGroupId(cid) >= 3 then doBroadcastMessage(t.main.messages.event_started, MESSAGE_STATUS_WARNING) if t.main.event_config.use_waiting_room then addEvent(moveToEvent, t.main.event_config.waiting_time*1000*60) doCreateTeleport(1387,t.main.positions.waiting_room_area.top_left, t.main.positions.tp_to_paintball) else if t.main.tfs_version == "0.3" then doItemSetAttribute(doCreateItem(1387, t.main.positions.tp_to_paintball), "aid", 2880) else doSetItemActionId(doCreateItem(1387, t.main.positions.tp_to_paintball),2880) end if(t.main.event_config.event_duration > 0) then addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end end end if(string.upper(k[1]) == 'PLACAR') then local score = {} local output = "Voce Tem " .. getPlayerStorageValue(cid, t.main.storages.score) .. " pontos.\nVoce tem "..getPlayerStorageValue(cid, t.onShoot.storages.ammo).." munição.\n------------------\nAtual pontuaçao do evento Paintball é:\n" for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.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]) == 'MUNIÇÂO') then if(t.main.event_config.infinite_ammo) then doPlayerSendTextMessage(cid, 27, "Munições infinitas.") else if getPlayerStorageValue(cid, t.main.storages.score) > 0 then doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1) doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid,t.onShoot.storages.ammo)+t.main.event_config.ammo_per_point) doPlayerSendTextMessage(cid, 27, "You have received " .. t.main.event_config.ammo_per_point .. " bullets and you have lost 1 score point.") doSendMagicEffect(getCreaturePosition(cid),4) else doPlayerSendTextMessage(cid, 27, "Você não tem pontos suficientes para comprar munição, você precisa ".. 1-(getPlayerStorageValue(cid, t.main.storages.score)).. " mais.") end end end if (string.upper(k[1]) == 'TIRO') then if(getPlayerStorageValue(cid, t.main.storages.is_in_event) == 1) then if getPlayerStorageValue(cid, t.main.storages.exhaust) <= 1 then if(getPlayerStorageValue(cid, t.onShoot.storages.ammo) > 0) then if t.main.misc.status == 'on' then if(t.main.event_config.infinite_ammo == false) then doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, getPlayerStorageValue(cid, t.onShoot.storages.ammo)-1) end doPlayerSetStorageValue(cid, t.main.storages.exhaust, 2) lineAnimation(getPlayerLookDirection(cid),getCreaturePosition(cid),12,cid,1,0,1,0,0,0,1,0) addEvent(doPlayerSetStorageValue,t.onShoot.misc.bullets_exhaust, cid, t.main.storages.exhaust,1) end else doPlayerSendCancel(cid, "Você está fora de munição, troca de munição por pontos com munição tiro ou ser morto por uma recarga") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "A arma está em recarga") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "Você precisa estar no evento.") 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 = t.main.storages.exhaust 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, t.onShoot.misc.bullet_speed, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid) else var = 1 end else if var ~= 8 then addEvent(lineAnimation, t.onShoot.misc.bullet_speed, 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 killPlayer(cid,pos, killer) local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right 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)}) doSendMagicEffect(pos,2) doPlayerSendTextMessage(cid, 27, "Voce foi morto por "..getCreatureName(killer)..".") doPlayerSetStorageValue(killer, t.main.storages.score, getPlayerStorageValue(killer, t.main.storages.score)+t.main.event_config.points_per_kill) doPlayerSendTextMessage(killer, 27, "Você matou "..getCreatureName(cid)..".") doBroadcastMessage("[Event] Paintball: "..getCreatureName(killer).." matou "..getCreatureName(cid)..".", MESSAGE_STATUS_WARNING) if t.main.event_config.decrease_score_on_death then doPlayerSetStorageValue(cid, t.main.storages.score, getPlayerStorageValue(cid, t.main.storages.score)-1) end if t.main.event_config.reset_bullets_on_death then doPlayerSetStorageValue(cid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) end end function isInWallArray(pos) for k = 0, table.getn(t.onShoot.misc.walls_id) do if getTileItemById(pos, t.onShoot.misc.walls_id[k]).itemid == t.onShoot.misc.walls_id[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 endPaintball() local score = {} if not t.main.event_config.use_waiting_room then doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) end for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, t.main.storages.is_in_event) > 0 then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, t.main.storages.score)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event, 0) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, 0) doTeleportThing(pid, t.main.positions.event_ending_pos) end end table.sort(score, function(a, b) return a[2] > b[2] end) if table.getn(score) > 0 then if t.main.event_config.winner_gets_item then for _, pid in ipairs(getPlayersOnline()) do if getCreatureName(pid) == score[1][1] then doPlayerAddItem(pid, t.main.event_config.prize_item_id) break end end end doBroadcastMessage("Evento Painball acabou, "..score[1][1].." ganhou o evento com "..score[1][2].." pontos", MESSAGE_STATUS_WARNING) end end local t_l = t.main.positions.paintball_spawn_area.top_left local b_r = t.main.positions.paintball_spawn_area.bottom_right function moveToEvent() for _, pid in ipairs(getPlayersOnline()) do if isInRange(getCreaturePosition(pid), t.main.positions.waiting_room_area.top_left, t.main.positions.waiting_room_area.bottom_right) then 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)}) doPlayerSetStorageValue(pid, t.main.storages.is_in_event,1) doPlayerSetStorageValue(pid, t.onShoot.storages.ammo, t.main.event_config.min_bullets_on_spawn) doPlayerSetStorageValue(pid, t.main.storages.score, 0) doPlayerSendTextMessage(pid,27,"Bem Vindo ao evento Paintball, -> Comandos:\n!pb tiro -> Comando para atirar.\n!pb placar -> Mostra o Placar atual dos jogadores.") end end doRemoveItem(getTileItemById(t.main.positions.tp_to_paintball,1387).uid) addEvent(endPaintball, t.main.event_config.event_duration*1000*60) end ]]></talkaction> </mod> Scriptszinhos: Spoiler [CREATURESCRIPT] Auto TP depois de matar boss [ACTION] Clean Area [TALKACTION] !FelizAnoNovo [ACTION + MOVEMENT] Cartas ao GOD [CREATURESCRIPT] Always Emblem System [ACTION] Anihi simples [TALKACTIONS] Urinar / fazer xixi Não abandone seu tópico, quando você tiver a dúvida resolvida sozinho tente ensinar aos outros como resolve-la (você pode não ser o único com o problema) e quando ela for resolvida por outra pessoa não se esqueça de marcar como melhor resposta e deixar o gostei.
Postado Maio 11, 2017 8 anos Autor Vo testar aqui man vlw é que não manjo muito mas to aprendendo vlw mesmo Usei seu script ai mas não inicia o evento coloquei a hora correta e nada
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.