hlmod.hu

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



Jelenlévő felhasználók

Jelenleg 274 felhasználó van jelen :: 2 regisztrált, 0 rejtett és 272 vendég

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

Regisztrált felhasználók: Bing [Bot], 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  [ 1 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Hatékony scriptelés 1. - Lekérések
HozzászólásElküldve: 2016.10.22. 07:14 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2014.09.08. 22:21
Hozzászólások: 3014
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 555 alkalommal
Hatékony scriptelés 1. -Lekérések

Elsősorban ezzel a segédlettel szeretném eloszlatni a kételyeket, és megoldani az első számú problémát, mikor 1 függvényen belül lekérjük ugyanazt a dolgot többször, FELESLEGESEN.
Ellenpéldákat fogok bemutatni amiket az oldalon láttam visszatérően.

Rossz példa, mikor 2x lekérjük ugyanazt a natívot feleslegesen 1 függvényen belül (ezt milliószor láttam chat módosított pluginokban):
  1. new CsTeams:iTeam = cs_get_user_team(id);
  2.  
  3. switch(iTeam) {
  4.     case CS_TEAM_T: client_print_color(id, print_team_red, "^1Te ^3Terrorista^1 vagy, ezért pirosan írsz.");
  5.     case CS_TEAM_CT: client_print_color(id, print_team_blue, "^1Te ^3CT^1 vagy, ezért kéken írsz.");
  6. }
  7.  
  8. if(cs_get_user_team(id) == CS_TEAM_SPECTATOR) {
  9.     client_print_color(id, print_team_grey, "^1Te ^3Spectator^1 vagy, ezért szürkén írsz.");
  10. }


Helyette használjuk rendeltetésszerűen az elsőnek létrehozott változónkat, ha már elkezdtük.
  1. new CsTeams:iTeam = cs_get_user_team(id);
  2.  
  3. switch(iTeam) {
  4.     case CS_TEAM_T: client_print_color(id, print_team_red, "^1Te ^3Terrorista^1 vagy, ezért pirosan írsz.");
  5.     case CS_TEAM_CT: client_print_color(id, print_team_blue, "^1Te ^3CT^1 vagy, ezért kéken írsz.");
  6.     case CS_TEAM_SPECTATOR: client_print_color(id, print_team_grey, "^1Te ^3Spectator^1 vagy, ezért szürkén írsz.");
  7. }



Következő problémás dolog az if ágak kezelése.
Vegyük figyelembe itt a sorrendet, logikázzuk ki a dolgokat fejben többször.
Ezt egy deathmsg eventtel fogom szemléltetni az oldalon látott példákból kiindulva.
Rossz példa mikor a returnokat nem az event befolyásolására használjuk, csak feleslegesen és mikor visszatérően ugyanazt hívjuk meg az if ágban.
  1. public Halal() {
  2.     new iKiller = read_data(1);
  3.     new iVictim = read_data(2);
  4.     new iHeadshot = read_data(3);
  5.  
  6.     if(iKiller == iVictim)
  7.         return PLUGIN_HANDLED;
  8.  
  9.     if(iKiller != iVictim) {
  10.         new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName));
  11.         client_print_color(iKiller, print_team_default, "Megölted ^3%s^1-t.", szVictimName);
  12.     }
  13.  
  14.     if(iKiller != iVictim && iHeadshot) {
  15.         new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName));
  16.         client_print_color(iKiller, print_team_default, "Fejbe lőtted ^3%s^1-t.", szVictimName);
  17.     }
  18.    
  19.     return PLUGIN_HANDLED;
  20. }



Ez helyett van 2 helyesebb megoldás, mikor okosan használjuk a return-t
  1. public Halal() {
  2.     new iKiller = read_data(1);
  3.     new iVictim = read_data(2);
  4.     new iHeadshot = read_data(3);
  5.  
  6.     if(iKiller == iVictim) return;
  7.  
  8.     new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName));
  9.    
  10.     if(iHeadshot) {
  11.         client_print_color(iKiller, print_team_default, "Fejbe lőtted ^3%s^1-t.", szVictimName);
  12.     }
  13.     else {
  14.         client_print_color(iKiller, print_team_default, "Megölted ^3%s^1-t.", szVictimName);
  15.     }
  16. }

vagy 1x kérünk le valamit if-ben, és azon belül folytatjuk.
  1. public Halal() {
  2.     new iKiller = read_data(1);
  3.     new iVictim = read_data(2);
  4.     new iHeadshot = read_data(3);
  5.  
  6.     if(iKiller != iVictim) {
  7.         new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName));
  8.    
  9.         if(iHeadshot) {
  10.             client_print_color(iKiller, print_team_default, "Fejbe lőtted ^3%s^1-t.", szVictimName);
  11.         }
  12.         else {
  13.             client_print_color(iKiller, print_team_default, "Megölted ^3%s^1-t.", szVictimName);
  14.         }
  15.     }
  16. }


Ugye itt máris érvényesült az a dolog, hogy ha úgyis le kell kérni, akkor lekérjük 1x a nevet, nem külön minden ágban.

Következő a tömbök használata lesz, megnézzük az előző függvényen mit lehetne ritkítani.
Mivel csak az iVictim tömb van 2x használva a lekért id-k közül, ezért ezt a függvényt is ritkíthatjuk.
  1. public Halal() {
  2.     new iVictim = read_data(2);
  3.  
  4.     if(read_data(1) != iVictim) {
  5.         new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName));
  6.    
  7.         if(read_data(3)) {
  8.             client_print_color(iKiller, print_team_default, "Fejbe lőtted ^3%s^1-t.", szVictimName);
  9.         }
  10.         else {
  11.             client_print_color(iKiller, print_team_default, "Megölted ^3%s^1-t.", szVictimName);
  12.         }
  13.     }
  14. }

Mivel minden más 1x van lekérve, ezért nem muszáj nekik tömb.


Egyenlőre ennyi volna, még ha eszembe jut, vagy meglátok pár ellenpéldát akkor ide sorolom.
Remélem sikerült mindenkivel tisztázni ezt a témát, ha ilyen szarvashibákat láttok, nyugodtan linkeljétek ezt a posztot nekik oda. :lol:
Eleget volt már ez a téma vesézve.

_________________
GitHub - mforce

Ők köszönték meg mforce nek ezt a hozzászólást (összesen 6): exodus (2016.10.22. 08:17) • Zeei (2016.10.22. 14:41) • Krisznitro (2016.10.24. 15:53) • kengurumancs (2016.11.03. 23:47) • jokypapa (2017.03.01. 10:57) • HellEnergY (2018.10.01. 11:26)
  Népszerűség: 13.64%


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  [ 1 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 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