Kompiliavimo/log klaidos ir kaip jas ištaisyti.
Posted: 2011 Jun 19 15:55
Čia tikrai ne visos kompiliavimo/log klaidos. Jei kokią nors reikia aprašyti, tai nukopijuokite ją šioje temoje 
Klaidos:
(log klaidos):
[CSTRIKE] Non-player entity -1 out of range
[CSTRIKE] Invalid player 12
[FUN] Player out of range (0)
[AMXX] Run time error 4: index out of bounds
(kompiliavimo klaidos):
Warning: Loose indentation on line
Paaiškinimai:
Invalid player/ Player out of range...
Ši klaida atsiranda dėl į funkciją perduodamo neteisingo žaidėjo id. Tai yra jei žaidėjo id yra didesnis arba mažesnis už (1:32) aibę arba tas žaidėjas yra atsijungęs arba tam tikrais atvejais miręs.
Kad ištaisyti šią klaidą, prieš reikiamą funkciją turime patikrinti ar žaidėjas yra gyvas, prisijungęs arba ar tai iš viso žaidėjas.
is_user_connected(id) - Gražina tiesą, jei žaidėjas šiuo metu prisijungęs į serverį, be to patikrina ar tai iš viso yra žaidėjas, tad į šią funkciją galima perduoti bet kokią id reikšmę ir ši bus patikrinta.
is_user_alive(id) - Gražina tiesą, jei žaidėjas šiuo metu prisijungęs į serverį bei yra gyvas(laksto po žemėlapį), be to patikrina ar tai iš viso yra žaidėjas, tad į šią funkciją galima perduoti bet kokią id reikšmę ir ši bus patikrinta. Pastaba: ši funkcija taip pat patikrina tą patį, ką ir is_user_connected, tad jei naudojame is_user_alive, papildomai tikrinti su is_user_connected nereikia.
index out of bounds
Ši klaida dažniausiai atsiranda kai mėginama patikrinti masyvo elementą, kurio nėra. Pvz:
Norint ištaisyti, reikia tikrinti perduodamą elementą, ar jis neviršija limito. Dažniausia klaida būna kokiame nors death forwarde, kai žudikas būna ne žaidėjas, o koks nors pasaulio elementas. Tikrinti ar tai žaidėjas galima su is_user_connected(id), arba yra optimalesnis būdas:
Loose indentation
Ši klaida nėra pavojinga ir dažniausiai ją ignoravus viskas gerai veikia, bet vis dėl to ją būtina pataisyti.
Jei nurodytoje eilutėje gauname tokią klaidą, vadinasi kažkas negerai su kodo lygiavimu, pvz:
Kaip matome, register_plugin eilutė yra neišlygiuota pagal bendrą tvarką, o prisiglaudusi prie kairės. Šiuo atveju reikėtų teisingai išlygiuoti šią eilutę (Su TAB), ir klaida turėtų pradingti:

Klaidos:
(log klaidos):
[CSTRIKE] Non-player entity -1 out of range
[CSTRIKE] Invalid player 12
[FUN] Player out of range (0)
[AMXX] Run time error 4: index out of bounds
(kompiliavimo klaidos):
Warning: Loose indentation on line
Paaiškinimai:
Invalid player/ Player out of range...
Ši klaida atsiranda dėl į funkciją perduodamo neteisingo žaidėjo id. Tai yra jei žaidėjo id yra didesnis arba mažesnis už (1:32) aibę arba tas žaidėjas yra atsijungęs arba tam tikrais atvejais miręs.
Kad ištaisyti šią klaidą, prieš reikiamą funkciją turime patikrinti ar žaidėjas yra gyvas, prisijungęs arba ar tai iš viso žaidėjas.
is_user_connected(id) - Gražina tiesą, jei žaidėjas šiuo metu prisijungęs į serverį, be to patikrina ar tai iš viso yra žaidėjas, tad į šią funkciją galima perduoti bet kokią id reikšmę ir ši bus patikrinta.
is_user_alive(id) - Gražina tiesą, jei žaidėjas šiuo metu prisijungęs į serverį bei yra gyvas(laksto po žemėlapį), be to patikrina ar tai iš viso yra žaidėjas, tad į šią funkciją galima perduoti bet kokią id reikšmę ir ši bus patikrinta. Pastaba: ši funkcija taip pat patikrina tą patį, ką ir is_user_connected, tad jei naudojame is_user_alive, papildomai tikrinti su is_user_connected nereikia.
index out of bounds
Ši klaida dažniausiai atsiranda kai mėginama patikrinti masyvo elementą, kurio nėra. Pvz:
Code: Select all
new turi_batus[33] // Šis masyvas turi reikšmes tik nuo 0 iki 32, tad jei parašysime tarkime turi_batus[50] ar turi_batus[-1], tai gausime index out of bounds klaidą.
Code: Select all
#include <amxmodx> #define is_player(%1) (1 <= %1 <= maxplayers) new maxplayers public plugin_init() { maxplayers = get_maxplayers()} is_player(id) // Tikrinama ar tai žaidėjo id (t.y. ar id yra 0>id<33). Gražina tiesą, arba netiesą.
Ši klaida nėra pavojinga ir dažniausiai ją ignoravus viskas gerai veikia, bet vis dėl to ją būtina pataisyti.
Jei nurodytoje eilutėje gauname tokią klaidą, vadinasi kažkas negerai su kodo lygiavimu, pvz:
Code: Select all
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_cvar("cvar", "1")}
Code: Select all
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_cvar("cvar", "1")}