• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Fast Help

megazx

Graphic designer
Joined
Mar 4, 2013
Messages
444
Solutions
2
Reaction score
32
Location
Egypt
[14/06/2013 17:56:19] [Error - TalkAction Interface]
[14/06/2013 17:56:19] data/talkactions/scripts/war.lua
[14/06/2013 17:56:19] Description:
[14/06/2013 17:56:19] (internalGetPlayerInfo) Player not found when requesting player info #11


PHP:
local guild = 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
 
This caused by the function getPlayerGuildName(cid) that you are using in your broadcast messages.

Try this:
LUA:
local guild = getPlayerGuildId(cid)
local playerGuildName = nil
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
		
	  if(isPlayer(cid)) then
	      playerGuildName = getPlayerGuildName(cid)
	  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)
		  if(playerGuildName ~= nil) then
			doBroadcastMessage(playerGuildName .. " has " .. msg, MESSAGE_EVENT_ADVANCE)
		  end	
          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 .. ");")
		   if(playerGuildName ~= nil) then
				doBroadcastMessage(playerGuildName .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)
			end	
          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)
		   if(playerGuildName ~= nil) then
				doBroadcastMessage(playerGuildName .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
			end	
          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)
		  if(playerGuildName ~= nil) then
				doBroadcastMessage(playerGuildName .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
		  end		
          return true
      end

       doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
      return true
  end
 
Back
Top