Ir para conteúdo
  • 0

Checar Storages e Dividi-lo [Balance Storage]


RodriigoRobson

Pergunta

Ola Galera , Como Posso Fazer uma Divisao de Players Com Tal Storage .Dividir em Dois Storages:

 

Red: 6666

Blue: 6667

 

- Exemplo: Se Tiver [3] do Time "RED" e [1] do Time "BLUE" ,um Globalevent faz uma Checagem e Divide os Times ficando:

- 2 Red

- 2 Blue

 

-OBS: e um Globalevents

 

local Red = 6666
local Blue = 6667
local conditionBlue = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionBlue, CONDITION_PARAM_TICKS, 1800 * 1000)
addOutfitCondition(conditionBlue, {lookType = 605, lookHead = 87, lookBody = 87, lookLegs = 87, lookFeet = 87}) -- Cor da Roupa
local conditionRed = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionRed, CONDITION_PARAM_TICKS, 1800 * 1000)
addOutfitCondition(conditionRed, {lookType = 604, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94})

function onThink(cid,interval, lastExecution)
local players = getPlayersOnline()
for i, cid in ipairs(players) do
setPlayerStorageValue(cid, Red, 1)
doAddCondition(cid, conditionRed)
doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"[Team Balance Checking] Voce esta Sendo Checado pelo Sistema de Balanceamento de Times")
else
setPlayerStorageValue(cid, Blue, 1)
doAddCondition(cid, conditionBlue)
doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"[Team Balance Checking] Voce esta Sendo Checado pelo Sistema de Balanceamento de Times")
return true
end

 

 

Rep + Pra quem me Ajudar =)

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Tipo, pega o total de player q tem a storage, depois vai dividindo, sorteia 1 e poe numa storage blue, depois sorteia outro e poe na storage red, e assim vai, acho que um for deve dar pra fazer, condição de parada, até que players com a storage blue e com storage red sejam iguais a numero total de players com storage inicial / 2

 

Não sei se entendeu, qlqer coisa explico de novo.

 

-GstavoLiber

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui Fazer =) . Se alguem estiver com a mesma Duvida ta aki o Script:

Vai Na Lib e cria um Arquivo chamado War.lua

 

Red_Storage = 6598754
Blue_Storage = 6598755

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, Red_Storage) == id or getPlayerStorageValue(cid, Blue_Storage) == id and getPlayerGroupId(cid) == 1 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, Red_Storage, 1)
else
setPlayerStorageValue(cid, Blue_Storage, 1)
end
end

 

 

Globalevent.lua

 

function onThink(cid,interval, lastExecution)
local players = getPlayersOnline()
for i, cid in ipairs(players) do
if getPlayerGroupId(cid) == 1 then
setTeam(cid)
doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"[Team Balance Checking] Voce esta Sendo Checado pelo Sistema de Balanceamento de Times")

return TRUE
end
end
end

 

 

@Edit: Como Faço Para Mudar a Outfit "cor" da Roupa esta dando um Erro aki:

 

[16/04/2014 20:40:41] [Error - GlobalEvent Interface]
[16/04/2014 20:40:41] data/globalevents/scripts/Balance.lua:onThink
[16/04/2014 20:40:41] Description:
[16/04/2014 20:40:41] data/globalevents/scripts/Balance.lua:5: attempt to call global 'setTeam' (a nil value)
[16/04/2014 20:40:41] stack traceback:
[16/04/2014 20:40:41] data/globalevents/scripts/Balance.lua:5: in function
[16/04/2014 20:40:41] [Error - GlobalEvents::think] Couldn't execute event: Balance

 

 

Red_Storage = 6598754
Blue_Storage = 6598755
conditionBlue = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionBlue, CONDITION_PARAM_TICKS, 1800 * 1000)
addOutfitCondition(conditionBlue, {lookType = 605, lookHead = 87, lookBody = 87, lookLegs = 87, lookFeet = 87}) -- Cor da Roupa
conditionRed = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionRed, CONDITION_PARAM_TICKS, 1800 * 1000)
addOutfitCondition(conditionRed, {lookType = 604, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94})

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, Red_Storage) == id or getPlayerStorageValue(cid, Blue_Storage) == id and getPlayerGroupId(cid) == 1 then
table.insert(team, cid)
end
end
return team
end
function updateOutfit(cid)
if getPlayerStorageValue(cid, Red_Storage) >= 1 then
doAddCondition(cid, conditionRed)
else
if getPlayerStorageValue(cid, Blue_Storage) >= 1 then
doAddCondition(cid, conditionRed)
return true
end
end


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

 

Editado por Nextbr
Link para o comentário
Compartilhar em outros sites

  • 0

isso ae eh pra algum game? pq usar onThink pra isso eh meio loko kk'

se o player loga e ja entra em um time, o melhor eh usar onLogin e onLogout...

se o player tem q clicar/andar em algu ou flar algu pra entrar no time o melhor eh usar isso e tb onLogout...

se o evento eh iniciado por alguma talk/globalevent tb da pra fazer uma funçao q fica checando a cada 20~30seg por exemplo...

-ou ate ms usar uma funçao pra checar isso a cada 20~30s no onStartup...-

Link para o comentário
Compartilhar em outros sites

  • 0

o Balanceamento de Times nao é feito por Login e feito por Tile. Para o Proprio Jogador escolher o Time que quer Entrar e etc.. eu estava querendo fazer esse script para fazer uma checagem se o time ficar desbalanceado ele automaticamente Balancea os Times dnv =) mais e a cada 5 min Para nao dar um Lag

 

- Sim eu uso esse Sistema e o Logout =)

- So Estou com um Bug : Eu quero que muda a Outfit do Player:

 

Red_Storage = 6598754
Blue_Storage = 6598755
conditionBlue = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionBlue, CONDITION_PARAM_TICKS, 1800 * 1000)
addOutfitCondition(conditionBlue, {lookType = 605, lookHead = 87, lookBody = 87, lookLegs = 87, lookFeet = 87}) -- Cor da Roupa
conditionRed = createConditionObject(CONDITION_OUTFIT)
setConditionParam(conditionRed, CONDITION_PARAM_TICKS, 1800 * 1000)
addOutfitCondition(conditionRed, {lookType = 604, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94})

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, Red_Storage) == id or getPlayerStorageValue(cid, Blue_Storage) == id and getPlayerGroupId(cid) == 1 then
table.insert(team, cid)
end
end
return team
end
function updateOutfit(cid)
if getPlayerStorageValue(cid, Red_Storage) >= 1 then
doAddCondition(cid, conditionRed)
else
if getPlayerStorageValue(cid, Blue_Storage) >= 1 then
doAddCondition(cid, conditionRed)
return true
end
end


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

 


Podem Fexar o Topico =)

Editado por Nextbr
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...