Example #1
0
        /// <summary>
        /// Расчитывает стоимость инциндента, и изымает её.
        /// </summary>
        /// <param name="command">Текстовая команда для чата</param>
        /// <param name="onliCheck">Только рассчитать, не изымая.</param>
        /// <error>Ошибка, или результат при onliCheck</error>
        /// <returns>Строка с количество требуемой стоимости</returns>
        public static string GetCostOnGameByCommand(string command, bool onliCheck, out string error)
        {
            Loger.Log("IncidentLod OCIncident.GetCostOnGameByCommand 1 command:" + command);
            //разбираем аргументы в кавычках '. Удвоенная кавычка указывает на её символ.
            string        cmd;
            List <string> args;

            ChatUtils.ParceCommand(command, out cmd, out args);

            if (args.Count < 3)
            {
                error = "OC_Incidents_OCIncident_WrongArg".Translate().ToString();
                Loger.Log("IncidentLod OCIncident.GetCostOnGameByCommand error:" + error);
                return(null);
            }

            // /call raid '111' 1 10 air tribe

            //проверка, что денег хватает
            int cost = OCIncident.CalculateRaidCost(args[0].ToLower(), Int64.Parse(args[2])
                                                    , args.Count > 3 ? Int32.Parse(args[3]) : 1
                                                    , args.Count > 4 ? args[4].ToLower() : null
                                                    , args.Count > 5 ? args[5].ToLower() : null);
            int gold = -1;

            Map map = null;

            if (cost > 0)
            {
                gold = GameUtils.FindThings(ThingDefOf.Gold, 0, false);
            }

            if (cost < 0 || gold < 0 || gold < cost)
            {
                error = cost < 0 || gold < 0
                    ? "OC_Incidents_OCIncident_WealthErr".Translate().ToString() + $" cost={cost} gold={gold}"
                    : "OC_Incidents_OCIncident_GoldErr".Translate(gold, cost, cost - gold).ToString();
                Loger.Log("IncidentLod OCIncident.GetCostOnGameByCommand error:" + error);
                return(null);
            }

            if (onliCheck)
            {
                error = null;
                return("OC_Incidents_OCIncident_NotEnoughGold".Translate(cost));
            }

            Loger.Log("IncidentLod OCIncident.GetCostOnGameByCommand 2");

            //отнимаем нужное кол-во денег(золото или серебро... или что-нибудь ещё)
            GameUtils.FindThings(ThingDefOf.Gold, cost, false);

            Loger.Log("IncidentLod OCIncident.GetCostOnGameByCommand 3");
            //принудительное сохранение
            if (!SessionClientController.Data.BackgroundSaveGameOff)
            {
                SessionClientController.SaveGameNow(true);
            }
            Loger.Log("IncidentLod ChatController.AfterStartIncident 4");

            error = null;
            return("OC_Incidents_OCIncident_GoldPay".Translate(cost));
        }
Example #2
0
        public ModelStatus GetModelStatus(ModelPostingChat pc, ServiceContext context)
        {
            if (context.PossiblyIntruder)
            {
                context.Disconnect("Possibly intruder");
                return(null);
            }
            var timeNow = DateTime.UtcNow;

            if (string.IsNullOrEmpty(pc.Message))
            {
                return(new ModelStatus()
                {
                    Status = 0,
                    Message = null
                });
            }

            var chat = context.Player.Chats.Keys.FirstOrDefault(ct => ct.Id == pc.IdChat);

            if (chat == null)
            {
                return(new ModelStatus()
                {
                    Status = 1,
                    Message = "Chat not available"
                });
            }

            Grants       acceptedGrants;
            PlayerServer player;

            // обработка команд чата
            if ("discord".Equals(context.Player.Public.Login.ToLower()))
            {
                player = Repository.GetPlayerByLogin(pc.Owner);
                if (player == null)
                {
                    return(new ModelStatus()
                    {
                        Status = (int)ChatCmdResult.UserNotFound,
                        Message = $"user {pc.Owner} not found",
                    });
                }

                acceptedGrants = context.Player.Public.Grants & player.Public.Grants;
            }
            else
            {
                player         = context.Player;
                acceptedGrants = player.Public.Grants;
            }

            if (pc.Message[0] == '/')
            {
                //разбираем аргументы в кавычках '. Удвоенная кавычка указывает на её символ.
                string        command;
                List <string> argsM;
                ChatUtils.ParceCommand(pc.Message, out command, out argsM);

                var result = ChatManager.TryGetCmdForUser(player.Public.Login, acceptedGrants, command, out IChatCmd cmd);
                if (result.Status > 0)
                {
                    return(result);
                }

                // аdditionally check Grants for DiscordUser: some commands for example: create chat, get token doesn't permitted from discord

                return(cmd.Execute(ref player, chat, argsM));
            }
            else
            {
                Loger.Log("Server post " + context.Player.Public.Login + ":" + pc.Message);
                var mmsg = pc.Message;
                if (mmsg.Length > 2048)
                {
                    mmsg = mmsg.Substring(0, 2048);
                }
                chat.Posts.Add(new ChatPost()
                {
                    Time             = timeNow,
                    Message          = mmsg,
                    OwnerLogin       = player.Public.Login,
                    DiscordIdMessage = pc.IdDiscordMsg,
                });
            }

            return(new ModelStatus()
            {
                Status = 0,
                Message = null
            });
        }