Ir para conteúdo
Entre para seguir isso  
Magus

Algumas funções

Recommended Posts

Magus    2
Magus

utf8Encode

 

Sintaxe:

utf8Encode( string str )

 

Funciona da mesma maneira que utf8_encode.

 

Valor retornado:

Retorna a string encodada para UTF-8.

 

[spoiler=Exemplo de Uso]

local str = utf8Encode("Vamos lá caçar!")
print(str) -- Vamos l& #225; ca& #231;ar& #33;

 

function utf8Encode(str)
   return string.gsub(str, "([^ %w])", function (s) return ""..s:byte()..";" end)
end

utf8Decode

 

Sintaxe:

utf8Decode( string str )

 

Funciona da mesma maneira que utf8_decode.

 

Valor retornado:

Retorna a string decodada de UTF-8 para ISO-8859-1.

 

[spoiler=Exemplo de Uso]

local str = utf8Decode("Vamos l& #225; ca& #231;ar& #33;")
print(str) -- Vamos lá caçar!

 

function utf8Decode(str)
   return string.gsub(str, "(%d+);", function(s) return s:char() end)
end

DoPlayerAddDepotItem

 

Sintaxe:

doPlayerAddDepotItem( int cid , mixed item [, mixed count ] )

 

A função adiciona o item e quantidade especificadas no depot do jogador cid, sendo que ambos item e quantidade podem ser inteiros ou tabela (array). O único contra da função é que é necessário que o jogador seja kickado, após ele voltar os itens estarão disponíveis.

 

Valor retornado:

Retorna true em sucesso e false em falha.

 

[spoiler=Exemplo de Uso]

local Item = 2400 --Magic Sword
if (doPlayerAddDepotItem(cid, Item) == TRUE) then
   Mensagem("Item adicionado com sucesso!")
else
   Mensagem("Houve um erro ao adicionar o item!")
end

local Item = {2400, 2148, 2152, 2160} -- Magic Sword, Gold Coin, Platinum Coin, Crystal Coin
local Qtdade = {1, 100, 10, 5} -- Count respectivo à ordem dos itens acima
doPlayerAddDepotItem(cid, Item, Qtdade)

 

function doPlayerAddDepotItem(cid, item, count)
   local item,count,pid = type(item)=="table" and item or {item},type(count)=="table" and count or {(count or 1)},getPlayerGUID(cid)
   doRemoveCreature(cid)
   for k,v in ipairs(item) do
       local ls = db.getResult("SELECT `sid` FROM `player_depotitems` WHERE `player_id` = "..pid.." ORDER BY `sid` DESC LIMIT 1")
       return db.executeQuery("INSERT INTO `player_depotitems` (`player_id`, `sid`, `pid`, `itemtype`, `count`, `attributes`) VALUES ("..pid..", "..(ls:getDataInt("sid")+1)..", 101, "..v..", "..count[k]..", '"..(count[k] > 1 and string.format("%x",count[k]) or '').."')") or false
   end
end

getInstantSpells

 

Sintaxe:

getInstantSpells([ int vocid ] )

 

Parecida com getPlayerInstantSpellsInfo(), porém procura todas as spells por vocação, não jogador. Se vocid não for definida, irá retornar todas as spells do servidor.

 

Valor retornado:

Retorna uma tabela com todas as magias encontradas e as seguintes chaves (words, name, level, mlevel, mana, manapercent) em sucesso ou table nil em falha.

 

[spoiler=Exemplo de Uso]TalkAction !spellsorcerer

function onSay(cid)
   local text = ""
   for k,v in ipairs(getInstantSpells(1)) do --Aqui vc configura o id da vocação
       text = text..v.name.."\nWords: "..v.words.."\nLevel: "..v.level.."\nMana: "..(v.mana == 0 and v.manapercent.."%" or v.mana).."\n\n"
   end
   doShowTextDialog(cid, 2175, string.trim(text))
end

 

