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")
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
}
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 */
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 }
*/
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 );
}
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 );
}
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");
}
}
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;
}
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);
}
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;
}
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 ) ) ] );
}
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;
}
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);
}
}
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);
}
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;
}
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
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;
}
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);
}
}
}
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");
}
}
}
}
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);
}
}
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;
}
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();
}
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;
}
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;
}
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;
}
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]);
}
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;
}
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;
}
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);
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);
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);
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();
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
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);
}
}
}
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
}
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;
}