[MEGA PACKS PLUGINS] DeathRun

Pluginuri pentru modul AmxModX.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
Rainq
Membru, skill +2
Membru, skill +2
Posts: 681
Joined: 21 Jul 2015, 19:50
Detinator Steam: Da
CS Status: Retras
Detinator server CS: zm.extreamcs.com
SteamID: mrainq
Reputatie: Fost super moderator
Fost detinator ZM.eXtreamCS.COM
Fost Membru Club eXtreamCS (trei luni)
Fond eXtream: 0
Location: Bucharest
Discord: manuraiders
Has thanked: 29 times
Been thanked: 51 times
Contact:

11 Jan 2021, 08:01

Pluginuri DeathRun
1. Primesti disconect de pe server daca nu ai setarile astea:

Code: Select all

                client_cmd(id, "developer 0; alias developer")
                client_cmd(id, "fps_max 101; alias fps_max")
                client_cmd(id, "cl_sidespeed 400; alias cl_sidespeed")
                client_cmd(id, "cl_forwardspeed 400; alias cl_forwardspeed")
                client_cmd(id, "cl_backspeed 400; alias cl_backspeed")
download:

Code: Select all

#include <amxmodx>

new const Version[] =    "0.0.1"

public plugin_init()
{
    register_plugin("Requires accept question", Version, "Advanced")
}

public client_putinserver(id)
{
    set_task(20.0, "anti_dev", id)
}

public anti_dev(id)
{
    if(is_user_connected(id))
    {
        new menu = menu_create("\yThis server requires:^n\d- \rdeveloper 0^n\d- \rfps_max 101^n\d- \rcl_forwardspeed 400^n\d- \rcl_sidespeed 400^n\d- \rcl_backspeed 400^n^n\yDo you accept this?", "menu_handler")
        
        menu_additem(menu, "Yes", "1", 0)
        menu_additem(menu, "No \r[ \wYou will be kicked! \r]", "2", 0)
        
        menu_display(id, menu, 0)
    }
}

public menu_handler(id, menu, item)
{
    if(is_user_connected(id))
    {
        if(item == MENU_EXIT)
        {
            anti_dev(id)
        }
        
        new data[6], iName[64], access, callback
        menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
        
        new key = str_to_num(data)
        
        switch(key)
        {
            case 1:
            {
                client_cmd(id, "developer 0; alias developer")
                client_cmd(id, "fps_max 101; alias fps_max")
                client_cmd(id, "cl_sidespeed 400; alias cl_sidespeed")
                client_cmd(id, "cl_forwardspeed 400; alias cl_forwardspeed")
                client_cmd(id, "cl_backspeed 400; alias cl_backspeed")
            }
            case 2:
            {
                client_cmd(id, "disconnect")
            }
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
} 
2. Cand scrii /fps iti arata fps-ul tau

download:

Code: Select all

#include <amxmodx>
#include <engine>

new g_count[33]
new g_fps[33]

public plugin_init() {
    register_plugin("Get FPS", "1.0", "Advanced")
    register_clcmd("say /fps","get_fps")
    register_clcmd("say fps","get_fps")
    register_clcmd("say_team /fps","get_fps")
    register_clcmd("say_team fps","get_fps")
}

public get_fps(id)
{
    ColorMessage(id, "^1Your ^4FPS ^1is:^3 %i",g_fps[id])
    
    return PLUGIN_HANDLED;
}

public client_PostThink(id)
{
    g_count[id]++
    
    static lastendtime[33]
    // did second passed?
    if (floatround(get_gametime())==lastendtime[id]) return;
    
    lastendtime[id] = floatround(get_gametime())
    
    g_fps[id] = g_count[id]
    g_count[id] = 0
}  

/*START - ColorChat */
stock ColorMessage(const id, const input[], any:...){
    new count = 1, players[32];
    static msg[ 191 ];
    vformat(msg, 190, input, 3);
    if (id) players[0] = id; else get_players(players , count , "ch"); {
        for (new i = 0; i < count; i++){
            if (is_user_connected(players[i])){
                message_begin(MSG_ONE_UNRELIABLE , get_user_msgid("SayText"), _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();}}}
}
/*END - ColorChat */
3. Bhop pentru server

download:

Code: Select all

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define VERSION "1.2"
//#define	FL_ONGROUND	(1<<9)	// not moving on the ground (REMOVE)

new bunny_mode, bunny_factor;

public plugin_init() {
	register_plugin("Auto BunnyHop", VERSION, "Night Dreamer");
	register_cvar("Auto_BunnyHop_version",    VERSION, FCVAR_SERVER|FCVAR_SPONLY);
	set_cvar_string("Auto_BunnyHop_version",    VERSION);	
	bunny_mode = register_cvar("abh_on","1");
	bunny_factor = register_cvar("abh_factor","0");
	RegisterHam(Ham_Player_Jump,"player","bunnyhop");
}

public bunnyhop(id) {
	if(get_pcvar_num(bunny_mode) == 0)
		return HAM_IGNORED;
	{
	if((pev(id,pev_flags) & FL_ONGROUND) && get_pcvar_float(bunny_factor) >= 1)
	{
	      new Float: Vel[3];
	      pev(id,pev_velocity,Vel);
	      Vel[2] = get_pcvar_float(bunny_factor);
	      set_pev(id,pev_velocity,Vel);
	      set_pev(id,pev_gaitsequence, 6);
	      set_pev(id,pev_frame, 0.0)
	}
	if((pev(id,pev_flags) & FL_ONGROUND) && get_pcvar_float(bunny_factor) <= 0)
	{
	      new Float: Vel[3], Float: Spd;
	      pev(id,pev_maxspeed,Spd);
	      pev(id,pev_velocity,Vel);
	      Vel[2] = Spd;
	      set_pev(id,pev_velocity,Vel);
	      set_pev(id,pev_gaitsequence, 6);
	      set_pev(id,pev_frame, 0.0)
	}
	}
	return HAM_IGNORED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1048\\ f0\\ fs16 \n\\ par }
*/
4. Sunet pe server

download:

Code: Select all

#include <amxmodx>

new const gs_AmbienSound[] = "sound/fioriginal/halloween.mp3";

public plugin_precache () 
{
precache_generic( gs_AmbienSound );
}

public plugin_init () 
{
register_plugin ( "Ambience Sound", "0.1", "Arkshine" );
register_logevent( "e_RoundEnd", 2, "1=Round_End" );
}

public e_RoundEnd()
{
client_cmd ( 0, "mp3 play %s", gs_AmbienSound );
}
5. Timer 1

download:

Code: Select all

/* Plugin generated by AMXX-Studio */ 

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <nvault>
#include <hamsandwich>

#define PLUGIN "Timer + Life Transfer"
#define VERSION "0.1"
#define AUTHOR "Dr.FioriGinal.Ro"
#pragma semicolon 1

#define IsPlayer(%1) ( 1 <= %1 <= MAX_PLAYERS ) // 32 sloturi neaparat

new g_TimeS[MAX_PLAYERS+1], g_TimeM[MAX_PLAYERS+1];
new StatusText;
new bool:used[MAX_PLAYERS+1];
new concurs, queue[MAX_PLAYERS+1][32], queue_values[MAX_PLAYERS+1], queue_index[MAX_PLAYERS+1], contor, bool:Error;

const OFFSET_CSTEAMS = 114;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_clcmd( "say", "clcmdsay_transfer_life" );
	register_clcmd( "say_team", "clcmdsay_transfer_life" );	
	register_clcmd( "life", "transfer_life" );
	register_clcmd( "lifemenu", "transfer_life_menu" );
	RegisterHam(Ham_Spawn, "player", "Fwd_PlayerSpawn_Post", 1);
	RegisterHam(Ham_Killed, "player", "Fwd_PlayerKilled_Pre", 0);
	register_event("ResetHUD", "newRound", "b");
	StatusText = get_user_msgid("StatusText");
	
	register_forward(FM_PlayerPreThink, "fwdPlayerPreThink");
}
 
public client_disconnect(id)
	{
	if(task_exists(id + 5551))
		remove_task(id + 5551);
		
	new aux[32], ip[32];
	
	get_user_ip(id, ip, charsmax(ip), 1);
	
	for(new i = 1; i <= contor; ++i)
	{
		get_user_ip(queue_index[i], aux, charsmax(aux), 1);
		if ( equal(aux, ip) )
		{
			queue_values[queue_index[i]] = 0;
			queue_index[i] = 0;
			Sort();
			--contor;
			break;
		}
	}
}

public newRound() 
{
	new Players[MAX_PLAYERS], PlayersNum;
	
	get_players(Players, PlayersNum, "ch");
	
	for (new i = 0; i < PlayersNum; ++i)
	{
		used[Players[i]] = false;
	}
}

public Fwd_PlayerSpawn_Post(const id)
{
	if( fm_get_user_team(id) == 2 )
	{
		g_TimeS[id] = 0;
		g_TimeM[id] = 0;
		if(task_exists(id + 5551))
			remove_task(id + 5551);
		set_task( 1.0, "Timer",id + 5551, _, _, "b" );
	}
	else
	{
		if(task_exists(id + 5551))
			remove_task(id + 5551);
		g_TimeS[id] = 0;
		g_TimeM[id] = 0;
	}
}

public Timer(id)
{
	id -= 5551;
	g_TimeS[id]++;
	if( g_TimeS[id] == 60)
	{
		g_TimeS[id] = 0;
		g_TimeM[id]++;
	}
       
	new target, body;
	get_user_aiming( id, target, body, 9999);
       
	if (!IsPlayer(target))
	{
		new sSMsg[32];
		format(sSMsg, charsmax(sSMsg), "Your time: %02d:%02d", g_TimeM[id], g_TimeS[id]);
		message_begin(MSG_ONE, StatusText, {0,0,0}, id);
		write_byte(0);
		write_string(sSMsg);
		message_end();
	}
}

public Fwd_PlayerKilled_Pre(victim, attacker, shouldgib)
{
	//client_print(0, print_chat, "debug 1");
	if(fm_get_user_team(victim) == 1 && fm_get_user_team(attacker) == 2)
	{
		//client_print(0, print_chat, "debug 2");
		if( (g_TimeS[attacker] > 30 || g_TimeM[attacker] != 0) && !used[attacker])
		{
			
			//client_print(0, print_chat, "debug 3");
			if ( concurs && !(get_user_flags(attacker) & ADMIN_KICK) )
			{
				//client_print(0, print_chat, "debug 4");
				addInQueue(attacker);
				printInChat();
			}
			else
			{
				//client_print(0, print_chat, "debug 4");
				if( g_TimeM[attacker] >= 1 )
					client_print_color(0, print_team_red, "^1 [Dr.FioriGinal.Ro] ^4%s^3 a ucis teroristul ^4%s^3 în %d minut%s și %d secund%s",szName(attacker) ,szName(victim), g_TimeM[attacker], ( (g_TimeM[attacker]>1 || g_TimeM[attacker] == 0)?"e":""), g_TimeS[attacker], ((g_TimeS[attacker]>1 || g_TimeS[attacker] == 0)?"e":""));
				else    
					client_print_color(0, print_team_red, "^1 [Dr.FioriGinal.Ro] ^4%s^3 a ucis teroristul ^4%s^3 în %d secund%s",szName(attacker), szName(victim), g_TimeS[attacker], ((g_TimeS[attacker]>1 || g_TimeS[attacker] == 0)?"e":"")); 
			}
		}
	}
	return HAM_IGNORED;
}

addInQueue(id)
{
	new ip[32], aux[32];
	get_user_ip(id, ip, charsmax(ip), 1);
	
	for(new i = 1; i <= contor; ++i)
	{
		get_user_ip(queue_index[i], aux, charsmax(aux), 1);
		if ( equal(aux, ip) )
		{
			++queue_values[i];
			Sort();
			return;
		}
		//client_print(0, print_chat, "%s - %s", aux, ip);
	}
	
	copy(queue[++contor], charsmax(queue[]), ip);
	++queue_values[contor];
	queue_index[contor] = id;
	
	
	Sort();
}

Sort()
{
	new aux, auxbuffer[32];
	for(new i = 1; i <= contor; ++i)
	{
		for(new j = i; j <= contor; ++j)
		{
			if ( queue_values[i] < queue_values[j] )
			{
				aux = queue_values[i];
				queue_values[i] = queue_values[j];
				queue_values[j] = aux;
				aux = queue_index[i];
				queue_index[i] = queue_index[j];
				queue_index[j] = aux;
				copy(auxbuffer, charsmax(auxbuffer), queue[i]);
				copy(queue[i], charsmax(queue[]), queue[j]);
				copy(queue[j], charsmax(queue[]), auxbuffer);
			}
		}
	}
}

getName(ip[], bool:error = false)
{
	new name[MAX_NAME_LENGTH], aux[32];
	
	for(new i = 1; i <= get_playersnum(); ++i)
	{
		get_user_ip(queue_index[i], aux, charsmax(aux), 1);
		if ( equal(aux, ip) )
		{
			get_user_name(queue_index[i], name, charsmax(name));
			return name;
		}
	}
	
	if ( error )
	{
		Error = true;
		return name;
	}
			
	for (new i = 1; i <= contor; ++i)
	{
		if ( equal(queue[i], ip) )
		{
			queue_values[i] = 0;
			break;
		}
	}
	
	Sort();
	--contor;
	
	return getName(ip, true);
}

printInChat(id = 0)
{
	new text[192];
	Error = false;
	switch ( contor )
	{
		case 0:  formatex(text, charsmax(text), "^4[^3Concurs^4]^1 Clasament : Nici un jucător nu a înscris încă.");
		case 1:  formatex(text, charsmax(text), "^4[^3Concurs^4]^1 Clasament : ^4%s^1 este singurul jucător care a punctat ! (^4%d^1 punct%s)", getName(queue[1]), queue_values[1], queue_values[1] == 1 ? "" : "e");
		case 2:  formatex(text, charsmax(text), "^4[^3Concurs^4]^1 Clasament : 1.^4%s^1 (^4%d^1 punct%s), 2.^4%s^1 (^4%d^1 punct%s)", getName(queue[1]), queue_values[1], queue_values[1] == 1 ? "" : "e", getName(queue[2]), queue_values[2], queue_values[2] == 1 ? "" : "e");
		default: formatex(text, charsmax(text), "^4[^3Concurs^4]^1 Clasament : 1.^4%s^1 (^4%d^1 punct%s), 2.^4%s^1 (^4%d^1 punct%s), 3.^4%s^1 (^4%d^1 punct%s)", getName(queue[1]), queue_values[1], queue_values[1] == 1 ? "" : "e", getName(queue[2]), queue_values[2], queue_values[2] == 1 ? "" : "e", getName(queue[3]), queue_values[3], queue_values[3] == 1 ? "" : "e");
	}
	if ( Error )
	{
		printInChat(id);
	}
	else
	{
		client_print_color(id, print_team_red, "%s", text);
	}
}

public clcmdsay_transfer_life( id )
{
	static args[ 192 ], command[ 192 ];
	read_args( args, charsmax( args ) );
	
	if( !args[ 0 ] )
		return PLUGIN_CONTINUE;
	
	remove_quotes( args[ 0 ] );
	
	new const lifeIdent[] = "!life", concursIdent[] = "!concurs", lifemenuIdent[] = "!lifemenu", scorIdent[] = "!scor";
	
	if( equal(args, scorIdent, charsmax(scorIdent)) && concurs)
	{
		printInChat(id);
	}
	
	if( equal(args, lifeIdent, charsmax(lifeIdent)) && !concurs )
	{
		replace(args, charsmax(args), "!", "");
		formatex(command, charsmax(command), "%s", args);
		client_cmd(id, command);
	}
	
	if( equal(args, concursIdent, charsmax(concursIdent)) && get_user_flags(id) & ADMIN_IMMUNITY  )
	{
		if ( concurs )
		{
			concurs = false;
			client_print_color(0, print_team_red, "^4[^3Concurs^4]^1 Modul concurs a fost dezactivat");
		}
		else
		{
			concurs = true;
			client_print_color(0, print_team_red, "^4[^3Concurs^4]^1 Modul concurs a fost activat");
		}
	}
	
	if( equal(args, lifemenuIdent, charsmax(lifemenuIdent)) && !concurs )
	{
		transfer_life_menu(id);
	}
	
	return PLUGIN_CONTINUE;
}

public transfer_life( id )
	{
	if( !is_user_alive( id ) )
		{
		console_print( id, "[Transfer Life] Trebuie sa fi in viata!" );
		return PLUGIN_HANDLED;
	}
	
	new arg[ 32 ];
	new origin[ 3 ], name[ 32 ], target_name[ 32 ];
	
	read_argv( 1, arg, 31 );
	new target = cmd_target( id, arg, 0 );
	if( !target )
		{
		console_print( id, "[Transfer Life] Jucatorul NU se afla pe server!" );
		return PLUGIN_HANDLED;
	}
	
	if( is_user_alive( target ) )
		{
		console_print( id, "[Transfer Life] Jucatorul este deja in viata!" );
		return PLUGIN_HANDLED;
	}
	
	if( get_user_team( id ) != get_user_team( target ) )
		{
		console_print( id, "[Transfer Life] Jucatorul trebuie sa fie in aceeasi echipa cu tine!" );
		return PLUGIN_HANDLED;
	}
	new health;
	health = get_user_health( id );
	
	ExecuteHamB( Ham_CS_RoundRespawn, target );
	fm_set_user_health( target, health );
	
	user_silentkill( id );
	
	get_user_origin( id, origin, 0 );
	origin[ 2 ] += 20;
	
	fm_set_user_origin( target, origin );
	fm_strip_user_weapons( target );
	fm_give_item( target, "weapon_knife" );
	used[target] = true;
	
	get_user_name( id, name, 31 );
	get_user_name( target, target_name, 31 );
	client_print( 0, print_chat, "[Transfer Life] %s i-a dat viața lui %s .", name, target_name );
	
	return PLUGIN_HANDLED;
}

public transfer_life_menu( id )
{
	if( !is_user_alive( id ) )
	{
		client_print( id, print_chat, "[Transfer Life] Meniul nu poate fi deschis!" );
		return;
	}
	
	new menu = menu_create( "\rTransfer Life Menu:", "menu_handler" );
	
	new players[ 32 ], pnum, tempid,
	name_players[ 32 ], tempid2[ 10 ];
	
	get_players(players, pnum);
	for( new i; i < pnum; i++ )
		{
		tempid = players[ i ];
		
		if( get_user_team( id ) != get_user_team( tempid ) )
			continue;
		if( is_user_alive( tempid ) )
			continue;
		
		get_user_name( tempid, name_players, 31 );
		num_to_str( tempid, tempid2, 9 );
		
		menu_additem( menu, name_players, tempid2, 0 );
	}
	
	menu_display( id, menu, 0 );
}

public menu_handler( id, menu, item )
	{
	if( item == MENU_EXIT )
		{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	new data[ 6 ], name_menu[ 64 ], access, callback, name_target[ 32 ];
	menu_item_getinfo( menu, item, access, data, 5, name_menu, 63, callback );
	
	new tempid = str_to_num( data );
	
	new name_userid = get_user_userid(tempid);
	get_user_name( tempid, name_target, 31 );
	client_cmd( id, "life #%d", name_userid );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

//fakemeta_util by VEN
stock fm_entity_set_origin( index, const Float:origin[ 3 ] ) 
	{
	new Float:mins[ 3 ], Float:maxs[ 3 ];
	pev( index, pev_mins, mins );
	pev( index, pev_maxs, maxs );
	engfunc( EngFunc_SetSize, index, mins, maxs );
	
	return engfunc( EngFunc_SetOrigin, index, origin );
}

stock fm_set_user_origin( index, origin[ 3 ] ) 
	{
	new Float:orig[ 3 ];
	IVecFVec( origin, orig );
	
	return fm_entity_set_origin( index, orig );
}

stock fm_set_user_health( index, health ) 
	{
	health > 0
	? set_pev( index, pev_health, float( health ) ) 
	: dllfunc( DLLFunc_ClientKill, index );
	
	return 1;
}

stock fm_set_user_frags( index, frags ) 
	{ 
	set_pev( index, pev_frags, float( frags ) );
	
	return 1;
}

stock fm_strip_user_weapons( id )
{
	static ent;
	ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "player_weaponstrip" ) );
	if( !pev_valid( ent ) ) 
		return;
	
	dllfunc( DLLFunc_Spawn, ent );
	dllfunc( DLLFunc_Use, ent, id );
	engfunc( EngFunc_RemoveEntity, ent );
} 

stock fm_give_item( id, const item[] )
{
	static ent;
	ent = engfunc( EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item ) );
	if( !pev_valid( ent ) ) 
		return;
	
	static Float:originF[ 3 ];
	pev( id, pev_origin, originF );
	set_pev( ent, pev_origin, originF );
	set_pev( ent, pev_spawnflags, pev( ent, pev_spawnflags ) | SF_NORESPAWN );
	dllfunc( DLLFunc_Spawn, ent );
	
	static save;
	save = pev( ent, pev_solid );
	dllfunc( DLLFunc_Touch, ent, id );
	if( pev( ent, pev_solid ) != save )
		return;
	
	engfunc( EngFunc_RemoveEntity, ent );
}

stock szName(id)
{
	new sz_Name[32];
	
	get_user_name(id, sz_Name, charsmax(sz_Name));
	
	return sz_Name;
}

stock fm_get_user_team( id )
{
	return get_pdata_int( id, OFFSET_CSTEAMS );
}
6. Timer 2

download:

Code: Select all

#include <amxmisc>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#include <xs>

#define PORTAL_FLAG 172
#define TIMER_FLAG 5551

#define SetBit(%1,%2)   (%1 |= (1 << (%2 & 31))) 
#define DelBit(%1,%2)   (%1 &= ~(1 << (%2 & 31))) 
#define GetBit(%1,%2)   (%1 & (1 << (%2 & 31)))

new Float:PortalOrigin[3], Float:PortalOrigin2[3];
new PortalEntity, PortalEntity2;
new Finished, Aim, DontShowTimer, DontUseTimer, HidePortal;
new TimeSec[MAX_PLAYERS+1], TimeMin[MAX_PLAYERS+1];
new GivedLife, InUseLife;
new StatusText;

public plugin_init()
{
	register_plugin("Timer", "1.0-beta", "Dr.FioriGinal.Ro");
	
	register_logevent("roundStart", 2, "1=Round_Start");
	
	RegisterHam(Ham_Spawn, "player", "playerSpawn", 1);
	//RegisterHam(Ham_Killed, "player", "Fwd_PlayerKilled_Pre", 0);
	RegisterHam(Ham_Think, "info_target", "onThink");

	register_clcmd("amx_set_portal", "CommandPortal", ADMIN_RCON, "- sets a map portal");
	register_clcmd("amx_set_portal2", "CommandPortal2", ADMIN_RCON, "- sets a map portal");
	register_clcmd("say", "hookChat");
	register_touch("finish_portal", "player", "touchFinish");
	register_forward(FM_AddToFullPack, "pfnAddToFullPack", true);


	StatusText = get_user_msgid("StatusText");
}

public pfnAddToFullPack(es_handle, e, ent, host, hostflags, player, pSet)
{
    if(GetBit(HidePortal, host) || GetBit(DontUseTimer, host))
    {
		if(ent == PortalEntity)
		{
			set_es(es_handle, ES_RenderMode, kRenderTransTexture);
			set_es(es_handle, ES_RenderAmt, 0);
		}
    }

    return FMRES_IGNORED;
}


public hookChat(Index)
{
	new Said[192];
	read_args(Said, charsmax(Said));
	
	if (!Said[0])
	{
		return PLUGIN_CONTINUE;
	}
	
	new const ShowTimerIdent[] = "!showtimer", UseTimerIdent[] = "!usetimer", HidePortalIdent[] = "!hideportal";
		
	remove_quotes(Said);
	
	if (equal(Said, HidePortalIdent, charsmax(HidePortalIdent)))
	{
		GetBit(HidePortal, Index) ? DelBit(HidePortal, Index) : SetBit(HidePortal, Index);
		client_print_color(Index, print_team_red, "^3^^Timer ^1: Ți-ai %s afișarea portalului.", GetBit(HidePortal, Index) ? "oprit" : "repornit");
	}
	
	if (equal(Said, ShowTimerIdent, charsmax(ShowTimerIdent)))
	{
		GetBit(DontShowTimer, Index) ? DelBit(DontShowTimer, Index) : SetBit(DontShowTimer, Index);
		client_print_color(Index, print_team_red, "^3^^Timer ^1: Ți-ai %s afișarea timer-ului.", GetBit(DontShowTimer, Index) ? "oprit" : "repornit");
		
		if (GetBit(DontShowTimer, Index))
		{
			sendStatusText(Index, " ");
		}
	}
	
	if (equal(Said, UseTimerIdent, charsmax(UseTimerIdent)))
	{
		GetBit(DontUseTimer, Index) ? DelBit(DontUseTimer, Index) : SetBit(DontUseTimer, Index);
		client_print_color(Index, print_team_red, "^3^^Timer ^1: %s", GetBit(DontUseTimer, Index) ? "Ți-ai oprit afișarea timer-ului" : "Timer-ul se va reporni la următorul tău spawn.");
		
		if (GetBit(DontUseTimer, Index))
		{
			TimeSec[Index] = 0;
			TimeMin[Index] = 0;
			sendStatusText(Index, " ");
		}
	}
	
	return PLUGIN_CONTINUE;
}

public touchFinish(Touched, Toucher)
{	
	if (GetBit(DontUseTimer, Toucher))
	{
		return;
	}
	
	if (GivedLife != -1 && InUseLife != -1)
	{
		if (GetBit(get_xvar_num(GivedLife), Toucher) || GetBit(get_xvar_num(InUseLife), Toucher))
		{
			return;
		}
	}
	
	if (!GetBit(Finished, Toucher) && (TimeMin[Toucher] != 0 || TimeSec[Toucher] != 0) && cs_get_user_team(Toucher) == CS_TEAM_CT)
	{
		new Name[MAX_NAME_LENGTH];
		get_user_name(Toucher, Name, charsmax(Name));
		client_print_color(0, print_team_red, "^3^^Timer ^1: ^4%s^1 a terminat harta în %02d:%02d minute!", Name, TimeMin[Toucher], TimeSec[Toucher]);
		SetBit(Finished, Toucher);
	}
}

public playerSpawn(Index)
{
	if (!is_user_alive(Index) || PortalEntity == 0 || GetBit(DontUseTimer, Index))
	{
		return;
	}
	
	if (GivedLife == 0)
	{
		GivedLife = get_xvar_id("GivedLife");
	}
	
	if (InUseLife == 0)
	{
		InUseLife = get_xvar_id("InUseLife");
	}
	
	if (GivedLife != -1 && InUseLife != -1)
	{
		if (GetBit(get_xvar_num(GivedLife), Index) || GetBit(get_xvar_num(InUseLife), Index))
		{
			remove_task(Index+TIMER_FLAG);
			return;
		}
	}
	
	if (task_exists(Index+TIMER_FLAG))
	{
		remove_task(Index+TIMER_FLAG);
		TimeSec[Index] = 0;
		TimeMin[Index] = 0;
	}

	
	if (cs_get_user_team(Index) == CS_TEAM_CT && !is_user_bot(Index))
	{
		set_task(1.0, "roundTimer", Index+TIMER_FLAG, .flags = "b");
		set_task(0.1, "clearMessage", Index, .flags = "b");
	}
}

public roundTimer(Index)
{
	Index -= TIMER_FLAG;
	if (!is_user_alive(Index) || GetBit(DontUseTimer, Index))
	{
		remove_task(Index+TIMER_FLAG);
		TimeSec[Index] = 0;
		TimeMin[Index] = 0;
		return;
	}
	
	TimeSec[Index]++;
	if (TimeSec[Index] == 60)
	{
		TimeSec[Index] = 0;
		TimeMin[Index]++;
	}
	
	if (!GetBit(Aim, Index) && !GetBit(Finished, Index) && !GetBit(DontShowTimer, Index))
	{
		new Message[32];
		formatex(Message, charsmax(Message), "Your time: %02d:%02d", TimeMin[Index], TimeSec[Index]);
		sendStatusText(Index, Message);
	}
}

public clearMessage(Index)
{	
	new Target, Body;
	get_user_aiming(Index, Target, Body);
	if (1 <= Target <= MaxClients)
	{
		sendStatusText(Index, "1 %c1: %p2^n2  %h: %i3%%");		
		SetBit(Aim, Index);
	}
	else
	{
		if (GetBit(Finished, Index))
		{
			sendStatusText(Index, " ")
		}
		DelBit(Aim, Index);
	}
}

public roundStart()
{
	Finished = 0;
}

public onThink(Entity)
{
	if (pev_valid(Entity) && pev(Entity, pev_iuser4) == PORTAL_FLAG)
	{
		static Float:Angles[3];

		pev(Entity, pev_angles, Angles);
		Angles[1] += 5.0;

		if (Angles[1] > 360.0)
		{
			Angles[1] = 0.0;
		}

		set_pev(Entity, pev_angles, Angles);
		set_pev(Entity, pev_nextthink, get_gametime() + 0.5);
	}
}

public plugin_precache()
{
	precache_model("models/gate2.mdl");
	
	new Map[32], Buffer[128], Configurations[64], Origin[3][16];
	get_mapname(Map, charsmax(Map));
	get_localinfo("amxx_configsdir", Configurations, charsmax(Configurations));
	formatex(Buffer, charsmax(Buffer), "%s/Portals", Configurations);
	if (!dir_exists(Buffer))
	{
		mkdir(Buffer);
	}

	formatex(Buffer, charsmax(Buffer), "%s/Portals/%s.ini", Configurations, Map);

	new File = fopen(Buffer, "r");
	if (File)
	{
		while (!feof(File))
		{
			fgets(File, Buffer, charsmax(Buffer));
			trim(Buffer);

			if (parse(Buffer, Origin[0], charsmax(Origin[]), Origin[1], charsmax(Origin[]), Origin[2], charsmax(Origin[])) == 3)
			{
				for (new i = 0; i < sizeof(Origin); i++)
				{
					PortalOrigin[i] = str_to_float(Origin[i]);
				}
			}
		}
		fclose(File);

		setFinishPortal();
	}
}

public CommandPortal2(Index, Level, Command)
{
	if (!cmd_access(Index, Level, Command, 1))
	{
		return PLUGIN_HANDLED;
	}

	get_aim_origin(Index, PortalOrigin2); //pev(Index, pev_origin, PortalOrigin);
	PortalOrigin2[2] += 125;

	setFinishPortal2();
	
	return PLUGIN_HANDLED;
}

public CommandPortal(Index, Level, Command)
{
	if (!cmd_access(Index, Level, Command, 1))
	{
		return PLUGIN_HANDLED;
	}

	new Buffer[128], Map[32], Configurations[64];

	get_localinfo("amxx_configsdir", Configurations, charsmax(Configurations));
	get_mapname(Map, charsmax(Map));
	formatex(Buffer, charsmax(Buffer), "%s/Portals/%s.ini", Configurations, Map);

	get_aim_origin(Index, PortalOrigin); //pev(Index, pev_origin, PortalOrigin);
	PortalOrigin[2] += 125;

	new File = fopen(Buffer, "w");
	if (File)
	{
		fprintf(File, "%f %f %f", PortalOrigin[0], PortalOrigin[1], PortalOrigin[2]);

		fclose(File);
	}

	setFinishPortal();
	
	return PLUGIN_HANDLED;
}

get_aim_origin(index, Float:origin[3]) 
{
	new Float:start[3], Float:view_ofs[3];
	pev(index, pev_origin, start);
	pev(index, pev_view_ofs, view_ofs);
	xs_vec_add(start, view_ofs, start);

	new Float:dest[3];
	pev(index, pev_v_angle, dest);
	engfunc(EngFunc_MakeVectors, dest);
	global_get(glb_v_forward, dest);
	xs_vec_mul_scalar(dest, 9999.0, dest);
	xs_vec_add(start, dest, dest);

	engfunc(EngFunc_TraceLine, start, dest, 0, index, 0);
	get_tr2(0, TR_vecEndPos, origin);
}

sendStatusText(Index, const Message[])
{
	message_begin(MSG_ONE, StatusText, {0,0,0}, Index);
	write_byte(0);
	write_string(Message);
	message_end();
}

setFinishPortal()
{
	if (pev_valid(PortalEntity))
	{
		engfunc(EngFunc_RemoveEntity, PortalEntity);
	}
	
	if (task_exists(PORTAL_FLAG))
	{
		remove_task(PORTAL_FLAG);
	}

	PortalEntity = create_entity("info_target");

	if (pev_valid(PortalEntity))
	{
		new Float:EntityMins[3];
		EntityMins = Float:{-100.0, -100.0, -100.0};
		new Float:EntityMaxs[3];
		EntityMaxs = Float:{100.0, 100.0, 100.0};

		engfunc(EngFunc_SetOrigin, PortalEntity, PortalOrigin);
		engfunc(EngFunc_SetModel, PortalEntity, "models/gate2.mdl");
		set_pev(PortalEntity, pev_classname, "finish_portal");

		engfunc(EngFunc_SetSize, PortalEntity, EntityMins,  EntityMaxs);

		set_pev(PortalEntity, pev_solid, SOLID_TRIGGER);
		set_pev(PortalEntity, pev_movetype, MOVETYPE_FLY);
		set_pev(PortalEntity, pev_iuser4, PORTAL_FLAG);
		set_pev(PortalEntity, pev_nextthink, get_gametime() + 0.5);
		set_pev(PortalEntity, pev_classname, "finish_portal");
	}
}

setFinishPortal2()
{
	if (pev_valid(PortalEntity2))
	{
		engfunc(EngFunc_RemoveEntity, PortalEntity2);
	}
	
	if (task_exists(PORTAL_FLAG))
	{
		remove_task(PORTAL_FLAG);
	}

	PortalEntity2 = create_entity("info_target");

	if (pev_valid(PortalEntity2))
	{
		new Float:EntityMins[3];
		EntityMins = Float:{-100.0, -100.0, -100.0};
		new Float:EntityMaxs[3];
		EntityMaxs = Float:{100.0, 100.0, 100.0};

		engfunc(EngFunc_SetOrigin, PortalEntity2, PortalOrigin2);
		engfunc(EngFunc_SetModel, PortalEntity2, "models/gate2.mdl");
		set_pev(PortalEntity2, pev_classname, "finish_portal");

		engfunc(EngFunc_SetSize, PortalEntity2, EntityMins,  EntityMaxs);

		set_pev(PortalEntity2, pev_solid, SOLID_TRIGGER);
		set_pev(PortalEntity2, pev_movetype, MOVETYPE_FLY);
		set_pev(PortalEntity2, pev_iuser4, PORTAL_FLAG);
		set_pev(PortalEntity2, pev_nextthink, get_gametime() + 0.5);
		set_pev(PortalEntity2, pev_classname, "finish_portal");
	}
}
7. Transfer Life

download:

Code: Select all

#include <amxmisc>
#include <cstrike>
#include <fun>
#include <hamsandwich>

#define SetBit(%1,%2)   (%1 |= (1 << (%2 & 31))) 
#define DelBit(%1,%2)   (%1 &= ~(1 << (%2 & 31))) 
#define GetBit(%1,%2)   (%1 & (1 << (%2 & 31)))

new bool:Concurs, Race_xVar;

public GivedLife, InUseLife, ReviveForce;

public plugin_init() 
{
	register_plugin
	(
		.plugin_name = "Transfer Life",
		.version     = "2.0",
		.author      = "Dr.FioriGinal.Ro"
	);
	
	register_clcmd("say", "hookChat");
	
	register_logevent("newRound", 2, "1=Round_Start");
	RegisterHam(Ham_Spawn, "player", "letPlayerUseTranfer");
	RegisterHam(Ham_Killed, "player", "letPlayerUseTranfer");  
	
	Race_xVar = get_xvar_id("raceIds");
}

public client_disconnected(Index)
{
	DelBit(GivedLife, Index);
	DelBit(InUseLife, Index);
	DelBit(ReviveForce, Index);
}

public letPlayerUseTranfer(Index)
{
	DelBit(InUseLife, Index);
}

public newRound()
{
	GivedLife = InUseLife = ReviveForce = 0;
}

public hookChat(Index)
{
	new Said[64];
	read_args(Said, charsmax(Said));
       
	if ( !Said[0] )
		return PLUGIN_CONTINUE;
       
	remove_quotes(Said[0]);
       
	new const GiveLifeIdent[] = "!givelife", LifeIdent[] = "!life", ConcursIdent[] = "!concurs";

	if( equal(Said, ConcursIdent, charsmax(ConcursIdent)) && get_user_flags(Index) & ADMIN_IMMUNITY  )
	{
		if ( Concurs )
		{
			Concurs = false;
		}
		else
		{
			Concurs = true;
		}
	}
       
	if( equal(Said, GiveLifeIdent, charsmax(GiveLifeIdent)) && !Concurs )
	{
		transferLifeMenu(Index, 0);
		return PLUGIN_HANDLED;
	}
	if( equal(Said, LifeIdent, charsmax(LifeIdent)) )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 !life ^1 a fost înlocuit cu ^3 !givelife^1!");
		return PLUGIN_HANDLED;
	}
       
	return PLUGIN_CONTINUE;
}

