Gamemode Switching? {PLEASE HELP}

Post Reply
Axtown
New to forums
New to forums
Posts: 9
https://www.youtube.com/channel/UC40BgXanDqOYoVCYFDSTfHA
Joined: Tue May 01, 2012 6:03 am

Gamemode Switching? {PLEASE HELP}

Post by Axtown »

I've been trying to get my server perfect for the last two days. I've contacted Support numerous times. They were very helpful. I had a question that they could not answer, so hopefully you can answer this. I added Fretta Deathrun to the server and after every game (15 Rounds) it ask's you to choose the next Gamemode... (I want to remove this)

This might be the problem? Please answer me.


function GM:StartFrettaVote()
if GAMEMODE.m_bVotingStarted or GAMEMODE:InGamemodeVote() then return end
-- manually set what would be the result of a GM vote otherwise
GAMEMODE.WinningGamemode = "whateveryourdeathrungamemodeis"

GAMEMODE.m_bVotingStarted = true

GAMEMODE:ClearPlayerWants()

GAMEMODE:StartMapVote()
end
User avatar
kraze
Former staff
Former staff
Posts: 4362
Joined: Fri Sep 17, 2010 9:06 am
Location: California

Re: Gamemode Switching? {PLEASE HELP}

Post by kraze »

I downloaded the mod and I did not see any config files to set certain variables for it. That code you found does look like it controls the voting. If you wish you can comment it out and see if it stops the vote from occurring.
@Kraze^NFo> Juski has a very valid point
@Juski> Got my new signature, thanks!
@Kraze^NFo> Out of context!
@Juski> Doesn't matter!
@Juski> You said I had a valid point! You can't take it back now! It's out there!
Axtown
New to forums
New to forums
Posts: 9
Joined: Tue May 01, 2012 6:03 am

Re: Gamemode Switching? {PLEASE HELP}

Post by Axtown »

Well, it seems as if the Fretta Gamemode is doing this, not the Deathrun...
What would i put in my fretta_must_die.lua to stop the Gamemode Voting?
Axtown
New to forums
New to forums
Posts: 9
Joined: Tue May 01, 2012 6:03 am

Re: Gamemode Switching? {PLEASE HELP}

Post by Axtown »

I only need to shut down the Gamemode Voting, not the Map voting...

I've tried fretta_voting 0 (rcon, but it just freezes the game, so no luck)

Please explain to me thoroughly on how to do this...

Keep in mind, the Fretta Gamemode is doing this, not the deathrun.
Kropp
A regular
A regular
Posts: 48
Joined: Mon Apr 02, 2012 1:10 pm
Location: Canada, British Columbia
Contact:

Re: Gamemode Switching? {PLEASE HELP}

Post by Kropp »

May I suggest making a thread in http://facepunch.com/forums/337

They know a lot more about coding for garrysmod etc.
Image
Axtown
New to forums
New to forums
Posts: 9
Joined: Tue May 01, 2012 6:03 am

Re: Gamemode Switching? {PLEASE HELP}

Post by Axtown »

Kropp,
Thank you, but they're not very helpful... Maybe John would know?
User avatar
Edge100x
Founder
Founder
Posts: 12945
Joined: Thu Apr 18, 2002 11:04 pm
Location: Seattle
Contact:

Re: Gamemode Switching? {PLEASE HELP}

Post by Edge100x »

If you commented out everything in that function (leaving just the declaration and "end" bits), I would expect for it to longer do any voting. But, I am not very familiar with this particular topic.
Axtown
New to forums
New to forums
Posts: 9
Joined: Tue May 01, 2012 6:03 am

Re: Gamemode Switching? {PLEASE HELP}

Post by Axtown »

Ok, it's in the Fretta Gamemode folder. The function is in the cl_gmchanger.lua
This came with your server. What would i do to make the cl_gmchanger not activate and be skipped over to the maps voting.
Here's the script for the gamemode voter.

Code: Select all

require( "datastream" ) -- Have you tried Datastream (by DecoDaMan and Janorkie)?
include( "vgui/vgui_vote.lua" )


g_PlayableGamemodes = {}
g_bGotGamemodesTable = false

function RcvPlayableGamemodes( handler, id, rawdata, procdata ) 
      
	g_PlayableGamemodes = procdata
	g_bGotGamemodesTable = true
	 
 end 
 
datastream.Hook( "PlayableGamemodes", RcvPlayableGamemodes ); 

local GMChooser = nil 
local function GetVoteScreen()

	if ( IsValid( GMChooser ) ) then return GMChooser end
	
	GMChooser = vgui.Create( "VoteScreen" )
	return GMChooser

end
 

function GM:ShowGamemodeChooser()

	local votescreen = GetVoteScreen()
	votescreen:ChooseGamemode()

end

function GM:GamemodeWon( mode )

	local votescreen = GetVoteScreen()
	votescreen:FlashItem( mode )

end

function GM:ChangingGamemode( mode, map )

	local votescreen = GetVoteScreen()
	votescreen:FlashItem( map )

end

function GM:ShowMapChooserForGamemode( gmname )

	local votescreen = GetVoteScreen()
	votescreen:ChooseMap( gmname )

end


local ClassChooser = nil 
cl_classsuicide = CreateConVar( "cl_classsuicide", "0", { FCVAR_ARCHIVE } )

function GM:ShowClassChooser( TEAMID )

	if ( !GAMEMODE.SelectClass ) then return end
	if ( ClassChooser ) then ClassChooser:Remove() end

	ClassChooser = vgui.CreateFromTable( vgui_Splash )
	ClassChooser:SetHeaderText( "Choose Class" )
	ClassChooser:SetHoverText( "What class do you want to be?" );

	Classes = team.GetClass( TEAMID )
	for k, v in SortedPairs( Classes ) do
		
		local displayname = v
		local Class = player_class.Get( v )
		if ( Class && Class.DisplayName ) then
			displayname = Class.DisplayName
		end
		
		local description = "Click to spawn as " .. displayname
		
		if( Class and Class.Description ) then
			description = Class.Description
		end
		
		local func = function() if( cl_classsuicide:GetBool() ) then RunConsoleCommand( "kill" ) end RunConsoleCommand( "changeclass", k ) end
		local btn = ClassChooser:AddSelectButton( displayname, func, description )
		btn.m_colBackground = team.GetColor( TEAMID )
		
	end
	
	ClassChooser:AddCancelButton()
	ClassChooser:MakePopup()
	ClassChooser:NoFadeIn()

end
Axtown
New to forums
New to forums
Posts: 9
Joined: Tue May 01, 2012 6:03 am

Re: Gamemode Switching? {PLEASE HELP}

Post by Axtown »

I didn't realize until now that there are 2 lua files with GM voting scripts...
The above was the cl_gmchanger

This is the sv_gmchanger

Code: Select all

/*
	sv_gmchanger.lua - Gamemode Changer (server side)
	-----------------------------------------------------
	Most of the internal stuff for the votes is here and contains stuff you really don't
	want to override.
*/

require( "datastream" )

local g_PlayableGamemodes = {}

fretta_votesneeded = CreateConVar( "fretta_votesneeded", "0.7", { FCVAR_ARCHIVE } )
fretta_votetime = CreateConVar( "fretta_votetime", "20", { FCVAR_ARCHIVE } )
fretta_votegraceperiod = CreateConVar( "fretta_votegraceperiod", "30", { FCVAR_ARCHIVE } )


local function SendAvailableGamemodes( ply )

	datastream.StreamToClients( ply, "PlayableGamemodes", g_PlayableGamemodes );  
	
end

function GetRandomGamemodeName()

	local num = math.random( 1, table.Count( g_PlayableGamemodes ) )
	return table.Random( g_PlayableGamemodes ).name
	
end

function GetRandomGamemodeMap( gm )

	return table.Random( g_PlayableGamemodes[ gm ].maps )
	
end

function GetNumberOfGamemodeMaps( gm )

	return table.Count( g_PlayableGamemodes[ gm ].maps )
	
end

hook.Add( "PlayerInitialSpawn", "SendAvailableGamemodes", SendAvailableGamemodes ) 


local AllMaps = file.Find( "maps/*.bsp", true )
for key, map in pairs( AllMaps ) do
	AllMaps[ key ] = string.gsub( map, ".bsp", "" )
end

local GameModes = GetGamemodes()

for _, gm in pairs( GetGamemodes() ) do

	local info = file.Read( "gamemodes/"..gm.Name.."/info.txt", true )
	if ( info ) then
	
		local info = KeyValuesToTable( info )
		
		if ( info.selectable == 1 ) then
		
			g_PlayableGamemodes[ gm.Name ] = {}
			g_PlayableGamemodes[ gm.Name ].name = gm.Name
			g_PlayableGamemodes[ gm.Name ].label = info.name
			g_PlayableGamemodes[ gm.Name ].description = info.description
			g_PlayableGamemodes[ gm.Name ].author = info.author_name
			g_PlayableGamemodes[ gm.Name ].authorurl = info.author_url
			
			g_PlayableGamemodes[ gm.Name ].maps = {}
		
			if ( info.fretta_maps ) then
				for _, mapname in pairs( AllMaps ) do
					for _, p in pairs( info.fretta_maps ) do
						if ( string.find( mapname, p ) ) then
							table.insert( g_PlayableGamemodes[ gm.Name ].maps, mapname )
						end
					end
				end
			else
				g_PlayableGamemodes[ gm.Name ].maps = AllMaps
			end
			
			if ( info.fretta_maps_disallow ) then
				for key, mapname in pairs( g_PlayableGamemodes[ gm.Name ].maps ) do
					for _, p in pairs( info.fretta_maps_disallow ) do
						if ( string.find( mapname, p ) ) then
							g_PlayableGamemodes[ gm.Name ].maps[ key ] = nil
						end
					end
				end
			end

		end
		
	end
	
