/// <summary> 组装技能效果实体 </summary>
        /// <param name="item">要解析的字符串</param>
        /// <returns>FightSkillEffects</returns>
        private FightSkillEffects BuildSkillEffects(string item)
        {
            var array = item.Split('_');

            if (array.Length < 5 || array.Length > 6)
            {
                return(null);
            }
            var skill = new FightSkillEffects();

            skill.type   = Convert.ToInt32(array[0]);                //技能效果类型
            skill.target = Convert.ToInt32(array[1]);                //技能效果目标 (1=本方 2=敌方)
            skill.range  = Convert.ToInt32(array[2]);                //技能效果范围 (1=单体 2=全体)
            skill.round  = Convert.ToInt32(array[3]);                //技能效果回合数
            skill.values = Convert.ToDouble(array[4]);               //技能效果值
            if (array.Length == 6)                                   //几率类型效果
            {
                skill.robabilityValues = Convert.ToDouble(array[5]); //技能效果几率
            }
            if (skill.robabilityValues <= 0)
            {
                skill.robabilityValues = 100;
            }
            return(skill);
        }
Beispiel #2
0
        /// <summary>道具出售</summary>
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "PROP_SELL", "道具出售");
#endif
            var propid = Convert.ToInt64(data.FirstOrDefault(q => q.Key == "id").Value.ToString());//解析数据
            var count  = int.Parse(data.FirstOrDefault(q => q.Key == "count").Value.ToString());
            return(BagSell(propid, count, session));
        }
Beispiel #3
0
        /// <summary> 进入战斗 </summary>
        /// <param name="userid"></param>
        /// <param name="npcid">rivalid 包括npc</param>
        /// <param name="rolelife"></param>
        private int NpcChallenge(Int64 userid, int npcid, FightType type, ref Int64 rolelife)
        {
            var fight = new Share.Fight.Fight().GeFight(userid, npcid, type, rolelife, false, true);

            new Share.Fight.Fight().Dispose();
            if (fight.Result != ResultType.SUCCESS)
            {
                return(Convert.ToInt32(fight.Result));
            }
            rolelife = fight.PlayHp;
            return(fight.Iswin ? (int)FightResultType.WIN : (int)FightResultType.LOSE);
        }
Beispiel #4
0
        /// <summary>道具出售</summary>
        private ASObject PropSell(tg_bag prop, int count, TGGSession session)
        {
            var user      = session.Player.User.CloneEntity();
            var m         = Convert.ToString(user.coin);
            var base_prop = Common.GetInstance().GetBaseProp(prop.base_id); //查询道具的基表数据

            if (base_prop == null)
            {
                return(new ASObject(Common.GetInstance().BuildData((int)ResultType.FRONT_DATA_ERROR)));
            }
            if (base_prop.sell != 1)
            {
                return(new ASObject(Common.GetInstance().BuildData((int)ResultType.PROP_UNBUY)));                    //判断道具是否能出售
            }
            if (prop.count < count)
            {
                return(new ASObject(Common.GetInstance().BuildData((int)ResultType.PROP_LACK)));
            }

            var money = base_prop.price * count;

            user.coin = tg_user.IsCoinMax(user.coin, money);  //处理用户的数据
            if (user.Update() <= 0)
            {
                return(new ASObject(Common.GetInstance().BuildData((int)ResultType.DATABASE_ERROR)));
            }
            session.Player.User = user;

            log.BagInsertLog(prop, (int)ModuleNumber.BAG, (int)PropCommand.PROP_SELL, base_prop.price * count); //记录日志
            var model = string.Format("{0}", "出售道具:" + prop.id);                                                //日志记录

            (new Log()).WriteLog(prop.user_id, (int)LogType.Delete, (int)ModuleNumber.BAG, (int)PropCommand.PROP_SELL, model);
            var temp = string.Format("{0}_{1}_{2}", "原:" + m, "获:" + money, "现:" + user.coin);

            (new Log()).WriteLog(prop.user_id, (int)LogType.Get, (int)ModuleNumber.BAG, (int)PropCommand.PROP_SELL, temp);

            prop.count -= count;
            var rewards = new List <RewardVo> {
                new RewardVo {
                    goodsType = (int)GoodsType.TYPE_COIN, value = user.coin
                }
            };

            (new Bag()).BuildReward(user.id, new List <tg_bag> {
                prop
            }, rewards);

            return(prop.count == 0 ? new ASObject(Common.GetInstance().BuildData((int)ResultType.SUCCESS))
                : new ASObject(Common.GetInstance().BuildData((int)ResultType.SUCCESS, prop)));
        }
        /// <summary>增加武将气力 </summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void RoleAddAngerCount(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            foreach (var m in list)
            {
#if DEBUG
                XTrace.WriteLine("{0} {1} {2}", "原本气力 " + m.angerCount, "增加气力 " + skill.values, "剩余气力 " + m.angerCount + skill.values);
#endif
                if (!IsTrue(skill.robabilityValues))
                {
                    continue;
                }
                m.angerCount = m.angerCount + Convert.ToInt32(skill.values);
                AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASES_STRENGTH, skill.values, true);
            }
        }
Beispiel #6
0
        /// <summary>翻将</summary>
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "TOWER_CHECKPOINT_NPC_REFRESH", "翻将");
#endif
            var    type       = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "type").Value);
            var    checkpoint = tg_duplicate_checkpoint.GetEntityByUserId(session.Player.User.id);
            int    result     = 0;
            string npcid;
            var    towerenemys = new List <BaseTowerEnemy>();

            if (checkpoint == null)
            {
                return(Error((int)ResultType.DATABASE_ERROR));
            }
            result = CheckSite(checkpoint);
            if (result != (int)ResultType.SUCCESS)
            {
                return(Error(result));
            }
            if (!CheckRefreshCount(checkpoint, ref towerenemys))
            {
                return(Error((int)ResultType.TOWER_NPC_ENOUGH));
            }
            result = Procress(checkpoint.user_id, type);
            if (result != (int)ResultType.SUCCESS)
            {
                return(Error(result));
            }

            if (!towerenemys.Any())
            {
                return(Error((int)ResultType.TOWER_NPC_ENOUGH));
            }
            npcid = towerenemys.Count == 1 ? towerenemys[0].id.ToString() : Common.GetInstance().RefreshNpc(towerenemys);
            if (npcid.Length == 0)
            {
                return(Error((int)ResultType.TOWER_NPC_ENOUGH));
            }
            checkpoint.npcids += "_" + npcid;
            if (!tg_duplicate_checkpoint.UpdateSite(checkpoint))
            {
                return(Error((int)ResultType.DATABASE_ERROR));
            }

            return(new ASObject(Common.GetInstance().BulidData((int)ResultType.SUCCESS, checkpoint,
                                                               (int)DuplicateEnemyType.FIGHTING, Convert.ToInt32(npcid), session.Player.UserExtend.npc_refresh_count)));
        }
Beispiel #7
0
        /// <summary>判断当层怪物是否刷新完</summary>
        private bool CheckRefreshCount(tg_duplicate_checkpoint checkpoint, ref List <BaseTowerEnemy> towerenemys)
        {
            var ids  = new List <int>();
            var npcs = Variable.BASE_TOWERENEMY.Where(m => m.pass == checkpoint.site).ToList();

            if (npcs.Any())
            {
                if (checkpoint.npcids != null)
                {
                    if (checkpoint.npcids.Contains("_"))
                    {
                        var npcids = checkpoint.npcids.Split('_');
                        if (npcids.Length == npcs.Count)
                        {
                            return(false);
                        }
                        ids.Add(Convert.ToInt32(npcids[0]));
                        ids.Add(Convert.ToInt32(npcids[1]));
                        foreach (var item in npcs)
                        {
                            var te = ids.FirstOrDefault(m => m == item.id);
                            if (te == 0)
                            {
                                towerenemys.Add(item);
                            }
                        }
                        return(true);
                    }
                    ids.Add(Convert.ToInt32(checkpoint.npcids));
                    foreach (var item in npcs)
                    {
                        var te = ids.FirstOrDefault(m => m == item.id);
                        if (te == 0)
                        {
                            towerenemys.Add(item);
                        }
                    }
                }
            }
            else
            {
                return(false);
            }
            return(true);
        }
