Criei um mini mapa de capture the flag e quero que o evento inicie uma vez e quando acabar inicie novamente sem parar, outra coisa que quero é que quando acabe o evento o player seje teletransportado para uma sala fechada não o templo.
CONFIGURAÇÃO QUE FICA NA LIB
--[[
Capture The Flag System
Author: Maxwell Denisson(MaXwEllDeN)
Version: 2.0
Contact: maxwellmda@gmail.com
]]
CTF_LIB ={
waitpos ={x =1009, y =1019, z =7},-- Posição da sala de espera
tppos ={x =1012, y =1022, z =7},-- Onde o TP vai aparecer
days ={1,2,3,4,5,6,7},-- Dias que o evento vai abrir
xp_percent =5.0,-- Porcentagem de exp que o player vai ganhar
timeclose =1,-- Tempo, em minutos, para iniciar o CTF
winp =10,-- Quantos pontos uma equipe precisa marcar para vencer
teams ={["Vermelho"]={
temple =1,-- TownID da equipe vermelha
outfit ={lookHead =0, lookBody =132, lookLegs =113, lookFeet =94},
flag ={
id =1435,
flag_pos ={x =1011, y =1027, z =7},-- Posição onde a bandeira vermelha vai ser criada
gnd_pos ={x =1012, y =1027, z =7},-- Onde os players da equipe vermelha entregarão a bandeira.},},["Verde"]={
temple =2,-- TownID da equipe verde
outfit ={lookHead =0, lookBody =121, lookLegs =101, lookFeet =101},
flag ={
id =1437,
flag_pos ={x =1022, y =1027, z =7},-- Posição onde a bandeira verde vai ser criada
gnd_pos ={x =1022, y =1027, z =7},-- Onde os players da equipe verde entregarão a bandeira.},},},}local CTF = CTF_LIB
function CTF.getMembers()local members ={}for _, cid in pairs(getPlayersOnline())doif getPlayerStorageValue(cid,16700)~=-1then
table.insert(members, cid)endendreturn members
endfunction CTF.getTeamMembers(team)local members ={}for _, cid in pairs(CTF.getMembers())doif getPlayerStorageValue(cid,16700)== team then
table.insert(members, cid)endendreturn members
endfunction CTF.removePlayer(uid)
setPlayerStorageValue(uid,16700,-1)
doPlayerSetTown(uid, getPlayerStorageValue(uid,16701))
doTeleportThing(uid, getTownTemplePosition(getPlayerStorageValue(uid,16701)))
setPlayerStorageValue(uid,16701,-1)
doRemoveCondition(uid, CONDITION_OUTFIT)
doCreatureAddHealth(uid, getCreatureMaxHealth(uid))
doCreatureAddMana(uid, getCreatureMaxMana(uid))returntrueendfunction CTF.addPlayer(uid)local team = CTF.getTeamLivre()local n_team = CTF.teams[team]
setPlayerStorageValue(uid,16700, team)
setPlayerStorageValue(uid,16701, getPlayerTown(uid))
doPlayerSetTown(uid, n_team.temple)
doTeleportThing(uid, CTF.waitpos)
doPlayerSendTextMessage(uid,22,"Você agora faz parte do time ".. team ..".")local outfit = getCreatureOutfit(uid)for i, v in pairs(n_team.outfit)do
outfit[i]= v
end
registerCreatureEvent(uid,"CTFLogout")
registerCreatureEvent(uid,"CTFAttack")
registerCreatureEvent(uid,"CTFCombat")
registerCreatureEvent(uid,"CTFDeath")
doSetCreatureOutfit(uid, outfit,-1)returntrueendfunction CTF.getTeamLivre()local teams ={}for i, _ in pairs(CTF.teams)do
table.insert(teams,{i,#CTF.getTeamMembers(i)})endif(teams[1][2]< teams[2][2])thenreturn teams[1][1]elseif(teams[1][2]> teams[2][2])thenreturn teams[2][1]endreturn teams[math.random(2)][1]endfunction CTF.broadCast(msg, class)for _, uid in pairs(CTF.getMembers())do
doPlayerSendTextMessage(uid, class or20, msg)endreturntrueendfunction CTF.getFlagTeam(flag)for i, v in pairs(CTF.teams)doif v.flag.id == flag thenreturn i
endendreturn""endlocal score_sto ={}local a =0for i, _ in pairs(CTF.teams)do
score_sto[i]=42314+ a
a = a +1endfunction CTF.createFlags()for i, v in pairs(CTF.teams)dolocal flag = doCreateItem(v.flag.id,1, v.flag.flag_pos)
doItemSetAttribute(flag,"aid",63218)
v.flag.gnd_pos.stackpos =0local gnd = getThingFromPos(v.flag.gnd_pos).uid
doItemSetAttribute(gnd,"aid",63200)
doItemSetAttribute(gnd,"team", i)
setGlobalStorageValue(score_sto[i],0)endreturntrueendfunction CTF.removeFlags()for i, v in pairs(CTF.teams)dolocal flag = doFindItemInPos({v.flag.id}, v.flag.flag_pos)[1]if flag then
doRemoveItem(flag.uid,1)end
v.flag.gnd_pos.stackpos =0local gnd = getThingFromPos(v.flag.gnd_pos).uid
doItemSetAttribute(gnd,"aid",0)endreturntrueendfunction CTF.start()
doRemoveItem(doFindItemInPos({1387}, CTF.tppos)[1].uid,1)
setGlobalStorageValue(16705,-1)if#CTF.getMembers()<2then
doBroadcastMessage("O CTF não pôde ser iniciado por falta de players.")for _, cid in pairs(CTF.getMembers())do
CTF.removePlayer(cid)endreturnfalseend
CTF.broadCast("O CTF foi iniciado. Bom jogo!")for _, uid in pairs(CTF.getMembers())do
doTeleportThing(uid, getTownTemplePosition(getPlayerTown(uid)))end
CTF.createFlags()returntrueendfunction CTF.returnFlag(uid, status)local team = getPlayerStorageValue(uid,16702)if status thenlocal msg ="O player ".. getCreatureName(uid)..", estava com a bandeira do time ".. team .." "if status ==1then
msg = msg .."e foi eliminado. "elseif status ==2then
msg ="e foi removido do evento. "end
msg = msg .."Portanto a bandeira do time ".. team .." foi devolvida."
CTF.broadCast(msg)endif CTF.teams[team]thenlocal flag = doCreateItem(CTF.teams[team].flag.id,1, CTF.teams[team].flag.flag_pos)
doItemSetAttribute(flag,"aid",63218)
setPlayerStorageValue(uid,16702,-1)endreturntrueendfunction CTF.addPoint(uid)local finish
local msg ="Capture The Flag:"
setGlobalStorageValue(score_sto[getPlayerStorageValue(uid,16700)], getGlobalStorageValue(score_sto[getPlayerStorageValue(uid,16700)])+1)for i, _ in pairs(CTF.teams)do
msg = msg .."\nTime ".. i ..": ".. getGlobalStorageValue(score_sto[i])if getGlobalStorageValue(score_sto[i])>= CTF.winp then
finish = i
endend
CTF.broadCast(getCreatureName(uid).." marcou um ponto para o time ".. getPlayerStorageValue(uid,16700)..".",22)
CTF.broadCast(msg)if finish then
CTF.close(finish)endreturntrueendfunction CTF.close(win)for i, _ in pairs(CTF.teams)do
setGlobalStorageValue(score_sto[i],0)endifnot win then
doBroadcastMessage("O CTF acabou sem vencedores.")else
CTF.broadCast("O time ".. win .." marcou ".. CTF.winp .." ponto(s) e venceu o evento.")endfor _, cid in pairs(CTF.getMembers())doif getPlayerStorageValue(cid,16700)== win thenlocal xp = math.ceil(getPlayerExperience(cid)*(CTF.xp_percent /100),215)
doPlayerSendTextMessage(cid,22,"Parabéns! Você ganhou o evento e obteve ".. CTF.xp_percent .."% de sua experiência total(".. xp ..").")
doSendAnimatedText(getThingPos(cid), xp,215)
doPlayerAddExperience(cid, xp)endif getPlayerStorageValue(cid,16702)~=-1then
CTF.returnFlag(cid)end
CTF.removePlayer(cid)end
CTF.removeFlags()returntrueendlocalfunction Alert(uid)if(isCreature(uid))thenif getPlayerStorageValue(uid,16702)==-1or getPlayerStorageValue(uid,16700)==-1thenreturnfalseend
doSendAnimatedText(getThingPos(uid),"Flag!", math.random(50,200))local bla ={18,19,21,22,23,24}
doSendMagicEffect(getThingPos(uid), bla[math.random(#bla)])if(os.time()- getPlayerStorageValue(uid,16703)>=60)then
CTF.returnFlag(uid)return setPlayerStorageValue(uid,16703,-1)end
addEvent(Alert,500, uid)returntrueendreturnfalseendfunction CTF.stealFlag(uid, team)
setPlayerStorageValue(uid,16702, team)
setPlayerStorageValue(uid,16703, os.time())
CTF.broadCast(getCreatureName(uid).." roubou a bandeira do time ".. team .."!")
Alert(uid)returntrueendfunction doFindItemInPos(ids, pos)-- By Undead Slayerlocal results ={}for _ =0,255dolocal findPos ={x = pos.x, y = pos.y, z = pos.z, stackpos = _}if isInArray(ids, getThingFromPos(findPos).itemid)then
table.insert(results, getThingFromPos(findPos))endendreturn results
end
Pergunta
edir1996 0
Criei um mini mapa de capture the flag e quero que o evento inicie uma vez e quando acabar inicie novamente sem parar, outra coisa que quero é que quando acabe o evento o player seje teletransportado para uma sala fechada não o templo.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados