Postado Julho 13, 2017 7 anos Saudações meus caros amigos do TK! Preciso da ajuda de algum gênio para um problema ! É o seguinte: eu tenho um evento no meu server que consiste em dividir 2 times (Green e Red), onde cada membro de cada time possui uma storage registrada justamente para diferenciar cada membro entre aliado e inimigo, isso vale para manter a cor do outfit, manter efeitos durante o evento, selecionar o vencedor, dentre outras funções. Mas então me surgiu uma ideia: por que não contar as kills dos players durante o evento? Basta eu criar um creaturescript que conte cada vez que eu matar um player (onKill), logo em seguida eu salvo uma globalstorage referente a cada time, diferenciando pela propria storage dos jogadores, faço um incremento a cada vez que um player matar um inimigo, e pronto! SÓ QUE NÃO !!!!! Eu fiz dessa forma, e realmente quando um player mata um inimigo o seu time recebe 1 ponto, só que se 2 ou mais players atacarem o mesmo inimigo e o matarem, o time recebe 2 ou mais pontos ! É como se o script tivesse contando os pontos pela quantidade de players atacando o inimigo e o matando, e não necessariamente contando a quantidade de inimigos mortos !!! Quem pode me ajudar nessa empreitada? Vou mandar o código que fiz : -- ativando funcao para red team local storageIdGreen = 10001 local storageIdRed = 10002 local storageID = 10100 local townid = 13 eventconfig = { GSR = 10400, GSG = 10600, narrow = 3 } function onKill(cid, target, lastHit) if isPlayer(cid) then if getPlayerStorageValue(cid, storageIdRed) == 1 then setGlobalStorageValue(eventconfig.GSR, getGlobalStorageValue(eventconfig.GSR)+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Booa ! Ponto pra sua equipe! Seu time possui "..getGlobalStorageValue(eventconfig.GSR).." pontos! Um vencedor precisa de "..eventconfig.narrow.." pontos !") end -- time verde matando if getPlayerStorageValue(cid, storageIdGreen) == 1 then setGlobalStorageValue(eventconfig.GSG, getGlobalStorageValue(eventconfig.GSG)+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Booa ! Ponto pra sua equipe! Seu time possui "..getGlobalStorageValue(eventconfig.GSG).." pontos! Um vencedor precisa de "..eventconfig.narrow.." pontos !") end Se alguém souber de alguma solução, ou de como tratar esses globalstorages, por favor, me ajudem! Baiak 24h -> www.baiakinfinity.ml
Postado Julho 13, 2017 7 anos faz por onPrepareDeath já que eu acho que o jogador não chega a morrer né? [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Julho 13, 2017 7 anos Autor Certo, eu tentei fazer ele por onPrepareDeath, até deu certo só que na hora de contar as kills na variável global ele explode kkkkk. Ele não conta da forma correta! Ex: Seu time recebeu ponto ! Total: [1] Seu time recebeu ponto ! Total: [2] Seu time recebeu ponto ! Total: [1] Seu time recebeu ponto ! Total: [1] ... e por aí vai... Eu imagino que seja porque essa variável global que eu criei lá nas libs (pasta libs) seja alguma string, porque quando eu tentei criar uma variável local pra testar um incremento e deixar ela recebendo o getGlobalStorageValue, o script explodiu, informando algo do tipo. Vou enviar o código atual com PrepareDeath: function onPrepareDeath(cid, deathList) local storageIdGreen = 10001 local storageIdRed = 10002 local config = { pos_rock_green = {x=489, y=281, z=7, stackpos=1}, pos_TP_green = {x=488, y=278, z=7, stackpos=1}, pos_rock_red = {x=479, y=278, z=7, stackpos=1}, pos_TP_red = {x=477, y=281, z=7, stackpos=1}, townid = 13 } if isPlayer(cid) then if getPlayerStorageValue(cid, storageIdRed) == 1 then setGlobalStorageValue(eventconfig.GSG, getGlobalStorageValue(eventconfig.GSG) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Total: ["..getGlobalStorageValue(eventconfig.GSR).."]") end if getPlayerStorageValue(cid, storageIdGreen) == 1 then setGlobalStorageValue(eventconfig.GSR, getGlobalStorageValue(eventconfig.GSR) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Total: ["..getGlobalStorageValue(eventconfig.GSG).."]") -- local getglob = getGlobalStorageValue(eventconfig.GSR) end -- for i = 1, #deathList do -- pid = deathList[i] -- if isPlayer(pid) then -- fim do evento if getGlobalStorageValue(eventconfig.GSR) >= eventconfig.narrow or getGlobalStorageValue(eventconfig.GSG) >= eventconfig.narrow then --criar as rocks para evitar players de entrarem no evento instantaneamente e confundirem o GM doCreateItem(1285,1,config.pos_rock_green) doCreateItem(1285,1,config.pos_TP_green) doCreateItem(1285,1,config.pos_rock_red) doCreateItem(1285,1,config.pos_TP_red) if getPlayerStorageValue(cid, storageIdRed) == 1 then doBroadcastMessage("{RED TEAM} é o vencedor do evento ! Total: ["..eventconfig.narrow.."] Kills !", 25) end if getPlayerStorageValue(cid, storageIdGreen) == 1 then doBroadcastMessage("{GREEN TEAM} é o vencedor do evento ! Total: ["..eventconfig.narrow.."] Kills !", 25) end for _, cid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(cid, storageIdRed) == 1 or getPlayerStorageValue(cid, storageIdGreen) == 1 then doTeleportThing(cid, getTownTemplePosition(config.townid)) if getGlobalStorageValue(eventconfig.GSG) ~= 0 then setGlobalStorageValue(eventconfig.GSG, 0) end if getGlobalStorageValue(eventconfig.GSR) ~= 0 then setGlobalStorageValue(eventconfig.GSR, 0) end end end end end return true end libs do evento (pasta libs): eventconfig = { GSR = 10400, GSG = 10600, narrow = 3 } ME ajuda kkkk :"( Editado Julho 13, 2017 7 anos por IceWar (veja o histórico de edições) Baiak 24h -> www.baiakinfinity.ml
Postado Julho 13, 2017 7 anos local storageIdGreen = 10001 local storageIdRed = 10002 local config = { pos_rock_green = {x=489, y=281, z=7, stackpos=1}, pos_TP_green = {x=488, y=278, z=7, stackpos=1}, pos_rock_red = {x=479, y=278, z=7, stackpos=1}, pos_TP_red = {x=477, y=281, z=7, stackpos=1}, townid = 13 } function onPrepareDeath(cid, deathList) if isPlayer(cid) and getPlayerStorageValue(cid, storageIdRed) > 0 or getPlayerStorageValue(cid, storageIdGreen) > 0 then local storage = getPlayerStorageValue(cid, storageIdRed) > 0 and eventconfig.GSG or eventconfig.GSR setGlobalStorageValue(storage, getGlobalStorageValue(storage)+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce deu ponto para a equipe adversaria ! Total: ["..getGlobalStorageValue(storage).."]") if getGlobalStorageValue(storage) == eventconfig.narrow then doCreateItem(1285,1,config.pos_rock_green) doCreateItem(1285,1,config.pos_TP_green) doCreateItem(1285,1,config.pos_rock_red) doCreateItem(1285,1,config.pos_TP_red) doBroadcastMessage("O "..(storage == eventconfig.GSG and "{RED TEAM}" or "{GREEN TEAM}").." é o vencedor do evento ! Total: ["..eventconfig.narrow.."] Kills !", 25) for _, cid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(cid, storageIdRed) > 0 or getPlayerStorageValue(cid, storageIdGreen) > 0 then doTeleportThing(cid, getTownTemplePosition(config.townid)) end end setGlobalStorageValue(eventconfig.GSG, 0) setGlobalStorageValue(eventconfig.GSR, 0) end end return true end [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Julho 13, 2017 7 anos Autor O script continua não contando as mortes mano Fiz o teste aqui, atacando com 1 player ou com 2, ele não conta as mortes, sempre [1]. Baiak 24h -> www.baiakinfinity.ml
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.