Ejemplo n.º 1
0
        public bool MyPet(MsgInformationEx MsgDTO, object[] param)
        {
            var pet = PetRecord.Get(MsgDTO.FromQQ);

            var levelModel = PetLevelSvc[pet.Level];

            var HasExtEndur = VipArmerRecord.Get(MsgDTO.FromQQ).CheckArmer("耐力护符");
            var extEndur    = HasExtEndur ? "(+10)" : string.Empty;
            var petEndur    = levelModel.Endurance - PetEnduranceRecord.Get(MsgDTO.FromQQ).ConsumeTotal + (HasExtEndur ? 10 : 0);

            var session = new MsgSession(MsgDTO);

            session.Add($"{CodeApi.Code_Image_Relational(pet.PicPath)}");
            session.Add($"名称:{pet.Name}");
            session.Add($"种族:{pet.PetNo}");
            session.Add($"食性:{pet.Attribute ?? "无"}");
            session.Add($"等级:{Utility.LevelEmoji(pet.Level)}");
            session.Add($"{Emoji.心}:{levelModel.HP}");
            session.Add($"耐力:{petEndur}/{levelModel.Endurance}{extEndur}");
            session.Add($"经验值:{pet.Exp}/{levelModel.Exp}");

            if (!pet.Skills.IsNullOrEmpty())
            {
                session.Add($"技能:{pet.Skills.Select(p => $"{p.Key}({p.Value})").JoinToString(",")}");
            }
            if (pet.RemainSkillPoints > 0)
            {
                session.Add($"可用技能点:{pet.RemainSkillPoints}");
            }

            session.Send();
            return(true);
        }
Ejemplo n.º 2
0
        public bool LimitBonus(MsgInformationEx MsgDTO, object[] param)
        {
            var cache = PersonCacheRecord.Get(MsgDTO.FromQQ, "抽奖");

            if (string.IsNullOrEmpty(cache.Value) || !int.TryParse(cache.Value, out var times) || times <= 0)
            {
                MsgSender.PushMsg(MsgDTO, "你没有抽奖机会!", true);
                return(false);
            }

            var items = HonorSvc.CurMonthLimitItems();
            var item  = items.ToDictionary(p => p, p => p.Rate).RandRated();

            var session = new MsgSession(MsgDTO);

            session.Add($"恭喜你抽到了 【{item.Name}】*1");
            session.Add($"    {item.Description} ");

            var record = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var m      = record.ItemIncome(item.Name);

            if (!string.IsNullOrEmpty(m))
            {
                session.Add(m);
            }

            session.Send();

            cache.Value = (times - 1).ToString();
            cache.Update();

            return(true);
        }
Ejemplo n.º 3
0
        public bool MyTreasureRecord(MsgInformationEx MsgDTO, object[] param)
        {
            var record = SegmentRecord.Get(MsgDTO.FromQQ);

            if (record.TreasureRecord.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "你还没有开启过任何宝藏!");
                return(false);
            }

            var session = new MsgSession(MsgDTO);

            session.Add(record.TreasureRecord.Select(p => $"{p.Key}:{p.Value}次").ToList());
            session.Add($"总计:{record.TreasureRecord.Sum(p => p.Value)}次");

            var finalMsg = $"终极宝藏:{record.FinalTreasureCount}次";

            if (record.CanOpenFinalTreasure)
            {
                finalMsg += $"(还可开启{record.TreasureRecord.Values.Min() - record.FinalTreasureCount}次)";
            }
            session.Add(finalMsg);

            session.Send();
            return(true);
        }
Ejemplo n.º 4
0
        public bool MySegment(MsgInformationEx MsgDTO, object[] param)
        {
            var record = SegmentRecord.Get(MsgDTO.FromQQ);

            if (string.IsNullOrEmpty(record.Segment))
            {
                MsgSender.PushMsg(MsgDTO, "你尚未持有任何宝藏碎片!", true);
                return(false);
            }
            var segment = SegmentSvc.FindSegmentByName(record.Segment);

            if (segment == null)
            {
                MsgSender.PushMsg(MsgDTO, "未找到指定的宝藏碎片");
                return(false);
            }

            var treasure = SegmentSvc.FindTreasureBySegment(record.Segment);
            var session  = new MsgSession(MsgDTO);

            session.Add(segment.ToString());
            session.Add($"可开启宝藏:{treasure.Name}");

            if (record.IsRare)
            {
                session.Add("【稀有】:拼接后将得到双倍奖励!");
            }

            session.Send();
            return(true);
        }
Ejemplo n.º 5
0
        private void Recruit(MsgInformation MsgDTO, MsgSession session)
        {
            var castle = KindomCastle.Get(MsgDTO.FromGroup, MsgDTO.FromQQ);

            CollectTaxes(castle, session);
            RecruitCommissariat(castle, session);

            castle.Update();
        }
Ejemplo n.º 6
0
        private void CollectTaxes(KindomCastle castle, MsgSession session)
        {
            var townLevel = castle.SafeBuildings["城镇"];
            var townModel = CastleBuildingSvc["城镇"];
            var GoldGen   = townModel.CollecRate * townLevel;

            castle.Golds += GoldGen;
            session.Add($"成功征税{GoldGen}!当前金钱剩余{castle.Golds}");
        }
Ejemplo n.º 7
0
        private void RecruitCommissariat(KindomCastle castle, MsgSession session)
        {
            var GranaryLevel    = castle.SafeBuildings["粮仓"];
            var GranaryModel    = CastleBuildingSvc["粮仓"];
            var CommissariatGen = GranaryModel.CollecRate * GranaryLevel;

            castle.Commissariat += CommissariatGen;
            session.Add($"成功征粮{CommissariatGen}!当前粮食剩余{castle.Commissariat}");
        }
Ejemplo n.º 8
0
        /// <summary>
        ///     Handles an incoming session NetMsg from the server.
        /// </summary>
        private void HandleSessionMessage(MsgSession msg)
        {
            switch (msg.MsgType)
            {
            case PlayerSessionMessage.AttachToEntity:
                break;

            case PlayerSessionMessage.JoinLobby:
                break;

            case PlayerSessionMessage.AddPostProcessingEffect:
                //AddEffect(msg.PpType, msg.PpDuration);
                break;
            }
        }
Ejemplo n.º 9
0
        public bool MyCastle(MsgInformationEx MsgDTO, object[] param)
        {
            var castle = KindomCastle.Get(MsgDTO.FromGroup, MsgDTO.FromQQ);
            var groups = SoldierGroup.Get(MsgDTO.FromQQ);

            var session = new MsgSession(MsgDTO);

            session.Add(castle.CastleName);
            session.Add($"城堡等级:{Utility.LevelEmoji(castle.Level)}");
            session.Add($"金钱:{castle.Golds}");
            session.Add($"粮草:{castle.Commissariat}");
            session.Add($"建筑:{string.Join(",", castle.Buildings.Select(p => $"{p.Key}(lv.{p.Value})"))}");
            session.Add($"军队:{groups.Count}支");
            session.Add($"士兵:{groups.Sum(g => g.Count)}人");

            session.Send();
            return(true);
        }
Ejemplo n.º 10
0
        public bool MyStatus(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson    = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);
            var level       = LevelSvc.GetByLevel(osPerson.Level);
            var exp         = MsgCounterSvc.Get(MsgDTO.FromQQ);
            var armerRecord = PersonArmerRecord.Get(MsgDTO.FromQQ);

            var session = new MsgSession(MsgDTO);

            session.Add($"等级:{level.Name}{(level.Level == LevelSvc.TopLevel ? "(满级)" : "")}");
            session.Add($"经验值:{exp}/{level.Exp}{(exp   >= level.Exp ? "(可渡劫)" : "")}");
            session.Add($"{Emoji.心}:{level.HP}(+{ArmerSvc.CountHP(armerRecord.Armers)})");
            session.Add($"{Emoji.剑}:{level.Atk}(+{ArmerSvc.CountAtk(armerRecord.Armers)})");
            session.Add($"金币:{osPerson.Golds}");

            session.Send();
            return(true);
        }
Ejemplo n.º 11
0
        protected override void Sign(MsgInformationEx MsgDTO)
        {
            var sign     = SignInSuccessiveRecord.Sign(MsgDTO.FromGroup, MsgDTO.FromQQ);
            var goldsGen = Math.Min(sign.SuccessiveDays * 5, 50);

            var castle = KindomCastle.Get(MsgDTO.FromGroup, MsgDTO.FromQQ);

            castle.Golds += goldsGen;
            castle.Update();

            var indexNo = SignInGroupInfo.GetAndUpdate(MsgDTO.FromGroup);

            var session = new MsgSession(MsgDTO);

            session.Add($"签到成功!你已连续签到 {sign.SuccessiveDays}天,获得 {goldsGen.CurencyFormat()}!");
            session.Add($"本群签到排名:【No.{indexNo}】");

            Recruit(MsgDTO, session);
            session.Send();
        }
Ejemplo n.º 12
0
        public bool ViewPetSkill(MsgInformationEx MsgDTO, object[] param)
        {
            var name  = (string)param[0];
            var skill = PetSkillSvc[name];

            if (skill == null)
            {
                MsgSender.PushMsg(MsgDTO, "未查找到该技能!", true);
                return(false);
            }

            var pet     = PetRecord.Get(MsgDTO.FromQQ);
            var session = new MsgSession(MsgDTO);

            session.Add($"名称:{skill.Name}");
            session.Add($"描述:{skill.CommDesc}");
            session.Add($"解锁:{skill.LearnLevel}");
            session.Add($"当前:{(pet.Skills != null && pet.Skills.ContainsKey(name) ? pet.Skills[name] : 0)}");

            session.Send();
            return(true);
        }
Ejemplo n.º 13
0
        public bool MyExpeditionHistory(MsgInformationEx MsgDTO, object[] param)
        {
            var history = ExpeditionHistory.Get(MsgDTO.FromQQ);

            if (history.SceneDic.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "尚未记录到远征信息!");
                return(false);
            }

            var hotScenes = history.SceneDic.OrderByDescending(p => p.Value).Take(3).ToList();
            var session   = new MsgSession(MsgDTO);

            session.Add($"你最热衷的远征地点:{hotScenes.Select(s => $"{s.Key}*{s.Value}次").JoinToString(",")}");
            session.Add($"共获得金币:{history.GoldsTotal.CurencyFormat()}");
            session.Add($"共获得调味料:{history.FlavoringTotal}个");
            session.Add($"共获得物品:{history.ItemBonusCount}个");
            session.Add($"物品总价值:{history.ItemBonusPriceTotal.CurencyFormat()}");

            session.Send();
            return(true);
        }
Ejemplo n.º 14
0
        public bool Supply(MsgInformationEx MsgDTO, object[] param)
        {
            var castle = KindomCastle.Get(MsgDTO.FromGroup, MsgDTO.FromQQ);

            var starvingGroups = SoldierGroup.StarvingGroups(MsgDTO.FromQQ);

            if (starvingGroups.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "你没有需要补给的军队!", true);
                return(false);
            }

            var totalConsume     = 0;
            var feededGroupCount = 0;

            foreach (var starvingGroup in starvingGroups)
            {
                if (castle.Commissariat < starvingGroup.Count)
                {
                    break;
                }

                castle.Commissariat -= starvingGroup.Count;
                starvingGroup.Feed();
                totalConsume += starvingGroup.Count;
                feededGroupCount++;
            }
            castle.Update();

            var session = new MsgSession(MsgDTO);

            session.Add("补给完成!");
            session.Add($"共补给 {feededGroupCount}支军队,共消耗粮草 {totalConsume}");
            session.Add($"当前剩余 {starvingGroups.Count - feededGroupCount}支军队尚未补给,当前剩余粮草 {castle.Commissariat}");

            session.Send();
            return(true);
        }
Ejemplo n.º 15
0
        public bool TakeSegment(MsgInformationEx MsgDTO, object[] param)
        {
            var segment = SegmentSvc.RandSegment();
            var record  = SegmentRecord.Get(MsgDTO.FromQQ);

            record.Segment = segment.Name;
            record.IsRare  = Rander.RandInt(100) > 90;
            record.Update();

            var session = new MsgSession(MsgDTO);

            session.Add("你领取到了新的宝藏碎片!");
            session.Add(segment.ToString());

            var treasure = SegmentSvc.FindTreasureBySegment(record.Segment);

            session.Add($"可开启宝藏:【{treasure.Name}】");
            if (record.IsRare)
            {
                session.Add($"{Emoji.礼物}恭喜你领取到了稀有碎片,拼接后将得到双倍奖励!");
            }
            session.Send();
            return(true);
        }
Ejemplo n.º 16
0
 void SetSession(MsgSession msgSession, string key)
 {
     msgSession.pid        = (ulong)PlayerInfo.Instance.mPlayerPid;
     msgSession.actionCode = key;
     msgSession.roomcode   = RoomInfo.Instance.mRoomCode;
 }
Ejemplo n.º 17
0
 void RefreshSession(MsgSession session)
 {
     PlayerInfo.Instance.mPlayerData.roomCode = session.roomcode;
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Processes an incoming network message.
 /// </summary>
 /// <param name="msg">Incoming message.</param>
 public void HandleNetworkMessage(MsgSession msg)
 {
     GetSessionById(msg.MsgChannel.NetworkId)?.HandleNetworkMessage(msg);
 }