Guest User

Untitled

a guest
Jan 18th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 30.94 KB | None | 0 0
  1.     new const VERSION[ ] = "1.0.0";
  2.      
  3.     #include < amxmodx >
  4.     #include < fun >
  5.     #include < engine >
  6.     #include < cstrike >
  7.     #include < fakemeta >
  8.     #include < hamsandwich >
  9.     #include < cs_team_changer >
  10.      
  11.     #include "ogc_zp/defines.inc"
  12.      
  13.     // ===================================================================================
  14.     // >>  INTEGERS
  15.     // ===================================================================================
  16.      
  17.     new gD_status[ 33 ], gD_ammopacks[ 33 ], gD_zombieClass[ 33 ];
  18.     new gMsg_DeathMsg, gMsg_ScoreAttrib;
  19.      
  20.     // ===================================================================================
  21.     // >>  BOOLEANS
  22.     // ===================================================================================
  23.      
  24.     new bool: gB_alive[ 33 ], bool: gB_connected[ 33 ];
  25.      
  26.     // ===================================================================================
  27.     // >>  BITS
  28.     // ===================================================================================
  29.      
  30.     new gBi_Round, gBi_PreRound;
  31.      
  32.     // ===================================================================================
  33.     // >>  FLOATS
  34.     // ===================================================================================
  35.      
  36.     new Float: gF_damagesAP[ 33 ], Float: gF_gameTime, gF_spawnProtect[ 33 ];
  37.      
  38.     // ===================================================================================
  39.     // >>  STRINGS
  40.     // ===================================================================================
  41.      
  42.     new gZ_ClassName[ MAX_CLASS ][ 32 ];
  43.     new gS_playerName[ 33 ][ 32 ];
  44.      
  45.     new const player[ ] = "player";
  46.     new const entity_hud[ ] = "entity_hud";
  47.      
  48.     // ===================================================================================
  49.     // >>  INIT - PRECACHE
  50.     // ===================================================================================
  51.      
  52.     public plugin_init( )
  53.     {
  54.             #define PRE     false
  55.             #define POST    true
  56.            
  57.             register_plugin( "[ZP] Main Core", VERSION, "AREAAZ" );
  58.             register_dictionary( "zombie_plague.txt" );
  59.            
  60.             //--------> EVENTS
  61.            
  62.             register_event( "HLTV", "EVENT__HLTV", "a", "1=0", "2=0" );
  63.             register_logevent( "EVENT__ROUND_END", 2, "1=Round_End" );
  64.            
  65.             //--------> HAMSANDWICH
  66.            
  67.             RegisterHam( Ham_Spawn, player, "HAM__POST_SPAWN", POST );
  68.             RegisterHam( Ham_Killed, player, "HAM__POST_Killed", POST );
  69.             RegisterHam( Ham_TakeDamage, player, "HAM__POST_TakeDamage", POST );
  70.            
  71.             RegisterHam( Ham_TakeDamage, player, "HAM__PRE_TakeDamage", PRE );
  72.            
  73.             //--------> FAKEMETA
  74.            
  75.             register_forward( FM_ClientUserInfoChanged, "FM__POST_ClientUserInfoChanged", POST );
  76.            
  77.             //--------> ENGINE
  78.            
  79.             register_think( entity_hud, "ENGINE__THINK_EntityHud" );
  80.             register_touch( "weaponbox", player, "ENGINE__TOUCH_WeaponBox" );
  81.            
  82.             gF_gameTime = get_gametime( ) + 1.0;
  83.            
  84.             new const entity = create_entity( "info_target" );
  85.             entity_set_string( entity, EV_SZ_classname, entity_hud );
  86.             entity_set_float( entity, EV_FL_nextthink, gF_gameTime );
  87.            
  88.             //--------> OTHERS
  89.            
  90.             gMsg_DeathMsg = get_user_msgid( "DeathMsg" );
  91.             gMsg_ScoreAttrib = get_user_msgid( "ScoreAttrib" );
  92.            
  93.             gBi_Round = ROUND_NOMODE;
  94.     }
  95.      
  96.     public plugin_init_bots( const id )
  97.     {
  98.             RegisterHamFromEntity( Ham_Spawn, id, "HAM__POST_SPAWN", POST );
  99.             RegisterHamFromEntity( Ham_Killed, id, "HAM__POST_Killed", POST );
  100.             RegisterHamFromEntity( Ham_TakeDamage, id, "HAM__POST_TakeDamage", POST );
  101.            
  102.             RegisterHamFromEntity( Ham_TakeDamage, id, "HAM__PRE_TakeDamage", PRE );
  103.            
  104.             HAM__POST_SPAWN( id );
  105.     }
  106.      
  107.     public plugin_precache( )
  108.     {
  109.             precache_sound( SOUND_ARMOR_HIT );
  110.     }
  111.      
  112.     // ===================================================================================
  113.     // >>  AMXMODX
  114.     // ===================================================================================
  115.      
  116.     public client_putinserver( id )
  117.     {
  118.             gB_connected[ id ] = true;
  119.            
  120.             static g_registered;
  121.            
  122.             if( !g_registered && is_user_bot( id ) )
  123.             {
  124.                     g_registered = 1;
  125.                     set_task( 0.4, "plugin_init_bots", id );
  126.             }
  127.     }
  128.      
  129.     public client_disconnect( id )
  130.     {
  131.             gB_connected[ id ] = false;
  132.             gB_alive[ id ] = false;
  133.             gF_damagesAP[ id ] = 0.0;
  134.             gD_status[ id ] = STATUS_HUMAN;
  135.             gD_ammopacks[ id ] = 0;
  136.     }
  137.      
  138.     public EVENT__HLTV( )
  139.     {
  140.             remove_task( TASK_ID_BEGIN );
  141.            
  142.             switch( random( 100 ) )
  143.             {
  144.                     case 0..5:
  145.                     {
  146.                             gBi_PreRound = ROUND_NEMESIS;
  147.                     }
  148.                     case 6..10:
  149.                     {
  150.                             gBi_PreRound = ROUND_SWARM;
  151.                     }
  152.                     case 11..100:
  153.                     {
  154.                             gBi_PreRound = ROUND_SURVIVOR;
  155.                     }
  156.                     default:
  157.                     {
  158.                             gBi_PreRound = ROUND_NORMAL;
  159.                     }
  160.             }
  161.            
  162.             gBi_Round = ROUND_NOMODE;
  163.            
  164.             set_task( TASK_TIME_BEGIN, "TASK__BeginRound", TASK_ID_BEGIN );
  165.            
  166.             arrayset( gD_status, STATUS_HUMAN, 32 );
  167.     }
  168.      
  169.     public EVENT__ROUND_END( )
  170.     {
  171.             static Float: lastTime;
  172.            
  173.             if( gF_gameTime - lastTime > 0.5 )
  174.             {
  175.                     lastTime = gF_gameTime;
  176.                    
  177.                     new players[ 32 ], num;
  178.                     get_players( players, num, "h" );
  179.                    
  180.                     new playersCT[ 32 ], playersT[ 32 ];
  181.                    
  182.                     new ctTeam, tTeam;
  183.                    
  184.                     for( new i = 0, id = players[ 0 ]; i < num; id = players[ ++ i ] )
  185.                     {
  186.                             switch( cs_get_user_team( id ) )
  187.                             {
  188.                                     case CS_TEAM_CT:
  189.                                     {
  190.                                             playersCT[ ctTeam ] = id;
  191.                                             ++ ctTeam;
  192.                                     }
  193.                                     case CS_TEAM_T:
  194.                                     {
  195.                                             playersT[ tTeam ] = id;
  196.                                             ++ tTeam;
  197.                                     }
  198.                             }
  199.                     }
  200.                    
  201.                     client_print( 0, print_chat, "%d %d", ctTeam, tTeam );
  202.                    
  203.                     new player;
  204.                    
  205.                     while( tTeam - ctTeam > 1 )
  206.                     {
  207.                             player = 0;
  208.                            
  209.                             while( !player )
  210.                             {
  211.                                     player = playersT[ random_num( 0, tTeam - 1 ) ];
  212.                             }
  213.                            
  214.                             cs_set_team( player, _: CS_TEAM_CT );
  215.                             -- tTeam;
  216.                             ++ ctTeam;
  217.                     }
  218.                    
  219.                     while( ctTeam - tTeam > 1 )
  220.                     {
  221.                             player = 0;
  222.                            
  223.                             while( !player )
  224.                             {
  225.                                     player = playersCT[ random_num( 0, ctTeam - 1 ) ];
  226.                             }
  227.                            
  228.                             cs_set_team( player, _: CS_TEAM_T );
  229.                             -- ctTeam;
  230.                             ++ tTeam;
  231.                     }
  232.                    
  233.                     if( !CORE__GET_PLAYERS_COUNT( STATUS_ZOMBIE, 1 ) && !CORE__GET_PLAYERS_COUNT( STATUS_NEMESIS, 1 ) )
  234.                     {
  235.                             set_hudmessage( 0, 0, 200, HUD_EVENT_X, HUD_EVENT_Y, 0, 0.0, 3.0, 2.0, 1.0, HUD_CHAN_EVENT );
  236.                             show_hudmessage( 0, "%L", LANG_PLAYER, "WIN_HUMAN" );
  237.                     }
  238.                     else if( !CORE__GET_PLAYERS_COUNT( STATUS_HUMAN, 1 ) && !CORE__GET_PLAYERS_COUNT( STATUS_SURVIVOR, 1 ) )
  239.                     {
  240.                             set_hudmessage( 200, 0, 0, HUD_EVENT_X, HUD_EVENT_Y, 0, 0.0, 3.0, 2.0, 1.0, HUD_CHAN_EVENT );
  241.                             show_hudmessage( 0, "%L", LANG_PLAYER, "WIN_ZOMBIE" );
  242.                     }
  243.                     else
  244.                     {
  245.                             set_hudmessage( 200, 0, 0, HUD_EVENT_X, HUD_EVENT_Y, 0, 0.0, 3.0, 2.0, 1.0, HUD_CHAN_EVENT );
  246.                             show_hudmessage( 0, "%L", LANG_PLAYER, "WIN_NO_ONE" );
  247.                     }
  248.             }
  249.     }
  250.      
  251.     // ===================================================================================
  252.     // >>  ENGINE
  253.     // ===================================================================================
  254.      
  255.     public ENGINE__THINK_EntityHud( const entity )
  256.     {
  257.             for( new id = 1; id <= MAX_PLAYERS; id ++ )
  258.             {
  259.                     if( gB_connected[ id ] )
  260.                     {
  261.                             if( gB_alive[ id ] )
  262.                             {
  263.                                     switch( gD_status[ id ] )
  264.                                     {
  265.                                             case STATUS_SURVIVOR:
  266.                                             {
  267.                                                     set_hudmessage( 0, 0, 255, HUD_STATS_X, HUD_STATS_Y, 2, 0.0, 1.1, 0.0, 0.0, HUD_CHAN_STATS );
  268.                                                     show_hudmessage( id, "%L >> %L: %d - %L %d", id, "CLASS_SURVIVOR", id, "ZOMBIE_ATTRIB1", get_user_health( id ), id, "AMMO_PACKS1", gD_ammopacks[ id ] );
  269.                                             }
  270.                                             case STATUS_HUMAN:
  271.                                             {
  272.                                                     set_hudmessage( 0, 0, 255, HUD_STATS_X, HUD_STATS_Y, 2, 0.0, 1.1, 0.0, 0.0, HUD_CHAN_STATS );
  273.                                                     show_hudmessage( id, "%L >> %L: %d - %L %d", id, "CLASS_HUMAN", id, "ZOMBIE_ATTRIB1", get_user_health( id ), id, "AMMO_PACKS1", gD_ammopacks[ id ] );
  274.                                             }
  275.                                             case STATUS_NEMESIS:
  276.                                             {
  277.                                                     set_hudmessage( 255, 0, 0, HUD_STATS_X, HUD_STATS_Y, 2, 0.0, 1.1, 0.0, 0.0, HUD_CHAN_STATS );
  278.                                                     show_hudmessage( id, "%L >> %L: %d - %L %d", id, "CLASS_NEMESIS", id, "ZOMBIE_ATTRIB1", get_user_health( id ), id, "AMMO_PACKS1", gD_ammopacks[ id ] );
  279.                                             }
  280.                                             case STATUS_ZOMBIE:
  281.                                             {
  282.                                                     set_hudmessage( 255, 0, 0, HUD_STATS_X, HUD_STATS_Y, 2, 0.0, 1.1, 0.0, 0.0, HUD_CHAN_STATS );
  283.                                                     show_hudmessage( id, "%s >> %L: %d - %L %d", gZ_ClassName[ gD_zombieClass[ id ] ], id, "ZOMBIE_ATTRIB1", get_user_health( id ), id, "AMMO_PACKS1", gD_ammopacks[ id ] );
  284.                                             }
  285.                                     }
  286.                             }
  287.                             else
  288.                             {
  289.                                     new const spectated = entity_get_int( id, EV_INT_iuser2 );
  290.                                    
  291.                                     if( gB_alive[ spectated ] )
  292.                                     {
  293.                                             new class[ 32 ];
  294.      
  295.                                             switch( gD_status[ spectated ] )
  296.                                             {
  297.                                                     case STATUS_SURVIVOR:   format( class, charsmax( class ), "%L", id, "CLASS_SURVIVOR" );
  298.                                                     case STATUS_HUMAN:      format( class, charsmax( class ), "%L", id, "CLASS_HUMAN" );
  299.                                                     case STATUS_NEMESIS:    format( class, charsmax( class ), "%L", id, "CLASS_NEMESIS" );
  300.                                                     case STATUS_ZOMBIE:     copy( class, charsmax( class ), gZ_ClassName[ gD_zombieClass[ spectated ] ] );
  301.                                             }
  302.                                            
  303.                                             set_hudmessage( 255, 255, 255, HUD_SPECT_X, HUD_SPECT_Y, 2, 0.0, 1.1, 0.0, 0.0, HUD_CHAN_STATS );
  304.                                             show_hudmessage( id, "%L %s^nHP: %d - %L %s - %L %d", id, "SPECTATING", gS_playerName[ spectated ], get_user_health( spectated ), id, "CLASS_CLASS", class, id, "AMMO_PACKS1", gD_ammopacks[ spectated ] );
  305.                                     }
  306.                             }
  307.                     }
  308.             }
  309.            
  310.             entity_set_float( entity, EV_FL_nextthink, ++ gF_gameTime );
  311.     }
  312.      
  313.     public ENGINE__TOUCH_WeaponBox( const weapon, const id )
  314.     {
  315.             if( CORE__GET_HUMAN( id ) )
  316.             {
  317.                     return PLUGIN_CONTINUE;
  318.             }
  319.            
  320.             return PLUGIN_HANDLED;
  321.     }
  322.      
  323.     // ===================================================================================
  324.     // >>  HAMSANDWICH
  325.     // ===================================================================================
  326.      
  327.     public HAM__POST_SPAWN( const id )
  328.     {
  329.             if( is_user_alive( id ) )
  330.             {
  331.                     gB_alive[ id ] = true;
  332.                    
  333.                     remove_task( id + TASK_ID_RESPAWN );
  334.                    
  335.                     strip_user_weapons( id );
  336.                     give_item( id, "weapon_knife" );
  337.                    
  338.                     if( CORE__GET_CURRENT_MODE( ROUND_RESPAWN ) ) // RESPAWN AS ZOMBIE
  339.                     {
  340.                             CORE__SET_PLAYER_STATUS( id, STATUS_ZOMBIE );
  341.                     }
  342.                     else // HUMAN
  343.                     {
  344.                             gD_status[ id ] = STATUS_HUMAN;
  345.                             give_item( id, "weapon_m4a1" );
  346.                             cs_set_user_bpammo( id, CSW_M4A1, 9999 );
  347.                     }
  348.             }
  349.     }
  350.      
  351.     public HAM__POST_Killed( const victim, const attacker )
  352.     {
  353.             gB_alive[ victim ] = false;
  354.            
  355.             if( CORE__GET_CURRENT_MODE( ROUND_NOMODE ) )
  356.             {
  357.                     set_task( 0.1, "TASK__RespawnMe", TASK_ID_RESPAWN );
  358.             }
  359.             else
  360.             {
  361.                     gD_status[ victim ] = STATUS_ZOMBIE;
  362.                    
  363.                     if( CORE__GET_PLAYERS_COUNT( STATUS_HUMAN, true ) == 1 )
  364.                     {
  365.                             gBi_Round &= ~( ROUND_ABLE_ARMOR | ROUND_INFECT );
  366.                     }
  367.                    
  368.                     if( CORE__GET_CURRENT_MODE( ROUND_RESPAWN ) )
  369.                     {
  370.                             set_task( TASK_TIME_RESPAWN, "TASK__RespawnMe", TASK_ID_RESPAWN + victim );
  371.                     }
  372.             }
  373.     }
  374.      
  375.     public HAM__POST_TakeDamage( const victim, const inflictor, const attacker, const Float: damages, const damage_bits )
  376.     {
  377.             if( ( 1 <= attacker <= MAX_PLAYERS ) && CORE__GET_HUMAN( attacker ) && CORE__GET_ZOMBIE( victim ) )
  378.             {
  379.                     if( CORE__GET_SURVIVOR( attacker ) )
  380.                     {
  381.                             gF_damagesAP[ attacker ] += ( damages / 2 );
  382.                     }
  383.                     else
  384.                     {
  385.                             gF_damagesAP[ attacker ] += damages;
  386.                     }
  387.                            
  388.                     if( gF_damagesAP[ attacker ] >= AP_DMG_NEEDED )
  389.                     {
  390.                             ++ gD_ammopacks[ attacker ];
  391.                             gF_damagesAP[ attacker ] = 0.0;
  392.                     }
  393.             }
  394.     }
  395.      
  396.     public HAM__PRE_TakeDamage( const victim, const inflictor, const attacker, const Float: damages, const damage_bits )
  397.     {
  398.             if( CORE__GET_CURRENT_MODE( ROUND_NOMODE ) || ( damage_bits & DMG_FALL ) || ( damage_bits & DMG_NADE ) )
  399.             {
  400.                     return HAM_SUPERCEDE;
  401.             }
  402.            
  403.             if( ( 1 <= attacker <= MAX_PLAYERS ) )
  404.             {
  405.                     if( CORE__GET_ZOMBIE( attacker ) == CORE__GET_ZOMBIE( victim ) )
  406.                     {
  407.                             return HAM_SUPERCEDE;
  408.                     }
  409.                    
  410.                     if( CORE__GET_ZOMBIE( attacker ) )
  411.                     {
  412.                             if( CORE__GET_NEMESIS( attacker ) )
  413.                             {
  414.                                     SetHamParamFloat( 4, NEMESIS_DMG );
  415.                             }
  416.                             else
  417.                             {
  418.                                     if( CORE__GET_CURRENT_MODE( ROUND_ABLE_ARMOR ) )
  419.                                     {
  420.                                             new const Float: armor = entity_get_float( victim, EV_FL_armorvalue );
  421.                                            
  422.                                             if( armor )
  423.                                             {
  424.                                                     emit_sound( victim, CHAN_BODY, SOUND_ARMOR_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM );
  425.                                                    
  426.                                                     if( armor - damages > 0.0 )
  427.                                                     {
  428.                                                             entity_set_float( victim, EV_FL_armorvalue, armor - damages );
  429.                                                     }
  430.                                                     else
  431.                                                     {
  432.                                                             cs_set_user_armor( victim, 0, CS_ARMOR_NONE );
  433.                                                     }
  434.                                                    
  435.                                                     return HAM_SUPERCEDE;
  436.                                             }
  437.                                             else if( CORE__GET_CURRENT_MODE( ROUND_INFECT ) )
  438.                                             {
  439.                                                     CORE__SET_PLAYER_STATUS( victim, STATUS_ZOMBIE, attacker );
  440.                                                     return HAM_SUPERCEDE;
  441.                                             }
  442.                                     }
  443.                                     else if( CORE__GET_CURRENT_MODE( ROUND_INFECT ) )
  444.                                     {
  445.                                             CORE__SET_PLAYER_STATUS( victim, STATUS_ZOMBIE, attacker );
  446.                                             return HAM_SUPERCEDE;
  447.                                     }
  448.                             }
  449.                     }
  450.                     else
  451.                     {
  452.                             if( CORE__GET_ZOMBIE( victim ) && ( gF_gameTime - gF_spawnProtect[ victim ] ) < 5.0 )
  453.                             {
  454.                                     cs_set_user_armor( attacker, 0, CS_ARMOR_NONE );
  455.                                    
  456.                                     if( CORE__GET_PLAYERS_COUNT( STATUS_ZOMBIE ) < 15 )
  457.                                     {
  458.                                             CORE__SET_PLAYER_STATUS( attacker, STATUS_ZOMBIE, victim );
  459.                                     }
  460.                                    
  461.                                     return HAM_SUPERCEDE;
  462.                             }
  463.                     }
  464.             }
  465.            
  466.             return HAM_IGNORED;
  467.     }
  468.      
  469.     // ===================================================================================
  470.     // >>  FAKEMETA
  471.     // ===================================================================================
  472.      
  473.     public FM__POST_ClientUserInfoChanged( const id, const info[ ], const key[ ] )
  474.     {
  475.             get_user_name( id, gS_playerName[ id ], charsmax( gS_playerName[ ] ) );
  476.            
  477.            
  478.     }
  479.      
  480.     // ===================================================================================
  481.     // >>  CORE
  482.     // ===================================================================================
  483.      
  484.     CORE__SET_PLAYER_STATUS( const id, const type, const attacker = 0 )
  485.     {
  486.             strip_user_weapons( id );
  487.             give_item( id, "weapon_knife" );
  488.            
  489.             gD_status[ id ] = type;
  490.            
  491.             if( attacker )
  492.             {
  493.                     emessage_begin( MSG_BROADCAST, gMsg_DeathMsg );
  494.                     ewrite_byte( attacker );
  495.                     ewrite_byte( id );
  496.                     emessage_end( );
  497.                    
  498.                     emessage_begin( MSG_BROADCAST, gMsg_ScoreAttrib );
  499.                     ewrite_byte( id );
  500.                    
  501.                     if( get_user_flags( id ) & ADMIN_LEVEL_E )
  502.                     {
  503.                             ewrite_byte( 4 );
  504.                     }
  505.                     else
  506.                     {
  507.                             ewrite_byte( 0 );
  508.                     }
  509.                    
  510.                     emessage_end( );
  511.                    
  512.                     set_user_frags( attacker, get_user_frags( attacker ) + 1 );
  513.             }
  514.            
  515.             switch( type )
  516.             {
  517.                     case STATUS_ZOMBIE, STATUS_NEMESIS:
  518.                     {
  519.                             cs_set_team( id, _: CS_TEAM_T );
  520.                            
  521.                             if( type == STATUS_NEMESIS )
  522.                             {
  523.                                     set_user_health( id, get_playersnum( ) * 8000 );
  524.                             }
  525.                             else
  526.                             {
  527.                                     set_user_health( id, 9000 );
  528.                             }
  529.                     }
  530.                     case STATUS_HUMAN, STATUS_SURVIVOR:
  531.                     {
  532.                             cs_set_team( id, _: CS_TEAM_CT );
  533.                            
  534.                             if( type == STATUS_SURVIVOR )
  535.                             {
  536.                                     give_item( id, "weapon_m249" );
  537.                                     cs_set_user_bpammo( id, CSW_M249, 9999 );
  538.                                    
  539.                                     set_user_health( id, get_playersnum( ) * 500 );
  540.                             }
  541.                             else
  542.                             {
  543.                                    
  544.                             }
  545.                     }
  546.             }
  547.            
  548.             if( CORE__GET_PLAYERS_COUNT( STATUS_HUMAN, true ) == 1 )
  549.             {
  550.                     gBi_Round &= ~( ROUND_ABLE_ARMOR | ROUND_INFECT );
  551.             }
  552.     }
  553.      
  554.     CORE__GET_PLAYERS_COUNT( const type, const alive = 0 )
  555.     {
  556.             new count;
  557.            
  558.             if( alive )
  559.             {
  560.                     for( new id = 1; id <= MAX_PLAYERS; id ++ )
  561.                     {
  562.                             if( gB_alive[ id ] && gD_status[ id ] == type )
  563.                             {
  564.                                     ++ count;
  565.                             }
  566.                     }
  567.             }
  568.             else
  569.             {
  570.                     for( new id = 1; id <= MAX_PLAYERS; id ++ )
  571.                     {
  572.                             if( gD_status[ id ] == type )
  573.                             {
  574.                                     ++ count;
  575.                             }
  576.                     }
  577.             }
  578.            
  579.             return count;
  580.     }
  581.      
  582.     // ===================================================================================
  583.     // >>  UTIL
  584.     // ===================================================================================
  585.      
  586.     // ===================================================================================
  587.     // >>  TASKS
  588.     // ===================================================================================
  589.      
  590.     public TASK__BeginRound( )
  591.     {
  592.             new players[ 32 ], num;
  593.             get_players( players, num, "ah" );
  594.            
  595.             switch( gBi_PreRound )
  596.             {
  597.                     case ROUND_NORMAL:
  598.                     {
  599.                             gBi_Round = ( ROUND_NORMAL | ROUND_RESPAWN | ROUND_ABLE_ARMOR | ROUND_INFECT );
  600.                            
  601.                             new id, loop;
  602.                            
  603.                             switch( num )
  604.                             {
  605.                                     case 1..10:     loop = 1;
  606.                                     case 11..19:    loop = 2;
  607.                                     case 20..30:    loop = 3;
  608.                                     case 31..32:    loop = 4;
  609.                             }
  610.                            
  611.                             for( new i = 0; i < loop; i ++ )
  612.                             {
  613.                                     id = 0;
  614.                                    
  615.                                     while( CORE__GET_ZOMBIE( id ) || !id )
  616.                                     {
  617.                                             id = players[ random_num( 0, num - 1 ) ];
  618.                                     }
  619.                            
  620.                                     CORE__SET_PLAYER_STATUS( id, STATUS_ZOMBIE );
  621.                             }
  622.                            
  623.                             if( loop == 1 )
  624.                             {
  625.                                     set_hudmessage( 255, 0, 0, HUD_EVENT_X, HUD_EVENT_Y, 0, 0.0, 5.0, 1.0, 1.0, HUD_CHAN_EVENT );
  626.                                     show_hudmessage( 0, "%L", LANG_PLAYER, "NOTICE_FIRST", gS_playerName[ id ] );
  627.                             }
  628.                             else
  629.                             {
  630.                                     set_hudmessage( 255, 0, 0, HUD_EVENT_X, HUD_EVENT_Y, 0, 0.0, 5.0, 1.0, 1.0, HUD_CHAN_EVENT );
  631.                                     show_hudmessage( 0, "%L", LANG_PLAYER, "NOTICE_MULTI" );
  632.                             }
  633.                            
  634.                             for( loop = 0, id = players[ 0 ]; loop < num; id = players[ ++ loop ] )
  635.                             {
  636.                                     if( !CORE__GET_ZOMBIE( id ) )
  637.                                     {
  638.                                             cs_set_team( id, _: CS_TEAM_CT );
  639.                                     }
  640.                             }
  641.                     }
  642.                     case ROUND_NEMESIS:
  643.                     {
  644.                             new i, id = players[ random_num( 0, num - 1 ) ];
  645.                             CORE__SET_PLAYER_STATUS( id, STATUS_NEMESIS );
  646.                            
  647.                             set_hudmessage( 255, 0, 0, HUD_EVENT_X, HUD_EVENT_Y, 0, 0.0, 5.0, 1.0, 1.0, HUD_CHAN_EVENT );
  648.                             show_hudmessage( 0, "%L", LANG_PLAYER, "NOTICE_NEMESIS", gS_playerName[ id ] );
  649.                            
  650.                             gBi_Round = ROUND_NEMESIS;
  651.                            
  652.                             for( i = 0, id = players[ 0 ]; i < num; id = players[ ++ i ] )
  653.                             {
  654.                                     if( !CORE__GET_NEMESIS( id ) )
  655.                                     {
  656.                                             cs_set_team( id, _: CS_TEAM_CT );
  657.                                     }
  658.                             }
  659.                     }
  660.                     case ROUND_SURVIVOR:
  661.                     {
  662.                             new i, id = players[ random_num( 0, num - 1 ) ];
  663.                             CORE__SET_PLAYER_STATUS( id, STATUS_SURVIVOR );
  664.                            
  665.                             set_hudmessage( 255, 0, 0, HUD_EVENT_X, HUD_EVENT_Y, 0, 0.0, 5.0, 1.0, 1.0, HUD_CHAN_EVENT );
  666.                             show_hudmessage( 0, "%L", LANG_PLAYER, "NOTICE_SURVIVOR", gS_playerName[ id ] );
  667.                            
  668.                             gBi_Round = ROUND_SURVIVOR;
  669.                            
  670.                             for( i = 0, id = players[ 0 ]; i < num; id = players[ ++ i ] )
  671.                             {
  672.                                     if( !CORE__GET_SURVIVOR( id ) )
  673.                                     {
  674.                                             CORE__SET_PLAYER_STATUS( id, STATUS_ZOMBIE );
  675.                                     }
  676.                             }
  677.                     }
  678.                     case ROUND_SWARM:
  679.                     {
  680.                             if( num < 4 )
  681.                             {
  682.                                     gBi_PreRound = ROUND_NORMAL;
  683.                                     TASK__BeginRound( );
  684.                             }
  685.                             else
  686.                             {
  687.                                     gBi_Round = ROUND_SWARM;
  688.                                    
  689.                                     for( new i = 0, id = players[ 0 ]; i < num; id = players[ ++ i ] )
  690.                                     {
  691.                                             if( cs_get_user_team( id ) == CS_TEAM_T )
  692.                                             {
  693.                                                     CORE__SET_PLAYER_STATUS( id, STATUS_ZOMBIE );
  694.                                             }
  695.                                     }
  696.                                    
  697.                                     set_hudmessage( 255, 0, 0, HUD_EVENT_X, HUD_EVENT_Y, 0, 0.0, 5.0, 1.0, 1.0, HUD_CHAN_EVENT );
  698.                                     show_hudmessage( 0, "%L", LANG_PLAYER, "NOTICE_SWARM" );
  699.                             }
  700.                     }
  701.             }
  702.     }
  703.      
  704.     public TASK__RespawnMe( id )
  705.     {
  706.             id -= TASK_ID_RESPAWN;
  707.            
  708.             if( gB_connected[ id ] )
  709.             {
  710.                     ExecuteHamB( Ham_CS_RoundRespawn, id );
  711.             }
  712.     }
Add Comment
Please, Sign In to add comment