Ir para conteúdo
  • Cadastre-se

Normal ERRO EVENTO DEFEND THE TOWER [DTT]


Posts Recomendados

Olá galerinha estou aqui novamente para pedir ajuda pra solucionar um erro no evento [DEFEND THE TOWER]

 

erro ao iniciar o evento :

 

Data/Globalevents/Scripts/Events/DTT.lua

Spoiler

function onTime()
	dtt.open()
    return true
end

 

 

 

erro DTT2.jpg

 

 

erro ao finalizar o evento :

 

Data/Creaturescript/Scripts/Events/DTT.lua

Spoiler

function onLogin(cid)
    registerCreatureEvent(cid, "dttDeath")
    registerCreatureEvent(cid, "dttPrepare")
    registerCreatureEvent(cid, "dttStats")
    registerCreatureEvent(cid, "dttOutfit")
    registerCreatureEvent(cid, "dttKill") 
    registerCreatureEvent(cid, "dttCombat")
    if (getPlayerStorageValue(cid, dtt.storage.team_blue) == 1) or (getPlayerStorageValue(cid, dtt.storage.team_red) == 1) then
        dtt.cleanPlayer(cid)
    end
    if (dtt.getBonusExp(cid)) then
        doPlayerSendTextMessage(cid,25, "[DEFEND THE TOWER] Voce esta com "..dtt.bonus_rate.."x de bonus experiencia.")
    end
    return true
end

--Preparar jogadores pra morte
function onPrepareDeath(cid, deathList)
    if not isPlayer(cid) then
    	return true
    end

    if (getPlayerStorageValue(cid, dtt.storage.team_blue) == 1) or (getPlayerStorageValue(cid, dtt.storage.team_red) == 1) then
        local strings = {""}
        local j, position, corpse = 1, 1, 0
        --Dropar corpo ficticio
        for _, pid in ipairs(deathList) do
            if isCreature(pid) == true then
                strings[position] = j == 1 and "" or strings[position] .. ", "
                strings[position] = strings[position] .. getCreatureName(pid) .. ""
                j = j + 1
            else
                strings[position] = j == 1 and "" or strings[position] .. ", "
                strings[position] = strings[position] .."a field item"
                j = j + 1
            end
        end
        for i, str in ipairs(strings) do
            if(str:sub(str:len()) ~= ",") then
                str = str .. "."
            end
            desc = "You recognize "
            desc = desc .. "" .. getCreatureName(cid) .. ". He was killed by " .. str
        end
        if(getPlayerSex(cid) == 1) then
            corpse = doCreateItem(3058, getCreaturePosition(cid))
        else
            corpse = doCreateItem(3065, getCreaturePosition(cid))
        end
        doItemSetAttribute(corpse, "description", desc)
        dtt.setDelay(cid)
        dtt.getDelay(cid)
    end

    --Adicionando contagem de frags
    if (getPlayerStorageValue(cid, dtt.storage.team_blue) == 1) then
        setGlobalStorageValue(dtt.storage.kill_blue, (getGlobalStorageValue(dtt.storage.kill_blue)+1))
        doPlayerSetTown(cid, dtt.townid.blue)
    end
    if (getPlayerStorageValue(cid, dtt.storage.team_red) == 1) then
        setGlobalStorageValue(dtt.storage.kill_red, (getGlobalStorageValue(dtt.storage.kill_red)+1))
        doPlayerSetTown(cid, dtt.townid.red)
    end
    return true
end

--Atacar jogadores do mesmo time
function onCombat(cid, target)
    --Membros do mesmo time se atacando
    if isPlayer(cid) and isPlayer(target) then
        if (getPlayerStorageValue(cid, dtt.storage.team_blue) == 1) and (getPlayerStorageValue(target, dtt.storage.team_blue) == 1) then
		  doPlayerSendCancel(cid, "[DEFEND THE TOWER] Nao se pode atacar um membro do mesmo time.") 
		  return false
	   end
	   if (getPlayerStorageValue(cid, dtt.storage.team_red) == 1) and (getPlayerStorageValue(target, dtt.storage.team_red) == 1) then
		  doPlayerSendCancel(cid, "[DEFEND THE TOWER] Nao se pode atacar um membro do mesmo time.") 
		  return false
	   end
    end

    --Membro time azul atacando propria torre
    if getPlayerStorageValue(cid, dtt.storage.team_blue) == 1 and isMonster(target) then
        if (getCreatureName(target) == dtt.monster.name.a1) then
            return false
        end
        if (getCreatureName(target) == dtt.monster.name.a2) then
            return false
        end
        if (getCreatureName(target) == dtt.monster.name.a3) then
            return false
        end
        if (getCreatureName(target) == dtt.monster.name.a4) then
            return false
        end
    end

    --Membro time vermelho atacando propria torre
    if getPlayerStorageValue(cid, dtt.storage.team_red) == 1 and isMonster(target) then
        if (getCreatureName(target) == dtt.monster.name.b1) then
            return false
        end
        if (getCreatureName(target) == dtt.monster.name.b2) then
            return false
        end
        if (getCreatureName(target) == dtt.monster.name.b3) then
            return false
        end
        if (getCreatureName(target) == dtt.monster.name.b4) then
            return false
        end
    end

    --Impedir que ataquem torres secundarias
    if (getCreatureName(target) == dtt.monster.name.a1) and isMonster(target) then
        if(isCreature(getThingFromPos(dtt.monster.pos.a2).uid) or isCreature(getThingFromPos(dtt.monster.pos.a3).uid) or isCreature(getThingFromPos(dtt.monster.pos.a4).uid)) then  -- SE ALGUM VALOR DER TRUE NÃO VAI PODER ATACAR 
            return false
        end
    end

    if (getCreatureName(target) == dtt.monster.name.b1) and isMonster(target) then
        if(isCreature(getThingFromPos(dtt.monster.pos.b2).uid) or isCreature(getThingFromPos(dtt.monster.pos.b3).uid) or isCreature(getThingFromPos(dtt.monster.pos.b4).uid)) then  -- SE ALGUM VALOR DER TRUE NÃO VAI PODER ATACAR 
            return false
        end
    end

    return true
end

--Bonus exp
function onKill(cid, target)
    if (dtt.getBonusExp(cid)) and isMonster(target) then     
        doPlayerAddExp(cid, getMonsterInfo(getCreatureName(target)).experience * dtt.bonus_rate)
    end
    return true
end

--Aviso de attack sobre as torres
function onStatsChange(cid, attacker, type, combat, value)
    if not isPlayer(attacker) then
        return true
    end

    -- Avisar que as torres estão sendo atacadas | a2 =  top, a3 = middle, a4 = bottom.
    if (type == STATSCHANGE_HEALTHLOSS) and (getCreatureName(cid) == dtt.monster.name.a2) then
        dtt.warningAttack(cid, "azul do topo", dtt.storage.team_blue) 
    end
    if (type == STATSCHANGE_HEALTHLOSS) and (getCreatureName(cid) == dtt.monster.name.a3) then
        dtt.warningAttack(cid, "azul do meio", dtt.storage.team_blue) 
    end
    if (type == STATSCHANGE_HEALTHLOSS) and (getCreatureName(cid) == dtt.monster.name.a4) then
        dtt.warningAttack(cid, "azul de baixo", dtt.storage.team_blue)   
    end
    if (type == STATSCHANGE_HEALTHLOSS) and (getCreatureName(cid) == dtt.monster.name.b2) then
        dtt.warningAttack(cid, "vermelha do topo", dtt.storage.team_red) 
    end
    if (type == STATSCHANGE_HEALTHLOSS) and (getCreatureName(cid) == dtt.monster.name.b3) then
        dtt.warningAttack(cid, "vermelha do meio", dtt.storage.team_red) 
    end
    if (type == STATSCHANGE_HEALTHLOSS) and (getCreatureName(cid) == dtt.monster.name.b4) then
        dtt.warningAttack(cid, "vermelha de baixo", dtt.storage.team_red) 
    end

    return true
end 

--Impedindo troca de outfit durante o evento
function onOutfit(cid, old, current)
    if getPlayerStorageValue(cid, dtt.storage.team_blue) == 1 or getPlayerStorageValue(cid, dtt.storage.team_red) == 1  then
        doPlayerSendCancel(cid, dtt.msg.outfit)
        return false
    end
    return true
end

--Tratando morte dos montros buff e torres
function onDeath(cid, corpse, mostDamageKiller) 
--Avisos de morte torres time azul
if getCreatureName(cid) == dtt.monster.name.a2 then
    broadcastMessage("[DEFEND THE TOWER] A torre azul do topo foi destruida.", MESSAGE_EVENT_ADVANCE)
    doCreateItem(9596, dtt.monster.pos.a2)
    setGlobalStorageValue(dtt.storage.tower_red, (getGlobalStorageValue(dtt.storage.tower_red)+1))
end 

if getCreatureName(cid) == dtt.monster.name.a3 then
    broadcastMessage("[DEFEND THE TOWER] A torre azul do meio foi destruida.", MESSAGE_EVENT_ADVANCE)
    doCreateItem(9596, dtt.monster.pos.a3)
    setGlobalStorageValue(dtt.storage.tower_red, (getGlobalStorageValue(dtt.storage.tower_red)+1))
end

if getCreatureName(cid) == dtt.monster.name.a4 then
    broadcastMessage("[DEFEND THE TOWER] A torre azul de baixo foi destruida.", MESSAGE_EVENT_ADVANCE)
    doCreateItem(9596, dtt.monster.pos.a4)
    setGlobalStorageValue(dtt.storage.tower_red, (getGlobalStorageValue(dtt.storage.tower_red)+1))
end

--Avisos de morte torres time vermelho
if getCreatureName(cid) == dtt.monster.name.b2 then
    broadcastMessage("[DEFEND THE TOWER] A torre vermelha do topo foi destruida.", MESSAGE_EVENT_ADVANCE)
    doCreateItem(9596, dtt.monster.pos.b2)
    setGlobalStorageValue(dtt.storage.tower_blue, (getGlobalStorageValue(dtt.storage.tower_blue)+1))
end 

if getCreatureName(cid) == dtt.monster.name.b3 then
    broadcastMessage("[DEFEND THE TOWER] A torre vermelha do meio foi destruida.", MESSAGE_EVENT_ADVANCE)
    doCreateItem(9596, dtt.monster.pos.b3)
    setGlobalStorageValue(dtt.storage.tower_blue, (getGlobalStorageValue(dtt.storage.tower_blue)+1))
end

if getCreatureName(cid) == dtt.monster.name.b4 then
    broadcastMessage("[DEFEND THE TOWER] A torre vermelha de baixo foi destruida.", MESSAGE_EVENT_ADVANCE)
    doCreateItem(9596, dtt.monster.pos.b4)
    setGlobalStorageValue(dtt.storage.tower_blue, (getGlobalStorageValue(dtt.storage.tower_blue)+1))
end


--Aviso ultimas torres e abertura do teleporte
if getCreatureName(cid) == dtt.monster.name.a1 then
    dtt.removeMonsters()
    setGlobalStorageValue(dtt.storage.win, "red")
    setGlobalStorageValue(dtt.storage.tower_red, (getGlobalStorageValue(dtt.storage.tower_red)+1))
    dtt.close()
    broadcastMessage(dtt.msg.win_team_red, MESSAGE_EVENT_ADVANCE)
    dtt.resultBattle()
end 

--Aviso ultimas torres e abertura do teleporte
if getCreatureName(cid) == dtt.monster.name.b1 then
    dtt.removeMonsters()
    setGlobalStorageValue(dtt.storage.win, "blue")
    setGlobalStorageValue(dtt.storage.tower_blue, (getGlobalStorageValue(dtt.storage.tower_blue)+1))
    dtt.close()
    broadcastMessage(dtt.msg.win_team_blue, MESSAGE_EVENT_ADVANCE)
    dtt.resultBattle()
end 

--Verificando buff sorcerer and paladin
if getCreatureName(cid) == dtt.monster.name.buff1 then
    if (getPlayerStorageValue(mostDamageKiller[1], dtt.storage.team_blue) == 1) then
        dtt.setBuff(dtt.storage.team_blue, 1, 3)
        for _, index in ipairs(dtt.getPlayersInEvent()) do
            if getPlayerStorageValue(index.pid, dtt.storage.team_blue) == 1 then
                doPlayerSendTextMessage(index.pid, 25, "[DEFEND THE TOWER] Os sorcerers e paladinos do seu time receberao buff, utilize as magias wizard buff ou archer buff.")  
            end
        end
    else
        dtt.setBuff(dtt.storage.team_red, 1, 3)
        for _, index in ipairs(dtt.getPlayersInEvent()) do
            if getPlayerStorageValue(index.pid, dtt.storage.team_red) == 1 then
                doPlayerSendTextMessage(index.pid, 25, "[DEFEND THE TOWER] Os sorcerers e paladinos do seu time receberao buff, utilize as magias wizard buff ou archer buff.")  
            end
        end
    end
end

--Verificando buff druid and knight
if getCreatureName(cid) == dtt.monster.name.buff2 then
    if (getPlayerStorageValue(mostDamageKiller[1], dtt.storage.team_blue) == 1) then
        dtt.setBuff(dtt.storage.team_blue, 2, 4)
        for _, index in ipairs(dtt.getPlayersInEvent()) do
            if getPlayerStorageValue(index.pid, dtt.storage.team_blue) == 1 then
                doPlayerSendTextMessage(index.pid, 25, "[DEFEND THE TOWER] Os druids e knights do seu time receberao buff, utilize as magias magician buff ou warrior buff.")  
            end
        end
    else
        dtt.setBuff(dtt.storage.team_red, 2, 4)
        for _, index in ipairs(dtt.getPlayersInEvent()) do
            if getPlayerStorageValue(index.pid, dtt.storage.team_red) == 1 then
                doPlayerSendTextMessage(index.pid, 25, "[DEFEND THE TOWER] Os druids e knights do seu time receberao buff, utilize as magias magician buff ou warrior buff.")  
            end
        end
    end
end
return true
end

 

 

 

AGRADEÇO DEIS DE JÁ E VOU REPUTAR QUEM PUDER OU TENTAR AJUDAR !!!!

 

erro DTT3.jpg

Editado por Micheel15 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Respostas 43
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Galera, comentar "UP" nos tópicos é proibido, leiam as regras: 2.7 - Dar "UP" para subir tópicos: É totalmente proibido comentar "UP" para subir tópicos, caso você tenha a intenção você pode ut

Posted Images

@Sekk

a lib está abaixo :

 

 

\data\lib\DTT.lua

Spoiler

-- This script is part of Defend the Towers
-- Copyright (C) 2016 ChaitoSoft
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

dtt = {
    pos = {
        temple_wait = {x=438, y=1138, z=7}, -- sala de espera
        tp_create = {x=36, y=151, z=7}, -- onde teleport de entrada sera criado
    },

    --Configurações de abertura
    days_open = {1, 2, 3, 4, 5, 6, 7}, -- dias de semana que vai abrir
    min_players = 1, -- numero minimo de jogadores em cada time
    min_level = 200, -- level minimo permitido para entrar no evento
    wait_time = 3, -- tempo de espera para iniciar o evento, em minutos
    block_mc = false, -- false para permitir mcs no evento

    --Configuraçõe gerais
    delay_time = 10, -- tempo em segundos de delay ao morrer
    townid = {init = 1, blue = 3, red = 4}, -- init = templo da cidade, blue = templo do time azul, red = templo do time vermelho

    --Configurações dos premios
    reward_items = {6527, 6527},
    bonus_time = 240, -- experiencia bonus em minutos
    bonus_rate = 1, -- porcentagem de experiencia bonus: 1 = 100% | 0.3 = 30%

    --Configuração dos monstros
    monster = {
    	pos = {
       		--Monstros do time azul
        	a1 = {x=396, y=1138, z=6, stackpos=253}, -- Blue supreme tower
        	a2 = {x=429, y=1107, z=6, stackpos=253}, -- Blue top tower
        	a3 = {x=430, y=1135, z=6, stackpos=253}, -- Blue middle tower
        	a4 = {x=429, y=1167, z=6, stackpos=253}, -- Blue bottom tower
        	-- Monstros do time vermelho
        	b1 = {x=477, y=1138, z=6, stackpos=253}, -- Red supreme tower
        	b2 = {x=447, y=1107, z=6, stackpos=253}, -- Red top tower 
        	b3 = {x=445, y=1139, z=6, stackpos=253}, -- Red middle tower 
        	b4 = {x=447, y=1167, z=6, stackpos=253}, -- Red bottom tower
        	-- Monstros buff na jungle
       		mbuff1 = {x=440, y=1122, z=6, stackpos=253}, -- Buff sorecer and paladin 1 + 2
        	mbuff2 = {x=434, y=1155, z=6, stackpos=253}, -- Buff druid and knight 2 + 2
    	},
        ---------------------------------------------------
        --NÃO MEXA DAQUI PRA BAIXO -----
        ------------------------------------------------
        name = {
        	-- Azul
       		a1 = "blue supreme tower", -- Base Tower
        	a2 = "blue top tower", -- Top lane
        	a3 = "blue middle tower", -- Middle lane
        	a4 = "blue bottom tower", -- Bottom lane
        	-- Vermelho
        	b1 = "red supreme tower", -- Base Tower
        	b2 = "red top tower", -- Top lane
        	b3 = "red middle tower", -- Middle lane
        	b4 = "red bottom tower", -- Bottom lane

        	--Monstros Buff
        	buff1 = "serpent of jungle",
        	buff2 = "spider of jungle",
    	},
    },

    --Storages alocadas
    storage = {
        win = 87771, -- GLOBAL STORAGE VENCEDOR
        kill_blue = 87775, -- GLobal storage frags team blue
        kill_red = 87776, -- GLobal storage frags team red
        tower_blue = 87777, -- GLobal storage towers team blue
        tower_red = 87778, -- GLobal storage towers team red
        team_blue = 9998, -- PLAYER STORAGE TIME A
        team_red = 9999, -- PLAYER STORAGE TIME A
        buffvoc1 = 7001, -- PLAYER STORAGE BUFF
        buffvoc2 = 7002, -- PLAYER STORAGE BUFF
        buffvoc3 = 7003, -- PLAYER STORAGE BUFF
        buffvoc4 = 7004, -- PLAYER STORAGE BUFF
        exp_bonus = 7005, --PLAYER STORAGE EXP BONUS
        delay = 7006, --PLAYER STORAGE DELAY
    },

    msg = {
        win_team_blue = "[Defend The Tower] O time azul acabou de derrotar a Suprema Torre Vermelha e vencer o evento.",
        win_team_red = "[Defend The Tower] O time vermelho acabou de derrotar a Suprema Torre Azul e vencer o evento. ",
        reward = "[Defend The Tower] Seu time Venceu, voce recebeu como premio o dobro de experiencia por 4 horas automaticamente e 80 event coins, desejamos parabens.",
        no_reward = "[Defend The Tower] Derrota, confira as estatisticas da partida no site, desejamos mais sorte na proxima.",
        warning = "[Defend The Tower] Acabou de abrir, acesse o teleporte do templo principal para participar. Inicia em minutos...",
        start = "[Defend The Tower] Fechou o teleporte de entrada e iniciou o evento boa sorte aos times.",
        cancel = "[Defend The Tower] Fechou o teleporte de entrada e cancelou o evento por falta de jogadores.",
        outfit = "[Defend The Tower] Voce nao pode trocar de outfit durante o evento.",
    },
}

local conditionBlue = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionBlue, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(conditionBlue, {lookType = 128, lookHead = 86, lookBody = 86, lookLegs = 86, lookFeet = 86})
local conditionRed = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionRed, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(conditionRed, {lookType = 128, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94})


--Metodos set
function dtt.setDelay(cid)
    doPlayerSetStorageValue(cid, dtt.storage.delay, os.time()+(60*dtt.delay_time))
    return true
end

function dtt.setBuff(storTeam, voc1, voc2)
    local storBuff1
    local storBuff2
    if (voc1 == 1) and (voc2 == 3) then
        storBuff1 = dtt.storage.buffvoc1
        storBuff2 = dtt.storage.buffvoc3
    end
    if (voc1 == 2) and (voc2 == 4) then
        storBuff1 = dtt.storage.buffvoc2
        storBuff2 = dtt.storage.buffvoc4
    end
    for _, index in ipairs(dtt.getPlayersInEvent()) do
        if getPlayerStorageValue(index.pid, storTeam) == 1 then
            if (isInArray({voc1, (voc1+4), (voc1+8)}, getPlayerVocation(index.pid))) then    
                doPlayerSetStorageValue(index.pid, storBuff1, 1)
            end
            if (isInArray({voc2, (voc2+4), (voc2+8)}, getPlayerVocation(index.pid))) then  
                doPlayerSetStorageValue(index.pid, storBuff2, 1)
            end
        end
    end
    return true
end

function dtt.setBonusExp(cid)
    doPlayerSetStorageValue(cid, dtt.storage.exp_bonus, os.time()+(60*dtt.bonus_time))
    return true
end

function dtt.setTeam()
	local tmp = 1
	local result = db.getResult("SELECT * FROM `dtt_players`;")
	if result:getID() ~= -1 then
		repeat
			pid = tonumber(result:getDataInt("pid"))
			if(tmp % 2 == 0) then
				db.query("UPDATE `dtt_players` SET `team` = '0' WHERE `pid` = "..pid..";")
				tmp = (tmp+1)
			else
				db.query("UPDATE `dtt_players` SET `team` = '1' WHERE `pid` = "..pid..";")
				tmp = (tmp+1)
			end
		until(not result:next())
	end
	result:free()
end

--Metodos GET
function dtt.getPlayersInEvent()
    local result = db.getResult("SELECT * FROM `dtt_players`;")
    CACHE_PLAYERS = {}
	if result:getID() ~= -1 then
		repeat
			pid  = tonumber(result:getDataInt("pid"))
			team  = tonumber(result:getDataInt("team")) -- 0 = blue, 1 = red
            ip  = tonumber(result:getDataInt("ip"))
			table.insert(CACHE_PLAYERS, {["pid"]=pid,["team"]=team,["ip"]=ip }) 
		until(not result:next())
		result:free()
		return CACHE_PLAYERS
	end
    return false 
end


function dtt.getDelay(cid)
    local statsDelay = getPlayerStorageValue(cid, dtt.storage.delay)
    if (statsDelay - os.time() > 0) then
		local delay = 0
        local times = dtt.delay_time
        doCreatureSetNoMove(cid, true)
        for i = times, 0, -1 do
        	if isPlayer(cid) then
            	addEvent(doPlayerSendCancel, delay, cid, "[Defend The Tower] Volte para a arena em "..i..".")
            end
            delay = 2000 + delay                 
			if (i == 0) and (isPlayer(cid)) then
				addEvent(dtt.enableMove, (delay+1000), cid)
			end
         end
    else
    	return false
    end
    return true
end

function dtt.getBonusExp(cid)
    local statsBonus = getPlayerStorageValue(cid, dtt.storage.exp_bonus)
    return statsBonus - os.time() > 0
end

--Outros métodos

function dtt.enableMove(cid)
    doCreatureSetNoMove(cid, false)
	doPlayerSendCancel(cid, "[Defend The Tower] GO GO GO! seu time o aguarda.")         
    setPlayerStorageValue(cid, dtt.storage.delay, 0)
    return true
end

function dtt.resetGlobalStorages()
    setGlobalStorageValue(dtt.storage.win, -1)
    setGlobalStorageValue(dtt.storage.kill_blue, 0)
    setGlobalStorageValue(dtt.storage.kill_red, 0)
    setGlobalStorageValue(dtt.storage.tower_blue, 0)
    setGlobalStorageValue(dtt.storage.tower_red, 0)
    print("[Defend The Tower] Todos os globais storages foram resetados...")
    return true
end

function dtt.resetPlayerStorages()
	if dtt.getPlayersInEvent() then
		for _, index in ipairs(dtt.getPlayersInEvent()) do
    		doPlayerSetStorageValue(index.pid, dtt.storage.team_blue, 0)
    		doPlayerSetStorageValue(index.pid, dtt.storage.team_red, 0)
			doPlayerSetStorageValue(index.pid, dtt.storage.buffvoc1, 0)
			doPlayerSetStorageValue(index.pid, dtt.storage.buffvoc2, 0)
			doPlayerSetStorageValue(index.pid, dtt.storage.buffvoc3, 0)
			doPlayerSetStorageValue(index.pid, dtt.storage.buffvoc4, 0)
		end
		print("[Defend The Tower] Todos os players storages foram resetados...")  
    	return true
    else
    	print("[Defend The Tower] Tabela vazia...")  
    end
    return true
end

function dtt.createMonsters()
	doSummonCreature(dtt.monster.name.a1, dtt.monster.pos.a1)
	doSummonCreature(dtt.monster.name.a2, dtt.monster.pos.a2)
	doSummonCreature(dtt.monster.name.a3, dtt.monster.pos.a3)
	doSummonCreature(dtt.monster.name.a4, dtt.monster.pos.a4)
    doSummonCreature(dtt.monster.name.b1, dtt.monster.pos.b1)
    doSummonCreature(dtt.monster.name.b2, dtt.monster.pos.b2)
    doSummonCreature(dtt.monster.name.b3, dtt.monster.pos.b3)
    doSummonCreature(dtt.monster.name.b4, dtt.monster.pos.b4)
    doSummonCreature(dtt.monster.name.buff1, dtt.monster.pos.mbuff1)
    doSummonCreature(dtt.monster.name.buff2, dtt.monster.pos.mbuff2)
    print("[Defend The Tower] Os monstros da arena battle foram sumonados...")  
	return true
end

function dtt.countPlayers()
	local result = db.getResult("SELECT * FROM `dtt_players`;")
	local qntPlayers = 0
	if result:getID() ~= -1 then
		repeat
			qntPlayers = (qntPlayers+1)
		until(not result:next())
	end
	return qntPlayers
end

function dtt.trucatePlayersInEvent()
	local result = db.getResult("SELECT * FROM `dtt_players`;")
    if result:getID() ~= -1 then
    	db.query("TRUNCATE TABLE `dtt_players`;")  
    	print("[Defend The Tower] Todos dados da tabela 'dtt_players' foram apagados...")
    end
    return true
end
        
-- FUNÇÕES PRINCIPAIS
-- ABERTURA DO EVENTO
function dtt.open()
	local time = os.date("*t")
	local timeopen1 = math.ceil(dtt.wait_time / 4)
	local timeopen2 = math.ceil(dtt.wait_time / 2)
	if (isInArray(dtt.days_open, time.wday)) then
		local tp = doCreateItem(1387, dtt.pos.tp_create)
        doRemoveCreature(getThingfromPos(dtt.pos.tp_create).uid)
        doItemSetAttribute(tp, "aid", 9801)
		dtt.resetGlobalStorages()
		dtt.trucatePlayersInEvent()
		dtt.removeItemsTower()
		doBroadcastMessage(dtt.msg.warning)
		addEvent(doBroadcastMessage, timeopen1*1000*60, "[Defend The Tower] - Resta(m) ".. timeopen2 .." minuto(s) para iniciar o evento!")
		if (timeopen2 ~= timeopen1) then
			addEvent(doBroadcastMessage, timeopen2*1000*60, "[Defend The Tower] - Resta(m) ".. timeopen1 .." minuto(s) para iniciar o evento!")
		end
		addEvent(dtt.start, dtt.wait_time*1000*60,nil)
	end
    return true
end

-- COMEÇO DO EVENTO
function dtt.start()
	local tp = getTileItemById(dtt.pos.tp_create, 1387).uid 
	doRemoveItem(tp) 
	if (dtt.min_players <= dtt.countPlayers()) then
		dtt.createMonsters()
		dtt.sendPlayersToEvent()
		doBroadcastMessage(dtt.msg.start)
	else
		doBroadcastMessage(dtt.msg.cancel)
	end
	return true
end

-- FECHANDO O EVENTO
function dtt.close()
    for _, index in ipairs(dtt.getPlayersInEvent()) do
        doRemoveCondition(index.pid, CONDITION_OUTFIT)
        doRemoveCondition(index.pid, CONDITION_INFIGHT)
        doPlayerSetPzLocked(index.pid, false)
    	if (getGlobalStorageValue(dtt.storage.win) == "blue") then
            if (index.team == 0) then 
                doPlayerSetTown(index.pid, dtt.townid.init)   
                doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.init))
                dtt.reward(index.pid)
            else
                doPlayerSetTown(index.pid, dtt.townid.init)   
                doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.init))
                doPlayerSendTextMessage(index.pid, 25, dtt.msg.no_reward)
            end
        end
        if (getGlobalStorageValue(dtt.storage.win) == "red") then
            if (index.team == 1) then 
                doPlayerSetTown(index.pid, dtt.townid.init)   
                doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.init))
                dtt.reward(index.pid)
            else
                doPlayerSetTown(index.pid, dtt.townid.init)   
                doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.init))
                doPlayerSendTextMessage(index.pid, 25, dtt.msg.no_reward)
            end
        end
    end
    --- limpando storage dos jogadores
    dtt.resetPlayerStorages()
    return true
end


function dtt.sendPlayersToEvent()
	dtt.setTeam()
	dtt.resetPlayerStorages()
    for _, index in ipairs(dtt.getPlayersInEvent()) do
        if (index.team == 0) then
            doAddCondition(index.pid, conditionBlue)
			doPlayerSetTown(index.pid, dtt.townid.blue)
            doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.blue))
			doPlayerSetStorageValue(index.pid, dtt.storage.team_blue, 1)
		end
		if (index.team == 1) then
            doAddCondition(index.pid, conditionRed)
			doPlayerSetTown(index.pid, dtt.townid.red)
            doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.red))
			doPlayerSetStorageValue(index.pid, dtt.storage.team_red, 1)
		end
	end	
	return true
end

function dtt.reward(pid)
	local random_item = dtt.reward_items[math.random(1, #dtt.reward_items)]
    doPlayerAddItem(pid, 6527, 80)
    dtt.setBonusExp(pid)
    doPlayerSendTextMessage(pid, 25, dtt.msg.reward)   
    return true
end

function dtt.removeItemsTower()
    if (getTileItemById(dtt.monster.pos.a2, 9596).uid) then
        doRemoveItem(getTileItemById(dtt.monster.pos.a2, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.a3, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.a4, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.b2, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.b3, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.b4, 9596).uid)
        print("[DEFEND THE TOWERS] Items torre limpos da arena de batalha...")
    else
        print("[DEFEND THE TOWERS] Nenhum item torre na arena de batalha...")
    end
	return true
end


function dtt.resultBattle()
	local frags_blue = getGlobalStorageValue(dtt.storage.kill_blue)
    local frags_red = getGlobalStorageValue(dtt.storage.kill_red)
    local towers_blue = getGlobalStorageValue(dtt.storage.tower_blue)
    local towers_red = getGlobalStorageValue(dtt.storage.tower_red)
    local hora = os.date("%X")
    local data = os.date("%x")
    db.query("INSERT INTO `dtt_results`  VALUES ('', ".. frags_blue ..  ",".. frags_red ..", ".. towers_blue ..", ".. towers_red ..", ".. db.escapeString(data) ..", ".. db.escapeString(hora) ..");")  
    return true
end

function dtt.warningAttack(cid, msg, storTeam)
    local lifePercent = 100 / (getCreatureMaxHealth(cid) / getCreatureHealth(cid))
    if (lifePercent <= 100) and (lifePercent >= 99.9) then
    	for _, index in ipairs(dtt.getPlayersInEvent()) do
    		if getPlayerStorageValue(index.pid, storTeam) == 1 then
   			    doPlayerSendTextMessage(index.pid, 25, "[Defend The Tower] A torre "..msg.." esta sob ataque. Corra para defender!")  
   			end
   		end
    end
    if (lifePercent <= 50) and (lifePercent >= 49.9) then
    	for _, index in ipairs(dtt.getPlayersInEvent()) do
    		if getPlayerStorageValue(index.pid, storTeam) == 1 then
   			    doPlayerSendTextMessage(index.pid, 25, "[Defend The Tower] A torre "..msg.." esta sob ataque. Corra para defender!")  
   			end
   		end
    end
    if (lifePercent <= 20) and (lifePercent >= 19.9) then
    	for _, index in ipairs(dtt.getPlayersInEvent()) do
    		if getPlayerStorageValue(index.pid, storTeam) == 1 then
   			    doPlayerSendTextMessage(index.pid, 25, "[Defend The Tower] A torre "..msg.." esta sob ataque. Corra para defender!")  
   			end
   		end
    end
    return true
end

function dtt.removeMonsters()
    doRemoveCreature(getThingfromPos(dtt.monster.pos.a1).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.a2).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.a3).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.a4).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.b1).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.b2).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.b3).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.b4).uid)
    return true
end

function dtt.cleanPlayer(cid)
    doPlayerSetTown(cid, dtt.townid.init)   
    doTeleportThing(cid, getTownTemplePosition(dtt.townid.init))
    doPlayerSetStorageValue(cid, dtt.storage.team_blue, 0)
    doPlayerSetStorageValue(cid, dtt.storage.team_red, 0)
    doPlayerSetStorageValue(cid, dtt.storage.buffvoc1, 0)
    doPlayerSetStorageValue(cid, dtt.storage.buffvoc2, 0)
    doPlayerSetStorageValue(cid, dtt.storage.buffvoc3, 0)
    doPlayerSetStorageValue(cid, dtt.storage.buffvoc4, 0)
    return true
end



 

 

 

 

Editado por Micheel15 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Sekk

 

deu esse erro no distro ao entrar no evento :

 

 

teste DTT.jpg

 

e no final do evento acontece esse erro abaixo :

 

 

teste DTT.jpg

 

me parece ser o mesmo erro !!!

Editado por Micheel15 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
-- This script is part of Defend the Towers
-- Copyright (C) 2016 ChaitoSoft
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

dtt = {
    pos = {
        temple_wait = {x=438, y=1138, z=7}, -- sala de espera
        tp_create = {x=36, y=151, z=7}, -- onde teleport de entrada sera criado
    },

    --Configurações de abertura
    days_open = {1, 2, 3, 4, 5, 6, 7}, -- dias de semana que vai abrir
    min_players = 1, -- numero minimo de jogadores em cada time
    min_level = 200, -- level minimo permitido para entrar no evento
    wait_time = 3, -- tempo de espera para iniciar o evento, em minutos
    block_mc = false, -- false para permitir mcs no evento

    --Configuraçõe gerais
    delay_time = 10, -- tempo em segundos de delay ao morrer
    townid = {init = 1, blue = 3, red = 4}, -- init = templo da cidade, blue = templo do time azul, red = templo do time vermelho

    --Configurações dos premios
    reward_items = {6527, 6527},
    bonus_time = 240, -- experiencia bonus em minutos
    bonus_rate = 1, -- porcentagem de experiencia bonus: 1 = 100% | 0.3 = 30%

    --Configuração dos monstros
    monster = {
    	pos = {
       		--Monstros do time azul
        	a1 = {x=396, y=1138, z=6, stackpos=253}, -- Blue supreme tower
        	a2 = {x=429, y=1107, z=6, stackpos=253}, -- Blue top tower
        	a3 = {x=430, y=1135, z=6, stackpos=253}, -- Blue middle tower
        	a4 = {x=429, y=1167, z=6, stackpos=253}, -- Blue bottom tower
        	-- Monstros do time vermelho
        	b1 = {x=477, y=1138, z=6, stackpos=253}, -- Red supreme tower
        	b2 = {x=447, y=1107, z=6, stackpos=253}, -- Red top tower 
        	b3 = {x=445, y=1139, z=6, stackpos=253}, -- Red middle tower 
        	b4 = {x=447, y=1167, z=6, stackpos=253}, -- Red bottom tower
        	-- Monstros buff na jungle
       		mbuff1 = {x=440, y=1122, z=6, stackpos=253}, -- Buff sorecer and paladin 1 + 2
        	mbuff2 = {x=434, y=1155, z=6, stackpos=253}, -- Buff druid and knight 2 + 2
    	},
        ---------------------------------------------------
        --NÃO MEXA DAQUI PRA BAIXO -----
        ------------------------------------------------
        name = {
        	-- Azul
       		a1 = "blue supreme tower", -- Base Tower
        	a2 = "blue top tower", -- Top lane
        	a3 = "blue middle tower", -- Middle lane
        	a4 = "blue bottom tower", -- Bottom lane
        	-- Vermelho
        	b1 = "red supreme tower", -- Base Tower
        	b2 = "red top tower", -- Top lane
        	b3 = "red middle tower", -- Middle lane
        	b4 = "red bottom tower", -- Bottom lane

        	--Monstros Buff
        	buff1 = "serpent of jungle",
        	buff2 = "spider of jungle",
    	},
    },

    --Storages alocadas
    storage = {
        win = 87771, -- GLOBAL STORAGE VENCEDOR
        kill_blue = 87775, -- GLobal storage frags team blue
        kill_red = 87776, -- GLobal storage frags team red
        tower_blue = 87777, -- GLobal storage towers team blue
        tower_red = 87778, -- GLobal storage towers team red
        team_blue = 9998, -- PLAYER STORAGE TIME A
        team_red = 9999, -- PLAYER STORAGE TIME A
        buffvoc1 = 7001, -- PLAYER STORAGE BUFF
        buffvoc2 = 7002, -- PLAYER STORAGE BUFF
        buffvoc3 = 7003, -- PLAYER STORAGE BUFF
        buffvoc4 = 7004, -- PLAYER STORAGE BUFF
        exp_bonus = 7005, --PLAYER STORAGE EXP BONUS
        delay = 7006, --PLAYER STORAGE DELAY
    },

    msg = {
        win_team_blue = "[Defend The Tower] O time azul acabou de derrotar a Suprema Torre Vermelha e vencer o evento.",
        win_team_red = "[Defend The Tower] O time vermelho acabou de derrotar a Suprema Torre Azul e vencer o evento. ",
        reward = "[Defend The Tower] Seu time Venceu, voce recebeu como premio o dobro de experiencia por 4 horas automaticamente e 80 event coins, desejamos parabens.",
        no_reward = "[Defend The Tower] Derrota, confira as estatisticas da partida no site, desejamos mais sorte na proxima.",
        warning = "[Defend The Tower] Acabou de abrir, acesse o teleporte do templo principal para participar. Inicia em minutos...",
        start = "[Defend The Tower] Fechou o teleporte de entrada e iniciou o evento boa sorte aos times.",
        cancel = "[Defend The Tower] Fechou o teleporte de entrada e cancelou o evento por falta de jogadores.",
        outfit = "[Defend The Tower] Voce nao pode trocar de outfit durante o evento.",
    },
}

local conditionBlue = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionBlue, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(conditionBlue, {lookType = 128, lookHead = 86, lookBody = 86, lookLegs = 86, lookFeet = 86})
local conditionRed = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionRed, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(conditionRed, {lookType = 128, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94})


--Metodos set
function dtt.setDelay(cid)
    doPlayerSetStorageValue(cid, dtt.storage.delay, os.time()+(60*dtt.delay_time))
    return true
end

function dtt.setBuff(storTeam, voc1, voc2)
    local storBuff1
    local storBuff2
    if (voc1 == 1) and (voc2 == 3) then
        storBuff1 = dtt.storage.buffvoc1
        storBuff2 = dtt.storage.buffvoc3
    end
    if (voc1 == 2) and (voc2 == 4) then
        storBuff1 = dtt.storage.buffvoc2
        storBuff2 = dtt.storage.buffvoc4
    end
    for _, index in ipairs(dtt.getPlayersInEvent()) do
        if getPlayerStorageValue(index.pid, storTeam) == 1 then
            if (isInArray({voc1, (voc1+4), (voc1+8)}, getPlayerVocation(index.pid))) then    
                doPlayerSetStorageValue(index.pid, storBuff1, 1)
            end
            if (isInArray({voc2, (voc2+4), (voc2+8)}, getPlayerVocation(index.pid))) then  
                doPlayerSetStorageValue(index.pid, storBuff2, 1)
            end
        end
    end
    return true
end

function dtt.setBonusExp(cid)
    doPlayerSetStorageValue(cid, dtt.storage.exp_bonus, os.time()+(60*dtt.bonus_time))
    return true
end

function dtt.setTeam()
	local tmp = 1
	local result = db.getResult("SELECT * FROM `dtt_players`;")
	if result:getID() ~= -1 then
		repeat
			pid = tonumber(result:getDataInt("pid"))
			if(tmp % 2 == 0) then
				db.query("UPDATE `dtt_players` SET `team` = '0' WHERE `pid` = "..pid..";")
				tmp = (tmp+1)
			else
				db.query("UPDATE `dtt_players` SET `team` = '1' WHERE `pid` = "..pid..";")
				tmp = (tmp+1)
			end
		until(not result:next())
	end
	result:free()
end

--Metodos GET
function dtt.getPlayersInEvent()
    local result = db.getResult("SELECT * FROM `dtt_players`;")
    CACHE_PLAYERS = {}
	if result:getID() ~= -1 then
		repeat
			pid  = tonumber(result:getDataInt("pid"))
			team  = tonumber(result:getDataInt("team")) -- 0 = blue, 1 = red
            ip  = tonumber(result:getDataInt("ip"))
			table.insert(CACHE_PLAYERS, {["pid"]=pid,["team"]=team,["ip"]=ip }) 
		until(not result:next())
		result:free()
		return CACHE_PLAYERS
	end
    return false 
end


function dtt.getDelay(cid)
    local statsDelay = getPlayerStorageValue(cid, dtt.storage.delay)
    if (statsDelay - os.time() > 0) then
		local delay = 0
        local times = dtt.delay_time
        doCreatureSetNoMove(cid, true)
        for i = times, 0, -1 do
        	if isPlayer(cid) then
            	addEvent(doPlayerSendCancel, delay, cid, "[Defend The Tower] Volte para a arena em "..i..".")
            end
            delay = 2000 + delay                 
			if (i == 0) and (isPlayer(cid)) then
				addEvent(dtt.enableMove, (delay+1000), cid)
			end
         end
    else
    	return false
    end
    return true
end

function dtt.getBonusExp(cid)
    local statsBonus = getPlayerStorageValue(cid, dtt.storage.exp_bonus)
    return statsBonus - os.time() > 0
end

--Outros métodos

function dtt.enableMove(cid)
    doCreatureSetNoMove(cid, false)
	doPlayerSendCancel(cid, "[Defend The Tower] GO GO GO! seu time o aguarda.")         
    setPlayerStorageValue(cid, dtt.storage.delay, 0)
    return true
end

function dtt.resetGlobalStorages()
    setGlobalStorageValue(dtt.storage.win, -1)
    setGlobalStorageValue(dtt.storage.kill_blue, 0)
    setGlobalStorageValue(dtt.storage.kill_red, 0)
    setGlobalStorageValue(dtt.storage.tower_blue, 0)
    setGlobalStorageValue(dtt.storage.tower_red, 0)
    print("[Defend The Tower] Todos os globais storages foram resetados...")
    return true
end

function dtt.resetPlayerStorages()
	if dtt.getPlayersInEvent() then
		for _, index in ipairs(dtt.getPlayersInEvent()) do
    		doPlayerSetStorageValue(index.pid, dtt.storage.team_blue, 0)
    		doPlayerSetStorageValue(index.pid, dtt.storage.team_red, 0)
			doPlayerSetStorageValue(index.pid, dtt.storage.buffvoc1, 0)
			doPlayerSetStorageValue(index.pid, dtt.storage.buffvoc2, 0)
			doPlayerSetStorageValue(index.pid, dtt.storage.buffvoc3, 0)
			doPlayerSetStorageValue(index.pid, dtt.storage.buffvoc4, 0)
		end
		print("[Defend The Tower] Todos os players storages foram resetados...")  
    	return true
    else
    	print("[Defend The Tower] Tabela vazia...")  
    end
    return true
end

function dtt.createMonsters()
	doSummonCreature(dtt.monster.name.a1, dtt.monster.pos.a1)
	doSummonCreature(dtt.monster.name.a2, dtt.monster.pos.a2)
	doSummonCreature(dtt.monster.name.a3, dtt.monster.pos.a3)
	doSummonCreature(dtt.monster.name.a4, dtt.monster.pos.a4)
    doSummonCreature(dtt.monster.name.b1, dtt.monster.pos.b1)
    doSummonCreature(dtt.monster.name.b2, dtt.monster.pos.b2)
    doSummonCreature(dtt.monster.name.b3, dtt.monster.pos.b3)
    doSummonCreature(dtt.monster.name.b4, dtt.monster.pos.b4)
    doSummonCreature(dtt.monster.name.buff1, dtt.monster.pos.mbuff1)
    doSummonCreature(dtt.monster.name.buff2, dtt.monster.pos.mbuff2)
    print("[Defend The Tower] Os monstros da arena battle foram sumonados...")  
	return true
end

function dtt.countPlayers()
	local result = db.getResult("SELECT * FROM `dtt_players`;")
	local qntPlayers = 0
	if result:getID() ~= -1 then
		repeat
			qntPlayers = (qntPlayers+1)
		until(not result:next())
	end
	return qntPlayers
end

function dtt.trucatePlayersInEvent()
	local result = db.getResult("SELECT * FROM `dtt_players`;")
    if result:getID() ~= -1 then
    	db.query("TRUNCATE TABLE `dtt_players`;")  
    	print("[Defend The Tower] Todos dados da tabela 'dtt_players' foram apagados...")
    end
    return true
end
        
-- FUNÇÕES PRINCIPAIS
-- ABERTURA DO EVENTO
function dtt.open()
	local time = os.date("*t")
	local timeopen1 = math.ceil(dtt.wait_time / 4)
	local timeopen2 = math.ceil(dtt.wait_time / 2)
	if (isInArray(dtt.days_open, time.wday)) then
	local tp = doCreateItem(1387, 1, dtt.pos.tp_create)
        doItemSetAttribute(tp, "aid", 9801)
		dtt.resetGlobalStorages()
		dtt.trucatePlayersInEvent()
		dtt.removeItemsTower()
		doBroadcastMessage(dtt.msg.warning)
		addEvent(doBroadcastMessage, timeopen1*1000*60, "[Defend The Tower] - Resta(m) ".. timeopen2 .." minuto(s) para iniciar o evento!")
		if (timeopen2 ~= timeopen1) then
			addEvent(doBroadcastMessage, timeopen2*1000*60, "[Defend The Tower] - Resta(m) ".. timeopen1 .." minuto(s) para iniciar o evento!")
		end
		addEvent(dtt.start, dtt.wait_time*1000*60,nil)
	end
    return true
end

-- COMEÇO DO EVENTO
function dtt.start()
	local tp = getTileItemById(dtt.pos.tp_create, 1387).uid 
	doRemoveItem(tp) 
	if (dtt.min_players <= dtt.countPlayers()) then
		dtt.createMonsters()
		dtt.sendPlayersToEvent()
		doBroadcastMessage(dtt.msg.start)
	else
		doBroadcastMessage(dtt.msg.cancel)
	end
	return true
end

-- FECHANDO O EVENTO
function dtt.close()
    for _, index in ipairs(dtt.getPlayersInEvent()) do
        doRemoveCondition(index.pid, CONDITION_OUTFIT)
        doRemoveCondition(index.pid, CONDITION_INFIGHT)
        doPlayerSetPzLocked(index.pid, false)
    	if (getGlobalStorageValue(dtt.storage.win) == "blue") then
            if (index.team == 0) then 
                doPlayerSetTown(index.pid, dtt.townid.init)   
                doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.init))
                dtt.reward(index.pid)
            else
                doPlayerSetTown(index.pid, dtt.townid.init)   
                doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.init))
                doPlayerSendTextMessage(index.pid, 25, dtt.msg.no_reward)
            end
        end
        if (getGlobalStorageValue(dtt.storage.win) == "red") then
            if (index.team == 1) then 
                doPlayerSetTown(index.pid, dtt.townid.init)   
                doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.init))
                dtt.reward(index.pid)
            else
                doPlayerSetTown(index.pid, dtt.townid.init)   
                doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.init))
                doPlayerSendTextMessage(index.pid, 25, dtt.msg.no_reward)
            end
        end
    end
    --- limpando storage dos jogadores
    dtt.resetPlayerStorages()
    return true
end


function dtt.sendPlayersToEvent()
	dtt.setTeam()
	dtt.resetPlayerStorages()
    for _, index in ipairs(dtt.getPlayersInEvent()) do
        if (index.team == 0) then
            doAddCondition(index.pid, conditionBlue)
			doPlayerSetTown(index.pid, dtt.townid.blue)
            doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.blue))
			doPlayerSetStorageValue(index.pid, dtt.storage.team_blue, 1)
		end
		if (index.team == 1) then
            doAddCondition(index.pid, conditionRed)
			doPlayerSetTown(index.pid, dtt.townid.red)
            doTeleportThing(index.pid, getTownTemplePosition(dtt.townid.red))
			doPlayerSetStorageValue(index.pid, dtt.storage.team_red, 1)
		end
	end	
	return true
end

function dtt.reward(pid)
	local random_item = dtt.reward_items[math.random(1, #dtt.reward_items)]
    doPlayerAddItem(pid, 6527, 80)
    dtt.setBonusExp(pid)
    doPlayerSendTextMessage(pid, 25, dtt.msg.reward)   
    return true
end

function dtt.removeItemsTower()
    if (getTileItemById(dtt.monster.pos.a2, 9596).uid) then
        doRemoveItem(getTileItemById(dtt.monster.pos.a2, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.a3, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.a4, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.b2, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.b3, 9596).uid)
        doRemoveItem(getTileItemById(dtt.monster.pos.b4, 9596).uid)
        print("[DEFEND THE TOWERS] Items torre limpos da arena de batalha...")
    else
        print("[DEFEND THE TOWERS] Nenhum item torre na arena de batalha...")
    end
	return true
end


function dtt.resultBattle()
	local frags_blue = getGlobalStorageValue(dtt.storage.kill_blue)
    local frags_red = getGlobalStorageValue(dtt.storage.kill_red)
    local towers_blue = getGlobalStorageValue(dtt.storage.tower_blue)
    local towers_red = getGlobalStorageValue(dtt.storage.tower_red)
    local hora = os.date("%X")
    local data = os.date("%x")
    db.query("INSERT INTO `dtt_results`  VALUES ('', ".. frags_blue ..  ",".. frags_red ..", ".. towers_blue ..", ".. towers_red ..", ".. db.escapeString(data) ..", ".. db.escapeString(hora) ..");")  
    return true
end

function dtt.warningAttack(cid, msg, storTeam)
    local lifePercent = 100 / (getCreatureMaxHealth(cid) / getCreatureHealth(cid))
    if (lifePercent <= 100) and (lifePercent >= 99.9) then
    	for _, index in ipairs(dtt.getPlayersInEvent()) do
    		if getPlayerStorageValue(index.pid, storTeam) == 1 then
   			    doPlayerSendTextMessage(index.pid, 25, "[Defend The Tower] A torre "..msg.." esta sob ataque. Corra para defender!")  
   			end
   		end
    end
    if (lifePercent <= 50) and (lifePercent >= 49.9) then
    	for _, index in ipairs(dtt.getPlayersInEvent()) do
    		if getPlayerStorageValue(index.pid, storTeam) == 1 then
   			    doPlayerSendTextMessage(index.pid, 25, "[Defend The Tower] A torre "..msg.." esta sob ataque. Corra para defender!")  
   			end
   		end
    end
    if (lifePercent <= 20) and (lifePercent >= 19.9) then
    	for _, index in ipairs(dtt.getPlayersInEvent()) do
    		if getPlayerStorageValue(index.pid, storTeam) == 1 then
   			    doPlayerSendTextMessage(index.pid, 25, "[Defend The Tower] A torre "..msg.." esta sob ataque. Corra para defender!")  
   			end
   		end
    end
    return true
end

function dtt.removeMonsters()
    doRemoveCreature(getThingfromPos(dtt.monster.pos.a1).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.a2).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.a3).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.a4).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.b1).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.b2).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.b3).uid)
    doRemoveCreature(getThingfromPos(dtt.monster.pos.b4).uid)
    return true
end

function dtt.cleanPlayer(cid)
    doPlayerSetTown(cid, dtt.townid.init)   
    doTeleportThing(cid, getTownTemplePosition(dtt.townid.init))
    doPlayerSetStorageValue(cid, dtt.storage.team_blue, 0)
    doPlayerSetStorageValue(cid, dtt.storage.team_red, 0)
    doPlayerSetStorageValue(cid, dtt.storage.buffvoc1, 0)
    doPlayerSetStorageValue(cid, dtt.storage.buffvoc2, 0)
    doPlayerSetStorageValue(cid, dtt.storage.buffvoc3, 0)
    doPlayerSetStorageValue(cid, dtt.storage.buffvoc4, 0)
    return true
end

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

pelo que eu vi deve ser assim mesmo porque a função 'dtt.removeMonsters' remove o monstro sem checar se ele está na posição.

 

quem quiser um dota 100%, com buffs automatico, respaw, que abre automatico e com talk, só me adc skype:

 

vodkart.luateam

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

ele remove alguns dos players que estão lã?
ou não remove nenhum e da erro?

edit, troca essa função:

 

function dtt.removeMonsters()
	for i = 1, 4 do 
		local a = getThingfromPos(dtt.monster.pos.a .. i)
		local b = getThingfromPos(dtt.monster.pos.b .. i)
		if isPlayer(a.uid) then
			doRemoveCreature(a.uid)
		end
		if isPlayer(b.uid) then
			doRemoveCreature(b.uid)
		end		
	end
    return true
end

n testei.

Editado por x1zy (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo