Код:
// Ignored xs__ variables
#pragma semicolon 1
#pragma ctrlchar '\'
new Float:g_Freeze[33];
new g_Attacker[33];
new g_Running[33];
new g_HasLJ[33][2];
new g_TaskID = 32476;
new g_maxPlayers;
new Float:g_maxSpeed;
new g_DmgMsg;
new g_FadeMsg;
new p_power;
new p_z;
new p_recoil;
new p_push;
new g_EgonEnt;
Float:operator*(Float:,_:)(Float:oper1, oper2)
{
return oper1 * float(oper2);
}
Float:operator/(Float:,_:)(Float:oper1, oper2)
{
return oper1 / float(oper2);
}
Float:operator-(Float:,_:)(Float:oper1, oper2)
{
return oper1 - float(oper2);
}
Float:operator-(_:,Float:)(oper1, Float:oper2)
{
return float(oper1) - oper2;
}
bool:operator!=(Float:,_:)(Float:oper1, oper2)
{
return floatcmp(oper1, float(oper2)) != 0;
}
bool:operator>(Float:,_:)(Float:oper1, oper2)
{
return 0 < floatcmp(oper1, float(oper2));
}
bool:operator>=(Float:,Float:)(Float:oper1, Float:oper2)
{
return 0 <= floatcmp(oper1, oper2);
}
bool:operator>=(Float:,_:)(Float:oper1, oper2)
{
return 0 <= floatcmp(oper1, float(oper2));
}
bool:operator<(Float:,Float:)(Float:oper1, Float:oper2)
{
return 0 > floatcmp(oper1, oper2);
}
bool:operator<(Float:,_:)(Float:oper1, oper2)
{
return 0 > floatcmp(oper1, float(oper2));
}
bool:operator<=(Float:,Float:)(Float:oper1, Float:oper2)
{
return 0 >= floatcmp(oper1, oper2);
}
bool:operator!(Float:)(Float:oper)
{
return oper & -1 == 0;
}
Float:floatclamp(Float:Value, Float:MinValue, Float:MaxValue)
{
if (Value <= MinValue)
{
return MinValue;
}
if (Value >= MaxValue)
{
return MaxValue;
}
return Value;
}
public __fatal_ham_error(Ham:id, HamError:err, String:reason[])
{
!!! Removed Phi
if (func != -1 && callfunc_begin_i(func, -1) == 1)
{
callfunc_push_int(id);
callfunc_push_int(err);
callfunc_push_str(reason, false);
if (callfunc_end() == 1)
{
fail = 0;
}
}
if (fail)
{
set_fail_state(reason);
}
return 0;
}
fm_set_rendering(entity, fx, r, g, b, render, amount)
{
new Float:RenderColor[3];
RenderColor[0] = float(r);
RenderColor[1] = float(g);
RenderColor[2] = float(b);
set_pev(entity, 78, fx);
set_pev(entity, 134, RenderColor);
set_pev(entity, 77, render);
set_pev(entity, 40, float(amount));
return 1;
}
fm_set_user_rendering(index, fx, r, g, b, render, amount)
{
return fm_set_rendering(index, fx, r, g, b, render, amount);
}
fm_set_user_maxspeed(index, Float:speed)
{
engfunc(52, index, speed);
set_pev(index, 56, speed);
return 1;
}
public plugin_init()
{
register_plugin("HL Egon Freezer", "1.5", "AfaLINK");
register_event("AmmoX", "Event_AmmoX", "b", "1<15");
RegisterHam(Ham_TakeDamage, "player", "egon_untraced", 0);
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack", 0);
RegisterHam(Ham_Killed, "player", "Ham_Killed_player", 1);
p_power = register_cvar("freezer_power", "5.0", 0, 0.00);
p_recoil = register_cvar("freezer_recoil", "150", 0, 0.00);
p_push = register_cvar("freezer_push", "150", 0, 0.00);
p_z = register_cvar("freezer_z", "1", 0, 0.00);
g_DmgMsg = get_user_msgid("Damage");
g_FadeMsg = get_user_msgid("ScreenFade");
g_maxSpeed = get_cvar_float("sv_maxspeed");
g_maxPlayers = get_maxplayers();
g_EgonEnt = engfunc(21, engfunc(43, "weapon_egon"));
return 0;
}
public fw_TraceAttack(victim, inflictor, Float:damage, Float:direction[3], traceresult, damagebits)
{
!!! Removed Phi
if (!inflictor)
{
return 1;
}
if (inflictor <= g_maxPlayers)
{
g_Attacker[victim] = inflictor;
if (get_user_weapon(g_Attacker[victim][0][0], 0, 0) != 10)
{
return 1;
}
}
else
{
new classname[64];
pev(inflictor, 1, classname, 63);
if (!equal(classname, "weapon_egon", 0))
{
return 1;
}
g_Attacker[victim] = pev(inflictor, 18);
}
static Float:vel[3];
static Float:pushspeed;
pev(victim, 120, vel);
if (damagebits == 9216)
{
pushspeed = damage * get_pcvar_float(p_push) / 20;
new var2 = vel;
var2[0] = var2[0][0] + direction[0] * pushspeed;
new var3 = vel[1];
var3 = var3[0] + direction[1] * pushspeed;
new var4 = vel[2];
var4 = var4[0] + direction[2] * pushspeed;
set_pev(victim, 120, vel);
}
if (damagebits == 9280 && direction[2] != 0.00)
{
pushspeed = damage * get_pcvar_float(p_push) / 10;
new var5 = vel;
var5[0] = var5[0][0] + direction[0] * pushspeed;
new var6 = vel[1];
var6 = var6[0] + direction[1] * pushspeed;
new var7 = vel[2];
var7 = var7[0] + direction[2] * pushspeed;
set_pev(victim, 120, vel);
}
new var8 = g_Freeze[victim];
var8 = var8[0][0] + damage * get_pcvar_float(p_power);
if (g_Freeze[victim][0][0] > 0.00)
{
g_Freeze[victim] = 250.00/*1132068864*/;
}
player_damage(victim, g_Attacker[victim][0][0], 1.00);
if (!g_Running[victim][0][0])
{
g_Running[victim] = 1;
engfunc(59, victim, "slj", g_HasLJ[victim][0][0], 1);
if (equal(g_HasLJ[victim][0][0], "1", 0))
{
engfunc(60, victim, "slj", "0");
}
freeze(victim);
}
message_begin(8, g_FadeMsg, 1900, victim);
write_short(fade_units_to_seconds(floatclamp(g_Freeze[victim][0][0] / 50.00, 0.00, 2.50)));
write_short(0);
write_short(0);
write_byte(120);
write_byte(150);
write_byte(255);
write_byte(150);
message_end();
return 4;
}
public egon_untraced(victim, inflictor, attacker, Float:damage, damage_type)
{
!!! Removed Phi
if (attacker > g_maxPlayers || !attacker)
{
return 1;
}
if (attacker == inflictor)
{
if (get_user_weapon(attacker, 0, 0) != 10)
{
return 1;
}
}
else
{
if (inflictor <= g_maxPlayers)
{
return 1;
}
pev(inflictor, 1, classname, 63);
if (!equal("", "weapon_egon", 0))
{
return 1;
}
}
return 4;
}
public freeze(id)
{
!!! Removed Phi
if (id > 32)
{
id -= g_TaskID;
}
if (g_Freeze[id][0][0] < 0.00 || !is_user_alive(id))
{
g_Freeze[id] = 0;
g_Running[id] = 0;
fm_set_user_rendering(id, 19, 0, 0, 0, 0, 25);
fm_set_user_maxspeed(id, g_maxSpeed);
if (equal(g_HasLJ[id][0][0], "1", 0))
{
engfunc(60, id, "slj", "1");
}
return 1;
}
new Float:set_speed = 0;
set_speed = g_maxSpeed - g_maxSpeed - 45 * floatclamp(g_Freeze[id][0][0], 30.00, 200.00) / 200;
fm_set_user_maxspeed(id, set_speed);
fm_set_rendering(id, 19, 200, 200, 255, 0, floatround(g_Freeze[id][0][0], floatround_round));
new var2 = g_Freeze[id];
var2 = var2[0][0] - 10;
message_begin(8, g_DmgMsg, 1900, id);
write_byte(0);
write_byte(0);
write_long(16);
write_coord(0);
write_coord(0);
write_coord(0);
message_end();
if (g_Freeze[id][0][0] >= 0.00)
{
player_damage(id, g_Attacker[id][0][0], 0.20);
}
set_task(0.10, "freeze", g_TaskID + id, "", 0, "", 0);
return 1;
}
public Ham_Killed_player(victim, attacker)
{
g_Freeze[victim] = 0;
g_Running[victim] = 0;
return 0;
}
public player_damage(player, attacker, Float:damage)
{
!!! Removed Phi
if (damage < 1.00)
{
damage = 1.00/*1065353216*/;
}
ExecuteHam(Ham_TakeDamage, player, g_EgonEnt, attacker, damage, 16);
return 0;
}
public Event_AmmoX(id)
{
!!! Removed Phi
if (is_user_connected(id) && ExecuteHam(Ham_IsAlive, id) && get_user_weapon(id, 0, 0) == 10)
{
if (get_pdata_int(get_pdata_cbase(id, 306, 5), 20, 5))
{
set_speed(id, 0 - get_pcvar_float(p_recoil));
}
}
return 0;
}
public set_speed(ent, Float:speed)
{
static Float:old_speed[3];
pev(ent, 120, old_speed);
static Float:vangle[3];
if (get_maxplayers() >= ent)
{
pev(ent, 126, vangle);
}
else
{
pev(ent, 124, vangle);
}
static Float:new_velo[3];
angle_vector(vangle, 1, new_velo);
new Float:y = 0;
y = new_velo[0][0] * new_velo[0][0] + new_velo[1][0] * new_velo[1][0] + new_velo[2][0] * new_velo[2][0];
new Float:x = 0;
if (y)
{
x = floatsqroot(speed * speed / y);
}
new var2 = new_velo;
var2[0] = var2[0][0] * x;
new var3 = new_velo[1];
var3 = var3[0] * x;
new var4 = new_velo[2];
var4 = var4[0] * x;
new var5 = 0.00;
new var1;
if (speed < var5)
{
new var6 = new_velo;
var6[0] = var6[0][0] * -1;
new var7 = new_velo[1];
var7 = var7[0] * -1;
new var8 = new_velo[2];
var8 = var8[0] * -1;
var1 = var8;
}
else
{
var1 = var5;
}
new var9 = old_speed;
var9[0] = var9[0][0] + new_velo[0][0];
new var10 = old_speed[1];
var10 = var10[0] + new_velo[1][0];
if (get_pcvar_num(p_z))
{
new var11 = old_speed[2];
var11 = var11[0] + new_velo[2][0];
}
set_pev(ent, 120, old_speed);
return 0;
}
fade_units_to_seconds(Float:num)
{
return floatround(num * 4096, floatround_round);
}