Ir para conteúdo
  • Cadastre-se

[pedido] Script balanceamento de Teams em WAR/Hardcore


Posts Recomendados

Boa tarde galera, preciso de 1 script: (A versão do meu T.F.S é a 3.0)

 

1. Um script que separasse os players em 2 times, 1 de roupa azul, outro de roupa vermelha. Assim que o player logar, obrigatoriamente entrar para o time que estiver com menos players.

 

Desde já agradeço.

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

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

vai no seu globalevents e cria um arquivo chamado balance:

viu antes de voce mexer em algo ve se esta balanceando troca seu !online  por esse aki : *Vai em Talkactions online.lua e troca por esse aki:   esse comando mostra se esta balanceando os tim

* setPlayerStorageValue(cid, STORAGE_TEAM_ID, 0)   <<< Essa Funçao Remove a Storage agora e so voce por Para quando o Jogador Morre ou Logar.

Posted Images

calma cara, isso é bem dificil de fazer e não é qualquer um que consegue. Dá uma olhada em scripts de Team Battle porque sua dúvida tá bem complexa e eu não acho q alguém vá ser capaz de fazer isso dai que vc quer sem nenhum bug

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

dá uma olhada nisso daqui e vê se vc consegue extrair a parte que separa os times pra colocar numa function onLogin:
http://www.tibiaking.com/forum/topic/16699-sistema-battlefield-event/

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Consegui 1 script aqui que atende, ele vai balanceando certinho no login. Porém tem 1 problema:
- Vamos supor que entraram 4 players, 2 azuis e 2 vermelhos, acontece que se 1 do azul relogar ou morrer, ele cai no vermelho, e vice versa, ficando errado o time, assim: (1 azul e 3 vermelhos). Dai so relogando novamente pra ficar certo denovo: 2 azuis e 2 vermelhos...

Aqui está as funções do script:

function mudarRopa(cid)  
        local colors = WAR_COLORS[getPlayerStorageValue(cid, 12000)]  -- verifica qual time é.
        local outfit = getCreatureOutfit(cid) 
        outfit.lookHead = colors[1] 
        outfit.lookBody = colors[2] 
        outfit.lookLegs = colors[3] 
        outfit.lookFeet = colors[4] 
        doCreatureChangeOutfit(cid, outfit) 
end -- fim do mudar roupas


function getTeamSpawn(cid)  
    return getTownTemplePosition(mapas[getGlobalStorageValue(15000)][getPlayerStorageValue(cid,12000)][math.random(1,2)]) 
end 

function getTeamMembers(id) 
    local players = getPlayersOnline() 
    local team = {} 
    if #players == 1 then 
        return team 
    end 
    for i, cid in ipairs(players) do 
        if getPlayerStorageValue(cid, 12000) == id and getPlayerGroupId(cid) < 3 then 
            table.insert(team, cid) 
        end 
    end 
    return team 
end 

function setTeam(cid) 
        local team1 = getTeamMembers(1) 
        local team2 = getTeamMembers(2) 
        if #team1 >= #team2 then 
            setPlayerStorageValue(cid, 12000, 2) 
        else 
            setPlayerStorageValue(cid, 12000, 1) 
        end 
        mudarRopa(cid) 
        doTeleportThing(cid,getTeamSpawn(cid),false)
end 

Aonde está o erro que ocasiona o que eu citei acima?

Desde já agradeço.

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

se a função é a onLogin ele vai executar ao logar. Teria que ter um checador que se o player morrer ou deslogar ele seja retirado da table teamX e ao logar a checagem seria refeita, vendo que o timeX estaria com menos players doque o timeY e inserindo o player novamente no timeX. Eu pessoalmente não sei como fazer isso mas se a function é onLogin acho q dá pra fazer uma onDeath ou uma onThink pra ficar constantemente checando se #teamX > #teamY 

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

- Esse Script ae e de Minha Autoria e do Gesior.pl Que desenvolvemos para Friday War 13 e Mini Games War!

* Funciona em Todas as versoes de OT SERVER!

 

vai na sua lib e cria um arquivo chamado war.lua e add isso aki :

 

 

-- config --


WAR_MAP_NAMES = {'FIBULA', 'EDRON', ' VENORE', 'THAIS', 'ARENA', 'ARENA 3', 'ARENA 1', 'ARENA 2'}
WAR_SPAWNS = {}
WAR_SPAWNS[1] = {{2,2},{3,3}} -- map 1
WAR_SPAWNS[2] = {{5,5},{6,6}} -- map 2
WAR_SPAWNS[3] = {{8,8},{9,9}} -- map 3
WAR_SPAWNS[4] = {{11,11},{12,12}} -- map 4
WAR_SPAWNS[5] = {{36,36},{36,36}} -- map 5
WAR_SPAWNS[6] = {{37,37},{38,38}} -- map 6
WAR_SPAWNS[7] = {{39,39},{40,40}} -- map 7
WAR_SPAWNS[8] = {{41,41},{42,42}} -- map 8




WAR_MAP_CYCLE = {{1,2},{2,3},{3,4},{4,5},{5,6},{6,7},{7,8},{8,1}}
WAR_COLORS = {{98,94,94,94},{89,89,89,89}}
WAR_TEAM_NAMES = {'Team Red','Team Blue'}
WAR_BROADCAST_INTERVAL_TOP5 = 213

WAR_START_LEVEL = 140
WAR_TEAMS = 1

WAR_POINTS_FOR_KILL = 3
WAR_POINTS_FOR_KILL_ASSIST = 1

--------------------------------------------------------
STORAGE_LAST_KILLER_GUID = 10100
STORAGE_LAST_KILLER_GUID_TIMES = 10101
STORAGE_LAST_KILLER_IP = 10200
STORAGE_LAST_KILLER_IP_TIMES = 10201
STORAGE_LAST_KILLER_ACCOUNT = 10300
STORAGE_LAST_KILLER_ACCOUNT_TIMES = 10301
STORAGE_POINTS = 11000
STORAGE_TEAM_ID = 12000
STORAGE_SKULL = 13000
STORAGE_DEPOT = 14000

GLOBAL_STORAGE_MAP = 500
GLOBAL_STORAGE_MAP_CHANGE_TIME = 501
GLOBAL_STORAGE_TEAM_1_FRAGS = 600
GLOBAL_STORAGE_TEAM_2_FRAGS = 700
GLOBAL_STORAGE_BROADCAST_TOP5 = 800

warInitialized = 0
function getTime(s)
local n = math. floor(s / 60)
s = s - (60 * n)
return n, s
end

function getSpawn(cid)
local map_info = WAR_MAP_CYCLE[getGlobalStorageValue(GLOBAL_STORAGE_MAP)]
local map_id = map_info[1]
local map_spawns = WAR_SPAWNS[map_id]
local team_spawns = map_spawns[getPlayerStorageValue(cid, STORAGE_TEAM_ID)]
return getTownTemplePosition(team_spawns[math.random(1,#team_spawns)])
end

function getTeamMembers(id)
local players = getPlayersOnline()
local team = {}
if #players == 0 then
return team
end
for i, cid in ipairs(players) do
if getPlayerStorageValue(cid, STORAGE_TEAM_ID) == id and getPlayerGroupId(cid) == 1 then
table.insert(team, cid)
end
end
return team
end

function updateOutfit(cid)
if WAR_TEAMS == 1 then --outfit
local colors = WAR_COLORS[getPlayerStorageValue(cid, STORAGE_TEAM_ID)]
local outfit = getCreatureOutfit(cid)
outfit.lookHead = colors[1]
outfit.lookBody = colors[2]
outfit.lookLegs = colors[3]
outfit.lookFeet = colors[4]
doCreatureChangeOutfit(cid, outfit)
end
end

function setTeam(cid)
if WAR_TEAMS ~= 1 then
setPlayerStorageValue(cid, STORAGE_TEAM_ID, 1)
else
local team1 = getTeamMembers(1)
local team2 = getTeamMembers(2)
if #team1 >= #team2 then
setPlayerStorageValue(cid, STORAGE_TEAM_ID, 2)
else
setPlayerStorageValue(cid, STORAGE_TEAM_ID, 1)
end
updateOutfit(cid)
end
end

function cronWar()
if getGlobalStorageValue(GLOBAL_STORAGE_MAP_CHANGE_TIME) < os.time() then -- change map
local map_info = WAR_MAP_CYCLE[getNextMapId()]
local map_id = map_info[1]
doTeleportThing(pid,getTeamSpawn(pid),false) -- teleporta para a base


if WAR_TEAMS == 1 then
doBroadcastMessage(getTeamScore(), MESSAGE_STATUS_DEFAULT)
end
setMap(getNextMapId())

elseif getGlobalStorageValue(GLOBAL_STORAGE_BROADCAST_TOP5) < os.time() then -- broadcast top 5
setGlobalStorageValue(GLOBAL_STORAGE_BROADCAST_TOP5, os.time()+WAR_BROADCAST_INTERVAL_TOP5)
addEvent(doBroadcastMessage, 1000, getTop5Players(), MESSAGE_STATUS_CONSOLE_ORANGE)
end
addEvent(cronWar, 1000)
end

function getNextMapId()
if getGlobalStorageValue(GLOBAL_STORAGE_MAP) == #WAR_MAP_CYCLE then
return 1
end
return getGlobalStorageValue(GLOBAL_STORAGE_MAP)+1
end

function getTop5Players()
local players = getPlayersOnline()
if #players == 0 then
return top5text
end
local player1 = {0,-1}
local player2 = {0,-1}
local player3 = {0,-1}
local player4 = {0,-1}
local player5 = {0,-1}
local top5text = "Top 5 Fragers Online"
for i, cid in ipairs(players) do
if getPlayerStorageValue(cid,19999) > player1[2] then
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {player2[1], player2[2]}
player2 = {player1[1], player1[2]}
player1 = {cid, getPlayerStorageValue(cid,19999)}
elseif getPlayerStorageValue(cid,19999) > player2[2] then
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {player2[1], player2[2]}
player2 = {cid, getPlayerStorageValue(cid,19999)}
elseif getPlayerStorageValue(cid,19999) > player3[2] then
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {cid, getPlayerStorageValue(cid,19999)}
elseif getPlayerStorageValue(cid,19999) > player4[2] then
player5 = {player4[1], player4[2]}
player4 = {cid, getPlayerStorageValue(cid,19999)}
elseif getPlayerStorageValue(cid,19999) > player1[2] then
player5 = {cid, getPlayerStorageValue(cid,19999)}
end
end
if player1[1] > 0 then
top5text = top5text .. "\n1. " .. getCreatureName(player1[1]) .. " - " .. player1[2]+1 .. " frags"
end
if player2[1] > 0 then
top5text = top5text .. "\n2. " .. getCreatureName(player2[1]) .. " - " .. player2[2]+1 .. " frags"
end
if player3[1] > 0 then
top5text = top5text .. "\n3. " .. getCreatureName(player3[1]) .. " - " .. player3[2]+1 .. " frags"
end
if player4[1] > 0 then
top5text = top5text .. "\n4. " .. getCreatureName(player4[1]) .. " - " .. player4[2]+1 .. " frags"
end
if player5[1] > 0 then
top5text = top5text .. "\n5. " .. getCreatureName(player5[1]) .. " - " .. player5[2]+1 .. " frags"
end
return top5text
end
function getTeamScore()
return WAR_TEAM_NAMES[1] .. " - " .. getGlobalStorageValue(GLOBAL_STORAGE_TEAM_1_FRAGS) .. " : " .. getGlobalStorageValue(GLOBAL_STORAGE_TEAM_2_FRAGS) .. " - " .. WAR_TEAM_NAMES[2]
end

function setMap(id)
local map_info = WAR_MAP_CYCLE[id]
setGlobalStorageValue(GLOBAL_STORAGE_MAP,id)
setGlobalStorageValue(GLOBAL_STORAGE_MAP_CHANGE_TIME,os.time()+60*40)
local players = getPlayersOnline()
for i, cid in ipairs(players) do
addEvent(doRemoveCreature, 5*1000, cid, true)
setPlayerStorageValue(cid,17778,0) -- seta verificacao de bandeira em 0
setPlayerStorageValue(cid,17777,0) -- seta verificacao de bandeira em 0
setGlobalStorageValue(17778,0) -- ninguem ficar com bandeira time verde!
setGlobalStorageValue(17779,0) -- ninguem ficar com bandeira time vermelho!
setGlobalStorageValue(18888,0) -- ninguem ficar com bandeira time verde!
setGlobalStorageValue(18889,0) -- ninguem ficar com bandeira time vermelho!!
setGlobalStorageValue(5002,0) -- ninguem ficar com bandeira time verde!
setGlobalStorageValue(5001,0) -- ninguem ficar com bandeira time verde!
setGlobalStorageValue(4002,0) -- ninguem ficar com bandeira time verde!
setGlobalStorageValue(4001,0) -- ninguem ficar com bandeira time verde!
setGlobalStorageValue(11544 ,0) -- ninguem ficar com bandeira time verde!
setGlobalStorageValue(11543,0) -- ninguem ficar com bandeira time verde!
doCreatureSetSkullType(cid, 0)
doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
doCreatureAddMana(cid, getCreatureMaxMana(cid))
doChangeSpeed(cid, -getCreatureSpeed(cid) + getCreatureBaseSpeed(cid))
doTeleportThing(cid, getSpawn(cid), TRUE)
removeConditions(cid)
end
end

function removeConditions(cid)
doRemoveCondition(cid, CONDITION_INFIGHT)
doRemoveCondition(cid, CONDITION_PARALYZE)
doRemoveCondition(cid, CONDITION_ENERGY)
doRemoveCondition(cid, CONDITION_FIRE)
doRemoveCondition(cid, CONDITION_POISON)
doRemoveCondition(cid, CONDITION_DRUNK)
end

 

- Depois vai em creaturesripts e cria um arquivo war.lua:

 

function onLogin(cid)


doPlayerAddAddons(cid, 2)
doPlayerAddAddons(cid, 1)
if warInitialized == 0 then
warInitialized = 1
setPlayerStorageValue(cid, STORAGE_TEAM_ID, 1)
setMap(1)
cronWar()
end
setPlayerStorageValue(cid, STORAGE_TEAM_ID, 0)
setPlayerStorageValue(cid, STORAGE_DEPOT, 0)
setTeam(cid)
doTeleportThing(cid, getSpawn(cid), TRUE)
return TRUE
end

 

- Depois vai em globalevents e cria um arquivo map.lua:

 

function onThink(interval, lastExecution)


broadcastMessage("Change Map change in 10 second.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink2, 1000)
return TRUE
end

function onThink2(interval, lastExecution)
broadcastMessage("Change Map change in 9 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink3, 1000)
return TRUE
end

function onThink3(interval, lastExecution)
broadcastMessage("Change Map change in 8 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink4, 1000)
return TRUE
end

function onThink4(interval, lastExecution)
broadcastMessage("Change Map change in 7 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink5, 1000)
return TRUE
end

function onThink5(interval, lastExecution)
broadcastMessage("Change Map change in 6 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink6, 1000)
return TRUE
end

function onThink6(interval, lastExecution)
broadcastMessage("Change Map change in 5 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink7, 1000)
return TRUE
end

function onThink7(interval, lastExecution)
broadcastMessage("Change Map change in 4 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink8, 1000)
return TRUE
end

function onThink8(interval, lastExecution)
broadcastMessage("Change Map change in 3 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink9, 1000)
return TRUE
end

function onThink9(interval, lastExecution)
broadcastMessage("Change Map change in 2 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink10, 1000)
return TRUE
end

function onThink10(interval, lastExecution)
broadcastMessage(" Change Map in 1 seconds.", MESSAGE_STATUS_CONSOLE_BLUE)
addEvent(onThink11, 1000)
return TRUE
end

function onThink11(interval)
setMap(getNextMapId())
return TRUE
end

 

* Config:

WAR_SPAWNS[1] = {{2,2},{3,3}} -- OS NUMEROS 2 E 3 SAO AS TOWN ID DO MAPA EDITOR OU SEJA VOCE TERA QUE ADICIONAR NO MAPA EDITOR AS BASES DOS TIMES E ADICIONAR A TOWN ID, NO SCRIPT ESTA CONFIGURADO [8] MAPAS

 

- WAR_MAP_CYCLE = {{1,2},{2,3},{3,4},{4,5},{5,6},{6,7},{7,8},{8,1}} ---- E O CICLO DO MAPA COMEÇANDO COM O MAPA [1]  E ASSIM FAZENDO SEU CICLO VOLTANDO PARA [1] , NO SCRIPT ESTA CONFIGURADO [8] MAPAS

 

 

se a função é a onLogin ele vai executar ao logar. Teria que ter um checador que se o player morrer ou deslogar ele seja retirado da table teamX e ao logar a checagem seria refeita, vendo que o timeX estaria com menos players doque o timeY e inserindo o player novamente no timeX. Eu pessoalmente não sei como fazer isso mas se a function é onLogin acho q dá pra fazer uma onDeath ou uma onThink pra ficar constantemente checando se #teamX > #teamY 

* Nao vai desbalancear os times quando morrer e simplesmente ao contrario: OS TIMES VAI BALANCEAR QUANDO ALGUM JOGADOR MORRER , se o Autor do Topico quiser o Sistema de [Cheking Team Balance] em Tempo Real: Durante o jogo qualquer um player podera ser Trocado de Time [Automatico] é so me Mandar um PM! Ate +

Editado por Nextbr (veja o histórico de edições)

 

 

Link para o post
Compartilhar em outros sites

Consegui 1 script aqui que atende, ele vai balanceando certinho no login. Porém tem 1 problema:

- Vamos supor que entraram 4 players, 2 azuis e 2 vermelhos, acontece que se 1 do azul relogar ou morrer, ele cai no vermelho, e vice versa, ficando errado o time, assim: (1 azul e 3 vermelhos). Dai so relogando novamente pra ficar certo denovo: 2 azuis e 2 vermelhos...

Aqui está as funções do script:

function mudarRopa(cid)  
        local colors = WAR_COLORS[getPlayerStorageValue(cid, 12000)]  -- verifica qual time é.
        local outfit = getCreatureOutfit(cid) 
        outfit.lookHead = colors[1] 
        outfit.lookBody = colors[2] 
        outfit.lookLegs = colors[3] 
        outfit.lookFeet = colors[4] 
        doCreatureChangeOutfit(cid, outfit) 
end -- fim do mudar roupas


function getTeamSpawn(cid)  
    return getTownTemplePosition(mapas[getGlobalStorageValue(15000)][getPlayerStorageValue(cid,12000)][math.random(1,2)]) 
end 

function getTeamMembers(id) 
    local players = getPlayersOnline() 
    local team = {} 
    if #players == 1 then 
        return team 
    end 
    for i, cid in ipairs(players) do 
        if getPlayerStorageValue(cid, 12000) == id and getPlayerGroupId(cid) < 3 then 
            table.insert(team, cid) 
        end 
    end 
    return team 
end 

function setTeam(cid) 
        local team1 = getTeamMembers(1) 
        local team2 = getTeamMembers(2) 
        if #team1 >= #team2 then 
            setPlayerStorageValue(cid, 12000, 2) 
        else 
            setPlayerStorageValue(cid, 12000, 1) 
        end 
        mudarRopa(cid) 
        doTeleportThing(cid,getTeamSpawn(cid),false)
end 

Aonde está o erro que ocasiona o que eu citei acima?

Desde já agradeço.

 

 

isso por que ele adiciona um storage, acho que se fizer uma função onlogout para remover o storage quando ele logar novamente já ira fazer a checagem normalmente..

 Whatsapp: +55 (48) 98815-0709 Discord: Qwizer#5713

 

Global 100% 7.40 com Website

TFS 1.2 10.97-11.00 + GlobalFull OtherWorld ...

 

Link para o post
Compartilhar em outros sites

se a função é a onLogin ele vai executar ao logar. Teria que ter um checador que se o player morrer ou deslogar ele seja retirado da table teamX e ao logar a checagem seria refeita, vendo que o timeX estaria com menos players doque o timeY e inserindo o player novamente no timeX. Eu pessoalmente não sei como fazer isso mas se a function é onLogin acho q dá pra fazer uma onDeath ou uma onThink pra ficar constantemente checando se #teamX > #teamY 

É exatamente disso que eu preciso. Só pra constar esse script fica na pasta data/lib.

 

isso por que ele adiciona um storage, acho que se fizer uma função onlogout para remover o storage quando ele logar novamente já ira fazer a checagem normalmente..

É isso mesmo cara, quando o player morre ele não atualiza o storage dos teams, dai o player reloga com o storage desatualizado, e acaba indo pro time que tá com mais...

 

* Nao vai desbalancear os times quando morrer e simplesmente ao contrario: OS TIMES VAI BALANCEAR QUANDO ALGUM JOGADOR MORRER , se o Autor do Topico quiser o Sistema de [Cheking Team Balance] em Tempo Real: Durante o jogo qualquer um player podera ser Trocado de Time [Automatico] é so me Mandar um PM! Ate +

Eu preciso exatamente disso mano, um sistema de checking team balance em tempo real. Se puder me ajudar te agradeço muito. Valeus!

Link para o post
Compartilhar em outros sites

NextBR, poste o script em tempo real por favor... ia contribuir muito pro estudo do pessoal e com esse novo conhecimento a gente poderia fazer uns scripts muito mais fodas pra trazer pro fórum.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

vai no seu globalevents e cria um arquivo chamado balance:

function onThink(cid,interval, lastExecution) 

local players = getPlayersOnline()
for i, cid in ipairs(players) do  
if getPlayerGroupId(cid) >= 1 then --and getPlayerVocation(cid) == 1 then
if not getTilePzInfo(getPlayerPosition(cid)) then 
 
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"[Team balance Cheking] Voce esta Sendo checado e Talves Pode Trocar de Time e Perder a Bandeira!")
setTeam(cid)
return TRUE
else
return FALSE
end
end
end

end

Editado por Nextbr (veja o histórico de edições)

 

 

Link para o post
Compartilhar em outros sites

NextBR, poste o script em tempo real por favor... ia contribuir muito pro estudo do pessoal e com esse novo conhecimento a gente poderia fazer uns scripts muito mais fodas pra trazer pro fórum.

Eu era de Outro Forum que acabou Fexando sei la por que e naquele forum eu tinho 3 servidores de war postado e esse sistema completo de [Team Balance] eu tenhu outro sistema aki de team balance que é por teleport "o Jogador tem a livre escolha de times "porem" cada time tem um Slot de 50 Player's  Mesmo se o Jogador desbalancear os Times eu uso o Script que postei logo acima para Fazer a checagem Para ver se os Times estao desbalanceados e  etc....

Editado por Nextbr (veja o histórico de edições)

 

 

Link para o post
Compartilhar em outros sites

vai no seu globalevents e cria um arquivo chamado balance:

 

Valeu mano, funcionou perfeitamente do jeito que você falou.

Porém estudando melhor aqui a situação, seria mais interessante 1 rebalancer com a mesma função que esse ai, so que em vez de executar em tempo real, executar ele toda vez que 1 player for logar no jogo ou relogar da morte.

O que eu tenho aqui era pra fazer isso. Só que ele falha quando o player loga ou morre. Eu tenho quase ctz que isso acontece porque o storage do TEAM do player recém logado ou morto, não é removido imediatamente quando o player loga ou morre.

A função de balancear os teams está certinha (como consta abaixo), só falta mesmo algo pra remover o storage Team do player dead ou recem logado...

function setTeam(cid) 
        local team1 = getTeamMembers(1) 
        local team2 = getTeamMembers(2) 
        if #team1 >= #team2 then 
            setPlayerStorageValue(cid, 12000, 2) 
        else 
            setPlayerStorageValue(cid, 12000, 1) 
        end 
        mudarRopa(cid) 
        doTeleportThing(cid,getTeamSpawn(cid),false)
end 

Poderia me ajudar a fazer isso? (o script ta no tópico ae em cima)

Muito obrigado. Reputei+

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

eu também era de outro fórum mas cansei de algumas coisas que aconteciam... no tibiaking me baniram porque eu liberava scripts que o povo vendia e na otnet eles ficaram mudando tanto de site que o contéudo foi todo jogado no lixo, hoje em dia é quase impossível achar um link no google que leve pro post certo. Aqui no TK eu não tive nenhum problema e o pessoal parece que tá reunido aqui, eu resolvo as dúvidas de quem não manja e tento ensinar pra que eles possam ensinar outros.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Valeu mano, funcionou perfeitamente do jeito que você falou.

Porém estudando melhor aqui a situação, seria mais interessante 1 rebalancer com a mesma função que esse ai, so que em vez de executar em tempo real, executar ele toda vez que 1 player for logar no jogo ou relogar da morte.

O que eu tenho aqui era pra fazer isso. Só que ele falha quando o player loga ou morre. Eu tenho quase ctz que isso acontece porque o storage do TEAM do player recém logado ou morto, não é removido imediatamente quando o player loga ou morre.

A função de balancear os teams está certinha (como consta abaixo), só falta mesmo algo pra remover o storage Team do player dead ou recem logado...

function setTeam(cid) 
        local team1 = getTeamMembers(1) 
        local team2 = getTeamMembers(2) 
        if #team1 >= #team2 then 
            setPlayerStorageValue(cid, 12000, 2) 
        else 
            setPlayerStorageValue(cid, 12000, 1) 
        end 
        mudarRopa(cid) 
        doTeleportThing(cid,getTeamSpawn(cid),false)
end 

Poderia me ajudar a fazer isso? (o script ta no tópico ae em cima)

Muito obrigado. Reputei+

* o Logout nao Precisa fazer a Checagem so no Login \/

* Testa Ae nao sei se vai Funcionar , vai no seu creaturescripts e troca seu war.lua por esse:

function onLogin(cid)

doPlayerAddAddons(cid, 2)

doPlayerAddAddons(cid, 1)

local players = getPlayersOnline()

for i, cid in ipairs(players) do

if warInitialized == 0 then

warInitialized = 1

setPlayerStorageValue(cid, STORAGE_TEAM_ID, 1)

setMap(1)

cronWar()

end

setPlayerStorageValue(cid, STORAGE_TEAM_ID, 0)

setPlayerStorageValue(cid, STORAGE_DEPOT, 0)

setTeam(cid)

doTeleportThing(cid, getSpawn(cid), TRUE)

return TRUE

end

end

Editado por Nextbr (veja o histórico de edições)

 

 

Link para o post
Compartilhar em outros sites

* o Logout nao Precisa fazer a Checagem so no Login \/

* Testa Ae nao sei se vai Funcionar , vai no seu creaturescripts e troca seu war.lua por esse:

function onLogin(cid)

doPlayerAddAddons(cid, 2)

doPlayerAddAddons(cid, 1)

local players = getPlayersOnline()

for i, cid in ipairs(players) do

if warInitialized == 0 then

warInitialized = 1

setPlayerStorageValue(cid, STORAGE_TEAM_ID, 1)

setMap(1)

cronWar()

end

setPlayerStorageValue(cid, STORAGE_TEAM_ID, 0)

setPlayerStorageValue(cid, STORAGE_DEPOT, 0)

setTeam(cid)

doTeleportThing(cid, getSpawn(cid), TRUE)

return TRUE

end

end

Sim, não precisa fazer checagem no logout, só precisa remover o valor do player do team 1 ou 2 no momento exato da morte/logout, pra rebalancear severamente e dividido exato quando o cara logar novamente.

OBS: O meu war.lua não é creaturescript, ele fica na pasta data/lib.

- Eu posso substituir esse ae pela parte que define os teams no meu lib/war.lua ? 

- Ow posso simplismente criar um outro war2.lua na creaturescripts, para os 2 funcionarem em conjunto? Ou tenho que usar somente 1 dos 2 ?

Muito Obrigado!

 

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

viu antes de voce mexer em algo ve se esta balanceando troca seu !online  por esse aki :

*Vai em Talkactions online.lua e troca por esse aki:

function onSay(cid, words, param, channel)


local players = getPlayersOnline()
local x = 0
local y = 0
local z = 0
local za = 0
local zb = 0
local adm = 0
for i, pid in ipairs(players) do
if getPlayerStorageValue(pid,12000) == 1 and getPlayerGroupId(pid) <= 1 then
x = x + 1
elseif getPlayerStorageValue(pid,12000) == 2 and getPlayerGroupId(pid) <= 1 then
y = y + 1
elseif getPlayerStorageValue(pid,6666) == 1 and getPlayerGroupId(pid) <= 1 then
za = za + 1
elseif getPlayerStorageValue(pid,17779) == 1 and getPlayerGroupId(pid) <= 1 then
zb = zb + 1
elseif getPlayerGroupId(pid) >= 5 then
adm = adm + 1
end
z = z + 1
end

local strings, i, position, added, showGamemasters = {""}, 1, 1, false, getBooleanFromString(getConfigValue('displayGamemastersWithOnlineCommand'))
for _, pid in ipairs(getPlayersOnline()) do
if(added) then
if(i > (position * 7)) then
strings[position] = strings[position] .. ","
position = position + 1
strings[position] = ""
else
strings[position] = i == 1 and "" or strings[position] .. ", "
end
end

added = false
if((showGamemasters or getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES) or not getPlayerCustomFlagValue(pid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) and (not isPlayerGhost(pid) or getPlayerGhostAccess(cid) >= getPlayerGhostAccess(pid))) then
strings[position] = strings[position] .. getCreatureName(pid) .. " [" .. getPlayerLevel(pid) .. "]"
i = i + 1
added = true
end
end

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, (i - 1) .. " player" .. (i > 1 and "s" or "") .. " online:")
for i, str in ipairs(strings) do
if(str:sub(str:len()) ~= ",") then
str = str .. "."
end

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str)

end
doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_ORANGE,"".. x .." Jogadores do time Red online!")
doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_ORANGE,"".. y .." Jogadores do time Blue online!")
--doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_ORANGE,"".. za .." Jogadores Death Match online!")
doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_ORANGE,"".. adm .." Admin online! Nick: Admin")


return true
end

 

esse comando mostra se esta balanceando os times ou nao ai voce mesmo tira sua Duvida =)


 

 

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.




×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo