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); }
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(); }
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); }
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)); }
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(); }
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(); } }
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); }
public Player1Agent(Player1 self) { // 先处理代理数据构造函数,在处理代理构造 Console.WriteLine(self.test); TimeFlow.Create(this).Start(); }
public PlayerAgent() { tf = TimeFlow.Create(this); tf.Start(); }
public Time2() { TimeFlow.Create(this).Start(); }