Доступ к готовым решениям

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

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

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

Функция SetPlayerPosEx - расширенная функция телепорта

#iDanny

Начинающий
Пользователь
Регистрация
5 Мар 2018
Сообщения
28
Лучшие ответы
0
Репутация
11
Всем привет.

В группе форума столкнулся на одного интересного персонажа, он не мог решить проблему с подгрузкой объектов. Накидал ему функцию чтобы "фризило", воть. Сейчас успокоился, немного оптимизировал и добавил функционала и делюсь с вами.

Параметры:
*обязательные*
  • 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
 
Последнее редактирование модератором:
Сверху Снизу