Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

211

24.08.2016, 10:35

Das sieht eigentlich ziemlich cool aus. Die ganze Würfelei geht mir inzwischen ziemlich auf die Nerven, aber dafür kannst Du im Besonderen ja eigentlich nichts. Nur fehlt mir leider die Zeit.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

LInsoDeTeh

Treue Seele

  • »LInsoDeTeh« ist der Autor dieses Themas

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

212

27.08.2016, 20:02

Jeder sieht das, was er sehen will @Schorsch ;)

In den letzten Tagen gab es viele kleine Updates zu Galactineers:

Zum Einen gab es einen Balancing Patch, der die Kosten für die Aspektforschungen deutlich reduziert, solange man das notwendige Material nicht auch über PVE-Missionen gewinnen kann. Der Handel wurde deutlich aufgewertet. Zum Einen wurde das Portfolio der angebotenen Waren der fliegenden Händler stark erweitert. Zum Anderen erscheinen für Docking Bays höherer Levels jetzt auch höherstufigere Händler, sofern ein entsprechendes Sprungportal in Reichweite ist. Höherstufigere Händler bringen bei einem Besuch zum Einen mehr Warentypen mit, und bieten auch größere Mengen an. Außerdem kaufen sie auch größere Mengen ab.
Auf unserer Wikiseite zu den Rassen haben wir jetzt alle Tauschwaren und Ressourcen dokumentiert: http://wiki.galactineers.net/index.php?title=HowToPlay:Races

Als zweites haben wir ein Feature eingefügt, das sich oft gewünscht wurde: Das Zerstören von Schiffen, die man nicht mehr braucht. Level 4 wird das neue Hangarfeature mitbringen, womit man niederstufige Schiffe auf höherstufige aufladen kann und diese z.B. recyclen, oder analysieren kann. Bis Level 4 kann man seine Schiffe nur zerstören. Dies geschieht übre die Schiffsliste, dort wird das entsprechende Schiff dann permanent und erstattungsfrei zerstört.

Desweiteren haben wir es ermöglicht, dass Missionen, die eigentlich kooperative Mehrspielermissionen sind, auch im Singleplayermodus unter Aufwendung entsprechend zusätzlicher Schiffe alleine gespielt werden können. Voraussetzung dafür ist, dass die Anzahl der Schiffe, die alle Spieler zusammen mit in die Mission nehmen, 8 nicht übersteigt. Wir werden alle PVE-Missionen, die Galactineers built-in mitbringt (also nicht Workshop oder DLC), so gestalten, dass sie kooperativ und auch alleine gespielt werden können. So hat jeder die Möglichkeit, alle Schiffsmodule und Materialien freizuschalten, egal ob er on- oder offline spielt.

Das Detektormodul für Schiffe kann nun auch Gegner aufdecken. Bisher erkannte es nur versteckte Erze und Ressourcen im Sandboxmodus. In den PVE-Instanzen kann man damit nun auch Gegner erkennen. Wer mit der Tutorialmission bisher Schwierigkeiten hatte, alle 20 Sonden zu finden, kann ja ab jetzt mal ein Detektorschiff mit reinnehmen... :-)


Die API haben wir nochmal um ein paar Funktionen erweitert:

Neu ist zum Einen, dass man die gerade erwähnte Detektorfähigkeit für Schiffe per Befehl aktivieren und deaktivieren kann, um z.B. ein Questschiff nicht zu overpowered für eine Mission zu machen.

Zum Anderen haben wir das "Custom Button" Feature hinzugefügt. Über den PHP-Skript-Befehl "AddButton()" kann man an einer gegebenen Koordinate (z.B. ein Gebäude, Gegner, oder Block) einen Button platzieren, der für alle Spieler angezeigt wird. Dies soll, abgesehen von den Standardtriggern wie "erreiche die Zone" oder "zerstöre XY", weitere Funktionen zur Steuerung von Quests ermöglichen (z.B. "übernehme dieses Schiff" oder "Hebe diese Kiste auf"). Per Befehl kann man diese Buttons situationsabhängig für einzelne Spieler aktivieren und deaktivieren. Außerdem kann man jeden Button mit einem von 18 Icons versehen, um dem vorgesehenen Story-Kontext gerecht zu werden. Ein Klick des Spielers auf einen solchen Button kann direkt im PHP Skript über das OnButtonClicked-Ereignis behandelt werden.


tl;dr: Forschung ist jetzt billiger, Händler bringen mehr Waren mit, nicht mehr benötigte Schiffe kann man über die Schiffsliste zerstören, Detektorschiffe können in Instanzen jetzt auch Gegner aufdecken, kooperative Missionen kann man auch im Singleplayer spielen, alle built-in PVE-Missionen in Galactineers werden Single- und Multiplayer ermöglichen, per API kann man benutzerdefinierte Buttons in die Mission einbauen und mit eigener Logik versehen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LInsoDeTeh« (27.08.2016, 20:10)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

