Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Isso porque você criou as funções que retornam dano com o mesmo nome, todas elas. Tente criar essa função com um número na frente, igual você faz com as variáveis de combate, Veja o script abaixo que eu consertei e tente entender, local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat1, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat1, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE) setCombatParam(combat1, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos Sorcerers]] function onGetFormulaValues1(cid, level, maglevel) local min = 100 local max = 101 return min, max end setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues1") local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat2, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat2, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE) setCombatParam(combat2, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos druids]] function onGetFormulaValues2(cid, level, maglevel) local min = ((level*1)+(maglevel*6)) local max = ((level*1)+(maglevel*7)) return min, max end setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues2") local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat3, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE) setCombatParam(combat3, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos paladins]] function onGetFormulaValues3(cid, level, maglevel) local min = ((level*10)+(maglevel*(25/10))) local max = ((level*10)+(maglevel*3)) return min, max end setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues3") local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat4, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat4, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE) setCombatParam(combat4, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos knights]] function onGetFormulaValues4(cid, level, maglevel) local min = ((level*5)+(maglevel*40)) local max = ((level*5)+(maglevel*50)) return min, max end setCombatCallback(combat4, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues4") function onCastSpell(cid, var) if isInArray({1, 5}, getPlayerVocation(cid)) then return doCombat(cid, combat1, var) elseif isInArray({2, 6}, getPlayerVocation(cid)) then return doCombat(cid, combat2, var) elseif isInArray({3, 7}, getPlayerVocation(cid)) then return doCombat(cid, combat3, var) elseif isInArray({4, 8}, getPlayerVocation(cid)) then return doCombat(cid, combat4, var) end end Teste e reporte no tópico o funcionamento ;D
  2. Você cometeu um erro na primeira magia, Você não precisa usar a função onTargetTile e as variáveis acombat (1, 2 e etc...), pois pelo que percebi você está usando um efeito normal e não um efeito de animação. Então o script ficaria assim: local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -4.0, -57, -1.0, -160) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -6.0, -57, -1.0, -100) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -6.0, -57, -1.0, -100) local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, -6.0, -57, -1.0, -100) local combat5 = createCombatObject() setCombatParam(combat5, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat5, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combat5, COMBAT_FORMULA_LEVELMAGIC, -6.0, -57, -1.0, -100) local combat6 = createCombatObject() setCombatParam(combat6, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat6, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combat6, COMBAT_FORMULA_LEVELMAGIC, -6.0, -57, -1.0, -100) arr1 = { {1, 0, 0}, {0, 2, 0}, {0, 0, 0}, } arr2 = { {0, 1, 0}, {0, 2, 0}, {0, 0, 0}, } arr3 = { {0, 0, 1}, {0, 2, 0}, {0, 0, 0}, } arr4 = { {0, 0, 1}, {0, 2, 0}, {0, 0, 0}, } arr5 = { {0, 1, 0}, {0, 2, 0}, {0, 0, 0}, } arr6 = { {1, 0, 0}, {0, 2, 0}, {0, 0, 0}, } local area1 = createCombatArea(arr1) local area2 = createCombatArea(arr2) local area3 = createCombatArea(arr3) local area4 = createCombatArea(arr4) local area5 = createCombatArea(arr5) local area6 = createCombatArea(arr6) setCombatArea(combat1, area1) setCombatArea(combat2, area2) setCombatArea(combat3, area3) setCombatArea(combat4, area4) setCombatArea(combat5, area5) setCombatArea(combat6, area6) local function onCastSpell1(parameters) doCombat(parameters.cid, combat1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, combat2, parameters.var) end local function onCastSpell3(parameters) doCombat(parameters.cid, combat3, parameters.var) end local function onCastSpell4(parameters) doCombat(parameters.cid, combat4, parameters.var) end local function onCastSpell5(parameters) doCombat(parameters.cid, combat5, parameters.var) end local function onCastSpell6(parameters) doCombat(parameters.cid, combat6, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var} addEvent(onCastSpell1, 100, parameters) addEvent(onCastSpell2, 250, parameters) addEvent(onCastSpell3, 400, parameters) addEvent(onCastSpell4, 550, parameters) addEvent(onCastSpell5, 700, parameters) addEvent(onCastSpell6, 850, parameters) return TRUE end Verei como fazer os dois próximos scripts, se encontrar uma maneira, te contactarei.
  3. Cara, não dá para saber o que são esses "pontinhos muito loucos" (imagem péssima), Os efeitos que o FoxWorld deve ter, são efeitos que a equipe desse servidor colocou através da edição de cliente, Então, é impossível fazer um script com efeitos desse servidor, Vou rever o script acima e testar em algum servidor de versão 840
  4. Vamos juntar fatos, Fica claro que os efeitos do Foxworld são diferentes dos efeitos do Tibia. Só criar um loop infinito, que provavelmente vai dar crash no servidor, haha. Logo, o script dessa tal Gema Espiritual ficaria assim, local efeito = { [1, 5] = CONST_ME_FIREAREA, [2, 6] = CONST_ME_POISONAREA, [3, 7] = CONST_ME_HOLYAREA, [4, 8] = CONST_ME_HITAREA } function onUse(cid, item, fromPosition, itemEx, toPosition) local i = 1 if isPlayer(cid) then while i == 1 doSendMagicEffect(getThingPosition(cid), efeito[getPlayerVocation(cid)]) end doRemoveItem(item.uid, 1) end return true end Basta criar um arquivo LUA com o nome que você preferir, na pasta actions/scripts, e colar o conteúdo acima. Depois abrir o arquivo XML actions e adicionar a tag abaixo: <action itemid="ID DO ITEM" event="script" value="nome do arquivo.lua"/> Teste e reporte no tópico o funcionamento, Obs: O efeito não irá parar mesmo . Abraços.
  5. É bem fácil fazer um NPC que só atenda se o jogador tiver tal outfit e addons. Você pode usar as duas funções: canPlayerWearOutfit(cid, looktype[, addon = 0]) ou canPlayerWearOutfitId(cid, outfit[, addon = 0]) O script do seu NPC ficaria mais ou menos assim: 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 greetCallback(cid) local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if getPlayerSex(cid) == 1 then if canPlayerWearOutfitId(cid, 268, 2) then npcHandler:setMessage(MESSAGE_GREET, "Hello Nightmare Master! I want {help} from you!") talkState[talkUser] = 1 else npcHandler:setMessage(MESSAGE_GREET, "I don\'t talk with stranges") npcHandler:releaseFocus(cid) end end return true 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 end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Este exemplo simples acima de NPC, faz com que ele só responda ao "Hi" e "Hello" de forma positiva, se o jogador for do sexo Masculino e tiver outfit 268 com 2 addons, no caso o NPC iria responder, "Hello Nightmare Master! I want {help} from you!". Lembrando que é se o jogador tiver a outfit, não se o jogador está vestido com a outfit. Se o jogador não ser do sexo Masculino e não tiver a outfit, o NPC vai responder "I don't talk with stranges". Abraços.
  6. É algo simples de se fazer, é necessário apenas criar 4 váriaveis de combate, 1 para cada vocação. O script da 'ultimate healing rune' ficaria assim: local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat1, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat1, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat1, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setHealingFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12) --[[Fórmula dos Sorcerers]] local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat2, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat2, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat2, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setHealingFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12) --[[Fórmula dos Druids]] local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat3, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat3, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setHealingFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12) --[[Fórmula dos Paladins]] local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat4, COMBAT_PARAM_AGGRESSIVE, false) setCombatParam(combat4, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat4, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setHealingFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12) --[[Fórmula dos Knights]] function onCastSpell(cid, var) if isInArray({1, 5}, getPlayerVocation(cid)) then return doCombat(cid, combat1, var) elseif isInArray({2, 6}, getPlayerVocation(cid)) then return doCombat(cid, combat2, var) elseif isInArray({3, 7}, getPlayerVocation(cid)) then return doCombat(cid, combat3, var) elseif isInArray({4, 8}, getPlayerVocation(cid)) then return doCombat(cid, combat4, var) end end É só modificar as fórmulas a seu gosto Abraços.
  7. SoulFamily, Nesse caso, você deveria abrir o script que faz a função desse item, que provavelmente está em Actions. E fazer uma função verificadora para vocações VIPs, baseando-se no Tibia, seriam quatro vocações e a função verificadora ficaria assim: if isInArray({9, 10, 11, 12}, getPlayerVocation(cid)) then bloco true else bloco false end O bloco true fará a função do item e o bloco false fará, exemplo, uma mensagem de erro ("Você não é VIP para usar esse item") Abraços
  8. SoulFamily, Acho que o modo mais simples mesmo, seria bloquear o uso de itens VIP para vocações não-VIP. Isso é feito dentro de dois arquivos XML: weapons e movements. O primeiro para armamentos em geral, o segundo para equipamentos. Ao abrir o primeiro arquivo, você irá deverá localizar estes tipos de tags nele, <melee id="ID DO ITEM" level="LEVEL REQUERIDO" unproperly="1" event="function" value="default"/> Para fazer com que apenas certas vocações usem o item, você deverá usar o tipo de tag abaixo, <melee id="ID DO ITEM" level="LEVEL REQUERIDO" unproperly="1" event="function" value="default"> <vocation id="ID DA VOCATION"/> </melee>] ID DO ITEM - ID do armamento VIP LEVEL REQUERIDO - Se houver, Level necessário para usar o item, ID DA VOCATION - Vocação que pode usar o item, você pode criar 'n' linhas para 'n' vocações. Agora vejamos o segundo arquivo, onde você encontrará tags que nem essas abaixo, <movevent type="Equip" itemid="ID DO ITEM" slot="SLOT" level="LEVEL" event="function" value="onEquipItem"/> Para restringir o uso a certas vocações, basta fazer tags parecidas com essas, <movevent type="Equip" itemid="ID DO ITEM" slot="SLOT" level="LEVEL" event="function" value="onEquipItem"> <vocation id="ID DA VOCATION"/> </moveevent> ID DO ITEM - ID do equipamento VIP. SLOT - O slot onde o item é equipado, se é uma armadura, o slot é 'armor' e assim por diante. Veja abaixo os slots: LEVEL - Level requerido para equipar o item, 0 se não for necessário. ID DA VOCATION - Vocação que pode usar o item, você pode criar 'n' linhas para 'n' vocações. Acho que é só isso, Abraços.
  9. RdeoN Só substituir seu sistema VIP por este: -- Script SYtem vip 1.0 -- function onSay(cid, words, param) if(words == "!buyvip") then if doPlayerRemoveItem(cid, 5809) == TRUE then local days = 10 local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(cid, 13540) local timenow = os.time() if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then time = timenow + daysvalue else time = storageplayer + daysvalue end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.") setPlayerStorageValue(cid, 13540, time) local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.") end elseif(words == "!vipdays") then local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. (quantity < 0 and 0 or quantity) .." dias de VIP no seu character.") elseif(words == "/checkvip") then if getPlayerAccess(cid) == 5 then if not param then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end local player = getPlayerByName(param) if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player "..player.." not found.") end local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(player, 13540) - timenow)/(24 * 60 * 60)) doPlayerPopupFYI(cid, "O jogador tem ".. (quantity < 0 and 0 or quantity) .." dias de VIP no character.") return TRUE end elseif(words == "/addvip") then if getPlayerAccess(cid) == 5 then local t = string.explode(param, ",") if not t[2] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end local player = getPlayerByName(t[1]) local days = t[2] if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player "..player.." not found.") end local daysvalue = days*3600*24 local storageplayer = getPlayerStorageValue(player, 13540) local timenow = os.time() local time = storageplayer <= 0 and (timenow + daysvalue) or (storageplayer + daysvalue) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.") setPlayerStorageValue(player, 13540, time) local quantity = math.floor((getPlayerStorageValue(player,13540) - timenow)/(3600*24)) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você tem "..quantity.." dias de VIP restantes.") end elseif(words == "/delvip") then if getPlayerAccess(cid) == 5 then local dec = MESSAGE_INFO_DESCR if(param == "") then return TRUE,doPlayerSendTextMessage(cid,18,"Command param required.")end local C,t = {},string.explode(param, ",") C.pos = getPlayerPosition(cid) C.uid = getCreatureByName(t[1]) C.time = ((tonumber(t[2]) == nil) and 1 or tonumber(t[2]))*3600*24 --Tempo da vip por dia. C.days = (tonumber(t[2]) == nil) and 1 or tonumber(t[2]) --Dias de vip. if(getPlayerStorageValue(C.uid,13540) < C.time)then doPlayerSendTextMessage(cid,dec,'O jogador '..t[1]..' não possui '..C.days..' dias de vip.') else doPlayerSendTextMessage(cid,dec,'Você removeu '..C.days..' dias de vip do player '..t[1]..'.') setPlayerStorageValue(C.uid,13540,getPlayerStorageValue(C.uid,13540)-C.time) end doSendMagicEffect(C.pos, math.random(28,30)) end end return TRUE end Abraços
  10. Zuth kimu, Bom, você deverá adicionar a função que faz isso no script da Crystal Coin, Então o script ficaria mais ou menos assim: function onUse(cid, item, frompos, item2, topos) if (getPlayerItemCount(cid, 2160) == 100) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have changed 100 crystal coins to 1 ruby coin") doPlayerRemoveItem(cid, 2160, 100) doPlayerAddItem(cid, 13685, 1) else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have changed 1 crystal coin to 100 platinum coin") doPlayerRemoveItem(cid, 2160, 1) doPlayerAddItem(cid, 2152, 1) end return TRUE end Teste e reporte no tópico o funcionamento. Abraços
  11. GodBz Ops, falha minha, O script se localiza na pasta data/creaturescripts/scripts. Não sei o nome, mas ele normalmente vem como pvparena.lua.
  12. É um script bem básico, O funcionamento dessa alavanca destrói com o RPG de um servidor, por isso, é mais recomendando para servidores de rates altas e para diversão dos jogadores e, também, para substituir o chato diálogo do NPC por algo mais rápido e versátil. Obrigado por compartilhar o conteúdo com a comunidade!
  13. Oneshot

    Dúvida Sobre Spell!

    kilat, Imagine assim, Cada personagem do jogo tem um creatureID distinto e a cada creatureID são atribuídos variáveis de memória que podem assumir qualquer valor ao longo do tempo, seja booleano, analógico ou uma string. São, se não me engano, 65535 variáveis de memória. Essas são as chamadas storages. Teoricamente elas ficam na personagem, mas acho que não dá para fazer algo com elas em websites, Você só pode "setar" os valores das storages com setPlayerStorageValue(cid, storage, value) e pegar os valores das storages com getPlayerStorageValue(cid, storage) Abraços,
  14. pc98, Bom, responderei a dúvida sobre as duas funções, Praticamente elas fazem a mesma coisa, são relacionadas com o combate em si, mas uma é um evento que ocorrerá quando você ATACAR uma criatura (onAttack) e a outra, é um evento que ocorrerá quando você INICIAR UM COMBATE com uma criatura, tornar-la um alvo (onCombat). Para o script, eu recomendo a função onCombat, de forma que você nem possa tornar a criatura um alvo, de forma que o script ficaria assim. function onCombat(cid, target) if (isPlayer(cid) and isPlayer(target)) then if (getPlayerVocation(cid) ~= getPlayerVocation(target)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER) return false end end return true end Lembre-se de registrar uma tag no arquivo XML creaturescripts. <event type="combat" name="vocationCombat" event="script" value="o nome do arquivo.lua"/> E registrar o evento no arquivo LUA login (creaturescripts/scripts) registerCreatureEvent(cid, "vocationCombat") Teste e reporte no tópico o funcionamento, Abraços,
  15. Igorinowz, Então, cara, Você se certificou de colocar a tag desse item no seu arquivo XML movements que se encontra em data/movements? Se não, coloque o que vou passar abaixo, antes de </movements>. <movevent type="Equip" itemid="6095" slot="armor" event="function" value="onEquipItem"/> <movevent type="DeEquip" itemid="6095" slot="armor" event="function" value="onDeEquipItem"/> Até mais,
  16. Oneshot

    Dúvida Sobre Spell!

    kilat, Haha! Se não fosse pelo meu erro, teria funcionado também, Agora, vejamos se entendi, você quer uma verificação se o jogador aprendeu a magia para poder invocar-la? No caso seria com a função getPlayerLearnedInstantSpell(cid, name), ele retorna um valor booleano [verdadeiro = o jogador aprendeu a magia, falso = o contrário]. Vou usar o script do Vodkart, que está menos propenso a erros. local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0) local area1 = createCombatArea(AREA_CROSS5X5) setCombatArea(combat1, area1) local area2 = createCombatArea(AREA_CROSS5X5) setCombatArea(combat2, area2) function onCastSpell(cid, var) if (isPremium(cid) == TRUE and getPlayerVocation(cid) == 9) then return doCombat(cid, combat2, var) elseif (getPlayerLearnedSpell(cid, "Rage of the Skies")) then return doCombat(cid, combat1, var) else doPlayerSendCancel(cid, "You can\'t use this spell") end end Até mais,
  17. Zuth kimu, O NPC não aceita, bem, moeda ou item. Ele só verifica se o jogador pode pagar os preços com uma função, veja abaixo: if pay(cid, 20000) then e if pay(cid, 7000) then Se o jogador pagar esse valor, o NPC irá prosseguir com a programação da rotina, do contrário irá mandar uma mensagem de que o jogador não possui dinheiro. Se você quiser mudar isso para remover itens do jogador, você pode fazer com essa função lógica: if doPlayerRemoveItem(cid, ID DO ITEM, QUANTIDADE) then Se você quiser registrar um novo tipo de moeda, poderá ir ao arquivo XML items e no item, adicionar essa chave: <attribute key="worth" value="VALOR DA MOEDA" /> Lembrando que o VALOR DA MOEDA se refere a uma só moeda, por exemplo, o valor de uma crystal coin é 10000 Até mais,
  18. Oneshot

    Dúvida Sobre Spell!

    kilat, Pelo que compreendi, você quer uma magia que seja ativada de um jeito para certa condição, e do contrário, de outro jeito. Então, segue o conteúdo da sua magia, que você deverá substituir pelo conteúdo do arquivo LUA da magia Exevo Gran Mas Vis. local combat_premium = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.6, -50, -1.8, 0) local combat_free = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.3, -30, -1.6, 0) local area_premium = createCombatArea(AREA_CROSS5X5) local area_free = createCombatArea(AREA_CROSS5X5) setCombatArea(combat_premium, area_premium) setCombatArea(combat_free, area_free) function onCastSpell_free(parameters) doCombat(parameters.cid, combat_free, parameters.var) end function onCastSpell_premium(parameters) doCombat(parameters.cid, combat_free, parameters.var) end function onCastSpell(cid, var) local parameters = {cid = cid, var = var} if (getPlayerVocation(cid) == 5 and getPlayerPremiumDays(cid) > 0) then addEvent(onCastSpell_premium, 0, parameters) else addEvent(onCastSpell_free, 0, parameters) end return true end
  19. felipedorgas, Como você pode ver o script funcionará apenas para um Boss, pois foi o que você pediu. Teste o script e reporte no tópico seu funcionamento. Já o script do membro Vodkart é um pouco mais trabalhado e mais versátil. Até mais,
  20. Oneshot

    Novos Colaboradores

    Parabéns aos novos Colaboradores! ^^ Espero que "abram vagas" para a Colaboração de Scripting.
  21. hretro, - Crie um arquivo LUA com nome de sua escolha, copie e cole o conteúdo abaixo, local config = { guildName = "" --[[insira o nome da guild]] uniqueid = 5900 --[[unique ID do piso]] } function onStepIn(cid, item, position, fromPosition) local guildId = getGuildId(config.guildName) if (item.uid == config.uniqueid) then if (getPlayerGuildId == guildId) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Welcome Guildmember!") else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You aren\'t from this guild") doTeleportThing(cid, fromPosition) end end return true end - Copie a tag abaixo no seu arquivo XML movements. <moveevent type="StepIn" uniqueid="5900" event="script" value=".lua"/> Lembrando que você deverá completar o campo value com o nome do documento LUA que você criou seguido da extensão (é claro). Até mais.
  22. Oneshot

    Mudando A Utani Gran Hur.

    139, Creio que já sabe lidar com arquivos LUA e registrar magias no arquivo XML spells, então, postarei apenas o script. local scombat = createCombatObject() local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_HOLY) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) local condition = createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_TICKS, 22000) setConditionFormula(condition, 0.7, -56, 0.7, -56) setCombatCondition(combat, condition) local area = createCombatArea({ {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0} }) setCombatArea(scombat, area) function onTargetTile(cid, pos) return doCombat(cid, combat, positionToVariant(pos)) end setCombatCallback(scombat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, scombat, var) end Teste e reporte no tópico o resultado. Até mais.
  23. Claudiomir, Vamos testar essa hipótese: <attribute key="attackspeed" value="X"/> Coloque essa tag no item que você quer no arquivo items.xml. Substituindo X pela velocidade do ataque, lembrando que quanto menor o valor, mais rápido o ataque. Estou incerto sobre isso, mas vai que funciona, né?
  24. craft3R, Esse evento é um tipo de Movement, Crie um arquivo LUA chamado hotaquest na pasta movements/scripts e adicione o conteúdo abaixo: local toposition = {x=, y=, z=, stackpos=253} function onAddItem(cid, moveitem, tileitem, position, cid) if (moveitem.itemid == 2159 and tileitem.actionid == 8012) then doRemoveItem(moveitem.uid, 1) doTeleportThing(cid, toposition) doSendMagicEffect(getThingPosition(cid), 10) doSendMagicEffect(toposition, 10) end return true end Adicione esta tag ao seu arquivo XML movements <moveevent type="AddItem" tileitem="1" actionid="8012" event="script" value="hotaquest.lua"/> Veja se funciona ;D Cya
  • Quem Está Navegando   0 membros estão online

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