Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Fala galera linduxa do TK; hoje trago a vocês o tão desejado CASTLE WAR 24 HORAS, isto gera disputa intensa entre as guilds de seu servidor, atraindo assim mais jogadores que se interessam por guerras e seus demais sistemas! Modificado e com funções diferentes, no tópico ensinarei como instalar e como funciona.

 

 

rm6RT7U.jpg

 

 

Como funciona? WOOOOOOOOW!

 

Há um portal 24h aberto em algum lugar do seu mapa que ficará com o castle disponível 24h (avá).

Quando uma guild qualquer acessar o portal do castelo, irá aparecer para o servidor que a X guild está tentando dominar o castelo, então o líde da guild dominante atual irá dizer !gocastle para teleportar ao castelo e defende-lo.
O Objetivo para conquista do mesmo é invadi-lo derrotar os defensor da guild atual para abrir passagem, digamos assim, e subir ao trono, quando um membro da guild invadir o templo do trono e subir no mesmo a antiga guild dominadora é teleportada para o templo e o castelo fica sob domínio da nova guild.
Você poderá colocar como premiação acesso a áreas exclusivas do castelo, no caso hunts e cia. (Fica a vosso critério)

 

Evento testado nas versões 8.6; 9.6; 9.83; 9.86!

 

Observação: 

Comando !gocastle faz com que o líder possa teleportar
todos os membros da sua guild online para perto dele,
desde que ele esteja no castle. Comando pode ser usado
a cada 3 horas (exhausted).

 

 

 

 

 

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

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, "CoH", math.random(1, 255))
  else
   doSendMagicEffect(getThingPos(cid), 2)
      doTeleportThing(cid, fromPosition, false)
   doPlayerSendCancel(cid, "[CoH] 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 of Honor] 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 of Honor] 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, "[CoH] 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, "CoH", math.random(1, 255))
   if (getGlobalStorageValue(COH_PREPARE1) ~= getPlayerGuildName(cid)) and ((getGlobalStorageValue(COH_PREPARE2) ~= getPlayerGuildName(cid))) then
    setGlobalStorageValue(COH_PREPARE1, getPlayerGuildName(cid))
    doBroadcastMessage("[Castle of Honor] Atenção! A guild "..getPlayerGuildName(cid).." está tentando dominar o castelo, preparem-se!")
   end
  else
   doSendMagicEffect(pos, 2)  
   doTeleportThing(cid, fromPosition, false)
   doPlayerSendCancel(cid, "[CoH] 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, "CoH", math.random(1, 255))
  if (getGlobalStorageValue(COH_PREPARE2) ~= getPlayerGuildName(cid)) then
   setGlobalStorageValue(COH_PREPARE2, getPlayerGuildName(cid))
   doBroadcastMessage("[Castle of Honor] 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"/>

Próximo passo:

 

Em data/talkactions/scripts crie um arquivo com o nome de COHABSOLUTE.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 onSay(cid, words, param)

 if getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER then
  if getPlayerStorageValue(cid, COH_PUSHSTOR) < os.time() then
   if getGlobalStorageValue(COH_STATUS) == getPlayerGuildName(cid) then
    if isInArea(getThingPos(cid), COH_AREA[1], COH_AREA[2]) then
     if #getMembersOnline(getPlayerGuildId(cid)) > 0 then
      for index, creature in ipairs(getMembersOnline(getPlayerGuildId(cid))) do
       if (getTileInfo(getThingPos(creature)).protection ~= true) then
        return doPlayerSendCancel(cid, "[CoH] Os membros devem estar em área PZ.")
       end
       doTeleportThing(creature, getThingPos(cid))
      end
      setPlayerStorageValue(cid, COH_PUSHSTOR, os.time() + COH_PUSHTIME) 
      doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "[Castle of Honor] Você teleportou seus membros, comando pode ser usado a cada "..tostring(COH_PUSHTIME / 60).." minuto(s).")
     else
      doPlayerSendCancel(cid, "[CoH] Para executar isso, sua guild deve ter 2 ou mais membros online.") 
     end
    else
     doPlayerSendCancel(cid, "[CoH] Você deve estar no castelo.")
    end
   else
    doPlayerSendCancel(cid, "[CoH] Sua guild não é dona do castelo.")
   end
  else
   doPlayerSendCancel(cid, "[CoH] Você deve aguardar "..tostring(math.ceil((getPlayerStorageValue(cid, COH_PUSHSTOR) - os.time()) / 60)).." minuto(s) para usar este comando.")
  end
 else
  doPlayerSendCancel(cid, "[CoH] Você deve ser líder de uma guild para executar este comando.")
 end
 return true
end

function getMembersOnline(id)
 local mbr = {}

 for index, creature in ipairs(getPlayersOnline()) do
  if getPlayerGuildId(creature) == id then
   if getCreatureSkullType(creature) < 3 then
    table.insert(mbr, creature)
   end
  end                      
 end
 return mbr or #mbr
end

Em data/talkactions/talkactions.xml adicione a seguinte linha:

<talkaction words="!castlepush;!pushmembers;!gocastle" event="script" value="COHABSOLUTE.lua"/>

Quem disponibiliza o mapa do castelo a vocês é nosso amigo ViitinG, segue o link do tópico para download do mesmo já adaptado para este Castle:

http://www.tibiaking.com/forum/topic/35730-mapa-evento-war-castle/

 

 

 

Explicação das actions e demais (caso não use o mapa disponibilizado pelo Viiting lembre de adicionar ao castelo);

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 vencedora, coloque um caminho único com os actionIDS 16203, assim só a guild dominante do castelo poderá passar neste local.

É importante lembrar que este script é de autoria do Roksas Nunez, ex scripter da empresa chaitosoft, fiz simples modificações de otimização.

 

 

Qualquer dúvida peço que entre em contato comigo e poste aqui no tópico.

 

 

 

Créditos:
Absolute

Roksas
ViitinG

 

 

Espero que gostem, afinal raro alguém disponibilizar algo tão desejado e útil assim!

 

 

 

Até o próximo sistema.

 

 

 

 

Absolute on tibiaking =p

Editado por Absolute (veja o histórico de edições)

  • Respostas 100
  • Visualizações 35k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Fala galera linduxa do TK; hoje trago a vocês o tão desejado CASTLE WAR 24 HORAS, isto gera disputa intensa entre as guilds de seu servidor, atraindo assim mais jogadores que se interessam por guerras

  • Fico foda em,espero que a galera goste do mapa !

  • PsyMcKenzie
    PsyMcKenzie

    Desculpa, posso tirar umas duvidas aqui? 1º - O destino do teleporte é este?   2º - O que é o actionid 17238 que fica na ponte? E o que é o actionid 2991 que fica na frente do trono? Não achei el

Posted Images

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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo