Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› Quellcode / Programmierung —› TBase und TRoom

Autor Mitteilung
verfasst am: 25.07.2010, 18:57 · Edited by: BlackBetty
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Ich schlag mich wieder mit meinem Spielsatz rum und hab folgendes Problem:
Ich möchte wissen, wie oft ein Gebäude eines bestimmten Typs in meiner Basis existiert. Ich habe das mit folgendem Code versucht:

 
  Base:=base_api_GetMainBase;
  count:=base_api_GetBuildingCount;
  
   for  i:=0 to count do              
    begin
     room:=base_api_GetBuildingByIndex(i);
     if room.ID=08098098 then building:=building+1;
    end;


Der Code oben ist nicht 100%ig derselbe, aber sehr ähnlich. Auf diese Weise scheint es jedoch ganz und gar nicht zu funktionieren (Assertion fehlgeschlagen). Meine Frage wäre, ob es irgendeine andere Möglichkeit gibt, die Gebäudetypen abzufragen. Ich wüsste nämlich auch nicht so recht, wie das sonst gehen soll. o.o
verfasst am: 25.07.2010, 19:26
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Die Schleife muss bis
count - 1
laufen, weil das Skript bei Null und nicht bei Eins zum Zählen anfängst
verfasst am: 25.07.2010, 19:32
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
for i:=0 to base_api_GetBuildingCount()

Index fängt bei N Objekten bei 0 an und geht bis N-1. Das ist hier aber nicht das (einzige) Problem. Im Moment gehst du durch alle Arten von Gebäuden durch - wie die Dokumentation extra sagt:
[base_api_GetBuildingCount g]ibt die Anzahl aller derzeit verfügbaren Gebäude zurück. Gemeint sind damit Einrichtungen, die der Spieler momentan bauen kann (also die erforscht sind), nicht die tatsächlich gebauten Einrichtungen!

Und in perfekter symetrie gibt base_api_GetBuildingByIndex dir eine Art von Gebäude (n altes Quartier oder n kleiner Hangar oder ...)

Du willst TBase.RoomArray und GetArrayLength(arr).
verfasst am: 26.07.2010, 15:18
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Danke für die Tipps. Das Script lief mit
 room:=Base.GetRoom(i);
in der Zählerschleife einwandfrei. Hier vollständiger Anweisungsblock, falls das jemand braucht:
  Base:=base_api_GetMainBase;
  ar:=Base.RoomArray;
  count:=getarraylength(ar);
  
   for  i:=0 to count-1 do             
    begin
     room:=Base.GetRoom(i);
     if room.ID=231027342 then count:=count+1;
    end;
verfasst am: 26.07.2010, 15:58 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Naja, es läuft, aber ich glaube kaum, dass es dir die richtige Zahl gibt. Denn du nimmst die Anzahl an Räumen und addierst dann die Anzahl an Gebäuden mit ID = 231027342 drauf. Ich hab's mal schnell gefixt und den Code nebenbei kürzer und lesbarer gemacht ;-)

Base:= base_api_GetMainBase();
for  i:=0 to GetArrayLength(Base.RoomArray)-1 do
begin
  if Base.GetRoom(i).ID = 231027342 then inc(count);
end;
verfasst am: 26.07.2010, 22:13
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
hmmm, find ich dann komisch, dass ich beim Testen dieselbe Anzahl eines Raumes rausbekommen habe, die auch tatsächlich existiert.
Wenn meine Version doch einen Fehler hat benutz ich dann deine. :D
verfasst am: 26.07.2010, 22:53
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Dann benutzt du (anders als in dem hier geposteten Schnipsel) verschiedene Variablen zum Zählen der Räume und zum (unnötigen) speichern der Anzahl von Räumen insgesamt.



Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

Ladezeit (sec.): 0.016 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003