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 —› LennStars Fragerunde

Seite: << [1] ... [9] [10] [11] [12] [13] [14] [15] 16 [17] [18] [19] .. [28] [29] >>

Autor Mitteilung
verfasst am: 01.08.2007, 22:51
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: LennStar
btw: Wann kommt denn eine Erklärung zu
tactic_api_AddButton *)
tactic_api_RemoveButton *)
Eine Demo dazu gibts im Skript AddButton unter data/scripts/missions. Die Benutzung ist recht simpel, ähnlich wie register_timed_event ;)
verfasst am: 01.08.2007, 23:07 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: LennStar

Übrigens sehe ich nicht, wie du in deinem script a) nach SKG auswählst und b)eine vernünftige Verteilung erreichen willst.
Wenn ich das einbauen würde - mit Wahrscheinlichkeitsverteilungen etc. dann wäre das script wahrscheinlich 3 Seiten lang.

Von einer veränderten Wahrscheinlichkeitsverteilung mal abgesehen, letztlich müsstest du nur folgende Zeilen in RandomUFO einbauen...

  for dummy:=0 to  UFO.Besatzung - 1 do
  begin
    Aliendummy := UFO.GetAlien(0);
    Aliendummy.Ges := round(Aliendummy.Ges * (1-(random(3-game_api_GetInteger('SKG'))/5.0)));
    Aliendummy.Reaktion :=  round(Aliendummy.Reaktion * (1-(random(3-game_api_GetInteger('SKG'))/5.0)));
    UFO.RemoveAlien(0);
    UFO.AddAlien(Aliendummy);
  end;


Natürlich musst du noch bei den Variablen Aliendummy ergänzen. Man könnte übrigens auch die ZE beeinflussen, ich glaub aber, dass hätte vielleicht nur auf die 1. Runde Auswirkungen. Müsste man mal Testen (z.B. mit ZE:=0).

Da es sich bei dir ja um geplante Landungen handelt, macht es vielleicht nicht ganz so viel Sinn, mit verletzten Aliens zu arbeiten. Wie gesagt, man kann den Wert auch erhöhen, statt ihn zu senken - dabei sollte man aber nicht übertreiben, damit der Lebenspunktebalken nicht zu lang wird.

Mag nicht die ideale Lösung sein - aber wenn man bedenkt, dass du in zukunft sowieso nochmal alles umstellen musst (wenn die Level kommen), dann wäre so eine einfache Zwischenlösung durchaus zu überlegen.
verfasst am: 02.08.2007, 13:01
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Es ist nur der Get-Befehl zum abruf nötig

Naja, aber bevor ich da je nach Stelle 10 oder mehr mal game_api_GetInteger('SKG') einsetze, mache ich das lieber einmal und weise es einer Variablen zu.
Würde es Probleme machen, wenn die Variable auch SKG heißt?
Zitat: Natter
Mag nicht die ideale Lösung sein

Das stimmt. Ich glaube, da ist extra anlegen mit kopieren und verändern im editor genauso schnell, aber wesentlich flexibler. Und von vornherein verletzten Aliens halte ich eigentlich gar nichts, auch bei Landungen. (Ist natürlich Geschmackssache)
verfasst am: 02.08.2007, 13:03
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: LennStar
Würde es Probleme machen, wenn die Variable auch SKG heißt?
Nein, dass macht keine Probleme.
verfasst am: 02.08.2007, 16:20 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: LennStar
Das stimmt. Ich glaube, da ist extra anlegen mit kopieren und verändern im editor genauso schnell, aber wesentlich flexibler.

Flexibler ja, aber genauso schnell??? Du willst mir doch nicht erzählen, dass du alle deine Alliens und UFOs genauso schnell in 3 Ausführungen und mit unterschiedlichen Werten erstellen kannst, wie du brauchen würdest, um obigen Code einmal in dein Skript einzubauen? Letzteres würde vielleicht 30 Sekunden dauern ...

Zitat: LennStar
von vornherein verletzten Aliens halte ich eigentlich gar nichts

Da du ja Landungen hast (keine Abstürze) hab ich ja darauf verwiesen, dass du die Aliens auch mit mehr ZE Ausstatten könntest - dann gäbe es keine verletzten Aliens.
verfasst am: 02.08.2007, 18:34
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: Natter
Flexibler ja, aber genauso schnell??? Du willst mir doch nicht erzählen, dass du alle deine Alliens und UFOs genauso schnell in 3 Ausführungen und mit unterschiedlichen Werten erstellen kannst, wie du brauchen würdest, um obigen Code einmal in dein Skript einzubauen? Letzteres würde vielleicht 30 Sekunden dauern ...

Ein bisschen länger schon ^^ Einmal in Random_UFO, aber das ist nicht das einzige script.

Ich hab jetzt schon 3 andere, die Bodeneinsätze erstellen, und das werden noch mehr. (und da ist es wirklich unsinnig mit verletzten Gegnern)
Der Aufwand mit SKG-Aliens im script beschränkt sich dann auf den oben benannten Einbau zweier ifs in einer unit, ein bisschen kopieren und - am aufwändigsten - die IDs aus dem editor nehmen. Damit sind die script-Bodeneinsätze erledigt. Etwas ähliches für UFOs ist auch nicht kompliziert. Ich kann dann sogar UFOs machen, die nur im schwersten Grad auftauchen.
verfasst am: 05.08.2007, 15:37
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Das einfachste wäre wohl auch eine unit mit der Definition der Konstante, die ich dann überall per uses einbinde.

Gibt es Probleme, wenn ein script die DefConst-unit einbindet, und gleichzeitig eine unit, die die auch einbindet? Denn das würde dann ja wohl bedeuten, dass zwei Mal eine gleichnamige Konstante angelegt wird - ob die den gleichen Wert haben dürfte das Programm nicht interessieren *g*
verfasst am: 05.08.2007, 21:32
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
Gibt es Probleme, wenn ein script die DefConst-unit einbindet, und gleichzeitig eine unit, die die auch einbindet?

Ja, gibt es - deshalb musste ich die (verketteten) Units im GalWar auch etwas indirekt aufbauen und man sieht nicht sofort, wo welche unit eingebunden wird.
Das ist auch einer der Gründe, weshalb ich die KI über den Aufruf eines externen Skriptes starte und dieses Übergabekonstrukt benutze. Es gibt noch ein paar andere Gründe und insgesamt ist der Ansatz deutlich besser, aber man kann keine Konstanten doppelt definieren.
(Oder zumindest konnte man das damals nicht, dadurch das mehrere Leute Programmieren haben wir alle schon Ergänzungen von anderen verpasst)
verfasst am: 06.08.2007, 16:24
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Bevor da was nicht stimmt: Reicht das so, damit ich SKG überall habe, wo ich die unit einbinde?

unit DefConst;
const
SKG='game_api_GetInteger(SKG)';
end.

Also dass ich dann z.b. alienzahl:= 6+SKG; schreiben kann.
verfasst am: 06.08.2007, 16:40
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
SKG='game_api_GetInteger(SKG)';

Diese Sequenz ist absoluter Quatsch.

game_api_GetInteger ist ein Befehl, der ausgeführt werden muss - mit der Sequenz oben definierst Du eine Textkonstante, die immer den Text 'game_api_ usw zurückliefert.
verfasst am: 06.08.2007, 16:42
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: LennStar
unit DefConst;
const
SKG='game_api_GetInteger(SKG)';
end.

Nein, du hättest dann einfach eine Konstante mit dem Text game_api_GetInteger(SKG) und das willst du bestimmt nicht.

Was allerdings möglich sein sollte:

unit DefConst;

var
  SKG: Integer;

begin
  SKG:=game_api_GetInteger('SKG');
end.


Der Begin..end. Block einer Unit wird auch immer beim Start ausgeführt. Allerdings sollte man mit der Verwendung sehr sehr vorsichtig sein. Auf jeden Fall wird dieser Block ausgeführt, bevor der Block im Hauptscript mit MissionName und MissionType ausgeführt wird. Ich möchte auch nicht wirklich viel dazu schreiben, da, wie gesagt, im Moment diese Sache nicht offiziel unterstützt wird. Ich kann auch nicht sagen, wie X-Force auf Laufzeit-Fehler dort in diesem Abschnitt reagiert. Von daher nicht zu viel darein packen ;)

