Активный
- Тема Автор
- #1
Погода и время создают атмосферу на сервере. Разберем управление ими.
Установка погоды
ID погоды:
- 0 - ясно
- 1 - облачно
- 2 - облачно
- 3 - облачно
- 4 - дождь
- 5 - дождь
- 6 - дождь
- 7 - дождь
- 8 - дождь
- 9 - дождь
- 10 - туман
- 11 - туман
- 12 - туман
- 13 - туман
- 14 - туман
- 15 - туман
- 16 - туман
- 17 - туман
- 18 - туман
- 19 - песчаная буря
Установка времени
Пример: система смены погоды
Пример: система времени
Синхронизация времени с реальным
Погода для разных зон
Время для разных игроков
Пример: динамическая смена погоды по времени
Важные моменты:
- Используйте таймеры для автоматической смены
- Синхронизируйте время для всех игроков
- Учитывайте влияние погоды на геймплей
- Предоставляйте команды для управления
Погода и время создают уникальную атмосферу сервера!
Установка погоды
Код:
SetWeather(weatherid);
// Пример:
SetWeather(10); // туман
ID погоды:
- 0 - ясно
- 1 - облачно
- 2 - облачно
- 3 - облачно
- 4 - дождь
- 5 - дождь
- 6 - дождь
- 7 - дождь
- 8 - дождь
- 9 - дождь
- 10 - туман
- 11 - туман
- 12 - туман
- 13 - туман
- 14 - туман
- 15 - туман
- 16 - туман
- 17 - туман
- 18 - туман
- 19 - песчаная буря
Установка времени
Код:
SetWorldTime(hour);
// Пример:
SetWorldTime(12); // полдень
Пример: система смены погоды
Код:
new currentWeather = 0;
new weatherCycle[] = {0, 1, 4, 10, 0}; // цикл погоды
new currentWeatherIndex = 0;
public OnGameModeInit()
{
// Смена погоды каждые 10 минут
SetTimer("ChangeWeather", 600000, true);
return 1;
}
forward ChangeWeather();
public ChangeWeather()
{
currentWeatherIndex++;
if(currentWeatherIndex >= sizeof(weatherCycle))
{
currentWeatherIndex = 0;
}
currentWeather = weatherCycle[currentWeatherIndex];
SetWeather(currentWeather);
new string[128];
format(string, sizeof(string), "Погода изменена на ID: %d", currentWeather);
SendClientMessageToAll(-1, string);
}
CMD:weather(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, -1, "У вас нет прав");
return 1;
}
new weatherid;
if(sscanf(params, "i", weatherid))
{
SendClientMessage(playerid, -1, "Использование: /weather [id]");
return 1;
}
if(weatherid < 0 || weatherid > 19)
{
SendClientMessage(playerid, -1, "ID погоды должен быть от 0 до 19");
return 1;
}
SetWeather(weatherid);
currentWeather = weatherid;
new string[128];
format(string, sizeof(string), "Погода изменена на ID: %d", weatherid);
SendClientMessage(playerid, -1, string);
return 1;
}
Пример: система времени
Код:
new serverHour = 12;
new serverMinute = 0;
public OnGameModeInit()
{
SetWorldTime(serverHour);
// Обновление времени каждую минуту
SetTimer("UpdateTime", 60000, true);
return 1;
}
forward UpdateTime();
public UpdateTime()
{
serverMinute++;
if(serverMinute >= 60)
{
serverMinute = 0;
serverHour++;
if(serverHour >= 24)
{
serverHour = 0;
}
SetWorldTime(serverHour);
}
// Уведомление о смене часа
if(serverMinute == 0)
{
new string[128];
format(string, sizeof(string), "Сейчас %02d:00", serverHour);
SendClientMessageToAll(-1, string);
}
}
CMD:time(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, -1, "У вас нет прав");
return 1;
}
new hour;
if(sscanf(params, "i", hour))
{
new string[64];
format(string, sizeof(string), "Текущее время: %02d:%02d", serverHour, serverMinute);
SendClientMessage(playerid, -1, string);
return 1;
}
if(hour < 0 || hour > 23)
{
SendClientMessage(playerid, -1, "Час должен быть от 0 до 23");
return 1;
}
serverHour = hour;
serverMinute = 0;
SetWorldTime(serverHour);
new string[128];
format(string, sizeof(string), "Время установлено на %02d:00", hour);
SendClientMessage(playerid, -1, string);
return 1;
}
Синхронизация времени с реальным
Код:
public OnGameModeInit()
{
// Получение реального времени
new year, month, day, hour, minute, second;
getdate(year, month, day);
gettime(hour, minute, second);
SetWorldTime(hour);
// Синхронизация каждую минуту
SetTimer("SyncRealTime", 60000, true);
return 1;
}
forward SyncRealTime();
public SyncRealTime()
{
new hour, minute, second;
gettime(hour, minute, second);
SetWorldTime(hour);
}
Погода для разных зон
Код:
SetPlayerWeather(playerid, weatherid);
// Пример: разная погода для разных игроков
CMD:myweather(playerid, params[])
{
new weatherid;
if(sscanf(params, "i", weatherid))
{
SendClientMessage(playerid, -1, "Использование: /myweather [id]");
return 1;
}
SetPlayerWeather(playerid, weatherid);
SendClientMessage(playerid, -1, "Ваша погода изменена");
return 1;
}
Время для разных игроков
Код:
SetPlayerTime(playerid, hour, minute);
// Пример: разное время для разных игроков
CMD:mytime(playerid, params[])
{
new hour, minute;
if(sscanf(params, "ii", hour, minute))
{
SendClientMessage(playerid, -1, "Использование: /mytime [час] [минута]");
return 1;
}
SetPlayerTime(playerid, hour, minute);
SendClientMessage(playerid, -1, "Ваше время изменено");
return 1;
}
Пример: динамическая смена погоды по времени
Код:
public OnGameModeInit()
{
SetTimer("DynamicWeather", 300000, true); // каждые 5 минут
return 1;
}
forward DynamicWeather();
public DynamicWeather()
{
new hour, minute, second;
gettime(hour, minute, second);
// Утро (6-12) - ясная погода
if(hour >= 6 && hour < 12)
{
SetWeather(0);
}
// День (12-18) - облачно
else if(hour >= 12 && hour < 18)
{
SetWeather(1);
}
// Вечер (18-22) - дождь
else if(hour >= 18 && hour < 22)
{
SetWeather(4);
}
// Ночь (22-6) - туман
else
{
SetWeather(10);
}
}
Важные моменты:
- Используйте таймеры для автоматической смены
- Синхронизируйте время для всех игроков
- Учитывайте влияние погоды на геймплей
- Предоставляйте команды для управления
Погода и время создают уникальную атмосферу сервера!