Oleg
Пользователь
- Регистрация
- 17 Июн 2017
- Сообщения
- 85
- Симпатии
- 5
- Предупреждения
- 30
- Пол
- Мужской
Йоу! Ребяяяятааа! Нашел такой офегительный плаааагин!
То есть как я вообще понимаю. Можно выставить время суток на сервере по расписанию. То есть например
6:00 карта будет темная, небо будет тоже другое, а вот например 10:00 Небо будет светлое, освещение карты тоже.
Автор плагина, расписал (почти) весь код..
Знаю что командой "set_lights" от "a" до "z" (по алфавиту) - меняется освещение карты.
time_list - это команда показывает расписание время суток
Итог! - Как сделать то самое расписание, что бы в определенное время, менялось освещение карты
То есть как я вообще понимаю. Можно выставить время суток на сервере по расписанию. То есть например
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;
}