Allerdings sollte genau das klappen, was du dir wünscht. Dass du die Unit einfach einbindest und dann die Variablen aus den SKG-Einstellungen direkt verwendet werden können. Garantieren kann ich für nichts ;) Aber einen Versuch ist es Wert.
verfasst am: 06.08.2007, 16:47 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: Jim_Raynor
Nein, du hättest dann einfach eine Konstante mit dem Text game_api_GetInteger(SKG) und das willst du bestimmt nicht.

Entweder hab ich mich dann vertippt, oder X-scipt macht direkte Zuweisungen nicht mit. Ich hab nämlich, als ohne ' eine Fehlermeldung kam, const SKG = 5; ausprobiert, und das ging auch nicht.
Zitat: Jim_Raynor
Von daher nicht zu viel darein packen ;)

Ich hab bis jetzt nicht vor, mehr reinzupacken ;)


---------------

nach dem begin...end unter if steht doch kein ; richtig? Der editor setzt da aber eines hin bei enter. Falls sich das abstellen lässt, wär das vllt. was fürs Mantis.
verfasst am: 06.08.2007, 17:33
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
Entweder hab ich mich dann vertippt, oder X-scipt macht direkte Zuweisungen nicht mit.

Weder - noch.

Eine Konstante wird vor dem Spiel definiert und ändert sich danach nie wieder. Deshalb ist es auch nicht möglich einen Funktionswert in einer Konstante zu speichern - ganz abgesehen davon das das auch keinen Sinn macht:
Der Schwierigkeitsgrad wird ja erst NACH Spielstert festgelegt, also NACHDEM die Konstanten festgelegt wurden.

Du kannst keine Variable des Spiels an eine Konstante zuweisen...
Zitat: LennStar
nach dem begin...end unter if steht doch kein ; richtig? Der editor setzt da aber eines hin bei enter. Falls sich das abstellen lässt, wär das vllt. was fürs Mantis.

Blos nicht!!!
Dort darf kein ; stehen, aber dieses automatische ; bei den anderen End; wegzunehmen würde noch mehr Probleme verursachen. Jim hat nicht von ungefähr gesagt das Du da massiv aufpassen sollst.
Das ist vergleichbar mit dem schmalen Rand auf der anderen Seite des Zauns bei den Niagara-Fällen. Du kannst dort auf eigenes Risiko was ausprobieren, aber zu verlangen das der Zaun für alle anderen weggenommen wird, damit Du da nicht mehr drüber steigen musst...
;-)
verfasst am: 06.08.2007, 17:51
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Schau wie es in meinem Skript aussieht. Das letzte End wird mit einem Punkt abgeschlossen. Ich frage mich nur gerade welches if du meinst ...
verfasst am: 06.08.2007, 18:37 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: Jim_Raynor
Ich frage mich nur gerade welches if du meinst ...

ganz allgemein if X then
begin
xyz
end <-

An dieser Stelle. Die Automatik macht da ein ; hin, was falsch ist. Deshalb habe ich gefragt, WENN ES MACHBAR IST, das zu ändern - natürlich nur an dieser Stelle.

------------------

Ich hab jetzt ein kleines Problem mit der uses.
Wenn ich in den Ausgangsscripten

uses DefConst, Aliens_Active;

eingebe, dann ist für den editor in Aliens_Active SKG nicht vorhanden. (unknown identifier)
Wenn ich in Aliens_Active noch das uses DefConst reinsetze, gehts durch. Nach DirkF sollte das aber nicht funktionieren. (siehe 05.08.2007, 15:37 f)
verfasst am: 06.08.2007, 19:26
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: LennStar
Wenn ich in Aliens_Active noch das uses DefConst reinsetze, gehts durch. Nach DirkF sollte das aber nicht funktionieren. (siehe 05.08.2007, 15:37 f)
Na, es geht schon. Es wird allerdings problematisch, wenn sich die Units gegenseitig einbinden. Also du hast drei Units A, B und C. Wenn jetzt in A B benutzt wird , B widerrum zieht C ein und C zieht A ein, dann wirst du ein Problem bekommen. Allerdings wenn du überall uses DefConst machst und DefConst selbst keine weitere Units einbindet, dann sollte es keine Probleme geben.
verfasst am: 06.08.2007, 19:48
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
ganz allgemein if X then
begin
xyz
end <-

