-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
Olá, local cfg = { itemid = xxxx, --Substitua 'xxxx' pelo ID do item usado na Promotion qnt = xx --Substitua 'xx' pela quantidade do item requerido } 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 msgCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'promotion')then npcHandler:say("Are you sure?", cid) talkState[talkUser] = 1 end if(msgcontains(msg, 'yes') and talkState[talkUser] == 1)then if(doPlayerRemoveItem(cid, cfg.itemid, cfg.qnt) == TRUE)then npcHandler:say("From now, you are promoted!", cid) setPlayerPromotionLevel(cid, 1) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) else npcHandler:say("You don't have ".. cfg.qnt .." ".. getItemNameById(cfg.itemid) .."", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end else npcHandler:say("Then not", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Coloque o conteúdo acima em um arquivo LUA dentro da pasta data/npc/scripts. Após isso, crie um arquivo XML na pasta data/npc e coloque o conteúdo abaixo: <?xml version="1.0" encoding="UTF-8"?> <npc name="John" script="data/npc/scripts/NOME DO ARQUIVO.lua" walkinterval="3500" floorchange="0"> <health now="200" max="200"/> <look type="128" head="114" body="132" legs="114" feet="115" addons="2"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|! I can {promotion} you for 10 ancient runes"/> <parameter key="message_farewell" value="Bye |PLAYERNAME|!"/> </parameters> </npc> É extremamente importante que você coloque em NOME DO ARQUIVO, o nome do arquivo LUA que você deu. Você só precisa configurar duas coisas no script LUA, local cfg = { itemid = xxxx, --Substitua 'xxxx' pelo ID do item usado na Promotion qnt = xx --Substitua 'xx' pela quantidade do item requerido } Auto-explicativo Até mais,
-
Será um tutorial trabalhoso, você sabia que existem 150 funções de prefixo get? Essas funções lógicas todas tem a função de pegar dados de alguma coisa, seja de jogadores, de monstros, de itens. Por exemplo: getPlayerAccount(cid) A função acima realiza a seguinte lógica, 'retornar a conta de jogo', como também: getPlayerLevel(cid) Irá retornar o level do jogador. E assim por diante. Desculpe, mas não irei fazer um tutorial sobre funções, elas são muitas. O máximo que posso dar é uma dica, como fiz agora. Até mais,
-
Programando Creaturescripts Mais um pedido atendido, Acho que agora eu vou descansar um pouco Ô_o
-
While e Repeat Vodkart, um dos pedidos atendidos, Espero que seja isso que você queria saber sobre repeat.
-
Levando em consideração que a linguagem XML usa codificação UTF-8, Você não pode usar 'ç' e 'ã' nas frases do monstro. Até mais,
-
Vou arquivar esses pedidos e estarei desenvolvendo os tutoriais! MarcelloMkez, Você pode encontrar um tutorial sobre o comando For, feito por mim, Comando For Espero que entenda, =] Até mais,
-
NPCs Pedido atendido! Clique no link para ver-lo!
-
Estruturas Lógicas Condicionais Bom, pedido atendido, clique no link para ver-lo.
-
Olá, pessoal! Eu estava aqui no site da XTibia e, sem nada para fazer, resolvi fazer uma aula, um tutorial sobre programação LUA - Scripting. O problema é a dificuldade de encontrar um tema para o tutorial, então resolvi criar um tópico. Sei que vocês vão encontrar semelhanças com o tópico do apocarai, mas como o tópico "morreu", eu que não irei ressuscitar-lo. Então, é mais ou menos assim, vocês irão fazer um pedido de tema de tutorial, e eu irei criar ele em no máximo 2 dias. Não precisa de nenhum formulário, nem nada, é preciso apenas ser objetivo para com o tema proposto. Até mais,
-
Gostei muito mesmo desse trabalho, Muito interessante como você usou as funções "básicas" para criar um conversor binário-decimal. Acho que quem consegue fazer isto, é porque já sabe muito e tem muita criatividade. Parabéns aos dois senhores.
-
É isso aí, Galera! Darien Era - A nova era começou! (Ou em inglês) Vocês não perdem por esperar, o sistema de descanso usado na Ranger's Guild, ou de refinamento de flechas!!
-
[Encerrado] Como Alterar Danos E Velocidades De Atk (Sqlite)
tópico respondeu ao Ryosama de Oneshot em Tópicos Sem Resposta
Olá, Ryosama! Você deve abrir seu arquivo vocations.xml localizado na pasta data\XML do seu servidor! Você irá dar de cara com esse tipo de conteúdo: <vocation id="0" name="None" description="none" needpremium="0" gaincap="5" gainhp="5" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="1" manamultiplier="4.0" attackspeed="2000" soulmax="100" gainsoulticks="120" fromvoc="0" attackable="no"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.5" club="2.0" sword="2.0" axe="2.0" distance="2.0" shielding="1.5" fishing="1.1" experience="1.0"/> </vocation> Você pode editar a velocidade de ataque da sua classe diminuindo o número do campo attackspeed="X". Por que diminuir? Porque o valor do campo attackspeed="X" é um intervalo de tempo entre ataques. Ou seja: - 2000 = 1 ataque a cada 2 segundos - 1000 = 1 ataque por segundo - 500 = 1 ataque a cada 0.5 segundo / 2 ataques por segundo E para aumentar os danos da classe, você pode editar esse campo todo: <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> Os valores são multiplicadores de dano, ou seja, meleeDamage="1.0", significa que ele pega a fórmula de danos corpo-corpo e multiplica por 1, o que resulta, no mesmo valor. NÃO coloque valores acima de 10.0. meleeDamage = Danos corpo-corpo distDamage = Danos a distância wandDamage = Danos mágicos de wand/rod magDamage = Danos mágicos feitos com magias magHealingDamage = Recuperação de HP. defense = Poder de defesa magDefense = Poder de defesa mágica Cya! -
Bom sistema, mas ainda acho estranho esse seu amigão morar no Chile
-
New Monster - Ice Mage- Problemas Com "end"
tópico respondeu ao Maioral de Oneshot em Lixeira Pública
<loot> <item id="2183" chance="850"/><!-- northwind rod --> <item id="7730" chance="850"/><!-- blue legs --> <item id="2656" chance="850"/><!-- blue robe --> <item id="2662" chance="1000"/><!-- magician hat --> <item id="10521" chance="8000"><!-- moon backpack --> <inside> <item id="2160" countmax="13" chance="250"><!-- crystal coin --> <item id="2158" countmax="1" chance="250"><!-- blue gem --> <item id="2146" countmax="10" chance="450"><!-- small sapphire --> </inside> </item> </loot> Tinha alguns erros na parte da programação do Loot. -
Olá, Ékstibiano. Isto é feito através da edição dos sprites do jogo, através do arquivo Tibia.spr. Pode constatar que o cliente deles é editado (chamado de cliente próprio), ou seja, eles tem o seu próprio Tibia.spr com sprites que não existem no Tibia normal, daí a razão de haverem animações novas e itens novos.
-
talkaction [ Talkaction ]Talkaction De Compra De Itens.
tópico respondeu ao MatheusGlad de Oneshot em Actions e Talkactions
Gostei do sistema, interessante. Ajuda muito em servidores de jogo rápido, mas, na minha opinião, destrói o RPG do servidor. Sobre a programação, bem limpa e bem desenvolvida. Digno de um bom programador. -
Monstros 8.54 No Meu Server 8.50, Como?
tópico respondeu ao danielprist de Oneshot em Lixeira Pública
Teoricamente impossível, Já que as versões dos servidores 8.50 não sabem que esses "monstros" existem. Tais versões não tem os sprites compilados. É a mesma coisa que querer os itens do update 8.54 em um servidor 8.50. -
http://www.speedyshare.com/files/21284879/monster.rar Monstros 8.54 com loot fiel ao site Tibia.Wikia.
-
O print serve para escrever a mensagem especificada no comando na tela do cmd do seu servidor.
-
Dá sim para substituir os comandos por outro, O problema é que o pessoal que desenvolve o TheForgotten Server, fez alguma coisa errada, e a função que eles colocaram, só retorna valores nulos.
-
- Olá, Sobre a dúvida 2, referente a Refine, os servidores baseados no distro Forgotten Server 0.3.6pl1 não podem rodar esse sistema, porque as funções getItemAttack, getItemDefense, getItemExtraAttack e etc, foram retiradas do sistema, logo se você roda esse script em um servidor baseado nessa distribuição, ocorrerá o não-reconhecimento da função, retornando valores nulos, ocasionando o erro que você passou. Se você quer resetar TODO seu servidor, porque não pegar uma database Sqlite nova, sem contas e sem dados nas houses, e substituir pela velha? Abraços.
-
@editado, 18-maio-2010 Decidi fazer algo mais interativo com vocês, Vocês podem escolher o tema do próximo tutorial da série Scripting, o que vocês gostariam de ver e aprender sobre a linguagem LUA? Fale comigo
-
Bem-vindos, Ékstibianos. Este é um dos tutoriais que explicam os Advanced Systems que eu criei para um projeto de servidor alternativo que não se efetivou. Além de mostrar-lhes o sistema, explicarei cada função usada e como configurar cada magia no seu servidor. 1 - Requisitos Ékstibiano, você irá precisar de: - Uma dose de conhecimento em LUA. - Uma dose de funções. - E... senso de localização... os scripts das magias irão ficar grandes. 2 - O corpo do script Esse é o script mais básico de Spell System que criei, ele permite que a magia Ice Strike possa avançar do nível 1 (básico) ao nível 3 (ótimo) Irei explicar o script em blocos, exatamente abaixo: 3 - Explicações 3.1 - Bloco 1 local combat_lv1 = createCombatObject() setCombatParam(combat_lv1, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat_lv1, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK) local combat_lv2 = createCombatObject() setCombatParam(combat_lv2, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat_lv2, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK) local combat_lv3 = createCombatObject() setCombatParam(combat_lv3, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat_lv3, COMBAT_PARAM_EFFECT, CONST_ME_ICEATTACK) Este é o bloco do script que irá determinar como é o "rosto" da sua magia, veja que eu criei três variáveis local nomeadas de combat_lv1, combat_lv2 e combat_lv3, o efeito delas é determinado pela função SetCombatParam, e as três tem efeitos idênticos com duas diferenças, uma é o dano e a outra é a área. 3.2 - Bloco 2, Áreas local area_lv1 = createCombatArea({ {3} }) local area_lv2 = createCombatArea({ {1}, {3} }) local area_lv3 = createCombatArea({ {0, 1, 0}, {1, 3, 1} }) setCombatArea(combat_lv1, area_lv1) setCombatArea(combat_lv2, area_lv2) setCombatArea(combat_lv3, area_lv3) Veja no Bloco 2, que eu crei três váriaveis local nomeadas de area_lv1, area_lv2 e area_lv3. Cada uma dessas variáveis, cria uma área pela função createCombatArea, perceba também que as três áreas são diferentes, é o nosso objetivo não, quanto mais nível, mas poder de magia! Ah, e a função setCombarArea é responsável por associar cada área ao seu respectivo combat. Vamos ao Bloco 3, de Danos. 3.3 Bloco 3, Danos. function onGetFormulaValues_lv1(cid, level, maglevel) local magDamage, levelDamage = maglevel, level / 5 return -(magDamage * 1 + levelDamage), -(magDamage * 2 + levelDamage) end function onGetFormulaValues_lv2(cid, level, maglevel) local magDamage, levelDamage = maglevel, level / 5 return -(magDamage * 1.5 + levelDamage), -(magDamage * 3 + levelDamage) end function onGetFormulaValues_lv3(cid, level, maglevel) local magDamage, levelDamage = maglevel, level / 5 return -(magDamage * 2.25 + levelDamage), -(magDamage * 4.5 + levelDamage) end setCombatCallback(combat_lv1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_lv1") setCombatCallback(combat_lv2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_lv2") setCombatCallback(combat_lv3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_lv3") Essa é uma parte complicadinha (hehe), agora não são mais variavéis locais e sim três funções onGetFormulaValues, elas são responsáveis por definir o dano que o jogador irá fazer quando utilizar a magia. A estrutura é a mesma, você pode criar quantos onGetFormulaValues quiser para cada nível de magia, mas deve colocar um sufixo _lvX para evitar erros, onde X é o level que cada função é relacionada. A magia Ice Strike causa dano conforme o level e o maglevel do usuário, as fórmulas de dano tem o prefixo return. Veja abaixo: return -(magDamage * 1 + levelDamage), -(magDamage * 2 + levelDamage) --Ice Strike Nv1, dano 40~60 return -(magDamage * 1.5 + levelDamage), -(magDamage * 3 + levelDamage) --Ice Strike Nv2, dano 30~80 return -(magDamage * 2.25 + levelDamage), -(magDamage * 4.5 + levelDamage) --Ice Strike Nv3, dano 45~110 Cada fórmula de cada função onGetFormulaValues faz danos diferentes. A função setCombatCallback, associa cada onGetFormulaValues ao seu respectivo combat. Ou seja, cada dano ao seu respectivo nível. Agora, vamos, ao último bloco e o mais complicadinho. Bloco 4, Avançando o nível local function onCastSpell1(parameters) doCombat(parameters.cid, combat_lv1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, combat_lv2, parameters.var) end local function onCastSpell3(parameters) doCombat(parameters.cid, combat_lv3, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var} local SPELL_LEVEL_STORAGE = 70000 local SPELL_TRIES_STORAGE = 70001 local spell_level = getPlayerStorageValue(cid, SPELL_LEVEL_STORAGE) local spell_tries = getPlayerStorageValue(cid, SPELL_TRIES_STORAGE) if spell_level == -1 then spell_level = 1 end if spell_level == 1 then addEvent(onCastSpell1, 0, parameters) if spell_tries >= 1 then setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, spell_tries+1) else setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 1) end elseif spell_level == 2 then addEvent(onCastSpell2, 0, parameters) if spell_tries >= 1 then setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, spell_tries+1) else setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 1) end elseif spell_level == 3 then addEvent(onCastSpell3, 0, parameters) end if spell_tries >= ((spell_level)*12) then if spell_level < 3 then setPlayerStorageValue(cid, SPELL_LEVEL_STORAGE, spell_level + 1) setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 0) doPlayerSendTextMessage(cid, 22, "You advanced from level " .. spell_level .. " to level " .. spell_level + 1 .. " in Ice Strike spell") doSendMagicEffect(getCreaturePosition(cid),14) doSendAnimatedText(getCreaturePosition(cid), 'Advanced!', 18) end end return TRUE end Okay, você está saturado de informação se leu até aqui, descanse um pouco, respire e vamos lá: - Observe no Bloco 4, as funções locais onCastSpell1, onCastSpell2 e onCastSpell3, elas são responsáveis para que quando o personagem invocar a magia Ice Strike, ela seja realmente invocada. E há abaixo da última função local, a onCastSpell mais importante, ela que irá nos trazer a sintaxe geral do script de magia. - O código abaixo é responsável por duas coisas, ele irá determinar dois Storages onde serão armazenados os pontos de uso da magia e onde será armazenado o valor do nível da magia. LEMBRE-SE que os Storages que você usar aqui não deverão ser usadas em Quests e cada magia deve ter dois Storages distintos. local SPELL_LEVEL_STORAGE = 70000 local SPELL_TRIES_STORAGE = 70001 local spell_level = getPlayerStorageValue(cid, SPELL_LEVEL_STORAGE) local spell_tries = getPlayerStorageValue(cid, SPELL_TRIES_STORAGE) - Este outro código abaixo é responsável pela invocação da magia conforme o nível da magia que o personagem detêm. if spell_level == -1 then spell_level = 1 end if spell_level == 1 then addEvent(onCastSpell1, 0, parameters) if spell_tries >= 1 then setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, spell_tries+1) else setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 1) end elseif spell_level == 2 then addEvent(onCastSpell2, 0, parameters) if spell_tries >= 1 then setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, spell_tries+1) else setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 1) end elseif spell_level == 3 then addEvent(onCastSpell3, 0, parameters) end Veja que o verificador [if spell_level == -1 then] é necessário, porque todo Storage começa em -1, então se o Storage que você atribuiu para ser responsável pelo nível da magia em questão estiver em -1, então o script mudará seu valor para 1. O verificador [if spell_level == 1 then] faz a função de, SE o nível da magia é 1, invocar a sintaxe do nível 1 e adicionar 1 ponto de uso. O mesmo acontece para os dois outros verificadores [if spell_level == 2 then] e [if spell_level == 3 then], com exceção de quê quando a magia estiver no nível 3, você não ganhará mais pontos de uso. E o último código: if spell_tries >= ((spell_level)*12) then if spell_level < 3 then setPlayerStorageValue(cid, SPELL_LEVEL_STORAGE, spell_level + 1) setPlayerStorageValue(cid, SPELL_TRIES_STORAGE, 0) doPlayerSendTextMessage(cid, 22, "You advanced from level " .. spell_level .. " to level " .. spell_level + 1 .. " in Ice Strike spell") doSendMagicEffect(getCreaturePosition(cid),14) doSendAnimatedText(getCreaturePosition(cid), 'Advanced!', 18) end end return TRUE end Querendo ou não esse é o código mais importante do script, ele verifica que quando os pontos de uso forem maiores iguais a 12 vezes o nível atual da magia em questão, e se o nível da magia for menor que 3, eles adicionem +1 no SPELL_LEVEL_STORAGE e zerem o contador de pontos de uso da magia. Mandando uma mensagem de "Sua magia avançou de nível" com um "Advanced!" bonitinho em cor verde. Até mais, te vejo no próximo tutorial de Advanced System.
-
Atualmente não é existente uma função que consiga editar atributos como speed, magic level e defesa contra elementos em tempo real. É possível editar apenas os atributos básicos como attack, defense, armor, name e description.
-
Nome: Items e Movements Descrição: Arquivos Items e Movements totalmente atualizados com todos os itens, desde Creature Products até Equipamentos, de protocolo 8.54. Arquivo Movements também atualizado com todos os atributos dos equipamentos. Comentário: Espero que vocês saibam usufruir destes arquivos que eu mesmo atualizei para o projeto Solscian que não foi efetivado. Download - Items Download - Movements @editado ; havia esquecido os links @editado ; links corrigidos
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.