C# Skript Beispiel »

Spieler folgen

davidson | 22.10.2017 | 1.0 | Stable | Drohnen

Beschreibung:


Mit diesem Skript kannst du einer Drohne auftragen entdeckten Spielern/Feinden zu folgen.

Momentan läuft das Skript mit einem Sensor, was den Erkennungsradius auf maximal 50m beschränkt.

Nach Lösungen um mit einem Gatling-Turm zu arbeiten (Radius bis 600m) wird momentan noch gesucht.

Skriptablauf:

Mit einer Fernsteuerung fliegt die Drohne ihren normalen Patrouillen-Weg ab. Sobald der Sensor aktiviert wird schaltet sich die "Verfolge-Fernsteuerung" ein. Anhand der Position die durch den Sensor ermittelt wird, erneuert sich ständig der Wegpunkt in der "Verfolge-Fernsteuerung". Wird der Sensor nicht aktiviert (weil das Ziel bspw. den Radius verlässt) schaltet sich wieder die Patrouillen-Fernsteuerung an.

Das Skript soll als Grundlage dienen. Was wann noch passieren kann, bleibt euch überlassen und kann ergänzt werden.

Einstellungen:

Die Zeitschaltuhr muss so eingestellt werden, das er im 1 Sekunden Intervall den Programmierbaren Block ausführt (Mit Default Argument) und dann wieder sich selbst auslöst.

Die "Fernsteuerung Patrouille" sollte einen Weg abfliegen.

Die "Fernsteuerung Follow" bleibt leer.

Auf die Benamsung im Code achten (Zeile 1-4). Falls ihr eine eigene wählt müsst ihr sie im Code anpassen.

Benötigt:

Drohne (Flugtauglich)

2x Fernsteuerung

1x Sensor

1x Zeitschaltuhr

1x Programmierbarer Block


Screenshots


Drohne mit Infotafel

Diese Drohne hat keine Bewaffnung und soll Spieler anderer Fraktionen ledeglich mit einer Warnung begrüßen.

Terminal der Drohne

Angezeigt werden nur die wichtigsten Blöcke. Reaktoren, Triebwerke etc sind hier ausgeblendet. Zu sehen ist die Einstellung der "Fernsteuerung Patrouille"

Annähern an die Drohne

Hier ist die Drohne noch in ihrem Patrouillen-Modus

Drohne im "Verfolger-Modus"

Kommt man der Drohne zu Nahe, aktivert sich der "Verfolger-Modus". In diesem Beispiel gibt sie dem Eindringling jedeglich einen Warnhinweis.


Source Code


String sensorName = "Sensor";

String remoteName = "Fernsteuerung Follow";

String patrouilleRemoteName = "Fernsteuerung Patrouille";

String timerName = "Zeitschaltuhr Follow";

IMySensorBlock sensor;

IMyRemoteControl remote = null;

IMyRemoteControl patrouilleRemote = null;

IMyTimerBlock timer = null;

public void Main(string argument)

{

// Sensor

sensor = GridTerminalSystem.GetBlockWithName(sensorName) as IMySensorBlock;

// timer Follow

timer = GridTerminalSystem.GetBlockWithName(timerName) as IMyTimerBlock;

// Remote Control Follow

remote = GridTerminalSystem.GetBlockWithName(remoteName) as IMyRemoteControl;

// Remote Control Follow

patrouilleRemote = GridTerminalSystem.GetBlockWithName(patrouilleRemoteName) as IMyRemoteControl;

// empty waypoints of remote

remote.ClearWaypoints();

// Sensor Activated ?

if (sensor.IsActive)

{

// Turn off autopilot for patrouille

patrouilleRemote.SetAutoPilotEnabled(false);

// add waypoint of detected entity

remote.AddWaypoint(sensor.LastDetectedEntity.Position, "Target");

// activate autopilot

remote.SetAutoPilotEnabled(true);

}

else

{

timer.ApplyAction("OnOff_Off");

remote.SetAutoPilotEnabled(false);

patrouilleRemote.SetAutoPilotEnabled(true);

}

}