Ir para conteúdo
Poccnn

tfs 0.3 Tutorial Coroutine Lua

Recommended Posts

Fala Xtibianos. 
Nesse tutorial, gostaria de explicar um pouco sobre coroutine e seu uso. 

 

Irei começar com uma lista de funções da coroutine. 

Citar

coroutine.create (f)               cria uma nova coroutine com uma função lua valida. 
coroutine.yield (···)                suspende a execução da coroutine. 
coroutine.resume (co [, val1, ···])    passa os valores para a coroutine. 
coroutine.running ()                pega a coroutine que esteja em execução. 
coroutine.status (co)                return "suspended", "running" ou "dead"
coroutine.wrap (f)                   cria uma nova coroutine no corpo com uma função lua valida. 

 

Irei começa falando sobre a principal função da coroutine. 

Citar

coroutine.create (f) 

 

No corpo dessa função, voce precisa declarar pontos para "suspender" a execução da coroutine. 

 

Ao criar a coroutine, ela se encontra no estado "suspended", ou seja, parada/pausada. 


para iniciar a coroutine, voce precisa ativar ela usando a função: 

Citar

coroutine.resume (co [, val1, ···]) 

 

Além de ativar/reativar a coroutine, você passa valores para a função da coroutine. 
A primeira ativação da coroutine, os argumentos passados não poderão ser modificados, ficam estáticos nos parâmetros da função. 

 

Citar

 

co = coroutine.create(function(a,b) 
-- verificando o estatus da coroutine. 
   print(coroutine.status(coroutine.running())) -- "running" 
   coroutine.yield(a+b) -- primeira chamada 
   coroutine.yield(a-b) -- segunda chamada 
   return a,b,"Fim da coroutine." -- chamada final usando return (facultativo). 
end) 

 

-- verificando o estatus da coroutine. 
print(coroutine.status(co))       -- "suspended" 
print(coroutine.resume(co,5,2))    -- saida >> 7 >> 5+2 
print(coroutine.resume(co,1,8))    -- saida >> 3 >> ??? 1-8 = -7 
print(coroutine.resume(co,9,55))   -- saida >> 5,2, Fim da coroutine. >> veja que são os valores passados na primeira chamada. 
-- verificando o estatus da coroutine. 
print(coroutine.status(co))       -- "dead" 

 

 

Veja que o resultado da segunda chamada não coincidem com os valores passados. Isso se dá devido aos parâmetros da função impregada na coroutine, não modificar seus valores. uma vez declarados os valores, eles não poderão ser modificados. 

 

uma chamada de coroutine a mais da quantidade de yield's existente na coroutine.

Citar

print(coroutine.resume(co,9,55))   -- saida >> cannot resume dead coroutine

 

Como demonstrado acima, ao exceder a quantidade de yield's, ela retorna essa mensagem (sem disparar erro no console). 

 

Agora você deva estar se perguntando: Então como fazer para pegar os valores que são passados em cada ativação? 


Vou explicar agora: 

a função yield pega os valores fornecidos e retorna-os; então você pode pegar esses valores usando variaveis para armazena-los. 

Citar

 

co = coroutine.create(function(a,b) 
   b,c = coroutine.yield(a+b) -- primeira chamada 
   c,d = coroutine.yield(b-c) -- segunda chamada. veja que modifiquei os parametros usados. 
   return c,d,"Fim da coroutine." -- chamada final usando return (facultativo). 
end) 

print(coroutine.resume(co,5,2))    -- saida >> 7 >> 5+2 
print(coroutine.resume(co,1,8))    -- saida >> -7 >> 1-8 << agora o resultado está certo, pois foi usados os valores passados pela segunda chamada. 
print(coroutine.resume(co,9,55))   -- saida >> 9,55, Fim da coroutine. << os dois numerais, são os valores passados na ultima chamada.

 

 

 

Mas, no corpo da função criada para a coroutine, você pode fazer chamadas a funções, pegar valores de variaveis globais, etc; sempre usando a função yield para "suspender" a coroutine. 

 

Citar

 

function add(a,b) 
   return coroutine.yield(a+b,"Valor retornado pela função add()") 
end 

m,n = 2,3 

co = coroutine.create(function(a,b) 
   c,d = add(a,b) 
   e,f = add(m,n) 
   return e,f, "Fim da coroutine." -- retorna os valores da ultima chamada. 
end) 

print(coroutine.resume(co,5,2))    -- saida >> 7, "Valor retornado pela função add()" >> 5+2 
print(coroutine.resume(co,1,8))    -- saida >> 5 >> "Valor retornado pela função add()" >> valores pegos das variaveis externa 'm' e 'n' >> 2+3 
print(coroutine.resume(co,9,55))   -- saida >> 9,55, Fim da coroutine. << os dois numerais, são os valores passados na ultima chamada.

 

 

Agora só falta comentar sobre a função: 

Citar

coroutine.wrap(f)

 
Assim como coroutine.create, a função auxiliar coroutine.wrap cria uma nova co-rotina, mas ao invés de retornar uma referência para a co-rotina, retorna uma função que, quando chamada, (re)invoca a co- rotina. 


De forma geral, a função coroutine.wrap oferece uma maior conveniência que coroutine.create; ela provê exatamente o que é usualmente necessario: uma função para reativar uma co-rotina. Por outro lado, o uso das funções coroutine.create e coroutine.resume permite o gerenciamento de erros (funções estas que não podem ser usada por wrap). 

 

Citar

 

-- fatorar o valor 
function fatorar(n) 
   if n > 1 then 
      coroutine.yield(n) 
      fatorar(n/2) -- recursividade 
   end 
end 

-- iterador 
iterator = coroutine.wrap(function(value) 
      fatorar(value) 
   end) 

print(iterator(32)) -- 32 
print(iterator())   -- 16 
print(iterator())   -- 8 
print(iterator())   -- 4 
print(iterator())   -- 2 
print(iterator())   -- 1 
print(iterator())   -- Disparado erro com mensagem: "cannot resume dead coroutine". 

 


A função retornada por coroutine.wrap não captura erros; qualquer erro provocado pela execução da co-rotina é propagado a seu chamador. 

 

É isso ai pessoal, espero que tenham gostado. qualquer duvida, sugestão ou critica, deixem nos comentários. 
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom @Poccnn, sempre trazendo boas novidades relacionada a área de lua.

 

Queria eu poder exercer, mas é tenso aprender só :S.

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, Poccnn disse:

@kttallan

Qual sua dificuldade em aprender? 

Bom eu fazia codigos antigamente, participei da primeira escolinha de scripting do xtibia a qual o roksas era o professor aprendi tudo até criar funções, hoje sei da logica só que não sei muito sobre.

 

For, While e Repeat e Strings, Table, Creio que o resto eu saiba como criar funções etcs..

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigao vc e genial porem sou um pouco leigo na area de programação.. poderia me explicar oque seria coroutine e em que tipo de situação é aplicado?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 08/12/2016 at 21:33, newFag disse:

O que é uma corrotina em lua? É tipo um thread?

 

Não é uma thread. É um processo executado em modo separado.

 

1 hora atrás, Everson Miranda disse:

amigao vc e genial porem sou um pouco leigo na area de programação.. poderia me explicar oque seria coroutine e em que tipo de situação é aplicado?

 

Coroutine é uma forma de criar um processo que oode parar sua execução a qualquer momento e podendo retornar a execução a pedido do sistema.

É difícil fazer uma implementação dela no mundo do ot server, mas eu fiz essa:

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro membro,

Seu tópico foi movido de

Registre-se para ver link(s).

 para

Registre-se para ver link(s).

.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora


  • Conteúdo Similar

    • Por Sammy
      Olá pessoal, vi esse tutorial em um site gringo sobre a parte básica dos módulos de um otclient, que pode auxiliar muita gente que quiser explorar ainda mais o Otclient, já que essa área eu não vejo tanto conteúdo no Tibia Br, como sempre os créditos estarão ao final do tópico...
       
       
      Então, para começar as coisas que eu vou estar cobrindo:
      - a criação de módulos.
      - repassar alguns dos fundamentos para trabalhar no ambiente otclients lua. como testar eficientemente seus módulos e scripts.
       
       
      Para este tutorial você vai precisar:

      - Um editor de texto de algum tipo (eu gosto de usar o Notepad + +)
      também seria bom ter conhecimentos básicos de lua e habilidades de programação (mas isso é algo que você pode pegar rapidamente praticando).
       
      Agora que já temos tudo o que precisamos, podemos começar !
       
      CRIANDO O NOVO MÓDULO
       
       
      Otclient front-end funciona fora o que chamamos de ' módulos '. Os módulos são uma forma de implementar eficazmente os recursos do cliente separados uns dos outros. Se você está considerando a criação de um novo módulo, é aconselhável que você pense sobre o que o recurso pode ser e se ele iria caber em um módulo já existente (provavelmente um módulo game_xxx), os módulos são encontrados no diretório/modules do otclient.
      Seus são atualmente dois módulo ' ambientes ': jogo e cliente. Os módulos de jogo usam o prefixo game_ e devem estar refletindo recursos que se relacionam especificamente com os recursos do ambiente do jogador ou do jogo por exemplo game_outfit ou game_mounts são ambos os recursos que são usados no ambiente de jogo. Os módulos de cliente usam o prefixo client_ e devem estar refletindo recursos que se relacionam especificamente com o cliente e o cliente somente. Ele não tem nada a ver com o ambiente de jogo de jogadores, por exemplo, client_options e client_skins estão diretamente relacionados com a funcionalidade de clientes. Isso pode ser um pouco difícil de Visualizar para agora, mas você vai pegar isso mais tarde.
      Então, agora que você tem uma compreensão do que é um módulo e um pouco como eles funcionam, vamos em frente e começar a criar um novo.
       
      COMEÇANDO DO ZERO
       
       
      Nós estamos indo para criar um novo módulo a partir do zero, a primeira coisa que você precisa fazer é criar o diretório modules. O nome do diretório deve refletir o recurso global em si, por isso vamos chamar o nosso game_spells para começar a criar um novo módulo que irá listar todos os players spells com suas informações apropriadas. Nós não estaremos criando este módulo inteiro, mas podemos começar a ver como tudo funciona.
       
      Crie um novo diretório chamado game_spells dentro do diretório/Modules clientes.

      Dentro de game_spells precisamos começar adicionando 3 novos arquivos base: Spells. lua, feitiços. otmod e Spells. otui para a lógica de módulos, registro e design de interface.
       
      Criar 3 novos arquivos base spells.lua, spells.otmod e spells.otui dentro/modules/game_spells
      Você já deve saber o que o arquivo. lua representa, mas quais são essas novas extensões. otmod e. otui?
       
      .otmod
       
      .otmod é o arquivo que é usado para inicializar o módulo dentro do otclient, é como um registro em que ele irá registrar o módulo para uso dentro do cliente. Este arquivo geralmente tem uma estrutura como esta (eu adicionei comentários, se você copiar este código não se esqueça de remover o--comments):
      Module nome: game_spells -- nome do módulo (geralmente o mesmo nome que o diretório modules. descrição: Exibir a player spell com sua informação apropriada--descrição do módulo que explica o que é. autor: Sammy -- nomes dos criadores e colaboradores do módulo. website: www.otclient.info -- Se você tem um site externo que você pode ligá-lo aqui. sandboxed: true--sandbox é uma maneira de conter a variável modules e funções para que você não tenha conflitos entre outros módulos. scripts: [ spells.lua ] -- Os scripts são a lógica por trás do módulo onde todas as funções estão contidas. @onLoad: init() -- Este é o lugar onde você define a função de inicialização do módulo (nós vamos cobrir isso mais tarde). @onUnload: terminate() -- Este é o lugar onde você define a função de término do módulo (vamos cobrir isso mais tarde) Copie o código .otmod acima em seu arquivo spells.otmod e remova os comentários.
       
      .otui
       
      .otui é o arquivo que é usado para criar a interface de usuário modules. Esta é uma linguagem de estilo feito encomenda projetado especificamente para otclient chamado OTML, ele se sente muito como a formatação CSS para aqueles de vocês que têm experiência em webdesign. A estrutura típica de um arquivo .otui se parece com isso (este é o arquivo base iniciar, não concluído):
       
      MainWindow !text: tr('Spells') size: 160 450 @onEnter: modules.game_spells.destroy() @onEscape: modules.game_spells.destroy() Label id: spellsLabel !text: tr('Player Spells') width: 130 anchors.top: prev.top anchors.left: prev.left margin-top: 5 margin-left: 5 MainWindow: 
      Esta é a janela que estaremos usando para a interface da Spell List, é uma classe de janela padrão derivado de/client_skins/default/styles/windows.otui styling file estende janela que estende UIWindow. UIWindow é uma classe base dessa inicialização, ele controla a funcionalidade widgets e comportamentos.
       
      !text: Este é o texto que é exibido na seção de cabeçalho MainWindow
      size:  isso é usado para definir a largura/altura da mainwindow.
      @onEnter: configura o retorno de chamada de widgets de MainWindow OnEnter (função que será chamada quando você pressiona a tecla Enter).
      @onEscape: configura os widgets de retorno de chamada de MainWindow (função que será chamado quando você pressiona a tecla de escape).
       
      Label:
      Este é um widget de etiquetas que é usado para exibir texto na maioria dos casos. É um derivado da classe UILabel.
       
      id: Este é o ID que esta mais comum será alias-se com para referenciar usando funções como widget: getChildById ( "spellsLabel ")
      !text: Este é o texto que será exibido pelo widget UILabel.
      width: Este é o tamanho da largura do Label
      anchors. top/bottom/left/right: São onde a parte superior/inferior/esquerda/direita do Label devem ser posicionada.
      margin-top/bottom/left/right: São deslocamentos para as anchors, eles permitirão que você afinar o posicionamento dos componentes da interface do usuário.
       
      Esta é apenas a superfície de .otui formatação e styling, há muito mais que pode ser feito, mas a ideia principal é que você obter uma compreensão sobre como a hierarquia dos componentes da interface do usuário para exibir corretamente, etc as convenções de styling OTML forçá-lo a manter o projeto de um interface separado para o código lógico, por exemplo, o .lua
       
      Copie o código otui acima e coloque em spells.otui
       
      Agora que entendemos qual arquivo é usado para registrar o módulo e que arquivo (s) são usados para construir os módulos da interface do usuário, podemos aprofundar o código de lógica de módulos e tentar entender como tudo funciona em conjunto. O arquivo spells.lua é o arquivo que contém o código de lógica de módulos. É aqui que os spells serão preenchidos e o manuseio da seleção ortográfica e do display ortográfico serão controlados.
       
      Abra o arquivo spells.lua e copie o seguinte código base para começar.
       
      Nós estaremos escolhendo aparte este código para ajudar a entendê-lo melhor. Eu fui em frente e comecei o código base para você, aqui está:
       
      Spells = {} spellWindow = nil selectedSpell = nil spells = {} function init() connect(g_game, { onOpenSpellWindow = Spells.create, onGameEnd = Spells.destroy }) end function terminate() disconnect(g_game, { onOpenSpellWindow = Spells.create, onGameEnd = Spells.destroy }) Spells.destroy() Spells = nil end function Spells.create(spellList) spells = spellList Spells.destroy() spellWindow = g_ui.displayUI('spells.otui') end function Spells.destroy() if spellWindow then spellWindow:destroy() spellWindow = nil selectedSpell = nil spells = {} end end function Spells.selectSpell() if table.empty(spells) then return end -- TODO end  
      As principais coisas que eu quero focar aqui são:
       
      as variáveis (spellWindow, selectedSpell e spells).
      e as funções (armazenamento de funções e discutir o que init e Terminate são necessários).
       
      O VARIÁVEL
       
       
      Variáveis dentro de um módulo em modo seguro não precisam ser localizadas com a palavra-chave local como elas estão dentro de seu próprio ambiente de módulo. Se o módulo estiver em modo seguro: false, então você precisará certificar-se de que você localize a variável e redefini-los dentro da função Terminate (que vamos discutir mais tarde).
       
      Dentro deste módulo de feitiço precisamos ter uma maneira de armazenar o objeto janela módulos, fazemos isso definindo a variável spellWindow que temos inicializado como nulo, mas que vamos configurar em breve. Nós também precisamos de uma maneira de conter o que o jogador selecionou o que significa que devemos armazenar uma referência para o spell de alguma forma usando a variável selectedSpell. Por último, mas não menos importante e provavelmente não duram tanto! Precisamos armazenar a lista de spells e fazer isso com a variável Spells.
       
      AS FUNÇÕES
       
       
      Funções muito como variáveis estão contidas em módulos de área restrita para que a localização pode variar dependendo de suas preferências. Se você não estiver usando um module sandboxed: true, em seguida, você precisará certificar-se de que você está localizando e armazenar funções corretamente. Eu pessoalmente gosto de usar uma tabela para armazenar minhas funções dentro para manter as coisas organizadas mais este é o lugar onde você vê spells = {}. Spells é uma tabela que eu estarei usando para armazenar todas as funções públicas de um módulo. Funções de módulo privado serão localizadas mesmo que não seja inteiramente necessário dentro de um módulo em modo seguro, eu prefiro declarar quando a função é privada através da palavra-chave local.
      Então, quais são as funções init () e Terminate () usado para?
      Como você já deve ter notado dentro dos feitiços .otmod código que você vai ver:
       
       
      @onLoad: init() @onUnLoad: terminate()  
      init()
       
      A função init é uma função que é chamada quando otclient tenta carregar o módulo registrado usando chamada de sinal OnLoad. Dentro desta função você deve estar inicializando todos os componentes que são exigidos pelo seu módulo. Como você pode ver dentro de spells.lua estamos chamando uma função dentro de init ():
       
      connect(g_game, { onOpenSpellWindow = Spells.create, onGameEnd = Spells.destroy })  
      terminate()
       
      A função Terminate é uma função que é chamada quando otclient tenta descarregar o módulo registrado usando a chamada de sinal OnUnload. Dentro desta função você deve estar destruindo e redefinir variáveis que precisam ser desmarcadas na terminação do módulo. Lembre-se de que nem todas as variáveis precisarão ser redefinidas, mas as referências de widget e a tabela de spells são todas necessárias para serem redefinidas. Como você pode ver dentro de feitiços. lua estamos chamando e definindo uma série de coisas dentro de terminate():
       
       
      disconnect(g_game, { onOpenSpellWindow = Spells.create, onGameEnd = Spells.destroy }) Spells.destroy() Spells = nil Afirmei anteriormente que chamamos a função Connect dentro init (). Agora que estamos encerrando o módulo precisamos desconectar os retornos de chamada do conjunto de chamadas de sinal. Isto é feito através da função de desconexão (...).
      Com estas principais coisas cobertas você pode muito bem fazer o que você gosta dentro do módulo. Você pode com cuidado construir e craft o para inserir o que você precisa. Siga através do tutorial para estender o seu conhecimento de criação de módulos e também trabalhar dentro do ambiente do módulo otclients.
       
      COMO TESTAR EFICAZMENTE OS SEUS MÓDULOS
       
      Testar seus módulos será uma parte importante de fazê-los trabalhar da maneira que você precisa. Módulos de teste pode, por vezes, ser um pouco de um desafio para que haja algumas coisas que você precisa saber, a fim de torná-lo mais fácil para você.
       
      RECARREGANDO OS SEUS MÓDULOS
       
       
      Você pode recarregar seus módulos no cliente usando o Gerenciador módulo módulo Gerenciador módulo selecione seu módulo e clique em recarregar. Esteja ciente de que o seu init () e terminate (), funções serão chamados em recarregar por isso, se você não está inicializando e destruindo coisas particulares corretamente, então você pode obter erros no recarregamento.
      Nota importante: existem algumas alterações raras que podem não ser recarregadas corretamente com o gestor de módulos, coisas como .otui @ alterações (por exemplo, @onClick: edits). Pode haver algumas outras mudanças que não recarregam corretamente, mas para a maior parte ele funciona bem. Se você se encontrar com erros estranhos tentou fazer um reinício completo do cliente para garantir a sua não uma emissão de recarga.
       
      COMANDOS DE TESTE ÚTEIS
      Há uma seleção de comandos úteis que podem ser úteis para testes encontrados no arquivo de script/modules/client_terminal/Commands.lua. Aqui está uma lista dos comandos atuais que você pode inserir no terminal do cliente:
      dumpWidgets(widget, level) drawDebugBoxes(enable) hideMap() showMap() debugContainersItems() debugPosition(enable) autoReloadModule(name)  
      Você pode adicionar novos comandos ao seu diretório/mod, a fim de evitar fazer alterações no arquivo de comando modules.
      Você deve sempre assegurar-se de que seus módulos estejam testados completamente antes de criar solicitações da tração ao repositório principal do git. Estas dicas podem ser muito úteis nas fases de teste!
      ALGUMAS ORIENTAÇÕES ÚTEIS
       
      Ao desenvolver seu módulo seja certo dar-lhe lotes do pensamento sobre como está indo trabalhar e mesmo se você pode fundir a característica a um módulo já existente. Também funções globais e variáveis constantes podem ser encontradas nos diretórios modules/corelib e modules/gamelib. Por favor, dê uma cuidadosa consideração para o que você colocar nesses arquivos e se possível tentar evitá-lo. Siga a regra  "manter tudo para sua própria causa, e apenas essa causa ".
       
      FIM DO TÓPICO =]
       
      CRÉDITOS:
      edubart
      BeniS
      Eu(pela tradução e adaptação para o português)
       
       
       
       
    • Por JulianoZN
      Olá, Eu Estou fazendo o mapa para meu Poketibia da 5 Geração  (Base Otp)> Porem quando eu salvo o mapa e quando vou ligar o servidor, nao da erro nem nada simplesmente fecha, e se eu coloco o mapa antes da edição liga normalmente, Obs, eu Uso o RME Extendido, e o RME Normal, com os Itens que eu tenho no meu poketibia
       
      Website > 
      Registre-se para ver link(s).
       
    • Por Danihcv

       
      Olá, xTibianos. Hoje venho lhes trazer umas listas com todas (teoricamente, pois não pude conferir) as funções padrões dos TFS 0.3 e 0.4.
       
      Source functions - Funções feitas na source getCreatureHealth(cid) getCreatureMaxHealth(cid[, ignoreModifiers = false]) getCreatureMana(cid) getCreatureMaxMana(cid[, ignoreModifiers = false]) getCreatureHideHealth(cid) doCreatureSetHideHealth(cid, hide) getCreatureSpeakType(cid) doCreatureSetSpeakType(cid, type) getCreatureLookDirection(cid) getPlayerLevel(cid) getPlayerExperience(cid) getPlayerMagLevel(cid[, ignoreModifiers = false]) getPlayerSpentMana(cid) getPlayerFood(cid) getPlayerAccess(cid) getPlayerGhostAccess(cid) getPlayerSkillLevel(cid, skill[, ignoreModifiers = false]) getPlayerSkillTries(cid, skill) getPlayerTown(cid) getPlayerVocation(cid) getPlayerIp(cid) getPlayerRequiredMana(cid, magicLevel) getPlayerRequiredSkillTries(cid, skillId, skillLevel) getPlayerItemCount(cid, itemid[, subType = -1]) getPlayerMoney(cid) getPlayerSoul(cid[, ignoreModifiers = false]) getPlayerFreeCap(cid) getPlayerLight(cid) getPlayerSlotItem(cid, slot) getPlayerWeapon(cid[, ignoreAmmo = false]) getPlayerItemById(cid, deepSearch, itemId[, subType = -1]) getPlayerDepotItems(cid, depotid) getPlayerGuildId(cid) getPlayerGuildName(cid) getPlayerGuildRankId(cid) getPlayerGuildRank(cid) getPlayerGuildNick(cid) getPlayerGuildLevel(cid) getPlayerGUID(cid) getPlayerNameDescription(cid) doPlayerSetNameDescription(cid, desc) getPlayerSpecialDescription(cid) doPlayerSetSpecialDescription(cid, desc) getPlayerAccountId(cid) getPlayerAccount(cid) getPlayerFlagValue(cid, flag) getPlayerCustomFlagValue(cid, flag) getPlayerPromotionLevel(cid) doPlayerSetPromotionLevel(cid, level) getPlayerGroupId(cid) doPlayerSetGroupId(cid, newGroupId) doPlayerSendOutfitWindow(cid) doPlayerLearnInstantSpell(cid, name) doPlayerUnlearnInstantSpell(cid, name) getPlayerLearnedInstantSpell(cid, name) getPlayerInstantSpellCount(cid) getPlayerInstantSpellInfo(cid, index) getInstantSpellInfo(cid, name) getCreatureStorageList(cid) getCreatureStorage(uid, key) doCreatureSetStorage(uid, key, value) getStorageList() getStorage(key) doSetStorage(key, value) getChannelUsers(channelId) getPlayersOnline() getTileInfo(pos) getThingFromPos(pos[, displayError = true]) getThing(uid[, recursive = RECURSE _FIRST]) doTileQueryAdd(uid, pos[, flags[, displayError = true]]) doItemRaidUnref(uid) getThingPosition(uid) getTileItemById(pos, itemId[, subType = -1]) getTileItemByType(pos, type) getTileThingByPos(pos) getTopCreature(pos) doRemoveItem(uid[, count = -1]) doPlayerFeed(cid, food) doPlayerSendCancel(cid, text) doPlayerSendDefaultCancel(cid, ReturnValue) getSearchString(fromPosition, toPosition[, fromIsCreature = false[, toIsCreature = false]]) getClosestFreeTile(cid, targetpos[, extended = false[, ignoreHouse = true]]) doTeleportThing(cid, newpos[, pushmove = true[, fullTeleport = true]]) doTransformItem(uid, newId[, count/subType]) doCreatureSay(uid, text[, type = SPEAK _SAY[, ghost = false[, cid = 0[, pos]]]]) doSendCreatureSquare(cid, color[, player]) doSendMagicEffect(pos, type[, player]) doSendDistanceShoot(fromPos, toPos, type[, player]) doSendAnimatedText(pos, text, color[, player]) doPlayerAddSkillTry(cid, skillid, n[, useMultiplier = true]) doCreatureAddHealth(cid, health[, hitEffect[, hitColor[, force]]]) doCreatureAddMana(cid, mana) setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) doPlayerSetMaxCapacity(cid, cap) doPlayerAddSpentMana(cid, amount[, useMultiplier = true]) doPlayerAddSoul(cid, amount) doPlayerAddItem(cid, itemid[, count/subtype = 1[, canDropOnMap = true[, slot = 0]]]) doPlayerAddItem(cid, itemid[, count = 1[, canDropOnMap = true[, subtype = 1[, slot = 0]]]]) doPlayerAddItemEx(cid, uid[, canDropOnMap = false[, slot = 0]]) doPlayerSendTextMessage(cid, MessageClasses, message) doPlayerSendChannelMessage(cid, author, message, SpeakClasses, channel) doPlayerSendToChannel(cid, targetId, SpeakClasses, message, channel[, time]) doPlayerOpenChannel(cid, channelId) doPlayerAddMoney(cid, money) doPlayerRemoveMoney(cid, money) doPlayerTransferMoneyTo(cid, target, money) doShowTextDialog(cid, itemid, text) doDecayItem(uid) doCreateItem(itemid[, type/count], pos) doCreateItemEx(itemid[, count/subType = -1]) doTileAddItemEx(pos, uid) doAddContainerItemEx(uid, virtuid) doRelocate(pos, posTo[, creatures = true[, unmovable = true]]) doCleanTile(pos[, forceMapLoaded = false]) doCreateTeleport(itemid, topos, createpos) doCreateMonster(name, pos[, extend = false[, force = false[, displayError = true]]]) doCreateNpc(name, pos[, displayError = true]) doSummonMonster(cid, name) doConvinceCreature(cid, target) getMonsterTargetList(cid) getMonsterFriendList(cid) doMonsterSetTarget(cid, target) doMonsterChangeTarget(cid) getMonsterInfo(name) doAddCondition(cid, condition) doRemoveCondition(cid, type[, subId]) doRemoveConditions(cid[, onlyPersistent]) doRemoveCreature(cid[, forceLogout = true]) doMoveCreature(cid, direction[, flag = FLAG _NOLIMIT]) doSteerCreature(cid, position) doPlayerSetPzLocked(cid, locked) doPlayerSetTown(cid, townid) doPlayerSetVocation(cid,voc) doPlayerRemoveItem(cid, itemid[, count[, subType = -1]]) doPlayerAddExperience(cid, amount) doPlayerSetGuildId(cid, id) doPlayerSetGuildLevel(cid, level[, rank]) doPlayerSetGuildNick(cid, nick) doPlayerAddOutfit(cid, looktype, addon) doPlayerRemoveOutfit(cid, looktype[, addon = 0]) doPlayerAddOutfitId(cid, outfitId, addon) doPlayerRemoveOutfitId(cid, outfitId[, addon = 0]) canPlayerWearOutfit(cid, looktype[, addon = 0]) canPlayerWearOutfitId(cid, outfitId[, addon = 0]) getCreatureCondition(cid, condition[, subId = 0]) doCreatureSetDropLoot(cid, doDrop) getPlayerLossPercent(cid, lossType) doPlayerSetLossPercent(cid, lossType, newPercent) doPlayerSetLossSkill(cid, doLose) getPlayerLossSkill(cid) doPlayerSwitchSaving(cid) doPlayerSave(cid[, shallow = false]) isPlayerPzLocked(cid) isPlayerSaving(cid) isCreature(cid) isMovable(uid) getCreatureByName(name) getPlayerByGUID(guid) getPlayerByNameWildcard(name~[, ret = false]) getPlayerGUIDByName(name[, multiworld = false]) getPlayerNameByGUID(guid[, multiworld = false[, displayError = true]]) doPlayerChangeName(guid, oldName, newName) registerCreatureEvent(uid, eventName) unregisterCreatureEvent(uid, eventName) getContainerSize(uid) getContainerCap(uid) getContainerItem(uid, slot) doAddContainerItem(uid, itemid[, count/subType = 1]) getHouseInfo(houseId[, displayError = true]) getHouseAccessList(houseid, listId) getHouseByPlayerGUID(playerGUID) getHouseFromPos(pos) setHouseAccessList(houseid, listid, listtext) setHouseOwner(houseId, owner[, clean]) getWorldType() setWorldType(type) getWorldTime() getWorldLight() getWorldCreatures(type) getWorldUpTime() getGuildId(guildName) getGuildMotd(guildId) getPlayerSex(cid[, full = false]) doPlayerSetSex(cid, newSex) createCombatArea({area}[, {extArea}]) createConditionObject(type[, ticks[, buff[, subId]]]) setCombatArea(combat, area) setCombatCondition(combat, condition) setCombatParam(combat, key, value) setConditionParam(condition, key, value) addDamageCondition(condition, rounds, time, value) addOutfitCondition(condition, outfit) setCombatCallBack(combat, key, function_name) setCombatFormula(combat, type, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]]) setConditionFormula(combat, mina, minb, maxa, maxb) doCombat(cid, combat, param) createCombatObject() doCombatAreaHealth(cid, type, pos, area, min, max, effect) doTargetCombatHealth(cid, target, type, min, max, effect) doCombatAreaMana(cid, pos, area, min, max, effect) doTargetCombatMana(cid, target, min, max, effect) doCombatAreaCondition(cid, pos, area, condition, effect) doTargetCombatCondition(cid, target, condition, effect) doCombatAreaDispel(cid, pos, area, type, effect) doTargetCombatDispel(cid, target, type, effect) doChallengeCreature(cid, target) numberToVariant(number) stringToVariant(string) positionToVariant(pos) targetPositionToVariant(pos) variantToNumber(var) variantToString(var) variantToPosition(var) doChangeSpeed(cid, delta) doCreatureChangeOutfit(cid, outfit) doSetMonsterOutfit(cid, name[, time = -1]) doSetItemOutfit(cid, item[, time = -1]) doSetCreatureOutfit(cid, outfit[, time = -1]) getCreatureOutfit(cid) getCreatureLastPosition(cid) getCreatureName(cid) getCreatureSpeed(cid) getCreatureBaseSpeed(cid) getCreatureTarget(cid) isSightClear(fromPos, toPos, floorCheck) isInArray(array, value[, caseSensitive = false]) addEvent(callback, delay, ...) stopEvent(eventid) getPlayersByAccountId(accId) getAccountIdByName(name) getAccountByName(name) getAccountIdByAccount(accName) getAccountByAccountId(accId) getIpByName(name) getPlayersByIp(ip[, mask = 0xFFFFFFFF]) doPlayerPopupFYI(cid, message) doPlayerSendTutorial(cid, id) doPlayerSendMailByName(name, item[, town[, actor]]) doPlayerAddMapMark(cid, pos, type[, description]) doPlayerAddPremiumDays(cid, days) getPlayerPremiumDays(cid) doCreatureSetLookDirection(cid, dir) getCreatureGuildEmblem(cid[, target]) doCreatureSetGuildEmblem(cid, emblem) getCreaturePartyShield(cid[, target]) doCreatureSetPartyShield(cid, shield) getCreatureSkullType(cid[, target]) doCreatureSetSkullType(cid, skull) getPlayerSkullEnd(cid) doPlayerSetSkullEnd(cid, time, type) getPlayerBlessing(cid, blessing) doPlayerAddBlessing(cid, blessing) getPlayerStamina(cid) doPlayerSetStamina(cid, minutes) getPlayerBalance(cid) doPlayerSetBalance(cid, balance) getCreatureNoMove(cid) doCreatureSetNoMove(cid, block) getPlayerIdleTime(cid) doPlayerSetIdleTime(cid, amount) getPlayerLastLoad(cid) getPlayerLastLogin(cid) getPlayerAccountManager(cid) getPlayerTradeState(cid) getPlayerModes(cid) getPlayerRates(cid) doPlayerSetRate(cid, type, value) getPlayerPartner(cid) doPlayerSetPartner(cid, guid) doPlayerFollowCreature(cid, target) getPlayerParty(cid) doPlayerJoinParty(cid, lid) doPlayerLeaveParty(cid[, forced = false]) doPlayerAddMount(cid, mountId) doPlayerRemoveMount(cid, mountId) getPlayerMount(cid, mountId) doPlayerSetMount(cid, mountId) doPlayerSetMountStatus(cid, mounted) getMountInfo([mountId]) getPartyMembers(lid) getCreatureMaster(cid) getCreatureSummons(cid) getTownId(townName) getTownName(townId) getTownTemplePosition(townId) getTownHouses(townId) getSpectators(centerPos, rangex, rangey[, multifloor = false]) getVocationInfo(id) getGroupInfo(id[, premium = false]) getVocationList() getGroupList() getChannelList() getTownList() getWaypointList() getTalkActionList() getExperienceStageList() getItemIdByName(name[, displayError = true]) getItemInfo(itemid) getItemAttribute(uid, key) doItemSetAttribute(uid, key, value) doItemEraseAttribute(uid, key) getItemWeight(uid[, precise = true]) getItemParent(uid) hasItemProperty(uid, prop) hasPlayerClient(cid) isIpBanished(ip[, mask]) isPlayerBanished(name/guid, type) isAccountBanished(accountId[, playerId]) doAddIpBanishment(...) doAddPlayerBanishment(...) doAddAccountBanishment(...) doAddNotation(...) doAddStatement(...) doRemoveIpBanishment(ip[, mask]) doRemovePlayerBanishment(name/guid, type) doRemoveAccountBanishment(accountId[, playerId]) doRemoveNotations(accountId[, playerId]) doRemoveStatements(name/guid[, channelId]) getNotationsCount(accountId[, playerId]) getStatementsCount(name/guid[, channelId]) getBanData(value[, type[, param]]) getBanReason(id) getBanAction(id[, ipBanishment = false]) getBanList(type[, value[, param]]) getExperienceStage(level) getDataDir() getLogsDir() getConfigFile() getConfigValue(key) getModList() getHighscoreString(skillId) getWaypointPosition(name) doWaypointAddTemporial(name, pos) getGameState() doSetGameState(id) doExecuteRaid(name) doCreatureExecuteTalkAction(cid, text[, ignoreAccess = false[, channelId = CHANNEL _DEFAULT]]) doReloadInfo(id[, cid]) doSaveServer([shallow = false]) doCleanHouse(houseId) doCleanMap() doRefreshMap() doGuildAddEnemy(guild, enemy, war, type) doGuildRemoveEnemy(guild, enemy) doUpdateHouseAuctions() loadmodlib(lib) domodlib(lib) dodirectory(dir[, recursively = false])getCreatureHealth(cid) getCreatureMaxHealth(cid[, ignoreModifiers = false]) getCreatureMana(cid) getCreatureMaxMana(cid[, ignoreModifiers = false]) getCreatureHideHealth(cid) doCreatureSetHideHealth(cid, hide) getCreatureSpeakType(cid) doCreatureSetSpeakType(cid, type) getCreatureLookDirection(cid) getPlayerLevel(cid) getPlayerExperience(cid) getPlayerMagLevel(cid[, ignoreModifiers = false]) getPlayerSpentMana(cid) getPlayerFood(cid) getPlayerAccess(cid) getPlayerGhostAccess(cid) getPlayerSkillLevel(cid, skill[, ignoreModifiers = false]) getPlayerSkillTries(cid, skill) getPlayerTown(cid) getPlayerVocation(cid) getPlayerIp(cid) getPlayerRequiredMana(cid, magicLevel) getPlayerRequiredSkillTries(cid, skillId, skillLevel) getPlayerItemCount(cid, itemid[, subType = -1]) getPlayerMoney(cid) getPlayerSoul(cid[, ignoreModifiers = false]) getPlayerFreeCap(cid) getPlayerLight(cid) getPlayerSlotItem(cid, slot) getPlayerWeapon(cid[, ignoreAmmo = false]) getPlayerItemById(cid, deepSearch, itemId[, subType = -1]) getPlayerDepotItems(cid, depotid) getPlayerGuildId(cid) getPlayerGuildName(cid) getPlayerGuildRankId(cid) getPlayerGuildRank(cid) getPlayerGuildNick(cid) getPlayerGuildLevel(cid) getPlayerGUID(cid) getPlayerNameDescription(cid) doPlayerSetNameDescription(cid, desc) getPlayerSpecialDescription(cid) doPlayerSetSpecialDescription(cid, desc) getPlayerAccountId(cid) getPlayerAccount(cid) getPlayerFlagValue(cid, flag) getPlayerCustomFlagValue(cid, flag) getPlayerPromotionLevel(cid) doPlayerSetPromotionLevel(cid, level) getPlayerGroupId(cid) doPlayerSetGroupId(cid, newGroupId) doPlayerSendOutfitWindow(cid) doPlayerLearnInstantSpell(cid, name) doPlayerUnlearnInstantSpell(cid, name) getPlayerLearnedInstantSpell(cid, name) getPlayerInstantSpellCount(cid) getPlayerInstantSpellInfo(cid, index) getInstantSpellInfo(cid, name) getCreatureStorageList(cid) getCreatureStorage(uid, key) doCreatureSetStorage(uid, key, value) getStorageList() getStorage(key) doSetStorage(key, value) getChannelUsers(channelId) getPlayersOnline() getTileInfo(pos) getThingFromPos(pos[, displayError = true]) getThing(uid[, recursive = RECURSE _FIRST]) doTileQueryAdd(uid, pos[, flags[, displayError = true]]) doItemRaidUnref(uid) getThingPosition(uid) getTileItemById(pos, itemId[, subType = -1]) getTileItemByType(pos, type) getTileThingByPos(pos) getTopCreature(pos) doRemoveItem(uid[, count = -1]) doPlayerFeed(cid, food) doPlayerSendCancel(cid, text) doPlayerSendDefaultCancel(cid, ReturnValue) getSearchString(fromPosition, toPosition[, fromIsCreature = false[, toIsCreature = false]]) getClosestFreeTile(cid, targetpos[, extended = false[, ignoreHouse = true]]) doTeleportThing(cid, newpos[, pushmove = true[, fullTeleport = true]]) doTransformItem(uid, newId[, count/subType]) doCreatureSay(uid, text[, type = SPEAK _SAY[, ghost = false[, cid = 0[, pos]]]]) doSendCreatureSquare(cid, color[, player]) doSendMagicEffect(pos, type[, player]) doSendDistanceShoot(fromPos, toPos, type[, player]) doSendAnimatedText(pos, text, color[, player]) doPlayerAddSkillTry(cid, skillid, n[, useMultiplier = true]) doCreatureAddHealth(cid, health[, hitEffect[, hitColor[, force]]]) doCreatureAddMana(cid, mana) setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) doPlayerSetMaxCapacity(cid, cap) doPlayerAddSpentMana(cid, amount[, useMultiplier = true]) doPlayerAddSoul(cid, amount) doPlayerAddItem(cid, itemid[, count/subtype = 1[, canDropOnMap = true[, slot = 0]]]) doPlayerAddItem(cid, itemid[, count = 1[, canDropOnMap = true[, subtype = 1[, slot = 0]]]]) doPlayerAddItemEx(cid, uid[, canDropOnMap = false[, slot = 0]]) doPlayerSendTextMessage(cid, MessageClasses, message) doPlayerSendChannelMessage(cid, author, message, SpeakClasses, channel) doPlayerSendToChannel(cid, targetId, SpeakClasses, message, channel[, time]) doPlayerOpenChannel(cid, channelId) doPlayerAddMoney(cid, money) doPlayerRemoveMoney(cid, money) doPlayerTransferMoneyTo(cid, target, money) doShowTextDialog(cid, itemid, text) doDecayItem(uid) doCreateItem(itemid[, type/count], pos) doCreateItemEx(itemid[, count/subType = -1]) doTileAddItemEx(pos, uid) doAddContainerItemEx(uid, virtuid) doRelocate(pos, posTo[, creatures = true[, unmovable = true]]) doCleanTile(pos[, forceMapLoaded = false]) doCreateTeleport(itemid, topos, createpos) doCreateMonster(name, pos[, extend = false[, force = false[, displayError = true]]]) doCreateNpc(name, pos[, displayError = true]) doSummonMonster(cid, name) doConvinceCreature(cid, target) getMonsterTargetList(cid) getMonsterFriendList(cid) doMonsterSetTarget(cid, target) doMonsterChangeTarget(cid) getMonsterInfo(name) doAddCondition(cid, condition) doRemoveCondition(cid, type[, subId]) doRemoveConditions(cid[, onlyPersistent]) doRemoveCreature(cid[, forceLogout = true]) doMoveCreature(cid, direction[, flag = FLAG _NOLIMIT]) doSteerCreature(cid, position) doPlayerSetPzLocked(cid, locked) doPlayerSetTown(cid, townid) doPlayerSetVocation(cid,voc) doPlayerRemoveItem(cid, itemid[, count[, subType = -1]]) doPlayerAddExperience(cid, amount) doPlayerSetGuildId(cid, id) doPlayerSetGuildLevel(cid, level[, rank]) doPlayerSetGuildNick(cid, nick) doPlayerAddOutfit(cid, looktype, addon) doPlayerRemoveOutfit(cid, looktype[, addon = 0]) doPlayerAddOutfitId(cid, outfitId, addon) doPlayerRemoveOutfitId(cid, outfitId[, addon = 0]) canPlayerWearOutfit(cid, looktype[, addon = 0]) canPlayerWearOutfitId(cid, outfitId[, addon = 0]) getCreatureCondition(cid, condition[, subId = 0]) doCreatureSetDropLoot(cid, doDrop) getPlayerLossPercent(cid, lossType) doPlayerSetLossPercent(cid, lossType, newPercent) doPlayerSetLossSkill(cid, doLose) getPlayerLossSkill(cid) doPlayerSwitchSaving(cid) doPlayerSave(cid[, shallow = false]) isPlayerPzLocked(cid) isPlayerSaving(cid) isCreature(cid) isMovable(uid) getCreatureByName(name) getPlayerByGUID(guid) getPlayerByNameWildcard(name~[, ret = false]) getPlayerGUIDByName(name[, multiworld = false]) getPlayerNameByGUID(guid[, multiworld = false[, displayError = true]]) doPlayerChangeName(guid, oldName, newName) registerCreatureEvent(uid, eventName) unregisterCreatureEvent(uid, eventName) getContainerSize(uid) getContainerCap(uid) getContainerItem(uid, slot) doAddContainerItem(uid, itemid[, count/subType = 1]) getHouseInfo(houseId[, displayError = true]) getHouseAccessList(houseid, listId) getHouseByPlayerGUID(playerGUID) getHouseFromPos(pos) setHouseAccessList(houseid, listid, listtext) setHouseOwner(houseId, owner[, clean]) getWorldType() setWorldType(type) getWorldTime() getWorldLight() getWorldCreatures(type) getWorldUpTime() getGuildId(guildName) getGuildMotd(guildId) getPlayerSex(cid[, full = false]) doPlayerSetSex(cid, newSex) createCombatArea({area}[, {extArea}]) createConditionObject(type[, ticks[, buff[, subId]]]) setCombatArea(combat, area) setCombatCondition(combat, condition) setCombatParam(combat, key, value) setConditionParam(condition, key, value) addDamageCondition(condition, rounds, time, value) addOutfitCondition(condition, outfit) setCombatCallBack(combat, key, function_name) setCombatFormula(combat, type, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]]) setConditionFormula(combat, mina, minb, maxa, maxb) doCombat(cid, combat, param) createCombatObject() doCombatAreaHealth(cid, type, pos, area, min, max, effect) doTargetCombatHealth(cid, target, type, min, max, effect) doCombatAreaMana(cid, pos, area, min, max, effect) doTargetCombatMana(cid, target, min, max, effect) doCombatAreaCondition(cid, pos, area, condition, effect) doTargetCombatCondition(cid, target, condition, effect) doCombatAreaDispel(cid, pos, area, type, effect) doTargetCombatDispel(cid, target, type, effect) doChallengeCreature(cid, target) numberToVariant(number) stringToVariant(string) positionToVariant(pos) targetPositionToVariant(pos) variantToNumber(var) variantToString(var) variantToPosition(var) doChangeSpeed(cid, delta) doCreatureChangeOutfit(cid, outfit) doSetMonsterOutfit(cid, name[, time = -1]) doSetItemOutfit(cid, item[, time = -1]) doSetCreatureOutfit(cid, outfit[, time = -1]) getCreatureOutfit(cid) getCreatureLastPosition(cid) getCreatureName(cid) getCreatureSpeed(cid) getCreatureBaseSpeed(cid) getCreatureTarget(cid) isSightClear(fromPos, toPos, floorCheck) isInArray(array, value[, caseSensitive = false]) addEvent(callback, delay, ...) stopEvent(eventid) getPlayersByAccountId(accId) getAccountIdByName(name) getAccountByName(name) getAccountIdByAccount(accName) getAccountByAccountId(accId) getIpByName(name) getPlayersByIp(ip[, mask = 0xFFFFFFFF]) doPlayerPopupFYI(cid, message) doPlayerSendTutorial(cid, id) doPlayerSendMailByName(name, item[, town[, actor]]) doPlayerAddMapMark(cid, pos, type[, description]) doPlayerAddPremiumDays(cid, days) getPlayerPremiumDays(cid) doCreatureSetLookDirection(cid, dir) getCreatureGuildEmblem(cid[, target]) doCreatureSetGuildEmblem(cid, emblem) getCreaturePartyShield(cid[, target]) doCreatureSetPartyShield(cid, shield) getCreatureSkullType(cid[, target]) doCreatureSetSkullType(cid, skull) getPlayerSkullEnd(cid) doPlayerSetSkullEnd(cid, time, type) getPlayerBlessing(cid, blessing) doPlayerAddBlessing(cid, blessing) getPlayerStamina(cid) doPlayerSetStamina(cid, minutes) getPlayerBalance(cid) doPlayerSetBalance(cid, balance) getCreatureNoMove(cid) doCreatureSetNoMove(cid, block) getPlayerIdleTime(cid) doPlayerSetIdleTime(cid, amount) getPlayerLastLoad(cid) getPlayerLastLogin(cid) getPlayerAccountManager(cid) getPlayerTradeState(cid) getPlayerModes(cid) getPlayerRates(cid) doPlayerSetRate(cid, type, value) getPlayerPartner(cid) doPlayerSetPartner(cid, guid) doPlayerFollowCreature(cid, target) getPlayerParty(cid) doPlayerJoinParty(cid, lid) doPlayerLeaveParty(cid[, forced = false]) doPlayerAddMount(cid, mountId) doPlayerRemoveMount(cid, mountId) getPlayerMount(cid, mountId) doPlayerSetMount(cid, mountId) doPlayerSetMountStatus(cid, mounted) getMountInfo([mountId]) getPartyMembers(lid) getCreatureMaster(cid) getCreatureSummons(cid) getTownId(townName) getTownName(townId) getTownTemplePosition(townId) getTownHouses(townId) getSpectators(centerPos, rangex, rangey[, multifloor = false]) getVocationInfo(id) getGroupInfo(id[, premium = false]) getVocationList() getGroupList() getChannelList() getTownList() getWaypointList() getTalkActionList() getExperienceStageList() getItemIdByName(name[, displayError = true]) getItemInfo(itemid) getItemAttribute(uid, key) doItemSetAttribute(uid, key, value) doItemEraseAttribute(uid, key) getItemWeight(uid[, precise = true]) getItemParent(uid) hasItemProperty(uid, prop) hasPlayerClient(cid) isIpBanished(ip[, mask]) isPlayerBanished(name/guid, type) isAccountBanished(accountId[, playerId]) doAddIpBanishment(...) doAddPlayerBanishment(...) doAddAccountBanishment(...) doAddNotation(...) doAddStatement(...) doRemoveIpBanishment(ip[, mask]) doRemovePlayerBanishment(name/guid, type) doRemoveAccountBanishment(accountId[, playerId]) doRemoveNotations(accountId[, playerId]) doRemoveStatements(name/guid[, channelId]) getNotationsCount(accountId[, playerId]) getStatementsCount(name/guid[, channelId]) getBanData(value[, type[, param]]) getBanReason(id) getBanAction(id[, ipBanishment = false]) getBanList(type[, value[, param]]) getExperienceStage(level) getDataDir() getLogsDir() getConfigFile() getConfigValue(key) getModList() getHighscoreString(skillId) getWaypointPosition(name) doWaypointAddTemporial(name, pos) getGameState() doSetGameState(id) doExecuteRaid(name) doCreatureExecuteTalkAction(cid, text[, ignoreAccess = false[, channelId = CHANNEL _DEFAULT]]) doReloadInfo(id[, cid]) doSaveServer([shallow = false]) doCleanHouse(houseId) doCleanMap() doRefreshMap() doGuildAddEnemy(guild, enemy, war, type) doGuildRemoveEnemy(guild, enemy) doUpdateHouseAuctions() loadmodlib(lib) domodlib(lib) dodirectory(dir[, recursively = false]) Lua made functions - Funções feitas em lua (data/lib) doPlayerGiveItem(cid, itemid, amount, subType) doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType) doPlayerTakeItem(cid, itemid, amount) doPlayerBuyItem(cid, itemid, count, cost, charges) doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges) doPlayerSellItem(cid, itemid, count, cost) doPlayerWithdrawMoney(cid, amount) doPlayerDepositMoney(cid, amount) doPlayerAddStamina(cid, minutes) isPremium(cid) getMonthDayEnding(day) getMonthString(m) getArticle(str) isNumeric(str) doNumberFormat(i) doPlayerAddAddons(cid, addon) doPlayerWithdrawAllMoney(cid) doPlayerDepositAllMoney(cid) doPlayerTransferAllMoneyTo(cid, target) playerExists(name) getTibiaTime() doWriteLogFile(file, text) getExperienceForLevel(lv) doMutePlayer(cid, time) getPlayerGroupName(cid) getPlayerVocationName(cid) getPromotedVocation(vid) doPlayerRemovePremiumDays(cid, days) getPlayerMasterPos(cid) getHouseOwner(houseId) getHouseName(houseId) getHouseEntry(houseId) getHouseRent(houseId) getHousePrice(houseId) getHouseTown(houseId) getHouseDoorsCount(houseId) getHouseBedsCount(houseId) getHouseTilesCount(houseId) getItemNameById(itemid) getItemPluralNameById(itemid) getItemArticleById(itemid) getItemName(uid) getItemPluralName(uid) getItemArticle(uid) getItemText(uid) getItemSpecialDescription(uid) getItemWriter(uid) getItemDate(uid) getTilePzInfo(pos) getTileZoneInfo(pos) doShutdown() doSummonCreature(name, pos, displayError) getOnlinePlayers() getPlayerByName(name) isPlayer(cid) isPlayerGhost(cid) isMonster(cid) isNpc(cid) doPlayerSetExperienceRate(cid, value) doPlayerSetMagicRate(cid, value) doPlayerAddLevel(cid, amount, round) doPlayerAddMagLevel(cid, amount) doPlayerAddSkill(cid, skill, amount, round) getPartyLeader(cid) isInParty(cid) isPrivateChannel(channelId) doPlayerResetIdleTime(cid) doBroadcastMessage(text, class) doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost) getBooleanFromString(input) doCopyItem(item, attributes) doRemoveThing(uid) setAttackFormula(combat, type, minl, maxl, minm, maxm, min, max) setHealingFormula(combat, type, minl, maxl, minm, maxm, min, max) doChangeTypeItem(uid, subtype) doSetItemText(uid, text, writer, date) doItemSetActionId(uid, aid) getFluidSourceType(itemid) getDepotId(uid) getItemDescriptions(uid) getItemWeightById(itemid, count, precision) getItemWeaponType(uid) getItemRWInfo(uid) getItemLevelDoor(itemid) isContainer(uid) isItemStackable(itemid) isItemRune(itemid) isItemDoor(itemid) isItemContainer(itemid) isItemFluidContainer(itemid) isItemMovable(itemid) isCorpse(uid) getContainerCapById(itemid) getMonsterAttackSpells(name) getMonsterHealingSpells(name) getMonsterLootList(name) getMonsterSummonList(name) choose(...) exhaustion.check(cid, storage) exhaustion.get(cid, storage) exhaustion.set(cid, storage, time) exhaustion.make(cid, storage, time) doConvertIntegerToIp(int, mask) doConvertIpToInteger(str) doRevertIp(str) isInRange(position, fromPosition, toPosition) getDistanceBetween(fromPosition, toPosition) getDirectionTo(pos1, pos2) getCreatureLookPosition(cid) getPositionByDirection(position, direction, size) doComparePositions(position, positionEx) getArea(position, x, y) Position(x, y, z, stackpos) isValidPosition(position) isSorcerer(cid) isDruid(cid) isPaladin(cid) isKnight(cid) isRookie(cid) string.split(str) string.trim(str) string.explode(str, sep, limit) string.expand(str) string.timediff(diff) Compats (data/lib/100-compat.lua) doSetCreatureDropLoot = doCreatureSetDropLoot doPlayerSay = doCreatureSay doPlayerAddMana = doCreatureAddMana playerLearnInstantSpell = doPlayerLearnInstantSpell doPlayerRemOutfit = doPlayerRemoveOutfit pay = doPlayerRemoveMoney broadcastMessage = doBroadcastMessage getPlayerName = getCreatureName getCreaturePosition = getThingPosition getPlayerPosition = getCreaturePosition getCreaturePos = getCreaturePosition creatureGetPosition = getCreaturePosition getPlayerMana = getCreatureMana getPlayerMaxMana = getCreatureMaxMana hasCondition = hasCreatureCondition getCreatureCondition = hasCreatureCondition isMoveable = isMovable isItemMoveable = isItemMovable saveData = saveServer savePlayers = saveServer getPlayerSkill = getPlayerSkillLevel getPlayerSkullType = getCreatureSkullType getCreatureSkull = getCreatureSkullType getAccountNumberByName = getAccountIdByName getIPByName = getIpByName getPlayersByIP = getPlayersByIp getThingFromPos = getThingFromPosition getThingfromPos = getThingFromPos getHouseFromPos = getHouseFromPosition getPlayersByAccountNumber = getPlayersByAccountId getIPByPlayerName = getIpByName getPlayersByIPNumber = getPlayersByIp getAccountNumberByPlayerName = getAccountIdByName convertIntToIP = doConvertIntegerToIp convertIPToInt = doConvertIpToInteger queryTileAddThing = doTileQueryAdd getTileHouseInfo = getHouseFromPos executeRaid = doExecuteRaid saveServer = doSaveServer cleanHouse = doCleanHouse cleanMap = doCleanMap shutdown = doShutdown mayNotMove = doCreatureSetNoMove getTileItemsByType = getTileItemByType doPlayerSetNoMove = doCreatureSetNoMove getPlayerNoMove = getCreatureNoMove getConfigInfo = getConfigValue doPlayerAddExp = doPlayerAddExperience isInArea = isInRange doPlayerSetSkillRate = doPlayerSetRate getCreatureLookDir = getCreatureLookDirection getPlayerLookDir = getCreatureLookDirection getPlayerLookDirection = getCreatureLookDirection doCreatureSetLookDir = doCreatureSetLookDirection getPlayerLookPos = getCreatureLookPosition setPlayerStamina = doPlayerSetStamina setPlayerPromotionLevel = doPlayerSetPromotionLevel setPlayerGroupId = doPlayerSetGroupId setPlayerPartner = doPlayerSetPartner doPlayerSetStorageValue = doCreatureSetStorage setPlayerStorageValue = doPlayerSetStorageValue getPlayerStorageValue = getCreatureStorage getGlobalStorageValue = getStorage setGlobalStorageValue = doSetStorage getPlayerMount = canPlayerRideMount setPlayerBalance = doPlayerSetBalance doAddMapMark = doPlayerAddMapMark doSendTutorial = doPlayerSendTutorial getWaypointsList = getWaypointList getPlayerLastLoginSaved = getPlayerLastLogin getThingPos = getThingPosition doAreaCombatHealth = doCombatAreaHealth doAreaCombatMana = doCombatAreaMana doAreaCombatCondition = doCombatAreaCondition doAreaCombatDispel = doCombatAreaDispel getItemDescriptionsById = getItemInfo hasProperty = hasItemProperty hasClient = hasPlayerClient print = std.cout getPosByDir = getPositionByDirection isNumber = isNumeric doSetItemActionId = doItemSetActionId getOnlinePlayers = getPlayersOnlineEx addDialog = doPlayerAddDialog doSendPlayerExtendedOpcode = doPlayerSendExtendedOpcode  
       
      Créditos:
      Zonnebloem
    • Por Jair Kevick

       
      Opa eae galera, blz? deixarei logo a baixo algumas informações, de como compilar o tfs 0.3.6 pelo codeblocks. Veja o vídeo para entender melhor!
       
      1º path para substituir o leaf
       
      Registre-se para ver spoiler(s).
       
    • Por Pzyxho
      Bom, vou ser o mais direto possível:
      Estou tentando adicionar um novo slot no servidor, de versão 8.54 e TFS 0.4, mudei nas sources e já as compilei com sucesso, segue abaixo no spoiler as alterações feitas na mesma:
       
       
      items.h
      #define ITEMS 13000 #define SLOTP_WHEREEVER 0xFFFFFFFF #define SLOTP_HEAD 1 << 0 #define SLOTP_NECKLACE 1 << 1 #define SLOTP_BACKPACK 1 << 2 #define SLOTP_ARMOR 1 << 3 #define SLOTP_RIGHT 1 << 4 #define SLOTP_LEFT 1 << 5 #define SLOTP_LEGS 1 << 6 #define SLOTP_FEET 1 << 7 #define SLOTP_RING 1 << 8 #define SLOTP_AMMO 1 << 9 #define SLOTP_DEPOT 1 << 10 #define SLOTP_TWO_HAND 1 << 11 #define SLOTP_EYE 1 << 15 #define SLOTP_HAND SLOTP_LEFT | SLOTP_RIGHT  
       
      items.cpp
      else if(tmpStrValue == "eye") {       it.slotPosition |= SLOTP_EYE;       it.wieldPosition = SLOT_EYE; }  
       
      movement.cpp
      else if(tmpStrValue == "eye")       slot = SLOTP_EYE;  
      case SLOT_EYE:        slotp = SLOTP_EYE;        break;  
      player.cpp
      if((item->getSlotPosition() & SLOTP_HEAD) || (item->getSlotPosition() & SLOTP_NECKLACE) || (item->getSlotPosition() & SLOTP_BACKPACK) || (item->getSlotPosition() & SLOTP_ARMOR) || (item->getSlotPosition() & SLOTP_LEGS) || (item->getSlotPosition() & SLOTP_FEET) || (item->getSlotPosition() & SLOTP_RING) || (item->getSlotPosition() & SLOTP_EYE)) ret = RET_CANNOTBEDRESSED;  
      case SLOT_EYE:         if(item->getSlotPosition() & SLOTP_EYE)                 ret = RET_NOERROR;         break;  
      creature.h
      enum slots_t {     SLOT_PRE_FIRST = 0,     SLOT_WHEREEVER = SLOT_PRE_FIRST,     SLOT_FIRST = 1,     SLOT_HEAD = SLOT_FIRST,     SLOT_NECKLACE = 2,     SLOT_BACKPACK = 3,     SLOT_ARMOR = 4,     SLOT_RIGHT = 5,     SLOT_LEFT = 6,     SLOT_LEGS = 7,     SLOT_FEET = 8,     SLOT_RING = 9,     SLOT_AMMO = 10,     SLOT_DEPOT = 11,     SLOT_LAST = SLOT_DEPOT,     SLOT_HAND = 12,     SLOT_EYE = 15,     SLOT_TWO_HAND = SLOT_HAND };  
      enums.h
      enum ConditionId_t {     CONDITIONID_DEFAULT = -1,     CONDITIONID_COMBAT = 0,     CONDITIONID_HEAD,     CONDITIONID_NECKLACE,     CONDITIONID_BACKPACK,     CONDITIONID_ARMOR,     CONDITIONID_RIGHT,     CONDITIONID_LEFT,     CONDITIONID_LEGS,     CONDITIONID_FEET,     CONDITIONID_RING,     CONDITIONID_EYE,     CONDITIONID_AMMO,     CONDITIONID_OUTFIT };  
      Após as sources, o único local em que encontrei nos scripts em lua, foi no 'data/lib/000-constant.lua' e deixei assim:
      CONST_SLOT_FIRST = 1 CONST_SLOT_HEAD = CONST_SLOT_FIRST CONST_SLOT_NECKLACE = 2 CONST_SLOT_BACKPACK = 3 CONST_SLOT_ARMOR = 4 CONST_SLOT_RIGHT = 5 CONST_SLOT_LEFT = 6 CONST_SLOT_LEGS = 7 CONST_SLOT_FEET = 8 CONST_SLOT_RING = 9 CONST_SLOT_AMMO = 10 CONST_SLOT_EYE = 15 CONST_SLOT_LAST = CONST_SLOT_AMMO Deixei um item no 'data/items/items.xml' com o slotType="eye" que foi criado, e fiz as seguintes alterações no OTClient:

      modules/game_inventory/inventory.lua
      InventorySlotStyles = {   [InventorySlotHead] = "HeadSlot",   [InventorySlotNeck] = "NeckSlot",   [InventorySlotBack] = "BackSlot",   [InventorySlotBody] = "BodySlot",   [InventorySlotRight] = "RightSlot",   [InventorySlotLeft] = "LeftSlot",   [InventorySlotLeg] = "LegSlot",   [InventorySlotFeet] = "FeetSlot",   [InventorySlotFinger] = "FingerSlot",   [InventorySlotAmmo] = "AmmoSlot",   [InventorySlotEye] = "EyeSlot" }  
      modules/game_inventory/inventory.otui
      EyeSlot < InventoryItem   id: slot15   image-source: /images/game/slots/eye   &position: {x=65535, y=14, z=0} e
      MiniWindow   id: inventoryWindow   !text: tr('Inventory')   icon: /images/topbuttons/inventory   height: 175   @onClose: modules.game_inventory.onMiniWindowClose()   &save: true   MiniWindowContents     HeadSlot       anchors.top: parent.top       anchors.horizontalCenter: parent.horizontalCenter       margin-top: 3     BodySlot       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter       margin-top: 3     LegSlot       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter       margin-top: 3     FeetSlot       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter       margin-top: 3     NeckSlot       anchors.top: slot1.top       anchors.right: slot1.left       margin-top: 10       margin-right: 5     LeftSlot       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter       margin-top: 3     FingerSlot       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter       margin-top: 3     BackSlot       anchors.top: slot1.top       anchors.left: slot1.right       margin-top: 10       margin-left: 5     RightSlot       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter       margin-top: 3     AmmoSlot       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter       margin-top: 3     EyeSlot       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter       margin-top: 3     PurseButton       margin-top: 3       anchors.top: prev.bottom       anchors.horizontalCenter: prev.horizontalCenter  
      modules/gamelib/player.lua
      InventorySlotOther = 0 InventorySlotHead = 1 InventorySlotNeck = 2 InventorySlotBack = 3 InventorySlotBody = 4 InventorySlotRight = 5 InventorySlotLeft = 6 InventorySlotLeg = 7 InventorySlotFeet = 8 InventorySlotFinger = 9 InventorySlotAmmo = 10 InventorySlotPurse = 11 InventorySlotEye = 15 InventorySlotFirst = 1 InventorySlotLast = 10  
       
      Com todas estas alterações, o que foi feito:
      O slot foi adicionado com sucesso no OTClient, aparecendo sem erros, com imagem e posicionado; O console não encontrou erro ao debugar o items.xml (testei um tipo aleatório, e dá erro o erro padrão das sources, então o tipo "eye" está correto nas sources); Dei /i em um item do tipo "eye" pra ver se o mesmo iria para o slot, mesmo caso não existisse graficamente, ele deveria ficar salvo nos dados do personagem no banco de dados, e isto não ocorreu, logo o problema está entre as sources e o client;  
      Enfim, nas sources o tipo "eye" foi criado, mas ainda não é reconhecido verdadeiramente, espero que alguém possa me ajudar, segue em anexo as sources e todos os arquivos que citei ter editado:

      Registre-se para ver attachment(s).
×