Ir para conteúdo

Script Castle War 1.0


35383

Posts Recomendados

Boa Tarde,

 

Pessoal eu notei que não tinha muitos script de Castle War por aqui no forum de Sistemas e Mods

e então eu disse pra min mesmo por que eu não crio um script assim então eu comecei a trabalhar

 

Nome do Script: Castle War 1.0 By Sheamus88

Versão testada: Tfs 4.0 ( funciona nas versões anteriores )

Descriçao: Serve para guerra de guilds :]!

Funciona assim:O Dono da guild (qualquer membro) vai até a porta do castelo puxa a alavanca

e todo mundo dessa guild pode ter acesso a porta do castelo conta quantos pontos a guild tiver

que vai ganhando premios conquistando o castelo

Features:

 

- Guerra entre 2 Castelos ( por alavanca )

- Monstro ‘Guarda’, que só ataca membro de guilds rivais!

- Premios por pontuaçao. ( por player, somente.)

- Sala especial, dentro do castelo, para membros da guild*. ( depende da sua criatividade) bloquiada por um Porta.

- Broadcast.

 

* É a tal Porta mensionada ali em cima.

 

Instalando

Na Actions

 

 

Va na pasta data/actions/actions.xml e adicione

isso:

 

<action actionid="9999" event="script" value="castelowar1.lua"/>
<action actionid="9998" event="script" value="castelodoor1.lua"/>
<action actionid="8888" event="script" value="castelowar2.lua"/>
<action actionid="8887" event="script" value="castelodoor2.lua"/>

 

Agora que está instalado vá em data/actions/scripts

e crie esses 4 arquivos:

 

castelowar1.lua:

{script by Sheamus88}
function onUse(cid, item, frompos, item2, topos) 

------------------ Inicio das Config ------------

local castle_one_name = "Ratim Bum"                  -- Nome do castelo 1
local storages = {154154,54321,123123}               -- Storages ( se vc eh iniciante, deixe como está...)



-------PREMIOs  I N D I V I D U A L ---------

local premio_por_vezes = 1         -- Premio por vezes de conquista de castelo. (1) = Ativo  (0) = Desativa. 
local premio_vezes = 13            -- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO.
local premio = 2472                -- ID do Premio
local premio_cont = 1              -- Quantidade do Premio
local premio_reset = 1             -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM  (0) = NAO

-------FIM PREMIOs I N D I V I D U A L ---------




----------------- FIM DAS CONFIG -----------------

local sto_ativ = getGlobalStorageValue(storages[2])
position = getCreaturePosition(cid)


  if isPlayerGuild(cid) == TRUE then
     if sto_ativ == 1 or sto_ativ == -1 then

        guildname = getPlayerGuildName(cid)     
        guild = getPlayerGuildId(cid)               
        guild_sto = getGlobalStorageValue(storages[3])

           if guild ~= guild_sto then            
              setPlayerStorageValue(cid,guild_sto,guild)                      
              if getPlayerStorageValue(cid,storages[1]) == -1 then
                 setPlayerStorageValue(cid,storages[1],0)
              end

              sto_vezes = getPlayerStorageValue(cid,storages[1])                   

              setGlobalStorageValue(storages[3],getPlayerGuildId(cid))
              setPlayerStorageValue(cid,storages[1], sto_vezes + 1)

              sto_vezes_total = getPlayerStorageValue(cid,storages[1])

              doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_one_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."ª vez(s).", 22)
              doSendMagicEffect(position, 39)  

                if premio_por_vezes == 1 then
                   if getPlayerStorageValue(cid,storages[1]) == premio_vezes then
                      if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then
                         doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21)
                         doPlayerAddItem(cid, premio,premio_cont)
                         doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!")
                       -----------------------------------------------  --  
                           if premio_reset == 1 then                    --
                              setPlayerStorageValue(cid,storages[1],0)  --  Resetar a contagem
                           end                                          --
                       -----------------------------------------------  --

                      else
                      doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!")
                      addEvent(additem,10000,cid,premio,premio_cont,premio_reset)
                      end
                   end                                        
                end               
           else
             doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!")
             doSendMagicEffect(position, 2)
           end
     else
     doPlayerSendCancel(cid,"O sistema está desativado")
     end      
  else
  doPlayerSendCancel(cid,"É nescessario ter guild para dominar o castelo!")
  doSendMagicEffect(position, 2)
  end
end

{script by Sheamus88}

function additem(cid,premio,premio_cont,premio_reset)

if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then
   doPlayerAddItem(cid, premio,premio_cont)
   doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!")
    if premio_reset == 1 then
       setPlayerStorageValue(cid,storages[1],0)
    end
   stopEvent(additem)
 else
 doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!")
 addEvent(additem,10000,cid)
 end
end

{script by Sheamus88}
function isPlayerGuild(cid)
if getPlayerGuildName(cid) ~= "" then
return TRUE
else
return FALSE
end
end

 

castelowar2.lua:

{Script by Sheamus88}
function onUse(cid, item, frompos, item2, topos) 

------------------ Inicio das Config ------------

local castle_two_name = "do Dracula"                  -- Nome do castelo 2
local storages = {154154,54321,321321}                -- Storages ( se vc eh iniciante, deixe como está...)


-------PREMIOs  I N D I V I D U A L ---------

local premio_por_vezes = 1         -- Premio por vezes de conquista de castelo. (1) = Ativo  (0) = Desativa. 
local premio_vezes = 13            -- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO.
local premio = 2472                -- ID do Premio
local premio_cont = 1              -- Quantidade do Premio
local premio_reset = 0             -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM  (0) = NAO

-------FIM PREMIOs I N D I V I D U A L ---------




----------------- FIM DAS CONFIG -----------------

local sto_ativ = getGlobalStorageValue(storages[2])
position = getCreaturePosition(cid)


  if isPlayerGuild(cid) == TRUE then
     if sto_ativ == 1 or sto_ativ == -1 then

        guildname = getPlayerGuildName(cid)     
        guild = getPlayerGuildId(cid)               
        guild_sto = getGlobalStorageValue(storages[3])

           if guild ~= guild_sto then            
              setPlayerStorageValue(cid,guild_sto,guild)

              -----------------------------------------------------                      
              if getPlayerStorageValue(cid,storages[1]) == -1 then
                 setPlayerStorageValue(cid,storages[1],0)
              end
              -----------------------------------------------------

              sto_vezes = getPlayerStorageValue(cid,storages[1])                   

              setGlobalStorageValue(storages[3],getPlayerGuildId(cid))
              setPlayerStorageValue(cid,storages[1], sto_vezes + 1)

              sto_vezes_total = getPlayerStorageValue(cid,storages[1])

              doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_two_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."ª vez(s).", 22)
              doSendMagicEffect(position, 39)  

                if premio_por_vezes == 1 then
                   if getPlayerStorageValue(cid,storages[1]) == premio_vezes then
                      if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then
                         doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21)
                         doPlayerAddItem(cid, premio,premio_cont)
                         doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!")
                       -----------------------------------------------  --  
                           if premio_reset == 1 then                    --
                              setPlayerStorageValue(cid,storages[1],0)  --  Resetar a contagem
                           end                                          --
                       -----------------------------------------------  --

                      else
                      doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!")
                      addEvent(additem,10000,cid,premio,premio_cont,premio_reset)
                      end
                   end                                        
                end               
           else
             doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!")
             doSendMagicEffect(position, 2)
           end
     else
     doPlayerSendCancel(cid,"O sistema está desativado")
     end      
  else
  doPlayerSendCancel(cid,"É nescessario ter guild para dominar o castelo!")
  doSendMagicEffect(position, 2)
  end
end

------------------------- Por PC98.

function additem(cid,premio,premio_cont,premio_reset)

if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then
   doPlayerAddItem(cid, premio,premio_cont)
   doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!")
    if premio_reset == 1 then
       setPlayerStorageValue(cid,storages[1],0)
    end
   stopEvent(additem)
 else
 doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!")
 addEvent(additem,10000,cid)
 end
end

-------------------------  por pc98
function isPlayerGuild(cid)
if getPlayerGuildName(cid) ~= "" then
return TRUE
else
return FALSE
end
end

 

castelodoor1.lua:

{script by Sheamus88}
function onUse(cid, item, frompos, item2, topos) 

-------------------------Config-----------------------------------------------------------------

door_opened = 1228                             -- ID da porta aberta
storage_guild = getGlobalStorageValue(123123)  -- A 3ª storage configurada em Castle.lua

guarda_ativ = 1       -- Caso um invasor tente abrir a porta, sumonar o Monstro "Guarda"??  | (1) = SIM  (0) = NAO
guarda_cont = 2                                 -- Caso ativo: a quantidade de guardas a sumonar
guarda_pos = {x=123,y=123,y=7}                  -- Posiçao a ser sumonada os guardas!

-------------------------Fim de Config-----------------------------------------------------------


if getPlayerGuildId(cid) == storage_guild then
  doTeleportThing(cid,getThingPos(item.uid))
  doTransformItem(item.uid, door_opened)
  doPlayerSendTextMessage(cid, 22, "Seja bem vindo a vosso castelo!")   
  return TRUE