function getInstantSpells(voc)
   local voc = voc and (getVocationInfo(voc).name or nil) or nil
   local spell = io.open(getDataDir().."/spells/spells.xml")
   local r,cts = {},spell:read("*a")
   for t,name,xml in string.gmatch(cts,'<(%a+) name="(.-)".->(.-)</[^s]') do
       if (t ~= "rune") then
           vocs = {""}
           for voc in string.gmatch(xml,'"(.-)"') do table.insert(vocs,voc) end
           if (isInArray(vocs,voc)) then table.insert(r,getInstantSpellInfo(name)) end
       end
   end
   spell:close()
   return r
end

setPlayerRecoveryKey

 

Sintaxe:

setPlayerRecoveryKey( int cid )

 

Define uma nova Recovery Key para o jogador cid, e não define RKs repetidas.

 

Valor retornado:

Retorna a string da nova recovery key em sucesso ou false em falha.

 

[spoiler=Exemplo de Uso]Talk !NewRK

function onSay(cid, words, param, channel)
   if (getPlayerStorageValue(cid, 78789) == -1) then
       local newRK = setPlayerRecoveryKey(cid)
       if (newRK) then
           Message("RK alterada com sucesso! Sua nova rk é: "..newRK)
           setPlayerStorageValue(cid, 78789, 1)
       else
           Message("Houve um erro ao setar a rk!")
       end
   else
       Message("Você já trocou de RK!")
   end
end

 

function setPlayerRecoveryKey(cid)
   local wd,newrk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",""
   for i = 0, 15 do
       tmp = math.random(1,#wd)
       newrk = newrk..string.sub(wd,tmp,tmp)
   end
   local newrk = string.gsub(newrk, "(....)", "%1-", 3)
   local keyexists = db.getResult("SELECT * FROM `accounts` WHERE `key` = '"..newrk.."'")
   if (keyexists:getID() ~= -1) then return setPlayerRecoveryKey(cid) end
   return db.executeQuery("UPDATE `accounts` SET `key` = '"..newrk.."' WHERE `id` = "..getPlayerAccountId(cid)) and newrk or false
end

Espero que seja útil! Abraços.

Compartilhar este post


Link para o post
Mithz    0
Mithz

Opa, bem útil, vai ajudar nas entregas de items vip =D

Obrigado aí Magus!

Compartilhar este post


Link para o post
de_bone    1
de_bone

Concerteza pode ser muito útil para Itens comprados pelo site. Mais prático que a bagunça que é o Shop System do Gesior.

Compartilhar este post


Link para o post
Fletch    0
Fletch

omagod omagod omagod omagod ^^

 

eu tava procurando que q era esses sid/pid/atributes pra add itens em depot a muitoooo tempo

 

sid é tipo a posição do item no dp certo? intão não tem q olhar se tem espaço pra ele por n? e se o depot tiver cheio? oO

 

e o pid? por que ele é sempre 101?

Editado por Fletch

Compartilhar este post


Link para o post
Mock    32
Mock

@maugs

quando adciona um item na BD dos depots, se o player estiver com o depot em uso o item nao fica salvo :S

Compartilhar este post


Link para o post
Magus    2
Magus
omagod omagod omagod omagod ^^

 

eu tava procurando que q era esses sid/pid/atributes pra add itens em depot a muitoooo tempo

 

sid é tipo a posição do item no dp certo? intão não tem q olhar se tem espaço pra ele por n? e se o depot tiver cheio? oO

 

e o pid? por que ele é sempre 101?

sid está mais para um pseudo-id do item, que não pode ser repetido, e serve para usar em pid. O pid não é sempre 101, ele delimita em qual container o item ficará.

 

Por exemplo, tendo a seguinte estrutura na tabela:

sid - pid - itemtype

101 0 2589 (Locker)

102 101 2594 (Depot Chest)

103 101 2400 (Magic Sword)

104 102 1988 (Backpack)

105 104 2696 (Cheese)

Depot Chest e Magic Sword ficam dentro de Locker, Backpack fica dentro de Depot Chest e Cheese dentro de Backpack.

 

Sacou?

 

@maugs

quando adciona um item na BD dos depots, se o player estiver com o depot em uso o item nao fica salvo :S

Salva sim porque antes o jogador é kickado. Não sendo kickado mexendo ou não no depot não adiciona (pelo menos foi o que eu testei).

Compartilhar este post


Link para o post
Mock    32
Mock

ai no caso de usar a função em um loop vai ficar dando print de erro, nao e melhor dar uma editada na função e antes do doRemoveCreature por um isPlayer?

Compartilhar este post


Link para o post
Pivizz    1
Pivizz

Muito bom.

Ele sempre adicionará no Depot ID 1?

Eu achei uma função como essa, para adicionar um item no DP. Trata-se do próprio servidor enviar um parcel para o player. Foi o único jeito que eu achei para que o item apareça na hora.

Mas a tua, eu acho que é melhor.

Compartilhar este post


Link para o post
Magus    2
Magus

Mock, não vai printar erros pois antes de kickar o jogador ele salva o ID dele, e isPlayer por que? o.O Sempre vai ser player

 

Pivizz, sempre vai adicionar no "Locker", acima do "Depot Chest" (a caixa cinza).

Compartilhar este post


Link para o post
Pivizz    1
Pivizz

Eu entendi isso, mas o que eu quis dizer com Depot ID é mesmo o Depot ID, a cidade que ele vai adicionar, por exemplo.

Compartilhar este post


Link para o post
Magus    2
Magus

Sem suporte a isso pois no servidor que eu testei tá em desuso essa coluna no banco de dados. Todo caso, a função em si é um mero exemplo, pra isso pode usar o getPlayerTownId() (acho que é assim) e aplicar lá hehe...

 

(Y)

Compartilhar este post


Link para o post
Nord    2
Nord

Boa Magus, vc é um dos magus dos scripts tbm.

Gostei pq aprendi coisas novas e não preciso me incomodar tentando fazer algo do tipo.

Compartilhar este post


Link para o post
kleyne    0
kleyne

mano.. pode tira uma duvida?

 

a onde eu adiciona esse player dposit? e pq sou novo e ja tenho site.. so nao onde eu adiciona esse?

Compartilhar este post


Link para o post
KwiiBy~    0
KwiiBy~

Opa valeu assim eu vou poder entregar items vip com mais facilidade :)

