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] [2] [3] [4] [5] [6] 7 [8] [9] [10] .. [17] [18] >>

Autor Mitteilung
verfasst am: 24.06.2007, 17:09
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
Wenn ein Bodeinsatz erzeugt wird, wird der automatisch als entdeckt gezählt?
Weil wenn ein unentdecktes UFO landet, und dadurch dann entdeckt wird, ist das Murks.

Bodeneinsätze sind immer sichtbar, es gibt keine Möglichkeit unsichtbarer Bodeneinsätze. Das hängt noch damit zusammen das die früher nur aus UFO-Abschüssen kamen.

Ich bin mir aber auch nicht sicher, ob es sinnvoll ist unsichtbare Bodeneinsätze zu ermöglichen - wenn die ja sowieso gescriptet werden, dann wäre es besser das platzierende Skript erst dann aufzurufen wenn der Bodeneinsatz tatsächlich sinnvoll ist.

Für eine verborgene Alien-Basis wäre das was anderes, aber die darf auch nicht automatisch beim Flug eines Radarflugzeuges auftauchen, d.h. sowas bräuchte sowieso eine ganz andere Steuerung und kein einfaches "visible"-Flag wie die UFOs.

Zitat: LennStar
An dieser Stelle: Gibt es das UKI-script lander denn mittlerweile? Das brauch ich ja.

EDIT: Habs gerade im Gal. Krieg gesehen. Ist allerdings nicht ganz was ich wollte

Wenn Du soweit bist, sag einfach was Du haben willst - vielleicht kann ich Dir ja ein paar Tips geben.

Zum Code:
Wie Jim schon erwähnte müssen verschiedene Variablen bei der Deklaration immer mit ; getrennt sein, beim Aufruf der Funktion müssen sie aber mit , getrennt werden. Das gilt durchgehend für alle Funktionen, auch die alten.
verfasst am: 24.06.2007, 19:13
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Ich hab jetzt die Units wie z.B. diese:

unit Aliens_Solarier_Activate;

procedure Aliens_Solarier_Activate;
begin
  alien_api_ChangeActiveState( 4115051803, true);   //Solarier-Anführer
  alien_api_ChangeActiveState( 2291881093, true);   //Solarier-Anhänger
  alien_api_ChangeActiveState( 2530066078, true);   //Solarier-Fanatiker
  alien_api_ChangeActiveState( 3366189452, true);   //Solarier-Sektenpriester
end;
end.

Ich hab in meinem script (das Ressourcen-Sammler auf Seite 5, falls ihr es ansehen müsst) am Anfang uses Aliens_All_Deactivate,Aliens_All_Activate,Aliens_Zirt_Activate;
eingefügt und habe die Zeile
mission_api_StartSkript('Aliens_All_Deactivate');
Dort sagt er mir, dass das script nicht im Spielsatz gefunden wurde. Exitieren tuts aber.
Woran liegts?
verfasst am: 24.06.2007, 20:14 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Mit Startskript startest Du Skripte, keine Units.

Korrekte Vorgehensweise:

im Sammlerskript am Anfang die unit einbinden, z.B.
uses Aliens_Solarier_Skript;
(wobei Aliens_Solarier_Skript der Name des Skriptes ist, wie er in der Skriptliste im Editor steht)

Und da wo Du den Befehl brauchst, da setzt Du ihn ein, z.B.

Aliens_Solarier_Activate;


Zur Erläuterung:
Stell Dir den Befehl uses wie ein Replace vor, das den angegebenen Namen gegen das komplette betreffende Skript austauscht. D.h. es macht keinen direkten Unterschied ob Du nun uses XY schreibst oder den gesamten Inhalt der UNit XY per Copy&Paste in das Skript mit dem uses-Befehl einfügst.
Der Unterschied ist natürlich, das Du den uses-Befehl in verschiedenen Skripten einsetzen kannst und dann nicht nur weniger Tiparbeit hast, sondern das sich änderungen an der unit sofort überall konsistent auswirken, während Du bei Copy&Paste den code in jedem Skript neu ändern müsstest.

Deshalb werden units da eingesetzt, wo verschiedene Skripte immer wieder denselben Code benötigen - wenn ein Befehl nur von einem Skript benötigt wird, dann kommt er auch nicht in eine unit sondern direkt in das betreffende Skript.
verfasst am: 24.06.2007, 20:58 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Warum einfach, wenns komplizziert nicht geht ^^
Aber noch mal nachgefragt:
Das nach uses ist der Name in der Liste im editor, und wenn man den Befehl einsetzt, ist das der Name der function/procedure?
Weil im Moment heißt das noch gleich bei mir. Ist das Problem? Weil ich hab auch bis fast an diese Stelle immer folgende Meldung nach F8:
"Zugriffsverletzung bei Adresse 00551695 im Modul "Medit.exe" Lesen von Adresse 00000020" (Warum kann man kryptische Fehlermeldungen nie kopieren? *grrrr* )

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

alien_api_ChangeActiveState(1786296665, false);
Was ist an dieser ID falsch? Der editor sagt, sie existiert nicht. Ich hab sie sogar zum Vergleich eine Zeile drüber hin kopiert: Es ist die korrekte!

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

Kann man in eine if eine Abfrage einbauen, ob ein bestimmtes script schon passiert ist (das keinen festen Auslöser wie Zeit hat)?
Wegen meinem Rassenwechsel. Dann könnt ich das nach und nach in die units einbauen.
Ob ein UFO aktiv ist, kann man ja nicht abfragen, nur verändern, oder?

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

Zitat: DirkF
Ich bin mir aber auch nicht sicher, ob es sinnvoll ist unsichtbare Bodeneinsätze zu ermöglichen - wenn die ja sowieso gescriptet werden, dann wäre es besser das platzierende Skript erst dann aufzurufen wenn der Bodeneinsatz tatsächlich sinnvoll ist.

Naja, das UFO fliegt irgendwo lang, landet (UFO ist also "weg" was das abschießen betrifft) und startet dann wieder. Wie bei UFO halt.
Wenn aber ein Flugzeug drüber fliegt, sollte der Bodeneinsatz schon entdeckbar sein. Auch wenn es etwas merkwürdig ist, wenn das schon am Rand des Sensorbereichs passiert.

-------

Hast du ein script, das eine "Entfernung zur Basis" Abfrage hat? Ich würd gern die Ressourcensammler auf Basisnähe beschränken. Im Moment muss man zu einem Einsatz oft über den halben Globus fliegen.

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


@Alienbasis: Zu dieser Sache kam mir der Gedanke, dass man mit dem neuen Befehl für zusätzliche Schaltflächen an der Seite so etwas wie eine Tiefensuche machen könnte. Ein (spezielles) Flugzeug wird ausgewählt, das zu einem Punkt fliegt und dort scannt - je nach Ausrütung (müsste man wiederum die Erweiterung abfragen) mit x% Wahrscheinlichkeit/Stunde etwas zu finden, wenns da ist. Man könnte auch der Basis einen "Versteckt"-Wert geben, und der muss überboten werden von dem Scanner.

Das war jetzt nur ein Gedankenspiel, aber ich wollts mal erwähnt haben, da du davon sprichst. ;) Toll wärs jedenfalls.
verfasst am: 24.06.2007, 21:52
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
Das nach uses ist der Name in der Liste im editor, und wenn man den Befehl einsetzt, ist das der Name der function/procedure?
Weil im Moment heißt das noch gleich bei mir. Ist das Problem?

Ganz genau
Ob das ein Problem erzeugt weiß ich nicht, aber es ist auf jeden Fall ganz schlecht für die Übersicht - oder möchtest Du immer nur eine Funktion pro Unit erzeugen? Normalerweise findet man in einer Unit viele zusammenhängende Funktionen, Konstanten, Werte etc. und wie nennst Du die Unit dann?
Zitat: LennStar
Ob ein UFO aktiv ist, kann man ja nicht abfragen, nur verändern, oder?

Wieso sollte man das nicht abfragen können??
Das ist ein ganz normaler Wert im TUFOModell, siehe Referenz...
Zitat: LennStar
Hast du ein script, das eine "Entfernung zur Basis" Abfrage hat? Ich würd gern die Ressourcensammler auf Basisnähe beschränken. Im Moment muss man zu einem Einsatz oft über den halben Globus fliegen.

http://doc.xforce-online.de/ger_pages/XSkriptTemplates/SkripteUKIBinha lt.html
Zitat: LennStar
alien_api_ChangeActiveState(1786296665, false);
Was ist an dieser ID falsch? Der editor sagt, sie existiert nicht. Ich hab sie sogar zum Vergleich eine Zeile drüber hin kopiert: Es ist die korrekte!

Das ist ein Übertragungsproblem bei den Werten. Weise die ID einer Konstanten zu und rufe den Befehl mit der konstanten auf (const Alienxy=178...; ChangeActiveState(Alienxy,false)) oder schau im Galaktischen Krieg nach, wie ich das indirekt bei den UFOs gemacht habe.
Gibt momentan keine andere Möglichkeit und ich weiß auch nicht, ob sich das jemals ändern kann.

Ganz abgesehen davon ist es auch für Dich besser lesbar, wenn Du eine Unit schreibst die für jedes Alien eine Konstante mit der ID definiert und dann im Skriptcode nur noch die Konstanten und nicht die kaum lesbaren Zahlen stehen.
verfasst am: 25.06.2007, 11:36 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Weise die ID einer Konstanten zu und rufe den Befehl mit der konstanten auf (const Alienxy=178...; ChangeActiveState(Alienxy,false))

Hab ich gemacht, die Fehlermeldung kommt immer noch. Invalid Alien-ID

So sieht das im Moment aus (Auszug)
unit Aliens_Active;
const
ZirtAnalysator=1786296665;
ZirtBeobachter=958493476;
ZirtErnter=4005430978;
[...aliens]

procedure Aliens_All_Activate;
begin
  alien_api_ChangeActiveState(ZirtAnalysator, true);
  alien_api_ChangeActiveState(ZirtBeobachter, true);
  alien_api_ChangeActiveState(ZirtErnter, true);
  [...aliens]//  alien_api_ChangeActiveState( , true);
end;
end.

Ich habs nur für die ersten beiden ausprobiert, aber bei beiden meckert er das gleiche: Invalid Alien-ID


-------

Wie kann man die Zeilenanzeige im scripteditor anstellen? ich finds nicht mehr.
edit: Jetzt hab ichs - nur auch wieder alles schwarz in schwarz. Kannste mir mal aus Einstellungen die 4 Farben geben? Bei Textfarbe und Hintergrundfarbe.
verfasst am: 25.06.2007, 18:00
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Wenn ich den Code im GalWar vergleiche, dann habe ich bei den ID-Werten noch eine Typwandlung auf INT64 drin. Eventuell ist die Konstante bei Dir nur als INT definiert? Das würde auch die ID verfälschen, guck mal ob es mit einer Typwandlung hinhaut...
Sonst wüsste ich auch erstmal nicht weiter...
verfasst am: 25.06.2007, 20:34 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Jetzt versteh ich nur Fachchinesisch. WO hast das überhaupt gemacht? Finds nicht.

Aber davon unabhängig: Ich habe nichts definiert. Zitat delphi-Seite:
Deklariert werden sie an den gleichen Stellen wie Variablen, allerdings mit dem Schlüsselwort const, einem Gleichheitszeichen und ohne Angabe eines Datentyps:

Und wenn ich es wie eine Variable mache, meckert auch der editor. "= erwartet"

-----
integer ist zu klein, die ID kann 10-stellig sein, int ist aber auch nur 10-stellig bis irgendwas mit 2 am Anfang. Ich hab aber schon 3 IDs bei 11 die ne 3 oder 4 haben.
verfasst am: 25.06.2007, 20:49
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
SPS002change

ID:=StrtoInt64(getCoStrValue(count,CCUFO_ID));

Ich benutze hier die StrtoInt64, weil ich die IDs aus einer längeren Konstanten-Zeichenkette mit vielen weiteren Angaben zum UFO auslese - deshalb auch der darin liegende Befehl "Hole Zeichenkettenteil CCUFO_ID vom count.-ten UFO der Konstante", dieser Befehl steht in den Define-UFO-Units
verfasst am: 25.06.2007, 22:07
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Also das ist mir jetzt zu hoch. Kannst du mir das tippen?
Falls du es brauchst, kann ich auch den Spielsatz hochladen.
verfasst am: 25.06.2007, 22:21
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Vereinfachte Form:

ID:=StrtoInt64('1786296665');

wenn Du es wie ich über Zeichenketten löst.
Den genauen Code für die Verwendung von Zahlenwerten kenne ich nicht, denn ich brauchte das aus anderen Gründen als Zeichenkette.

(Und es könnte bald einen weiteren Grund auch für Dich geben, diese Zuordnungen über Zeichenketten zu realisieren)
verfasst am: 26.06.2007, 14:05
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Also so funktioniert jedenfalls nicht:
procedure Aliens_All_Deactivate;
var
  ID:Int64;
begin
    ID:=StrtoInt64('1786296665');
    alien_api_ChangeActiveState(ID,false);
end;


Zitat: DirkF
(Und es könnte bald einen weiteren Grund auch für Dich geben, diese Zuordnungen über Zeichenketten zu realisieren)

Und welchen?

Ich seh bis jetzt keinen Vorteil. Das was du für dein UFO benutzt hast brauche ich nicht. Der einzige Punkt wäre vllt. eine Rassenzahl, falls alien_api_ChangeActiveState(Rassenzahl,false); geht.


