Header Ads

Castle 48H

A CASTLE E UM DIA SIM UM DIA NÃO 48HRS; POREM PARA MAIOR DEVERSAO SABADO TABEM TEM.

Explicação das actions e demais;
day = "Sunday","Tuesday","Thursday","Saturday", dias em engles
pos = {x=151, y=77, z=6}, onde o tp e criado
topos = {x=550, y=34, z=7}, para onde ira levar
ActionID 16200 - No meio do caminho para o castelo,
ActionID 16201 - Perto do castelo,
ActionID 16202 - No piso, trono que faz com que domine,
e ActionID 16203 - Para a passagem de acesso ás 
hunts / city exclusivas da guild vencedora.
Importante: Para colocar uma passagem para as hunts ou o que for a premiação da guild 



Vamos aos scripts do sistema;

Em data/actions/scripts crie um arquivo com o nome de naviocastle.lua e coloque dentro:
function onUse(cid, item, fromPosition, itemEx, toPosition)

if(item.actionid == 65500) then
if getTopCreature({x=32464,y=32378,z=5}).uid > 0 then
doTeleportThing(getTopCreature({x=32464,y=32378,z=5}).uid, {x=32526,y=32421,z=5})
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
else
doPlayerSendCancel(cid, "Você precisa estar em cima do tapete.")
return true
end

elseif (item.actionid == 65501) then
if getTopCreature({x=32526,y=32421,z=5}).uid > 0 then
doTeleportThing(getTopCreature({x=32526,y=32421,z=5}).uid, {x=32464,y=32378,z=5})
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
else
doPlayerSendCancel(cid, "Você precisa estar em cima do tapete.")
end
end
return true
end
  Ocultar conteúdo
if getTopCreature({x=32464,y=32378,z=5}).uid > 0 then - POSIÇÃO PARA TELEPORTAR OS MEMBROS
doTeleportThing(getTopCreature({x=32464,y=32378,z=5}).uid, {x=32526,y=32421,z=5})



Em actions.xml adicione a seguinte linha:
<action actionid="65500-65501" event="script" value="naviocastle.lua"/>
Pós feito isto, em data/lib crie um arquivo com o nome de 015-COH e adicione dentro dele:
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

-- //

COH_PUSHTIME = 10800 -- Tempo (em segundos) de exhausted para usar o comando !gocastle - Padrão (3 horas)
COH_AREA = {{x = 32458, y = 32332, z = 7}, {x = 32558, y = 32429, z = 7}} -- Canto superior esquerdo / inferior direito do Castle

-- // Não mexa daqui para baixo 
COH_STATUS = 201320111714
COH_PREPARE1 = 201320111715 
COH_PUSHSTOR = 201320111716 
COH_PREPARE2 = 201320111717 

function doCastleRemoveEnemies()

 for index, creature in ipairs(getPlayersOnline()) do
  if isInArea(getThingPos(creature), COH_AREA[1], COH_AREA[2]) then
   if getPlayerGuildName(creature) ~= getGlobalStorageValue(COH_STATUS) then
    doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature)))
   end
  end
 end
 return true
end
Proximo passo, em data/monster.xml adicione a seguinte linha:
<monster name="Castle Guardian" file="Castle Guardian.xml"/>
Em data/monsters crie um arquivo com o nome de Castle Guardian.xml e adicione o seguinte:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Castle Guardian" nameDescription="a castle guardian" race="blood" experience="0" speed="0" manacost="0">
  <health now="800000" max="800000"/>
  <look type="131" head="57" body="19" legs="57" feet="95" addons="1" corpse="6080"/>
  <targetchange interval="5000" chance="30"/>
  <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="4"/>
    <flag staticattack="90"/>
    <flag runonhealth="800"/>
  </flags>
 <attacks>
  <attack name="melee" interval="2000" min="-60" max="-180"/>
  <attack name="physical" interval="1000" chance="35" range="7" min="-205" max="-385">
   <attribute key="shootEffect" value="energy"/>
  </attack>
  <attack name="manadrain" interval="1000" chance="17" range="7" min="-205" max="-560"/>
  <attack name="speed" interval="1000" chance="12" range="7" speedchange="-600" duration="40000">
   <attribute key="areaEffect" value="redshimmer"/>
  </attack>
  <attack name="fire" interval="2000" chance="45" range="7" radius="3" target="1" min="-250" max="-420">
   <attribute key="shootEffect" value="burstarrow"/>
   <attribute key="areaEffect" value="firearea"/>
  </attack>
  <attack name="firefield" interval="1000" chance="20" range="7" radius="2" target="1">
   <attribute key="shootEffect" value="fire"/>
  </attack>
  <attack name="energy" interval="2000" chance="25" length="8" spread="0" min="-265" max="-445">
   <attribute key="areaEffect" value="energy"/>
  </attack>
  <attack name="speed" interval="6000" chance="10" range="5" speedchange="-600" duration="20000">
   <attribute key="areaEffect" value="redshimmer"/>
  </attack>
 </attacks>
  <defenses armor="1" defense="1"/>
 <elements>
  <element firePercent="100"/>
  <element energyPercent="100"/>
  <element icePercent="100"/>
  <element earthPercent="90"/>
  <element holyPercent="-25"/>
  <element physicalPercent="-33"/>
 </elements>
 <immunities>
  <immunity paralyze="1"/>
  <immunity invisible="1"/>
 </immunities>
  <summons maxSummons="2">
    <summon name="deathspawn" interval="1500" chance="0" max="0"/>
  </summons>
  <loot>
    <item id="2148" countmax="20" chance1="100000" chancemax="0"/>
  </loot>
</monster>
Pós isto;


Em data/movements/scripts crie um arquivo com o nome de COH.lua e adicione o seguinte:
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

-- //

function onStepIn(cid, item, pos, fromPosition)
 local pos = getThingPos(cid)
 
 if item.actionid == 16203 then 
  if not isPlayer(cid) then
   return true
  end 
  if getGlobalStorageValue(COH_STATUS) == getPlayerGuildName(cid) then
   doSendMagicEffect(getThingPos(cid), 14)
   doSendAnimatedText(pos, "48H", math.random(1, 255))
  else
   doSendMagicEffect(getThingPos(cid), 2)
      doTeleportThing(cid, fromPosition, false)
   doPlayerSendCancel(cid, "[48H] Você não pertence á guild "..getGlobalStorageValue(COH_STATUS)..".")
  end
  return true
 end

 if item.actionid == 16202 then
  if not isPlayer(cid) then
   return true
  end
  
  if getPlayerGuildId(cid) > 0 then
   if (getGlobalStorageValue(COH_STATUS) ~= getPlayerGuildName(cid)) then
    doPlayerSendTextMessage(cid, 20, "[Castle 48H] Você e sua guild estão no comando, os antigos donos ["..tostring(getGlobalStorageValue(COH_STATUS)).."] podem se vingar!")    setGlobalStorageValue(COH_PREPARE1, -1)
    setGlobalStorageValue(COH_PREPARE2, -1)
    setGlobalStorageValue(COH_STATUS, getPlayerGuildName(cid))
    doCastleRemoveEnemies()
    doBroadcastMessage("[Castle 48H] O jogador ["..getCreatureName(cid).."] e sua guild ["..getPlayerGuildName(cid).."] estão no comando do castelo, vá dominar e impedir isso!")   end
  else
   doSendMagicEffect(pos, 2)  
   doTeleportThing(cid, fromPosition, false)
   doPlayerSendCancel(cid, "[Castle 48H] Você não possui uma guild.")   end
   return true
 end

 if item.actionid == 16200 then
  if not isPlayer(cid) then
   return true
  end
  if getPlayerGuildId(cid) > 0 then
   doSendAnimatedText(pos, "48H", math.random(1, 255))
   if (getGlobalStorageValue(COH_PREPARE1) ~= getPlayerGuildName(cid)) and ((getGlobalStorageValue(COH_PREPARE2) ~= getPlayerGuildName(cid))) then
    setGlobalStorageValue(COH_PREPARE1, getPlayerGuildName(cid))
    doBroadcastMessage("[Castle 48H] Atenção! A guild "..getPlayerGuildName(cid).." está tentando dominar o castelo, preparem-se!")   end
  else
   doSendMagicEffect(pos, 2)  
   doTeleportThing(cid, fromPosition, false)
   doPlayerSendCancel(cid, "[48H] Você não possui uma guild.")   
   return true
  end   
 end
 
 if item.actionid == 16201 then
  if not isPlayer(cid) then
   return true
  end
  doSendAnimatedText(pos, "48H", math.random(1, 255))
  if (getGlobalStorageValue(COH_PREPARE2) ~= getPlayerGuildName(cid)) then
   setGlobalStorageValue(COH_PREPARE2, getPlayerGuildName(cid))
   doBroadcastMessage("[Castle 48H] Atenção! A guild "..getPlayerGuildName(cid).." está muito próxima do domínio, ataquem!")
  end
 end
 return true
end
Em data/movements/movements.xml adicione a seguinte linha:
<movevent type="StepIn" actionid="16200-16203" event="script" value="COH.lua"/>

Primeiramente abra data/globalevents/scripts e crie o seguinte:

tpcastle.lua

local config =
{
        day = "Sunday","Tuesday","Thursday","Saturday",
        pos = {x=151, y=77, z=6},
        topos = {x=550, y=34, z=7},
        time = 1439, -- tempo que o teleport ira sumir em minutos
        msg_open = "Castle 48HRS abrira.", 
        msg_close = "O Portal se fechou."
}


local function DelTp()
        local t = getTileItemById(config.pos, 1387)
        if t then
                doRemoveItem(t.uid, 1)
                doSendMagicEffect(config.pos, CONST_ME_POFF)
        end
end


function onTimer()
       
        if (os.date("%A") == config.day) then
                doCreateTeleport(1387, config.topos, config.pos)
                doBroadcastMessage(config.msg_open)
                addEvent(DelTp, config.time*60*1000)
                addEvent(doBroadcastMessage, config.time*60*1000, config.msg_close)
        end


        return true
end

Nenhum comentário

Tecnologia do Blogger.