Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. Algumas alterações nas sources (como na parte de invocar um monstro simulando um summon), mas a maior parte do sistema foi escrita em Lua. O Slicer, inclusive, fez uma versão desses NPCs pro PDA, apesar de apresentar algumas falhas. Quando todos os pokémons são derrotados, o NPC se transforma em um monstro, podendo assim levar dano e morrer.
  2. getSpectators no callback onThink do NPC. E não, não é possível matar ou remover vida de um NPC.
  3. Se for o caso, eu particularmente acho mais prático escrever a estátua como um pseudo-monstro - um NPC -, tornando o sistema de ataque dela de fácil manipulação. Como esta é a única função exercida pela estátua, não há problemas em ser uma simulação de monstro. Além do mais, o problema da imortalidade estaria resolvido sem a necessidade de creature events.
  4. 1º pedido - valores baseados na vida e mana totais ou atuais? 3º pedido - o comando usado para remover o esqueleto é o mesmo para invocá-lo?
  5. OK. local teleport_area = { --Área com as posições que o jogador pode ser teleportado. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 2, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } local exhaust_time = xxx --Exhaust, em segundos. function onCastSpell(cid) local area_positions = getPosfromArea(cid, teleport_area) local position = area_positions[math.random(#area_positions)] if getPlayerStorageValue(cid, 2019) > os.time() then doPlayerSendCancel(cid, "Wait "..getPlayerStorageValue(cid, 2019) - os.time().." second(s) to use this spell again.") return true end if not isWalkable(position) or getTileInfo(position).protection then while not isWalkable(position) do position = area_positions[math.random(#area_positions)] end end doTeleportThing(cid, position) setPlayerStorageValue(cid, 2019, os.time() + exhaust_time) return true end
  6. Em algum arquivo da lib, coloque as seguintes funções: Código da spell: local teleport_area = { --Área com as posições que o jogador pode ser teleportado. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 2, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } function onCastSpell(cid) local area_positions = getPosfromArea(cid, teleport_area) local position = area_positions[math.random(#area_positions)] if not isWalkable(position) or getTileInfo(position).protection then while not isWalkable(position) do position = area_positions[math.random(#area_positions)] end end doTeleportThing(cid, position) return true end
  7. <movevent type="StepIn" actionid="xxx" event="script" value="nome_do_arquivo.lua"/>
  8. local config = { toPosition = {x = x, y = y, z = z}, --Para onde o jogador será teleportado. pokeball_IDs = {itemid, itemid, itemid, ...}, --IDs das pokeballs. blocked_poke = {"Steelix", "Muk", "Xatu", ...} --Pokémons bloqueados na quest. } function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end for i = 1, #config.pokeball_IDs do if getPlayerItemCount(cid, config.pokeball_IDs) > 0 then doPlayerSendCancel(cid, "You can't carry any pokeballs with you.") doTeleportThing(cid, fromPosition) return true end end local player_pokeballs = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid) if isInArray(config.blocked_poke, getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")) then doPlayerSendCancel(cid, "You have a blocked pokemon for this quest in your team.") doTeleportThing(cid, fromPosition) return true end if #player_pokeballs > 0 then for i = 1, #player_pokeballs do local poke = getItemAttribute(player_pokeballs, "poke") if isInArray(config.blocked_poke, poke) then doPlayerSendCancel(cid, "You have a blocked pokemon for this quest in your team.") doTeleportThing(cid, fromPosition) return true end end end doTeleportThing(cid, config.toPosition) return true end
  9. function onUse(cid) if getPlayerStorageValue(cid, 96475) ~= getPlayerStorageValue(cid, 96474) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Seu locker está trancado. Para abrir ele, digite !locker pass(substituindo pass pela sua senha).") return true end if getPlayerStorageValue(cid, 96474) == -1 then if #getCreatureSummons(cid) >= 1 then doPlayerSendTextMessage(cid, 19, "[Depot] Guarde Seu Pokemon na Ball Para Abrir o Depot!") doPlayerSendTextMessage(cid, 19, "[Balls-Bloqueados] Para Desbloquear as Balls, da Use Nelas!") return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Seu locker está desprotegido, para mais informações de como protejer seu locker digite: !locker") end end
  10. É possível, mas antes eu preciso saber qual a base que você está usando.
  11. zipter98

    Spell com tabela

    local pets = {"Wolf", "Bear", "Spider", "Scorpion"} function onCastSpell(cid, var) local target_name = getCreatureName(variantToNumber(var)) if not isMonster(variantToNumber(var)) then doPlayerSendCancel(cid, "You can't use this spell on players.") return true elseif not isInArray(pets, target_name) then doPlayerSendCancel(cid, "You can't tame this creature.") return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You successfully tamed "..target_name..".") setPlayerStorageValue(cid, 3010, table.find(pets, target_name)) return true end
  12. Já que você quer que um mesmo item execute dois eventos diferentes, o mais adequado a se fazer seria mesclar ambos os códigos, não acha?
  13. Remova agora esta parte: if isLegendaryPokemon(getCreatureName(item2.uid)) then doPlayerSendCancel(cid, "Your ditto can't copy a legendary pokemon.") markPos(mysum, unfix) return true end Se a função isMegaPokemon apresentar problemas, apague este bloco de código: if isMegaPokemon(getCreatureName(item2.uid)) then doPlayerSendCancel(cid, "Your ditto can't copy a mega pokemon.") markPos(mysum, unfix) return true end E, se a função isShiny também provocar erros, repita o procedimento nestas linhas: if isShiny(item2.uid) then boost = getItemAttribute(thisball.uid, "boost") or 0 if boost < 50 then doPlayerSendCancel(cid, "Your ditto can't copy a shiny pokemon.") markPos(mysum, unfix) return true end end
  14. Em pokemon moves.lua, troque: if table.t == "fighting" then --alterado v2.6 movetype = getOffense(cid) * 0.95 + getSpecialAttack(cid) * 0.45 elseif table.t == "normal" then --alterado v2.6 movetype = movetype * 0.6 + getOffense(cid) * 0.6 end --alterado v2.6 min = 5 + getPokemonLevel(cid) + (table.f / 100 * movetype * specialoffenseRate) max = min + getPokemonLevel(cid) * levelFactor por: local pwr, t = 0, "none" if table and type(table) == "table" then pwr = table.f t = table.t end if t == "fighting" then --alterado v2.6 movetype = getOffense(cid) * 0.95 + getSpecialAttack(cid) * 0.45 elseif t == "normal" then --alterado v2.6 movetype = movetype * 0.6 + getOffense(cid) * 0.6 end --alterado v2.6 min = 5 + getPokemonLevel(cid) + (pwr / 100 * movetype * specialoffenseRate) max = min + getPokemonLevel(cid) * levelFactor Isso servirá mais como uma proteção contra o erro, não uma correção definitiva da causa do problema. Mas é o suficiente. Já quanto ao segundo problema, tire o seguinte bloco de código da action: if isOutlanderPokemon(getCreatureName(item2.uid)) then doPlayerSendCancel(cid, "Your ditto can't copy a outlander pokemon.") markPos(mysum, unfix) return true end
  15. Moveevent (data/movements/scripts): local config = { toPosition = {x = x, y = y, z = z}, --Para onde o jogador será teleportado. pokeball_IDs = {itemid, itemid, itemid, ...} --IDs das pokeballs. } function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end for i = 1, #config.pokeball_IDs do if getPlayerItemCount(cid, config.pokeball_IDs[i]) > 0 then doPlayerSendCancel(cid, "You can't carry any pokeballs with you.") doTeleportThing(cid, fromPosition) return true end end doTeleportThing(cid, config.toPosition) return true end
  16. zipter98

    [PEDIDO] DROPSTONE

    local stone_effects = { --[itemid] = effect, --Ex.: [3924] = 5, [4090] = 37, } local function sendEffStone(cid, pos, stones) if not isCreature(cid) then return true end for i = 1, 255 do pos.stackpos = i local item = getTileThingByPos(pos) if item.uid ~= 0 then if isContainer(item.uid) then if isContainer(item.uid) and getContainerSize(item.uid) > 0 then for slot=0, (getContainerSize(item.uid)-1) do local stone = getContainerItem(item.uid, slot) if isInArray(stones, stone.itemid) and stone_effects[stone.itemid] then doSendMagicEffect(getThingPos(cid), stone_effects[stone.itemid]) end end end end end end end function onKill(cid, target) local stones = {11453, 11441, 11442, 11443, 11444, 11445, 11446, 11447, 11448, 11449, 11450, 11451, 11452, 11454, 12244, 12232, 12242, 12417, 12419, 12245, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414} --id de todas as stones if ehMonstro(target) and isPlayer(cid) then local pos = getThingPos(target) local pid = getCreatureSummons(cid)[1] addEvent(sendEffStone, 150, pid, pos, stones) end return true end
  17. Se o callback apresentar problemas, troque onTime por onTimer. local wall_config = { itemid = xxx, --ID da parede. positions = { {x = x, y = y, z = z}, --Posições das paredes. {x = x, y = y, z = z}, {x = x, y = y, z = z}, --etc } } function onTime() for i = 1, #wall_config.positions do local wall = getTileItemById(wall_config.positions[i], wall_config.itemid).uid if wall == 0 then doCreateItem(wall_config.itemid, 1, wall_config.positions[i]) end end return true end Tag: <globalevent name="create_wall" time="hora:minuto" event="script" value="nome_do_arquivo.lua"/>
  18. zipter98

    oq ganha

    Uma pip nova. E uma conquista, que no caso eu não tenho.
  19. OK. local config = { stone_ID = 1546, --ID da pedra que suponho que bloqueie a passagem. stone_posis = { {x = 445, y = 593, z = 14}, --Posições das pedras (pode configurar quantas quiser). {x = 445, y = 594, z = 14} } } function onUse(cid, item, fromPos, item2, toPos) if item.itemid ~= 1945 then return true end for i = 1, #config.stone_posis do doRemoveItem(getTileItemById(config.stone_posis[i], config.stone_ID).uid) end doTransformItem(item.uid, 1946) addEvent(onTimer7, 15*60*1000, toPos) --30minutes return true end function onTimer7(lever_pos) --creates wall back doTransformItem(getTileItemById(lever_pos, 1946).uid, 1945) for i = 1, #config.stone_posis do doCreateItem(config.stone_ID, 1, config.stone_posis[i]) end end
  • Quem Está Navegando   0 membros estão online

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