Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. A outfit funciona normalmente ou só fica invisível nesse caso?
  2. data/globalevents/scripts: local config = { day = "Sunday", --Dia (em inglês). actionid = xxx, --Actionid dos tiles da área VIP. time = 90, --Tempo, em minutos, que os tiles da área VIP ficarão desabilitados. pos = { {x = x, y = y, z = z}, --Posições dos tiles da área VIP. {x = x, y = y, z = z}, } } function onTime() if os.date("%A") == config.day then for _, pos in pairs(config.pos) do local tile = getTileThingByPos(pos).uid if tile > 0 and getItemAttribute(tile, "aid") and getItemAttribute(tile, "aid") == config.actionid then doItemSetAttribute(tile, "aid", false) addEvent(function() local tile = getTileThingByPos(pos).uid if tile > 0 and not getItemAttribute(tile, "aid") then doItemSetAttribute(tile, "aid", config.actionid) end end, config.time * 60 * 1000) end end end return true end Tag: <!-- Coloque em time o horário que o script será executado --> <globalevent name="openVipArea" time="19:00" event="script" value="nome_do_arquivo.lua"/>
  3. Lib: cityMonsters = { --["monster_name"] = recomendo número anterior + 1, ["Chanceler Carlin"] = 1, ["Chanceler Kazz"] = 2, ["Chanceler Ab"] = 3, --etc } DEFAULT_STORAGE = 49198 function setGuildExperience(guildId, exp) for _, pid in pairs(getPlayersOnline()) do if getPlayerGuildId(pid) == guildId then doPlayerSetExperienceRate(pid, exp) end end end function getGuildExpRate(guildId) for _, pid in pairs(getPlayersOnline()) do local playerRate = getPlayerRates(pid)[8] if getPlayerGuildId(pid) == guildId and playerRate > 1 then return playerRate end end return 1.0 end function getGuildName(guild_id) --Omega local query = db.getResult("SELECT name FROM guilds WHERE id = "..guild_id) local ret = query:getID() == -1 and false or query:getDataString("name") query:free() return ret end Creaturescript: function onTarget(cid, target) local m, playerGuild = cityMonsters[getCreatureName(target)], getPlayerGuildId(cid) if isPlayer(cid) and isMonster(target) and m and playerGuild > 0 then return getGlobalStorageValue(DEFAULT_STORAGE + m) ~= playerGuild end return true end function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and isMonster(cid) and type == STATSCHANGE_HEALTHLOSS then local m, playerGuild = cityMonsters[getCreatureName(cid)], getPlayerGuildId(attacker) if m and playerGuild > 0 then return getGlobalStorageValue(DEFAULT_STORAGE + m) ~= playerGuild end end return true end function onLogin(cid) local guildId = getPlayerGuildId(cid) if guildId > 0 and getGuildExpRate(guildId) > 1 then doPlayerSetExperienceRate(cid, getGuildExpRate(guildId)) end registerCreatureEvent(cid, "mTarget") registerCreatureEvent(cid, "mStatsChange") return true end function onDeath(cid, corpse, deathList) local killer, m = deathList[1], cityMonsters[getCreatureName(cid)] if killer and isPlayer(killer) and m then local atualGuild, playerGuild = getPlayerStorageValue(cid, DEFAULT_STORAGE + m), getPlayerGuildId(killer) if playerGuild > 0 and atualGuild ~= playerGuild then if atualGuild > -1 then setGuildExperience(atualGuild, getGuildExpRate(atualGuild) - 0.05) end setGuildExperience(playerGuild, getGuildExpRate(playerGuild) + 0.05) setGlobalStorageValue(DEFAULT_STORAGE + m, playerGuild) broadcastMessage("A guild "..getPlayerGuildName(killer).." acaba de dominar "..getCreatureName(cid):explode(" ")[2].."!") end end return true end Moveevent: local guilds = { --[actionid] = número da cidade configurado em cityMonsters, [2391] = 1, [2392] = 2, [2393] = 3, } function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end local guildId = getGlobalStorageValue(guilds[item.actionid] + DEFAULT_STORAGE) if getPlayerGuildId(cid) ~= guildId then doTeleportThing(cid, fromPosition) end return true end Tag: <movevent type="StepIn" actionid="2391;2392;2393" event="script" value="nome_do_arquivo.lua"/> Talkaction: function onSay(cid) local str = "" for name, count in pairs(cityMonsters) do local guildName = getGuildName(getGlobalStorageValue(count + DEFAULT_STORAGE)) if guildName then if str == "" then str = "Cidade "..name:explode(" ")[2].." dominada por "..guildName.."." else str = str.."\nCidade "..name:explode(" ")[2].." dominada por "..guildName.."." end end end doPlayerPopupFYI(cid, str == "" and "Nenhuma cidade conquistada." or str) return true end
  4. Esqueci de postar uma parte do código ._. Corrigido (lib).
  5. Aparentemente a versão do PDA que você usa não é a mesma que a minha. Tente assim: Se der algum erro na distro, por favor, avise.
  6. zipter98

    Spell stop

    local time = 5 --Tempo de stun. function onCastSpell(cid) local target = getCreatureTarget(cid) if not isCreature(target) then return doPlayerSendCancel(cid, "You do not have a target.") end doCreatureSetNoMove(target, true) addEvent(function() if not isCreature(target) then return true end doCreatureSetNoMove(target, false) end, time * 1000) return true end
  7. Sinceramente, não sei qual a área mais adequada para um complemento a um sistema, mas w/e. Este complemento é designado a possibilidade de uso da PokéDex em corpses de pokémons, podendo obter suas informações. Sim, simples assim. data/actions/scripts, pokedex.lua: Troque: if not isCreature(item2.uid) then return true end por: if not isCreature(item2.uid) then local name = getItemNameById(item2.itemid) if name:find("fainted") then name = doCorrectPokemonName(name:gsub("fainted ", "")) if not getPlayerInfoAboutPokemon(cid, name).dex then local exp = newpokedex[name].level * rate doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..name.." and received "..exp.." experience points.") doSendMagicEffect(getThingPos(cid), 210) doPlayerAddExperience(cid, exp) doAddPokemonInDexList(cid, name) else doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8)) end end return true end Testado em PDA v1.9, por Slicer.
  8. zipter98

    Spell stop

    Spell: local config = { time = 10, --Tempo de stun. statue = xxx, --ID da estátua. storage = 9181 } function onCastSpell(cid) local target = getCreatureTarget(cid) if not isCreature(target) then return doPlayerSendCancel(cid, "You do not have a target.") end doCreatureSetNoMove(target, true) doCreateItem(config.statue, 1, getThingPos(target)) setPlayerStorageValue(target, config.storage, 1) local guid, toPos = getPlayerGUID(target), getThingPos(target) addEvent(function() local item = getTileItemById(toPos, config.statue).uid if item > 0 then doRemoveItem(item) end local pid = isCreature(target) and target or getPlayerByName(getPlayerNameByGUID(guid)) if isCreature(pid) then setPlayerStorageValue(pid, config.storage, -1) doCreatureSetNoMove(pid, false) else db.executeQuery("UPDATE player_storage SET value = -1 WHERE key = "..config.storage.." AND player_id = "..guid) end end, config.time * 1000) return true end data/creaturescripts/scripts: local storage = 9181 function onTarget(cid, target) return getPlayerStorageValue(target, storage) < 1 end function onStatsChange(cid, attacker, type, combat, value) return getPlayerStorageValue(cid, storage) < 1 end function onLogin(cid) registerCreatureEvent(cid, "stunStatsChange") registerCreatureEvent(cid, "stunTarget") return true end Tags: <event type="login" name="stunLogin" event="script" value="nome_do_arquivo.lua"/> <event type="statschange" name="stunStatsChange" event="script" value="nome_do_arquivo.lua"/> <event type="target" name="stunTarget" event="script" value="nome_do_arquivo.lua"/>
  9. Uma storage diferente para cada spell.
  10. Basta colocar no local apropriado, como indiquei, e sim, irá funcionar.
  11. order (lib): order (actions): login.lua:
  12. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function onGetFormulaValues(cid, level, maglevel) min = (level * 2 + maglevel * 3) * 1 max = (level * 2 + maglevel * 3) * 1.75 return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") local time = xxx --Cooldown, em segundos. local storage = 91812 --Uma storage qualquer que não esteja em uso no seu servidor. function onCastSpell(cid, var) if getPlayerStorageValue(cid, storage) > os.time() then --Checando se ainda está em cooldown. return doPlayerSendCancel(cid, "Wait "..getPlayerStorageValue(cid, storage) - os.time().." second(s) to use this spell again.") end setPlayerStorageValue(cid, storage, os.time() + time) --Setando CD na spell. return doCombat(cid, combat, var) end
  13. Tem duas opções: diretamente na tag ou manipulando storages no código lua da spell.
  14. Troque: local pokemon = flys[getPokemonName(getCreatureSummons(cid)[1])] if not pokemon then pokemon = flyItem[getPokemonName(getCreatureSummons(cid)[1])].outfit end if not speed then speed = flyItem[getPokemonName(getCreatureSummons(cid)[1])].speed end if not pokemon then pokemon = flyItem[getPokemonName(getCreatureSummons(cid)[1])].outfit end doPlayerSendTextMessage(cid, 27, "Type \"up\" or \"h1\" to fly higher and \"down\" or \"h2\" to fly lower.") doChangeSpeed(cid, -getCreatureSpeed(cid)) local speed = 500 + PlayerSpeed/5 + getSpeed(sid) * 6 * speedRate por: local pokemon = flys[getPokemonName(getCreatureSummons(cid)[1])] doPlayerSendTextMessage(cid, 27, "Type \"up\" or \"h1\" to fly higher and \"down\" or \"h2\" to fly lower.") doChangeSpeed(cid, -getCreatureSpeed(cid)) local speed = 500 + PlayerSpeed/5 + getSpeed(sid) * 6 * speedRate if not pokemon then pokemon = flyItem[getPokemonName(getCreatureSummons(cid)[1])].outfit speed = flyItem[getPokemonName(getCreatureSummons(cid)[1])].speed else pokemon = pokemon[1] end doChangeSpeed(cid, speed) setPlayerStorageValue(cid, 54844, speed) doSetCreatureOutfit(cid, {lookType = pokemon + 351}, -1) Atualizei o sistema naquele meu comentário anterior. Testei aqui e funcionou perfeitamente. Talvez hajam alguns erros no seu servidor por causa de algumas diferenças entre as bases.
  15. Nossa, esqueci um parênteses. Foi mal. Se possível, refaça os passos. EDIT: Encontrei alguns outros erros bobos. Daqui a pouco editarei meu comentário anterior com o sistema totalmente corrigido e testado.
  16. Sim, mas não postei porque pensei que você sabia fazer. <action itemid="ID_DO_ITEM" event="script" value="nome_do_arquivo.lua"/>
  17. :^) Não tem mais conquista de membro honorário? rip
  18. data/lib, configuration.lua: Coloque esta tabela: flyItem = { --["pokemon_name"] = {outfit = xxx (número do Dat Editor - 351), speed = xxx}, ["Raichu"] = {outfit = 2391, speed = 600}, } order.lua: Abaixo de: local pokemon = flys[getPokemonName(getCreatureSummons(cid)[1])] coloque: if not pokemon then pokemon = flyItem[getPokemonName(getCreatureSummons(cid)[1])].outfit else pokemon = pokemon[1] end abaixo de: local speed = flys[getPokemonName(getCreatureSummons(cid)[1])][2] coloque: if not speed then speed = flyItem[getPokemonName(getCreatureSummons(cid)[1])].speed else speed = speed[2] end Troque: doSetCreatureOutfit(cid, {lookType = pokemon[1] + 351}, -1) por: doSetCreatureOutfit(cid, {lookType = pokemon + 351}, -1) Depois, em data/creaturescripts/scripts, login.lua: Troque: doSetCreatureOutfit(cid, {lookType = flys[poke][1] + 351}, -1) por: local outfit = flys[poke] if not outfit then outfit = flyItem[poke].outfit else outfit = outfit[1] end doSetCreatureOutfit(cid, {lookType = outfit + 351}, -1) Depois, em data/actions/scripts, order.lua: Troque todos os: isInArray(skills["fly"], getPokemonName(mysum)) por: isInArray(skills["fly"], getPokemonName(mysum)) or getItemAttribute(getPlayerSlotItem(cid, 8).uid, "flyItem") Cuidado para não errar algum caractere. Ainda em data/actions/scripts, crie um arquivo com extensão .lua e coloque o seguinte conteúdo: function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then return doPlayerSendCancel(cid, "Use this in pokeballs.") elseif not getItemAttribute(itemEx.uid, "poke") then return doPlayerSendCancel(cid, "Use this in pbs w/ pokemons.") elseif not flyItem[getItemAttribute(itemEx.uid, "poke")] then return doPlayerSendCancel(cid, "You can't use this item on this pokemon.") elseif getItemAttribute(getPlayerSlotItem(cid, 8).uid, "flyItem") then return doPlayerSendCancel(cid, "This pokemon can already fly.") end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your pokemon can fly.") doItemSetAttribute(itemEx.uid, "flyItem", true) doRemoveItem(item.uid, 1) return true end
  19. zipter98

    Spell stop

    A estátua será um monstro ou item?
  20. local config = { name = "monster_name", --Nome do monstro. medal = xxx, --ID da medalha. damagePrizes = { --[{minDamage, maxDamage}] = {{itemid, count}, {itemid, count}, {itemid, count}, ...}, [{1, 1000}] = {{9281, 1}, {2160, 50}}, [{1001, 2000}] = {{9281, 1}, {2160, 50}, {2191, 100}, {9282, 1}}, }, storage = 91828, } function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and isMonster(cid) and getCreatureName(cid) == config.name and type == STATSCHANGE_HEALTHLOSS then local damage = getPlayerStorageValue(attacker, config.storage) < 1 and 0 or getPlayerStorageValue(attacker, config.storage) setPlayerStorageValue(attacker, config.storage, damage + value) end return true end function onDeath(cid, corpse, deathList) for _, pid in pairs(deathList) do local damage, prizes = getPlayerStorageValue(pid, config.storage), {} for dmg, items in pairs(config.damagePrizes) do if damage >= dmg[1] and damage <= dmg[2] then prizes = items break end end if #prizes > 0 then local prize = prizes[math.random(#prizes)] doPlayerSendTextMessage(pid, 27, "For helping killing "..config.name..", you received a medal and "..prize[2].."x "..getItemNameById(prize[1])..".") doPlayerAddItem(pid, prize[1], prize[2]) doItemSetAttribute(doPlayerAddItem(pid, config.medal, 1), "description", "Medalha de honra ganha por "..getCreatureName(pid).." por ajudar a derrotar o "..config.name.." no dia "..os.date("%D")..".") setPlayerStorageValue(pid, config.storage, -1) end end db.executeQuery("UPDATE player_storage SET value = -1 WHERE key = "..config.storage) return true end
  21. local monsters = {"Demon", "Frost Dragon", "Hydra", "Dragon Lord", "Dragon"} local time_min, max = 25, 60 local premios, gold = {{2160, 10}, {2157, 5}}, 10000 function winMonsterEvent() local max_sto, winner = 0, 0 local monster = getGlobalStorageValue(1919211) for _, pid in pairs(getPlayersOnline()) do local sto = getPlayerStorageValue(pid, 1814210) if sto > max_sto then max_sto = sto winner = pid end end if isPlayer(winner) then local artigo = getPlayerSex(winner) == 0 and "A jogadora" or "O jogador" doBroadcastMessage(artigo.." "..getCreatureName(winner).." matou "..getPlayerStorageValue(winner, 1814210).." "..monster.."s e venceu o evento, parabens!") for _, prize in pairs(premios) do doPlayerAddItem(winner, prize[1], prize[2]) end doPlayerAddMoney(winner, gold) else doBroadcastMessage("O evento terminou e nao houve nenhum vencedor.") end setGlobalStorageValue(1919211, 0) end function onTime() local random = math.random(1, #monsters) local time = math.random(time_min, max) for _, pid in pairs(getPlayersOnline()) do doPlayerSetStorageValue(pid, 1814210, 0) end setGlobalStorageValue(1919211, monsters[random]) doBroadcastMessage("O evento comecou e vai durar "..time.." minuto. O monstro sorteado foi "..monsters[random].."! Quem matar mais deles ate o fim sera o vencedor!") addEvent(winMonsterEvent, time*1000*60) return true end Tags: <globalevent name="Evento1" time="13:00" event="script" value="nome_do_arquivo.lua"/> <globalevent name="Evento2" time="17:00" event="script" value="nome_do_arquivo.lua"/> <globalevent name="Evento3" time="23:00" event="script" value="nome_do_arquivo.lua"/>
  • Quem Está Navegando   0 membros estão online

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