Raid_Liker
Умник
Привет всем! Решил написать систему коек на MySQL. И так приступим.
Ко всем #define:
Далее ко всем new:
В массив enum pInfo:
В public OnGameModeInit:
В public OnPlayerPickUp:
В OnPlayerKeyStateChange:
В OnPlayerDisconnect:
В OnPlayerSpawn:
В конец мода:
Далее ко всем командам:
За +сами конечно не гоняюсь, но если понравится и понадобился урок поставьте +.
Автор: Я (Raid_Liker)
Ко всем #define:
Код:
#define MAX_HEAL 30
Эта функция задаёт максимальное количество коек
Код:
new HEAL_ADD;
new bolnichka;
new HealInfo[MAX_HEAL][hlInfo];
Код:
hlID,
hlName[24],
hlOwned,
Float: hlX,
Float: hlY,
Float: hlZ,
Float: hlpX,
Float: hlpY,
Float: hlpZ,
Float: hlpA,
Text3D: hl3DText,
Код:
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)
Код:
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, "Ок", "");
}
Код:
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;
}
}
}
Код:
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();
}
}
Код:
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)
Последнее редактирование:
