player actors & player pickups - Создание актера и пикапа, которые будут видны определенному игроку

Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Пользователь
Регистрация
9 Май 2022
Сообщения
7
В open.mp есть возможность создать пикап, который будет виден определенному игроку, но в SA-MP такой функции нет.
Также я добавил возможность создавать актера, видимого только для конкретного игрока.
В open.mp пока такого нет и за проблемы со стримером, так как актеры для игроков ломают работу динамических актеров.
Мой вариант реализован с использованием стримера, поэтому никаких проблем с ним не будет.

player_pickups

Зависимости:
Pawn.RakNet, streamer и foreach.

Callback: Вызывается когда игрок подбирает player pickup
PHP:
forward OnPlayerPickUpPlayerPickup(playerid, pickupid);


Функции: Думаю, по названию и так все понятно.
PHP:
CreatePlayerPickup(playerid, modelid, type, Float:x, Float:y, Float:z, worldid = -1, Float:streamdistance);
DestroyPlayerPickup(playerid, pickupid);

IsValidPlayerPickup(playerid, pickupid);

SetPlayerPickupVirtualWorld(playerid, pickupid, worldid);
SetPlayerPickupPos(playerid, pickupid, Float:x, Float:y, Float:z);
SetPlayerPickupModel(playerid, pickupid, modelid);
SetPlayerPickupType(playerid, pickupid, typeid);

GetPlayerPickupVirtualWorld(playerid, pickupid);
GetPlayerPickupPos(playerid, pickupid, &Float:x, &Float:y, &Float:z);
GetPlayerPickupModel(playerid, pickupid);
GetPlayerPickupType(playerid, pickupid);



player_actors

Зависимости:
Pawn.RakNet, streamer и foreach.

Callback: Вызывается когда игрок наносит урон player actors
PHP:
forward OnPlayerGiveDamagePlayerActor(playerid, actorid, Float:amount, weaponid, bodypart);


Функции: Думаю, по названию и так все понятно.
PHP:
CreatePlayerActor(playerid, modelid, Float:x, Float:y, Float:z, Float:rotation, Float:health = 100.0, bool:invulnerable = true, worldid = -1);
DestroyPlayerActor(playerid, actorid);

ApplyPlayerActorAnimation(playerid, actorid, const animlib[], const animname[], Float:fdelta, loop, lockx, locky, freeze, time);
ClearPlayerActorAnimations(playerid, actorid);

IsValidPlayerActor(playerid, actorid);
IsPlayerActorInvulnerable(playerid, actorid);
IsPlayerActorStreamedIn(playerid, actorid);

SetPlayerActorVirtualWorld(playerid, actorid, worldid);
SetPlayerActorFacingAngle(playerid, actorid, Float:rotation);
SetPlayerActorPos(playerid, actorid, Float:x, Float:y, Float:z);
SetPlayerActorHealth(playerid, actorid, Float:health);
SetPlayerActorInvulnerable(playerid, actorid, invulnerable = true);

GetPlayerActorVirtualWorld(playerid, actorid);
GetPlayerActorFacingAngle(playerid, actorid, &Float:rotation);
GetPlayerActorPos(playerid, actorid, &Float:x, &Float:y, &Float:z);
GetPlayerActorHealth(playerid, actorid, &Float:health);
GetPlayerActorAnimation(playerid, actorid, animlib[], animname[], &Float:fdelta, &loop, &lockx, &locky, &freeze, &time, maxanimlib = sizeof animlib, maxanimname = sizeof animname);


Также пикапы и актёры автоматически удаляются после выхода игрока.

Пример:
PHP:
new gPlayerPickupId[MAX_PICKUPS];
new gPlayerActorId[MAX_PLAYERS];

CMD:createpickup(playerid, params[])
{
    new
        Float:x,
        Float:y,
        Float:z;

    GetPlayerPos(playerid, x, y, z);

    gPlayerPickupId[playerid] = CreatePlayerPickup(
        playerid,
        1314,
        2,
        x,
        y,
        z,
        GetPlayerVirtualWorld(playerid),
        10.0
    );
    return 1;
}

new gPlayerActorId[MAX_ACTORS];

CMD:createactor(playerid, params[])
{
    new
        Float:x,
        Float:y,
        Float:z;

    GetPlayerPos(playerid, x, y, z);

    gPlayerActorId[playerid] = CreatePlayerActor(
        playerid,
        23,
        2,
        x,
        y,
        z,
        0.0,
        true,
        GetPlayerVirtualWorld(playerid)
    );
    return 1;
}

Возможно, эксперты спросят: "Зачем это нужно, если в стримере можно указать playerid?"
Дело в том, что в стримере это реализовано иначе.
Вы можете указать playerid, но пока указанный игрок не окажется в зоне стрима, актёр или пикап будут невидимы для других игроков.
Однако, как только playerid войдёт в зону стрима, объект станет видимым для всех игроков.



Ссылка на пикапы: https://github.com/i...ckups/tree/main
Ссылка на актеров: https://github.com/i...t/player_actors



Автор: Saibot
 
Последнее редактирование модератором:
Сверху