Seite: 1 [2] >> |
Autor |
Mitteilung |
|
verfasst am: 06.10.2011, 12:20
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
Hallo zusammen,
hab mich mal etwas ans mapcreating gemacht und mir die dazugehörigen themen im forum durchgelesen.
allerdings kommt es immer zu einer fehlermeldung, dass eventuell ein kartenscript fehlt. Maperstellung gescheitert und so,
im quellcode zeile 522...
Ich habe im prinzip die anweisung im thema kartenscript befolgt, aber irgendwie komm ich nicht ins grüne...
Die map wird im Spiel aufgerufen, hab das auch verlinkt mit der kartenressource und dem tileset,
das script hab ich im mapeditor angepasst, und mir is da was aufgefallen.
bei der beispielmap, die 45x45 felder:
im script steht calculate map size mit 45;45
im forum aber die anzahl der räume, also 3;2 (zB.)
wo kann denn der fehler noch liegen?
GreeZ.ALK |
|
verfasst am: 06.10.2011, 12:38
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Die Kartenskripte sind vor kurzem geändert worden, insbesondere gibt es keine "Räume" mehr bei den Koordinaten.
Ich vermute mal, dass Du einen Forum-Eintrag gefunden hast, der sich noch auf die älteren Karten bezieht, aber ohne Links und ohne Skript/Details kann man Dir schlecht bei der Fehlersuche helfen.
Bitte poste mal Dein Skript und sage, was genau Du gemacht hast. |
|
verfasst am: 06.10.2011, 12:42
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
siehe da, hab gerade den Fehler gefunden ;)
hab folgendes gemacht:
nachdem ich das Script ja immer schritt für schritt geändert hab, um zu probieren wo der fehler liegt, hab ich die karte ja auch immer verändert...
--> ressource ersetzen hat das schonmal behoben.
wie du sagst gibt es die räume nicht mehr, sondern die felder
als als calculate mapsize die absolute kartengröße eintragen und halt nicht die räume.
nun funktionierts ;)
GreeZ.ALK |
|
verfasst am: 18.10.2011, 14:49
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
Hallo mal wieder,
ich bin grad dabei viele verschiedene Karten zu kreieren udn hab da ein technisches Problem.
ich habe vor, mir eine Grundkarte zu basteln, welche nach Zufallsgenerator die Räume auf der Karte aufteilt.
Zusätzlich habe ich noch eine Grundplatte, welche mir als "Vorlage" dient.
Hier mein Code:
// Ausgangssituation:
// Ich habe eine Baseplate (Basis) und eine Anzahl an Räumen (Raum1, Raum2,...
// Die Koordinaten auf der Baseplate sind fixiert, sodass nur dort die Räume eingefügt werden
// Per Zufallsgenerator soll ein Raum aus der Auswahl auf die erste Koordinate gelegt werden
// Dann die zweite...
// solange ausführen bis die Karte gefüllt ist.
// Es kann ein Raum mehrmals aufgerufen werden, oder auch gar nicht.
program Kartenscript;
Var
i : integer; // Laufvariable
Rooms : integer; // Anzahl der maximalen Räume auf der Karte
Auswahl : integer; // Anzahl der projektierten, verfügbaren Räume
zufall : integer; // Zufallszahl für Auswahl
index : TStringarray; // Feld für Zuordnung
procedure GenerateMap;
begin
Rooms := 4; // Festlegung der Raumanzahl auf der Karte
index[Rooms] := '0'; // Feldlänge auf die maximal verwendeten Räume begrenzen, ist das nötig?
for i:=0 to Rooms-1 do
begin
zufall := random((Auswahl-1)+1);
case zufall of
1: begin index[i] := 'Raum1';end;
2: begin index[i] := 'Raum2';end;
3: begin index[i] := 'Raum3';end;
4: begin index[i] := 'Raum4';end;
end;
end;
CopyRoomToPos(0,0,'Basis');
CopyRoomToPos(0,0,index[0]);
CopyRoomToPos(27,0,index[1]);
CopyRoomToPos(0,27,index[2]);
CopyRoomToPos(27,27,index[3]);
end;
begin
end.
Ich bekomme eine Fehlermeldung bzgl Bereichsprüfung..
was habe ich hier falsch gemacht?
GreeZ.ALK |
|
verfasst am: 18.10.2011, 18:09 · Edited by: DirkF
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Bitte die Fehlermeldung posten, damit man weiß welche Variable das Problem bereitet und in welcher Zeile es liegt.
Auf jeden Fall fehlen die Array-Definitionen (Pascal erfordert genaue Festlegungen, die darf man nicht wie z.B. bei C unterschlagen). |
|
verfasst am: 18.10.2011, 20:23
|
Spielsatz Alliances
Registrierdatum: 14.07.2004, 14:47
Beiträge: 1185
|
index : TStringarray;
Ist doch da?
(Und Deklarationen kann man auch in C nicht unterschlagen - im Gegenteil, da ist die Größe entweder konstant oder du kriegst nichtmal ein Array, sondern nur einen Zeiger. Dagegen ist X-Script echter Luxus - dynamische Arrays, die sich sogar an ihre Größe erinnern.) |
|
verfasst am: 18.10.2011, 20:58
|
Programmierer, allgemeines
Registrierdatum: 06.06.2004, 17:19
Beiträge: 3186
|
Deklaration ist nicht gleich Definition. Anders gesagt, man muss die Länge von index[] festlegen, bevor man auf einzelne Elemente des Arrays zugreift. |
|
verfasst am: 18.10.2011, 22:34
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Zitat: Natter Deklaration ist nicht gleich Definition. Anders gesagt, man muss die Länge von index[] festlegen, bevor man auf einzelne Elemente des Arrays zugreift.
Und hier im Tutorial steht, wie das bei PascalScript und XSkript funktioniert (etwas tiefer, zuerst konstante und dann dynamische Arrays):
XSkriptTutorial.KomplexeDatentypen |
|
verfasst am: 19.10.2011, 06:47 · Edited by: ALKOHOL
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
Fehler bei Bereichsprüfung.
mehr bekomm ich nicht als Fehlermeldung.
@Natter, die Länge des feldes hab ich doch festgelegt:
index[Rooms] := '0'; // Feldlänge auf die maximal verwendeten Räume begrenzen, ist das nötig?
oder sollte das VOR der prozedur schon sein? |
|
verfasst am: 19.10.2011, 08:28 · Edited by: DirkF
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Zitat: ALKOHOL die Länge des feldes hab ich doch festgelegt:
nein, das ist keine Längenfestlegung, die hat bei Pascal/Delphi ein anderes Format.
Deshalb hatte ich ja den Link auf die Wiki-Seiten gegeben, in denen die richtige Formatierung steht.
Bei dynamischen Arrays musst Du einen zusätzlichen speziellen Befehl im Code einsetzen, bei statischen Arrays muss dies in der Deklaration stehen und nicht im Befehlcode.
Index[Rooms] ist übrigens immer ein Zugriff auf ein Element des Index, das ist niemals eine Definition der Arraygröße weil es dafür die falsche Syntax hat. |
|
verfasst am: 19.10.2011, 08:59
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
du willst mir sagen ich sollte
index : array [0..3] of string;
unter den variablen nehmen?
hab den link studiert, bzw den inhalt um genau zu sein, aber irgendwie will es auch so nicht...
oder wie müsste das nun aussehen?
mir fehlt echt der plan für so was einfaches...
GreeZ.ALK |
|
verfasst am: 19.10.2011, 09:46
|
Registrierdatum: 22.08.2008, 15:51
Beiträge: 403
|
Also ich find, du machst dir das Leben unnötig schwer, außerdem hab ich einen Logikfehler gefunden.
Zum Logikfehler:
zufall := random((Auswahl-1)+1);
random liefert eine Zahl zwischen 0 und N-1 zurück. Bei Auswahl=4, hättest du mit der Zeile Ergbnisse von 1, 2, und drei, das -1 im Random ist also unnötig.
Wie du dir das Leben verinfachen kannst:
Die Raumnamen sind schon statisch, die brauchst du nicht dynamisch erstellen, ich empfehle dir folgendes (hab ich auch bei all meinen Maps so gemacht, außerdem schnid ich mal deine Kommentare weg damit ich das hier besser lesen kann):
program Kartenscript;
Var
Rooms : integer;
procedure GenerateMap;
begin
Rooms := 4;
CopyRoomToPos(0,0,'Basis');
CopyRoomToPos(0,0,'Raum' + inttostr(random(Rooms) + 1));
CopyRoomToPos(27,0,'Raum' + inttostr(random(Rooms) + 1));
CopyRoomToPos(0,27,'Raum' + inttostr(random(Rooms) + 1));
CopyRoomToPos(27,27,'Raum' + inttostr(random(Rooms) + 1));
end;
begin
end.
|
|
verfasst am: 19.10.2011, 09:58
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
hmm, ich verstehe was du mir sagen willst,
du lässt einfach die ziffer hinten durchlaufen...
ich habs grad getestet, udn bekomm immer noch die selbe fehlermeldung.
"Fehler bei Bereichsprüfung"
sagt mir leider nicht wo und wann -.- |
|
verfasst am: 19.10.2011, 09:59
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Zitat: ALKOHOL du willst mir sagen ich sollte
index : array [0..3] of string;
unter den variablen nehmen?
Das erzeugt einen statischen Array (=feste Anzahl von Elementen) und kann verwendet werden, wenn es nie mehr als 4 Räume auf der Karte geben soll.
Wenn Du die Raumanzahl der Karte variabel halten willst, dann musst Du den Befehl SetLength bzw. die äquivalenten Befehle benutzen. |
|
verfasst am: 19.10.2011, 10:10
|
Registrierdatum: 22.08.2008, 15:51
Beiträge: 403
|
Ich bin ein Hirsch, die Funktion
procedure CalculateMapSize(Units : Integer);
begin
MapWidth := 50;
MapHeight := 50;
end;
fehlt, musst du halt auf deine größe anpassen. |
|
verfasst am: 19.10.2011, 10:16
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
Jo genau das hab ich grad noch eingefügt ;)
nur halt mit 45x45 weil das meine grundplatte ist.
Aber naja, aus fehlern lernt man, und nun funktioniert es auch.
Hab auch schon einige maps fertig, welche halt nur 1 raum pro karte haben.
denke nun weiß ich so ziemlich alles von mapcreating was ich wissen muss...
noch ne frage nebenbei, weiß jemand, welche animationen zur verfügung stehen?
hab mal durchprobiert mit den Robots, aber Robot_2 und 3 funktioniert irgendwie nicht, obwohl ich da mal was gelesen habe...
gibtz da ne übersicht?
GreeZ.ALK udn danke für den support ;) |
|
verfasst am: 25.01.2022, 08:41
|
Registrierdatum: 08.01.2022, 13:55
Beiträge: 142
|
|
|
verfasst am: 25.01.2022, 08:41
|
Registrierdatum: 08.01.2022, 13:55
Beiträge: 142
|
|
|
verfasst am: 25.01.2022, 08:42
|
Registrierdatum: 08.01.2022, 13:55
Beiträge: 142
|
|
|
verfasst am: 04.03.2022, 12:02
|
Registrierdatum: 27.01.2022, 13:07
Beiträge: 318
|
|
Seite: 1 [2] >> |