//
|
|
// Keeps the in game time synced to the server's time and
|
|
// draws the current time on the player's hud using a textdraw/
|
|
// (1 minute = 1 minute real world time)
|
|
//
|
|
// (c) 2009-2014 SA-MP Team
|
|
|
|
#include <a_samp>
|
|
#pragma tabsize 0
|
|
|
|
#include "../include/gl_common.inc"
|
|
|
|
//--------------------------------------------------
|
|
|
|
// Used to override the time in this script
|
|
new worldtime_override = 0;
|
|
new worldtime_overridehour = 0;
|
|
new worldtime_overridemin = 0;
|
|
|
|
new Text:txtTimeDisp;
|
|
new hour, minute;
|
|
new timestr[32];
|
|
|
|
forward UpdateTimeAndWeather();
|
|
|
|
//--------------------------------------------------
|
|
|
|
new fine_weather_ids[] = {1,2,3,4,5,6,7,12,13,14,15,17,18,24,25,26,27,28,29,30,40};
|
|
new foggy_weather_ids[] = {9,19,20,31,32};
|
|
new wet_weather_ids[] = {8};
|
|
|
|
stock UpdateWorldWeather()
|
|
{
|
|
new next_weather_prob = random(100);
|
|
if(next_weather_prob < 70) SetWeather(fine_weather_ids[random(sizeof(fine_weather_ids))]);
|
|
else if(next_weather_prob < 95) SetWeather(foggy_weather_ids[random(sizeof(foggy_weather_ids))]);
|
|
else SetWeather(wet_weather_ids[random(sizeof(wet_weather_ids))]);
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
|
|
//new last_weather_update=0;
|
|
|
|
public UpdateTimeAndWeather()
|
|
{
|
|
// Update time
|
|
if(!worldtime_override) {
|
|
gettime(hour, minute);
|
|
} else {
|
|
hour = worldtime_overridehour;
|
|
minute = worldtime_overridemin;
|
|
}
|
|
|
|
format(timestr,32,"%02d:%02d",hour,minute);
|
|
TextDrawSetString(txtTimeDisp,timestr);
|
|
SetWorldTime(hour);
|
|
|
|
new x=0;
|
|
while(x!=MAX_PLAYERS) {
|
|
if(IsPlayerConnected(x) && GetPlayerState(x) != PLAYER_STATE_NONE) {
|
|
SetPlayerTime(x,hour,minute);
|
|
}
|
|
x++;
|
|
}
|
|
|
|
/* Update weather every hour
|
|
if(last_weather_update == 0) {
|
|
UpdateWorldWeather();
|
|
}
|
|
last_weather_update++;
|
|
if(last_weather_update == 60) {
|
|
last_weather_update = 0;
|
|
}*/
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
|
|
public OnGameModeInit()
|
|
{
|
|
// Init our text display
|
|
txtTimeDisp = TextDrawCreate(605.0,25.0,"00:00");
|
|
TextDrawUseBox(txtTimeDisp, 0);
|
|
TextDrawFont(txtTimeDisp, 3);
|
|
TextDrawSetShadow(txtTimeDisp,0); // no shadow
|
|
TextDrawSetOutline(txtTimeDisp,2); // thickness 1
|
|
TextDrawBackgroundColor(txtTimeDisp,0x000000FF);
|
|
TextDrawColor(txtTimeDisp,0xFFFFFFFF);
|
|
TextDrawAlignment(txtTimeDisp,3);
|
|
TextDrawLetterSize(txtTimeDisp,0.5,1.5);
|
|
|
|
UpdateTimeAndWeather();
|
|
SetTimer("UpdateTimeAndWeather",1000 * 60,1);
|
|
|
|
return 1;
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
|
|
public OnPlayerSpawn(playerid)
|
|
{
|
|
TextDrawShowForPlayer(playerid,txtTimeDisp);
|
|
|
|
// Update time
|
|
if(!worldtime_override) {
|
|
gettime(hour, minute);
|
|
} else {
|
|
hour = worldtime_overridehour;
|
|
minute = worldtime_overridemin;
|
|
}
|
|
|
|
SetPlayerTime(playerid,hour,minute);
|
|
|
|
return 1;
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
|
|
public OnPlayerDeath(playerid, killerid, reason)
|
|
{
|
|
TextDrawHideForPlayer(playerid,txtTimeDisp);
|
|
return 1;
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
|
|
public OnPlayerConnect(playerid)
|
|
{
|
|
gettime(hour, minute);
|
|
SetPlayerTime(playerid,hour,minute);
|
|
return 1;
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
|
|
public OnPlayerCommandText(playerid, cmdtext[])
|
|
{
|
|
new cmd[256+1];
|
|
new idx;
|
|
cmd = strtok(cmdtext, idx);
|
|
|
|
if(!IsPlayerAdmin(playerid)) return 0; // this is an admin only script
|
|
|
|
if(strcmp(cmd, "/sethour", true) == 0) {
|
|
new tmp[256+1];
|
|
tmp = strtok(cmdtext,idx);
|
|
worldtime_override = 1;
|
|
worldtime_overridehour = strval(tmp);
|
|
UpdateTimeAndWeather();
|
|
return 1;
|
|
}
|
|
|
|
if(strcmp(cmd, "/setminute", true) == 0) {
|
|
new tmp[256+1];
|
|
tmp = strtok(cmdtext,idx);
|
|
worldtime_override = 1;
|
|
worldtime_overridemin = strval(tmp);
|
|
UpdateTimeAndWeather();
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|