Ir para conteúdo
  • 0
bitoca1995

Scripting [AJUDA] battlefield script - walls

Pergunta

bitoca1995    0
bitoca1995

Boa noite,

 

Eu adicionei o script do Vodkart no meu ot, o famoso Battlefield, funcionou tudo corretamente, porem há um problema, o script funciona normal, ao matar os players, todos são teleportados para o templo e o time ganhador ganha os premios, porem as paredes que separam os times não são adicionadas novamente, elas somem quando começa o evento, porem quando termina, não são adicionadas novamente, então na próxima vez que o evento rodar, vai bugar, pq n vai ter a parede lá separando os times até o evento começar, abaixo segue o script da LIB:

 

_Lib_Battle_Info = {
Reward = {
exp = {false, 0}, items = {true, 9020, 50}, premium_days = {false, 0}
},
TeamOne = {name = "Black Assassins", storage = 140120, pos = {x=32505,y=32540,z=7}},
TeamTwo = {name = "Red Barbarians",storage = 140121,pos = {x=32546,y=32538,z=7}},
storage_count = 180400,
tpPos = {x=32365, y=32232, z=7},
limit_Time = 5 -- limite de tempo para adentrar o evento
}
function resetBattle()
setGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage, 0)
setGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0)
end
function OpenWallBattle()
local B = {
{1541,{x=32525, y=32540, z=6, stackpos = 1}},
{1542,{x=32525, y=32541, z=6, stackpos = 1}},
{1543,{x=32525, y=32542, z=6, stackpos = 1}},
{1544,{x=32525, y=32543, z=6, stackpos = 1}},
{1545,{x=32518, y=32528, z=6, stackpos = 1}},
{1546,{x=32518, y=32529, z=6, stackpos = 1}},
{1547,{x=32529, y=32528, z=6, stackpos = 1}},
{1548,{x=32529, y=32529, z=6, stackpos = 1}}
}
for i = 1, #B do
if getTileItemById(B[i][2], B[i][1]).uid == 0 then
doRemoveItem(getThingfromPos(B[i][2]).uid,1)
else
doCreateItem(B[i][1], 1, B[i][2])
end
end
end
function doBroadCastBattle(type, msg)
for _, cid in pairs(getPlayersOnline()) do
if getPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage) >= 1 or getPlayerStorageValue(cid, _Lib_Battle_Info.TeamTwo.storage) >= 1 then
doPlayerSendTextMessage(cid,type,msg)
end
end
end
function removeBattleTp()
local t = getTileItemById(_Lib_Battle_Info.tpPos, 1387).uid
return t > 0 and doRemoveItem(t) and doSendMagicEffect(_Lib_Battle_Info.tpPos, CONST_ME_POFF)
end
function getWinnersBattle(storage)
local str, c = "" , 0
for _, cid in pairs(getPlayersOnline()) do
if getPlayerStorageValue(cid, storage) == 1 then
if _Lib_Battle_Info.Reward.exp[1] == true then doPlayerAddExperience(cid, _Lib_Battle_Info.Reward.exp[2]) end
if _Lib_Battle_Info.Reward.items[1] == true then doPlayerAddItem(cid, _Lib_Battle_Info.Reward.items[2], _Lib_Battle_Info.Reward.items[3]) end
if _Lib_Battle_Info.Reward.premium_days[1] == true then doPlayerAddPremiumDays(cid, _Lib_Battle_Info.Reward.premium_days[2]) end
doRemoveCondition(cid, CONDITION_OUTFIT)
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
setPlayerStorageValue(cid, storage, -1)
c = c+1 
end
end
str = str .. ""..c.." Player"..(c > 1 and "s" or "").." from team "..(getGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage) == 0 and _Lib_Battle_Info.TeamTwo.name or _Lib_Battle_Info.TeamOne.name).." won the event battlefield!"
resetBattle()
OpenWallBattle()
return doBroadcastMessage(str)
end
function CheckEvent(delay)
if delay > 0 and getGlobalStorageValue(_Lib_Battle_Info.storage_count) > 0 then
doBroadcastMessage("[BattleField Event] We are waiting "..getGlobalStorageValue(_Lib_Battle_Info.storage_count).." players to Battlefield starts")
elseif delay == 0 and getGlobalStorageValue(_Lib_Battle_Info.storage_count) > 0 then
for _, cid in pairs(getPlayersOnline()) do
if getPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage) >= 1 or getPlayerStorageValue(cid, _Lib_Battle_Info.TeamTwo.storage) >= 1 then
doRemoveCondition(cid, CONDITION_OUTFIT)
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
setPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage, -1)
setPlayerStorageValue(cid, _Lib_Battle_Info.TeamTwo.storage, -1)
end
end
doBroadcastMessage("The event cannot be started because not had enough players.")
setGlobalStorageValue(_Lib_Battle_Info.storage_count, 0)
resetBattle()
removeBattleTp()
end
addEvent(CheckEvent, 60000, delay-1)
end

Alguém poderia me ajudar por favor? preciso que essas paredes voltem a aparecer, nem que seja por meio de gambiarra.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

4 respostass a esta questão

Recommended Posts

  • 0
Majesty    1755
Majesty
function OpenWallBattle()
local B = {
{1541,{x=32525, y=32540, z=6, stackpos = 1}},
{1542,{x=32525, y=32541, z=6, stackpos = 1}},
{1543,{x=32525, y=32542, z=6, stackpos = 1}},
{1544,{x=32525, y=32543, z=6, stackpos = 1}},
{1545,{x=32518, y=32528, z=6, stackpos = 1}},
{1546,{x=32518, y=32529, z=6, stackpos = 1}},
{1547,{x=32529, y=32528, z=6, stackpos = 1}},
{1548,{x=32529, y=32529, z=6, stackpos = 1}}
}

Essa é a função que remove e recria as paredes e os IDs estão na ordem crescente.

Se você alterou o ID e está utilizando um tipo de parede, deve repetir em todas as linhas.

Exemplo:

function OpenWallBattle()
local B = {
{1541,{x=32525, y=32540, z=6, stackpos = 1}},
{1541,{x=32525, y=32541, z=6, stackpos = 1}},
{1541,{x=32525, y=32542, z=6, stackpos = 1}},
{1541,{x=32525, y=32543, z=6, stackpos = 1}},
{1541,{x=32518, y=32528, z=6, stackpos = 1}},
{1541,{x=32518, y=32529, z=6, stackpos = 1}},
{1541,{x=32529, y=32528, z=6, stackpos = 1}},
{1541,{x=32529, y=32529, z=6, stackpos = 1}}
}

Lembre-se de alterar no mapa a(s) parede(s) que utiliza para o evento funcionar corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
grilo13    60
grilo13

Não tenho certeza pois nunca brinquei nesse evento, então não sei como ele funciona, mas...

function resetBattle()
setGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage, 0)
setGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0)
end

Não deveria aqui também criar as paredes ou seja lá o que for após resetar os players?

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
bitoca1995    0
bitoca1995

o evento funciona da seguinte forma, é um mapa separado, onde tem dois lados iguais, e uma parede separando os dois times, conforme os players vão entrando no TP do evento, eles vão sendo enviados para os 2 times, quando completa o número de players configurados, o evento começa, ele conta 2 minutos, que é o tempo para os players montarem as estratégias, e após isso, ele remove as paredes para começar a guerra, um time tem que matar o outro,o time que ganhar ( no caso matar todos do outro time) ganha o item programado, todos são teleportados para o templo de thais após alguem ganhar. Até ai funciona tudo normal. O problema é que após o evento acontecer, não é colocado a parede novamente lá, então eu tenho que por manualmente, se eu quiser fazer novamente o evento :(.

 

Eu acredito que essa parte que vc citou, é só para não bugar, caso o OT tenha sido fechado no meio do evento, então ele reseta tudo antes de começar outro evento..

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Majesty    1755
Majesty

A questão neste tópico de suporte foi respondida e o autor do tópico resolveu a questão. Este tópico está fechado agora. Se você tiver outras perguntas, crie um novo tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×