Beispiel #8
0
        /// <summary>验证翻将使用元宝或翻将次数</summary>
        private int Procress(Int64 userid, int type)
        {
            if (!Variable.OnlinePlayer.ContainsKey(userid))
            {
                return((int)ResultType.BASE_PLAYER_OFFLINE_ERROR);
            }
            var session = Variable.OnlinePlayer[userid] as TGGSession;

            if (session == null)
            {
                return((int)ResultType.BASE_PLAYER_OFFLINE_ERROR);
            }
            var user_extend = session.Player.UserExtend.CloneEntity();
            var user        = session.Player.User.CloneEntity();

            if (type == (int)DuplicateRefreshType.REFRESHCOUNT_USE)
            {
                if (user_extend.npc_refresh_count == 0)
                {
                    return((int)ResultType.CHALLENGENUM_LACK);
                }
                user_extend.npc_refresh_count--;
                user_extend.Update();
                session.Player.UserExtend = user_extend;
            }
            else if (type == (int)DuplicateRefreshType.GOLD_USE)
            {
                var base_gold = Variable.BASE_RULE.FirstOrDefault(m => m.id == "9004");
                if (base_gold == null)
                {
                    return((int)ResultType.BASE_TABLE_ERROR);
                }
                if (!UserResource(Convert.ToInt32(base_gold.value), ref user))
                {
                    return((int)ResultType.BASE_PLAYER_GOLD_ERROR);
                }
                user.Update();
                Common.GetInstance().RewardsToUser(user, (int)GoodsType.TYPE_GOLD);
            }
            else
            {
                return((int)ResultType.FRONT_DATA_ERROR);
            }
            return((int)ResultType.SUCCESS);
        }
        /// <summary>减少武将气力 </summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void RoleReduceAngerCount(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            foreach (var m in list)
            {
                if (!IsTrue(skill.robabilityValues))
                {
                    continue;
                }
                var count = m.angerCount - Convert.ToInt32(skill.values);
                if (count < 0)
                {
                    skill.values = m.angerCount; m.angerCount = 0;
                }
                AddRoleBuff(m, skill.round, (int)FightingSkillType.REDUCE_STRENGTH, skill.values, false);
#if DEBUG
                XTrace.WriteLine("{0} {1} {2}", "原本气力 " + m.angerCount, "减少气力 " + skill.values, "剩余气力 " + count);
#endif
            }
        }
