C# Skript Beispiel »
Spieler folgen
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
- FollowerScript - Visual Basic File
Diese Datei könnt ihr u.a. im Visual Studio von Microsoft bearbeiten
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);
}
}