Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Система температуры

Статус
В этой теме нельзя размещать новые ответы.

Dark_Ilya

Компетентный
Всем привет!!!
Вот пришла в голову мысль сделать температуру,так как погода есть :df:.
Смысл в том что при минусовой температуре можно заболеть,а так же идёт снег.
Сразу как закончил писать выложил на портал, поэтому если не работает скажите переделаю.Так же пишите о замеченных багах и пожеланиях.Систему снега вырезал из какого-то скрипта, если хотите можете поменять.Если что помогу.Ну ладно давайте приступим.:
Ну это засунем в начало мода, после incude, ну я думаю тупых вопросов не будет куда это сувать.
PHP:
#define MAX_SLOTS                       30

#define MAX_SNOW_OBJECTS    20
#define UPDATE_INTERVAL     750

#if MAX_SLOTS == -1
        #error Change MAX_SLOTS to the max players of your server! (At line 6)
#endif

forward ProxDetectorS(Float:radi, playerid, targetid);
forward UpdateSnow(playerid);
new temperature;
new minuta5,minuta6,minuta7;
new bool:sNoW = false;
new bool:snowOn[MAX_SLOTS char],
        snowObject[MAX_SLOTS][MAX_SNOW_OBJECTS],
        updateTimer[MAX_SLOTS char]
;
Далее создаём паблики
PHP:
public UpdateSnow(playerid)
{
        if(!snowOn{playerid} || sNoW == false) return 0;
        if(GetPlayerInterior(playerid) != 0) return 0;
        new Float:pPos[3];
        GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
        for(new i = 0; i < MAX_SNOW_OBJECTS; i++) SetDynamicObjectPos(snowObject[playerid][i], pPos[0] + random(25), pPos[1] + random(25), pPos[2] - 5);
        return 1;
}
public IsABolezn(playerid)
{
	new Float:HP
	GetPlayerHealth(playerid,HP);
	new Prostyda;
	new Gripp;
	new Oslojnenie;
	PlayerInfo[playerid][pBoleznTime] ++;
	if(PlayerInfo[playerid][pBoleznTime] > 6 && PlayerInfo[playerid][pBolezn] != 6)PlayerInfo[playerid][pBoleznTime] = 0,PlayerInfo[playerid][pBolezn] ++;
	switch(PlayerInfo[playerid][pBolezn])
	{
		case 1: Prostyda = random(5),SetPlayerHealth(playerid,HP - Prostyda),SendClientMessage(playerid,COLOR_WHITE,"Вы болеете по симптомам - это Простуда, сходите к врачу!");
		case 2: Gripp = random(10),SetPlayerHealth(playerid,HP - Gripp),SendClientMessage(playerid,COLOR_WHITE,"Вы болеете по симптомам - это Грипп, сходите к врачу!И избегайте прямого контакта с людьми!");
		case 3 .. 4: Oslojnenie = random(15),SetPlayerHealth(playerid,HP - Oslojnenie),SendClientMessage(playerid,COLOR_WHITE,"У вас осложнение!Это смертельно немедленно обратитесь к врачу!");
		case 5 .. 6: Oslojnenie = random(50),SetPlayerHealth(playerid,HP - Oslojnenie),SendClientMessage(playerid,COLOR_WHITE,"У вас осложнение!Это смертельно немедленно обратитесь к врачу!");
	}
	return 1;
}
stock CreateSnow(playerid)
{
        if(snowOn{playerid} || sNoW == false) return 0;
        if(GetPlayerInterior(playerid) != 0) return 0;
        new Float:pPos[3];
        GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
        for(new i = 0; i < MAX_SNOW_OBJECTS; i++) snowObject[playerid][i] = CreateDynamicObject(18864, pPos[0] + random(25), pPos[1] + random (25), pPos[2] - 5, random(100), random(100), random(100), -1, -1, playerid);
        snowOn{playerid} = true;
        sNoW = true;
        updateTimer{playerid} = SetTimerEx("UpdateSnow", UPDATE_INTERVAL, true, "i", playerid);
        return 1;
}

stock DeleteSnow(playerid)
{
        if(!snowOn{playerid}) return 0;
        for(new i = 0; i < MAX_SNOW_OBJECTS; i++) DestroyDynamicObject(snowObject[playerid][i]);
        KillTimer(updateTimer{playerid});
        snowOn{playerid} = false;
        sNoW = false;
        return 1;
}
Ищем паблик OnGameModeInit и в него:
PHP:
new MINUS = random(15) - random(15);
	new PLUS = random(15) + random(15);
	new PlusareMinus = random(2);
	switch(PlusareMinus)
	{
	    case 1:temperature = MINUS;
	    case 2:temperature = PLUS;
	}
Ищем ваш масив с перемеными игрока у меня это enum pInfo
PHP:
pBolezn,
	pOdelsa,
	pBoleznTime,
	pMedMask
Идём в OnPlayerCommandText:
PHP:
if(strcmp(cmd, "/odejda", true) == 0)
	{
		if(IsPlayerConnected(playerid))
		{
		    if(PlayerInfo[playerid][pOdelsa] == 0)PlayerInfo[playerid][pOdelsa] = 1,SendClientMessage(playerid,COLOR_WHITE,"Вы одели верхнюю одежду");
			if(PlayerInfo[playerid][pOdelsa] == 1)PlayerInfo[playerid][pOdelsa] = 0,SendClientMessage(playerid,COLOR_WHITE,"Вы сняли верхнюю одежду");
		}
		return 1;
	}
if(strcmp(cmd, "/medmask", true) == 0)
	{
		if(IsPlayerConnected(playerid))
		{
		    if(PlayerInfo[playerid][pMedMask] == 0)PlayerInfo[playerid][pMedMask] = 1,SendClientMessage(playerid,COLOR_WHITE,"Вы одели медицинскую маску");
			if(PlayerInfo[playerid][pMedMask] == 1)PlayerInfo[playerid][pMedMask] = 0,SendClientMessage(playerid,COLOR_WHITE,"Вы сняли медицинскую маску");
		}
		return 1;
	}
Теперь нам нужен секундный таймер. У меня это:
PHP:
public SetPlayerUnjail(playerid)
{
	minuta5 ++;
	minuta6 ++;
	minuta7 ++;
	if(minuta5 == 600)
	{
	    minuta5 = 0;
		TEMPERATYRE = random(5);
		PlusareMinus = random(2);
		if(PlusareMinus >= 1)
			    {
			    	if(temperature < -40) return temperature = temperature += TEMPERATYRE;
			    	temperature = temperature -= TEMPERATYRE;
				}
				if(PlusareMinus == 0)
			    {
			    	if(temperature > 40) return temperature = temperature -= TEMPERATYRE;
			    	temperature = temperature += TEMPERATYRE;
				}
	}
	if(temperature < 0 && sNoW == false) CreateSnow(i);
	if(temperature > 0 && sNoW == true) DeleteSnow(playerid);
	if(minuta6 == 300)
	{
		minuta6 = 0;
		SendClientMessage(i,COLOR_LIGHTBLUE,"Вы заболели!");
		IsABolezn(i);
	}
	if(minuta7 == 180)
	{
	    minuta7 = 0;
	    if(temperature < 0 && PlayerInfo[i][pBolezn] != 0 && GetPlayerInterior(i) != 0 && PlayerInfo[i][pOdelsa] == 0 && PlayerInfo[i][pBolezn] < 6)PlayerInfo[i][pBolezn] ++;
	    if(PlayerInfo[i][pBolezn] != 0)
	    {
	        new string[80],vasya = rand(3),Float: POSx,Float: POSy,Float: POSz;
	        cyper = PlayerInfo[i][pBolezn];
	        switch(vasya)
	        {
	            case 0:
	            {
			        format(string, sizeof(string), "%s чихнул", PlayerInfo[playerid][pName]);
			        ProxDetector(20.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
			    }
			    case 1:
	            {
			        format(string, sizeof(string), "%s кашляет", PlayerInfo[playerid][pName]);
			        ProxDetector(20.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
			    }
			    case 2 .. 3:
	            {
			        format(string, sizeof(string), "%s шмыгает носом", PlayerInfo[playerid][pName]);
			        ProxDetector(10.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
			    }
			}
			GetPlayerPos(playerid,POSx,POSy,POSz);
			if(i != i)
			{
				if(PlayerInfo[i][pBolezn] != 0 && PlayerInfo[playerid][pMedMask] == 0 && GetPlayerInterior(i) != 0)
				{
				    PlayerInfo[i][pBolezn] = cyper;
				    SendClientMessage(i,COLOR_WHITE,"Вы заразились!");
				}
			}
	    }
	}
	return 1;
}
В OnPlayerDisconnect:
PHP:
if(snowOn{playerid})
        {
            for(new i = 0; i < MAX_SNOW_OBJECTS; i++) DestroyDynamicObject(snowObject[playerid][i]);
            snowOn{playerid} = false;
            KillTimer(updateTimer{playerid});
        }
Так как это для RP я не вырезал команды включения и отключения снега.Если понравилось + :df:.Критика приветствуется чтобы лучше работал :D
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу