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. |
|
verfasst am: 27.11.2021, 14:38
|
Registrierdatum: 29.10.2021, 14:57
Beiträge: 763
|
|
|
verfasst am: 02.12.2021, 05:33
|
Registrierdatum: 30.11.2021, 05:01
Beiträge: 74
|
The information you share is of interest to many people, including me. Thanks for sharing this valuable information with us.
among us 2 |
|
verfasst am: 03.05.2022, 16:31
|
Registrierdatum: 03.05.2022, 16:29
Beiträge: 1
|
If you want to listen to music, download it to the website suonerie gratis for free |
|
verfasst am: 14.05.2022, 07:30
|
Registrierdatum: 01.09.2021, 13:30
Beiträge: 58
|
|
|
verfasst am: 22.11.2023, 14:04
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 69718
|
|
|
verfasst am: 01.12.2023, 15:41
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 69718
|
|