/* Plugin generated by AMXX-Studio */
/*
Энергетические напитки (в меню)
B - burn
R - redbull
D - raDon
A - adrenaline rush
P - pivo tuborg
V - red deVil
E - empty
Для активации напитков /energetic в чате,
также нужно выдать флаг G - через флаг s в файле users.ini
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <hlstocks>
#define PLUGIN "Energetic_drink"
#define VERSION "2.0"
#define AUTHOR "Gauss"
#define MAXSPEED 290.0
#define MAX_E 200
#define DURATION 20
#define RESPAWNTIME 250.0
#define MODEL_EN "models/w_energetic.mdl"
#define SPAWNSOUND "items/suitchargeok1.wav"
#define NAMECLASS "item_energetic"
#define TRAIL "sprites/zbeam3.spr"
#define SOUNDBURN "misc/we_burn.wav"
#define SOUNDREDBULL "misc/red_bull.wav"
#define SOUNDRADON "weapons/gauss2.wav"
#define SOUNDADRENALINE "misc/adrenaline.wav"
#define SOUNDPIVO "misc/pei_pivo.wav"
#define SOUNDREDDEVIL "misc/the_light.wav"
// Глобальные переменные
new fwd,crent,idedit
new Float:timenow,Float:timenow2 // Таймеры
// Массив неактивных энергетиков
new Array:g_inactives
// Массив для отмены действий
new Array:g_undoent
// Массивы координат и типов энергетиков
new Array:g_origins
new Array:g_energetics
new Array:g_type
new gszFile[128];
new burntime[33];
new redbulltime[33];
new radontime[33];
new adrenalinetime[33];
new pivotime[33];
new pivocount[33];
new reddeviltime[33];
new trail;
new e_class[64];
new g_iGaussFire;
new g_iPrecacheEventId;
const m_pPlayer = 28
const LINUX_OFFSET_WEAPONS = 4
const m_fInSpecialReload = 34
const m_flNextPrimaryAttack = 35
const m_flNextSecondaryAttack = 36
const m_flTimeWeaponIdle = 37
const m_flNextAttack = 148
static GLOW, origin[3]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd( "say /energetic", "CmdCreateEnergetic" );
register_menucmd( register_menuid("EnergeticMenu"), 1023, "handleEnergeticMenu" );
register_menucmd( register_menuid("CreateMenu"), 1023, "handleCreateMenu" );
register_menucmd( register_menuid("EditMenu"), 1023, "handleEditMenu" );
register_touch(NAMECLASS, "player","touching")
register_event("DeathMsg","deathid","a")
RegisterHam(Ham_Spawn,"player","ham_spawn",1)
RegisterHam(Ham_Weapon_PrimaryAttack , "weapon_9mmAR", "mp5_PrimaryAttack_Post", 1)
RegisterHam(Ham_Weapon_SecondaryAttack , "weapon_9mmAR", "mp5_SecondaryAttack_Post", 1)
RegisterHam(Ham_Weapon_PrimaryAttack , "weapon_shotgun", "Shotgun_PrimaryAttack_Post", 1)
RegisterHam(Ham_Weapon_SecondaryAttack , "weapon_shotgun", "Shotgun_SecondaryAttack_Post", 1)
RegisterHam(Ham_Weapon_PrimaryAttack , "weapon_crossbow", "Crossbow_PrimaryAttack_Post", 1)
RegisterHam(Ham_Weapon_PrimaryAttack , "weapon_rpg", "rpg_PrimaryAttack_Post", 1)
RegisterHam(Ham_Weapon_SecondaryAttack , "weapon_gauss", "gauss_SecondaryAttack_Post", 1)
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack",0)
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
unregister_forward(FM_PrecacheEvent, g_iPrecacheEventId, 1);
}
public plugin_cfg()
{
new szDir[64];
new szMap[32];
get_basedir(szDir, 64);
add(szDir, 64, "/energetic_drink");
if (!dir_exists(szDir))
{
mkdir(szDir);
}
get_mapname(szMap, 32);
formatex(gszFile, 96, "%s/%s.ed", szDir, szMap);
server_cmd("sv_maxspeed %f",MAXSPEED)
g_inactives = ArrayCreate(1)
g_undoent = ArrayCreate(1)
g_origins = ArrayCreate(3)
g_energetics = ArrayCreate(1)
g_type = ArrayCreate(1)
LoadED();
}
public plugin_precache()
{
precache_model(MODEL_EN)
precache_sound(SPAWNSOUND)
precache_sound(SOUNDBURN)
precache_sound(SOUNDREDBULL)
precache_sound(SOUNDRADON)
precache_sound(SOUNDADRENALINE)
precache_sound(SOUNDPIVO)
precache_sound(SOUNDREDDEVIL)
trail = precache_model(TRAIL)
g_iPrecacheEventId = register_forward(FM_PrecacheEvent, "fw_PrecacheEvent", 1);
GLOW = precache_model("sprites/hotglow.spr")
}
public fw_PrecacheEvent(iType, const szName[])
{
if (!strcmp(szName, "events/gauss.sc"))
{
g_iGaussFire = get_orig_retval();
}
return FMRES_IGNORED;
}
public CmdCreateEnergetic(id,level,cid)
{
if(!access(id,ADMIN_LEVEL_G)){client_print(id,print_chat,"У вас нет доступа к меню энергетиков (level G)");return 0;}
if(idedit){
new name[32]
get_user_name(idedit,name,31)
set_hudmessage(255, 127, 0, -1.0, 0.60, 0, 6.0, 5.0)
show_hudmessage(id, "Currently editor is %s^nMore is not allowed",name)
client_print(id,print_chat,"^^1Меню энергетиков уже использует %s",name)
return PLUGIN_HANDLED
}
idedit=id
ShowEnergeticMenu( id );
return PLUGIN_HANDLED
}
public ShowEnergeticMenu(id)
{
new menu[1024],keys,len
new count = ArraySize(g_inactives)
if(count<=0)
len = format(menu,sizeof(menu),"Energetic Drink Menu (%i):^n^n",ArraySize(g_energetics));
else
len = format(menu,sizeof(menu),"Energetic Drink Menu (%i): (%i new eneretics)^n^n",ArraySize(g_energetics),ArraySize(g_inactives));
len += format(menu[len],sizeof(menu)-len,"1. Create Energetic Menu^n")
len += format(menu[len],sizeof(menu)-len,"2. Delete Energetic Menu^n^n")
len += format(menu[len],sizeof(menu)-len,"3. Drop to Floor^n^n")
len += format(menu[len],sizeof(menu)-len,"4. Save to file^n^n")
count = ArraySize(g_undoent)
if(count>0)
len += format(menu[len],sizeof(menu)-len,"7. Undo^n^n")
len += format(menu[len],sizeof(menu)-len,"0. Exit^n")
keys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<9 );
if(count>0)
keys |= 1<<6
show_menu(id,keys,menu,-1,"EnergeticMenu")
return PLUGIN_HANDLED;
}
public handleEnergeticMenu( id, key )
{
switch(key + 1)
{
case 1:
{
addent(id)
ShowCreateMenu( id );
}
case 2:
{
ShowEditMenu( id );
}
case 3:
{
DropToFloor(id);
ShowEnergeticMenu( id );
}
case 4:
{
SaveED(id);
ShowEnergeticMenu(id);
}
case 7:
{
UndoEnergetic(id);
ShowEnergeticMenu( id );
}
case 10:
{
exitmenu()
ArrayClear(g_undoent)
idedit = 0
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED;
}
public exitmenu()
{
if(task_exists(33299))
remove_task(33299)
if(fwd)
unregister_forward(FM_PlayerPreThink,fwd)
fwd = 0
if(crent>0){
//engfunc(EngFunc_RemoveEntity,crent)
set_pev(crent,pev_flags,FL_KILLME)
crent = 0
}
}
public ShowCreateMenu(id)
{
new menu[1024],keys,len
len = format(menu,sizeof(menu),"Create Energetic Drink:^n^n");
len += format(menu[len],sizeof(menu)-len,"1. Create Burn drink^n")
len += format(menu[len],sizeof(menu)-len,"2. Create Red Bull drink^n")
len += format(menu[len],sizeof(menu)-len,"3. Create Radon drink^n")
len += format(menu[len],sizeof(menu)-len,"4. Create Adrenaline Rush^n")
len += format(menu[len],sizeof(menu)-len,"5. Create Pivo^n")
len += format(menu[len],sizeof(menu)-len,"6. Create Red Devil drink^n^n")
new count = ArraySize(g_undoent)
if(count>0)
len += format(menu[len],sizeof(menu)-len,"7. Undo^n^n")
len += format(menu[len],sizeof(menu)-len,"0. Back^n")
keys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<9 );
if(count>0)
keys |= 1<<6
show_menu(id,keys,menu,-1,"CreateMenu")
return PLUGIN_HANDLED;
}
public handleCreateMenu( id, key )
{
switch(key + 1)
{
case 1:
{
CreateAimingEnergetic( id,"B" );
ShowCreateMenu( id );
}
case 2:
{
CreateAimingEnergetic( id,"R" );
ShowCreateMenu( id );
}
case 3:
{
CreateAimingEnergetic( id,"D" );
ShowCreateMenu( id );
}
case 4:
{
CreateAimingEnergetic( id,"A" );
ShowCreateMenu( id );
}
case 5:
{
CreateAimingEnergetic( id,"P" );
ShowCreateMenu( id );
}
case 6:
{
CreateAimingEnergetic( id,"V" );
ShowCreateMenu( id );
}
case 7:
{
UndoEnergetic(id);
ShowCreateMenu( id );
}
case 10:
{
exitmenu()
ShowEnergeticMenu( id );
}
}
return PLUGIN_HANDLED;
}
public ShowEditMenu(id)
{
if(!fwd)
fwd = register_forward(FM_PlayerPreThink,"fw_EditPreThink")
else{
unregister_forward(FM_PlayerPreThink,fwd)
fwd = register_forward(FM_PlayerPreThink,"fw_EditPreThink")
}
new menu[1024],keys,len
len = format(menu,sizeof(menu),"Delete Energetic Menu:^n^n");
len += format(menu[len],sizeof(menu)-len,"1. Delete Energetic^n^n")
len += format(menu[len],sizeof(menu)-len,"0. Exit^n")
keys = ( 1<<0 | 1<<9 );
show_menu(id,keys,menu,-1,"EditMenu")
return PLUGIN_HANDLED;
}
public handleEditMenu( id, key )
{
switch(key + 1)
{
case 1:
{
DeleteEnergetic( id );
ShowEditMenu( id );
}
case 10:
{
exitmenu()
ShowEnergeticMenu( id );
}
}
return PLUGIN_HANDLED;
}
public addent(id){
if(fwd||crent){
//engfunc(EngFunc_RemoveEntity,crent)
set_pev(crent,pev_flags,FL_KILLME)
crent = 0
unregister_forward(FM_PlayerPreThink,fwd)
}
new orig[3],Float:origin[3]
get_user_origin(id,orig,3)
origin[0] = float(orig[0])
origin[1] = float(orig[1])
origin[2] = float(orig[2])
crent = CreateEnergetic(origin,"E",0,0);
fwd = register_forward(FM_PlayerPreThink,"fw_PlayerPreThink")
}
public DropToFloor(id)
{
new i,cell
for(i = 0;i<ArraySize(g_inactives);i++)
{
cell = ArrayGetCell(g_inactives,i)
if(pev_valid(cell))
{
SetReal(cell)
emit_sound(cell,CHAN_ITEM,SPAWNSOUND,0.2,1.0,0,170)
}
}
if(id>0)
client_print(id,print_chat,"%i Энергетиков стали активными",ArraySize(g_inactives))
ArrayClear(g_inactives)
}
//Thinks
public fw_PlayerPreThink(id){
if(!crent){
unregister_forward(FM_PlayerPreThink,fwd)
return FMRES_HANDLED
}
if(idedit!=id)
return FMRES_HANDLED
new orig[3],Float:origin[3]
get_user_origin(id,orig,3)
origin[0] = float(orig[0])
origin[1] = float(orig[1])
origin[2] = float(orig[2])
origin[2] = origin[2]+12.0
set_pev(crent,pev_origin,origin)
timenow2 = get_gametime()
if((timenow2-timenow)>0.1)////////////////////////////////////////////////////////////////////////////////////////////////
{
timenow = timenow2
set_hudmessage(220, 180, 40, 0.01, 0.12, 0, 6.0, 0.1,_,_,1)
show_hudmessage(id,"Create Energetic^nCurrent Origins: [%.1f] [%.1f] [%.1f]",origin[0],origin[1],origin[2])
return FMRES_IGNORED
}
return FMRES_IGNORED
}
public fw_EditPreThink(id){
if(idedit!=id)
return FMRES_IGNORED
timenow2 = get_gametime()
if((timenow2-timenow)>0.05)
timenow = timenow2
else
return FMRES_IGNORED
new target = get_aiment(id)
if(target)
{
new classname[32],Float:origin[3],Float:angle[3]
new szType[48]
szType = get_type_string(target)
pev(target,pev_classname,classname,31)
pev(target,pev_origin,origin)
pev(target,pev_angles,angle)
set_hudmessage(0, 255, 0, 0.01, 0.14, 0, 6.0, 0.3,_,_,1)
show_hudmessage(id, "Entity Editor^nID: %d [%s] [%s]^nOrigin: [%.1f] [%.1f] [%.1f]",target,classname,szType,origin[0],origin[1],origin[2])
set_ren(target)
}
return FMRES_IGNORED
}
public touching(ent,id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED
new Float:vOrigin[3]
new type[2]
new arg[4]
new arg2[1]
entity_get_vector(ent,EV_VEC_origin,vOrigin)
type = get_type_from_ent(ent)
new orig[3]
FVecIVec(vOrigin,orig)
arg[0]=orig[0]
arg[1]=orig[1]
arg[2]=orig[2]
arg[3]=type[0]
arg2[0]=id
if(!pev(ent,pev_iuser1))
{
set_task(RESPAWNTIME,"RespawnEnergetic",0,arg,31,"a",1)
if(type[0]=='B')
{
burntime[id]=DURATION
screenfade(id,255,0,0)
emit_sound(id,CHAN_AUTO,SOUNDBURN,1.0,1.0,0,100)
set_task(0.0,"BurnWork",0,arg2,31,"a",1);
give_item(id,"weapon_9mmAR")
client_cmd(id,"weapon_9mmAR")
hl_set_user_bpammo(id,4,250)
hl_set_user_bpammo(id,5,15)
new ee = hl_get_user_weapon_ent(id)
if(pev_valid(ee))
if(hl_get_weapon_id(ee)==HLW_MP5)
hl_set_weapon_ammo(ee, 100)
}
if(type[0]=='R')
{
redbulltime[id]=DURATION
screenfade(id,0,0,255)
emit_sound(id,CHAN_AUTO,SOUNDREDBULL,1.0,1.0,0,100)
set_task(0.0,"RedBullWork",0,arg2,31,"a",1);
}
if(type[0]=='D')
{
radontime[id]=DURATION
emit_sound(id,CHAN_AUTO,SOUNDRADON,0.7,1.0,0,70)
screenfade(id,255,160,70)
//client_cmd(id,"spk radiation")
set_task(0.0,"RadonWork",0,arg2,31,"a",1);
give_item(id,"weapon_gauss")
client_cmd(id,"weapon_gauss")
hl_set_user_bpammo(id,9,191)
get_user_origin(id,origin)
glowing(id,origin)
}
if(type[0]=='A')
{
adrenalinetime[id]=DURATION
emit_sound(id,CHAN_AUTO,SOUNDADRENALINE,1.0,1.0,0,100)
screenfade(id,210,20,20)
set_task(0.0,"AdrenalineWork",0,arg2,31,"a",1);
give_item(id,"weapon_shotgun")
client_cmd(id,"weapon_shotgun")
new ee = hl_get_user_weapon_ent(id)
if(pev_valid(ee))
if(hl_get_weapon_id(ee)==HLW_SHOTGUN)
hl_set_weapon_ammo(ee, 8)
}
if(type[0]=='P')
{
pivotime[id]=DURATION
emit_sound(id,CHAN_AUTO,SOUNDPIVO,1.0,1.0,0,100)
screenfade(id,80,255,40)
set_task(0.0,"PivoWork",0,arg2,31,"a",1);
give_item(id,"weapon_crossbow")
client_cmd(id,"weapon_crossbow")
hl_set_user_bpammo(id,6,60)
new ee = hl_get_user_weapon_ent(id)
if(pev_valid(ee))
if(hl_get_weapon_id(ee)==HLW_CROSSBOW)
hl_set_weapon_ammo(ee, 10)
}
if(type[0]=='V')
{
reddeviltime[id]=DURATION
emit_sound(id,CHAN_AUTO,SOUNDREDDEVIL,1.0,1.0,0,100)
screenfade(id,160,160,160)
set_task(0.0,"RedDevilWork",0,arg2,31,"a",1);
give_item(id,"weapon_rpg")
client_cmd(id,"weapon_rpg")
hl_set_user_bpammo(id,8,10)
new ee = hl_get_user_weapon_ent(id)
if(pev_valid(ee))
if(hl_get_weapon_id(ee)==HLW_RPG)
hl_set_weapon_ammo(ee, 5)
}
}
set_pev(ent,pev_iuser1,1)
set_pev(ent,pev_flags,FL_KILLME)
return PLUGIN_HANDLED
}
public CreateAimingEnergetic(id,type[2])
{
if(!crent){
set_hudmessage(255, 0, 0, -1.0, 0.60, 0, 6.0, 12.0)
show_hudmessage(id, "Adding Failed, no enitity is selected")
if(fwd)
unregister_forward(FM_PlayerPreThink,fwd)
return
}
new Float:vOrigin[ 3 ];
pev(crent,pev_origin,vOrigin)
new ent = CreateEnergetic(vOrigin,type,0,0);
ArrayPushArray(g_origins,vOrigin)
ArrayPushCell(g_inactives,ent)
ArrayPushCell(g_undoent,ent)
ArrayPushCell(g_energetics,ent)
new tp = get_index_of_type(type)
ArrayPushCell(g_type,tp)
AddedMessage(id,type,vOrigin)
}
public CreateEnergetic(Float:vOrigin[3],type[2],sound,enable)
{
new iEntity = create_entity( "info_target" );
if( is_valid_ent( iEntity ) )
{
entity_set_string( iEntity, EV_SZ_classname, NAMECLASS );
entity_set_model(iEntity,MODEL_EN)
switch(type[0])
{
case 'B': set_pev(iEntity,pev_skin,0)
case 'R': set_pev(iEntity,pev_skin,1)
case 'D': set_pev(iEntity,pev_skin,2)
case 'A': set_pev(iEntity,pev_skin,3)
case 'P': set_pev(iEntity,pev_skin,4)
case 'V': set_pev(iEntity,pev_skin,5)
case 'E': set_pev(iEntity,pev_skin,6)
}
new Float:vSizeMin[3],Float:vSizeMax[3];
vSizeMin = Float:{-5.0,-5.0,-8.0};
vSizeMax = Float:{5.0,5.0,8.0};
entity_set_size( iEntity, vSizeMin, vSizeMax );
new Float:vAngles[3];
pev(iEntity,pev_angles,vAngles)
vAngles[0]=floatadd(vAngles[0],90.0)
set_pev(iEntity,pev_angles,vAngles);
if(enable)
SetReal(iEntity)
else
SetHolo(iEntity)
entity_set_origin( iEntity, vOrigin );
if(sound) emit_sound(iEntity,CHAN_ITEM,SPAWNSOUND,0.6,1.0,0,170)
return iEntity;
}
return 0;
}
public AddedMessage(id,type[2],Float:vOrigin[3])
{
new text[48]
switch(type[0])
{
case 'B': format(text,48,"^^1 Burn ^^9")
case 'R': format(text,48,"^^5 Red Bull ^^9")
case 'D': format(text,48,"^^3 Radon ^^9")
case 'A': format(text,48,"^^6 Adrenaline Rush ^^9")
case 'P': format(text,48,"^^2 Tuborg ^^9")
case 'V': format(text,48,"^^7 Red Devil ^^9")
}
new message[128]
format(message,128,"[Energetic] Создан энергетик %s ^^8[%.1f] [%.1f] [%.1f]",text,vOrigin[0],vOrigin[1],vOrigin[2])
client_print(id,print_chat,message)
}
public DeletedMessage(id,type[2],Float:vOrigin[3])
{
new text[48]
switch(type[0])
{
case 'B': format(text,48,"^^1 Burn ^^9")
case 'R': format(text,48,"^^5 Red Bull ^^9")
case 'D': format(text,48,"^^3 Radon ^^9")
case 'A': format(text,48,"^^6 Adrenaline Rush ^^9")
case 'P': format(text,48,"^^2 Tuborg ^^9")
case 'V': format(text,48,"^^7 Red Devil ^^9")
}
new message[128]
format(message,128,"[Energetic] Удалён энергетик %s ^^8[%.1f] [%.1f] [%.1f]",text,vOrigin[0],vOrigin[1],vOrigin[2])
client_print(id,print_chat,message)
}
public UndoEnergetic(id)
{
if(ArraySize(g_undoent)>0)
{
new cell = ArrayGetCell(g_undoent,ArraySize(g_undoent)-1)
new Float:vOrigin[3]
if(ArraySize(g_origins)>0)
ArrayGetArray(g_origins,ArraySize(g_origins)-1,vOrigin)
if(pev_valid(cell))
{
set_pev(cell,pev_flags,FL_KILLME)
}
ArrayDeleteItem(g_undoent,ArraySize(g_undoent)-1)
ArrayDeleteItem(g_origins,ArraySize(g_origins)-1)
ArrayDeleteItem(g_energetics,ArraySize(g_energetics)-1)
ArrayDeleteItem(g_type,ArraySize(g_type)-1)
if(ArraySize(g_inactives)>0)
ArrayDeleteItem(g_inactives,ArraySize(g_inactives)-1)
client_print(id,print_chat,"^^1Удалён энергетик ^^8[%.1f] [%.1f] [%.1f]",vOrigin[0],vOrigin[1],vOrigin[2])
}
else
{
client_print(id,print_chat,"Не было создано энергетиков")
}
}
public DeleteEnergetic(id)
{
new delent = get_aiment(id)
if (delent)
{
new Float:vOrigin[3]
pev(delent,pev_origin,vOrigin)
new type[2]
new tp,cell
new ind = contain_in_array(g_energetics,delent)
if(ind>=0)
{
cell = ArrayGetCell(g_type,ind)
if(cell)
tp = cell
ArrayDeleteItem(g_origins,ind)
ArrayDeleteItem(g_energetics,ind)
ArrayDeleteItem(g_type,ind)
}
type = get_type_of_index(tp)
set_pev(delent, pev_flags, FL_KILLME)
DeletedMessage(id,type,vOrigin)
ind = contain_in_array(g_undoent,delent)
if(ind>=0)
ArrayDeleteItem(g_undoent,ind)
}
else
{
set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
show_hudmessage(id, "No aiment founded")
client_print(id,print_chat,"^^1Не найдено энергетиков")
//client_print(id,print_chat,"g_orig: %i g_energ: %i g_undo: %i g_inact: %i",ArraySize(g_origins),ArraySize(g_energetics),ArraySize(g_undoent),ArraySize(g_inactives))
}
}
public get_type_string(iEnt)
{
new Type[48]
new skin
skin = pev(iEnt,pev_skin)
switch(skin)
{
case 0: format(Type,48,"Burn")
case 1: format(Type,48,"Red Bull")
case 2: format(Type,48,"Radon")
case 3: format(Type,48,"Adrenaline Rush")
case 4: format(Type,48,"Tuborg")
case 5: format(Type,48,"Red Devil")
}
return Type
}
public get_type_from_ent(iEnt)
{
new type[2]
new skin
skin = pev(iEnt,pev_skin)
switch(skin)
{
case 0: format(type,2,"B")
case 1: format(type,2,"R")
case 2: format(type,2,"D")
case 3: format(type,2,"A")
case 4: format(type,2,"P")
case 5: format(type,2,"V")
}
return type
}
public get_index_of_type(type[2])
{
switch(type[0])
{
case 'B': return 0
case 'R': return 1
case 'D': return 2
case 'A': return 3
case 'P': return 4
case 'V': return 5
}
return PLUGIN_HANDLED
}
public get_type_of_index(index)
{
new type[2]
switch(index)
{
case 0: format(type,2,"B")
case 1: format(type,2,"R")
case 2: format(type,2,"D")
case 3: format(type,2,"A")
case 4: format(type,2,"P")
case 5: format(type,2,"V")
}
return type
}
public contain_in_array(Array:arr,iEnt)
{
new cell = 0
new i
new bool:ok = false
for(i=0;i<ArraySize(arr);i++)
{
cell = ArrayGetCell(arr,i)
if(cell==iEnt)
{
ok = true
break;
}
}
if(ok) {
return i
}
return -1
}
stock traceline( const Float:vStart[3], const Float:vEnd[3], const pIgnore, Float:vHitPos[3] ){
engfunc( EngFunc_TraceLine, vStart, vEnd, 0, pIgnore, 0 )
get_tr2( 0, TR_vecEndPos, vHitPos )
return get_tr2( 0, TR_pHit )
}
stock get_view_pos( const id, Float:vViewPos[3] ){
new Float:vOfs[3]
pev( id, pev_origin, vViewPos )
pev( id, pev_view_ofs, vOfs )
vViewPos[0] += vOfs[0]
vViewPos[1] += vOfs[1]
vViewPos[2] += vOfs[2]
}
stock Float:vel_by_aim( id, speed = 1 ){
new Float:v1[3], Float:vBlah[3]
pev( id, pev_v_angle, v1 )
engfunc( EngFunc_AngleVectors, v1, v1, vBlah, vBlah )
v1[0] *= speed
v1[1] *= speed
v1[2] *= speed
return v1
}
stock get_aiment(id){
new target
new Float:orig[3], Float:ret[3]
get_view_pos( id, orig )
ret = vel_by_aim( id, 9999 )
ret[0] += orig[0]
ret[1] += orig[1]
ret[2] += orig[2]
target = traceline( orig, ret, id, ret )
new movetype
if( target && pev_valid( target ) )
{
movetype = pev( target, pev_movetype )
if( !( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS ) )
return 0
}
else
{
target = 0
new ent = engfunc( EngFunc_FindEntityInSphere, -1, ret, 10.0 )
while( !target && ent > 0 )
{
movetype = pev( ent, pev_movetype )
if( ( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS )
&& ent != id )
target = ent
ent = engfunc( EngFunc_FindEntityInSphere, ent, ret, 10.0 )
}
}
if(0<target<=get_maxplayers())
return 0
new classname[32]
pev(target,pev_classname,classname,31)
if(!equal(classname,NAMECLASS))
return 0
return target
}
stock find_ent_at_origin(classname[],Float:origin[3]){
new ent = engfunc(EngFunc_FindEntityByString,ent,"classname",classname)
new Float:corg[3]
pev(ent,pev_origin,corg)
while(origin[0]!=corg[0]||origin[1]!=corg[1]&&ent){
ent = engfunc(EngFunc_FindEntityByString,ent,"classname",classname)
pev(ent,pev_origin,corg)
}
return ent
}
public glowing(id,origin[3])
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPRITETRAIL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_short(GLOW)
write_byte(70)
write_byte(10)
write_byte(4)
write_byte(80)
write_byte(30)
message_end()
}
public screenfade(id,r,g,b)
{
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
write_short(25)
write_short(25)
write_short(9)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(120)
message_end()
}
public BurnWork(arg[])
{
new id=arg[0]
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(0<burntime[id]<=DURATION)
{
burntime[id]--
server_cmd("sv_maxspeed 1000")
for(new i=1;i<get_maxplayers();i++)
{
if((is_user_connected(i))&&(is_user_alive(i)))
{
if(DURATION>=burntime[i]>0)
{
set_user_maxspeed(i,550.0)
trail_user(i,255,0,0,1)
new ee = hl_get_user_weapon_ent(id)
if(pev_valid(ee))
if(hl_get_weapon_id(ee)==HLW_MP5)
hl_set_weapon_ammo(ee, 100)
}
if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
{
if(get_user_godmode(i)==0)
{
set_user_maxspeed(i,MAXSPEED)
}
}
}
}
new armor = get_user_armor(id)
if(armor<=(MAX_E-2)) set_user_armor(id,armor + 2)
set_hudmessage(255,0,0,-1.0,0.6,1,1.0,1.0,0.1,0.1,-1)
show_hudmessage(id,"BURN : %d..",burntime[id])
set_task(1.0,"BurnWork",0,arg,31,"a",1);
}
else
{
client_print(id,print_chat,"Действие Burn закончилось")
burntime[id]=0
if(get_user_godmode(id)==0)
{
set_user_gravity(id,1.0)
set_user_maxspeed(id,MAXSPEED)
trail_user(id,0,0,0,0)
}
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}
public RedBullWork(arg[])
{
new id=arg[0]
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(0<redbulltime[id]<=DURATION)
{
redbulltime[id]--
server_cmd("sv_maxspeed 1000")
for(new i=1;i<get_maxplayers();i++)
{
if((is_user_connected(i))&&(is_user_alive(i)))
{
if(DURATION>=redbulltime[i]>0)
{
if(!burntime[i])set_user_maxspeed(i,400.0)
set_user_gravity(i,0.4)
trail_user(i,0,0,255,1)
}
if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
{
if(get_user_godmode(i)==0)
{
set_user_maxspeed(i,MAXSPEED)
}
}
}
}
new health = get_user_health(id)
if(health<=(MAX_E-2)) set_user_health(id,health + 2)
set_hudmessage(0,0,255,-1.0,0.65,1,1.0,1.0,0.1,0.1,-1)
show_hudmessage(id,"RED BULL : %d..",redbulltime[id])
set_task(1.0,"RedBullWork",0,arg,31,"a",1);
}
else
{
client_print(id,print_chat,"Действие Red Bull закончилось")
redbulltime[id]=0
if(get_user_godmode(id)==0)
{
set_user_gravity(id,1.0)
set_user_maxspeed(id,MAXSPEED)
trail_user(id,0,0,0,0)
}
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}
public RadonWork(arg[])
{
new id=arg[0]
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(0<radontime[id]<=DURATION)
{
radontime[id]--
server_cmd("sv_maxspeed 1000")
for(new i=1;i<get_maxplayers();i++)
{
if((is_user_connected(i))&&(is_user_alive(i)))
{
if(DURATION>=radontime[i]>0)
{
set_user_maxspeed(i,400.0)
trail_user(i,255,160,70,1)
hl_set_user_bpammo(id,9,111)
}
if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
{
if(get_user_godmode(i)==0)
{
set_user_maxspeed(i,MAXSPEED)
}
}
}
}
new armor = get_user_armor(id)
if(armor<=(MAX_E-1)) set_user_armor(id,armor + 1)
new health = get_user_health(id)
if(health<=(MAX_E-1)) set_user_health(id,health + 1)
set_hudmessage(255,128,0,-1.0,0.625,1,1.0,1.0,0.1,0.1,-1)
show_hudmessage(id,"RADON : %d..",radontime[id])
set_task(1.0,"RadonWork",0,arg,31,"a",1);
}
else
{
client_print(id,print_chat,"Действие Radon закончилось")
radontime[id]=0
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(get_user_godmode(id)==0)
{
set_user_gravity(id,1.0)
set_user_maxspeed(id,MAXSPEED)
trail_user(id,0,0,0,0)
}
}
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}
public AdrenalineWork(arg[])
{
new id=arg[0]
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(0<adrenalinetime[id]<=DURATION)
{
adrenalinetime[id]--
server_cmd("sv_maxspeed 1000")
for(new i=1;i<get_maxplayers();i++)
{
if((is_user_connected(i))&&(is_user_alive(i)))
{
if(DURATION>=adrenalinetime[i]>0)
{
set_user_maxspeed(i,600.0)
trail_user(i,255,20,20,1)
new ee = hl_get_user_weapon_ent(id)
if(pev_valid(ee))
if(hl_get_weapon_id(ee)==HLW_SHOTGUN)
hl_set_weapon_ammo(ee, 8)
}
if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
{
if(get_user_godmode(i)==0)
{
set_user_maxspeed(i,MAXSPEED)
}
}
}
}
new armor = get_user_armor(id)
if(armor<=(MAX_E-2)) set_user_armor(id,armor + 2)
new health = get_user_health(id)
if(health<=(MAX_E-2)) set_user_health(id,health + 2)
set_hudmessage(255,20,20,-1.0,0.675,1,1.0,1.0,0.1,0.1,-1)
show_hudmessage(id,"ADRENALINE : %d..",adrenalinetime[id])
set_task(1.0,"AdrenalineWork",0,arg,31,"a",1);
}
else
{
client_print(id,print_chat,"Действие Adrenaline закончилось")
adrenalinetime[id]=0
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(get_user_godmode(id)==0)
{
set_user_gravity(id,1.0)
set_user_maxspeed(id,MAXSPEED)
trail_user(id,0,0,0,0)
}
}
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}
public PivoWork(arg[])
{
new id=arg[0]
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(0<pivotime[id]<=DURATION)
{
pivotime[id]--
server_cmd("sv_maxspeed 1000")
for(new i=1;i<get_maxplayers();i++)
{
if((is_user_connected(i))&&(is_user_alive(i)))
{
if(DURATION>=pivotime[i]>0)
{
set_user_maxspeed(i,400.0)
trail_user(i,0,255,0,1)
new ee = hl_get_user_weapon_ent(id)
if(pev_valid(ee))
if(hl_get_weapon_id(ee)==HLW_CROSSBOW)
hl_set_weapon_ammo(ee, 10)
}
if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
{
if(get_user_godmode(i)==0)
{
set_user_maxspeed(i,MAXSPEED)
}
}
}
}
pivocount[id]+=1
if(pivocount[id]>=2)
pivocount[id] = 0
new armor = get_user_armor(id)
new health = get_user_health(id)
if(pivocount[id]==1)
{
if(armor<=(MAX_E-7)) set_user_armor(id,armor + 7)
if(health<=(MAX_E-7)) set_user_health(id,health + 7)
}
if(pivocount[id]==0)
{
if(armor<=(MAX_E)) set_user_armor(id,armor - 5)
if(health<=(MAX_E)) set_user_health(id,health - 5)
}
set_hudmessage(0,255,0,-1.0,0.7,1,1.0,1.0,0.1,0.1,-1)
show_hudmessage(id,"TUBORG : %d..",pivotime[id])
set_task(1.0,"PivoWork",0,arg,31,"a",1);
}
else
{
client_print(id,print_chat,"Действие Tuborg закончилось")
pivotime[id]=0
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(get_user_godmode(id)==0)
{
set_user_gravity(id,1.0)
set_user_maxspeed(id,MAXSPEED)
trail_user(id,0,0,0,0)
}
}
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}
public RedDevilWork(arg[])
{
new id=arg[0]
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(0<reddeviltime[id]<=DURATION)
{
reddeviltime[id]--
server_cmd("sv_maxspeed 1000")
for(new i=1;i<get_maxplayers();i++)
{
if((is_user_connected(i))&&(is_user_alive(i)))
{
if(DURATION>=reddeviltime[i]>0)
{
set_user_maxspeed(i,400.0)
trail_user(i,90,90,90,1)
new ee = hl_get_user_weapon_ent(id)
if(pev_valid(ee))
if(hl_get_weapon_id(ee)==HLW_RPG)
hl_set_weapon_ammo(ee, 5)
}
if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
{
if(get_user_godmode(i)==0)
{
set_user_maxspeed(i,MAXSPEED)
}
}
}
}
new armor = get_user_armor(id)
if(armor<=(MAX_E-2)) set_user_armor(id,armor + 2)
new health = get_user_health(id)
if(health<=(MAX_E-2)) set_user_health(id,health + 2)
set_hudmessage(90,90,90,-1.0,0.725,1,1.0,1.0,0.1,0.1,-1)
show_hudmessage(id,"RED DEVIL : %d..",reddeviltime[id])
set_task(1.0,"RedDevilWork",0,arg,31,"a",1);
}
else
{
client_print(id,print_chat,"Действие Red Devil закончилось")
reddeviltime[id]=0
if((is_user_connected(id))&&(is_user_alive(id)))
{
if(get_user_godmode(id)==0)
{
set_user_gravity(id,1.0)
set_user_maxspeed(id,MAXSPEED)
trail_user(id,0,0,0,0)
}
}
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}
public trail_user(id,r,g,b,on)
{
new dur;
if (on)
{
dur=14
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(id)
write_short(trail)
write_byte(dur)
write_byte(8)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(255)
message_end()
}
else
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_KILLBEAM);
write_short(id); // entity
message_end();
}
}
public deathid()
{
new iVictim = read_data(2)
burntime[iVictim]=0
redbulltime[iVictim]=0
radontime[iVictim]=0
adrenalinetime[iVictim]=0
pivotime[iVictim]=0
if((1<=iVictim<=32)&&is_user_connected(iVictim))
{
set_user_maxspeed(iVictim,MAXSPEED)
set_user_gravity(iVictim,1.0)
trail_user(iVictim,0,0,0,0)
}
}
public ham_spawn(id)
{
burntime[id]=0
redbulltime[id]=0
radontime[id]=0
adrenalinetime[id]=0
pivotime[id]=0
reddeviltime[id]=0
new arg[1]
arg[0]=id
set_task(0.1,"resetm",0,arg,31,"a",1)
}
public resetm(arg[])
{
new id=arg[0]
if((1<=id<=32)&&is_user_connected(id))
{
set_user_maxspeed(id,MAXSPEED)
set_user_gravity(id,1.0)
}
}
public RespawnEnergetic(arg[])
{
new Float:vOrigin[3]
new type[2]
new orig[3]
orig[0]=arg[0]
orig[1]=arg[1]
orig[2]=arg[2]
IVecFVec(orig,vOrigin)
type[0]=arg[3]
CreateEnergetic(vOrigin,type,1,1)
}
public set_ren(ent){
if(!pev_valid(ent))
return PLUGIN_HANDLED
if(task_exists(ent+13872))
return PLUGIN_HANDLED
set_pev(ent,pev_renderfx,kRenderFxGlowShell)
set_pev(ent,pev_rendermode,kRenderNormal)
set_pev(ent,pev_rendercolor,{128.0,255.0,0.0})
set_pev(ent,pev_renderamt,64.0)
set_task(0.1,"res_ren",ent+13872)
return PLUGIN_CONTINUE
}
public res_ren(ent){
if(!pev_valid(ent-13872))
return PLUGIN_HANDLED
set_pev(ent-13872,pev_rendermode,kRenderNormal)
set_rendering( ent-13872, kRenderFxGlowShell, random(200), random(200), random(200), kRenderNormal,5);
return PLUGIN_CONTINUE
}
public SetHolo(ent)
{
set_pev(ent,pev_renderfx,kRenderFxPulseFastWide)
set_pev(ent,pev_rendermode,kRenderTransAlpha)
set_pev(ent,pev_renderamt,210.0)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
set_pev(ent,pev_nextthink,0.0)
set_pev(ent,pev_solid,SOLID_NOT)
}
public SetReal(ent)
{
set_pev(ent,pev_movetype,MOVETYPE_TOSS)
set_pev(ent,pev_nextthink,1.0)
set_pev(ent,pev_solid,SOLID_TRIGGER)
set_pev(ent,pev_renderfx,kRenderFxNone)
set_rendering( ent, kRenderFxGlowShell, random(200), random(200), random(200), kRenderNormal,5);
}
public SaveED(id)
{
if(!access(id,ADMIN_LEVEL_G)){client_print(id,print_chat,"У вас нет доступа к меню энергетиков (level G)");return 0;}
if(ArraySize(g_energetics)<=0)
{
client_print(id,print_chat,"На карте нет энергетиков")
return 0;
}
new Float:vOrigin[3];
new szData[128];
new type[2];
//open file for writing
new file = fopen(gszFile, "wt");
new cell = 0
new index = -1
new tp
for (new i=0;i<ArraySize(g_energetics);i++)
{
cell = ArrayGetCell(g_energetics,i)
if(cell)
{
index = contain_in_array(g_energetics,cell)
if(index>=0)
ArrayGetArray(g_origins,index,vOrigin)
tp = ArrayGetCell(g_type,index)
type = get_type_of_index(tp)
//format info and save it to file
formatex(szData, 128, "%c %.1f %.1f %.1f^n", type[0], vOrigin[0], vOrigin[1], vOrigin[2]);
fputs(file, szData);
}
}
//get players name
new szName[32];
get_user_name(id, szName, 32);
//notify all admins that the player saved to file
for (new i = 1; i <= 32; ++i)
{
//make sure player is connected
if (is_user_connected(i))
{
if (access(i,ADMIN_LEVEL_G))
{
client_print(i, print_chat, "%s сохранил %d энергетиков в файл!", szName, ArraySize(g_energetics));
}
}
}
fclose(file);
return true;
}
public LoadED()
{
if (file_exists(gszFile))
{
new szData[128];
new oX[13], oY[13], oZ[13];
new type[2]
new Float:vOrigin[3];
//new Count = 0;
//open the file for reading
new file = fopen(gszFile, "rt");
//iterate through all the lines in the file
while (!feof(file))
{
fgets(file, szData, 128);
if(equal(szData,""))continue;
parse(szData, type, 2, oX, 12, oY, 12, oZ, 12);
vOrigin[0] = str_to_float(oX);
vOrigin[1] = str_to_float(oY);
vOrigin[2] = str_to_float(oZ);
vOrigin[2] = floatadd(vOrigin[2],8.0)
new iEnt = CreateEnergetic(vOrigin,type,0,1)
ArrayPushArray(g_origins,vOrigin)
ArrayPushCell(g_energetics,iEnt)
new tp = get_index_of_type(type)
ArrayPushCell(g_type,tp)
}
fclose(file);
}
}
public mp5_PrimaryAttack_Post (const mp5)
{
if(mp5<=0)
return;
new player = get_pdata_cbase(mp5, m_pPlayer, LINUX_OFFSET_WEAPONS)
if(DURATION>=burntime[player]>0)
{
set_pdata_float(mp5, m_flNextPrimaryAttack , 0.05, LINUX_OFFSET_WEAPONS)
set_pdata_float(mp5, m_flNextSecondaryAttack, 0.2, LINUX_OFFSET_WEAPONS)
}
else
{
set_pdata_float(mp5, m_flNextPrimaryAttack , 0.1, LINUX_OFFSET_WEAPONS)
set_pdata_float(mp5, m_flNextSecondaryAttack, 0.2, LINUX_OFFSET_WEAPONS)
}
}
public mp5_SecondaryAttack_Post (const mp5)
{
if(mp5<=0)
return;
new player = get_pdata_cbase(mp5, m_pPlayer, LINUX_OFFSET_WEAPONS)
if(DURATION>=burntime[player]>0)
{
set_pdata_float(mp5, m_flNextPrimaryAttack , 0.05, LINUX_OFFSET_WEAPONS)
set_pdata_float(mp5, m_flNextSecondaryAttack, 0.2, LINUX_OFFSET_WEAPONS)
}
else
{
set_pdata_float(mp5, m_flNextPrimaryAttack , 0.1, LINUX_OFFSET_WEAPONS)
set_pdata_float(mp5, m_flNextSecondaryAttack, 0.7, LINUX_OFFSET_WEAPONS)
}
}
public gauss_SecondaryAttack_Post (const gauss)
{
if(gauss<=0)
return;
new player = get_pdata_cbase(gauss, m_pPlayer, LINUX_OFFSET_WEAPONS)
if(DURATION>=radontime[player]>0)
{
set_pdata_float( gauss, m_flTimeWeaponIdle , 0.01, LINUX_OFFSET_WEAPONS)
set_pdata_float( gauss, m_flNextPrimaryAttack , 0.01, LINUX_OFFSET_WEAPONS)
set_pdata_float( gauss, m_flNextSecondaryAttack, 0.01, LINUX_OFFSET_WEAPONS)
}
}
//�������� ������
public fw_TraceAttack(victim, inflictor, Float:damage, Float:direction[3], traceresultt, damagebits)
{
if(!(1 <= inflictor <= 32))
return HAM_IGNORED
if(DURATION>=radontime[inflictor]>0)
{
entity_get_string(inflictor, EV_SZ_classname, e_class, 63)
//gauss
if((equal(e_class,"player")&&get_user_weapon(inflictor)==9)||(equal(e_class,"weapon_gauss")))
{
SetHamParamFloat(3, damage * 3)
}
}
return HAM_HANDLED;
}
//������ �� ������
public fw_PlaybackEvent(iFlags, iInvoker, iEventIndex, Float: flDelay, Float: flOrigin, Float: flAngles, Float: flfParam1, Float: flfParam2, iParam1, iParam2, bParam1, bParam2)
{
if(!(1 <= iInvoker <= 32))
return FMRES_IGNORED
if(DURATION>=radontime[iInvoker]>0)
{
if (iEventIndex == g_iGaussFire && !flDelay && !bParam1)
{
new Float: flvForward[3];
new Float: flGaussVelocity[3];
new Float: flPlayerVelocity[3];
// Get the forward direction
global_get(glb_v_forward, flvForward);
// Get current player velocity
pev(iInvoker, pev_velocity, flPlayerVelocity);
// Get native gauss velocity with multiplier from HLSDK
xs_vec_mul_scalar(flvForward, flfParam1 * 5.0, flGaussVelocity);
// Calculate player velocity before gauss shot
xs_vec_add(flPlayerVelocity, flGaussVelocity, flPlayerVelocity);
// Get new gauss velocity with our multiplier
xs_vec_mul_scalar(flvForward, flfParam1 * 15.0, flGaussVelocity);
// Calculate player new velocity
xs_vec_sub(flPlayerVelocity, flGaussVelocity, flPlayerVelocity);
// Set player velocity
set_pev(iInvoker, pev_velocity, flPlayerVelocity);
}
}
return FMRES_IGNORED;
}
//drob
public Shotgun_PrimaryAttack_Post (const shotgun)
{
if(shotgun<=0)
return;
new player = get_pdata_cbase(shotgun, m_pPlayer, LINUX_OFFSET_WEAPONS)
if(DURATION>=adrenalinetime[player]>0)
{
set_pdata_float(shotgun, m_flNextPrimaryAttack , 0.18, LINUX_OFFSET_WEAPONS)
set_pdata_float(shotgun, m_flNextSecondaryAttack, 0.3, LINUX_OFFSET_WEAPONS)
}
}
public Shotgun_SecondaryAttack_Post (const shotgun)
{
if(shotgun<=0)
return;
new player = get_pdata_cbase(shotgun, m_pPlayer, LINUX_OFFSET_WEAPONS)
if(DURATION>=adrenalinetime[player]>0)
{
set_pdata_float(shotgun, m_flNextPrimaryAttack , 0.18, LINUX_OFFSET_WEAPONS)
set_pdata_float(shotgun, m_flNextSecondaryAttack, 0.3, LINUX_OFFSET_WEAPONS)
}
}
//crossbow
public Crossbow_PrimaryAttack_Post (const crossbow)
{
if(crossbow<=0)
return;
new player = get_pdata_cbase(crossbow, m_pPlayer, LINUX_OFFSET_WEAPONS)
if(DURATION>=pivotime[player]>0)
{
set_pdata_float(crossbow, m_flNextPrimaryAttack , 0.2, LINUX_OFFSET_WEAPONS)
set_pdata_float(crossbow, m_flNextSecondaryAttack, 0.2, LINUX_OFFSET_WEAPONS)
}
}
//rpg
public rpg_PrimaryAttack_Post (const rpg)
{
if(rpg<=0)
return;
new player = get_pdata_cbase(rpg, m_pPlayer, LINUX_OFFSET_WEAPONS)
if(DURATION>=reddeviltime[player]>0)
set_pdata_float(rpg, m_flNextPrimaryAttack , 0.8, LINUX_OFFSET_WEAPONS)
else
set_pdata_float(rpg, m_flNextPrimaryAttack , 2.0, LINUX_OFFSET_WEAPONS)
}
public client_disconnected(id)
{
burntime[id]=0
redbulltime[id]=0
radontime[id]=0
adrenalinetime[id]=0
pivotime[id]=0
reddeviltime[id]=0
if(idedit==id)
{
if(task_exists(33299))
remove_task(33299)
if(fwd)
unregister_forward(FM_PlayerPreThink,fwd)
fwd = 0
if(crent>0){
//engfunc(EngFunc_RemoveEntity,crent)
set_pev(crent,pev_flags,FL_KILLME)
crent = 0
}
idedit = 0
}
}