Custom Server time
#1

Hello,

I've been trying to edit the standard gl_realtime script in such a way that the time will increase with every second, much like in San Andreas Multiplayer (1 second in real = 1 minute server time). But I've been unsuccessful so far.
I've been wondering what changes one needs to make in order for this to work. Can you perhaps help me?
The script I am using:

Код:
//
// 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)
//
//  © 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;
}
Reply


Messages In This Thread
Custom Server time - by NoahAntilles - 21.03.2019, 20:22
Re: Custom Server time - by NoahAntilles - 21.03.2019, 21:43
Re: Custom Server time - by NoahAntilles - 22.03.2019, 09:41
Re: Custom Server time - by Kaliber - 22.03.2019, 09:51
Re: Custom Server time - by NoahAntilles - 22.03.2019, 16:21
Re: Custom Server time - by NoahAntilles - 05.04.2019, 15:49
Re: Custom Server time - by MP2 - 06.04.2019, 15:56
Re: Custom Server time - by NaS - 06.04.2019, 16:54

Forum Jump:


Users browsing this thread: 1 Guest(s)