Autor |
Mitteilung |
|
verfasst am: 30.07.2010, 16:04
|
Registrierdatum: 27.06.2007, 12:16
Beitrge: 658
|
http://i588.photobucket.com/albums/ss328/StinkyNoodle/error.png
Download des Spielsatzes: http://www.mediafire.com/?946dfzdljj0qswg
Das hier wird von folgenden Zeilen im Script WI001Func verursacht. Sind Zeilen 30-36 denke ich. Im hochgeladenen Spielsatz aber deaktiviert, zum reproduzieren des Fehlers einfach die {} Klammern entfernen.
repeat
t1:=random( getarraylength (wiCompanies[company][item_type]) );
Item:=storage_api_getItembyID(wiCompanies[company][item_type][t1]);
until (item.Visible)
wiCompanies ist ein 4 Dimensionaler Array wenn ich mich nicht irre, und ich kann mir nicht recht erklren, weshalb getarraylength in diesem Falle nicht funktionieren sollte. Vielleicht liegt es ja auch am "repeat until", aber das wiederum funktioniert an anderer Stelle in meinem Spielsatz ebenfalls. o.o
Der Code verursacht einen schweren Fehler im Skripteditor. Problem mit Beschreibung wurde hier eingegeben: 0002429
Was ich mit diesen Zeilen machen mchte ist die Auswahl eines Items, das eine gewisse Gesellschaft anbietet. Es sollte eine zufllige Gesellschaft (company in wiCompanies) ausgewhlt werden, die ein bestimmtes Sortiment hat (item_type, zB. Muni, Panzerungen). In diesem Sortiment befinden sich die jeweiligen Item.IDs.
Grob she das in etwa so aus: Item.ID:=wiCompanies[wiFosters][item_ammo][patronen] oder
Item.ID:=wiCompanies[wiFosters][item_air][triebwerk]
Was mache ich falsch? Gibt's irgendwelche Alternativen zu dem Code der diesen Fehler verursacht? ich bin grad ein bisschen ratlos o.o |
|
verfasst am: 30.07.2010, 17:58 · Edited by: Kreks
|
Registrierdatum: 22.08.2008, 15:51
Beitrge: 403
|
Zitat: BlackBetty 4 Dimensionaler Array wenn ich mich nicht irre
Vier Dimensional, wenn du dich nicht irrst??? Das macht mich jetzt echt mal neugierig, ich fange mal an zu laden...
Aber in der Zwischenzeit, solltest du dir vieleicht mal das anschauen: http://doc.xforce-online.de/ger_pages/XSkriptTutorial/KomplexeDatentyp en.html Kapitel Records und eigene Datentypen
Ich glaube, du willst eher deinen eigenen Datentyp als ein vier dimensionales Array. Ist auch meiner Meinung nach viel einfacher zu verwalten und leichter ansprechbar. Ein Beispiel:
type
TCompanyItems = record
Triebwerke : array of TItem;
Munition : array of TItem;
end;
//mit einer Beispielprozedur
procedure MyVarTest
var
wiCompanies : array of TCompanyItems;
item : TItem;
begin
setarraylength(wiCompanies, COUNT_OF_COMPANIES);
//In diesem Code-Schnippsel muss das Array wiCompanies gefllt werden
if(getarraylength(wiCompanies[CURRENT_COMPANY].Triebwerke) > 0)//Abfrage ob die besagte Firma Triebwerke hat, eventuell muss diese Abfrage auf Variablen aufgeteilt werden da XScript ein wenig happig mit derart verschachtelten Anweisung im IF-Block ist
then item := wiCompanies[CURRENT_COMPANY].Triebwerke[WUNSCH_TRIEBWERK];
end
Das 4d Array msstest du auerdem folgendermaen ansprechen:
statt Zitat: BlackBetty Item.ID:=wiCompanies[wiFosters][item_air][triebwerk]
sind nur drei stellen
Item.ID:=wiCompanies[wiFosters][item_air][triebwerk][Letzte Arraystelle]
Das mit dem herunterladen hat jetzt trotz mehrfacher Anlufe nicht funktioniert, lasst mich wissen, wenn das Problem auf meiner Seite liegt... |
|
verfasst am: 30.07.2010, 18:52
|
Spielsatz Alliances
Registrierdatum: 14.07.2004, 14:47
Beitrge: 1185
|
Ist ein dreidimensionales Array: Array of Array of Array of LongInt;
Und drei Daumen hoch fr Records - dieses Skript ist ein echtes Chaos, um nicht Saustall zu sagen - und ich frchte, die anderen sehen hnlich aus. Ich knnte da beim besten Willen nicht durchsteigen, geschweige denn was hinzufgen oder nicht funktionierendes debuggen... |
|
verfasst am: 30.07.2010, 19:01
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beitrge: 5596
|
dazu kommt noch, das die "Fehlermeldung" eine Warnung ist, die die echte Fehlermeldung blockiert - deshalb hatte ich auch im Mantis dazu empfohlen, erstmal alle Warnungen im medit zu beseitigen und danach nochmal einen Testlauf zu machen, um an den echten Fehler zu kommen... |
|
verfasst am: 30.07.2010, 19:04 · Edited by: BlackBetty
|
Registrierdatum: 27.06.2007, 12:16
Beitrge: 658
|
Da liegt der Hund begraben. Seit ich das letzte mal hier aktiv war, hie es, man knne keine eigene Typen aufstellen. Jetzt kann man das und ich hab das wie's aussieht verschlafen. :D
Ich hab bereits selbst eine andere Alternative gefunden, die ich allerdings noch austesten msste. Ich werde mir diese Records auf jeden Fall nher ansehen. Danke Kreks. Den Spielsatz runterladen ging bei mir problemlos, btw. |
|
verfasst am: 30.07.2010, 19:07
|
Spielsatz Alliances
Registrierdatum: 14.07.2004, 14:47
Beitrge: 1185
|
Eigene Klassen kann man immer noch nicht erstellen (liegt auch nicht in den Hnden des Teams). Records gingen aber schon immer? |
|
verfasst am: 30.07.2010, 19:10 · Edited by: BlackBetty
|
Registrierdatum: 27.06.2007, 12:16
Beitrge: 658
|
@Dirk
Das Problem mit den editor Warnungen ist, dass ich dafr alle Skripte und Units offen haben muss, damit der editor erkennt, dass eine Variable nun doch irgendwo benutzt wird (und bei mehr als 20 Skripten wird das problematisch).
Nunja, da kann man mir jetzt sagen, ich htte alle Variablen in eine Unit Packen mssen... und nicht in verschiedene.
Ich find's nur komisch das diese paar Zeilen Code einen so extremen Fehler verursachen. o.o
@sujin
vielleicht habe ich dann Klassen mit Records verwechselt... |
|
verfasst am: 30.07.2010, 19:30
|
Spielsatz Alliances
Registrierdatum: 14.07.2004, 14:47
Beitrge: 1185
|
Globale Variablen, besonders in Units, sind aber ganz phse ;-) |
|
verfasst am: 30.07.2010, 19:38
|
Registrierdatum: 27.06.2007, 12:16
Beitrge: 658
|
Ich versuche die meisten Globalen Variablen in den nchsten Versionen meines Spielsatzes so gut wie mglich abzubauen. :D |
|
verfasst am: 30.07.2010, 21:29
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beitrge: 5596
|
@betty:
Sobald Du ein Skript aus dem Spielsatzeditor ffnest, werden alle Skripte in ein temporres Verzeichnis exportiert, dessen Name auf dem Namen des Spielsatzes plus einer Zufallsnummer basiert.
Also:
1.) Spielsatzeditor ffnen
2.) Skript im Spielsatzeditor zum bearbeiten ffnen
3.) im Skripteditor auf Datei-ffnen klicken und in das temporre Verzeichnis wechseln.
4.) Strg-A um alle dateien zu markieren, dann ffnen klicken.
5.) Alle Spielsatzskripte sind jetzt offen und knnen editiert werden
6.) Alles Speichern, Skripteditor beenden, im Spielsatzeditor geht ein Fenster auf "Folgende Skripte wurden auch verndert", einfach alle auswhlen und alle nderungen in den Spielsatz bernehmen.
Alternativ rechts im Skripteditor das Projektfenster ffnen, oben auf Projekt hinzufgen (oder so hnlich, hab das Programm gerade nicht offen) klicken und dann den eigenen Spielsatz auswhlen. Dann werden rechts alle Skripte im Spielsatz angezeigt und knnen jederzeit mit einem Klick einzeln geffnet werden. |
|
verfasst am: 27.11.2021, 15:20
|
Registrierdatum: 29.10.2021, 14:57
Beitrge: 763
|
|
|
verfasst am: 27.01.2022, 13:11
|
Registrierdatum: 27.01.2022, 13:07
Beitrge: 318
|
|
|
verfasst am: 22.11.2023, 10:46
|
Registrierdatum: 22.11.2023, 07:10
Beitrge: 47355
|
|
|
verfasst am: 01.12.2023, 12:24
|
Registrierdatum: 22.11.2023, 07:10
Beitrge: 47355
|
|
|
verfasst am: 01.02.2024, 18:42
|
Registrierdatum: 22.11.2023, 07:10
Beitrge: 47355
|
|
|
verfasst am: 01.03.2024, 10:22
|
Registrierdatum: 22.11.2023, 07:10
Beitrge: 47355
|
|