• 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!

Windows [8.6] War system

jareklodz

New Member
Joined
Feb 27, 2010
Messages
6
Reaction score
0
Hi. I got a problem with add war system.
I check many tutorials , ready scripts etc. and nothing.
Now i got situation got 2x guild one "Test" and second "Test2".
When i use command on guild chat (/war invite,Test,999) see on bordcast mesenge "19:37 Test has invited Test2 to war till 999 frags."
But when i try accept (/war accept,Test) on guild chat is "19:39 Currently there's no pending invitation for a war with Test."

Dont have any msg on server no any bugs.

Please help..

@Edit
The worst thing is I dont have any error in console. :/
 
Last edited:
Here's my talkaction/script/war.lua

Code:
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 less than 100k to accept this invitation.", TALKTYPE_CHANNEL_W, 0)
  return true
  end
  db.query("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.query(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 = 10
  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 is less than 100k for such payment.", TALKTYPE_CHANNEL_W, 0)
  return true
  end
  db.query("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.escapeString("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.query(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.query(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
 
Code:
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 == 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
Code:
GLobal Event Add
  <talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/>
 
i use script what u add and now have error in console
Code:
[10/05/2016 20:04:15] data/talkactions/scripts/war.lua:112: attempt to call field 'executeQuery' (a nil value)
[10/05/2016 20:04:15] stack traceback:
[10/05/2016 20:04:15]    data/talkactions/scripts/war.lua:112: in function <data/talkactions/scripts/war.lua:1>
 
i use some wierd.

Global Server , version 0.1.7 (Global Server )
Global Server 100% Full 8.60
Desenvolvido por Dener Diegoli e Amigos, Obrigado.

i download it from here
Code:
http://www.tibiaking.com/forum/topic/12439-mapa-global-full-com-rookgaard-e-island-of-destiny/
 
Back
Top