Beispiel #10
0
        /// <summary>辩才小游戏</summary>
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "TOWER_CHECKPOINT_ELOQUENCE_GAME", "辩才小游戏");
#endif
            var type       = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "type").Value);
            var checkpoint = tg_duplicate_checkpoint.GetEntityByUserId(session.Player.User.id);
            if (checkpoint == null)
            {
                return(Error((int)ResultType.DATABASE_ERROR));
            }
            if (!CheckType(type))
            {
                return(Error((int)ResultType.FRONT_DATA_ERROR));
            }

            if (checkpoint.user_blood == 0 || checkpoint.npc_blood == 0 ||
                checkpoint.state == (int)DuplicateClearanceType.CLEARANCE_FAIL)
            {
                return(Error((int)ResultType.CHALLENGE_FAIL));
            }
            var npccard = CardRandom();

            var base_tower = Variable.BASE_TOWERELOQUENCE.FirstOrDefault(m => m.myCard == type && m.enemyCard == npccard);
            var base_pass  = Variable.BASE_TOWERPASS.FirstOrDefault(m => m.pass == checkpoint.site);
            if (base_tower == null || base_pass == null)
            {
                return(Error((int)ResultType.BASE_TABLE_ERROR));
            }

            checkpoint = GameProcess(checkpoint, base_tower);
            if (!tg_duplicate_checkpoint.UpdateSite(checkpoint))
            {
                return(Error((int)ResultType.DATABASE_ERROR));
            }
            var user = session.Player.User.CloneEntity();
            if (!CheckResult(user, Convert.ToInt32(base_pass.passAward), ref checkpoint))
            {
                TOWER_CHECKPOINT_DARE_PUSH.GetInstance().CommandStart(checkpoint.user_id, checkpoint.site, checkpoint.state);
            }
            return(new ASObject(Common.GetInstance().BulidData((int)ResultType.SUCCESS, npccard, checkpoint.user_blood, checkpoint.npc_blood)));
        }
        /// <summary>增加印计数</summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void AddYinCount(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            var role   = list.First();
            var userid = role.user_id;
            var value  = Convert.ToInt32(skill.values);

            if (!dic_yincount.ContainsKey(userid))
            {
                dic_yincount.Add(userid, value);
            }
            else
            {
                dic_yincount[userid] += value;
#if DEBUG
                XTrace.WriteLine("{0} {1}", "增加印计数 " + value, "当前印计数 " + dic_yincount[userid]);
#endif
            }
            GetYinCount(move);
            AddRoleBuff(role, skill.round, (int)FightingSkillType.INCREASES_YINCOUNT, value, true);
        }
        /// <summary>减少印计数</summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void ReduceYinCount(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            var role   = list.First();
            var userid = role.user_id;
            var value  = Convert.ToInt32(skill.values);

            if (!dic_yincount.ContainsKey(userid))
            {
                dic_yincount.Add(userid, 0);
            }
            else
            {
                var yincount = dic_yincount[userid];
                var count    = yincount - value;
                dic_yincount[userid] = count < 0 ? 0 : count;
#if DEBUG
                XTrace.WriteLine("{0} {1} {2}", "原本印计数 " + yincount, "减少印计数 " + value, "剩余印计数 " + count);
#endif
            }
            GetYinCount(move);
            AddRoleBuff(role, skill.round, (int)FightingSkillType.REDUCE__YINCOUNT, value, false);
        }
Beispiel #13
0
        /// <summary>挑战怪物</summary>
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "TOWER_CHECKPOINT_DARE", "挑战怪物");
#endif
            var             npcid      = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "npcid").Value);
            var             type       = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "type").Value);
            var             user       = session.Player.User.CloneEntity();
            var             checkpoint = tg_duplicate_checkpoint.GetEntityByUserId(session.Player.User.id);
            result = 0; int fightresult = 0;
            if (npcid == 0 || checkpoint == null)
            {
                return(Error((int)ResultType.DATABASE_ERROR));
            }
            var towerpass = Variable.BASE_TOWERPASS.FirstOrDefault(m => m.pass == checkpoint.site);
            if (towerpass == null)
            {
                return(Error((int)ResultType.BASE_TABLE_ERROR));
            }
            if (!CheckSiteResult(checkpoint, towerpass))
            {
                return(Error(result));
            }

            Int64 rolelife;  //主角血量
            if (type == (int)DuplicateTargetType.MONSTER)
            {
                rolelife = checkpoint.blood;
                if (!CheckDifficult(npcid, ref checkpoint))
                {
                    return(Error((int)ResultType.BASE_TABLE_ERROR));
                }
                checkpoint.Update();
                fightresult = NpcChallenge(session.Player.User.id, npcid, FightType.DUPLICATE_SHARP, ref rolelife);
                result      = RoleLifeProcess(rolelife);
            }
            else if (type == (int)DuplicateTargetType.WATCHMEM)
            {
                if (!CheckWatchMen(checkpoint, towerpass))
                {
                    return(Error(result));
                }
                rolelife    = session.Player.Role.Kind.att_life;
                fightresult = NpcChallenge(session.Player.User.id, npcid, FightType.ONE_SIDE, ref rolelife);
                result      = WatchResult(fightresult);
            }
            else
            {
                return(Error((int)ResultType.FRONT_DATA_ERROR));
            }

            if (fightresult < 0)
            {
                return(Error((int)ResultType.FIGHT_ERROR));
            }
            TOWER_CHECKPOINT_DARE_PUSH.GetInstance().CommandStart(checkpoint.user_id, type, result, rolelife);
            if (!FameReward(user, npcid, result, type)) //推送奖励
            {
                return(Error((int)ResultType.BASE_TABLE_ERROR));
            }
            return(new ASObject(Common.GetInstance().BuildData((int)ResultType.SUCCESS)));
        }