Ir para conteúdo

[Sistema] Castle Guild War - Dominio De Castelo


Posts Recomendados

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]

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

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?

Link para o comentário
Compartilhar em outros sites

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

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

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

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

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

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

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.

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

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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?

Link para o comentário
Compartilhar em outros sites

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!

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

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.

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

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...