static public void ServerHandlerMethod()
 {
     while (true)
     {
         while (!MediatorMain.PackedSTask.IsEmpty)
         {
             PackedETask RawTask;
             MediatorMain.PackedSTask.TryDequeue(out RawTask);
             RawTask.Unpack().execute();
         }
         Thread.Sleep(1);
     }
 }
 static public void TasksHandlerMethod()
 {
     while (true)
     {
         while (!MediatorMain.MediatorTaskList.IsEmpty)
         {
             MediatorTask RawTask;
             MediatorMain.MediatorTaskList.TryDequeue(out RawTask);
             try
             {
                 RawTask.Execute();
             }
             catch (Exception E)
             {
                 Log.Error(E.Message, E.ToString());
             }
         }
         Thread.Sleep(1);
     }
 }
Exemple #3
0
 public static void Write(Stream output, RawTask instance, Endian endian)
 {
     output.WriteValueU32(instance.Name, endian);
     output.WriteValueU32(instance.TaskGroup, endian);
     output.WriteValueS32(instance.Type, endian);
     output.WriteValueS32(instance.ProvinceWeight, endian);
     output.WriteValueS32(instance.LiberationPercent, endian);
     output.WriteValueS32(instance.RepeatableRewardSemantics, endian);
     instance.RepeatableReward.Write(output, endian);
     output.WriteValueS64(instance.RewardThresholdOffset, endian);
     output.WriteValueS64(instance.RewardThresholdCount, endian);
     output.WriteValueS64(instance.PrerequisiteOffset, endian);
     output.WriteValueS64(instance.PrerequisiteCount, endian);
     output.WriteValueS32(instance.HasChurch, endian);
     output.WriteValueS32(instance.ShownOnMap, endian);
     output.WriteValueU32(instance.UIName, endian);
     output.WriteValueU32(instance.UIDescription, endian);
     output.WriteValueU32(instance.UITip, endian);
     output.WriteValueS32(instance.UIOrderHint, endian);
 }
Exemple #4
0
            public static RawTask Read(Stream input, Endian endian)
            {
                var instance = new RawTask();

                instance.Name                      = input.ReadValueU32(endian);
                instance.TaskGroup                 = input.ReadValueU32(endian);
                instance.Type                      = input.ReadValueS32(endian);
                instance.ProvinceWeight            = input.ReadValueS32(endian);
                instance.LiberationPercent         = input.ReadValueS32(endian);
                instance.RepeatableRewardSemantics = input.ReadValueS32(endian);
                instance.RepeatableReward          = RawReward.Read(input, endian);
                instance.RewardThresholdOffset     = input.ReadValueS64(endian);
                instance.RewardThresholdCount      = input.ReadValueS64(endian);
                instance.PrerequisiteOffset        = input.ReadValueS64(endian);
                instance.PrerequisiteCount         = input.ReadValueS64(endian);
                instance.HasChurch                 = input.ReadValueS32(endian);
                instance.ShownOnMap                = input.ReadValueS32(endian);
                instance.UIName                    = input.ReadValueU32(endian);
                instance.UIDescription             = input.ReadValueU32(endian);
                instance.UITip                     = input.ReadValueU32(endian);
                instance.UIOrderHint               = input.ReadValueS32(endian);
                return(instance);
            }
Exemple #5
0
        public void Serialize(Stream output, Endian endian)
        {
            var basePosition = output.Position;

            output.Seek(RawTaskRoot.Size, SeekOrigin.Current);
            var taskPosition = output.Position;

            output.Seek(RawTask.Size * this._Tasks.Count, SeekOrigin.Current);
            var rawTasks = new RawTask[this._Tasks.Count];

            for (int i = 0; i < this._Tasks.Count; i++)
            {
                var task = this._Tasks[i];
                rawTasks[i] = new RawTask()
                {
                    Name                      = task.Name,
                    TaskGroup                 = task.TaskGroup,
                    Type                      = task.Type,
                    ProvinceWeight            = task.ProvinceWeight,
                    LiberationPercent         = task.LiberationPercent,
                    RepeatableRewardSemantics = task.RepeatableRewardSemantics,
                    RepeatableReward          = new RawReward()
                    {
                        Skillpoints         = task.RepeatableReward.Skillpoints,
                        Chaos               = task.RepeatableReward.Chaos,
                        ItemRewardSemantics = task.RepeatableReward.ItemRewardSemantics,
                        ItemCount           = task.RepeatableReward.Items.Length,
                    },
                    RewardThresholdCount = task.RewardThresholds == null ? 0 : task.RewardThresholds.Length,
                    PrerequisiteCount    = task.Prerequisites == null ? 0 : task.Prerequisites.Length,
                    HasChurch            = task.HasChurch,
                    ShownOnMap           = task.ShownOnMap,
                    UIName        = task.UIName,
                    UIDescription = task.UIDescription,
                    UITip         = task.UITip,
                    UIOrderHint   = task.UIOrderHint,
                };
            }

            for (int i = 0; i < this._Tasks.Count; i++)
            {
                var task = this._Tasks[i];

                if (task.RepeatableReward.Items != null && task.RepeatableReward.Items.Length > 0)
                {
                    rawTasks[i].RepeatableReward.ItemOffset = output.Position - basePosition;
                    foreach (var item in task.RepeatableReward.Items)
                    {
                        item.Write(output, endian);
                    }
                }

                if (task.RewardThresholds != null && task.RewardThresholds.Length > 0)
                {
                    var rewardThresholdPosition = output.Position;
                    rawTasks[i].RewardThresholdOffset = output.Position - basePosition;

                    output.Seek(RawRewardThreshold.Size * task.RewardThresholds.Length, SeekOrigin.Current);
                    var rawRewardThresholds = new RawRewardThreshold[task.RewardThresholds.Length];
                    for (int j = 0; j < task.RewardThresholds.Length; j++)
                    {
                        var rewardThreshold    = task.RewardThresholds[j];
                        var rawRewardThreshold = new RawRewardThreshold()
                        {
                            Threshold = rewardThreshold.Threshold,
                            Reward    = new RawReward()
                            {
                                Skillpoints         = rewardThreshold.Reward.Skillpoints,
                                Chaos               = rewardThreshold.Reward.Chaos,
                                ItemRewardSemantics = rewardThreshold.Reward.ItemRewardSemantics,
                                ItemCount           =
                                    rewardThreshold.Reward.Items == null ? 0 : rewardThreshold.Reward.Items.Length,
                            },
                        };

                        if (rewardThreshold.Reward.Items != null && rewardThreshold.Reward.Items.Length > 0)
                        {
                            rawRewardThreshold.Reward.ItemOffset = output.Position - basePosition;
                            foreach (var item in rewardThreshold.Reward.Items)
                            {
                                item.Write(output, endian);
                            }
                        }

                        rawRewardThresholds[j] = rawRewardThreshold;
                    }

                    var endPosition = output.Position;
                    output.Position = rewardThresholdPosition;
                    foreach (var rawRewardThreshold in rawRewardThresholds)
                    {
                        rawRewardThreshold.Write(output, endian);
                    }
                    output.Position = endPosition;
                }

                if (task.Prerequisites != null && task.Prerequisites.Length > 0)
                {
                    rawTasks[i].PrerequisiteOffset = output.Position - basePosition;
                    foreach (var prerequisite in task.Prerequisites)
                    {
                        prerequisite.Write(output, endian);
                    }
                }
            }

            output.Position = taskPosition;
            foreach (var rawTask in rawTasks)
            {
                rawTask.Write(output, endian);
            }

            output.Position = basePosition;
            new RawTaskRoot()
            {
                TaskOffset = taskPosition,
                TaskCount  = this._Tasks.Count,
            }.Write(output, endian);
        }