else
   if guarda_ativ == 1 then
      doPlayerSendTextMessage(cid, 22, "Guaaaardas, tirem esses invasores daqui!!")
       for i=1, guarda_cont do
           doSummonCreature("Guarda", guarda_pos)
       end
   return FALSE
   else
   doPlayerSendTextMessage(cid, 22, "Este castelo nao pertence a sua guild")
   return FALSE
   end
end
end

 

castelodoor2.lua:

---------------                                                   
-----BY PC98-------  
 ---------------                                                   

function onUse(cid, item, frompos, item2, topos) 

-------------------------Config-----------------------------------------------------------------

door_opened = 1228                             -- ID da porta aberta
storage_guild = getGlobalStorageValue(321321)  -- A 3ª storage configurada ( ja esta configurada o PADRAO )

guarda_ativ = 1       -- Caso um invasor tente abrir a porta, sumonar o Monstro "Guarda"??  | (1) = SIM  (0) = NAO
guarda_cont = 4                                 -- Caso ativo: a quantidade de guardas a sumonar
guarda_pos = {x=321,y=321,y=7}                  -- Posiçao a ser sumonada os guardas!

-------------------------Fim de Config-----------------------------------------------------------


if getPlayerGuildId(cid) == storage_guild then
  doTeleportThing(cid,getThingPos(item.uid))
  doTransformItem(item.uid, door_opened)
  doPlayerSendTextMessage(cid, 22, "Seja bem vindo a vosso castelo!")   
  return TRUE
else
   if guarda_ativ == 1 then
      doPlayerSendTextMessage(cid, 22, "Guaaaardas, tirem esses invasores daqui!!")
       for i=1, guarda_cont do
           doSummonCreature("Guarda", guarda_pos)
       end
   return FALSE
   else
   doPlayerSendTextMessage(cid, 22, "Este castelo nao pertence a sua guild")
   return FALSE
   end
end
end

 

Talcktions

 

Vá em data/talcktions/talcktions.xml clique com o botao direito e depois aperte em "Editar"

e adicione essa linha:

 

<talkaction words="/war" event="script" value="castelosystem.lua"/>

 

Agora vá em scripts da pasta talcktions e crie um arquivo lua

e renomeie para castelosystem.lua e adicione isso:

 

castelosystem.lua:

function onSay(cid, words, param)

access = 4  -- Coloque aqui o access requirido para Ativar/Desativar o sistema

if param == "start" then
  if getPlayerAccess(cid) == access then
     setGlobalStorageValue(54321,1)
     doPlayerSendTextMessage(cid, 20, "Voce ativou o Castle Wars com suscesso!")
     return TRUE
  end
elseif param == "stop" then
  if getPlayerAccess(cid) == access then
     setGlobalStorageValue(54321,2)
     doPlayerSendTextMessage(cid, 20, "Voce desativou o Castle Wars com suscesso!")
     return TRUE
  end
end
end

 

Monster

 

O monster GUARDA aquele que mensionei ele ficará dentro do castelo

 

Instalando:

 

vá na pasta data/monster/monster.xml,e adicione essa linha aqui:

<monster name="Guarda" file="guarda.xml"/>

 

depois crie um arquivo na pasta scripts com o nome guarda.xml

guarda.xml

 

<?xml version="1.0"?>
<monster name="Guarda" nameDescription="the guard" experience="6000" speed="268" race="Blood">
 <health now="20000" max="20000"/>
 <look type="73" corpse="6080"/>
 <strategy attack="200" defense="300"/>
 <targetchange speed="420" chance="1"/>
 <flags>
   <flag canpushitems="1"/>
   <flag canpushcreatures="1"/>
   <flag attackable="1"/>
   <flag pushable="0"/>
   <flag staticattack="90"/>
   <flag targetdistance="1"/>
 </flags>
 <attacks>
   <attack name="melee" interval="2000" chance="100" min="-400" max="-800" range="1"/>
   <attack name="physical" interval="4000" chance="25" min="-600" max="-700" range="7" radius="8" target="1">
     <attribute key="shootEffect" value="arrow"/>
   </attack>
 </attacks>
 <defenses defense="45" armor="40"/>
 <immunities>
   <immunity name="paralyze"/>
   <immunity name="invisible"/>
 </immunities>
 <voices speed="2200" chance="75">
   <voice sentence="Aii Delicia Assim você me mata (8)" yell="1"/>
   <voice sentence="Saia daqui intrusos!" yell="1"/>
   <voice sentence="Sua resistencia e inutil!" yell="1"/>
   <voice sentence="Voce vai ser preso!" yell="1"/>
   <voice sentence="Quem manda é o Sheamus88!" yell="1"/>
 </voices>
 <script>
   <event name="guard"/>
 </script>
 <elements/>
 <loot/>
</monster>

 

Creatures Scripts

 

Bom, agora a gente tem de configurar pra esse bixo nao atacar os donos do castelo neh, se nao ele vai sair porai matando GERAL :fuu:. Vamo nessa.

 

Va na pasta data/creaturescripts e edite o arquivo creaturescripts.xml adicionando esta linha:

 

<event type="combat" name="guard" script="guarda.lua"/>

 

agora abra a pasta scripts, que esta na mesma pasta e crie um arquivo chamado guarda.lua.

 

guarda.lua

 

function onCombat(cid, target)

if(not isPlayer(target)) then
return TRUE
else

targets = getMonsterTargetList(cid)

if getPlayerGuildId(target) == getGlobalStorageValue(123123) then
  addEvent(check,1000,cid,targets)
  return FALSE
else
return TRUE
end
end
end

function check(cid,targets)

for i=1, #targets do
   if getPlayerGuildId(targets[i]) == getGlobalStorageValue(123123) then

      addEvent(check,1000,cid,targets)
      return FALSE
   else
       stopEvent(check)
       return TRUE
   end
end
end

 

O seu Guarda está configurado vamos para ultima etapa:

 

Instalação no RME

 

Va ate no primeiro castelo, e adicione uma lavanca ( id recomendado: 1945 ) e coloque aonde voce quiser. Depois de colocado a lavanca, clique nela com o botao direito do mouse e va em property.

 

No campo "ActionID:" coloque 5656.

 

 

Faça a mesma coisa com o segundo castelo, crie la a lavanca, e coloque actionID 5657.

 

Se voce quiser voce pode criar uma porta especial, por onde so os 'donos' do castelo pode entrar, afinal, ja ta instalado! :fail:

 

Coloque ActionID 5659 na porta no primeiro castelo, e actionID 5660 na porta do segundo castelo.

 

 

Comandos

 

/war star(para ativar o system)

/war stop(para desativar o system)

 

Creditos

Sheamus88 - Pelos scripts tbm

PC98 - Por partes do script

MonsterEditor - Pelo mosntro Guarda. ( blackdemon)

Editado por Sheamus88
Link para o comentário
Compartilhar em outros sites

  • 1 month later...

Gostaria de pedir um parecido com esse...

Um script que as guilds lutem no castle war q eu fiz e a guild que ganhar fica com o castelo. Ai tpw quando otra guild for tenta entra aparece essa Msg: "The castle war is dominated by (nome guild)".

 

E otro script para quando eu quiser q haja war novamente.

Se der pra alguem posta eu do REP+ :D

Link para o comentário
Compartilhar em outros sites

Aqui:

 

Va em movements/script e crie um arquivo com o nome CastleSqm

function onStepIn(cid, item, position, fromPosition)

if getGlobalStorageValue(154154) >= 1 then

if getPlayerGuildId(cid) > 0 then

doPlayerSendCancel(cid, "Bem vindo ao castelo.")

else

doTeleportThing(cid, fromPosition)

return doPlayerSendCancel(cid, "Voce precisa de uma guild para entrar no castelo.")

end

else

doTeleportThing(cid, fromPosition)

return doPlayerSendCancel(cid, "A Sua Guild nao é a vencedora.")

end

return TRUE

end

 

e em movements.xml

 

<movevent type="StepIn" actionid="66678" event="script" value="CastleSqm.lua"/>
Editado por aishiteru30
Link para o comentário
Compartilhar em outros sites

  • 1 year later...

Melhor tutorial do CastleWar, muito obrigado cara ! Agora eu tenho uma pequena dúvida... Será que você pode me ajudar?

A dúvida é... O castle eu posso fazer um em qualquer lugar? Ou essas scripts são feitas para servidores que já vem com castle e só falta configurar? Thanks! Agradeço e dou +REP desde já ! Abraço.

E outra dúvida, é pra eu fazer 2 castles ou apenas 1 ? Thanks!!!

Editado por levynogueiiraa
Link para o comentário
Compartilhar em outros sites

show mano mas eu estava querendo um sistema um pouco diferente queria que o evento dura-se 1hr e que quando fosse acabar o ganhador seria o tal player que estive-se emcima do sqm da pos tal ai ele seria teleportado pra house assim ganhando ela e ganhando também 7 dias de premy ai mandaria a msg que tal jogador ganhou o evento mas no caso quero 2 castelos também então seriam 2 sqms e os 2 players que estiverem em cima dos sqms ganhariam os castles e 7 dias de premy exemplo comesou 20:00 e temina 21:00 os players que tiverem nos sqms as 21:00 vao ser puxados cada 1 pra sua devida house ganhadora no caso a house so é dada pra quem estava no sqm e não para a guild inteira se eu não tiver explicado direito diga ae que explicarei melhor

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...