2020. július 28., kedd

Antirush by Furion V2.83

Antirusher Plugin xPaw féle átdolgozva eddigi teszt: nincs hiba


/*
2.81     - New print functions:    - ML Print
                                - Colored print
                                
        - NEW CVAR:             - amx_antirusher_messages 2 //0|1|2   -  no messages | normal color messages (yellow) | colored messages, in dictionary file you can use !g !t !y                            
                                
        - add some text for  map rules(~460) 
        - New plugin_cfg function
        - Cfg file and rush.cor in new directory (inner "configs" dir 
        
        
        
2.82     - bugfix task loop duplicated (check_origin & newround)
        - Major update rush functionality:    - in AS_ map when VIP touch the terrorist rush borders then allow rush
                                            - in CS_ maps when CT touched the hostage then allow rush
                                            - in DE_ maps new function for rush, when terrorist drop bomb then start task (adjustable time)
                                              when task finish then allow rush but if terrorist pick up the bomb ahead of time then not allowed rush (if other
                                              condition not met)
        - NEW CVARS:             - amx_antirusher_bombdrop 1  // Bomb drop rush functionality on|off
                                - amx_antirusher_bombdrop_warnings 1 //messages for bombdrop functionality on|off     
                                - amx_antirusher_bombdroptime 30.0 // how much second need for allow rush before is bomb dropped (override when terrorist pick up the bomb min value 15.0 (if less then set 15.0

                                
                                
                                
2.83     - minor bugfix:            -  bomb pickup not printed when allow rush
        - clean code
        - new cvar:"Furion" (:D) for log
        - public event_roundtime() function changed Event_StartRound()
    
    
    
    
    
    
todo list:

        add new cvars to menu:
            amx_antirusher_bombdrop 1 
            amx_antirusher_bombdrop_warnings 1 
            amx_antirusher_bombdroptime 30.0 
            amx_antirusher_messages 2 
            
            
            
sorry for my english

sign: Furion    
*/



#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>

new Float:TEST_TIME=0.1
new Float:WARN_TIME=1.0
new Float:FLASH_TIME=0.8

#define MAX_ZONES 8
new MIN_PLAYERS=2        /*Dobre do testowania w mniej osob
                  lub gdy chcesz by koniec rashu byl
                  przy wiekszej liczbbie osob*/
#define    TASK_BOMB_RUSH    800743              
#define    TASK_BOMB_WARNING 700743              
#define TASK_ZONE 600743
#define TASK_LOOP 500743
#define TASK_VIEW 400743
#define TASK_INFO 300743
#define TASK_FLASH 200743
#define LANG_PLAYER_C        -76 // for print (arbitrary number)
new mUsuwaniestrefy // Menu
new mcbUsuwaniestrefy // Menu Callback
new mZapisacstrefy // Menu
new mcbZapisacstrefy // Menu Callback
new mAntirushControlMenu // Menu
new mcbAntirushControlMenu // Menu Callback
                //Uzylem generatora i takie malo eleganckie wyszlo

new map_cors_edit[MAX_ZONES*6]
new zones_edit
new zone_editing=0
new map_editor
new map_cors_file_line=127
new zone_incresment=10
new zone_coords_num=0
new zone_coords[3][13] = { "Koordynat X", "Koordynat Y", "Koordynat Z"}
new editign=0
new edit_g_team[3]
new round_start=0
new lines

new gMsgScreenFade
new rasher[33]=0
new raszer[33]
new flashed[33]=0
new sounded[33]=0
new speed_limit[33]=0
new Float:g_time
new g_team[3]
new g_origin[3]
new map_cors_pre=2
new map_cors_origin[MAX_ZONES*6]
new slap
new warn_control = 0 // miczu
new zones = 0

new zone_color_aktiv[3] = { 0, 0, 255 }
new zone_color_red[3] = { 255, 0, 0 }
new zone_color_yellow[3] = { 255, 255, 0 }
new spr_dot

new ar_messages
new bool:bombIsDown
new Float:bombdroprush
new bool:rush
new SayText
new gmsgSayText
new actions[11][32] = { "barney/donthurtem.wav","nihilanth/nil_now_die.wav","hgrunt/c2a3_hg_laugh.wav","hgrunt/silence!.wav","hgrunt/silence!.wav","barney/whatsgoingon.wav","barney/rightway.wav","barney/nosir.wav","barney/openfire.wav","barney/stophere.wav","hgrunt/c2a2_hg_chat5a.wav"}
                    
public plugin_init()
{    
    register_plugin("M_AntiRusher","2.83","Miczu")
    
    
    register_dictionary("M_antirusher.txt")
    register_dictionary("common.txt")
    
    register_clcmd("say /rules","info")
    register_clcmd("amx_antirush_menu","amx_antirusher_menu",ADMIN_CVAR,"Antirush menu")
    register_clcmd("say /antirush_menu","amx_antirusher_menu",ADMIN_CVAR,"Antirush menu")

    register_cvar("Furion", "AntirushR 2.83 by [Ballantine's] Furion",FCVAR_SERVER)    
    register_cvar("xPaw", "AR 2.6",FCVAR_SERVER)
    register_cvar("amx_antirusher","1")            
    register_cvar("amx_antirusher_sound","1")        
    register_cvar("amx_antirusher_sound_mode","0")
    register_cvar("amx_antirusher_warn","1")
    register_cvar("amx_antirusher_slap","3")        
    register_cvar("amx_antirusher_time","105.0")        
    register_cvar("amx_antirusher_freq","0.1")
    register_cvar("amx_antirusher_action","7")
    register_cvar("amx_antirusher_cash","50")        
    register_cvar("amx_antirusher_cash_end","2")        
    register_cvar("amx_antirusher_immunity","0")    
    register_cvar("amx_antirusher_rules","1")
    register_cvar("amx_antirusher_people","2")

    register_cvar("amx_antirusher_bombdrop","1")
    register_cvar("amx_antirusher_bombdrop_warnings","1")    
    register_cvar("amx_antirusher_bombdroptime","30.0")
    ar_messages = register_cvar("amx_antirusher_messages","2")    

    register_event("HLTV","Event_StartRound","a","1=0","2=0")
    register_event("RoundTime","event_roundtime","bc")
    register_event("SendAudio", "bomb_planted", "a", "2&%!MRAD_BOMBPL")
    register_event("DeathMsg","DeathMsg","ade") 
    register_event("CurWeapon","CurWeapon","be") 
    

    
        // Log events
    register_logevent("event_player_action",3,"1=triggered")
    
    RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
    
    SayText = get_user_msgid("SayText")
    gmsgSayText = get_user_msgid("SayText");
    gMsgScreenFade = get_user_msgid("ScreenFade") 
    map_cors_pre = map_cors_present(map_cors_origin,g_team)
    TEST_TIME=get_cvar_float("amx_antirusher_freq")
    
    register_menucmd(register_menuid("Antirush Menu"), 1023, "Antirush_menu")
    register_menucmd(register_menuid("Punishment Menu"), 1023, "Punishment_menu")
    register_menucmd(register_menuid("Antirush Zone Creator"), 1023, "Antirush_Zone_Creator")
    register_menucmd(register_menuid("Edit Zone"), 1023, "edit_zone2")
    
    mAntirushControlMenu = menu_create("Antirush Control Menu", "mh_AntirushControlMenu")
    mcbAntirushControlMenu = menu_makecallback("mcb_AntirushControlMenu")
    menu_additem(mAntirushControlMenu, "Antirush cvar control", "ma_AntirushControlMenu", ADMIN_CVAR, mcbAntirushControlMenu)
    menu_additem(mAntirushControlMenu, "Antirush Punishments", "ma_AntirushControlMenu", ADMIN_CVAR, mcbAntirushControlMenu)
    menu_additem(mAntirushControlMenu, "Antirush Zone Creator", "ma_AntirushControlMenu", ADMIN_RCON, mcbAntirushControlMenu)
    
    mZapisacstrefy = menu_create("Zapisac strefy", "mh_Zapisacstrefy")
    mcbZapisacstrefy = menu_makecallback("mcb_Zapisacstrefy")
    menu_additem(mZapisacstrefy, "TAK", "ma_Zapisacstrefy", ADMIN_ALL, mcbZapisacstrefy)
    menu_additem(mZapisacstrefy, "NIE", "ma_Zapisacstrefy", ADMIN_ALL, mcbZapisacstrefy)
    
    mUsuwaniestrefy = menu_create("Usuwanie strefy", "mh_Usuwaniestrefy")
    mcbUsuwaniestrefy = menu_makecallback("mcb_Usuwaniestrefy")
    menu_additem(mUsuwaniestrefy, "TAK", "ma_Usuwaniestrefy", ADMIN_ALL, mcbUsuwaniestrefy)
    menu_additem(mUsuwaniestrefy, "NIE", "ma_Usuwaniestrefy", ADMIN_ALL, mcbUsuwaniestrefy)
    
    register_forward(FM_PlayerPreThink,    "fwdPlayerPreThink");    // client_PreThink
    

}

public del_cfg(){
    new configdir[128];
    get_configsdir(configdir, 127 );
    new plugindir[256];
    format(plugindir,255,"%s/antirusher",configdir);
    new g_ConfigFile[256]
    format(g_ConfigFile, 255, "%s/cvars.cfg",plugindir)
    if (file_exists(g_ConfigFile)){
        delete_file(g_ConfigFile)
        
    }
}



 public plugin_precache()
{

    spr_dot = precache_model("sprites/dot.spr") // potrzebne do robienia lini
}

 public plugin_cfg()
{    

    new Furion[42]
    get_cvar_string("Furion",Furion,41)

    new configdir[128];
    get_configsdir(configdir, 127 );
    new plugindir[256];
    format(plugindir,255,"%s/antirusher",configdir);
    if (!dir_exists(plugindir)){
        if (mkdir(plugindir)==0){ // Create a dir,if it's not exist
            log_amx("<<%s>> Config dir <<%s>> successfully created",Furion,plugindir)
            return PLUGIN_CONTINUE;            
        }
        else{
            log_error(AMX_ERR_NOTFOUND,"<<%s>> Config dir <<%s>> create failed",Furion,plugindir)
            //pause("ad");
            return PLUGIN_HANDLED;
        }    
    }    
        
    new g_ConfigFile[256],line[128]
    format(g_ConfigFile, 255, "%s/cvars.cfg",plugindir)
    if (!file_exists(g_ConfigFile)){
        format(line,127,"amx_antirusher %i // plugin on/off (default on)",get_cvar_num("amx_antirusher"))
        write_file(g_ConfigFile, line, -1)                
        format(line,127,"amx_antirusher_sound %i //sounds (for antirush) on/off (default on)",get_cvar_num("amx_antirusher_sound"))                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"amx_antirusher_sound_mode %i // 1 - dźwięk raszu słyszy tylko raszujący, 0 - cały serwer | Domyślnie 0 (default 0)",get_cvar_num("amx_antirusher_sound_mode"))
        write_file(g_ConfigFile, line, -1)                
        format(line,127,"amx_antirusher_warn %i // 1 - visible red laser 0 -  no visible (default 1)",get_cvar_num("amx_antirusher_warn"))                
        write_file(g_ConfigFile, line, -1)    
        format(line,127,"amx_antirusher_slap %i // Zabiera 10x podaną liczbę HP w ciągu jednej sekundy | Domyślnie 3",get_cvar_num("amx_antirusher_slap"))
        write_file(g_ConfigFile, line, -1)                
        format(line,127,"amx_antirusher_time %f // time for Rush after roundstart (sec) (default 105.0 = 1:45)",get_cvar_float("amx_antirusher_time"))                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"amx_antirusher_freq %f //check time  (seconds) (default 0.1)",get_cvar_float("amx_antirusher_freq"))
        write_file(g_ConfigFile, line, -1)                
        format(line,127,"amx_antirusher_rules %i // chat command /rules on/off (default on)",get_cvar_num("amx_antirusher_rules"))                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"amx_antirusher_immunity %i  //immunity for antirush. need admin flag immunity (default off)",get_cvar_num("amx_antirusher_immunity"))
        write_file(g_ConfigFile, line, -1)                
        format(line,127,"amx_antirusher_cash %i // Ilość kasy (w $, mnożone przez 10) zabieranej w ciągu sekundy | Domyślnie 50",get_cvar_num("amx_antirusher_cash"))                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"amx_antirusher_cash_end %i",get_cvar_num("amx_antirusher_cash_end"))
        write_file(g_ConfigFile, line, -1)                
        format(line,127,"// 0 - gdy kończy się kasa to biega się bez konsekwencji, liczby od 1-5 to zabiera ci hp zamiast kasy,")                
        write_file(g_ConfigFile, line, -1)    
        format(line,127,"//gdy 1 to 1/25 kasy co powinno wziąść, a gdy 5 to zabiera tyle hp co kasy powinno brać. | Domyślnie 2")
        write_file(g_ConfigFile, line, -1)                
        format(line,127,"amx_antirusher_action %i //default 7.push back",get_cvar_num("amx_antirusher_action"))                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"//0.info on chat,1.slap, 2.kill, 3.kick, 4.Ban, 5.loss speed, 6.Flashed, 7.push back")
        write_file(g_ConfigFile, line, -1)                
        format(line,127,"//8.when it starts to shoot to kill him, 9.prevents effective targeting,10.taking money when its absence is HP ")                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"amx_antirusher_people %i // minimum number of players to work plugin",get_cvar_num("amx_antirusher_people"))                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"amx_antirusher_messages %i // 0 - off, 1 - on(standard color), 2 - colored message, (default 1)",get_cvar_num("amx_antirusher_messages"))                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"amx_antirusher_bombdroptime %f //time for allow rush after is bomb dropped (override when T pickup the bomb min value 15.0",get_cvar_float("amx_antirusher_bombdroptime"))                
        write_file(g_ConfigFile, line, -1)    
        format(line,127,"amx_antirusher_bombdrop_warnings %i//Bomb drop rush messages on|off",get_cvar_float("amx_antirusher_bombdrop_warnings"))                
        write_file(g_ConfigFile, line, -1)
        format(line,127,"amx_antirusher_bombdrop %i // Bomb drop rush functionality on|off",get_cvar_float("amx_antirusher_bombdrop"))                
        write_file(g_ConfigFile, line, -1)        
        log_amx("<<%s>> Config file %s successfully created",Furion,g_ConfigFile)    
    }    
    else{    
            server_cmd("exec %s", g_ConfigFile);
            log_amx(" <<%s>> loaded", Furion)
    }
    return PLUGIN_CONTINUE;  
}




///////////////////////////////////////////////////////////////////////
/////////                M_Antirusher  Events                 /////////
////////////////////////////////////////////////////////////////////////

public client_connect(id){
    free_the_man(id)        //nie chcemy by ktos kto sie polaczy byl karany
}                    //kiedy osoba co opuszczajac serwer miala kare
                    //czyli gdy stary i nowy gracz beda mieli te same id

public client_disconnect(id) {
    free_the_man(id)        //tak na wszelki wypadek, ale mozna sobie odpuscic
    return PLUGIN_CONTINUE
}

public Event_StartRound(){
    rush = false
    bombIsDown = false
    round_start++                
    MIN_PLAYERS = get_cvar_num("amx_antirusher_people")    // zmiana people dziala na starcie rundy
    
    if (round_start<1) return PLUGIN_CONTINUE     //takie zabezpieczenie by nie sprawdzalo po czasie rashu
    if (map_cors_pre && get_cvar_num("amx_antirusher")) {
        slap = floatround(get_cvar_num("amx_antirusher_slap")*(10.0*TEST_TIME)) // slapy biora zawsze tyle samo hp w przedziale czasu
        remove_task(TASK_BOMB_RUSH)
        remove_task(TASK_BOMB_WARNING)
        remove_task(TASK_LOOP)
        remove_task(TASK_VIEW)
        set_task(TEST_TIME, "checkOrigin",TASK_LOOP,_,_,"b")
        set_task(2*WARN_TIME, "rash_warn",TASK_VIEW)        
        
        g_time = get_gametime() + get_cvar_float("amx_antirusher_time")


    }
    return PLUGIN_CONTINUE    
    

}

public player_spawn(id)
{
    if(!is_user_alive(id))
        return HAM_IGNORED
    
    new arg[1]             //Zoptymalizowane uzycie set_task
    arg[0]=id            //Deklaracja 1 kumurki pamieci zamiast 4 i bez zmian z str-> num i na odwrot
    
    if (map_cors_pre && get_cvar_num("amx_antirusher"))
        set_task(6.0,"informclient",TASK_INFO+id,arg,1) 

    return HAM_IGNORED
}



public bomb_planted() {            
    rush = true
}

public vip_rush(id){
    new name[32]
    get_user_name(id,name,31)
    client_printc_tag(0,0,1," %L", LANG_PLAYER_C, "AR_VIP_RUSH",name)
    rush = true


}                


// Player Events
public event_player_action()
{

    new szArg[ 64 ], szAction[ 64 ], szName[ 64 ]
    new iUserId, id

    read_logargv( 0, szArg, 64 )
    read_logargv( 2, szAction, 64 )
    parse_loguser( szArg, szName, 64, iUserId )
    id = find_player( "k", iUserId )
    
    if( id == 0 )
    {
        return
    }
    // Hostage touched
    if (equal(szAction,"Touched_A_Hostage")) {
        rush = true
    }

    // bomb dropped
    if (equal(szAction,"Dropped_The_Bomb")) {
        if (get_cvar_num("amx_antirusher_bombdrop") == 1){
    
            bombIsDown = true
            bombdroprush = get_cvar_float("amx_antirusher_bombdroptime")
            if (bombdroprush < 15.0 ) bombdroprush = 15.0
            set_task(bombdroprush , "rash_bombdrop",TASK_BOMB_RUSH)
            set_task(5.0 , "warning_bombdrop",TASK_BOMB_WARNING)        
        }
    }
    //bomb pickup
    if (equal(szAction,"Got_The_Bomb")) {
        if (get_cvar_num("amx_antirusher_bombdrop") == 1){    
            if (    bombIsDown == true && rush == false && get_cvar_num("amx_antirusher_bombdrop_warnings") == 1){    
                client_printc_tag( 0,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BOMBPICKUP");

            }

            bombIsDown = false
            remove_task(TASK_BOMB_RUSH)
            remove_task(TASK_BOMB_WARNING)
    
        }
    }



}

//task warning bombdrop
public warning_bombdrop(){
    if (    bombIsDown == true && get_cvar_num("amx_antirusher_bombdrop_warnings") == 1){
        client_printc_tag( 0,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BOMBDROP");
    }
    remove_task(TASK_BOMB_WARNING)
    set_task(5.0 , "warning_bombdrop",TASK_BOMB_WARNING)        
}

//task bombdrop rush
public rash_bombdrop(){
    if (    bombIsDown == true){
            remove_task(TASK_BOMB_WARNING)    
            remove_task(TASK_BOMB_RUSH)
            rush = true

        
    }
    
}

/*********************************************BUG????????***************************************************/
public event_roundtime() {
//    if (round_start<1) return PLUGIN_CONTINUE     //takie zabezpieczenie by nie sprawdzalo po czasie rashu

}    


public DeathMsg(){
    new vid = read_data(2)        //id trupa
    free_the_man(vid)        //uwalnia trupa by zaczol runde z czystym kontem
}

//////////////////////////////////////////////////////////////////////
/////////                M_Antirusher Things                 /////////
//////////////////////////////////////////////////////////////////////

map_cors_present(maporigin[MAX_ZONES*6],team[3]) {
    
    new zonefile[256],zonefile2[256]

    get_localinfo("amxx_configsdir",zonefile, 255);
    
    if(is_linux_server()){
        format(zonefile2, 255, "%s/antirusher", zonefile)
        if(!(dir_exists(zonefile2))) mkdir (zonefile2)
        format(zonefile2, 255, "%s/antirusher/rush.cor", zonefile)
    }
    else{
        format(zonefile2, 255, "%s\antirusher", zonefile)
        if(!(dir_exists(zonefile2))) mkdir (zonefile2)
        format(zonefile2, 255, "%s\antirusher\rush.cor", zonefile)
    }
    
    if (file_exists(zonefile2)){    
        
        new readdata[512]
        new currentmap[32]
        get_mapname(currentmap,31)
        new map[32], len 
        new x11[16],x12[16],y11[16],y12[16],z11[16],z12[16]
        new x21[16],x22[16],y21[16],y22[16],z21[16],z22[16]
        new x31[16],x32[16],y31[16],y32[16],z31[16],z32[16]
        new x41[16],x42[16],y41[16],y42[16],z41[16],z42[16]
        new x51[16],x52[16],y51[16],y52[16],z51[16],z52[16]
        new x61[16],x62[16],y61[16],y62[16],z61[16],z62[16]
        new x71[16],x72[16],y71[16],y72[16],z71[16],z72[16]
        new x81[16],x82[16],y81[16],y82[16],z81[16],z82[16]
        
        
        for(new i=0; i < 128 && read_file(zonefile2,i,readdata,511,len); i++) {
            x11="";x12="";y11="";y12="";z11="";z12=""
            x21="";x22="";y21="";y22="";z21="";z22=""
            x31="";x32="";y31="";y32="";z31="";z32=""
            x41="";x42="";y41="";y42="";z41="";z42=""
            x51="";x52="";y51="";y52="";z51="";z52=""
            x61="";x62="";y61="";y62="";z61="";z62=""
            parse(readdata,team,2,map,31,x11,15,x12,15,y11,15,y12,15,z11,15,z12,15,
                x21,15,x22,15,y21,15,y22,15,z21,15,z22,15,
                x31,15,x32,15,y31,15,y32,15,z31,15,z32,15,
                x41,15,x42,15,y41,15,y42,15,z41,15,z42,15,
                x51,15,x52,15,y51,15,y52,15,z51,15,z52,15,
                x61,15,x62,15,y61,15,y62,15,z61,15,z62,15,
                x71,15,x72,15,y71,15,y72,15,z71,15,z72,15,
                x81,15,x82,15,y81,15,y82,15,z81,15,z82,15)
            lines=i
            if(equal(map,currentmap)) {
                maporigin[0] = str_to_num(x11)
                maporigin[1] = str_to_num(x12)
                maporigin[2] = str_to_num(y11)
                maporigin[3] = str_to_num(y12)
                maporigin[4] = str_to_num(z11)
                maporigin[5] = str_to_num(z12)
                maporigin[6] = str_to_num(x21)
                maporigin[7] = str_to_num(x22)
                maporigin[8] = str_to_num(y21)
                maporigin[9] = str_to_num(y22)
                maporigin[10] = str_to_num(z21)
                maporigin[11] = str_to_num(z22)
                maporigin[12] = str_to_num(x31)
                maporigin[13] = str_to_num(x32)
                maporigin[14] = str_to_num(y31)
                maporigin[15] = str_to_num(y32)
                maporigin[16] = str_to_num(z31)
                maporigin[17] = str_to_num(z32)
                maporigin[18] = str_to_num(x41)
                maporigin[19] = str_to_num(x42)
                maporigin[20] = str_to_num(y41)
                maporigin[21] = str_to_num(y42)
                maporigin[22] = str_to_num(z41)
                maporigin[23] = str_to_num(z42)
                maporigin[24] = str_to_num(x51)
                maporigin[25] = str_to_num(x52)
                maporigin[26] = str_to_num(y51)
                maporigin[27] = str_to_num(y52)
                maporigin[28] = str_to_num(z51)
                maporigin[29] = str_to_num(z52)
                maporigin[30] = str_to_num(x61)
                maporigin[31] = str_to_num(x62)
                maporigin[32] = str_to_num(y61)
                maporigin[33] = str_to_num(y62)
                maporigin[34] = str_to_num(z61)
                maporigin[35] = str_to_num(z62)
                maporigin[36] = str_to_num(x71)
                maporigin[37] = str_to_num(x72)
                maporigin[38] = str_to_num(y71)
                maporigin[39] = str_to_num(y72)
                maporigin[40] = str_to_num(z71)
                maporigin[41] = str_to_num(z72)
                maporigin[42] = str_to_num(x81)
                maporigin[43] = str_to_num(x82)
                maporigin[44] = str_to_num(y81)
                maporigin[45] = str_to_num(y82)
                maporigin[46] = str_to_num(z81)
                maporigin[47] = str_to_num(z82)
                
                map_cors_file_line=i
                for(new j=0;j<MAX_ZONES;j++){
                    i=j*6
                    if(((maporigin[1+i]-maporigin[0+i])>0)&&((maporigin[3+i]-maporigin[2+i])>0)&&((maporigin[5+i]-maporigin[4+i])>0))
                    zones++
                }
                
                return 1
            }
            if((len<15)  && (map_cors_file_line>i)) map_cors_file_line=i
        }
        log_amx("%L",LANG_SERVER,"AR_NO_ZONE")
        if(lines+2<map_cors_file_line) map_cors_file_line=lines+2    //zapobiega zapisywaniu na 127 pozycji gdy nie ma wolnych lini na koncu :)
        return 0
    }
    else log_amx("%L",LANG_SERVER,"AR_NO_FILE")
    g_team="XX"
    map_cors_file_line=0            //nie ma pluku rush,cor wiec niech zapisze w pierwszej lini
    return 0
}




public info(id){
    new anti_zasady = get_cvar_num("amx_antirusher_rules")
    if(anti_zasady==1){
        new map[4]
        get_mapname(map,3)        // rozpoznawanie typu mapy na podstawie pierwszych 3 liter :p

    
        new rastime = (floatround(get_cvar_float("mp_roundtime") * 60.0)) - (get_cvar_num("amx_antirusher_time"))
        new lminute = rastime / 60
        new lsec = rastime % 60        
        
        if (equal(map,"cs_")){
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_CS_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_CS_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);
        }
        else if (equal(map,"gg_")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_GG_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_GG_MAP")        
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"de_")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_DE_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_DE_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"as_")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_AS_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_AS_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"fy_")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_FY_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_FY_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"aim")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_AIM_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_AIM_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"awp")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_AWP_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_AWP_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"kz_")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_KZ_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_KZ_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"fun")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_FUN_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_FUN_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"sur")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_SURF_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_SURF_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"sj_")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_SJ_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_SJ_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"ka_")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_KA_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_KA_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        }
        else if (equal(map,"he_")){ 
            client_printc_tag(id,0,1," %L", LANG_PLAYER_C, "AR_HE_MAP");//client_print(id,print_chat, "%L",LANG_PLAYER,"AR_HE_MAP")
            client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RUSH_BEFORE_ROUNDEND",lminute,lsec);        
        
        }
    }
}

public informclient(arg[1]){ 
                    // arg[0] to id ^^
    if(is_user_connected(arg[0])) {    // spradza czy gracz nadal jest na serwie
    //time for round start to rush
        new bmin = get_cvar_num("amx_antirusher_time") / 60 
        new bsec = get_cvar_num("amx_antirusher_time") % 60
        
        client_printc_tag(arg[0],0,1," %L", LANG_PLAYER_C, "AR_INFO_WARN");
        client_printc_tag(arg[0],0,1," %L", LANG_PLAYER_C, "AR_INFO_CLIENT",bmin,bsec ); 

    }
}


public checkOrigin() {             // tu sprawdza czy rashujesz
    
    if (round_start<1) return
    if (get_gametime() > g_time)
    {
        free_the_world()
        return
    }
    if (rush == true)
    {
        free_the_world()
        return
    }    
    new players[32], num,tt_num,ct_num
    get_players(players,num)
    
    for(new i=0;i<num;i++)
    {
        if(is_user_alive(players[i]))
        {
            if(cs_get_user_team(players[i])==CS_TEAM_T) tt_num++
            else if(cs_get_user_team(players[i])==CS_TEAM_CT) ct_num++
        }
    }
    
    if (tt_num<MIN_PLAYERS)
    {
        free_the_world()
        return
    }
    if (ct_num<MIN_PLAYERS)
    {
        free_the_world()
        return
    }
    


    
    get_players(players,num)

    for(new i = 0; i < num; i++) 
        {
        if(is_user_alive(players[i]))
        {
            new map[4]
            get_mapname(map,3)    
    
            if((equal(map,"as_")) && (cs_get_user_vip(players[i])))
            {    
                            
                get_user_origin(players[i],g_origin)                
                if ((map_cors_origin[0] < g_origin[0] < map_cors_origin[1]) && (map_cors_origin[2] < g_origin[1] < map_cors_origin[3]) && (map_cors_origin[4] < g_origin[2] < map_cors_origin[5]) ||
                    (map_cors_origin[6] < g_origin[0] < map_cors_origin[7]) && (map_cors_origin[8] < g_origin[1] < map_cors_origin[9]) && (map_cors_origin[10] < g_origin[2] < map_cors_origin[11]) ||
                    (map_cors_origin[12] < g_origin[0] < map_cors_origin[13]) && (map_cors_origin[14] < g_origin[1] < map_cors_origin[15]) && (map_cors_origin[16] < g_origin[2] < map_cors_origin[17]) ||
                    (map_cors_origin[18] < g_origin[0] < map_cors_origin[19]) && (map_cors_origin[20] < g_origin[1] < map_cors_origin[21]) && (map_cors_origin[22] < g_origin[2] < map_cors_origin[23]) ||
                    (map_cors_origin[24] < g_origin[0] < map_cors_origin[25]) && (map_cors_origin[26] < g_origin[1] < map_cors_origin[27]) && (map_cors_origin[28] < g_origin[2] < map_cors_origin[29]) ||
                    (map_cors_origin[30] < g_origin[0] < map_cors_origin[31]) && (map_cors_origin[32] < g_origin[1] < map_cors_origin[33]) && (map_cors_origin[34] < g_origin[2] < map_cors_origin[35])){
                vip_rush(players[i])
                }

            }        
        
        
            if((equal(g_team,"T")&&(cs_get_user_team(players[i])==CS_TEAM_T))||(equal(g_team,"CT")&&(cs_get_user_team(players[i])==CS_TEAM_CT))||equal(g_team,"XX"))
            {    
                get_user_origin(players[i],g_origin)
                if ((map_cors_origin[0] < g_origin[0] < map_cors_origin[1]) && (map_cors_origin[2] < g_origin[1] < map_cors_origin[3]) && (map_cors_origin[4] < g_origin[2] < map_cors_origin[5]) ||
                    (map_cors_origin[6] < g_origin[0] < map_cors_origin[7]) && (map_cors_origin[8] < g_origin[1] < map_cors_origin[9]) && (map_cors_origin[10] < g_origin[2] < map_cors_origin[11]) ||
                    (map_cors_origin[12] < g_origin[0] < map_cors_origin[13]) && (map_cors_origin[14] < g_origin[1] < map_cors_origin[15]) && (map_cors_origin[16] < g_origin[2] < map_cors_origin[17]) ||
                    (map_cors_origin[18] < g_origin[0] < map_cors_origin[19]) && (map_cors_origin[20] < g_origin[1] < map_cors_origin[21]) && (map_cors_origin[22] < g_origin[2] < map_cors_origin[23]) ||
                    (map_cors_origin[24] < g_origin[0] < map_cors_origin[25]) && (map_cors_origin[26] < g_origin[1] < map_cors_origin[27]) && (map_cors_origin[28] < g_origin[2] < map_cors_origin[29]) ||
                    (map_cors_origin[30] < g_origin[0] < map_cors_origin[31]) && (map_cors_origin[32] < g_origin[1] < map_cors_origin[33]) && (map_cors_origin[34] < g_origin[2] < map_cors_origin[35])){
                    punishPlayer(players[i])
                    raszer[players[i]]=1
                }
                else{
                    free_the_man(players[i])
                }
            }
        }
    }
}






public rash_warn(){                // tu sprawsza czy ma ci wyswietlic granice rashu
    if (get_gametime() > g_time){
        return
    }
    if (get_cvar_num("amx_antirusher_warn")==0) return
    new players[32], num, tt_num, ct_num
    get_players(players,num)
    
    for(new i=0;i<num;i++)
    {
        if(is_user_alive(players[i]))
        {
            if(cs_get_user_team(players[i])==CS_TEAM_T) tt_num++
            else if(cs_get_user_team(players[i])==CS_TEAM_CT) ct_num++
        }
    }
    
    if (equal(g_team,"CT")){
        if (tt_num<MIN_PLAYERS) return
        if (ct_num<MIN_PLAYERS) return
    } 
    
    set_task(WARN_TIME, "rash_warn",TASK_VIEW)
    
    new orrigins[3]
    for(new j=0;j<num;j++){
        if(raszer[players[j]]<1 && is_user_alive(players[j]))     // jak juz raszuje to mozna graczowi odpuscic :)
        {        
            if((equal(g_team,"T")&&(cs_get_user_team(players[j])==CS_TEAM_T))||(equal(g_team,"CT")&&(cs_get_user_team(players[j])==CS_TEAM_CT))||equal(g_team,"XX"))
            {    
                get_user_origin(players[j],orrigins)
                for(new i=0;i<MAX_ZONES;i++){
                    if((map_cors_origin[0+i*6]-450 < orrigins[0] < map_cors_origin[0+i*6]) && (map_cors_origin[2+i*6]-100 < orrigins[1] < map_cors_origin[3+i*6]+100) && (map_cors_origin[4+i*6] < orrigins[2] < map_cors_origin[5+i*6])){
                        zone_warn(players[j],i,0,orrigins)
                    }
                    else if((map_cors_origin[1+i*6] < orrigins[0] < map_cors_origin[1+i*6]+450) && (map_cors_origin[2+i*6]-100 < orrigins[1] < map_cors_origin[3+i*6]+100) && (map_cors_origin[4+i*6] < orrigins[2] < map_cors_origin[5+i*6])){
                        zone_warn(players[j],i,1,orrigins)
                    }
                    if((map_cors_origin[0+i*6]-100 < orrigins[0] < map_cors_origin[0+i*6+1]+100) && (map_cors_origin[2+i*6]-450 < orrigins[1] < map_cors_origin[2+i*6]) && (map_cors_origin[4+i*6] < orrigins[2] < map_cors_origin[5+i*6])){
                        zone_warn(players[j],i,2,orrigins)
                    }
                    else if((map_cors_origin[0+i*6]-100 < orrigins[0] < map_cors_origin[0+i*6+1]+100) && (map_cors_origin[3+i*6] < orrigins[1] < map_cors_origin[3+i*6]+450) && (map_cors_origin[4+i*6] < orrigins[2] < map_cors_origin[5+i*6])){
                        zone_warn(players[j],i,3,orrigins)
                    }
                }            // nigdy nie bedziesz widzial przednia i tylna lub lewa i prawa sciane rownoczesnie wiec jest else

            }
        }
    }
}

///////////////////////////////////////////////////////////////////////////
/////////                M_Antirusher Punishments                 /////////
///////////////////////////////////////////////////////////////////////////

punishPlayer(id) {
                
    new action = 1
    action = get_cvar_num("amx_antirusher_action")    
    if ((get_cvar_num("amx_antirusher_immunity") == 1)&&(get_user_flags(id)&ADMIN_IMMUNITY)) {
        action = 0
    }
    switch (action) {
        case 0:{
        new name[32]
        get_user_name(id,name,31)
        server_cmd("amx_chat %L",LANG_SERVER,"AR_SRV_INFO", name)
        }
        case 1:    fm_fakedamage ( id, "rashing", slap*1.0,16384)
        case 2: user_silentkill(id)
        case 3: kickPlayer(id)
        case 4: banPlayer(id)
        case 5:{
            if(speed_limit[id]==0){
                speed_limit[id]=1
                fm_set_user_maxspeed(id,(fm_get_user_maxspeed(id)/2.0));
            }
        }
        case 6:{
            if(flashed[id]==0){
                flashed[id]=1
                set_task(FLASH_TIME,"Flash",TASK_FLASH+id) 
            }
        }
        case 7:{
        
            message_begin(MSG_ONE,gMsgScreenFade,{0,0,0},id) 
            write_short( 1<<10 ) //15
            write_short( 1<<5 )//10
            write_short( 1<<12 )//12
            write_byte( 255 ) 
            write_byte( 255 ) 
            write_byte( 255 ) 
            write_byte( 255 ) 
            message_end()
        
            new Float: velocity[3]
            new Float: DW //Długosc wektora
            pev(id,pev_velocity,velocity)
            DW=vector_length ( velocity )+0.0001
            velocity[0]=(velocity[0]/DW)*(-500.0)
            velocity[1]=(velocity[1]/DW)*(-500.0)
            if(velocity[2]<0) velocity[2]=velocity[2]*(-1.0)+15.0 //wyrzuca do gory if(velocity[2]<0) velocity[2]=velocity[2]*(-1.0)+150.0  az eredeti
            set_pev(id,pev_velocity,velocity)    

        }
        case 8:{
            rasher[id]=1
        }
        case 9:{
            aim_on_me(id)
        }
        case 10:{
            ebay_time_to_pay(id)    // ogladalem filmik w flashu i to chyba przez to :p
        }
        default:{
            new name[32]
            get_user_name(id,name,31)
            server_cmd("amx_chat %L:p",LANG_SERVER,"AR_SRV_INFO", name)
        }
    }
    if (warn_control >(25/floatround(10.0*TEST_TIME))){    // jak dlugo siedzisz w granicy to ci pisze w czacie :p
    client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RASH_WARN");
    warn_control=0;}
    warn_control+=1

    if(get_cvar_num("amx_antirusher_sound")){
        if(sounded[id]==0){
        new sound_mode = get_cvar_num("amx_antirusher_sound_mode")
        
        if(sound_mode==0) client_cmd(id,"spk %s",actions[action])
        else client_cmd(0,"spk %s",actions[action])
        sounded[id]=1
        }        
    }
}

kickPlayer(id) {

    client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RASH_KICK");
    server_cmd("amx_kick #%d", id)
}

banPlayer(id) {

    client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_RASH_BAN");

    server_cmd("amx_ban #%d 5 rush", id)
}

public CurWeapon(id){
    if(speed_limit[id]==1) fm_set_user_maxspeed(id,(fm_get_user_maxspeed(id)/2.0));    // zmiana broni cie przyspieszy? nie ^^
}

public Flash(id) {
    id-=TASK_FLASH
    if(flashed[id]){
        set_task(FLASH_TIME,"Flash",TASK_FLASH+id) 
    
        message_begin(MSG_ONE,gMsgScreenFade,{0,0,0},id) 
        write_short( 1<<15 ) 
        write_short( 1<<10 )
        write_short( 1<<12 )
        new x,y,z
        x= random_num(0,255)
        write_byte( x ) 
        y= random_num(0,255)
        write_byte( y ) 
        z= random_num(0,255)
        write_byte( z ) 
        write_byte( 255 ) 
        message_end()

    }
}



public fwdPlayerPreThink(id){    
    if (rasher[id]){
        new button = pev(id, pev_button)
        if ((button & IN_ATTACK2) || (button & IN_ATTACK)){
            user_silentkill(id)
        }
    }    
}

public aim_on_me(id){
    new radom, radom2
    radom = random_num(0,3)
    radom2 = random_num(1,6)
    new polecenie[64]
    switch (radom){
        case 0:{
            format(polecenie, 63, "+left;")
        }
        case 1:{
            format(polecenie, 63, "+right;")
        }
        case 2:{
            format(polecenie, 63, "+lookup;")
        }
        case 3:{
            format(polecenie, 63, "+lookdown;")
        }
    }
    
    for (new i=0; i < radom2; i++)
    {
        add(polecenie, 63, "wait;")
    }
    
    switch (radom) {
        case 0:{
            add(polecenie, 63, "-left;")
        }
        case 1:{
            add(polecenie, 63, "-right;")
        }
        case 2:{
            add(polecenie, 63, "-lookup;")
        }
        case 3:{
            add(polecenie, 63, "-lookdown;")
        }
    }
    client_cmd(id,"%s",polecenie)
}

ebay_time_to_pay(id){
    new cash=get_cvar_num("amx_antirusher_cash")*floatround(20.0*TEST_TIME)
    new cash2=get_cvar_num("amx_antirusher_cash_end")
    new money = cs_get_user_money(id)
    if (money-cash > 0)cs_set_user_money(id,money-cash)
    else switch(cash2){
        case 0:     cs_set_user_money(id,0)
        case 1:{ 
            fm_fakedamage ( id, "rashing", cash/25.0,16384)
        }
        case 2:{ 
            fm_fakedamage ( id, "rashing", cash/10.0,16384)
        }    
        case 3:{ 
            fm_fakedamage ( id, "rashing", cash/5.0,16384)
        }
        case 4:{ 
            fm_fakedamage ( id, "rashing", cash/2.0,16384)
        }
        case 5:{ 
            fm_fakedamage ( id, "rashing", cash/1.0,16384)
        }
    }
}

public free_the_man(id){
    sounded[id]=0
    rasher[id]=0
    flashed[id]=0
    raszer[id]=0
    if(speed_limit[id]==1){
        fm_set_user_maxspeed(id,(fm_get_user_maxspeed(id)*2.0))
        speed_limit[id]=0
    }
}


public free_the_world(){
    bombIsDown = false
    rush = false    

    remove_task(TASK_LOOP)        //przerywa sprawdzanie rashu
    remove_task(TASK_VIEW)        //przerywa wyswietlanie granic dla userow
    
    if (get_cvar_num("amx_antirusher_bombdrop") == 1){    
        remove_task(TASK_BOMB_WARNING)    
        remove_task(TASK_BOMB_RUSH)
    }
    
    if(round_start<1) return
    round_start=0

    client_printc_tag( 0,0,1," %L", LANG_PLAYER_C, "AR_FREE_WORLD");    
}

///////////////////////////////////////////////////////////////////////
/////////                 M_Antirusher Menu's                 /////////
///////////////////////////////////////////////////////////////////////

public amx_antirusher_menu(id){
    menu_display(id, mAntirushControlMenu, 0)
    return PLUGIN_HANDLED
}

public mh_AntirushControlMenu(id, menu, item) {

    switch(item) 
    { 

        case 0: {

            showmenu(id)
        }
        case 1: {
    
            showmenu2(id)
        }
        case 2: {
            
            map_editor=id
            edit_g_team=g_team
            transfer_zones()
            zones_edit=zones
            if(zones>0) zone_editing=1
            show_all_zones()
            remove_task(TASK_ZONE)
            set_task(0.2, "show_all_zones", TASK_ZONE, _, _, "b")
            showmenu3(id)
        }
    }            
}

public ma_AntirushControlMenu(id) {}            // bo z generatora amxx studio
public mcb_AntirushControlMenu(id, menu, item) {}    // i usuniecie nie daje dobrych efektow...

public transfer_zones(){
    for(new i=0;i<MAX_ZONES*6;i++){
    map_cors_edit[i]=map_cors_origin[i]
    }
}

public showmenu(id)
{
    new text[512] 
    new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)|(1<<10)
    new anti_on = get_cvar_num("amx_antirusher")                //1
    new anti_immu = get_cvar_num("amx_antirusher_immunity")            //2
    new Float: anti_time = get_cvar_float("amx_antirusher_time")        //3
    new anti_warn = get_cvar_num("amx_antirusher_warn")            //4
    new anti_sound = get_cvar_num("amx_antirusher_sound")            //5
    new anti_sound_mode = get_cvar_num("amx_antirusher_sound_mode")        //6
    new anti_zasady = get_cvar_num("amx_antirusher_rules")            //7
    new people = get_cvar_num("amx_antirusher_people")            //8
    new anti_msg = get_cvar_num("amx_antirusher_messages")

    format(text, 511, "\yAntirush Menu - ^n\w1. amx_antirusher %i^n\w2. amx_antirusher_immunity %i^n\w3. amx_antirusher_time %.f^n\w4. amx_antirusher_warn  %i^n\w5. amx_antirusher_sound %i^n\w6. amx_antirusher_sound_mode %i^n\w7. amx_antirusher_rules %i^n\w8. amx_antirusher_people %i^n^n\w9. amx_antirusher_messages %i^n^n\w10.  %L",anti_on, anti_immu, anti_time, anti_warn, anti_sound, anti_sound_mode,anti_zasady,people,anti_msg,LANG_SERVER,"EXIT") 
    
    show_menu(id, keys, text) 
    return PLUGIN_HANDLED  



public Antirush_menu(id, key) 

    switch(key) 
    { 

        case 0:{    
            new anti_on = get_cvar_num("amx_antirusher")
            if (anti_on==0) set_cvar_num("amx_antirusher",1)
            else set_cvar_num("amx_antirusher",0)
        }
        case 1:{    
            new anti_immu = get_cvar_num("amx_antirusher_immunity")
            if (anti_immu==0) set_cvar_num("amx_antirusher_immunity",1)
            else set_cvar_num("amx_antirusher_immunity",0)
        }
        case 2:{    
            new Float: anti_time = get_cvar_float("amx_antirusher_time")
            if (anti_time < (get_cvar_float("mp_roundtime")*60.0)) anti_time += 5.0
            else anti_time= 10.0
            set_cvar_float("amx_antirusher_time",anti_time)
        }
        case 3:{
            new anti_warn = get_cvar_num("amx_antirusher_warn")
            if (anti_warn==0) set_cvar_num("amx_antirusher_warn",1)
            else set_cvar_num("amx_antirusher_warn",0)
        }
        case 4:{
            new anti_sound = get_cvar_num("amx_antirusher_sound")
            if (anti_sound==0) set_cvar_num("amx_antirusher_sound",1)
            else set_cvar_num("amx_antirusher_sound",0)
        }
        case 5:{
            new anti_sound_mode = get_cvar_num("amx_antirusher_sound_mode")
            if (anti_sound_mode==0) set_cvar_num("amx_antirusher_sound_mode",1)
            else set_cvar_num("amx_antirusher_sound_mode",0)
        }
        case 6:{        
            new anti_zasady = get_cvar_num("amx_antirusher_rules")
            if (anti_zasady==0) set_cvar_num("amx_antirusher_rules",1)
            else set_cvar_num("amx_antirusher_rules",0)
        }
        case 7:{        
            new people = get_cvar_num("amx_antirusher_people")
            if (people<16) set_cvar_num("amx_antirusher_people",people+1)
            else set_cvar_num("amx_antirusher_people",0)
        }    
        case 8:{
            new anti_msg = get_cvar_num("amx_antirusher_messages")
            if (anti_msg==0) set_cvar_num("amx_antirusher_messages",1)
            else if (anti_msg==1) set_cvar_num("amx_antirusher_messages",2)
            else    set_cvar_num("amx_antirusher_messages",0)
        }
        case 9:{
            del_cfg()
            plugin_cfg()
            menu_display(id, mAntirushControlMenu, 0)
            return PLUGIN_HANDLED
        }        
    }
    showmenu(id)
    return PLUGIN_HANDLED
}

public showmenu2(id)
{
    new keys
    new text[512] 
    new anti_action = get_cvar_num("amx_antirusher_action")                    
    new anti_cash = get_cvar_num("amx_antirusher_cash")*10        
    new anti_cash_end = get_cvar_num("amx_antirusher_cash_end")                
    new Float: anti_freq = get_cvar_float("amx_antirusher_freq")
    new anti_slap = get_cvar_num("amx_antirusher_slap")*10
    
    switch(anti_action)
    {
        case 1: 
        {
            format(text,511,"\yPunishment Menu - ^n\w1. amx_antirusher_action %i^n\w2. amx_antirusher_slap %i^n\w^n\w4. amx_antirusher_freq %.2f ^n\w ",anti_action,anti_slap,anti_freq)
            keys = (1<<0)|(1<<1)|(1<<3)|(1<<8)
        }
        case 10:
        {
            format(text,511,"\yPunishment Menu - ^n\w1. amx_antirusher_action %i^n\w2. amx_antirusher_cash %i^n\w3. amx_antirusher_cash_end %i^n\w4. amx_antirusher_freq %.2f^n\w ",anti_action, anti_cash, anti_cash_end,anti_freq)
            keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<8)
        }
        default: 
        {
            format(text,511,"\yPunishment Menu - ^n\w1. amx_antirusher_action %i^n\w ^n\w ^n\w4. amx_antirusher_freq %.2f^n\w ",anti_action,anti_freq)
            keys = (1<<0)|(1<<3)|(1<<8)
        }
    }
    new text2[512]
    switch(anti_action) 
    { 
        case 0: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_WARN",LANG_SERVER,"EXIT")
        case 1: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_HP",LANG_SERVER,"EXIT")
        case 2: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_KILL",LANG_SERVER,"EXIT")
        case 3: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_KICK",LANG_SERVER,"EXIT")
        case 4: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_BAN",LANG_SERVER,"EXIT")
        case 5: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_SLOW",LANG_SERVER,"EXIT")
        case 6: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_BLIND",LANG_SERVER,"EXIT")
        case 7: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_FFILD",LANG_SERVER,"EXIT")
        case 8: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_OFIRE",LANG_SERVER,"EXIT")
        case 9: format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_BAIM",LANG_SERVER,"EXIT")
        case 10:format(text2,511, "^n\w %L ^n\w %L ^n\w9. %L",LANG_SERVER,"AR_ACTION_CASH",LANG_SERVER,"AR_ACTION_CASH2",LANG_SERVER,"EXIT")
        default:format(text2,511, "^n\w %L ^n\w ^n\w9. %L",LANG_SERVER,"AR_ACTION_NEW",LANG_SERVER,"EXIT")
    } 
    add(text,511,text2)
    show_menu(id, keys, text)
    return PLUGIN_HANDLED  


public Punishment_menu(id, key) 

    new anti_action = get_cvar_num("amx_antirusher_action")
    switch(key) 
    { 
        case 0: 
        {    
            if(anti_action<10) anti_action +=1
            else anti_action=0
            set_cvar_num("amx_antirusher_action",anti_action)
        }
        case 1: 
        {    
            if(anti_action==1)
            {
                new anti_slap = get_cvar_num("amx_antirusher_slap")
                if(anti_slap<10) anti_slap +=1
                else anti_slap=0
                set_cvar_num("amx_antirusher_slap",anti_slap)
            }
            else if(anti_action==10)
            {
                new anti_cash = get_cvar_num("amx_antirusher_cash")
                if(anti_cash<100) anti_cash +=10
                else if(anti_cash<500) anti_cash +=25
                else anti_cash=0
                set_cvar_num("amx_antirusher_cash",anti_cash)
            }
        }
        case 2: 
        {    
            new anti_cash_end = get_cvar_num("amx_antirusher_cash_end")    
            if(anti_cash_end<5) anti_cash_end +=1
            else anti_cash_end=0
            set_cvar_num("amx_antirusher_cash_end",anti_cash_end)
        }
        case 3: 
        {    
            new Float: anti_freq = get_cvar_float("amx_antirusher_freq")    
            if(anti_freq<1.0) anti_freq +=0.100001 // ta jedynka na koncu bo zamiast wyswietalc 0.90000 wyswietlalo 0.89999 wiec dalem zaokraglenie do 0.xx i to na koniec :f
            else if (anti_freq<8.0) anti_freq +=0.5
            else anti_freq=0.1
            set_cvar_float("amx_antirusher_freq",anti_freq)
        }        
        case 8:
        {
            del_cfg()
            plugin_cfg()
            menu_display(id, mAntirushControlMenu, 0)
            return PLUGIN_HANDLED
        }        
    }
    showmenu2(id)
    return PLUGIN_HANDLED
}

public showmenu3(id)
{
    editign=0
    new text[512] 
    new keys
    if(zones_edit==0){
        keys = (1<<0)|(1<<4)|(1<<6)|(1<<7)|(1<<8)
        format(text, 511, "\yAntirush Zone Creator - ^n^n\w%L: \r%i^n\w1.%L: %s ^n^n ^n^n^n\y5. %L ^n\r7. %L^n\w8. %L ^n\w9. %L",LANG_SERVER,"AR_ZONE_NUM",zones_edit,LANG_SERVER,"AR_ZONE_TEAM",edit_g_team,LANG_SERVER,"AR_ZONE_NEW",LANG_SERVER,"AR_ZONE_DEL",LANG_SERVER,"AR_ZONE_SAVE",LANG_SERVER,"EXIT") 
    }
    else if(zones_edit>0){
        keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<7)|(1<<8)
        format(text, 511, "\yAntirush Zone Creator - ^n^n\w%L: \r%i^n\w1.%L: %s ^n^n\w2. %L \r%i^n      \w3. <- %L 4. -> %L^n^n\y5. %L ^n\r7. %L^n\w8. %L ^n\w9. %L",LANG_SERVER,"AR_ZONE_NUM",zones_edit,LANG_SERVER,"AR_ZONE_TEAM",edit_g_team,LANG_SERVER,"AR_ZONE_EDIT",zone_editing,LANG_SERVER,"BACK",LANG_SERVER,"MORE",LANG_SERVER,"AR_ZONE_NEW",LANG_SERVER,"AR_ZONE_DEL",LANG_SERVER,"AR_ZONE_SAVE",LANG_SERVER,"EXIT") 
    }    
        
    show_menu(id, keys, text)
    return PLUGIN_HANDLED 



public Antirush_Zone_Creator(id, key) 

    if(map_editor!=id){
        showmenu(id)
        return PLUGIN_HANDLED
    }
        
    switch(key) 
    { 
        case 0:{
            if (equal(edit_g_team,"XX")) edit_g_team="CT"
            else if (equal(edit_g_team,"CT")) edit_g_team="T"
            else edit_g_team="XX"
        }
        case 1: {    
            zone_incresment=10
            edit_zone(id)
            return PLUGIN_HANDLED
        }
        case 2:{    
            if(zone_editing>1) zone_editing--
        }
        case 3:{    
            if(zone_editing<zones_edit) zone_editing++
        }
        case 4:{
            if(zones_edit<(MAX_ZONES)){
                create_zone(id)
                zone_editing=zones_edit
                zone_incresment=10
                edit_zone(id)
                return PLUGIN_HANDLED
            }
            else{
                //client_print(id, print_chat,"%L",LANG_SERVER,"AR_ZONE_MAX")
                client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_ZONE_MAX");    
            }
        }
        case 6:{
            if(zone_editing>0){
                menu_display(id, mUsuwaniestrefy, 0)
                return PLUGIN_HANDLED
            }
            else {
                //client_print(id, print_chat,"%L",LANG_SERVER,"AR_ZONE_ZERO")
                client_printc_tag( id,0,1," %L", LANG_PLAYER_C, "AR_ZONE_ZERO");    
            }
            
        }

        case 7:{
            menu_display(id, mZapisacstrefy, 0)
            return PLUGIN_HANDLED
        }
        case 8:{
            amx_antirusher_menu(id)
            remove_task(TASK_ZONE)
            return PLUGIN_HANDLED
        }        
    }
    showmenu3(id)
    return PLUGIN_HANDLED
}

