Jump to content

lolroy

Members
  • Posts

    1
  • Joined

  • Last visited

  • Days Won

    1

lolroy last won the day on February 16 2015

lolroy had the most liked content!

lolroy's Achievements

Newbie

Newbie (1/14)

1

Reputation

  1. I have a code, it's a modification of omnibot "balanceteams" function, that makes always equal number of bots, so if you have 2 axis humans and 4 allies humans, and maxbots 12, teams would not be "6vs6", they would be 5vs7, so new players are forced to join the teams with less bots. If you don't want to touch omnibot code (they recommend/ encourage not, but i didn't know another way to do it), then you just have to verify if it's bot, you can do it by making a function that check if first 7 characters of GUID is "OMNIBOT", and do nothing. If it's not "OMNIBOT", then add the clientnum to table. Also, check ping. If ping = 0, then exclude the bot. (I don't know how it works with people that really have 0 ping). An example (untested) would be this: modname = "balance" version = "0.1" function et_InitGame(levelTime,randomSeed,restart) et.RegisterModname(modname .. " " .. version) end unevenDiff = 2 max_unevenTime = 45 max_unevenDiff = 4 axisPlayers = {} alliedPlayers = {} unevenTime = 15 function isBot(clientNum) if et.gentity_get(clientNum,"ps.ping") == 0 then return true -- is Bot end end function et_RunFrame( levelTime ) local numAlliedPlayers = table.getn( alliedPlayers ) local numAxisPlayers = table.getn( axisPlayers ) if numAlliedPlayers >= numAxisPlayers + max_unevenDiff then local clientNum = alliedPlayers[ numAlliedPlayers ] et.trap_SendConsoleCommand( et.EXEC_APPEND, "putteam " .. clientNum .. " r" ) et.G_globalSound("lua/playermove.wav") et.trap_SendServerCommand(-1, "chat \"balancing teams... " .. et.gentity_get( clientNum, "pers.netname" ) .. "^7 moved to ^1AXIS\"" ) elseif numAxisPlayers >= numAlliedPlayers + max_unevenDiff then local clientNum = axisPlayers[ numAxisPlayers ] et.trap_SendConsoleCommand( et.EXEC_APPEND, "putteam " .. clientNum .. " b" ) et.G_globalSound("lua/playermove.wav") et.trap_SendServerCommand(-1, "chat \"balancing teams... " .. et.gentity_get( clientNum, "pers.netname" ) .. "^7 moved to ^4ALLIES\"" ) elseif numAlliedPlayers >= numAxisPlayers + unevenDiff then if unevenTime > 0 then if tonumber( levelTime ) - unevenTime >= max_unevenTime * 1000 then local clientNum = alliedPlayers[ numAlliedPlayers ] et.trap_SendConsoleCommand( et.EXEC_APPEND, "putteam " .. clientNum .. " r" ) et.G_globalSound("lua/playermove.wav") et.trap_SendServerCommand(-1, "chat \"balancing teams... " .. et.gentity_get( clientNum, "pers.netname" ) .. "^7 moved to ^1AXIS\"" ) end else unevenTime = tonumber( levelTime ) end elseif numAxisPlayers >= numAlliedPlayers + unevenDiff then if unevenTime > 0 then if tonumber( levelTime ) - unevenTime >= max_unevenTime * 1000 then local clientNum = axisPlayers[ numAxisPlayers ] et.trap_SendConsoleCommand( et.EXEC_APPEND, "putteam " .. clientNum .. " b" ) et.G_globalSound("lua/playermove.wav") et.trap_SendServerCommand(-1, "chat \"balancing teams... " .. et.gentity_get( clientNum, "pers.netname" ) .. "^7 moved to ^4ALLIES\"" ) end else unevenTime = tonumber( levelTime ) end else unevenTime = -1 end end function et_ClientSpawn( clientNum, revived, teamChange, restoreHealth ) if teamChange ~= 0 then local team = tonumber( et.gentity_get( clientNum, "sess.sessionTeam" ) ) -- these were the teamnumbers prior to the move local numAlliedPlayers = table.getn( alliedPlayers ) local numAxisPlayers = table.getn( axisPlayers ) if team == 1 then for i, num in ipairs( alliedPlayers ) do if num == clientNum then table.remove( alliedPlayers, i ) break end end -- this should not happen but still check for it to avoid doubles for i, num in ipairs( axisPlayers ) do if num == clientNum then return end end -- make sure a player who (got) moved when teams were uneven doesn't get moved right back if numAlliedPlayers >= numAxisPlayers + unevenDiff then table.insert( axisPlayers, 1, clientNum ) else if isBot(clientNum) then --do nothing else table.insert( axisPlayers, clientNum ) end end elseif team == 2 then for i, num in ipairs( axisPlayers ) do if num == clientNum then table.remove( axisPlayers, i ) break end end for i, num in ipairs( alliedPlayers ) do if num == clientNum then return end end if numAxisPlayers >= numAlliedPlayers + unevenDiff then table.insert( alliedPlayers, 1, clientNum ) else if isBot(clientNum) then --do nothing else table.insert( alliedPlayers, clientNum ) end end else for i, num in ipairs( alliedPlayers ) do if num == clientNum then table.remove( alliedPlayers, i ) return end end for i, num in ipairs( axisPlayers ) do if num == clientNum then table.remove( axisPlayers, i ) return end end end end end function et_ClientDisconnect( clientNum ) for i, num in ipairs( alliedPlayers ) do if num == clientNum then table.remove( alliedPlayers, i ) return end end for i, num in ipairs( axisPlayers ) do if num == clientNum then table.remove( axisPlayers, i ) return end end end I did it with the other method (omnibot), because it was better for me to have bots auto balancing themselves, and forcing new players to join weaker team. Also it's more visual the team balance this way Also, you can check this: http://mygamingtalk.com/forums/topic/4626-lua-enhanced-server-module/It has a great function to balance teams
  2. Welcome to the forums lolroy :)
    1. lolroy

      lolroy

      Hello, and thanks :) I came here to report a bug in silenT, I've been all the night reproducing it but when i replaced the silent.cfg file by the original one i can't reproduce it anymore :/ And i'm pretty sure i did change only private password on new file xD
×
×
  • Create New...