Ir para conteúdo

Featured Replies

Postado

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

  • Respostas 16
  • Visualizações 937
  • Created
  • Última resposta

Top Posters In This Topic

Postado
  • 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 por IceWar (veja o histórico de edições)

Baiak 24h -> www.baiakinfinity.ml

Postado
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

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Postado
  • 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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo