Beispiel #1
0
        public ModelInfo WorldLoad()
        {
            Loger.Log("Client WorldLoad (GetInfo 3)");
            var packet = new ModelInt()
            {
                Value = (long)ServerInfoType.SendSave
            };
            var stat = TransObject <ModelInfo>(packet, (int)PackageType.Request5UserInfo, (int)PackageType.Response6UserInfo);

            return(stat);
        }
Beispiel #2
0
        public ModelInfo WorldLoad()
        {
            Loger.Log("Client WorldLoad (GetInfo 3)");
            var packet = new ModelInt()
            {
                Value = 3
            };
            var stat = TransObject <ModelInfo>(packet, 5, 6);

            return(stat);
        }
        private ModelGameServerInfo GetWorldObjectUpdate(ModelInt packet, ServiceContext context)
        {
            var data = Repository.GetData;
            var toClientGServerInfo = new ModelGameServerInfo();

            if (packet != null)
            {
                toClientGServerInfo.WObjectOnlineList = data.WorldObjectOnlineList;
                toClientGServerInfo.FactionOnlineList = data.FactionOnlineList;
            }

            return(toClientGServerInfo);
        }
Beispiel #4
0
            public ModelInt GetInfo(ModelInt packet, ServiceContext context)
            {
                var reason = (DisconnectReason)packet.Value;

                lock (context.Player)
                {
                    context.Player.ExitReason = reason;

                    var result = new ModelInt()
                    {
                        Value = (int)DisconnectReason.CloseConnection
                    };
                    return(result);
                }
            }
Beispiel #5
0
        public void Can_serialize_custom_ints()
        {
            //JsConfig<int>.IncludeDefaultValue = true;
            JsConfig<int>.RawSerializeFn = i =>
                i == 0 ? "-1" : i.ToString();

            var dto = new ModelInt { Int = 0 };

            using (JsConfig.With(includeNullValues: true))
            {
                Assert.That(dto.ToJson(), Is.EqualTo("{\"Int\":-1}"));
            }

            JsConfig.Reset();
        }
Beispiel #6
0
        public ModelInfo GetInfo(ModelInt packet)
        {
            if (Player == null)
            {
                return(null);
            }

            lock (Player)
            {
                var saveData = Player.SaveDataPacket;
                if (packet.Value == 1)
                {
                    //полная информация fullInfo = true
                    var data   = Repository.GetData;
                    var result = new ModelInfo()
                    {
                        My              = Player.Public,
                        IsAdmin         = Player.IsAdmin,
                        VersionInfo     = MainHelper.VersionInfo,
                        VersionNum      = MainHelper.VersionNum,
                        Seed            = data.WorldSeed ?? "",
                        MapSize         = data.WorldMapSize,
                        PlanetCoverage  = data.WorldPlanetCoverage,
                        Difficulty      = data.WorldDifficulty,
                        NeedCreateWorld = saveData == null,
                        ServerTime      = DateTime.UtcNow,
                    };
                    return(result);
                }
                else if (packet.Value == 3)
                {
                    //передача файла игры, для загрузки WorldLoad();
                    var result = new ModelInfo();
                    result.SaveFileData = saveData;
                    return(result);
                }
                else
                {
                    //краткая (зарезервированно, пока не используется) fullInfo = false
                    var result = new ModelInfo();
                    return(result);
                }
            }
        }
Beispiel #7
0
 private ModelModsFiles checkFiles(ModelInt packet, ServiceContext context)
 {
     return(ServerManager.ServerSettings.AppovedFolderAndConfig);
 }
        public ModelInfo GetInfo(ModelInt packet, ServiceContext context)
        {
            lock (context.Player)
            {
                switch (packet.Value)
                {
                case (long)ServerInfoType.Full:
                {
                    var result = GetModelInfo(context.Player);
                    return(result);
                }

                case (long)ServerInfoType.SendSave:
                {
                    if (context.PossiblyIntruder)
                    {
                        context.Disconnect("Possibly intruder");
                        return(null);
                    }
                    var result = new ModelInfo();
                    //передача файла игры, для загрузки WorldLoad();
                    // файл передать можно только в том случае если файлы прошли проверку

                    //!Для Pvp проверка нужна всегда, в PvE нет
                    if (ServerManager.ServerSettings.IsModsWhitelisted)
                    {
                        if ((int)context.Player.ApproveLoadWorldReason > 0)
                        {
                            context.Player.ExitReason = DisconnectReason.FilesMods;
                            Loger.Log($"Login : {context.Player.Public.Login} not all files checked,{context.Player.ApproveLoadWorldReason.ToString() } Disconnect");
                            result.SaveFileData = null;
                            return(result);
                        }
                    }

                    result.SaveFileData = Repository.GetSaveData.LoadPlayerData(context.Player.Public.Login, 1);

                    if (result.SaveFileData != null)
                    {
                        if (context.Player.MailsConfirmationSave.Count > 0)
                        {
                            for (int i = 0; i < context.Player.MailsConfirmationSave.Count; i++)
                            {
                                context.Player.MailsConfirmationSave[i].NeedSaveGame = false;
                            }

                            Loger.Log($"MailsConfirmationSave add {context.Player.MailsConfirmationSave.Count} (mails={context.Player.Mails.Count})");
                            //Ого! Игрок не сохранился после приема письма, с обязательным сохранением после получения
                            //Отправляем письма ещё раз
                            if (context.Player.Mails.Count == 0)
                            {
                                context.Player.Mails = context.Player.MailsConfirmationSave.ToList();
                            }
                            else
                            {
                                var ms = context.Player.MailsConfirmationSave
                                         .Where(mcs => context.Player.Mails.Any(m => m.GetHashBase() != mcs.GetHashBase()))
                                         .ToList();
                                context.Player.Mails.AddRange(ms);
                            }
                            Loger.Log($"MailsConfirmationSave (mails={context.Player.Mails.Count})");
                        }
                    }
                    Loger.Log($"Load World for {context.Player.Public.Login}. (mails={context.Player.Mails.Count}, fMails={context.Player.FunctionMails.Count})");

                    return(result);
                }

                case (long)ServerInfoType.FullWithDescription:
                {
                    var result = GetModelInfo(context.Player);
                    //result.Description = "";
                    var displayAttributes = new List <Tuple <int, string> >();

                    foreach (var prop in typeof(ServerSettings).GetFields())
                    {
                        var attribute = prop.GetCustomAttributes(typeof(DisplayAttribute)).FirstOrDefault();
                        if (attribute is null || !prop.IsPublic)
                        {
                            continue;
                        }

                        var dispAtr  = (DisplayAttribute)attribute;
                        var strvalue = string.IsNullOrEmpty(dispAtr.GetDescription()) ? prop.Name : dispAtr.GetDescription();
                        strvalue = strvalue + "=" + prop.GetValue(ServerManager.ServerSettings).ToString();
                        var order = dispAtr.GetOrder().HasValue ? dispAtr.GetOrder().Value : 0;
                        displayAttributes.Add(Tuple.Create(order, strvalue));
                    }

                    var sb    = new StringBuilder();
                    var sorte = new List <string>(displayAttributes.OrderBy(x => x.Item1).Select(y => y.Item2)).AsReadOnly();
                    foreach (var prop in sorte)
                    {
                        sb.AppendLine(prop);
                    }

                    //result.Description = sb.ToString();
                    return(result);
                }

                case (long)ServerInfoType.Short:
                default:
                {
                    // краткая (зарезервированно, пока не используется) fullInfo = false
                    var result = new ModelInfo();
                    return(result);
                }
                }
            }
        }
        public ModelInfo GetInfo(ModelInt packet, ServiceContext context)
        {
            lock (context.Player)
            {
                switch (packet.Value)
                {
                case 1:
                {
                    var result = GetModelInfo(context.Player);
                    return(result);
                }

                case 3:
                {
                    var result = new ModelInfo();
                    //передача файла игры, для загрузки WorldLoad();
                    // файл передать можно только в том случае если файлы прошли проверку

                    //!Для Pvp проверка нужна всегда, в PvE нет
                    if (ServerManager.ServerSettings.IsModsWhitelisted)
                    {
                        if ((int)context.Player.ApproveLoadWorldReason > 0)
                        {
                            context.Player.ExitReason = DisconnectReason.FilesMods;
                            Loger.Log($"Login : {context.Player.Public.Login} not all files checked,{context.Player.ApproveLoadWorldReason.ToString() } Disconnect");
                            result.SaveFileData = null;
                            return(result);
                        }
                    }

                    Loger.Log($"Load World for {context.Player.Public.Login}");
                    result.SaveFileData = Repository.GetSaveData.LoadPlayerData(context.Player.Public.Login, 1);
                    return(result);
                }

                case 4:
                {
                    var result = GetModelInfo(context.Player);
                    //result.Description = "";
                    var displayAttributes = new List <Tuple <int, string> >();

                    foreach (var prop in typeof(ServerSettings).GetFields())
                    {
                        var attribute = prop.GetCustomAttributes(typeof(DisplayAttribute)).FirstOrDefault();
                        if (attribute is null || !prop.IsPublic)
                        {
                            continue;
                        }

                        var dispAtr  = (DisplayAttribute)attribute;
                        var strvalue = string.IsNullOrEmpty(dispAtr.GetDescription()) ? prop.Name : dispAtr.GetDescription();
                        strvalue = strvalue + "=" + prop.GetValue(ServerManager.ServerSettings).ToString();
                        var order = dispAtr.GetOrder().HasValue ? dispAtr.GetOrder().Value : 0;
                        displayAttributes.Add(Tuple.Create(order, strvalue));
                    }

                    var sb    = new StringBuilder();
                    var sorte = new List <string>(displayAttributes.OrderBy(x => x.Item1).Select(y => y.Item2)).AsReadOnly();
                    foreach (var prop in sorte)
                    {
                        sb.AppendLine(prop);
                    }

                    //result.Description = sb.ToString();
                    return(result);
                }

                default:
                {
                    // краткая (зарезервированно, пока не используется) fullInfo = false
                    var result = new ModelInfo();
                    return(result);
                }
                }
            }
        }