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 —› X-Skript / Developer-Pack —› HILFE

Autor Mitteilung
verfasst am: 30.07.2010, 16:04
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 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 erklären, 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 möchte ist die Auswahl eines Items, das eine gewisse Gesellschaft anbietet. Es sollte eine zufällige Gesellschaft (company in wiCompanies) ausgewählt werden, die ein bestimmtes Sortiment hat (item_type, zB. Muni, Panzerungen). In diesem Sortiment befinden sich die jeweiligen Item.IDs.

Grob sähe 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

 Beiträge: 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 gefüllt 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 müsstest du außerdem folgendermaßen 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 Anläufe 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

 Beiträge: 1185
Ist ein dreidimensionales Array: Array of Array of Array of LongInt;

Und drei Daumen hoch für Records - dieses Skript ist ein echtes Chaos, um nicht Saustall zu sagen - und ich fürchte, die anderen sehen ähnlich aus. Ich könnte da beim besten Willen nicht durchsteigen, geschweige denn was hinzufügen oder nicht funktionierendes debuggen...
verfasst am: 30.07.2010, 19:01
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
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

 Beiträge: 658
Zitat: Kreks
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:

Da liegt der Hund begraben. Seit ich das letzte mal hier aktiv war, hieß es, man könne 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 müsste. Ich werde mir diese Records auf jeden Fall näher 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

 Beiträge: 1185
Eigene Klassen kann man immer noch nicht erstellen (liegt auch nicht in den Händen des Teams). Records gingen aber schon immer?
verfasst am: 30.07.2010, 19:10 · Edited by: BlackBetty
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
@Dirk
Das Problem mit den editor Warnungen ist, dass ich dafür 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 hätte alle Variablen in eine Unit Packen müssen... 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

 Beiträge: 1185
Globale Variablen, besonders in Units, sind aber ganz phöse ;-)
verfasst am: 30.07.2010, 19:38
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Ich versuche die meisten Globalen Variablen in den nächsten Versionen meines Spielsatzes so gut wie möglich abzubauen. :D
verfasst am: 30.07.2010, 21:29
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
@betty:
Sobald Du ein Skript aus dem Spielsatzeditor öffnest, werden alle Skripte in ein temporäres 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 temporäre Verzeichnis wechseln.
4.) Strg-A um alle dateien zu markieren, dann öffnen klicken.
5.) Alle Spielsatzskripte sind jetzt offen und können editiert werden
6.) Alles Speichern, Skripteditor beenden, im Spielsatzeditor geht ein Fenster auf "Folgende Skripte wurden auch verändert", einfach alle auswählen und alle Änderungen in den Spielsatz übernehmen.

Alternativ rechts im Skripteditor das Projektfenster öffnen, oben auf Projekt hinzufügen (oder so ähnlich, hab das Programm gerade nicht offen) klicken und dann den eigenen Spielsatz auswählen. Dann werden rechts alle Skripte im Spielsatz angezeigt und können jederzeit mit einem Klick einzeln geöffnet werden.



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

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