1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  1. Oleg

    Oleg Пользователь

    Регистрация:
    17 июн 2017
    Сообщения:
    43
    Симпатии:
    3
    Пол:
    Мужской
    Йоу! Ребяяяятааа! Нашел такой офегительный плаааагин!
    То есть как я вообще понимаю. Можно выставить время суток на сервере по расписанию. То есть например
    6:00 карта будет темная, небо будет тоже другое, а вот например 10:00 Небо будет светлое, освещение карты тоже.
    Автор плагина, расписал (почти) весь код..
    Знаю что командой "set_lights" от "a" до "z" (по алфавиту) - меняется освещение карты.
    time_list - это команда показывает расписание время суток

    Итог! - Как сделать то самое расписание, что бы в определенное время, менялось освещение карты

    Код:
    /*
    Created by Notepad++
    
    Autor: Mr_ILYAS (from Russia)
    
    Skype    ilyas355
    ICQ        444889194
    mail    box-mail-1@mail.ru
    
    Have questions? Ask me. You have my contacts.
    Есть вопросы? Обращася. Контакты указаны выше.
    
    */
    #include <amxmodx>
    #include <amxmisc>
    #include <engine>
    #include <colorchat>
    #define ADMIN_SYSTEM ADMIN_RCON //флаг s
    new const arg[][]={"bk","dn","ft","lf","rt","up"};
    new file[64],text[256],sky_name[50],mapname[32],file_id,text_part1[50],text_part2[50],string_hour[3],hour,lights_level[2],time_type[50],string_minute[3],minute,string_sec[3],sec,text_data[64],text_time[12],num,i_max;
    new file_str[96][60];
    new bool:pause_check=true;
    new bool:otschet=false;
    new rem_txt[32];
    public plugin_init(){
        register_plugin("Время суток","2.1","Mr_ILYAS");
    
        register_concmd("set_lights","change_lights",ADMIN_SYSTEM," <a...z> - изменить уровень освещения");
        register_concmd("sl","change_lights",ADMIN_SYSTEM," <a...z> - изменить уровень освещения");
    
        //Cделает по умолчанию, как должно быть (если вы меняли с помощью команды set_lights [sl] )
        //Вся информация будет выведена в консоли админа, который прописал. И на сервере.
        register_concmd("reload_time","set_eff",ADMIN_SYSTEM," -  обновить время суток");
        register_concmd("rt","set_eff",ADMIN_SYSTEM," -  обновить время суток");
        register_concmd("say reload_time","set_eff",ADMIN_SYSTEM," -  обновить время суток");
        register_concmd("say_team reload_time","set_eff",ADMIN_SYSTEM," -  обновить время суток");
        register_concmd("say /reload_time","set_eff",ADMIN_SYSTEM," -  обновить время суток");
        register_concmd("say_team /reload_time","set_eff",ADMIN_SYSTEM," -  обновить время суток");
    
        //Выведет в консоль всё расписание в удобном виде. (Либо в консоль сервера, либо игроку в консоль)
        register_concmd("say /time_list","print_time_list",0," -  вывести расписание времени суток");
        register_concmd("say_team /time_list","print_time_list",0," -  вывести расписание времени суток");
        register_concmd("time_list","print_time_list",0," -  вывести расписание времени суток");
        register_concmd("say /tl","print_time_list",0," -  вывести расписание времени суток");
        register_concmd("say_team /tl","print_time_list",0," -  вывести расписание времени суток");
        register_concmd("tl","print_time_list",0," -  вывести расписание времени суток");
    
        get_mapname(mapname,31);
        set_effect();
        set_task(1.0,"check_time",0,"",0,"b");
        set_task(3.0,"check_pause"); //Задержа после смены карты, чтобы избежать коллизий и сервер снова не рестартился в 1 секунду несколько раз (всякое бывает...)
        pause_check=true;
    }
    public check_pause()pause_check=false;
    public check_time(){
        format_time(string_hour,charsmax(string_hour),"%H");
        hour=str_to_num(string_hour);
        format_time(string_minute,charsmax(string_minute),"%M");
        minute=str_to_num(string_minute);
        format_time(string_sec,charsmax(string_sec),"%S");
        sec=str_to_num(string_sec);
        format(text_time,12,"%s:%s:%s",string_hour,string_minute,string_sec);
        get_time("%d.%m.%Y",text_data,63);
        set_hudmessage(0,200,0,0.83,0.01,0,1.0,0.9,0.1,0.1,-1);
        //Строку ниже лучше не менять. Кол-во пробелов подобрано так, что текст более-менее ровный для всех типов разрешения экрана.
        show_hudmessage(0,"         Время: %s                ^n      Сегодня: %s             ^n^nВремя суток (на сервере):       ^n                 %s                 %s",text_time,text_data,time_type,strlen(time_type)<20?"         ":"");
        if(sec==0){
            if(num==GetNum()){
                if(minute>49){
                    if(check_hour(hour+1,str_to_num(text_part1),str_to_num(text_part2)))return PLUGIN_CONTINUE;
                    if(!equal(sky_name,file_str[num+6])){
                        switch(minute){
                            case 50:{
                                new time_rem=60-minute;
                                for(new i=1;i<=32;i++){
                                    if(is_user_connected(i)){
                                        ColorChat(i,GREEN," ");
                                        ColorChat(i,GREY,"Через^x04  %d  ^x03минут произойдёт смена времени суток",time_rem);
                                        ColorChat(i,BLUE,"Через^x04  %d  ^x03минут произойдёт смена времени суток",time_rem);
                                        ColorChat(i,RED, "Через^x04  %d  ^x03минут произойдёт смена времени суток",time_rem);
                                        ColorChat(i,GREEN," ");
                                    }
                                }
                                server_print("--------------------------------------------------------------------------------------------------------------------------------------");
                                log_amx("Через %d минут произойдёт смена времени суток",time_rem);
                                server_print("--------------------------------------------------------------------------------------------------------------------------------------");
                            }
                            case 55:{
                                new time_rem=60-minute;
                                for(new i=1;i<=32;i++){
                                    if(is_user_connected(i)){
                                        ColorChat(i,GREEN," ");
                                        ColorChat(i,GREY,"Через^x04  %d  ^x03минут произойдёт смена времени суток",time_rem);
                                        ColorChat(i,BLUE,"Через^x04  %d  ^x03минут произойдёт смена времени суток",time_rem);
                                        ColorChat(i,RED, "Через^x04  %d  ^x03минут произойдёт смена времени суток",time_rem);
                                        ColorChat(i,GREEN," ");
                                    }
                                }
                                server_print("------------------------------------------------------------------------------------------------------------------------------------");
                                log_amx("Через %d минут произойдёт смена времени суток",time_rem);
                                server_print("------------------------------------------------------------------------------------------------------------------------------------");
                            }
                            case 59:{
                                for(new i=1;i<=32;i++){
                                    if(is_user_connected(i)){
                                        ColorChat(i,GREEN," ");
                                        ColorChat(i,GREY,"Через^x04  минуту  ^x03произойдёт смена времени суток");
                                        ColorChat(i,BLUE,"Через^x04  минуту  ^x03произойдёт смена времени суток");
                                        ColorChat(i,RED, "Через^x04  минуту  ^x03произойдёт смена времени суток");
                                        ColorChat(i,GREEN," ");
                                    }
                                }
                                server_print("-----------------------------------------------------------------------------------------------------------------------------------");
                                log_amx("Через минуту произойдёт смена времени суток");
                                server_print("-----------------------------------------------------------------------------------------------------------------------------------");
                                otschet=true;
                            }
                        }
                    }
                }
                return PLUGIN_CONTINUE;
            }
            num=GetNum();
            if(num==0)return PLUGIN_CONTINUE;
            if(minute==0){
                if(!equal(sky_name,file_str[num+2])){
                    if(!pause_check){
                        server_print("----------------------------------------------------------------------------------------------------------------------------");
                        log_amx("Cмена времени суток на  ^"%s^"",file_str[num]);
                        server_print("----------------------------------------------------------------------------------------------------------------------------");
                        set_task(0.1,"restart_day");
                        return PLUGIN_CONTINUE;
                    }
                }else set_effect();
            }
        }else if(otschet&&sec==49){
            i_max=10;
            set_task(1.0,"otschet_actions",_,_,_,"a",10);
            otschet=false;
        }
        return PLUGIN_CONTINUE;
    }
    public otschet_actions(){
        num_to_word(i_max,rem_txt,31);
        for(new iii=1;iii<=32;iii++){
            if(is_user_connected(iii))client_cmd(iii,"spk fvox/%s",rem_txt);
        }
        i_max--;
    }
    public restart_day(){
        server_cmd("changelevel %s",mapname);
    }
    public change_lights(id){
        if(get_user_flags(id)&ADMIN_SYSTEM){
            new arg[3];
            read_argv(1,arg,2);
            set_lights(arg);
            return PLUGIN_CONTINUE;
        }
        return PLUGIN_HANDLED_MAIN;
    }
    public set_eff(id){
        if(get_user_flags(id)&ADMIN_SYSTEM){
            set_effect2(id);
            return PLUGIN_CONTINUE;
        }
        return PLUGIN_HANDLED_MAIN;
    }
    public GetNum(){ //Поиск следующего периода (по расписанию времени суток)
        for(new i=2;i<97;i+=4){
            if(!file_str[i][0])break;
            strtok(file_str[i],text_part1,charsmax(text_part1),text_part2,charsmax(text_part2),',');
            if(check_hour(hour,str_to_num(text_part1),str_to_num(text_part2))){
                i--;
                return i;
            }
        }
        return 0;
    }
    set_effect2(id){ //Установление эффекта после команды reload_time (rt)
        new i=GetNum();
        get_time("%d/%m/%Y",text_data,63);
        get_time("%H:%M:%S",text_time,63);
        if(!id){ //Если команда была через консоль сервера
            server_print("===============================");
            server_print(" ");
            server_print("        %s   %s",text_data,text_time);
            server_print(" ");
            format(time_type,49,file_str[i]);
            if(time_type[0]){
                server_print("      Время суток:   %s",time_type);
                server_print(" ");
            }
            format(lights_level,2,file_str[i+3]);
            if(lights_level[0]){
                server_print("Уровень освещения:    %s",lights_level);
                set_lights(lights_level);
            }
            server_print(" ");
            server_print("===============================");
        }
        //Если команда была послана игроком
        client_print(id,print_console,"============================");
        client_print(id,print_console," ");
        client_print(id,print_console,"             %s   %s",text_data,text_time);
        client_print(id,print_console," ");
        format(time_type,49,file_str[i]);
        if(time_type[0]){
            client_print(id,print_console,"           Время суток:   %s",time_type);
            client_print(id,print_console," ");
        }
        format(lights_level,2,file_str[i+3]);
        if(lights_level[0]){
            client_print(id,print_console,"Уровень освещения:    %s",lights_level);
            set_lights(lights_level);
        }
        client_print(id,print_console," ");
        client_print(id,print_console,"============================");
    
    }
    set_effect(){ //Установление эффекта после загрузки карты
        num=GetNum();
        get_time("%d/%m/%Y",text_data,63);
        get_time("%H:%M:%S",text_time,63);
        server_print("===============================");
        server_print(" ");
        server_print("        %s   %s",text_data,text_time);
        server_print(" ");
        format(time_type,49,file_str[num]);
        if(time_type[0]){
            server_print("      Время суток:   %s",time_type);
            server_print(" ");
        }
        format(sky_name,20,file_str[num+2]);
        if(sky_name[0]){
            server_print("    Текстура неба:   %s",sky_name);
            set_cvar_string("sv_skyname",sky_name);
        }
        format(lights_level,2,file_str[num+3]);
        if(lights_level[0]){
            server_print("Уровень освещения:    %s",lights_level);
            set_lights(lights_level);
        }
        server_print(" ");
        server_print("===============================");
    }
    stock check_hour(hour,fo_hour,to_hour){
        if(fo_hour<=hour<=to_hour)return 1;
        return 0;
    }
    load_data(){
        get_configsdir(file,63);
        format(file,charsmax(file),"%s/skyes.ini",file);
        if(!file_exists(file)){
            log_amx("Файл ^"skyes.ini^" не найден.");
            log_amx("File ^"skyes.ini^" not found.");
            return 0;
        }
        file_id=fopen(file,"r");
        new i=1;
        while(!feof(file_id)){ //Считывание содержимого из файла .ini в массив строк file_str.
            text[0]='^0';
            fgets(file_id,text,charsmax(text)); //Считываем одну строку из файла file_id в переменную text
            if(!text[0] || text[0]==';')continue; //Если строка пуста или первый символ равен этому, то игнорируем (continue - пропуск цикла,)
            if(text[0]=='['){
                strtok(text,text_part1,charsmax(text_part1),text_part2,charsmax(text_part2),']'); //Разделаем содержимое text на 2 части (разделителем является символ ']' ). И запись их в переменные text_part1 и text_part2 соответственно.
                format(file_str[i*4-3],59,text_part1[1]); //Всю левую часть сохраняем в массив (это название времени суток) (правая нам и не нужна, ибо там итак пусто)
                continue; //Запускаем цикл заного (следующий) (то есть пропустим всё, что ниже этого места)
            }
            trim(text); //Убираем все пробелы в text
            strtok(text,text_part1,charsmax(text_part1),text_part2,charsmax(text_part2),':'); //Разделяем text на 2 части. Разделителем является символ :
            if(equal(text_part1,"hour")){ //equal - функция для сравнения строки. Если она равна этому то...
                format(file_str[i*4-2],59,text_part2);
                //Поскольку всего 4 параметра (а именно: 1.Название времени суток; 2.Их часы; 3.Название текстуры неба; 4.Уровень освещения),
                //то поэтому умножаем i именно на 4. В полученный эелемент -3 записываем первый параметр. В элемент -2 второй. В -1 третий. И наконец, в просто i*4 без вычитания пишем четвёртый параметр.
                continue; //И крутим цикл заного.
            }
            if(equal(text_part1,"sky_name")){
                format(file_str[i*4-1],59,text_part2);
                continue; //Крутим цикл заного.
            }
            if(equal(text_part1,"lights_level")){
                format(file_str[i*4],59,text_part2);
                continue; //Цикл заного.
            }
            i++;
            continue; //И снова возвращаемся в начало цикла.
        }
        fclose(file_id);
        for(new i=1;i<97;i+=4){
            if(!file_str[i][0]){
                format(file_str[i],59,file_str[1]);
                format(file_str[i+1],59,file_str[2]);
                format(file_str[i+2],59,file_str[3]);
                format(file_str[i+3],59,file_str[4]);
                i_max=i;
                break;
            }
        }
        format_time(string_hour,charsmax(string_hour),"%H");
        hour=str_to_num(string_hour);
        format(sky_name,20,file_str[GetNum()+2]);
        return 1;
    }
    public plugin_precache(){
        if(!load_data())return;
        new precache[64];
        for(new i;i<sizeof(arg);i++){
            formatex(precache,63,"gfx/env/%s%s.tga",sky_name,arg[i]);
            precache_generic(precache);
        }
    }
    public print_time_list(id){
        new type_num=1;
        new part1[3],part2[3];
        if(!id){ //Расписание для консоли сервера, если команда была послана через сервер.
            server_print("--------------------------------------------------------------------");
            server_print("|                   Расписание времени суток:                      |");
            for(new i=1;i<i_max;i++){
                switch(type_num){
                    case 1:{
                        server_print("--------------------------------------------------------------------");
                        server_print("[%s]",file_str[i]);
                        server_print(" ");
                        type_num=2;
                    }
                    case 2:{
                        strtok(file_str[i],part1,charsmax(part1),part2,charsmax(part2),',');
                        if(equal(part1,"1")||equal(part1,"21"))server_print("            Период:  c %s часа   по  %s час",part1,part2);
                        else server_print("            Период:  c %s часов   по  %s час",part1,part2);
                        type_num=3;
                    }
                    case 3:{
                        server_print("Файл текстуры неба:  %s",file_str[i]);
                        type_num=4;
                    }
                    case 4:{
                        server_print(" Уровень освещения:  %s",file_str[i]);
                        type_num=1;
                    }
                }
            }
            server_print("--------------------------------------------------------------------");
            return PLUGIN_HANDLED_MAIN;
        } //Далее для консоли игрока, если команду послал игрок.
        client_print(id,print_console,"--------------------------------------------------------------------");
        client_print(id,print_console,"|            Расписание времени суток:              |");
        for(new i=1;i<i_max;i++){
            switch(type_num){
                case 1:{
                    client_print(id,print_console,"--------------------------------------------------------------------");
                    client_print(id,print_console,"[%s]",file_str[i]);
                    client_print(id,print_console," ");
                    type_num=2;
                }
                case 2:{
                    strtok(file_str[i],part1,charsmax(part1),part2,charsmax(part2),',');
                    if(equal(part1,"1")||equal(part1,"21"))client_print(id,print_console,"                   Период:  c %s часа   по  %s час",part1,part2);
                    else client_print(id,print_console,"                   Период:  c %s часов   по  %s час",part1,part2);
                    type_num=3;
                }
                case 3:{
                    client_print(id,print_console,"Файл текстуры неба:  %s",file_str[i]);
                    type_num=4;
                }
                case 4:{
                    client_print(id,print_console," Уровень освещения:  %s",file_str[i]);
                    type_num=1;
                }
            }
        }
        client_print(id,print_console,"--------------------------------------------------------------------");
        ColorChat(id,GREY,"Лист выведен в ^x04консоль");
        return PLUGIN_HANDLED_MAIN;
    }
     
  2. Le$hiy

    Le$hiy Постоялец

    Регистрация:
    10 июн 2017
    Сообщения:
    120
    Симпатии:
    39
    Пол:
    Мужской
  3. neygomon

    neygomon Его Темнейшество :j Команда форума Администратор

    Регистрация:
    8 июн 2017
    Сообщения:
    196
    Симпатии:
    128
    Пол:
    Мужской
    почему никто не догадался тупо сделать каждый час другой свет? -_-
     
    пазлик~ нравится это.
  4. Oleg

    Oleg Пользователь

    Регистрация:
    17 июн 2017
    Сообщения:
    43
    Симпатии:
    3
    Пол:
    Мужской
    neygomon, тупенькие ^-^
    --- Сообщения объединены 27 июн 2017 ---
    Le$hiy,
    А как там правильно писать?
    У меня сам sma код, больше нечего.

    Смысле вангуйте? )) Зарегистрироваться на сайте, будет доступна ссылка :3 Ну или в чем то ошибаюсь
     
  5. Le$hiy

    Le$hiy Постоялец

    Регистрация:
    10 июн 2017
    Сообщения:
    120
    Симпатии:
    39
    Пол:
    Мужской
    Oleg, понятия не имею, что и как там прописывать, я всего лишь указал, что плагин ссылается на конфиг, а у тебя скорее всего его нет. И скорее всего ты его и не найдешь, поэтому дал ссылку на другой подобный плагин.
    Считаешь себя умным, раз позволяешь такие высказывания в адрес авторов плагинов? Ну так хули ты сам плагин не написал? Более того скажу, эта фраза больше применима к тебе, т.к. ты не можешь даже понять, когда тебе подсказывают решение.