More progress on MP
This commit is contained in:
parent
8facb41acf
commit
d2a87a52ca
|
@ -51,11 +51,15 @@ function ENT:Think()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if amtOnPoint > 0 then
|
local BlockPoints = false
|
||||||
|
local RoundActive = BennyGame:GetState() == BG_STATE_ACTIVE
|
||||||
|
|
||||||
|
if RoundActive and amtOnPoint > 0 then
|
||||||
-- People on point
|
-- People on point
|
||||||
|
|
||||||
if Contested then
|
if Contested then
|
||||||
-- Point is currently contested
|
-- Point is currently contested
|
||||||
|
BlockPoints = true -- Block points for this saboteur
|
||||||
else
|
else
|
||||||
if self:GetTeamOwned() == 0 and self:GetTeamTaking() != TeamOnPoint then
|
if self:GetTeamOwned() == 0 and self:GetTeamTaking() != TeamOnPoint then
|
||||||
-- Clearing a neutral point
|
-- Clearing a neutral point
|
||||||
|
@ -80,6 +84,17 @@ function ENT:Think()
|
||||||
self:SetCapturePercent( 0 )
|
self:SetCapturePercent( 0 )
|
||||||
self:EmitSound("buttons/blip1.wav", 70, 100, 1)
|
self:EmitSound("buttons/blip1.wav", 70, 100, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
BlockPoints = true -- Block points for this saboteur
|
||||||
|
|
||||||
|
for ply, edata in pairs(self.Memory) do
|
||||||
|
edata.xpcollected = (edata.xpcollected or 0) + (COLLECTED * 200)
|
||||||
|
local sap = math.floor(edata.xpcollected)
|
||||||
|
if sap >= 10 then
|
||||||
|
edata.xpcollected = edata.xpcollected - sap
|
||||||
|
ply:RewardXP( sap )
|
||||||
|
end
|
||||||
|
end
|
||||||
elseif self:GetTeamOwned() == TeamOnPoint then
|
elseif self:GetTeamOwned() == TeamOnPoint then
|
||||||
-- Team that owns the point is on the point
|
-- Team that owns the point is on the point
|
||||||
|
|
||||||
|
@ -101,15 +116,12 @@ function ENT:Think()
|
||||||
self.LastCaptureTime = CurTime()
|
self.LastCaptureTime = CurTime()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- rewards
|
if RoundActive and !BlockPoints and (self.nextpoints or 0) <= CurTime() and self:GetTeamOwned() > 0 then
|
||||||
--for ply, edata in pairs(self.Memory) do
|
-- self:EmitSound("buttons/button10.wav", 70, 100, 1)
|
||||||
-- edata.xpcollected = (edata.xpcollected or 0) + (COLLECTED * 200)
|
self.nextpoints = math.floor( CurTime() + 1 )
|
||||||
-- local sap = math.floor(edata.xpcollected)
|
|
||||||
-- if sap >= 1 then
|
BennyGame:AddScoreForTeam( self:GetTeamOwned(), 1 )
|
||||||
-- edata.xpcollected = edata.xpcollected - sap
|
end
|
||||||
-- ply:RewardXP( sap )
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
|
|
||||||
local per = self:GetCapturePercent()
|
local per = self:GetCapturePercent()
|
||||||
|
|
||||||
|
@ -125,7 +137,6 @@ end
|
||||||
|
|
||||||
function ENT:Touch( ent )
|
function ENT:Touch( ent )
|
||||||
if ent:IsPlayer() then
|
if ent:IsPlayer() then
|
||||||
--print( ent, CurTime() )
|
|
||||||
ent:SetTouchedObjective( self )
|
ent:SetTouchedObjective( self )
|
||||||
ent:SetTouchedObjectiveTime( CurTime() )
|
ent:SetTouchedObjectiveTime( CurTime() )
|
||||||
if !self.Memory[ent] then
|
if !self.Memory[ent] then
|
||||||
|
|
|
@ -5,44 +5,85 @@ BennyGame = BennyGame or {}
|
||||||
BG_GTYPE_CAMPAIGN = 0
|
BG_GTYPE_CAMPAIGN = 0
|
||||||
BG_GTYPE_MP = 1
|
BG_GTYPE_MP = 1
|
||||||
|
|
||||||
local cGametype = CreateConVar("b-gametype", 1, nil, "0 for Campaign, 1 for MP")
|
local cGametype = CreateConVar("b-gametype", 1, nil, "0 for Campaign, 1 for MP")
|
||||||
local cGamemode = CreateConVar("b-gamemode", 2, nil, "MP:\n0 - TDM\n1 - FFA\n2 - Domination\n3 - CTF\n4 - Bomb\n5 - Hardpoint\n6 - Demolition")
|
local cGamemode = CreateConVar("b-gamemode", "dom", nil, "")
|
||||||
|
|
||||||
|
local cMinplayers = CreateConVar("b-g_minplayers", 2)
|
||||||
|
local cPregame = CreateConVar("b-g_pregame", 15)
|
||||||
|
local cPostgame = CreateConVar("b-g_postgame", 15)
|
||||||
|
local cIntermission = CreateConVar("b-g_intermission", 10)
|
||||||
|
|
||||||
function BennyGame:GetType()
|
function BennyGame:GetType()
|
||||||
return cGametype:GetBool() and BG_GTYPE_MP or BG_GTYPE_CAMPAIGN
|
return cGametype:GetBool() and BG_GTYPE_MP or BG_GTYPE_CAMPAIGN
|
||||||
end
|
end
|
||||||
|
|
||||||
BennyGame.TeamsInPlay = {
|
GM.TeamBased = BennyGame:GetType() == BG_GTYPE_MP
|
||||||
[4] = 1,
|
|
||||||
[3] = 2,
|
|
||||||
}
|
|
||||||
BennyGame.TeamToFaction = table.Flip( BennyGame.TeamsInPlay )
|
|
||||||
BennyGame.TeamCount = table.Count(BennyGame.TeamsInPlay)
|
|
||||||
|
|
||||||
BG_GMODE_TDM = 0
|
|
||||||
BG_GMODE_FFA = 1
|
|
||||||
BG_GMODE_DOMINATION = 2
|
|
||||||
BG_GMODE_CTF = 3
|
|
||||||
BG_GMODE_BOMB = 4
|
|
||||||
BG_GMODE_HARDPOINT = 5
|
|
||||||
BG_GMODE_DEMOLITION = 6
|
|
||||||
|
|
||||||
function BennyGame:GetMode()
|
function BennyGame:GetMode()
|
||||||
return BG_GMODE_TDM
|
return cGamemode:GetString()
|
||||||
end
|
end
|
||||||
|
|
||||||
hook.Add("Initialize", "Benny_Initialize", function()
|
BennyGame.TeamsInPlay = {
|
||||||
-- local mapscript = "benny_maps/" .. game.GetMap() .. "_init.lua"
|
4,
|
||||||
-- AddCSLuaFile(mapscript)
|
3,
|
||||||
-- include(mapscript)
|
}
|
||||||
end)
|
BennyGame.TeamCount = #BennyGame.TeamsInPlay
|
||||||
|
|
||||||
hook.Add("InitPostEntity", "Benny_InitPostEntity", function()
|
BennyGame.Gamemodes = {
|
||||||
-- local mapscript = "benny_maps/" .. game.GetMap() .. "_initpostentity.lua"
|
["free"] = {
|
||||||
-- AddCSLuaFile(mapscript)
|
name = "#Gamemode.free.Name",
|
||||||
-- include(mapscript)
|
description = "#Gamemode.free.Description",
|
||||||
end)
|
},
|
||||||
|
["tdm"] = {
|
||||||
|
name = "#Gamemode.tdm.Name",
|
||||||
|
description = "#Gamemode.tdm.Description",
|
||||||
|
|
||||||
|
scorelimit = CreateConVar("b-g_tdm_scorelimit", 75 ),
|
||||||
|
timelimit = CreateConVar("b-g_tdm_timelimit", 10 ),
|
||||||
|
},
|
||||||
|
["ffa"] = {
|
||||||
|
name = "#Gamemode.ffa.Name",
|
||||||
|
description = "#Gamemode.ffa.Description",
|
||||||
|
|
||||||
|
scorelimit = CreateConVar("b-g_ffa_scorelimit", 30 ),
|
||||||
|
timelimit = CreateConVar("b-g_ffa_timelimit", 10 ),
|
||||||
|
},
|
||||||
|
["snd"] = {
|
||||||
|
name = "#Gamemode.snd.Name",
|
||||||
|
description = "#Gamemode.snd.Description",
|
||||||
|
|
||||||
|
scorelimit = CreateConVar("b-g_snd_scorelimit", 6 ),
|
||||||
|
timelimit = CreateConVar("b-g_snd_timelimit", 2.5 ),
|
||||||
|
},
|
||||||
|
["ctf"] = {
|
||||||
|
name = "#Gamemode.ctf.Name",
|
||||||
|
description = "#Gamemode.ctf.Description",
|
||||||
|
|
||||||
|
scorelimit = CreateConVar("b-g_ctf_scorelimit", 3 ),
|
||||||
|
timelimit = CreateConVar("b-g_ctf_timelimit", 10 ),
|
||||||
|
},
|
||||||
|
["dom"] = {
|
||||||
|
name = "#Gamemode.dom.Name",
|
||||||
|
description = "#Gamemode.dom.Description",
|
||||||
|
|
||||||
|
scorelimit = CreateConVar("b-g_dom_scorelimit", 1000 ),
|
||||||
|
timelimit = CreateConVar("b-g_dom_timelimit", 10 ),
|
||||||
|
},
|
||||||
|
["dem"] = {
|
||||||
|
name = "#Gamemode.dem.Name",
|
||||||
|
description = "#Gamemode.dem.Description",
|
||||||
|
|
||||||
|
scorelimit = CreateConVar("b-g_dem_scorelimit", 3 ),
|
||||||
|
timelimit = CreateConVar("b-g_dem_timelimit", 5 ),
|
||||||
|
},
|
||||||
|
["hp"] = {
|
||||||
|
name = "#Gamemode.hp.Name",
|
||||||
|
description = "#Gamemode.hp.Description",
|
||||||
|
|
||||||
|
scorelimit = CreateConVar("b-g_hp_scorelimit", 300 ),
|
||||||
|
timelimit = CreateConVar("b-g_hp_timelimit", 10 ),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
local thetypes = {
|
local thetypes = {
|
||||||
"Float",
|
"Float",
|
||||||
|
@ -104,12 +145,164 @@ hook.Add("InitPostEntity", "Benny_Gamestate_InitPostEntity", function()
|
||||||
BennyGame:Accessor( "RoundStartedAt", "Float", 0 )
|
BennyGame:Accessor( "RoundStartedAt", "Float", 0 )
|
||||||
BennyGame:Accessor( "PregameStartedAt", "Float", 0 )
|
BennyGame:Accessor( "PregameStartedAt", "Float", 0 )
|
||||||
BennyGame:Accessor( "RoundFinishedAt", "Float", 0 )
|
BennyGame:Accessor( "RoundFinishedAt", "Float", 0 )
|
||||||
BennyGame:Accessor( "State", "Int", 0 )
|
|
||||||
BennyGame:Accessor( "Round", "Int", 1 )
|
BennyGame:Accessor( "State", "Int", 0 )
|
||||||
BennyGame:Accessor( "SwappedAtRound", "Int", 1 )
|
BennyGame:Accessor( "Round", "Int", 1 )
|
||||||
|
BennyGame:Accessor( "SwappedAtRound", "Int", 1 )
|
||||||
|
BennyGame:Accessor( "TimeExtension", "Int", 0 )
|
||||||
|
|
||||||
|
BennyGame:Accessor( "Team1_Score", "Int", 0 )
|
||||||
|
BennyGame:Accessor( "Team2_Score", "Int", 0 )
|
||||||
|
BennyGame:Accessor( "Team3_Score", "Int", 0 )
|
||||||
|
BennyGame:Accessor( "Team4_Score", "Int", 0 )
|
||||||
|
BennyGame:Accessor( "Team5_Score", "Int", 0 )
|
||||||
|
BennyGame:Accessor( "Team6_Score", "Int", 0 )
|
||||||
|
|
||||||
BennyGame:Accessor( "TeamsSwapped", "Bool", false )
|
BennyGame:Accessor( "TeamsSwapped", "Bool", false )
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
function BennyGame:GetScoreLimit()
|
||||||
|
if !BennyGame.Gamemodes[BennyGame:GetMode()].scorelimit then return false end
|
||||||
|
return BennyGame.Gamemodes[BennyGame:GetMode()].scorelimit:GetInt()
|
||||||
|
end
|
||||||
|
|
||||||
|
function BennyGame:GetTimeLimit()
|
||||||
|
if !BennyGame.Gamemodes[BennyGame:GetMode()].timelimit then return false end
|
||||||
|
return BennyGame.Gamemodes[BennyGame:GetMode()].timelimit:GetInt() + BennyGame:GetTimeExtension()
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function BennyGame:GetPregameTime()
|
||||||
|
return cPregame:GetInt()
|
||||||
|
end
|
||||||
|
|
||||||
|
function BennyGame:GetPostgameTime()
|
||||||
|
return cPostgame:GetInt()
|
||||||
|
end
|
||||||
|
|
||||||
|
function BennyGame:GetIntermissionTime()
|
||||||
|
return cIntermission:GetInt()
|
||||||
|
end
|
||||||
|
|
||||||
|
function BennyGame:GetScoreForTeam( teamid )
|
||||||
|
return BennyGame["GetTeam" .. teamid .. "_Score"]( self )
|
||||||
|
end
|
||||||
|
|
||||||
|
function BennyGame:SetScoreForTeam( teamid, var )
|
||||||
|
return BennyGame["SetTeam" .. teamid .. "_Score"]( self, var )
|
||||||
|
end
|
||||||
|
|
||||||
|
function BennyGame:AddScoreForTeam( teamid, var )
|
||||||
|
if Nuke then return end
|
||||||
|
if BennyGame:GetState() != BG_STATE_ACTIVE then return end
|
||||||
|
self:SetScoreForTeam( teamid, self:GetScoreForTeam( teamid ) + (var or 1) )
|
||||||
|
|
||||||
|
if self:GetScoreForTeam( teamid ) >= BennyGame:GetScoreLimit() then
|
||||||
|
BennyGame:EndRound( BG_ER_SCORELIMIT, teamid )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
BG_ER_TIMELIMIT = 0
|
||||||
|
BG_ER_SCORELIMIT = 1
|
||||||
|
BG_ER_NUKE = 2
|
||||||
|
|
||||||
|
function BennyGame:StartRound()
|
||||||
|
PrintMessage(HUD_PRINTCENTER, "Round start!")
|
||||||
|
BennyGame:SetState( BG_STATE_ACTIVE )
|
||||||
|
BennyGame:SetRoundStartedAt( CurTime() )
|
||||||
|
--game.CleanUpMap()
|
||||||
|
--for _, ply in player.Iterator() do
|
||||||
|
-- ply:Spawn()
|
||||||
|
--end
|
||||||
|
end
|
||||||
|
|
||||||
|
function BennyGame:EndRound( reason, forceteam )
|
||||||
|
local winningteam = forceteam
|
||||||
|
BennyGame:SetState( BG_STATE_POST )
|
||||||
|
BennyGame:SetRoundFinishedAt( CurTime() )
|
||||||
|
|
||||||
|
if !winningteam then
|
||||||
|
-- who has the most score
|
||||||
|
|
||||||
|
local HighestScore, HighestTeam = 0, 0
|
||||||
|
for TeamID, RealTeamID in ipairs( BennyGame.TeamsInPlay ) do
|
||||||
|
local ThisScore = BennyGame:GetScoreForTeam( RealTeamID )
|
||||||
|
if HighestScore < ThisScore then
|
||||||
|
HighestScore = ThisScore
|
||||||
|
HighestTeam = RealTeamID
|
||||||
|
print("highest score to do it to em", HighestScore, TEAMS[HighestTeam].name)
|
||||||
|
winningteam = HighestTeam
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for TeamID, RealTeamID in ipairs( BennyGame.TeamsInPlay ) do
|
||||||
|
local ThisScore = BennyGame:GetScoreForTeam( RealTeamID )
|
||||||
|
if RealTeamID == HighestTeam then continue end
|
||||||
|
if HighestScore < ThisScore then
|
||||||
|
print("clearly there's been a failure", RealTeamID, ThisScore, HighestTeam, HighestScore)
|
||||||
|
elseif HighestScore == ThisScore then
|
||||||
|
print("this looks like a tie", RealTeamID, HighestTeam)
|
||||||
|
winningteam = 0
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
local TheFull = "["
|
||||||
|
TheFull = TheFull .. ((reason==0 and "TIME END!] ") or (reason==1 and "SCORE END!] ") or ("MISSING END!] "))
|
||||||
|
if winningteam == 0 then
|
||||||
|
TheFull = "It's a tie! "
|
||||||
|
else
|
||||||
|
TheFull = TheFull .. l8(TEAMS[winningteam].name) .. " wins! "
|
||||||
|
end
|
||||||
|
TheFull = TheFull .. cPostgame:GetInt() .. "s until the next round."
|
||||||
|
PrintMessage(HUD_PRINTCENTER, TheFull)
|
||||||
|
|
||||||
|
local roundtime = CurTime() - BennyGame:GetRoundStartedAt()
|
||||||
|
print( "That round lasted " .. math.ceil(roundtime) .. " seconds." )
|
||||||
|
end
|
||||||
|
|
||||||
|
concommand.Add("b-cheat_scoreset", function( ply, cmd, args )
|
||||||
|
if !args[1] then
|
||||||
|
print( "Needs a team ID." )
|
||||||
|
for index, data in ipairs( TEAMS ) do
|
||||||
|
print( index .. " - " .. data.id )
|
||||||
|
end
|
||||||
|
elseif !args[2] then
|
||||||
|
print( "Needs an integer." )
|
||||||
|
else
|
||||||
|
BennyGame:SetScoreForTeam( TEAMS_IDorName( args[1] ), args[2] )
|
||||||
|
print( "Team " .. args[1] .. " score now " .. BennyGame:GetScoreForTeam( TEAMS_IDorName( args[1] ) ) )
|
||||||
|
end
|
||||||
|
end, function( cmd, args )
|
||||||
|
return BENNY.SimpleAutoComplete( cmd, args, TEAMS_IDs )
|
||||||
|
end )
|
||||||
|
|
||||||
|
concommand.Add("b-cheat_scoreadd", function( ply, cmd, args )
|
||||||
|
if !args[1] then
|
||||||
|
print( "Needs a team ID." )
|
||||||
|
for index, data in ipairs( TEAMS ) do
|
||||||
|
print( index .. " - " .. data.id )
|
||||||
|
end
|
||||||
|
else
|
||||||
|
BennyGame:AddScoreForTeam( TEAMS_IDorName( args[1] ), args[2] )
|
||||||
|
print( "Team " .. args[1] .. " score now " .. BennyGame:GetScoreForTeam( TEAMS_IDorName( args[1] ) ) )
|
||||||
|
end
|
||||||
|
end, function( cmd, args )
|
||||||
|
return BENNY.SimpleAutoComplete( cmd, args, TEAMS_IDs )
|
||||||
|
end )
|
||||||
|
|
||||||
|
concommand.Add("b-cheat_setstate", function( ply, cmd, args )
|
||||||
|
if !args[1] then
|
||||||
|
print( "Needs an integer 0 waiting for palyers 1 pre 2 active 3 post" )
|
||||||
|
else
|
||||||
|
BennyGame:SetState( args[1] )
|
||||||
|
end
|
||||||
|
end, function( cmd, args )
|
||||||
|
return BENNY.SimpleAutoComplete( cmd, args, TEAMS_IDs )
|
||||||
|
end )
|
||||||
|
|
||||||
hook.Add("Think", "Benny_Gamestate_Think", function()
|
hook.Add("Think", "Benny_Gamestate_Think", function()
|
||||||
if SERVER then
|
if SERVER then
|
||||||
local World = Entity(0)
|
local World = Entity(0)
|
||||||
|
@ -127,19 +320,35 @@ hook.Add("Think", "Benny_Gamestate_Think", function()
|
||||||
|
|
||||||
count = count + 1
|
count = count + 1
|
||||||
end
|
end
|
||||||
|
if count >= cMinplayers:GetInt() then
|
||||||
|
roundstate = BG_STATE_PRE
|
||||||
|
BennyGame:SetState( roundstate )
|
||||||
|
BennyGame:SetPregameStartedAt( CurTime() )
|
||||||
|
PrintMessage(HUD_PRINTCENTER, "Pregame. " .. cPregame:GetInt() .. "s until the round starts")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if roundstate == BG_STATE_PRE then
|
if roundstate == BG_STATE_PRE then
|
||||||
-- Pregame
|
-- Pregame
|
||||||
|
|
||||||
|
if BennyGame:GetPregameStartedAt() + BennyGame:GetPregameTime() <= CurTime() then
|
||||||
|
BennyGame:StartRound()
|
||||||
|
end
|
||||||
|
|
||||||
elseif roundstate == BG_STATE_POST then
|
elseif roundstate == BG_STATE_POST then
|
||||||
-- Postgame
|
-- Postgame
|
||||||
|
|
||||||
|
|
||||||
|
if BennyGame:GetRoundFinishedAt() + BennyGame:GetPostgameTime() <= CurTime() then
|
||||||
|
BennyGame:SetState( BG_STATE_WAITINGFORPLAYERS )
|
||||||
|
end
|
||||||
|
|
||||||
elseif roundstate == BG_STATE_ACTIVE then
|
elseif roundstate == BG_STATE_ACTIVE then
|
||||||
-- Active round
|
-- Active round
|
||||||
|
|
||||||
if (BennyGame:GetRoundStartedAt()) <= CurTime() then
|
if (BennyGame:GetRoundStartedAt()+BennyGame:GetTimeLimit()) <= CurTime() then
|
||||||
-- Round time expired
|
-- Round time expired
|
||||||
|
BennyGame:EndRound( BG_ER_TIMELIMIT )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -236,9 +236,9 @@ local fmlookup = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
local function QuickDrawBar( BARWIDE, BARTALL, faction_index, way )
|
local function QuickDrawBar( BARWIDE, BARTALL, RealTeamID, TeamID, way )
|
||||||
--local faction_index = "mp_cia"
|
|
||||||
local faction_info = FACTIONS[faction_index]
|
local faction_info = FACTIONS[ TEAMS[RealTeamID].factionid ]
|
||||||
hCol( faction_info.COLOR_DARK )
|
hCol( faction_info.COLOR_DARK )
|
||||||
hRect( 0, 0, BARWIDE, BARTALL )
|
hRect( 0, 0, BARWIDE, BARTALL )
|
||||||
hCol( faction_info.COLOR_MAIN )
|
hCol( faction_info.COLOR_MAIN )
|
||||||
|
@ -246,7 +246,10 @@ local function QuickDrawBar( BARWIDE, BARTALL, faction_index, way )
|
||||||
|
|
||||||
local count = 6
|
local count = 6
|
||||||
|
|
||||||
local perc = 6/count--0.23
|
local Score_Current = BennyGame:GetScoreForTeam( RealTeamID )
|
||||||
|
local Score_ToWin = BennyGame:GetScoreLimit()
|
||||||
|
|
||||||
|
local perc = Score_Current/Score_ToWin
|
||||||
local width = math.ceil( (BARWIDE-6)*perc )
|
local width = math.ceil( (BARWIDE-6)*perc )
|
||||||
if way then
|
if way then
|
||||||
hRect( BARWIDE - 3 - width, 3, width, BARTALL-6 )
|
hRect( BARWIDE - 3 - width, 3, width, BARTALL-6 )
|
||||||
|
@ -268,9 +271,15 @@ local function QuickDrawBar( BARWIDE, BARTALL, faction_index, way )
|
||||||
if way then
|
if way then
|
||||||
local x, y = hXY( BARWIDE - 5, 0 )
|
local x, y = hXY( BARWIDE - 5, 0 )
|
||||||
qt( faction_info.CHARNAME, "HUD_36", x, y, faction_info.COLOR_DARK, TEXT_ALIGN_RIGHT, nil, faction_info.COLOR_MAIN )
|
qt( faction_info.CHARNAME, "HUD_36", x, y, faction_info.COLOR_DARK, TEXT_ALIGN_RIGHT, nil, faction_info.COLOR_MAIN )
|
||||||
|
|
||||||
|
local x, y = hXY( BARWIDE, BARTALL )
|
||||||
|
qt( Score_Current .. " / " .. Score_ToWin, "HUD_24", x, y, faction_info.COLOR_MAIN, TEXT_ALIGN_RIGHT, nil, faction_info.COLOR_DARK )
|
||||||
else
|
else
|
||||||
local x, y = hXY( 5, 0 )
|
local x, y = hXY( 5, 0 )
|
||||||
qt( faction_info.CHARNAME, "HUD_36", x, y, faction_info.COLOR_DARK, nil, nil, faction_info.COLOR_MAIN )
|
qt( faction_info.CHARNAME, "HUD_36", x, y, faction_info.COLOR_DARK, nil, nil, faction_info.COLOR_MAIN )
|
||||||
|
|
||||||
|
local x, y = hXY( 0, BARTALL )
|
||||||
|
qt( Score_Current .. " / " .. Score_ToWin, "HUD_24", x, y, faction_info.COLOR_MAIN, nil, nil, faction_info.COLOR_DARK )
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Players alive
|
-- Players alive
|
||||||
|
@ -477,12 +486,13 @@ function GM:HUDPaint()
|
||||||
--hRect( 0, 0, 1, 60 )
|
--hRect( 0, 0, 1, 60 )
|
||||||
|
|
||||||
-- Score
|
-- Score
|
||||||
for i=1, BennyGame.TeamCount do
|
local count = 1
|
||||||
local o = i-1
|
for TeamID, RealTeamID in ipairs( BennyGame.TeamsInPlay ) do
|
||||||
local lor =
|
local o = count-1
|
||||||
S_Push( i%2==1 and (-BARWIDE - 1 - GAP) or (0 + 1 + GAP), (BARTALL+2+16+2)*math.floor(o/2) )
|
S_Push( count%2==1 and (-BARWIDE - 1 - GAP) or (0 + 1 + GAP), (BARTALL+2+16+2)*math.floor(o/2) )
|
||||||
QuickDrawBar( BARWIDE, BARTALL, TEAMS[BennyGame.TeamToFaction[i]].factionid )
|
QuickDrawBar( BARWIDE, BARTALL, RealTeamID, TeamID, count%2==0 )
|
||||||
S_Pop()
|
S_Pop()
|
||||||
|
count = count + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Timer
|
-- Timer
|
||||||
|
@ -493,9 +503,18 @@ function GM:HUDPaint()
|
||||||
hCol( COLOR_MAIN )
|
hCol( COLOR_MAIN )
|
||||||
hORect( 2, 2, DISPLAYWIDE-4, DISPLAYTALL-4, 1 )
|
hORect( 2, 2, DISPLAYWIDE-4, DISPLAYTALL-4, 1 )
|
||||||
|
|
||||||
local d1, d2
|
local stupidtime = CurTime()
|
||||||
if BennyGame:GetState() == BG_STATE_ACTIVE then
|
if BennyGame:GetState() == BG_STATE_ACTIVE then
|
||||||
local tt = string.FormattedTime( math.max( ROUNDEND-CurTime(), 0 ) )
|
stupidtime = BennyGame:GetRoundStartedAt() + BennyGame:GetTimeLimit() - CurTime()
|
||||||
|
elseif BennyGame:GetState() == BG_STATE_PRE then
|
||||||
|
stupidtime = BennyGame:GetPregameStartedAt() + BennyGame:GetPregameTime() - CurTime()
|
||||||
|
elseif BennyGame:GetState() == BG_STATE_POST then
|
||||||
|
stupidtime = BennyGame:GetRoundFinishedAt() + BennyGame:GetPostgameTime() - CurTime()
|
||||||
|
end
|
||||||
|
|
||||||
|
if BennyGame:GetState() != BG_STATE_WAITINGFORPLAYERS then
|
||||||
|
local d1, d2
|
||||||
|
local tt = string.FormattedTime( math.max( stupidtime, 0 ) )
|
||||||
if tt.m > 0 then
|
if tt.m > 0 then
|
||||||
d1 = string.format( "%01i:%02i", tt.m, tt.s )
|
d1 = string.format( "%01i:%02i", tt.m, tt.s )
|
||||||
d2 = false--tt.s
|
d2 = false--tt.s
|
||||||
|
@ -506,9 +525,7 @@ function GM:HUDPaint()
|
||||||
d1 = string.format( "%02i", tt.s )
|
d1 = string.format( "%02i", tt.s )
|
||||||
d2 = string.format( ".%02i", tt.ms )
|
d2 = string.format( ".%02i", tt.ms )
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
if d1 then
|
|
||||||
surface.SetFont("HUD_48")
|
surface.SetFont("HUD_48")
|
||||||
local twid = surface.GetTextSize(d1)
|
local twid = surface.GetTextSize(d1)
|
||||||
if d2 then
|
if d2 then
|
||||||
|
@ -525,6 +542,19 @@ function GM:HUDPaint()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local x, y = hXY( DISPLAYWIDE/2, -16 )
|
||||||
|
local TITLE
|
||||||
|
if BennyGame:GetState() == BG_STATE_PRE then
|
||||||
|
TITLE = "PREGAME"
|
||||||
|
elseif BennyGame:GetState() == BG_STATE_POST then
|
||||||
|
TITLE = "POSTGAME"
|
||||||
|
elseif BennyGame:GetState() == BG_STATE_WAITINGFORPLAYERS then
|
||||||
|
TITLE = "WAITING FOR PLAYERS"
|
||||||
|
end
|
||||||
|
if TITLE then
|
||||||
|
qt( TITLE, "HUD_16", x, y, COLOR_MAIN, TEXT_ALIGN_CENTER, nil, COLOR_DARK )
|
||||||
|
end
|
||||||
|
|
||||||
if false then
|
if false then
|
||||||
local myteamwins = 2
|
local myteamwins = 2
|
||||||
local enemywins = 3
|
local enemywins = 3
|
||||||
|
|
|
@ -6,6 +6,34 @@ GM.Website = "N/A"
|
||||||
|
|
||||||
BENNY = {}
|
BENNY = {}
|
||||||
|
|
||||||
|
function BENNY.SimpleAutoComplete( cmd, args, ... ) -- just stole it from the wiki
|
||||||
|
local possibleArgs = { ... }
|
||||||
|
local autoCompletes = {}
|
||||||
|
|
||||||
|
--TODO: Handle "test test" "test test" type arguments
|
||||||
|
args = args:upper()
|
||||||
|
local arg = string.Split( args:TrimLeft(), " " )
|
||||||
|
|
||||||
|
local lastItem = nil
|
||||||
|
for i, str in pairs( arg ) do
|
||||||
|
if ( str == "" && ( lastItem && lastItem == "" ) ) then table.remove( arg, i ) end
|
||||||
|
lastItem = str
|
||||||
|
end -- Remove empty entries. Can this be done better?
|
||||||
|
|
||||||
|
local numArgs = #arg
|
||||||
|
local lastArg = table.remove( arg, numArgs )
|
||||||
|
local prevArgs = table.concat( arg, " " )
|
||||||
|
if ( #prevArgs > 0 ) then prevArgs = " " .. prevArgs end
|
||||||
|
|
||||||
|
local possibilities = possibleArgs[ numArgs ] or { lastArg }
|
||||||
|
for _, acStr in pairs( possibilities ) do
|
||||||
|
if ( !acStr:StartsWith( lastArg ) ) then continue end
|
||||||
|
table.insert( autoCompletes, cmd .. prevArgs .. " " .. acStr )
|
||||||
|
end
|
||||||
|
|
||||||
|
return autoCompletes
|
||||||
|
end
|
||||||
|
|
||||||
local AC, IN = AddCSLuaFile, include
|
local AC, IN = AddCSLuaFile, include
|
||||||
|
|
||||||
local CL = SERVER and AddCSLuaFile or include
|
local CL = SERVER and AddCSLuaFile or include
|
||||||
|
|
|
@ -9,9 +9,11 @@ concommand.Add("b-cheat_setteam", function( ply, cmd, args )
|
||||||
print( index .. " - " .. data.id )
|
print( index .. " - " .. data.id )
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
ply:SetTeam( args[1] )
|
ply:SetTeam( TEAMS_IDorName( args[1] ) )
|
||||||
end
|
end
|
||||||
end)
|
end, function( cmd, args )
|
||||||
|
return BENNY.SimpleAutoComplete( cmd, args, TEAMS_IDs )
|
||||||
|
end )
|
||||||
|
|
||||||
TEAMS = {
|
TEAMS = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -64,7 +66,9 @@ TEAMS = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
TEAMS_IDtoTeam = {
|
-- "PLASOF" -> Team info
|
||||||
|
TEAMS_IDtoData = {
|
||||||
|
[TEAMS[0].id] = TEAMS[0],
|
||||||
[TEAMS[1].id] = TEAMS[1],
|
[TEAMS[1].id] = TEAMS[1],
|
||||||
[TEAMS[2].id] = TEAMS[2],
|
[TEAMS[2].id] = TEAMS[2],
|
||||||
[TEAMS[3].id] = TEAMS[3],
|
[TEAMS[3].id] = TEAMS[3],
|
||||||
|
@ -73,7 +77,8 @@ TEAMS_IDtoTeam = {
|
||||||
[TEAMS[6].id] = TEAMS[6],
|
[TEAMS[6].id] = TEAMS[6],
|
||||||
}
|
}
|
||||||
|
|
||||||
TEAMS_FIDtoTeam = {
|
-- "mp_plasof" -> Team info
|
||||||
|
TEAMS_FIDtoData = {
|
||||||
[TEAMS[0].factionid] = TEAMS[0],
|
[TEAMS[0].factionid] = TEAMS[0],
|
||||||
[TEAMS[1].factionid] = TEAMS[1],
|
[TEAMS[1].factionid] = TEAMS[1],
|
||||||
[TEAMS[2].factionid] = TEAMS[2],
|
[TEAMS[2].factionid] = TEAMS[2],
|
||||||
|
@ -83,68 +88,75 @@ TEAMS_FIDtoTeam = {
|
||||||
[TEAMS[6].factionid] = TEAMS[6],
|
[TEAMS[6].factionid] = TEAMS[6],
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Team 1 is CIA, Team 2 is HALO for now
|
-- 3 -> "PLASOF"
|
||||||
TEAMS_Placeholder = {
|
TEAMS_IDs = {
|
||||||
[1] = "benny_playerstart_team1",
|
TEAMS[1].id,
|
||||||
[2] = "benny_playerstart_team2",
|
TEAMS[2].id,
|
||||||
[3] = "benny_playerstart_team3",
|
TEAMS[3].id,
|
||||||
[4] = "benny_playerstart_team4",
|
TEAMS[4].id,
|
||||||
[5] = "benny_playerstart_team5",
|
TEAMS[5].id,
|
||||||
[6] = "benny_playerstart_team6",
|
TEAMS[6].id,
|
||||||
}
|
}
|
||||||
|
|
||||||
TEAMS_Current = {
|
-- "PLASOF" -> 3
|
||||||
[1] = 1,
|
TEAM_IDs2 = table.Flip( TEAMS_IDs )
|
||||||
[2] = 2,
|
|
||||||
}
|
function TEAMS_IDorName( id )
|
||||||
|
if isnumber( id ) then
|
||||||
|
return id
|
||||||
|
else
|
||||||
|
return TEAM_IDs2[string.upper(id)]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function GM:CreateTeams()
|
function GM:CreateTeams()
|
||||||
for index, data in ipairs( TEAMS ) do
|
for index, data in ipairs( TEAMS ) do
|
||||||
team.SetUp( index, data.name, Color( 0, 0, 255 ) )
|
team.SetUp( index, data.name, Color( 0, 0, 255 ) )
|
||||||
team.SetSpawnPoint( index, "benny_playerstart_team" .. index )
|
team.SetSpawnPoint( index, {"benny_playerstart_team" .. index} )
|
||||||
end
|
end
|
||||||
|
|
||||||
team.SetSpawnPoint( TEAM_SPECTATOR, "worldspawn" )
|
team.SetSpawnPoint( TEAM_SPECTATOR, "worldspawn" )
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function GM:PlayerSelectTeamSpawn( TeamID, ply )
|
||||||
|
print( TeamID )
|
||||||
|
local SpawnPoints = team.GetSpawnPoints( TeamID )
|
||||||
|
PrintTable( SpawnPoints )
|
||||||
|
if ( !SpawnPoints || table.IsEmpty( SpawnPoints ) ) then print("fail")return end
|
||||||
|
|
||||||
|
local ChosenSpawnPoint = nil
|
||||||
|
|
||||||
|
for i = 0, 6 do
|
||||||
|
ChosenSpawnPoint = table.Random( SpawnPoints )
|
||||||
|
if ( hook.Call( "IsSpawnpointSuitable", GAMEMODE, ply, ChosenSpawnPoint, i == 6 ) ) then
|
||||||
|
return ChosenSpawnPoint
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return ChosenSpawnPoint
|
||||||
|
end
|
||||||
|
|
||||||
function GM:PlayerSelectSpawn( ply, transition )
|
function GM:PlayerSelectSpawn( ply, transition )
|
||||||
if ( transition ) then return end
|
if ( transition ) then return end
|
||||||
|
|
||||||
if BennyGame:GetType() == BG_GTYPE_MP then
|
if BennyGame:GetType() == BG_GTYPE_MP then
|
||||||
local ent = self:PlayerSelectTeamSpawn( ply:Team(), ply )
|
local ent = self:PlayerSelectTeamSpawn( ply:Team(), ply )
|
||||||
if IsValid( ent ) then return ent end
|
debug.Trace()
|
||||||
|
if IsValid( ent ) then print("win") return ent end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function GM:PlayerSelectTeamSpawn( TeamID, ply )
|
|
||||||
local SpawnPoints = team.GetSpawnPoints( TeamID )
|
|
||||||
if ( !SpawnPoints || table.IsEmpty( SpawnPoints ) ) then return end
|
|
||||||
|
|
||||||
local ChosenSpawnPoint = nil
|
|
||||||
|
|
||||||
for i = 0, 6 do
|
|
||||||
|
|
||||||
ChosenSpawnPoint = table.Random( SpawnPoints )
|
|
||||||
if ( hook.Call( "IsSpawnpointSuitable", GAMEMODE, ply, ChosenSpawnPoint, i == 6 ) ) then
|
|
||||||
return ChosenSpawnPoint
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
return ChosenSpawnPoint
|
|
||||||
end
|
|
||||||
|
|
||||||
function BennyGame:BestAutoJoinTeam()
|
function BennyGame:BestAutoJoinTeam()
|
||||||
local SmallestTeam = BennyGame.TeamToFaction[math.random( 1, BennyGame.TeamCount )]
|
local SmallestTeam = BennyGame.TeamsInPlay[math.random( 1, BennyGame.TeamCount )]
|
||||||
local SmallestPlayers = 1000
|
local SmallestPlayers = 1000
|
||||||
|
|
||||||
for id, TeamInPlayID in pairs( BennyGame.TeamsInPlay ) do
|
for TeamID, RealTeamID in ipairs( BennyGame.TeamsInPlay ) do
|
||||||
if ( id != TEAM_SPECTATOR && id != TEAM_UNASSIGNED && id != TEAM_CONNECTING ) then
|
if ( RealTeamID != TEAM_SPECTATOR && RealTeamID != TEAM_UNASSIGNED && RealTeamID != TEAM_CONNECTING ) then
|
||||||
local PlayerCount = team.NumPlayers( id )
|
local PlayerCount = team.NumPlayers( RealTeamID )
|
||||||
if PlayerCount < SmallestPlayers or (PlayerCount == SmallestPlayers and id < SmallestTeam ) then
|
if PlayerCount < SmallestPlayers or (PlayerCount == SmallestPlayers and RealTeamID < SmallestTeam ) then
|
||||||
SmallestPlayers = PlayerCount
|
SmallestPlayers = PlayerCount
|
||||||
SmallestTeam = id
|
SmallestTeam = RealTeamID
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue