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: kein Gast, xanbank

 X-Force - Fight For Destiny - Forum —› X-Skript / Developer-Pack —› Scripthilfe

Seite: 1 [2] >>

Autor Mitteilung
verfasst am: 30.07.2006, 10:56 · Edited by: Cheater
Registrierdatum: 05.05.2006, 20:33

 Beiträge: 82
Ich habe ein kleines Scriptproblem:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

program Geldgeber;

const
Message1 = 'TextA';
Message2 = 'TextB';

var
CreditsGet : Int64;

type
CreditsGetType = (kbFiU);

procedure StartMission;
begin
CreditsGet:=(x);
game_api_MessageBox(Message1);
game_api_MessageBox(Message2);
savegame_api_FreeCredits(CreditsGet,CreditsGetType''');
Mission_win;
end;

begin
MissionName:= 'Wenig Geld';
MissionType:= mzUser;
end.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Wenn ich zwischen CG und CGT ein Semikolon stelle, will er ein Komma, mit Komma gibt es bei CGT ein 'Type mismatch' (bei `'''´). Warum?

Vllt hab ich CGT kein Type zugewiesen (TKapital). Wenn das das Problem ist dann mir bitte sagen wie's richtig sein soll.

Oder definiert man die Typen wie Variablen 'im Script selber'?

Oder vllt mach ich was komplett anderes falsch?...

(CG = CreditsGet)
(CGT = CreditsGetType)

Bitte schnellstmöglich antworten!
verfasst am: 30.07.2006, 13:08
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
TKapital hat vordefinierter Werte. Eine Liste dazu findet sich im Wiki.

Wenn das noch nicht reicht, meld dich nochmal.
verfasst am: 30.07.2006, 15:03
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Ich verstehe ehrlich gesagt einen Teil Deiner Syntax nicht - was genau sollen die ''' bei CGT überhaupt bewirken, und wie ergibt CG:=(x); überhaupt einen Wert für CG, denn X ist nirgendwo definiert?

Davon abgesehen müssen die Variablen beim Aufruf immer mit Komma getrennt werden und bei einer Funktionsdefinition (hast Du nicht) immer mit Semikolon, alles andere erzeugt Fehler.

Davon Abgesehen hat Natter recht - die Funktion erwartet als zweites Argument eine Werteübergabe einer Variable vom Typ TKapital, und das ist eine Aufzählungsvariable mit fest vorgegebenen Aufzählungswerten. Alle anderen Sachen werden nicht angenommen, sondern erzeugen den Type Mismatch - schließlich legt dieser Wert ja fest, in welcher Zeile der Statistik die Creditzahl verbucht wird, und man kann keine im Programm nicht existenten Werte erfinden.


Ein korrekter Funktionsaufruf wäre z.B.:

savegame_api_FreeCredits(100000,kbFiU);
verfasst am: 30.07.2006, 15:11
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: Cheater
Oder definiert man die Typen wie Variablen 'im Script selber'?

Ich weiß nicht ob wir von demselben sprechen wenn wir Typen sagen. Ein Typ ist ein Variablentyp, d.h. er ist im Programm nur sinnvoll wenn danach auch eine Variable des neuen Typs definiert und benutzt wird - eine Typdefinition hinter den Variablendefinitionen ist also sowieso witzlos.

Eine Typdefinition brauchst Du im gesamten oberen Skript nicht, die macht dort einfach keinen Sinn. Du brauchst lediglich Variablendefinitionen nach dem Motto

var
dummy1 : Integer;
dummy2 : TKapital;

Wofür willst Du dabei eine Typdefinition, also die Erzeugung einer neuen Variablenform überhaupt vornehmen?
Alle offiziellen Funktionen verwenden nur vordefinierte Variablentypen. Eine neue Typdefinition bringt also meistens (es gibt Ausnahmen wie z.B. Record-Typen) nur etwas wenn Du auch Funktionen definierst, die auf diese neuen Variablentypen zurückgreifen, aber in dem Skript oben ist keine Funktionsdefinition.
verfasst am: 30.07.2006, 15:42
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Hmm? Hast du das Skript nachträglich nochmal verändert, oder hab ich das so schnell überflogen, dass mir die von DirkF angesprochenen Punkte nicht aufgefallen sind? Naja, wie dem auch sei, da es in deinem Skript doch größere Probleme zu geben scheint, hier mal eine (hoffentlich) funktionierende Variante:
program Geldgeber;

const
Credits = 1000;
Message1 = 'TextA';
Message2 = 'TextB';

var
CreditsGet : Int64;

procedure StartMission;
begin
CreditsGet := Credits;
game_api_MessageBox(Message1);
game_api_MessageBox(Message2);
savegame_api_FreeCredits(CreditsGet,kbFiU);
Mission_win;
end;

begin
MissionName:= 'Wenig Geld';
MissionType:= mzUser;
end.

verfasst am: 30.07.2006, 19:44 · Edited by: Cheater
Registrierdatum: 05.05.2006, 20:33

 Beiträge: 82
Credits = 1000;

ist unnötig, man kann Variablen im Script Zahlen zuweisen.

Aber danke :)

Mir dreht sich der Kopf von dem ganzen hier <.<

program Geldgeber;

const
Message1 = 'TextA';
Message2 = 'TextB';

var
CreditsGet : Integer;

procedure StartMission;
begin
CreditsGet:=(x);
game_api_MessageBox(Message1);
game_api_MessageBox(Message2);
savegame_api_FreeCredits(CreditsGet,kbFiU);
end;

begin
MissionName:= 'Wenig Geld';
MissionType:= mzUser;
end.


funktioniert.

Ich brauch anscheinend keine Variable TKapital zu definieren.

Ah und noch eine Frage ^^

Bewirkt savegame_api_FreeCredits das man Geld kriegt? ^^
In der Doku (Wiki?) stand nichts.

Und noch eine:

Wie definiert man globale Variablen?

@DirkF

(x) ist ein Placeholder. `'''´ auch. Was letztere betrifft, hast du das da drunter gelesen? Da steht nämlich das am Platz von ''' ein Type mismatch ist.
verfasst am: 30.07.2006, 20:13
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: Cheater
Ich brauch anscheinend keine Variable TKapital zu definieren.

Du brauchste eine Variable genau dann, wenn eine Funktion mit unterschiedlichen Werten aufgerufen werden soll oder unterschiedliche Werte gespeichert werden sollen.

Andernfalls kann man eine Funktion auch direkt mit einem gültigen Wert aufrufen - und in diesem Fall ist kbFiU ein solcher Wert, genauso wie 1000 ein Wert ist.


Zitat: Cheater
Bewirkt savegame_api_FreeCredits das man Geld kriegt? ^^
In der Doku (Wiki?) stand nichts.

FreeCredits verändert den Geldbetrag um den angegebenen Wert, deshalb kann man in TKapital als Buchungswert ja auch Kostenwerte angeben.
Die Referenz im Wiki ist automatisch generiert und in vielen Punkten noch unvollständig - lohnt sich imho auch nicht da viel zu ergänzen, solange XScript noch nicht vollständig ist (einige Befehle sind schon gestrichen worden, und es fehlen noch viele)
Zitat: Cheater
(x) ist ein Placeholder. `'''´ auch. Was letztere betrifft, hast du das da drunter gelesen? Da steht nämlich das am Platz von ''' ein Type mismatch ist.

Das sollte dann aber markiert/erwähnt werden. Vor allen Dingen auch einheitlich - denn beides hat im XScript auch Funktionen, und deshalb habe ich gerätselt was das da soll.

Der Type-Mismatch ist nur normal, wie Natter schon sagte. CGT ist eine Variable deren Typ ungleich TKapital war, und damit produzierte das einen Typ Mismatch. Genau genommen wurde CGT nirgendwo definiert, lediglich in einer ungültigen Typdefinition erwähnt.
Zitat: Cheater
Wie definiert man globale Variablen?

Es gibt zwölf Befehle für den Zugriff auf globale Variablen. Für jeden der 4 Variablentypen jeweils ein Register, Set und Get-Befehl.
Sie stehen in der Referenz unter Game_api_...
verfasst am: 31.07.2006, 11:08 · Edited by: Cheater
Registrierdatum: 05.05.2006, 20:33

 Beiträge: 82
k, thx (5 Zeichen!).

Was macht 'Register'? (Set erstellt höchstwahrscheinlich eine, Get speichert den Wert aus einer oder so)
verfasst am: 31.07.2006, 12:19
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Genau das was es sagt - es registriert die Variable für die zukünftige Verwendung, auf eine nicht registrierte Variable kann man auch nicht zugreifen...

Und SET erstellt keine Variable, sondern setzt den Wert der Variablen, während GET den Wert abruft und ausliest...
verfasst am: 31.07.2006, 12:58
Registrierdatum: 05.05.2006, 20:33

 Beiträge: 82
Aso danke.

Nächste Frage:

Was will 'science_api_ActivateProjekt()' für Parameter haben?
verfasst am: 31.07.2006, 13:24
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Die ID des Projektes. Bei mir jedenfalls funktionierts damit.
verfasst am: 31.07.2006, 13:37 · Edited by: Cheater
Registrierdatum: 05.05.2006, 20:33

 Beiträge: 82
Bei mir nicht. :(
Er sagt dann Indentifier expected :(

Ah... funktioniert.



was ist hier falsch?

UFO.SetPosition(20,52)
verfasst am: 31.07.2006, 18:46 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: Cheater
Credits = 1000;

ist unnötig, man kann Variablen im Script Zahlen zuweisen.

Ja, und wenn du den zugewiesenen Creditwert von anderen Faktoren abhägig machen willst (z.B. Abfrage an Spieler bei einem Kredit) mag das auch sinnvoll sein. Wenn aber immer ein fixer Wert verwendet werden soll, dann ist eine Konstante besser geeignet, denn mit einer Konstanten ist ein Skript besser zu warten. Ohne Konstanten musst du immer erst im Skript die richtige(n) Stelle(n) suchen, mit Konstanten brauchst du nur den Kopf des Skriptes anpassen. Vor allem wenn du dann mehrere Werte hast (z.B. Credit, Zinsen und Laufzeit), ist das eine erhebliche Erleichterung.

Zitat: Cheater
was ist hier falsch?

UFO.SetPosition(20,52)

Was kommt denn für eine Fehlermeldung?
verfasst am: 31.07.2006, 19:04 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: Cheater
was ist hier falsch?

UFO.SetPosition(20,52)

Veralteter Befehl

Wenn Du ins Wiki bei TUFO schaust, wirst Du feststellen das es die Methode SetPosition nicht mehr gibt, sondern nur noch die Eigenschaft Position.

Korrekt ist also:

var
pos:TFloatPoint;
UFO:TUFO;

function XYZ;
begin
<schnipp>
  pos.x:=20;
  pos.y:=52;
  UFO.Position:=pos;
<schnipp>
end;


(oder auch UFO.Position.X:=20; etc. wenn men die Syntax direkt aufruft)
verfasst am: 31.07.2006, 19:05 · Edited by: Cheater
Registrierdatum: 05.05.2006, 20:33

 Beiträge: 82
O_o Aber trotzdem Danke!

Mist! register_ufo_shootdown gibts auch nicht mehr!

Gibts dazu auch eine alternative?
verfasst am: 31.07.2006, 20:48 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
@Cheater:
Wenn Du noch nicht mitbekommen hast das das gesamte Event-System umgestellt wurde, dann würde ich an Deiner Stelle erstmal das folgende Unterforum komplett (fast jeden Text, gibt nur wenige dies sich nicht mit den Neuerungen beschäftigen) lesen:

http://www.xforce-online.de/forum/index.php?action=vtopic&forum=29

Dort werden die wesentlichen Neuerungen der 910 erläutert, da sind noch mehr Befehle komplett umgestellt worden.
Und gerade die Umstellung des Schadensmodells mit der Alpha-4 hat für eine Menge Überraschungen gesorgt...
verfasst am: 01.08.2006, 13:30 · Edited by: Cheater
Registrierdatum: 05.05.2006, 20:33

 Beiträge: 82
Noch eine Frage... wie kann ich ein bestimmtes UFO spawnen?

Ah und ich habe ein Problem mit dem dritten Parameter von 'register_event(@name, objekt, TEventID)'. Was zur Hölle soll ich bei TEventID reinstellen wenn ich onufoshootdown haben möchte?
verfasst am: 01.08.2006, 14:51
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
verfasst am: 01.08.2006, 17:18
Registrierdatum: 05.05.2006, 20:33

 Beiträge: 82
Zu 2:
Hab ich gelesen! Ich weiss nur nicht WIE ich den Parameter eingeben soll!

zu 1:
Danke!
verfasst am: 01.08.2006, 18:16 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: Cheater
Hab ich gelesen! Ich weiss nur nicht WIE ich den Parameter eingeben soll!

Einfach eintippen/abschreiben - schau Dir doch die UKI-Scripte in der ersten Demo des galaktischen Krieges zur 0.910 ein, die benutzen das neue Event-System um eine komplette UFO-KI zu skripten...

also z.B.

register_event(@UKIShootDown, UFO, EVENT_ONUFOSHOOTDOWN);


Es gibt übrigens zu allen neuen Befehlen Demoskripte im Missionsordner von XForce, schau Dir die doch als Beispiele an...

Seite: 1 [2] >>




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

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