Ir para conteúdo

Featured Replies

Postado
Em 18/06/2014 at 21:26, Absolute disse:

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

 

 

Conteúdo Oculto

 

 

 

 

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

Ei Man nao entendi essa parte

doTeleportThing(getTopCreature({x=32464,y=32378,z=5}).uid, {x=32526,y=32421,z=5})

  • 2 weeks later...
  • Respostas 100
  • Visualizações 35.6k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • 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

  • funciona em tfs 1.0? alguem testou? desculpe o flood

Posted Images

Postado

Funcionou tudo perfeito , consegui resolver todos os erros , graças a galera aki do TK.
So tenho um problema , quando o servior da Shutdown/Serversave ou algum Error que faça o servidor cair o cara q era dono do castelo antes do servidor sair fora do ar ele perde posse do castelo. Nao teria como alguem me ajudar nessa parte !?
Eu fiz uma HUNT privilegiada pra galera q domina esse castelo mas se o servidor der algum error e vier a cair a Guilda dominante desse castelo perde a posse de todas as hunts pq o servidor caiu.
Eu queria um script q fizesse com que mesmo se o servidor der shutdown/cair/etc a Guilda dominante do castelo continuasse dona por um periodo de 6 dias.

Me ajudem ai , por favor ... preciso muito

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

  • 3 weeks later...
  • 2 weeks later...

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.7k

Informação Importante

Confirmação de Termo