end

GameModes = nil

function GM:IsValidGamemode( gamemode, map )

	if ( g_PlayableGamemodes[ gamemode ] == nil ) then return false end
	
	if ( map == nil ) then return true end
	
	for _, mapname in pairs( g_PlayableGamemodes[ gamemode ].maps ) do
		if ( mapname == map ) then return true end
	end
	
	return false
	
end

local gVotes = {}

function GM:VotePlayGamemode( ply, gamemode )
	
	if ( !gamemode ) then return end
	if ( GAMEMODE.WinningGamemode ) then return end
	if ( !GAMEMODE:InGamemodeVote() ) then return end
	if ( !GAMEMODE:IsValidGamemode( gamemode ) ) then return end
	
	ply:SetNWString( "Wants", gamemode )
	
end

concommand.Add( "votegamemode", function( pl, cmd, args ) GAMEMODE:VotePlayGamemode( pl, args[1] ) end )

function GM:VotePlayMap( ply, map )
	
	if ( !map ) then return end
	if ( !GAMEMODE.WinningGamemode ) then return end
	if ( !GAMEMODE:InGamemodeVote() ) then return end
	if ( !GAMEMODE:IsValidGamemode( GAMEMODE.WinningGamemode, map ) ) then return end
	
	ply:SetNWString( "Wants", map )
	
end

concommand.Add( "votemap", function( pl, cmd, args ) GAMEMODE:VotePlayMap( pl, args[1] ) end )

function GM:GetFractionOfPlayersThatWantChange()

	local Humans = player.GetHumans()
	local NumHumans = #Humans
	local WantsChange = 0
	
	for k, player in pairs( Humans ) do
	
		if ( player:GetNWBool( "WantsVote" ) ) then
			WantsChange = WantsChange + 1
		end
		
		// Don't count players that aren't connected yet
		if ( !player:IsConnected() ) then
			NumHumans = NumHumans - 1
		end
	
	end
	
	local fraction = WantsChange / NumHumans
	
	return fraction, NumHumans, WantsChange

end

function GM:GetVotesNeededForChange()

	local Fraction, NumHumans, WantsChange = GAMEMODE:GetFractionOfPlayersThatWantChange()
	local FractionNeeded = fretta_votesneeded:GetFloat()
	
	local VotesNeeded = math.ceil( FractionNeeded * NumHumans )
	
	return VotesNeeded - WantsChange

end

function GM:CountVotesForChange()

	if ( CurTime() >= GetConVarNumber( "fretta_votegraceperiod" ) ) then // can't vote too early on
	
		if ( GAMEMODE:InGamemodeVote() ) then return end

		fraction = GAMEMODE:GetFractionOfPlayersThatWantChange()
		
		if ( fraction > fretta_votesneeded:GetFloat() ) then
			GAMEMODE:StartGamemodeVote()
			return false
		end
		
	end

	return true
end

function GM:VoteForChange( ply )

	if ( GetConVarNumber( "fretta_voting" ) == 0 ) then return end
	if ( ply:GetNWBool( "WantsVote" ) ) then return end
	
	ply:SetNWBool( "WantsVote", true )
	
	local VotesNeeded = GAMEMODE:GetVotesNeededForChange()
	local NeedTxt = "" 
	if ( VotesNeeded > 0 ) then NeedTxt = ", Color( 80, 255, 50 ), [[ (need "..VotesNeeded.." more) ]] " end
	
	if ( CurTime() < GetConVarNumber( "fretta_votegraceperiod" ) ) then // can't vote too early on
		local timediff = math.Round( GetConVarNumber( "fretta_votegraceperiod" ) - CurTime() );
		BroadcastLua( "chat.AddText( Entity("..ply:EntIndex().."), Color( 255, 255, 255 ), [[ voted to change the gamemode]] )" )
	else
		BroadcastLua( "chat.AddText( Entity("..ply:EntIndex().."), Color( 255, 255, 255 ), [[ voted to change the gamemode]] "..NeedTxt.." )" )
	end
	
	Msg( ply:Nick() .. " voted to change the gamemode\n" )
	
	timer.Simple( 5, function() GAMEMODE:CountVotesForChange() end )

