warning 225: unreachable code

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
115
Реакции
20
Предупреждения
1
Помог
2 раз(а)
Ошибка
C:\Users\A4F7~1\AppData\Local\Temp\Rar$DIa13832.31881\weapon_model.sma(217) :
warning 225: unreachable code
Компилятор
Локальный
Amx Mod X
1.9.0
Исходный код
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <engine>


#define PLUGIN "Weapon replace model"
#define VERSION "1.0"
#define AUTHOR "vk.com/CSPlugin"


enum _:STRWEAPON { //Для того что бы соотносить в файле прописи с реальным оружием.
WEAP_CSW,
WEAP_TEXT[14],
WEAP_NAME[20],
WEAP_MODELS[64]
}
new gWeapon[][STRWEAPON] = { //Список оружия, которое можно заменить.
{CSW_P228, "p228" , "weapon_p228" , "models/w_p228.mdl"},
{CSW_SCOUT, "scout" , "weapon_scout" , "models/w_scout.mdl"},
{CSW_HEGRENADE, "he" , "weapon_hegrenade", "models/w_hegrenade.mdl"},
{CSW_XM1014, "xm1014", "weapon_xm1014" , "models/w_xm1014.mdl"},
{CSW_MAC10, "mac10" , "weapon_mac10" , "models/w_mac10.mdl"},
{CSW_AUG, "aug" , "weapon_aug" , "models/w_aug.mdl"},
{CSW_ELITE, "elite" , "weapon_elite" , "models/w_elite.mdl"},
{CSW_FIVESEVEN, "fn57" , "weapon_fiveseven", "models/w_fiveseven.mdl"},
{CSW_UMP45, "ump45" , "weapon_ump45" , "models/w_ump45.mdl"},
{CSW_SG550, "sg550" , "weapon_sg550" , "models/w_sg550.mdl"},
{CSW_GALIL, "galil" , "weapon_galil" , "models/w_galil.mdl"},
{CSW_FAMAS, "famas" , "weapon_famas" , "models/w_famas.mdl"},
{CSW_USP, "usp" , "weapon_usp" , "models/w_usp.mdl"},
{CSW_GLOCK18, "glock" , "weapon_glock18" , "models/w_glock18.mdl"},
{CSW_AWP, "awp" , "weapon_awp" , "models/w_awp.mdl"},
{CSW_MP5NAVY, "mp5" , "weapon_mp5navy" , "models/w_mp5.mdl"},
{CSW_M249, "m249" , "weapon_m249" , "models/w_m249.mdl"},
{CSW_M3, "m3" , "weapon_m3" , "models/w_m3.mdl"},
{CSW_M4A1, "m4a1" , "weapon_m4a1" , "models/w_m4a1.mdl"},
{CSW_TMP, "tmp" , "weapon_tmp" , "models/w_tmp.mdl"},
{CSW_G3SG1, "g3sg1" , "weapon_g3sg1" , "models/w_g3sg1.mdl"},
{CSW_DEAGLE, "deagle", "weapon_deagle" , "models/w_deagle.mdl"},
{CSW_SG552, "sg552" , "weapon_sg552" , "models/w_sg552.mdl"},
{CSW_AK47, "ak47" , "weapon_ak47" , "models/w_ak47.mdl"},
{CSW_KNIFE, "knife" , "weapon_knife" , "models/w_knife.mdl"},
{CSW_P90, "p90" , "weapon_p90" , "models/w_p90.mdl"}
}
new bool:gRegHamItem[sizeof gWeapon]; //Что бы не регестрировать оружия которые не прописаны.


enum _:STRWEAPREAD { //Структура добавляемых моделей оружий.
WR_NUM, //Номер оружия в массиве gWeapon, для быстрого его поиска.
WR_SPARAM[64], //Параметр по которому сохранять.
WR_SPARTYPE, //Тип параметра сохранения.
WR_WEAPON[16], //Тип оружия соответсвует gWeapon[WEAP_TEXT], для определения номера WR_NUM
WR_MODELP[128], // новая _p модель
WR_MODELV[128], // новая _м модель
WR_MODELW[128] // новая _w модель
}
new Array:gArrWeapon; //Динамический массив для записи всех моделей.

//Для определения параметра сохранения и изменения порядка его приоритета.
enum _:STRSAVETYPE {
ST_FLAGS,
ST_STEAM,
ST_NAME
}
new gSzSType[][] = {
"flags",
"steam",
"name"
}
new gSType[] = {
ST_FLAGS,
ST_STEAM,
ST_NAME
}

enum PRIORITY { //Для того что бы при поиске оружий подходящих для замены игроку учитывать приоритет.
P_NUM,
P_PRIOR
}
new gPlWeap[33][sizeof gWeapon][PRIORITY]; //Массив для записи идентификаторов в динамич массиве для быстрого поиска при замене оружий.


//Читаем и кишируем
public ReadModels() {
gArrWeapon = ArrayCreate(STRWEAPREAD);
//Считываем из файла параметры
new filepatch[128],ArrWeapon[STRWEAPREAD],strSparType[16];
formatex(filepatch, charsmax(filepatch), "addons/amxmodx/configs/replweapon.ini")
if(!dir_exists("addons/amxmodx/configs")) {
mkdir("addons/amxmodx/configs");
}
if(file_exists(filepatch)) {
static buffer[512];
new iLine, iNum;

for(iLine = 0; read_file(filepatch, iLine, buffer, charsmax(buffer), iNum); iLine++) {
if(iNum > 0 && buffer[0] != '/' && buffer[1] != '/') {
trim(buffer);
// "name/steam/flags" "name|steam|flags" "weapon" "p" "v" "w"
parse(buffer,ArrWeapon[WR_SPARAM],charsmax(ArrWeapon[WR_SPARAM]),
strSparType,charsmax(strSparType),
ArrWeapon[WR_WEAPON],charsmax(ArrWeapon[WR_WEAPON]),
ArrWeapon[WR_MODELP],charsmax(ArrWeapon[WR_MODELP]),
ArrWeapon[WR_MODELV],charsmax(ArrWeapon[WR_MODELV]),
ArrWeapon[WR_MODELW],charsmax(ArrWeapon[WR_MODELW])
); //Парсим строки.


//Проверяем тип по которому прописана модель.
for(new i=0;i<sizeof(gSzSType);i++) {
if(equali(strSparType,gSzSType[i])) {
ArrWeapon[WR_SPARTYPE] = gSType[i];
}
}

//Проверяем наличие всех моделей, если какой то нет, значит не добавляем оружие.
new bool:isExists = true, pointer[3] = {
WR_MODELP,
WR_MODELV,
WR_MODELW
}
for(new i=0;i<sizeof(pointer);i++) {
if(!file_exists(ArrWeapon[pointer[i]])) {
isExists = false;
break;
}
}
if(isExists) { //Если все модели есть - кишируем и добавляем в систему.
//Ищем соответствие среди оружий.
for(new i=0;i<sizeof(gWeapon);i++) {
if(equali(ArrWeapon[WR_WEAPON],gWeapon[i][WEAP_TEXT])) {
gRegHamItem[i] = true;
ArrWeapon[WR_NUM] = i;
break;
}
}

engfunc(EngFunc_PrecacheModel,ArrWeapon[pointer[0]]);
engfunc(EngFunc_PrecacheModel,ArrWeapon[pointer[1]]);
engfunc(EngFunc_PrecacheModel,ArrWeapon[pointer[2]]);
ArrayPushArray(gArrWeapon,ArrWeapon);
}
}
}
} else {
new i=0;
write_file(filepatch, "// Это строка пример комментария", i++);
write_file(filepatch, "// Плагин замены моделей оружия по нику/стиму/флагу, ", i++);
write_file(filepatch, "// если игрок сразу подходит под несколько записей, модель будет заменена ", i++);
write_file(filepatch, "// на первую найденую запись с учётом приоритета (ник/стим/флаг).", i++);
write_file(filepatch, "// Формат прописи моделей:.", i++);
write_file(filepatch, "// ^"name/steam/flags^" ^"name|steam|flags^" ^"weapon^" ^"p^" ^"v^" ^"w^"", i++);
write_file(filepatch, "// Пример прописи (ник/стим/флаг):", i++);
write_file(filepatch, "// ^"vk.com/CSPlugin^" ^"name^" ^"ak47^" ^"models/menu/p_ak47.mdl^" ^"models/menu/v_ak47.mdl^" ^"models/menu/w_ak47.mdl^"", i++);
write_file(filepatch, "// ^"STEAM_0:4:1722678988^" ^"steam^" ^"ak47^" ^"models/menu/p_ak47.mdl^" ^"models/menu/v_ak47.mdl^" ^"models/menu/w_ak47.mdl^"", i++);
write_file(filepatch, "// ^"bcd^" ^"flags^" ^"ak47^" ^"models/menu/p_ak47.mdl^" ^"models/menu/v_ak47.mdl^" ^"models/menu/w_ak47.mdl^"", i++);
write_file(filepatch, "// Список оружий для которых можно заменить модели: ", i++);

new str[512],iLen = 0;
iLen+=formatex(str[iLen],charsmax(str) - iLen,"//");
for(new iweap = 0;iweap<sizeof(gWeapon);iweap++) {
iLen+=formatex(str[iLen],charsmax(str)-iLen,"%s,",gWeapon[iweap][WEAP_TEXT]);
}
write_file(filepatch, str, i++);
write_file(filepatch, "// ВНИМАНИЕ: Для ножа в _w моделе обязательно указать ЛЮБУЮ кешируемую модель в плагине.", i++);
}
}
public plugin_precache() {
ReadModels();
}
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);

