mirror of
https://git.code.sf.net/p/quake/prozac-qfcc
synced 2024-11-10 07:11:51 +00:00
1354 lines
43 KiB
C++
1354 lines
43 KiB
C++
#include "defs.qh"
|
||
#include "menu.qh"
|
||
|
||
/*=======================================================//
|
||
// haxxx.QC - CustomTF 3.2.OfN - 30/1/2001 - //
|
||
// Idea and base code by SB-1 tech, rewritten by often //
|
||
//=======================================================//
|
||
// Hacker related stuff //
|
||
//=======================================================*/
|
||
|
||
void(float input) SBInitiateInterface;
|
||
string(entity thebuilding) GetBuildingName;
|
||
float(float input) IntToExp;
|
||
float (entity hacked) GetICELevel;
|
||
float() CheckHaxxx;
|
||
void(entity ignore, string st, string st2, string st3, string st4, string st5, string st6) teamsprint6;
|
||
|
||
void () Menu_Friend_Hax =
|
||
{
|
||
if (!self.demon_two) // safety
|
||
{
|
||
sprint(self,PRINT_HIGH,"You have lost the connection!\n");
|
||
ResetMenu();
|
||
return;
|
||
}
|
||
|
||
local string st,st2,st3,st4,st5,st6,st7;
|
||
|
||
st6="\n\nComLink åóôáâìéóèåä";
|
||
st7=" Áãôéïî: \n\n";
|
||
st5="\n\nš.. Hack-Repair Û8 secÝ\n\n’.. Îïôèéîç ";
|
||
st4="";
|
||
st2="\n.. Add ìåöåì “ ICE Û20 secÝ";
|
||
st = st3 = "";
|
||
|
||
if (!visible2x(self,self.demon_two))
|
||
st6="\n\nLost connection with target!\n";
|
||
/* else
|
||
{
|
||
local float dist;
|
||
dist = vlen(self.origin - self.demon_two.origin);
|
||
if (dist > HAX_UNSTABLEDIST)
|
||
{
|
||
st6="\n\nUnstable connection with target!\n";
|
||
}
|
||
}*/
|
||
|
||
if (Teammate(self.demon_two.real_owner.team_no, self.team_no))
|
||
{
|
||
if (self.demon_two.classname == "building_dispenser")
|
||
{
|
||
st7="Targetº Friendly Dispenser\n\n";
|
||
st=".. Improve capacity Û15 secÝ"; // DONE
|
||
st3="\n•.. Enhance armour Û10 secÝ"; // DONE
|
||
}
|
||
else if (self.demon_two.classname == "building_sentrygun")
|
||
{
|
||
st7="Targetº Friendly Sentry Gun\n\n";
|
||
st=".. Improve capacity Û10 secÝ"; // DONE - increase shells only
|
||
st3="\n•.. Enhance armour Û25 secÝ";
|
||
st4="\n–.. Enhance circuits Û30 secÝ"; // DONE
|
||
}
|
||
else if (self.demon_two.classname == "building_tesla")
|
||
{
|
||
st7="Targetº Friendly Tesla Sentry\n\n";
|
||
st=".. Improve capacity Û10 secÝ"; // DONE
|
||
st3="\n•.. Enhance armour Û25 secÝ"; // DONE
|
||
st4="\n–.. Enhance circuits Û30 secÝ"; //\n—.. Add TractorBeam Û20 secÝ");
|
||
}
|
||
else if (self.demon_two.classname == "building_camera")
|
||
{
|
||
st7="Targetº Friendly Camera\n\n";
|
||
st=".. Improve sensors Û20 secÝ"; // DONE
|
||
st3="\n•.. Enhance armour Û20 secÝ"; // DONE
|
||
}
|
||
else if (self.demon_two.classname == "building_sensor")
|
||
{
|
||
st7="Targetº Friendly Motion Sensor\n\n";
|
||
st=".. Improve range Û20 secÝ"; // DONE
|
||
st3="\n•.. Enhance armour Û10 secÝ"; // DONE
|
||
st4="\n–.. Add spy revealer Û25 secÝ"; // DONE
|
||
}
|
||
else if (self.demon_two.classname == "building_teleporter")
|
||
{
|
||
st7="Targetº Friendly Teleporter\n\n";
|
||
st=".. Improve capacity Û5 secÝ"; // DONE
|
||
st3="\n•.. Enhance armour Û20 secÝ"; // DONE
|
||
st4="\n–.. Increase range Û30 secÝ"; // DONE
|
||
}
|
||
else if (self.demon_two.classname == "building_fieldgen")
|
||
{
|
||
st7="Targetº Friendly Field Generator\n\n";
|
||
st= ".. Improve capacity Û10 secÝ"; // DONE
|
||
st3="\n•.. Enhance armour Û15 secÝ"; // DONE
|
||
st4="\n–.. Increase range Û20 secÝ"; // DONE
|
||
}
|
||
}
|
||
|
||
if (self.demon_two.num_mines & IMPROVED_ONE)
|
||
{
|
||
st="";
|
||
}
|
||
if (self.demon_two.num_mines & IMPROVED_TWO)
|
||
{
|
||
st2="\n.. Add ìåöåì ” ICE Û25 secÝ";
|
||
if (self.demon_two.num_mines & IMPROVED_FIVE)
|
||
{
|
||
st2="\n.. Add ìåöåì • ICE Û30 secÝ";
|
||
|
||
if (self.demon_two.num_mines & IMPROVED_SIX)
|
||
st2="\n";
|
||
}
|
||
|
||
}
|
||
if (self.demon_two.num_mines & IMPROVED_THREE)
|
||
{
|
||
st3="\n";
|
||
}
|
||
|
||
if (self.demon_two.classname != "building_sensor")
|
||
{
|
||
if (self.demon_two.num_mines & IMPROVED_FOUR)
|
||
{
|
||
st4="\n";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (self.demon_two.num_mines & IMPROVED_FOUR)
|
||
{
|
||
if (self.demon_two.num_mines & IMPROVED_SEVEN)
|
||
st4="\n";
|
||
else
|
||
st4="\n–.. Thief revealer Û25 secÝ";
|
||
}
|
||
}
|
||
|
||
CenterPrint7(self,st7,st,st2,st3,st4,st5,st6);
|
||
|
||
};
|
||
|
||
void(float inp) Menu_FriendHax_Inp =
|
||
{
|
||
if (self.classname != "player" || !self.demon_two)
|
||
return;
|
||
|
||
if (inp == 10)
|
||
{
|
||
self.impulse=0;
|
||
self.demon_two=nil;
|
||
ResetMenu();
|
||
return;
|
||
}
|
||
if (inp == 8)
|
||
{
|
||
self.impulse=0;
|
||
SBInitiateInterface(inp);
|
||
ResetMenu();
|
||
return;
|
||
}
|
||
if (inp < 5 && inp > 0)
|
||
{
|
||
|
||
if (inp == 4)
|
||
{
|
||
if (self.demon_two.classname == "building_sensor")
|
||
{
|
||
if (self.demon_two.num_mines & IMPROVED_FOUR)
|
||
inp = 7; // already has spy revealer so go for thief, check if it already has thief revealer below..
|
||
}
|
||
else if (self.demon_two.classname == "building_dispenser" || self.demon_two.classname == "building_camera")
|
||
/*self.demon_two.classname != "building_sentrygun" &&
|
||
self.demon_two.classname != "building_sensor" &&
|
||
self.demon_two.classname != "building_teleporter" &&
|
||
self.demon_two.classname != "building_tesla")*/
|
||
return;
|
||
}
|
||
if (inp == 2 && self.demon_two.num_mines & IMPROVED_SIX)
|
||
return; // device completelly iced, so do nothing
|
||
|
||
if (self.demon_two.num_mines & IntToExp(inp) && inp != 2) // exclude ICE's
|
||
return; // device already has this hack done, so do nothing
|
||
|
||
SBInitiateInterface(inp);
|
||
ResetMenu();
|
||
self.impulse = 0;
|
||
}
|
||
|
||
};
|
||
|
||
void(float inp) Menu_EnemyHax_Inp =
|
||
{
|
||
if (self.classname != "player" || !self.demon_two)
|
||
return;
|
||
|
||
if (inp == 10)
|
||
{
|
||
self.impulse=0;
|
||
self.demon_two=nil;
|
||
ResetMenu();
|
||
return;
|
||
}
|
||
if (inp < 5 && inp > 0)
|
||
{
|
||
if (self.demon_two.is_malfunctioning & IntToExp(inp))
|
||
return;
|
||
|
||
SBInitiateInterface(inp);
|
||
ResetMenu();
|
||
self.impulse = 0;
|
||
}
|
||
|
||
};
|
||
|
||
void () Menu_Enemy_Hax =
|
||
{
|
||
if (!self.demon_two) // safety
|
||
{
|
||
sprint(self,PRINT_HIGH,"You have lost the connection!\n");
|
||
ResetMenu();
|
||
return;
|
||
}
|
||
|
||
local string st,st2,st3,st4,st5,st6,st7;
|
||
st=st2=st3=st4=st5=st6=st7="";
|
||
|
||
st6="\n\nComLink åóôáâìéóèåä";
|
||
st5="\n\n’.. Îïôèéîç ";
|
||
st7=" Áãôéïî: \n\n";
|
||
|
||
if (!visible2x(self,self.demon_two)) st6="\n\nLost connection with target!\n";
|
||
else
|
||
{
|
||
local float dist;
|
||
dist = vlen(self.origin - self.demon_two.origin);
|
||
if (dist > HAX_UNSTABLEDIST)
|
||
{
|
||
st6="\n\nUnstable connection with target!\n";
|
||
}
|
||
}
|
||
|
||
if (!Teammate(self.demon_two.real_owner.team_no, self.team_no))
|
||
{
|
||
if (self.demon_two.classname == "building_dispenser")
|
||
{
|
||
st7="Ôáòçåô: Åîåíù Dispenser\n\n";
|
||
st=".. Disable Û3 secÝ";
|
||
st2="\n.. Booby trap Û6 secÝ";
|
||
st3="\n•.. No production Û3 secÝ";
|
||
st4="\n–.. Subtle bomb Û4 secÝ";
|
||
}
|
||
else if (self.demon_two.classname == "building_sentrygun")
|
||
{
|
||
st7="Ôáòçåô: Åîåíù Sentry Gun\n\n";
|
||
st=".. Incapacitate Û3 secÝ";
|
||
st2="\n.. Reduce accuracy Û5 secÝ";
|
||
st3="\n•.. RL malfunction Û4 secÝ";
|
||
st4="\n–.. Hostile takeover Û12 secÝ";
|
||
}
|
||
else if (self.demon_two.classname == "building_tesla")
|
||
{
|
||
st7="Ôáòçåô: Åîåíù Tesla Sentry\n\n";
|
||
st=".. Incapacitate Û8 secÝ";
|
||
st2="\n.. Reduce output Û6 secÝ";
|
||
st3="\n•.. Overload Û7 secÝ";
|
||
st4="\n–.. Hostile takeover Û15 secÝ";
|
||
}
|
||
else if (self.demon_two.classname == "building_camera")
|
||
{
|
||
st7="Ôáòçåô: Åîåíù Camera\n\n";
|
||
st=".. Disable comms Û5 secÝ";
|
||
st2="\n.. Disable speaker Û2 secÝ";
|
||
st3="\n•.. Sensor ghosts Û6 secÝ";
|
||
st4="\n–.. Hostile takeover Û5 secÝ";
|
||
}
|
||
else if (self.demon_two.classname == "building_sensor")
|
||
{
|
||
st7="Ôáòçåô: Åîåíù Motion Sensor\n\n";
|
||
st=".. Disable sound Û5 secÝ";
|
||
st2="\n.. Disable light Û5 secÝ";
|
||
st3="\n•.. Deactivate Û5 secÝ";
|
||
st4="\n–.. Hostile takeover Û5 secÝ";
|
||
}
|
||
else if (self.demon_two.classname == "building_teleporter")
|
||
{
|
||
st7="Ôáòçåô: Åîåíù Teleporter\n\n";
|
||
st=".. Item stripper Û3 secÝ";
|
||
st2="\n.. Void location Û7 secÝ";
|
||
st3="\n•.. Target builder Û5 secÝ";
|
||
st4="\n–.. Disable Û2 secÝ";
|
||
}
|
||
else if (self.demon_two.classname == "building_fieldgen")
|
||
{
|
||
st7="Ôáòçåô: Åîåíù Field Generator\n\n";
|
||
st=".. Corrupt Generator Û3 secÝ";
|
||
st2="\n.. Engineer Trap Û7 secÝ";
|
||
st3="\n•.. Reduce Output Û5 secÝ";
|
||
st4="\n–.. Disable Û2 secÝ";
|
||
}
|
||
|
||
}
|
||
|
||
if (self.demon_two.is_malfunctioning & SCREWUP_ONE)
|
||
{
|
||
st="";
|
||
}
|
||
if (self.demon_two.is_malfunctioning & SCREWUP_TWO)
|
||
{
|
||
st2="\n";
|
||
}
|
||
if (self.demon_two.is_malfunctioning & SCREWUP_THREE)
|
||
{
|
||
st3="\n";
|
||
}
|
||
if (self.demon_two.is_malfunctioning & SCREWUP_FOUR)
|
||
{
|
||
st4="\n";
|
||
}
|
||
|
||
CenterPrint7(self,st7,st,st2,st3,st4,st5,st6);
|
||
};
|
||
|
||
/*
|
||
===============
|
||
SBFireInterface
|
||
|
||
Uses the Cyber Interface on whatever you're looking at.
|
||
|
||
OfN - Rewritten
|
||
===============
|
||
*/
|
||
|
||
void() SBFireInterface =
|
||
{
|
||
if (CheckHaxxx() == FALSE) return;
|
||
|
||
local entity oself;
|
||
local entity targ;
|
||
local float hackThis;
|
||
|
||
targ = self.martyr_enemy;
|
||
hackThis = self.has_camera;
|
||
|
||
oself = self;
|
||
|
||
self = self.owner;
|
||
|
||
oself.think = SUB_Remove;
|
||
oself.nextthink = 0.1;
|
||
dremove(oself);
|
||
|
||
self.is_haxxxoring = 0;
|
||
|
||
self.tfstate &= ~TFSTATE_CANT_MOVE;
|
||
TeamFortress_SetSpeed(self);
|
||
|
||
if (hackThis == -2)
|
||
{
|
||
sprint(self, PRINT_HIGH, "Hack aborted.\n");
|
||
return;
|
||
}
|
||
|
||
if (targ.classname == "player" && (targ.cutf_items & CUTF_CYBERAUG))
|
||
{
|
||
if (!Teammate(targ.team_no, self.team_no))
|
||
{
|
||
targ.is_malfunctioning = 1;
|
||
sprint(targ, PRINT_HIGH, "Oh no! Your cybernetic augmentations are malfunctioning!\n");
|
||
sprint(self, PRINT_HIGH, "You tamper with ", targ.netname, "'s cybernetic augmentations.\n");
|
||
}
|
||
else if (Teammate(targ.team_no,self.team_no) && targ.is_malfunctioning)
|
||
{
|
||
targ.is_malfunctioning = 0;
|
||
sprint(targ, PRINT_HIGH, self.netname, " adjusts your cybernetics to work properly again.\n");
|
||
sprint(self, PRINT_HIGH, "You readjust ", targ.netname, "'s CyberAugs to work properly again.\n");
|
||
}
|
||
}
|
||
else if (IsBuilding(targ))
|
||
{
|
||
if (!Teammate(targ.real_owner.team_no, self.team_no) && GetICELevel(targ)==1 && random() < 0.2)
|
||
{
|
||
sprint(self, PRINT_HIGH, "This device has a level 1 ICE, it's not easy to hack!\n");
|
||
//sprint(targ.real_owner, PRINT_HIGH,"Somebody tried to hack your stuff...\n");
|
||
return;
|
||
}
|
||
if (!Teammate(targ.real_owner.team_no, self.team_no) && GetICELevel(targ)==2)
|
||
{
|
||
sprint(self, PRINT_HIGH, "This device is hack-protected.\n");
|
||
sprint(targ.real_owner, PRINT_HIGH,"Somebody just tried to hack your stuff...\n");
|
||
return;
|
||
}
|
||
if (!Teammate(targ.real_owner.team_no, self.team_no) && GetICELevel(targ)==3)
|
||
{
|
||
sprint(self, PRINT_HIGH, "This device is hack-protected with a level 3 ICE!\n");
|
||
deathmsg=DMSG_ANTIHACK;
|
||
TF_T_Damage(self, self, targ, self.health + 50, TF_TD_IGNOREARMOUR, TF_TD_OTHER);
|
||
|
||
sound (self, CHAN_MISC, "effects/crunch.wav", 1, ATTN_NONE);
|
||
|
||
return;
|
||
}
|
||
else if (!Teammate(targ.real_owner.team_no, self.team_no))
|
||
{
|
||
sprint(self, PRINT_HIGH, "You make a few adjustments...\n");
|
||
if (hackThis == SCREWUP_ONE)
|
||
{
|
||
targ.is_malfunctioning |= SCREWUP_ONE;
|
||
if (targ.classname == "building_sentrygun") //
|
||
sprint(self, PRINT_HIGH, "The sentrygun is now incapacitated.\n");
|
||
else if (targ.classname == "building_tesla")
|
||
sprint(self, PRINT_HIGH, "The tesla won't shoot any more.\n");
|
||
else if (targ.classname == "building_sensor")
|
||
sprint(self, PRINT_HIGH, "Better when it doesn't make so much noise.\n");
|
||
else if (targ.classname == "building_dispenser")
|
||
sprint(self, PRINT_HIGH, "This is one dispenser that won't dispense any more.\n");
|
||
else if (targ.classname == "building_camera")
|
||
sprint(self, PRINT_HIGH, "The camera won't be reporting to its owner any longer, but to all outward appearances remains the same.\n");
|
||
else if (targ.classname == "building_teleporter")
|
||
sprint(self, PRINT_HIGH, "The teleporter will now strip the items off all who enter...\n");
|
||
else if (targ.classname == "building_fieldgen")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The field generator is now rigged to hurt teammates...\n");
|
||
targ.martyr_enemy = self;
|
||
if (targ.fieldgen_hasfield)
|
||
targ.fieldgen_field.martyr_enemy = self;
|
||
}
|
||
}
|
||
else if (hackThis == SCREWUP_TWO)
|
||
{
|
||
targ.is_malfunctioning |= SCREWUP_TWO;
|
||
if (targ.classname == "building_sentrygun")
|
||
sprint(self, PRINT_HIGH, "The sentrygun's accuracy is now reduced.\n");
|
||
else if (targ.classname == "building_tesla")
|
||
sprint(self, PRINT_HIGH, "This tesla won't put out enough amperage to hurt a fly.\n");
|
||
else if (targ.classname == "building_camera")
|
||
sprint(self, PRINT_HIGH, "The camera is silenced.\n");
|
||
else if (targ.classname == "building_sensor")
|
||
sprint(self, PRINT_HIGH, "That glow was always pretty annoying anyway.\n");
|
||
else if (targ.classname == "building_dispenser")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The dispenser is now rigged to explode!\n");
|
||
targ.martyr_enemy = self;
|
||
}
|
||
else if (targ.classname == "building_teleporter")
|
||
{
|
||
sprint(self, PRINT_HIGH, "Entering this teleporter could be unhealthy...\n");
|
||
targ.martyr_enemy = self;
|
||
}
|
||
else if (targ.classname == "building_fieldgen")
|
||
{
|
||
sprint(self, PRINT_HIGH, "Better not use spanner on this one...\n");
|
||
targ.martyr_enemy = self;
|
||
}
|
||
}
|
||
else if (hackThis == SCREWUP_THREE)
|
||
{
|
||
targ.is_malfunctioning |= SCREWUP_THREE;
|
||
if (targ.classname == "building_sentrygun")
|
||
sprint(self, PRINT_HIGH, "The sentrygun rocket launcher will now malfunction...\n");
|
||
else if (targ.classname == "building_tesla")
|
||
sprint(self, PRINT_HIGH, "The tesla may experience some technical difficulties the next time it fires...\n");
|
||
else if (targ.classname == "building_camera")
|
||
sprint(self, PRINT_HIGH, "This camera will be reading ghosts now...\n");
|
||
else if (targ.classname == "building_dispenser")
|
||
sprint(self, PRINT_HIGH, "The dispenser will no longer regenerate ammo.\n");
|
||
else if (targ.classname == "building_teleporter")
|
||
sprint(self, PRINT_HIGH, "The teleporter will now teleport directly to its builder!\n");
|
||
else if (targ.classname == "building_sensor")
|
||
sprint(self, PRINT_HIGH, "The sensor is now off.\n");
|
||
else if (targ.classname == "building_fieldgen")
|
||
sprint(self, PRINT_HIGH, "The field generator won't hurt too much now.\n");
|
||
}
|
||
else if (hackThis == SCREWUP_FOUR)
|
||
{
|
||
if (targ.classname != "building_dispenser" && targ.classname != "building_teleporter" && targ.classname != "building_fieldgen")
|
||
{
|
||
local string st;
|
||
st=GetBuildingName(targ);
|
||
|
||
sprint(targ.real_owner, PRINT_HIGH,"You've lost the control of your ");
|
||
sprint(targ.real_owner, PRINT_HIGH, st);
|
||
sprint(targ.real_owner, PRINT_HIGH, "!!\n");
|
||
|
||
sprint (self, PRINT_HIGH, "The ");
|
||
sprint (self, PRINT_HIGH, st);
|
||
sprint (self,PRINT_HIGH," is now yours!\n");
|
||
|
||
teamprefixsprint(self.team_no,self);
|
||
teamsprint6(self,self.netname," hacked ",targ.real_owner.netname,"'s ",st,", now it's ours!\n");
|
||
|
||
teamprefixsprint(targ.real_owner.team_no,targ.real_owner);
|
||
teamsprint6(targ.real_owner,targ.real_owner.netname," has lost the control of his ",st,"!\n","","");
|
||
|
||
if (targ.classname == "building_sentrygun")
|
||
{
|
||
targ.real_owner.has_sentry = FALSE;
|
||
self.has_sentry = TRUE;
|
||
}
|
||
else if (targ.classname == "building_tesla")
|
||
{
|
||
targ.real_owner.has_tesla = FALSE;
|
||
self.has_tesla = TRUE;
|
||
}
|
||
else if (targ.classname == "building_camera")
|
||
{
|
||
targ.real_owner.has_camera = FALSE;
|
||
self.has_camera = TRUE;
|
||
}
|
||
else if (targ.classname == "building_sensor")
|
||
{
|
||
targ.real_owner.has_sensor = FALSE;
|
||
self.has_sensor = TRUE;
|
||
}
|
||
|
||
targ.real_owner = self;
|
||
targ.team_no = self.team_no;
|
||
}
|
||
else if (targ.classname == "building_fieldgen")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The field generator is now disabled.\n");
|
||
targ.is_malfunctioning = SCREWUP_FOUR;
|
||
}
|
||
else if (targ.classname == "building_teleporter")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The teleporter is now broken.\n");
|
||
targ.is_malfunctioning = SCREWUP_FOUR;
|
||
}
|
||
else if (targ.classname == "building_dispenser")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The dispenser will explode when someone attempts to withdraw armour!\n");
|
||
targ.martyr_enemy = self;
|
||
targ.is_malfunctioning = SCREWUP_FOUR;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
sprint(self, PRINT_HIGH, "Your attempt at hacking fails.\n");
|
||
}
|
||
}
|
||
else if (Teammate(targ.team_no,self.team_no) && hackThis == -1)
|
||
{
|
||
if (targ.is_malfunctioning)
|
||
{
|
||
targ.is_malfunctioning = 0;
|
||
|
||
sprint(self, PRINT_HIGH, "You correct the machine's malfunction.\n");
|
||
|
||
local string st;
|
||
st=GetBuildingName(targ);
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, "your ");
|
||
sprint(targ.real_owner, PRINT_HIGH, st);
|
||
sprint(targ.real_owner, PRINT_HIGH," has been fixed by ");
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH, "\n");
|
||
|
||
teamprefixsprintbi(self.team_no,self,targ.real_owner);
|
||
teamsprintbi(self,targ.real_owner,targ.real_owner.netname,"'s malfunctioning ",st," has been fixed by ",self.netname,"\n");
|
||
}
|
||
else
|
||
{
|
||
teamprefixsprint(self.team_no,self);
|
||
teamsprint6(self,self.netname, " fixes his malfuntioning ",st,"\n","","");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
sprint(self, PRINT_HIGH, "There is nothing wrong with this machine.\n");
|
||
}
|
||
}
|
||
else if (Teammate(targ.team_no,self.team_no))
|
||
{
|
||
//FRIENDLY IMPROVEMENTS
|
||
targ.num_mines |= hackThis;
|
||
|
||
local string st;
|
||
st=GetBuildingName(targ);
|
||
|
||
sprint(self, PRINT_HIGH, "You make a few adjustments...\n");
|
||
|
||
if (hackThis == IMPROVED_ONE)
|
||
{
|
||
if (targ.classname=="building_sensor")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The sensor has greater detection range now.\n");
|
||
|
||
if (self != targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH,"your motion sensor has greater detection range thanks to ");
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH, ".\n");
|
||
}
|
||
}
|
||
else if (targ.classname=="building_camera")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The camera has greater range of view now.\n");
|
||
|
||
if (self != targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," hacked your camera, it has better sensors now.\n");
|
||
}
|
||
|
||
}
|
||
else if (targ.classname=="building_tesla")
|
||
{
|
||
targ.maxammo_cells=targ.maxammo_cells*2;
|
||
sprint(self, PRINT_HIGH, "The tesla has extra cells capacity now.\n");
|
||
|
||
if (self != targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," hacked your tesla, it has extra capacity for cells now.\n");
|
||
}
|
||
|
||
|
||
}
|
||
else if (targ.classname=="building_sentrygun")
|
||
{
|
||
targ.maxammo_shells=targ.maxammo_shells*2;
|
||
sprint(self, PRINT_HIGH, "The sentry gun has greater ammo capacity for shells now.\n");
|
||
|
||
if (self != targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," hacked your sentry gun, it has extra capacity for shells now.\n");
|
||
}
|
||
|
||
}
|
||
else if (targ.classname=="building_dispenser")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The dispenser capacity was increased.\n");
|
||
|
||
if (self != targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," hacked your dispenser to increase its capacity.\n");
|
||
}
|
||
|
||
}
|
||
else if (targ.classname=="building_teleporter")
|
||
{
|
||
targ.maxammo_cells=targ.maxammo_cells*2;
|
||
|
||
sprint(self, PRINT_HIGH, "The teleporter cells capacity was increased.\n");
|
||
|
||
if (self != targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," hacked your teleporter to increase its cells capacity.\n");
|
||
}
|
||
|
||
}
|
||
else if (targ.classname=="building_fieldgen")
|
||
{
|
||
targ.maxammo_cells=targ.maxammo_cells*2;
|
||
|
||
sprint(self, PRINT_HIGH, "The field generator cells capacity was increased.\n");
|
||
|
||
if (self != targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," hacked your field generator to increase its cells capacity.\n");
|
||
}
|
||
|
||
}
|
||
|
||
|
||
}
|
||
else if (hackThis == IMPROVED_TWO) //- ICE level 1
|
||
{
|
||
sprint(self, PRINT_HIGH, "You add a ìåöåì “ ICE to the ");
|
||
sprint(self, PRINT_HIGH, st);
|
||
sprint(self, PRINT_HIGH,".\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," adds a ìåöåì “ ICE to your ");
|
||
sprint(targ.real_owner, PRINT_HIGH, st);
|
||
sprint(targ.real_owner, PRINT_HIGH, ".\n");
|
||
}
|
||
|
||
}
|
||
else if (hackThis == IMPROVED_FIVE) //- ICE level 2
|
||
{
|
||
sprint(self, PRINT_HIGH, "You add a ìåöåì ” ICE to the ");
|
||
sprint(self, PRINT_HIGH, st);
|
||
sprint(self, PRINT_HIGH,".\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," adds a ìåöåì ” ICE to your ");
|
||
sprint(targ.real_owner, PRINT_HIGH, st);
|
||
sprint(targ.real_owner, PRINT_HIGH, ".\n");
|
||
}
|
||
|
||
}
|
||
else if (hackThis == IMPROVED_SIX) //- ICE level 3
|
||
{
|
||
sprint(self, PRINT_HIGH, "You add a ìåöåì • ICE to the ");
|
||
sprint(self, PRINT_HIGH, st);
|
||
sprint(self, PRINT_HIGH,".\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," adds a ìåöåì • ICE to your ");
|
||
sprint(targ.real_owner, PRINT_HIGH, st);
|
||
sprint(targ.real_owner, PRINT_HIGH, ".\n");
|
||
}
|
||
|
||
}
|
||
else if (hackThis == IMPROVED_THREE)
|
||
{
|
||
sprint(self, PRINT_HIGH, "You enhance the armour of the ");
|
||
sprint(self, PRINT_HIGH, st);
|
||
sprint(self, PRINT_HIGH,".\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH," enhances the armour of your ");
|
||
sprint(targ.real_owner, PRINT_HIGH, st);
|
||
sprint(targ.real_owner, PRINT_HIGH, ".\n");
|
||
}
|
||
|
||
local float num;
|
||
|
||
num = targ.health / targ.max_health;
|
||
if (num < 0) // this shouldn't happen, but I got a report that it did
|
||
num = 0;
|
||
targ.max_health = targ.max_health * 2;
|
||
targ.health = num * targ.max_health;
|
||
|
||
}
|
||
else if (hackThis == IMPROVED_SEVEN)
|
||
{
|
||
if (targ.classname=="building_sensor")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The sensor will be able to uncover thieves now.\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, "your motion sensor can now uncover thieves after ");
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH, "'s hack.\n");
|
||
}
|
||
}
|
||
}
|
||
else if (hackThis == IMPROVED_FOUR)
|
||
{
|
||
if (targ.classname=="building_sensor")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The sensor will be able to uncover spies now.\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, "your motion sensor can now detect spies after ");
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH, "'s hack.\n");
|
||
}
|
||
}
|
||
else if (targ.classname=="building_teleporter")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The teleporter had its range increased.\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, "your teleporter had its range increased by ");
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH, "'s hack.\n");
|
||
}
|
||
}
|
||
else if (targ.classname=="building_fieldgen")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The field generator had its range increased.\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, "your field generator had its range increased by ");
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH, "'s hack.\n");
|
||
}
|
||
}
|
||
else if (targ.classname=="building_tesla")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The tesla has a better chip-set now.\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH, " enhances your tesla main circuits.\n");
|
||
}
|
||
}
|
||
else if (targ.classname=="building_sentrygun")
|
||
{
|
||
sprint(self, PRINT_HIGH, "The sentry gun has a better chip-set now.\n");
|
||
|
||
if (self!=targ.real_owner)
|
||
{
|
||
sprint(targ.real_owner, PRINT_HIGH, self.netname);
|
||
sprint(targ.real_owner, PRINT_HIGH, " enhances your sentry gun main circuits.\n");
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
sprint(self, PRINT_HIGH, "OfteN: BUG! unknown hack value BUG! (wtf u hacked)\n");
|
||
RPrint(self.netname);
|
||
RPrint(" just made an unknown hack. (bug)");
|
||
}
|
||
}
|
||
}
|
||
|
||
//else
|
||
// sprint(self, PRINT_HIGH, "There is nothing there to hack!\n");
|
||
};
|
||
|
||
float(float input) IntToExp =
|
||
{
|
||
if (input == 1) return 1;
|
||
if (input == 2) return 2;
|
||
if (input == 3) return 4;
|
||
if (input == 4) return 8;
|
||
if (input == 5) return 16;
|
||
if (input == 6) return 32;
|
||
if (input == 7) return 64;
|
||
//if (input == 8) return 128;
|
||
|
||
return 0;
|
||
};
|
||
|
||
float(entity hacked, float r) ReturnFHackDelay;
|
||
|
||
// SB hax0r tool - Cyber Interface
|
||
// OfN - Rewritten
|
||
void(float input) SBInitiateInterface =
|
||
{
|
||
local entity te;
|
||
|
||
if (!visible2x(self,self.demon_two))
|
||
{
|
||
sprint(self, PRINT_HIGH, "You are not connected to the target.\n");
|
||
self.demon_two=nil;
|
||
return;
|
||
}
|
||
|
||
// DOUBLE CHECK, THIS ONE AFTER MENU, THE OTHER ON JOB_HACKER //
|
||
if (self.is_feigning)
|
||
{
|
||
sprint(self, PRINT_HIGH, "You cannot hack while feigning.\n");
|
||
return;
|
||
}
|
||
if (self.is_detpacking || self.is_toffingadet)
|
||
{
|
||
sprint(self, PRINT_HIGH, "You can't hack something while setting a detpack.\n");
|
||
return;
|
||
}
|
||
if (self.is_building)
|
||
{
|
||
sprint(self, PRINT_HIGH, "You can't hack while building!\n");
|
||
return;
|
||
}
|
||
// DOUBLE CHECK, THIS ONE AFTER MENU, THE OTHER ON JOB_HACKER //
|
||
|
||
self.is_haxxxoring = 1;
|
||
|
||
te = spawn();
|
||
te.owner = self;
|
||
te.classname = "timer";
|
||
te.origin = self.demon_two.origin;
|
||
te.nextthink = time + 1;
|
||
|
||
te.has_holo = self.demon_two.team_no; // checked on think to break hacking if changes of team
|
||
|
||
te.has_camera = IntToExp(input);
|
||
|
||
if (!Teammate(self.demon_two.team_no,self.team_no))
|
||
{
|
||
te.heat = ReturnHackDelay(self.demon_two, input);
|
||
|
||
if (GetICELevel(self.demon_two)==1) // if it has a level1 ice add more delay to the hack
|
||
te.heat=te.heat*2.5;
|
||
|
||
local string st;
|
||
st=GetBuildingName(self.demon_two);
|
||
|
||
teamprefixsprint(self.team_no,self);
|
||
teamsprint6(self,self.netname," started to hack ",self.demon_two.real_owner.netname,"'s ",st,"\n");
|
||
|
||
local float dist;
|
||
dist = vlen(self.origin - self.demon_two.origin);
|
||
if (dist > HAX_UNSTABLEDIST)
|
||
{
|
||
sprint(self,PRINT_HIGH,"Connection unstable, it will take longer...");
|
||
te.heat=te.heat*2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
te.heat = ReturnFHackDelay(self.demon_two, input);
|
||
if (input==2 && self.demon_two.num_mines & IMPROVED_TWO)
|
||
{
|
||
te.has_camera=IMPROVED_FIVE;
|
||
if (self.demon_two.num_mines & IMPROVED_FIVE)
|
||
te.has_camera=IMPROVED_SIX;
|
||
}
|
||
|
||
if (input==8) te.has_camera=-1;
|
||
}
|
||
|
||
|
||
te.martyr_enemy = self.demon_two;
|
||
te.think = SBHackDotTimerThink;
|
||
|
||
self.tfstate |= TFSTATE_CANT_MOVE;
|
||
TeamFortress_SetSpeed(self);
|
||
sprint (self, PRINT_HIGH, "You immerse yourself in the cybernet...\n");
|
||
makeImmune(self,time + te.heat); //- OfN - WORKS? yup
|
||
|
||
te.ltime = te.heat;
|
||
self.demon_two=te;
|
||
};
|
||
|
||
float (entity hacked) GetICELevel =
|
||
{
|
||
local float retval;
|
||
retval=0;
|
||
|
||
if (hacked.num_mines & IMPROVED_TWO)
|
||
retval=1;
|
||
if (hacked.num_mines & IMPROVED_FIVE)
|
||
retval=2;
|
||
if (hacked.num_mines & IMPROVED_SIX)
|
||
retval=3;
|
||
|
||
return retval;
|
||
|
||
};
|
||
|
||
float(entity hacked, float r) ReturnHackDelay =
|
||
{
|
||
if (hacked.classname == "player")
|
||
return 5; // cyberaug hack
|
||
else if (hacked.classname == "building_dispenser")
|
||
{
|
||
if (r == 1)
|
||
return 3;
|
||
else if (r == 2)
|
||
return 6;
|
||
else if (r == 3)
|
||
return 3;
|
||
else
|
||
return 4;
|
||
}
|
||
else if (hacked.classname == "building_sentrygun")
|
||
{
|
||
if (r == 1)
|
||
return 3;
|
||
else if (r == 2)
|
||
return 5;
|
||
else if (r == 3)
|
||
return 4;
|
||
else
|
||
return 12;
|
||
}
|
||
else if (hacked.classname == "building_tesla")
|
||
{
|
||
if (r == 1)
|
||
return 8;
|
||
else if (r == 2)
|
||
return 6;
|
||
else if (r == 3)
|
||
return 7;
|
||
else
|
||
return 15;
|
||
}
|
||
else if (hacked.classname == "building_sensor")
|
||
return 5;
|
||
else if (hacked.classname == "building_camera")
|
||
{
|
||
if (r == 1)
|
||
return 5;
|
||
else if (r == 2)
|
||
return 2;
|
||
else if (r == 3)
|
||
return 6;
|
||
else
|
||
return 5;
|
||
}
|
||
else if (hacked.classname == "building_teleporter")
|
||
{
|
||
if (r == 1)
|
||
return 3;
|
||
else if (r == 2)
|
||
return 7;
|
||
else if (r == 3)
|
||
return 5;
|
||
else
|
||
return 2;
|
||
}
|
||
else if (hacked.classname == "building_fieldgen")
|
||
{
|
||
if (r == 1)
|
||
return 3;
|
||
else if (r == 2)
|
||
return 7;
|
||
else if (r == 3)
|
||
return 5;
|
||
else
|
||
return 2;
|
||
}
|
||
return 0;
|
||
};
|
||
|
||
float(entity hacked, float r) ReturnFHackDelay =
|
||
{
|
||
if (hacked.classname == "player")
|
||
return 5; // cyberaug hack
|
||
else if (r == 8) return 8; // repairing..
|
||
else if (r == 2 && IsBuilding(hacked))
|
||
{
|
||
if (!(hacked.num_mines & IMPROVED_TWO))
|
||
return 20; // level 1 ICE lasts for 20 seconds always
|
||
if (!(hacked.num_mines & IMPROVED_FIVE))
|
||
return 25; // level 2 ICE lasts for 25 seconds always
|
||
if (!(hacked.num_mines & IMPROVED_SIX))
|
||
return 30;
|
||
}
|
||
else if (hacked.classname == "building_dispenser")
|
||
{
|
||
if (r == 1)
|
||
return 15;
|
||
// else if (r == 2)
|
||
// return 30;
|
||
else //if (r == 3)
|
||
return 10;
|
||
//else
|
||
// return 8;
|
||
}
|
||
else if (hacked.classname == "building_sentrygun")
|
||
{
|
||
if (r == 1)
|
||
return 10;
|
||
// else if (r == 2)
|
||
// return 30;
|
||
else if (r == 3)
|
||
return 25;
|
||
else
|
||
return 30;
|
||
}
|
||
else if (hacked.classname == "building_tesla")
|
||
{
|
||
if (r == 1)
|
||
return 10;
|
||
// else if (r == 2)
|
||
// return 30;
|
||
else if (r == 3)
|
||
return 25;
|
||
else
|
||
return 30;
|
||
}
|
||
else if (hacked.classname == "building_sensor")
|
||
{
|
||
if (r == 1)
|
||
return 20;
|
||
// else if (r == 2)
|
||
// return 30;
|
||
else if (r == 3)
|
||
return 10;
|
||
else //if (r == 4)
|
||
return 25;
|
||
//else
|
||
// return 8;
|
||
}
|
||
else if (hacked.classname == "building_camera")
|
||
{
|
||
if (r == 1)
|
||
return 20;
|
||
// else if (r == 2)
|
||
// return 30;
|
||
else // if (r == 3)
|
||
return 20;
|
||
//else
|
||
// return 8;
|
||
}
|
||
else if (hacked.classname == "building_teleporter")
|
||
{
|
||
if (r == 1)
|
||
return 5;
|
||
// else if (r == 2)
|
||
// return 30;
|
||
else if (r == 3)
|
||
return 20;
|
||
else// if (r == 4)
|
||
return 30;
|
||
//else
|
||
// return 8;
|
||
|
||
}
|
||
else if (hacked.classname == "building_fieldgen")
|
||
{
|
||
if (r == 1)
|
||
return 10;
|
||
// else if (r == 2)
|
||
// return 30;
|
||
else if (r == 3)
|
||
return 15;
|
||
else// if (r == 4)
|
||
return 20;
|
||
//else
|
||
// return 8;
|
||
|
||
}
|
||
|
||
return 999; // hehe, punishment to the bug generator :)
|
||
};
|
||
|
||
float() CheckHaxxx =
|
||
{
|
||
local float retval;
|
||
retval = TRUE;
|
||
|
||
if (!self.martyr_enemy) // BUG!
|
||
retval = FALSE;
|
||
else if (!(IsBuilding(self.martyr_enemy)) && self.martyr_enemy.classname != "player") // BUG! GR what about cyberaug?
|
||
retval = FALSE;
|
||
else if (self.martyr_enemy.health <= 0)
|
||
{
|
||
sprint (self.owner, PRINT_HIGH, "Your target has been destroyed!\n");
|
||
|
||
if (self.has_camera != -2)
|
||
{
|
||
deathmsg=DMSG_CYBERNET;
|
||
TF_T_Damage(self.owner, self.owner, self.martyr_enemy, self.owner.health + 10, TF_TD_IGNOREARMOUR, TF_TD_OTHER);
|
||
sound (self.owner, CHAN_MISC, "effects/crunch.wav", 1, ATTN_NONE);
|
||
}
|
||
|
||
retval = FALSE;
|
||
}
|
||
else if (self.martyr_enemy.team_no != self.has_holo) // target switched team? if so.. abort
|
||
{
|
||
sprint (self.owner, PRINT_HIGH, "The communication has been lost!\n");
|
||
retval = FALSE;
|
||
}
|
||
else if (self.has_camera == -2)
|
||
{
|
||
retval = TRUE;
|
||
}
|
||
else if (Teammate(self.martyr_enemy.team_no,self.owner.team_no) && self.martyr_enemy.num_mines & self.has_camera && self.has_camera != -1)
|
||
{
|
||
sprint (self.owner, PRINT_HIGH, "Somebody improved that first.\n");
|
||
retval = FALSE;
|
||
}
|
||
else if (!Teammate(self.martyr_enemy.team_no,self.owner.team_no) && self.martyr_enemy.is_malfunctioning & self.has_camera)
|
||
{
|
||
sprint (self.owner, PRINT_HIGH, "Somebody screwed that up first! heh\n");
|
||
retval = FALSE;
|
||
}
|
||
|
||
if (!retval)
|
||
{
|
||
self.owner.is_haxxxoring = 0;
|
||
self.owner.tfstate &= ~TFSTATE_CANT_MOVE;
|
||
TeamFortress_SetSpeed(self.owner);
|
||
self.think = SUB_Remove;
|
||
self.nextthink = time + 0.1;
|
||
dremove(self);
|
||
}
|
||
|
||
return retval;
|
||
};
|
||
|
||
void() SBHackDotTimerThink =
|
||
{
|
||
if (CheckHaxxx() == FALSE) return;
|
||
|
||
local vector org;
|
||
|
||
if (random() < 0.4) //-ofn was 0.3
|
||
{
|
||
org = self.martyr_enemy.origin;
|
||
if (self.martyr_enemy.classname == "building_tesla" && self.martyr_enemy.tf_items & NIT_TURRET)
|
||
org.z = org.z - 7; // - 32;
|
||
else if (self.martyr_enemy.classname == "building_tesla")
|
||
org.z = org.z + 7; // + 32;
|
||
else if (self.martyr_enemy.classname == "building_sentrygun" && self.martyr_enemy.tf_items & NIT_TURRET)
|
||
org.z = org.z - 16;
|
||
else if (self.martyr_enemy.classname == "building_sentrygun")
|
||
org.z = org.z + 16;
|
||
else if (self.martyr_enemy.classname == "building_dispenser")
|
||
org.z = org.z + 16;
|
||
else if (self.martyr_enemy.classname == "building_fieldgen")
|
||
org.z = org.z + 32;
|
||
|
||
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
|
||
WriteByte (MSG_MULTICAST, TE_GUNSHOT);
|
||
WriteByte (MSG_MULTICAST, 3);
|
||
WriteCoord (MSG_MULTICAST, org.x);
|
||
WriteCoord (MSG_MULTICAST, org.y);
|
||
WriteCoord (MSG_MULTICAST, org.z);
|
||
multicast (org, MULTICAST_PVS);
|
||
}
|
||
|
||
self.heat = self.heat - 1;
|
||
|
||
if (self.heat <= 0)
|
||
{
|
||
SBFireInterface();
|
||
return;
|
||
}
|
||
|
||
self.nextthink = time + 1;
|
||
};
|
||
|
||
void() JobHacker =
|
||
{
|
||
local vector source;
|
||
|
||
if (self.is_haxxxoring)
|
||
{
|
||
if (self.demon_two.has_camera == -2) return; // if we ralready aborting a hack...
|
||
sprint(self, PRINT_HIGH, "Aborting hack...\n");
|
||
self.demon_two.heat = 1 + 2 * random();
|
||
self.demon_two.has_camera = -2;
|
||
return;
|
||
}
|
||
if (self.is_feigning)
|
||
{
|
||
sprint(self, PRINT_HIGH, "You cannot hack while feigning.\n");
|
||
return;
|
||
}
|
||
if (self.is_detpacking || self.is_toffingadet)
|
||
{
|
||
sprint(self, PRINT_HIGH, "You can't hack something while setting a detpack.\n");
|
||
return;
|
||
}
|
||
if (self.is_building)
|
||
{
|
||
sprint(self, PRINT_HIGH, "You can't hack while building!\n");
|
||
return;
|
||
}
|
||
|
||
source = self.origin + '0 0 16';
|
||
|
||
traceline (source, source + v_forward*500, FALSE, self);
|
||
|
||
if ( (IsBuilding(trace_ent) && trace_ent.classname != "building_sentrygun_base") || trace_ent.classname == "player")
|
||
{
|
||
|
||
if (!Teammate(trace_ent.team_no,self.team_no) && trace_ent.real_owner != self)
|
||
{
|
||
if (trace_ent.is_malfunctioning == SCREWUP_ONE + SCREWUP_TWO + SCREWUP_THREE + SCREWUP_FOUR)
|
||
{
|
||
sprint(self, PRINT_HIGH, "You couldn't possibly screw that up more than it already is.\n");
|
||
return;
|
||
}
|
||
else if (IsBuilding(trace_ent) && trace_ent.classname != "building_sentrygun_base")
|
||
{
|
||
self.current_menu = MENU_E_HACK;
|
||
self.menu_count = MENU_REFRESH_RATE;
|
||
}
|
||
}
|
||
else if (IsBuilding(trace_ent) && trace_ent.classname != "building_sentrygun_base")
|
||
{
|
||
self.current_menu = MENU_F_HACK;
|
||
self.menu_count = MENU_REFRESH_RATE;
|
||
}
|
||
|
||
|
||
self.demon_two = trace_ent;
|
||
|
||
if (trace_ent.classname=="player")
|
||
{
|
||
if (!(trace_ent.cutf_items & CUTF_CYBERAUG))
|
||
{
|
||
sprint(self, PRINT_HIGH, "You can't hack him.\n");
|
||
ResetMenu();
|
||
self.demon_two=nil;
|
||
return;
|
||
}
|
||
|
||
sprint (self, PRINT_HIGH, "\nScanning for cyberaug equipment...\n");
|
||
SBInitiateInterface(0);
|
||
ResetMenu();
|
||
}
|
||
else
|
||
{
|
||
sprint (self, PRINT_HIGH, "\nEstablishing connection...\n");
|
||
|
||
local string st;
|
||
|
||
st=GetBuildingName(self.demon_two);
|
||
|
||
sprint (self, PRINT_HIGH, "Target ôùðå: ");
|
||
sprint (self, PRINT_HIGH, st);
|
||
sprint (self, PRINT_HIGH, "\nTarget ï÷îåò: ");
|
||
sprint (self, PRINT_HIGH, self.demon_two.real_owner.netname);
|
||
|
||
if (Teammate(self.team_no,self.demon_two.team_no))
|
||
sprint (self, PRINT_HIGH, "\nFriendly device.\n");
|
||
else
|
||
sprint (self, PRINT_HIGH, "\nÅîåíù device!\n");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
sprint (self, PRINT_HIGH, "There is nothing there to hack!\n");
|
||
return;
|
||
}
|
||
|
||
};
|
||
|
||
//==================================================================
|
||
// NEEDED?
|
||
//_--------------
|
||
// called on any DIE routine for buildings to ensure nobody
|
||
// hacks unexistent machine, or eng tries to fix the building
|
||
// i think this can fix some strange crashes
|
||
|
||
/*
|
||
void(entity thebuilding) UpdateBuildingMenus =
|
||
{
|
||
local entity te;
|
||
|
||
// find all players
|
||
te = find(nil, classname, "player");
|
||
while (te)
|
||
{
|
||
if (te.job & JOB_HACKER) // a hacker?
|
||
if (!te.is_haxxxoring) // currently hacking? if so.. do nothing, he could be killed by building
|
||
if (te.demon_two == thebuilding) // this is our target?
|
||
if (te.current_menu == MENU_E_HACK || te.current_menu == MENU_F_HACK) // and we have the hack menu?
|
||
{ // then reset his menu
|
||
te.demon_two = nil;
|
||
if (te.StatusBarSize == 0)
|
||
CenterPrint(te, "\n");
|
||
else
|
||
te.StatusRefreshTime = time + 0.1;
|
||
te.menu_count = MENU_REFRESH_RATE;
|
||
te.current_menu = MENU_DEFAULT;
|
||
}
|
||
|
||
if (te.building == thebuilding) // put the eng building to wolrd, and player_menu will reset it
|
||
te.building = nil;
|
||
|
||
te = find(te, classname, "player");
|
||
}
|
||
};
|
||
*/
|