Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. GodBz, Normalmente o script de uma Arena PVP contém uma verificação para saber se o atacante era um jogador ou uma criatura, Como você pode ver no exemplo abaixo: local arena = { frompos = {x=121, y=33, z=9}, topos = {x=128, y=37, z=9}, exit = {x=121, y=37, z=9} } function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isPlayer(cid) then if isInArea(getPlayerPosition(cid), arena.frompos, arena.topos) then if doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid), TRUE) == TRUE then if doTeleportThing(cid, arena.exit) == TRUE then doSendMagicEffect(arena.exit, 10) doPlayerSendTextMessage(mostDamageKiller,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You have defeated '..getPlayerName(cid)..'!') doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You where defeated by '..getPlayerName(mostDamageKiller)..'!') return FALSE end end end end return TRUE end No caso a verificação de jogador é representada pela função isPlayer(cid), se você quer que a sua "arena" seja universal tanto para MVP e PVP, basta retirar essa estrutura de condição que contém a função. No caso o script para a "arena" ficaria assim: local arena = { frompos = {x=121, y=33, z=9}, topos = {x=128, y=37, z=9}, exit = {x=121, y=37, z=9} } function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isInArea(getPlayerPosition(cid), arena.frompos, arena.topos) then if doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid), TRUE) == TRUE then if doTeleportThing(cid, arena.exit) == TRUE then doSendMagicEffect(arena.exit, 10) doPlayerSendTextMessage(mostDamageKiller,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You have defeated '..getPlayerName(cid)..'!') doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You where defeated by '..getPlayerName(mostDamageKiller)..'!') return FALSE end end end return TRUE end Isso fará o que você quer, O script acima foi só uma exemplificação, contém muitos erros. Não o copie para seu servidor. Cya
  2. Skolzim, Parece não haver nada errado com o arquivo passado, Poderia tirar uma 'screen' da sua pasta 'data/creaturescripts/scripts'? Preciso verificar se há algum script relacionado com a morte de jogadores, você adicionou algo em seu servidor relacionado com isso? Cya
  3. iurygoncalves, Como isso é uma função usada em creaturescripts, Você certificou-se de registrar esse evento no arquivo login.lua* e em creaturescripts.xml? E retire aquele else * - '/creaturescripts/scripts' registerCreatureEvent(cid, "Mesmo nome dado em creaturescripts.xml") Cya
  4. É um script muito interessante, a regeneração progressiva é bem mais realista do que "bebeu se curou". Tudo bem que você implementou intervalo entre usos, mas o script original foi feito por jestemPolakiem do OTLand
  5. É uma ótima idéia, bem criativo.
  6. hretro, Essa função capaz de verificar a morte de uma critura, é um evento relacionado com criaturas ou jogadores, É usada em creturescripts, e existem duas funções,: onDeath & onPrepareDeath. Você pode aprender mais sobre essas funções e outras usadas em creaturescripts, com o tutorial, Programando Creaturescripts. Cya!
  7. Olá yahooABC, - Teste o script abaixo, function onSay(cid, words, param, channel) local dire = getCreatureLookDirection(cid) local storevalue = 2468 local alerttime = 15 local p = {}, --Coloque aqui IDs de chãos kapos = getCreaturePosition(cid) npos = {x=kapos.x, y=kapos.y + 3, z=kapos.z} lpos = {x=kapos.x - 3, y=kapos.y, z=kapos.z} spos = {x=kapos.x, y=kapos.y - 3, z=kapos.z} opos = {x=kapos.x + 3, y=kapos.y, z=kapos.z} if dire == 0 then if (alert(cid, storevalue, alerttime) == 1) then if (isInArray(p, getThingFromPos(npos))) then addEvent(doRemovePedra, 3*1000, {x=kapos.x,y=kapos.y,z=kapos.z,stackpos=2}) doPlayerAddMana(cid,-45) doTeleportThing(cid, npos) doSendMagicEffect(kapos, 2) doSendMagicEffect(npos, 2) doCreateItem(1285,1,kapos) doSendAnimatedText(npos, "Kawarimi", TEXTCOLOR_ORANGE) else doPlayerSendCancel('Parece haver algum obstáculo') end end end if dire == 1 then if (alert(cid, storevalue, alerttime) == 1) then if (isInArray(p, getThingFromPos(lpos))) then addEvent(doRemovePedra, 3*1000, {x=kapos.x,y=kapos.y,z=kapos.z,stackpos=2}) doPlayerAddMana(cid,-45) doTeleportThing(cid, lpos) doSendMagicEffect(kapos, 2) doSendMagicEffect(lpos, 2) doCreateItem(1285,1,kapos) doSendAnimatedText(lpos, "Kawarimi", TEXTCOLOR_ORANGE) else doPlayerSendCancel('Parece haver algum obstáculo') end end end if dire == 2 then if (alert(cid, storevalue, alerttime) == 1) then if (isInArray(p, getThingFromPos(spos))) then addEvent(doRemovePedra, 3*1000, {x=kapos.x,y=kapos.y,z=kapos.z,stackpos=2}) doPlayerAddMana(cid,-45) doTeleportThing(cid, spos) doSendMagicEffect(kapos, 2) doSendMagicEffect(spos, 2) doCreateItem(1285,1,kapos) doSendAnimatedText(spos, "Kawarimi", TEXTCOLOR_ORANGE) else doPlayerSendCancel('Parece haver algum obstáculo') end end end if dire == 3 then if (alert(cid, storevalue, alerttime) == 1) then if (isInArray(p, getThingFromPos(opos))) then addEvent(doRemovePedra, 3*1000, {x=kapos.x,y=kapos.y,z=kapos.z,stackpos=2}) doPlayerAddMana(cid,-45) doTeleportThing(cid, opos) doSendMagicEffect(kapos, 2) doSendMagicEffect(opos, 2) doCreateItem(1285,1,kapos) doSendAnimatedText(opos, "Kawarimi", TEXTCOLOR_ORANGE) else doPlayerSendCancel('Parece haver algum obstáculo') end end end return TRUE end - Preste atenção nesta linha que adicionei: local p = {}, --Coloque aqui IDs de chãos Você deverá colocar IDs de todos os chãos possíveis, por mais trabalhoso que seja, creio que funcionará.
  8. Olá Skolzim, - Entre na pasta data/creaturescripts/scripts, abra o arquivo login.lua. Cole aqui o conteúdo do arquivo para análise. Edição - Não sabia que scripts de Bless poderiam conter esse tipo de erro,
  9. Pedido 1 Atendido! Clique no link para ver-lo. Bibliotecas
  10. Oneshot

    Npc Que Muda De Voc 8.57

    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()) Tente agora
  11. Oneshot

    Npc Que Muda De Voc 8.57

    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,
  12. 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,
  13. Programando Creaturescripts Mais um pedido atendido, Acho que agora eu vou descansar um pouco Ô_o
  14. While e Repeat Vodkart, um dos pedidos atendidos, Espero que seja isso que você queria saber sobre repeat.
  15. 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,
  16. 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,
  17. NPCs Pedido atendido! Clique no link para ver-lo!
  18. Estruturas Lógicas Condicionais Bom, pedido atendido, clique no link para ver-lo.
  19. Oneshot

    Peça Um Tutorial

    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,
  20. 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.
  21. É 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!!
  22. 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!
  23. Bom sistema, mas ainda acho estranho esse seu amigão morar no Chile
  24. <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.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...