Exemple #6
0
        public void Deserialize(Stream input, Endian endian)
        {
            var basePosition = input.Position;

            var rawTaskRoot = RawTaskRoot.Read(input, endian);

            var tasks = new Task[rawTaskRoot.TaskCount];

            if (rawTaskRoot.TaskCount != 0)
            {
                if (rawTaskRoot.TaskCount < 0 || rawTaskRoot.TaskCount > int.MaxValue)
                {
                    throw new FormatException();
                }

                var rawTasks = new RawTask[rawTaskRoot.TaskCount];
                input.Position = basePosition + rawTaskRoot.TaskOffset;
                for (long i = 0; i < rawTaskRoot.TaskCount; i++)
                {
                    rawTasks[i] = RawTask.Read(input, endian);
                }

                for (long i = 0; i < rawTaskRoot.TaskCount; i++)
                {
                    var rawTask = rawTasks[i];

                    var task = new Task()
                    {
                        Name                      = rawTask.Name,
                        TaskGroup                 = rawTask.TaskGroup,
                        Type                      = rawTask.Type,
                        ProvinceWeight            = rawTask.ProvinceWeight,
                        LiberationPercent         = rawTask.LiberationPercent,
                        RepeatableRewardSemantics = rawTask.RepeatableRewardSemantics,
                        RepeatableReward          = new Reward()
                        {
                            Skillpoints         = rawTask.RepeatableReward.Skillpoints,
                            Chaos               = rawTask.RepeatableReward.Chaos,
                            ItemRewardSemantics = rawTask.RepeatableReward.ItemRewardSemantics,
                            Items               = new ItemReward[rawTask.RepeatableReward.ItemCount],
                        },
                        RewardThresholds = new RewardThreshold[rawTask.RewardThresholdCount],
                        Prerequisites    = new Prerequisite[rawTask.PrerequisiteCount],
                        HasChurch        = rawTask.HasChurch,
                        ShownOnMap       = rawTask.ShownOnMap,
                        UIName           = rawTask.UIName,
                        UIDescription    = rawTask.UIDescription,
                        UITip            = rawTask.UITip,
                        UIOrderHint      = rawTask.UIOrderHint,
                    };

                    if (rawTask.RepeatableReward.ItemCount != 0)
                    {
                        if (rawTask.RepeatableReward.ItemCount < 0 || rawTask.RepeatableReward.ItemCount > int.MaxValue)
                        {
                            throw new FormatException();
                        }

                        input.Position = basePosition + rawTask.RepeatableReward.ItemOffset;
                        for (long j = 0; j < rawTask.RepeatableReward.ItemCount; j++)
                        {
                            task.RepeatableReward.Items[j] = ItemReward.Read(input, endian);
                        }
                    }

                    if (rawTask.RewardThresholdCount != 0)
                    {
                        if (rawTask.RewardThresholdCount < 0 || rawTask.RewardThresholdCount > int.MaxValue)
                        {
                            throw new FormatException();
                        }

                        var rawRewardThresholds = new RawRewardThreshold[rawTask.RewardThresholdCount];
                        input.Position = basePosition + rawTask.RewardThresholdOffset;
                        for (long j = 0; j < rawTask.RewardThresholdCount; j++)
                        {
                            rawRewardThresholds[j] = RawRewardThreshold.Read(input, endian);
                        }

                        for (long j = 0; j < rawTask.RewardThresholdCount; j++)
                        {
                            var rawRewardThreshold = rawRewardThresholds[j];
                            var rewardThreshold    = new RewardThreshold()
                            {
                                Threshold = rawRewardThreshold.Threshold,
                                Reward    = new Reward()
                                {
                                    Skillpoints         = rawRewardThreshold.Reward.Skillpoints,
                                    Chaos               = rawRewardThreshold.Reward.Chaos,
                                    ItemRewardSemantics = rawRewardThreshold.Reward.ItemRewardSemantics,
                                    Items               = new ItemReward[rawRewardThreshold.Reward.ItemCount],
                                },
                            };

                            if (rawRewardThreshold.Reward.ItemCount != 0)
                            {
                                if (rawRewardThreshold.Reward.ItemCount < 0 ||
                                    rawRewardThreshold.Reward.ItemCount > int.MaxValue)
                                {
                                    throw new FormatException();
                                }

                                input.Position = basePosition + rawRewardThreshold.Reward.ItemOffset;
                                for (long k = 0; k < rawRewardThreshold.Reward.ItemCount; k++)
                                {
                                    rewardThreshold.Reward.Items[k] = ItemReward.Read(input, endian);
                                }
                            }

                            task.RewardThresholds[j] = rewardThreshold;
                        }
                    }

                    if (rawTask.PrerequisiteCount != 0)
                    {
                        if (rawTask.PrerequisiteCount < 0 || rawTask.PrerequisiteCount > int.MaxValue)
                        {
                            throw new FormatException();
                        }

                        input.Position = basePosition + rawTask.PrerequisiteOffset;
                        for (long j = 0; j < rawTask.PrerequisiteCount; j++)
                        {
                            task.Prerequisites[j] = Prerequisite.Read(input, endian);
                        }
                    }

                    tasks[i] = task;
                }
            }

            this._Tasks.Clear();
            this._Tasks.AddRange(tasks);
        }