-
Total de itens
361 -
Registro em
-
Última visita
-
Dias Ganhos
10
Tudo que joaohd postou
-
Na hora que for salvar seu script, escolha a codificação utf-8. flw
-
Como você quer aprender, darei um exemplo: local config = { [{0,1}] = "Rat", [{2, 10}] = "Dragon", [{11, 20}] = "Demon" } level = 11 for k,v in pairs(config) do if level >= k[1] and level <= k[2] then print(v) end end Use algum debugger para executar. Pode ser o scite ou o otscriptlive. Caso não tenha acesso a eles, use o site http://www.lua.org/demo.html Vá alterando o valor de level e veja o que irá aparecer escrito. Bom proveito. flw
-
Tente meu script novamente. Acredito que arrumei o erro. flw
-
Tente assim: local config = { removeOnUse = "no", usableOnTarget = "yes", -- can be used on target? (fe. healing friend) splashable = "no", realAnimation = "no", -- make text effect visible only for players in range 1x1 healthMultiplier = 1.0, manaMultiplier = 1.0 } local animation = "" config.removeOnUse = getBooleanFromString(config.removeOnUse) config.usableOnTarget = getBooleanFromString(config.usableOnTarget) config.splashable = getBooleanFromString(config.splashable) config.realAnimation = getBooleanFromString(config.realAnimation) local POTIONS = { [8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion [7618] = {empty = 7636, splash = 2, health = {100, 200}}, -- health potion [7588] = {empty = 7634, splash = 2, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8, 11, 12}, vocStr = "knights and paladins"}, -- strong health potion [7591] = {empty = 7635, splash = 2, health = {500, 700}, level = 80, vocations = {4, 8, 12}, vocStr = "knights"}, -- great health potion [8473] = {empty = 7635, splash = 2, health = {1550, 1600}, level = 130, vocations = {4, 8, 12}, vocStr = "knights"}, -- ultimate health potion [7620] = {empty = 7636, splash = 7, mana = {220, 330}}, -- mana potion [7589] = {empty = 7634, splash = 7, mana = {250, 390}, level = 50, vocations = {1, 2, 3, 5, 6, 7, 9, 10}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion [7590] = {empty = 7635, splash = 7, mana = {850, 950}, level = 80, vocations = {1, 2, 5, 6, 9, 10}, vocStr = "sorcerers and druids"}, -- great mana potion [8472] = {empty = 7635, splash = 3, health = {500, 700}, mana = {410, 690}, level = 80, vocations = {3, 7, 11}, vocStr = "paladins"} -- great spirit potion } local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) local potion = POTIONS[item.itemid] if(not potion) then return false end if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then if(not config.splashable) then return false end if(toPosition.x == CONTAINER_POSITION) then toPosition = getThingPos(item.uid) end doDecayItem(doCreateItem(2016, potion.splash, toPosition)) return true end if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1) return true end local health = potion.health if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then animation = math.ceil(math.random(health[1], health[2]) * config.healthMultiplier) return false end local mana = potion.mana if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then animation = math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier) return false end doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) if(not realAnimation) then doCreatureSay(itemEx.uid, "+" .. animation, TALKTYPE_ORANGE_1) else for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do if(isPlayer(tid)) then doCreatureSay(itemEx.uid, "+" .. animation, TALKTYPE_ORANGE_1, false, tid) end end end doAddCondition(cid, exhaust) if(not potion.empty or config.removeOnUse) then return true end pot_count = getPlayerItemCount(cid, potion.empty) return true end flw
-
Tente assim: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) 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 GSS(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerStorageValue(cid, 9899) <= 0 then if getPlayerItemCount(cid,5879) >= 1 then if doPlayerRemoveItem(cid,5879,1) then npcHandler:say('Here is your spool of yarn!', cid) doPlayerAddItem(cid,5886,1) setPlayerStorageValue(cid, 9899, 1) end else npcHandler:say('Sorry, you don\'t have the giant spider silk!', cid) end else npcHandler:say('Sorry, you have already traded with me.', cid) end end keywordHandler:addKeyword({'giant spider silk'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you wanna exchange a giant spider silk into a {spool of yarn}?.'}) local node1 = keywordHandler:addKeyword({'spool of yarn'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Are you sure?'}) node1:addChildKeyword({'yes'}, GSS, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Come back when you want.', reset = true}) npcHandler:addModule(FocusModule:new()) flw
-
[Help] Ant-Divulguer [Help] // Gente Ajuda Aí =)!
tópico respondeu ao 69768489 de joaohd em Lixeira Pública
Vários tópicos com o mesmo conteúdo. Sua dúvida já foi sanada neste http://www.xtibia.co...-help-vale-rep/ tópico e posso garantir que funciona perfeitamente. Fechado. flw -
Este é o verdadeiro scan: http://www.virustotal.com/file-scan/report.html?id=ad51b44c377bf3e6d27ff1280bdf2ec5d5049f84a302dc3e3e65c434e4347486-1311185956 Totalmente infectado. Conteúdo removido e usuário banido. flw
-
Vocations [Vip] Não Utiliza Potions!
tópico respondeu ao WaguiinRodriguez de joaohd em Lixeira Pública
Copie seu potions.lua aqui para que te ajude. flw -
[Warning - Items::loadfromxml] Cannot Load Items File
tópico respondeu ao krudan de joaohd em Lixeira Pública
Existe algum erro de fechamento de tags em algum lugar no actions.xml. Procure por alguma aspa ou barra faltando. Não necessariamente está no final do arquivo. flw -
Vocations [Vip] Não Utiliza Potions!
tópico respondeu ao WaguiinRodriguez de joaohd em Lixeira Pública
O arquivo potions.lua também é necessário, pois é nele que as mudanças devem ser feitas. flw -
Só Pode Usar "x" Magia Quando Usar "y" Magia 5 Vezes...
tópico respondeu ao history de joaohd em Lixeira Pública
Faça assim: No Furan.lua, abaixo de : function onCastSpell(cid, var) Coloque assim setPlayerStorageValue(cid, 9896, getPlayerStorageValue(cid, 9896) + 1) Depois, faca a verificacao no Ghugan: if getPlayerStorageValue(cid, 9896) >= 5 then SOLTA MAGIA setPlayerStorageValue(cid, 9896, 0) end flw -
Podem me chamar de chato por ficar apresentando essas bibliotecas não relacionadas à otserver, mas continuarei trazendo-as. Desta vez, a descoberta foi interessante. Já pensou em criar jogos 2d estilo flash com fisica usando lua? Pois é, é possível. Procurando na internet, achei este fascinante framework chamado Love2d. Veja algumas imagens: Caso queira testar os jogos: Clique aqui. Lembrando que quem quiser testar, tem de instalar o love primeiro, o link esta abaixo. Gostou? Quer saber mais? Acesse: www.love2d.org flw
-
Eu conheço dois modos de se fazer isto. Usando algum tipo de dll injection + tibiaapi ou entao um aplicativo que seria responsavel por executar a musica, iniciando junto ao cliente e monitorando alguma porta do pc esperando por pacotes enviados por um outro aplicativo que roda no servidor. O melhor método é o primeiro, mas infelizmente não sei mexer com dll injection e/ou tibiaapi. flw
-
É isso mesmo! Bom, muita gente não conhece o poder da linguagem lua e constantemente venho batendo nesta tecla para mostrar que pode-se fazer todo tipo de coisa com lua. Hoje venho mostrar a biblioteca ProteaAudio, que executa arquivos .ogg. Para tanto, fiz uma função que executa uma playlist, com a opção de randomizar a execução. Este script surgiu quando eu estava trabalhando na minha equipe para montar um servidor de pokemon com audio, daí as músicas serem de pokemon. Vamos ao script: require("proAudioRt") -- Função que cria uma playlist e a executa function play(list, stack, rand, loop) rand = rand or false if not proAudio.create() then os.exit(1) end if stack == (#list+1) then if loop == false then proAudio.destroy() return false else stack = 1 end end local nex = rand == true and list[math.random(#list)] or list[stack] local x = proAudio.sampleFromFile(nex) if x then proAudio.soundPlay(x) print("Now playing: ".. nex .. "[".. stack .. "/".. #list .."]") end while proAudio.soundActive() ~= 0 do proAudio.sleep(0.5) end return play(list, stack+1, rand, loop) end -- Minha playlist local c = { [1] = "bgm-01.ogg", [2] = "bgm-02.ogg", [3] = "bgm-03.ogg", [4] = "bgm-04.ogg", [5] = "bgm-05.ogg", [6] = "bgm-06.ogg", [7] = "bgm-07.ogg", [8] = "bgm-08.ogg", [9] = "bgm-09.ogg", [10] = "bgm-10.ogg", } -- Executa a playlist c, iniciando de 2 com randomização habilitada play(c, 2, true) Para executar, é necessária a biblioteca ProteaAudio e de preferência o Scite instalados. Você pode também baixar o pacote com todos os arquivos (biblioteca ProteaAudio, função e músicas) aqui. Removi a dll lua5.1 do pacote pois acusava virus. Caso forem executar, lembrem-se de adicioná-la à pasta dos arquivos. flw
-
Tente usar as tags também no movements.xml flw
-
O link para download está errado. 24 horas para consertá-lo ou o tópico será fechado. flw
-
Tópico fechado. Caso necessite, mande pm que reabrimos seu tópico. flw
-
Pegue os códigos e execute-os. Troque funções e veja os resultados. Caso dê algum erro, tente interpretá-lo e corrigí-lo. Tente adicionar novas funcionalidades, configurações. Uma boa dica é sempre começar do básico. Tenha uma forte base e conseguirá evoluir na linguagem. flw
-
Tente: function onSay(cid, words, param, channel) local w = { item = 9971, count = 10 } local pid = getPlayerGUID(cid) local id = { ["club"] = {vocation = {1}, id = 1}, ["sword"]= {vocation = {2}, id = 2}, ["axe"] = {vocation = {2}, id = 3}, ["distance"] = {vocation = {3}, id = 4}, ["shield"] = {vocation = {1, 2, 3}, id = 5} } if (param == '') then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Como usar: !comprar club.") return true end if(id[param:lower()]) then if(getPlayerSkill(cid, id[param:lower()]) < 350) then if(isInArray(id[param:lower()].vocation(getPlayerVocation(cid)))) then if doPlayerRemoveItem(cid,w.item,w.count) then doRemoveCreature(cid, true) db.executeQuery("UPDATE `player_skills` SET `value` = `value` + ".. w.count .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. id[param:lower()].id ..";") else doPlayerSendCancel(cid, "You do not have the required item.") end else doPlayerSendCancel(cid, "Voce não pode comprar este skill.") end else doPlayerSendCancel(cid, "Skill's limit reached.") end else doPlayerSendCancel(cid, "Unknown skill.") end return true end flw
-
Remova o actionId do baú pelo map editor. Em seguida, verifique se no actions.xml está uniqueid, assim: <action uniqueid="6306" event="script" value="NOME DO SCRIPT.lua"/> flw
-
[Encerrado] [Socorro]Dúvida No Plain Text
tópico respondeu ao CoLoRaDo de joaohd em Tópicos Sem Resposta
Isto significa que você não pode mudar o tipo de password, que antes era encriptado para texto normal. Tente mudar seu passwordType para sha1 ou md5. flw -
Upar tópicos não é permitido aqui no xtibia. Espero que não se repita. flw
-
Introdução à biblioteca wxlua Antes de iniciarmos nosso aprendizado em wxlua, devemos ter em mente qual a finalidade dessa biblioteca. Bem, a biblioteca wxlua, juntamente com sua API C, implementa as funções essenciais para criarmos uma aplicação com interface gráfica. É uma biblioteca muito rica e, utilizando-se de outras bibliotecas lua, podemos criar aplicativos incríveis. Entendida a função, podemos começar a estudar a estrutura dos programas escritos com a biblioteca wxlua, que segue uma estrutura bem rígida quanto à organização. Para que possamos utilizar as funções disponíveis através da biblioteca wx, nosso programa deverá invocar esta, através da função require, da seguinte maneira: require("wx") Desta maneira, nosso programa terá conhecimento das funções e poderá utilizá-la. Obrigatoriamente, nosso aplicativo deve ter um frame, que seria como um "palco", onde nossos componentes serão inseridos. Este palco deve também ser repassado a uma variável, para que possa ser acessado quando formos "pendurar" nossos componentes. - "pendurar" seria a tradução de "append", termo que passaremos a utilizar mais adiante. Agora veremos nossa primeira função wx, a função wx.wxFrame: MeuPalco = wx.wxFrame(wx.NULL, wx.wxID_ANY, "Tutorial xtibia", wx.wxDefaultPosition, wx.wxSize(200,200), wx.wxDEFAULT_FRAME_STYLE) Onde : O primeiro argumento é o id do frame "pai". Quando quisermos criar um frame principal, deveremos utilizar no lugar desta variável, a constante wx.NULL O segundo argumento é o id do frame que está sendo criado. Comumente utiliza-se o wx.wxID_ANY, que irá criar um id para nosso frame. O terceiro argumento é o nome que será exibido no topo do nosso palco. O quarto argumento é a posição onde o palco será criado. Para tamanho padrão, utiliza-se a constante wx.wxDefaultPosition. O quinto argumento é o tamanho do palco O último argumento é o estilo do palco. Para criarmos um frame com estilo padrão, utilizamos a constante wx.wxDEFAULT_FRAME_STYLE. Então já sabemos criar um palco para que possamos colocar nossos componentes. Vamos criar um menu? Para criarmos um menu, devemos associá-lo também a uma variável, com o valor da função wx.wxMenu(). Veja: MeuMenu = wx.wxMenu() Vamos agora colocar uma opção neste menu. Esta opção nos mostrará uma mensagem informando que você conseguiu criar a opção. Criarei primeiro um id para associar à minha opção e em seguida, a criarei: MenuXtibia = 1 MeuMenu:Append(MenuXtibia, "&xtibia", "Clique para saber mais.") Os parâmetros do Append, são: Id, que é o id associado ao seu menu Texto, que é o texto que ficará escrito em sua opção no menu Mensagem, que é a mensagem que aparecerá no rodapé do nosso programa quando posicionarmos o cursor do mouse sobre a opção Você deve ter percebido que eu coloquei um "&" no meu texto. Bem, este é o modo de criar um atalho. Neste caso, meu atalho será "x". Quando eu estiver no menu e pressionar "x", esta opção será selecionada. Continuando, nós já criamos nosso menu. Entretanto, ele não está no palco ainda. Ou seja, não será exibido. Vamos colocá-lo lá? Primeiro criamos a barra de menus: MinhaBarra = wx.wxMenuBar() Depois, "penduro" meu menu na barra que criei: MinhaBarra:Append(MeuMenu, "&Menu") Por fim, coloco minha barra no meu palco: MeuPalco:SetMenuBar(MinhaBarra) Menu no lugar, que tal criarmos a barra inferior que exiba alguma mensagem para o usuário? MeuPalco:CreateStatusBar(1) Pronto. Vou colocar um texto nela que, quando o programa for aberto, estará escrito: MeuPalco:SetStatusText("Olá! Você está indo bem!") Feito. Lembra que eu disse que a nossa opção no menu exibiria uma mensagem? Então, agora é a hora: MeuPalco:Connect(MenuXtibia, wx.wxEVT_COMMAND_MENU_SELECTED, function(event) wx.wxMessageBox("Boa campeão. Você está seguindo corretamente o tutorial.", "Parabéns!", wx.wxOK + wx.wxICON_INFORMATION, MeuPalco) end) Ufa, está acabando. Tudo o que criamos até agora, não está visível. Então, devemos corrigir isto: MeuPalco:Show(true) E por fim, para que nosso programa seja exibido corretamente, utilizamos a função MainLoop: wx.wxGetApp():MainLoop() Pronto. Se conseguiu obter resultados positivos, parabéns. Caso contrário, procure entender onde estão seus erros e procure corrigí-los. Nosso código no fim deve estar parecido com este: require("wx") MeuPalco = wx.wxFrame(wx.NULL, wx.wxID_ANY, "Tutorial xtibia", wx.wxDefaultPosition, wx.wxSize(200,200), wx.wxDEFAULT_FRAME_STYLE) MeuMenu = wx.wxMenu() MenuXtibia = 1 MeuMenu:Append(MenuXtibia, "&xtibia", "Clique para saber mais.") MinhaBarra = wx.wxMenuBar() MinhaBarra:Append(MeuMenu, "&Menu") MeuPalco:SetMenuBar(MinhaBarra) MeuPalco:CreateStatusBar(1) MeuPalco:SetStatusText("Olá! Você está indo bem!") MeuPalco:Connect(MenuXtibia, wx.wxEVT_COMMAND_MENU_SELECTED, function(event) wx.wxMessageBox("Boa campeão. Você está seguindo corretamente o tutorial.", "Parabéns!", wx.wxOK + wx.wxICON_INFORMATION, MeuPalco) end) MeuPalco:Show(true) wx.wxGetApp():MainLoop() Lembrando: Para se executar este código, é necessária a biblioteca wxlua ou o scite instalados. flw
-
Siga o modelo: local FOODS = { [2362] = {8, "Crunch.", 50, 50}, -- Na sequencia: tanto q alimenta, animação, life e mana [2666] = {15, "Munch.", 10, 20}, [2667] = {12, "Munch.", 10, 30}, [2668] = {10, "Mmmm."}, [2669] = {17, "Munch."}, [2670] = {4, "Gulp."}, [2671] = {30, "Chomp."}, [2672] = {60, "Chomp."}, [2673] = {5, "Yum."}, [2674] = {6, "Yum."}, [2675] = {13, "Yum."}, [2676] = {8, "Yum."}, [2677] = {1, "Yum."}, [2678] = {18, "Slurp."}, [2679] = {1, "Yum."}, [2680] = {2, "Yum."}, [2681] = {9, "Yum."}, [2682] = {20, "Yum."}, [2683] = {17, "Munch."}, [2684] = {8, "Crunch."}, [2685] = {6, "Munch."}, [2686] = {9, "Crunch."}, [2687] = {2, "Crunch."}, [2688] = {9, "Munch."}, [2689] = {10, "Crunch."}, [2690] = {3, "Crunch."}, [2691] = {8, "Crunch."}, [2792] = {6, "Munch."}, [2793] = {9, "Munch."}, [2695] = {6, "Gulp."}, [2696] = {9, "Smack."}, [2787] = {9, "Munch."}, [2788] = {4, "Munch."}, [2789] = {22, "Munch."}, [2790] = {30, "Munch."}, [2791] = {30, "Munch."}, [2792] = {6, "Munch."}, [2794] = {3, "Munch."}, [2795] = {36, "Munch."}, [2796] = {5, "Munch."}, [2793] = {9, "Munch."}, [5097] = {4, "Yum."}, [6125] = {8, "Gulp."}, [6278] = {10, "Mmmm."}, [6279] = {15, "Mmmm."}, [6393] = {12, "Mmmm."}, [6394] = {15, "Mmmm."}, [6501] = {20, "Mmmm."}, [6541] = {6, "Gulp."}, [6542] = {6, "Gulp."}, [6543] = {6, "Gulp."}, [6544] = {6, "Gulp."}, [6545] = {6, "Gulp."}, [6569] = {1, "Mmmm."}, [6574] = {4, "Mmmm."}, [7158] = {15, "Munch."}, [7159] = {13, "Munch."}, [7372] = {7, "Yum."}, [7373] = {7, "Yum."}, [7374] = {7, "Yum."}, [7375] = {7, "Yum."}, [7376] = {7, "Yum."}, [7377] = {7, "Yum."}, [7909] = {4, "Crunch."}, [8838] = {7, "Gulp."}, [8839] = {5, "Yum."}, [8840] = {2, "Yum."}, [8841] = {3, "Urgh."}, [8842] = {3, "Munch."}, [8843] = {3, "Crunch."}, [8844] = {3, "Gulp."}, [8845] = {2, "Munch."}, [8847] = {11, "Yum."} } function onUse(cid, item, fromPosition, itemEx, toPosition) local food = FOODS[item.itemid] if(not food) then return false end if((getPlayerFood(cid) + food[1]) >= 100) then doPlayerSendCancel(cid, "You are full.") return true end doPlayerFeed(cid, food[1] * 1) doCreatureAddHealth(cid, food[3]) doCreatureAddMana(cid, food[4]) doPlayerSendTextMessage(cid, 25, "Seu feed está " .. getPlayerFood(cid) .. " de 100.") doCreatureSay(cid, food[2], TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) return true end flw
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.