Offline |
|
Csatlakozott: 2014.10.30. 10:18 Hozzászólások: 468
Megköszönt másnak: 235 alkalommal Megköszönték neki: 34 alkalommal
|
Helló mindenkinek! Valaki meg tudja válaszolni hogy a második verziójú sma részlet miért bug mentesebb, mint az első, Z botok használata mellett? Illetve hogyan lehetne ezt helyesebben vagy praktikusabban megírni? Akinek van kedve és türelme mondhatna pár szót hogy ez a FM_SetModel mégis mi lenne mire használjuk és miért kell ignoráljuk látszólag össze-vissza? Verzió 1: public fw_setmodel(ent,model[]) { if(!ggActive) return FMRES_IGNORED; new owner = pev(ent,pev_owner); // no owner if(!is_user_connected(owner)) return FMRES_IGNORED; static classname[24]; // the extra space is used later pev(ent,pev_classname,classname,10); // not a weapon // checks for weaponbox, weapon_shield if(classname[8] != 'x' && !(classname[6] == '_' && classname[7] == 's' && classname[8] == 'h')) return FMRES_IGNORED; // makes sure we don't get memory access error, // but also helpful to narrow down matches new len = strlen(model); // ignore weaponboxes whose models haven't been set to correspond with their weapon types yet // checks for models/w_weaponbox.mdl if(len == 22 && model[17] == 'x') return FMRES_IGNORED; // ignore C4 // checks for models/w_backpack.mdl if(len == 21 && model[9] == 'b') return FMRES_IGNORED; // checks for models/w_usp.mdl, usp, models/w_m4a1.mdl, m4a1 if((len == 16 && model[10] == 's' && lvlWeapon[owner][1] == 's') || (len == 17 && model[10] == '4' && lvlWeapon[owner][1] == '4') ) { copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl formatex(classname,23,"weapon_%s",model); // remember silenced status new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent); if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_silen(wEnt); } // checks for models/w_glock18.mdl, glock18, models/w_famas.mdl, famas else if((len == 20 && model[15] == '8' && lvlWeapon[owner][6] == '8') || (len == 18 && model[9] == 'f' && model[10] == 'a' && lvlWeapon[owner][0] == 'f' && lvlWeapon[owner][1] == 'a') ) { copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl formatex(classname,23,"weapon_%s",model); // remember burst status new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent); if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_burst(wEnt); } // if owner is dead, remove it if we need to if(get_user_health(owner) <= 0 && get_pcvar_num(gg_dm) && !get_pcvar_num(gg_pickup_others)) { dllfunc(DLLFunc_Think,ent); return FMRES_SUPERCEDE; } return FMRES_IGNORED; }
Verzió 2: public fw_setmodel(ent,model[]) { if(!ggActive) return FMRES_IGNORED; if (!pev_valid(ent)) return FMRES_IGNORED; new owner = pev(ent,pev_owner); if (!pev_valid(owner)) return FMRES_IGNORED; // no owner if(!is_user_connected(owner)) return FMRES_IGNORED; static classname[24]; // the extra space is used later pev(ent,pev_classname,classname,10); // not a weapon // checks for weaponbox, weapon_shield if(classname[8] != 'x' && !(classname[6] == '_' && classname[7] == 's' && classname[8] == 'h')) return FMRES_IGNORED; // makes sure we don't get memory access error, // but also helpful to narrow down matches new len = strlen(model); // ignore weaponboxes whose models haven't been set to correspond with their weapon types yet // checks for models/w_weaponbox.mdl if(len == 22 && model[17] == 'x') return FMRES_IGNORED; // ignore C4 // checks for models/w_backpack.mdl if(len == 21 && model[9] == 'b') return FMRES_IGNORED; // checks for models/w_usp.mdl, usp, models/w_m4a1.mdl, m4a1 if((len == 16 && model[10] == 's' && lvlWeapon[owner][1] == 's') || (len == 17 && model[10] == '4' && lvlWeapon[owner][1] == '4') ) { copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl formatex(classname,23,"weapon_%s",model); // remember silenced status new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent); if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_silen(wEnt); } // checks for models/w_glock18.mdl, glock18, models/w_famas.mdl, famas else if((len == 20 && model[15] == '8' && lvlWeapon[owner][6] == '8') || (len == 18 && model[9] == 'f' && model[10] == 'a' && lvlWeapon[owner][0] == 'f' && lvlWeapon[owner][1] == 'a') ) { copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl formatex(classname,23,"weapon_%s",model); // remember burst status new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent); if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_burst(wEnt); } // if owner is dead, remove it if we need to if(get_user_health(owner) <= 0 && get_pcvar_num(gg_dm) && !get_pcvar_num(gg_pickup_others)) { dllfunc(DLLFunc_Think,ent); return FMRES_SUPERCEDE; } return FMRES_IGNORED; }
|
|