• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Предотвращение SpawnPlayer, выход из машины, рассинхрон анимаций.

macr0n

Ученик
Код ниже - система стадий.
PHP:
enum cInfo {
    cStage,
    Float:cDeathA,
    Text3D:cDeathLabel = Create3DTextLabel("", 0xFF6347AA, 0, 0, 0, 10, 0, 1)
}
CI[MAX_PLAYERS][cInfo];
public OnPlayerPrepareDeath(playerid, const animlib[32], const animname[32], &anim_lock, &respawn_time) {
    switch(CI[playerid][cStage]) {
        case 0: CI[playerid][cStage]++, SendError(playerid, "Your character has been wounded."), Update3DTextLabelText(CI[playerid][cDeathLabel], 0xFF6347AA, "(( THIS CHARACTER IS WOUNDED ))");
        case 1: CI[playerid][cStage]++, SendError(playerid, "Your character has died."), Update3DTextLabelText(CI[playerid][cDeathLabel], 0xFF6347AA, "(( THIS CHARACTER IS DEAD ))");
        default: return 1;
    }
    if(IsPlayerInAnyVehicle(playerid)) {
        Attach3DTextLabelToPlayer(CI[playerid][cDeathLabel], playerid, 0, 0, -0.25);
        ApplyAnimation(playerid, "ped", "CAR_dead_RHS", 4.1, 0, 1, 1, 1, -1, 0);
    } else {
        GetPlayerFacingAngle(playerid, CI[playerid][cDeathA]);
        Attach3DTextLabelToPlayer(CI[playerid][cDeathLabel], playerid, floatsin(CI[playerid][cDeathA], degrees) / 2, -floatcos(CI[playerid][cDeathA], degrees) / 2, 0);
        ApplyAnimation(playerid, "WUZI", "CS_Dead_Guy", 4.1, 0, 1, 1, 1, -1, 0);
    }
    return 1;
}
public OnPlayerDeathFinished(playerid, bool:cancelable) return 0;
Проблемы:
1. Если игрок умер от падения - вызывается SpawnPlayer, а OnPlayerPrepareDeath и OnPlayerDeathFinished игнорируются.
2. Если жертва находится в машине, то сразу после убийства она выходит из машины и стоит, пока её туда не телепортирует PutPlayerInVehicle.
3. Если при убийстве жертва находится в машине, то происходит рассинхрон: у нападающего сначала включается анимация, а потом посадка в машину, а у жертвы наоборот - сначала его садит в машину, а потом включается анимация. Таким образом у жертвы анимация прекрасно работает, а у нападающего она сбивается и второй раз не включается.

Каким образом возможно решить три проблемы?
 
Последнее редактирование:
Сверху Снизу