Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Boaas pessoal :)

Estou com um erro que não conseguir sanar, consegui resolver todos os outros mas esse está F###.

Estou seguindo esse tutorial:

http://tibiaking.com/forum/topic/8827-guild-war-com-escudos/

segue o erro:


[Error - TalkAction Interface]

data/talkactions/scripts/war.lua

Description:

(internalGetPlayerInfo) Player not found when requesting player info #11

war.lua:

getPlayerGuildId(cid)

function onSay(cid, words, param, channel)

		  if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then

				  doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0)

				  return true

		  end

		   local t = string.explode(param, ",")

		  if(not t[2]) then

				  doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0)

				  return true

		  end

		   local enemy = getGuildId(t[2])

		  if(not enemy) then

				  doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0)

				  return true

		  end

		   if(enemy == guild) then

				  doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0)

				  return true

		  end

		   local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy)

		  if(tmp:getID() ~= -1) then

				  enemyName = tmp:getDataString("name")

				  tmp:free()

		  end

		   if(isInArray({"accept", "reject", "cancel"}, t[1])) then

				  local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild

				  if(t[1] == "cancel") then

						  query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy

				  end

				   tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0")

				  if(tmp:getID() == -1) then

						  doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

						  return true

				  end

				   if(t[1] == "accept") then

						  local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

						  local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment")

						   _tmp:free()

						  if(state) then

								  doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0)

								  return true

						  end

						   db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild)

				  end

				   query = "UPDATE `guild_wars` SET "

				  local msg = "accepted " .. enemyName .. " invitation to war."

				  if(t[1] == "reject") then

						  query = query .. "`end` = " .. os.time() .. ", `status` = 2"

						  msg = "rejected " .. enemyName .. " invitation to war."

				  elseif(t[1] == "cancel") then

						  query = query .. "`end` = " .. os.time() .. ", `status` = 3"

						  msg = "canceled invitation to a war with " .. enemyName .. "."

				  else

						  query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1"

				  end

				   query = query .. " WHERE `id` = " .. tmp:getDataInt("id")

				  if(t[1] == "accept") then

						  doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD)

						  doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY)

				  end

				   tmp:free()

				  db.executeQuery(query)

				  doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE)

				  return true

		  end

		   if(t[1] == "invite") then

				  local str = ""

								  tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)")

								  if(tmp:getID() ~= -1) then

												  if(tmp:getDataInt("status") == 0) then

																  if(tmp:getDataInt("guild_id") == guild) then

																				  str = "You have already invited " .. enemyName .. " to war."

																  else

																				  str = enemyName .. " have already invited you to war."

																  end

						  else

								  str = "You are already on a war with " .. enemyName .. "."

						  end

						   tmp:free()

				  end

				   if(str ~= "") then

						  doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0)

						  return true

				  end

				   local frags = tonumber(t[3])

				  if(frags ~= nil) then

						  frags = math.max(10, math.min(1000, frags))

				  else

						  frags = 100

				  end

				   local payment = tonumber(t[4])

				  if(payment ~= nil) then

						  payment = math.max(100000, math.min(1000000000, payment))

						  tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

						   local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment

						  tmp:free()

						  if(state) then

								  doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0)

								  return true

						  end

						   db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild)

				  else

						  payment = 0

				  end

				   local begining, ending = os.time(), tonumber(t[5])

				  if(ending ~= nil and ending ~= 0) then

						  ending = begining + (ending * 86400)

				  else

						  ending = 0

				  end

				   db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");")

				  doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)

				  return true

		  end

		   if(not isInArray({"end", "finish"}, t[1])) then

				  return false

		  end

		   local status = (t[1] == "end" and 1 or 4)

		  tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status)

		  if(tmp:getID() ~= -1) then

				  local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id")

				  tmp:free()

				  doGuildRemoveEnemy(guild, enemy)

				  doGuildRemoveEnemy(enemy, guild)

				   db.executeQuery(query)

				  doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)

				  return true

		  end

		   if(status == 4) then

				  doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

				  return true

		  end

		   tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1")

		  if(tmp:getID() ~= -1) then

				  if(tmp:getDataInt("end") > 0) then

						  tmp:free()

						  doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

						  return true

				  end

				   local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id")

				  tmp:free()

				   db.executeQuery(query)

				  doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)

				  return true

		  end

		   doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

		  return true

  end