public transferLife(Index, TargetIndex, LifeTransferType)
{
	if ( !is_user_alive(Index) )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Trebuie să fii in viaţă!");
		return;
	}	
	if ( cs_get_user_team(Index) != CS_TEAM_CT )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Trebuie să fii in counter!" );
		return;
	}
	if ( GetBit(InUseLife, Index) )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Nu poți da life când ai primit deja life!" );
		return;
	}
	if ( GetBit(GivedLife, Index) )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Nu poți da life decât o singură dată pe rundă!" );
		return;
	}
	
	if( !is_user_connected(TargetIndex) )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Jucătorul nu se mai află pe server!");
		return;
	}
       
	if ( is_user_alive(TargetIndex) )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Jucătorul este deja in viaţă!");
		return;
	}
       
	if ( get_user_team(Index) != get_user_team(TargetIndex) )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Jucătorul trebuie să fie in aceeași echipă cu tine!");
		return;
	}
    
	new TargetName[MAX_NAME_LENGTH];
	get_user_name(TargetIndex, TargetName, charsmax(TargetName));
	
	if ( Race_xVar != -1 )
	{
		new bits = get_xvar_num(Race_xVar);
		if ( GetBit(bits, Index) )
		{
			client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Nu poți da life cand ești in race." );
			return;
		}
		if ( GetBit(bits, TargetIndex) )
		{
			client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Nu îi poti da life lui %s pentru că se află în race.", TargetName);
			return;
		}
	}
	
	new Origin[3], Name[32];
	get_user_name(Index, Name, charsmax(Name));
	
	ExecuteHamB(Ham_CS_RoundRespawn, TargetIndex);
	set_user_health(TargetIndex, get_user_health(Index));
       
	user_silentkill(Index);
       
	get_user_origin(Index, Origin, 0);
	Origin[2] += 20;
       
	set_user_origin(TargetIndex, Origin);
	strip_user_weapons(TargetIndex);
	give_item(TargetIndex, "weapon_knife");
	SetBit(GivedLife, Index);
	SetBit(InUseLife, TargetIndex);
	static UsedRevive;
	if (UsedRevive == 0)
	{
		UsedRevive = get_xvar_id("UsedRevive");
	}
	new Auxiliar = get_xvar_num(UsedRevive);
	if (GetBit(Auxiliar, Index))
	{
		SetBit(Auxiliar, TargetIndex);
		set_xvar_num(UsedRevive, Auxiliar);
	}
    
	new Float:Time;
	switch (LifeTransferType)
	{
		case 0 :
		{
			Time = 15.0;
		}
		case 1 :
		{
			Time = 25.0;
		}
		case 2 :
		{
			Time = 30.0;
		}
		case 3 :
		{
			client_print_color(0, print_team_red, "^4[^3Transfer Life^4]^1 %s i-a dat viața permanent lui %s.", Name, TargetName);
			return;
		}
	}
	client_print_color(0, print_team_red, "^4[^3Transfer Life^4]^1 %s i-a dat viața lui %s pentru %d secunde.", Name, TargetName, floatround(Time));
	new Info[2];
	formatex(Info, charsmax(Info), "%d", LifeTransferType);
	set_task(Time, "transferLifeBack", Index*100+TargetIndex, Info, charsmax(Info));
}

public transferLifeBack(Info[], Indexes)
{
	new Index = Indexes % 100, TargetIndex = Indexes / 100;
	static TrialReviveIndex;
	if (TrialReviveIndex == 0)
	{
		TrialReviveIndex = get_xvar_id("TrialReviveIndex");
	}
	
	if (!is_user_alive(Index))
	{
		if (TargetIndex == get_xvar_num(TrialReviveIndex) || get_user_flags(TargetIndex) & ADMIN_LEVEL_H)
		{
			client_print_color(TargetIndex, print_team_red, "^4[^3Transfer Life^4]^1 Poți folosi folosi din nou ^4!revive^1.");
			SetBit(ReviveForce, TargetIndex);
		}
		return;
	}
	if (!GetBit(InUseLife, Index))
	{
		return;
	}
	if (!is_user_connected(TargetIndex) || !GetBit(GivedLife, TargetIndex))
	{
		return;
	}
	
	if (cs_get_user_team(TargetIndex) == CS_TEAM_T)
	{
		return;
	}
	
	if (TargetIndex == TrialReviveIndex || get_user_flags(TargetIndex) & ADMIN_LEVEL_H)
	{
		SetBit(ReviveForce, TargetIndex);
	}
	
	ExecuteHamB(Ham_CS_RoundRespawn, TargetIndex);
	set_user_health(TargetIndex, get_user_health(Index));
	
	user_silentkill(Index);
	new Origin[3], Name[MAX_NAME_LENGTH], TargetName[MAX_NAME_LENGTH];
	get_user_name(Index, Name, charsmax(Name));
	get_user_name(TargetIndex, TargetName, charsmax(TargetName));
	get_user_origin(Index, Origin, 0);
	Origin[2] += 20;
       
	set_user_origin(TargetIndex, Origin);
	strip_user_weapons(TargetIndex);
	give_item(TargetIndex, "weapon_knife");
	DelBit(InUseLife, Index);
	/*
	static UsedRevive;
	if (UsedRevive == 0)
	{
		UsedRevive = get_xvar_id("UsedRevive");
	}
	new Auxiliar = get_xvar_num(UsedRevive);
	if (GetBit(Auxiliar, Index))
	{
		DelBit(Auxiliar, Index);
		set_xvar_num(UsedRevive, Auxiliar);
	}
	*/
	
	new Time;
	new LifeTransferType = str_to_num(Info);
	switch (LifeTransferType)
	{
		case 0 :
		{
			Time = 15;
		}
		case 1 :
		{
			Time = 25;
		}
		case 2 :
		{
			Time = 30;
		}
	}
	
	client_print_color(0, print_team_red, "^4[^3Transfer Life^4]^1 Au trecut %d secunde, %s i-a dat viața inapoi lui %s .", Time, Name, TargetName);
}

transferLifeMenu(Index, LifeTransferType)
{
	if (!is_user_alive(Index))
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Trebuie să fii in viaţă!" );
		return PLUGIN_HANDLED;
	}
	if (GetBit(InUseLife, Index))
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Nu poți da life când ai primit deja life!" );
		return PLUGIN_HANDLED;
	}
	if (GetBit(GivedLife, Index))
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Nu poți da life decât o singură dată pe rundă!" );
		return PLUGIN_HANDLED;
	}
	if (cs_get_user_team(Index) != CS_TEAM_CT)
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Trebuie să fii in counter!" );
		return PLUGIN_HANDLED;
	}
       
	new Players[MAX_PLAYERS], DeadPlayers, NamePlayer[MAX_NAME_LENGTH], PlayerId[6];
       
	get_players(Players, DeadPlayers, "bche", "CT");
	
	if ( DeadPlayers == 0 )
	{
		client_print_color(Index, print_team_red, "^4[^3Transfer Life^4]^1 Nu este nici un jucător mort!" );
		return PLUGIN_HANDLED;
	}
	
	new Menu = menu_create("\rThe new life transfer:", "menuHandler");
	
	new Contor = 1, bool:LastItem;
	for (new i = 0; i < DeadPlayers; ++i)
	{
		if ( GetBit(GivedLife, Players[i]) || GetBit(InUseLife, Players[i]) )
		{
			continue;
		}

		get_user_name(Players[i], NamePlayer, charsmax(NamePlayer));
		num_to_str(Players[i], PlayerId, charsmax(PlayerId));
           
		if ( Contor == 6 )
		{
			add(NamePlayer, charsmax(NamePlayer), "^n");
			menu_additem(Menu, NamePlayer, PlayerId);
			new Info[3], LifeTransferTime[40];
			formatex(Info, charsmax(Info), "%d", LifeTransferType);
			switch (LifeTransferType)
			{
				case 0 :
				{
					formatex(LifeTransferTime, charsmax(LifeTransferTime), "Lifeback in : \r15s");
				}
				case 1 :
				{
					formatex(LifeTransferTime, charsmax(LifeTransferTime), "Lifeback in : \r25s");
				}
				case 2 :
				{
					formatex(LifeTransferTime, charsmax(LifeTransferTime), "Lifeback in : \r30s");
				}
				case 3 :
				{
					formatex(LifeTransferTime, charsmax(LifeTransferTime), "Without lifeback.");
				}
			}
			menu_additem(Menu, LifeTransferTime, Info);
			Contor = 1;
			LastItem = true;
		}
		else
		{
			menu_additem(Menu, NamePlayer, PlayerId);
			Contor++;
			LastItem = false;
		}
	}
	
	if ( LastItem )
	{
		--Contor;
	}
	
	if ( Contor & 7 != 0 )
	{
		new Lines = 7;
		while ( Lines-- - Contor & 7 )
		{
			menu_addblank2(Menu);
		}
		new Info[3], LifeTransferTime[40];
		formatex(Info, charsmax(Info), "%d", LifeTransferType);
		switch (LifeTransferType)
		{
			case 0 :
			{
				formatex(LifeTransferTime, charsmax(LifeTransferTime), "Lifeback in : \r15s");
			}
			case 1 :
			{
				formatex(LifeTransferTime, charsmax(LifeTransferTime), "Lifeback in : \r25s");
			}
			case 2 :
			{
				formatex(LifeTransferTime, charsmax(LifeTransferTime), "Lifeback in : \r30s");
			}
			case 3 :
			{
				formatex(LifeTransferTime, charsmax(LifeTransferTime), "Without lifeback. \r(Only to slots)");
			}
		}
		menu_additem(Menu, LifeTransferTime, Info);
	}
    
	menu_display(Index, Menu, 0);
	
	return PLUGIN_CONTINUE;
}
 
public menuHandler(Index, Menu, Item)
{
	if( Item == MENU_EXIT )
	{
		menu_destroy(Menu);
		return PLUGIN_HANDLED;
	}
	
	new Info[6], ItemName[32], Access, CallBack, TargetName[MAX_NAME_LENGTH];
	menu_item_getinfo(Menu, 6, Access, Info, charsmax(Info), ItemName, charsmax(ItemName), CallBack);
	new LifeTransferType = str_to_num(Info);
	
	if ((Item+1) % 7 == 0)
	{
		if (++LifeTransferType == 4)
		{
			LifeTransferType = 0;
		}
		
		menu_item_getinfo(Menu, Item, Access, Info, charsmax(Info), ItemName, charsmax(ItemName), CallBack);
		transferLifeMenu(Index, LifeTransferType);
		return PLUGIN_HANDLED;
	}
       
	menu_item_getinfo(Menu, Item, Access, Info, charsmax(Info), ItemName, charsmax(ItemName), CallBack);
	new TargetIndex = str_to_num(Info);
	get_user_name(TargetIndex, TargetName, charsmax(TargetName));
	transferLife(Index, TargetIndex, LifeTransferType);
       
	menu_destroy(Menu);
	return PLUGIN_HANDLED;
}
 
8. Acest plugin permite finalizarea ultimei runde chiar dacă timpul mapei s-a terminat

download:

Code: Select all

/* Allow Round Finish
About:
This plugin allows the last round to be finnished even if the timelimit has expired

Credits: 
Ops in #AMXmod @ Quakenet for alot of help ( + AssKicR & CheesyPeteza ) 
*/

#include <amxmodx>

new g_IsLastRound = 0

#define TASK_ID_CHECKFORMAPEND 241
#define TASK_ID_DELAYMAPCHANGE 242

public plugin_init()
{
	register_plugin("Allow round finish", "1.0.2" ,"EKS")
	
	register_event("SendAudio","Event_EndRound","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")
	set_task(15.0,"Task_MapEnd",TASK_ID_CHECKFORMAPEND,_,_,"d",1)
}

public Task_MapEnd()
{
	if(get_playersnum())
	{
		g_IsLastRound = 1
		server_cmd("mp_timelimit 0")
		client_print(0,print_chat,"Timelimit has expired, mapchange will happen after this round")
	}
}
public Event_EndRound()
{
	if(g_IsLastRound == 1)
	{
		client_print(0,print_chat,"Round is over, changing map.")
		set_task(3.0,"Task_DelayMapEnd",TASK_ID_DELAYMAPCHANGE,_,_,"a",1) // We delay the end of the map with a few sec, so the last guys death is viewable
	}
}
public server_changelevel(map[])
{
	if(g_IsLastRound == 1)
		Task_DelayMapEnd()
}
public Task_DelayMapEnd()
{
	remove_task(TASK_ID_DELAYMAPCHANGE)
	g_IsLastRound = 0
	if(get_cvar_num("mp_timelimit") == 0)
	{
		new Map[64];
		get_cvar_string("amx_nextmap", Map, charsmax(Map));
		engine_changelevel(Map);
		set_task(2.0, "forceChange");
		
	}
}

public forceChange()
{
	new Map[64];
	get_cvar_string("amx_nextmap", Map, charsmax(Map));
	server_cmd("changelevel %s", Map);
}
9. SpecList

download:

Code: Select all

#include <amxmodx>
#include <fakemeta>

#pragma semicolon 1

#define RED 64
#define GREEN 64
#define BLUE 64
#define UPDATEINTERVAL 1.0

// Comment below if you do not want /speclist showing up on chat
#define ECHOCMD

// Admin flag used for immunity
#define FLAG ADMIN_IMMUNITY

new const PLUGIN[] = "SpecList";
new const VERSION[] = "1.2a";
new const AUTHOR[] = "FatalisDK";

new gMaxPlayers;
new gCvarOn;
new gCvarImmunity;
new bool:gOnOff[33] = { true, ... };

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_cvar(PLUGIN, VERSION, FCVAR_SERVER, 0.0);
	gCvarOn = register_cvar("amx_speclist", "1", 0, 0.0);
	gCvarImmunity = register_cvar("amx_speclist_immunity", "1", 0, 0.0);
	
	register_clcmd("say /speclist", "cmdSpecList", -1, "");
	
	gMaxPlayers = get_maxplayers();
	
	set_task(UPDATEINTERVAL, "tskShowSpec", 123094, "", 0, "b", 0);
}

public cmdSpecList(id)
{
	if( gOnOff[id] )
	{
		client_print(id, print_chat, "[AMXX] You will no longer see who's spectating you.");
		gOnOff[id] = false;
	}
	else
	{
		client_print(id, print_chat, "[AMXX] You will now see who's spectating you.");
		gOnOff[id] = true;
	}
	
	#if defined ECHOCMD
	return PLUGIN_CONTINUE;
	#else
	return PLUGIN_HANDLED;
	#endif
}

public tskShowSpec()
{
	if( !get_pcvar_num(gCvarOn) )
	{
		return PLUGIN_CONTINUE;
	}
	
	static szHud[1102];//32*33+45
	static szName[34];
	static bool:send;
	
	// FRUITLOOOOOOOOOOOOPS!
	for( new alive = 1; alive <= gMaxPlayers; alive++ )
	{
		new bool:sendTo[33];
		send = false;
		
		if( !is_user_alive(alive) )
		{
			continue;
		}
		
		sendTo[alive] = true;
		
		get_user_name(alive, szName, 32);
		format(szHud, 45, "Spectating %s:^n", szName);
		
		for( new dead = 1; dead <= gMaxPlayers; dead++ )
		{
			if( is_user_connected(dead) )
			{
				if( is_user_alive(dead)
				|| is_user_bot(dead) )
				{
					continue;
				}
				
				if( pev(dead, pev_iuser2) == alive )
				{
					if( !(get_pcvar_num(gCvarImmunity)&&get_user_flags(dead, 0)&FLAG) )
					{
						get_user_name(dead, szName, 32);
						add(szName, 33, "^n", 0);
						add(szHud, 1101, szName, 0);
						send = true;
					}

					sendTo[dead] = true;
					
				}
			}
		}
		
		if( send == true )
		{
			for( new i = 1; i <= gMaxPlayers; i++ )
			{
				if( sendTo[i] == true
				&& gOnOff[i] == true )
				{
					set_hudmessage(RED, GREEN, BLUE,
						0.75, 0.15, 0, 0.0, UPDATEINTERVAL + 0.1, 0.0, 0.0, -1);
					
					show_hudmessage(i, szHud);
				}
			}
		}
	}
	
	return PLUGIN_CONTINUE;
}

public client_connect(id)
{
	gOnOff[id] = true;
}

public client_disconnect(id)
{
	gOnOff[id] = true;
}
10. Schimbarea cerului

download:

Code: Select all

#include < amxmodx >


static const 
	PLUGIN_NAME	[ ] = "Sky Changer Updated",
	PLUGIN_VERSION	[ ] = "0.3",
	PLUGIN_AUTHOR	[ ] = "CryWolf"


new const g_sky [ ] [ ] =
{
    "blood"
};


#pragma semicolon 1
new pCvar_sky;


public plugin_init ( )
{
	register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );
}

public plugin_precache ( )
{
	pCvar_sky    = register_cvar ( "amx_sky", "1", ADMIN_ADMIN );
	
	switch ( get_pcvar_num ( pCvar_sky ) )
	{
		case 0: return;
		case 1:
		{
			for ( new i = 0; i < sizeof g_sky; i++ )
			{
				static dir [ 160 ];
				formatex ( dir, charsmax ( dir ), "gfx/env/%sbk.tga", g_sky [ i ] );
				precache_generic ( dir );
				formatex ( dir, charsmax ( dir ), "gfx/env/%sdn.tga", g_sky [ i ] );
				precache_generic ( dir );
				formatex ( dir, charsmax ( dir ), "gfx/env/%sft.tga", g_sky [ i ] );
				precache_generic ( dir );
				formatex ( dir, charsmax ( dir ), "gfx/env/%slf.tga", g_sky [ i ] );
				precache_generic ( dir );
				formatex ( dir, charsmax ( dir ), "gfx/env/%srt.tga", g_sky [ i ] );
				precache_generic ( dir );
				formatex ( dir, charsmax ( dir ), "gfx/env/%sup.tga", g_sky [ i ] );
				precache_generic ( dir );
			}
		}
	}
	
	server_cmd ( "sv_skyname %s", g_sky [ random_num ( 0, charsmax ( g_sky ) ) ] );
}
11. Race

download:

Code: Select all

#include <amxmisc>
#include <cstrike>
#include <hamsandwich>

enum _:RaceType
{
	idAsker,
	idAccepter
}

const MaxRaces = 16;

#define BitSet(%1,%2)   (%1 |= (1 << (%2 & 31))) 
#define BitClear(%1,%2) (%1 &= ~(1 << (%2 & 31))) 
#define BitGet(%1,%2)   (%1 & (1 << (%2 & 31)))

new bool:InRace[MaxRaces], isnotAfk, score[MaxRaces][RaceType], Competitors[MaxRaces][RaceType], Rounds[MaxRaces], Races;
new bool:StartRace[MaxRaces];
public raceIds;

public plugin_init()
{
	register_plugin("Race Plugin", "1.0", "Dr.FioriGinal.Ro");
	register_clcmd("say", "hookChat");
	register_clcmd("say_team", "hookChat");
	
	RegisterHam(Ham_TakeDamage, "player", "takeDamage");
	register_logevent("roundStart", 2, "1=Round_Start");
}

public roundStart() 
{
	if ( !Races )
	{
		return;
	}
	new bool:Tero;
	for (new i = 0, j = 1; i < MaxRaces && j <= Races ; ++i)
	{
		if ( InRace[i] )
		{
			++j;
		}
		else
		{
			continue;
		}
		if ( !StartRace[i] )
		{
			StartRace[i] = true;
			client_print_color(Competitors[i][idAsker], print_team_blue, "^4[^3Race Plugin^4] Race-ul a inceput !");
			client_print_color(Competitors[i][idAccepter], print_team_blue, "^4[^3Race Plugin^4] Race-ul a inceput !");
			continue;
		}
		if ( !Tero )
		{
			if ( cs_get_user_team(Competitors[i][idAsker]) == CS_TEAM_T || cs_get_user_team(Competitors[i][idAccepter]) == CS_TEAM_T )
			{
				Tero = true;
				continue;
			}
		}
		if ( ++Rounds[i] == 5 )
		{
			new name[MAX_NAME_LENGTH], name2[MAX_NAME_LENGTH];
			get_user_name(Competitors[i][idAsker], name, charsmax(name));
			get_user_name(Competitors[i][idAccepter], name2, charsmax(name2));
			
			if ( score[i][idAsker] < score[i][idAccepter] )
			{
				client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a castigat race-ul cu %d-%d contra lui %s.", name2, score[i][idAccepter], score[i][idAsker], name);
			}
			else
			{
				if ( score[i][idAsker] == score[i][idAccepter] )
				{
					client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s si %s au facut egal %d-%d.", name, name2, score[i][idAsker], score[i][idAccepter]);
				}
				else
				{
					client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a castigat race-ul cu %d-%d contra lui %s.", name,score[i][idAsker], score[i][idAccepter], name2);
				}
			}
			--Races;
			//client_print(0, print_console, "--race in roundstart");
			InRace[i] = false;
			StartRace[i] = false;
		
			BitClear(raceIds, Competitors[i][idAsker]);
			BitClear(raceIds, Competitors[i][idAccepter]);
			return;
		}
	}
	
}

