[Sistema] Castle Guild War - Dominio De Castelo

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

Script testado em TFS 0.3.6 Crying Dansom

Créditos: 100% Draky Lucas[eu]

Qualquer erro me avise que arrumarei.

 

Provavelmente funcionará em qualquer versão acima de 8.54, ja abaixo eu nao confirmo mais não custa testar :D

 

Como funciona?

o ADM digita !war open para ativar a war, e !war close na hora de terminar a war.

A Ultima guild que puxar a alavanca antes de terminar a war é considerada a vencedora do evento.

 

Vamos começar:

 

 

Atualizado: corrigido erro pelo Demonbholder [dava só em alguns pois eram desatualizados]

em data/lib/050-functions.lua ache a função isInArea, deletem-la e substituam-la por essa:

function isInArea(arr, arr1, arr2)

if (arr.x <= arr1.x and arr.x >= arr2.x) or (arr.x >= arr1.x and arr.x <= arr2.x) then
if (arr.y <= arr1.y and arr.y >= arr2.y) or (arr.y >= arr1.y and arr.y <= arr2.y) then
if (arr.z <= arr1.z and arr.z >= arr2.z) or (arr.z >= arr1.z and arr.z <= arr2.z) then
return TRUE
end
end
end

return FALSE
end

em Data/actions/scripts/ crie um arquivo chamado castlewar-action.lua e nele coloque isto

 

local storage = 1755
local emGuerra = 1756

function onUse(cid, item, frompos, item2, topos) 
  if getPlayerGuildId(cid) == nil or getPlayerGuildId(cid) <= 0 or getPlayerGuildId(cid) == false then
     return doPlayerSendCancel(cid,"Voce precisa de uma guild para dominar o castelo!")
  end
  if getGlobalStorageValue(emGuerra) <= 0 then
     return doPlayerSendCancel(cid,"O Castelo nao está em guerra!")
  end   

  if getPlayerGuildId(cid) == getGlobalStorageValue(storage) then
     return doPlayerSendCancel(cid,"Sua guild ja está dominando o castelo!")
  end

  setGlobalStorageValue(storage,getPlayerGuildId(cid))
  doBroadcastMessage("A Guild ".. getPlayerGuildName(cid) .." dominou o castelo!",22)        
  return true
end

 

Não mude nada a não ser que não saiba o que esteja fazendo!

 

 

em Data/actions/actions.xml coloque isso:

<action actionid="1755" script="castlewar-action.lua" />

 

em data/movements/scripts/ crie um arquivo chamado castlewar-movements.lua e coloque isso:

 

local storage = 1755
local emGuerra = 1756
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
  if getGlobalStorageValue(storage) == getPlayerGuildId(cid) then
     return true
  end

  if getGlobalStorageValue(emGuerra) == 1 then
     return true
  else
      doTeleportThing(cid,fromPosition,false)
      return doPlayerSendCancel(cid,"Por favor espere a batalha começar!")       
  end

return true
end    

 

em data/movements/movements.xml coloque isso:

<movevent type="StepIn" actionid="1756" event="script" value="castlewar-movements.lua"/>

 

em data/talkactions/scripts/ crie um arquivo chamado castlewar-talk.lua e coloque isso:

local storage = 1755
local emGuerra = 1756
local firstpos = {x = 582,y = 1290,z = 7}
local secondpos = {x = 802,y = 1490,z = 0}
function onSay(cid, words, param) 
  if param == "open" then
        setGlobalStorageValue(emGuerra,1)
        doBroadcastMessage("A Guerra pelo castelo começou!",22)   
  return true
  elseif param == "close" then
         for _, pid in ipairs(getPlayersOnline()) do
             if isInArea(getCreaturePosition(pid),firstpos,secondpos)then
                if getGlobalStorageValue(storage) ~= getPlayerGuildId(pid) then
             doTeleportThing(pid,getTownTemplePosition(getPlayerTown(pid)))
             doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE,"Desculpe mas sua guild não venceu essa guerra!")
                else
                doPlayerSendTextMessage(pid,MESSAGE_STATUS_CONSOLE_BLUE,"Sua guild conseguio dominar o castelo. Parabens por ajuda-la!")
                end
             end
         end
         setGlobalStorageValue(emGuerra,0)         
         doBroadcastMessage("A Guerra pelo castelo terminou!",22)
  else 
       return doPlayerSendCancel(cid,"Digite !war open[inicia a guerra] ou !war close[terminaa guerra]")
  end
