- Регистрация
- 23 Сен 2016
- Сообщения
- 16
- Лучшие ответы
- 0
- Репутация
- 9
Здравствуйте, уважаемые пользователи.
Представляю вашему вниманию динамическую систему пикапов.
Итак, начнём.
В начало мода:
В OnGameModeInit:
В конец мода:
В OnPlayerKeyStateChange:
Команда создания пикапа:
Дополнительно:
База данных:
Представляю вашему вниманию динамическую систему пикапов.
Итак, начнём.
В начало мода:
PHP:
#define MAX_ENTERS 100
enum EInfo
{
pID,
Float:pX,
Float:pY,
Float:pZ,
Float:pEX,
Float:pEY,
Float:pEZ,
pInt,
pWorld,
pEInt,
pEWorld,
pText[60],
pFraction
};
new EnterInfo[MAX_ENTERS][EInfo];
new TOTALPICKUP;
PHP:
mysql_function_query(connects,"SELECT * FROM `enters`",true,"LoadEnters","");
PHP:
forward LoadEnters();
public LoadEnters()
{
new rows,fields;
cache_get_data(rows,fields);
if(rows)
{
for(new i = 1; i <= rows; i++)
{
EnterInfo[i][pID] = cache_get_field_content_int(i-1,"ID",connects);
EnterInfo[i][pX] = cache_get_field_content_float(i-1,"X",connects);
EnterInfo[i][pY] = cache_get_field_content_float(i-1,"Y",connects);
EnterInfo[i][pZ] = cache_get_field_content_float(i-1,"Z",connects);
EnterInfo[i][pEX] = cache_get_field_content_float(i-1,"EX",connects);
EnterInfo[i][pEY] = cache_get_field_content_float(i-1,"EY",connects);
EnterInfo[i][pEZ] = cache_get_field_content_float(i-1,"EZ",connects);
EnterInfo[i][pWorld] = cache_get_field_content_int(i-1,"World",connects);
EnterInfo[i][pInt] = cache_get_field_content_int(i-1,"Int",connects);
EnterInfo[i][pEWorld] = cache_get_field_content_int(i-1,"EWorld",connects);
EnterInfo[i][pEInt] = cache_get_field_content_int(i-1,"EInt",connects);
EnterInfo[i][pFraction] = cache_get_field_content_int(i-1,"Fraction",connects);
cache_get_field_content(i-1,"Text",EnterInfo[i][pText],connects,60);
CreateDynamicPickup(19132,23,EnterInfo[i][pX],EnterInfo[i][pY],EnterInfo[i][pZ],EnterInfo[i][pWorld],EnterInfo[i][pInt]);
CreateDynamicPickup(19132,23,EnterInfo[i][pEX],EnterInfo[i][pEY],EnterInfo[i][pEZ],EnterInfo[i][pEWorld],EnterInfo[i][pEInt]);
static const format_text[] = "{E7AF20}[{ffffff}%s{E7AF20}]\n{ffffff}Используйте: {E7AF20}ALT";
new text[sizeof(format_text)-2+60];
format(text,sizeof(text),format_text,EnterInfo[i][pText]);
CreateDynamic3DTextLabel(text,-1,EnterInfo[i][pX],EnterInfo[i][pY],EnterInfo[i][pZ],20.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,EnterInfo[i][pWorld],EnterInfo[i][pInt],-1,100.0);
CreateDynamic3DTextLabel("{E7AF20}[{ffffff}Выход{E7AF20}]\n{ffffff}Используйте: {E7AF20}ALT",-1,EnterInfo[i][pEX],EnterInfo[i][pEY],EnterInfo[i][pEZ],20.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,EnterInfo[i][pEWorld],EnterInfo[i][pEInt],-1,100.0);
TOTALPICKUP++;
}
}
return printf("[MySQL] Загружено пикапов: %d.",TOTALPICKUP);
}
forward UnFreeze(playerid);
public UnFreeze(playerid) return TogglePlayerControllable(playerid, 1);
PHP:
if(newkeys == KEY_WALK)
{
for(new i = 1; i <= TOTALPICKUP; i++)
{
if(IsPlayerInRangeOfPoint(playerid,0.5,EnterInfo[i][pX],EnterInfo[i][pY],EnterInfo[i][pZ]) && GetPlayerVirtualWorld(playerid) == EnterInfo[i][pWorld])
{
if(EnterInfo[i][pFraction] != 0 && pData[playerid][pMember] != EnterInfo[i][pFraction]) return SendClientMessage(playerid,-1,"Вам недоступен данный пикап!");
SetPlayerPos(playerid,EnterInfo[i][pEX],EnterInfo[i][pEY],EnterInfo[i][pEZ]);
SetPlayerVirtualWorld(playerid,EnterInfo[i][pEWorld]);
SetPlayerInterior(playerid,EnterInfo[i][pEInt]);
TogglePlayerControllable(playerid, 0);
SetTimerEx("UnFreeze",2000,false,"d",playerid);
}
else if(IsPlayerInRangeOfPoint(playerid,0.5,EnterInfo[i][pEX],EnterInfo[i][pEY],EnterInfo[i][pEZ]) && GetPlayerVirtualWorld(playerid) == EnterInfo[i][pEWorld])
{
if(EnterInfo[i][pFraction] != 0 && pData[playerid][pMember] != EnterInfo[i][pFraction]) return SendClientMessage(playerid,-1,"Вам недоступен данный пикап!");
SetPlayerPos(playerid,EnterInfo[i][pX],EnterInfo[i][pY],EnterInfo[i][pZ]);
SetPlayerVirtualWorld(playerid,EnterInfo[i][pWorld]);
SetPlayerInterior(playerid,EnterInfo[i][pInt]);
TogglePlayerControllable(playerid, 0);
SetTimerEx("UnFreeze",2000,false,"d",playerid);
}
}
}
PHP:
CMD:addpickup(playerid,params[])
{
if(pData[playerid][pAdmin] < 8) return 1;
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if(!GetPVarInt(playerid,"AddedPickup"))
{
SetPVarInt(playerid,"AddedPickup",1);
SetPVarFloat(playerid,"PickupX",x);
SetPVarFloat(playerid,"PickupY",y);
SetPVarFloat(playerid,"PickupZ",z);
SetPVarInt(playerid,"PickupInt",GetPlayerInterior(playerid));
SetPVarInt(playerid,"PickupWorld",GetPlayerVirtualWorld(playerid));
SendClientMessage(playerid,-1,"Координаты входа установлены. Встаньте на место выхода и введите: /addpickup");
}
else if(GetPVarInt(playerid,"AddedPickup"))
{
new frac,text[60];
if(sscanf(params,"ds[60]",frac,text)) return SendClientMessage(playerid,-1,"Используйте: /addpickup [ID фракции | Доступен всем - 0] [Текст]");
if(strlen(text) > 60) return SendClientMessage(playerid,-1,"Длина текста должна быть не более 60 символов!");
if(frac < 0 || frac > TOTALFRAC) return SendClientMessage(playerid,-1,"ID фракции введён неверно!");
TOTALPICKUP++;
EnterInfo[TOTALPICKUP][pID] = TOTALPICKUP;
EnterInfo[TOTALPICKUP][pX] = GetPVarFloat(playerid,"PickupX");
EnterInfo[TOTALPICKUP][pY] = GetPVarFloat(playerid,"PickupY");
EnterInfo[TOTALPICKUP][pZ] = GetPVarFloat(playerid,"PickupZ");
EnterInfo[TOTALPICKUP][pEX] = x;
EnterInfo[TOTALPICKUP][pEY] = y;
EnterInfo[TOTALPICKUP][pEZ] = z;
EnterInfo[TOTALPICKUP][pInt] = GetPVarInt(playerid,"PickupInt");
EnterInfo[TOTALPICKUP][pWorld] = GetPVarInt(playerid,"PickupWorld");
EnterInfo[TOTALPICKUP][pEInt] = GetPlayerInterior(playerid);
EnterInfo[TOTALPICKUP][pEWorld] = GetPlayerVirtualWorld(playerid);
EnterInfo[TOTALPICKUP][pFraction] = frac;
format(EnterInfo[TOTALPICKUP][pText],60,"%s",text);
static const format_string[] = "INSERT INTO `enters`(`ID`,`X`,`Y`,`Z`,`EX`,`EY`,`EZ`,`Int`,`World`,`EInt`,`EWorld`,`Text`,`Fraction`)VALUES ('%d', '%f', '%f', '%f', '%f','%f', '%f', '%d', '%d', '%d', '%d', '%s', '%d')";
new string[sizeof(format_string)-26+7+7+7+7+7+7+7+7+7+7+7+60+5];
format(string,sizeof(string),format_string,TOTALPICKUP,EnterInfo[TOTALPICKUP][pX],EnterInfo[TOTALPICKUP][pY],EnterInfo[TOTALPICKUP][pZ],x,y,z,GetPVarInt(playerid,"PickupInt"),GetPVarInt(playerid,"PickupWorld"),GetPlayerInterior(playerid),GetPlayerVirtualWorld(playerid),EnterInfo[TOTALPICKUP][pText],EnterInfo[TOTALPICKUP][pFraction]);
mysql_query(connects,string);
TOTALPICKUP = 0;
mysql_function_query(connects,"SELECT * FROM `enters`",true,"LoadEnters","");
SendClientMessage(playerid,-1,"Пикап успешно создан!");
DeletePVar(playerid,"AddedPickup");
DeletePVar(playerid,"PickupInt");
DeletePVar(playerid,"PickupWorld");
DeletePVar(playerid,"PickupX");
DeletePVar(playerid,"PickupY");
DeletePVar(playerid,"PickupZ");
}
return 1;
}
PHP:
pData[playerid][pAdmin] - переменная с админкой.
connects - переменная подключения бд.
pData[playerid][pMember] - переменная с фракцией игрока.
PHP:
CREATE TABLE `enters` (
`ID` int(11) NOT NULL,
`X` float NOT NULL,
`Y` float NOT NULL,
`Z` float NOT NULL,
`EX` float NOT NULL,
`EY` float NOT NULL,
`EZ` float NOT NULL,
`World` int(11) NOT NULL DEFAULT 0,
`Int` int(11) NOT NULL DEFAULT 0,
`EWorld` int(11) NOT NULL DEFAULT 0,
`EInt` int(11) NOT NULL DEFAULT 0,
`Text` varchar(65) NOT NULL,
`Fraction` int(5) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Последнее редактирование: