Code: Select all
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#include <fakemeta>
#include <fakemeta_util.inc>
#pragma semicolon 1
#define PLUGIN "Instant Respawn"
#define VERSION "1.0"
#define AUTHOR "xEhsaan"
new cvar_Enabled, cvar_Delay, cvar_LastWeapons;
new bool:g_HasTimer[MAX_PLAYERS];
new g_LastMenu;
new bool:g_PlayerWepSaved[MAX_PLAYERS], g_PlayerWep[MAX_PLAYERS][32], g_PlayerWepNum[MAX_PLAYERS];
new const g_AmmoCount[] = {
0, 52, 0, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90,
100, 120, 30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, 0, 100
};
/**
* Instant Respawn
* By xEhsaan - Version: 1.0 - Release 17-05-2015
*
* Really simple plugin for managing respawns and give last used weapons to respawned player
* Hope you guys enjoy!
*
* Client command:
* say[_team] [/]respawn - Respawn player, only usable if plugin malfunctioned
*
* Console variables:
* respawn_enabled: Enable respawn?
* respawn_delay: Delay for respawn after death
* respawn_spawn_lastweapon: Open menu for using last weapon?
*/
public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR );
cvar_Enabled = register_cvar( "respawn_enabled", "1" );
cvar_Delay = register_cvar( "respawn_delay", "1.0" );
cvar_LastWeapons = register_cvar( "respawn_spawn_lastweapon", "1" );
if ( get_pcvar_num( cvar_Enabled ) == 1 ) {
register_clcmd( "say respawn", "Respawn" );
register_clcmd( "say_team respawn", "Respawn" );
register_clcmd( "say /respawn", "Respawn" );
register_clcmd( "say_team /respawn", "Respawn" );
RegisterHamPlayer( Ham_Killed, "On_Death", 1 );
if ( get_pcvar_num( cvar_LastWeapons ) == 1 ) {
RegisterHamPlayer( Ham_Killed, "Save_Weapons", 0 );
RegisterHamPlayer( Ham_Spawn, "On_Spawn", 1 );
g_LastMenu = menu_create( "\yChoose:", "Menu_Handler" );
menu_additem( g_LastMenu, "\yUse \rLast \ypurchased weapons" );
menu_additem( g_LastMenu, "\yBuy \rNew \yWeapons" );
menu_setprop( g_LastMenu, MPROP_EXIT, MEXIT_NEVER );
}
}
}
public Index_To_String( wep_index, wep_name[], wep_name_chars, ammo_name[], ammo_name_chars ) {
new output[64];
new output2[64];
switch( wep_index ) {
case CSW_AK47: {
formatex( output, charsmax( output ), "weapon_ak47" );
formatex( output2, charsmax( output2 ), "ammo_762nato" );
}
case CSW_AUG: {
formatex( output, charsmax( output ), "weapon_aug" );
formatex( output2, charsmax( output2 ), "ammo_556nato" );
}
case CSW_AWP: {
formatex( output, charsmax( output ), "weapon_awp" );
formatex( output2, charsmax( output2 ), "ammo_338magnum" );
}
case CSW_DEAGLE: {
formatex( output, charsmax( output ), "weapon_deagle" );
formatex( output2, charsmax( output2 ), "ammo_50ae" );
}
case CSW_ELITE: {
formatex( output, charsmax( output ), "weapon_elite" );
formatex( output2, charsmax( output2 ), "ammo_9mm" );
}
case CSW_FAMAS: {
formatex( output, charsmax( output ), "weapon_famas" );
formatex( output2, charsmax( output2 ), "ammo_556nato" );
}
case CSW_FIVESEVEN: {
formatex( output, charsmax( output ), "weapon_fiveseven" );
formatex( output2, charsmax( output2 ), "ammo_57mm" );
}
case CSW_FLASHBANG: {
formatex( output, charsmax( output ), "weapon_flashbang" );
formatex( output2, charsmax( output2 ), "ammo_none" );
}
case CSW_G3SG1: {
formatex( output, charsmax( output ), "weapon_g3sg1" );
formatex( output2, charsmax( output2 ), "ammo_762nato" );
}
case CSW_GALIL: {
formatex( output, charsmax( output ), "weapon_galil" );
formatex( output2, charsmax( output2 ), "ammo_556nato" );
}
case CSW_GLOCK18: {
formatex( output, charsmax( output ), "weapon_glock18" );
formatex( output2, charsmax( output2 ), "ammo_9mm" );
}
case CSW_HEGRENADE: {
formatex( output, charsmax( output ), "weapon_hegrenade" );
formatex( output2, charsmax( output2 ), "ammo_none" );
}
case CSW_M249: {
formatex( output, charsmax( output ), "weapon_m249" );
formatex( output2, charsmax( output2 ), "ammo_556natobox" );
}
case CSW_M3: {
formatex( output, charsmax( output ), "weapon_m3" );
formatex( output2, charsmax( output2 ), "ammo_buckshot" );
}
case CSW_M4A1: {
formatex( output, charsmax( output ), "weapon_m4a1" );
formatex( output2, charsmax( output2 ), "ammo_556nato" );
}
case CSW_MAC10: {
formatex( output, charsmax( output ), "weapon_mac10" );
formatex( output2, charsmax( output2 ), "ammo_45acp" );
}
case CSW_MP5NAVY: {
formatex( output, charsmax( output ), "weapon_mp5navy" );
formatex( output2, charsmax( output2 ), "ammo_9mm" );
}
case CSW_P228: {
formatex( output, charsmax( output ), "weapon_p228" );
formatex( output2, charsmax( output2 ), "ammo_357sig" );
}
case CSW_P90: {
formatex( output, charsmax( output ), "weapon_p90" );
formatex( output2, charsmax( output2 ), "ammo_57mm" );
}
case CSW_SCOUT: {
formatex( output, charsmax( output ), "weapon_scout" );
formatex( output2, charsmax( output2 ), "ammo_762nato" );
}
case CSW_SG550: {
formatex( output, charsmax( output ), "weapon_sg550" );
formatex( output2, charsmax( output2 ), "ammo_556nato" );
}
case CSW_SG552: {
formatex( output, charsmax( output ), "weapon_sg552" );
formatex( output2, charsmax( output2 ), "ammo_556nato" );
}
case CSW_SMOKEGRENADE: {
formatex( output, charsmax( output ), "weapon_smokegrenade" );
formatex( output2, charsmax( output2 ), "ammo_none" );
}
case CSW_TMP: {
formatex( output, charsmax( output ), "weapon_tmp" );
formatex( output2, charsmax( output2 ), "ammo_9mm" );
}
case CSW_UMP45: {
formatex( output, charsmax( output ), "weapon_ump45" );
formatex( output2, charsmax( output2 ), "ammo_45acp" );
}
case CSW_USP: {
formatex( output, charsmax( output ), "weapon_usp" );
formatex( output2, charsmax( output2 ), "ammo_45acp" );
}
case CSW_XM1014: {
formatex( output, charsmax( output ), "weapon_xm1014" );
formatex( output2, charsmax( output2 ), "ammo_buckshot" );
}
}
copy( wep_name, wep_name_chars, output );
copy( ammo_name, ammo_name_chars, output2 );
}
public On_Death( id ) {
new Delay, HUD_Sync, Params[1];
Delay = get_pcvar_num( cvar_Delay );
HUD_Sync = CreateHudSyncObj();
if ( Delay > 0 ) {
set_hudmessage( 255, 255, 255, -1.0, 0.2 );
ShowSyncHudMsg( id, HUD_Sync, "You will spawn in %d seconds", Delay );
Params[0] = id;
set_task(float( Delay ), "Task_Respawn", id, _, _, "a", 1);
g_HasTimer[id] = true;
}
}
public Task_Respawn( id ) {
if ( ! is_user_connected( id ) )
return;
ExecuteHamB( Ham_CS_RoundRespawn, id );
g_HasTimer[id] = false;
return;
}
public Respawn( id ) {
if ( ! is_user_connected( id ) )
return;
if ( is_user_alive( id ) ) {
client_print_color( id, id, "^3*** You can't respawn while you're alive!" );
return;
}
if ( g_HasTimer[id] == true ) {
client_print_color( id, id, "^3*** You will respawn when your timer ticks!" );
return;
}
ExecuteHamB( Ham_CS_RoundRespawn, id );
return;
}
public Save_Weapons(id) {
get_user_weapons( id, g_PlayerWep[id], g_PlayerWepNum[id] );
g_PlayerWepSaved[id] = true;
}
public On_Spawn(id) {
if ( g_PlayerWepSaved[id] == true ) {
menu_display( id, g_LastMenu );
}
}
public Menu_Handler( id, menu, item ) {
if ( ! is_user_connected( id ) || item == MENU_EXIT ) {
return PLUGIN_HANDLED;
}
switch( item ) {
case 0: {
Get_Last_Wep( id );
}
case 1: {
client_cmd( id, "buy" );
}
}
return PLUGIN_HANDLED;
}
Get_Last_Wep( id ) {
if ( g_PlayerWepSaved[id] == true ) {
strip_user_weapons( id );
give_item( id, "weapon_knife" );
new WepNum = g_PlayerWepNum[id];
for( new i = 0; i < WepNum; i++ ) {
new WepName[64], Cur_Index;
new AmmoName[64];
Cur_Index = g_PlayerWep[id][i];
Index_To_String( Cur_Index, WepName, charsmax( WepName ), AmmoName, charsmax( AmmoName ) );
give_item( id, WepName );
if ( g_AmmoCount[Cur_Index] > 1 )
cs_set_user_bpammo( id, Cur_Index, g_AmmoCount[Cur_Index] );
}
g_PlayerWepSaved[id] = false;
}
}