[Resurse]Sistem Vouchere

Deconectat
Avatar utilizator
Western
Nivel 3
Nivel 3
Mesaje: 339
Membru din: 30 Iul 2013
Localitate: Craiova
Status: Va urma ...
Mulțumiri acordate: 0
Mulțumiri primite: 14
Contact:

[Resurse]Sistem Vouchere

Mesajde Western » 24 Aug 2015, 12:59

Mai întâi aceţi nevoie de nişte funcţii.
Funcţie pentru cei care nu folosesc sursa:
Adăugaţi în QuestLib.lua din /locale/xx aceste 2 funcţii la sfârşitul fişierului:
mysql query şi split.

Cod: Selectaţi tot

function split(str, delim, maxNb)
    if str == nil then return str end
    if string.find(str, delim) == nil then return { str } end
    if maxNb == nil or maxNb < 1 then maxNb = 0 end
    local result = {}
    local pat = "(.-)" .. delim .. "()"
    local nb = 0
    local lastPos
    for part, pos in string.gfind(str, pat) do
        nb = nb + 1
        result[nb] = part
        lastPos = pos
        if nb == maxNb then break end
    end
    if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end
    return result
end

mysql_query = function(query)
    if not pre then
        local rt = io.open('CONFIG','r'):read('*all')
        pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
    end
    math.randomseed(os.time())
    local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
    -- os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51
    os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
    for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
    for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
        out[i-1]               = out[i-1] or {}
        out[i-1][a]            = tonumber(b) or b or 'NULL'
        out[t[1][a]]           = out[t[1][a]] or {}
        out[t[1][a]][i-1]      = tonumber(b) or b or 'NULL'
    end) end
    return out
end


Funcţii pentru cei care folosesc sursa:
Intraţi în questlua_game.cpp şi căutaţi:

Cod: Selectaţi tot

int game_web_mall(lua_State* L)

Sub toată funcţia asta adăugaţi următoarea funcţie.

Cod: Selectaţi tot

   int game_query(lua_State* L)
   {
      const char * str = lua_tostring(L, 1);
      SQLMsg * msg = DBManager::instance().DirectQuery(str);
      MYSQL_RES * res = msg->Get()->pSQLResult;
      
      if (!res)
      {
         lua_pushnil(L);
         return 0;
      }
      
      unsigned int nfields = mysql_num_fields(res);
      std::map<char*,unsigned int> map_fieldName_key;
      MYSQL_FIELD* field;

      for (unsigned int i = 0; i < nfields; i++)
      {
         field=mysql_fetch_field(res);
         char * name = field->name;
         map_fieldName_key[name] = i;
      }

      lua_newtable(L);
      int next_row = 1;
      MYSQL_ROW row;

      while ((row = mysql_fetch_row(res)))
      {
         lua_newtable(L);
         
         for (std::map<char *,unsigned int>::iterator it = map_fieldName_key.begin(); it != map_fieldName_key.end(); it++)
         {
            lua_pushstring(L, it->first);
            lua_pushstring(L, row[it->second]);
            lua_settable(L, -3);
         }
         
         lua_rawseti(L, -2 , next_row);
         next_row++;
      }
      
      return 1;
   }

Acum căutaţi:

Cod: Selectaţi tot

{ "open_web_mall",            game_web_mall               },

Şi sub el băgaţi:

Cod: Selectaţi tot

{ "query",                  game_query                  },

Salvaţi şi compilaţi!

Acum quest-urile!!
Quest pentru cei care nu folosesc sursa:

Cod: Selectaţi tot

quest give_md begin
   state start begin
      when 80014.use begin
         say_title("Voucher 50MD")
         say()
         say("Chiar vrei sa folosesti acest voucher?")
         say()
         local s = select("Da","Nu")
         if s == 1 then
            give_md.give_coins(50)
            pc.remove_item(80014, 1)
         else
            return
         end
      end
      
      when 80015.use begin
         say_title("Voucher 100MD")
         say()
         say("Chiar vrei sa folosesti acest voucher?")
         say()
         local s = select("Da","Nu")
         if s == 1 then
            give_md.give_coins(100)
            pc.remove_item(80015, 1)
         else
            return
         end
      end
      
      when 80016.use begin
         say_title("Voucher 500MD")
         say()
         say("Chiar vrei sa folosesti acest voucher?")
         say()
         local s = select("Da","Nu")
         if s == 1 then
            give_md.give_coins(500)
            pc.remove_item(80016, 1)
         else
            return
         end
      end
      
      when 80017.use begin
         say_title("Voucher 50MD")
         say()
         say("Chiar vrei sa folosesti acest voucher?")
         say()
         local s = select("Da","Nu")
         if s == 1 then
            give_md.give_coins(1000)
            pc.remove_item(80017, 1)
         else
            return
         end
      end
      
      function give_coins(x)
         mysql_query("UPDATE account SET coins = coins + "..x.." WHERE id = "..pc.get_account_id())
      end
   end
end


Quest pentru cei care folosesc sursa:

Cod: Selectaţi tot

quest give_md begin
   state start begin
      when 80014.use begin
         say_title("Voucher 50MD")
         say()
         say("Chiar vrei sa folosesti acest voucher?")
         say()
         local s = select("Da","Nu")
         if s == 1 then
            give_md.give_coins(50)
            pc.remove_item(80014, 1)
         else
            return
         end
      end
      
      when 80015.use begin
         say_title("Voucher 100MD")
         say()
         say("Chiar vrei sa folosesti acest voucher?")
         say()
         local s = select("Da","Nu")
         if s == 1 then
            give_md.give_coins(100)
            pc.remove_item(80015, 1)
         else
            return
         end
      end
      
      when 80016.use begin
         say_title("Voucher 500MD")
         say()
         say("Chiar vrei sa folosesti acest voucher?")
         say()
         local s = select("Da","Nu")
         if s == 1 then
            give_md.give_coins(500)
            pc.remove_item(80016, 1)
         else
            return
         end
      end
      
      when 80017.use begin
         say_title("Voucher 50MD")
         say()
         say("Chiar vrei sa folosesti acest voucher?")
         say()
         local s = select("Da","Nu")
         if s == 1 then
            give_md.give_coins(1000)
            pc.remove_item(80017, 1)
         else
            return
         end
      end
      
      function give_coins(x)
         game.query("UPDATE account SET coins = coins + "..x.." WHERE id = "..pc.get_account_id())
      end
   end
end


Credite: Morphe

Deconectat
Avatar utilizator
Nazox
Nou Venit
Nou Venit
Mesaje: 19
Membru din: 28 Iul 2015
Status: lol
Server Metin2: metin2.es
Regat: Jinno
Mulțumiri acordate: 1
Mulțumiri primite: 0

Re: [Resurse]Sistem Vouchere

Mesajde Nazox » 24 Aug 2015, 22:37

thanks

Deconectat
Avatar utilizator
[GF]ByZu
Utilizator interzis !
Utilizator interzis !
Mesaje: 74
Membru din: 10 Dec 2015
Status: Cioc-cioc! - Cine-i ? - Berea ! - Intră
Server Metin2: Metin2 InStyle
Regat: Chunjo
Mulțumiri acordate: 0
Mulțumiri primite: 0

Re: [Resurse]Sistem Vouchere

Mesajde [GF]ByZu » 11 Dec 2015, 10:43

mie-mi dă eroare când vreau să le deschid ! în putty
ERROR 1146 (42S02) at line 1: Table 'player.account' doesn't exist
Trebuie să fii logat sau înregistrat pentru a vedea acest link.
Imagine

E simplu ca dracu, de-al dracu nu tac vreau să fac in viaţă doar ce vreau să fac.

Deconectat
Avatar utilizator
metin2wizard
Nou Venit
Nou Venit
Mesaje: 38
Membru din: 18 Dec 2015
Status: Sunt bine mersi ^.^
Server Metin2: sdadsf
Regat: Chunjo
Mulțumiri acordate: 0
Mulțumiri primite: 0

Re: [Resurse]Sistem Vouchere

Mesajde metin2wizard » 22 Dec 2015, 18:48

Si mie la fel :(


Înapoi la “Altele”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 5 vizitatori