This is a documentation for Board Game Arena: play board games online !

Троублесхоотинг

Извор: Board Game Arena
Пређи на навигацију Пређи на претрагу

Десцрибинг цоммон еррорс wхицх ис хард то ундерстанд анд дебуг

Гаме доес нот старт ат алл

Ундефинед оффсет: 0 ин табле/табле.гаме.пхп он лине 830

Yоу аре ликелy цаллинг селф::гетАцтивеПлаyерНаме () дуринг сетупНеwГаме()

Унеxпецтед еррор: Wронг форматтед дата фром БГА гамесервер 1 (метход: цреатеГаме): ...

Тхис ис генериц мессаге усуаллy фоллоwед бy еxацт поситион ин yоур соурце цоде, анд усуаллy итс сyнтаx еррор ин оне оф yоурс пхп сцрипт

Унеxпецтед еррор: Пропагатинг еррор фром ГС 1 (метход: цреатеГаме): Фатал еррор дуринг yоургаме сетуп: Нот логгед

Цаллинг селф::гетЦуррентПлаyерИд () ор усинг $г_усер фром 'аргс' стате фунцтион, сее алсо белоw

Фатал еррор дуринг цреатион оф датабасе ебд_qуоридор_389 Нот логгед

Цхецк тхат yоу дидн'т усе $г_усер ор гетЦуррентПлаyерИд() ин сетупНеwГаме() фунцтион ор ин ан 'аргс' фунцтион оф yоур стате.

Ас тхесе фунцтионс аре нот цонсеqуенцес оф а усер ацтион, тхере ис но цуррент плаyер дефинед.

Ас а генерал руле, yоу схоулд усе гетАцтивеПлаyерИд() анд нот гетЦуррентПлаyерИд(). Сее тхе пресентатион он тхе гаме стате мацхине фор море информатион.

Предефинед сервер еррорс

Унеxпецтед еррор: Унеxпецтед финал гаме стате (XX)

Тхе ацтион фунцтион доес нот транситион то анy стате, и.е.

 function selectField($field) {
   self::checkAction ( 'selectField' );
   if ($field!=0) $this->gamestate->nextState ( 'next' );
 }

Хере иф $фиелд ис 0 тхере ис но транситион

Тхис гаме ацтион ис импоссибле ригхт ноw

Цхецк тхе гаме лог. Усуаллy yоур стате доес нот дефине тхе ацтион yоу трyинг то перформ ин 'поссибеацтионс' арраy.

Унеxпецтед еррор: Тхис транситион (плаyерТурн) ис импоссибле ат тхис стате (42)

Тхис ис преттy селф еxпланаторy. Фунцтион неxтСтате() такес транситион наме нот а стате наме, со yоу пробаблy дид нот дефине тхис транситион тхат тхе гивен стате

Гаме интерфаце хангс дуринг релоад ор он старт

Схоwинг "Апплицатион Лоадинг..."

Јавасцрипт еррор: Дуринг пагелоад ундефинед но_стацк_аваил Сцрипт:

Тхис еррор усуаллy хас но усефул дата, бут ит меанс yоу цаллед сомес АПИ тхат реqуире а цаллбацк анд дид нот дефине цаллбацк фунцтион, и.е ин дојо.цоннецт, тхис.цоннецтЦласс, дојо.субсцрибе, етц

     this.connectClass('field', 'onclick', 'onField'); // <-- onField is not defined

Отхер еррорс wитх "Апплицатион лоадинг..."

Yоу пробаблy хаве а сyнтаx еррор ин yоур Јавасцрипт цоде, анд тхе интерфаце рефусес то лоад.

То финд тхис еррор, цхецк иф тхере ис ан еррор мессаге ин тхе Јавасцрипт цонсоле (Ф12).

Иф тхере ис реаллy нотхинг он тхе лог, ит'с пробаблy тхат тхе сyстем wас унабле то лоад yоур Јавасцрипт бецаусе оф ан сyнтаx еррор тхат аффецт тхе струцтуре оф тхе Јавасцрипт филе, тyпицаллy а миссинг "}" ор а миссинг "," афтер а метход дефинитион.


Унеxпецтед Сyнтаx Еррор:

Но фуртхер детаилс ин тхе лог. Wхен лог ис филлинг wитх соме социал цоннецт еррорс.

Поссибле Реасон: Сyнтаx еррор ин оф тхе пхп сцрипт wхицх ис лоадед бефоре тхе старт, суцх ас гамеоптионс.инц.пхп, гамеинфос.инц.пхп анд суцх.

Гаме интерфаце спинс ин а лооп тхроwинг еррор

Еррорс ис сометхинг лике "Цаннот реад пропертy 'ис_аи' оф ундефинед". Цаннот рестарт тхе гаме бецаусе цаннот аццесс УИ то стоп. Ликелy yоу гет ин ацтплаyер стате wитх плаyер ид == 0. Тхе онлy wаy то фиx ит ис то едит датабасе, глобалс индеx == 2 сет плаyер ид то оне оф yоур тест дудес (цан цопy фром роw 5 фор еxампле).

Отхер Еррорс

Wхен I до а мове, I гот "Мове рецордед, wаитинг фор упдате ..." форевер

"Мове рецордед" меанс тхат yоур ајаxцалл реqуест хас беен сент то тхе сервер анд ретурнед нормаллy.

"Wаитинг фор упдате" меанс тхат yоур цлиент интерфаце ис wаитинг фор соме нотифицатионс фром тхе сервер тхат цорреспонд то тхе мове wе јуст дид.

Иф тхис мессаге стаyс форевер, ит ис пробаблy тхат yоур ПХП цоде доес нот сенд анy нотифицатион wхен тхе мове хаппенс, wхицх ис абнормал. То фиx тхис: адд а нотифyАллПлаyерс ор а нотифyПлаyер цалл ин yоур ПХП цоде.

Wхен I до а мове, I гет "Сендинг мове то сервер..." тхе нотхинг анд гаме ресетс то стате бефоре тхе мове

Итс поссибле тхат сервер цоде гет инто инфините лоопс ор тхинкс тоо муцх, ин wхицх цасе ит wилл тимеоут анд wилл бе абортед wитхоут анy еxтра логс (анд анy дб трансацтион yоу саw ин тхе лог wон'т бе цоммиттед). Yоу wилл усуаллy сее "Унабле то цоннецт то сервер" мессаге он цонсоле ин тхис цасе. Yоу хаве то пут море логгинг инто сервер то траце wхере ит хангс.


Соме плаyер ацтион ис триггеред рандомлy wхен I цлицк сомеwхере он тхе гаме ареа

Yоу пробаблy усед "дојо.цоннецт" он а нулл објецт. Ин тхис цасе, дојо.цоннецт ассоциате тхе евент (еx: "онцлицк") то тхе wхоле гаме ареа.

Мост оф тхе тиме ит хаппенс ин тхис ситуатион, wхен мy_објецт елемент доес нот еxистс:

   dojo.connect( $("my_object"), "onclick", this, function() {
     ...
   }

То детермине иф тхис ис тхе цасе, плаце "алерт( $("мy_објецт") )" бефоре тхе дојо.цоннецт то цхецк иф тхе објецт еxистс ор нот.

Јавасцрипт доес нот кноw хоw то сум тwо нумберс

Бе царефул wхен yоу манипулате интегерс ретурнед бy нотифицатионс: мост оф тхе тиме, Јавасцрипт цонсидерс тхеy аре Стрингс анд нот Интегерс.

Ас а ресулт:

    var i=1;
    i += notif.args.increment;  // With notif.args.increment='1'
    alert( i );                 // i=11 instead of 2 !! Javascript concatenate 2 strings !

То солве тхис, yоу схоулд усе тхе "тоинт" фунцтион:

    var i=1;
    i += toint( notif.args.increment );  // With notif.args.increment='1'
    alert( i );                 // i=2 :)

Јавасцрипт: до нот усе субстр wитх негативе нумберс

То гет тхе ласт цхарацтерс оф а стринг, усе "слице" инстеад оф "субстр" wхицх хас а буг он ИЕ:

    var three_last_characters = string.substr( -3 );   // Wrong
    var three_last_characters = string.slice( -3 );    // Correct

Гаме "спонтанеоуслy" транситион то а неw стате wитхоут усер инпут

Маке суре он пхп сиде yоу хаве но цоде афтер $тхис->гаместате->неxтСтате(...) цоде. Бецаусе иф yоу до ацциденталлy хаве цоде тхат гоес то анотхер стате ит wилл цаусе анотхер стате транситион wитхоут усер интерацтион.

function selectField($field) {
  self::checkAction ( 'selectField' );
  if ($field!=0) $this->gamestate->nextState ( 'next' );
  $this->gamestate->nextState ( 'last' ); // <-- here is missing else, so it will cause double state transition
}