Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado

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

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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo