Неактуально Сердце и броня над головой

Robert_United

Известный
Автор темы
74
4
Сердце и броня над головой при give/take damag.
Сердце при уменьшении хп.
Броня при уменьшении брони.
 
Решение
1663575930203.png

playerid указываешь на того, кто нанес урон

1663575955254.png

objectid тот, что создан через нативку выше, playerid для того, по кому нанесли урон

объявляешь переменную с временем отображения. в ежесекундном таймере отнимаешь по единице и удаляешь объект.

C++:
// где-то в энумераторе игрока, привязанного к PlayerInfo, допустим
pDamageInformerTarget,
pDamageInformerTime,
pDamageInformerObject

// OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
if (issuerid != INVALID_PLAYER_ID && IsPlayerConnected(issuerid))
{
    // Не создаем новый, если уже есть старый
    if ((PlayerInfo[issuerid][pDamageInformerObject] != 0)
    && (PlayerInfo[issuerid][pDamageInformerTarget] == playerid))
        return 1;

    PlayerInfo[issuerid][pDamageInformerTarget] = playerid;
    PlayerInfo[issuerid][pDamageInformerTime] = 2...

savvin

Известный
407
140
1663575930203.png

playerid указываешь на того, кто нанес урон

1663575955254.png

objectid тот, что создан через нативку выше, playerid для того, по кому нанесли урон

объявляешь переменную с временем отображения. в ежесекундном таймере отнимаешь по единице и удаляешь объект.

C++:
// где-то в энумераторе игрока, привязанного к PlayerInfo, допустим
pDamageInformerTarget,
pDamageInformerTime,
pDamageInformerObject

// OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
if (issuerid != INVALID_PLAYER_ID && IsPlayerConnected(issuerid))
{
    // Не создаем новый, если уже есть старый
    if ((PlayerInfo[issuerid][pDamageInformerObject] != 0)
    && (PlayerInfo[issuerid][pDamageInformerTarget] == playerid))
        return 1;

    PlayerInfo[issuerid][pDamageInformerTarget] = playerid;
    PlayerInfo[issuerid][pDamageInformerTime] = 2; // 2 секунды на отображение

    AttachDynamicObjectToPlayer(
        (PlayerInfo[issuerid][pDamageInformerObject] = CreateDynamicObject(
            /* model id */, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
            GetPlayerVirtualWorld(playerid), .playerid = playerid
        )),
        playerid, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0
    );
    Streamer_Update(playerid);
}

// ежесекундный таймер
if ((PlayerInfo[playerid][pDamageInformerTime]-- >= 0)
&& (PlayerInfo[playerid][pDamageInformerTime] == 0))
{
    DestroyDynamicObject(objectid);

    PlayerInfo[issuerid][pDamageInformerObject] = 0;
    PlayerInfo[issuerid][pDamageInformerTarget] = INVALID_PLAYER_ID;
}

p.s.: на работоспособность не проверял, но суть примерна та.
 

Robert_United

Известный
Автор темы
74
4
Посмотреть вложение 169442
playerid указываешь на того, кто нанес урон

Посмотреть вложение 169443
objectid тот, что создан через нативку выше, playerid для того, по кому нанесли урон

объявляешь переменную с временем отображения. в ежесекундном таймере отнимаешь по единице и удаляешь объект.

C++:
// где-то в энумераторе игрока, привязанного к PlayerInfo, допустим
pDamageInformerTarget,
pDamageInformerTime,
pDamageInformerObject

// OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
if (issuerid != INVALID_PLAYER_ID && IsPlayerConnected(issuerid))
{
    // Не создаем новый, если уже есть старый
    if ((PlayerInfo[issuerid][pDamageInformerObject] != 0)
    && (PlayerInfo[issuerid][pDamageInformerTarget] == playerid))
        return 1;

    PlayerInfo[issuerid][pDamageInformerTarget] = playerid;
    PlayerInfo[issuerid][pDamageInformerTime] = 2; // 2 секунды на отображение

    AttachDynamicObjectToPlayer(
        (PlayerInfo[issuerid][pDamageInformerObject] = CreateDynamicObject(
            /* model id */, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
            GetPlayerVirtualWorld(playerid), .playerid = playerid
        )),
        playerid, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0
    );
    Streamer_Update(playerid);
}

// ежесекундный таймер
if ((PlayerInfo[playerid][pDamageInformerTime]-- >= 0)
&& (PlayerInfo[playerid][pDamageInformerTime] == 0))
{
    DestroyDynamicObject(objectid);

    PlayerInfo[issuerid][pDamageInformerObject] = 0;
    PlayerInfo[issuerid][pDamageInformerTarget] = INVALID_PLAYER_ID;
}

p.s.: на работоспособность не проверял, но суть примерна та.
Взял на заметочку, спасибо.