示例#1
0
        public string Example3(IScriptModData g)
        {
            var S = g.E.S;

            return
                ("Player StructureData\n" +
                 $"GetCurrentPlayfield: {S.DockedE}\n" +
                 $"AllCustomDeviceNames: {S.AllCustomDeviceNames}\n" +
                 $"ControlPanelSignals: {S.ControlPanelSignals}\n" +
                 $"BlockSignals: {S.BlockSignals}\n" +
                 $"ContainerSource: {S.ContainerSource}\n" +
                 $"DamageLevel: {S.DamageLevel}\n" +
                 $"GetDeviceTypeNames: {S.GetDeviceTypeNames}\n" +
                 $"IsOfflineProtectable: {S.IsOfflineProtectable}\n" +
                 $"IsPowerd: {S.IsPowerd}\n" +
                 $"IsReady: {S.IsReady}\n" +
                 $"E: {S.E}\n" +
                 $"Items: {S.Items}\n" +
                 $"OxygenTank: {S.OxygenTank}\n" +
                 $"FuelTank: {S.FuelTank}\n" +
                 $"PentaxidTank: {S.PentaxidTank}\n" +
                 $"Passengers: {S.Passengers}\n" +
                 $"Pilot: {S.Pilot}\n"
                );
        }
示例#2
0
        public string Example2(IScriptModData g)
        {
            var E = g.E;

            return
                ($"GetCurrentPlayfield: {E.GetCurrentPlayfield().Name}\n" +
                 $"GetCurrent: {E.GetCurrent()}\n"
                );
        }
示例#3
0
        public string Example1(IScriptModData g)
        {
            var E = g.E;

            return
                ($"Name: {E.Name}" +
                 $"Id: {E.Id}" +
                 $"DeviceNames: " +
                 string.Join(",", E.DeviceNames) +
                 $"EntityType: {E.EntityType}" +
                 $"Faction: Id:{E.Faction.Id} Group:{E.Faction.Group}"
                );
        }
示例#4
0
        public string Example6(IScriptModData g)
        {
            var f = g.E.S.FuelTank;

            return
                ("Player StructureTank\n" +
                 $"Capacity: {f.Capacity}\n" +
                 $"Content: {f.Content}\n" +
                 $"AllowedItem: {f.AllowedItem(2266)}\n" +
                 $"ItemsNeededForFill: {f.ItemsNeededForFill(2266, 100)}\n" +
                 ""
                );
        }
示例#5
0
        public string Example4(IScriptModData g)
        {
            var I = g.E.S.Items.FirstOrDefault();
            var s = I?.Source?.FirstOrDefault();

            return
                ("Player ItemsData\n" +
                 $"Id: {I?.Id}\n" +
                 $"Key: {I?.Key}\n" +
                 $"Name: {I?.Name}\n" +
                 $"Count: {I?.Count}\n" +
                 $"Source: {I?.Source?.FirstOrDefault()}\n" +
                 $"CustomName: {s?.CustomName}\n" +
                 $"Id: {s?.Id}\n" +
                 $"Count: {s?.Count}\n" +
                 $"E: {s?.E}\n" +
                 $"Position: {s?.Position}\n" +
                 ""
                );
        }
示例#6
0
        public string Example5(IScriptModData g)
        {
            var p = g.E.S.Pilot;

            return
                ("Player PlayerData\n" +
                 $"Id: {p.Id}\n" +
                 $"Name: {p.Name}\n" +
                 $"SteamId: {p.SteamId}\n" +
                 $"Ping: {p.Ping}\n" +
                 "\n" +
                 $"BodyTemp: {p.BodyTemp}\n" +
                 $"BodyTempMax: {p.BodyTempMax}\n" +
                 $"Food: {p.Food}\n" +
                 $"FoodMax: {p.FoodMax}\n" +
                 $"Health: {p.Health}\n" +
                 $"HealthMax: {p.HealthMax}\n" +
                 $"Radiation: {p.Radiation}\n" +
                 $"RadiationMax: {p.RadiationMax}\n" +
                 $"Stamina: {p.Stamina}\n" +
                 $"StaminaMax: {p.StaminaMax}\n" +
                 $"Oxygen: {p.Oxygen}\n" +
                 $"OxygenMax: {p.OxygenMax}\n" +
                 "\n" +
                 $"Bag: {p.Bag?.Count()}\n" +
                 $"Toolbar: {p.Toolbar?.Count()}\n" +
                 "\n" +
                 $"Credits: {p.Credits}\n" +
                 $"Died: {p.Died}\n" +
                 $"ExperiencePoints: {p.ExperiencePoints}\n" +
                 $"UpgradePoints: {p.UpgradePoints}\n" +
                 $"FactionData: {p.FactionData}\n" +
                 $"FactionRole: {p.FactionRole}\n" +
                 $"Kills: {p.Kills}\n" +
                 $"Origin: {p.Origin}\n" +
                 $"StartPlayfield: {p.StartPlayfield}\n" +
                 ""
                );
        }
示例#7
0
        public string Example7(IScriptModData g)
        {
            var E = g.E;

            Console.WriteLine(
                $"BlockSignals: {E.S.BlockSignals.Count()}\n" +
                GetNames(E.S.BlockSignals) +
                "");

            Console.WriteLine(
                $"ControlPanelSignals: " +
                $"{E.S.ControlPanelSignals.Count()}\n" +
                GetNames(E.S.ControlPanelSignals) +
                "");

            string GetNames(IEnumerable <ISignalData> s)
            {
                return(string.Join(";", s.Select(i => i.Name)));
            }

            return(null);
        }
示例#8
0
    public static void Main(IScriptModData rootObject)
    {
        if (!(rootObject is IScriptSaveGameRootData root))
        {
            return;
        }
        if (root.E.Faction.Id == 0)
        {
            return;
        }

        root.CsRoot.GetBlockDevices <ILcd> (root.E.S, "Floor*")
        .ForEach(l =>
        {
            var output = new StringBuilder();

            try
            {
                if (DateTime.TryParseExact(l.D.GetText().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault(),
                                           "dd.MM.yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeLocal, out var lastUpdate) &&
                    (DateTime.Now - lastUpdate).TotalSeconds < 60)
                {
                    return;
                }
            }
            catch { }

            try
            {
                var posOff = l.B.CustomName.Split(':').Last().Split(';');
                var lcdX   = l.B.Position.x + GetInt(posOff, 0);
                var lcdY   = l.B.Position.y + GetInt(posOff, 1);
                var lcdZ   = l.B.Position.z + GetInt(posOff, 2);
                var size   = Get(posOff, 3, "50%");
                var flip   = Get(posOff, 4) == "r";
                var cspace = Get(posOff, 5);

                if (l.B.Id == 1400)
                {
                    output.Append($"<mspace=3.8m>");
                }
                else
                {
                    output.Append($"<mspace=1.8m>");
                }
                if (!string.IsNullOrEmpty(cspace))
                {
                    output.Append($"<cspace={cspace}>");
                }
                output.Append($"<size={size}>");
                output.Append("<line-height=70%>");

                var min = root.E.S.MinPos;
                var max = root.E.S.MaxPos;
                if (blocks == null)
                {
                    blocks = ToIntArray(root.Ids["BlockL"]);
                }
                if (devices == null)
                {
                    devices = ToIntArray(root.Ids["DeviceL"]);
                }
                if (weapons == null)
                {
                    weapons = ToIntArray(root.Ids["WeaponHV"] + root.Ids["WeaponSV"] + root.Ids["WeaponCV"] + root.Ids["WeaponBA"]);
                }
                var color    = "";
                var oldColor = "";
                var blkChar  = "";
                for (int x = flip ? max.x : min.x; flip?x >= min.x : x <= max.x; x += flip ? -1 : +1)
                {
                    for (int z = flip ? max.z : min.z; flip?z >= min.z : z <= max.z; z += flip ? -1 : +1)
                    {
                        var b    = root.CsRoot.Block(root.E.S, x, lcdY, z);
                        var bCfg = root.CsRoot.ConfigById(b.Id);
                        var tn   = bCfg?.Attr
                                   .FirstOrDefault(N => N.Name == "Id")?
                                   .AddOns["Name"].ToString() ?? string.Empty;
                        var t = bCfg?.Attr
                                .FirstOrDefault(N => N.Name == "TemplateRoot") ?
                                .Value?.ToString() ?? string.Empty;
                        var tg = bCfg?.Attr
                                 .FirstOrDefault(N => N.Name == "Group")?
                                 .Value?.ToString() ?? string.Empty;

                        if (x == lcdX && z == lcdZ)
                        {
                            blkChar = "☻";
                            color   = "red";
                        }
                        else if (tn.Contains("Controller"))
                        {
                            blkChar = "▣";
                            color   = "green";
                        }
                        else if (tn.Contains("Constructor") || tn.Contains("Food"))
                        {
                            blkChar = "▣";
                            color   = "#666600";
                        }
                        else if (tn.Contains("OxygenStation"))
                        {
                            blkChar = "❂";
                            color   = "blue";
                        }
                        else if (t.Contains("Medical"))
                        {
                            blkChar = "♥";
                            color   = "red";
                        }
                        else if (t.Contains("Thrus"))
                        {
                            blkChar = "⛔";
                            color   = "#606000";
                        }
                        else if (t.Contains("Stairs"))
                        {
                            blkChar = "☷";
                            color   = "#C0C0C0";
                        }
                        else if (t.Contains("Door"))
                        {
                            blkChar = "♓";
                            color   = "green";
                        }
                        else if (t.Contains("Cockpit"))
                        {
                            blkChar = "☸";
                            color   = "#101080";
                        }
                        else if (t.Contains("Light") ||
                                 t.Contains("Cons") ||
                                 t.Contains("Force") ||
                                 t.Contains("Door"))
                        {
                            blkChar = " ";
                        }
                        else if (b.Id == 0)
                        {
                            blkChar = " ";
                        }
                        else if (weapons.Contains(b.Id) || t.Contains("Turret"))
                        {
                            blkChar = "▣";
                            color   = "#7f00ff";
                        }
                        else if (devices.Contains(b.Id))
                        {
                            blkChar = "▣";
                            color   = "#99ccff";
                        }
                        else if (blocks.Contains(b.Id))
                        {
                            var hitPoints = b.HitPoints;
                            var damage    = b.Damage;
                            color         = "#606060";
                            if (damage > 0)
                            {
                                color = "yellow";
                            }
                            if (damage > (hitPoints * 9 / 10))
                            {
                                color = "red";
                            }
                            blkChar = "■";
                        }
                        else
                        {
                            blkChar = "▪";
                            color   = "grey";
                        }
                        if (oldColor != color)
                        {
                            output.Append($"</color><color={oldColor = color}>");
                        }
                        output.Append(blkChar);
                    }
                    output.AppendLine();
                }
                output.AppendLine($"<color=white><color=red>☻</color> = You are here X:{lcdX} Y:{lcdY} Z:{lcdZ}");
                output.AppendLine($"<color=#99ccff>▣</color> = Device");
                output.AppendLine($"<color=grey>▪</color> = Unkown");
                output.AppendLine($"■ = Block");
                output.AppendLine();
                output.Append(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
            }
            catch (Exception e)
            {
                output.Append(e);
            }
            l.D.SetText(output.ToString());
        });
    }
示例#9
0
    public static void Main(IScriptModData rootObject)
    {
        if (!(rootObject is IScriptSaveGameRootData root))
        {
            return;
        }
        if (root.E.Faction.Id == 0)
        {
            return;
        }

        var infoOutLcds = root.CsRoot.GetDevices <ILcd>(root.CsRoot.Devices(root.E.S, "CargoOutInfo*"));

        root.E.S
        .AllCustomDeviceNames
        .GetUniqueNames("CargoOut@*")
        .ForEach(cargoOutContainerName =>
        {
            var container = root.CsRoot.Devices(root.E.S, cargoOutContainerName).FirstOrDefault();
            if (container == null)
            {
                return;
            }
            if (!int.TryParse(cargoOutContainerName.Substring("CargoOut@".Length), out var targetEntityId))
            {
                WriteTo(infoOutLcds, $"CargoOut@[ID] id is not a number");
                return;
            }

            var cargoTargetFileName = Path.Combine(root.MainScriptPath, "..", "CargoTeleport", root.E.Faction.Id.ToString(), $"Cargo-{targetEntityId}.json");

            if (!File.Exists(cargoTargetFileName))
            {
                WriteTo(infoOutLcds, $"CargoIn in [ID] not ready");
                return;
            }

            root.CsRoot.WithLockedDevice(root.E.S, container, () =>
            {
                var nativeContainer = ((ContainerData)container.Device).GetContainer() as IContainer;

                var items       = nativeContainer.GetContent();
                var failedItems = new List <ItemStack>();
                items.ForEach(i =>
                {
                    try
                    {
                        File.AppendAllText(cargoTargetFileName, JsonConvert.SerializeObject(i) + "\n");
                        WriteTo(infoOutLcds, $"Transfer: Item:[{i.id}] {i.count} {root.CsRoot.I18n(i.id)}");
                    }
                    catch
                    {
                        failedItems.Add(i);
                        WriteTo(infoOutLcds, $"Transfer failed: Item:[{i.id}] {i.count} {root.CsRoot.I18n(i.id)}");
                    }
                });
                nativeContainer.SetContent(failedItems);
            });
        });

        var infoInLcds = root.CsRoot.GetDevices <ILcd>(root.CsRoot.Devices(root.E.S, "CargoInInfo*"));

        root.E.S
        .AllCustomDeviceNames
        .GetUniqueNames("CargoIn")
        .ForEach(cargoInContainerName =>
        {
            var container = root.CsRoot.Devices(root.E.S, cargoInContainerName).FirstOrDefault();
            if (container == null)
            {
                return;
            }

            var nativeContainer = ((ContainerData)container.Device).GetContainer() as IContainer;
            if (nativeContainer == null)
            {
                return;
            }

            var cargoTargetFileName = Path.Combine(root.MainScriptPath, "..", "CargoTeleport", root.E.Faction.Id.ToString(), $"Cargo-{root.E.Id}.json");
            Directory.CreateDirectory(Path.GetDirectoryName(cargoTargetFileName));

            root.CsRoot.WithLockedDevice(root.E.S, container, () =>
            {
                var items       = nativeContainer.GetContent() ?? new List <ItemStack>();
                bool itemsAdded = false;
                using (var lockFile = File.Open(cargoTargetFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
                {
                    using (var file = new StreamReader(lockFile))
                    {
                        var remainLines = new List <string>();

                        while (true)
                        {
                            var itemLine = file.ReadLine();
                            if (string.IsNullOrEmpty(itemLine))
                            {
                                break;
                            }
                            else if (items.Count < 64)
                            {
                                var item = JsonConvert.DeserializeObject <ItemStack>(itemLine);
                                items.Add(item);
                                itemsAdded = true;
                                WriteTo(infoInLcds, $"Transfer: Item:[{item.id}] {item.count} {root.CsRoot.I18n(item.id)}");
                            }
                            else
                            {
                                remainLines.Add(itemLine);
                            }
                        }

                        lockFile.Seek(0, SeekOrigin.Begin);
                        lockFile.SetLength(0);

                        using (var fileWrite = new StreamWriter(lockFile))
                        {
                            remainLines.ForEach(l => fileWrite.WriteLine(l));
                        }
                    }
                }
                if (items.Count > 0 && itemsAdded)
                {
                    byte index = 0;
                    nativeContainer.SetContent(items
                                               .Select(i => new ItemStack(i.id, i.count)
                    {
                        slotIdx = index++, decay = i.decay, ammo = i.ammo
                    }).ToList());
                }
            });
        });
    }