PHP код:
#if defined _pps_included
#endinput
#endif
#define _pps_included
#pragma library pps
//-------------------------------------
// 12.03.2011
// Pickup Portal System 1.0 by OFFREAL
// ICQ: 355-090-114
//-------------------------------------
forward pps_Init();
forward pps_Unload();
forward pps_DeactiveTimer();
forward pps_OnPlayerPickUpPickup(playerid, pickupid);
enum pps_info {
ppsN[32], // имя портала
Float:ppsX, // координата X портала
Float:ppsY, // координата Y портала
Float:ppsZ, // координата Z портала
Float:ppsA, // координата A портала (угол поворота игрока)
ppsI, // интерьер портала
ppsW, // виртуальный мир портала
ppsU, // уникальный НОМЕР портала (должен быть > 0, и НЕ должен быть одинаковым у разных порталов!)
ppsT, // НОМЕР портала-выхода из портала
ppsP // ИД пикапа-телепорта (всегда должен быть равен -1 до инициализации)
};
#define PP_MOD 19131 // Модель пикапа
#define PP_TYPE 1 // Тип пикапа
#define MAX_PORTALS 30 // Максимальное число порталов
#define PP_NA 5 // Максимальное время деактивации пикапов для игрока после прохода через портал
#define PP_DTIME 1000 // Время для таймера который отсчитывае время деактивации
#define PP_COLOR 0x7AD8FFFF // Цвет для сообщений о телепортации и 3Д текстов
#define PP_DRAWDIST 10.0 // Расстояния с которого видно 3Д тексты
new Portals[][pps_info] = {
// ppsN ppsX ppsY ppsZ ppsA ppsI ppsW ppsU ppsT ppsP
{"Groove Street", 2491.5679, -1668.6174, 13.3438, 0.00, 0, 0, 49, 48, -1}, // Groove Street
{"SF Police Dept", 246.000, 112.000, 1003.22, 90.00, 10, 0, 48, 47, -1}, // SFPD
{"LV Pyramid", 2095.9768, 1285.1446, 10.8203, 0.00, 0, 0, 47, 49, -1} // LV Pyramid
// {...} // Все остальные ваши точки
};
new Text3D:Portals3DT[MAX_PORTALS]; // 3Д тексты над порталами
new PlayerPNA[MAX_PLAYERS]; // счетчик деактивации порталов для игрока
public pps_Init() // инициализация - расстановка порталов
{
new ppsSize = sizeof(Portals);
if(ppsSize < 2)
{
print("PPS: Error[0] - Can't find > 2 portals :(");
return;
}
if(ppsSize > MAX_PORTALS)
{
print("PPS: Error[1] - Portals base is very large :(");
return;
}
new u_buffer[MAX_PORTALS];
new targetstr[128];
for(new i=0;i<ppsSize;i++)
{
if(Portals[i][ppsU] == 0)
{
print("PPS: Error[2] - Unique number of portal = 0 :(");
pps_Unload();
return;
}
if(Portals[i][ppsU] == Portals[i][ppsT])
{
print("PPS: Error[3] - Portal teleport to himself :(");
pps_Unload();
return;
}
for(new y=0;y<ppsSize;y++)
{
if(u_buffer[y] == Portals[i][ppsU])
{
print("PPS: Error[4] - More than one portal has simple UN :(");
pps_Unload();
return;
}
}
for(new z=0;z<ppsSize;z++)
{
if(Portals[i][ppsT] == Portals[z][ppsU])
{
format(targetstr,sizeof(targetstr),"PORTAL TO\n\n'%s'",Portals[z][ppsN]);
break;
}
}
u_buffer[i] = Portals[i][ppsU];
Portals[i][ppsP] = CreatePickup(
PP_MOD,PP_TYPE,
Portals[i][ppsX],
Portals[i][ppsY],
Portals[i][ppsZ],
Portals[i][ppsW]
);
Portals3DT[i] = Create3DTextLabel(
targetstr,
PP_COLOR,
Portals[i][ppsX],
Portals[i][ppsY],
Portals[i][ppsZ] + 1.0,
PP_DRAWDIST,
Portals[i][ppsW],
0
);
}
SetTimer("pps_DeactiveTimer",PP_DTIME,1);
print("PPS: Initialization Complete Success :)");
return;
}
public pps_Unload()
{
new ppsSize = sizeof(Portals);
for(new i=0;i<ppsSize;i++)
{
if(Portals[i][ppsP] != -1)
{
DestroyPickup(Portals[i][ppsP]);
Portals[i][ppsP] = -1;
Delete3DTextLabel(Portals3DT[i]);
}
}
print("PPS: Unloading Complete Success");
}
public pps_OnPlayerPickUpPickup(playerid, pickupid)
{
if(PlayerPNA[playerid] > 0)
{
return;
}
new ppsSize = sizeof(Portals);
new targetid = 0;
for(new i=0;i<ppsSize;i++)
{
if(pickupid == Portals[i][ppsP])
{
targetid = Portals[i][ppsT];
break;
}
}
if(targetid == 0)
{
print("PPS: Error[5] - Can't find target :(");
return;
}
for(new y=0;y<ppsSize;y++)
{
if(targetid == Portals[y][ppsU])
{
PlayerPNA[playerid] = PP_NA;
SetPlayerVirtualWorld(playerid, Portals[y][ppsW]);
SetPlayerInterior(playerid, Portals[y][ppsI]);
SetPlayerPos(playerid,Portals[y][ppsX],Portals[y][ppsY],Portals[y][ppsZ]);
SetPlayerFacingAngle(playerid,Portals[y][ppsA]);
new mess[128];
format(mess, sizeof(mess), "PPS: Вы были перемещены в '%s'",Portals[y][ppsN]);
SendClientMessage(playerid,PP_COLOR,mess);
break;
}
}
return;
}
public pps_DeactiveTimer()
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i)){continue;}
if(PlayerPNA[i] > 0)
{
PlayerPNA[i]--;
}
}
}