end

concommand.Add( "VoteForChange", function( pl, cmd, args ) GAMEMODE:VoteForChange( pl ) end )
timer.Create( "VoteForChangeThink", 10, 0, function() if ( GAMEMODE ) then GAMEMODE.CountVotesForChange( GAMEMODE ) end end )


function GM:ClearPlayerWants()

	for k, ply in pairs( player.GetAll() ) do
		ply:SetNWString( "Wants", "" )
	end
	
end


function GM:StartGamemodeVote()

	if( !GAMEMODE.m_bVotingStarted ) then
	
		if ( fretta_voting:GetBool() ) then

			GAMEMODE:ClearPlayerWants()
			BroadcastLua( "GAMEMODE:ShowGamemodeChooser()" );
			SetGlobalBool( "InGamemodeVote", true )
			
		else

			GAMEMODE.WinningGamemode = GAMEMODE.FolderName
			return GAMEMODE:StartMapVote()
			
		end
		
		timer.Simple( fretta_votetime:GetFloat(), function() GAMEMODE:FinishGamemodeVote( true ) end )
		SetGlobalFloat( "VoteEndTime", CurTime() + fretta_votetime:GetFloat() )
		
		GAMEMODE.m_bVotingStarted = true;
		
	end

end

function GM:StartMapVote()
	
	// If there's only one map, let the 'random map' thing choose it
	if ( GetNumberOfGamemodeMaps( GAMEMODE.WinningGamemode ) == 1 ) then
		return GAMEMODE:FinishMapVote( true )
	end		
		
	BroadcastLua( "GAMEMODE:ShowMapChooserForGamemode( \""..GAMEMODE.WinningGamemode.."\" )" );	
	timer.Simple( fretta_votetime:GetFloat(), function() GAMEMODE:FinishMapVote() end )
	SetGlobalFloat( "VoteEndTime", CurTime() + fretta_votetime:GetFloat() )

end

function GM:GetWinningWant()

	local Votes = {}
	
	for k, ply in pairs( player.GetAll() ) do
	
		local want = ply:GetNWString( "Wants", nil )
		if ( want && want != "" ) then
			Votes[ want ] = Votes[ want ] or 0
			Votes[ want ] = Votes[ want ] + 1			
		end
		
	end
	
	return table.GetWinningKey( Votes )
	
end

function GM:WorkOutWinningGamemode()

	if ( GAMEMODE.WinningGamemode ) then return GAMEMODE.WinningGamemode end
	
	// Gamemode Voting disabled, return current gamemode
	if ( !fretta_voting:GetBool() ) then
		return GAMEMODE.FolderName
	end

	local winner = GAMEMODE:GetWinningWant()
	if ( !winner ) then return GetRandomGamemodeName() end
	
	return winner
	
end

function GM:GetWinningMap( WinningGamemode )

	if ( GAMEMODE.WinningMap ) then return GAMEMODE.WinningMap end

	local winner = GAMEMODE:GetWinningWant()
	if ( !winner ) then return GetRandomGamemodeMap( GAMEMODE.WinningGamemode ) end
	
	return winner
	
end

function GM:FinishGamemodeVote()
	
	GAMEMODE.WinningGamemode = GAMEMODE:WorkOutWinningGamemode()
	GAMEMODE:ClearPlayerWants()
	
	// Send bink bink notification
	BroadcastLua( "GAMEMODE:GamemodeWon( '"..GAMEMODE.WinningGamemode.."' )" );

	// Start map vote..
	timer.Simple( 2, function() GAMEMODE:StartMapVote() end )
	
end

function GM:FinishMapVote()
	
	GAMEMODE.WinningMap = GAMEMODE:GetWinningMap()
	GAMEMODE:ClearPlayerWants()
	
	// Send bink bink notification
	BroadcastLua( "GAMEMODE:ChangingGamemode( '"..GAMEMODE.WinningGamemode.."', '"..GAMEMODE.WinningMap.."' )" );

	// Start map vote?
	timer.Simple( 3, function() GAMEMODE:ChangeGamemode() end )
	
end

function GM:ChangeGamemode()
	
	local gm = GAMEMODE:WorkOutWinningGamemode()
	local mp = GAMEMODE:GetWinningMap()
	
	RunConsoleCommand( "changegamemode", mp, gm )
	
end
Post Reply