hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 14:52



Jelenlévő felhasználók

Jelenleg 222 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 221 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Google [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 3 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: register_forward(FM_SetModel, ...
HozzászólásElküldve: 2018.03.19. 16:46 
Offline
Jómunkásember

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:
  1. public fw_setmodel(ent,model[])
  2. {
  3.     if(!ggActive) return FMRES_IGNORED;
  4.    
  5.     new owner = pev(ent,pev_owner);
  6.  
  7.     // no owner
  8.     if(!is_user_connected(owner)) return FMRES_IGNORED;
  9.  
  10.     static classname[24]; // the extra space is used later
  11.     pev(ent,pev_classname,classname,10);
  12.  
  13.     // not a weapon
  14.     // checks for weaponbox, weapon_shield
  15.     if(classname[8] != 'x' && !(classname[6] == '_' && classname[7] == 's' && classname[8] == 'h'))
  16.         return FMRES_IGNORED;
  17.  
  18.     // makes sure we don't get memory access error,
  19.     // but also helpful to narrow down matches
  20.     new len = strlen(model);
  21.  
  22.     // ignore weaponboxes whose models haven't been set to correspond with their weapon types yet
  23.     // checks for models/w_weaponbox.mdl
  24.     if(len == 22 && model[17] == 'x') return FMRES_IGNORED;
  25.  
  26.     // ignore C4
  27.     // checks for models/w_backpack.mdl
  28.     if(len == 21 && model[9] == 'b') return FMRES_IGNORED;
  29.  
  30.     // checks for models/w_usp.mdl, usp, models/w_m4a1.mdl, m4a1
  31.     if((len == 16 && model[10] == 's' && lvlWeapon[owner][1] == 's')
  32.     || (len == 17 && model[10] == '4' && lvlWeapon[owner][1] == '4') )
  33.     {
  34.         copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl
  35.         formatex(classname,23,"weapon_%s",model);
  36.  
  37.         // remember silenced status
  38.         new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent);
  39.         if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_silen(wEnt);
  40.     }
  41.  
  42.     // checks for models/w_glock18.mdl, glock18, models/w_famas.mdl, famas
  43.     else if((len == 20 && model[15] == '8' && lvlWeapon[owner][6] == '8')
  44.     || (len == 18 && model[9] == 'f' && model[10] == 'a' && lvlWeapon[owner][0] == 'f' && lvlWeapon[owner][1] == 'a') )
  45.     {
  46.         copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl
  47.         formatex(classname,23,"weapon_%s",model);
  48.  
  49.         // remember burst status
  50.         new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent);
  51.         if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_burst(wEnt);
  52.     }
  53.        
  54.     // if owner is dead, remove it if we need to
  55.     if(get_user_health(owner) <= 0 && get_pcvar_num(gg_dm) && !get_pcvar_num(gg_pickup_others))
  56.     {
  57.         dllfunc(DLLFunc_Think,ent);
  58.         return FMRES_SUPERCEDE;
  59.     }
  60.  
  61.     return FMRES_IGNORED;
  62. }


Verzió 2:
  1. public fw_setmodel(ent,model[])
  2. {
  3.     if(!ggActive) return FMRES_IGNORED;
  4.    
  5.     if (!pev_valid(ent)) return FMRES_IGNORED;
  6.    
  7.     new owner = pev(ent,pev_owner);
  8.    
  9.     if (!pev_valid(owner)) return FMRES_IGNORED;
  10.  
  11.     // no owner
  12.     if(!is_user_connected(owner)) return FMRES_IGNORED;
  13.  
  14.     static classname[24]; // the extra space is used later
  15.     pev(ent,pev_classname,classname,10);
  16.  
  17.     // not a weapon
  18.     // checks for weaponbox, weapon_shield
  19.     if(classname[8] != 'x' && !(classname[6] == '_' && classname[7] == 's' && classname[8] == 'h'))
  20.         return FMRES_IGNORED;
  21.  
  22.     // makes sure we don't get memory access error,
  23.     // but also helpful to narrow down matches
  24.     new len = strlen(model);
  25.  
  26.     // ignore weaponboxes whose models haven't been set to correspond with their weapon types yet
  27.     // checks for models/w_weaponbox.mdl
  28.     if(len == 22 && model[17] == 'x') return FMRES_IGNORED;
  29.  
  30.     // ignore C4
  31.     // checks for models/w_backpack.mdl
  32.     if(len == 21 && model[9] == 'b') return FMRES_IGNORED;
  33.  
  34.     // checks for models/w_usp.mdl, usp, models/w_m4a1.mdl, m4a1
  35.     if((len == 16 && model[10] == 's' && lvlWeapon[owner][1] == 's')
  36.     || (len == 17 && model[10] == '4' && lvlWeapon[owner][1] == '4') )
  37.     {
  38.         copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl
  39.         formatex(classname,23,"weapon_%s",model);
  40.  
  41.         // remember silenced status
  42.         new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent);
  43.         if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_silen(wEnt);
  44.     }
  45.  
  46.     // checks for models/w_glock18.mdl, glock18, models/w_famas.mdl, famas
  47.     else if((len == 20 && model[15] == '8' && lvlWeapon[owner][6] == '8')
  48.     || (len == 18 && model[9] == 'f' && model[10] == 'a' && lvlWeapon[owner][0] == 'f' && lvlWeapon[owner][1] == 'a') )
  49.     {
  50.         copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl
  51.         formatex(classname,23,"weapon_%s",model);
  52.  
  53.         // remember burst status
  54.         new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent);
  55.         if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_burst(wEnt);
  56.     }
  57.        
  58.     // if owner is dead, remove it if we need to
  59.     if(get_user_health(owner) <= 0 && get_pcvar_num(gg_dm) && !get_pcvar_num(gg_pickup_others))
  60.     {
  61.         dllfunc(DLLFunc_Think,ent);
  62.         return FMRES_SUPERCEDE;
  63.     }
  64.  
  65.     return FMRES_IGNORED;
  66. }


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: register_forward(FM_SetModel, ...
HozzászólásElküldve: 2018.03.19. 17:24 
Offline
Őstag
Avatar

Csatlakozott: 2015.07.27. 22:56
Hozzászólások: 1367
Megköszönt másnak: 28 alkalommal
Megköszönték neki: 351 alkalommal
Csak 2 sor különbség van a 2. javára:
  1. // Megnézi hogy érvényes entity-e, különben hibát kapsz vagy akár crash
  2.         if (!pev_valid(ent)) return FMRES_IGNORED;
  3. // Szintúgy, viszont ez a felhasználót nézi meg a entity helyett
  4.         if (!pev_valid(owner)) return FMRES_IGNORED;

Ők köszönték meg regener nek ezt a hozzászólást: jokypapa (2018.03.19. 17:35)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: register_forward(FM_SetModel, ...
HozzászólásElküldve: 2018.03.19. 17:30 
Offline
Jómunkásember

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
regener írta:
Csak 2 sor különbség van a 2. javára:
  1. // Megnézi hogy érvényes entity-e, különben hibát kapsz vagy akár crash
  2.         if (!pev_valid(ent)) return FMRES_IGNORED;
  3. // Szintúgy, viszont ez a felhasználót nézi meg a entity helyett
  4.         if (!pev_valid(owner)) return FMRES_IGNORED;


Igen tudom h 2 sor különbség van. Ennek a 2 sornak a hiánya okozhat olyan hibát h a plugin nem számolja a frageket amiket botokért kapnál ill. a botoknak nem ad fegyvert csak egy kis pisztoly ? Vagy ennek az égvilágon nincs semmi köze hozzá?

Update: nincs köze hozzá


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 3 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 21 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole