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):
new CsTeams:iTeam = cs_get_user_team(id); switch(iTeam) { case CS_TEAM_T: client_print_color(id, print_team_red, "^1Te ^3Terrorista^1 vagy, ezért pirosan írsz."); case CS_TEAM_CT: client_print_color(id, print_team_blue, "^1Te ^3CT^1 vagy, ezért kéken írsz."); } if(cs_get_user_team(id) == CS_TEAM_SPECTATOR) { client_print_color(id, print_team_grey, "^1Te ^3Spectator^1 vagy, ezért szürkén írsz."); }
Helyette használjuk rendeltetésszerűen az elsőnek létrehozott változónkat, ha már elkezdtük.
new CsTeams:iTeam = cs_get_user_team(id); switch(iTeam) { case CS_TEAM_T: client_print_color(id, print_team_red, "^1Te ^3Terrorista^1 vagy, ezért pirosan írsz."); case CS_TEAM_CT: client_print_color(id, print_team_blue, "^1Te ^3CT^1 vagy, ezért kéken írsz."); case CS_TEAM_SPECTATOR: client_print_color(id, print_team_grey, "^1Te ^3Spectator^1 vagy, ezért szürkén írsz."); }
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.
public Halal() { new iKiller = read_data(1); new iVictim = read_data(2); new iHeadshot = read_data(3); if(iKiller == iVictim) return PLUGIN_HANDLED; if(iKiller != iVictim) { new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName)); client_print_color(iKiller, print_team_default, "Megölted ^3%s^1-t.", szVictimName); } if(iKiller != iVictim && iHeadshot) { new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName)); client_print_color(iKiller, print_team_default, "Fejbe lőtted ^3%s^1-t.", szVictimName); } return PLUGIN_HANDLED; }
Ez helyett van 2 helyesebb megoldás, mikor okosan használjuk a return-t
public Halal() { new iKiller = read_data(1); new iVictim = read_data(2); new iHeadshot = read_data(3); if(iKiller == iVictim) return; new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName)); if(iHeadshot) { client_print_color(iKiller, print_team_default, "Fejbe lőtted ^3%s^1-t.", szVictimName); } else { client_print_color(iKiller, print_team_default, "Megölted ^3%s^1-t.", szVictimName); } }
vagy 1x kérünk le valamit if-ben, és azon belül folytatjuk.
public Halal() { new iKiller = read_data(1); new iVictim = read_data(2); new iHeadshot = read_data(3); if(iKiller != iVictim) { new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName)); if(iHeadshot) { client_print_color(iKiller, print_team_default, "Fejbe lőtted ^3%s^1-t.", szVictimName); } else { client_print_color(iKiller, print_team_default, "Megölted ^3%s^1-t.", szVictimName); } } }
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.
public Halal() { new iVictim = read_data(2); if(read_data(1) != iVictim) { new szVictimName[32]; get_user_name(iVictim, szVictimName, charsmax(szVictimName)); if(read_data(3)) { client_print_color(iKiller, print_team_default, "Fejbe lőtted ^3%s^1-t.", szVictimName); } else { client_print_color(iKiller, print_team_default, "Megölted ^3%s^1-t.", szVictimName); } } }
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. Eleget volt már ez a téma vesézve.
|