SI:Last Error/Pl

From OpenTTD
Jump to: navigation, search



OpenTTD to gra w czasie rzeczywistym, więc żaden program nie może przewidzieć, czy pewne zaplanowane działanie zakończy się niepowodzeniem, czy też się powiedzie, dopóki nie zostanie wykonane. Pozwalając SI budować mosty, pojazdy, przekierowuj samoloty, ponieważ niektóre z tych poleceń zawiodą z jakiegoś powodu. Samolot może się rozbić, może być wymagane więcej pieniędzy, a inni przeciwnicy mogą zakłócać jego plany. Na razie NoAI nie może zgłaszać, czy polecenie zostało wykonane pomyślnie, jednak jeśli polecenie nie powiodło się, nie może zgłosić przyczyny niepowodzenia. Ta strona jest zarówno instrukcją dla pisarzy AI, ponieważ zawiera wskazówki dotyczące kodowania dla programistów, którzy chcą pomóc w aktualizacji tej funkcji i naprawianiu błędów.

Kod

Każdy kod błędu w OpenTTD ma swój własny identyfikator (StringID) i służy do przetłumaczenia błędu na jeden z różnych języków w celu powiadomienia użytkownika za pomocą komunikatu w GUI. Aby przetłumaczyć te błędy, musimy przetłumaczyć te identyfikatory StringID na komunikaty o błędach i udostępnić je za pomocą interfejsu API NoAI. Ostatni komunikat o błędzie można uzyskać, wywołując AIError.GetLastError() , a komunikaty o błędach można sprawdzić za pomocą:

if (!AIAirport.BuildAirport(...)) {
  switch(AIError.GetLastError()) {
    case AIError.ERR_NOT_ENOUGH_CASH: // Get some more change
      ...
      break;
    case AIError.ERR_LOCAL_AUTHORITY_REFUSES: // Bribe!
      ...
      break;
    case AIError.ERR_LAND_SLOPED_WRONG: // Do some terraforming
      ...
      break;
    ...
    default:
      AILog.Warning("Unhandled exception: " + AIError.GetLastErrorString());
      break;
  }
}

Wewnętrzne komunikaty o błędach są odwzorowywane na obie stałe wyliczeniowe (takie jak AIError.ERR_NOT_ENOUGH_CASH ) i reprezentację ciągu. Reprezentację ciągu można uzyskać, wywołując AIError.GetLastErrorString i będzie pasować do nazwy stałej wyliczającej, zwróć uwagę, że jest ona przeznaczona wyłącznie do celów debugowania! Dokumentacja interfejsu API zawiera listę wszystkich błędów według metod, które mogą wystąpić po jej wywołaniu. Istnieją jednak pewne wyjątki, następujące błędy nie zostaną wymienione, ponieważ dotyczą (prawie) wszystkich metod:

  • AIError.ERR_UNKNOWN: Wystąpił błąd, który nie został odwzorowany na NoAI. Może to oznaczać 2 rzeczy, nie ma StringID dla tego błędu lub zapomnieliśmy go zmapować. W drugim przypadku zgłoś raport o błędzie i powiedz nam o tym, abyśmy mogli go naprawić.
  • AIError.ERR_PRECONDITION_FAILED: Naruszono jeden z warunków wstępnych metody, nie wykonano żadnego wywołania do systemu podkładania.
  • AIError.ERR_NEWGRF_SUPPLIED_ERROR: Ten błąd jest specyficzny dla NewGRF i nie możemy go prześledzić i zmapować.
  • AIError.ERR_NOT_ENOUGH_CASH: Nie masz wystarczających środków na dane działanie. Ten błąd jest zawsze sprawdzany po ('after') innych warunkach błędu. Oznacza to, że operacja powiodłaby się, gdyby było wystarczających środków.

Znaczenie innych komunikatów o błędach można sprawdzić w API.

Personal tools