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

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

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

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

Система коек [MySQL]

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

Raid_Liker

Умник
Привет всем! Решил написать систему коек на MySQL. И так приступим.
Ко всем #define:
Код:
#define MAX_HEAL 30
Эта функция задаёт максимальное количество коек
Далее ко всем new:
Код:
new HEAL_ADD;
new bolnichka;
new HealInfo[MAX_HEAL][hlInfo];
В массив enum pInfo:
Код:
        hlID,
	hlName[24],
	hlOwned,
	Float: hlX,
	Float: hlY,
	Float: hlZ,
	Float: hlpX,
	Float: hlpY,
	Float: hlpZ,
	Float: hlpA,
	Text3D: hl3DText,
В public OnGameModeInit:
Код:
	bolnichka = CreatePickup(1239, 23, 1169.7383,-1325.4221,15.4078);
	Create3DTextLabel("Информация - прочитайте!",0xFFB200FF, 1169.7383,-1325.4221,15.4078+0.8,8.0,0,1);
	CreateDynamicObject(14597,1158.50000000,-1323.19995117,16.39999962,0.00000000,0.00000000,0.00000000); //object(paperchase07) (1)
	CreateDynamicObject(1569,1171.59997559,-1324.50000000,14.39999962,0.00000000,0.00000000,90.00000000); //object(adam_v_door) (1)
	CreateDynamicObject(1569,1171.59997559,-1321.50000000,14.39999962,0.00000000,0.00000000,270.00000000); //object(adam_v_door) (2)
	CreateDynamicObject(1555,1171.59997559,-1323.00000000,16.89999962,10.00000000,0.00000000,90.00000000); //object(gen_doorext17) (1)
	CreateDynamicObject(1555,1171.59997559,-1324.50000000,16.89999962,9.99755859,0.00000000,90.00000000); //object(gen_doorext17) (2)
	CreateDynamicObject(1369,1170.59997559,-1325.19995117,15.00000000,0.00000000,0.00000000,230.00000000); //object(cj_wheelchair1) (1)
	CreateDynamicObject(2146,1155.90002441,-1328.00000000,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (1)
	CreateDynamicObject(2146,1155.90002441,-1330.30004883,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (2)
	CreateDynamicObject(2146,1155.90002441,-1332.69995117,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (3)
	CreateDynamicObject(2146,1155.90002441,-1335.00000000,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (4)
	CreateDynamicObject(2146,1159.90002441,-1327.90002441,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (5)
	CreateDynamicObject(2146,1159.90002441,-1330.30004883,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (6)
	CreateDynamicObject(2146,1159.90002441,-1332.59997559,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (7)
	CreateDynamicObject(2146,1159.90002441,-1335.00000000,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (8)
	CreateDynamicObject(2146,1164.59997559,-1327.90002441,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (9)
	CreateDynamicObject(2146,1164.59997559,-1331.50000000,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (10)
	CreateDynamicObject(2146,1164.59997559,-1335.00000000,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (11)
	CreateDynamicObject(2146,1164.59997559,-1311.30004883,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (12)
	CreateDynamicObject(2146,1164.59997559,-1314.30004883,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (13)
	CreateDynamicObject(2146,1164.59997559,-1317.30004883,14.89999962,0.00000000,0.00000000,90.00000000); //object(cj_trolly1) (14)
	CreateDynamicObject(2146,1160.90002441,-1311.50000000,14.89999962,0.00000000,0.00000000,0.00000000); //object(cj_trolly1) (15)
	CreateDynamicObject(2146,1160.90002441,-1316.00000000,14.89999962,0.00000000,0.00000000,0.00000000); //object(cj_trolly1) (16)
	CreateDynamicObject(2146,1156.09997559,-1311.90002441,14.89999962,0.00000000,0.00000000,0.00000000); //object(cj_trolly1) (17)
	CreateDynamicObject(2146,1156.09997559,-1316.19995117,14.89999962,0.00000000,0.00000000,0.00000000); //object(cj_trolly1) (18)
	CreateDynamicObject(18070,1148.00000000,-1324.69995117,14.89999962,0.00000000,0.00000000,0.00000000); //object(gap_counter) (1)
	CreateDynamicObject(1491,1154.19995117,-1323.95996094,14.39999962,0.00000000,0.00000000,90.00000000); //object(gen_doorint01) (1)
	CreateDynamicObject(8948,1144.40002441,-1325.19995117,14.39999962,0.00000000,0.00000000,0.00000000); //object(lckupgrgdoor_lvs) (1)
	CreateDynamicObject(8948,1144.40002441,-1332.50000000,14.39999962,0.00000000,0.00000000,0.00000000); //object(lckupgrgdoor_lvs) (2)
	CreateDynamicObject(8948,1144.40002441,-1325.19995117,17.80000114,0.00000000,0.00000000,0.00000000); //object(lckupgrgdoor_lvs) (3)
	CreateDynamicObject(8948,1144.40002441,-1332.50000000,17.79999924,0.00000000,0.00000000,0.00000000); //object(lckupgrgdoor_lvs) (4)
	CreateDynamicObject(8948,1154.19995117,-1320.50000000,16.20000076,90.00000000,0.00000000,0.00000000); //object(lckupgrgdoor_lvs) (5)
	CreateDynamicObject(8948,1154.19995117,-1325.90002441,17.29999924,90.00000000,0.00000000,0.00000000); //object(lckupgrgdoor_lvs) (6)
В public OnPlayerPickUp:
Код:
	if(pickupid == bolnichka)// Ознакомление с больницей
	{
		format(string, 512, "{8d8dff}\t\tОзнакомление\t\t\t\n\n{ffffff}[1] - Если у вас 10 Хп или меньше = 5 минут отдыха.\n\
		[2] - После 30(50) Хп = 4 минуты отдыха.\n[3] - Псоле 50(70) Хп = 3 минуты отдыха.\n[4] - После 70(100) Хп = 2 минуты отдыха.");
	    SPD(playerid, 999, 0, "{33FF00}Ознакомление:", string, "Ок", "");
	}
В OnPlayerKeyStateChange:
Код:
	if(!IsPlayerInAnyVehicle(playerid))
	{
		if( (newkeys & KEY_FIRE) || ( (newkeys & 128) && (oldkeys & 128) && (newkeys & KEY_SECONDARY_ATTACK)))
		{
		    if(IsPlayerInRangeOfPoint(playerid, 30.0,1162.7018,-1323.2761,15.4151))// bolnichka
			{
			    ClearAnimations(playerid);
				return 1;
			}
		}
	}
В OnPlayerDisconnect:
Код:
	if(PlayerInfo[playerid][Hospital] > 0)
	{
		for(new h = 0; h < HEAL_ADD; h++)
		{
	    	new string[MAX_STRING];
			PlayerInfo[playerid][Hospital] = 0;
			HealInfo[h][hlOwned] = 0;
			strmid(HealInfo[h][hlName], "None", 0, strlen("None"), MAX_PLAYER_NAME);
			SetPlayerHealth(playerid, 10);
			format(string, 128, "{AFEEEE}Койка №%d\n[Лечиться: /healme]",HealInfo[h][hlID]);
			Update3DTextLabelText(HealInfo[h][hl3DText],-1,string);
			print("Save"), SaveHeal();
		}
	}
В OnPlayerSpawn:
Код:
	if(PlayerInfo[playerid][Heal] <= 10)
	{
 		if(IsAMedic(playerid))return SetPlayerHealth(playerid, 100.0);
		SetTimerEx("PlayerToggle", 1100, false, "d", playerid);
		TogglePlayerControllable(playerid,false);
		SetPlayerPos(playerid, 1156.2234,-1322.0963,15.4078);
		SetPlayerFacingAngle(playerid, 239.3656);
  		SendClientMessage(playerid,-1, "У вас сильно ухудшилось здоровье, вы упали в обморок, медики забрали вас...");
		SetPlayerHealth(playerid, 10.0), SaveAccount(playerid);
		return 1;
	}
	else SetPlayerHealth(playerid, 50.0);
В конец мода:
Код:
stock LoadHeal() {// Load
    new query[512];
    mysql_query("SELECT * FROM `heal`");
	mysql_store_result();
	if(mysql_num_rows() > 0)
	{
		for(new idx = 0; idx < mysql_num_rows(); idx++)
		{
		   	mysql_fetch_row(query);
        	sscanf(query, "p<|>is[24]dfffffff",
        	HealInfo[idx][hlID],
			HealInfo[idx][hlName],
			HealInfo[idx][hlOwned],
			HealInfo[idx][hlX],
			HealInfo[idx][hlY],
			HealInfo[idx][hlZ],
			HealInfo[idx][hlpX],
			HealInfo[idx][hlpY],
			HealInfo[idx][hlpZ],
			HealInfo[idx][hlpA]);
        	HEAL_ADD++;
   			if(HealInfo[idx][hlOwned] == 0)
			{
				format(query, 128, "{AFEEEE}Койка №%d\n[Лечиться: /healme]",HealInfo[idx][hlID]);
				HealInfo[idx][hl3DText] = Create3DTextLabel(query,-1,HealInfo[idx][hlX], HealInfo[idx][hlY], HealInfo[idx][hlZ]-1,7.0,0);
			}
        }
    }
    mysql_free_result();
    printf("Загружено больничных коек: %d", HEAL_ADD);
    return 1;
}

stock SaveHeal() {// Save
    for(new idx = 0; idx < HEAL_ADD; idx++)
    {
		new sql[256];
		format(sql, sizeof(sql), "UPDATE heal SET Name='%s',Owned='%d',X='%f',Y='%f',Z='%f',pX='%f',pY='%f',pZ='%f',pA='%f' WHERE ID=%d",
		HealInfo[idx][hlName],
		HealInfo[idx][hlOwned],
		HealInfo[idx][hlX],
		HealInfo[idx][hlY],
		HealInfo[idx][hlZ],
		HealInfo[idx][hlpX],
		HealInfo[idx][hlpY],
		HealInfo[idx][hlpZ],
		HealInfo[idx][hlpA],
		HealInfo[idx][hlID]);
		mysql_query(sql);
		print("Heal KOK Save'ed!!!");
	}
	mysql_free_result();
	return 1;
}

forward PlayerToggle(playerid);
public PlayerToggle(playerid)
{
    TogglePlayerControllable(playerid,true);
	return 1;
}

/* OtherTimer */
  		if(PlayerInfo[i][Hospital] > 0)
    	{
  			PlayerInfo[i][Hospital] --;
			format(string, 128, "{AFEEEE}Койка №%d\n[Лечиться: %s]\n[Время лечения: %d]",HealInfo[i][hlID],HealInfo[i][hlName],PlayerInfo[i][Hospital]);
			Update3DTextLabelText(HealInfo[i][hl3DText],-1,string);
			if(!PlayerInfo[i][Hospital])
			{
				succ(i,"Вы были выписаны из болници.");
				PlayerInfo[i][Hospital] = 0; HealInfo[i][hlOwned] = 0;
				strmid(HealInfo[i][hlName], "None", 0, strlen("None"), MAX_PLAYER_NAME);
				ClearAnimations(i);
				format(string, 128, "{AFEEEE}Койка №%d\n[Лечиться: /healme]",HealInfo[i][hlID]);
				Update3DTextLabelText(HealInfo[i][hl3DText],-1,string);
 				SetPlayerPos(i, 1176.542236, -1323.792236, 14.026460);
 				SetPlayerFacingAngle(i, 274.093627);
 				TogglePlayerControllable(i, 1);
 				if(GetPVarInt(i,"TypeHP1") == 1) { SetPlayerHealth(i, 100); }
				else if(GetPVarInt(i,"TypeHP2") == 2) { SetPlayerHealth(i, 50); }
				else if(GetPVarInt(i,"TypeHP3") == 3) { SetPlayerHealth(i, 70); }
				else if(GetPVarInt(i,"TypeHP4") == 4) { SetPlayerHealth(i, 100); }
 				SaveHeal();
       	}
       	SaveAccount(i);// Сох акка
   	}
forward Okay(playerid);
public Okay(playerid)
{
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
    SetTimerEx("Okay2", 500, false, "d", playerid);
	return 1;
}

forward Okay2(playerid);
public Okay2(playerid)
{
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
	return 1;
}

/* Таблица
CREATE TABLE IF NOT EXISTS `heal` (
  `ID` int(5) NOT NULL,
  `Name` varchar(24) CHARACTER SET utf8 NOT NULL DEFAULT 'None',
  `Owned` int(2) NOT NULL DEFAULT '0',
  `X` float NOT NULL DEFAULT '0',
  `Y` float NOT NULL DEFAULT '0',
  `Z` float NOT NULL DEFAULT '0',
  `pX` float NOT NULL DEFAULT '0',
  `pY` float NOT NULL DEFAULT '0',
  `pZ` float NOT NULL DEFAULT '0',
  `pA` float NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;

INSERT INTO `heal` (`ID`, `Name`, `Owned`, `X`, `Y`, `Z`, `pX`, `pY`, `pZ`, `pA`) VALUES
(0, 'None', 0, 1156.18, -1327.95, 16.4002, 1156.18, -1327.95, 16.4002, 88.8914),
(1, 'None', 0, 1156.18, -1330.3, 16.4002, 1156.18, -1330.3, 16.4002, 89.8314),
(2, 'None', 0, 1156.19, -1332.65, 16.4002, 1156.19, -1332.65, 16.4002, 87.0114),
(3, 'None', 0, 1156.06, -1334.93, 16.4002, 1156.06, -1334.93, 16.4002, 89.2048),
(4, 'None', 0, 1159.7, -1335.04, 16.4002, 1159.7, -1335.04, 16.4002, 270.626),
(5, 'None', 0, 1159.63, -1332.65, 16.4002, 1159.63, -1332.65, 16.4002, 269.686),
(6, 'None', 0, 1159.74, -1330.34, 16.4002, 1159.74, -1330.34, 16.4002, 269.686),
(7, 'None', 0, 1159.6, -1327.91, 16.4002, 1159.6, -1327.91, 16.4002, 268.12),
(8, 'None', 0, 1156.14, -1316.42, 16.4002, 1156.14, -1316.42, 16.4002, 357.71),
(9, 'None', 0, 1156.14, -1312.21, 16.4002, 1156.14, -1312.21, 16.4002, 359.277),
(10, 'None', 0, 1160.96, -1311.7, 16.4002, 1160.96, -1311.7, 16.4002, 359.277),
(11, 'None', 0, 1160.86, -1315.77, 16.4002, 1160.86, -1315.77, 16.4002, 182.579),
(12, 'None', 0, 1164.81, -1317.28, 16.4002, 1164.81, -1317.28, 16.4002, 82.0213),
(13, 'None', 0, 1164.87, -1314.26, 16.4002, 1164.87, -1314.26, 16.4002, 91.0847),
(14, 'None', 0, 1164.69, -1311.25, 16.4002, 1164.69, -1311.25, 16.4002, 97.3514),
(15, 'None', 0, 1164.85, -1327.84, 16.4002, 1164.85, -1327.84, 16.4002, 92.0247),
(16, 'None', 0, 1164.83, -1331.39, 16.4002, 1164.83, -1331.39, 16.4002, 91.7114),
(17, 'None', 0, 1164.84, -1334.93, 16.4002, 1164.84, -1334.93, 16.4002, 93.5914);

*/
Далее ко всем командам:
Код:
CMD:addheal(playerid, params[])
{
	if(GetPVarInt(playerid, "PLAYERISLOGGED") == 0)return err(playerid, "Вы не авторизированы!");
 	if(IsAAdmin(playerid,6))return err(playerid, "Вы не уполномочены использовать эту команду!");
 	if(GetPVarInt(playerid, "Dostup") == 0)return err(playerid, "Вы не авторизированы в админ панели!");
  	if(IsPlayerInAnyVehicle(playerid))return err(playerid,"Вы не должны быть в транспорте!");
	new Float:X,Float:Y,Float:Z,Float:A; GetPlayerPos(playerid, X,Y,Z); GetPlayerFacingAngle(playerid, A);
	new string2[512];
	format(string2,512,"INSERT INTO `heal` (`ID`,`Name`,`Owned`,`X`,`Y`,`Z`,`pX`,`pY`,`pZ`,`pA`) VALUES (%d,'None',0,'%f','%f','%f','%f','%f','%f','%f');", HEAL_ADD,X,Y,Z,X,Y,Z,A);
	mysql_query(string2);
	mysql_free_result();
	HealInfo[HEAL_ADD][hlID] = HEAL_ADD;
 	strmid(HealInfo[HEAL_ADD][hlName],"None",0,24,255);
 	HealInfo[HEAL_ADD][hlOwned] = 0;
 	HealInfo[HEAL_ADD][hlX] = X;
 	HealInfo[HEAL_ADD][hlY] = Y;
 	HealInfo[HEAL_ADD][hlZ] = Z;
 	HealInfo[HEAL_ADD][hlpX] = X;
 	HealInfo[HEAL_ADD][hlpY] = Y;
 	HealInfo[HEAL_ADD][hlpZ] = Z;
 	HealInfo[HEAL_ADD][hlpA] = A;
	format(string2, sizeof(string2), "{AFEEEE}Койка №%d\n[Лечиться: /healme]",HealInfo[HEAL_ADD][hlID]);
	HealInfo[HEAL_ADD][hl3DText] = Create3DTextLabel(string2,-1,HealInfo[HEAL_ADD][hlX], HealInfo[HEAL_ADD][hlY], HealInfo[HEAL_ADD][hlZ]-1,7.0,0);
 	HEAL_ADD++;
	format(string2, sizeof(string2), "Койка номер %d создана.", HEAL_ADD);
	SendClientMessage(playerid,-1, string2);
	return 1;
}
CMD:healme(playerid, params[])
{
	if(GetPVarInt(playerid, "PLAYERISLOGGED") == 0)return err(playerid, "Вы не авторизированы!");
	new full = 0;
	for(new i = 0; i < HEAL_ADD; i++)
	{
	 	if(IsPlayerInRangeOfPoint(playerid, 2.0, HealInfo[i][hlX], HealInfo[i][hlY], HealInfo[i][hlZ]) && HealInfo[i][hlOwned] == 0)
		{
			if(IsAMedic(playerid))return err(playerid, "Вы медик, и вы не можете лечиться.");
			/*--------------------------------Classes-------------------------*/
			if(PlayerInfo[playerid][Heal] <= 10) { PlayerInfo[playerid][Hospital] = 5*60; HealInfo[i][hlOwned] = 1; SetPVarInt(playerid,"TypeHP1", 1); }
			else if(PlayerInfo[playerid][Heal] >= 30) { PlayerInfo[playerid][Hospital] = 4*60; HealInfo[i][hlOwned] = 1; SetPVarInt(playerid,"TypeHP2", 2); }
			else if(PlayerInfo[playerid][Heal] >= 50) { PlayerInfo[playerid][Hospital] = 3*60; HealInfo[i][hlOwned] = 1; SetPVarInt(playerid,"TypeHP3", 3); }
			else if(PlayerInfo[playerid][Heal] >= 70) { PlayerInfo[playerid][Hospital] = 2*60; HealInfo[i][hlOwned] = 1; SetPVarInt(playerid,"TypeHP4", 4); }
			/*----------------------------------------------------------------*/
			strmid(HealInfo[i][hlName], Name(playerid), 0, strlen(Name(playerid)), MAX_PLAYER_NAME);
			SetPlayerPos(playerid, HealInfo[i][hlpX], HealInfo[i][hlpY], HealInfo[i][hlpZ]), SetPlayerFacingAngle(playerid, HealInfo[i][hlpA]);
			succ(playerid, "Вы успешно лягли на койку, теперь лежите и не двигайтесь.");
  			TogglePlayerControllable(playerid, 0);
 			SetTimerEx("Okay", 1100, false, "d", playerid);
			SaveHeal();
			full++;
		}
 	}
 	if(full == 0) err(playerid, "Вы слишком далеко от койки или вы уже лечитесь.");
 	return 1;
}
За +сами конечно не гоняюсь, но если понравится и понадобился урок поставьте +.

Автор: Я (Raid_Liker)
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу