1 #using scripts\codescripts\struct;
3 #using scripts\shared\array_shared;
4 #using scripts\shared\flag_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\util_shared;
8 #insert scripts\shared\shared.gsh;
14 #define DEFAULT_HACKABLE_HACK_TIME GetDvarFloat("scr_hacker_default_hack_time")
15 #define DEFAULT_HACKABLE_DISTANCE GetDvarFloat("scr_hacker_default_distance")
16 #define DEFAULT_HACKABLE_ANGLEDOT GetDvarFloat("scr_hacker_default_angledot")
17 #define DEFAULT_HACKABLE_TIMEOUT GetDvarFloat("scr_hacker_default_timeout")
18 #define DEFAULT_HACKABLE_COST_MULT 1.0
19 #define DEFAULT_HACKABLE_PROMPT &"WEAPON_HACKING"
21 #define DEFAULT_HACKING_BASE_SPEED GetDvarFloat("scr_hacker_default_base_speed")
40 obj.hackable_test_callback = test_callback;
41 obj.hackable_start_callback = start_callback;
42 obj.hackable_fail_callback = fail_callback;
43 obj.hackable_hacked_callback = complete_callback;
48 ArrayRemoveValue( level.hackable_items, obj );
54 level.hackable_items = array::filter( level.hackable_items,
false, &
filter_deleted );
59 return IsDefined( val );
68 forward = AnglesToForward(
self.angles );
69 foreach( obj
in level.hackable_items )
76 if ( candidates.size > 0 )
78 return ArrayGetClosest(
self.origin, candidates );
85 if ( DistanceSquared( origin, obj.origin ) < obj.hackable_distance_sq )
87 to_obj = obj.origin-origin;
88 to_obj = ( to_obj[0], to_obj[1], 0 );
89 to_obj = VectorNormalize( to_obj );
90 dot = VectorDot( to_obj, forward );
91 if ( dot >= obj.hackable_angledot )
93 if ( IsDefined(obj.hackable_test_callback) )
95 return obj [[obj.hackable_test_callback]](
self);
114 obj.hackable_being_hacked =
true;
115 obj.hackable_hacked_amount = 0.0;
116 if ( IsDefined(obj.hackable_start_callback) )
118 obj thread [[obj.hackable_start_callback]](
self);
124 if ( IsDefined(obj.hackable_fail_callback) )
126 obj thread [[obj.hackable_fail_callback]](
self);
128 obj.hackable_hacked_amount = 0.0;
129 obj.hackable_being_hacked =
false;
130 obj notify(
"hackable_watch_timeout");
135 obj notify(
"hackable_watch_timeout");
136 if ( IsDefined(obj.hackable_hacked_callback) )
138 obj thread [[obj.hackable_hacked_callback]](
self);
140 obj.hackable_hacked_amount = 0.0;
141 obj.hackable_being_hacked =
false;
146 obj notify(
"hackable_watch_timeout");
147 obj endon(
"hackable_watch_timeout");
149 if ( IsDefined(obj) )
155 origin =
self.origin;
156 forward = AnglesToForward(
self.angles );
159 if (!
IS_TRUE(obj.hackable_being_hacked))
163 if (IsDefined(obj.hackable_timeout) && obj.hackable_timeout > 0 )
168 amt = 1.0 / ( 20 * obj.hackable_hack_time );
170 obj.hackable_hacked_amount += amt;
172 if ( obj.hackable_hacked_amount > 1.0 )
177 if (
IS_TRUE(obj.hackable_being_hacked))
178 return obj.hackable_hacked_amount;
180 if (
IS_TRUE(obj.hackable_being_hacked))