View Single Post
Author Message
Godofwar
AlliedModders Donor
Join Date: Dec 2015
Location: Germany
Old 09-09-2017 , 12:21   Pls add green color to SMA BET Plugin
Reply With Quote #1

Hello, can anyone add it please ? Green color to the Question in client print...

Code:
//////////////////////////////////////////////////////////////////////////////////////////////////
/*	Link: https://forums.alliedmods.net/showthread.php?t=240603

	Number Quiz v1.1
	----------------
	At each round start, a number quiz will shown in the chat.
	The first alive player to answer the quiz will receive a reward.
	
	Available reward types:
	1. HP reward		( default = 20HP )
	2. HP + Armor reward	( default = 10HP + 50 Armor)
	3. Godmode		( default = 15 seconds )
	4. Superspeed		( default = 10 seconds )
	
	Cvars: 
	
	quiz_type  ( default = 1 )  Sets the type of quiz
		-> 0 = No quiz
		-> 1 = Two number addtion/subtraction
		-> 2 = Three number addition/subtraction
		-> 3 = Two number multiplication/division
		-> 4 = Three number multiplication/division + addition/subtraction
	quiz_random  ( default = 0 )  If set to 1 and if quiz_type is not 0, it will put random types of quizes irrespective of the quiz_type value
	quiz_hp  ( default = 20 )  Sets the amount of hp reward
	quiz_armor (default = 50 )  Sets the amount of armor reward
	quiz_godmode_time  ( default = 15 )  Sets the time in seconds for which Godmode will be active
	quiz_superspeed_time  ( default = 10 )  Sets the time in seconds for which Superspeed will be active
	quiz_random_reward  ( default = 0 )  If set to 1, the winner will receive a random reward
*/
//////////////////////////////////////////////////////////////////////////////////////////////////

#include <amxmodx>
#include <fun>

#define PLUGIN "Number Quiz"
#define VERSION "1.1"
#define AUTHOR "connoisseur"

#define TAG "[Number Quiz]"
//#define DEBUG

// Global Variables
new g_iAnswer
new bool:g_answered
new g_iPlayerSpeed[33]
static Array:g_DivisorsArray

// Cvar Handles
new hp_cvar
new type_cvar
new random_cvar
new armor_cvar
new gm_cvar
new ss_cvar
new random_reward_cvar

// Task offset
const TASK_ID = 1337

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	random_cvar = register_cvar("quiz_random", "0")
	type_cvar = register_cvar("quiz_type", "1")
	hp_cvar = register_cvar("quiz_hp", "50")
	armor_cvar = register_cvar("quiz_armor", "500")
	gm_cvar = register_cvar("quiz_godmode_time", "15")
	ss_cvar = register_cvar("quiz_superspeed_time", "10")
	random_reward_cvar = register_cvar("quiz_random_reward", "0")
	
	register_logevent("eventRoundStart", 2, "1=Round_Start")
	register_event("CurWeapon", "fixSpeed", "be", "1=1")
	
	register_clcmd("say", "hookSay")
	register_clcmd("say_team", "hookSay")
	
	g_DivisorsArray = ArrayCreate(1)
}

public eventRoundStart()
{
	g_answered = false
	if( get_pcvar_num( type_cvar ) > 0 )
	{
		client_print( 0, print_chat, "%s %s = ?", TAG, generateQuiz() )
		#if defined DEBUG
		client_print( 0, print_chat, "%s Answer = %i", TAG, g_iAnswer )
		#endif
	}
	
	new iPlayers[32]
	new iNum, iPlayer
	
	get_players(iPlayers, iNum)
	
	for( new i; i < iNum; i++ )
	{
		iPlayer = iPlayers[i]
	
		if( !g_iPlayerSpeed[iPlayer] )
			continue
	
		g_iPlayerSpeed[iPlayer] = 0
	}
}

public fixSpeed(id)
{
    if( is_user_alive(id) && is_user_connected(id) )
    {
        if( g_iPlayerSpeed[id] )
        {
            set_user_maxspeed(id , 800.0)
        }
    }
}

public hookSay(id)
{
	if( !g_answered )
	{
		new szArgs[7]
		new szAns[7]
		
		read_args( szArgs, charsmax( szArgs ) )
		remove_quotes( szArgs )
		
		num_to_str( g_iAnswer, szAns, charsmax( szAns ) )
		
		if( !strcmp( szArgs, szAns ) )
		{
			if( is_user_alive(id) )
			{
				g_answered = true
				
				new szNick[32]
				get_user_name(id, szNick, charsmax( szNick ) )
				
				client_print( 0, print_chat, "%s %s has won with the correct answer ^"%i^"", TAG, szNick, g_iAnswer )	
				
				if( !get_pcvar_num( random_reward_cvar ) )
					ShowMenu(id)
				else
					rewardPlayer( random_num( 0, 3 ) , id )
			}
		}
	}
	return PLUGIN_CONTINUE
}

generateQuiz()
{
	new szQuiz[20]
	new iType = get_pcvar_num( random_cvar ) ? random_num( 1, 4 ) : get_pcvar_num( type_cvar )
	
	switch( iType )
	{
		case 2:									// 3 number addition/subtraction
		{
			new iOperand[3]
			new charOP[2]
			
			iOperand[0] = random_num( 1, 100 )
			iOperand[1] = random_num( 1, 100 )
			iOperand[2] = random_num( 1, 100 )
			
			charOP[0] = random_num( 0, 1 ) ? '+' : '-'
			charOP[1] = random_num( 0, 1 ) ? '+' : '-'
			
			if( charOP[0] == '+' && charOP[1] == '+' )
				g_iAnswer = iOperand[0] + iOperand[1] + iOperand[2]
			else if( charOP[0] == '+' && charOP[1] == '-' )
				g_iAnswer = iOperand[0] + iOperand[1] - iOperand[2]
			else if( charOP[0] == '-' && charOP[1] == '+' )
				g_iAnswer = iOperand[0] - iOperand[1] + iOperand[2]
			else
				g_iAnswer = iOperand[0] - iOperand[1] - iOperand[2]
				
			formatex( szQuiz, charsmax( szQuiz ), "%i %c %i %c %i", iOperand[0], charOP[0], iOperand[1], charOP[1], iOperand[2] )
		}
		case 3:									// 2 number multiply/divide
		{
			new iOperand[2]
			new charOP
			
			charOP = random_num( 0, 1 ) ? '*' : '/'
			
			if ( charOP == '*' )
			{
				iOperand[0] = random_num( 4, 99 )
				iOperand[1] = random_num( 3, 9 )
				
				g_iAnswer = iOperand[0] * iOperand[1]
			}
			else
			{
				iOperand[0] = random_num( 8, 99 )
				while( isPrime( iOperand[0] ) )
					iOperand[0] = random_num( 8, 99 )
				iOperand[1] = getRandomDivisor( iOperand[0] )
				
				g_iAnswer = iOperand[0] / iOperand[1]
			}
			
			formatex( szQuiz, charsmax( szQuiz ), "%i %c %i", iOperand[0], charOP, iOperand[1] )
		}
		case 4:									// 3 num add, minus, mult, divide
		{
			new iOperand[3]
			new charOP[2]
			
			charOP[0] = random_num( 0, 1 ) ? '*' : '/'
			charOP[1] = random_num( 0, 1 ) ? '+' : '-'
			iOperand[2] = random_num( 1, 100 )
			
			if ( charOP[0] == '*' )
			{
				iOperand[0] = random_num( 4, 99 )
				iOperand[1] = random_num( 3, 9 )
				
				g_iAnswer = iOperand[0] * iOperand[1]
			}
			else
			{
				iOperand[0] = random_num( 8, 99 )
				while( isPrime( iOperand[0] ) )
					iOperand[0] = random_num( 8, 99 )
				iOperand[1] = getRandomDivisor( iOperand[0] )
				
				g_iAnswer = iOperand[0] / iOperand[1]
			}
			
			if ( charOP[1] == '+' )
				g_iAnswer += iOperand[2]
			else
				g_iAnswer -= iOperand[2]
				
			formatex( szQuiz, charsmax( szQuiz ), "%i %c %i %c %i", iOperand[0], charOP[0], iOperand[1], charOP[1], iOperand[2] )
		}
		default:
		{
			new iOperand[2]
			new charOP
			
			iOperand[0] = random_num( 1, 100 )
			iOperand[1] = random_num( 1, 100 )
			charOP = random_num( 0, 1 ) ? '+' : '-'
			
			if ( charOP == '+' )
				g_iAnswer = iOperand[0] + iOperand[1]
			else
				g_iAnswer = iOperand[0] - iOperand[1]	
				
			formatex( szQuiz, charsmax( szQuiz ), "%i %c %i", iOperand[0], charOP, iOperand[1] )
		}
	}
	return szQuiz
}

public ShowMenu(id)
{
	new menu = menu_create("Choose a reward:", "rewardMenuHandler")
	new szMsg[30]

	formatex( szMsg, sizeof szMsg - 1, "+%i Health", get_pcvar_num( hp_cvar ) )
	menu_additem(menu, szMsg, "", 0)
	formatex( szMsg, sizeof szMsg - 1, "+%i Health +%i Armor", get_pcvar_num( hp_cvar )/2, get_pcvar_num( armor_cvar ) )
	menu_additem(menu, szMsg, "", 0)
	formatex( szMsg, sizeof szMsg - 1, "%i second Godmode", get_pcvar_num( gm_cvar ) )
	menu_additem(menu, szMsg, "", 0)
	formatex( szMsg, sizeof szMsg - 1, "%i second Superspeed", get_pcvar_num( ss_cvar ) )
	menu_additem(menu, szMsg, "", 0)

	menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\y")

	menu_display(id, menu, 0)

	return PLUGIN_HANDLED
}

public rewardMenuHandler( id, menu, item )
{
	new command[6], name[64], access, callback

	menu_item_getinfo( menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback )

	rewardPlayer( item, id )

	menu_destroy( menu )

	return PLUGIN_HANDLED
}

rewardPlayer( item , id )
{
	new szNick[32]
	get_user_name(id, szNick, charsmax( szNick ) )
				
	switch( item )
	{
		case 0: 
		{
			new hp = get_pcvar_num( hp_cvar )
			set_user_health( id, get_user_health(id) + hp )
			client_print(0, print_chat, "%s %s received +%i Health", TAG, szNick, hp)
		}
		case 1: 
		{
			new hp = get_pcvar_num( hp_cvar )/2
			new armor = get_pcvar_num( armor_cvar )
			set_user_health( id, get_user_health(id) + hp )
			set_user_armor( id, get_user_armor(id) + armor )
			client_print(0, print_chat, "%s %s received +%i Health and +%i Armor", TAG, szNick, hp, armor)
		}
		case 2: 
		{
			set_user_godmode( id, 1 )
			new gm = get_pcvar_num( gm_cvar )
			set_task( gm + 0.0, "removeGodmode", id + TASK_ID )
			client_print(0, print_chat, "%s %s received %i second Godmode !", TAG, szNick, gm)
		}
		case 3: 
		{
			set_user_maxspeed( id, 800.0 )
			g_iPlayerSpeed[id] = 1
			new ss = get_pcvar_num( ss_cvar )
			set_task( ss + 0.0, "removeSuperspeed", id + TASK_ID )
			client_print(0, print_chat, "%s %s received %i second Superspeed ! Go Go Go !", TAG, szNick, ss)
		}
	}
}

public removeSuperspeed(id)
{
	id -= TASK_ID
	set_user_maxspeed( id, -1.0 )
	g_iPlayerSpeed[id] = 0
	client_print( id, print_chat, "%s Time up !! Your speed has been set back to normal !", TAG )
} 

public removeGodmode(id)
{
	id -= TASK_ID
	set_user_godmode( id, 0 )
	client_print( id, print_chat, "%s Time up !! You no longer have Godmode !", TAG )
}  

getRandomDivisor( iNum )
{
	for( new i = 2; i <= iNum/2 ; i++ )	//get all divisors
	{
		if( iNum % i == 0 )
			ArrayPushCell( g_DivisorsArray, i )
	}
	 
	new iDiv =  ArrayGetCell( g_DivisorsArray, random_num( 0, ArraySize( g_DivisorsArray ) - 1 ) )
	
	ArrayClear( g_DivisorsArray )
	
	return iDiv
}

isPrime( iNum )
{
	new bool:prime = true
	for( new i = 2; i <= iNum/2 ; i++ )
	{
		if( iNum % i == 0 )
		{
			prime = false
			break
		}
	}
	return prime
}

public plugin_end()
{
	ArrayDestroy( g_DivisorsArray )
}
Thx ?

Last edited by Godofwar; 09-09-2017 at 12:31.
Godofwar is offline