Editado por cosaki (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 2 months later...
  • 4 weeks later...

Pega o meu que é 100% e sem bugs Uu

Em lib coloca cria um arquivo chamado 101-war.lua e coloca:


WAR_GUILD = 0

WAR_ENEMY = 1

Em talkaction cria um arquivo chamado war.lua e coloca:

function onSay(cid, words, param, channel)

	 local guild = getPlayerGuildId(cid)

	 if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then

			 doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0)

			 return true

	 end


	 local t = string.explode(param, ",")

	 if(not t[2]) then

			 doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0)

			 return true

	 end


	 local enemy = getGuildId(t[2])

	 if(not enemy) then

			 doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0)

			 return true

	 end


	 if(enemy == guild) then

			 doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0)

			 return true

	 end


	 local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy)

	 if(tmp:getID() ~= -1) then

			 enemyName = tmp:getDataString("name")

			 tmp:free()

	 end


	 if(isInArray({"accept", "reject", "cancel"}, t[1])) then

			 local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild

			 if(t[1] == "cancel") then

					 query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy

			 end


			 tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0")

			 if(tmp:getID() == -1) then

					 doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

					 return true

			 end


			 if(t[1] == "accept") then

					 local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

					 local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment")


					 _tmp:free()

					 if(state) then

							 doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0)

							 return true

					 end


					 db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild)

			 end


			 query = "UPDATE `guild_wars` SET "

			 local msg = "accepted " .. enemyName .. " invitation to war."

			 if(t[1] == "reject") then

					 query = query .. "`end` = " .. os.time() .. ", `status` = 2"

					 msg = "rejected " .. enemyName .. " invitation to war."

			 elseif(t[1] == "cancel") then

					 query = query .. "`end` = " .. os.time() .. ", `status` = 3"

					 msg = "canceled invitation to a war with " .. enemyName .. "."

			 else

					 query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1"

			 end


			 query = query .. " WHERE `id` = " .. tmp:getDataInt("id")

			 if(t[1] == "accept") then

					 doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD)

					 doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY)

			 end


			 tmp:free()

			 db.executeQuery(query)

			 doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE)

			 return true

	 end


	 if(t[1] == "invite") then

			 local str = ""

			 tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)")

			 if(tmp:getID() ~= -1) then

					 if(tmp:getDataInt("status") == 0) then

							 if(tmp:getDataInt("guild_id") == guild) then

									 str = "You have already invited " .. enemyName .. " to war."

							 else

									 str = enemyName .. " have already invited you to war."

							 end

					 else

							 str = "You are already on a war with " .. enemyName .. "."

					 end


					 tmp:free()

			 end


			 if(str ~= "") then

					 doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0)

					 return true

			 end


			 local frags = tonumber(t[3])

			 if(frags ~= nil) then

					 frags = math.max(10, math.min(1000, frags))

			 else

					 frags = 100

			 end


			 local payment = tonumber(t[4])

			 if(payment ~= nil) then

					 payment = math.max(100000, math.min(1000000000, payment))

					 tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)


					 local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment

					 tmp:free()

					 if(state) then

							 doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0)

							 return true

					 end


					 db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild)

			 else

					 payment = 0

			 end


			 local begining, ending = os.time(), tonumber(t[5])

			 if(ending ~= nil and ending ~= 0) then

					 ending = begining + (ending * 86400)

			 else

					 ending = 0

			 end


			 db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");")

			 doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)

			 return true

	 end


	 if(not isInArray({"end", "finish"}, t[1])) then

			 return false

	 end


	 local status = (t[1] == "end" and 1 or 4)

	 tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status)

	 if(tmp:getID() ~= -1) then

			 local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id")

			 tmp:free()

			 doGuildRemoveEnemy(guild, enemy)

			 doGuildRemoveEnemy(enemy, guild)


			 db.executeQuery(query)

			 doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 3 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)

			 return true

	 end


	 if(status == 3) then

			 doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

			 return true

	 end


	 tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1")

	 if(tmp:getID() ~= -1) then

			 if(tmp:getDataInt("end") > 0) then

					 tmp:free()

					 doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

					 return true

			 end


			 local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id")

			 tmp:free()


			 db.executeQuery(query)

			 doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)

			 return true

	 end


	 doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)

	 return true

end

Agora no mesmo lugar, cria um arquivo chamado balance.lua e coloca:

local function isValidMoney(value)

	 if(value == nil) then

			 return false

	 end


	 return (value > 0 and value <= 99999999999999)

end


function onSay(cid, words, param, channel)

	 local guild = getPlayerGuildId(cid)

	 if(guild == 0) then

			 return false

	 end


	 local t = string.explode(param, ' ', 1)

	 if(getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER and isInArray({ 'pick' }, t[1])) then

			 if(t[1] == 'pick') then

					 local money = { tonumber(t[2]) }

					 if(not isValidMoney(money[1])) then

							 doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0)

							 return true

					 end


					 local result = db.getResult('SELECT `balance` FROM `guilds` WHERE `id` = ' .. guild)

					 if(result:getID() == -1) then

							 return false

					 end


					 money[2] = result:getDataLong('balance')

					 result:free()


					 if(money[1] > money[2]) then

							 doPlayerSendChannelMessage(cid, '', 'The balance is too low for such amount.', TALKTYPE_CHANNEL_W, 0)

							 return true

					 end


					 if(not db.executeQuery('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then

							 return false

					 end


					 doPlayerAddMoney(cid, money[1])

					 doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0)

			 else

					 doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0)

			 end

	 elseif(t[1] == 'donate') then

			 local money = tonumber(t[2])

			 if(not isValidMoney(money)) then

					 doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0)

					 return true

			 end


			 if(getPlayerMoney(cid) < money) then

					 doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0)

					 return true

			 end


			 if(not doPlayerRemoveMoney(cid, money)) then

					 return false

			 end


			 db.executeQuery('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')

			 doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0)

	 else

			 local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild)

			 if(result:getID() == -1) then

					 return false

			 end


			 doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0)

			 result:free()

	 end


	 return true

end

Agora em config.lua coloca (você coloca apenas se seu distro não tiver a função -D_War_System__):

WarSystem = true

GainExpForKillPlayer = true

EnemyTeamIgnorePvpByCommandTalkaction = false

Ps: não recomendo colocar no config.lua, aqui no meu projeto (custom RpG) deu uns bugs, ai precisarei criar uma lib, mais estou sem tempo intão.. Fica ao critério de vocês.

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por acesso123
      Ola, preciso de ajuda para resolver 4 problemas do meu site. Não funcionam [top fraggers, last kills, most powerfull guilds, guild war]. Procurei no forum e não encontrei nada igual ao problema do meu site, alguns relatam uma coisa e outra mas sem resolver, por isso preciso da ajuda de vocês por favor.
       
      1º Problema -> top fraggers: matei tanto no pk quanto na guild war e nada mostra no site.


       
       
      2º Problema -> last Kills: matei no pk e na war guild e nada mostra no site, apenas morte para monstro mostra.



       
       
      3º Problema -> guild war: matei varias vezes os dois personagens de guilds diferentes e não sai a pontação do zero. fica sempre 0x0.


          4º Problema -> most powerfull guilds: Não mostra guild nenhuma, apos concluir guild war e terem se matado. E tem 2 guilds criadas.



       
       
      Esse problema ocorreu no site, mas não sei verificar se tem possibilidade de ter algum erro na pasta do ot. Se alguem poder me ajudar.
       
      Agradeço desde já.
       
    • Por acesso123
      Ola, preciso de ajuda para resolver 4 problemas do meu site. Não funcionam [top fraggers, last kills, most powerfull guilds, guild war]. Procurei no forum e não encontrei nada igual ao problema do meu site, por isso preciso da ajuda de vocês por favor.
       
      1º Problema -> top fraggers:

       
       
      1.1


       
      2º Problema -> last Kills:


       
      2.1


       
       
      3º Problema -> guild war:


       
      3.1


       
      4º Problema -> most powerfull guilds:


       
      4.1


       
       
      São esses itens que estão dando problema, talvez seja nos scripts do jogo, mas não sei localizar na pasta do jogo, alguem pode me da uma ajuda nisso por favor?
       
      Agradeço desde já.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo