Page 1 of 1

crash

Posted: 2014 Jul 09 22:50
by aurimasko
Turiu vienoj vietoj tokį kodą:

Code: Select all

 new attacker = pev(entity, pev_owner)ExecuteHamB(Ham_Killed, victim, attacker, 1) 
Tačiau, jei žaidėjas, kuris yra attacker atsijungia, tuomet serveris užlūžta.
Bandžiau daryt taip:

Code: Select all

     if(!is_user_connected(attacker))            attacker = 0 
Bet nepadėjo. Gal turit idėjų kaip padaryt, kad jei attacker atsijungęs, tai rodo, jog žaidėjai nusižudo patys?

Re: crash

Posted: 2014 Jul 09 23:10
by aaarnas
Tipo žaidėjas numiršta, viskas tvarkoj ir kažkuriuo metu per raundą jei žudikas atsijungia, tai lūžta serveris? Keistoka.
Kokį error rodo konsolė ?

Re: crash

Posted: 2014 Jul 09 23:15
by aurimasko
Na pilnas kodas yra toks, kad granata yra išmetama ir po kurio laiko sprogsta nužudydama visus žaidėjus aplink. Ir esmė, kad kai nužudo, tai fragus turi priskaityt tam kuris ją išmėtė, bet jei tas, kuris išmėtė, atsijungia, tuomet serveris nulužta. Daviau šias eilutes, nes būtent dėl jų lūžta.

Code: Select all

 Uploading dump (in-process) [proxy '']/tmp/dumps/crash_20140710001459_1.dmpsuccess = yesresponse:  CrashID=bp-9c8562f7-ff07-4aa3-b56e-dec152140709Segmentation faultAdd "-debug" to the ./hlds_run command line to generate a debug.log to help with solving this problemThu Jul 10 00:15:00 EEST 2014: Server restart in 10 seconds  

Re: crash

Posted: 2014 Jul 10 00:49
by aaarnas
Segmentation fault yra kreipimasis į neinicializuotą ar draudžiamą atminties vietą, kas būtų - NULL (arba neegzistuojančio) pointerio išadresavimas arba steko perpildymas.
Tai atitinka viską, kad kviečiama funkcija ant žaidėjo, kurio nėra.

Šiuo, tavo aprašytu atveju - funkcija is_user_connected turėtų grąžinti netiesą ties tuo žaidėjų.

Patikrink tokius dalykus:
Ar is_user_connected gražina teisingą reikšmę (0 - kai žaidėjas atsijungęs, 1 - kai žaidėjas prisijungęs).
Ar attacker tikrai yra reikiamas žaidėjas (na dėl viso pikto)
Ar validus kvietimas: ExecuteHamB(Ham_Killed, victim, 0, 1) (galbūt variklis neleidžia, kad žaidėjas 0 nužudytų). Jei nevalidus, yra kitų nužudymo metodų. dllfunc, user_kill ar dar kokie ten.