Что и как правильно юзать

AcE

Сообщения
31
Реакции
4
Вопрос может и глупый но в гугле нормальных ответов я не нашел.
Что с точки зрения правильного кода лучше использовать?
Примеры:
Код:
static g_ScreenFade
if (g_ScreenFade || (g_ScreenFade = get_user_msgid("ScreenFade")))
{
    message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, index)
}
Код:
const g_ScreenFade = 98
message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, index)
Код:
new g_ScreenFade
public plugin_init()
    g_ScreenFade = get_user_msgid("ScreenFade")
Код:
message_begin(MSG_ONE_UNRELIABLE, 98, _, index) Использовать цифру на прямую
Это и message_begin(MSG_BROADCAST, 85) касается.
Какую конструкцию из этого выбрать? что бы не получился говнокод.
 
Сообщения
271
Реакции
348
Помог
15 раз(а)
а что вы хотите сделать?
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
#define gmsgScreenFade 98
Так делаю, потому что номера мессаг со времен ссср не менялись. Исчо и название как в этих ваших регеймах.
 

AcE

Сообщения
31
Реакции
4
fl0wer, ну почему тогда через #define gmsgScreenFade 98 а не на прямую? в чем разница всего этого?
так: message_begin(MSG_ONE_UNRELIABLE, 98, _, index) если номера мессаг со времен ссср не менялись и не изменятся)
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
AcE, так не понятно, что отправляешь. Не держать же эти числа в голове?
 

AcE

Сообщения
31
Реакции
4
fl0wer, я привел ряд конструкций и просто хотел бы отделить мух от котлет) чем одно отличается от другого и что в итоге правильно было бы юзать что бы не поднимать больше этот вопрос.
Не держать же эти числа в голове? но допустим я знаю индекс нужной мне функции)
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Код:
static g_ScreenFade
if (g_ScreenFade || (g_ScreenFade = get_user_msgid("ScreenFade")))
{
    message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, index)
}
Кеширует индекс, если не закеширован. Используется чтобы каждый раз не запрашивать индекс.
Уместно для реализации, если мессага используется только в одной функции.
Код:
const g_ScreenFade = 98
message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, index)
Собственно как я указал. Просто подставляет число на этапе компиляции.
Удобно тем, что не нужно запоминать число и можно использовать сразу в нескольких функциях.
Код:
new g_ScreenFade
public plugin_init()
    g_ScreenFade = get_user_msgid("ScreenFade")
Практически тоже самое.
Если будет какое-то обновление кс связанное с мессагами, то не придется перекомпилировать плагин.
Такого никогда не было.
Код:
message_begin(MSG_ONE_UNRELIABLE, 98, _, index) Использовать цифру на прямую
Это и message_begin(MSG_BROADCAST, 85) касается.
Мне было бы лень смотреть какая цифра, что значит. Ещё человек имеет свойство забывать числа, и вряд ли открыв код через пол года вспомнишь, что значит эта цифра (по аргументам узнавать?). Либо другой человек будет смотреть код, пожалей его.

Какую конструкцию из этого выбрать? что бы не получился говнокод.
На каждый плагин свой случай. А вообще макрос рулит.
 
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)
AcE, пока не понимаешь что о пишешь и зачем - говнокод.
 

AcE

Сообщения
31
Реакции
4
fl0wer, Огромное спасибо!) все четко и понятно расписал) + в репу поставить не могу( ограничение наверно на моем аке.
6 Окт 2018
fl0wer, еще 1 вопросик
Код:
#define is_valid_client(%1) (1 <= %1 <= MaxClients)
VS
Код:
#define is_valid_client(%0) ((0 < (%0) <= MaxClients) && is_user_connected(%0))
Доп проверка на коннект нужна вообще или проверки на валидность хватит?
Пример:
Код:
if (is_valid_client(killer) && killer != victim)
{
    // Code...
}
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
https://github.com/alliedmodders/am...da7e8ba9fd3541984450/amxmodx/amxmodx.cpp#L726
C++:
static cell AMX_NATIVE_CALL is_user_connected(AMX *amx, cell *params) /* 1 param */
{
    int index = params[1];

    if (index < 1 || index > gpGlobals->maxClients)
        return 0;

    CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);

    return (pPlayer->ingame ? 1 : 0);
}
В нативе коннекта уже есть эта проверка. Причем, более правильная, поэтому юзай натив.
 

AcE

Сообщения
31
Реакции
4
fl0wer, Спасибо.
6 Окт 2018
fl0wer, replace_all заменили на replace ?
как это теперь юзать? брать сток из 182 amxx или юзать replace на 183?
Код:
#if AMXX_VERSION_NUM < 183
    #define replace replace_all
#endif
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
AcE, не знаю где ты такое нашел.
 

AcE

Сообщения
31
Реакции
4
fl0wer, в amxx 182 string.inc есть сток replace_all а в 183 amxx нету стока там только натив replace
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Посмотри значит в string_stocks.inc )))))
 
Сообщения
94
Реакции
64
Помог
5 раз(а)
AcE, глянь lite_bans там неугомон юзает
C++:
#if AMXX_VERSION_NUM < 183
    #define replace_string replace_all
#endif
 

AcE

Сообщения
31
Реакции
4
Dager, спасибо. но возможно я решил проблему) у человека новый amxx а инклуды старые вот и проблемы из за этого.
 

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

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