Postado Novembro 6, 2017 7 anos Pessoal, boa tarde! Estou usando este script do CTF event, porém quando o evento se encerra o player que estava com a bandeira não é teleportado para o templo todos os outros são teleportados menos o player que finalizou o evento. Alguem poderia ajudar? TF 0.4 Spoiler --[[ Capture The Flag System Author: Maxwell Denisson(MaXwEllDeN) Version: 2.0 Contact: [email protected] ]] CTF_LIB = { waitpos = {x = 1009, y = 1030, z =7}, -- Posição da sala de espera tppos = {x = 1031, y = 1028, z =7}, -- Onde o TP vai aparecer days = {2, 5, 7}, -- Dias que o evento vai abrir xp_percent = 0.5, -- 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 = 1024, y = 1036, z =7}, -- Posição onde a bandeira vermelha vai ser criada gnd_pos = {x = 1025, y = 1036, z =7}, -- Onde os players da equipe vermelha entregarão a bandeira. }, }, ["Verde"] = { temple = 1, -- TownID da equipe verde outfit = {lookHead = 0, lookBody = 121, lookLegs = 101, lookFeet = 101}, flag = { id = 1437, flag_pos = {x = 1027, y = 1039, z =7}, -- Posição onde a bandeira verde vai ser criada gnd_pos = {x = 1027, y = 1038, 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()) do if getPlayerStorageValue(cid, 16700) ~= -1 then table.insert(members, cid) end end return members end function CTF.getTeamMembers(team) local members = {} for _, cid in pairs(CTF.getMembers()) do if getPlayerStorageValue(cid, 16700) == team then table.insert(members, cid) end end return members end function 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)) return true end function 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 = v end registerCreatureEvent(uid, "CTFLogout") registerCreatureEvent(uid, "CTFAttack") registerCreatureEvent(uid, "CTFCombat") registerCreatureEvent(uid, "CTFDeath") doSetCreatureOutfit(uid, outfit, -1) return true end function CTF.getTeamLivre() local teams = {} for i, _ in pairs(CTF.teams) do table.insert(teams, {i, #CTF.getTeamMembers(i)}) end if (teams[1][2] < teams[2][2]) then return teams[1][1] elseif (teams[1][2] > teams[2][2]) then return teams[2][1] end return teams[math.random(2)][1] end function CTF.broadCast(msg, class) for _, uid in pairs(CTF.getMembers()) do doPlayerSendTextMessage(uid, class or 20, msg) end return true end function CTF.getFlagTeam(flag) for i, v in pairs(CTF.teams) do if v.flag.id == flag then return i end end return "" end local score_sto = {} local a = 0 for i, _ in pairs(CTF.teams) do score_sto = 42314 + a a = a + 1 end function CTF.createFlags() for i, v in pairs(CTF.teams) do local flag = doCreateItem(v.flag.id, 1, v.flag.flag_pos) doItemSetAttribute(flag, "aid", 63218) v.flag.gnd_pos.stackpos = 0 local gnd = getThingFromPos(v.flag.gnd_pos).uid doItemSetAttribute(gnd, "aid", 63200) doItemSetAttribute(gnd, "team", i) setGlobalStorageValue(score_sto, 0) end return true end function CTF.removeFlags() for i, v in pairs(CTF.teams) do local flag = doFindItemInPos({v.flag.id}, v.flag.flag_pos)[1] if flag then doRemoveItem(flag.uid, 1) end v.flag.gnd_pos.stackpos = 0 local gnd = getThingFromPos(v.flag.gnd_pos).uid doItemSetAttribute(gnd, "aid", 0) end return true end function CTF.start() doRemoveItem(doFindItemInPos({1387}, CTF.tppos)[1].uid, 1) setGlobalStorageValue(16705, -1) if #CTF.getMembers() < 2 then doBroadcastMessage("O CTF não pôde ser iniciado por falta de players.") for _, cid in pairs(CTF.getMembers()) do CTF.removePlayer(cid) end return false end CTF.broadCast("O CTF foi iniciado. Bom jogo!") for _, uid in pairs(CTF.getMembers()) do doTeleportThing(uid, getTownTemplePosition(getPlayerTown(uid))) end CTF.createFlags() return true end function CTF.returnFlag(uid, status) local team = getPlayerStorageValue(uid, 16702) if status then local msg = "O player ".. getCreatureName(uid) .. ", estava com a bandeira do time ".. team .. " " if status == 1 then msg = msg .. "e foi eliminado. " elseif status == 2 then msg = "e foi removido do evento. " end msg = msg .. "Portanto a bandeira do time ".. team .. " foi devolvida." CTF.broadCast(msg) end if CTF.teams[team] then local flag = doCreateItem(CTF.teams[team].flag.id, 1, CTF.teams[team].flag.flag_pos) doItemSetAttribute(flag, "aid", 63218) setPlayerStorageValue(uid, 16702, -1) end return true end function 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) if getGlobalStorageValue(score_sto) >= CTF.winp then finish = i end end CTF.broadCast(getCreatureName(uid) .. " marcou um ponto para o time ".. getPlayerStorageValue(uid, 16700) .. ".", 22) CTF.broadCast(msg) if finish then CTF.close(finish) end return true end function CTF.close(win) for i, _ in pairs(CTF.teams) do setGlobalStorageValue(score_sto, 0) end if not win then doBroadcastMessage("O CTF acabou sem vencedores.") else CTF.broadCast("O time ".. win .. " marcou ".. CTF.winp .. " ponto(s) e venceu o evento.") end for _, cid in pairs(CTF.getMembers()) do if getPlayerStorageValue(cid, 16700) == win then local 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) end if getPlayerStorageValue(cid, 16702) ~= -1 then CTF.returnFlag(cid) end CTF.removePlayer(cid) end CTF.removeFlags() return true end local function Alert(uid) if (isCreature(uid)) then if getPlayerStorageValue(uid, 16702) == -1 or getPlayerStorageValue(uid, 16700) == -1 then return false end 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) return true end return false end function 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) return true end function doFindItemInPos(ids, pos) -- By Undead Slayer local results = {} for _ = 0, 255 do local findPos = {x = pos.x, y = pos.y, z = pos.z, stackpos = _} if isInArray(ids, getThingFromPos(findPos).itemid) then table.insert(results, getThingFromPos(findPos)) end end return results end
Postado Novembro 6, 2017 7 anos Adpta este script que funciona. local conditionGreen = createConditionObject(CONDITION_OUTFIT) setConditionParam(conditionGreen, CONDITION_PARAM_TICKS, -1) addOutfitCondition(conditionGreen, {lookType = 129, lookHead = 82, lookBody = 82, lookLegs = 82, lookFeet = 82}) local conditionRed = createConditionObject(CONDITION_OUTFIT) setConditionParam(conditionRed, CONDITION_PARAM_TICKS, -1) addOutfitCondition(conditionRed, {lookType = 129, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94}) CTF = { ips = {}, tp_pos = {x = 32356, y = 32219, z = 7}, exit_ = {x = 32369, y = 32241, z = 7}, storages = {greenFlag = 822067, redFlag = 822068, greenTeam = 822069, redTeam = 822070}, greenFlag = 1437, redFlag = 1435, greenFlagPos = {x = 814, y = 932, z = 6}, redFlagPos = {x = 814, y = 873, z = 6}, waitingRoom = {x = 769, y = 906, z = 7}, fromposWait = {x = 760, y = 897, z = 7}, toposWait = {x = 778, y = 915, z = 7}, base_A = {x = 804, y = 933, z = 7}, base_B = {x = 804, y = 872, z = 7}, getFirstPlayer = function() for x = CTF.fromposWait.x, CTF.toposWait.x do for y = CTF.fromposWait.y, CTF.toposWait.y do local area = {x = x, y = y, z = CTF.fromposWait.z} if getTopCreature(area) and getTopCreature(area).uid > 0 and isPlayer(getTopCreature(area).uid) then return getTopCreature(area).uid end end end end, start = function() local function removeFlag(pos, id) local pp = pos for i = 1, 255 do pp.stackpos = i local flag = getThingFromPos(pos) if flag and flag.uid > 0 and flag.itemid == id then doRemoveItem(flag.uid, 1) end end end if getGlobalStorageValue(822066) >= 2 then if getGlobalStorageValue(822066) % 2 ~= 0 then local player = CTF.getFirstPlayer() doTeleportThing(player, getTownTemplePosition(getPlayerTown(player))) doPlayerSetStorageValue(player, 822066, -1) setGlobalStorageValue(822066, getGlobalStorageValue(822066) - 1) doPlayerSendTextMessage(player, MESSAGE_STATUS_WARNING, "Que azar! Você foi retirado do evento por excesso de participantes :(") end removeFlag(CTF.redFlagPos, CTF.redFlag) removeFlag(CTF.greenFlagPos, CTF.greenFlag) setGlobalStorageValue(CTF.storages.greenTeam, 0) setGlobalStorageValue(CTF.storages.redTeam, 0) warnPlayersWithStorage(822066, 1, MESSAGE_STATUS_WARNING, "O evento começou, boa sorte a todos. O time que chegar a 10 pontos primeiro ganha!") local a = getGlobalStorageValue(822066) / 2 for i = 1, a do local player = CTF.getFirstPlayer() doAddCondition(player, conditionGreen) doPlayerSetStorageValue(player, CTF.storages.greenTeam, 1) doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, "Você entrou no time verde, boa sorte!") doTeleportThing(player, CTF.base_A) end for j = 1, a do local player = CTF.getFirstPlayer() doAddCondition(player, conditionRed) doPlayerSetStorageValue(player, CTF.storages.redTeam, 1) doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, "Você entrou no time vermelho, boa sorte!") doTeleportThing(player, CTF.base_B) end local green = doCreateItem(CTF.greenFlag, 1, CTF.greenFlagPos) doItemSetAttribute(green, 'aid', 5434) local red = doCreateItem(CTF.redFlag, 1, CTF.redFlagPos) doItemSetAttribute(red, 'aid', 5435) else if getPlayersInArea(CTF.fromposWait, CTF.toposWait) then for _, pid in pairs(getPlayersInArea(CTF.fromposWait, CTF.toposWait)) do doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "O evento não teve pelo menos 10 participantes e foi cancelado.") doPlayerSetStorageValue(pid, 822066, -1) doTeleportThing(pid, CTF.exit_) end end end end, removeFlags = function() local posGreen = CTF.greenFlagPos local posRed = CTF.redFlagPos for i = 1, 255 do posGreen.stackpos = i posRed.stackpos = i local green = getThingFromPos(posGreen) local red = getThingFromPos(posRed) if green and green.uid > 0 and green.itemid == CTF.greenFlag then doRemoveItem(green.uid, 1) end if red and red.uid > 0 and red.itemid == CTF.redFlag then doRemoveItem(red.uid, 1) end end end, doPlayerAddFlag = function(cid, flag) local function removeFlag(pos, id) local pp = pos for i = 1, 255 do pp.stackpos = i local flag = getThingFromPos(pos) if flag and flag.uid > 0 and flag.itemid == id then doRemoveItem(flag.uid, 1) end end end if isPlayer(cid) then removeFlag(getThingPos(cid), getPlayerStorageValue(cid, CTF.storages.greenFlag) == 1 and "green" or "red") local pos = getThingPos(cid) if flag == "green" then if getPlayerStorageValue(cid, CTF.storages.greenFlag) == 1 then doCreateItem(CTF.greenFlag, 1, pos) addEvent(removeFlag, 400, pos, CTF.greenFlag) addEvent(CTF.doPlayerAddFlag, 550, cid, flag) doSendAnimatedText(pos, "CTF", 18) end elseif flag == "red" then if getPlayerStorageValue(cid, CTF.storages.redFlag) == 1 then doCreateItem(CTF.redFlag, 1, pos) addEvent(removeFlag, 400, pos, CTF.redFlag) addEvent(CTF.doPlayerAddFlag, 550, cid, flag) doSendAnimatedText(pos, "CTF", 18) end end end end, stop = function() local players = {} local str = "" for _, pid in pairs(getPlayersOnline()) do if getPlayerStorageValue(pid, 822066) == 1 then table.insert(players, pid) end end if #players >= 1 then if getStorageZero(CTF.storages.redTeam) > getStorageZero(CTF.storages.greenTeam) then for _, pid in pairs(players) do if getPlayerStorageValue(pid, CTF.storages.redTeam) == 1 then local am = {} doPlayerAddItem(pid, 10558, 3) end end str = "O time Vermelho venceu o evento! Placar: Time Vermelho ["..getStorageZero(CTF.storages.redTeam).."] VS ["..getStorageZero(CTF.storages.greenTeam).."] Time Verde. Os jogadores do time Vermelho receberam prêmios!" elseif getStorageZero(CTF.storages.greenTeam) > getStorageZero(CTF.storages.redTeam) then for _, pid in pairs(players) do if getPlayerStorageValue(pid, CTF.storages.greenTeam) == 1 then doPlayerAddItem(pid, 10558, 3) end end str = "O time Verde venceu o evento! Placar: Time Verde ["..getStorageZero(CTF.storages.greenTeam).."] VS ["..getStorageZero(CTF.storages.redTeam).."] Time Vermelho. Os jogadores do time Verde receberam prêmios!" elseif getStorageZero(CTF.storages.greenTeam) == getStorageZero(CTF.storages.redTeam) then for _, pid in pairs(players) do doPlayerAddItem(pid, 10558, 1) end str = "Houve um empate! Os dois times fizeram "..getStorageZero(CTF.storages.greenTeam).." pontos!" end warnPlayersWithStorage(822066, 1, 25, "O evento acabou pois excedeu o limite 1 hora de duração! "..str) CTF.removeFlags() for _, pid in pairs(players) do if getPlayerStorageValue(pid, CTF.storages.greenFlag) == 1 or getPlayerStorageValue(pid, CTF.storages.redFlag) == 1 then doPlayerSetStorageValue(pid, CTF.storages.greenFlag, -1) doPlayerSetStorageValue(pid, CTF.storages.redFlag, -1) end doTeleportThing(pid, CTF.exit_) doPlayerSetStorageValue(pid, 822066, -1) doPlayerSetStorageValue(pid, CTF.storages.greenTeam, -1) doPlayerSetStorageValue(pid, CTF.storages.redTeam, -1) doPlayerSetStorageValue(pid, CTF.storages.greenFlag, -1) doPlayerSetStorageValue(pid, CTF.storages.redFlag, -1) doRemoveCondition(pid, CONDITION_OUTFIT) end else return false end end }
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.