BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

[Pedido] Algun script tipo game code

[Pedido] Algun script tipo game code

#1 [Pedido] Algun script tipo game code el Lun Ene 27, 2014 12:19 am

NathanWirth


Nuevo
Hola a todos soy nuevo y estoy buscando un script que sea como un game code que cuando la persona diga el comando y el codigo le llegen 100 ccs a la backpack y ese codigo ya no sea valido.
Un ejemplo: yo con el god creo el codigo "KLJHK100" y ese otorga 100cc y yo se lo doy al player para que diga el comando "!gamecode KLJHK100" y le llegan los 100cc y ese codigo ya no sea valido y asi. Ademas que pueda crear varios codigos para que sean distintas cantidades de ccs por codigos para distintos players.

No se si me entienden pero me gustaria que alguien me pudiera ayudar con ese script.

Gracias

#2 Re: [Pedido] Algun script tipo game code el Lun Ene 27, 2014 10:32 am

CyberM


Scripter
Preguntamelo el miercoles por privado si nadie te lo hace aun

#3 Re: [Pedido] Algun script tipo game code el Lun Ene 27, 2014 12:02 pm

NathanWirth


Nuevo
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Preguntamelo el miercoles por privado si nadie te lo hace aun
Ok, gracias

#4 Re: [Pedido] Algun script tipo game code el Lun Ene 27, 2014 3:38 pm

Strack


Scripter
para generar codigos:

talkactions.xml
Código:
<talkaction words="!generateCode" access="5" event="script" value="generate_code.lua"/>

/scripts/generate_code.lua:
Código:

-- Credits Strack: http://otland.net/members/strack.41543/
-- (random string generator obtained from the Internet)
local Chars = {}
for Loop = 0, 255 do
   Chars[Loop+1] = string.char(Loop)
end
local String = table.concat(Chars)

local Built = {['.'] = Chars}

local AddLookup = function(CharSet)
   local Substitute = string.gsub(String, '[^'..CharSet..']', '')
   local Lookup = {}
   for Loop = 1, string.len(Substitute) do
       Lookup[Loop] = string.sub(Substitute, Loop, Loop)
   end
   Built[CharSet] = Lookup

   return Lookup
end

function string.random(Length, CharSet)
   -- Length (number)
   -- CharSet (string, optional); e.g. %l%d for lower case letters and digits

   local CharSet = CharSet or '.'

   if CharSet == '' then
      return ''
   else
      local Result = {}
      local Lookup = Built[CharSet] or AddLookup(CharSet)
      local Range = table.getn(Lookup)

      for Loop = 1,Length do
         Result[Loop] = Lookup[math.random(1, Range)]
      end

      return table.concat(Result)
   end
end

local function prepareTable()
   local statement = [[
      CREATE TABLE IF NOT EXISTS `game_codes` (
      `id` VARCHAR(8) NOT NULL,
      `reward` INT(5) NOT NULL DEFAULT '2160',
      `quantity` INT(3) NOT NULL DEFAULT '50',
      `active` INT(255) NOT NULL DEFAULT '1',
      PRIMARY KEY (`id`))
      ]]
   db.executeQuery(statement)
end

local function insertCodes(codes, rew, q)
   local statement = [[
      INSERT INTO `game_codes`
         (`id`, `reward`, `quantity`, `active`)
      VALUES]]
   for i, code in pairs(codes) do
      statement = statement.." ('"..code.."', '"..rew.."', '"..q.."', '1')"
      statement = statement..(i==#codes and ";" or ",")
   end
   local success = db.executeQuery(statement)
   if not success then
      codes = {}
      for i=1,10 do
         table.insert(codes,string.random(8,"%a%d"))
      end
      return insertCodes(codes, rew, q)
   end
return true
end

function onSay(cid, words, param, channel) -- !generateCode [reward, quanty]
   local t = string.explode(param, ",")
   local reward = t[1] or 2160
   local quanty = t[2] or 100   
   local codes = {}
   for i=1,10 do
      table.insert(codes,string.random(8,"%a%d"))
   end
   
   prepareTable()
   insertCodes(codes,reward,quanty)
   
   doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Codes generated successfully!")
return true
end

para recivir el premio:
talkactions.xml:
Código:

<talkaction words="!gamecode" event="script" value="code_reward.lua"/>

/scripts/code_reward.lua:
Código:

-- Credits Strack: http://otland.net/members/strack.41543/
local function getReward(code)
   local result
   local statement = [[
      SELECT reward, quantity
      FROM game_codes
      WHERE id = ']]..code..[['
      AND active = '1'
   ]]
   local query = db.getResult(statement)
   if query.id == 0 then
      result = {rew=query:getDataString("reward"),q=query:getDataString("quantity")}
      query:free()
      db.executeQuery("UPDATE game_codes SET active = '0' WHERE id = '"..code.."';")
   else
      result = 0
   end
   return result
end

function onSay(cid, words, param, channel) -- !generateCode [reward, quanty]
   local t = string.explode(param, ",")
   local code = t[1]
   
   if not code then
      return doPlayerSendTextMessage(cid,25,'You must specify a code to get a reward')
         and doSendMagicEffect(getCreaturePosition(cid),CONST_ME_POFF)
   end
   
   local result = getReward(code)
   if result == 0 then
      return doPlayerSendTextMessage(cid,25,'Invalid code!')
         and doSendMagicEffect(getCreaturePosition(cid),CONST_ME_POFF)
   end
   doPlayerAddItem(cid, result.rew, result.q)
   doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Here is your reward!")
return true
end

Lo primero que has de hacer con el god es decir:
Código:
!generateCode
Para generar 10 codigos nuevos en tu base de datos. Puedes especificarles el premio y la cantidad asi:
Código:
!generateCode 2160, 50 -- creará 10 codigos con premio 50 crystal coins

Y para que el player obtenga el premio dirá:
Código:

!gamecode 2f8OxoOE -- o el codigo que sea

Los codigos los podras ver en tu base de datos, tabla 'game_code', columna 'id'

Cualquier duda comenta

#5 Re: [Pedido] Algun script tipo game code el Lun Ene 27, 2014 5:27 pm

NathanWirth


Nuevo
[Tienes que estar registrado y conectado para ver este vínculo] escribió:
Los codigos los podras ver en tu base de datos, tabla 'game_code', columna 'id'

Cualquier duda comenta

Oye gracias por tu tiempo tengo una duda ese funciona solo con Sql o Mysql por que lo estaba testiando con sqlite y me daba error en la consola y se cerraba, te doy rep+ de ante mano.

#6 Re: [Pedido] Algun script tipo game code el Lun Ene 27, 2014 6:18 pm

Strack


Scripter
El codigo ha sido testeado para una BBDD en mysql, me temo que no estoy familiarizado con el codigo sqlite, no se que diferencias tiene asi que no puedo ayudarte con eso, sorry

#7 Re: [Pedido] Algun script tipo game code el Mar Ene 28, 2014 1:12 am

NathanWirth


Nuevo
[Tienes que estar registrado y conectado para ver este vínculo] escribió:El codigo ha sido testeado para una BBDD en mysql, me temo que no estoy familiarizado con el codigo sqlite, no se que diferencias tiene asi que no puedo ayudarte con eso, sorry

Lo probé con mysql y me funciono de maravillas gracias

#8 Re: [Pedido] Algun script tipo game code el Jue Feb 13, 2014 3:12 pm

DavidR


Moderador
Para SQLite:
Código:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Codes" version="1.0" author="Strack" enabled="yes">
   <talkaction words="!generateCode" event="script"><![CDATA[
   -- Credits Strack: http://otland.net/members/strack.41543/
   -- (random string generator obtained from the Internet)
   -- SQLite Port by Cbrm
   local Chars = {}
   for Loop = 0, 255 do
         Chars[Loop+1] = string.char(Loop)
   end
   local String = table.concat(Chars)
   
   local Built = {['.'] = Chars}
   
   local AddLookup = function(CharSet)
         local Substitute = string.gsub(String, '[^'..CharSet..']', '')
         local Lookup = {}
         for Loop = 1, string.len(Substitute) do
               Lookup[Loop] = string.sub(Substitute, Loop, Loop)
         end
         Built[CharSet] = Lookup
       
         return Lookup
   end
   
   function string.random(Length, CharSet)
     -- Length (number)
     -- CharSet (string, optional); e.g. %l%d for lower case letters and digits
   
         local CharSet = CharSet or '.'
   
         if CharSet == '' then
               return ''
         else
               local Result = {}
               local Lookup = Built[CharSet] or AddLookup(CharSet)
               local Range = table.getn(Lookup)
   
               for Loop = 1,Length do
                     Result[Loop] = Lookup[math.random(1, Range)]
               end
   
               return table.concat(Result)
         end
   end
   
   local function prepareTable()
         local statement = [[
               CREATE TABLE IF NOT EXISTS "game_codes" (
               "id" VARCHAR(8) NOT NULL,
               "reward" INT(5) NOT NULL DEFAULT 2160,
               "quantity" INT(3) NOT NULL DEFAULT 50,
               "active" INT(255) NOT NULL DEFAULT 1,
               PRIMARY KEY (`id`))
               ]]
         return db.executeQuery(statement)
   end
   
   local function insertCodes(codes, rew, q)
         local t = {}
         for i, code in pairs(codes) do
               statement = "INSERT INTO game_codes (id, reward, quantity, active) VALUES"
               statement = statement .. " ('" .. code .. "', " .. rew .. ", " .. q .. ", 1)"
               table.insert(t, statement)
         end
       
         local success = true
         for _, query in ipairs(t) do
               if not db.executeQuery(query) then
                     success = false
                     break
               end
         end
   
         if not success then
               codes = {}
               for i = 1, 10 do
                     table.insert(codes, string.random(8,"%a%d"))
               end
               return insertCodes(codes, rew, q)
         end
         return true
   end
   
   function onSay(cid, words, param, channel) -- !generateCode [reward, quanty]
         local t = string.explode(param, ",")
         local reward = t[1] or 2160
         local quanty = t[2] or 100 
         local codes = {}
         for i = 1, 10 do
               table.insert(codes, string.random(8, "%a%d"))
         end
    
         prepareTable()
         insertCodes(codes, reward, quanty)
       
         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Codes generated successfully!")
         return true
   end
   ]]></talkaction>
   <talkaction words="!gamecode" event="script"><![CDATA[
   -- Credits Strack: http://otland.net/members/strack.41543/
   -- SQLite Port by Cbrm
   local function getReward(code)
         local result
         local statement = [[
               SELECT reward, quantity
               FROM game_codes
               WHERE id = ']]..code..[['
               AND active = '1'
         ]]
         local query = db.getResult(statement)
         if query.id == 0 then
               result = {rew=query:getDataString("reward"),q=query:getDataString("quantity")}
               query:free()
               db.executeQuery("UPDATE game_codes SET active = 0 WHERE id = '" .. code .. "';")
               return result
         end
         return 0
   end
   
   function onSay(cid, words, param, channel) -- !generateCode [reward, quanty]
         local t = string.explode(param, ",")
         local code = t[1]
    
         if not code then
               doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
               return doPlayerSendTextMessage(cid, 25, 'You must specify a code to get a reward')
         end
    
         local result = getReward(code)
         if result == 0 then
               doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
               return doPlayerSendTextMessage(cid, 25, 'Invalid code!')
         end
       
         doPlayerAddItem(cid, result.rew, result.q)
         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Here is your reward!")
         return true
   end
   ]]></talkaction>
</mod>

(Modificado para SQLite por CyberM - Puesto en forma de MOD por mi...)

http://www.blacktibia.org/

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 1 usuario en línea: 0 Registrados, 0 Ocultos y 1 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 .