return true
end 

local firstpos = {x = 582,y = 1290,z = 7}

local secondpos = {x = 802,y = 1490,z = 0}

./\ edite essa parte com forme no tutorial das SS's

 

 

e em data/talkactions/talkactions.xml adicione isso:

<talkaction log="yes" words="!war" access="5" event="script" value="castlewar-talk.lua"/>

 

 

 

Tutorial: MAPA

 

Preencha todo o castelo com PVP TileZone, exceto a parte de caça para a guild dominante [que deverá ficar no subsolo do castelo]

 

Depois siga o mapinha [nao zoapq fiz em 2 min pa demonstrar kpoekopkepo...]

 

SS1: Castelo inteiro [nao zoa plz kkk]

 

 

 

Resto de instalações:

 

 

 

 

Podem postar em outros fórums, desde que fale que o criador fui eu [Draky Lucas] e que foi retirado do XTIBIA!

 

 

 

EDITED: Agora esta como o Demonbholder deu a ideia [teleporta só quem nao vencer]

coyotestark

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 15/02/11Posts: 259Char no Tibia: Aias Laf Du

carak me interessei muito por ele. espero que funfe em meu ot de wodbo, ja que a arena ta bugada.

 

man, tem um problema cm isso em meu ot :(

quando eu digo "xwar" coloquei assim pq "!" nao funciona em meu ot. belesa quando eu falo xwar ele diz

"Digite !war open[inicia a guerra] ou !war close[terminaa guerra]"

 

mas se eu colocer "xwar open" nao da nada e o nome aparece ocmo se eu estivese dizendo algo.

 

como reparar isso?

385417_122391137880813_100003297811828_101325_1909172176_n.jpg

Nao sou Gigante mas grande o suficiente para entender tudo a minha volta.

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

Edited: reinstala o sistema [só os scripts.. o mapa ta certo] e teste dinovo..

PS: Agora a posição firstpos e secondpos é na talkaction e não na lib.. pode deletar a lib se quiser =D

 

 

qlqr duvida drakylucas@hotmail.com

Nibelins

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/12/06Posts: 276

elseif param == "close" then 
         for _, pid in ipairs(getPlayersOnline()) do 
             if isInArea(getCreaturePosition(pid),firstpos,secondpos)then 
             doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE,"A Guerra acabou, todos foram teleportados para fora!") 
             end 
         end 

 

 

gostaria de sabe pra que server essa função

pois somente essa função não fuciona

outra pergunta como o players qye esta dentro do castelo sera teleportado pra fora que

nao entendi

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

Edit:

Nibelins tipo vc ta com a versao da lib.. atualiza ele ae pa esse dai que teleporta etc....ve se tem algum outro erro =D

 

 

for _, pid in ipairs(getPlayersOnline()) do

if isInArea(getCreaturePosition(pid),firstpos,secondpos)then

doTeleportThing(pid,getTownTemplePosition(getPlayerTown(pid)),false)

doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE,"A Guerra acabou, todos foram teleportados para fora!")

end

end

 

ficou assim ./\ ... isso pega o cid de todos os players online, o isInArea verifica se ta entre essas posições e se sim teleporta e manda msg po player =D

 

 

 

Edit: aeee agora que vi esse foi meu 200º post!!!! =D

Pessoal se querem falar comigo de noite em dias de semana fico no btkserver.servegame.com [war 24/7] ou fala pelo msn.. eu nao mantenho adicionado, aceito e deleto mais tu pode manda msg e eu responde mas eu nao vou falar com vcs atoa! =D flw e se tiver algum erro avisa

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

Hm, ótimo sistema, ficou interessante, parabéns e obrigado por compartilhar com o fórum.

 

Uma dica, quando for checar quem esta na area no war close, poderia comparar o id da guild do jogardor com o globalStorage, ai só teleporta quem não for da guild que dominou o castelo. Exemplo:

 

if isInArea(getCreaturePosition(pid),firstpos,secondpos) and getGlobalStorageValue(storage) ~= getPlayerGuildId(pid) then

 

 

Só uma idéia, tu quem sabe, e mais uma vez, ótimo sistema.

Oie :D

Kydrai

"Keep Your Mind Wide Open"
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/08/06Posts: 250

Fico bom o sistema, parabéns.

Se fizer o que o Demonbholder falou acho que fica ainda melhor.

~ Kydrai
Programador / Scripter

 

sign.png

Nibelins

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/12/06Posts: 276

sim hehe no meu ultimo poste esqueci de da os parabens

------------------------------------------------------

sobre meu problema fiz todas as modificações mudei todos os script deacordo

sua atualização mais continuo com o problema script pega tudo perfeito

menos teleporta os players que estao no castelo continua ficando dentro do castelo

 

local storage = 1755 
local emGuerra = 1756 
local firstpos = {x = 1010,y = 997,z = 7} 
local secondpos = {x = 1020,y = 1007,z = 0} 
function onSay(cid, words, param)  
  if param == "open" then 
        setGlobalStorageValue(emGuerra,1) 
        doBroadcastMessage("A Guerra pelo castelo começou!",22)    
  return true 
  elseif param == "close" then 
         for _, pid in ipairs(getPlayersOnline()) do 
             if isInArea(getCreaturePosition(pid),firstpos,secondpos)then 
             doTeleportThing(pid,getTownTemplePosition(getPlayerTown(pid)),false) 
             doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE,"A Guerra acabou, todos foram teleportados para fora!") 
             end 
         end 
         setGlobalStorageValue(emGuerra,0)          
         doBroadcastMessage("A Guerra pelo castelo terminou!",22) 
  else  
       return doPlayerSendCancel(cid,"Digite !war open[inicia a guerra] ou !war close[terminaa guerra]") 
  end 
return true 
end 

 

fiz ate um castelo igual ao seu pra testa mais funciona tudo menos teleport dos players pra fora do castelo

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

Nibelins, os players que serao teleportados tem que estar entre essas posições:

local firstpos = {x = 1010,y = 997,z = 7}

local secondpos = {x = 1020,y = 1007,z = 0}

 

Ow demon/kydrai.. vo faze aquilo entao ja que acham melhor xD

LOrDoS

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/11/06Posts: 12

Mano da o seguinte erro

 

[25/04/2011 20:17:32] [Error - TalkAction Interface]

[25/04/2011 20:17:32] data/talkactions/scripts/castle.lua:onSay

[25/04/2011 20:17:32] Description:

[25/04/2011 20:17:32] data/lib/032-position.lua:2: attempt to index global 'position' (a nil value)

[25/04/2011 20:17:32] stack traceback:

[25/04/2011 20:17:32] data/lib/032-position.lua:2: in function 'isInArea'

[25/04/2011 20:17:32] data/talkactions/scripts/castle.lua:12: in function <data/talkactions/scripts/castle.lua:5>

 

Isso da na hora de !war close

 

Tem como ajudar?

tinfer4

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/04/11Posts: 13

Só uma pequena sugestão,porque não fazer por mods?

A configuração fica mais prática.

Ótimo sistema meu camarada,tópico recomendado!

I'm a lesbian

 

 



Sou Super Fã De:

Folspa

Demonbholder

DiogoTemporario

Lordfire

Saymon14

Bazzinga

BrunoCarvalho

Henrique Moura

Meus reconhecimentos a esses membros ilustres e tão simpáticos.

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

Hmm, o cara deu uma boa idéia, você poderia adicionar a versão mod, fica mais fácil e pratico para os que estão iniciando.

 

Até mais.

 

Edit:

 

@LOrDoS

 

Pelo que eu vi o problema é na sua função de isInArea, vou ver se consigo refaze-la e posto aqui.

 

Vai em data/lib, procura onde ta a função isInArea e substitui por essa:

 

 

function isInArea(position, firstpos, secondpos)

local posx = firstpos.x > secondpos.x and secondpos.x or firstpos.x
local posx2 = posx == firstpos.x and secondpos.x or firstpos.x
local posy = firstpos.y > secondpos.y and secondpos.y or firstpos.y
local posy2 = posy == firstpos.y and secondpos.y or firstpos.y
local posz = firstpos.z > secondpos.z and secondpos.z or firstpos.z
local posz2 = posz == firstpos.z and secondpos.z or firstpos.z
local t = {}

for pos = posx, posx2 do
if pos == position.x then
table.insert(t, TRUE)
break
end
end
for pos = posy, posy2 do
if pos == position.y then
table.insert(t, TRUE)
break
end
end
for pos = posz, posz2 do
if pos == position.z then
table.insert(t, TRUE)
break
end
end
return #t == 3 and TRUE or FALSE
end

 

 

Ou essa que ta menor:

 

 

function isInArea(arr, arr1, arr2)

if (arr.x <= arr1.x and arr.x >= arr2.x) or (arr.x >= arr1.x and arr.x <= arr2.x) then
if (arr.y <= arr1.y and arr.y >= arr2.y) or (arr.y >= arr1.y and arr.y <= arr2.y) then
if (arr.z <= arr1.z and arr.z >= arr2.z) or (arr.z >= arr1.z and arr.z <= arr2.z) then
return TRUE
end
end
end

return FALSE
end

 

 

Eu fiz as duas, não se preocupem pois devem funcionar.

Oie :D

LOrDoS

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/11/06Posts: 12

Ihuuuu!! Deu certoo Manoo Vlww!

Mais tive que fazer assim ! se alguem que tiver o mesmo problema que o meu, é so ir na pasta Lib e adicionar na pasta position e colocar oque o Demonbholder mando *-*

Vlww ae hihi

Uma coisa que eu tava testando e reparei, Exemplo fui com a minha guild e ganhei!

o GM fecha o evento com o !war close, e a minha guild que ganho fica la dentro , Mais fica la dentro e eterno até o gm reabrir o evento de volta e outra guild clicar na alavanca, e ganhar e ai vai indo! Devia ter um comando que o gm usa-se depois que a guerra acabar e os player que ficaram la dentro que ganharam, o gm Usar os comando pra fechar o evento mesmo

Que ai nen os vencedores podem ficar la dentro, Sei la é um palpite, DO mesmo modo Ta muito bom mesmo o script Amei *-*

Hihih Vo por no meu novo ot que ta pra Entrar ;D

Tem que ter criatividade pra essas coisas aopekoaekoae e saber oque fazer pra treta funcar!

e Tu sabe *-* e ajuda o noob aki aueihauehauie Vlww

MatheusDiasLima

Aerials Server
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 30/03/11Posts: 10

Muito útil. Já coloquei no meu server. Obrigado..

 

REP+

mastercabuloso

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/11/07Posts: 1Char no Tibia: numdigo

Kara Tenho que adimitir tava Muito Bom Mais tem 1 Grande Erro Que é quando eu acabar a guerra Volta Pra fora Oque tuh boto n Fuciona Então Vai Uma Dica Para Os Kara Pra Muda O nome Quando der !war close Apareçer O Portão Está Fechado E Corram para O tp De SAida Do Castelo Para Não Serem Mortos.

 

Foi Oque Eu Fiz Oia Tenta Ageita Isso.

 

Fiko Muito Bom tudo Obg Por TRazer por Xtibia.

By: MasterCabuloso