View Single Post
Siska1
Senior Member
Join Date: Feb 2020
Location: BedRock
Old 01-29-2024 , 07:15   Re: Polymorph: Mod Manager
Reply With Quote #1099

It continues to draw a vote and change without anyone pressing anything.
This is what I did take a look if you get a chance :
Code:
#include <amxmodx>
#include <amxmisc>
// #include <polymorph>

native polyn_votemod()

new bool:g_rockedVote[33], g_rockedVoteCnt
new bool:g_hasbeenrocked = false

// Cvars
new cvar_rtv_enabled
new cvar_rtv_ratio
new cvar_rtv_wait
new cvar_rtv_show

//Sound path

new const SOUND[] = "ambience/start.wav"

public plugin_init()
{
	register_plugin("Polymorph: RockTheVote", "1.0", "Fysiks")
	
	register_clcmd("amx_rtv","cmdAdminRTV", ADMIN_MAP, " Manually RockTheVote")
	register_clcmd("say /mod", "cmdSayRTV")
	
	// Cvars
	cvar_rtv_enabled = register_cvar("rtv_enable", "1")	// <0|1>
	cvar_rtv_ratio = register_cvar("rtv_ratio", "0.51")		// Use amx_votemap_ratio?
	cvar_rtv_wait = register_cvar("rtv_wait", "1")			// Minutes after mapstart you can rtv
	cvar_rtv_show = register_cvar("rtv_show", "1")		// Display how many more votes needed to rtv
}
public plugin_precache()
{
	precache_sound(SOUND);
}
public cmdAdminRTV(id, level, cid)
{
	if(!cmd_access(id,level,cid,1))
		return PLUGIN_HANDLED
	
	if(g_hasbeenrocked)
	{
		client_print(id,print_console,"[MG] Vote has already been rocked")
	}
	else
	{
		g_hasbeenrocked = true
		new admin_name[32]
		get_user_name(id, admin_name, 31)
		show_activity(id, admin_name, "has RockedTheVote")
		client_print(id,print_console, "[MG] You have a Mod change")
		set_task(6.2,"announce_vote")
		set_task(5.0,"startRockVote")
	}
	// Add functionality to cancel rocked vote.
	return PLUGIN_HANDLED
}

public client_connect(id)
{
	g_rockedVote[id] = false
}

public client_disconnected(id)
{
	if(g_rockedVote[id])
	{
		g_rockedVote[id] = false
		g_rockedVoteCnt--
	}
	
	check_rock_the_vote();
}

public cmdSayRTV(id)
{
	if(!get_pcvar_num(cvar_rtv_enabled))
		return PLUGIN_CONTINUE // PLUGIN_HANDLED
	
	if(g_hasbeenrocked)
	{
		client_print(id, print_chat, "[MG] Vote has already been started.")
		return PLUGIN_HANDLED
	}
	
	if(g_rockedVote[id])
	{
		client_print(id, print_chat, "[MG] You already voted.")
		rtv_remind()
		return PLUGIN_CONTINUE  // PLUGIN_HANDLED for blind?
	}
	
	new Float:vote_wait = get_pcvar_float(cvar_rtv_wait)
	new Float:time_elapsed = get_cvar_float("mp_timelimit") - (float( get_timeleft() ) / 60.0) // Use get_gametime
	
	if( time_elapsed < vote_wait )
	{
		// Can replace all this content with "You cannot change Mod yet."
		// which would require no if statement or calculations.
		
		new Float:time_til_votebegin =  vote_wait - time_elapsed
		if(time_til_votebegin > 1.0)
		{
			new min_to_vote = clamp(floatround(time_til_votebegin),1,floatround(vote_wait))
			client_print(id, print_chat, "[MG] You cannot change Mod for %d more minute%s.", min_to_vote, min_to_vote > 1 ? "s" : "" )
		}
		else // time_til_votebegin <= 1 minute
		{
			client_print(id, print_chat, "[MG] You cannot change Mod for %d more seconds.", floatround(time_til_votebegin * 60) )
		}
		
		return PLUGIN_HANDLED
	}
	
	if(get_timeleft() < 120 ) // don't allow rtv 2 minutes before map ends
	{
		client_print(id, print_chat, "[MG] Too Late to change Mod.")
		return PLUGIN_HANDLED
	}
	
	// You (id) just voted to rock.
	g_rockedVote[id] = true
	g_rockedVoteCnt++
	client_print(id,print_chat, "[MG] You chose to change Mod")
	
	check_rock_the_vote();
	
	return PLUGIN_CONTINUE
}

public startRockVote()
{
	polyn_votemod()
}

get_RocksNeeded()
{
	return floatround(get_pcvar_float(cvar_rtv_ratio) * float(get_realplayersnum()), floatround_ceil);
}

stock get_realplayersnum()
{
	new players[32], playerCnt;
	get_players(players, playerCnt, "ch");
	
	return playerCnt;
}

rtv_remind()
{
	if(get_pcvar_num(cvar_rtv_show))
	{  // Not tested yet.
		client_print(0,print_chat, "[MG] Need %d more players to change Mod.", get_RocksNeeded() - g_rockedVoteCnt)
	}
}

public announce_vote()
{
	emit_sound(0, CHAN_AUTO, SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}

check_rock_the_vote()
{
	if( g_rockedVoteCnt >= get_RocksNeeded() && !(get_timeleft() < 120) && get_pcvar_num(cvar_rtv_enabled) && !g_hasbeenrocked ) 	// Decide if we rock the vote
	{
		g_hasbeenrocked = true
		client_print(0,print_chat, "[MG] The Vote has been started!")
		set_task(6.2,"announce_vote")
		set_task(5.0,"startRockVote")
	}
	else
	{
		rtv_remind()
	}
}
__________________
Siska1 is offline
Send a message via Skype™ to Siska1