Compartilhar este post


Link para o post
Magus    2
Magus
mano.. pode tira uma duvida?

 

a onde eu adiciona esse player dposit? e pq sou novo e ja tenho site.. so nao onde eu adiciona esse?

Não são funções para sites, e sim para o servidor em si. Você adiciona em arquivos como "global.lua", "lib/functions.lua" ou no próprio script aonde deseja usar a função.

Compartilhar este post


Link para o post
lyndell    0
lyndell

Cara, nao sei porque, mas um tempo atráz eu tinha feito um shop system pro binni, eu usei exatamente a mesma coisa que vc, o sid + 1, e o pid 101, mas nao sei porque, as vezes nao dava, nao faço idéia porque.

 

Ai tentei com player_items, que iria direto pra bp do cara, tambem só funcionava as vezes, nao sei porque.

 

:/

 

Tanto que no site vc usou isso, e o binni me disse que nao funcionou

Compartilhar este post


Link para o post
Magus    2
Magus

Adicionei mais duas funções, utf8Decode() e utf8Encode(), podem ser úteis para alguns de nós que mexemos com XML (como foi pra mim :P)

Compartilhar este post


Link para o post
Mock    32
Mock

@magus

essas funçoes que você adcionou agora achei otimas, não sabiaque dava pra converter em uft8 ._.

Compartilhar este post


Link para o post
Fantom    1
Fantom

Sim,

Vão ser muito úteis,

Obrigado Magus,

Agora vai facilitar muito a vida de algumas pessoas rsrs!

Parabéns!

 

//~G.K~\\

Compartilhar este post


Link para o post
Shyzoul    0
Shyzoul

não entendi o doaddplayerdepotitem o player usa algum item para add? ou é mais para sites??

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×