Kompiliavimo/log klaidos ir kaip jas ištaisyti.

Šiame forume galima rasti pamokas, patarimus, skriptus ir kitą naudingą informciją.
Post Reply
User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Kompiliavimo/log klaidos ir kaip jas ištaisyti.

Post by aaarnas »

Č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:

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ą.
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:

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ą.
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:

Code: Select all

public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)    register_cvar("cvar", "1")} 
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:

Code: Select all

public plugin_init() {     register_plugin(PLUGIN, VERSION, AUTHOR)    register_cvar("cvar", "1")} 
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: Kompiliavimo klaidos ir kaip jas ištaisyti.

Post by hleV »

Čia ne kompiliavimo klaidos, išskyrus gal index out of bounds, bet ją dažniausiai gausi jau serveryje, po sėkmingo kompiliavimo.
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

User avatar
psychical
Viršininkas
Posts: 2094
Joined: 2011 Mar 12 22:19
Skype: tautvydas11
Location: Linksmakalnis
Contact:

Re: Kompiliavimo klaidos ir kaip jas ištaisyti.

Post by psychical »

Man ir kažkas panašaus buvo šovę į galvą, nes kiek žinau tai komplinimo klaidos tai visokie loose intendion ir t.t.

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Kompiliavimo/log klaidos ir kaip jas ištaisyti.

Post by aaarnas »

Teisingai. Pataisiau.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

Post Reply

Who is online

Users browsing this forum: No registered users and 7 guests