213

28.08.2016, 16:24



:P
tl;dr: Forschung ist jetzt billiger, Händler bringen mehr Waren mit, nicht mehr benötigte Schiffe kann man über die Schiffsliste zerstören, Detektorschiffe können in Instanzen jetzt auch Gegner aufdecken, kooperative Missionen kann man auch im Singleplayer spielen, alle built-in PVE-Missionen in Galactineers werden Single- und Multiplayer ermöglichen, per API kann man benutzerdefinierte Buttons in die Mission einbauen und mit eigener Logik versehen.

Das klingt ja erst mal ganz cool. Ich glaube da sollte ich gleich mal rein schauen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Goldwing Studios

Treue Seele

Beiträge: 359

Wohnort: Heidelberg

Beruf: Softwareentwickler, Vertriebler

  • Private Nachricht senden

214

29.08.2016, 07:59

wird das bei 10-20 Buttons nicht ein bisschen unübersichtlich? Was meinst du hier mit wigener Funktionalität? Kann man mit den Buttons Schiffe/Gebäude steuern?

Ist das ganze PHP-Prinzip nicht eine Sicherheitslücke?

LInsoDeTeh

Treue Seele

  • »LInsoDeTeh« ist der Autor dieses Themas

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

215

29.08.2016, 08:49

wird das bei 10-20 Buttons nicht ein bisschen unübersichtlich? Was meinst du hier mit wigener Funktionalität? Kann man mit den Buttons Schiffe/Gebäude steuern?

Du musst die Buttons ja nicht alle schon bei Missionsstart hinzufügen, sondern dann, wenn es für deine Story relevant ist. AddButton(...) ist ja ein Befehl, den du in jedem Eventhandler in deinem Skript aufrufen kannst und nicht nur zu Beginn. Diese Buttons sind als "Custom Kontextmenüs" für Objekte in deiner Mission gedacht, sodass du Objekte in deinem Sinne benutzen kannst und nicht nur so, wie Galactineers das nativ vorsieht (da gibt es in Missionen ja per se erst mal nur Schiffe und Gebäude mit eingeschränkter Funktionalität).

Ein Beispiel: Wir wollen, dass der Spieler ein neutrales Story-Schiff, das irgendwo in einem Nebel gefangen ist, in seine Kontrolle übernehmen kann, wenn man in dessen Nähe ist.
Also baue ich eine Region im Editor in der Nähe dieses Schiffes und definiere bei OnMissionInitialize mit dem Befehl AddInRegionTrigger(...) einen Trigger für "Spielerschiff erreicht diese Region". Wenn dann das Schiff diese Region erreicht, löst es das OnTrigger Event aus. In diesem Eventhandler kannst du dann AddButton(...) für die Koordinaten des neutralen Schiffs aufrufen und es erscheint ein Button auf dem Schiff. Wenn ein Spieler den Button jetzt anklickt, kommt in deinem PHP-Skript das OnButtonClicked Event an und dort könntest du im Eventhandler dann z.B. SetShipOwner(...) für das neutrale Schiff verwenden, um das Schiff dem Spieler zu übergeben. Genau an der Stelle machst du dann auch direkt wieder RemoveButton(...). Alles, was du für dieses Szenario coden müsstest, sähe so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
class Mission {
  private $neutralShip;

  function OnMissionInitialize() {
    $this->neutralShip = $MissionContext->AddShip('theNeutralShipDefinitionId', array(20, 25), General::$NeutralPlayerId);
    $MissionContext->AddInRegionTrigger('neutralShipApproachTrigger', RegionIds::$whateverFromTheEditor, $this->neutralShip);
  }

  function OnTrigger($triggerId, $shipId) {
    if ($triggerId == 'neutralShipApproachTrigger' && $shipId == $this->neutralShip) {
      $MissionContext->AddButton('takeNeutralShipButtonId', array(20, 25), 'refresh');
      $MissionContext->RemoveTrigger('neutralShipApproachTrigger');
    }
  }

  function OnButtonClicked($buttonId, $playerId) {
    if ($buttonId == 'takeNeutralShipButtonId') {
      $MissionContext->SetShipOwner($this->neutralShip, $playerId);
      $MissionContext->RemoveButton('takeNeutralShipButtonId');
    }
  }
}
?>

(Ich persönlich würde bestimmte IDs natürlich nicht hardcoden, sondern in Variablen legen, aber hier geht es ja um die Demonstration des Skripts).

Wenn du einen Button häufiger brauchst (z.B. wenn du nacheinander 5 Kisten aufnehmen und wieder ablegen musst), verwendest du EnableButtonForPlayer(...) und DisableButtonForPlayer(...). Desweiteren erscheinen die Buttons ja nicht pauschal als HUD-Element, sondern als Kontextmenü an der angegebenen Koordinate. D.h. ab einer gewissen Distanz zur Kamera sind die auch gar nicht mehr sichtbar.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »LInsoDeTeh« (29.08.2016, 09:08)


Goldwing Studios

Treue Seele

Beiträge: 359

Wohnort: Heidelberg

Beruf: Softwareentwickler, Vertriebler

  • Private Nachricht senden

216

29.08.2016, 09:34

Danke, jetzt hab ich geschnallt.

Dachte schon :D

Nochmal zu der Sicherheitslücke, läuft das PHP-Skript dann Sandboxed oder könnte ich da jemandem mit Schadcode unterjubeln? So auf die Art "Klicke hier und finde heraus wie du deine Gurke schneller wachsen lässt" und dann bei Klick auf ne externe Seite zu verlinken?

LInsoDeTeh

Treue Seele

  • »LInsoDeTeh« ist der Autor dieses Themas

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

217

29.08.2016, 09:57

Das PHP-Skript läuft nicht in einem HTTP-Kontext, sondern wird von der Anwendung ausgeführt/geparsed bzw. die Mission-Klasse wird instanziiert. Diese unterliegt natürlich den Windows-Berechtigungen (UAC). Denn jeder PHP-Befehl wird in .NET übersetzt. Also alles was mit "Weiterleitungen", Webseiten öffnen, Prozesse starten, Dateien erzeugen/schreiben usw. zu tun hat, funktioniert nicht, da Galactineers nicht mit Adminberechtigungen läuft. Das Skript hat auch nur Zugriff auf die Instanz der $MissionContext-Klasse, die ich als globale Variable in das Skript reinreiche, andere Bereiche von Galactineers sind nicht sichtbar.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LInsoDeTeh« (29.08.2016, 10:10)


Goldwing Studios

Treue Seele

Beiträge: 359

Wohnort: Heidelberg

Beruf: Softwareentwickler, Vertriebler

  • Private Nachricht senden

218

30.08.2016, 07:14

was ist wenn ich zufällig Galactineers mit Adminrechten öffne?

Bekomme ich dann Fehlermeldung die sagt:" Bitte starten Sie Galactineers nur ohne Admin-Rechte, da Sie sich und Ihren PC gefährden?"

Oder wie darf ich das mit den Admin-Rechten verstehen? Ist euer Programm durch ein PHP-Skript theoretisch angreif- bzw ausnutzbar?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

219

30.08.2016, 07:35

Aber Zugriff auf die Dateien des Benutzers hätte es doch schon, oder? Also beispielsweise auf die Fotos vom letzten Grillabend, den Privatporno oder die gespeicherten Cookies/Passwörter vom Browser?

LInsoDeTeh

Treue Seele

  • »LInsoDeTeh« ist der Autor dieses Themas

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

220

30.08.2016, 08:33

was ist wenn ich zufällig Galactineers mit Adminrechten öffne

Zufällig passiert das ja kaum, da dich die UAC ja explizit fragt. Aber ich denke, das Risiko, irgendwelche Anwendungen im Adminmodus auszuführen, haben wir bei Galactineers nicht exklusiv gepachtet. Damit öffnest du jeder Anwendung Tür und Tor, dafür ist die UAC ja da.

Aber Zugriff auf die Dateien des Benutzers hätte es doch schon, oder? Also beispielsweise auf die Fotos vom letzten Grillabend, den Privatporno oder die gespeicherten Cookies/Passwörter vom Browser?

Grundsätzlich ja. Allerdings kann ich gezielt Funktionen deaktivieren und Zugriff auf Environmentvariablen unterbinden.

Ich finde es gut, dass ihr das Thema Sicherheit aufbringt, denn da habe ich mich zugegebenermaßen noch nicht mit allen möglichen Fällen beschäftigt. Also ich kann im Skriptkontext verschiedene PHP-Funktionen deaktivieren, damit fange ich mit der nächsten Version direkt an. Die erste Kandidatenliste wären schon einmal alle Dateisystem- und Verzeichnisfunktionen.
Habt ihr weitere Vorschläge, was schädlich sein könnte, was man ebenfalls deaktivieren sollte?
Im Grunde genommen braucht man für ein Missions-Skript ja nur Klassen, Variablen, die elementaren Steuerbefehle (if, while, for, usw.), sowie alle möglichen Array- und Stringfunktionen.

Werbeanzeige