register_forward(FM_SetModel, "fw_SetModel"); //Установка модели оружию на земле.
for(new weap=0;weap<sizeof(gWeapon);weap++) {
if(gRegHamItem[weap] && !equali(gWeapon[weap][WEAP_NAME],"weapon_knife")) { //Проверяем что это оружие прописано.
RegisterHam(Ham_Item_Deploy, gWeapon[weap][WEAP_NAME], "Ham_Deploy_Post", 1);
}
}
RegisterHam( Ham_Item_Deploy, "weapon_knife" , "ItemDeploy_Knife_Post", 1 ) //Для замени моделей ножей.

}
public client_putinserver(id) { //При входе сразу помечаем какие модели будут заменяться и на какие.
for(new i=0;i<sizeof(gPlWeap[]);i++) { //Обнуляем все данные прыдущего игрока.
gPlWeap[id][i][P_NUM] = -1;
gPlWeap[id][i][P_PRIOR] = -1; //Приоритет ставим -1, так как есть приоритет 0.
}

new iSize = ArraySize(gArrWeapon);
new ArrWeapon[STRWEAPREAD];

for(new num=0;num<iSize;num++) {
ArrayGetArray(gArrWeapon,num,ArrWeapon);

if(gPlWeap[id][ArrWeapon[WR_NUM]][P_PRIOR] < ArrWeapon[WR_SPARTYPE]) { //Сначала проверяем приоритет, так как для этого нужно меньше времени процессора.
if(is_par_value(id,ArrWeapon[WR_SPARTYPE],ArrWeapon[WR_SPARAM])) { //Если нашли совпадение по параметрам.
gPlWeap[id][ArrWeapon[WR_NUM]][P_NUM] = num; //Помечаем что для этого игрока, для этого оружия найдено совпадение.
gPlWeap[id][ArrWeapon[WR_NUM]][P_PRIOR] = ArrWeapon[WR_SPARTYPE]; //Устанавливаем текущий приоритет.
}
}
}
}
public is_par_value(id,szParam, szVariable[] ) { //Функция проверки совпадения по параметрам.
new szVar[64];

if(szParam == ST_NAME)
get_user_name(id, szVar, charsmax(szVar) );
if(szParam == ST_STEAM)
get_user_authid(id, szVar, charsmax(szVar))

if(equali(szVariable,szVar)) {
return true;
} else return false;

if(szParam == ST_FLAGS) {
if(get_user_flags(id) & read_flags(szVariable))
return true;
else
return false;
}
return false;
}

public fw_SetModel(entity, model[]) { //Замена модели на земле.
if(!is_valid_ent(entity))
return FMRES_IGNORED;

static szClassName[33];
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED;

static iOwner;
iOwner = entity_get_edict(entity, EV_ENT_owner);
static iweaponID;

for(new iweap = 0;iweap<sizeof(gWeapon);iweap++) {
if(gPlWeap[iOwner][iweap][P_NUM] != -1) {
if(equal(model, gWeapon[iweap][WEAP_MODELS])) {
iweaponID = find_ent_by_owner(-1, gWeapon[iweap][WEAP_NAME], entity);

if(!is_valid_ent(iweaponID))
return FMRES_IGNORED;

static ArrWeapon[STRWEAPREAD];
ArrayGetArray(gArrWeapon,gPlWeap[iOwner][iweap][P_NUM],ArrWeapon);

entity_set_model(entity, ArrWeapon[WR_MODELW]);
return FMRES_SUPERCEDE;
}
}
}
return FMRES_IGNORED;
}
public Ham_Deploy_Post(ent) { //Замена модели в руках.
const XO_WEAPON = 4
const m_pPlayer = 41

new id = get_pdata_cbase( ent, m_pPlayer, XO_WEAPON );
replace_weapon_models(id);
}
replace_weapon_models(id) {
if(is_user_alive(id)) {
new weapon = get_pdata_int(get_pdata_cbase(id, 373, 5), 43, 4)
for(new iweap = 0;iweap<sizeof(gWeapon);iweap++) {
if(gPlWeap[id][iweap][P_NUM] != -1) {
if(weapon == gWeapon[iweap][WEAP_CSW]) {

static ArrWeapon[STRWEAPREAD];
ArrayGetArray(gArrWeapon,gPlWeap[id][iweap][P_NUM],ArrWeapon);

set_pev(id, pev_viewmodel2, ArrWeapon[WR_MODELV]);
set_pev(id, pev_weaponmodel2, ArrWeapon[WR_MODELP]);
}
}
}
}
}
public ItemDeploy_Knife_Post(ent) { //Меняем модели ножа.

const XO_WEAPON = 4
const m_pPlayer = 41

new id = get_pdata_cbase( ent, m_pPlayer, XO_WEAPON );

for(new iweap = 0;iweap<sizeof(gWeapon);iweap++) {
if(gPlWeap[id][iweap][P_NUM] != -1) {
if(gWeapon[iweap][WEAP_CSW] == CSW_KNIFE) {
static ArrWeapon[STRWEAPREAD];
ArrayGetArray(gArrWeapon,gPlWeap[id][iweap][P_NUM],ArrWeapon);

set_pev(id, pev_viewmodel2, ArrWeapon[WR_MODELV]);
set_pev(id, pev_weaponmodel2, ArrWeapon[WR_MODELP]);
}
}
}
}
Подскажите как исправить, ошибка ссылается if(szParam == ST_FLAGS) {
Из за этого проверка по флагу не работает
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
209
Реакции
120
Помог
11 раз(а)
Конечно не будет работать , тот код не выполнится ни при каких условиях - об этом тебе компилятор вежливо намекает.

Попробуй так переписать проверку :

Код:
public is_par_value(id,szParam, szVariable[] ) { //Функция проверки совпадения по параметрам.
    new szVar[64];
   
    if(szParam == ST_FLAGS) {
        if(get_user_flags(id) & read_flags(szVariable))
            return true;
        else
            return false;
    }
    else if(szParam == ST_NAME)
        get_user_name(id, szVar, charsmax(szVar) );
    else if(szParam == ST_STEAM)
        get_user_authid(id, szVar, charsmax(szVar))
   
    if(equali(szVariable,szVar))
        return true;
   
    return false;
   
}
 
Сообщения
115
Реакции
20
Предупреждения
1
Помог
2 раз(а)
murlemur, я щас сделал вот так:
Код:
public is_par_value(id,szParam, szVariable[] ) { //Функция проверки совпадения по параметрам.
    new szVar[64];
    
    if(szParam == ST_NAME)
        get_user_name(id, szVar, charsmax(szVar) );
    if(szParam == ST_STEAM)
        get_user_authid(id, szVar, charsmax(szVar))
    
    if(equali(szVariable,szVar)) {
        return true;
    }
    
    if(szParam == ST_FLAGS) {
        if(get_user_flags(id) & read_flags(szVariable))
        return true;
    }
    return false;
}
И проверка заработала)
23 Янв 2024
murlemur, И это тоже работает, спасибо, можно закрывать)
 
Сообщения
336
Реакции
396
Предупреждения
5
Помог
7 раз(а)
Ля, я такого лютого говнокода еще не видел...
 
Сообщения
526
Реакции
462
Предупреждения
16
Помог
9 раз(а)
Albertio, значит ты как я не смотришь свой код со стороны.
 
Сообщения
336
Реакции
396
Предупреждения
5
Помог
7 раз(а)
Vaqtincha, кто спорит, у меня не самые лучшие работы, но точно не такого уровня. И у тебя я уверен не такой уровень)
 
Сообщения
166
Реакции
15
Помог
5 раз(а)
Потрудитесь «оптимизировать» его, не используя reapi. без обмана
 
Сообщения
336
Реакции
396
Предупреждения
5
Помог
7 раз(а)
mlibre, напомни мне пожалуйста, здесь раздел Помощь или Заказы. Почему, кто то должен просто так оптимизировать этот говнокод? За идею?)
24 Янв 2024
И да, что за условия не использовать ReAPI? Тут можно спокойно обойтись решкой и хэм'ом без фейкметы и энджин
 
Сообщения
115
Реакции
20
Предупреждения
1
Помог
2 раз(а)
Закройте тему пожалуйста)
 
Статус
В этой теме нельзя размещать новые ответы.

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

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