예제 #1
0
        public static void LootAction()
        {
            Random randomiser = new Random();

            if (randomiser.Next(10) > 5 - user.actor.skills[5].value / 4)
            {
                TakeItem.Take(randomiser.Next(1, 4));

                user.actionWindow.fxResultOfAction.AppendText("Дата и время: " + user.world.dateTime.ToString() + "\n" +
                                                              "Поиски увенчались успехом! Найдено: " +
                                                              user.actor.inventory[user.actor.inventory.Count - 1].GetName() + "\n\n");
            }
            else
            {
                user.actionWindow.fxResultOfAction.AppendText("Дата и время: " + user.world.dateTime.ToString() + "\n" +
                                                              "Тут ничего не удалось найти ничего полезного.\n\n");
            }
            user.actor.Hunger  -= 6;
            user.actor.Thirst  -= 5;
            user.actor.Sleep   -= 3;
            user.actor.Stamina -= 5;

            user.actionWindow.fxResultOfAction.ScrollToCaret();
            TimeFlow.AddMinutes(30);
        }
예제 #2
0
        public Test_Time()
        {
            // 假设我们有特殊的需求需要关闭此对象的更新可以调用
            // 如果可能尽可能在不再使用时调用此函数
            // Close();
            // 同样需要关闭一切进程中的更新可以使用此类的静态函数
            // TimeFlow.CloseAll();
            // 如果只是暂停的话 那么可以调用
            // Pause();
            // 再次恢复时间更新
            // Start();
            // 最后如果你需要查看此时update的状态话可以通过以下两个变量
            // isPause
            // isStop
            timeFlow = TimeFlow.Create(this);

            // 时间执行器
            // 了解了TimeFlow有时候觉得太繁琐
            // 项目中根本不需要使用到那么就可以使用此类
            // 这个类根据类似Task设计思想开发
            // 但是他们还是有些区别,注意不管是这类函数操作中不要在包含一些特别耗时的操作
            // 比如说 Thread.Sleep 这种
            TimeCaller caller = TimeCaller.Create(2000, 10000, true);

            // 执行函数可以通过这个函数进行绑定,也可以在构造对象的时候写入
            // 这个可以自行查看函数提示 我这边只是为了简单事例
            caller.CallMethod((long count) => { Console.WriteLine("Hello TimeCaller"); });

            // 接下来就是贯穿在以上两个类的一个重要类
            // TimeFix 时间修正类 当然需要特殊处理时间循环的时候可以单独使用这个类
            // 只需要告诉这个对象 想要的循环时间周期即可完成必要的时间修补
            // 注意此类没有沉睡Sleep函数 所以等待需要自己处理
            int     periodNow = 1000;
            TimeFix timeFix   = new TimeFix(1000);

            /* 这里我没有写Thread 那么就认为这个Thread开始 */
            // 如果在一个循环中 这个函数应该就在循环的最开始处
            timeFix.Begin();
            // 沉睡相应时间
            Thread.Sleep(periodNow);
            // 打印日志
            Console.WriteLine("Hello TimeFix");
            // 如果在一个循环中 这个函数应该在循环的最后结束
            periodNow = timeFix.End();
            /* 至此第一次Thread循环结束 第二次开始 */
            timeFix.Begin();
            Thread.Sleep(periodNow);
            Console.WriteLine("Hello TimeFix2");
            periodNow = timeFix.End();
            /* 以此循环往复 而periodNow的值会根据每次的耗时不同进行不断的修正 */
            timeFlow.Start();

            // 临时变量 测试时间流自动停止
            StartTempTime();
            // 需要gc回收一下
            // 此处gc不会影响当前大括号的其他定时器,因为这个函数域还没结束
            GC.Collect();
        }
예제 #3
0
        private static void FightAttack()
        {
            if (ChanceToHit())
            {
                if (actionFromActor)
                {
                    NPC.EditHealth((actor.skills[0].value * -5));
                    actor.Stamina -= (50 - actor.skills[2].value * 4);

                    user.fightWindow.fxResultOfActionText.AppendText(actor.name + " нанёс удар " + NPC.GetName() + ".\n" +
                                                                     NPC.GetName() + " получен урон: " + actor.skills[0].value * 5 + ".\n\n");

                    if (NPC.GetHealth() == 0)
                    {
                        user.fightWindow.fxResultOfActionText.AppendText(actor.name + " убил " + NPC.GetName());
                        actor.inFight = false;
                        user.mainGameWindow.fxResumeFightBtn.Enabled = false;

                        user.fightWindow.fxAttackBtn.Enabled  = false;
                        user.fightWindow.fxDodgeBtn.Enabled   = false;
                        user.fightWindow.fxDefenceBtn.Enabled = false;
                        user.fightWindow.fxEscapeBtn.Enabled  = false;
                        user.fightWindow.fxLootNPCBtn.Visible = true;
                    }
                }
                else
                {
                    actor.Health -= NPC.GetSkills()[0].value * 5;
                    NPC.EditStamina(-50 - NPC.GetSkills()[2].value * -4);

                    user.fightWindow.fxResultOfActionText.AppendText(NPC.GetName() + " нанёс удар " + actor.name + ".\n" +
                                                                     actor.name + " получен урон: " + NPC.GetSkills()[0].value * 5 + ".\n\n");
                }
            }
            else
            {
                if (actionFromActor)
                {
                    user.fightWindow.fxResultOfActionText.AppendText(actor.name + " попытался нанести удар по " + NPC.GetName()
                                                                     + " но промахнулся.\n\n");

                    actor.Stamina -= (50 - actor.skills[2].value * 4);
                }
                else
                {
                    user.fightWindow.fxResultOfActionText.AppendText(NPC.GetName() + " попытался нанести удар по " + actor.name
                                                                     + " но промахнулся.\n\n");
                    NPC.EditStamina(-50 - NPC.GetSkills()[2].value * -4);
                }
            }
            user.fightWindow.fxResultOfActionText.ScrollToCaret();

            TimeFlow.AddMinutes(1);
        }
