Всем привет.
В группе форума столкнулся на одного интересного персонажа, он не мог решить проблему с подгрузкой объектов. Накидал ему функцию чтобы "фризило", воть. Сейчас успокоился, немного оптимизировал и добавил функционала и делюсь с вами.
Параметры:
*обязательные*
*не обязательные*
- playerid - id телепортируемого игрока
- x, y, z - координаты X, Y, Z телепортируемого места
- angle - угол поворота
- virtualworldid - id виртуального мира
- interiorid - id интеръера
- vehicletp - режим телепорта транспорта (1 - ТП с транспортом, 0 - Без). П.с: условии для проверки на нахождение в транспорте не требуется, функция это предусматривает.
- passengertp - режим телепорта пассажиров (работает при включенном "vehicletp"): 0 - слапнуть, 1 - телепортировать вместе.
- freezetime - время до разморозки игрока (используйте 0 чтобы не замораживать). Default: 0
Пример использования:
Функция:PHP код:
CMD:tp(playerid)
{
SetPlayerPosEx(playerid, 0.0, 0.0, 2.0);
return SendClientMessage(playerid, -1, !"Вы телепортированы в центр карты.");
}
PHP код:
stock
SetPlayerPosEx(playerid, Float:x, Float:y, Float:z, Float:angle = 0.0,
virtualworldid = -1, interiorid = -1, vehicletp = 0, passengertp = 0, freezetime = 0)
{
new
vehicleid = GetPlayerVehicleID(playerid);
#if defined Streamer_IncludeFileVersion
Streamer_UpdateEx(playerid, x, y, z, virtualworldid, interiorid);
#endif
if(!vehicletp || GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
{
SetPlayerPos(playerid, x, y, z);
if(-1 != interiorid)
SetPlayerInterior(playerid, interiorid);
if(-1 != virtualworldid)
SetPlayerVirtualWorld(playerid, virtualworldid);
if(0.0 != angle)
SetPlayerFacingAngle(playerid, angle);
if(freezetime)
{
TogglePlayerControllable(playerid, 0);
SetTimerEx(!"@__unfreezeLoadInt", freezetime, 0, !"i", playerid);
}
return SetCameraBehindPlayer(playerid);
}
static
Float:pos_x,
Float:pos_y,
Float:pos_z;
GetPlayerPos(playerid, pos_x, pos_y, pos_z);
if(-1 != interiorid)
LinkVehicleToInterior(vehicleid, interiorid);
if(-1 != virtualworldid)
SetVehicleVirtualWorld(vehicleid, virtualworldid);
#if defined foreach
foreach(Player, i)
#else
for(new i; i < MAX_PLAYERS; i++)
#endif
{
if(GetPlayerVehicleID(i) == vehicleid)
{
if(!passengertp)
{
#if defined Streamer_IncludeFileVersion
Streamer_UpdateEx(i, x, y, z, virtualworldid, interiorid);
#endif
if(-1 != interiorid)
SetPlayerInterior(i, interiorid);
if(-1 != virtualworldid)
SetPlayerVirtualWorld(i, virtualworldid);
SetCameraBehindPlayer(i);
}
else
SetPlayerPos(i, pos_x, pos_y+0.5, pos_z+1.0);
}
}
SetVehiclePos(vehicleid, x, y, z + 1.0);
if(angle != 0.0)
SetVehicleZAngle(vehicleid, angle);
SetPlayerPos(playerid, x, y, z);
PutPlayerInVehicle(playerid, vehicleid, 0);
return SetCameraBehindPlayer(playerid);
}
@__unfreezeLoadInt(playerid);
@__unfreezeLoadInt(playerid)
return TogglePlayerControllable(playerid, 1);
- Автор: Danny Moore