BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

Pedido de script

Pedido de script

#1 Pedido de script el Miér Feb 27, 2013 12:50 pm

Sirakx


Moderador
Hola..! Disculpen quien me puede pasar el script para crear una guild Y por ende también el comando !createguild o como sea, También el de war, El script que sea pero que funcione

Grasias



[Tienes que estar registrado y conectado para ver esa imagen]
http://celesta-global.net/

#2 Re: Pedido de script el Miér Feb 27, 2013 4:52 pm

GOD Suimty


Moderador
Talkactions.xml
Código:
   <!-- Guilds -->
   <talkaction access="0-3" words="!createguild;/createguild" event="function" value="guildCreate"/>
   <talkaction access="0-3" words="!joinguild;/joinguild" event="function" value="guildJoin"/>
   <talkaction access="0-3" words="/war" channel="0" event="script" value="war.lua"/>
   <talkaction access="0-3" words="/balance" channel="0" event="script" value="balance.lua"/>

Lo de las guilds no necesita scripts. Sólo las wars:

war.lua:
Código:
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_HIGHLIGHT, CHANNEL_GUILD)
      return true
   end

   local t = string.explode(param, ",")
   if(not t[2]) then
      doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_HIGHLIGHT, CHANNEL_GUILD)
      return true
   end

   local enemy = getGuildId(t[2])
   if(not enemy) then
      doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_HIGHLIGHT, CHANNEL_GUILD)
      return true
   end

   if(enemy == guild) then
      doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_HIGHLIGHT, CHANNEL_GUILD)
      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_HIGHLIGHT, CHANNEL_GUILD)
         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_HIGHLIGHT, CHANNEL_GUILD)
            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_HIGHLIGHT, CHANNEL_GUILD)
         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_HIGHLIGHT, CHANNEL_GUILD)
            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_HIGHLIGHT, CHANNEL_GUILD)
      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_HIGHLIGHT, CHANNEL_GUILD)
         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_HIGHLIGHT, CHANNEL_GUILD)
   return true
end

balance.lua:
Código:
local function isValidMoney(value)
   if(value == nil) then
      return false
   end

   return (value > 0 and value <= 99999999999999)
end

function onSay(cid, words, param, channel)
   if(not checkExhausted(cid, 666, 10)) then
      return false
   end

   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_HIGHLIGHT, CHANNEL_GUILD)
            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_HIGHLIGHT, CHANNEL_GUILD)
            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_HIGHLIGHT, CHANNEL_GUILD)
      else
         doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_HIGHLIGHT, CHANNEL_GUILD)
      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_HIGHLIGHT, CHANNEL_GUILD)
         return true
      end

      if(getPlayerMoney(cid) < money) then
         doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_HIGHLIGHT, CHANNEL_GUILD)
         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_HIGHLIGHT, CHANNEL_GUILD)
   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_HIGHLIGHT, CHANNEL_GUILD)
      result:free()
   end

   return true
end

Espero mi +REP ^^



[Tienes que estar registrado y conectado para ver esa imagen]
http://sdrakos.servegame.com

#3 gracias GOD Suimty el Jue Oct 06, 2016 1:36 pm

Sempai


Novato
Rep+10/10

me sirvió muchas gracias

#4 Re: Pedido de script Hoy a las 8:18 pm

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.

 

¿Quién está en línea?

En total hay 0 usuarios en línea: 0 Registrados, 0 Ocultos y 0 Invitado

Usuarios navegando en este foro: Ninguno

Forum Statistics

Nuestros miembros han públicado un total de posts en temas.
Actualmente hay miembros registrados.
Démosle la bienvenida al miembro más reciente,
La mayor cantidad de usuarios en línea ha sido de .