public create_zone(id){
    new origins[3]
    get_user_origin(id,origins,0)
    map_cors_edit[0+zones_edit*6]=origins[0]-32
    map_cors_edit[1+zones_edit*6]=origins[0]+32
    map_cors_edit[2+zones_edit*6]=origins[1]-32
    map_cors_edit[3+zones_edit*6]=origins[1]+32
    map_cors_edit[4+zones_edit*6]=origins[2]-32
    map_cors_edit[5+zones_edit*6]=origins[2]+32
    zones_edit++
}


public mh_Zapisacstrefy(id, menu, item) {
    if(item==0){
        remove_task(TASK_ZONE)
        amx_antirusher_menu(id)
        map_cors_origin=map_cors_edit
        zones=zones_edit
        g_team=edit_g_team
        if(zones>0) map_cors_pre=1
        else map_cors_pre=0
        write_to_file()
    }
    else if(item==1) showmenu3(id)
}

public ma_Zapisacstrefy(id) {}
public mcb_Zapisacstrefy(id, menu, item) {}


public mh_Usuwaniestrefy(id, menu, item) {
    if(item==0){
        amx_antirusher_menu(id)
        delete_zone(zone_editing)
        if((zone_editing-1)>=(zones_edit-1)) zone_editing = zones_edit-1
        zones_edit--
        showmenu3(id)
    }
    else if(item==1) showmenu3(id)
}

public ma_Usuwaniestrefy(id) {}
public mcb_Usuwaniestrefy(id, menu, item) {}

public delete_zone(zone_num){
    new x_num=zone_num-1
    while(x_num<(MAX_ZONES-1)){
        map_cors_edit[0+x_num*6]=map_cors_edit[6+x_num*6]
        map_cors_edit[1+x_num*6]=map_cors_edit[7+x_num*6]
        map_cors_edit[2+x_num*6]=map_cors_edit[8+x_num*6]
        map_cors_edit[3+x_num*6]=map_cors_edit[9+x_num*6]
        map_cors_edit[4+x_num*6]=map_cors_edit[10+x_num*6]
        map_cors_edit[5+x_num*6]=map_cors_edit[11+x_num*6]
        x_num++
    }
}

public edit_zone(id){
    editign=1
    new text[512] 
    new keys= (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<8)
    format(text, 511, "\yEdit Zone - ^n^n\w1. %L: %s ^n\r    2.<- %L  3.-> %L^n\y    4.<- %L  5.-> %L^n  ^n\w7. %L: %i ^n\w9. %L",LANG_SERVER,"AR_EDIT_COOR",zone_coords[zone_coords_num],LANG_SERVER,"BACK",LANG_SERVER,"MORE",LANG_SERVER,"BACK",LANG_SERVER,"MORE",LANG_SERVER,"AR_EDIT_CHANG",zone_incresment,LANG_SERVER,"EXIT")     
        
    show_menu(id, keys, text)
    return PLUGIN_HANDLED 


public edit_zone2(id, key){     
    switch(key){ 
        case 0:{    
            if(zone_coords_num<2)zone_coords_num++
            else zone_coords_num=0
        }
        case 1:{    
            if((map_cors_edit[zone_coords_num*2+(zone_editing-1)*6]+zone_incresment)<(map_cors_edit[zone_coords_num*2+(zone_editing-1)*6+1]-32)) map_cors_edit[zone_coords_num*2+(zone_editing-1)*6]+=zone_incresment
        }
        case 2:{    
            if((map_cors_edit[zone_coords_num*2+(zone_editing-1)*6]-zone_incresment)>-8191) map_cors_edit[zone_coords_num*2+(zone_editing-1)*6]-=zone_incresment
        }
        case 3:{
            if((map_cors_edit[zone_coords_num*2+(zone_editing-1)*6+1]-zone_incresment)>(map_cors_edit[zone_coords_num*2+(zone_editing-1)*6]+32)) map_cors_edit[zone_coords_num*2+(zone_editing-1)*6+1]-=zone_incresment
        }
        case 4:{    
            if((map_cors_edit[zone_coords_num*2+(zone_editing-1)*6+1]+zone_incresment)<8191) map_cors_edit[zone_coords_num*2+(zone_editing-1)*6+1]+=zone_incresment
        }
        case 6:{
            if(zone_incresment<1000)zone_incresment*=10
            else zone_incresment=1
        }
        case 8:{
            showmenu3(id)
            return PLUGIN_HANDLED
        }        
    }
    edit_zone(id)
    return PLUGIN_HANDLED
}

//////////////////////////////////////////////////////////////////////////
/////////                 M_Antirusher Draw Lines                /////////
//////////////////////////////////////////////////////////////////////////

public FX_Line(start[3], stop[3], color[3], brightness, id) {
    message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id) 
    
    write_byte( TE_BEAMPOINTS ) 
    
    write_coord(start[0]) 
    write_coord(start[1])
    write_coord(start[2])
    
    write_coord(stop[0])
    write_coord(stop[1])
    write_coord(stop[2])
    
    write_short( spr_dot )
    
    write_byte( 1 )    // framestart 
    write_byte( 1 )    // framerate 
    write_byte( 4 )    // life in 0.1's 
    write_byte( 5 )    // width
    write_byte( 0 )     // noise 
    
    write_byte( color[0] )   // r, g, b 
    write_byte( color[1] )   // r, g, b 
    write_byte( color[2] )   // r, g, b 
    
    write_byte( brightness )      // brightness 
    write_byte( 0 )       // speed 
    
    message_end() 
}

public DrawLine(x1, y1, z1, x2, y2, z2, color[3],id) {
    new start[3]
    new stop[3]
    
    start[0] = ( x1 )
    start[1] = ( y1 )
    start[2] = ( z1 )
    
    stop[0] = ( x2 )
    stop[1] = ( y2 )
    stop[2] = ( z2 )

    FX_Line(start, stop, color, 200, id)
}

public ar_zone(zone_num,id){
    new start[3],stop[3]
    new xyz=0
    if(zone_editing==zone_num) xyz=1
    
    zone_num=(zone_num-1)*6

    start[0]= map_cors_edit[0+zone_num]
    start[1]= map_cors_edit[2+zone_num]
    start[2]= map_cors_edit[4+zone_num]
    
    stop[0]= map_cors_edit[1+zone_num]
    stop[1]= map_cors_edit[3+zone_num]
    stop[2]= map_cors_edit[5+zone_num]
    
    ShowZoneBox(start, stop, id,xyz)
}

public ShowZoneBox(mins[3], maxs[3], id,xyz) {
        
    DrawLine(maxs[0], maxs[1], maxs[2], mins[0], maxs[1], maxs[2], zone_color_aktiv, id)
    DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], mins[1], maxs[2], zone_color_aktiv, id)
    DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], maxs[1], mins[2], zone_color_aktiv, id)

    DrawLine(mins[0], mins[1], mins[2], maxs[0], mins[1], mins[2], zone_color_aktiv, id)
    DrawLine(mins[0], mins[1], mins[2], mins[0], maxs[1], mins[2], zone_color_aktiv, id)
    DrawLine(mins[0], mins[1], mins[2], mins[0], mins[1], maxs[2], zone_color_aktiv, id)

    DrawLine(mins[0], maxs[1], maxs[2], mins[0], maxs[1], mins[2], zone_color_aktiv, id)
    DrawLine(mins[0], maxs[1], mins[2], maxs[0], maxs[1], mins[2], zone_color_aktiv, id)
    DrawLine(maxs[0], maxs[1], mins[2], maxs[0], mins[1], mins[2], zone_color_aktiv, id)
    DrawLine(maxs[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], zone_color_aktiv, id)
    DrawLine(maxs[0], mins[1], maxs[2], mins[0], mins[1], maxs[2], zone_color_aktiv, id)
    DrawLine(mins[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], zone_color_aktiv, id)
    
    if((xyz==1)&&(editign==1)){
        if(zone_coords_num==0){
            DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], mins[1], mins[2], zone_color_yellow, id)
            DrawLine(maxs[0], maxs[1], mins[2], maxs[0], mins[1], maxs[2], zone_color_yellow, id)
            DrawLine(mins[0], maxs[1], maxs[2], mins[0], mins[1], mins[2], zone_color_red, id)
            DrawLine(mins[0], maxs[1], mins[2], mins[0], mins[1], maxs[2], zone_color_red, id)
        }
        else if( zone_coords_num==1){
            DrawLine(mins[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], zone_color_red, id)
            DrawLine(maxs[0], mins[1], mins[2], mins[0], mins[1], maxs[2], zone_color_red, id)
            DrawLine(mins[0], maxs[1], mins[2], maxs[0], maxs[1], maxs[2], zone_color_yellow, id)
            DrawLine(maxs[0], maxs[1], mins[2], mins[0], maxs[1], maxs[2], zone_color_yellow, id)
        }
        else{
            DrawLine(maxs[0], maxs[1], maxs[2], mins[0], mins[1], maxs[2], zone_color_yellow, id)
            DrawLine(maxs[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], zone_color_yellow, id)
            DrawLine(maxs[0], maxs[1], mins[2], mins[0], mins[1], mins[2], zone_color_red, id)
            DrawLine(maxs[0], mins[1], mins[2], mins[0], maxs[1], mins[2], zone_color_red, id)
        }
    }
}

public show_all_zones(){
    new num=1
    while(num<=zones_edit){
        ar_zone(num,map_editor)
        num++
    }
    if(zone_editing>0){
        new origins[3], origins2[3]
        get_user_origin(map_editor,origins)
        new Float: range_line
        new Float: range_origins[6]
        for(new i=0;i<6;i++) range_origins[i] = (map_cors_edit[i+6*(zone_editing-1)])*1.0
        range_line= floatsqroot(((range_origins[1]-range_origins[0])/2.0-origins[0])*((range_origins[1]-range_origins[0])/2.0-origins[0])+((range_origins[3]-range_origins[2])/2.0-origins[1])*((range_origins[3]-range_origins[2])/2.0-origins[1])+((range_origins[5]-range_origins[4])/2.0-origins[2])*((range_origins[5]-range_origins[4])/2.0-origins[2]))
        if(range_line>20000) for(new i=0;i<3;i++){
            origins2[i]=((map_cors_edit[i*2+6*(zone_editing-1)] + map_cors_edit[i*2+1+6*(zone_editing-1)])/2)/6
        }
        else if(range_line>15000) for(new i=0;i<3;i++){
            origins2[i]=((map_cors_edit[i*2+6*(zone_editing-1)] + map_cors_edit[i*2+1+6*(zone_editing-1)])/2)/5
        }
        else if(range_line>10000) for(new i=0;i<3;i++){
            origins2[i]=((map_cors_edit[i*2+6*(zone_editing-1)] + map_cors_edit[i*2+1+6*(zone_editing-1)])/2)/3
        }
        else for(new i=0;i<3;i++){
            origins2[i]=((map_cors_edit[i*2+6*(zone_editing-1)] + map_cors_edit[i*2+1+6*(zone_editing-1)])/2)
        }
        FX_Line(origins, origins2, zone_color_red,200,map_editor)
    }
}

public zone_warn(id,zone,direction,origins[3]){
    new start[3],stop[3]
    start[2]=origins[2]-110
    stop[2]=origins[2]-110
    
    switch(direction){
        case 0:{
            start[0]=map_cors_origin[zone*6]+5
            stop[0]=map_cors_origin[zone*6]+5
            start[1]=map_cors_origin[zone*6+2]
            stop[1]=map_cors_origin[zone*6+3]
        }
        case 1:{
            start[0]=map_cors_origin[zone*6+1]-5
            stop[0]=map_cors_origin[zone*6+1]-5
            start[1]=map_cors_origin[zone*6+2]
            stop[1]=map_cors_origin[zone*6+3]
        }
        case 2:{
            start[0]=map_cors_origin[zone*6+0]
            stop[0]=map_cors_origin[zone*6+1]
            start[1]=map_cors_origin[zone*6+2]+5
            stop[1]=map_cors_origin[zone*6+2]+5
        }
        case 3:{
            start[0]=map_cors_origin[zone*6+0]
            stop[0]=map_cors_origin[zone*6+1]
            start[1]=map_cors_origin[zone*6+3]-5
            stop[1]=map_cors_origin[zone*6+3]-5
        }
    }
    for(new i=0;i<9;i++){
        start[2]+=30
        stop[2]+=30
        FX_Line(start, stop, zone_color_red, 60, id)
    }
}

///////////////////////////////////////////////////////////////////////////
/////////                 M_Antirusher Save to file               /////////
///////////////////////////////////////////////////////////////////////////

public write_to_file(){
    new text[512],text2[64]
    new currentmap[32]
    get_mapname(currentmap,31)
    format(text,511,"%s %s ", g_team, currentmap)
    new x0[6],x1[6],y0[6],y1[6],z0[6],z1[6]
    for(new i=0;i<zones;i++){
        num_to_str(map_cors_origin[0+i*6],x0,5)
        num_to_str(map_cors_origin[1+i*6],x1,5)
        num_to_str(map_cors_origin[2+i*6],y0,5)
        num_to_str(map_cors_origin[3+i*6],y1,5)
        num_to_str(map_cors_origin[4+i*6],z0,5)
        num_to_str(map_cors_origin[5+i*6],z1,5)
        format(text2,63,"%s %s %s %s %s %s ",x0,x1,y0,y1,z0,z1)
        add(text,511,text2)
    }
    
    if(is_linux_server()){
        new zonefile[256]
        get_localinfo("amxx_configsdir",zonefile, 255);
        format(zonefile, 255, "%s/antirusher/rush.cor", zonefile)
        if((write_file ( zonefile, text, map_cors_file_line ))==0) log_amx("<<Error when overwriting rush.cor>>")        
    }
    else{    
        if((write_file ( "addons\amxmodx\configs\antirusher\rush.cor", text, map_cors_file_line ))==0) log_amx("<<Error when overwriting rush.cor>>")
    }
}


// Stocks, ported by xPaw
stock fm_create_entity(const classname[])
    return engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, classname))

stock fm_fake_touch(toucher, touched)
    return dllfunc(DLLFunc_Touch, toucher, touched)

stock fm_remove_entity(index)
    return engfunc(EngFunc_RemoveEntity, index)

stock fm_DispatchSpawn(entity)
    return dllfunc(DLLFunc_Spawn, entity)

stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") {
    if (classname[0])
        set_kvd(0, KV_ClassName, classname)
    else {
        new class[32]
        pev(entity, pev_classname, class, sizeof class - 1)
        set_kvd(0, KV_ClassName, class)
    }

    set_kvd(0, KV_KeyName, key)
    set_kvd(0, KV_Value, value)
    set_kvd(0, KV_fHandled, 0)

    return dllfunc(DLLFunc_KeyValue, entity, 0)
}

stock fm_fakedamage(victim, const classname[], Float:takedmgdamage, damagetype) {
    new class[] = "trigger_hurt"
    new entity = fm_create_entity(class)
    if (!entity)
        return 0

    new value[16]
    float_to_str(takedmgdamage * 2, value, sizeof value - 1)
    fm_set_kvd(entity, "dmg", value, class)

    num_to_str(damagetype, value, sizeof value - 1)
    fm_set_kvd(entity, "damagetype", value, class)

    fm_set_kvd(entity, "origin", "8192 8192 8192", class)
    fm_DispatchSpawn(entity)

    set_pev(entity, pev_classname, classname)
    fm_fake_touch(entity, victim)
    fm_remove_entity(entity)

    return 1
}

stock fm_set_user_maxspeed(index, Float:speed = -1.0) {
    engfunc(EngFunc_SetClientMaxspeed, index, speed)
    set_pev(index, pev_maxspeed, speed)

    return 1
}

stock Float:fm_get_user_maxspeed(index) {
    new Float:speed
    pev(index, pev_maxspeed, speed)

    return speed
}





stock client_printc_tag(id,custom,tag,msg[],any:...)
{
    new messages = get_pcvar_num(ar_messages);
    if(!messages) return 0;

    new changeCount, num, i, j, argnum = numargs(), player;
    static newMsg[191], message[191], changed[8], players[32];

    if(id)
    {
        players[0] = id;
        num = 1;
    }
    else get_players(players,num);

    for(i=0;i<num;i++)
    {
        player = players[i];
        changeCount = 0;
        
        if(!is_user_connected(player)) continue;

        // we have to change LANG_PLAYER into
        // a player-specific argument, because
        // ML doesn't work well with SayText
        for(j=4;j<argnum;j++)
        {
            if(getarg(j) == LANG_PLAYER_C)
            {
                setarg(j,0,player);
                changed[changeCount++] = j;
            }
        }

        // do user formatting
        vformat(newMsg,190,msg,5);

        // and now we have to change what we changed
        // back into LANG_PLAYER, so that the next
        // player will be able to have it in his language
        for(j=0;j<changeCount;j++)
        {
            setarg(changed[j],0,LANG_PLAYER_C);
        }
        if(tag)
        {
            formatex(message,190,"%L %s",player,"ANTIRUSH",newMsg);
        }
        else formatex(message,190,"%s",newMsg);
        // optimized color swapping
        if(messages == 2)
        {
            replace_all(message,190,"!t","^x03"); // %n = team color
            replace_all(message,190,"!g","^x04"); // %g = green
            replace_all(message,190,"!y","^x01"); // %e = regular
        }
        else
        {
            replace_all(message,190,"!t","");
            replace_all(message,190,"!g","");
            replace_all(message,190,"!y","");
        }

        // now do our formatting (I used two variables because sharing one caused glitches)

    /*    if(tag)
        {
            formatex(message,190,"^x01[%L] %s",player,"ANTIRUSH",newMsg);
        }
        else formatex(message,190,"^x01%s",newMsg);*/

        message_begin(MSG_ONE,gmsgSayText,_,player);
        write_byte((custom > 0) ? custom : player);
        write_string(message);
        message_end();
    }
    
    return 1;
}








stock client_printc(const id, const string[], {Float, Sql, Resul,_}:...) {

    new msg[191], players[32], count = 1
    vformat(msg, sizeof msg - 1, string, 3)

    replace_all(msg,190,"!g","^4")
    replace_all(msg,190,"!y","^1")
    replace_all(msg,190,"!t","^3")

    if(id)
        players[0] = id
    else
        get_players(players,count,"ch")

    for (new i = 0 ; i < count ; i++)
    {
        if (is_user_connected(players[i]))
        {
            message_begin(MSG_ONE_UNRELIABLE, SayText,_, players[i])
            write_byte(players[i])
            write_string(msg)
            message_end()
        }
    }
}

Nincsenek megjegyzések:

Megjegyzés küldése

[ZP] Antidote

 /***************************************************************************\             =====================================            ...