public client_disconnect(id)
{
	if ( BitGet(raceIds, id) )
	{
		//client_print(0, print_console, "debug detetez ca e in bitsum");
		for (new i = 0, j = 1; i < MaxRaces && j <= Races ; ++i)
		{
			if ( InRace[i] )
			{
				++j;
				//client_print(0, print_console, "debug detetez ca e in race");
			}
			else
			{
				continue;
			}
			if ( id == Competitors[i][idAsker] || id == Competitors[i][idAccepter] )
			{
				--Races;
				//client_print(0, print_console, "--race in client_disconnect");
				InRace[i] = false;
				StartRace[i] = false;
				//client_print(0, print_console, "debug curat celula");
				BitClear(raceIds, Competitors[i][idAsker]);
				BitClear(raceIds, Competitors[i][idAccepter]);
				break;
			}
		}
	}
}

public takeDamage( iVictim, inflictor, iAttacker, Float:iDamagee, damagetype )
{
	//client_print(0, print_console, "Races : %d, iVictim %d, iAttacker %d, BitGet ivictim %d, BitGet iAttacker %d",
	//			Races, iVictim, iAttacker, BitGet(raceIds, iVictim), BitGet(raceIds, iAttacker));
	if ( Races && !BitGet(raceIds, iVictim) && BitGet(raceIds, iAttacker) && cs_get_user_team(iVictim) == CS_TEAM_T &&
		cs_get_user_team(iAttacker) == CS_TEAM_CT )
	{
		for (new i = 0, j = 1; i < MaxRaces && j <= Races ; ++i)
		{
			if ( InRace[i] && StartRace[i] )
			{
				++j;
			}
			else
			{
				continue;
			}
			if ( iAttacker == Competitors[i][idAsker] || iAttacker == Competitors[i][idAccepter] )
			{
				user_kill(Competitors[i][idAsker], 1);
				user_kill(Competitors[i][idAccepter], 1);
				if ( iAttacker == Competitors[i][idAsker] )
				{
					new name[MAX_NAME_LENGTH], name2[MAX_NAME_LENGTH];
					get_user_name(Competitors[i][idAsker], name, charsmax(name));
					get_user_name(Competitors[i][idAccepter], name2, charsmax(name2));
					if ( ++score[i][idAsker] == 3 )
					{
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s castigat cu 3-%d race-ul contra lui %s !", name, score[i][idAccepter], name2);
						--Races;
						//client_print(0, print_console, "--race in win asker");
						InRace[i] = false;
						StartRace[i] = false;
				
						BitClear(raceIds, Competitors[i][idAsker]);
						BitClear(raceIds, Competitors[i][idAccepter]);
					}
					else
					{
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a punctat !", name);
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] Scorul este %s %d-%d %s.", name, score[i][idAsker], score[i][idAccepter], name2);
					}
				}
				else
				{
					new name[MAX_NAME_LENGTH], name2[MAX_NAME_LENGTH];
					get_user_name(Competitors[i][idAsker], name, charsmax(name));
					get_user_name(Competitors[i][idAccepter], name2, charsmax(name2));
					if ( ++score[i][idAccepter] == 3 )
					{
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s castigat cu 3-%d race-ul contra lui %s !", name2, score[i][idAsker], name);
						--Races;
						//client_print(0, print_console, "--race in win accepter");
						InRace[i] = false;
						StartRace[i] = false;
				
						BitClear(raceIds, Competitors[i][idAsker]);
						BitClear(raceIds, Competitors[i][idAccepter]);
					}
					else
					{
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a punctat !", name2);
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] Scorul este %s %d-%d %s.", name, score[i][idAsker], score[i][idAccepter], name2);
					}
				}
				SetHamParamFloat(4, 0.0);
		
				return HAM_HANDLED;
			}
		}
	}
	
	return HAM_IGNORED;
}  

public hookChat(id)
{
	new args[32];
	read_args(args, charsmax(args));
	
	if ( !args[0] )
	{
		return PLUGIN_CONTINUE;
	}
	
	remove_quotes(args);
	
	new const raceIdent[] = "!race";
	
	if ( equal(args, raceIdent, charsmax(raceIdent)) )
	{
		if ( !(get_user_flags(id) & ADMIN_RESERVATION) ) 
		{
			client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] Ai nevoie de slot pentru a da race cu cineva.");
			return PLUGIN_HANDLED;
		}
		if ( get_timeleft() / 60 < 7 )
		{
			client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] Nu poti incepe un race cand mai sunt 7 minute ramase.");
			return PLUGIN_HANDLED;
		}
		if ( BitGet(raceIds, id) )
		{
			client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] Esti deja intr-o race.");
			return PLUGIN_HANDLED;
		}
		
		raceMenu(id);
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public raceMenu(id)
{
	new menu = menu_create("Alegeti adversarul :", "raceMenuHandler");
	new players[MAX_PLAYERS], pnum, OutOfRace;
	new name[MAX_NAME_LENGTH], data[10];
	
	get_players(players, pnum, "ch");
	
	for (new i = 0; i < pnum; ++i )
	{
		if ( players[i] == id || BitGet(raceIds, players[i]) || !is_user_admin(players[i]) )
		{
			OutOfRace++;
			//get_user_name(players[i], name, charsmax(name));
			//client_print(0, print_console, "[RP] nume: %s", name);
			continue;
		}
		get_user_name(players[i], name, charsmax(name));
		num_to_str(get_user_userid(players[i]), data, charsmax(data));
		
		menu_additem(menu, name, data);
	}
	
	if ( pnum - OutOfRace == 0 )
	{
		client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] Nu exista competitori pentru race.");
		return;
	}
	
	menu_display(id, menu);
}

public raceMenuHandler(id, menu, item)
{
	if ( item == MENU_EXIT )
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new data[6], name[MAX_NAME_LENGTH];
	new _acces, item_callback;
	menu_item_getinfo(menu, item, _acces, data, charsmax(data), name, charsmax(name), item_callback);
	
	new userid = str_to_num(data);
	new player = find_player("k", userid);
	
	if ( player )
	{
		new name2[MAX_NAME_LENGTH];
		get_user_name(player, name2, charsmax(name2));
		if( BitGet(raceIds, player) )
		{
			client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] %s este deja intr-o race.", name2);
			return PLUGIN_HANDLED;
		}
		new name[MAX_NAME_LENGTH];
		get_user_name(id, name, charsmax(name));
		InRace[Races] = true;
		score[Races][idAccepter] = 0;
		score[Races][idAsker] = 0;
		Competitors[Races][idAsker] = id;
		Competitors[Races][idAccepter] = player;
		BitSet(raceIds, id);
		BitSet(raceIds, player);
		Races++;		
		
		client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s l-a provocat pe %s la un race.", name, name2);
		
		new Text[121];
		formatex(Text, charsmax(Text), "%s te-a provocat la un race :", name);
		new Menu = menu_create(Text, "answerMenu");
               
		formatex(Text, charsmax(Text), "Accept provocarea." );
		menu_additem(Menu, Text, "1", 0);
               
		formatex(Text, charsmax(Text), "Nu multumesc." );
		menu_additem(Menu, Text, "2", 0);
 
		menu_setprop(Menu, MPROP_EXIT , MEXIT_ALL);
		menu_display(player, Menu, 0);
		new index[10];
		BitClear(isnotAfk, player);
		num_to_str(player, index, charsmax(index));
		set_task(15.0, "autoRefuse", Menu, index, charsmax(index));
 
		return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public autoRefuse(index[], Menu)
{
	new id = str_to_num(index);
	//client_print(0, print_console, "[RP]index : %s", index);
	if ( !BitGet(isnotAfk, id) )
	{
		menu_destroy(Menu);
	}
}

public answerMenu(id, Menu, item)
{
	new CurrentRace;
	for ( new i = 0; i < MaxRaces; ++i )
	{
		if( id == Competitors[i][idAccepter] )
		{
			CurrentRace = i;
			break;
		}
	}
	
	BitSet(isnotAfk, id);
	new name[MAX_NAME_LENGTH], name2[MAX_NAME_LENGTH];
	get_user_name(Competitors[CurrentRace][idAsker], name, charsmax(name));
	get_user_name(Competitors[CurrentRace][idAccepter], name2, charsmax(name2));
	
	if ( item == MENU_EXIT )
	{
		--Races;
		InRace[CurrentRace] = false;
		StartRace[CurrentRace] = false;
		BitClear(raceIds, Competitors[CurrentRace][idAsker]);
		BitClear(raceIds, Competitors[CurrentRace][idAccepter]);
		client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s nu a raspuns provocarii lui %s.", name2, name);
		
		menu_destroy(Menu);
		return PLUGIN_HANDLED;
	}
	
	new data[6];
	new _acces, item_callback;
	menu_item_getinfo(Menu, item, _acces, data, charsmax(data), _, _, item_callback);

	new Key = str_to_num(data);
	
	switch (Key)
	{
		case 1:
		{
			client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a acceptat provocarea lui %s.", name2, name);
		}
		case 2:
		{
			client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a refuzat provocarea lui %s.", name2, name);
			--Races;
			BitClear(raceIds, Competitors[CurrentRace][idAsker]);
			BitClear(raceIds, Competitors[CurrentRace][idAccepter]);
			StartRace[CurrentRace] = false;
			InRace[CurrentRace] = false;
		}
	}
	
	menu_destroy(Menu);
	return PLUGIN_HANDLED;
}
12. Comenzi Chat + Block HP > 100

download:

Code: Select all

#include <amxmisc> 
#include <cstrike>
#include <hamsandwich>
#include <fun>
#include <engine>
#include <fakemeta>

#define SetBit(%1,%2)   (%1 |= (1 << (%2 & 31))) 
#define DelBit(%1,%2)   (%1 &= ~(1 << (%2 & 31))) 
#define GetBit(%1,%2)   (%1 & (1 << (%2 & 31)))

enum _:ChatCommandData
{
	Command[25],
	Link[180]
}

new Array:ChatCommands;

public plugin_init() 
{
	register_plugin
	(
		.plugin_name = "Comanzi Chat + Block HP > 100",
		.version     = "1.1",
		.author      = "Dr.FioriGinal.Ro"
	);
	
	register_clcmd("say", "hookChat");
	register_message(get_user_msgid("Health"), "checkHealth");
	
	ChatCommands = ArrayCreate(ChatCommandData);
	registerChatCommands();
}

public checkHealth(MessageIndex, MessageDest, Index)
{
	if(!is_user_alive(Index))
	{
        return;
	}
    
	if(get_msg_arg_int(1) > 100)
	{
		set_user_health(Index, 100);
		set_msg_arg_int(1, ARG_BYTE, 100);
	}
}

public hookChat(Index)
{
	new Said[32];
	read_args(Said, charsmax(Said));
	remove_quotes(Said);
	
	if ( !Said[0] )
	{
		return PLUGIN_CONTINUE;
	}
	

	/*static HudTextPro;
	if (!HudTextPro)
	{
		HudTextPro = get_user_msgid("HudTextPro")
	}
	message_begin(MSG_ONE, HudTextPro, _, Index);
	write_string("#Hint_press_buy_to_purchase");
	write_short((1<<1));
	message_end();*/
	
	new const ReloadIdent[] = "!reloadadmins", WhoIdent[] = "!who", MoveTeroIdent[] = "!movetero", SpecIdent[] = "!spec", GodModeIdent[] = "!godmode", NoClipIdent[] = "!noclip", TeroIdent[] = "!tero", ReloadCommandsIdent[] = "!reloadchatcommands";
	
	if (Said[0] == '/')
	{
		client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Comenzile în chat se apelează prin caracterul : '!' nu prin '/'. De exemplu : ^4!^3comanda^1 !");
		return PLUGIN_HANDLED;
	}
	
	if (Said[0] != '!')
	{
		return PLUGIN_CONTINUE;
	}
	
	if (get_user_flags(Index) & ADMIN_IMMUNITY)
	{
		if (equali(Said, MoveTeroIdent, charsmax(MoveTeroIdent)))
		{
			if (cs_get_user_team(Index) == CS_TEAM_T)
			{
				client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Eşti deja la Tero.");
				return PLUGIN_HANDLED;
			}
			cs_set_user_team(Index, CS_TEAM_T);
			user_kill(Index, 1);
			ExecuteHamB(Ham_CS_RoundRespawn, Index);
			client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Te-ai mutat la Tero.");
			return PLUGIN_HANDLED;
		}
		
		if (equali(Said, TeroIdent, charsmax(TeroIdent)))
		{
			if (cs_get_user_team(Index) == CS_TEAM_T)
			{
				client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Eşti deja la Tero.");
				return PLUGIN_HANDLED;
			}
			
			new Players[MAX_PLAYERS], PlayersMatched;
			get_players(Players, PlayersMatched, "ace", "TERRORIST");
			if (PlayersMatched == 1)
			{
				cs_set_user_team(Index, CS_TEAM_T);
				ExecuteHamB(Ham_CS_RoundRespawn, Index);
				new name[MAX_NAME_LENGTH];
				get_user_name(Players[0], name, charsmax(name));
				cs_set_user_team(Players[0], CS_TEAM_CT);
				ExecuteHamB(Ham_CS_RoundRespawn, Players[0]);
				//set_pev(Index, pev_deadflag, )
				client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Ai facut switch teroristul %s.", name);
				return PLUGIN_HANDLED;
			}
			else
			{
				client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Nu poți să faci swtich la Tero deoarece sunt mai mulți terorişti sau nu este nici unul.");
				return PLUGIN_HANDLED;
			}
		}
		
		if (equali(Said, SpecIdent, charsmax(SpecIdent)))
		{
			
			cs_set_user_team(Index, CS_TEAM_SPECTATOR);
			user_kill(Index, any:true);
			client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Te-ai mutat la Spec.");
			
			return PLUGIN_HANDLED;
		}
		
		if (equali(Said, GodModeIdent, charsmax(GodModeIdent)))
		{
			if (get_user_godmode(Index) == any:true)
			{
				set_user_godmode(Index, any:false);
				client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Ai dezactivat opţiunea godmode.");
			}
			else
			{
				set_user_godmode(Index, any:true);
				client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Ai activat opţiunea godmode.");
			}
			return PLUGIN_HANDLED;
		}
		
		if (equali(Said, NoClipIdent, charsmax(NoClipIdent)))
		{
			if (get_user_noclip(Index) == any:true)
			{
				set_user_noclip(Index, any:false);
				client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Ai dezactivat opţiunea noclip.");
			}
			else
			{
				set_user_noclip(Index, any:true);
				client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Ai activat opţiunea noclip.");
			}
			return PLUGIN_HANDLED;
		}
		
		if (equali(Said, ReloadCommandsIdent, charsmax(ReloadCommandsIdent)))
		{
			registerChatCommands();
			return PLUGIN_HANDLED;
		}
	}
	
	if (equali(Said, WhoIdent, charsmax(WhoIdent)))
	{
		client_print_color(Index, print_team_red, "^4[Dr.FioriGinal.Ro]^1 Pe acest server adminii nu trebuie să fie văzuţi de către jucatorii. Totuşi îi poţi vedea activându-ţi slot-ul prin comanda ^3!slot^1.");
		return PLUGIN_HANDLED;
	}
	
	if (equali(Said, ReloadIdent, charsmax(ReloadIdent)))
	{
		client_print_color(Index, print_team_blue, "^4[Dr.FioriGinal.Ro] ^3Ai reîncărcat adminele.");
		server_cmd("amx_reloadadmins");
		return PLUGIN_HANDLED;
	}

	new Size = ArraySize(ChatCommands), Data[ChatCommandData];
	for(new i = 0; i < Size; ++i)
	{
		ArrayGetArray(ChatCommands, i, Data);
		if (equali(Said, Data[Command], strlen(Data[Command])))
		{
			show_motd(Index, Data[Link], "Dr.FioriGinal.Ro");
			return PLUGIN_HANDLED;
		}
	}
	
	return PLUGIN_CONTINUE;
}


registerChatCommands()
{
	new Path[64];
	
	get_localinfo("amxx_configsdir", Path, charsmax(Path));
	add(Path, charsmax(Path), "/chatcommands.ini")
	
	if (!file_exists(Path))
	{
		new FilePointer = fopen(Path, "wt");
		
		if ( !FilePointer ) 
		{
			return;
		}
		
		fputs(FilePointer, "; Aici vor fi inregistrate comenzile din chat care deschid motd-uri.^n");
		fputs(FilePointer, "; Exemplu de adaugare comanda chat : ^"!comanda^" ^"link motd^"^n^n^n");
		fclose(FilePointer);
	}
	else
	{
		new Text[121], ChatCommand[25], Site[180];
		new FilePointer = fopen(Path, "rt");
		
		if ( !FilePointer ) 
		{
			return;
		}
		
		ArrayClear(ChatCommands);
		
		new Data[ChatCommandData];
		while (!feof(FilePointer))
		{
			fgets(FilePointer, Text, charsmax(Text));

			trim(Text);
		
			if ( (Text[0] == ';') || !strlen(Text) || ((Text[0] == '/') && (Text[1] == '/')) )
			{
				continue;
			}
		
			if (parse(Text, ChatCommand, charsmax(ChatCommand), Site, charsmax(Site)) != 2)
			{
				continue;
			}
			
			copy(Data[Command], charsmax(Data[Command]), ChatCommand);
			copy(Data[Link], charsmax(Data[Link]), Site);
			ArrayPushArray(ChatCommands, Data);
		}
		
		fclose(FilePointer);
	}
}
13. DeathRun fix round

download:

Code: Select all

#include <amxmisc>
#include <cstrike>
#include <hamsandwich>

public plugin_init() 
{
	register_plugin
	(
		.plugin_name = "DeathRun fix round",
		.version     = "1.0",
		.author      = "Dr.FioriGinal.Ro"
	);
}

public client_disconnected(Index)
{
	new Players[MAX_PLAYERS], MatchedPlayers;
	get_players(Players, MatchedPlayers, "ce", "TERRORIST");
	if (MatchedPlayers == 1) // in unele situatii detecteaza ca este pe server, in altele nu-l detecteaza, conteaza cum se deconecteaza.
	{
		if (Players[0] == Index)
		{
			MatchedPlayers = 0;
		}
	}
	if (MatchedPlayers == 0)
	{
		setNewTerrorist(Index);
		
		static Refuses, Responsed, InNewTeroCourse, Rejected;
		if (Refuses == 0)
		{
			Refuses = get_xvar_id("Refuses");
		}
		if (Responsed == 0)
		{
			Responsed = get_xvar_id("Responsed");
		}
		if (InNewTeroCourse == 0)
		{
			InNewTeroCourse = get_xvar_id("InNewTeroCourse");
		}
		if (Rejected == 0)
		{
			Rejected = get_xvar_id("Rejected");
		}
		
		if (Refuses != -1 && Responsed != -1 && InNewTeroCourse != -1 && Rejected != -1)
		{
			set_xvar_num(Refuses, 0);
			set_xvar_num(Responsed, 0);
			set_xvar_num(InNewTeroCourse, -1);
			set_xvar_num(Rejected, 0);
		}
	}
}

setNewTerrorist(OldTerrorIndex)
{
	if (get_playersnum() <= 1)
	{
		return;
	}
	
	new Players[MAX_PLAYERS], MatchedPlayers;
	get_players(Players, MatchedPlayers, "bce", "CT");
	if (MatchedPlayers == 0)
	{
		get_players(Players, MatchedPlayers, "ce", "CT");
		if (MatchedPlayers == 0)
		{
			return;
		}
	}
	new NewTerorIndex = Players[random(MatchedPlayers)];
	cs_set_user_team(NewTerorIndex, CS_TEAM_T);
	ExecuteHamB(Ham_CS_RoundRespawn, NewTerorIndex);
	new OldTerrorName[MAX_NAME_LENGTH], NewTerrorName[MAX_NAME_LENGTH];
	get_user_name(OldTerrorIndex, OldTerrorName, charsmax(OldTerrorName));
	get_user_name(NewTerorIndex, NewTerrorName, charsmax(NewTerrorName));
	client_print_color(0, print_team_red, "^4[Dr.FioriGinal.Ro]^1 ^3%s^1 este noul terorist deoarece ^3%s^1 s-a deconectat.", NewTerrorName, OldTerrorName);
}
14. Activitate Admini

download:

Code: Select all

#include <amxmodx>

#pragma semicolon 1


#define PLUGIN "Activitate Admini"
#define VERSION "2.0c"

enum
{
	
	INFO_NAME,
	INFO_IP,
	INFO_AUTHID
	
};

new const g_szFileName[ ] = "activitate_admini";

new g_CvarLogConnect;
new g_CvarLogDisconnect;
new g_CvarLogMap;
new g_CvarLogTimeLeft;
new g_CvarLogCommand;


new g_szFile[ 128 ];
new g_szMapName[ 32 ];

public plugin_precache( )
{
	get_localinfo( "amxx_configsdir", g_szFile, sizeof ( g_szFile ) -1 );
	format( g_szFile, sizeof ( g_szFile ) -1, "%s/%s", g_szFile, g_szFileName );
	
	if( !dir_exists( g_szFile ) )
		mkdir( g_szFile );
		
	new szCurentDate[ 15 ];
	get_time("%d-%m-%Y", szCurentDate , sizeof ( szCurentDate ) -1 );
	
	format( g_szFile, sizeof ( g_szFile ) -1, "%s/%s_%s.txt", g_szFile, g_szFileName, szCurentDate );
	
	if( !file_exists( g_szFile ) )
	{
		write_file( g_szFile, "-| Aici este salvata activitatea fiecarui admin. |-", -1 );
		write_file( g_szFile, " ", -1 );
		write_file( g_szFile, " ", -1 );
	}

	get_mapname( g_szMapName, sizeof ( g_szMapName ) -1 );
	format( g_szMapName, sizeof ( g_szMapName ) -1, "- Harta: %s|", g_szMapName );
	
}

public plugin_init( )
{
	register_plugin( PLUGIN, VERSION, "Askhanar" );
	
	g_CvarLogConnect = register_cvar( "aa_log_connect", "1" );
	g_CvarLogDisconnect = register_cvar( "aa_log_disconnect", "1" );
	g_CvarLogMap = register_cvar( "aa_log_map", "1" );
	g_CvarLogTimeLeft = register_cvar( "aa_log_timeleft", "1" );
	g_CvarLogCommand = register_cvar( "aa_log_commands", "3" );
	
}


public client_putinserver( id )
{
	if( !is_user_admin( id )
		|| !get_pcvar_num( g_CvarLogConnect ) )
		return 0;
		
	write_file( g_szFile, "-------------------------------------------------------------------------------------------------------------------------------", -1 );
	LogCommand( " %s [ %s | %s ] s-a conectat pe server.", 
			GetInfo( id, INFO_NAME ), GetInfo( id, INFO_AUTHID ), GetInfo( id, INFO_IP ) );
	write_file( g_szFile, "-------------------------------------------------------------------------------------------------------------------------------", -1 );
	return 0;
	
}

public client_disconnected( id )
{
	if( !is_user_admin( id ) 
		|| !get_pcvar_num( g_CvarLogDisconnect ) )
		return 0;
		
	write_file( g_szFile, "-------------------------------------------------------------------------------------------------------------------------------", -1 );
	LogCommand( " %s [ %s | %s ] s-a deconectat de pe server.",
			GetInfo( id, INFO_NAME ), GetInfo( id, INFO_AUTHID ), GetInfo( id, INFO_IP ) );
	write_file( g_szFile, "-------------------------------------------------------------------------------------------------------------------------------", -1 );
	
	return 0;
	
}

public client_command( id )
{
	static iLogCommand;
	iLogCommand = get_pcvar_num( g_CvarLogCommand );
	if( !is_user_admin( id ) || !iLogCommand )
		return 0;
		
	static szCommand[ 36 ];
	read_argv( 0, szCommand, sizeof ( szCommand ) -1 );
	
	if( get_command_value( szCommand ) == iLogCommand
		|| get_command_value( szCommand ) > 0 && iLogCommand == 3 )
	{
		static szArgs[ 101 ];
		read_args( szArgs, sizeof ( szArgs ) -1 );
		
		remove_quotes( szArgs );
		
		LogCommand( " %s [ %s | %s ] '%s %s' ", 
			GetInfo( id, INFO_NAME ), GetInfo( id, INFO_AUTHID ), GetInfo( id, INFO_IP ), szCommand, szArgs );
	}
	
	return 0;
}

LogCommand( const szMsg[ ], any:... )
{
	static szMessage[ 256 ], szLogMessage[ 256 ];
	vformat( szMessage, sizeof ( szMessage ) -1, szMsg , 2 );
	
	static iLogMap, iLogTimeLeft;
	iLogMap = get_pcvar_num( g_CvarLogMap );
	iLogTimeLeft = get_pcvar_num( g_CvarLogTimeLeft );
		
	formatex( szLogMessage, sizeof ( szLogMessage ) -1, "|%s|%s%s%s",
		_get_time( ), iLogMap ? g_szMapName : "", iLogTimeLeft ? _get_timeleft( ) : "", szMessage );
	
	write_file( g_szFile, szLogMessage, -1 );
}

stock get_command_value( const szCommand[ ] )
{
	static iCommandValue;
	
	if( equali( szCommand, "amx_", 4 ) )
		iCommandValue = 1;
	else if( equali( szCommand, "admin_" , 6 ) )
		iCommandValue = 2;
	else
		iCommandValue = -1;
		
	return iCommandValue;
	
}

stock bool:is_user_admin( id )
{
	if( get_user_flags( id ) & ADMIN_CHAT )
		return true;
		
	return false;
}
//--

stock _get_time( )
{
	new szTime[ 32 ];
	get_time( " %H:%M:%S ", szTime ,sizeof ( szTime ) -1 );
	
	return szTime;
}

stock _get_timeleft( )
{
	static szTimeLeft[ 25 ];
	format( szTimeLeft, sizeof ( szTimeLeft ) -1, "- TimeLeft: %d:%02d|", get_timeleft( ) / 60, ( get_timeleft( ) % 60 ) );
	
	return szTimeLeft;
	
}

stock GetInfo( id, const iInfo )
{
	
	new szInfoToReturn[ 64 ];
	
	switch( iInfo )
	{
		case INFO_NAME:
		{
			static szName[ 32 ];
			get_user_name( id, szName, sizeof ( szName ) -1 );
			
			copy( szInfoToReturn, sizeof ( szInfoToReturn ) -1, szName );
		}
		case INFO_IP:
		{
			static szIp[ 32 ];
			get_user_ip( id, szIp, sizeof ( szIp ) -1, 1 );
			
			copy( szInfoToReturn, sizeof ( szInfoToReturn ) -1, szIp );
		}
		case INFO_AUTHID:
		{
			static szAuthId[ 35 ];
			get_user_authid( id, szAuthId, sizeof ( szAuthId ) -1 );
			
			copy( szInfoToReturn, sizeof ( szInfoToReturn ) -1, szAuthId );
		}
	}

	return szInfoToReturn;
}
15. Deathrun: Buttons Control

download:

Code: Select all

// Credits: R3X
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Deathrun: Buttons Control"
#define VERSION "1.0.1"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define MAX_BUTTONS 128
#define BUTTON_MIN_DELAY 5.0
#define BUTTON_MAX_USE 1

#define PDATA_SAFE 2

#define get_button_index(%0) (pev(%0, pev_iuser4) - 1)
#define set_button_index(%0,%1) set_pev(%0, pev_iuser4, %1)
#define fm_get_user_team(%0) get_pdata_int(%0, 114)

const m_flWait = 44;
const XO_CBASETOGGLE1 = 4;

new const g_szButtons[][] = {"func_button", "func_rot_button"};

new g_iButtonsEnt[MAX_BUTTONS];
new g_iButtonsCount;

#if BUTTON_MAX_USE > 0
new g_iButtonsUsed[MAX_BUTTONS];
#endif

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
    register_dictionary("deathrun_core.txt");
    LoadButtons();
}
LoadButtons()
{
    for(new i; i < sizeof(g_szButtons); i++) {
        #if BUTTON_MAX_USE > 0
        new last_count = g_iButtonsCount;
        #endif
        
        new ent = FM_NULLENT;
        
        while(g_iButtonsCount < MAX_BUTTONS && (ent = find_ent_by_class(ent, g_szButtons[i]))) {
            g_iButtonsEnt[g_iButtonsCount++] = ent;
            set_button_index(ent, g_iButtonsCount);
            
            new Float:fButtonDelay = get_pdata_float(ent, m_flWait, XO_CBASETOGGLE1);
            if(fButtonDelay < BUTTON_MIN_DELAY) {
                set_pdata_float(ent, m_flWait, BUTTON_MIN_DELAY, XO_CBASETOGGLE1);
            }
        }
        #if BUTTON_MAX_USE > 0
        if(last_count < g_iButtonsCount) {
            RegisterHam(Ham_Use, g_szButtons[i], "Ham_ButtonUse_Pre", false);
        }
        #endif
    }
    if(!g_iButtonsCount) {
        log_amx("Map doesn't have any buttons.");
        pause("a");
    }
}
public Event_NewRound()
{
    RestoreButtons();
}
RestoreButtons()
{
    arrayset(g_iButtonsUsed, 0, g_iButtonsCount);
    for(new i, ent; i < g_iButtonsCount; i++) {
        ent = g_iButtonsEnt[i];
        if(pev(ent, pev_frame) > 0.0) {
            new Float:nextthink; pev(ent, pev_nextthink, nextthink);
            set_pev(ent, pev_ltime, nextthink - 0.1);
        }
    }
}
#if BUTTON_MAX_USE > 0
public Ham_ButtonUse_Pre(ent, caller, activator, use_type)
{
    if(caller != activator || pev_valid(caller) != PDATA_SAFE) return HAM_IGNORED;
    
    if(pev(ent, pev_frame) > 0.0) return HAM_IGNORED;
    
    if(fm_get_user_team(caller) != 1) return HAM_IGNORED;
    
    new index = get_button_index(ent);
    
    if(index == -1) return HAM_IGNORED;
    
    if(g_iButtonsUsed[index] >= BUTTON_MAX_USE) {
        client_print(caller, print_center, "%L", LANG_PLAYER, "DRBC_CANT_USE");
        return HAM_SUPERCEDE;
    }
    
    g_iButtonsUsed[index]++;
    
    return HAM_IGNORED;
}
#endif
16. Deathrun Mode: Buttons

download:

Code: Select all

#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <deathrun_modes>

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#pragma semicolon 1

#define PLUGIN "Deathrun Mode: Buttons"
#define VERSION "1.0.1"
#define AUTHOR "Mistrick"

#define IsPlayer(%1) (%1 && %1 <= g_iMaxPlayers)

enum { NONE_MODE = 0 };

new const PREFIX[] = "^4[DRM]";

new g_iModeButtons, g_iCurMode, g_iMaxPlayers;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    RegisterHam(Ham_Use, "func_button", "Ham_UseButtons_Pre", 0);
    
    g_iMaxPlayers = get_maxplayers();
    
    g_iModeButtons = dr_register_mode
    (
        .name = "DRM_MODE_BUTTONS",
        .mark = "buttons",
        .round_delay = 0,
        .flags = DRM_ALLOW_BHOP | DRM_GIVE_USP
    );
}
public dr_selected_mode(id, mode)
{
    g_iCurMode = mode;
}
public Ham_UseButtons_Pre(ent, caller, activator, use_type)
{
    if(g_iCurMode != NONE_MODE || !IsPlayer(activator)) return HAM_IGNORED;
    
    new CsTeams:team = cs_get_user_team(activator);
    
    if(team != CS_TEAM_T) return HAM_IGNORED;

    dr_set_mode(g_iModeButtons, 1, activator);
    show_menu(activator, 0, "^n");
    client_print_color(0, print_team_red, "%s %L", PREFIX, LANG_PLAYER, "DRM_USED_BUTTON", LANG_PLAYER, "DRM_MODE_BUTTONS");
    
    return HAM_IGNORED;
}
17. Deathrun Mode: Duel

download:

Code: Select all

#include <amxmodx>
#include <cstrike>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <deathrun_modes>
#include <xs>

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define client_disconnected client_disconnect
#endif

#define PLUGIN "Deathrun Mode: Duel"
#define VERSION "1.0.4"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define SHOW_MENU_FOR_LAST_CT

#define PRESTART_TIME 10
#define FIRE_TIME 5
#define DUEL_TIME 60
#define MAX_DISTANCE 1500
#define MIN_DISTANCE 300

enum CancelType {
    CType_TimeOver,
    CType_PlayerDisconneced,
    CType_PlayerDied,
    CType_ModeChanged
};

enum (+=100) {
    TASK_TURNCHANGER = 100,
    TASK_PRESTART_TIMER,
    TASK_DUELTIMER
};

new const PREFIX[] = "^4[Duel]";
new const SPAWNS_DIR[] = "deathrun_duel";

const XO_CBASEPLAYERWEAPON = 4;
const m_pPlayer = 41;

enum _:DUEL_FORWARDS {
    DUEL_PRESTART,
    DUEL_START,
    DUEL_FINISH,
    DUEL_CANCELED
};
enum {
    DUELIST_CT = 0,
    DUELIST_T
};

new g_iModeDuel;
new g_bDuelStarted;
new g_iDuelType;
new g_iDuelPlayers[2];
new g_iDuelWeapon[2];
new g_iDuelTurnTimer;
new g_iDuelTimer;
new g_iCurTurn;
new g_iDuelMenu;

new Float:g_fDuelSpawnOrigins[2][3];
new Float:g_fDuelSpawnAngles[2][3];
new g_bShowSpawns;
new g_bLoadedSpawns;
new g_szSpawnsFile[128];
new g_bSetSpawn[2];
new g_iMinDistance;

new g_iColors[2][3] = {
    { 0, 0, 250 },
    { 250, 0, 0 }
};

new g_iForwards[DUEL_FORWARDS];
new g_iReturn;
new g_bSavedConveyorInfo;

enum {
    DUELTYPE_KNIFE = 0,
    DUELTYPE_DEAGLE,
    DUELTYPE_AWP,
    DUELTYPE_AK47
};
new g_eDuelMenuItems[][] = {
    "Knife",
    "Deagle",
    "AWP",
    "AK47"
};

enum {
    TURNDUEL_DEAGLE = 0,
    TURNDUEL_AWP,
    TURNDUEL_AK47
};
new g_eDuelWeaponWithTurn[][] = {
    "weapon_deagle", "weapon_awp", "weapon_ak47"
};

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_clcmd("say /dd", "Command_Duel");
    register_clcmd("say /duel", "Command_Duel");
    register_clcmd("duel_spawns", "Command_DuelSpawn", ADMIN_CFG);
    register_clcmd("drop", "Command_Drop");
    
    for(new i; i < sizeof(g_eDuelWeaponWithTurn); i++) {
        RegisterHam(Ham_Weapon_PrimaryAttack, g_eDuelWeaponWithTurn[i], "Ham_WeaponPrimaryAttack_Post", true);
    }
    
    RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_awp", "Ham_SecondaryAttack_Pre", false);
    RegisterHam(Ham_TakeDamage, "player", "Ham_PlayerTakeDamage_Pre", false);
    RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post", true);
    register_touch("trigger_teleport", "player", "Engine_DuelTouch");
    register_touch("trigger_push", "player", "Engine_DuelTouch");
    
    g_iForwards[DUEL_PRESTART] = CreateMultiForward("dr_duel_prestart", ET_IGNORE, FP_CELL, FP_CELL);
    g_iForwards[DUEL_START] = CreateMultiForward("dr_duel_start", ET_IGNORE, FP_CELL, FP_CELL);
    g_iForwards[DUEL_FINISH] = CreateMultiForward("dr_duel_finish", ET_IGNORE, FP_CELL, FP_CELL);
    g_iForwards[DUEL_CANCELED] = CreateMultiForward("dr_duel_canceled", ET_IGNORE, FP_CELL);
    
    g_iModeDuel = dr_register_mode
    (
        .name = "DRM_MODE_DUEL",
        .mark = "duel",
        .round_delay = 0,
        .flags = DRM_BLOCK_CT_WEAPON | DRM_BLOCK_T_WEAPON | DRM_BLOCK_CT_BUTTONS | DRM_BLOCK_T_BUTTONS | DRM_HIDE
    );
    
    Create_DuelMenu();
    #if defined SHOW_MENU_FOR_LAST_CT
    register_menucmd(register_menuid("DuelOfferMenu"), 1023, "DuelOffer_Handler");
    #endif
}
Create_DuelMenu()
{
    g_iDuelMenu = menu_create("Choose duel type:", "DuelType_Handler");
    for(new i; i < sizeof(g_eDuelMenuItems); i++) {
        menu_additem(g_iDuelMenu, g_eDuelMenuItems[i]);
    }
}
public plugin_cfg()
{
    register_dictionary("deathrun_mode_duel.txt");
    LoadSpawns();
}
public plugin_natives()
{
    register_library("deathrun_duel");
}
LoadSpawns()
{
    new szConfigDir[128]; get_localinfo("amxx_configsdir", szConfigDir, charsmax(szConfigDir));
    new szDir[128]; formatex(szDir, charsmax(szDir), "%s/%s", szConfigDir, SPAWNS_DIR);
    
    new szMap[32]; get_mapname(szMap, charsmax(szMap));
    formatex(g_szSpawnsFile, charsmax(g_szSpawnsFile), "%s/%s.ini", szDir, szMap);
    
    if(dir_exists(szDir)) {
        if(file_exists(g_szSpawnsFile)) {
            new f = fopen(g_szSpawnsFile, "rt");
            
            if(f) {
                new text[128], szTeam[3], szOrigins[3][16];
                while(!feof(f)) {
                    fgets(f, text, charsmax(text));
                    parse(text, szTeam, charsmax(szTeam), szOrigins[0], charsmax(szOrigins[]), szOrigins[1], charsmax(szOrigins[]), szOrigins[2], charsmax(szOrigins[]));
                    new team = (szTeam[0] == 'C' ? 0 : 1);
                    g_fDuelSpawnOrigins[team][0] = str_to_float(szOrigins[0]);
                    g_fDuelSpawnOrigins[team][1] = str_to_float(szOrigins[1]);
                    g_fDuelSpawnOrigins[team][2] = str_to_float(szOrigins[2]);
                    g_bSetSpawn[team] = true;
                }
                fclose(f);
                if(g_bSetSpawn[DUELIST_CT] && g_bSetSpawn[DUELIST_T]) {
                    g_bLoadedSpawns = true;
                    GetSpawnAngles();
                }
            }
        } else {
            FindSpawns();
        }
    } else {
        mkdir(szDir);
        FindSpawns();
    }
    
    if(g_bLoadedSpawns) {
        GetMinDistance();
    }
}
GetMinDistance()
{
    new Float:fDistance = get_distance_f(g_fDuelSpawnOrigins[DUELIST_CT], g_fDuelSpawnOrigins[DUELIST_T]);
    g_iMinDistance = fDistance < MIN_DISTANCE ? floatround(fDistance - 64.0) : MIN_DISTANCE;
}
FindSpawns()
{
    new first_ent = find_ent_by_class(-1, "info_player_start");
    pev(first_ent, pev_origin, g_fDuelSpawnOrigins[DUELIST_CT]);
    
    new ent = first_ent, bFind;
    new Float:distance = 1000.0;
    
    while(distance > 100.0 && !bFind) {
        while((ent = find_ent_by_class(ent, "info_player_start"))) {
            if(get_entity_distance(ent, first_ent) > distance) {
                bFind = true;
                pev(ent, pev_origin, g_fDuelSpawnOrigins[DUELIST_T]);
                break;
            }
        }
        distance -= 100.0;
        ent = first_ent;
    }
    if(bFind) {
        g_bLoadedSpawns = true;
        GetSpawnAngles();
    }
}
GetSpawnAngles()
{
    new Float:fVector[3]; xs_vec_sub(g_fDuelSpawnOrigins[DUELIST_T], g_fDuelSpawnOrigins[DUELIST_CT], fVector);
    xs_vec_normalize(fVector, fVector);
    vector_to_angle(fVector, g_fDuelSpawnAngles[DUELIST_CT]);
    xs_vec_mul_scalar(fVector, -1.0, fVector);
    vector_to_angle(fVector, g_fDuelSpawnAngles[DUELIST_T]);
}
public client_disconnected(id)
{
    if((g_bDuelStarted) && (id == g_iDuelPlayers[DUELIST_CT] || id == g_iDuelPlayers[DUELIST_T])) {
        ResetDuel();
        ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn, CType_PlayerDisconneced);
    }
}
public Command_Drop(id)
{
    return g_bDuelStarted ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
}
public Command_DuelSpawn(id, flag)
{
    if(~get_user_flags(id) & flag) return PLUGIN_HANDLED;
    
    Show_DuelSpawnControlMenu(id);
    
    return PLUGIN_HANDLED;
}
public Show_DuelSpawnControlMenu(id)
{
    new text[64], menu = menu_create("Duel Spawn Control", "DuelSpawnControl_Handler");
    menu_additem(menu, "Set \rCT\w spawn");
    menu_additem(menu, "Set \rT\w spawn");
    formatex(text, charsmax(text), "%s spawns", g_bShowSpawns ? "Hide" : "Show");
    menu_additem(menu, text);
    menu_additem(menu, "Save spawns^n");
    formatex(text, charsmax(text), "Noclip \r[%s]", get_user_noclip(id) ? "ON" : "OFF");
    menu_additem(menu, text);
    menu_display(id, menu);
}
public DuelSpawnControl_Handler(id, menu, item)
{
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    
    switch(item) {
        case 0, 1: {
            g_bSetSpawn[item] = true;
            pev(id, pev_origin, g_fDuelSpawnOrigins[item]);
            if(g_bShowSpawns) {
                UpdateSpawnEnt();
            }
        }
        case 2: {
            if(!g_bShowSpawns) {
                g_bShowSpawns = true;
                CreateSpawnEnt(DUELIST_CT);
                CreateSpawnEnt(DUELIST_T);
            } else {
                g_bShowSpawns = false;
                RemoveSpawnEnt();
            }
        }
        case 3: {
            SaveSpawns(id);
        }
        case 4: {
            set_user_noclip(id, !get_user_noclip(id));
        }
    }
    
    Show_DuelSpawnControlMenu(id);
    
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}
CreateSpawnEnt(type)
{
    new models[][] = {"models/player/urban/urban.mdl", "models/player/arctic/arctic.mdl"};
    new ent = create_entity("info_target");
    DispatchSpawn(ent);
    
    entity_set_model(ent, models[type]);
    entity_set_string(ent, EV_SZ_classname, "duel_spawn_ent");
    entity_set_int(ent, EV_INT_movetype, MOVETYPE_NOCLIP);
    entity_set_int(ent, EV_INT_solid, SOLID_NOT);
    entity_set_int(ent, EV_INT_iuser1, type);
    entity_set_int(ent, EV_INT_sequence, 1);
    
    entity_set_vector(ent, EV_VEC_origin, g_fDuelSpawnOrigins[type]);
    entity_set_vector(ent, EV_VEC_angles, g_fDuelSpawnAngles[type]);
}
RemoveSpawnEnt()
{
    new ent = -1;
    while((ent = find_ent_by_class(ent, "duel_spawn_ent"))) {
        remove_entity(ent);
    }
}
UpdateSpawnEnt()
{
    GetSpawnAngles();
    new ent = -1;
    while((ent = find_ent_by_class(ent, "duel_spawn_ent"))) {
        new type = entity_get_int(ent, EV_INT_iuser1);
        entity_set_vector(ent, EV_VEC_origin, g_fDuelSpawnOrigins[type]);
        entity_set_vector(ent, EV_VEC_angles, g_fDuelSpawnAngles[type]);
    }
}
SaveSpawns(id)
{
    if(!g_bSetSpawn[DUELIST_CT] || !g_bSetSpawn[DUELIST_T]) {
        client_print_color(id, print_team_default, "%s^1 %L", PREFIX, id, "DRD_SET_SPAWNS");
        return;
    }
    if(file_exists(g_szSpawnsFile)) {
        delete_file(g_szSpawnsFile);
    }
    new file = fopen(g_szSpawnsFile, "wt");
    if(file) {
        fprintf(file, "CT %f %f %f^n", g_fDuelSpawnOrigins[DUELIST_CT][0], g_fDuelSpawnOrigins[DUELIST_CT][1], g_fDuelSpawnOrigins[DUELIST_CT][2]);
        fprintf(file, "T %f %f %f^n", g_fDuelSpawnOrigins[DUELIST_T][0], g_fDuelSpawnOrigins[DUELIST_T][1], g_fDuelSpawnOrigins[DUELIST_T][2]);
        fclose(file);
        g_bLoadedSpawns = true;
        GetSpawnAngles();
        GetMinDistance();
        client_print_color(id, print_team_default, "%s^1 %L", PREFIX, id, "DRD_SPAWNS_SAVED");
    }
}
public Command_Duel(id)
{
    if(g_bDuelStarted || !is_user_alive(id) || cs_get_user_team(id) != CS_TEAM_CT) return PLUGIN_HANDLED;
        
    new players[32], pnum; get_players(players, pnum, "ae", "CT");
    if(pnum > 1) return PLUGIN_HANDLED;
    
    g_iDuelPlayers[DUELIST_CT] = id;
    
    get_players(players, pnum, "ae", "TERRORIST");
    if(pnum < 1) return PLUGIN_HANDLED;
    
    menu_display(id, g_iDuelMenu);
    
    return PLUGIN_HANDLED;
}
public DuelType_Handler(id, menu, item)
{
    if(item == MENU_EXIT) {
        return PLUGIN_HANDLED;
    }
    
    new players[32], pnum; get_players(players, pnum, "ae", "CT");
    if(pnum > 1) return PLUGIN_HANDLED;
    
    get_players(players, pnum, "ae", "TERRORIST");
    if(pnum < 1) return PLUGIN_HANDLED;
    
    g_iDuelPlayers[DUELIST_T] = players[0];
    
    if(!is_user_alive(id) || !is_user_alive(g_iDuelPlayers[DUELIST_T]) ||cs_get_user_team(id) != CS_TEAM_CT) return PLUGIN_HANDLED;
    
    dr_set_mode(g_iModeDuel, 1);
    
    g_iDuelType = item;
    
    DuelPreStart();
    
    return PLUGIN_HANDLED;
}
DuelPreStart()
{
    g_bDuelStarted = true;
    
    PrepareForDuel(DUELIST_CT);
    PrepareForDuel(DUELIST_T);
    
    if(g_bLoadedSpawns) {
        MovePlayerToSpawn(DUELIST_CT);
        MovePlayerToSpawn(DUELIST_T);
    }
    
    StopFuncConveyor();
    
    g_iDuelTimer = PRESTART_TIME + 1;
    Task_PreStartTimer();
    
    ExecuteForward(g_iForwards[DUEL_PRESTART], g_iReturn, g_iDuelPlayers[DUELIST_CT], g_iDuelPlayers[DUELIST_T]);
    
    client_print_color(0, print_team_default, "%s^1 %L", PREFIX, LANG_PLAYER, "DRD_DUEL_START_TIME", PRESTART_TIME);
}
public Task_PreStartTimer()
{
    if(!g_bDuelStarted) return;
    
    if(--g_iDuelTimer <= 0) {
        DuelStartForward(g_iDuelType);
    } else {
        client_print(0, print_center, "%L", LANG_PLAYER, "DRD_DUEL_START_TIME", g_iDuelTimer);
        set_task(1.0, "Task_PreStartTimer", TASK_PRESTART_TIMER);
    }
}

DuelStartForward(type)
{
    switch(type) {
        case DUELTYPE_KNIFE: {
            give_item(g_iDuelPlayers[DUELIST_CT], "weapon_knife");
            give_item(g_iDuelPlayers[DUELIST_T], "weapon_knife");
        }
        case DUELTYPE_DEAGLE, DUELTYPE_AWP, DUELTYPE_AK47: {
            StartTurnDuel(type - 1);
        }
    }
    
    StartDuelTimer();
    
    ExecuteForward(g_iForwards[DUEL_START], g_iReturn, g_iDuelPlayers[DUELIST_CT], g_iDuelPlayers[DUELIST_T]);
}
StartDuelTimer()
{
    g_iDuelTimer = DUEL_TIME + 1;
    Task_DuelTimer();
}
public Task_DuelTimer()
{
    if(!g_bDuelStarted) return;
    
    if(--g_iDuelTimer <= 0) {
        ExecuteHam(Ham_Killed, g_iDuelPlayers[DUELIST_CT], g_iDuelPlayers[DUELIST_CT], 0);
        ExecuteHam(Ham_Killed, g_iDuelPlayers[DUELIST_T], g_iDuelPlayers[DUELIST_T], 0);
        
        ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn, CType_TimeOver);
        ResetDuel();
        
        client_print_color(0, print_team_default, "%s^1 %L", PREFIX, LANG_PLAYER, "DRD_TIME_OVER");
    } else {
        set_task(1.0, "Task_DuelTimer", TASK_DUELTIMER);
    }
}
PrepareForDuel(player)
{
    strip_user_weapons(g_iDuelPlayers[player]);
    set_user_health(g_iDuelPlayers[player], 100);
    set_user_gravity(g_iDuelPlayers[player], 1.0);
    set_user_rendering(g_iDuelPlayers[player], kRenderFxGlowShell, g_iColors[player][0], g_iColors[player][1], g_iColors[player][2], kRenderNormal, 20);
}
MovePlayerToSpawn(player)
{
    set_pev(g_iDuelPlayers[player], pev_origin, g_fDuelSpawnOrigins[player]);
    set_pev(g_iDuelPlayers[player], pev_v_angle, g_fDuelSpawnAngles[player]);
    set_pev(g_iDuelPlayers[player], pev_angles, g_fDuelSpawnAngles[player]);
    set_pev(g_iDuelPlayers[player], pev_fixangle, 1);
    set_pev(g_iDuelPlayers[player], pev_velocity, {0.0, 0.0, 0.0});
}
StartTurnDuel(type)
{
    g_iDuelWeapon[DUELIST_CT] = give_item(g_iDuelPlayers[DUELIST_CT], g_eDuelWeaponWithTurn[type]);
    g_iDuelWeapon[DUELIST_T] = give_item(g_iDuelPlayers[DUELIST_T], g_eDuelWeaponWithTurn[type]);
    if(pev_valid(g_iDuelWeapon[DUELIST_CT])) cs_set_weapon_ammo(g_iDuelWeapon[DUELIST_CT], 1);
    if(pev_valid(g_iDuelWeapon[DUELIST_T])) cs_set_weapon_ammo(g_iDuelWeapon[DUELIST_T], 0);
    
    g_iDuelTurnTimer = FIRE_TIME;
    g_iCurTurn = DUELIST_CT;
    Task_ChangeTurn();
}
public Task_ChangeTurn()
{
    if(!g_bDuelStarted) return;
    
    if(g_iDuelTurnTimer > 0) {
        client_print(g_iDuelPlayers[g_iCurTurn], print_center, "%L", g_iDuelPlayers[g_iCurTurn], "DRD_SHOOT_TIME", g_iDuelTurnTimer);
    } else {
        if(pev_valid(g_iDuelWeapon[g_iCurTurn])) {
            ExecuteHamB(Ham_Weapon_PrimaryAttack, g_iDuelWeapon[g_iCurTurn]);
        }
    }
    
    if(g_bLoadedSpawns) {
        CheckPlayersDistance();
    }
    
    g_iDuelTurnTimer--;
    set_task(1.0, "Task_ChangeTurn", TASK_TURNCHANGER);
}
CheckPlayersDistance()
{
    if(!is_user_alive(g_iDuelPlayers[DUELIST_CT]) || !is_user_alive(g_iDuelPlayers[DUELIST_T])) {
        return;
    }
    new distance = get_entity_distance(g_iDuelPlayers[DUELIST_CT], g_iDuelPlayers[DUELIST_T]);
    if(distance < g_iMinDistance || distance > MAX_DISTANCE) {
        MovePlayerToSpawn(DUELIST_CT);
        MovePlayerToSpawn(DUELIST_T);
    }
}
public Ham_WeaponPrimaryAttack_Post(weapon)
{
    if(!g_bDuelStarted || (weapon != g_iDuelWeapon[DUELIST_CT] && weapon != g_iDuelWeapon[DUELIST_T])) return HAM_IGNORED;
    
    new player = get_pdata_cbase(weapon, m_pPlayer, XO_CBASEPLAYERWEAPON);
    
    if(player == g_iDuelPlayers[g_iCurTurn]) {
        g_iDuelTurnTimer = FIRE_TIME;
        g_iCurTurn ^= 1;
        cs_set_weapon_ammo(g_iDuelWeapon[g_iCurTurn], 1);
        remove_task(TASK_TURNCHANGER);
        Task_ChangeTurn();
    }
    
    return HAM_IGNORED;
}
public Ham_SecondaryAttack_Pre(weapon)
{
    return g_bDuelStarted ? HAM_SUPERCEDE : HAM_IGNORED;
}
public Ham_PlayerTakeDamage_Pre(victim, idinflictor, attacker, Float:damage, damagebits)
{
    if(!g_bDuelStarted || victim == attacker || (victim != g_iDuelPlayers[DUELIST_CT] && victim != g_iDuelPlayers[DUELIST_T])) {
        return HAM_IGNORED;
    }
    
    if(attacker != g_iDuelPlayers[DUELIST_CT] && attacker != g_iDuelPlayers[DUELIST_T]) {
        return HAM_SUPERCEDE;
    }
    
    return HAM_IGNORED;
}
public Engine_DuelTouch(ent, toucher)
{
    return g_bDuelStarted ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
}
public Ham_PlayerKilled_Post(victim, killer)
{
    if(g_bDuelStarted && (victim == g_iDuelPlayers[DUELIST_CT] || victim == g_iDuelPlayers[DUELIST_T])) {
        if(killer != victim && (killer == g_iDuelPlayers[DUELIST_CT] || killer == g_iDuelPlayers[DUELIST_T])) {
            FinishDuel(killer, victim);
        } else {
            ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn, CType_PlayerDied);
        }
        ResetDuel();
    }
    #if defined SHOW_MENU_FOR_LAST_CT
    else {
        new players[32], pnum; get_players(players, pnum, "ae", "CT");
        if(pnum == 1) {
            new ct = players[0]; get_players(players, pnum, "ae", "TERRORIST");
            if(pnum) {
                Show_DuelOffer(ct);
            }
        }
    }
    #endif
}
#if defined SHOW_MENU_FOR_LAST_CT
Show_DuelOffer(id)
{
    new szMenu[256], iLen;
    
    iLen = formatex(szMenu, charsmax(szMenu), "%L^n^n", id, "DRD_DUEL_OFFER");
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1.\w %L^n", id, "DRD_YES");
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2.\w %L", id, "DRD_NO");
    
    show_menu(id, (1 << 0)|(1 << 1), szMenu, -1, "DuelOfferMenu");
}
public DuelOffer_Handler(id, item)
{
    if(item == 0)
    {
        Command_Duel(id);
    }
    return PLUGIN_HANDLED;
}
#endif
FinishDuel(winner, looser)
{
    ExecuteForward(g_iForwards[DUEL_FINISH], g_iReturn, winner, looser);
    
    new szName[32]; get_user_name(winner, szName, charsmax(szName));
    client_print_color(0, winner, "%s^1 %L", PREFIX, LANG_PLAYER, "DRD_DUEL_WINNER", szName);
}
public dr_selected_mode(id, mode)
{
    if(g_bDuelStarted && mode != g_iModeDuel)
    {
        g_bDuelStarted = false;
        ResetDuel();
        ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn, CType_ModeChanged);
    }
}
ResetDuel()
{
    g_iDuelPlayers[DUELIST_CT] = 0;
    g_iDuelPlayers[DUELIST_T] = 0;
    remove_task(TASK_PRESTART_TIMER);
    remove_task(TASK_TURNCHANGER);
    remove_task(TASK_DUELTIMER);
    RestoreFuncConveyor();
}
StopFuncConveyor()
{
    g_bSavedConveyorInfo = true;
    new ent = -1;
    while((ent = find_ent_by_class(ent, "func_conveyor"))) {
        new Float:speed; pev(ent, pev_speed, speed);
        set_pev(ent, pev_fuser1, speed);
        set_pev(ent, pev_speed, 0.0);
        new Float:vector[3]; pev(ent, pev_rendercolor, vector);
        set_pev(ent, pev_vuser1, vector);
        set_pev(ent, pev_rendercolor, Float:{0.0, 0.0, 0.0});
    }
}
RestoreFuncConveyor()
{
    if(g_bSavedConveyorInfo) {
        new ent = -1;
        while((ent = find_ent_by_class(ent, "func_conveyor"))) {
            new Float:speed; pev(ent, pev_fuser1, speed);
            set_pev(ent, pev_speed, speed);
            new Float:vector[3]; pev(ent, pev_vuser1, vector);
            set_pev(ent, pev_rendercolor, vector);
        }
    }
}
18. Deathrun Mode: Free

download:

Code: Select all

#include <amxmodx>
#include <fun>
#include <hamsandwich>
#include <deathrun_modes>

#define PLUGIN "Deathrun Mode: Free"
#define VERSION "1.0.2"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define MAX_HEALTH 100

new g_iModeFree, g_iCurMode, g_iMaxPlayers;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_event("Health", "Event_Health", "b");
    
    new CSW_IGNORED = (1 << CSW_KNIFE);
    for(new i = CSW_P228, szWeaponName[32]; i <= CSW_P90; i++) {
        if(~CSW_IGNORED & 1<<i && get_weaponname(i, szWeaponName, charsmax(szWeaponName))) {
            RegisterHam(Ham_Item_AddToPlayer, szWeaponName, "Ham_Item_AddToPlayer_Pre", 0);
        }
    }
    
    g_iModeFree = dr_register_mode
    (
        .name = "DRM_MODE_FREE",
        .mark = "free",
        .round_delay = 0,
        .flags = DRM_BLOCK_CT_WEAPON | DRM_BLOCK_T_WEAPON | DRM_BLOCK_T_BUTTONS | DRM_ALLOW_BHOP
    );
    
    g_iMaxPlayers = get_maxplayers();
}
public Event_Health(id)
{
    if(g_iCurMode == g_iModeFree && (get_user_health(id) > MAX_HEALTH)) {
        set_user_health(id, MAX_HEALTH);
        client_print(id, print_center, "You can't have more than %d hp.", MAX_HEALTH);
    }
}
public Ham_Item_AddToPlayer_Pre(ent, id)
{
    return (g_iCurMode == g_iModeFree) ? HAM_SUPERCEDE : HAM_IGNORED;
}
public dr_selected_mode(id, mode)
{
    g_iCurMode = mode;
    
    if(g_iModeFree == mode) {
        for(new i = 1; i <= g_iMaxPlayers; i++) {
            if(is_user_alive(i)) {
                strip_user_weapons(i);
                give_item(i, "weapon_knife");
            }
        }
    }
}
19. Deathrun Mode: Invis

download:

Code: Select all

#include <amxmodx>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include <deathrun_modes>

#pragma semicolon 1

#define PLUGIN "Deathrun Mode: Invis"
#define VERSION "1.0.2"
#define AUTHOR "Mistrick"

#define TERRORIST_HEALTH 150

new g_iModeInvis, g_iCurMode;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1);
    
    g_iModeInvis = dr_register_mode
    (
        .name = "DRM_MODE_INVIS",
        .mark = "invis",
        .round_delay = 2,
        .flags = DRM_BLOCK_T_WEAPON | DRM_BLOCK_T_BUTTONS | DRM_ALLOW_BHOP | DRM_GIVE_USP
    );
}
public Ham_PlayerSpawn_Post(id)
{
    if(is_user_alive(id)) {
        if(g_iCurMode == g_iModeInvis && cs_get_user_team(id) == CS_TEAM_T) {
            set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
            set_user_health(id, TERRORIST_HEALTH);
        }
    }
}
public dr_selected_mode(id, mode)
{
    g_iCurMode = mode;
    
    if(mode == g_iModeInvis) {
        set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
        set_user_health(id, TERRORIST_HEALTH);
    }
}
20. Deathrun Mode: Rambo

download:

Code: Select all

// Credits: Eriurias
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <deathrun_modes>

#if AMXX_VERSION_NUM < 183
#define client_disconnected client_disconnect
#endif

#pragma semicolon 1

#define PLUGIN "Deathrun Mode: Rambo"
#define VERSION "1.1.1"
#define AUTHOR "Mistrick"

#define MIN_DIFF 8.0
#define MAX_OVERHEAT 200
#define BIG_HEAT 4
#define SMALL_HEAT 2
#define ENLIGHTEN_COOLDOWN 5.0

const XO_CBASEPLAYERWEAPON = 4;
const m_pPlayer = 41;
const m_iClip = 51;

enum (+=100) {
    TASK_OVERHEAT_TICK = 150
};

enum _:Hooks {
    Hook_AddToFullPack,
    Hook_CS_Item_CanDrop,
    Hook_Weapon_PrimaryAttack,
    Hook_Spawn,
    Hook_Player_PreThink
};

new HamHook:g_hHooks[Hooks];
new g_bEnabled, g_iModeRambo, g_iCurMode;
new g_iOverHeat[33], Float:g_fOldAngles[33][3], Float:g_fAllowUse[33];


public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    DisableHamForward(HamHook:g_hHooks[Hook_CS_Item_CanDrop] = RegisterHam(Ham_CS_Item_CanDrop, "weapon_m249", "Ham_Minigun_CanDrop_Pre", false));
    DisableHamForward(HamHook:g_hHooks[Hook_Weapon_PrimaryAttack] = RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "Ham_Minigun_PrimaryAttack_Pre", false));
    DisableHamForward(HamHook:g_hHooks[Hook_Spawn] = RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", true));
    DisableHamForward(HamHook:g_hHooks[Hook_Player_PreThink] = RegisterHam(Ham_Player_PreThink, "player", "Ham_Player_PreThink_Pre", false));
    
    register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
    register_message(get_user_msgid("CurWeapon"), "Message_CurWeapon");
    
    g_iModeRambo = dr_register_mode
    (
        .name = "DRM_MODE_RAMBO",
        .mark = "rambo",
        .round_delay = 0,
        .flags = DRM_BLOCK_T_WEAPON | DRM_BLOCK_T_BUTTONS | DRM_ALLOW_BHOP | DRM_GIVE_USP
    );
}
public client_disconnected(id)
{
    remove_task(id + TASK_OVERHEAT_TICK);
}
public Event_NewRound()
{
    DisableHooks();
}
public Ham_PlayerSpawn_Post(id)
{
    if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T) {
        give_item(id, "weapon_m249");
        g_iOverHeat[id] = 0;
        set_task(0.1, "Task_OverHeat_Tick", id + TASK_OVERHEAT_TICK, .flags = "b");
    }
}
public Message_CurWeapon(msg, dest, id)
{
    enum {
        arg_is_active = 1,
        arg_weaponid
    };
    if(g_iCurMode == g_iModeRambo && get_msg_arg_int(arg_is_active) && get_msg_arg_int(arg_weaponid) == CSW_M249 && cs_get_user_team(id) == CS_TEAM_T) {
        set_msg_arg_int(2, ARG_BYTE, CSW_KNIFE);
        set_msg_arg_int(3, ARG_BYTE, -1);
    }
}
public Ham_Minigun_CanDrop_Pre(weapon)
{
    new player = get_pdata_cbase(weapon, m_pPlayer, XO_CBASEPLAYERWEAPON);
    
    if(cs_get_user_team(player) == CS_TEAM_T) {
        SetHamReturnInteger(false);
        return HAM_SUPERCEDE;
    }
    return HAM_IGNORED;
}
public Ham_Minigun_PrimaryAttack_Pre(weapon)
{
    new player = get_pdata_cbase(weapon, m_pPlayer, XO_CBASEPLAYERWEAPON);
    
    if(cs_get_user_team(player) != CS_TEAM_T) return HAM_IGNORED;
    
    cs_set_weapon_ammo(weapon, 100);
    
    new Float:angles[3]; pev(player, pev_angles, angles);
    new Float:diff = get_distance_f(angles, g_fOldAngles[player]);
    g_fOldAngles[player] = angles;
    
    g_iOverHeat[player] += (diff < MIN_DIFF) ? BIG_HEAT : SMALL_HEAT;
    
    SendMessage_BarTime2(player, MAX_OVERHEAT / 10, 100 - g_iOverHeat[player] * 100 / MAX_OVERHEAT);
    
    return HAM_IGNORED;
}
public Task_OverHeat_Tick(id)
{
    id -= TASK_OVERHEAT_TICK;
    
    if(g_iOverHeat[id] > 0) {
        g_iOverHeat[id]--;
    }
}
public Ham_Player_PreThink_Pre(id)
{
    if(!is_user_alive(id) || cs_get_user_team(id) != CS_TEAM_T) {
        return HAM_IGNORED;
    }

    new buttons = pev(id,pev_button);
    new old_buttons = pev(id, pev_oldbuttons);
    new Float:gametime = get_gametime();

    if(buttons & IN_USE && ~old_buttons & IN_USE && gametime >= g_fAllowUse[id]) {
        g_fAllowUse[id] = gametime + ENLIGHTEN_COOLDOWN;

        new players[32], pnum, target, origin[3];
        get_players(players, pnum, "ae", "CT");
        for(new i = 0; i < pnum; i++) {
            target = players[i];
            
            get_user_origin(target, origin);
            te_create_teleport_splash(origin, id, false);
        }
    }

    if(g_iOverHeat[id] > MAX_OVERHEAT) {
        set_pev(id, pev_button, buttons & ~IN_ATTACK);
    }

    return HAM_IGNORED;
}
public FM_AddToFullPack_Post(es, e, ent, host, flags, player, pSet)
{
    if(player && host != ent) {
        if(cs_get_user_team(host) == CS_TEAM_T && cs_get_user_team(ent) == CS_TEAM_CT) {
            set_es(es, ES_RenderAmt, false);
            set_es(es, ES_RenderMode, kRenderTransAlpha);
        }
    }
}
public dr_selected_mode(id, mode)
{
    if(g_iCurMode == g_iModeRambo) {
        for(new i = 1; i < 33; i++) {
            remove_task(i + TASK_OVERHEAT_TICK);
            if(is_user_alive(i)) SendMessage_BarTime2(i, 0, 100);
        }
        DisableHooks();
    }
    
    g_iCurMode = mode;
    
    if(mode == g_iModeRambo) {
        EnableHooks();
        
        give_item(id, "weapon_m249");
        g_iOverHeat[id] = 0;
        set_task(0.1, "Task_OverHeat_Tick", id + TASK_OVERHEAT_TICK, .flags = "b");
    }
}
EnableHooks()
{
    g_bEnabled = true;
    
    g_hHooks[Hook_AddToFullPack] = HamHook:register_forward(FM_AddToFullPack, "FM_AddToFullPack_Post", true);
    for(new i = Hook_CS_Item_CanDrop; i < Hooks; i++) {
        EnableHamForward(g_hHooks[i]);
    }
}
DisableHooks()
{
    if(g_bEnabled) {
        g_bEnabled = false;
        
        unregister_forward(FM_AddToFullPack, _:g_hHooks[Hook_AddToFullPack], true);
        for(new i = Hook_CS_Item_CanDrop; i < Hooks; i++) {
            DisableHamForward(g_hHooks[i]);
        }
    }
}
stock SendMessage_BarTime2(id, duration, startpercent)
{
    static BarTime2; if(!BarTime2) BarTime2 = get_user_msgid("BarTime2");
    
    message_begin(MSG_ONE, BarTime2, .player = id);
    write_short(duration);
    write_short(startpercent);
    message_end();
}

stock te_create_teleport_splash(position[3], receiver = 0, bool:reliable = true)
{
    if(receiver && !is_user_connected(receiver))
        return 0;

    message_begin(get_msg_destination(receiver, reliable), SVC_TEMPENTITY, .player = receiver);
    write_byte(TE_TELEPORT);
    write_coord(position[0]);
    write_coord(position[1]);
    write_coord(position[2]);
    message_end();

    return 1;
}

stock get_msg_destination(id, bool:reliable)
{
    if(id)
        return reliable ? MSG_ONE : MSG_ONE_UNRELIABLE;

    return reliable ? MSG_ALL : MSG_BROADCAST;
}
21. Deathrun Mode: Skill Master

download:

Code: Select all

#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <deathrun_core>
#include <deathrun_modes>

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#pragma semicolon 1

#define PLUGIN "Deathrun Mode: Skill Master"
#define VERSION "1.0.2"
#define AUTHOR "Mistrick"

#define IsPlayer(%1) (%1 && %1 <= g_iMaxPlayers)

enum { NONE_MODE = 0 };

enum SIcon_Status {
    SIcon_Hide,
    SIcon_Show,
    SIcon_Flash
};

enum Skills {
    SKILL_PLEASE_STOP,
    SKILL_BURN_BABY_BURN,
    SKILL_KICK_IN_THE_ASS
};

#define SKILL_PLEASE_STOP_COOLDOWN 30
#define SKILL_BURN_BABY_BURN_COOLDOWN 45
#define SKILL_KICK_IN_THE_ASS_COOLDOWN 45

new g_bSkillInCooldown[Skills];
new g_fSkillCooldowns[Skills] = {
    SKILL_PLEASE_STOP_COOLDOWN,
    SKILL_BURN_BABY_BURN_COOLDOWN,
    SKILL_KICK_IN_THE_ASS_COOLDOWN
};

new g_SkillIcons[Skills][] = {
    "dmg_rad",
    "dmg_heat",
    "dmg_shock"
};

new g_iSkillColors[Skills][3] = {
    {0, 255, 85},
    {255, 123, 0},
    {255, 238, 0}
};

new HamHook:g_hHamPreThink, g_iModeSkillMaster, g_iCurMode, g_iTerrorist;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_clcmd("drop", "Command_Drop");
    register_impulse(100, "Impulse_Flashlight");
    DisableHamForward(g_hHamPreThink = RegisterHam(Ham_Player_PreThink, "player", "Ham_PlayerPreThink_Pre", 0));
    
    // g_iMaxPlayers = get_maxplayers();
    
    g_iModeSkillMaster = dr_register_mode
    (
        .name = "DRM_MODE_SKILLMASTER",
        .mark = "skillmaster",
        .round_delay = 0,
        .flags = DRM_BLOCK_T_BUTTONS | DRM_ALLOW_BHOP | DRM_GIVE_USP
    );
}
public dr_selected_mode(id, mode)
{
    g_iCurMode = mode;
    
    if(mode == g_iModeSkillMaster) {
        dr_chosen_new_terrorist(id);
        EnableHamForward(g_hHamPreThink);
    } else {
        DisableHamForward(g_hHamPreThink);
        for(new Skills:skill; skill < Skills; skill++) {
            remove_task(_:skill);
        }
    }
}
public dr_chosen_new_terrorist(id)
{
    g_iTerrorist = id;
    if(!id || g_iCurMode != g_iModeSkillMaster) return;
    
    for(new Skills:i; i < Skills; i++) {
        if(g_SkillIcons[i][0]) {
            new colors[3]; colors = g_iSkillColors[i];
            UTIL_StatusIcon(id, g_SkillIcons[i], SIcon_Show, colors[0], colors[1], colors[2]);
        }
        
        g_bSkillInCooldown[i] = false;
        remove_task(_:i);
    }
}
public Ham_PlayerPreThink_Pre(id)
{
    if(id != g_iTerrorist || !is_user_alive(id)) return HAM_IGNORED;
    
    new buttons = pev(id, pev_button);
    new oldbuttons = pev(id, pev_oldbuttons);
    
    if(buttons & IN_RELOAD && ~oldbuttons & IN_RELOAD) {
        ActivateSkill(SKILL_PLEASE_STOP);
    }
    
    return HAM_IGNORED;
}
public Impulse_Flashlight(id)
{
    if(g_iCurMode != g_iModeSkillMaster || id != g_iTerrorist || !is_user_alive(id)) return PLUGIN_CONTINUE;
    
    if(g_bSkillInCooldown[SKILL_BURN_BABY_BURN]) return PLUGIN_CONTINUE;
    
    ActivateSkill(SKILL_BURN_BABY_BURN);
    
    return PLUGIN_HANDLED;
}
public Command_Drop(id)
{
    if(g_iCurMode != g_iModeSkillMaster || id != g_iTerrorist || !is_user_alive(id)) return PLUGIN_CONTINUE;
    
    if(g_bSkillInCooldown[SKILL_KICK_IN_THE_ASS]) return PLUGIN_CONTINUE;
    
    ActivateSkill(SKILL_KICK_IN_THE_ASS);
    
    return PLUGIN_HANDLED;
}
ActivateSkill(Skills:skill)
{
    if(g_bSkillInCooldown[skill]) return;
    
    g_bSkillInCooldown[skill] = true;
    set_task(float(g_fSkillCooldowns[skill]), "Task_SkillCooldowns", _:skill);
    
    if(g_SkillIcons[skill][0]) {
        new colors[3]; colors = g_iSkillColors[skill];
        UTIL_StatusIcon(g_iTerrorist, g_SkillIcons[skill], SIcon_Flash, colors[0], colors[1], colors[2]);
    }
    
    new players[32], pnum, id;
    get_players(players, pnum, "ae", "CT");
    
    switch(skill) {
        case SKILL_PLEASE_STOP: {
            // stop all ct
            for(new i; i < pnum; i++)
            {
                id = players[i];
                set_pev(id, pev_velocity, Float:{ 0.0, 0.0, 0.0 });
            }
        }
        case SKILL_BURN_BABY_BURN: {
            // hit all ct
            for(new i; i < pnum; i++)
            {
                id = players[i];
                ExecuteHam(Ham_TakeDamage, id, 0, 0, random_float(20.0, 50.0), DMG_BURN);
            }
        }
        case SKILL_KICK_IN_THE_ASS: {
            // add random velocity for all ct
            for(new i, Float:velocity[3]; i < pnum; i++)
            {
                id = players[i];
                pev(id, pev_velocity, velocity);
                
                velocity[0] += random_float(-200.0, 200.0);
                velocity[1] += random_float(-200.0, 200.0);
                velocity[2] += random_float(0.0, 200.0);
                
                set_pev(id, pev_velocity, velocity);
            }
        }
    }
}
public Task_SkillCooldowns(Skills:skill)
{
    g_bSkillInCooldown[skill] = false;
    
    if(g_SkillIcons[skill][0]) {
        new colors[3]; colors = g_iSkillColors[skill];
        UTIL_StatusIcon(g_iTerrorist, g_SkillIcons[skill], SIcon_Show, colors[0], colors[1], colors[2]);
    }
}
stock UTIL_StatusIcon(id, sprite[], SIcon_Status:status, red, green, blue)
{
    static msg_statusicon; if(!msg_statusicon) msg_statusicon = get_user_msgid("StatusIcon");
    message_begin(MSG_ONE, msg_statusicon, _, id);
    write_byte(_:status); // status (0=hide, 1=show, 2=flash)
    write_string(sprite); // sprite name
    write_byte(red); // red
    write_byte(green); // green
    write_byte(blue); // blue
    message_end();
}
22. Deathrun Mode: Snow

download:

Code: Select all

#include <amxmodx>
#include <engine>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <deathrun_modes>

#define PLUGIN "Deathrun Mode: Snow"
#define VERSION "1.1.2"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define IsPlayer(%0) (%0 && %0 <= g_iMaxPlayers)

#define CAN_FLY_THROUGH_THE_WALLS
// #define STOP_BALL_AFTER_TOUCH
// #define AUTOTARGET

#define SNOWBALL_AMOUNT 200
#define SNOWBALL_DAMAGE 25.0
#define SNOWBALL_VELOCITY 1800.0
#define SNOWBALL_LIFETIME 5.0

#define AUTOTARGET_RANGE 128.0
#define AUTOTARGET_DELAY 1.0

new Float:HIT_MUL[9] = {
    0.0, // generic
    3.0, // head
    1.2, // chest
    1.1, // stomach
    0.9, // leftarm
    0.9, // rightarm
    0.75, // leftleg
    0.75, // rightleg
    0.0, // shield
};

const XO_CBASEPLAYERWEAPON = 4;
const XO_CBASEPLAYER = 5;
const m_pPlayer = 41;
const m_LastHitGroup = 75;

new const BALL_CLASSNAME[] = "snow_ball";
new const BALL_MODEL_W[] = "models/w_snowball.mdl";
new const BALL_MODEL_V[] = "models/v_snowball.mdl";
new const BALL_MODEL_P[] = "models/p_snowball.mdl";

new g_iModeSnow, g_iCurMode, g_iSprite, g_iMaxPlayers;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", true);
    RegisterHam(Ham_Item_Deploy, "weapon_smokegrenade", "Ham_SmokeGranade_Deploy_Post", true);
    
    register_forward(FM_SetModel, "FM_SetModel_Post", true);
    
    #if defined CAN_FLY_THROUGH_THE_WALLS
    register_forward(FM_ShouldCollide, "FM_ShouldCollide_Pre", false);
    #endif // CAN_FLY_THROUGH_THE_WALLS
    
    register_touch(BALL_CLASSNAME, "*", "Engine_TouchSnowBall");
    register_think(BALL_CLASSNAME, "Engine_ThinkSnowBall");
    
    register_message(get_user_msgid("TextMsg"), "Message_TextMsg");
    register_message(get_user_msgid("SendAudio"), "Message_SendAudio");
    
    g_iMaxPlayers = get_maxplayers();
    
    g_iModeSnow = dr_register_mode
    (
        .name = "DRM_MODE_SNOW",
        .mark = "snow",
        .round_delay = 3,
        .flags = DRM_BLOCK_CT_WEAPON | DRM_BLOCK_T_WEAPON | DRM_BLOCK_T_BUTTONS | DRM_ALLOW_BHOP
    );
}
public plugin_precache()
{
    precache_model(BALL_MODEL_V);
    precache_model(BALL_MODEL_P);
    precache_model(BALL_MODEL_W);
    g_iSprite = precache_model("sprites/zbeam3.spr");
}

public dr_selected_mode(id, mode)
{
    g_iCurMode = mode;
    if(g_iModeSnow == mode) {
        give_item(id, "weapon_smokegrenade");
        cs_set_user_bpammo(id, CSW_SMOKEGRENADE, SNOWBALL_AMOUNT);
    }
}

public Message_TextMsg(msgid, dest, reciver)
{
    if(g_iCurMode != g_iModeSnow) return PLUGIN_CONTINUE;
    
    if(get_msg_args() != 5 || get_msg_argtype(5) != ARG_STRING) return PLUGIN_CONTINUE;

    new arg5[20]; get_msg_arg_string(5, arg5, charsmax(arg5));
    
    if(equal(arg5, "#Fire_in_the_hole")) return PLUGIN_HANDLED;

    return PLUGIN_CONTINUE;
}
public Message_SendAudio(msgid, dest, reciver)
{
    if(g_iCurMode != g_iModeSnow) return PLUGIN_CONTINUE;
    
    if(get_msg_args() != 3 || get_msg_argtype(2) != ARG_STRING) return PLUGIN_CONTINUE;

    new arg2[20]; get_msg_arg_string(2, arg2, charsmax(arg2));
    
    if(equal(arg2[1], "!MRAD_FIREINHOLE")) return PLUGIN_HANDLED;

    return PLUGIN_CONTINUE;
}

public Ham_PlayerSpawn_Post(id)
{
    if(g_iCurMode == g_iModeSnow) {
        if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T) {
            give_item(id, "weapon_smokegrenade");
            cs_set_user_bpammo(id, CSW_SMOKEGRENADE, SNOWBALL_AMOUNT);
        }
    }
}

public Ham_SmokeGranade_Deploy_Post(weapon)
{
    if(g_iCurMode != g_iModeSnow) return HAM_IGNORED;
    
    new id = get_pdata_cbase(weapon, m_pPlayer, XO_CBASEPLAYERWEAPON);
    
    if(cs_get_user_team(id) == CS_TEAM_T) {
        set_pev(id, pev_viewmodel2, BALL_MODEL_V);
        set_pev(id, pev_weaponmodel2, BALL_MODEL_P);
    }
    
    return HAM_IGNORED;
}
public FM_SetModel_Post(ent, const model[])
{
    if(g_iCurMode != g_iModeSnow) return FMRES_IGNORED;
    
    if(!equali(model, "models/w_smokegrenade.mdl")) return FMRES_IGNORED;
    
    new owner = pev(ent, pev_owner);
    if(is_user_alive(owner) && cs_get_user_team(owner) == CS_TEAM_T) {
        CreateSnowBall(owner);
        if(is_valid_ent(ent)) set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
    }
    
    return FMRES_IGNORED;
}
public CreateSnowBall(id)
{
    new Float:vec_start[3]; pev(id, pev_origin, vec_start);
    new Float:view_ofs[3]; pev(id, pev_view_ofs, view_ofs);
    xs_vec_add(vec_start, view_ofs, vec_start);
    
    new end_of_view[3]; get_user_origin(id, end_of_view, 3);
    new Float:vec_end[3]; IVecFVec(end_of_view, vec_end);
    
    new Float:velocity[3]; xs_vec_sub(vec_end, vec_start, velocity);
    new Float:normal[3]; xs_vec_normalize(velocity, normal);
    xs_vec_mul_scalar(normal, SNOWBALL_VELOCITY, velocity);
    
    new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
    
    set_pev(ent, pev_classname, BALL_CLASSNAME);
    set_pev(ent, pev_owner, id);
    set_pev(ent, pev_movetype, MOVETYPE_BOUNCE);
    set_pev(ent, pev_solid, SOLID_BBOX);
    set_pev(ent, pev_fuser1, get_gametime() + SNOWBALL_LIFETIME);
    set_pev(ent, pev_nextthink, get_gametime() + 0.1);
    
    engfunc(EngFunc_SetModel, ent, BALL_MODEL_W);
    engfunc(EngFunc_SetOrigin, ent, vec_start);
    engfunc(EngFunc_SetSize, ent, Float:{-3.0, -3.0, -3.0}, Float:{3.0, 3.0, 3.0});

    set_pev(ent, pev_velocity, velocity);
    
    set_task(0.1, "Task_SetTrail", ent);
    //trail_msg(ent, g_iSprite, 5, 8, 55, 55, 255, 150);
}
public Task_SetTrail(ent)
{
    if(is_valid_ent(ent)) {
        trail_msg(ent, g_iSprite, 5, 8, 55, 55, 255, 150);
    }
}
public Engine_TouchSnowBall(ent, toucher)
{
    if(!is_valid_ent(ent)) {
        return PLUGIN_CONTINUE;
    }
    if(IsPlayer(toucher) && SnowBallTakeDamage(ent, toucher)) {
        return PLUGIN_CONTINUE;
    }

    #if defined STOP_BALL_AFTER_TOUCH
    set_pev(ent, pev_movetype, MOVETYPE_FLY);
    set_pev(ent, pev_velocity, Float:{0.0, 0.0, 0.0});
    #else
    new Float:velocity[3]; pev(ent, pev_velocity, velocity);
    xs_vec_mul_scalar(velocity, 0.7, velocity);
    set_pev(ent, pev_velocity, velocity);
    #endif // STOP_BALL_AFTER_TOUCH

    return PLUGIN_CONTINUE;
}
SnowBallTakeDamage(snowball, player)
{
    new owner = pev(snowball, pev_owner);
    if(is_user_connected(owner)) {
        new hit_zone = get_hit_zone(player, snowball);
        if(hit_zone && is_user_alive(player) && cs_get_user_team(player) != cs_get_user_team(owner)) {
            set_pdata_int(player, m_LastHitGroup, hit_zone);

            ExecuteHamB(Ham_TakeDamage, player, snowball, owner, SNOWBALL_DAMAGE * HIT_MUL[hit_zone], 0);
            engfunc(EngFunc_RemoveEntity, snowball);
            return 1;
        }
    }
    return 0;
}
public Engine_ThinkSnowBall(ent)
{
    new Float:gametime = get_gametime();

    if(gametime >= pev(ent, pev_fuser1)) {
        set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
        return;
    }

    set_pev(ent, pev_nextthink, gametime + 0.1);

    #if defined AUTOTARGET
    if(pev(ent, pev_fuser2) > gametime) {
        return;
    }

    new p = -1;
    new target = 0;
    new Float:dist = -1.0;
    new Float:origin[3], Float:porigin[3];
    pev(ent, pev_origin, origin);

    new owner = pev(ent, pev_owner);

    while((p = engfunc(EngFunc_FindEntityInSphere, p, origin, AUTOTARGET_RANGE))) {
        if(p > 32) {
            break;
        }

        if(!is_user_alive(p)) {
            continue;
        }

        if(cs_get_user_team(p) == cs_get_user_team(owner)) {
            continue;
        }

        pev(p, pev_origin, porigin);
        new Float:d = vector_distance(origin, porigin);
        if(dist == -1.0 || dist > d) {
            dist = d;
            target = p;
        }
    }

    if(target) {
        new Float:velocity[3];
        pev(ent, pev_velocity, velocity);

        entity_set_follow(ent, target, vector_length(velocity), !random_num(0, 5));
        set_pev(ent, pev_fuser2, gametime + AUTOTARGET_DELAY);
    }
    #endif
}

