コード例 #1
0
ファイル: Human.cs プロジェクト: YogurtTheHorse/yessire
        public string GetStatus(string language)
        {
            if (TasksToDo.Count == 0)
            {
                return(Locale.Get("status.idle", language));
            }
            else
            {
                switch (TasksToDo[0].TaskType)
                {
                case ETask.Building:
                    return(string.Format(Locale.Get("status.building", language), Locale.Get("buildings." + TasksToDo[0].Destination + ".name", language)));

                case ETask.Creating:
                case ETask.Extracting:
                    var tsk = TasksToDo[0].TaskType.ToString().ToLower();
                    return(string.Format(Locale.Get("status." + tsk, language), Locale.Get("resources." + TasksToDo[0].Destination + ".name", language)));

                case ETask.SendingMessage:
                    string kingdom_name = KingdomsManager.FindKingdom(Guid.Parse(TasksToDo[0].Destination)).Name;
                    return(string.Format(Locale.Get("status.sending_message", language), kingdom_name));

                default:
                    return(Locale.Get("status." + TasksToDo[0].ToString().ToLower(), language));
                }
            }
        }
コード例 #2
0
        public static object ParseKingomd(string s)
        {
            foreach (Tuple <string, Guid> k in KingdomsManager.GetKingdomsNames())
            {
                if (s.Contains(k.Item1.ToLower()))
                {
                    return(k.Item2.ToString());
                }
            }

            return(null);
        }
コード例 #3
0
        public static Tuple <bool, int> CheckKingdom(string s)
        {
            foreach (Tuple <string, Guid> k in KingdomsManager.GetKingdomsNames())
            {
                if (s.Contains(k.Item1.ToLower()))
                {
                    return(new Tuple <bool, int>(true, s.IndexOf(k.Item1.ToLower()) + k.Item1.Length));
                }
            }

            return(new Tuple <bool, int>(false, 0));
        }
コード例 #4
0
        public void CalculateTaskTime(Human h, float difficulty = 1f, string skill = null)
        {
            this.Difficulty = difficulty;

            switch (this.TaskType)
            {
            case ETask.Learning:
                Skill    = skill ?? "learning";
                TimeLeft = h.GetSkill(this.Destination) / h.GetSkill(Skill);
                break;

            case ETask.Building:
                Skill    = "building";
                TimeLeft = 0.3f / h.GetSkill(Skill);
                break;

            case ETask.Creating:
            case ETask.Extracting:
                Skill    = skill ?? "mining";
                TimeLeft = 0.05f / h.GetSkill(Skill);
                break;

            case ETask.Other:
            case ETask.ListeningKing:
                TimeLeft = float.PositiveInfinity;
                break;

            case ETask.SendingMessage:
                Skill = skill ?? "diplomacy";
                float dist = KingdomsManager.Distance(h.KingdomId, Guid.Parse(Destination));
                TimeLeft = dist / 60;
                break;

            default:
                Skill    = skill;
                TimeLeft = 1;
                break;
            }

            TimeLeft *= Difficulty;
        }
コード例 #5
0
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                       .UseContentRoot(Directory.GetCurrentDirectory())
                       .UseKestrel()
                       .UseStartup <Startup>()
                       .UseUrls("http://localhost:9797")
                       .Build();

            Console.OutputEncoding = Encoding.UTF8;
            Console.InputEncoding  = Encoding.UTF8;

            DatabaseManager.Init();
            ScriptManager.Init();
            ContentManager.Init();
            UsersManager.Init();
            KingdomsManager.Init();

            Console.WriteLine("Starting Nancy on http://localhost:9797");
            host.Start();

            int       updatetime = 100 / 3, deltatime = 0;
            Stopwatch sw = Stopwatch.StartNew();

            while (true)
            {
                UpdateQueue();
                UpdateWorld(deltatime);
                deltatime = (int)sw.ElapsedMilliseconds;
                sw        = Stopwatch.StartNew();
                if (deltatime < updatetime)
                {
                    Thread.Sleep(updatetime - deltatime);
                }
            }
        }
コード例 #6
0
        public ApiModule()
        {
            Get("/start/{userType}/{userId}", args => {
                Console.WriteLine(DateTime.Now.ToString() + " " + Request.Method + " " + Request.Path);

                UserInfo ui = new UserInfo()
                {
                    Type         = args.userType,
                    ThirdPartyId = args.userId
                };
                QueueManager.Push(new Incoming()
                {
                    UserInfo  = ui,
                    Method    = "start",
                    IsWaiting = true
                });

                return(HttpStatusCode.OK);
            });
            Get("/map", args => {
                var list = new[] { new { Name = "", Position = new Point() } }.ToList();
                list.Clear();

                foreach (Kingdom k in KingdomsManager.GetKingdoms())
                {
                    list.Add(new { Name = k.Name, Position = k.Coordinate });
                }

                return(JsonConvert.SerializeObject(list));
            });
            Get("/setlang/{userType}/{userId}/{lang}", args => {
                Console.WriteLine(DateTime.Now.ToString() + " " + Request.Method + " " + Request.Path);

                UserInfo ui = new UserInfo()
                {
                    Type         = args.userType,
                    ThirdPartyId = args.userId
                };
                QueueManager.Push(new Incoming()
                {
                    UserInfo  = ui,
                    Method    = "lang",
                    IsWaiting = true,
                    Message   = new MessageInfo()
                    {
                        Text = args.lang, UserInfo = ui
                    }
                });

                return(HttpStatusCode.OK);
            });
            Post("/message/{userType}/{userId}/", args => {
                Console.WriteLine(DateTime.Now.ToString() + " " + Request.Method + " " + Request.Path);
                var body    = this.Request.Body;
                int length  = (int)body.Length;
                byte[] data = new byte[length];
                body.Read(data, 0, length);
                string encoded = Encoding.UTF8.GetString(data);
                Dictionary <string, string> vars = new Dictionary <string, string>();
                foreach (string line in encoded.Split('\n'))
                {
                    string[] arr    = line.Split('=');
                    List <byte> res = new List <byte>();
                    foreach (string s in arr[1].Replace("%2C", ",").Split(','))
                    {
                        if (s.Length > 0)
                        {
                            res.Add((byte)int.Parse(s));
                        }
                    }
                    vars[arr[0]] = Encoding.Unicode.GetString(res.ToArray());
                    Console.WriteLine(vars[arr[0]]);
                }

                MessageInfo msg = new MessageInfo()
                {
                    UserInfo = new UserInfo()
                    {
                        Type         = args.userType,
                        ThirdPartyId = args.userId
                    },
                    Text = vars["message"]
                };
                QueueManager.Push(new Incoming()
                {
                    UserInfo  = msg.UserInfo,
                    Message   = msg,
                    Method    = "message",
                    IsWaiting = true
                });
                return(HttpStatusCode.OK);
            });
            Get("/message/{userType}/{userId}/{message? }", args => {
                Console.WriteLine(DateTime.Now.ToString() + " " + Request.Method + " " + Request.Path);

                MessageInfo msg = new MessageInfo()
                {
                    UserInfo = new UserInfo()
                    {
                        Type         = args.userType,
                        ThirdPartyId = args.userId
                    },
                    Text = args.message
                };
                QueueManager.Push(new Incoming()
                {
                    UserInfo  = msg.UserInfo,
                    Message   = msg,
                    Method    = "message",
                    IsWaiting = true
                });
                return(HttpStatusCode.OK);
            });
            Get("/get/{userType}/{userId?all}", args => {
                return(JsonConvert.SerializeObject(QueueManager.GetOutgoing(args.userType, args.userId)));
            });
        }
コード例 #7
0
 private static void UpdateWorld(int deltatime)
 {
     KingdomsManager.UpdateKingdoms(deltatime);
 }