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 —› Kann man Bodeneinstze auf der Karte bewegen?

Autor Mitteilung
verfasst am: 09.06.2011, 01:41 · Edited by: Aropretim
Registrierdatum: 06.06.2011, 12:20

 Beitrge: 50
Ich wrde gern wissen, ob es mglich ist, einen Bodeneinsatz auf dem Geoscape zu verschieben.

Sinn: Ich mchte einen Bodeneinsatz als Eroberungs-/Sabotageeinsatz fr ein feindliches, langsam bewegendes Mutterschiff zweckentfremden.

Hier einmal der derzeit komplette Code zum nachvollziehen:
program MothershipSabotage;
var
  DirX, DirY: Integer;  // Richtung, in der das Mutterschiff fliegt
  MothershipMission: TGround;  // Der Bodeneinsatz
  negativeY: boolean;  // Zur Generierung einer Bewegung bei negativer y-Achse
const
  Speed = 20;  // Zur Berechnung
  
function calcY(x, s: integer): integer;  //
var                                      // Satz des Pythagoras
  xQuad, yQuad, sQuad: integer;          // zur Berechnung der
begin                                    // Bewegung auf der
  xQuad := x*x;                          // Y-Achse, anhand der
  sQuad := s*s;                          // Bewegung auf der
  yQuad := sQuad - xQuad;                // X-Achse (x) und der
  result := round(sqrt(yQuad));          // Geschwindigkeit (s)
end;

procedure MoveMothership(Sender: TObject);
begin
  MothershipMission.Position.x := MothershipMission.Position.x + DirX;  // Bewegung auf der X-Achse
  MothershipMission.Position.y := MothershipMission.Position.y + DirY;  // Bewegung auf der Y-Achse
  DirX := DirX + random(5)-2;   // Das Mutterschiff
  if (DirX > Speed) then
  begin
    DirX := Speed - (DirX-Speed);  // Falls mehr als [Speed] Schritte auf der X-Achse gemacht werden
    if (negativeY) then            // werden die berschssigen Schritte von [Speed] abgezogen
      negativeY := false           //
    else                           // und die Negierung der Y-Achse "getoggled"
      negativeY := true;           //
  end
  else if (DirX < -Speed) then
  begin
    DirX := -Speed - (DirX+Speed);
    if (negativeY) then
      negativeY := false           // Selbiges auch wenn mehr als [Speed] Schritte "rckwrts"
    else                           // auf der X-Achse gemacht werden
      negativeY := true;
  end;
  DirY := calcY(DirX, Speed);
  if (negativeY) then              // Berechnung der nchsten Bewegung auf der Y-Achse
    DirY := DirY * -1;
  register_timed_event(@MoveMothership,nil,1);
end;

procedure StartMission;
var
  temp: integer;
begin
  MothershipMission := ground_api_generateGround;       // erzeugt einen Bodeneinsatz
  MothershipMission.AddAlien(alien_api_GetRandomAlien); // ein zuflliges Alien zum Bodeneinsatz hinzufgen
  MothershipMission.MapName := 'data\maps\aropretim\mothership.m3d';
  MothershipMission.Position.x := 0;  // zu Testzwecken
  MothershipMission.Position.y := 0;  // zu Testzwecken
  MothershipMission.Show;
  temp := random(1);           // Zufallsgenerator fr
  if (temp=1) then             // eine evtl negative
    negativeY := true;         // Bewegung auf der Y-Achse
  DirX := random(Speed*2+1)-Speed;       // Zufallsgenerator fr die Bewegung auf der X-Achse
  DirY := calcY(DirX, Speed);  // Berechnung der Y-Achse
  if (negativeY) then
    DirY := DirY * -1;         // Bei negativeY Y-Achse negieren
  register_timed_event(@MoveMothership,nil,1);  // Damit sich das Mutterschiff mintlich bewegt (s.o.)
end;

begin
  MissionName := 'MothershipSabotage';
  MissionType := mzUser;
end.
etwaige Formfehler seien mir zu verzeihen. Hab erst vor einigen Tagen wieder mit Programmieren angefangen.

Lsst sich da was machen oder muss ich das Mutterschiff landen lassen?
verfasst am: 09.06.2011, 02:28 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
Was klappt denn nicht? brigens kannst du ein Event automatisch wiederholen lassen, indem du beim Aufruf register_timed_event(...).repeated:=true; setzt (falls ich das gerade richtig im Kopf habe, ansonsten nochmal nachfragen).
verfasst am: 09.06.2011, 09:50
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
Ich habe es zwar noch nicht ausprobiert, aber es sollte klappen (und ich plane schon lange, das selber fr etwas anderes auszunutzen).

Allerdings knntest Du bei dem Code oben Probleme mit den Koordinaten bekommen - Du setzt den Bodeneinsatz zu Testzwecken genau auf einen der Pole, und an den Polen sind die Koordinatenverzerrungen am grten. Viele Bewegungen dort kann man nicht mit dem bloen Auge erkennen, weil die Punkte in der Koordinatenverzerrung auf den Pol fallen und optisch nicht mehr zu unterscheiden sind.

Besser mit Y-Koordinate 90 oder so testen...
verfasst am: 09.06.2011, 10:42 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
Zitat: Aropretim
temp := random(1); // Zufallsgenerator fr
if (temp=1) then // eine evtl negative
negativeY := true; // Bewegung auf der Y-Achse

das knnte auch noch fr rger sorgen.
Zum einen bist Du mit der random-Funktion kritisch und eventuell im undefinierten Bereich (die msste eigendlich immer 0 zurckgeben, temp kann niemals 1 werden).

Zum anderen gibt es auf dem X-Force-Globus keine negativen Koordinaten - wenn Du bei Null startest und eine negative Richtung gehst, dann wird das auf der Y-Achse sowieso ignoriert (sdlicher als Sdpol geht's nunmal nicht) und bei der X-Achse in einen berlauf auf 360 fhren.


Und kontrolliere mal Deine logik bei den Bedingungen mit den Zusammenhngen zwischen DirX und Speed etc - die Kommentare dort entsprechen nicht dem was programmiert wurde - z.B. ist Speed eine Konstante, von der nie etwas abgezogen werden kann
verfasst am: 10.06.2011, 03:39 · Edited by: Aropretim
Registrierdatum: 06.06.2011, 12:20

 Beitrge: 50
Zitat: Natter
Was klappt denn nicht? brigens kannst du ein Event automatisch wiederholen lassen, indem du beim Aufruf register_timed_event(...).repeated:=true; setzt (falls ich das gerade richtig im Kopf habe, ansonsten nochmal nachfragen).

Also zunchst einmal erscheint der Einsatz bei jedem Ingame-Test woanders, egal welche Koordinaten ich zum Testen nehme. Hinzu kommt, dass sich dieser Einsatz leider nicht bewegt.

Wenn ich das Script im Debug-Modus ausfhre fllt mir folgendes auf:
1) MothershipMission.Position enthlt den Wert "Unknown Identifier"
2) MothershipMission.Country wird bei jedem Einsatz zufllig gewhlt.

Das repeated:=true habe ich in der Referenz nicht gefunden. Werde ich aber testen. Danke :)

Edit:
Eben getestet und funktioniert.


Zitat: DirkF
Allerdings knntest Du bei dem Code oben Probleme mit den Koordinaten bekommen - Du setzt den Bodeneinsatz zu Testzwecken genau auf einen der Pole, und an den Polen sind die Koordinatenverzerrungen am grten. Viele Bewegungen dort kann man nicht mit dem bloen Auge erkennen, weil die Punkte in der Koordinatenverzerrung auf den Pol fallen und optisch nicht mehr zu unterscheiden sind.

Zitat: DirkF
Zum anderen gibt es auf dem X-Force-Globus keine negativen Koordinaten - wenn Du bei Null startest und eine negative Richtung gehst, dann wird das auf der Y-Achse sowieso ignoriert (sdlicher als Sdpol geht's nunmal nicht) und bei der X-Achse in einen berlauf auf 360 fhren.


Was das angeht, wei ich nicht, wie die Koordinaten aufgebaut sind. Dachte eigentlich dass ich das mit ein paar Tests herausfinden wrde. Natrlich werde ich dann die Flle mit negativen Koordinaten und berlauf auffangen und verarbeiten.

Zitat: DirkF
das knnte auch noch fr rger sorgen.
Zum einen bist Du mit der random-Funktion kritisch und eventuell im undefinierten Bereich (die msste eigendlich immer 0 zurckgeben, temp kann niemals 1 werden).

Stimmt, da hat sich ein Fehler eingeschlichen. Danke :)

Zitat: DirkF
Und kontrolliere mal Deine logik bei den Bedingungen mit den Zusammenhngen zwischen DirX und Speed etc - die Kommentare dort entsprechen nicht dem was programmiert wurde - z.B. ist Speed eine Konstante, von der nie etwas abgezogen werden kann

Ich wsste nicht, wo da ein Fehler drin stecken sollte. Natrlich wird die Konstante Speed nie verndert (sonst wr sie ja nicht konstant). ;)
Jedoch kann man eine Zahl davon abziehen, sofern mit dem neuen Wert eine Variable berschrieben wird. Meine Idee war die: Speed entspricht die Entfernung, die der Einsatz (Mutterschiff) pro Minute zurcklegen kann. den Einsatz kann man ja nicht drehen und vorwrts fliegen lassen, also musste ich mir dafr was anderes einfallen lassen - den Satz des Pythagoras (Rechtwinkliges Dreieck, Katheten, Hypothenuse, usw.). Die Entfernung (Hypothenuse) ist die Konstante Speed, whrend DirX und DirY die beiden Katheten darstellen. DirX und DirY entsprechen also nicht der neuen Position, sondern nur die Richtung, in der das Mutterschiff fliegt. Damit das Mutterschiff nicht nur geradeaus fliegt wird DirX jede Minute ein wenig (-2..2) verndert und DirY so berechnet, dass die Entfernung zur neuen Position der Konstante Speed entspricht. Sollte DirX grer als Speed oder kleiner als -Speed werden, so wird die Differenz von Speed subtrahiert:
Im positiven Fall: DirX = Speed-(DirX-Speed)
bsp mit DirX=21 (19+2):
DirX = 20-(21-20) = 20-1 = 19
Im negativen Fall: DirX = -Speed-(DirX+Speed)
bsp mit DirX=-22 (-20-2)
DirX = -20-(-22+20) = -20+2 = -18

Sollte einer der beiden Flle passieren, nhert sich das Mutterschiff dem anderen Pol (negativeY wird dabei also geswitcht).

Ich kann auch im Nachhinein keinen grberen Denkfehler darin erkennen. Falls ich aber dennoch einen habe, lasst es mich wissen.


Edit: Ich habe den Fehler in meinem Script gefunden.
TGround.Position.x und TGround.Position.y kann man nicht ohne weiteres einfach ndern. Mann muss erst eine Variable vom Typ TFloatPoint erstellen und damit dann TGround.Position berschreiben.
Logikfehler habe ich noch 2 entdeckt: Zum einen bewegt sich das Mutterschiff viel zu schnell. Lsst sich aber ganz leicht runterschrauben, indem ich die Konstante Speed verringer.
Zum Anderen bewegt sich das Mutterschiff entlang der X-Achse in Pol-Nhe wesentlich langsamer als in quator-Nhe. Werd da wohl noch was bearbeiten mssen.
Was mich berrascht hat, ist dass das Mutterschiff einfach ber die Pole hinweg geflogen ist, ohne Probleme wegen einem berlauf zu verursachen.
verfasst am: 10.06.2011, 09:55
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
Zu den Koordinaten:
Rufe einfach den Alphatron-Generator auf. Wenn Du dort mit der Maus zu einem Kartenpunkt gehst, werden die dazu gehrenden Koordinaten unten links eingeblendet. Habe dabei gerade auch festgestellt, dass ich selber die Koordinaten verwechselt habe - 0 ist der Nordpol, und es wird nach unten hochgezhlt.

Zu Speed/DirX:
Da war eine sprachliche Ungenauigkeit schuld an dem Miverstndnis.
Von Speed selber kann man nichts abziehen, denn dann wrde man ja die Konstante verndern. Du benutzt die Konstante Speed dagegen, um Abzge von anderen Variablen zu berechnen.

Oder mit anderen Worten: der Programmcode ist schon richtig, nur die Beschreibung was dort gemacht wird ist ungenau. Und ich hatte keine Zeit um den Code genauer zu analysieren und festzustellen, ob Du den Code oder nur die Beschreibung was dort gemacht werden soll falsch hattest.

Zitat: Aropretim
Das repeated:=true habe ich in der Referenz nicht gefunden. Werde ich aber testen. Danke :)

XSkriptReferenz.TypTTimerEvent
XSkriptReferenz.Registertimedevent

Die Registerfunktion erzeugt eine Variable vom Typ TTimerEvent - wenn dieses wie in Deinem Fall nicht benannt und festgehalten wird, dann wird es nur intern gespeichert und verfllt erst bei Speicherbereinigungen, whrend jeder erneute Aufruf der Registerfunktion eine neue Variable erzeugt.

Wenn das Event hufiger bentigt wird, dann sollte man eine Variable erzeugen und das Event darin speichern, z.B.
MothershipEvent:=Register_timed_Event(...);

Die von Natter vorgeschlagene Variante ist eine Mischfunktion, bei der man einmalig bei der Erstellung eine der Teilvariablen des Events ndern kann. Nachtrglich kann man dann keine nderungen mehr vornehmen.

Um mehrere der Teilvariablen zu ndern oder z.B. das Repeated nachtrglich ein- und ausschalten zu knnen, muss man das erzeugte Event ausdrcklich bei der Erzeugung einer Variable zuweisen.
verfasst am: 10.06.2011, 15:43
Registrierdatum: 06.06.2011, 12:20

 Beitrge: 50
Mein ursprngliches Script erzeugte also pro Ingame-Minute eine neue Variable vom Typ TTimerEvent. Muss mal probieren meine 4GB-RAM voll zu kriegen. :D

Sehe ich das richtig, dass man mit TTimerEvent.CalledScript auch Prozeduren aus anderen Scripts ansprechen kann? Oder wird damit das ganze Script gestartet?
verfasst am: 10.06.2011, 16:49
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
calledscript ist read-Only, das geht nicht.

Fr den Aufruf von Prozeduren in anderen Skripten siehe:
XSkriptReferenz.MissionapiStartScript

XSkriptReferenz.MissionapiStartScriptWithObject

XSkriptReferenz.TypTMission

Der GalWar-Spielsatz enthlt in seiner letzten (leider defekten) Version aus 0.915 Beispiele, wie man das CallProzedure aus dem dritten Link zum wechselseitigen Aufruf und Datenaustausch zwischen laufenden Skripten benutzt.
(Diese Beispiele funktionieren, die Skriptfehler liegen an einer anderen Stelle)
verfasst am: 30.07.2021, 11:40
Registrierdatum: 30.07.2021, 11:21

 Beitrge: 67
Thanks for sharing this information. I really like your blog post a lot. You have truly shared an informative and interesting blog post with everyone. the impossible quiz
verfasst am: 27.11.2021, 15:12
Registrierdatum: 29.10.2021, 14:57

 Beitrge: 763
Very helpful and good value as well. Will definitely use them again tattoo removal cost yonkers
verfasst am: 22.11.2023, 10:50
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
verfasst am: 01.12.2023, 12:27
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
audiobookkeeper.rucottagenet.rueyesvision.rueyesvisions.comfactoringfee.rufilmzones.rugadwall.rugaffertape.rugageboard.rugagrule.rugallduct.rugalvanometric.rugangforeman.rugangwayplatform.rugarbagechute.rugardeningleave.rugascautery.rugashbucket.rugasreturn.rugatedsweep.rugaugemodel.rugaussianfilter.rugearpitchdiameter.ru
geartreating.rugeneralizedanalysis.rugeneralprovisions.rugeophysicalprobe.rugeriatricnurse.rugetintoaflap.rugetthebounce.ruhabeascorpus.ruhabituate.ruhackedbolt.ruhackworker.ruhadronicannihilation.ruhaemagglutinin.ruhailsquall.ruhairysphere.ruhalforderfringe.ruhalfsiblings.ruhallofresidence.ruhaltstate.ruhandcoding.ruhandportedhead.ruhandradar.ruhandsfreetelephone.ru
hangonpart.ruhaphazardwinding.ruhardalloyteeth.ruhardasiron.ruhardenedconcrete.ruharmonicinteraction.ruhartlaubgoose.ruhatchholddown.ruhaveafinetime.ruhazardousatmosphere.ruheadregulator.ruheartofgold.ruheatageingresistance.ruheatinggas.ruheavydutymetalcutting.rujacketedwall.rujapanesecedar.rujibtypecrane.rujobabandonment.rujobstress.rujogformation.rujointcapsule.rujointsealingmaterial.ru
journallubricator.rujuicecatcher.rujunctionofchannels.rujusticiablehomicide.rujuxtapositiontwin.rukaposidisease.rukeepagoodoffing.rukeepsmthinhand.rukentishglory.rukerbweight.rukerrrotation.rukeymanassurance.rukeyserum.rukickplate.rukillthefattedcalf.rukilowattsecond.rukingweakfish.rukinozones.rukleinbottle.rukneejoint.ruknifesethouse.ruknockonatom.ruknowledgestate.ru
kondoferromagnet.rulabeledgraph.rulaborracket.rulabourearnings.rulabourleasing.rulaburnumtree.rulacingcourse.rulacrimalpoint.rulactogenicfactor.rulacunarycoefficient.ruladletreatediron.rulaggingload.rulaissezaller.rulambdatransition.rulaminatedmaterial.rulammasshoot.rulamphouse.rulancecorporal.rulancingdie.rulandingdoor.rulandmarksensor.rulandreform.rulanduseratio.ru
languagelaboratory.rulargeheart.rulasercalibration.rulaserlens.rulaserpulse.rulaterevent.rulatrinesergeant.rulayabout.ruleadcoating.ruleadingfirm.rulearningcurve.ruleaveword.rumachinesensible.rumagneticequator.rumagnetotelluricfield.rumailinghouse.rumajorconcern.rumammasdarling.ru
verfasst am: 01.02.2024, 18:46
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
http://audiobookkeeper.ruhttp://cottagenet.ruhttp://eyesvision.ruhttp://eyesvisions.comhttp://factoringfee.ruhttp://filmzones.ruhttp://gadwall.ruhttp://gaffertape.ruhttp://gageboard.ruhttp://gagrule.ruhttp://gallduct.ruhttp://galvanometric.ruhttp://gangforeman.ruhttp://gangwayplatform.ruhttp://garbagechute.ruhttp://gardeningleave.ruhttp://gascautery.ruhttp://gashbucket.ruhttp://gasreturn.ruhttp://gatedsweep.ruhttp://gaugemodel.ruhttp://gaussianfilter.ruhttp://gearpitchdiameter.ru
http://geartreating.ruhttp://generalizedanalysis.ruhttp://generalprovisions.ruhttp://geophysicalprobe.ruhttp://geriatricnurse.ruhttp://getintoaflap.ruhttp://getthebounce.ruhttp://habeascorpus.ruhttp://habituate.ruhttp://hackedbolt.ruhttp://hackworker.ruhttp://hadronicannihilation.ruhttp://haemagglutinin.ruhttp://hailsquall.ruhttp://hairysphere.ruhttp://halforderfringe.ruhttp://halfsiblings.ruhttp://hallofresidence.ruhttp://haltstate.ruhttp://handcoding.ruhttp://handportedhead.ruhttp://handradar.ruhttp://handsfreetelephone.ru
http://hangonpart.ruhttp://haphazardwinding.ruhttp://hardalloyteeth.ruhttp://hardasiron.ruhttp://hardenedconcrete.ruhttp://harmonicinteraction.ruhttp://hartlaubgoose.ruhttp://hatchholddown.ruhttp://haveafinetime.ruhttp://hazardousatmosphere.ruhttp://headregulator.ruhttp://heartofgold.ruhttp://heatageingresistance.ruhttp://heatinggas.ruhttp://heavydutymetalcutting.ruhttp://jacketedwall.ruhttp://japanesecedar.ruhttp://jibtypecrane.ruhttp://jobabandonment.ruhttp://jobstress.ruhttp://jogformation.ruhttp://jointcapsule.ruhttp://jointsealingmaterial.ru
http://journallubricator.ruhttp://juicecatcher.ruhttp://junctionofchannels.ruhttp://justiciablehomicide.ruhttp://juxtapositiontwin.ruhttp://kaposidisease.ruhttp://keepagoodoffing.ruhttp://keepsmthinhand.ruhttp://kentishglory.ruhttp://kerbweight.ruhttp://kerrrotation.ruhttp://keymanassurance.ruhttp://keyserum.ruhttp://kickplate.ruhttp://killthefattedcalf.ruhttp://kilowattsecond.ruhttp://kingweakfish.ruhttp://kinozones.ruhttp://kleinbottle.ruhttp://kneejoint.ruhttp://knifesethouse.ruhttp://knockonatom.ruhttp://knowledgestate.ru
http://kondoferromagnet.ruhttp://labeledgraph.ruhttp://laborracket.ruhttp://labourearnings.ruhttp://labourleasing.ruhttp://laburnumtree.ruhttp://lacingcourse.ruhttp://lacrimalpoint.ruhttp://lactogenicfactor.ruhttp://lacunarycoefficient.ruhttp://ladletreatediron.ruhttp://laggingload.ruhttp://laissezaller.ruhttp://lambdatransition.ruhttp://laminatedmaterial.ruhttp://lammasshoot.ruhttp://lamphouse.ruhttp://lancecorporal.ruhttp://lancingdie.ruhttp://landingdoor.ruhttp://landmarksensor.ruhttp://landreform.ruhttp://landuseratio.ru
http://languagelaboratory.ruhttp://largeheart.ruhttp://lasercalibration.ruhttp://laserlens.ruhttp://laserpulse.ruhttp://laterevent.ruhttp://latrinesergeant.ru
verfasst am: 01.03.2024, 10:25
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо
инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо
инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо
инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинйоинфоинфоинфоинфоинфо
инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо
инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо
инфоинфоинфоинфоинфоинфоинфоинфоинфоинфо



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

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