Вопросы по AMXX

Сообщения
1,275
Реакции
2,257
Помог
57 раз(а)
amax, Кастомную = как раз таки нестандартную. У вас всё правильно. Я лишь обрисовал схему в целом.
3) В хуке сброса скорости, вместе с проверкой переменной дополнительно проверять, жив ли игрок.
4) Вы не правы. У вас сброс идёт в хуке Ham_Spawn. При этом условие -> игрок жив. При входе на сервер он жив, по вашему?
 
Сообщения
61
Реакции
3
BlackSignature, Правильно?

Код:
 RegisterHam(Ham_Spawn, "player", "Spawn_player", 1);
 RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "checkspeed", 1);

public Spawn_player(id)
{
if(!is_user_alive(id) || is_user_connected(id)) // если игрок мертв или коннектится выкл скорость..
        {
        g_speed[id] = false
        g_grav[id] = false
        g_invis[id] = false
        }
}

public checkspeed(id)
{
    if(g_speed[id] && is_user_alive(id)) // если скорость тру и игрок жив применить скорость
    {
    fm_set_user_maxspeed(id,1800.0)
    return HAM_SUPERCEDE;
    }
    return HAM_HANDLED;
}
После смерти скорость не сбрасывается, пока не возьму оружие.
 
Сообщения
1,275
Реакции
2,257
Помог
57 раз(а)
amax, "Правильно" всегда зависит от условий (сопутствующие механизмы) а так же от того, какой результат необходимо получить. Если поставить задачей правильную работу нестандартной скорости с минимумом манипуляций, подойдёт приложенный вариант.

У вас как я вижу переменные сбрасываются при спавне игрока. Т.е. подразумевается, что купленная "фича" длится до смерти/нового раунда. Важно понимать, почему вообще в Ham_Spawn "player" применяется проверка is_user_alive(). Данный хук вызывается не только при фактическом спавне игрока, но и при входе на сервер. Но в данном случае нет разницы, вход это, или обычный спавн. Занулить нужно в любом случае. Более того, триггер при входе даже сыграет нам на руку - мы обойдёмся без сброса переменных при выходе игрока.

Перед тестом только свой плагин отключите ;)
 

Вложения

Сообщения
333
Реакции
290
Помог
9 раз(а)
BlackSignature,
C++:
public OnResetMaxSpeed_Pre(id) {
    server_print("Hook: OnResetMaxSpeed_Pre()")

    if(g_bHasSpeed[id] && is_user_alive(id)) {
        return HAM_SUPERCEDE
    }

    return HAM_IGNORED
}
В данном случае совершенно не важно, жив игрок или нет. Вы же не сбрасываете g_bHasSpeed[id] для мертвых.
А вот при вводе команды /speed не помешает проверка. Мертвому не установите скорость.
 
Сообщения
1,275
Реакции
2,257
Помог
57 раз(а)
zhorzh78,
В данном случае совершенно не важно...
Да, совершенно верно, спасибо. По поводу проверки, - пример демонстративный, на полноценность не претендующий. Но по уму, да, проверка должна присутствовать.

amax, Не забывайте о том, что вам необходимо блокировать закупку в магазине не только при недостатке денег игрока, но и когда он мёртв.
 
Сообщения
61
Реакции
3
Как вам такое решение?

C++:
    RegisterHam(Ham_Spawn, "player", "Spawn_player", 1);
    RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "checkspeed", 1);
    RegisterHam(Ham_Killed, "player", "fw_Killed", .Post = true);
}

public Spawn_player(id) {
      if(!is_user_alive(id)) return;

      g_speed[id] = false;
      g_grav[id] = false;
      g_invis[id] = false;
}

public fw_Killed(iVictim) {
      g_speed[iVictim] = false;
      g_grav[iVictim] = false;
      g_invis[iVictim] = false;
}

public checkspeed(id) {
    if(!is_user_alive(id)) return;
    if(g_speed[id]) fm_set_user_maxspeed(id, 1800.0)
}
 

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
amax, для удобства читаемости переменные с одиннаковым значением можно привести в такой вид:
Код:
g_speed[iVictim] = g_grav[iVictim] = g_invis[iVictim] = false;
Да и глазам приятнее
 
Сообщения
61
Реакции
3
shadow, Спасибо за совет, а то я пробовал через запятую)
 
Сообщения
2
Реакции
0
Как вам такое решение?

C++:
    RegisterHam(Ham_Spawn, "player", "Spawn_player", 1);
    RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "checkspeed", 1);
    RegisterHam(Ham_Killed, "player", "fw_Killed", .Post = true);
}

public Spawn_player(id) {
      if(!is_user_alive(id)) return;

      g_speed[id] = false;
      g_grav[id] = false;
      g_invis[id] = false;
}

public fw_Killed(iVictim) {
      g_speed[iVictim] = false;
      g_grav[iVictim] = false;
      g_invis[iVictim] = false;
}

public checkspeed(id) {
    if(!is_user_alive(id)) return;
    if(g_speed[id]) fm_set_user_maxspeed(id, 1800.0)
}
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу