Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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)));
        }
Esempio n. 3
0
        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);
 }