Warum ist es so schwer, ein alien_active zu setzen, wenns mit ner Forschung "einfach so" geht!?!
verfasst am: 26.06.2007, 14:40
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
So wie genannt sollte es klappen. Wenn nicht, dann ist da irgendein anderer Fehler drin.
Da müsste man mal ein paar andere Alternativen versuchen. Schreib doch mal ein Skript, das die ID der Aliens im Programm ausliest und ausgibt - nur zur Kontrolle ob das am Format oder an Werten liegt.
verfasst am: 26.06.2007, 16:12 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Falls du das so gemeint hast:
procedure Aliens_All_Deactivate;
var
  ID:Int64;
  Text:string;
begin
    ID:=StrtoInt64('1786296665');
    Text:=inttostr(ID);
    savegame_api_Message(Text,lmMissionMessage,Nil);
    alien_api_ChangeActiveState(ID,false);
end;

Gibt als Message die Alien-ID raus. Am Fehler ändert sich nix.
Mit ner normalen integer kommt das gleiche (solange die Zahl im integer-Bereich ist, sonst kommt nur "keine gültige integer"): Invalid Alien ID [...] alien_api.pas Zeile 84
---
Wenn ich statt der Nummer die Konstante ZirtAnalysator einfüge, kommt als Meldung type mismatch ohne ' und mit ' dass es kein integer-Wert ist (logisch). - Falls das irgendeine Hilfe ist.
verfasst am: 26.06.2007, 16:26 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
(bitte noch einen post drüber ansehen)
procedure Aliens_All_Deactivate;
var
  ID:Int64;
  Text:string;
  Alien:TAlien;
begin
    ID:=StrtoInt64('1786296665');
    Alien:=alien_api_GetAlien(1786296665);   *Fehleranzeige
    Text:=Alien.Name;    
    Text:=inttostr(ID);
    savegame_api_Message(Text,lmMissionMessage,Nil);
    alien_api_ChangeActiveState(ID,false);
end;

* ergibt assertion fehlges ... alien_api.pas Zeile 78
aber da hab ich bestimmt was falsch gemacht, oder?
verfasst am: 26.06.2007, 19:59
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Nein, ich meinte das Du aus einem auf anderem Weg (ohne ID) erhaltenen Alien die ID ausliest, um zu prüfen ob sie identisch ist mit derjenigen die im Editor angezeigt wird.
also

Alien:=alien_api_GetRandomAlien;
savegame_api_Message(inttostr(Alien.ID), lmMissionMessage, Nil);



Ich möchte damit klären ob die Befehle intern korrekt arbeiten.
Ansonsten Poste mal die exakte Fehlermeldung, die Du beim ChangeActiveState kriegst.
verfasst am: 26.06.2007, 20:38 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Ansonsten Poste mal die exakte Fehlermeldung, die Du beim ChangeActiveState kriegst.

Laufzeitfehler im Modul Aliens_Active in Zeile 44 aufgetreten:
Invalid Alien ID: *** (C:;xforce-sandbox;game;source;api;alien_api.pas Zeile 84)
Das Forum zeigt den Strich nicht an. O.o Ich setz mal ein ; ein
----------
Zitat: DirkF
Alien:=alien_api_GetRandomAlien;
savegame_api_Message(inttostr(Alien.ID), lmMissionMessage, Nil);

Damit kommt was anderes raus als die ID ist. (371950368 - die gibts bei mir nicht. Ich hab nur eine 3er und die ist 3366189452)

Ich hoffe, du weißt jetzt wo der Fehler steckt...
verfasst am: 27.06.2007, 02:18
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Hast du fürs Testen den richtigen Spielsatz eingestellt?
verfasst am: 27.06.2007, 07:15
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Stimmt, Natter kann auch Recht haben - wo testest Du?
Ich teste grundsätzlich immer im Hauptprogramm, auch wenn das aufwendiger ist (Gewohnheitssache, außerdem gab es früher Unterschiede zwischen dem Skriptinterpreter im Hauptprogramm und dem im Skripteditor).

Wenn Du natürlich den Testlauf im Skripteditor machst, musst Du in den Optionen des Editors auch den korrekten Spielsatz einstellen.
verfasst am: 27.06.2007, 08:20 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: Natter
Hast du fürs Testen den richtigen Spielsatz eingestellt?

*Kopf schlag* ^^' Das hat auf alle Fälle gefehlt. Ich hab doch neuninstalliert, weil ich nur noch schwarz auf schwarz im editor hatte. (Und DirkF sich nicht wieder gemeldet hatte mir ner Lösung *hau* ;) )
Aber wenn ich es jetzt durchlaufen lasse, kommt nicht immer die ID sondern noch 3 andere Zahlen, zwei davon im Minus (z.B. -928777844).
Allerdings nur bei F9, nicht bei F8.

Seite: << [1] [2] [3] [4] [5] [6] 7 [8] [9] [10] .. [17] [18] >>




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

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