An dieser Stelle. Die Automatik macht da ein ; hin, was falsch ist.

An diese Stelle gehört sehr wohl ein ; - wenn der Befehl dadurch abgeschlossen wird.
Nur in dem Fall, indem ein else folgt (Der Befehl also noch weitergeht) ist das ; ein Fehler.

Und deshalb darf man das auch nicht so ohne weiteres im Editor ändern - es ist die Pflicht des Skripters so etwas zu sehen und zu korrigieren, denn der Editor kann die jeweilige Konstruktion nicht komplett analysieren, er ist voreingestellt auf den Standard.
Und Standardmäßig folgt auf 90% aller end ein ; (und muss da stehen).

Zitat: LennStar
Nach DirkF sollte das aber nicht funktionieren. (siehe 05.08.2007, 15:37 f)

Es funktioniert in einigen Fällen, macht aber in anderen Probleme - ich musste im UKI einiges Umstellen mit den Units bis alles so lief wie es sollte.

Zu erklären wo das funktioniert und wo nicht, dazu braucht man aber ein paar Grundlagen über Programmierung. Und so leid es mir tut das sagen zu müssen: Die Geschichte mit dem const oben zeigt, das Dir noch einige der elementarsten Grundlagen zur Programmierung fehlen.

Denn die '' haben im Skript nur eine einzige Funktion: Sie verwandeln alles dazwischen in einen funktionslosen Text. Dies zählt zu den elementarsten Eigenschaften die man bei Datentypen lernen kann.
Und Du bist vorgegangen nach der Methode "Mal gucken wie man die Fehlermeldung loswird - Prima, wenn ich jegliche Funktionalität zerstöre dann gibt es keine Fehlermeldung mehr, also muss das die richtige Lösung sein".
Wenn es keine Funktionalität mehr gibt, dann gibt es natürlich auch keine Fehlermeldungen mehr. Die Vorgehensweise war nur nach dem Motto "Da brennt eine Warnlampe am Auto - gut, schlagen wird den Motor mit dem Vorschlaghammer kreuz und klein - die Warnlampe ist aus - Prima, das Auto fährt wieder..."

Ich würde Dir dringend empfehlen, vorübergehend mit den Arbeiten am Spielsatz-Skript aufzuhören und erstmal die in den letzten Wochen neu hinzugekommenen und überarbeiteten Kapitel des XSkript-Tutorials komplett durchzuarbeiten.
Das mag vielleicht einiges an Arbeit sein, aber Du würdest Dir in Zukunft jede Menge unnützer Fehlersuchen in Deinem Spielsatzskript ersparen...

Sei über den Kommentar nicht böse - aber man kann zwar Zelte und Holzhütten ohne Fundament errichten, aber bei Mehrfamilienhäusern und Wolkenkratzern geht das nicht. Und Deine Skriptplanung hat die Holzhütte schon überholt.
Momentan versuchst Du das Mehrfamilienhaus auf Treibsand zu bauen und holst Dir immer wieder die Info von uns, wo Du einen weiteren Stützbalken von außen dagegen nageln musst - aber irgendwann ist kein Platz mehr für weitere Stützbalken, und dann wird das Haus im Treibsand versinken wenn Du es zu vergrößern versuchst...
verfasst am: 07.08.2007, 08:10 · Edited by: Jim_Raynor
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Schaue dir auch bitte Anhang B des Tutorials an. Dort sind Tutorials von Delphi-Source übernommen, und an X-Skript angepasst.

Zum Thema If gibt es auch ein eigenes Kapitel: XSkriptTutorial.Verzweigungen.
verfasst am: 07.08.2007, 15:10 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zufällig zum Thema:

Ich hab kein Bsp gesehen mit if (irgendwas) then
immer nur if irgendwas then

Was ist der Unterschied? Kann nämlich sein, dass mich die Automatik (die Klammern setzt) da wieder in die Irre geführt hat.
verfasst am: 07.08.2007, 15:19
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Schau dir mal bitte:

XSkriptTutorial.Bedingungen

an und sag mir dann, ob es klar wird. Wenn nicht werde ich versuchen noch etwas dazu schreiben.

Seite: << [1] ... [9] [10] [11] [12] [13] [14] [15] 16 [17] [18] [19] .. [28] [29] >>




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

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