Postado Dezembro 5, 2014 10 anos Este é um post popular. Olá pessoa, hoje vim trazer pra vocês um script bem requisitado que inclusive é vendido por alguns scripters. Algumas versões "pioradas" dessse script podem ser encontradas em servidores cópias do Fox World porém nenhum desses scripts chegará aos pés desse daqui que foi arrumado por mim. Eu não sou o criador do Script, eu peguei qualquer um na internet e só fui arrumando e adicionando coisas que as pessoas reclamavam que não tinha. O cara que criou a versão que eu editei é esse daqui: Spoiler PROGRAMADOR: ROKSAS NUNEZ. (EDUARDO NUNEZ) Não vou me prolongar e nem falar mal da versão do Roksas, apenas saibam que eu editei ela praticamente inteira e que agora está 100%. Aqui tem um pequeno vídeo de como funciona o evento: Explicação: Gran Castle é um evento para ser feito sozinho ou com a guild, há um limite configurável no script de membros que podem entrar da mesma guild. Em dias determinados é aberto o evento e os players podem entrar ao falar com o NPC Melkrapo. Uma vez dentro do castelo os players batalharão para subir os andares e chegar até a Gran Tower, um monstro lendário que dará glória para aqueles que o derrotarem. Será que você é capaz? Instale no seu server e descubra! Um evento para redefinir o conceito de PVP e onde o seu maior inimigo serão seus semelhantes. Sem mais delongas vamos começar a instalar esse monstrinho.. porque ele é grande pra caralho. Spoiler Comece abrindo seu data\creaturescripts.xml e adicionando essas linhas: Spoiler <!-- Gran FUCKING Aura --> <event type="death" name="Gran Tower" event="script" value="Gran Tower.lua"/> <event type="login" name="Gran Aura" event="script" value="Gran Aura.lua"/> <event type="statschange" name="Gran Aura Stats" event="script" value="Gran Aura.lua"/> <event type="logout" name="Gran Aura Logout" event="script" value="Gran Aura.lua"/> <event type="target" name="Gran Tower Target" event="script" value="Gran Tower.lua"/> <event type="statschange" name="Gran Tower Stats" event="script" value="Gran Tower.lua"/> <event type="statschange" name="Barrier Stats" event="script" value="Barrier.lua"/> Agora crie um arquivo em creaturescripts\scripts chamado Gran Tower.lua e adicione o seguinte: Spoiler function onDeath(cid, corpse, lastHitKiller, mostDamageKiller) local killer = lastHitKiller[1] if isPlayer(killer) and (getCreatureName(cid) == "Gran Tower") then if (getGlobalStorageValue(GRANTOWER.FINALWINNER) ~= getCreatureName(killer)) then if getPlayerGuildId(killer) >= 1 then for index, creature in ipairs(getGranTowerPlayers()) do if getPlayerGuildId(creature) ~= getPlayerGuildId(killer) then doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature)), true) end end else for index, creature in ipairs(getGranTowerPlayers()) do if getPlayerStorageValue(creature, GRANTOWER.AURA) ~= -1 then doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature)), true) end end end if (getPlayerGuildId(killer) >= 1) then setGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID, getPlayerGuildId(killer)) for index, creature in ipairs(getGranTowerGuild(getPlayerGuildId(killer))) do setPlayerStorageValue(creature, GRANTOWER.AURA, 1) end end setPlayerStorageValue(killer, GRANTOWER.AURA, 1) addEvent(changeOutfit, 0, killer) setGlobalStorageValue(GRANTOWER.SAVELASTWINNER, getCreatureName(killer)) addEvent(doCreateMonster, 2 * 1000, "Gran Tower", GRANTOWER.TOWERPOSITION) setGlobalStorageValue(GRANTOWER.FINALWINNER, getCreatureName(killer)) setGlobalStorageValue(GRANTOWER.DESTROYCOUNT, (getGlobalStorageValue(GRANTOWER.DESTROYCOUNT) + 1)) doBroadcastMessage("[Gran Tower] The Gran Aura is with "..getCreatureName(killer)..", run to destroy the Grand Tower and take it.") end end return true end function onTarget(cid, target) if isPlayer(cid) and isMonster(target) and (getCreatureName(target) == "Gran Tower") then if (getGlobalStorageValue(GRANTOWER.FINALWINNER) == getCreatureName(cid)) then doPlayerSendCancel(cid, "Você não pode atacar o Gran Tower, proteja ele!") return false end end return true end function onStatsChange(cid, attacker, type, combat, value) if (type == STATSCHANGE_HEALTHLOSS) and isMonster(cid) and isPlayer(attacker) and (getCreatureName(cid) == "Gran Tower") then if (getGlobalStorageValue(GRANTOWER.FINALWINNER) == getCreatureName(attacker)) then return false end end return true end em data\lib crie um arquivo chamado 046-Gran Tower.lua e adicione o seguinte dentro dele: Spoiler GRANTOWER = {} GRANTOWER.PREPARETIME = 2 -- Tempo até liberar a entrada para o evento. GRANTOWER.CLOSETIME = 10 -- Tempo em minutos de duração do evento. GRANTOWER.LEVEL = 80 -- Mínimo de level para participar do evento. GRANTOWER.MAXGUILD = 7 -- Máximo de players por guild dentro do evento. GRANTOWER.DATES = {{"Monday", "19:00"}, {"Tuesday", "19:00"}, {"Saturday", "19:00"}, {"Sunday", "22:30"}} -- Dias e horários que ocorrem o evento. GRANTOWER.ENTER = {x = 245, y = 641, z = 7} -- A posição da entrada do castelo, aonde os players são mandados pelo NPC. GRANTOWER.TOWERPOSITION = {x = 264, y = 613, z = 6} -- Posição aonde fica o Gran Tower (o monstro). GRANTOWER.AREA = {{x = 236, y = 587, z = 7}, {x = 283, y = 643, z = 5}} --[[A primeira posição é o canto superior esquerdo do mapa do castelo, e a segunda é o canto direito inferior OBSERVAÇÃO IMPORTANTE: O script foi modificado por mim (xWhiteWolf) para aguentar diferentes andares, apenas coloque a posição dos cantos e o primeiro até o ultimo andar que ele irá remover todo mundo em todos os andares quando alguém matar a gran tower, pra remover isso apenas coloque o z do mesmo andar da gran tower e apenas os membros que estão nesse andar serão teleportados, contudo isso pode ocasionar que pessoas consigam ficar dentro do castelo mesmo após o evento ter sido encerrado!]] GRANTOWER.AURAPERCENT = 0.8 --- porcentagem do dano que irá levar (0.8 = 80%) significa que ele ignora 20% de dano! (adicionado por xWhiteWolf) GRANTOWER.SHURIAURA = true --- colocar true/false se quiser ativar/desativar a aura de shurikens pro player que tem a gran aura. (adicionado por xWhiteWolf) --// Favor não mexer daqui para baixo se não souber oque está fazendo!!! GRANTOWER.EMPTYWINNER = "# [Nobody] #" GRANTOWER.PREPARE = 201405051746 GRANTOWER.RUNNING = 201405051747 GRANTOWER.AURA = 201405052018 GRANTOWER.DESTROYCOUNT = 201405051800 GRANTOWER.FINALWINNER = 201405051805 GRANTOWER.SAVELASTWINNER = 201405061333 GRANTOWER.SAVEWINNERGUILDID = 201405061403 function doPrepareGranTower() if ((getGlobalStorageValue(GRANTOWER.PREPARE) ~= 1) and (getGlobalStorageValue(GRANTOWER.RUNNING) ~= 1)) then setGlobalStorageValue(GRANTOWER.PREPARE, 1) addEvent(doStartGranTower, GRANTOWER.PREPARETIME * 60 * 1000) addEvent(doBroadcastMessage, ((GRANTOWER.PREPARETIME / 2) * 60 * 1000), "[Gran Tower] Missing "..tostring((GRANTOWER.PREPARETIME / 2)).." minutes NPC Melkrapo will release the entrance to the event, get ready!") doBroadcastMessage("[Gran Tower] The event will be started in "..tostring(GRANTOWER.PREPARETIME).." minutes, please prepare your weapons and your team.") else print("[Erro] Gran Tower tentou ser iniciado ja ligado, favor verificar o codigo. (Roksas).") end return true end function doStartGranTower() if ((getGlobalStorageValue(GRANTOWER.PREPARE) ~= -1) and (getGlobalStorageValue(GRANTOWER.RUNNING) ~= 1)) then setGlobalStorageValue(GRANTOWER.RUNNING, 1) setGlobalStorageValue(GRANTOWER.PREPARE, -1) setGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID, -1) setGlobalStorageValue(GRANTOWER.FINALWINNER, GRANTOWER.EMPTYWINNER) setGlobalStorageValue(GRANTOWER.SAVELASTWINNER, GRANTOWER.EMPTYWINNER) setGlobalStorageValue(GRANTOWER.DESTROYCOUNT, 0) doCreateMonster("Gran Tower", GRANTOWER.TOWERPOSITION) addEvent(doBroadcastMessage, ((GRANTOWER.CLOSETIME - 1) * 60 * 1000), "[Gran Tower] The event will be closed in one minute. Hurry up!") addEvent(doCloseGranTower, GRANTOWER.CLOSETIME * 60 * 1000) doBroadcastMessage("[Gran Tower] Open event! Run to destroy the Gran Tower.") else print("[Erro] Gran Tower tentou ser iniciado já ligado, favor verificar o código.") end return true end function doCloseGranTower() if ((getGlobalStorageValue(GRANTOWER.PREPARE) ~= 1) and (getGlobalStorageValue(GRANTOWER.RUNNING) ~= -1)) then for index, creature in ipairs(getGranTowerPlayers()) do doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature))) end for index, creature in ipairs(getPlayersOnline()) do if (getPlayerGuildId(creature) >= 1) then if getPlayerGuildId(creature) ~= getGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID) then setPlayerStorageValue(creature, GRANTOWER.AURA, -1) end end end setGlobalStorageValue(GRANTOWER.RUNNING, -1) if (getCreatureByName("Gran Tower")) then doRemoveCreature(getCreatureByName("Gran Tower"), true) end local TMP_WINNER = getGlobalStorageValue(GRANTOWER.FINALWINNER) doBroadcastMessage("[Gran Tower] The event was completed with "..tostring(getGlobalStorageValue(GRANTOWER.DESTROYCOUNT)).." wrecks to Gran Tower, the final winner was "..(TMP_WINNER)..".") setGlobalStorageValue(GRANTOWER.DESTROYCOUNT, -1) setGlobalStorageValue(GRANTOWER.SAVELASTWINNER, TMP_WINNER) setGlobalStorageValue(GRANTOWER.FINALWINNER, -1) local TMP_WINNER = nil end return true end function getGranTowerPlayers() -- xWhiteWolf local players = {} local andares = math.abs(GRANTOWER.AREA[1].z - GRANTOWER.AREA[2].z) for index, creature in ipairs(getPlayersOnline()) do local z = 0 local pos1 = {x = GRANTOWER.AREA[1].x, y = GRANTOWER.AREA[1].y, z = GRANTOWER.AREA[1].z} local pos2 = {x = GRANTOWER.AREA[2].x, y = GRANTOWER.AREA[2].y, z = GRANTOWER.AREA[2].z} for i = 0, andares do z = z or 0 pos1.z = pos1.z > pos2.z and pos2.z + z or pos1.z + z pos2.z = pos1.z z = 1 if isInArea(getThingPos(creature), pos1, pos2) then table.insert(players, creature) end end end return players end function getGranTowerGuild(guild_id) -- xWhiteWolf local players = {} local andares = math.abs(GRANTOWER.AREA[1].z - GRANTOWER.AREA[2].z) for index, creature in ipairs(getPlayersOnline()) do local z = 0 local pos1 = {x = GRANTOWER.AREA[1].x, y = GRANTOWER.AREA[1].y, z = GRANTOWER.AREA[1].z} local pos2 = {x = GRANTOWER.AREA[2].x, y = GRANTOWER.AREA[2].y, z = GRANTOWER.AREA[2].z} for i = 0, andares do z = z or 0 pos1.z = pos1.z > pos2.z and pos2.z + z or pos1.z + z pos2.z = pos1.z z = 1 if isInArea(getThingPos(creature), pos1, pos2) then if (getPlayerGuildId(creature) == guild_id) then table.insert(players, creature) end end end end return players end -- // Gran Aura \/ function newColor(n) local n = tonumber(n) or 0 local n = n + 19 return tonumber(n) or 0 end function newColor(n) local n = tonumber(n) or 132 local n = n - 19 return tonumber(n) or 132 end -- comentario: se a cor for preta o addon vai para branco sendo que o certo é diminuir 19.. local events = {} function changeOutfit(uid) -- arrumado por xWhiteWolf e adicionado a opção da Shuri local sec = 0.5 local temp = getCreatureOutfit(uid) if (type(temp) == "number") then return true end if getGlobalStorageValue(GRANTOWER.SAVELASTWINNER) ~= getCreatureName(uid) then if getGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID) ~= getPlayerGuildId(uid) then return true end end if GRANTOWER.SHURIAURA then local pos = getCreaturePosition(uid) local effectPos = { [1] = {x = pos.x - 2, y = pos.y - 2, z = pos.z}, [2] = {x = pos.x + 2, y = pos.y + 2, z = pos.z} } for i = 1, #effectPos do position = effectPos[i + 1] or effectPos[i - 1] doSendDistanceShoot(effectPos[i], position, 18) end end local outfit = { lookType = temp.lookType, lookHead = newColor(temp.lookHead), lookBody = newColor(temp.lookBody), lookLegs = newColor(temp.lookLegs), lookFeet = newColor(temp.lookFeet), lookAddons = getCreatureOutfit(uid).lookAddons, } doSetCreatureOutfit(uid, outfit, sec) local event = addEvent(function() if isCreature(uid) then changeOutfit(uid) end end, 3.0 * sec * 450) events[uid] = event return true end Agora voltando aos creaturescripts crie um arquivo em scripts chamado Gran Aura.lua e adicione: Spoiler local events = {} function onLogin(cid) if (getPlayerStorageValue(cid, GRANTOWER.AURA) ~= -1) then if getGlobalStorageValue(GRANTOWER.SAVELASTWINNER) ~= getCreatureName(cid) then if (getPlayerGuildId(cid) ~= getGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID)) then setPlayerStorageValue(cid, GRANTOWER.AURA, -1) end end local event = addEvent(function() if isCreature(cid) then changeOutfit(cid) end end, 0) events[cid] = event end return true end function onLogout(cid) if (getGlobalStorageValue(GRANTOWER.FINALWINNER) == getCreatureName(cid)) then doPlayerSendCancel(cid, "You cannot logout while Gran Tower is running.") return false end if events[cid] then stopEvent(events[cid]) end return true end function onStatsChange(cid, attacker, type, combat, value) if isPlayer(cid) and isCreature(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if getGlobalStorageValue(GRANTOWER.SAVELASTWINNER) ~= getCreatureName(cid) and getGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID) ~= getPlayerGuildId(cid) then return true end value = value - (math.ceil(value*(GRANTOWER.AURAPERCENT))) doTargetCombatHealth(cid, attacker, type, -value, -value, 255) doCreatureAddHealth(cid, value) return true end return true end E um arquivo chamado Barrier.lua na mesma pasta com o seguinte conteúdo: Spoiler function onStatsChange(cid, attacker, type, combat, value) if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_HEALTHGAIN) and isMonster(cid) then if (getCreatureName(cid) == "Barrier") then a = getCreatureHealth(cid) >= (getCreatureMaxHealth(cid)/2) and doSetItemOutfit(cid, 3766, -1) or doSetItemOutfit(cid, 3767, -1) end end return true end Agora em globalevents\globalevents.xml adicione a seguinte linha: <globalevent name="Gran Tower" interval="60" event="script" value="Gran Tower.lua"/> E adicione o script associado em globalevents\scripts com o nome de Gran Tower.lua: Spoiler function onThink(interval, lastExecution, thinkInterval) for index, dates in ipairs(GRANTOWER.DATES) do if table.find(dates, os.date("%A")) then if table.find(dates, os.date("%H:%M")) then doPrepareGranTower() end end end return true end Agora na pasta monster procure o seu monsters.xml e adicione essas duas linhas: <monster name="Gran Tower" file="8.4/Gran Tower.xml"/> <monster name="Barrier" file="8.4/barrier.xml"/> Feito isso crie os monstros na pasta data\monster\8.4: O primeiro se chama barrier.xml e deverá conter: Spoiler <?xml version="1.0" encoding="UTF-8"?> <monster name="Barrier" nameDescription="a Barrier" race="undead" experience="1" speed="0" manacost="0"> <health now="100000" max="100000"/> <look typeex="3766" head="20" body="30" legs="40" feet="50" corpse="0"/> <targetchange interval="5000" chance="20"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="0"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <defenses armor="2" defense="2"/> <script> <event name="Barrier Stats"/> </script> </monster> O segundo se chamará Gran Tower.xml e deverá conter: Spoiler <?xml version="1.0" encoding="UTF-8"?> <monster name="Gran Tower" nameDescription="Gran Tower" race="undead" experience="50000" speed="0" manacost="0"> <health now="1500000" max="1500000"/> <look typeex="7823" head="20" body="30" legs="40" feet="50" corpse="0"/> <targetchange interval="5000" chance="10"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="tower" interval="500" range="7" chance="99"/> </attacks> <defenses armor="165" defense="150"> <defense name="healing" interval="1000" chance="10" min="2000" max="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> </defenses> <elements> <element phyisicalPercent="20"/> <element holyPercent="-20"/> </elements> <immunities> <immunity lifedrain="1"/> <immunity invisible="1"/> <immunity paralyze="1"/> </immunities> <script> <event name="Gran Tower"/> <event name="Gran Tower Stats"/> </script> </monster> Agora vamos para NPC, vá em data\npc e crie um arquivo chamado Melkrapo.xml com o seguinte conteúdo: Spoiler <?xml version="1.0" encoding="UTF-8"?> <npc name="Melkrapo" script="data/npc/scripts/Melkrapo.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="297"/> <parameters> <parameter key="message_greet" value="Sou Melkrapo, o atual guardiao dos portais do Gran Castle! Quer tentar {entrar} no castelo ou preferes {saber mais} sobre ele antes?"/> <parameter key="message_farewell" value="Até mais, nobre |PLAYERNAME|."/> <parameter key="message_walkaway" value="Até mais, nobre." /> </parameters> </npc> Agora em npc\scripts crie um arquivo chamado Melkrapo.lua e adicione o seguinte: Spoiler 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 creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'entrar') or msgcontains(msg, 'evento')) then if (getGlobalStorageValue(GRANTOWER.RUNNING) ~= -1) then if (getPlayerLevel(cid) >= GRANTOWER.LEVEL) then if (getPlayerGuildId(cid) >= 1) then if (#getGranTowerGuild(getPlayerGuildId(cid)) >= GRANTOWER.MAXGUILD) then selfSay("Já estão participando, "..(GRANTOWER.MAXGUILD).." membros de sua guild. Esse é o limite, tente mais tarde.", cid) return true end end doTeleportThing(cid, GRANTOWER.ENTER, true) selfSay("Boa sorte, faça um bom trabalho guerreiro!", cid) else selfSay("Você não tem o level necessário para participar do evento. Volte quando estiver no level "..tostring(GRANTOWER.LEVEL).."+.", cid) end else local dates = { ["Monday"] = "Segunda-Feira", ["Tuesday"] = "Terça-Feira", ["Wednesday"] = "Quarta-Feira", ["Thursday"] = "Quinta-Feira", ["Friday"] = "Sexta-Feira", ["Saturday"] = "Sábado", ["Sunday"] = "Domingo", } msg = "" selfSay("O portal está fechado. Eu o abro nestes respectivos horários:\n", cid) for index, date in ipairs(GRANTOWER.DATES) do msg = msg .. " - "..dates[date[1]].." às "..date[2].."." end selfSay(msg, cid) end elseif(msgcontains(msg, 'no') and isInArray({1, 2, 3}, talkState[talkUser])) then talkState[talkUser] = 0 selfSay('Ok, até logo.', cid) end if(msgcontains(msg, 'saber mais') or msgcontains(msg, 'info')) then selfSay("Sobre o que queres saber? {Gran Castle}, {Gran Tower}, {Gran Aura} ou algumas {dicas} úteis?", cid) talkState[talkUser] = 1 elseif(msgcontains(msg, 'Gran Castle') and isInArray({1, 2}, talkState[talkUser])) then selfSay("O castelo tem vida própria e se protege sozinho. Porém, se um ser humano se mostrar forte e conseguir destruir a Gran Tower que fica no último andar do castelo, ganha {Gran Aura}!", cid) elseif(msgcontains(msg, 'Gran Tower') and isInArray({1, 2}, talkState[talkUser])) then selfSay("Se você chegar no centro do 6º (sexto) / último andar do castelo, haverá uma espécie de estátua com imenso poder visível a olho nú. Se você a destruir, ganhará a {Gran Aura}! Então seu objetivo passa a ser o de proteger a Gran Tower, pois se alguém destruí-la novamente antes do tempo do Melkrapo fechar o portal, você perde a aura adquirida. Quer {saber mais}?", cid) elseif(msgcontains(msg, 'Gran Aura') and isInArray({1, 2}, talkState[talkUser])) then selfSay("Com a Gran Aura, o guerreiro fica brilhando e reflete 20% de todo dano recebido, além de ficar imune as B.Skill King Teleport e Changer Corpse. Quer {saber mais}?", cid) elseif(msgcontains(msg, 'dicas') and isInArray({1, 2}, talkState[talkUser])) then talkState[talkUser] = 2 selfSay("Leia as placas que ver, elas lhe darão informações importantes da ilha do Gran Castle. Quer {saber mais} ou quer outra {dica}?", cid) elseif(msgcontains(msg, 'dica') and talkState[talkUser] == 2) then selfSay("Você pode healar (encher a vida) da {Gran Tower} ou das Walls (paredes de proteção no último andar), para dificultar que outros guerreiros dominem o {Gran Castle}.", cid) elseif(msgcontains(msg, 'no') and isInArray({1, 2, 3}, talkState[talkUser])) then talkState[talkUser] = 0 selfSay('Ok até logo.', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Agora partindo pra spells vá em data\spells e adicione no spells.xml essas linhas: Spoiler <!-- MONSTER SPELLS --> <instant name="tower" words="tower" lvl="0" mana="0" prem="0" aggressive="1" exhaustion="1500" needlearn="1" event="script" value="monsters/tower.lua"> </instant> E agora crie o respectivo arquivos em data\spells\scripts\monsters chamado tower.lua (se seu server não possuir uma pasta chamada monsters na pasta script, apenas crie e coloque o arquivo dentro dela) tower.lua: Spoiler local function atk(cid) doSendDistanceShoot(pos5, pos6, 3) doSendDistanceShoot(pos7, pos8, 3) end local function atkself(cid) doSendDistanceShoot(pos9, selfpos, 3) doSendDistanceShoot(pos10, selfpos, 3) doSendDistanceShoot(pos11, selfpos, 3) doSendDistanceShoot(pos12, selfpos, 3) doSendDistanceShoot(pos13, selfpos, 3) doSendDistanceShoot(pos14, selfpos, 3) doSendDistanceShoot(pos15, selfpos, 3) doSendDistanceShoot(pos16, selfpos, 3) end local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, -500, -7000, -300, -9000, 200, 200, 100, 400) --- formula de dano que tira o ataque da gran tower local area = createCombatArea(AREA_TOWER) setCombatArea(combat, area) function onCastSpell(cid, var) selfpos = getCreaturePosition(cid) pos1 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos2 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos3 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos4 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos5 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos6 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos7 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos8 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos9 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos10 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos11 = {x=getCreaturePosition(cid).x + 1, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos12 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} pos13 = {x=getCreaturePosition(cid).x+ 1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} pos14 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} pos15 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} pos16 = {x=getCreaturePosition(cid).x + 1, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} doSendDistanceShoot(pos1, pos2, 3) doSendDistanceShoot(pos3, pos4, 3) addEvent(atkself, 350) addEvent(atk, 350) return doCombat(cid, combat, var) end Feito isso vá em spells\lib e no seu arquivo spells.lua adicione a seguinte area: Spoiler AREA_TOWER = { {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 3, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1} } Agora nós vamos criar a talkaction que vai te permitir ligar o evento a hora que vc quiser. Vá em data\talkactions\talkactions.xml e adicione a seguinte linha: <talkaction hide="yes" words="/grantower" access="5" event="script" value="cleargrantower.lua"/> e em talkactions\scripts adicione o arquivo cleargrantower.lua com o seguinte conteúdo dentro: Spoiler function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local t = string.explode(param, " ") if (tonumber(t[1]) == 1) then doPrepareGranTower() doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 0) then doCloseGranTower() doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 2) then print(getGlobalStorageValue(GRANTOWER.SAVELASTWINNER)) doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 3) then print(getGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID)) doSendMagicEffect(getCreaturePosition(cid), 14) end return true end Agora vá em data\creaturescripts\scripts\login.lua e adicione essas linhas antes do ultimo return true: -----------GRAN CASTLE ----------- registerCreatureEvent(cid, "Gran Tower") registerCreatureEvent(cid, "Gran Aura") registerCreatureEvent(cid, "Gran Aura Stats") registerCreatureEvent(cid, "Gran Aura Logout") registerCreatureEvent(cid, "Gran Tower Target") Por último eu acho que eu usei uma das funções da minha lib nesse script, então se der qualquer erro eu recomendo que vcs instalem ela antes de me mandar o print do erro do servidor haha. (Pra instalar é só criar um arquivo em data.lib e coloca aquilo dentro, veja o tópico no meu perfil) Eu testei o script e tá funcionando perfeitamente, a única coisa que não consegui testar foi as guilds e como fica a aura qnd alguém da guild ganha mas acho que vcs podem fazer esse trabalhinho de testar pra mim... Pra finalizar gostaria de dizer que um membro do fórum pagou por esse script e ele não estava funcionando, não comprem scripts, venham ao fórum e peçam por eles. Que fique de lição. Todas as configurações são feitas pelo arquivo 046- Gran Aura que está na LIB (exceto as coisas relacionadas aos monstros/spells que eles tiram) mas está tudo bem explicadinho nos scripts e acho que vocês já sabem editar um monstro, não é mesmo? haha Espero que façam bom proveito, pretendo lançar uma versão 1.0 em breve juntamente com a versão 1.0 do Magnus Challenger. Fiquem ligados! e claro, se você gostou não faz mal clicar em "Gostei". Abraços do lobo. NOTA FINAL: Sei que a maioria dos caras que queriam esse script queriam pra servers 8.4 porém a forma de fazer a barreira ter essa modificação na outfit qnd estiver quebrando é só por statschange. É só modificar a source e adicionar a function onStatsChange do creaturescripts que vai pegar no seu server 8.4. Já vi server 7.6 com statschange então não creio que seja algo dificil. Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Dezembro 5, 2014 10 anos O pedido do evento gran castle foi eu quem fiz pro roksas, ai ele fez completamente BUGADO e eu paguei R$ 30,00 por ele, depois fui pedir suporte... ..Nunca mais! @topic Parabéns pelo script, obrigado por compartilhar. "Derrotar o inimigo em cem batalhas não é a excelência suprema; a excelência suprema consiste em vencer o inimigo sem ser preciso lutar."
Postado Dezembro 5, 2014 10 anos Autor só um adendo: Eu coloquei aquele mesmo efeito das shurikens que tem no vídeo (pelo que eu soube o fox fez essa atualização recentemente mas eu nunca entrei no server deles pra ver como é e resolvi fazer dessa maneira). Se alguém quiser liberar um mapa pro castle ou fazer um é só me enviar pm que eu edito o tópico e anexo o link do download Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Dezembro 5, 2014 10 anos Nunca vi esse tal de Gran Castle Event, mais adorei vou adicionar agóra mesmo em meu Servidor REPUTADO! Att,Dieguiin XP »»http://baiakfull.com/««
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.