2 #using scripts\codescripts\struct;
4 #using scripts\shared\callbacks_shared;
5 #using scripts\shared\clientfield_shared;
6 #using scripts\shared\doors_shared;
7 #using scripts\shared\flagsys_shared;
8 #using scripts\shared\gameobjects_shared;
9 #using scripts\shared\scene_shared;
10 #using scripts\shared\system_shared;
11 #using scripts\shared\util_shared;
12 #using scripts\shared\visionset_mgr_shared;
14 #insert scripts\shared\shared.gsh;
15 #insert scripts\shared\version.gsh;
17 #namespace teamgather;
19 #define FLOOR_EFFECTS_ACTIVE 0
21 #define GATHER_POSITION_OFFSET -100.0
23 #define IN_POSITION_MIN_TIME (0.0)
24 #define DISPLAY_SUCCESS_TEXT_TIME (0) // 2
26 #precache( "triggerstring", "TEAM_GATHER_HOLD_FOR_TEAM_ENTER" );
27 #precache( "string", "TEAM_GATHER_TEAM_STEALTH_ENTER" );
28 #precache( "string", "TEAM_GATHER_PLAYERS_READY" );
29 #precache( "string", "TEAM_GATHER_TIME_REMAINING_1" );
30 #precache( "string", "TEAM_GATHER_TIME_REMAINING_2" );
31 #precache( "string", "TEAM_GATHER_TIME_REMAINING_3" );
32 #precache( "string", "TEAM_GATHER_TIME_REMAINING_4" );
33 #precache( "string", "TEAM_GATHER_TIME_REMAINING_5" );
34 #precache( "string", "TEAM_GATHER_TIME_REMAINING_6" );
35 #precache( "string", "TEAM_GATHER_TIME_REMAINING_7" );
36 #precache( "string", "TEAM_GATHER_TIME_REMAINING_8" );
37 #precache( "string", "TEAM_GATHER_TIME_REMAINING_9" );
38 #precache( "string", "TEAM_GATHER_TIME_REMAINING_10" );
39 #precache( "string", "TEAM_GATHER_TEAM_EVENT_ABORTED" );
40 #precache( "string", "TEAM_GATHER_PLAYER_STARTING_EVENT" );
41 #precache( "string", "TEAM_GATHER_NUM_PLAYERS" );
42 #precache( "string", "TEAM_GATHER_HOLD_TO_GO_NOW" );
43 #precache( "string", "TEAM_GATHER_GATHER_SUCCESS" );
44 #precache( "string", "TEAM_GATHER_START_IN_1" );
45 #precache( "string", "TEAM_GATHER_START_IN_2" );
46 #precache( "string", "TEAM_GATHER_START_IN_3" );
47 #precache( "string", "TEAM_GATHER_START_IN_4" );
48 #precache( "string", "TEAM_GATHER_START_IN_5" );
49 #precache( "string", "TEAM_GATHER_START_IN_6" );
50 #precache( "string", "TEAM_GATHER_START_IN_7" );
51 #precache( "string", "TEAM_GATHER_START_IN_8" );
52 #precache( "string", "TEAM_GATHER_START_IN_9" );
53 #precache( "string", "TEAM_GATHER_START_IN_10" );
55 #define GATHER_RADIUS (42*5) // 42*4
56 #define TELEPORT_RADIUS ( GATHER_RADIUS - 42 )
57 #define GATHER_COUNTDOWN 10 // 10
58 #define MIN_PLAYER_TELEPORT_DISTANCE (42*2)
60 #define GATHER_FLOOR_EFFECT "_t6/misc/fx_ui_flagbase_pmc"
62 #define WAYPOINT_SHADER "T7_hud_prompt_press_64" // "t7_hud_waypoints_beacon"
63 #define COMPASS_SHADER "T7_hud_prompt_press_64" // "t7_hud_minimap_beacon_key"
65 #precache( "material", WAYPOINT_SHADER );
66 #precache( "material", COMPASS_SHADER );
68 #precache( "fx", "_t6/misc/fx_ui_flagbase_pmc" );
191 for( i=0; i<a_players.size; i++ )
193 e_player = a_players[i];
199 for( i=0; i<a_players.size; i++ )
201 e_player = a_players[i];
202 e_player.success_hud_elem Destroy();
215 for( i=0; i<a_players.size; i++ )
217 e_player = a_players[i];
223 for( i=0; i<a_players.size; i++ )
225 e_player = a_players[i];
226 e_player.failure_hud_elem Destroy();
237 e_trigger =
spawn(
"trigger_radius_use", v_pos, 0, n_radius, 30 );
238 e_trigger TriggerIgnoreTeam();
239 e_trigger SetVisibleToAll();
240 e_trigger SetTeamForTrigger(
"none" );
241 e_trigger UseTriggerRequireLookAt();
242 e_trigger SetCursorHint(
"HINT_NOICON" );
245 gobj_model_offset = ( 0, 0, 0 );
246 if( IsDefined(STR_MODEL) )
248 gobj_visuals[0] =
spawn(
"script_model", v_pos + gobj_model_offset );
249 gobj_visuals[0] setModel( STR_MODEL );
260 gobj_objective_name = undefined;
263 gobj_team =
"allies";
264 gobj_trigger = e_trigger;
265 gobj_offset = ( 0, 0, -5 );
296 self.c_teamgather.m_e_player_leader = player;
297 self notify(
"player_interaction" );
313 v_start = ( v_pos[0], v_pos[1], v_pos[2]+20 );
314 v_end = ( v_pos[0], v_pos[1], v_pos[2]-94 );
315 trace = BulletTrace( v_start, v_end, 0, undefined );
317 v_floor_pos =
trace[
"position" ];
384 if( a_players.size <= 1 )
389 for( i=0; i<a_players.size; i++ )
391 e_player = a_players[i];
414 self.m_teamgather_complete =
true;
415 self.m_success = success;
453 if( time_remaining <= 0 )
475 for( i=0; i<a_players.size; i++ )
477 e_player = a_players[i];
478 if(
IS_TRUE(e_player.in_gather_position) )
482 e_player.in_gather_position = undefined;
495 if( !IsDefined(
self.in_position_start_time) )
497 self.in_position_start_time = gettime();
501 dt = ( time -
self.in_position_start_time ) / 1000;
509 self.in_position_start_time = undefined;
524 for( i=0; i<a_players.size; i++ )
526 a_players[i].in_gather_position = undefined;
531 for( i=0; i<a_players.size; i++ )
533 e_player = a_players[i];
539 if(
IS_TRUE(force_player_into_position) && !
IS_TRUE(e_player.in_gather_position) )
545 if(
IS_TRUE(e_player.in_gather_position) )
576 player_valid =
false;
580 v_start_pos = ( e_player.origin[0], e_player.origin[1],e_player.origin[2]+32 );
584 if( (e_player.origin[2] - v_end_pos[2]) < -64 )
586 player_valid =
false;
590 v_trace = BulletTrace( v_start_pos, v_end_pos, 0, undefined );
591 v_trace_pos = v_trace[
"position" ];
595 player_valid =
false;
599 return( player_valid);
631 if( (e_player UseButtonPressed()) )
653 for( i=0; i<a_players.size; i++ )
655 if( e_player != a_players[i] )
657 dist = Distance2D( e_player.origin, a_players[i].origin );
671 dp = vectordot( v_forward, v_dir );
686 if( !positionWouldTelefrag( e_player.zoom_pos ) )
693 e_player SetOrigin( e_player.zoom_pos );
696 v0 = (
self.m_v_interact_position[0],
self.m_v_interact_position[1],
self.m_v_interact_position[2] );
697 v1 = ( e_player.zoom_pos[0], e_player.zoom_pos[1],
self.m_v_interact_position[2] );
698 v_dir = vectornormalize( v0 - v1 );
699 v_angles = VectorToAngles( v_dir );
701 e_player SetPlayerAngles( v_angles );
709 e_player endon(
"disconnect" );
718 y_off = y_start + 100;
722 y_off = y_start + 130;
725 a_time_remaining =
array(
"0", &
"TEAM_GATHER_TIME_REMAINING_1", &
"TEAM_GATHER_TIME_REMAINING_2", &
"TEAM_GATHER_TIME_REMAINING_3", &
"TEAM_GATHER_TIME_REMAINING_4",
726 &
"TEAM_GATHER_TIME_REMAINING_5", &
"TEAM_GATHER_TIME_REMAINING_6", &
"TEAM_GATHER_TIME_REMAINING_7", &
"TEAM_GATHER_TIME_REMAINING_8",
727 &
"TEAM_GATHER_TIME_REMAINING_9", &
"TEAM_GATHER_TIME_REMAINING_10" );
737 execute_hud_elem setText( a_time_remaining[ time_remaining ] );
742 gather_hud_elem Destroy();
743 ready_hud_elem Destroy();
744 execute_hud_elem Destroy();
752 e_player endon(
"disconnect" );
761 starting_hud_elem setText( &
"TEAM_GATHER_PLAYER_STARTING_EVENT",
self.
m_e_player_leader );
764 y_off = y_start + 40;
768 y_off = y_start + 40;
772 y_off = y_start + 80;
775 a_start_in =
array(
"0", &
"TEAM_GATHER_START_IN_1", &
"TEAM_GATHER_START_IN_2", &
"TEAM_GATHER_START_IN_3", &
"TEAM_GATHER_START_IN_4",
776 &
"TEAM_GATHER_START_IN_5", &
"TEAM_GATHER_START_IN_6", &
"TEAM_GATHER_START_IN_7", &
"TEAM_GATHER_START_IN_8",
777 &
"TEAM_GATHER_START_IN_9", &
"TEAM_GATHER_START_IN_10" );
787 start_in_hud_elem setText( a_start_in[ time_remaining ] );
790 if(
IS_TRUE(e_player.in_gather_position) )
792 go_hud_elem setText(
"" );
796 go_hud_elem setText( &
"TEAM_GATHER_HOLD_TO_GO_NOW" );
802 starting_hud_elem Destroy();
803 gathered_hud_elem Destroy();
804 start_in_hud_elem Destroy();
805 go_hud_elem Destroy();
813 hud_elem = NewClientHudElem(
self );
814 hud_elem.elemType =
"font";
815 hud_elem.font =
"objective";
816 hud_elem.alignX = alignX;
817 hud_elem.alignY = alignY;
818 hud_elem.horzAlign = horzAlign;
819 hud_elem.vertAlign = vertAlign;
820 hud_elem.x += xOffset;
821 hud_elem.y += yOffset;
822 hud_elem.foreground =
true;
823 hud_elem.fontScale = fontScale;
825 hud_elem.color = color;
826 hud_elem.hidewheninmenu =
true;
827 hud_elem SetText( str_text );
836 self.e_gameobject.start_time = gettime();
837 self.e_gameobject.total_time = total_time;
846 dt = ( time -
self.e_gameobject.start_time ) / 1000;
847 time_remaining =
self.e_gameobject.total_time - dt;
848 return( time_remaining );
863 if( time_remaining > 10 )
867 else if( time_remaining < 1 )
872 return( time_remaining );
882 a_all_players = getplayers();
883 for( i=0; i<a_all_players.size; i++ )
885 e_player = a_all_players[i];
886 if( e_player.sessionstate ==
"playing" )
888 a_players[a_players.size] = e_player;
905 v_forward = AnglesToForward( v_interact_angles );
909 v_start = ( v_gather_pos[0], v_gather_pos[1], v_gather_pos[2] + 20 );
910 v_end = ( v_gather_pos[0], v_gather_pos[1], v_gather_pos[2] - 100 );
911 v_trace = BulletTrace( v_start, v_end, 0, undefined );
912 v_floor_pos = v_trace[
"position" ];
914 v_gather_pos = ( v_gather_pos[0], v_gather_pos[1], v_floor_pos[2]+10 );
917 success = [[ c_teamgather ]]->create_teamgather_event( v_interact_pos, v_interact_angles, v_gather_pos, e_interact_entity );
922 e_player = c_teamgather.m_e_player_leader;
926 e_player = undefined;
930 [[ c_teamgather ]]->cleanup();