1 #using scripts\shared\array_shared;
2 #using scripts\shared\audio_shared;
3 #using scripts\shared\exploder_shared;
4 #using scripts\shared\footsteps_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\scene_shared;
7 #using scripts\shared\util_shared;
9 #insert scripts\shared\shared.gsh;
15 if ( isdefined( level._callbacks ) && isdefined( level._callbacks[event] ) )
17 for ( i = 0; i < level._callbacks[event].size; i++ )
19 callback = level._callbacks[event][i][0];
20 obj = level._callbacks[event][i][1];
27 if ( isdefined( obj ) )
29 if ( isdefined( params ) )
31 obj thread [[
callback]]( localclientnum,
self, params );
35 obj thread [[
callback]]( localclientnum, self );
40 if ( isdefined( params ) )
42 self thread [[
callback]]( localclientnum, params );
46 self thread [[
callback]]( localclientnum );
55 if ( isdefined(
self._callbacks ) && isdefined(
self._callbacks[event] ) )
57 for ( i = 0; i <
self._callbacks[event].size; i++ )
60 obj =
self._callbacks[event][i][1];
67 if ( isdefined( obj ) )
69 if ( isdefined( params ) )
71 obj thread [[
callback]]( localclientnum,
self, params );
75 obj thread [[
callback]]( localclientnum, self );
80 if ( isdefined( params ) )
82 self thread [[
callback]]( localclientnum, params );
86 self thread [[
callback]]( localclientnum );
95 assert( isdefined( event ),
"Trying to set a callback on an undefined event." );
97 if ( !isdefined( level._callbacks ) || !isdefined( level._callbacks[event] ) )
99 level._callbacks[event] = [];
102 foreach(
callback in level._callbacks[event] )
106 if( !isdefined( obj ) ||
callback[1] == obj )
115 if ( isdefined( obj ) )
123 assert( isdefined( event ),
"Trying to set a callback on an undefined event." );
125 if ( !isdefined(
self._callbacks ) || !isdefined(
self._callbacks[event] ) )
127 self._callbacks[event] = [];
130 foreach(
callback in self._callbacks[event] )
134 if( !isdefined( obj ) ||
callback[1] == obj )
146 self waittill(
"death" );
152 assert( isdefined( event ),
"Trying to remove a callback on an undefined event." );
153 assert( isdefined( level._callbacks[event] ),
"Trying to remove callback for unknown event." );
155 foreach ( index, func_group
in level._callbacks[event] )
157 if ( func_group[0] == func )
161 ArrayRemoveIndex( level._callbacks[event], index,
false );
316 if(!isdefined(level._systemStates))
318 level._systemStates = [];
321 if(!isdefined(level._systemStates[system]))
323 level._systemStates[system] = spawnstruct();
327 level._systemStates[system].state = newState;
329 if(isdefined(level._systemStates[system].callback))
331 [[level._systemStates[system].callback]](clientNum, newState);
335 /# println(
"*** Unhandled client system state change - " + system +
" - has no registered callback function."); #/
341 /# println(
"*** Client script VM map restart."); #/
351 /# println(
"*** Client script VM : Local client connect " + localClientNum); #/
352 [[level.callbackLocalClientConnect]]( localClientNum );
357 /# println(
"*** Client script VM : Local client disconnect " + clientNum); #/
362 level notify(
"glass_smash", org, dir);
381 /# PrintLn(
"****CodeCallback_PlayerSpawned****"); #/
382 [[level.callbackPlayerSpawned]]( localClientNum );
388 if ( isdefined( level._gibEventCBFunc ) )
390 self thread [[level._gibEventCBFunc]]( localClientNum, type, locations );
400 if(isdefined(level.callbackPrecacheGameType))
402 [[level.callbackPrecacheGameType]]();
412 if(isdefined(level.callbackStartGameType) && (!isdefined(level.gametypestarted) || !level.gametypestarted))
414 [[level.callbackStartGameType]]();
416 level.gametypestarted =
true;
422 [[level.callbackEntitySpawned]]( localClientNum );
429 case "scr_bomb_beep":
431 if ( GetGametypeSetting(
"silentPlant" ) == 0 )
433 entity PlaySound( localClientNum,
"fly_bomb_buttons_npc" );
441 if( isdefined( level.callbackEntityShutdown ) )
443 [[level.callbackEntityShutdown]]( localClientNum, entity );
451 level.localPlayers = getLocalPlayers();
458 level.localPlayers = getLocalPlayers();
461 function CodeCallback_AirSupport( localClientNum, x, y, z, type, yaw, team, teamfaction, owner, exittype, time, height )
463 if( isdefined( level.callbackAirSupport ) )
465 [[level.callbackAirSupport]]( localClientNum, x, y, z, type, yaw, team, teamfaction, owner, exittype, time, height );
471 level notify(
"demo_jump", time );
472 level notify(
"demo_jump" + localClientNum, time );
477 level notify(
"demo_player_switch" );
478 level notify(
"demo_player_switch" + localClientNum );
483 level notify(
"player_switch" );
484 level notify(
"player_switch" + localClientNum );
489 level notify(
"killcam_begin", time );
490 level notify(
"killcam_begin" + localClientNum, time );
495 level notify(
"killcam_end", time );
496 level notify(
"killcam_end" + localClientNum, time );
501 if( isdefined( level.callbackCreatingCorpse ) )
503 [[level.callbackCreatingCorpse]]( localClientNum, player );
514 if(!isdefined(level._exploder_ids))
520 keys = getarraykeys(level._exploder_ids);
524 for(i = 0; i < keys.size; i ++)
526 if(level._exploder_ids[keys[i]] == exploder_id)
546 if(!isdefined(level._exploder_ids))
549 keys = getarraykeys(level._exploder_ids);
553 for(i = 0; i < keys.size; i ++)
555 if(level._exploder_ids[keys[i]] == exploder_id)
575 if( isdefined( level.sndChargeShot_Func ) )
577 self [[level.sndChargeShot_Func]]( localClientNum, weapon, chargeShotLevel );
583 /# println(
"*** Client: CodeCallback_HostMigration()"); #/
584 if( isdefined( level.callbackHostMigration ) )
586 [[level.callbackHostMigration]]( localClientNum );
592 if( isdefined( level.callbackDogSoundNotify ) )
594 [[level.callbackDogSoundNotify]]( client_num, entity, note );
600 [[level.callbackPlayAIFootstep]]( client_num, pos, surface, notetrack, bone );
605 [[level.callbackPlayLightLoopExploder]]( exploderIndex );
610 num = Int(exploderIndex);
612 if(isdefined(level.createFXexploders[num]))
614 for(i = 0; i < level.createFXexploders[num].size; i ++)
616 ent = level.createFXexploders[num][i];
618 if ( !isdefined( ent.looperFX ) )
623 for( clientNum = 0; clientNum < level.max_local_clients; clientNum++ )
625 if( localClientActive( clientNum ) )
627 if ( isdefined( ent.looperFX[clientNum] ) )
629 for( looperFXCount = 0; looperFXCount < ent.looperFX[clientNum].size; looperFXCount++ )
631 deletefx( clientNum, ent.looperFX[clientNum][looperFXCount] );
636 ent.looperFX[clientNum] = [];
646 if( isdefined( level.callbackClientFlag ) )
648 [[level.callbackClientFlag]]( localClientNum, flag,
set );
654 if(isdefined(level._client_flagasval_callbacks) && isdefined(level._client_flagasval_callbacks[
self.type]))
656 self thread [[level._client_flagasval_callbacks[
self.type]]](localClientNum, val);
662 if ( isdefined( level.extra_cam_render_hero_func_callback ) )
664 [[level.extra_cam_render_hero_func_callback]]( localClientNum, jobIndex, extraCamIndex, sessionMode, characterIndex );
670 if ( isdefined( level.extra_cam_render_lobby_client_hero_func_callback ) )
672 [[level.extra_cam_render_lobby_client_hero_func_callback]]( localClientNum, jobIndex, extraCamIndex, sessionMode );
678 if ( isdefined( level.extra_cam_render_current_hero_headshot_func_callback ) )
680 [[level.extra_cam_render_current_hero_headshot_func_callback]]( localClientNum, jobIndex, extraCamIndex, sessionMode, characterIndex, isDefaultHero );
684 #if XFILE_VERSION >= 553
687 #else // #if XFILE_VERSION >= 553
690 defaultItemRender =
false;
691 #endif // #else // #if XFILE_VERSION >= 553
693 if ( isdefined( level.extra_cam_render_character_body_item_func_callback ) )
695 [[level.extra_cam_render_character_body_item_func_callback]]( localClientNum, jobIndex, extraCamIndex, sessionMode, characterIndex, itemIndex, defaultItemRender );
699 #if XFILE_VERSION >= 553
702 #else // #if XFILE_VERSION >= 553
705 defaultItemRender =
false;
706 #endif // #else // #if XFILE_VERSION >= 553
708 if ( isdefined( level.extra_cam_render_character_helmet_item_func_callback ) )
710 [[level.extra_cam_render_character_helmet_item_func_callback]]( localClientNum, jobIndex, extraCamIndex, sessionMode, characterIndex, itemIndex, defaultItemRender );
714 #if XFILE_VERSION >= 553
717 #else // #if XFILE_VERSION >= 553
720 defaultItemRender =
false;
721 #endif // #else // #if XFILE_VERSION >= 553
723 if ( isdefined( level.extra_cam_render_character_head_item_func_callback ) )
725 [[level.extra_cam_render_character_head_item_func_callback]]( localClientNum, jobIndex, extraCamIndex, sessionMode, headIndex, defaultItemRender );
731 if ( isdefined( level.extra_cam_render_outfit_preview_func_callback ) )
733 [[level.extra_cam_render_outfit_preview_func_callback]]( localClientNum, jobIndex, extraCamIndex, sessionMode, outfitIndex );
737 #if XFILE_VERSION >= 568
738 function CodeCallback_ExtraCamRenderWCPaintjobIcon( localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot, isFilesharePreview )
740 #else //#if XFILE_VERSION >= 568
743 #endif //#else //#if XFILE_VERSION >= 568
744 if ( isdefined( level.extra_cam_render_wc_paintjobicon_func_callback ) )
746 #if XFILE_VERSION >= 568
747 [[level.extra_cam_render_wc_paintjobicon_func_callback]]( localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot, isFilesharePreview );
748 #else //#if XFILE_VERSION >= 568
749 [[level.extra_cam_render_wc_paintjobicon_func_callback]]( localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot );
750 #endif //#else //#if XFILE_VERSION >= 568
754 #if XFILE_VERSION >= 568
755 function CodeCallback_ExtraCamRenderWCVariantIcon( localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot, isFilesharePreview )
757 #else //#if XFILE_VERSION >= 568
760 #endif //#else //#if XFILE_VERSION >= 568
762 if ( isdefined( level.extra_cam_render_wc_varianticon_func_callback ) )
764 #if XFILE_VERSION >= 568
765 [[level.extra_cam_render_wc_varianticon_func_callback]]( localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot, isFilesharePreview );
766 #else //#if XFILE_VERSION >= 568
767 [[level.extra_cam_render_wc_varianticon_func_callback]]( localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot );
768 #endif //#else //#if XFILE_VERSION >= 568
774 if ( isdefined( level.on_collectibles_change ) )
776 [[level.on_collectibles_change]]( changedClient, collectiblesArray, localClientNum );
782 if ( !isdefined( level.weapon_type_callback_array ) )
784 level.weapon_type_callback_array = [];
787 if ( IsString(weapontype) )
789 weapontype = GetWeapon(weapontype);
792 level.weapon_type_callback_array[weapontype] =
callback;
797 weapontype =
self.weapon.rootweapon;
798 if( isdefined( level.weapon_type_callback_array ) && isdefined( level.weapon_type_callback_array[weapontype] ) )
800 self thread [[level.weapon_type_callback_array[weapontype]]]( localClientNum );
812 if ( !IsDefined( level._animnotifyfuncs ) )
815 if ( IsDefined( level._animnotifyfuncs[ label ] ) )
817 pSelf [[ level._animnotifyfuncs[ label ] ]]( param );
823 if ( !IsDefined( level._animnotifyfuncs ) )
826 if ( IsDefined( level._animnotifyfuncs[ label ] ) )
828 level [[ level._animnotifyfuncs[ label ] ]]( param );
834 if( IsDefined( level.server_scenes[ scene_name ] ) )
844 if( isdefined( level.server_scenes[ scene_name ] ) )
854 if( isdefined( level.server_scenes[ scene_name ] ) )
856 level thread
scene::stop( scene_name, undefined, undefined, undefined,
true );
862 foreach ( i, player
in level.localplayers )
864 if ( !isdefined( player.lui_black ) )
866 player.lui_black = CreateLUIMenu( i,
"FullScreenBlack" );
867 OpenLUIMenu( i, player.lui_black );
873 foreach ( i, player
in level.localplayers )
875 if ( isdefined( player.lui_black ) )
877 CloseLUIMenu( i, player.lui_black );
878 player.lui_black = undefined;
885 if( isdefined( level.gadgetVisionPulse_reveal_func ) )
887 entity [[level.gadgetVisionPulse_reveal_func]](local_client_num, bReveal );