예제 #4
0
        public static void MoveInLocation(int distance, int zoneID)
        {
            user.actor.zone = user.actor.location.GetListOfZones()[zoneID];

            user.actor.Hunger  -= distance * 2;
            user.actor.Thirst  -= distance * 5;
            user.actor.Sleep   -= 3;
            user.actor.Stamina -= (distance * 10) - (user.actor.skills[2].value * 2);

            TimeFlow.AddMinutes((distance * 1000) / (user.actor.skills[2].value * 10 + 1));
        }
예제 #5
0
        public static void UseFood(List <Parameter> parameters)
        {
            user.actor.Health   = (int)parameters[0].value;
            user.actor.Thirst  += (int)parameters[1].value;
            user.actor.Hunger  += (int)parameters[2].value;
            user.actor.Stamina += (int)parameters[3].value;
            user.actor.Sleep   += (int)parameters[4].value;

            user.actor.inventory.RemoveAt(user.actor.numberOfChosenItem);

            TimeFlow.AddNull();
        }
예제 #6
0
 internal TimeFlow Create(string name)
 {
     rwlock.EnterWriteLock();
     try
     {
         TimeFlow timeFlow;
         if (!timeFlows.TryGetValue(name, out timeFlow))
         {
             var flowName = String.Format("TimeFlow.{0}", name);
             timeFlow = new TimeFlow(flowName);
             timeFlows.Add(name, timeFlow);
             timeFlow.Start().Attach();
         }
         return(timeFlow);
     }
     finally
     {
         rwlock.ExitWriteLock();
     }
 }
예제 #7
0
        public static void HuntAction(String priorety, int ID, int powerCondition, int agilityCondition, int staminaCondition)
        {
            Random randomiser = new Random();

            int powerResult   = user.actor.skills[0].value - powerCondition;
            int agilityResult = user.actor.skills[1].value - agilityCondition;
            int staminaResult = user.actor.skills[2].value - staminaCondition;

            if (priorety.Equals("Ловкость"))
            {
                if (randomiser.Next(10) > 5 - agilityResult - (staminaResult / 2))
                {
                    TakeItem.Take(ID);

                    user.actionWindow.fxResultOfAction.AppendText("Дата и время: " + user.world.dateTime.ToString() + "\n" +
                                                                  "Охота успешна! Добыто: " +
                                                                  user.actor.inventory[user.actor.inventory.Count - 1].GetName() + "\n\n");
                }
                else
                {
                    user.actionWindow.fxResultOfAction.AppendText("Дата и время: " + user.world.dateTime.ToString() + "\n" +
                                                                  "Охота не удалась - ничего не добыто.\n\n");
                }
                user.actor.Hunger  -= 10 - (agilityResult + staminaResult) / 2;
                user.actor.Thirst  -= 20 - (agilityResult + staminaResult) / 2;
                user.actor.Sleep   -= 3;
                user.actor.Stamina -= 20 - (agilityResult + staminaResult) / 2;
            }
            else if (priorety.Equals("Сила"))
            {
                if (randomiser.Next(10) > 5 - agilityResult - (staminaResult / 2))
                {
                    TakeItem.Take(ID);
                }
                else
                {
                }
            }
            user.actionWindow.fxResultOfAction.ScrollToCaret();
            TimeFlow.AddMinutes(30);
        }
예제 #8
0
 public Player1Agent(Player1 self)
 {
     // 先处理代理数据构造函数,在处理代理构造
     Console.WriteLine(self.test);
     TimeFlow.Create(this).Start();
 }
예제 #9
0
 public PlayerAgent()
 {
     tf = TimeFlow.Create(this);
     tf.Start();
 }
예제 #10
0
 public Time2()
 {
     TimeFlow.Create(this).Start();
 }