Postado Agosto 15, 2013 11 anos Autor Oi MaXwEllDeN, Instalei o script, porém não entendi uma coisa... Quando os jogadores morrem, a bandeira não deveria voltar pro lugar de origem? Testei aqui com o mapa em áreas PVP + NoLogout e PVP sem o NoLogout, acontecendo o mesmo nos dois casos. O player volta para a base sem perder a bandeira. Além disso está dando um bug quando termina o evento. Segue imagem: Minha lib do evento: CTF_LIB = { waitpos = {x = 1155, y = 1036, z = 7}, -- Posição da sala de espera tppos = {x = 161, y = 54, z = 7}, -- Onde o TP vai aparecer days = {2, 3, 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 = 2, -- Quantos pontos uma equipe precisa marcar para vencer teams = { ["Vermelho"] = { temple = 5, -- TownID da equipe vermelha outfit = {lookHead = 0, lookBody = 132, lookLegs = 113, lookFeet = 94}, flag = { id = 1435, flag_pos = {x = 1218, y = 1057, z = 7}, -- Posição onde a bandeira vermelha vai ser criada gnd_pos = {x = 1216, y = 1057, z = 7}, -- Onde os players da equipe vermelha entregarão a bandeira. }, }, ["Verde"] = { temple = 6, -- TownID da equipe verde outfit = {lookHead = 0, lookBody = 121, lookLegs = 101, lookFeet = 101}, flag = { id = 1437, flag_pos = {x = 1262, y = 1057, z = 7}, -- Posição onde a bandeira verde vai ser criada gnd_pos = {x = 1264, y = 1057, 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] doRemoveItem(flag.uid, 1) v.flag.gnd_pos.stackpos = 0 local gnd = getThingFromPos(v.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 local flag = doCreateItem(CTF.teams[team].flag.id, 1, CTF.teams[team].flag.flag_pos) doItemSetAttribute(flag, "aid", 63218) setPlayerStorageValue(uid, 16702, -1) 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 Meu CTFMax.lua do movements: local CTF = CTF_LIB function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) local team = getItemAttribute(item.uid, "team") if team ~= getPlayerStorageValue(cid, 16700) then return doTeleportThing(cid, fromPosition) end if getPlayerStorageValue(cid, 16702) == -1 then doPlayerSendCancel(cid, "Você não está com a bandeira.") return doTeleportThing(cid, fromPosition) end CTF.addPoint(cid) doTeleportThing(cid, fromPosition) CTF.returnFlag(cid) return true end Fora isso, toda vez que muda algo no CTFMax.lua da pasta movements, dá um erro no console na hora de abrir o server. Se eu digito a mesma coisa que estava antes, persiste o erro. Só volta a funcionar quando coloco de volta o arquivo original do download. Estou usando TFS 0.4.0 Pode me ajudar? Opa, obrigado por reportar os bugs, já corrigi! @Tópico Corrigido bug de morrer no CTF. Corrigido bug de não remover bandeiras no fim do evento. Corrigido bug no Utana vid. Tópico atualizado - 15/08/2013. -"Supra Omnes Lux Lucis" - Acima de todos brilha a Luz -
Postado Agosto 15, 2013 11 anos OK Max, Os bugs reportados foram devidamente corrigidos, mas acho que ocorreu um bug pequeno novamente. Os jogadores da equipe vencedora, no final do evento não estão sendo teleportadas para suas respectivas cidades. O jogo acontece normalmente mas no final acaba ocorrendo isso. Além disso está dando outro erro no console, acho que isso pode ajudar a resolver. Aguardo sua resposta, até mais
Postado Agosto 16, 2013 11 anos Autor OK Max, Os bugs reportados foram devidamente corrigidos, mas acho que ocorreu um bug pequeno novamente. Os jogadores da equipe vencedora, no final do evento não estão sendo teleportadas para suas respectivas cidades. O jogo acontece normalmente mas no final acaba ocorrendo isso. Além disso está dando outro erro no console, acho que isso pode ajudar a resolver. Aguardo sua resposta, até mais Eles não foram teletransportados por culpa desse erro que aparece no console, modifiquei aqui e acho que já está ok, pode fazer o download. -"Supra Omnes Lux Lucis" - Acima de todos brilha a Luz -
Postado Agosto 17, 2013 11 anos Eles não foram teletransportados por culpa desse erro que aparece no console, modifiquei aqui e acho que já está ok, pode fazer o download. Ok, vou testar! @EDIT: Os players do time vencedor continuam sem voltar para suas cidades originais. Dessa vez nenhum erro apareceu no console. @EDIT2: Andei fazendo os testes aqui, na verdade, apenas o jogador que marca o último ponto não está sendo teletransportado Editado Agosto 17, 2013 11 anos por johnard (veja o histórico de edições)
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.