private void ShowResult() { var msg = "对决结束!\r\n"; if (Winner == null) { Winner = SelfPet.HP > AimPet.HP ? SelfPet : AimPet; } msg += $"恭喜{Winner.Name} 获得了胜利!奖励捞瓶子机会一次(当日有效)!"; var dailyLimit = DailyLimitRecord.Get(Winner.QQNum, "DriftBottleAI_FishingBottle"); dailyLimit.Decache(); dailyLimit.Update(); msg += $"\r\n很遗憾,{Loser.Name}输掉了比赛,在12小时内无法捞瓶子!"; var buff = new OSPersonBuff { QQNum = Loser.QQNum, Name = "昙天", Description = "不可以捞瓶子", ExpiryTime = DateTime.Now.AddHours(12), IsPositive = false, Data = 1, Source = Winner.QQNum }; buff.Add(); SendMessage(msg); }
private string BeAttackedTrigger(GamingPet source, GamingPet dest, int value, DemageType type) { var buffs = dest.Buffs.Where(b => b.Trigger == CheckTrigger.BeAttacked && ((b.Data["DemageTypes"] as DemageType[])?.Contains(type) ?? false)).ToList(); foreach (var buff in buffs) { buff.Data.AddSafe("Source", source); buff.Data.AddSafe("Dest", dest); buff.Data.AddSafe("Value", value); buff.Data.AddSafe("Type", type); } return(string.Join("\r\n", buffs.Select(ProcessEffect))); }
private bool JudgeWinner() { if (SelfPet.HP > 0 && AimPet.HP > 0) { return(false); } if (SelfPet.HP <= 0 && AimPet.HP <= 0) { return(true); } Winner = SelfPet.HP > 0 ? SelfPet : AimPet; return(true); }
private string DoDemage(GamingPet source, GamingPet dest, DemageType type, int value, string title) { var realDemage = GetRealDemageValue(source, dest, type, value); if (realDemage <= 0) { return(null); } DoRealDemage(dest, realDemage); var msg = $"{source.Name}对{dest.Name}造成了{realDemage}点{type.ToString()}伤害({title}),{dest.Name}剩余{dest.HP}点生命值!"; var triggerMsg = BeAttackedTrigger(source, dest, realDemage, type); if (!string.IsNullOrWhiteSpace(triggerMsg)) { msg += $"\r\n{triggerMsg}"; } return(msg); }
private int CalSourceDemage(GamingPet source, DemageType type, int value) { var result = value; var buffs = type switch { DemageType.物理 => source.Buffs.Where(p => p.Trigger == CheckTrigger.PhyAttackFix), DemageType.魔法 => source.Buffs.Where(p => p.Trigger == CheckTrigger.MagicAttackFix), DemageType.毒系 => source.Buffs.Where(p => p.Trigger == CheckTrigger.PoisionAttackFix), //DemageType.真实 => _ => new List <GamingBuff>() }; foreach (var buff in buffs) { buff.Data.AddSafe("Source", source); buff.Data.AddSafe("Value", result); result = int.Parse(ProcessEffect(buff)); } return(result); }
private int GetRealDemageValue(GamingPet source, GamingPet dest, DemageType type, int value) { var demage = CalSourceDemage(source, type, value); return(CalDestDemage(source, dest, type, demage)); }
private static void DoRealDemage(GamingPet dest, int realValue) { dest.HP -= realValue; dest.HP = Math.Max(dest.HP, 0); }