Время суток меняется НА СЕРВЕРЕ

Oleg

Пользователь
Регистрация
17 Июн 2017
Сообщения
69
Симпатии
2
Пол
Мужской
#1
Йоу! Ребяяяятааа! Нашел такой офегительный плаааагин!
То есть как я вообще понимаю. Можно выставить время суток на сервере по расписанию. То есть например
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;
}
 

Le$hiy

Пользователь
Регистрация
10 Июн 2017
Сообщения
199
Симпатии
70
Пол
Мужской
#2

neygomon

Его Темнейшество :j
Пользователь
Регистрация
8 Июн 2017
Сообщения
835
Симпатии
379
Пол
Мужской
#3
почему никто не догадался тупо сделать каждый час другой свет? -_-
 

Oleg

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

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

Le$hiy

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