#if defined CAN_FLY_THROUGH_THE_WALLS
public FM_ShouldCollide_Pre(ent, toucher)
{
    if(g_iCurMode != g_iModeSnow) return FMRES_IGNORED;
    
    if(IsPlayer(toucher)) return FMRES_IGNORED;
    
    new toucher_classname[32]; pev(toucher, pev_classname , toucher_classname, charsmax(toucher_classname));
    if(equal(toucher_classname, BALL_CLASSNAME)) {
        new ent_classname[32]; pev(ent, pev_classname , ent_classname, charsmax(ent_classname));
        if(equal(ent_classname, "func_wall")) {
            new Float:FXAmount = Float:pev(ent, pev_renderamt);
            if(FXAmount < 200.0) {
                forward_return(FMV_CELL, 0); 
                return FMRES_SUPERCEDE;
            }
        }
    }
    return FMRES_IGNORED;
}
#endif // CAN_FLY_THROUGH_THE_WALLS

stock get_hit_zone(player, ent)
{
    new Float:porigin[3], Float:eorigin[3];
    pev(player, pev_origin, porigin);
    pev(ent, pev_origin, eorigin);

    new Float:point[3];
    pev(ent, pev_velocity, point);
    xs_vec_normalize(point, point);
    xs_vec_mul_scalar(point, 32.0, point);
    xs_vec_sub(eorigin, point, eorigin);
    xs_vec_mul_scalar(point, 4.0, point);
    xs_vec_add(eorigin, point, porigin);

    new trace = 0;
    engfunc(EngFunc_TraceLine, eorigin, porigin, DONT_IGNORE_MONSTERS, ent, trace);

    return get_tr2(trace, TR_iHitgroup);
}

trail_msg(ent, sprite, lifetime, size, r, g, b, alpha)
{
    message_begin(MSG_ALL, SVC_TEMPENTITY);
    write_byte(TE_BEAMFOLLOW);// TE_BEAMFOLLOW
    write_short(ent);
    write_short(sprite);//sprite
    write_byte(lifetime * 10);//lifetime
    write_byte(size);//size
    write_byte(r);//r
    write_byte(g);//g
    write_byte(b);//b
    write_byte(alpha);//alpha
    message_end();
}

stock entity_set_follow(entity, target, Float:speed, bool:head) {
    if (!is_valid_ent(entity) || !is_valid_ent(target)) return 0;

    new Float:entity_origin[3], Float:target_origin[3];
    entity_get_vector(entity, EV_VEC_origin, entity_origin);
    entity_get_vector(target, EV_VEC_origin, target_origin);

    if(head) {
        new Float:view_ofs[3];
        entity_get_vector(target, EV_VEC_view_ofs, view_ofs);
        xs_vec_add(target_origin, view_ofs, target_origin);
    }

    new Float:diff[3];
    diff[0] = target_origin[0] - entity_origin[0];
    diff[1] = target_origin[1] - entity_origin[1];
    diff[2] = target_origin[2] - entity_origin[2];

    new Float:length = floatsqroot(floatpower(diff[0], 2.0) + floatpower(diff[1], 2.0) + floatpower(diff[2], 2.0));

    new Float:Velocity[3];
    Velocity[0] = diff[0] * (speed / length);
    Velocity[1] = diff[1] * (speed / length);
    Velocity[2] = diff[2] * (speed / length);

    entity_set_vector(entity, EV_VEC_velocity, Velocity);

    return 1;
}
23. Deathrun: Shop

download:

Code: Select all

#include <amxmodx>
#include <cstrike>

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#define PLUGIN "Deathrun: Shop"
#define VERSION "0.1.2"
#define AUTHOR "Mistrick"

#pragma semicolon 1

enum _:ShopItem {
    ItemName[32],
    ItemCost,
    ItemTeam,
    ItemAccess,
    ItemPlugin,
    ItemOnBuy,
    ItemCanBuy
};

new const PREFIX[] = "^4[DRS]";

new Array:g_aShopItems;
new g_iShopTotalItems;
new g_hCallbackDisabled;
new g_szItemAddition[32];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_clcmd("say /shop", "Command_Shop");
    register_clcmd("say_team /shop", "Command_Shop");
}
public plugin_cfg()
{
    register_dictionary("deathrun_shop.txt");
}
public plugin_natives()
{
    g_aShopItems = ArrayCreate(ShopItem);
    g_hCallbackDisabled = menu_makecallback("ShopDisableItem");
    
    register_library("deathrun_shop");
    register_native("dr_shop_add_item", "native_add_item");
    register_native("dr_shop_item_addition", "native_item_addition");
    register_native("dr_shop_set_item_cost", "native_set_item_cost");
}
/**
 *  native dr_shop_add_item(name[], cost, team = (ITEM_TEAM_T|ITEM_TEAM_CT), access = 0, on_buy[], can_buy[] = "");
 */
public native_add_item(plugin, params)
{
    enum {
        arg_name = 1,
        arg_cost,
        arg_team,
        arg_access,
        arg_onbuy,
        arg_canbuy
    };
    
    new item_info[ShopItem];
    
    get_string(arg_name, item_info[ItemName], charsmax(item_info[ItemName]));
    item_info[ItemCost] = get_param(arg_cost);
    item_info[ItemTeam] = get_param(arg_team);
    item_info[ItemAccess] = get_param(arg_access);
    item_info[ItemPlugin] = plugin;
    
    new function[32]; get_string(arg_onbuy, function, charsmax(function));
    item_info[ItemOnBuy] = get_func_id(function, plugin);
    
    
    get_string(arg_canbuy, function, charsmax(function));
    
    if(function[0]) {
        // public CanBuyItem(id);
        item_info[ItemCanBuy] = CreateOneForward(plugin, function, FP_CELL);
    }
    
    ArrayPushArray(g_aShopItems, item_info);
    g_iShopTotalItems++;
    
    return g_iShopTotalItems - 1;
}
/**
 *  native dr_shop_item_addition(addition[]);
 */
public native_item_addition(plugin, params)
{
    enum { arg_addition = 1 };
    get_string(arg_addition, g_szItemAddition, charsmax(g_szItemAddition));
}
/**
 *  native dr_shop_set_item_cost(item, cost);
 */
public native_set_item_cost(plugin, params)
{
    enum {
        arg_item = 1,
        arg_cost
    };
    
    new item = get_param(arg_item);
    
    if(item < 0 || item >= g_iShopTotalItems) {
        log_error(AMX_ERR_NATIVE, "[DRS] Set item cost: wrong item index! index %d", item);
        return 0;
    }
    
    new item_info[ShopItem]; ArrayGetArray(g_aShopItems, item, item_info);
    item_info[ItemCost] = get_param(arg_cost);
    ArraySetArray(g_aShopItems, item, item_info);
    
    return 1;
}
public Command_Shop(id)
{
    Show_ShopMenu(id, 0);
}
Show_ShopMenu(id, page)
{
    if(!g_iShopTotalItems) {
        client_print_color(id, print_team_default, "%s^1 %L", PREFIX, id, "DRS_SHOP_WITHOUT_ITEMS");
        return;
    }
    
    new text[64]; formatex(text, charsmax(text), "%L", id, "DRS_MENU_TITLE");
    new menu = menu_create(text, "ShopMenu_Handler");
    
    new hCallback, num[2], item_info[ShopItem];
    new team = (1 << _:cs_get_user_team(id));
    
    for(new i = 0; i < g_iShopTotalItems; i++) {
        g_szItemAddition = "";
        ArrayGetArray(g_aShopItems, i, item_info);
        
        if(~item_info[ItemTeam] & team) continue;
        
        num[0] = i;
        hCallback = (GetCanBuyAnswer(id, item_info[ItemCanBuy]) == ITEM_ENABLED) ? -1 : g_hCallbackDisabled;
        formatex(text, charsmax(text), "%s %s \R\y$%d", item_info[ItemName], g_szItemAddition, item_info[ItemCost]);
        
        menu_additem(menu, text, num, item_info[ItemAccess], hCallback);
    }
    
    formatex(text, charsmax(text), "%L", id, "DRS_MENU_BACK");
    menu_setprop(menu, MPROP_BACKNAME, text);
    formatex(text, charsmax(text), "%L", id, "DRS_MENU_NEXT");
    menu_setprop(menu, MPROP_NEXTNAME, text);
    formatex(text, charsmax(text), "%L", id, "DRS_MENU_EXIT");
    menu_setprop(menu, MPROP_EXITNAME, text);
    
    menu_display(id, menu, page);
}
public ShopMenu_Handler(id, menu, item)
{
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    
    new access, info[2], callback;
    menu_item_getinfo(menu, item, access, info, charsmax(info), _, _, callback);
    menu_destroy(menu);
    
    new item_index = info[0];
    new item_info[ShopItem]; ArrayGetArray(g_aShopItems, item_index, item_info);
    
    new team = (1 << _:cs_get_user_team(id));
    
    if((~item_info[ItemTeam] & team) || GetCanBuyAnswer(id, item_info[ItemCanBuy]) != ITEM_ENABLED) {
        client_print_color(id, print_team_default, "%s^1 %L", PREFIX, id, "DRS_CANT_BUY");
        return PLUGIN_HANDLED;
    }
    
    new money = cs_get_user_money(id) - item_info[ItemCost];
    
    if(money < 0) {
        client_print_color(id, print_team_default, "%s^1 %L", PREFIX, id, "DRS_NEED_MORE_MONEY", -money);
    } else {
        cs_set_user_money(id, money);
        
        // public OnBuyItem(id);
        callfunc_begin_i(item_info[ItemOnBuy], item_info[ItemPlugin]);
        callfunc_push_int(id);
        callfunc_end();
    }
    
    Show_ShopMenu(id, item / 7);
    return PLUGIN_HANDLED;
}
GetCanBuyAnswer(id, callback)
{
    if(!callback) return ITEM_ENABLED;
    new return_value; ExecuteForward(callback, return_value, id);
    return return_value;
}
public ShopDisableItem()
{
    return ITEM_DISABLED;
}
24. Deathrun Shop: Items

download:

Code: Select all

#include <amxmodx>
#include <fun>
#include <deathrun_shop>
#include <deathrun_modes>

#define PLUGIN "Deathrun Shop: Items"
#define VERSION "0.1"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define MAX_USE 3

new g_iGrenadeUsed[33];
new g_iModeDuel;
new g_bDuel;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
    
    dr_shop_add_item("Health", 100, ITEM_TEAM_T|ITEM_TEAM_CT, 0, "ShopItem_Health", "ShopItem_CanBuy_Health");
    dr_shop_add_item("Gravity", 100, ITEM_TEAM_T|ITEM_TEAM_CT, 0, "ShopItem_Gravity");
    dr_shop_add_item("Grenade HE", 100, ITEM_TEAM_CT, 0, "ShopItem_GrenadeHE", "ShopItem_CanBuy_GrenadeHE");
}
public plugin_cfg()
{
    g_iModeDuel = dr_get_mode_by_mark("duel");
}
public client_putinserver(id)
{
    g_iGrenadeUsed[id] = MAX_USE;
}
public Event_NewRound()
{
    arrayset(g_iGrenadeUsed, MAX_USE, sizeof(g_iGrenadeUsed));
}
public dr_selected_mode(id, mode)
{
    g_bDuel = (g_iModeDuel == mode) ? true : false;
}
public ShopItem_Health(id)
{
    set_user_health(id, get_user_health(id) + 150);
    client_print(id, print_chat, "You bougth 150HP.");
}
public ShopItem_Gravity(id)
{
    set_user_gravity(id, 0.5);
}
public ShopItem_GrenadeHE(id)
{
    g_iGrenadeUsed[id]--;
    give_item(id, "weapon_hegrenade");
}
public ShopItem_CanBuy_Health(id)
{
    return g_bDuel ? ITEM_DISABLED : ITEM_ENABLED;
}
public ShopItem_CanBuy_GrenadeHE(id)
{
    if(g_iGrenadeUsed[id] <= 0)
    {
        dr_shop_item_addition("\r[ALL USED]");
        return ITEM_DISABLED;
    }
    new szAddition[32]; formatex(szAddition, charsmax(szAddition), "\y[Have %d]", g_iGrenadeUsed[id]);
    dr_shop_item_addition(szAddition);
    return ITEM_ENABLED;
}
25. Deathrun: Teleport Spot

download:

Code: Select all

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <deathrun_modes>

#define PLUGIN "Deathrun: Teleport Spot"
#define VERSION "1.0.3"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define RETURN_DAMAGE_TO_ATTACKER
#define TP_CHECK_DISTANCE 64.0

#define IsPlayer(%1) (%1 && %1 <= g_iMaxPlayers)
#define fm_get_user_team(%0) get_pdata_int(%0, 114)

new player_solid[33], g_bDuel, g_iDuelMode, g_iMaxPlayers;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    new ent = find_ent_by_class(-1, "info_teleport_destination");
    
    if(!pev_valid(ent)) {
        log_amx("Map doesn't have any teleports.");
        pause("a");
        return;
    }
    
    RegisterHam(Ham_TakeDamage, "player", "Ham_PlayerTakeDamage_Pre", false);
    g_iMaxPlayers = get_maxplayers();
}
public plugin_cfg()
{
    g_iDuelMode = dr_get_mode_by_mark("duel");
}
public dr_selected_mode(id, mode)
{
    g_bDuel = (g_iDuelMode == mode);
}
public Ham_PlayerTakeDamage_Pre(victim, idinflictor, attacker, Float:damage, damagebits)
{
    if(g_bDuel) {
        return HAM_IGNORED;
    }

    if(victim == attacker || !IsPlayer(attacker) || fm_get_user_team(victim) == fm_get_user_team(attacker)) {
        return HAM_IGNORED;
    }

    new Float:origin[3]; pev(victim, pev_origin, origin);
    new ent = -1;
    while((ent = find_ent_in_sphere(ent, origin, TP_CHECK_DISTANCE))) {
        new class_name[32]; pev(ent, pev_classname, class_name, charsmax(class_name));
        if(equal(class_name, "info_teleport_destination")) {
            #if defined RETURN_DAMAGE_TO_ATTACKER
            ExecuteHamB(Ham_TakeDamage, attacker, 0, attacker, damage, damagebits);
            #endif

            if(is_user_alive(attacker)) slap(attacker);
            if(is_user_alive(victim)) slap(victim);

            return HAM_SUPERCEDE;
        }
    }

    return HAM_IGNORED;
}
slap(id)
{
    new solid = pev(id, pev_solid);
    if(solid != SOLID_NOT) player_solid[id] = solid;
    
    set_pev(id, pev_solid, SOLID_NOT);
    
    user_slap(id, 0);
    user_slap(id, 0);
    
    remove_task(id);
    set_task(0.3, "restore_solid", id);
}
public restore_solid(id)
{
    if(is_user_alive(id)) set_pev(id, pev_solid, player_solid[id]);
}
26. Deathrun: Modes

download:

Code: Select all

#include <amxmodx>
#include <cstrike>
#include <fakemeta_util>
#include <hamsandwich>
#include <deathrun_modes>
#include <fun>

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define client_disconnected client_disconnect
#endif

#define PLUGIN "Deathrun: Modes"
#define VERSION "1.1.0"
#define AUTHOR "Mistrick"

#pragma semicolon 1

// TODO: move to cvars
#define DEFAULT_BHOP 1
#define DEFAULT_USP 1
#define TIMER 15

#define IsPlayer(%1) (%1 && %1 <= g_iMaxPlayers)
#define CHECK_FLAGS(%1) (g_eCurModeInfo[m_Flags] & %1)

enum (+=100) {
    TASK_SHOWMENU = 100
};

#define NONE_MODE -1

new const PREFIX[] = "^4[DRM]";

new Array:g_aModes, g_iModesNum;

new g_eCurModeInfo[ModeData];
new g_iCurMode = NONE_MODE;
new g_iMaxPlayers;

new g_iPage[33], g_iTimer[33], bool:g_bBhop[33];

enum Forwards {
    SELECTED_MODE,
    CHANGED_BHOP
};

new g_hForwards[Forwards], g_fwReturn;

new g_hMenuDisableItem;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_cvar("deathrun_modes_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
    
    register_clcmd("say /bhop", "Command_Bhop");
    
    RegisterHam(Ham_Spawn, "player", "ham_player_spawn_post", 1);
    RegisterHam(Ham_Touch, "weaponbox", "ham_touch_items_pre", 0);
    RegisterHam(Ham_Touch, "armoury_entity", "ham_touch_items_pre", 0);
    RegisterHam(Ham_Touch, "weapon_shield", "ham_touch_items_pre", 0);
    RegisterHam(Ham_Use, "func_button", "ham_use_buttons_pre", 0);
    RegisterHam(Ham_Player_Jump, "player", "ham_player_jump_pre", 0);
    
    register_event("HLTV", "event__new_round", "a", "1=0", "2=0");
    register_event("TextMsg", "event__restart", "a", "2=#Game_Commencing", "2=#Game_will_restart_in");
    
    register_menucmd(register_menuid("ModesMenu"), 1023, "modes_menu__handler");
    
    g_hForwards[SELECTED_MODE] = CreateMultiForward("dr_selected_mode", ET_IGNORE, FP_CELL, FP_CELL);
    g_hForwards[CHANGED_BHOP] = CreateMultiForward("dr_changed_bhop", ET_IGNORE, FP_CELL, FP_CELL);

    g_hMenuDisableItem = menu_makecallback("menu_disable_item");
    g_iMaxPlayers = get_maxplayers();
    
    g_eCurModeInfo[m_Name] = "DRM_MODE_NONE";
    g_eCurModeInfo[m_Flags] = (ModeFlags:DEFAULT_BHOP * DRM_ALLOW_BHOP) | (ModeFlags:DEFAULT_USP * DRM_GIVE_USP);
}
public plugin_cfg()
{
    register_dictionary("deathrun_modes.txt");
}
public plugin_natives()
{
    g_aModes = ArrayCreate(ModeData);
    
    register_library("deathrun_modes");
    register_native("dr_register_mode", "native_register_mode");
    register_native("dr_set_mode", "native_set_mode");
    register_native("dr_get_mode", "native_get_mode");
    register_native("dr_get_mode_by_mark", "native_get_mode_by_mark");
    register_native("dr_get_mode_info", "native_get_mode_info");
    register_native("dr_set_mode_bhop", "native_set_mode_bhop");
    register_native("dr_get_mode_bhop", "native_get_mode_bhop");
    register_native("dr_set_user_bhop", "native_set_user_bhop");
    register_native("dr_get_user_bhop", "native_get_user_bhop");
}
public native_register_mode(plugin, params)
{
    enum {
        arg_name = 1,
        arg_mark,
        arg_round_delay,
        arg_flags
    };
    
    new mode_info[ModeData];
    
    get_string(arg_name, mode_info[m_Name], charsmax(mode_info[m_Name]));
    get_string(arg_mark, mode_info[m_Mark], charsmax(mode_info[m_Mark]));
    mode_info[m_RoundDelay] = get_param(arg_round_delay);
    mode_info[m_Flags] = ModeFlags:get_param(arg_flags);
    
    ArrayPushArray(g_aModes, mode_info);
    g_iModesNum++;
    
    return g_iModesNum;
}
public native_set_mode(plugin, params)
{
    enum {
        arg_mode_index = 1,
        arg_forward,
        arg_player_id
    };
    
    new mode_index = get_param(arg_mode_index) - 1;
    
    if(mode_index < 0 || mode_index >= g_iModesNum) {
        log_error(AMX_ERR_NATIVE, "[DRM] Set mode: wrong mode index! index %d", mode_index + 1);
        return 0;
    }
    
    g_iCurMode = mode_index;
    ArrayGetArray(g_aModes, mode_index, g_eCurModeInfo);
    
    if(g_eCurModeInfo[m_RoundDelay]) {
        g_eCurModeInfo[m_CurDelay] = g_eCurModeInfo[m_RoundDelay] + 1;
        ArraySetArray(g_aModes, mode_index, g_eCurModeInfo);
    }
    
    if(get_param(arg_forward)) {
        ExecuteForward(g_hForwards[SELECTED_MODE], g_fwReturn, get_param(arg_player_id), mode_index + 1);
    }
    
    return 1;
}
public native_get_mode(plugin, params)
{
    enum {
        arg_name = 1,
        arg_size
    };
    
    new size = get_param(arg_size);
    
    if(size > 0) {
        set_string(arg_name, g_eCurModeInfo[m_Name], size);
    }
    
    return g_iCurMode + 1;
}
public native_get_mode_by_mark(plugin, params)
{
    enum { arg_mark = 1 };
    
    new mark[16];
    get_string(arg_mark, mark, charsmax(mark));
    
    for(new mode_index, mode_info[ModeData]; mode_index < g_iModesNum; mode_index++) {
        ArrayGetArray(g_aModes, mode_index, mode_info);
        if(equali(mark, mode_info[m_Mark])) {
            return mode_index + 1;
        }
    }
    
    return 0;
}
public native_get_mode_info(plugin, params)
{
    enum {
        arg_mode_index = 1,
        arg_info
    };
    
    new mode_index = get_param(arg_mode_index) - 1;
    
    if(mode_index < 0 || mode_index >= g_iModesNum) {
        log_error(AMX_ERR_NATIVE, "[DRM] Get mode info: wrong mode index! index %d", mode_index + 1);
        return 0;
    }
    
    new mode_info[ModeData]; ArrayGetArray(g_aModes, mode_index, mode_info);
    set_array(arg_info, mode_info, ModeData);
    
    return 1;
}
public native_set_mode_bhop(plugin, params)
{
    enum { arg_mode_bhop = 1 };
    
    if(get_param(arg_mode_bhop)) {
        g_eCurModeInfo[m_Flags] |= DRM_ALLOW_BHOP;
    } else {
        g_eCurModeInfo[m_Flags] &= ~DRM_ALLOW_BHOP;
    }
}
public native_get_mode_bhop(plugin, params)
{
    return _:CHECK_FLAGS(DRM_ALLOW_BHOP);
}
public native_set_user_bhop(plugin, params)
{
    enum {
        arg_player_id = 1,
        arg_bhop
    };
    
    new player = get_param(arg_player_id);
    
    if(player < 1 || player > g_iMaxPlayers) {
        log_error(AMX_ERR_NATIVE, "[DRM] Set user bhop: wrong player index! index %d", player);
        return 0;
    }
    
    g_bBhop[player] = get_param(arg_bhop) ? true : false;

    ExecuteForward(g_hForwards[CHANGED_BHOP], g_fwReturn, player, g_bBhop[player]);
    
    return 1;
}
public bool:native_get_user_bhop(id)
{
    enum { arg_player_id = 1 };
    
    new player = get_param(arg_player_id);
    
    if(player < 1 || player > g_iMaxPlayers) {
        log_error(AMX_ERR_NATIVE, "[DRM] Get user bhop: wrong player index! index %d", player);
        return false;
    }
    
    return CHECK_FLAGS(DRM_ALLOW_BHOP) && g_bBhop[player];
}
public client_putinserver(id)
{
    g_bBhop[id] = true;
}
public client_disconnected(id)
{
    remove_task(id + TASK_SHOWMENU);
}
public Command_Bhop(id)
{
    if(!CHECK_FLAGS(DRM_ALLOW_BHOP)) return PLUGIN_CONTINUE;
    
    g_bBhop[id] = !g_bBhop[id];
    client_print_color(id, print_team_default, "%s^1 %L", PREFIX, id, "DRM_BHOP_MSG", id, g_bBhop[id] ? "DRM_ENABLED" : "DRM_DISABLED");

    ExecuteForward(g_hForwards[CHANGED_BHOP], g_fwReturn, id, g_bBhop[id]);
    
    return PLUGIN_CONTINUE;
}
//***** Events *****//
public event__new_round()
{
    g_iCurMode = NONE_MODE;
    g_eCurModeInfo[m_Name] = "DRM_MODE_NONE";
    g_eCurModeInfo[m_Flags] = (ModeFlags:DEFAULT_BHOP * DRM_ALLOW_BHOP) | (ModeFlags:DEFAULT_USP * DRM_GIVE_USP);

    new mode_info[ModeData];
    for(new i = 0; i < g_iModesNum; i++) {
        ArrayGetArray(g_aModes, i, mode_info);
        if(mode_info[m_CurDelay]) {
            mode_info[m_CurDelay]--;
            ArraySetArray(g_aModes, i, mode_info);
        }
    }

    ExecuteForward(g_hForwards[SELECTED_MODE], g_fwReturn, 0, g_iCurMode + 1);

    for(new id = 1; id <= g_iMaxPlayers; id++) {
        remove_task(id + TASK_SHOWMENU);
    }
}
public event__restart()
{
    new mode_info[ModeData];
    for(new i = 0; i < g_iModesNum; i++) {
        ArrayGetArray(g_aModes, i, mode_info);
        mode_info[m_CurDelay] = 0;
        ArraySetArray(g_aModes, i, mode_info);
    }
}
//***** Ham *****//
public ham_player_jump_pre(id)
{
    if(!CHECK_FLAGS(DRM_ALLOW_BHOP) || !g_bBhop[id]) {
        return HAM_IGNORED;
    }

    new flags = pev(id, pev_flags);
    
    if(flags & FL_WATERJUMP || pev(id, pev_waterlevel) >= 2 || !(flags & FL_ONGROUND)) {
        return HAM_IGNORED;
    }

    new Float:velocity[3];
    
    pev(id, pev_velocity, velocity);
    
    velocity[2] = 250.0;
    
    set_pev(id, pev_velocity, velocity);
    set_pev(id, pev_gaitsequence, 6);
    set_pev(id, pev_fuser2, 0.0);
    
    return HAM_IGNORED;
}
public ham_use_buttons_pre(ent, caller, activator, use_type)
{
    if(!IsPlayer(activator)) {
        return HAM_IGNORED;
    }
    
    new CsTeams:team = cs_get_user_team(activator);
    
    if(team == CS_TEAM_T && CHECK_FLAGS(DRM_BLOCK_T_BUTTONS)
        || team == CS_TEAM_CT && CHECK_FLAGS(DRM_BLOCK_CT_BUTTONS)) {
        return HAM_SUPERCEDE;
    }
    
    return HAM_IGNORED;
}
public ham_touch_items_pre(ent, id)
{
    if(!IsPlayer(id) || g_iCurMode == NONE_MODE) {
        return HAM_IGNORED;
    }
    
    new CsTeams:team = cs_get_user_team(id);
    
    if(team == CS_TEAM_T && CHECK_FLAGS(DRM_BLOCK_T_WEAPON)
        || team == CS_TEAM_CT && CHECK_FLAGS(DRM_BLOCK_CT_WEAPON)) {
        return HAM_SUPERCEDE;
    }
    
    return HAM_IGNORED;
}
public ham_player_spawn_post(id)
{
    if(!is_user_alive(id)) {
        return HAM_IGNORED;
    }
    
    set_user_rendering(id);
    
    new CsTeams:team = cs_get_user_team(id);
    
    if(CHECK_FLAGS(DRM_GIVE_USP) && team == CS_TEAM_CT) {
        give_item(id, "weapon_usp");
        cs_set_user_bpammo(id, CSW_USP, 100);
    }
    
    if(g_iCurMode != NONE_MODE || team != CS_TEAM_T) {
        return HAM_IGNORED;
    }

    g_iTimer[id] = TIMER + 1;
    g_iPage[id] = 0;
    task__menu_timer(id + TASK_SHOWMENU);
    
    return HAM_IGNORED;
}
public show__modes_menu(id)
{
    new text[80];
    formatex(text, charsmax(text), "%L^n^n%L ", id, "DRM_MENU_SELECT_MODE", id, "DRM_MENU_TIMELEFT", g_iTimer[id]);
    new menu = menu_create(text, "modes_menu__handler");
    
    new mode_info[ModeData];
    for(new i, item[2], len; i < g_iModesNum; i++) {
        ArrayGetArray(g_aModes, i, mode_info);
        
        if(mode_info[m_Flags] & DRM_HIDE) {
            continue;
        }
        
        if(GetLangTransKey(mode_info[m_Name]) != TransKey_Bad) {
            len = formatex(text, charsmax(text), "%L", id, mode_info[m_Name]);
        } else {
            len = formatex(text, charsmax(text), "%s", mode_info[m_Name]);
        }
        
        if(mode_info[m_CurDelay] > 0) {
            formatex(text[len], charsmax(text) - len, "[\r%d\d]", mode_info[m_CurDelay]);
        }
        
        item[0] = i;
        
        menu_additem(menu, text, item, 0, mode_info[m_CurDelay] ? g_hMenuDisableItem : -1);
    }
    
    formatex(text, charsmax(text), "%L", id, "DRM_MENU_BACK");
    menu_setprop(menu, MPROP_BACKNAME, text);
    formatex(text, charsmax(text), "%L", id, "DRM_MENU_NEXT");
    menu_setprop(menu, MPROP_NEXTNAME, text);
    
    menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
    
    new _menu, _newmenu, _menupage;
    player_menu_info(id, _menu, _newmenu, _menupage);
    
    new page = (_newmenu != -1 && menu_items(menu) == menu_items(_newmenu)) ? _menupage : 0;
    menu_display(id, menu, page);
    
    return PLUGIN_HANDLED;
}
public modes_menu__handler(id, menu, item)
{
    if(item == MENU_EXIT || g_iCurMode != NONE_MODE || cs_get_user_team(id) != CS_TEAM_T) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    
    new info[2], stuff;
    menu_item_getinfo(menu, item, stuff, info, charsmax(info), _, _, stuff);
    
    new mode = info[0];
    g_iCurMode = mode;
    
    ArrayGetArray(g_aModes, mode, g_eCurModeInfo);
    
    if(g_eCurModeInfo[m_RoundDelay]) {
        g_eCurModeInfo[m_CurDelay] = g_eCurModeInfo[m_RoundDelay] + 1;
        ArraySetArray(g_aModes, mode, g_eCurModeInfo);
    }
    
    check_usp();
    
    remove_task(id + TASK_SHOWMENU);
    ExecuteForward(g_hForwards[SELECTED_MODE], g_fwReturn, id, mode + 1);

    if(GetLangTransKey(g_eCurModeInfo[m_Name]) != TransKey_Bad) {
        client_print_color(0, print_team_red, "%s %L^4 %L^1.", PREFIX, LANG_PLAYER, "DRM_SELECTED_MODE", LANG_PLAYER, g_eCurModeInfo[m_Name]);
    } else {
        client_print_color(0, print_team_red, "%s %L^4 %s^1.", PREFIX, LANG_PLAYER, "DRM_SELECTED_MODE", g_eCurModeInfo[m_Name]);
    }
    
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}
public menu_disable_item(id, menu, item)
{
    return ITEM_DISABLED;
}
public task__menu_timer(id)
{
    id -= TASK_SHOWMENU;
    
    if(g_iCurMode != NONE_MODE || !is_user_alive(id) || cs_get_user_team(id) != CS_TEAM_T) {
        show_menu(id, 0, "^n");
        return;
    }
    if(--g_iTimer[id] <= 0) {
        show_menu(id, 0, "^n");
        
        new mode;
        
        if(!is_all_modes_blocked()) {
            do {
                mode = random(g_iModesNum);
                ArrayGetArray(g_aModes, mode, g_eCurModeInfo);
            } while(g_eCurModeInfo[m_CurDelay] || CHECK_FLAGS(DRM_HIDE));
        } else {
            do {
                mode = random(g_iModesNum);
                ArrayGetArray(g_aModes, mode, g_eCurModeInfo);
            } while(CHECK_FLAGS(DRM_HIDE));
        }
        
        g_iCurMode = mode;
        
        if(g_eCurModeInfo[m_RoundDelay]) {
            g_eCurModeInfo[m_CurDelay] = g_eCurModeInfo[m_RoundDelay] + 1;
            ArraySetArray(g_aModes, mode, g_eCurModeInfo);
        }
        
        check_usp();
        
        ExecuteForward(g_hForwards[SELECTED_MODE], g_fwReturn, id, mode + 1);
        
        if(GetLangTransKey(g_eCurModeInfo[m_Name]) != TransKey_Bad) {
            client_print_color(0, print_team_red, "%s %L^4 %L^1.", PREFIX, LANG_PLAYER, "DRM_RANDOM_MODE", LANG_PLAYER, g_eCurModeInfo[m_Name]);
        } else {
            client_print_color(0, print_team_red, "%s %L^4 %s^1.", PREFIX, LANG_PLAYER, "DRM_RANDOM_MODE", g_eCurModeInfo[m_Name]);
        }
    } else {
        show__modes_menu(id);
        set_task(1.0, "task__menu_timer", id + TASK_SHOWMENU);
    }
}
check_usp()
{
    #if DEFAULT_USP < 1
    if(CHECK_FLAGS(DRM_GIVE_USP)) {
        new player, players[32], pnum;
        get_players(players, pnum, "ae", "CT");
        for(new i = 0; i < pnum; i++) {
            player = players[i];
            give_item(player, "weapon_usp");
            cs_set_user_bpammo(player, CSW_USP, 100);
        }
    }
    #else
    if(!CHECK_FLAGS(DRM_GIVE_USP)) {
        new player, players[32], pnum;
        get_players(players, pnum, "ae", "CT");
        for(new i = 0; i < pnum; i++) {
            player = players[i];
            fm_strip_user_gun(player, CSW_USP);
        }
    }
    #endif
}

bool:is_all_modes_blocked()
{
    new mode_info[ModeData];
    for(new i; i < g_iModesNum; i++) {
        ArrayGetArray(g_aModes, i, mode_info);
        if(!mode_info[m_CurDelay] && !(mode_info[m_Flags] & DRM_HIDE)) return false;
    }
    return true;
}
27. Life-System

download:

Code: Select all

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <cromchat>

#define PLUGIN "Life-System"	
#define VERSION "1.0"
#define AUTHOR "Uchiha"

#pragma tabsize 0
new lifeSender;
new life_system;
new gAlivePlayers;

new players[33];

public plugin_init(){
	
	register_plugin(PLUGIN, VERSION, AUTHOR);

	life_system = register_cvar("life_system", "1");
	gAlivePlayers = register_cvar("min_alivePlayers", "2");
	register_concmd("amx_revive","cmd_revive",ADMIN_IMMUNITY,"- <player/@/@T/@CT> <hp> <armor>");
	register_clcmd("say", "say_handle");
	register_clcmd("say /lifemenu", "lifemenu");
	//Chat prefix
	CC_SetPrefix("&x04[USP]")  
}

public say_handle(id){
	if(get_pcvar_num(life_system) == 0)
		return PLUGIN_CONTINUE;
	new msg[256]
	read_args(msg,charsmax(msg))
	remove_quotes(msg)
	new Arg0[15], Arg1[33];
	parse(msg,Arg0,14,Arg1,32)
	if(strcmp(Arg0,"/life") == 0){
		if(cs_get_user_team(id) == CS_TEAM_CT)
			find_target(id,Arg1);
	}
	return PLUGIN_CONTINUE;
}

public cmd_life(id, target)
{
	if(cs_get_user_team(target) != CS_TEAM_CT || is_user_alive(target))
		return PLUGIN_HANDLED

	new menu = menu_create("\yOferta Life:", "life_handler", 0 )
	menu_additem( menu, "Accepta", "1", 0, -1 )
	menu_additem( menu, "Refuza", "2", 0, -1 )
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER )
	menu_display( target, menu, 0)

	lifeSender = id;

	set_task( 5.0, "remove_offer", target )

	return PLUGIN_CONTINUE
}

public life_handler(id, menu, item)
{
	switch(item)
	{
		case 0:
		{
			receive_life( lifeSender, id )
			menu_destroy( menu )
			return PLUGIN_HANDLED
		}
		case 1:
		{
			menu_destroy( menu )
			return PLUGIN_HANDLED
		}
	}
	menu_destroy(menu)
	return PLUGIN_CONTINUE
}

public receive_life( id, target ){
	if( !is_user_connected( target ) || !is_user_connected( id ) || !is_user_alive(id) )
		return;
		
	new origin[ 3 ], name[ 32 ], target_name[ 32 ]
	
	ExecuteHamB( Ham_CS_RoundRespawn, target )

	user_silentkill( id )
		
	get_user_origin( id, origin, 0 )
	origin[ 2 ] += 20
	
	set_user_origin( target, origin )

	get_user_name( id, name, 31 )
	get_user_name( target, target_name, 31 )

	CC_SendMessage(0, "&x04%s &x06a primit viata lui &x04%s!", target_name, name);
}

public remove_offer(id)
{	
	client_cmd( id, "slot2;slot1" )
}

public cmd_revive(id)
{
	if(!(get_user_flags(id) & ADMIN_IMMUNITY)){
		console_print(id,"Nu ai acces la aceasta comanda!");
		return PLUGIN_CONTINUE;
	}
	if(checkPlayersAlive()<=get_pcvar_num(gAlivePlayers)){
		console_print(id,"Nu sunt destui jucatori in viata!");
		return PLUGIN_CONTINUE;
	}
	new arg[32];
	read_argv(1,arg,31);
	new target = cmd_target(id,arg,3);
	if(!target)
		return PLUGIN_HANDLED;
	if(is_user_alive(target)){
		console_print(id,"Player is already alive !");
		return PLUGIN_HANDLED;
	}

	ExecuteHamB( Ham_CS_RoundRespawn, target )

	return PLUGIN_HANDLED;
}

public checkPlayersAlive(){
	new playersAlive;
	new i;
	for(i = 0 ;i<=33;i++)
		if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_CT)
			playersAlive++;
	return playersAlive;
}

public find_target(id, const str[]){
	new Name[33],Name2[33], j = 0;
	get_user_name(id,Name, 32);
	for(new i = 1;i<33;i++){
		get_user_name(i,Name2, 32);
		if(containi(Name2, str)>-1){
			if(cs_get_user_team(i) == CS_TEAM_CT && !is_user_alive(i) && id != i){
				players[j] = i;
				j++;
			}
		}
	}
	//J is number of players found
	if(j==0){
		CC_SendMessage(id, "&x06Playerul nu se afla pe server sau este inca in viata!");
	}
	//if there's only one , it'll pop up a menu for that player to receive the life
	else if(j==1){
		if(players[0] < 0 || is_user_alive(players[0]) || cs_get_user_team(players[0]) != CS_TEAM_CT)
			return PLUGIN_HANDLED;
		get_user_name(players[0], Name2, 32);
		CC_SendMessage(0, "&x04%s &x06vrea sa-i ofere viata lui &x04%s!", Name, Name2);
		cmd_life(id, players[0]);
	}
	//if there are more players found , a menu will pop out with all the results found for you to choose
	else{
		new menu = menu_create("Life Menu", "menu_handler2");
		for(new i=0;i<j;i++){
			get_user_name(players[i],Name2, 32);
			menu_additem(menu, Name2, "")
		}
		menu_display(id, menu, 0);
	}

	return PLUGIN_HANDLED;
}
public menu_handler2(id, menu, item){
	new Name[33], Name2[33];
	get_user_name(id,Name2, 32);
	get_user_name(players[item], Name, 32);
	CC_SendMessage(0, "&x04%s &x06vrea sa-i ofere viata lui &x04%s!", Name2, Name);
	cmd_life(id, players[item]);

	menu_destroy(menu);
	return PLUGIN_CONTINUE;
}

public lifemenu(id){
	if(!is_user_alive(id)){
		CC_SendMessage(0, "&x06Trebuie sa fii in viata pentru a folosi aceasta comanda!");
		return PLUGIN_HANDLED;
	}
	if(cs_get_user_team(id) != CS_TEAM_CT){
		CC_SendMessage(0, "&x06Trebuie sa fii CT pentru a folosi aceasta comanda!");
		return PLUGIN_HANDLED;
	}
		
	new Name[33],j = 0;
	new menu = menu_create("Life Menu", "menu_handler");
	for(new i=1;i<33;i++){
		if(!is_user_connected(i))
			continue;
		if(cs_get_user_team(i) == CS_TEAM_CT && !is_user_alive(i) && id != i){
			get_user_name(i,Name, 32);
			menu_additem(menu, Name, "")
			players[j] = i;
			j++;
		}
	}
	menu_display(id, menu, 0);

	return PLUGIN_HANDLED;
}
public menu_handler(id, menu, item){
	new Name[33], Name2[33];
	get_user_name(id,Name2, 32);
	get_user_name(players[item], Name, 32);
	CC_SendMessage(0, "&x04%s &x06vrea sa-i ofere viata lui &x04%s!", Name2, Name);
	cmd_life(id, players[item]);

	menu_destroy(menu);
	return PLUGIN_CONTINUE;
}
Nu am testat pluginele ,poate doar primele 2-3.
Mai las .inc aici de nevoie,daca mai aveti nevoie de ceva ,scrieti in topic aici

deathrun_shop.inc

Code: Select all

#if defined _deathrun_shop_included
  #endinput
#endif
#define _deathrun_shop_included

#if AMXX_VERSION_NUM >= 175
    #pragma reqlib deathrun_shop
    #if !defined AMXMODX_NOAUTOLOAD
        #pragma loadlib deathrun_shop
    #endif
#else
    #pragma library deathrun_shop
#endif

const ITEM_TEAM_T = (1 << 1);
const ITEM_TEAM_CT = (1 << 2);

/**
 * Item registration in shop
 * 
 * @param name                  Item name in menu
 * @param cost                  Item cost
 * @param team                  Team access, bitsum, use ITEM_TEAM_T, ITEM_TEAM_CT
 * @param access                Admin access, admin flags
 * @param on_buy                OnBuy function(id)
 * @param can_buy               CanBuy function(id), should return ITEM_ENABLED or ITEM_DISABLED
 * 
 * @return                      Item index, use with changing cost
 */
native dr_shop_add_item(name[], cost, team = (ITEM_TEAM_T|ITEM_TEAM_CT), access = 0, on_buy[], can_buy[] = "");

/**
 * Use this in CanBuy function
 * 
 * @param addition              Additional string in menu
 */
native dr_shop_item_addition(addition[]);

/**
 * @param item                  Item index
 * @param cost                  New item cost
 */
native dr_shop_set_item_cost(item, cost);
deathrun_modes.inc

Code: Select all

#if defined _deathrun_modes_included
  #endinput
#endif
#define _deathrun_modes_included

#if AMXX_VERSION_NUM >= 175
    #pragma reqlib deathrun_modes
    #if !defined AMXMODX_NOAUTOLOAD
        #pragma loadlib deathrun_modes
    #endif
#else
    #pragma library deathrun_modes
#endif

enum _:ModeData {
    m_Name[32],
    m_Mark[16],
    m_RoundDelay,
    m_CurDelay,
    ModeFlags:m_Flags
};

enum ModeFlags (<<=1) {
    /* Block ct pick up weapons */
    DRM_BLOCK_CT_WEAPON = 1,
    /* Block t pick up weapons */
    DRM_BLOCK_T_WEAPON,
    /* Block ct use buttons */
    DRM_BLOCK_CT_BUTTONS,
    /* Block t use buttons */
    DRM_BLOCK_T_BUTTONS,
    /* Allow autobhop */
    DRM_ALLOW_BHOP,
    /* Give usp to ct at round start */
    DRM_GIVE_USP,
    /* Hide mode in menu */
    DRM_HIDE
};

/**
 * Mode registration.
 *
 * @param name                  Mode name, use ML key.
 * @param mark                  Mode mark, use this to get mode index in other plugins.
 * @param round_delay           Mode blocking in rounds.
 * @param flags                 Mode flags, see ModeFlags.
 *
 * @return                      Mode index.
 */
native dr_register_mode(name[32], mark[16], round_delay, ModeFlags:flags);

/**
 * Get current mode.
 *
 * @param name                  Mode name, here will be copied the current mode ML key.
 * @param size                  Name size.
 * 
 * @return                      Mode index.
 */
native dr_get_mode(name[] = "", size = 0);

/**
 * Set new mode.
 *
 * @param mode                  Mode index.
 * @param fwd                   Call forward(dr_selected_mode).
 * @param id                    Player index in forward.
 */
native dr_set_mode(mode, fwd = 0, id = 0);

/**
 * Get mode by mark.
 *
 * @param mark                  Mode mark.
 *
 * @return                      Mode index.
 */
native dr_get_mode_by_mark(mark[]);

/**
 * Get full mode info.
 * 
 * @param mode                  Mode index.
 * @param modeinfo              Info array.
 */
native dr_get_mode_info(mode, modeinfo[ModeData]);

/**
 * Set mode autobhop.
 * 
 * @param bhop                  0 - OFF, 1 - ON.
 */
native dr_set_mode_bhop(bhop);

/**
 * Get mode autobhop.
 * 
 * @return                      0 - OFF, 1 - ON.
 */
native dr_get_mode_bhop();

/**
 * Set player autobhop.
 * 
 * @note The value for a mode bhop more important than for the player.
 * 
 * @param id                    Player index.
 * @param bhop                  false - OFF, true - ON.
 */
native dr_set_user_bhop(id, bool:bhop);

/**
 * Get player autobhop.
 * 
 * @param id                    Player index.
 */
native bool:dr_get_user_bhop(id);

/**
 * Forward which called when mode selected.
 * 
 * @param id                    Terrorist index.
 * @param mode                  Mode index.
 */
forward dr_selected_mode(id, mode);

/**
 * Forward which called when player changed bhop.
 * 
 * @param id                    Player index.
 * @param value                 Enabled or disabled bhop.
 */
forward dr_changed_bhop(id, value);
deathrun_duel.inc

Code: Select all

#if defined _deathrun_duel_included
  #endinput
#endif
#define _deathrun_duel_included

#if AMXX_VERSION_NUM >= 175
    #pragma reqlib deathrun_duel
    #if !defined AMXMODX_NOAUTOLOAD
        #pragma loadlib deathrun_duel
    #endif
#else
    #pragma library deathrun_duel
#endif

enum CancelType
{
    CType_TimeOver,
    CType_PlayerDisconneced,
    CType_PlayerDied,
    CType_ModeChanged
}

 /**
 * Forward which called before duel start, warm up time
 * 
 * @param duelist_ct            Player index.
 * @param duelist_t             Player index.
 */
forward dr_duel_prestart(duelist_ct, duelist_t);

 /**
 * Forward which called when duel started
 * 
 * @param duelist_ct            Player index.
 * @param duelist_t             Player index.
 */
forward dr_duel_start(duelist_ct, duelist_t);

 /**
 * Forward which called when duel overed
 * 
 * @param winner                Player index.
 * @param looser                Player index.
 */
forward dr_duel_finish(winner, looser);

 /**
 * Forward which called when duel canceled
 * 
 * @param type                  Cancel type
 */
forward dr_duel_canceled(CancelType:type);
deathrun_core.inc

Code: Select all

#if defined _deathrun_core_included
  #endinput
#endif
#define _deathrun_core_included

#if AMXX_VERSION_NUM >= 175
    #pragma reqlib deathrun_core
    #if !defined AMXMODX_NOAUTOLOAD
        #pragma loadlib deathrun_core
    #endif
#else
    #pragma library deathrun_core
#endif

/**
 * Forward which called when chosen new terrorist(new round or disconnect).
 *
 * @param id                    Player index.
 */
forward dr_chosen_new_terrorist(id);

/**
 * Get player index current terrorist.
 *
 * @return                      Player index.
 */
native dr_get_terrorist();

/**
 * Set player who became terrorist in new round.
 *
 * @param id                    Next terrorist index.
 */
native dr_set_next_terrorist(id);

/**
 * Get player who became terrorist in new round.
 *
 * @return                      Player index.
 */
native dr_get_next_terrorist();
colorchat.inc

Code: Select all

#if defined _colorchat_included
    #endinput
#endif
#define _colorchat_included

/* ColorChat Support */
#define NORMAL	DontChange
#define GREEN	DontChange
#define RED		Red
#define BLUE	Blue
#define GREY	Grey
#define ColorChat client_print_color

#define MAX_TRANSLATION_LENGTH 2048

enum {
    DontChange = 0,
    Grey = -1,
    Red = -2,
    Blue = -3
};

#define print_team_default  DontChange
#define print_team_grey     Grey
#define print_team_red      Red
#define print_team_blue     Blue

stock client_print_color(id, sender, const fmt[], any:...)
{
    // check if id is different from 0
    if (id && !is_user_connected(id))
    {
        return 0;
    }

    if (sender < Blue || sender > 32)
    {
        sender = DontChange;
    }
    else if (sender < DontChange)
    {
        sender = -sender + 32; // align indexes to the TeamInfo ones
    }

    static const szTeamName[][] =
    {
        "",
        "TERRORIST",
        "CT"
    };

    new szMessage[191];

    new iParams = numargs();

    // Specific player code
    if (id)
    {
        if (iParams == 3)
        {
            copy(szMessage, charsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value
        }
        else
        {
            vformat(szMessage, charsmax(szMessage), fmt, 4);
        }

        if (sender > (32 - Grey))
        {
            if (sender > (32 - Blue))
            {
                sender = id;
            }
            else
            {
                _CC_TeamInfo(id, sender, szTeamName[sender - (32 - Grey)]);
            }
        }
        _CC_SayText(id, sender, szMessage);
    }

    // Send message to all players
    else
    {
        // Figure out if at least 1 player is connected
        // so we don't execute useless useless code if not
        new iPlayers[32], iNum;
        get_players(iPlayers, iNum, "ch");
        if (!iNum)
        {
            return 0;
        }

        new iMlNumber, i, j;
        new Array:aStoreML = ArrayCreate();
        if (iParams >= 5) // ML can be used
        {
            for (j = 3; j < iParams; j++)
            {
                // retrieve original param value and check if it's LANG_PLAYER value
                if (getarg(j) == LANG_PLAYER)
                {
                    i = 0;
                    // as LANG_PLAYER == -1, check if next parm string is a registered language translation
                    while ((szMessage[i] = getarg(j + 1, i++))) {}
                    if (GetLangTransKey(szMessage) != TransKey_Bad)
                    {
                        // Store that arg as LANG_PLAYER so we can alter it later
                        ArrayPushCell(aStoreML, j++);

                        // Update ML array saire so we'll know 1st if ML is used,
                        // 2nd how many args we have to alterate
                        iMlNumber++;
                    }
                }
            }
        }

        // If arraysize == 0, ML is not used
        // we can only send 1 MSG_ALL message if sender != 0
        if (!iMlNumber)
        {
            if (iParams == 3)
            {
                copy(szMessage, charsmax(szMessage), fmt);
            }
            else
            {
                vformat(szMessage, charsmax(szMessage), fmt, 4);
            }
            if (0 < sender < (32 - Blue)) // if 0 is passed, need to loop
            {
                if (sender > (32 - Grey))
                {
                    _CC_TeamInfo(0, sender, szTeamName[sender - (32 - Grey)]);
                }
                _CC_SayText(0, sender, szMessage);
                return 1;
            }
        }

        if (sender > (32 - Blue))
        {
            sender = 0; // use receiver index
        }

        for (--iNum; iNum >= 0; iNum--)
        {
            id = iPlayers[iNum];

            if (iMlNumber)
            {
                for (j = 0; j < iMlNumber; j++)
                {
                    // Set all LANG_PLAYER args to player index ( = id )
                    // so we can format the text for that specific player
                    setarg(ArrayGetCell(aStoreML, j), _, id);
                }

                // format string for specific player
                vformat(szMessage, charsmax(szMessage), fmt, 4);
            }

            if (sender > (32 - Grey))
            {
                _CC_TeamInfo(id, sender, szTeamName[sender - (32 - Grey)]);
            }
            _CC_SayText(id, sender, szMessage);
        }

        ArrayDestroy(aStoreML);
    }
    return 1;
}

stock _CC_TeamInfo(iReceiver, iSender, szTeam[])
{
    static iTeamInfo = 0;
    if (!iTeamInfo)
    {
        iTeamInfo = get_user_msgid("TeamInfo");
    }
    message_begin(iReceiver ? MSG_ONE : MSG_ALL, iTeamInfo, _, iReceiver);
    write_byte(iSender);
    write_string(szTeam);
    message_end();
}

stock _CC_SayText(iReceiver, iSender, szMessage[])
{
    static iSayText = 0;
    if (!iSayText)
    {
        iSayText = get_user_msgid("SayText");
    }

    // Prevent sending format and localization strings via chat
    for (new i = 0; i < 192; i++)
    {
        if (szMessage[i] == 0) break;
        if (szMessage[i] == '%' ||
            szMessage[i] == '#')
            szMessage[i] = ' ';
    }
    
    message_begin(iReceiver ? MSG_ONE : MSG_ALL, iSayText, _, iReceiver);
    write_byte(iSender ? iSender : iReceiver);
    if (szMessage[0] > 4)
    {
        write_byte(1);
        szMessage[192 - 2 - 1] = 0;	// Two write_byte + string terminator
        write_string(szMessage);
    }
    else
    {
        szMessage[192 - 1 - 1] = 0;	// One write_byte + string terminator
        write_string(szMessage);
    }
    message_end();
}

new _translation_szBuffer[MAX_TRANSLATION_LENGTH];

stock register_dictionary_colored(const filename[])
{
    if (!register_dictionary(filename))
    {
        return 0;
    }

    new szFileName[256];
    get_localinfo("amxx_datadir", szFileName, charsmax(szFileName));
    format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename);
    new fp = fopen(szFileName, "rt");
    if (!fp)
    {
        log_amx("Failed to open %s", szFileName);
        return 0;
    }

    new szLang[3], szKey[64], TransKey:iKey;

    while (!feof(fp))
    {
        fgets(fp, _translation_szBuffer, charsmax(_translation_szBuffer));
        trim(_translation_szBuffer);

        if (_translation_szBuffer[0] == '[')
        {
            strtok(_translation_szBuffer[1], szLang, charsmax(szLang), _translation_szBuffer, 1, ']');
        }
        else if (_translation_szBuffer[0])
        {
            strbreak(_translation_szBuffer, szKey, charsmax(szKey), _translation_szBuffer, charsmax(_translation_szBuffer));
            iKey = GetLangTransKey(szKey);
            if (iKey != TransKey_Bad)
            {
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!g", "^4");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!t", "^3");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!n", "^1");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^4", "^4");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^3", "^3");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^1", "^1");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^n", "^n");
                replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^t", "^t");
                AddTranslation(szLang, iKey, _translation_szBuffer[2]);
            }
        }
    }

    fclose(fp);
    return 1;
}

/* ML from AMXX 1.8.3 support */
#define register_dictionary register_dictionary_colored
dhudmessage.inc

Code: Select all

#if defined _dhudmessage_included
    #endinput
#endif

#define _dhudmessage_included

#include <amxmodx>

stock __dhud_color;
stock __dhud_x;
stock __dhud_y;
stock __dhud_effect;
stock __dhud_fxtime;
stock __dhud_holdtime;
stock __dhud_fadeintime;
stock __dhud_fadeouttime;
stock __dhud_reliable;

stock set_dhudmessage( red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false )
{
    #define clamp_byte(%1)       ( clamp( %1, 0, 255 ) )
    #define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )

    __dhud_color       = pack_color( clamp_byte( red ), clamp_byte( green ), clamp_byte( blue ) );
    __dhud_x           = _:x;
    __dhud_y           = _:y;
    __dhud_effect      = effects;
    __dhud_fxtime      = _:fxtime;
    __dhud_holdtime    = _:holdtime;
    __dhud_fadeintime  = _:fadeintime;
    __dhud_fadeouttime = _:fadeouttime;
    __dhud_reliable    = _:reliable;

    return 1;
}

stock show_dhudmessage( index, const message[], any:... )
{
    new buffer[ 128 ];
    new numArguments = numargs();

    if( numArguments == 2 )
    {
        send_dhudMessage( index, message );
    }
    else if( index || numArguments == 3 )
    {
        vformat( buffer, charsmax( buffer ), message, 3 );
        send_dhudMessage( index, buffer );
    }
    else
    {
        new playersList[ 32 ], numPlayers;
        get_players( playersList, numPlayers, "ch" );

        if( !numPlayers )
        {
            return 0;
        }

        new Array:handleArrayML = ArrayCreate();

        for( new i = 2, j; i < numArguments; i++ )
        {
            if( getarg( i ) == LANG_PLAYER )
            {
                while( ( buffer[ j ] = getarg( i + 1, j++ ) ) ) {}
                j = 0;

                if( GetLangTransKey( buffer ) != TransKey_Bad )
                {
                    ArrayPushCell( handleArrayML, i++ );
                }
            }
        }

        new size = ArraySize( handleArrayML );

        if( !size )
        {
            vformat( buffer, charsmax( buffer ), message, 3 );
            send_dhudMessage( index, buffer );
        }
        else
        {
            for( new i = 0, j; i < numPlayers; i++ )
            {
                index = playersList[ i ];

                for( j = 0; j < size; j++ )
                {
                    setarg( ArrayGetCell( handleArrayML, j ), 0, index );
                }

                vformat( buffer, charsmax( buffer ), message, 3 );
                send_dhudMessage( index, buffer );
            }
        }

        ArrayDestroy( handleArrayML );
    }

    return 1;
}

stock send_dhudMessage( const index, const message[] )
{
    message_begin( __dhud_reliable ? ( index ? MSG_ONE : MSG_ALL ) : ( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST ), SVC_DIRECTOR, _, index );
    {
        write_byte( strlen( message ) + 31 );
        write_byte( DRC_CMD_MESSAGE );
        write_byte( __dhud_effect );
        write_long( __dhud_color );
        write_long( __dhud_x );
        write_long( __dhud_y );
        write_long( __dhud_fadeintime );
        write_long( __dhud_fadeouttime );
        write_long( __dhud_holdtime );
        write_long( __dhud_fxtime );
        write_string( message );
    }
    message_end();
}
++++++++++++++++++++++++++++

28. Deathrun HappyHour Respawn

download:

Code: Select all

/*

    Respawn за деатрън сървъри в определени часове.
    Хубаво е да се смени проверката за часовете с тази на крома.

*/

#include <amxmodx> 
#include <fakemeta> 
#include <hamsandwich>
#include <cstrike> //

new bool:g_happyhour 
new cvar_init,cvar_end,cvar_on,message[80] 


public plugin_init()  
{ 
    register_plugin("Happy hour", "1.0", "Freestyle") 
     
    cvar_init = register_cvar("happyinit", "22") 
    cvar_end = register_cvar("happyend", "5") 
    cvar_on = register_cvar("happyhour", "1") 
     
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_post",1)    
    RegisterHam(Ham_Killed, "player", "RevivePlayer", true) 
} 
public plugin_cfg() 
{ 
    if(get_pcvar_num(cvar_on)) 
    { 
        new data[3] 
        get_time("%H", data, 2) 
         
        if(get_pcvar_num(cvar_end) > str_to_num(data) >= get_pcvar_num(cvar_init)) 
        { 
            g_happyhour = true 
            formatex(message, charsmax(message), "[HAPPY HOUR]!! Start: %d - End: %d", get_pcvar_num(cvar_init), get_pcvar_num(cvar_end)) 
        }   
    } 
} 


public fw_PlayerSpawn_post(id) 
{ 
    if(message[0]) client_print(id,print_chat, message) 
} 

public RevivePlayer(id) 
{ 
    if(g_happyhour) 
    { 
        if (cs_get_user_team(id) == CS_TEAM_CT)
        {
           ExecuteHamB(Ham_CS_RoundRespawn, id);
        }
    } 
}  
29. Deathrun Respawn

download:

Code: Select all

/*

	Не много ефективен Respawn плъгин за deathrun сървъри с време.
	Хубаво е да се пренапише изцяло, най-малко времето за Respawn и худа !

*/

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <dhudmessage>

#define TASK_TIMER 803891

new g_counter

new Float:RoundStartTime

new g_Time_Interval;
const MAX_PLAYERS = 32;

new g_iRespawn[MAX_PLAYERS+1], g_TeamInfoCounter[MAX_PLAYERS+1], CsTeams:g_iPlayerTeam[MAX_PLAYERS+1];
new g_pCvarRespawnTime, g_pCvarRespawnDelay, g_pCvarMaxHealth;

public plugin_init()
{
	register_plugin("Dr.Respawn", "1.1", "???"); 
	
	RegisterHam(Ham_Killed, "player", "fwdPlayerKilledPost", 1);
	RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawnPost", 1);
	
	register_event("TeamInfo", "eTeamInfo", "a");
	
	register_logevent( "LogEventRoundStart", 2, "1=Round_Start" )
	
	g_pCvarRespawnTime = register_cvar("amx_respawn_tickets", "0"); //Set to 0 for unlimited respawns
	g_pCvarRespawnDelay = register_cvar("amx_respawn_delay", "1");
	g_pCvarMaxHealth = register_cvar("amx_max_health", "100");
	g_Time_Interval = register_cvar("amx_max_time", "180");
	
	set_msg_block( get_user_msgid( "ClCorpse" ), BLOCK_SET );
}
public LogEventRoundStart()
{
	RoundStartTime = get_gametime()
	
	new iPlayers[32]
	new iNum
	get_players( iPlayers, iNum )
	for( new i = 0; i < iNum; i++ ) g_iRespawn[iPlayers[i]] = true

	g_RespTimer = get_pcvar_num(mpc4timer) - 1
	
	set_task(1.0, "effect", TASK_TIMER, "", 0, "b")
}

public effect()
{
	if (g_RespTimer > 0)
	{ 
		if (g_RespTimer <= 180 && g_RespTimer > 10)
		{
			switch (g_RespTimer) 
			{
				default: set_hudmessage( random(255), random(255), random(255), 0.30, 0.05, 1, 0.0, 1.0, 0.0, 0.0, -1)
			}
			show_hudmessage( 0, "Respawn Time: %d seconds remaining", floatround(fSec))
		}
		
		if (g_RespTimer <= 10 && g_RespTimer > 0)
		{
		
			switch (g_RespTimer) 
			{
				default: set_hudmessage( random(255), random(255), random(255), 0.30, 0.05, 1, 0.0, 1.0, 0.0, 0.0, -1)
			}
			show_hudmessage( 0, "Respawn Time: %d seconds remaining", floatround(fSec))
			
			new temp[48]
			num_to_word(g_RespTimer, temp, 47)
			client_cmd(0, "spk ^"vox/%s^"", temp)
		}
		--g_RespTimer
	}
	else 
		remove_task(TASK_TIMER)
}

public Runda_Terminata()
{
	if(RoundStartTime)
	{
		set_dhudmessage(random(255), random(255), random(255), -1.0, 0.30, 1, 0.5, 2.0, 0.5, 3.0)
		show_dhudmessage( 0, "Respawn mode is disabled!")
	}
}

public fwdPlayerKilledPost(iVictim, iKiller, iShoudlGib)
{
	if(g_iRespawn[iVictim]++ < get_pcvar_num(g_pCvarRespawnTime) || get_pcvar_num(g_pCvarRespawnTime) == 0)
		set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer", iVictim);
	return HAM_IGNORED;
}

public fwdPlayerSpawnPost(iClient)
	if(is_user_alive(iClient))
		set_pev(iClient, pev_health, get_pcvar_float(g_pCvarMaxHealth));

public taskRespawnPlayer(id)
{
	if(is_user_connected(id) && RoundStartTime + get_pcvar_num(g_Time_Interval) >= get_gametime() && g_iRespawn[id] && !is_user_alive(id) && cs_get_user_team(id) != CS_TEAM_SPECTATOR) 
	{
		ExecuteHamB(Ham_CS_RoundRespawn, id)
		g_iRespawn[id] = false
		return PLUGIN_HANDLED;
	}
	return PLUGIN_HANDLED;
}  

public eTeamInfo() 
{ 
	new iClient = read_data(1);
	new szTeam[2];
	read_data(2, szTeam, charsmax(szTeam));
	
	switch(szTeam[0])
	{
		case 'T': 
		{
			if(g_TeamInfoCounter[iClient] == 2 || g_iPlayerTeam[iClient] == CS_TEAM_SPECTATOR)
				set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer",  iClient);

			g_iPlayerTeam[iClient] = CS_TEAM_T;
		}
		case 'C': 
		{
			if(g_TeamInfoCounter[iClient] == 2 || g_iPlayerTeam[iClient] == CS_TEAM_SPECTATOR)
				set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer",  iClient);
			
			g_iPlayerTeam[iClient] = CS_TEAM_CT;
		}
		case 'S':
		{
			remove_task(iClient);
			g_iPlayerTeam[iClient] = CS_TEAM_SPECTATOR;
		}
	}
}

public TimeCounter() 
{
	g_counter++
	
	new Float:iRestartTime = get_pcvar_float(g_Time_Interval) - g_counter
	new Float:fSec
	fSec = iRestartTime 
	
	if(get_pcvar_num(g_Time_Interval) - g_counter < 180 && get_pcvar_num(g_Time_Interval) - g_counter !=0)
	{
		set_hudmessage( random(255), random(255), random(255), 0.30, 0.05, 1, 0.0, 1.0, 0.0, 0.0, -1)
		show_hudmessage( 0, "Respawn Time: %d seconds remaining", floatround(fSec))
	}
	
	if(get_pcvar_num(g_Time_Interval) - g_counter < 11 && get_pcvar_num(g_Time_Interval) - g_counter !=0)
	{
		static szNum[32]
		num_to_word(get_pcvar_num(g_Time_Interval) - g_counter, szNum, 31)
	}
	
	if(get_pcvar_num(g_Time_Interval) - g_counter < 1 && get_pcvar_num(g_Time_Interval) - g_counter !=0)
		Runda_Terminata()
	
	if(g_counter == get_pcvar_num(g_Time_Interval))
		g_counter = 0
}
30. Deathrun Timer + Save Records

download:

Code: Select all

/*

	Deathrun Timer, който се пуска в началото на рунда за всеки играч и при убиването на терориста го спира и го запазва.
	Има опция за рекорди на всяка карта.
	Рекордите се запазват !

*/

#include <amxmodx>
#include <engine>
#include <hamsandwich>
#include <nvault>

new h_vault;

#define TaskID 3456
#define DeadID 3356
new sMap[35];
new HudObj, StatusText;
new TimerS[33] = 0; 
new iBest, sBest[64] = "";
new g_iMaxPlayers;

public plugin_init()
{
	register_plugin("DeathRun Timer + Save Records", "2.1", "Knopers");//Edited by (Owner123) and Nikolow;
	get_mapname(sMap, 34);
	
	RegisterHam(Ham_Spawn, "player", "EvSpawn", 1);
	RegisterHam(Ham_Killed, "player", "EvPlayerKilled", 1);
	register_logevent("eventResetTime", 2, "1=Round_Start");

	register_concmd("say /best", "ShowBest");
	
	HudObj = CreateHudSyncObj();
	StatusText = get_user_msgid("StatusText");
	
	h_vault = nvault_open("dr_records");
	LoadRecord();
	
	g_iMaxPlayers = get_maxplayers();
}

public plugin_end()
		nvault_close(h_vault);

public client_disconnect(id)
{
	if(task_exists(id + TaskID))
		remove_task(id + TaskID);

	if(task_exists(id + DeadID))
		remove_task(id + DeadID);
}

public EvSpawn(id)
{
	TimerS[id] = 0;
	
	if(task_exists(TaskID + id))
		remove_task(TaskID + id);
		
	if(task_exists(id + DeadID))
		remove_task(id + DeadID);
		
	if(get_user_team(id) == 2)
		Start(id);
}

public EvPlayerKilled(iVictim, iAttacker)
{
	if(task_exists(TaskID + iVictim))
		remove_task(TaskID + iVictim);
		
	set_task(1.0, "DeadTask", iVictim + DeadID, _, _, "b");
	
	if(get_user_team(iVictim) == 1 && get_user_team(iAttacker) == 2)
		Finish(iAttacker, iVictim);
}

public Start(id)
{
	TimerS[id] = 0;
	if(get_user_team(id) == 2)
	{
		if(task_exists(id + TaskID))
			remove_task(id + TaskID);
			
		fnShowTimer(id + TaskID);
		
		set_task(1.0, "fnShowTimer", id + TaskID, _, _, "b");
	}
}

public Finish(id, idTT)
{
	if(TimerS[id] <= 10 || !task_exists(TaskID + id))
		return PLUGIN_CONTINUE;
	
	if(idTT > 0 && idTT < 33)
	{
		remove_task(TaskID + id);
		new skName[32];
		get_user_name(id, skName, 31);
		new sMsg[128];
		format(sMsg, 127, "^x04 [ PREFIX ]^x03 %s^x01 finished the map in^x03 %02d:%02d", skName, TimerS[id] / 60, TimerS[id] % 60);
		ColorChat(0, sMsg);
		if(TimerS[id] < iBest || iBest < 1)
		{
			iBest = TimerS[id];
			sBest = skName;
			
			format(sMsg, 127, "^x04 [ PREFIX ]^x03 %s^x01 made a^x04 new record^x01 on the map. His time:^x03 %02d:%02d", skName, TimerS[id] / 60, TimerS[id] % 60);
			ColorChat(0, sMsg);
			
			replace_all(sBest, 63, "^"", "''");
			SaveRecord();
		}
		else
		{
			format(sMsg, 127, "^x04 [ PREFIX ]^x03 %s^x01 didn't beat the best record. Best Record is:^x03 %02d:%02d", skName, iBest / 60, iBest % 60);
			ColorChat(0, sMsg);
		}
	}
	else
	{
		remove_task(TaskID + id);
		new sName[32];
		get_user_name(id, sName, 31);
		new sMsg[128];
		format(sMsg, 127, "^x04 [ PREFIX ]^x03 %s^x01 finished the map in^x03 %02d:%02d", sName, TimerS[id] / 60, TimerS[id] % 60);
		ColorChat(0, sMsg);
		if(TimerS[id] < iBest || iBest < 1)
		{
			iBest = TimerS[id];
			sBest = sName;
			
			format(sMsg, 127, "^x04 [ PREFIX ]^x03 %s^x01 made a^x04 new record^x01 on the map. His time:^x03 %02d:%02d", sName, TimerS[id] / 60, TimerS[id] % 60);
			ColorChat(0, sMsg);
			
			replace_all(sBest, 63, "^"", "''");
			SaveRecord();
		}
		else
		{
			format(sMsg, 127, "^x04 [ PREFIX ]^x03 %s^x01 didn't beat the best record. Best Record is:^x03 %02d:%02d", sName, iBest / 60, iBest % 60);
			ColorChat(0, sMsg);
		}
	}
	return PLUGIN_CONTINUE;
}

public fnShowTimer(idTask)
{
	new id = idTask - TaskID;
	TimerS[id] ++;
	
	new sSMsg[32];
	format(sSMsg, 31, "Timer: %02d:%02d", TimerS[id] / 60, TimerS[id] % 60);
	message_begin(MSG_ONE, StatusText, {0,0,0}, id);
	write_byte(0);
	write_string(sSMsg);
	message_end();
}

public eventResetTime()
{
	for(new id = 1; id < g_iMaxPlayers; id++)
	{
		if(!is_user_connected(id) || !is_user_alive(id))
			continue;
		
		if(!task_exists(id + TaskID))
			continue;
		
		remove_task(id + TaskID);
		TimerS[id] = 0;
		set_task(1.0, "fnShowTimer", id + TaskID, _, _, "b");
	}
}

public ShowBest(id)
{
	new sMsg[128];
	
	if(!sBest[0])
		format(sMsg, 127, "^x04 [ PREFIX ]^x01 There is no record on this map.");
	else
		format(sMsg, 127, "^x04 [ PREFIX ]^x01 Map Record^x04 :^x03 %02d:%02d^x01 -^x04 %s", iBest / 60, iBest % 60, sBest);
	
	ColorChat(0, sMsg);
}
stock ColorChat(id, sMessage[])
{
	new SayText = get_user_msgid("SayText");
	if(id == 0)
	{
		for(new i = 1; i < 33; i++)
		{
			if(is_user_connected(i))
			{
				message_begin(MSG_ONE, SayText, { 0, 0, 0 }, i);
				write_byte(i);
				write_string(sMessage);
				message_end();
			}
		}
	}
	else
	{
		message_begin(MSG_ONE, SayText, { 0, 0, 0 }, id);
		write_byte(id);
		write_string(sMessage);
		message_end();
	}
}
public DeadTask(Spect)
{
	Spect -= DeadID;
	if(!is_user_connected(Spect) || is_user_alive(Spect))
	{
		remove_task(Spect + DeadID);
		return PLUGIN_CONTINUE;
	}
	new id = entity_get_int(Spect, EV_INT_iuser2);
	if(id <= 0 || id >= 33 || !is_user_alive(id))
		return PLUGIN_CONTINUE;
	new Name[32];
	get_user_name(id, Name, 31);
	
	set_hudmessage(255, 255, 255, -1.0, 0.2, 2, 0.05, 1.0, 0.1, 3.0, -1);
	ShowSyncHudMsg(Spect, HudObj, "%s^nPlayer time: %02d:%02d", Name, TimerS[id] / 60, TimerS[id] % 60);
	
	return PLUGIN_CONTINUE;
}

public SaveRecord()
{
	new sData[128];

	format(sData, 127,"^"%s^" ^"%02d^"", sBest, iBest);
	nvault_set(h_vault, sMap, sData);
	
	return PLUGIN_CONTINUE
}

public LoadRecord()
{
	new sData[128];
 
	format(sData, 127,"^"%s^" ^"%02d^"", sBest, iBest);
	nvault_get(h_vault, sMap, sData, 127);
	
	new RecordName[64], RecordS[3];
	parse(sData, RecordName, 63, RecordS, 2);
	
	sBest = RecordName;
	iBest = str_to_num(RecordS);
	
	return PLUGIN_CONTINUE;
}  
Image
RoyalServer
Infamous2017
Membru, skill +1
Membru, skill +1
Posts: 228
Joined: 11 Feb 2017, 12:13
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Fond eXtream: 0
Has thanked: 2 times
Contact:

09 Mar 2021, 20:20

What is here the command to start the race ???? There are no Portals????
| Afiseaza codul
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>

enum _:RaceType
{
	idAsker,
	idAccepter
}

const MaxRaces = 16;

#define BitSet(%1,%2)   (%1 |= (1 << (%2 & 31))) 
#define BitClear(%1,%2) (%1 &= ~(1 << (%2 & 31))) 
#define BitGet(%1,%2)   (%1 & (1 << (%2 & 31)))

new bool:InRace[MaxRaces], isnotAfk, score[MaxRaces][RaceType], Competitors[MaxRaces][RaceType], Rounds[MaxRaces], Races;
new bool:StartRace[MaxRaces];
public raceIds;

public plugin_init()
{
	register_plugin("Race Plugin", "1.0", "Dr.FioriGinal.Ro");
	register_clcmd("say", "hookChat");
	register_clcmd("say_team", "hookChat");
	
	RegisterHam(Ham_TakeDamage, "player", "takeDamage");
	register_logevent("roundStart", 2, "1=Round_Start");
}

public roundStart() 
{
	if ( !Races )
	{
		return;
	}
	new bool:Tero;
	for (new i = 0, j = 1; i < MaxRaces && j <= Races ; ++i)
	{
		if ( InRace )
		{
			++j;
		}
		else
		{
			continue;
		}
		if ( !StartRace )
		{
			StartRace = true;
			client_print_color(Competitors[idAsker], print_team_blue, "^4[^3Race Plugin^4] Race-ul a inceput !");
			client_print_color(Competitors[idAccepter], print_team_blue, "^4[^3Race Plugin^4] Race-ul a inceput !");
			continue;
		}
		if ( !Tero )
		{
			if ( cs_get_user_team(Competitors[idAsker]) == CS_TEAM_T || cs_get_user_team(Competitors[idAccepter]) == CS_TEAM_T )
			{
				Tero = true;
				continue;
			}
		}
		if ( ++Rounds == 5 )
		{
			new name[MAX_NAME_LENGTH], name2[MAX_NAME_LENGTH];
			get_user_name(Competitors[idAsker], name, charsmax(name));
			get_user_name(Competitors[idAccepter], name2, charsmax(name2));
			
			if ( score[i][idAsker] < score[i][idAccepter] )
			{
				client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a castigat race-ul cu %d-%d contra lui %s.", name2, score[i][idAccepter], score[i][idAsker], name);
			}
			else
			{
				if ( score[i][idAsker] == score[i][idAccepter] )
				{
					client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s si %s au facut egal %d-%d.", name, name2, score[i][idAsker], score[i][idAccepter]);
				}
				else
				{
					client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a castigat race-ul cu %d-%d contra lui %s.", name,score[i][idAsker], score[i][idAccepter], name2);
				}
			}
			--Races;
			//client_print(0, print_console, "--race in roundstart");
			InRace[i] = false;
			StartRace[i] = false;
		
			BitClear(raceIds, Competitors[i][idAsker]);
			BitClear(raceIds, Competitors[i][idAccepter]);
			return;
		}
	}
	
}

public client_disconnect(id)
{
	if ( BitGet(raceIds, id) )
	{
		//client_print(0, print_console, "debug detetez ca e in bitsum");
		for (new i = 0, j = 1; i < MaxRaces && j <= Races ; ++i)
		{
			if ( InRace[i] )
			{
				++j;
				//client_print(0, print_console, "debug detetez ca e in race");
			}
			else
			{
				continue;
			}
			if ( id == Competitors[i][idAsker] || id == Competitors[i][idAccepter] )
			{
				--Races;
				//client_print(0, print_console, "--race in client_disconnect");
				InRace[i] = false;
				StartRace[i] = false;
				//client_print(0, print_console, "debug curat celula");
				BitClear(raceIds, Competitors[i][idAsker]);
				BitClear(raceIds, Competitors[i][idAccepter]);
				break;
			}
		}
	}
}

public takeDamage( iVictim, inflictor, iAttacker, Float:iDamagee, damagetype )
{
	//client_print(0, print_console, "Races : %d, iVictim %d, iAttacker %d, BitGet ivictim %d, BitGet iAttacker %d",
	//			Races, iVictim, iAttacker, BitGet(raceIds, iVictim), BitGet(raceIds, iAttacker));
	if ( Races && !BitGet(raceIds, iVictim) && BitGet(raceIds, iAttacker) && cs_get_user_team(iVictim) == CS_TEAM_T &&
		cs_get_user_team(iAttacker) == CS_TEAM_CT )
	{
		for (new i = 0, j = 1; i < MaxRaces && j <= Races ; ++i)
		{
			if ( InRace[i] && StartRace[i] )
			{
				++j;
			}
			else
			{
				continue;
			}
			if ( iAttacker == Competitors[i][idAsker] || iAttacker == Competitors[i][idAccepter] )
			{
				user_kill(Competitors[i][idAsker], 1);
				user_kill(Competitors[i][idAccepter], 1);
				if ( iAttacker == Competitors[i][idAsker] )
				{
					new name[MAX_NAME_LENGTH], name2[MAX_NAME_LENGTH];
					get_user_name(Competitors[i][idAsker], name, charsmax(name));
					get_user_name(Competitors[i][idAccepter], name2, charsmax(name2));
					if ( ++score[i][idAsker] == 3 )
					{
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s castigat cu 3-%d race-ul contra lui %s !", name, score[i][idAccepter], name2);
						--Races;
						//client_print(0, print_console, "--race in win asker");
						InRace[i] = false;
						StartRace[i] = false;
				
						BitClear(raceIds, Competitors[i][idAsker]);
						BitClear(raceIds, Competitors[i][idAccepter]);
					}
					else
					{
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a punctat !", name);
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] Scorul este %s %d-%d %s.", name, score[i][idAsker], score[i][idAccepter], name2);
					}
				}
				else
				{
					new name[MAX_NAME_LENGTH], name2[MAX_NAME_LENGTH];
					get_user_name(Competitors[i][idAsker], name, charsmax(name));
					get_user_name(Competitors[i][idAccepter], name2, charsmax(name2));
					if ( ++score[i][idAccepter] == 3 )
					{
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s castigat cu 3-%d race-ul contra lui %s !", name2, score[i][idAsker], name);
						--Races;
						//client_print(0, print_console, "--race in win accepter");
						InRace[i] = false;
						StartRace[i] = false;
				
						BitClear(raceIds, Competitors[i][idAsker]);
						BitClear(raceIds, Competitors[i][idAccepter]);
					}
					else
					{
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a punctat !", name2);
						client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] Scorul este %s %d-%d %s.", name, score[i][idAsker], score[i][idAccepter], name2);
					}
				}
				SetHamParamFloat(4, 0.0);
		
				return HAM_HANDLED;
			}
		}
	}
	
	return HAM_IGNORED;
}  

public hookChat(id)
{
	new args[32];
	read_args(args, charsmax(args));
	
	if ( !args[0] )
	{
		return PLUGIN_CONTINUE;
	}
	
	remove_quotes(args);
	
	new const raceIdent[] = "!race";
	
	if ( equal(args, raceIdent, charsmax(raceIdent)) )
	{
		if ( !(get_user_flags(id) & ADMIN_RESERVATION) ) 
		{
			client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] Ai nevoie de slot pentru a da race cu cineva.");
			return PLUGIN_HANDLED;
		}
		if ( get_timeleft() / 60 < 7 )
		{
			client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] Nu poti incepe un race cand mai sunt 7 minute ramase.");
			return PLUGIN_HANDLED;
		}
		if ( BitGet(raceIds, id) )
		{
			client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] Esti deja intr-o race.");
			return PLUGIN_HANDLED;
		}
		
		raceMenu(id);
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public raceMenu(id)
{
	new menu = menu_create("Alegeti adversarul :", "raceMenuHandler");
	new players[MAX_PLAYERS], pnum, OutOfRace;
	new name[MAX_NAME_LENGTH], data[10];
	
	get_players(players, pnum, "ch");
	
	for (new i = 0; i < pnum; ++i )
	{
		if ( players[i] == id || BitGet(raceIds, players[i]) || !is_user_admin(players[i]) )
		{
			OutOfRace++;
			//get_user_name(players[i], name, charsmax(name));
			//client_print(0, print_console, "[RP] nume: %s", name);
			continue;
		}
		get_user_name(players[i], name, charsmax(name));
		num_to_str(get_user_userid(players[i]), data, charsmax(data));
		
		menu_additem(menu, name, data);
	}
	
	if ( pnum - OutOfRace == 0 )
	{
		client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] Nu exista competitori pentru race.");
		return;
	}
	
	menu_display(id, menu);
}

public raceMenuHandler(id, menu, item)
{
	if ( item == MENU_EXIT )
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new data[6], name[MAX_NAME_LENGTH];
	new _acces, item_callback;
	menu_item_getinfo(menu, item, _acces, data, charsmax(data), name, charsmax(name), item_callback);
	
	new userid = str_to_num(data);
	new player = find_player("k", userid);
	
	if ( player )
	{
		new name2[MAX_NAME_LENGTH];
		get_user_name(player, name2, charsmax(name2));
		if( BitGet(raceIds, player) )
		{
			client_print_color(id, print_team_blue, "^4[^3Race Plugin^4] %s este deja intr-o race.", name2);
			return PLUGIN_HANDLED;
		}
		new name[MAX_NAME_LENGTH];
		get_user_name(id, name, charsmax(name));
		InRace[Races] = true;
		score[Races][idAccepter] = 0;
		score[Races][idAsker] = 0;
		Competitors[Races][idAsker] = id;
		Competitors[Races][idAccepter] = player;
		BitSet(raceIds, id);
		BitSet(raceIds, player);
		Races++;		
		
		client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s l-a provocat pe %s la un race.", name, name2);
		
		new Text[121];
		formatex(Text, charsmax(Text), "%s te-a provocat la un race :", name);
		new Menu = menu_create(Text, "answerMenu");
               
		formatex(Text, charsmax(Text), "Accept provocarea." );
		menu_additem(Menu, Text, "1", 0);
               
		formatex(Text, charsmax(Text), "Nu multumesc." );
		menu_additem(Menu, Text, "2", 0);
 
		menu_setprop(Menu, MPROP_EXIT , MEXIT_ALL);
		menu_display(player, Menu, 0);
		new index[10];
		BitClear(isnotAfk, player);
		num_to_str(player, index, charsmax(index));
		set_task(15.0, "autoRefuse", Menu, index, charsmax(index));
 
		return PLUGIN_HANDLED;
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public autoRefuse(index[], Menu)
{
	new id = str_to_num(index);
	//client_print(0, print_console, "[RP]index : %s", index);
	if ( !BitGet(isnotAfk, id) )
	{
		menu_destroy(Menu);
	}
}

public answerMenu(id, Menu, item)
{
	new CurrentRace;
	for ( new i = 0; i < MaxRaces; ++i )
	{
		if( id == Competitors[i][idAccepter] )
		{
			CurrentRace = i;
			break;
		}
	}
	
	BitSet(isnotAfk, id);
	new name[MAX_NAME_LENGTH], name2[MAX_NAME_LENGTH];
	get_user_name(Competitors[CurrentRace][idAsker], name, charsmax(name));
	get_user_name(Competitors[CurrentRace][idAccepter], name2, charsmax(name2));
	
	if ( item == MENU_EXIT )
	{
		--Races;
		InRace[CurrentRace] = false;
		StartRace[CurrentRace] = false;
		BitClear(raceIds, Competitors[CurrentRace][idAsker]);
		BitClear(raceIds, Competitors[CurrentRace][idAccepter]);
		client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s nu a raspuns provocarii lui %s.", name2, name);
		
		menu_destroy(Menu);
		return PLUGIN_HANDLED;
	}
	
	new data[6];
	new _acces, item_callback;
	menu_item_getinfo(Menu, item, _acces, data, charsmax(data), _, _, item_callback);

	new Key = str_to_num(data);
	
	switch (Key)
	{
		case 1:
		{
			client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a acceptat provocarea lui %s.", name2, name);
		}
		case 2:
		{
			client_print_color(0, print_team_blue, "^4[^3Race Plugin^4] %s a refuzat provocarea lui %s.", name2, name);
			--Races;
			BitClear(raceIds, Competitors[CurrentRace][idAsker]);
			BitClear(raceIds, Competitors[CurrentRace][idAccepter]);
			StartRace[CurrentRace] = false;
			InRace[CurrentRace] = false;
		}
	}
	
	menu_destroy(Menu);
	return PLUGIN_HANDLED;
}
Post Reply

Return to “AmxModX”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 5 guests