Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 02/20/14 em %

  1. JulynaMiiy

    PokexGeneration

    • Menu: ├ Informações; ├ Ediçoes; ├ Prints; ├ Download; └ Creditos. • Informações; • Edições; • PrintScreen; • Download; • Créditos; - Brun123. - Slicer. - ZerefShirou. - Zipter98. - StyloMaldoso. - JulynaMiiy. - Murluka.
    3 pontos
  2. Killua

    Cassino Interativo

    Eu fiz esse código a pedido do usuário @igorlabanca e tive ajuda do @zipter98 pra fazer. Não vou explicar oq ele faz, vou somente postar o vídeo que o igor fez mostrando como funciona. O código faz exatamente oq está no vídeo. @EDIT algumas pessoas vieram até mim para dizer que estava dando para usar mesmo sem dinheiro. Esse problema já foi resolvido. Crie Killua Cassino.lua em data/actions/scripts e coloque: Se você usa a versão do 0.3 ou 0.4 do TFS, use assim: Se você usa o TFS 1.0, use assim: E coloque essa tag no actions.xml <action actionid="2142" script="Killua Cassino.lua"/> Daí basta colocar actionID 2141 na alavanca e pronto =) Espero que gostem.
    2 pontos
  3. BananaFight

    OtClient - Tutorial Básico #1

    OtClient - Tutorial Básico #1 Aula 1 : Editando mod/Modules Bom galera, hoje eu vou ensinar vocês a como editar mod/Modules, e também como posiciona-los na janela. OBS: Quando eu falar Janela, estou me referindo aos objetos: MainWindow, Botton etc Passo 1 entendendo os arquivos Dentro da maioria das pasta no OtClient existirão 3 arquivos com as seguintes extensões: .lua.otmod.otui Cada uma dessas extensões executam um papel EXTREMAMENTE importante dentro do mod/module que você pretende criar, Mais será explicado mais para a frente, Nessa aula vamos mexer apenas no arquivo ".otui". Passo 2 Indentação Uma das coisas mais importante dentro dos arquivos ".otui" é a indentação, pois se você errar um espaçamento qualquer você pode estar 'bugando' todo o funcionamento da sua mod/module. Vou ensinar a vocês o modo certo de indentar seus códigos para que não tenham erros. MainWindowid: tutorialWindowsize: 80 80&save: true Dentro dos arquivos '.otui' só é permitido a indentação com a tecla "Espaço", Caso você tente usar "Tab" para indentar seu código ele vai dar erro e não irá funcionar. A indentação deve ser feita com apenas 2 espaços, e sempre seguindo a ordem do item que você ta criando. Exemplo: MainWindowid: tutorialWindowsize: 80 80&save: trueButtonid: Button1anchors.top: parent.topanchors.right: parent.rightmargin-left: 5 Como o Botão 'Button1' vai ficar dentro da janela ' tutorialWindow', ele tem que ficar a uma distancia de 2 espaços da janela 'MainWindow', Caso eu quebre esse espaçamento provavelmente poderei ter bugs na hora de abrir esse mod/module dentro do client. Outra coisa para tomar cuidado é quando for dar linha para adicionar outra janela, nessa linha em que separa uma janela não pode conter nem um espaço e nenhum comando. Exemplo: Certo MainWindowid: tutorialWindowsize: 80 80&save: trueButtonid: Button1anchors.top: parent.topanchors.right: parent.rightmargin-left: 5 Errado MainWindowid: tutorialWindowsize: 80 80&save: trueButtonid: Button1anchors.top: parent.topanchors.right: parent.rightmargin-left: 5 Vocês não conseguem ver a diferença, mais tente selecionar os dois códigos que vão entender melhor, o que eu falei. Agora a organização e edição de cada janela dentro do arquivo '.otui' deve seguir o mesmo principio de 2 espaços de distancia. Exemplo: Certo MainWindowid: tutorialWindowsize: 80 80&save: trueButtonid: Button1anchors.top: parent.topanchors.right: parent.rightmargin-left: 5 Errado MainWindowid: tutorialWindowsize: 80 80&save: trueButtonid: Button1anchors.top: parent.topanchors.right: parent.rightmargin-left: 5 E também esta Errado desta forma MainWindowid: tutorialWindowsize: 80 80&save: trueButtonid: Button1anchors.top: parent.topanchors.right: parent.rightmargin-left: 5 Como o botão vai aparecer dentro da janela 'MainWindow' ele tem que ficar a 2 espaçamento dela pois se eu deixar os 2 na mesma posição é como se eu estivesse dizendo ao script que são duas janelas separadas e o botton vai aparecer por conta própria quando eu executar o mod/module. Passo 3 conhecendo as janelas Existem diversos modos de se criar uma janela onde vai aparecer vários botoes textos e etc, Mais sempre vai ter uma janela que será a matriz de todos, onde todos deverão aparecer, que no nosso exemplo é : MainWindowid: tutorialWindowsize: 80 80&save: true Esse código é nossa janela principal, É nela que vai aparecer tudo que queremos mostrar com no script, Agora vou mostrar o que cada função que tem dentro de MainWindow faz. MainWindowid: esse é o ID do MainWindow, Supondo que tenham 2 MainWindow, é com esse id que vamos diferencia-lassize: aqui é onde configuramos a largura e altura da janela, nessesariamente nessa ordem&save: isso fica para as próximas aulas Não precisamos usar necessariamente size para mostrar o tamanho ou largura da janela, podemos utilizar por exemplo : width: 80height: 80 Esses 2 códigos podem ser utilizados no lugar de size e farão exatamente a mesma coisa. Caso você tenha editado ou criado algum mod/modules para testar esses códigos que mostrei acima, percebeu que na janela não aparece nome e nem nada do gênero e é isso que irei mostrar agora. !text: tr('Texto') - Essa função adiciona o texto na janela em que você adicionar esta linhaicon: img.png - Esta função pega a sua imagem e usa ela de icone para a janela ( neste caso a imagem tem que estar na mesma pasta que o arquivo '.otui', e isso só irá funcionar dependendo do tipo da janela matriz, veremos em outros tutoriais.) Com esses dois Código você consegue personalizar a janela onde irão aparecer os botoes, textos etc que você pretende fazer. Exemplo: MainWindowid: tutorialWindow!text: tr('Tutorial Window')size: 80 80&save: true Agora vamos começar a criar botoes, escrever textos e etc. Vamos começar adicionando uma Label que vai mostrar o texto 'Olá Xtibia'. MainWindowid: tutorialWindow!text: tr('Tutorial Window')size: 80 80&save: trueLabelid: Label1!text: tr('Olá Xtibia')anchors.top: parent.topanchors.left: parent.leftmargin-top: 5margin-left: 5 Como vocês podem ver apareceram algumas funções novas, que são elas : anchors.top: parent.topanchors.left: parent.leftanchors.right: parent.rightanchors.bottom: parent.bottomanchors.top: prev.topanchors.left: prev.leftanchors.right: prev.rightanchors.bottom: prev.bottommargin-top: 5margin-left: 5margin-right: 5margin-bottom: 5 Com essas funões nós determinamos onde cada item da nossa janela vai ficar. Entendendo as novas funções anchors.top: parent.top Com a linha 'anchors.top:' estamos dizendo que a posição do meu item vai ser definida para cima, agora adicionando 'parent.top' estamos dizendo que a posição do meu item deve se Colada com começo da Janela, e isso segue para left, right, bottom também. agora se no lugar de 'parent.top' eu usar 'prev.top' eu estou dizendo que meu item vai ficar colado com a parte de cima do item que tem encima, Confuso eu sei mais vou dar um exemplo: MainWindowid: tutorialWindow!text: tr('Tutorial Window')size: 80 80&save: trueLabelid: Label1!text: tr('Olá Xtibia')anchors.top: parent.topanchors.left: parent.leftLabelid: Label2!text: tr('Xtibia o melhor')anchors.top: prev.topanchors.left: parent.left Ali no script acima eu estou mandando a Label1 ficar colada com a borda de cima da janela principal, e a esquerda, Já na Label2, eu estou mando ela ficar colada com a Label1 ( pois a label1 que esta encima ) e também ficar colada com a borda da janela principal. Isso se aplica a todos os lados, se eu usar prev.left, eu vou estar dizendo que a label2 tem que ficar exatamente do lado esquerdo da label1. As funções 'margin-top: 5' vão fazer com que meu item fique com a distancia de 5 pixel ( Não tenho certeza se são pixels ) do item que esta acima MainWindowid: tutorialWindow!text: tr('Tutorial Window')size: 80 80&save: trueLabelid: Label1!text: tr('Olá Xtibia')anchors.top: parent.topanchors.left: parent.leftLabelid: Label2!text: tr('Xtibia o melhor')anchors.top: prev.topanchors.left: parent.leftmargin-top: 5 Nesse Exemplo eu fiz a label2 ficar a 5 pixel abaixo da Label1, e isso é a mesma coisa se eu ultilizar left, right, bottom eu vou pegar uma distancia do que estiver do lado do meu item ou embaixo etc. Mais agora nós não precisamos nos prender a ficar somente com parent, e prev na hora de criar um item. podemos utilizar o id de um item como referencia de onde deve ficar meu item, como no exemplo : MainWindowid: tutorialWindow!text: tr('Tutorial Window')size: 80 80&save: trueLabelid: Label1!text: tr('Olá Xtibia')anchors.top: parent.topanchors.left: parent.leftLabelid: Label2!text: tr('Xtibia o melhor')anchors.top: prev.topanchors.left: parent.leftmargin-top: 5Labelid: Label3!text: tr('Xtibia OtClient')anchors.top: parent.topanchors.left: Label1.left Nesse Exemplo eu fiz com que a Label3 ficasse a esquerda da Label1, e grudada a margem da janela principal, mais eu também poderia fazer ela ficar embaixo da Label1, e grudada ao lado direito da margem da janela principal. MainWindowid: tutorialWindow!text: tr('Tutorial Window')size: 80 80&save: trueLabelid: Label1!text: tr('Olá Xtibia')anchors.top: parent.topanchors.left: parent.leftLabelid: Label2!text: tr('Xtibia o melhor')anchors.top: prev.topanchors.left: parent.leftmargin-top: 5Labelid: Label3!text: tr('Xtibia OtClient')anchors.top: Label1.topanchors.right: parent.right Mais caso você for testar isso vai perceber que o Label2 vai ficar encima do Label1 e ao invés do Label3 ficar embaixo do Label1 ele vai ficar do lado, Para corrigir esses pequenos erros você pode juntar códigos como no exemplo : MainWindowid: tutorialWindow!text: tr('Tutorial Window')size: 80 80&save: trueLabelid: Label1!text: tr('Olá Xtibia')anchors.top: parent.topanchors.left: parent.leftLabelid: Label2!text: tr('Xtibia o melhor')anchors.top: prev.bottomanchors.left: parent.leftmargin-top: 5Labelid: Label3!text: tr('Xtibia OtClient')anchors.top: Label1.bottomanchors.right: parent.right Pelo Simples fato de eu ter trocado top por bottom agora o script sabe que a Label2 tem que ficar no fim da Label1 e o mesmo para a Label3, e por isso usamos margin, para deixa uma distancia entre cada item, e para ficar mais organizado. Bom acho que é isso, Caso eu lembre de algo relevante estarei editando e adicionando mais coisas, Espero que gostem e quais quer DUVIDAS relacionadas AO TÓPICO é só fazer um comentário aqui embaixo que estarei respondendo. @Edit, Infelizmente o Xtibia Quebrou a indentação, mais lembre-se é sempre 2 espaços.
    1 ponto
  4. TheCaos

    System de Correr (por talkaction)

    Pessoal, acabo de inventar um system de correr que é uma talkaction, e não spell. Vamos ao script: 1° - Vá na pasta do seu ot/data/talkactions/scripts, adicione um arquivo chamado correr.lua, abra-o e coloque isso dentro: 2° - Vá em talkactions.xml, abra em forma de bloco de notas e adicione isso la dentro: Pronto, script feito, se quiser adicionar algo a + nele, tipo, uma mensagem quando a pessoa falar correr, é só adicionar essa linha: Se quiser mudar a velocidade que a pessoa ganha, é só mudas o número 1000000 por qualquer outro que você quiser. Se quiser que seja somente para premium, adicione isso na seguna linha (dps de function onSay(cid, words, param)): Gostaram do script? Rep + E pessoal, não copiei de ninguém, mas por o script ser muito simples, várias pessoas já devem ter...
    1 ponto
  5. caotic

    doCreateMonsterNick(monster, nick, pos)

    Tudo bem galera xtibiana? Resolvi trazer a vocês um sistema de nick que permite mudar o nome do monstro in-game. A função e simples de se usar e não tem nenhum tipo de limitação ela foi desenvolvida na versão 8.6 com a tfs 0.3.6. Lets go: Vá em monster.h e procure isto: typedef std::list<Creature*> CreatureList; class Monster : public Creature { private: Monster(MonsterType* _mType); public: #ifdef __ENABLE_SERVER_DIAGNOSTIC__ static uint32_t monsterCount; #endif virtual ~Monster(); E coloque este codigo em baixo: std::string nick,realname; Continue em monster.h e procure: static Monster* createMonster(const std::string& name); E coloque embaixo: static Monster* createMonsterNick(const std::string& name, std::string nick); Procure também: virtual const std::string& getName() const {return mType->name;} E substitua por isto: virtual const std::string& getName() const {return nick;} Depois vá em monster.cpp e procure: Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; return createMonster(mType); } Substitua por: Monster* Monster::createMonster(const std::string& name) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; mType->name = name; return createMonster(mType); } Monster* Monster::createMonsterNick(const std::string& name, std::string nick) { MonsterType* mType = g_monsters.getMonsterType(name); if(!mType) return NULL; if (!(nick == "")) { mType->name = nick; } return createMonster(mType); } Continuando em monster.cpp procure: currentOutfit = mType->outfit; Adicionar embaixo: nick = mType->name; Vá em luascript.h e procure isto static int32_t luaDoCreateNpc(lua_State* L); Embaixo coloque: static int32_t luaDoCreateMonsterNick(lua_State* L); static int32_t luaGetCreatureNickRealName(lua_State* L); Em luascript.cpp procure: //doPlayerSetIdleTime(cid, amount) lua_register(m_luaState, "doPlayerSetIdleTime", LuaScriptInterface::luaDoPlayerSetIdleTime); Coloque embaixo: //doCreateMonster(monster, nick, pos) lua_register(m_luaState, "doCreateMonsterNick", LuaScriptInterface::luaDoCreateMonsterNick); Continue em luascript.cpp e procure isto: int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L) { //getCreatureName(cid) ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushstring(L, creature->getName().c_str()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Coloque isto: int32_t LuaScriptInterface::luaGetCreatureNickRealName(lua_State* L) { //getCreatureNickRealName(cid) ScriptEnviroment* env = getEnv(); if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster()) lua_pushstring(L, monster->realname.c_str()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaScriptInterface::luaDoCreateMonsterNick(lua_State* L) { //doCreateMonsterNick(monster, nick, pos) ScriptEnviroment* env = getEnv(); PositionEx pos; popPosition(L, pos); std::string nick = popString(L); const std::string name = popString(L).c_str(); Monster* monster = Monster::createMonsterNick(name, nick); if(!monster) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); return 1; } if(!g_game.placeCreature(monster, pos)) { delete monster; errorEx("Cannot create monster: " + name); lua_pushboolean(L, false); return 1; } monster->realname = name; lua_pushnumber(L, env->addThing((Thing*)monster)); return 1; } -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Exemplo de uso: function onSay(cid, words, param, channel) local t = string.explode(param, ",") doCreateMonsterNick(t[1], t[2], getThingPos(cid)) return true end
    1 ponto
  6. Olá xtibia e todo os usúarios, por meio desse topico resolvi criar um tutorial como ADICIONAR icon system ao servidor, sem desloga vamos lá? Servidor usado para adicionar icon system http://www.xtibia.com/forum/topic/201018-pxo-server-11-by-smix/ Bom.. como o server dele já vem istalado o systema de icon system fica até mais facil, vamos lá? logo apoís abaixa-lo o servidor vamo ao primeiro passo para adicionar icon. 1* irei usar como TESTE 3 IDS do item.otb 13590,13591 e 13592. Bom o ID 13590 sera usado como 'On' Icone On.(Icone Vivo). o ID 13591 sera usado como icone OFF/icone morto. e o ID 13592 sera usado como USÊ/Icone sendo usado. agora vamos lá nas modificações dos scripts? Action configurações. Agora vamos para a parte de LIB. Mais tome muito atenção aqui, porque tem que faze bem certinho se não bugara muitas coisas. Lib configurações. agora vamos as configurações no movements. Movements configurações. Agora vamos ao item.xml
    1 ponto
  7. Enself

    Recompensa Por Level

    Em Creaturescript Copie qualquer arquivo .lua e renomeie para onadvanced e cole isso. local vocs = { [1] = {id = 2268 , count = 200, msg = "Sua mensagem"} [2] = {id = 2268, count = 200, msg = "Sua Mensagem"}, [3] = {id = 7367, count = 30, msg = "Sua Mensagem"}, [4] = {id = 7620, count = 200, msg = "Sua Mensagem"}, [5] = {id = 2268, count= 200, msg = "Sua Mensagem"}, [6] = {id = 2268, count = 200, msg = "Sua Mensagem"}, [7] = {id = 7367, count = 30, msg = "Sua Mensagem"}, [8] = {id = 7620, count = 30, msg = "Sua Mensagem"}, } function onAdvance(cid, skill, oldlevel, newlevel) local easy = vocs[getPlayerVocation(cid)] if skill == SKILL__LEVEL and newlevel == 45 and getPlayerStorageValue(cid, 13409) < 1 then doPlayerSendTextMessage(cid, 20, easy.msg) doPlayerAddItem(cid, easy.id, easy.quant) setPlayerStorageValue(cid, 13409, 1) end return true end Em Creaturescript.xml <event type="Advance" name="OnAdvanced" event="script" value="onadvanced.lua"/> Em Login.lua Registra isso registerCreatureEvent(cid, "OnAdvanced") Créditos: Roksas Enself
    1 ponto
  8. Kluivert

    [Galeria] KluiMaster

    Oi tudo bem? neste tópico irei mostrar meus rabiscos no photoshop e sempre que puder irei atualizar o tópico Deixem ae suas criticas, sugestões e etc... Cartão de visita - Pedido! Pedido! #1 - Praticando #2 - AMA #98 #3 - AMA #97 (essa ta uma bosta) #4 - AMA #96 (+/-)
    1 ponto
  9. Sematico

    The Prophecy ShowOFF - Sematico

    Bem vindo ao The Prophecy OTS. Fiquei com vontade de voltar a ativa no mapping, então logo de cara resolvi criar um mapa jogável para um Open Tibia Server que vou criar quem sabe em alguns anos - vou crair no meu tempo livre. Participei de uma tentativa de criação de um OT alguns anos atrás, mas como não deu certo, vou acabar reutilizando alguns mapas que EU fiz. Ou seja, se você ver alguma coisa que acha que já viu em algum lugar, é bem provável que seja um mapa que divulguei alguns anos atrás! Única coisa que não é minha é o FORMATO (shape) do continente, que baixei de algum lugar uns bons anos atrás e não me lembro o autor. Bom, como aqui não é lugar para ficar explicando como vai ser o server, já vou postando os mapas: Minimap Inicial Templo de Atérpea (Cidade Inicial) Comentem o que acharam, dicas, opiniões... Todos são bem vindos. Valeu! - Sematico
    1 ponto
  10. u n d e r

    Reformulações em nosso time

    Fala Xtibianos, Preparados para uma onda de novidades? Estamos realmente empolgados em começar a fazer o Xtibia tremer. Já se passou mais de uma semana e neste período realizamos 3 reuniões. Rolou um entrosamento entre os presentes, é claro! Nestas reuniões, acabamos por discutir um pouco sobre nossa atual staff e pequenas alterações foram realizadas. Aiga deixou nossa equipe de Estagiários de Scripting. Dudinha está em tempo de transformações e devido aos estudos, pediu sua remoção da equipe. Nós agradecemos e desejamos todo o sucesso em sua vida pessoal e profissional! FelipeSartori é nosso novo Estagiário de Design. Profissional da área, trabalhando como freelancer, Felipe se propôs a ajudar nossa comunidade. Torcemos pelo seu crescimento em nosso fórum. Avilack surpreendeu e agora faz parte da nossa equipe de Colaboradores. Avilack é aventureiro e criativo, gamado em um RPG! E aí, aprovam ou desaprovam? Sintam-se livres para expor suas críticas ou elogios. Queremos saber de vocês! Vocês podem acompanhar um tópico criado pelo nosso diretor Gabriel Couto com a estrutura atual da equipe: http://www.xtibia.com/forum/topic/227775-ranks-equipe-xtibia/ Fico por aqui, uma excelente noite a todos.. ao som de Love me Again - John Newman
    1 ponto
  11. Boa noite galerinha do XTibia, então hoje tenho apresentar meu segundo tutorial na área. Hoje vou fazer a continuação do primeiro, só que hoje vamos adicionar um verniz localizado no nosso cartão de visita. Para quem não viu, segue o link para ver o tutorial. Então vamos começar, primeiramente abra o documento com o seu cartão de visita pronto. Agora vamos abrir uma nova página. Volte na primeira página e copie o que deseja que fique verniz e vamos pintar de preto 100% (C: 100 M: 100 Y:100 K:100). Vale lembrar que ao copiar e colar na página seguinte não pode mover em hipótese alguma o desenho, texto ou etc... Então ficará assim. Depois de fazer com a frente do cartão de visita, vamos para o verso e iremos fazer a mesma coisa. Agora não se esqueça de colocar a marca de corte e fazer a sangra. Pronto, seu cartão de visita com verniz localizado está pronto! Qualquer dúvida poste nos comentários que irei responder. Espero que tenham gostado, abraços.
    1 ponto
  12. Killua

    Projeto Tutores de Scripting

    Bom, primeiramente temos que ler e entender o script. Oq ele faz? Quando o player usa as palavras "ninja" ou "promotion" e depois "yes" com esse NPC, o script checa o level e a vocação do player. Se o player tiver vocação diferente de 2 e level maior ou igual 8, sua vocação passará a ser 2. Para adicionar mais opções, você deverá dar ao player a possibilidade de usar outras palavras (Exemplo: "ninja", "chunin", "jounin") e fazer o script atuar baseado nessas palavras. Para fazer isso de forma mais curta e bonita, nós usariamos um loop. Mas vamos fazer o jeito mais simples mesmo, que é assim: Para facilitar, crie uma tabela para encurtar o script, exemplo: local tabela = {"chunin", "jounin", "hokage", "senin", "sanin"} Depois, você irá fazer várias checagens com if e elseif, exemplo: if msgcontains(msg, "chunin") then doPlayerSetVocation(cid, x) elseif msgcontains(msg, "jounin") then doPlayerSetVocatio(cid, y) E ir continuando.Vou deixar aqui o início do código para você Para fazer um NPC do 0, digamos que existe um molde: O início do seu script deve conter isso no início: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid E isso no final: npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Existem também outros moldes, mas pode usar sempre esse. Depois basta construir um script normalmente usando if msgcontains(msg, "blablabla") para checar oq o player fala e talkState para ajudar na organização (ordem em que as palavras devem ser ditas pelo player). Como usar o talkState? Basicamente, você pode pensar que ele é uma variável global à qual pode-se atribuir qualquer valor. Vou usar seu NPC como exemplo de uso do talkUser: if (msgcontains(msg, 'promotion')) then talkState[talkUser] = 1 selfSay('Wich vocation do you choose? chunin, jounin, hokage, sanin or senin?', cid) end Essa parte faz o seguinte: Se o jogador disser "promotion" ao NPC, talkState[talkUser] ganhará valor 1. if msgcontains(msg, 'chunin') and talkState[talkUser] == 1 then Essa parte vai checar duas coisas: Se a palavra dita foi "chunin" e se o valor de talkState[talkUser] é 1. Se o valor não for 1, não adiantará nada dizer a palavra certa e vice-versa. É basicamente isso, vc pode ir dando os valores para talkState[talkUser] conforme vc quer que seja a ordem das falas. Espero que tenha dado para entender, ainda não sou muito bom explicando =S
    1 ponto
  13. ok vamos la... abra data/creatuscript/levelup.lua abra data/creaturescript/login.lua
    1 ponto
  14. zipter98

    Npc

    Para checar se o jogador possui os 9 items, eu recomendaria fazer assim: local items = {ids} local check = 0 for i = 1, #items do if getPlayerItemCount(cid, items[i]) >= 1 then check = check + 1 end end if check == #items then ... else ... end
    1 ponto
  15. DuuhCarvalho

    Npc

    ta ae .. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local pos = {x= 160, y= 54, z= 7} local items = {2195, 2641, 7886, 2640, 2190, 2383, 2643, 7424, 2520} local check = 0 local storage = 1015 if msgcontains(msg, 'yes') then if getPlayerStorageValue(cid, storage) <= 0 then for i = 1, #items do if getPlayerItemCount(cid, items[i]) >= 1 then check = check + 1 end end if check == #items then doTeleportThing(cid, pos) for j = 1, #items do doPlayerRemoveItem(cid, items[j], 1) end selfSay('Parabéns, Você foi teleportado.', cid) setPlayerStorageValue(cid, storage, 1) else selfSay('Voce precisa de todos os items.', cid) end else doTeleportThing(cid, pos) selfSay('Parabéns, Você foi teleportado.', cid) end elseif msgcontains(msg, 'no') then selfSay('Ok, então', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
    1 ponto
  16. Tony

    [Galeria] KluiMaster

    Klui mô lindo, o cartão de visita leve em conta que ele vai ser impresso, sempre lembrando coisas impressas são criadas na plataforma CMYK. 01° Tamanho : Qual o tamanho ideal para o cartão de visita ? eu smp uso 9cm x 5cm 02° Areá de respiro : Oque é área de respiro ? Link Leio e você entendera.
    1 ponto
  17. u n d e r

    Morden AAC Shop

    Em sua database os accounts modifications deve ter um id também, você usa os mesmos.
    1 ponto
  18. AnneMotta

    [Galeria] KluiMaster

    A respeito das primeiras imagens como o jakiin disse a tipografia deixou a desejar mais você tem muito talento, parabéns See ya!
    1 ponto
  19. u n d e r

    como deixa meu site on ?

    Kazana, É só você traduzir o erro que o console te passa. 11:49:22 [mysql] Error: MySQL shutdown unexpectedly. 11:49:22 [mysql] This may be due to a blocked port, missing dependencies, 11:49:22 [mysql] improper privileges, a crash, or a shutdown by another method. 11:49:22 [mysql] Press the Logs button to view error logs and check 11:49:22 [mysql] the Windows Event Viewer for more clues 11:49:22 [mysql] If you need more help, copy and post this 11:49:22 [mysql] entire log window on the forums 11:49:22 [mysql] Erro: MySQL desligado inesperadamente. 11:49:22 [mysql] Isso pode ser devido a uma porta bloqueada, faltando dependências, 11:49:22 [mysql] privilégios indevidos, um acidente ou um desligamento por outro método. 11:49:22 [mysql] Pressione o botão de logs para ver os logs de erros e verifique 11:49:22 [mysql] no visualizador de eventos do windows para obter mais pistas 11:49:22 [mysql] Se você precisar de mais ajuda, copie e cole 11:49:22 [mysql] toda a janela de log em fórums. Isso já te dá alguns nortes. E depois, você verifica o log, perceba que o erro acontece exatamente na última linha: 2014-02-20 11:51:00 724 [ERROR] InnoDB: Attempted to open a previously opened tablespace. Previous tablespace mysql/slave_relay_log_info uses space ID: 3 at filepath: .\mysql\slave_relay_log_info.ibd. Cannot open tablespace theforgottenserver/account_viplist which uses space ID: 3 at filepath: .\theforgottenserver\account_viplist.ibd O próprio console, te dá algumas dicas de como resolver: InnoDB: Error: could not open single-table tablespace file .\theforgottenserver\account_viplist.ibd InnoDB: We do not continue the crash recovery, because the table may become InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it. 1) você deve verificar as permissões do arquivo em que ele diz o erro lá em cima (\theforgottenserver\account_viplist.ibd) InnoDB: To fix the problem and start mysqld: InnoDB: 1) If there is a permission problem in the file and mysqld cannot InnoDB: open the file, you should modify the permissions. 2) Se a tabela não é necessário, você pode tentar restaurar um backup e remover o .idb. Ele vai se encarregar de ignorar a tabela. InnoDB: 2) If the table is not needed, or you can restore it from a backup, InnoDB: then you can remove the .ibd file, and InnoDB will do a normal InnoDB: crash recovery and ignore that table. 3) Se as permissões não derem certo, um backup não resolver, você pode tentar setar no my.cnf, inoodb_force_recovery > 0. Você vai forçar o InnoDB continuar a recuperação de falhas. InnoDB: 3) If the file system or the disk is broken, and you cannot remove InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf InnoDB: and force InnoDB to continue crash recovery here.
    1 ponto
  20. FlamesAdmin

    Dat Editor, Item Editor, RME

    Fico feliz por ter conseguido . Podem mover o tópico.
    1 ponto
  21. Nolis

    uMapinha

    S
    1 ponto
  22. Está aqui o Cassino funcionando perfeitamente =) O script ficou gigante pq tem muitos efeitos Tive a ilustre ajuda de meu amigo @zipter98 na execução do código local bixos = {"Dog", "Deer", "Pig", "Rat"} local positions = {{x = 133, y = 43, z = 7}, {x = 135, y = 43, z = 7}, {x = 137, y = 43, z = 7}} local price = 5000 local prize = 50000 function onUse(cid, item, fromPosition, itemEx, toPosition) local first = math.random(1, #bixos) local second = math.random(1, #bixos) local third = math.random(1, #bixos) local tab = {} if getGlobalStorageValue(82192) > os.time() then doPlayerSendCancel(cid, "Aguarde um pouco para apostar.") return true end if getPlayerMoney(cid) < price then doPlayerSendCancel(cid, "Voce precisa de " .. price .. " para jogar.") end setGlobalStorageValue(82192, os.time() + 6) for i = 1, (#positions) do doSendMagicEffect(positions[i], 22) end doPlayerRemoveMoney(cid, price) doCreateMonster(bixos[first], positions[1]) doSendMagicEffect(positions[1], 26) addEvent(doSendMagicEffect, 100, positions[1], 31) table.insert(tab, first) setGlobalStorageValue(bixos[first], getGlobalStorageValue(bixos[first])+1) addEvent(function() doCreateMonster(bixos[second], positions[2]) doSendMagicEffect(positions[2], 26) addEvent(doSendMagicEffect, 100, positions[2], 31) table.insert(tab, second) end, 1000) addEvent(function() doCreateMonster(bixos[third], positions[3]) doSendMagicEffect(positions[3], 26) addEvent(doSendMagicEffect, 100, positions[3], 31) setGlobalStorageValue(bixos[third], getGlobalStorageValue(bixos[third])+1) table.insert(tab, third) end, 2000) addEvent(function() doRemoveCreature(getTopCreature(positions[1]).uid) doRemoveCreature(getTopCreature(positions[2]).uid) doRemoveCreature(getTopCreature(positions[3]).uid) doSendMagicEffect(positions[1], 54) doSendMagicEffect(positions[2], 54) doSendMagicEffect(positions[3], 54) if tab[1] == tab[2] and tab[1] == tab[3] then doPlayerAddMoney(cid, prize) doSendAnimatedText(getThingPos(cid), "Voce", 93) addEvent(doSendAnimatedText, 800, getThingPos(cid), "Ganhou", 93) addEvent(doSendAnimatedText, 1600, getThingPos(cid), "" .. prize .."gps!", 93) doSendMagicEffect(getThingPos(cid), 30) doSendMagicEffect(positions[1], 30) doSendMagicEffect(positions[2], 30) doSendMagicEffect(positions[3], 30) addEvent(doSendMagicEffect, 800, getThingPos(cid), 29) addEvent(doSendMagicEffect, 800, positions[1], 29) addEvent(doSendMagicEffect, 800, positions[2], 29) addEvent(doSendMagicEffect, 800, positions[3], 29) addEvent(doSendMagicEffect, 1600, getThingPos(cid), 28) addEvent(doSendMagicEffect, 1600, positions[1], 28) addEvent(doSendMagicEffect, 1600, positions[2], 28) addEvent(doSendMagicEffect, 1600, positions[3], 28) else doSendAnimatedText(getThingPos(cid), "Voce", 93) addEvent(doSendAnimatedText, 800, getThingPos(cid), "Perdeu", 93) addEvent(doSendAnimatedText, 1600, getThingPos(cid), "=(", 93) end end, 3500) return true end
    1 ponto
  23. é so ir em login.lua e adicionar isso: doTeleportThing(cid, getClosestFreeTile(cid, getTownTemplePosition(getPlayerTown(cid))))
    1 ponto
  24. Killua

    Projeto Tutores de Scripting

    Oi amigo, vamos lá: Primeiramente vc deixou de usar uma função "mãe", que no caso acho que a que mais se adequa é function onAdvance(cid, skill, oldLevel, newLevel). A parte de trocar o storage por skill, é só mudar o getPlayerStorageValue(cid, 12348) para getPlayerSkillLevel(cid, skillId). Mas para fazer um script como esse, eu particularmente prefiro usar um loop para facilitar, se vc quiser, eu mostro como ficaria com o loop. A parte do else vc fez errado. Vou te explicar o princípio do if/else usando um exemplo em LUA e um traduzido em português. É o seguinte, quando vc usa um if, vc está impondo uma condição (se for assim, então faça isso) e o else serve para você dizer oq acontecerá no caso de sua condição não ser cumprida. Por exemplo: if getPlayerItemCount(cid, 3630) >= 1 then doPlayerRemoveItem(cid, 3630, 1) doPlayerAddItem(cid, itemid, count) doPlayerSendTextMessage(cid, 22, "Voce recebeu um item.") else doPlayerSendCancel(cid, "Voce não possui o item necessário.") end Traduzindo esse código para o português, ficaria assim: se getPlayerItemCount(cid, 3630) >= 1 então doPlayerRemoveItem(cid, 3630, 1) doPlayerAddItem(cid, itemid, count) doPlayerSendTextMessage(cid, 22, "Voce recebeu um item.") se não doPlayerSendCancel(cid, "Voce não possui o item necessário.") end Ou seja, se o player não tiver pelo menos um item de id 3630, ele receberá a mensagem "Você não possui o item necessário.". O seu erro foi deixar o if doPlayerRemoveItem(cid, 3630, 1) then no final, o local correto seria acima de local tab = getitem[getPlayerStorageValue(cid, 12348)]. Espero ter ajudado, continue perguntando
    1 ponto
  25. vocês fez o pedido no local errado, deveria ser em pedido e duvidas - scripting ----------------------- quanto ao pedido em movements crie um arquivo.lua e adicione isso dentro local positions = { {x = 101, y = 117, z = 4}, -- aqui vc coloca a posição pra onde ele vão {x = 101, y = 117, z = 4}, {x = 101, y = 117, z = 4}, {x = 101, y = 117, z = 4}, {x = 101, y = 117, z = 4} } function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) doTeleportThing(cid, positions[math.random(1, #positions)]) return true end em movement.xml adicione essa tag <movevent type="StepIn" actionid="31234" event="script" value="Nome do script.lua"/> adicione o actionid pelo rme no tile que o player aparece quando nasce
    1 ponto
  26. Nao to em casa, nao testei e fiz correndo: local config = { level = 100, -- level necessario para usar effect = {10}, -- efeito que ira soltar ao usar o buff, caso for mais de um, adicionar virgulas dentro da tabela time = 60, -- tempo em segundos que ira durar o buff outfit = 130, -- outfit que vai virar health = 11, -- quantidade de hp que vai almentar mana = 11, -- quantidade de mp que vai almentar ml = 11, -- quantos ira aumentar o skill de ML fist = 11, -- quantos ira aumentar o skill de Fist sword = 11, -- quantos ira aumentar o skill de Sword axe = 11, -- quantos ira aumentar o skill de Axe club = 11, -- quantos ira aumentar o skill de Club distance = 11, -- quantos ira aumentar o skill de Distance shield = 11 -- quantos ira aumentar o skill de Shield } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, config.time*1000) setConditionParam(condition, CONDITION_PARAM_STAT_MAXHEALTH, config.health) setConditionParam(condition, CONDITION_PARAM_STAT_MAXMANA, config.mana) setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, config.ml) setConditionParam(condition, CONDITION_PARAM_SKILL_FIST, config.fist) setConditionParam(condition, CONDITION_PARAM_SKILL_SWORD, config.sword) setConditionParam(condition, CONDITION_PARAM_SKILL_AXE, config.axe) setConditionParam(condition, CONDITION_PARAM_SKILL_CLUB, config.club) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, config.distance) setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELD, config.shield) setConditionParam(condition, CONDITION_PARAM_BUFF, true) local condition = createConditionObject(CONDITION_OUTFIT) setConditionParam(condition, CONDITION_PARAM_TICKS, config.time*1000) setConditionParam(condition, CONDITION_PARAM_OUTFIT, {lookType = config.outfit}) function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) >= config.level then if getCreatureCondition(cid, CONDITION_ATTRIBUTES) == false then for i=1, #config.effect do doSendMagicEffect(getCreaturePosition(cid), config.effect[i]) end doCreatureSay(cid, "Ohhhhw", TALKTYPE_ORANGE_1) doAddCondition(cid, condition) else doPlayerSendCancel(cid, "Você ja ta transformado.") end else doPlayerSendCancel(cid, "Voce não tem level nessessario.") end return true end
    1 ponto
  27. Sematico

    Seu último mapa - your last map

    Voltando a ativa! Se vcs nao perceberam é a foto final do gif da minha assinatura que eu fiz Espero que gostem!
    1 ponto
  28. Testado e funcionado no movement adicione isso function onStepIn(cid, item, position, fromPosition) local itemid = {2382, 12252, 12253, 12254, 12255, 12256, 12257, 12258, 2160} --items que precisa pra pode passa local pos = {x= 101, y= 117, z= 4} -- posição pra onde sera teleportado if getPlayerItemCount(cid, itemid) >= 1 then doPlayerSendCancel(cid, "Agora voce pode duela com o elite dos 4.") doTeleportThing(cid, pos) else doPlayerSendCancel(cid, "Voce nao tem as insignias.") doTeleportThing(cid, fromPosition) end return true end tag <movevent type="StepIn" actionid="31234" event="script" value="nome do script.lua"/> so basta adicionar o actionid no chão pelo rme bye, vo ir joga bola voltei simplifiquei mais a script
    1 ponto
  29. SeKtooR

    Projeto Tutores de Scripting

    Bom estou desenvolvendo um Sistema que quando chegar ao Certo nível de skill ganha-se um item. local getitem = { [10] = {item, "Voce ganhou uma espada nivel 2 por seu desempenho."}, --[skill necessaria] = {id do item, mensagem}, [20] = {item, "Legal! Voce ganhou uma espada nivel 3."}, [30] = {item, "Parabens! Voce ganhou uma espada nivel 4."}, [40] = {item, "Woow! Voce ganhou uma espada nivel 5."}, [50] = {item, "Wooooooooooooow!!! Voce ganhou uma espada nivel 6."}, [80] = {item, "Excellent!!! Voce conseguiu a espada suprema nivel 7."}, } if getitem[getPlayerStorageValue(cid, 12348)] then local tab = getitem[getPlayerStorageValue(cid, 12348)] doPlayerAddItem(cid, tab[1], 1) doSendMagicEffect(getCreaturePosition(cid), 15) doPlayerSendTextMessage(cid, 27, tab[2]) if doPlayerRemoveItem(cid, 3630, 1) else return doPlayerSendCancel(cid, "Voce nao possui pontos suficientes") else return doPlayerSendCancel(cid, "Voce nao possui pontos suficientes") end (Foi o Zipter que fez a maior parte) Oque eu quero no script: Gostaria que verifica-sem e reviza-sem pra ver se errei algo na parte do else, e me fala-sem oque eu errei, e também queria trocar o Storage por skill, a quantidade de certa skill.
    1 ponto
  30. Obrigado pelo elogio ao impala, levou um certo tempo pra ser feito e.e Pode ter certeza que o chamaremos se preciso, abraço.
    1 ponto
  31. cara primeiro entra na pasta do server vai no config.lua ai la embaixo no ip troca pra 127.0.0.1 ,abri o client e o ip change coloca 127.0.0.1 no ipchange tmb ,ai entra no server normal ACC do god (222/222 ou 333/333 ou 444/444) caso vc esteja usando o otclient vc nao vai precisa de ipchange intao vc vai entra na pasta do ot client vai em modules ,depois entergame ,entergame.lua e tenta acha o IP do skyfall e muda pra 127.0.0.1 CAUSO NAO CONSEGUI MANDA PM eiiii #gabrieltxu nao tem como vc posta o mapa do skyfall completo pq tipo nao to conseguindo achar as caves e tals 1 exemplo ...
    1 ponto
  32. LeoTK

    Server Gabrieltxu 3.2 Versao ADM Sara

    cara usa sqlite -.- para saber normalmente e a segunda acc
    1 ponto
  33. LeoTK

    Server Gabrieltxu 3.2 Versao ADM Sara

    cara kkk claro que é possivel simplesmente voce tem que saber mecher no dat editor itemoteditor < pra editar o item.otb tem que saber editar as scripts e pronto mais cara eu ando muito ocupado com meu servidor emtaum abre um topico pra alguem responder ok xD
    1 ponto
  34. Olá pessoal do XTibia. Bom, percebi que muitos servidores de pokemon estão precisando de uma Shiny Stone, então, estou aqui para ensinar a vocês como adicionar uma no servidor. Não vou falar muito, vamos direto ao assunto! Bom, veja este código: local evo = { ["Abra"] = "Shiny Abra", ["Arcanine"] = "Shiny Arcanine", ["Beedrill"] = "Shiny Beedrill", ["Blastoise"] = "Shiny Blastoise", ["Dratini"] = "Shiny Dratini", ["Electabuzz"] = "Shiny Electabuzz", ["Electrode"] = "Shiny Electrode", ["Farfetchd"] = "Shiny Farfetchd", ["Grimer"] = "Shiny Grimer", ["Growlithe"] = "Shiny Growlithe", ["Gyarados"] = "Red Gyarados", ["Hitmonchan"] = "Shiny Hitmonchan", ["Hitmonlee"] = "Shiny Hitmonlee", ["Horsea"] = "Shiny Horsea", ["Jynx"] = "Shiny Jynx", ["Onix"] = "Crystal Onix", ["Kingler"] = "Shiny Kingler", ["Krabby"] = "Shiny Krabby", ["Parasect"] = "Shiny Parasect", ["Pikachu"] = "Shiny Pikachu", ["Raichu"] = "Shiny Raichu", ["Raticate"] = "Shiny Raticate", ["Scyther"] = "Shiny Scyther", ["Seadra"] = "Shiny Seadra", ["Tentacruel"] = "Shiny Tentacruel", ["Venomoth"] = "Shiny Venomoth", ["Venusaur"] = "Shiny Venusaur", ["Voltorb"] = "Shiny Voltorb", ["Electrode"] = "Shiny Electrode", ["Pinsir"] = "Shiny Pinsir", ["Gengar"] = "Shiny Gengar", ["Snorlax"] = "Big Snorlax", ["Vaporeon"] = "Shiny Vaporeon", ["Flareon"] = "Shiny Flareon", ["Jolteon"] = "Shiny Jolteon", ["Kadabra"] = "Shiny Kadabra", ["Alakazam"] = "Shiny Alakazam", ["Zubat"] = "Shiny Zubat", ["Pidgeot"] = "Shiny Pidgeot", ["Paras"] = "Shiny Paras", ["Parasect"] = "Shiny Parasect", ["Golbat"] = "Shiny Golbat", } local pokeballs = { [2531] = {"Pokeball"}, [2557] = {"Superball"}, [2524] = {"Greatball"}, [2525] = {"Ultraball"}, [2523] = {"Masterball"}, } function onUse(cid, item, fromPosition, itemEx, toPosition) if isMonster(itemEx.uid) and getCreatureMaster(itemEx.uid) == cid then local monster = getCreatureName(itemEx.uid) if evo[monster] then local health, maxHealth = getCreatureHealth(itemEx.uid), getCreatureMaxHealth(itemEx.uid) doRemoveCreature(itemEx.uid) doRemoveItem(item.uid) local summon = doCreateMonster(evo[monster], toPosition) doConvinceCreature(cid, summon) local balls = pokeballs[getPlayerSlotItem(cid,8).itemid] doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "name", ""..evo[monster].." "..balls[1]) doCreatureAddHealth(summon, health-maxHealth) doSendMagicEffect(getThingPos(summon), 18) return TRUE end end return FALSE end Primeiramente, copie, cole em um bloco de notas e salve o código na extensão "lua" com o nome "shiny" exatamente como mostra a imagem: Agora, coloque o arquivo "shiny.lua" no diretorio "DATA/ACTIONS/SCRIPTS/STONES" do seu servidor. Depois, volte para a pasta "ACTIONS", e abra o arquivo "actions.xml" pelo bloco de notas ou algum editor de texto. Depois é só adicionar em qualquer linha vazia esta tag: <action itemid="2361" event="script" allowfaruse="10" value="stones/shiny.lua"/> Agora é só salvar e pronto, seu servidor tem uma shiny stone. :weight_lift: ATENÇÃO: Caso quando alguem usar a shiny stone em um pokemon, e ele desaparecer e não voltar mais, é porque está faltando esse pokemon no servidor ou porque o script dele está com erros. Favor enviar-me uma PM dizendo quais os pokemons shiny que devem estar faltando no script para eu atualizar o código. :construction: Gostou? Resolveu o seu problema? Favor +REP! Contato: darkvic369@live.com :XTibia_smile:
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...