Скриптер
Проверенный
Пользователь
ArKaNeMaN
Квалифицированный специалист по VipModular
- Сообщения
- 433
- Реакции
- 293
- Помог
- 5 раз(а)
В обоих пунктах есть нюансы...@ArKaNeMaN, для разработки удобнее модульность, для конечного пользователя удобнее всё-в-одном.
- Когда всё в одном, часто получаются такие ситуации, когда конечному пользователю приходится лезть в исходник и перекомпливать его для отключения каких-то внешних зависимостей, что некоторым не особо удобно. Плюс это порождает такую проблему, что для обновления недостаточно просто закинуть новую версию, надо сначала снова залезть в исходник и настроить там всё ничего не забыв при этом...
- Модульность удобна для разработки, когда она есть и когда она хорошо продумана... А для этого надо в начале потратить больше времени, чем если бы всё было монолитным. А если поспешить и плохо её продумать, то может стать даже хуже в итоге)
12 Янв 2024
C++:
stock bool:acs_give_item(const id, const weapon[]) {
static bool:is_relative, i_count, s_count[3 * ACS_MAX_NAME_ML_LENGTH], s_item[ACS_MAX_BUFFER_SIZE];
if (!is_valid_player(id))
return false;
strtok(weapon, _SC(s_item), _SC(s_count), ':', 0);
i_count = str_to_num(s_count);
is_relative = s_count[0] == '+' || s_count[0] == '-';
//acs_client_print(id, ACS_SHOW_DEBUG, "process_task(): id = %d, item_value = %s, count = %d, is_relative = %d", id, _ITEM_VALUE(s_item), i_count, is_relative);
if (!contain(_ITEM_PREFIX(s_item))) {
if (equal(_ITEM_VALUE(s_item), "kevlar")) {
i_count += is_relative ? rg_get_user_armor(id) : 0;
i_count = clamp(i_count, 0, CVAR[MAX_ARMOR]);
if (i_count > 0)
rg_set_user_armor(id, i_count, ARMOR_KEVLAR);
} else if (equal(_ITEM_VALUE(s_item), "vesthelm")) {
i_count += is_relative ? rg_get_user_armor(id) : 0;
i_count = clamp(i_count, 0, CVAR[MAX_ARMOR]);
if (i_count > 0)
rg_set_user_armor(id, i_count, ARMOR_VESTHELM);
} else if (equal(_ITEM_VALUE(s_item), "defuse")) {
rg_give_defusekit(id);
} else if (equal(_ITEM_VALUE(s_item), "ammo")) {
acs_set_max_ammo(id, get_member(id, m_rgpPlayerItems, PRIMARY_WEAPON_SLOT));
acs_set_max_ammo(id, get_member(id, m_rgpPlayerItems, PISTOL_SLOT));
} else if (equal(_ITEM_VALUE(s_item), "hp")) {
i_count += is_relative ? get_user_health(id) : 0;
i_count = clamp(i_count, 0, CVAR[MAX_HP]);
if (i_count > 0)
set_user_health(id, i_count);
} else if (equal(_ITEM_VALUE(s_item), "money")) {
i_count += is_relative ? rg_get_user_money(id) : 0;
i_count = clamp(i_count, 0, CVAR[MAX_MONEY]);
if (i_count >= 0)
rg_add_account(id, i_count, AS_SET);
} else if (equal(_ITEM_VALUE(s_item), "aes")) {
acs_add_player_bonus(id, i_count);
} else if (equal(_ITEM_VALUE(s_item), "exp")) {
acs_add_player_exp(id, float(i_count));
} else if (equal(_ITEM_VALUE(s_item), "damager")) {
ga_damager[id][DMG_ENABLED] = i_count >= 0;
ga_damager[id][DMG_THRESHOLD] = floatclamp(float(i_count), 0.0, 100.0);
} else if (equal(_ITEM_VALUE(s_item), "speed")) {
gi_add_speed[id][SPEED_RELATIVE] = is_relative;
gi_add_speed[id][SPEED_VALUE] = clamp(is_relative ? i_count + gi_add_speed[id][SPEED_VALUE] : i_count, 1);
i_count += floatround(get_user_maxspeed(id));
i_count = clamp(i_count, 0, CVAR[MAX_SPEED]);
//acs_client_print(id, ACS_SHOW_DEBUG, "i_count = %d, user_maxspeed = %f, speed_value = %d, sv_maxspeed = %f", i_count, get_user_maxspeed(id), gi_add_speed[id][SPEED_VALUE], get_cvar_float("sv_maxspeed"));
//gi_add_speed[id][SPEED_RELATIVE] = is_relative;
if (i_count > get_cvar_num("sv_maxspeed"))
set_cvar_num("sv_maxspeed", i_count);
set_user_maxspeed(id, float(i_count));
} else
return false;
} else if (0 <= contain(_WEAPON_PREFIX(s_item)) <= 1) {
//log_amx("WEAPON_ADD: %s, count = %d", s_item, i_count);
i_count = clamp(i_count, 0, CVAR[MAX_AMMO]);
switch (s_item[0]) {
case '+': acs_give_item_ex(id, s_item[1], i_count, GT_APPEND);
case '-': acs_give_item_ex(id, s_item[1], i_count, GT_DROP_AND_REPLACE);
default: acs_give_item_ex(id, s_item, i_count, GT_REPLACE);
}
} else
return false;
return true;
}