Raised This Month: $66 Target: $400
 16% 

Time To Defuse


Post New Thread Reply   
 
Thread Tools Display Modes
Plugin Info:     Modification:   Counter-Strike        Category:   Gameplay        Approver:   Zenith77 (34)
hebusletroll
Senior Member
Join Date: Apr 2006
Old 08-27-2007 , 08:52   Time To Defuse
Reply With Quote #1

Hello friends !

This is my first AmxModX contribution and I hope that you will like it

This plugin allow administrator to set bomb defusing time. Required by many players.

There is 3 modes, that you can configure with amx_defusemode :
1 = The bomb will be immedialty defused, either you have a defuser or not.
2 = The bomb will be immedialty defused if you have a defuser, else the plugin use amx_defusetime * amx_defusefactor time (by default 5.0 * 2.0)
3 = The bomb will be defused in amx_defusetime time if you have a defuser. Else needed time is amx_defusetime * amx_defusefactor.

Tested on CS1.6 and CZ. On Windows plateforme. I know that the linux offset is not the same but i don't have any computer running on it.

Please add me in your credits if you use this code for your plugins ;o)

Have fun !

Code:
/**************************************************************************************************/
/*                          Time To Defuse by Hebusletroll - 30 August 2007 			  */
/*					[email protected]				  */
/*												  */
/* This plugin allow to change the default defuse time		.				  */
/* You can use this code to enhance your own plugin, like "Cut the right wire", just think to add */
/* me in your credits :o)                                                                         */
/*												  */
/*	CVARS :											  */
/*		amx_defusemode <0|1|2|3> : set plugin mode, stopped by default.			  */
/*		0 = Disabled (default).								  */
/*		1 = Instant defuse, defuser not required.					  */
/*		2 = Instant defuse, defuser required, if you don't have a defuser, plugin use     */
/*		    amx_defusetime * amx_defusefactor.						  */
/*		3 = Timed defuse, using amx_defusetime if you have a defuser, using asv_defusetime*/
/*		    * sv_defusefactor without it.						  */
/*		sv_defusetime <time in seconds> : set time required to defuse the bomb.  	  */ 
/*												  */
/*		sv_defusefactor <factor> : set time factor when player is defusing without        */
/*		                            defuser.						  */
/*										  		  */
/* Changes : 0.1 (27 August 2007) 	=> First release.					  */
/*	     0.2 (30 August 2007) 	=> Added setting time required to defuse.		  */
/* 				  	=> Added setting time factor.				  */
/*	     0.3 (18 September 2007) 	=> Engine requirement removed.				  */
/*					=> Using pcvar instead native cvar.			  */
/*					=> Removing useless code.				  */
/*					=> Added Linux support.					  */
/*												  */
/* Important : You cannot set a defuse time more greater than the mp_c4timer cvar. The plugin     */
/*             scale the time automatically.							  */
/**************************************************************************************************/
/*												  */
/* THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN   */
/* OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM     */ 
/* "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED  */
/* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE */
/* RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE    */
/* DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.		  */
/*												  */
/**************************************************************************************************/

#include <amxmodx>
#include <fakemeta>

#define AMXX_PLUGIN_NAME	"Time To Defuse"
#define AMXX_PLUGIN_AUTHOR	"Hebusletroll"
#define AMXX_PLUGIN_VERSION	"0.3"

#define WIN32_C4_INSTANTDEFUSE	1.0

#define MODEL_C4		"models/w_c4.mdl"

#define CMD_DEFUSERNOTREQUIRED	1
#define CMD_DEFUSERREQUIRED	2	
#define CMD_DEFUSERTIMED	3

new game_progressbar,
    sv_defusemode, sv_defusetime, sv_defusefactor, Float:sv_c4timer,
    defuseoffset
    
new bool:defusing

// Here the first called function, registering needed event for the plugin.
public plugin_init() 
{
	register_plugin(AMXX_PLUGIN_NAME,
			AMXX_PLUGIN_AUTHOR,
			AMXX_PLUGIN_VERSION)

	defuseoffset=is_linux_server()?103:99		
			
	//I register this message to prevent bar progress displaying with instant defusing.
	game_progressbar = get_user_msgid("BarTime")
	
	//Ok theses event are register and provide easy defuser detection.
	register_logevent("on_beginwithoutdefuser", 3, "2=Begin_Bomb_Defuse_Without_Kit")
	register_logevent("on_beginwithdefuser", 3, "2=Begin_Bomb_Defuse_With_Kit")
	register_logevent("on_roundstart", 2, "1=Round_Start")
		
	//The plugin cvar, plugin disabled by default.
	sv_defusemode 	= register_cvar("sv_defusemode","0",FCVAR_SERVER|FCVAR_ARCHIVE) 
	sv_defusetime 	= register_cvar("sv_defusetime","5.0",FCVAR_SERVER|FCVAR_ARCHIVE)
	sv_defusefactor = register_cvar("sv_defusefactor","2.0",FCVAR_SERVER|FCVAR_ARCHIVE)
	
	//A client command to get defuse configuration.
	register_clcmd("say /defusemode","on_inforequested",0,"Display current defuse mode configuration")
	
	//Forwarding the client prethink.
	register_forward(FM_PlayerPreThink,"on_clientprethink",1)
}

//Handled function when player defusing bomb without defuser.
//Can only work if defuser is not required.
public on_beginwithoutdefuser()
	defuse(read_data(0),false)

//Handled function when player defusing bomb with defuser.
public on_beginwithdefuser()
	defuse(read_data(0),true)

// Setting up c4timer in memory
public on_roundstart()
	sv_c4timer=float(get_cvar_num("mp_c4timer"))

//Setting up the bomb for defusing.
stock defuse(id,bool:defuser)
{
	//If plugin is disabled, then exiting.
	if(!get_pcvar_num(sv_defusemode))
		return PLUGIN_CONTINUE
	
	//Searching C4 entity by model.
	new c4entity = get_c4entity()
	if(c4entity)
	{
		if(get_pcvar_float(sv_defusefactor)<1.0)
			set_pcvar_float(sv_defusefactor,1.0)
		if(get_pcvar_float(sv_defusetime)<1.0)
			set_pcvar_float(sv_defusetime,1.0)
				
		//Set ennemy that defuse the bomb.
		set_pev(c4entity,pev_enemy,id)
		set_pev(c4entity,pev_iuser1,defuser)
		defusing=true
	}
	return PLUGIN_CONTINUE
}

//Display current Time To Defuse configuration to all connected players.
public on_inforequested()
{
	if(!get_pcvar_num(sv_defusemode))
		return PLUGIN_CONTINUE
	
	new message[255]
	
	switch(get_pcvar_num(sv_defusemode))
	{
		case CMD_DEFUSERNOTREQUIRED:format(message,255,"Instant defusing either you have defuser or not.")
		case CMD_DEFUSERREQUIRED:
		{
			new Float:defusetime = get_pcvar_float(sv_defusetime)*get_pcvar_float(sv_defusefactor)
			defusetime = defusetime>sv_c4timer?sv_c4timer:defusetime
			format(message,255,"Instant defusing if you have defuser, else %d seconds are needed without it.",floatround(defusetime))
		}
		case CMD_DEFUSERTIMED:
		{
			new Float:defusetimewithoutdefuser = (get_pcvar_float(sv_defusetime)*get_pcvar_float(sv_defusefactor))>sv_c4timer?sv_c4timer:get_pcvar_float(sv_defusetime)*get_pcvar_float(sv_defusefactor)
			new Float:defusetimewithdefuser = get_pcvar_float(sv_defusetime)>sv_c4timer?sv_c4timer:get_pcvar_float(sv_defusetime)
			format(message,255,"Time to defuse bomb with defuser take %d seconds, else %d seconds are needed without it.",floatround(defusetimewithdefuser),floatround(defusetimewithoutdefuser))
		}
	}
	client_print(0,print_chat,"Time To Defuse : %s",message)
	
	return PLUGIN_CONTINUE
}

//Player action : please note that this function is mandatory because set_pdata_float is not
//trigged in defuse function, must be processed in client action.
public on_clientprethink(id)
{
	if(!get_pcvar_num(sv_defusemode))
		return FMRES_IGNORED
	
	//Defusing the bomb OH YEAH !
	if(defusing)
	{
		//Getting bomb entity
		new c4entity = get_c4entity()
		if(c4entity)
			if(pev(c4entity,pev_enemy)==id)
			{
				//Ok now processing bomb defusing.
				defusing = false
				new Float:hacktime,Float:hltime = get_gametime()
				switch(get_pcvar_num(sv_defusemode))
				{
					case CMD_DEFUSERNOTREQUIRED:hacktime=WIN32_C4_INSTANTDEFUSE
					case CMD_DEFUSERREQUIRED:hacktime=(pev(c4entity,pev_iuser1)?WIN32_C4_INSTANTDEFUSE:hltime+get_pcvar_float(sv_defusetime)*get_pcvar_float(sv_defusefactor))
					case CMD_DEFUSERTIMED:hacktime=(pev(c4entity,pev_iuser1)?hltime+get_pcvar_float(sv_defusetime):hltime+get_pcvar_float(sv_defusetime)*get_pcvar_float(sv_defusefactor))
				}
				if(hacktime)
				{	
					new defusetime = floatround(hacktime!=WIN32_C4_INSTANTDEFUSE?(hacktime-hltime>=sv_c4timer?sv_c4timer:hacktime-hltime):0.0)
					//Displaying new progress bar
					message_begin(MSG_ONE,game_progressbar,{0,0,0},id)
					write_byte(defusetime)
					write_byte(0)
					message_end()
					
					//Setting up required bomb time for defusing.
					set_pdata_float(c4entity,defuseoffset,hltime+float(defusetime))
				}
			}
	}
	return FMRES_IGNORED
}

//Searching the bomb entity.
stock get_c4entity()
	return engfunc(EngFunc_FindEntityByString, -1, "model", MODEL_C4)
Attached Files
File Type: sma Get Plugin or Get Source (TimeToDefuse.sma - 8591 views - 8.1 KB)

Last edited by hebusletroll; 09-18-2007 at 14:38.
hebusletroll is offline
mordi
Senior Member
Join Date: Jul 2007
Location: o rly?
Old 08-27-2007 , 09:30   Re: Instant defusing.
Reply With Quote #2

Could you explain "instant defusing"?
__________________
Quote:
Originally Posted by Alka View Post
engine ?! 0o... *barf*
mordi is offline
hebusletroll
Senior Member
Join Date: Apr 2006
Old 08-27-2007 , 09:36   Re: Instant defusing.
Reply With Quote #3

Quote:
Originally Posted by mordi View Post
Could you explain "instant defusing"?
The bomb will be immediatly defused.
hebusletroll is offline
mordi
Senior Member
Join Date: Jul 2007
Location: o rly?
Old 08-27-2007 , 09:50   Re: Instant defusing.
Reply With Quote #4

Quote:
Originally Posted by hebusletroll View Post
The bomb will be immediatly defused.
Thank's for explaining it, but it won't be realistic at all. Terrorists will have to camp on the bomb to make sure CT's don't reach it at all.
__________________
Quote:
Originally Posted by Alka View Post
engine ?! 0o... *barf*
mordi is offline
hebusletroll
Senior Member
Join Date: Apr 2006
Old 08-27-2007 , 09:58   Re: Instant defusing.
Reply With Quote #5

Quote:
Originally Posted by mordi View Post
Thank's for explaining it, but it won't be realistic at all. Terrorists will have to camp on the bomb to make sure CT's don't reach it at all.
If you integrate this on another plugin like "Cut the right wire", be sure that it will be more interresting

You can also create a plugin like "Super Defuser", that allow for buying a new defuse kit (more expansive than the standard defuse kit).

^^
hebusletroll is offline
BlackMilk
Veteran Member
Join Date: Jun 2007
Old 08-27-2007 , 10:50   Re: Instant defuse.
Reply With Quote #6

Almost weird noone has asked for it yet: admin-only cvar.
__________________
Mod:
User:
BlackMilk is offline
Zenith77
Veteran Member
Join Date: Aug 2005
Old 08-27-2007 , 11:05   Re: Instant defuse.
Reply With Quote #7

Quote:
Originally Posted by BlackMilk View Post
Almost weird noone has asked for it yet: admin-only cvar.
Just a question, why? Admins are supposed to administrate the server, not give themselves super abilities that completely screws over the game for other players.
__________________
Quote:
Originally Posted by phorelyph View Post
your retatred
Zenith77 is offline
BlackMilk
Veteran Member
Join Date: Jun 2007
Old 08-27-2007 , 15:12   Re: Instant defuse.
Reply With Quote #8

We should leave to server owners the question of what admins are supposed to do.

Besides you could ask the same thing for almost anything.

Lastly, 'admins' can sometimes be players who are given flags for "fun" or otherwise rewarding stuff, it's not the same everywhere.
__________________
Mod:
User:
BlackMilk is offline
M249-M4A1
I <3 Mac
Join Date: May 2005
Location: Not interested
Old 08-27-2007 , 17:44   Re: Instant defuse.
Reply With Quote #9

Yeah this would be pretty annoying, 1 press of the use key and it's all over. Good concept, but needs more work
M249-M4A1 is offline
solidsnake
Member
Join Date: Jul 2006
Old 08-27-2007 , 18:49   Re: Instant defuse.
Reply With Quote #10

Nice plugin ! Good for my multi bomb plugin !
solidsnake is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 07:14.


Powered by vBulletin®
Copyright ©2000 - 2020, vBulletin Solutions, Inc.
Theme made by Freecode