Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. Reparei que na PxG este Air Vortex, além de impedir com que o pokémon usuário se mova ou use outras spells, aplica um efeito de silence. Você quer da mesma maneira? Se sim, todos os pokémons pegos pelo movimento teriam este debuff aplicado? Também reparei que, quando o Shiny Fearow usa esta magia, há efeitos de "redemoinho" em volta dele. Saberia dizer se isto é parte da outfit ou efeitos individuais? Já no Unown Help, estes Unowns possuem tempo de duração? E este ataque usado por eles que você mencionou, como funciona? No Unown Rush, reparei que o efeito do dano em área é lançado algumas vezes. Neste caso, cada "lance" aplica dano ou este é aplicado apenas uma vez? E estou enganado, ou ao final da execução do movimento o Unown Legion fica com o buff do Barrier? Você gostaria disso também na spell (apesar de eu achar absurdamente estranho lol)?
  2. Seguindo a lógica do League of Legends, seria necessário matar outros monstros (torres) para enfim poder destruir o Nexus?
  3. Na verdade, esta verificação seria necessária apenas se o cid estivesse dentro da área do evento. @topic E tem como o jogador sair do evento antes que este acabe? PS: Salvando os IPs numa tabela fora do callback permite que o evento aconteça apenas uma vez até o servidor ser novamente iniciado (ou até alguém recarregar as actions in-game/na distro).
  4. E como a base do time inimigo seria destruída?
  5. Então basta fazer uma verificação dos IPs dos jogadores na área do evento e um onLogin. lol... local area = {{x = x, y = y, z = z}, {x = x, y = y, z = z}} function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end for x = area[1].x, area[2].x do for y = area[1].y, area[2].y do local pos = {x = x, y = y, z = area[1].z} local c = getTopCreature(pos).uid if c > 0 and isPlayer(c) then if getPlayerIp(cid) == getPlayerIp(c) then return doPlayerSendCancel(cid, "There's already someone with your ip in the event...") and doTeleportThing(cid, fromPosition) end end end end return true end local area = {{x = x, y = y, z = z}, {x = x, y = y, z = z}} function onLogin(cid) if isInArea(getThingPos(cid), area[1], area[2]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end return true end
  6. Ajudaria se você postasse um vídeo demonstrando as spells, juntamente de uma explicação detalhada.
  7. local ips = {} function onStepIn(cid) if not isPlayer(cid) then return true elseif isInArray(ips, getPlayerIp(cid)) then return doPlayerSendCancel(cid, "There's already someone with your IP in the event.") and doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end table.insert(ips, getPlayerIp(cid)) return true end
  8. A storage que deve ser configurada é a mesma que estiver na tag da outfit em data/XML/outfits.xml. Exemplo: <outfit id="5" premium="yes" quest="181603"> <!-- A storage corresponde ao valor do atributo quest --> <list gender="0" lookType="586" name="Oriental"/> <list gender="1" lookType="585" name="Oriental"/> </outfit> Caso esta outfit fosse vendida pelo comando, a storage colocada na tabela correspondente seria 181603. Agora, o comando: local config = { itemId = 2160, outfits = { --["nome"] = {price = preço, storage = explicado no comentário}, ["vengeance"] = {price = 10, storage = xxx}, }, } function onSay(cid, words, param) if param == "" then return doPlayerSendCancel(cid, "Especify an outfit.") end local outfit = config.outfits[param:lower()] if outfit then if getPlayerStorageValue(cid, outfit.storage) > -1 then doPlayerSendCancel(cid, "You already bought this outfit.") else if doPlayerRemoveItem(cid, config.itemId, outfit.price) then doPlayerSendTextMessage(cid, 27, "You bought "..param.." outfit.") setPlayerStorageValue(cid, outfit.storage, 1) else doPlayerSendCancel(cid, "You do not have enough money ("..outfit.price.."x "..getItemNameById(config.itemId)..").") end end else doPlayerSendCancel(cid, "Invalid outfit.") end return true end
  9. Esse erro começou quando você usou a action alterada?
  10. Como assim? Algo do tipo? <globalevent name="effects" interval="100" event="script" value="CyberQuest.lua"/> <globalevent name="effects" interval="2000" event="script" value="killTest.lua"/> Se for, sim, tem problema.
  11. Globalevent: local config = { effect = xxx, --Efeito. hp = xxx, --HP tirada. pos = { {x = x, y = y, z = z}, {x = x, y = y, z = z}, {x = x, y = y, z = z}, --etc }, } function onThink() for _, pos in pairs(config.pos) do local c = getTopCreature(pos).uid doSendMagicEffect(pos, config.effect) if c > 0 and isPlayer(c) then doCreatureAddHealth(c, -config.hp) end end return true end
  12. Lib: cityMonsters = { --["monster_name"] = recomendo número anterior + 1, ["Monster I"] = 1, ["Monster II"] = 2, ["Monster III"] = 3, --etc } DEFAULT_STORAGE = 49198 function setGuildExperience(guildId, exp) for _, pid in pairs(getPlayersOnline()) do if getPlayerGuildId(pid) == guildId then doPlayerSetExperienceRate(cid, 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 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, 98471), getPlayerGuildId(killer) if atualGuild > 0 and playerGuild > 0 and atualGuild ~= playerGuild then setGuildExperience(atualGuild, getGuildExpRate(atualGuild) - 0.05) setGuildExperience(playerGuild, getGuildExpRate(playerGuild) + 0.05) setGlobalStorageValue(DEFAULT_STORAGE + m, playerGuild) end end return true end Tags: <event type="death" name="mDeath" event="script" value="nome_do_arquivo.lua"/> <event type="statschange" name="mStatsChange" event="script" value="nome_do_arquivo.lua"/> <event type="target" name="mTarget" event="script" value="nome_do_arquivo.lua"/> <event type="login" name="mLogin" event="script" value="nome_do_arquivo.lua"/> No arquivo .XML do monstro: <script> <event name="mDeath"/> </script>
  13. action: --[[ Slot system 100% by mock \o ]] ---Config local conf = { maxSlotCount=2, ignoredIds={}, items = { --[itemid] = {attr = "hp"/"mp"/"ml"/"cas"/"shield"/"dist", percent = x%}, [4918] = {attr = "hp", percent = 5}, [4920] = {attr = "dist", percent = 15}, [4925] = {attr = "ml", percent = 5}, --etc }, } --End function choose(...) --- Function by mock. local arg = {...} return arg[math.random(1, #arg)] end if not getItemAttack then function getItemAttack(uid) return getItemAttribute(uid,'attack') end function getItemDefense(uid) return getItemAttribute(uid,'defense') end end local function isArmor(uid) -- Function by Mock the bear. if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then return true end return false end local function isWeapon(uid) -- Function by Mock the bear. uid = uid or 0 local f = getItemWeaponType(uid) if f == 1 or f == 2 or f == 3 then return true end return false end local function isShield(uid) -- Function by Mock the bear. uid = uid or 0 if getItemWeaponType(uid) == 4 then return true end return false end local function isBow(uid) -- Function by Mock the bear. uid = uid or 0 if getItemWeaponType(uid) == 5 and not isItemStackable(uid) then return true end return false end function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB) if item.uid == 0 or item.itemid == 0 then return false end local itemTable = conf.items[item.itemid] if not itemTable then return doPlayerSendCancel(cid, "You cannot use this item.") end toPosition.stackpos = 255 if item.uid == 0 or item.itemid == 0 then return false end toPosition.stackpos = 255 if isInArray(conf.ignoredIds, itemEx.itemid) or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5) or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx)) or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.") return true end if isCreature(itemEx.uid) then return false end local nam = getItemName(itemEx.uid) function getSlotCount(nam) local c = 0 for _ in nam:gmatch('%[(.-)%]') do c = c+1 end return c end if getSlotCount(nam) < conf.maxSlotCount then local l = itemTable.attr local p = itemTable.percent doSendMagicEffect(toPosition,30) nam = nam..' ['..l..'.+'..p..'%]' doSendAnimatedText(toPosition,l..' '..p..'%',120) doItemSetAttribute(itemEx.uid,'name',nam) doRemoveItem(item.uid,1) else doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.") end return true end
  14. E os monstros, seriam os mesmos para todas as cidades? Ou seria, por exemplo, monstro x na cidade 1, monstro y na cidade 2, etc?
  15. Assim que mortos, esses monstros spawnarão automaticamente ou terão um tempo para tal?
  16. --- Xtibia --- Xtibia. local vocations = {1, 2, 4, 5, 6, 7, 8} -- Vocações que podem refinar itens local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados local controle = { {level = 0, quantOre = 1, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso {level = 1, quantOre = 2, chance = 90}, {level = 2, quantOre = 3, chance = 80}, {level = 3, quantOre = 4, chance = 70}, {level = 4, quantOre = 5, chance = 60}, {level = 5, quantOre = 6, chance = 50}, {level = 6, quantOre = 7, chance = 40}, {level = 7, quantOre = 8, chance = 30}, {level = 8, quantOre = 9, chance = 20}, {level = 9, quantOre = 10, chance = 10} } function getItemLevel(uid) if uid > 0 then return getItemAttribute(uid, "lvl") or 0 end return false end function doItemAddLevel(uid, count) if uid > 0 and tonumber(count) then return doItemSetAttribute(uid, "lvl", getItemLevel(uid) + count) end return false end function onUse(cid, item, fromPosition, itemEx, toPosition) if not isInArray(vocations, getPlayerVocation(cid)) then return doPlayerSendCancel(cid, "Sua vocacao nao pode refinar.") elseif isInArray(ids_bloqueados, itemEx.uid) then return doPlayerSendCancel(cid, "Este item nao pode ser refinado.") end if getItemInfo(itemEx.itemid).attack > 0 or getItemInfo(itemEx.itemid).defense > 0 or getItemInfo(itemEx.itemid).armor > 0 then for _, upgrade in pairs(controle) do local atk = getItemAttribute(itemEx.uid, "attack") or getItemInfo(itemEx.itemid).attack local def = getItemAttribute(itemEx.uid, "defense") or getItemInfo(itemEx.itemid).defense local arm = getItemAttribute(itemEx.uid, "armor") or getItemInfo(itemEx.itemid).armor local chance = math.random(1, 100) if getItemLevel(itemEx.uid) == upgrade.level then if doPlayerRemoveItem(cid, 5880, upgrade.quantOre) then doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_CRAPS) if chance <= upgrade.chance then if getItemLevel(itemEx.uid) == 0 then doItemSetAttribute(itemEx.uid, "description", "Esse item foi refinado por" ..getCreatureName(cid)) end doItemAddLevel(itemEx.uid, 1) doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).. " + " ..getItemLevel(itemEx.uid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..getItemNameById(itemEx.itemid).." eh level " ..getItemLevel(itemEx.uid)) if getItemInfo(itemEx.itemid).attack > 0 then doItemSetAttribute(itemEx.uid, "attack", atk + 1) return true elseif getItemInfo(itemEx.itemid).armor > 0 then doItemSetAttribute(itemEx.uid, "armor", arm + 1) return true elseif getItemInfo(itemEx.itemid).defense > 0 and getItemInfo(itemEx.itemid).attack <= 0 then doItemSetAttribute(itemEx.uid, "defense", def + 1) return true end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce falhou.") if getItemLevel(itemEx.uid) > 0 then doItemAddLevel(itemEx.uid, -1) doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).. " + " ..getItemLevel(itemEx.uid)) if getItemInfo(itemEx.itemid).attack > 0 then doItemSetAttribute(itemEx.uid, "attack", atk - 1) return true elseif getItemInfo(itemEx.itemid).armor > 0 then doItemSetAttribute(itemEx.uid, "armor", arm - 1) return true elseif getItemInfo(itemEx.itemid).defense > 0 and getItemInfo(itemEx.itemid).attack <= 0 then doItemSetAttribute(itemEx.uid, "defense", def - 1) return true end end return true end else doPlayerSendCancel(cid, "Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.") end end end else doPlayerSendCancel(cid, "Esse item nao pode ser refinado.") end return true end
  17. Como esperado da nova staff, um ótimo trabalho.
  18. Remova a linha: doPlayerAddExp(cid, exp) Adicione, abaixo de: function onUse(cid, item, fromPosition, itemEx, toPosition) isso: doPlayerAddLevel(cid, 3)
  19. Se o código acima não funcionar, use este: local shinys = { "Venusaur", "Blastoise", "Butterfree", "Beedrill", "Pidgeot", "Rattata", "Raticate", "Raichu", "Golbat", "Paras", "Parasect", "Magmar", "Typhlosion", "Xatu", "Growlithe", "Arcanine", "Tentacruel", "Farfetch'd", "Gengar", "Krabby", "Tauros", "Kingler", "Cubone", "Horsea", "Seadra", "Weezing", "Scyther", "Pinsir", "Crobat", "Zubat", "Tentacool", "Feraligatr", "Machamp", "Meganium", "Alakazam", "Tangela", "Ampharos", "Electabuzz", "Jynx", "Charizard", "Voltorb", "Electrode"} local raros = {"Dragonair", "Dratini", "Giant Magikarp", "Gyarados", "Magmortar", "Electivire", "Salamence", "Mantine"} local specialSummon = { chance = 1, --Chance, em porcentagem, do pokémon especial nascer. pokes = { {"Milotic", "Electivire", "Magmortar", "Salamence"}, --Pokémons que podem ser summonados. {"Brave Venusaur", "Ancient Kingdra", "Hard Rhydon"}, --Pokémons que, quando spawnados, há chance de summonar um dos pokémons acima. }, } local function ShinyName(cid) if isCreature(cid) then if string.find(tostring(getCreatureName(cid)), "Shiny") then local newName = tostring(getCreatureName(cid)):match("Shiny (.*)") doCreatureSetNick(cid, newName) if isMonster(cid) then doSetCreatureDropLoot(cid, false) end end end end local function doSetRandomGender(cid) if not isCreature(cid) then return true end if isSummon(cid) then return true end local gender = 0 local name = getCreatureName(cid) if not newpokedex[name] then return true end local rate = newpokedex[name].gender if rate == 0 then gender = 3 elseif rate == 500 then gender = 4 elseif rate == -1 then gender = 0 elseif math.random(1, 500) <= rate then gender = 4 else gender = 3 end doCreatureSetSkullType(cid, gender) end local function doShiny(cid) if isCreature(cid) then if isSummon(cid) then return true end if getPlayerStorageValue(cid, 74469) >= 1 then return true end if getPlayerStorageValue(cid, 22546) >= 1 then return true end if isNpcSummon(cid) then return true end if getPlayerStorageValue(cid, 637500) >= 1 then return true end --alterado v1.9 if isInArray(shinys, getCreatureName(cid)) then --alterado v1.9 \/ chance = 2.0 --1% chance elseif isInArray(raros, getCreatureName(cid)) then --n coloquem valores menores que 0.1 !! chance = 1 --1% chance else return true end if math.random(1, 500) <= chance*10 then doSendMagicEffect(getThingPos(cid), 18) local name, pos = "Shiny ".. getCreatureName(cid), getThingPos(cid) doRemoveCreature(cid) local shi = doCreateMonster(name, pos, false) setPlayerStorageValue(shi, 74469, 1) else setPlayerStorageValue(cid, 74469, 1) end --/\ else return true end end function onSpawn(cid) registerCreatureEvent(cid, "Experience") registerCreatureEvent(cid, "GeneralConfiguration") registerCreatureEvent(cid, "DirectionSystem") registerCreatureEvent(cid, "CastSystem") if isSummon(cid) then registerCreatureEvent(cid, "SummonDeath") return true end addEvent(function() if isCreature(cid) then if isInArray(specialSummon.pokes[2], getCreatureName(cid)) then if math.random(1, 100) <= specialSummon.chance then local position = getThingPos(cid) doRemoveCreature(cid) doCreateMonster(specialSummon.pokes[1][math.random(#specialSummon.pokes[1])], position) end end end end, 15) addEvent(doShiny, 10, cid) addEvent(ShinyName, 15, cid) addEvent(adjustWildPoke, 5, cid) return true end
  20. ^ http://www.xtibia.com/forum/topic/225014-queries-e-sql-para-otservers/
  21. Abaixo de: function onSay(cid, words, param) coloque: local vocations = {1, 2, 3} --Vocações que podem teleportar. if not isInArray(vocations, getPlayerVocation(cid)) then return doPlayerSendCancel(cid, "Você não é digno de ir para esse lugar.") end
  22. zipter98

    Target em area

    A versão que gasta menos memória é a segunda. Digo isso julgando tanto os códigos apresentados quanto as funções utilizadas.
  • Quem Está Navegando   0 membros estão online

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