Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. local config = { attr = "apricorn", limit = 30, --Limite de apricorns por pokémon. returnMessage = "You already used %d apricorns in this pokemon.", } function onUse(cid, item, frompos, item2, topos) local summon = getCreatureSummons(cid)[1] local tabela_status = { [27054] = {name="offense", value = 10}, [27053] = {name="defense", value = 10}, [27052] = {name="speed", value = 10}, [27050] = {name="vitality", value = 10}, [27051] = {name="specialattack", value = 10}, } if #getCreatureSummons(cid) < 1 then doPlayerSendTextMessage((cid), 27, "[Apricorn] Solte-o Seu Pokemon Para Dar o Apricorn!.") return false else local pb = getPlayerSlotItem(cid, 8) local attr = getItemAttribute(pb.uid, config.attr) or 0 if attr < config.limit then local pokename = getItemAttribute(pb.uid, "poke") doRemoveItem(item.uid, 1) local status = tabela_status[item.itemid] local pbstat= getItemAttribute(pb.uid, status.name) local st = pbstat + tabela_status[item.itemid].value doItemSetAttribute(pb.uid, status.name , st) doSendFlareEffect(getThingPos(summon)) doSendAnimatedText(getThingPos(summon), "Apricorn!", 215) doPlayerSendTextMessage((cid), 27, "[Apricorn] Seu Pokemon "..pokename.." Ganhou "..status.value.." "..status.name.." points!") doSendFlareEffect(getThingPos(cid)) doItemSetAttribute(pb.uid, config.attr, attr + 1) else doPlayerSendCancel(cid, config.returnMessage:format(config.limit)) end end return true end
  2. zipter98

    Target em area

    A função em si está funcionando perfeitamente. Provavelmente você está testando-a sem um summon. Remova isso: print(getCreatureName(pid).." - "..isPlayer(pid) and "player" or isMonster(pid) and "monster" or isSummon(pid) and "summon" or "npc") e troque: local targeting = getMonstersTargetingCid(getCreatureSummons(cid)[1], 5, 5) --Área de dimensão 5x5 SQMs. por: local targeting = getMonstersTargetingCid(cid, 5, 5) --Área de dimensão 5x5 SQMs. Assim, serão verificados os monstros que estão atacando você, o jogador. Ah, e também uma pequena falta de atenção minha: Troque: print(getCreatureName(targeting).." is targeting your summon.") por: print(getCreatureName(pid).." is targeting your summon.")
  3. zipter98

    Target em area

    Use este código e informe o que for imprimido no console: function getMonstersTargetingCid(cid, x, y) if not isCreature(cid) then return false end local spec, uid = getSpectators(getThingPos(cid), tonumber(x) or 1, tonumber(y) or 1), {} for _, pid in pairs(spec) do print(getCreatureName(pid).." - "..isPlayer(pid) and "player" or isMonster(pid) and "monster" or isSummon(pid) and "summon" or "npc") if pid ~= cid and not isPlayer(pid) and getCreatureTarget(pid) == cid then table.insert(uid, pid) end end return uid end
  4. zipter98

    Target em area

    Alguns servidores têm problemas com o isMonster. Talvez seja o caso do seu. Tente esta versão: function getMonstersTargetingCid(cid, x, y) if not isCreature(cid) then return false end local spec, uid = getSpectators(getThingPos(cid), tonumber(x) or 1, tonumber(y) or 1), {} for _, pid in pairs(spec) do if pid ~= cid and not isPlayer(pid) and getCreatureTarget(pid) == cid then table.insert(uid, pid) end end return uid end
  5. zipter98

    Target em area

    Sendo x e y as dimensões da área e cid, logicamente, a criatura sob a qual a função será executada: function getMonstersTargetingCid(cid, x, y) if not isCreature(cid) then return false end local spec, uid = getSpectators(getThingPos(cid), tonumber(x) or 1, tonumber(y) or 1), {} for _, pid in pairs(spec) do if pid ~= cid and isMonster(pid) and getCreatureTarget(pid) == cid then table.insert(uid, pid) end end return uid end Exemplo de uso: local targeting = getMonstersTargetingCid(getCreatureSummons(cid)[1], 5, 5) --Área de dimensão 5x5 SQMs. if targeting and #targeting > 0 then for _, pid in pairs(targeting) do print(getCreatureName(pid).." is targeting your summon.") end else print("There's no monsters targeting your summon.") end
  6. Qual o formato que você está salvando o arquivo?
  7. Qual o erro na distro? Poderia postá-lo?
  8. function onUse(cid, item, fromPosition, itemEx, toPosition) local arvoresid = {2701, 2702, 2703, 2704} local madeiraid = 5901 local chance = 98 local pposition = getPlayerPosition(cid) local random = math.random(1,100) for i = 1, #arvoresid do if(itemEx.uid == arvoresid or itemEx.actionid == 3666 and random <= chance) then doCreateItem(madeiraid, 1, pposition) doSendMagicEffect(pposition, CONST_ME_CRAPS) doCreatureSay(cid, getCreatureName(cid) .. ' cortou madeira', TALKTYPE_ORANGE_1) end end return true end
  9. ^ O primeiro argumento da função doCreateMonster deve ser uma string ou uma variável com valor de string. Strings devem ser escritas entre aspas ("exemplo" ou 'exemplo'). E, pelo menos neste caso, o callback deve retornar verdadeiro. local pos = {x = 1087, y = 1010, z = 7} function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid == 7294 then doTeleportThing(cid, pos) doSendMagicEffect(getPlayerPosition(cid), 10) doCreateMonster("Mammoth", pos) else doPlayerSendCancel(cid, "You are using item in the wrong place.") end return true end
  10. zipter98

    Sistema de Aura

    ^ como os códigos são interpretados na ordem que estão, haverá erro caso o jogador deslogue. local tab = { [6] = {effect = 70}, [7] = {effect = 70}, [8] = {effect = 70}, [9] = {effect = 70}, [10] = {effect = 70}, [11] = {effect = 70},-- [vocationID] = {effect = Number} [12] = {effect = 70} } local delay = 2 -- tempo do efeito da aura em segundos function ariseAura(cid) if isPlayer(cid) then doSendMagicEffect(getThingPos(cid), tab[getPlayerVocation(cid)].effect) addEvent(ariseAura, delay * 1000, cid) end end function onLogin(cid) if tab[getPlayerVocation(cid)] then ariseAura(cid) end return true end
  11. ^ sim. @Bruno Neste loop, id assumiria o valor dos indexes da tabela e qtd, as tabelas contendo ID e quantidade. Assim, o correto seria: local quest = { items = { {2394, 1}, -- { id, quantidade } {2160, 1} }, sto = 98770 -- storage da quest. } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local queststatus = player:getStorageValue(quest.sto) if queststatus ~= 1 then for _, item in pairs(quest.items) do player:addItem(item[1], item[2]) end player:sendTextMessage(MESSAGE_INFO_DESCR, "Parabens! Voce completou a quest.") player:setStorageValue(quest.sto, 1) else player:sendTextMessage(MESSAGE_INFO_DESCR, "Desculpe! Voce ja completou esta quest.") end return true end
  12. Action: local config = { maxSkill = 100, --Nível máximo de critical. pointPerItem = 1, --Quantos pontos em critical irá ganhar por item. storage = 9571, } function onUse(cid, item) if getPlayerStorageValue(cid, config.storage) >= config.maxSkill then return doPlayerSendCancel(cid, "You already reached the maximum critical level. ["..config.maxSkill.."]") end setPlayerStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage) > -1 and getPlayerStorageValue(cid, config.storage) + 1 or 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You received: "..config.pointPerItem.." point(s) on critical skill.\nPoints: ["..getPlayerStorageValue(cid, config.storage).."/"..config.maxSkill.."]") doRemoveItem(item.uid, 1) return true end Creaturescript: local config = { chancePerLevel = 3, --Chance, por nível, de acerto crítico. extraDamage = 50, --Bônus extra, em porcentagem, de dano. storage = 9571, } function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and getPlayerStorageValue(attacker, config.storage) > -1 and type == STATSCHANGE_HEALTHLOSS then if math.random(config.chancePerLevel, config.chancePerLevel * 100) <= config.chancePerLevel * getPlayerStorageValue(attacker, config.storage) then value = math.floor(value * config.extraDamage / 100) doSendAnimatedText(getThingPos(cid), "CRITICAL!", 255) end end return true end Não se esqueça de registrar o evento em login.lua.
  13. Ok, troque: doTransformItem(getTileItemById(pos, i == 1 and config.door[1][n] or config.door[2]).uid, config.door[i + 1]) por: doTransformItem(getTileItemById(pos, i == 1 and config.door[1][1] or config.door[2]).uid, config.door[i + 1]) e troque: local j = i == 1 and config.door[2] or config.door[1][n] por: local j = i == 1 and config.door[2] or config.door[1][1] E 606 não é uma action, e sim o ID da porta.
  14. local config = { delay = 150, --Intervalo de tempo entre as "transformações" da porta, em milésimos. door = {{621, 606}, 622, 605}, --{ID da porta fechada, ID da porta aberta pela metade, ID da porta aberta}, ids = { [2701] = { {x = 1056, y = 1055, z = 7}, --Saffron-- }, }, } function onStepIn(cid, item, position) if config.ids[item.actionid] then for _, pos in pairs(config.ids[item.actionid]) do if type(config.door[1]) == "table" then for n = 1, #config.door[1] do if getTileItemById(pos, config.door[1][n]).uid > 0 then for i = 1, 2 do addEvent(function() doTransformItem(getTileItemById(pos, i == 1 and config.door[1][n] or config.door[2]).uid, config.door[i + 1]) end, i * config.delay) end end end else if getTileItemById(pos, config.door[1]).uid > 0 then for i = 1, 2 do addEvent(function() doTransformItem(getTileItemById(pos, i == 1 and config.door[1] or config.door[2]).uid, config.door[i + 1]) end, i * config.delay) end end end end end return true end function onStepOut(cid, item) if config.ids[item.actionid] then for _, pos in pairs(config.ids[item.actionid]) do local it = getTileItemById(pos, config.door[3]).uid if it > 0 then if getSpectators(pos, 1, 1) then return true end end end for _, pos in pairs(config.ids[item.actionid]) do if getTileItemById(pos, config.door[3]).uid > 0 then for i = 1, 2 do addEvent(function() if type(config.door[1]) == "table" then for n = 1, #config.door[1] do local j = i == 1 and config.door[2] or config.door[1][n] doTransformItem(getTileItemById(pos, i == 1 and config.door[3] or config.door[2]).uid, j) end else doTransformItem(getTileItemById(pos, i == 1 and config.door[3] or config.door[2]).uid, config.door[i == 1 and 2 or 1]) end end, i * config.delay) end end end end return true end
  15. Mesmo sendo apenas um item, você precisa colocar as posições dos cantos da porta. Segue a imagem, onde as posições circuladas são as que menciono:
  16. data/lib/050-function.lua, adicione as funções: function setEffect(cid, effect) setPlayerStorageValue(cid, 9671, effect) sendEffect(cid) end function sendEffect(cid) local delay = 500 --Intervalo, em milésimos de segundo, entre os efeitos. if getPlayerStorageValue(cid, 9671) > -1 then doSendMagicEffect(getThingPos(cid), getPlayerStorageValue(cid, 9671)) addEvent(function() if isPlayer(cid) then sendEffect(cid) end end, delay) end end data/creaturescripts/scripts, em login.lua: Abaixo de: function onLogin(cid) adicione: sendEffect(cid) Para adicionar um efeito ao jogador, use: setEffect(cid, efeito)
  17. Vejo que você configurou apenas uma posição em ids. Bem, deve-se colocar ambas as posições da porta.
  18. function onTarget(cid, target) if isSummon(target) and getCreatureMaster(target) == cid then return false end return true end function onStatsChange(cid, attacker, type, combat, value) if isSummon(cid) and getCreatureMaster(cid) == attacker then return false end return true end function onLogin(cid) registerCreatureEvent(cid, "targetSummon") registerCreatureEvent(cid, "attackSummon") return true end Tags: <event type="login" name="loginSummon" event="script" value="nome_do_arquivo.lua"/> <event type="target" name="targetSummon" event="script" value="nome_do_arquivo.lua"/> <event type="statschange" name="attackSummon" event="script" value="nome_do_arquivo.lua"/>
  19. Tag: <action itemid="12344;ID_do_outro_revive" event="script" value="revive.lua" blockwalls="1"/> Código: local revives = { [12344] = "1-199", --[ID_do_revive] = "minLevel-maxLevel", [xxx] = "200-99999", } function onUse(cid, item, frompos, item2, topos) if (item2.itemid == 13860 or item2.itemid == 13810) and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then doRemoveItem(item2.uid) return true end if getPlayerStorageValue(cid, 990) >= 1 then doPlayerSendCancel(cid, "You can't use revive during gym battles.") return true elseif getPlayerStorageValue(cid, 52481) >= 1 then doPlayerSendCancel(cid, "You can't do that while a duel.") --alterado v1.6 return true elseif isPlayer(item2.uid) then doPlayerSendCancel(cid, "Please, use revive only on pokeballs.") return true end if revives[item.itemid] then local level = revives[item.itemid]:explode("-") if getPlayerLevel(cid) < tonumber(level[1]) or getPlayerLevel(cid) > tonumber(level[2]) then return doPlayerSendCancel(cid, "You can't use this revive at this level.") end end if item2.uid ~= getPlayerSlotItem(cid, 8).uid then return true end if item2.uid ~= getPlayerSlotItem(cid, 8).uid and not isInArray(getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid), item2.uid) then return true end for a, b in pairs (pokeballs) do if not item2.itemid == b.on or not item2.itemid == b.off then doPlayerSendCancel(cid, "Please, use revive only on pokeballs.") return true end end local pokeball = getPlayerSlotItem(cid, 8) for a, b in pairs (pokeballs) do if item2.itemid == b.on or item2.itemid == b.off then --edited deixei igual ao do PXG doTransformItem(item2.uid, b.on) doSetItemAttribute(item2.uid, "hp", 1) for c = 1, 15 do local str = "move"..c setCD(item2.uid, str, 0) end setCD(item2.uid, "control", 0) setCD(item2.uid, "blink", 0) --alterado v1.6 doSendMagicEffect(getThingPos(cid), 13) doRemoveItem(item.uid, 1) doCureBallStatus(getPlayerSlotItem(cid, 8).uid, "all") doCureStatus(cid, "all", true) cleanBuffs2(item2.uid) --alterado v1.5 --[[if getPlayerStorageValue(cid, storage) > 0 then setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage)-1) end--]] return true end end return true end
  20. Ah, isso explica. O script só vai funcionar se tanto quem morreu quanto quem matou forem players. Isso acontece pois o monstro Ceifeiro é invocado como summon do assassino.
  21. Sim, está certo. Você por acaso está morrendo para um monstro ou para um player?
  22. Ué. Tenta agora assim: local config = { time = 3, --Tempo para sumir, em segundos. monster = "ceifeiro", --Nome do monstro. } function onStatsChange(cid, attacker, type, combat, value) if value >= getCreatureHealth(cid) and isPlayer(cid) and isPlayer(attacker) and type == STATSCHANGE_HEALTHLOSS then doConvinceCreature(attacker, doCreateMonster(config.monster, getThingPos(cid))) doSendAnimatedText(getThingPos(cid), "DEATH!", 125) doSendMagicEffect(getThingPos(attacker), 65) addEvent(function() if isPlayer(attacker) then for _, summon in pairs(getCreatureSummons(attacker)) do if getCreatureName(summon):lower() == config.monster:lower() then doRemoveCreature(summon) break end end end end, config.time * 1000) end return true end function onLogin(cid) registerCreatureEvent(cid, "deathSystem") return true end Tags: <event type="statschange" name="deathSystem" event="script" value="nome_do_arquivo.lua"/> <event type="login" name="deathLogin" event="script" value="nome_do_arquivo.lua"/>
  23. Tenta assim: local config = { skills = {SKILL_FIST, SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DISTANCE, SKILL_SHIELD, SKILL__MAGLEVEL}, minSkill = { --[vocation_ID] = {fist, club, sword, axe, distance, shield, magic}, --NÃO altere a ordem. [1] = {20, 1, 10, 5, 10, 15, 10}, [2] = {10, 15, 10, 20, 10, 5, 20}, }, } function onLogin(cid) local voc = getPlayerVocation(cid) if config.minSkill[voc] then for _, skillId in pairs(config.skills) do if getPlayerSkillLevel(cid, skillId) < config.minSkill[voc][_] then doPlayerAddSkill(cid, skillId, config.minSkill[voc][_] - getPlayerSkillLevel(cid, skillId)) end end end return true end
  24. Hm, tenta assim: local config = { time = 3, --Tempo para sumir, em segundos. monster = "ceifeiro", --Nome do monstro. } function onPrepareDeath(cid, deathList) local killer = deathList[1] if isPlayer(killer) then doConvinceCreature(killer, doCreateMonster(config.monster, getThingPos(cid))) doSendAnimatedText(getThingPos(cid), "DEATH!", 125) doSendMagicEffect(getThingPos(cid), 65) addEvent(function() if isPlayer(killer) then for _, summon in pairs(getCreatureSummons(killer)) do if getCreatureName(summon):lower() == config.monster:lower() then doRemoveCreature(summon) break end end end end, config.time * 1000) end return true end function onLogin(cid) registerCreatureEvent(cid, "deathSystem") return true end Tags: <event type="preparedeath" name="deathSystem" event="script" value="nome_do_arquivo.lua"/> <event type="login" name="deathLogin" event="script" value="nome_do_arquivo.lua"/> Não registre nada no login.lua.
  • Quem Está Navegando   0 membros estão online

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