示例#1
0
        public ErrorCodes Gift(CharacterController character, eActivationRewardType type, int giftId)
        {
            var result = CheckGift(character, type, giftId);

            if (result != ErrorCodes.OK)
            {
                return(result);
            }
            return(GiveGift(character, type, giftId));
        }
示例#2
0
 public static ErrorCodes Gift(this CharacterController character, eActivationRewardType type, int giftId)
 {
     return(mImpl.Gift(character, type, giftId));
 }
示例#3
0
        //检查奖励
        public ErrorCodes CheckGift(CharacterController character, eActivationRewardType type, int giftId)
        {
            switch (type)
            {
            case eActivationRewardType.TableGift:
            {
                var tbGift = Table.GetGift(giftId);
                if (tbGift == null)
                {
                    return(ErrorCodes.Error_GiftID);
                }
                if (character.GetFlag(tbGift.Flag))
                {
                    return(ErrorCodes.Error_GiftAlreadyReceive);
                }

                switch ((eRewardType)tbGift.Type)
                {
                //固定礼包
                case eRewardType.GiftBag:
                {
                    var items = new Dictionary <int, int>();
                    for (var i = 0; i != 4; ++i)
                    {
                        if (tbGift.Param[i * 2] != -1)
                        {
                            items.modifyValue(tbGift.Param[i * 2], tbGift.Param[i * 2 + 1]);
                        }
                    }
                    return(BagManager.CheckAddItemList(character.mBag, items));
                }

                //在线时长
                case eRewardType.OnlineReward:
                {
                    var times = character.TodayTimes + DateTime.Now.GetDiffSeconds(character.OnlineTime);
                    if (times >= tbGift.Param[0])
                    {
                        return(character.mBag.CheckAddItem(tbGift.Param[1], tbGift.Param[2]));
                    }
                    return(ErrorCodes.Error_GiftTimeNotEnough);
                }

                //等级奖励
                case eRewardType.LevelReward:
                {
                    if (character.GetLevel() >= tbGift.Param[0])
                    {
                        var items = new Dictionary <int, int>();
                        for (var i = 1; i <= 5; ++i)
                        {
                            var count = tbGift.Param[i + 5];
                            if (tbGift.Param[i] != -1)
                            {
                                items.modifyValue(tbGift.Param[i], count);
                            }
                        }
                        return(BagManager.CheckAddItemList(character.mBag, items));
                    }
                    return(ErrorCodes.Error_LevelNoEnough);
                }

                //连续登陆
                case eRewardType.ContinuesLoginReward:
                {
                    var days = character.GetExData(17);
                    if (days < 1)
                    {
                        return(ErrorCodes.Error_GiftTimeNotEnough);
                    }
                    if (days > 5)
                    {
                        days = 5;
                    }
                    var items = new Dictionary <int, int>();
                    for (var i = 0; i < days; ++i)
                    {
                        var tbGift2 = Table.GetGift(13 + i);
                        if (character.GetFlag(tbGift.Flag))
                        {
                            continue;
                        }
                        items.modifyValue(tbGift2.Param[1], tbGift2.Param[2]);
                    }
                    return(BagManager.CheckAddItemList(character.mBag, items));
                }

                //累计登陆
                case eRewardType.MonthCheckinReward:
                {
                    var months = DateTime.Now.Month;
                    if (tbGift.Param[0] != 999 && months != tbGift.Param[0])
                    {
                        return(ErrorCodes.Error_GiftTimeNotEnough);
                    }
                    var days        = DateTime.Now.Day;
                    var exdataValue = character.GetExData(tbGift.Exdata);
                    if (exdataValue + 1 != tbGift.Param[1])
                    {
                        return(ErrorCodes.Unknow);
                    }
                    if (days >= tbGift.Param[1])
                    {
                        if (character.GetFlag(466))
                        {
//补签
                            var SupplementCount = character.GetExData(18);
                            var needGold        =
                                (int)
                                (tbGift.Param[4] *
                                 SkillExtension.Pow(tbGift.Param[5] / 10000.0f, SupplementCount));
                            needGold = needGold - needGold % 5;
                            if (character.mBag.GetRes(eResourcesType.DiamondRes) < needGold)
                            {
                                return(ErrorCodes.MoneyNotEnough);
                            }
                            return(character.mBag.CheckAddItem(tbGift.Param[2], tbGift.Param[3]));
                        }
                        //签到
                        return(character.mBag.CheckAddItem(tbGift.Param[2], tbGift.Param[3]));
                    }
                    return(ErrorCodes.Error_GiftTimeNotEnough);
                }

                //每日活跃度
                case eRewardType.DailyActivity:
                {
                    if (character.GetExData(tbGift.Exdata) >= 0)
                    {
                        if (character.GetExData(tbGift.Exdata) < tbGift.Param[1])
                        {
                            return(ErrorCodes.Error_GiftCountNotEnough);
                        }
                    }
                }
                break;

                //每日活跃奖励
                case eRewardType.DailyActivityReward:
                {
                    if (character.GetExData(15) >= tbGift.Param[2])
                    {
                        return(character.mBag.CheckAddItem(tbGift.Param[0], tbGift.Param[1]));
                    }
                    return(ErrorCodes.Error_ActivityPointNotEnough);
                }

                //七天登录奖励
                case eRewardType.SevenDayReward:
                {
                    if (character.GetExData((int)eExdataDefine.e94) < tbGift.Param[0])
                    {
                        return(ErrorCodes.Error_GiftTimeNotEnough);
                    }
                    if (character.GetFlag(tbGift.Flag))
                    {
                        return(ErrorCodes.Error_GiftAlreadyReceive);
                    }
                    var items = new Dictionary <int, int>();
                    for (var i = 0; i != 3; i++)
                    {
                        items.modifyValue(tbGift.Param[i * 2 + 1], tbGift.Param[i * 2 + 2]);
                    }
                    items.modifyValue(tbGift.Param[7], tbGift.Param[8]);

                    return(BagManager.CheckAddItemList(character.mBag, items));
                }

                default:
                    Logger.Warn("Gift[{0}] type is overflow", giftId);
                    break;
                }
            }
            break;

            case eActivationRewardType.DailyVipGift:
            {
                var vipLevel = character.mBag.GetRes(eResourcesType.VipLevel);
                var tbVip    = Table.GetVIP(vipLevel);

                if (tbVip == null)
                {
                    return(ErrorCodes.Error_NoVipGift);
                }
                Dictionary <int, int> dic = new Dictionary <int, int>();
                Utils.GetVipReward(vipLevel, ref dic);
                if (dic.Count == 0)
                {
                    return(ErrorCodes.Error_NoVipGift);
                }
                var tbDA = Table.GetDailyActivity(giftId);
                if (character.GetFlag(tbDA.CommonParam[0]))
                {
                    return(ErrorCodes.Error_VipGiftGained);
                }
                return(BagManager.CheckAddItemList(character.mBag, dic));
            }

            case eActivationRewardType.MonthCard:
            {
                var now  = DateTime.Now;
                var date = character.lExdata64.GetTime(Exdata64TimeType.MonthCardExpirationDate);
                if (date < now)
                {
                    return(ErrorCodes.Error_NoMonthCard);
                }
                var tbDA = Table.GetDailyActivity(giftId);
                var flag = tbDA.CommonParam[0];
                if (character.GetFlag(flag))
                {
                    return(ErrorCodes.Error_MonthCardGained);
                }
            }
            break;

            case eActivationRewardType.LifeCard:
            {
                if (!character.GetFlag(2682))    //终生卡标记
                {
                    return(ErrorCodes.Error_NoLifeCard);
                }
                var tbRecharge = Table.GetRecharge(giftId);
                if (null == tbRecharge)
                {
                    return(ErrorCodes.Error_GiftID);
                }
                var flagId = tbRecharge.Param[2];
                if (character.GetFlag(flagId))
                {
                    return(ErrorCodes.Error_LifeCardGained);
                }
            }
            break;

            case eActivationRewardType.WeekCard:
            {
                var now  = DateTime.Now;
                var date = character.lExdata64.GetTime(Exdata64TimeType.WeekCardExpirationDate);
                if (date < now)
                {
                    return(ErrorCodes.Error_NoWeekCard);
                }
                var tbDA = Table.GetDailyActivity(giftId);
                var flag = tbDA.CommonParam[0];
                if (character.GetFlag(flag))
                {
                    return(ErrorCodes.Error_WeekCardGained);
                }
            }
            break;
            }
            return(ErrorCodes.OK);
        }
示例#4
0
        //给予奖励
        public ErrorCodes GiveGift(CharacterController character, eActivationRewardType type, int giftId)
        {
            var result = ErrorCodes.OK;

            switch (type)
            {
            case eActivationRewardType.TableGift:
            {
                var tbGift = Table.GetGift(giftId);
                if (tbGift == null)
                {
                    return(ErrorCodes.Error_GiftID);
                }
                if (character.GetFlag(tbGift.Flag))
                {
                    return(ErrorCodes.Error_GiftAlreadyReceive);
                }

                //执行领取
                switch ((eRewardType)tbGift.Type)
                {
                //固定礼包
                case eRewardType.GiftBag:
                {
                    //Dictionary<int, int> items = new Dictionary<int, int>();
                    for (var i = 0; i != 4; ++i)
                    {
                        if (tbGift.Param[i * 2] != -1)
                        {
                            character.mBag.AddItem(tbGift.Param[i * 2], tbGift.Param[i * 2 + 1],
                                                   eCreateItemType.Gift);
                        }
                    }
                }
                break;

                //在线时长
                case eRewardType.OnlineReward:
                {
                    result = character.mBag.AddItem(tbGift.Param[1], tbGift.Param[2], eCreateItemType.Online);
                }
                break;

                //等级奖励
                case eRewardType.LevelReward:
                {
                    for (var i = 1; i <= 5; ++i)
                    {
                        var count = tbGift.Param[i + 5];
                        if (tbGift.Param[i] != -1)
                        {
                            character.mBag.AddItem(tbGift.Param[i], count, eCreateItemType.LevelUp);
                        }
                    }
                }
                break;

                //连续登陆
                case eRewardType.ContinuesLoginReward:
                {
                    //result = character.mBag.AddItem(tbGift.Param[1], tbGift.Param[2]);

                    var days = character.GetExData(17);
                    if (days > 5)
                    {
                        days = 5;
                    }
                    for (var i = 0; i < days; ++i)
                    {
                        var tbGift2 = Table.GetGift(13 + i);
                        if (character.GetFlag(tbGift2.Flag))
                        {
                            continue;
                        }
                        character.mBag.AddItem(tbGift2.Param[1], tbGift2.Param[2], eCreateItemType.ContinueDay);
                        character.SetFlag(tbGift2.Flag);
                    }
                    return(ErrorCodes.OK);
                }

                //签到
                case eRewardType.MonthCheckinReward:
                {
                    if (character.GetFlag(466))
                    {
//补签
                        var SupplementCount = character.GetExData(18);
                        var needGold        =
                            (int)
                            (tbGift.Param[4] * SkillExtension.Pow(tbGift.Param[5] / 10000.0f, SupplementCount));
                        needGold = needGold - needGold % 5;
                        character.mBag.DeleteItem((int)eResourcesType.DiamondRes, needGold,
                                                  eDeleteItemType.ReSign);
                        character.SetExData(18, SupplementCount + 1);
                        character.AddExData(tbGift.Exdata, 1);
                        result = character.mBag.AddItem(tbGift.Param[2], tbGift.Param[3], eCreateItemType.ReSign);
                    }
                    else
                    {
//签到
                        character.SetFlag(466);
                        character.AddExData(tbGift.Exdata, 1);
                        result = character.mBag.AddItem(tbGift.Param[2], tbGift.Param[3], eCreateItemType.Sign);
                    }
                }
                break;

                ////每日活跃度
                //case eRewardType.DailyActivity:
                //    {
                //        character.AddExData(tbGift.Param[3], tbGift.Param[0]);
                //    }
                //    break;
                //每日活跃奖励
                case eRewardType.DailyActivityReward:
                {
                    result = character.mBag.AddItem(tbGift.Param[0], tbGift.Param[1], eCreateItemType.Activity);
                }
                break;

                //七天登录奖励
                case eRewardType.SevenDayReward:
                {
                    for (var i = 0; i != 3; i++)
                    {
                        character.mBag.AddItem(tbGift.Param[i * 2 + 1], tbGift.Param[i * 2 + 2],
                                               eCreateItemType.SevenDayReward);
                    }
                    character.mBag.AddItem(tbGift.Param[7], tbGift.Param[8], eCreateItemType.SevenDayReward);
                    character.SetFlag(tbGift.Flag);
                }
                break;

                default:
                    Logger.Warn("Gift[{0}] type is overflow", giftId);
                    break;
                }
                if (result == ErrorCodes.OK)
                {
                    character.SetFlag(tbGift.Flag);
                }
            }
            break;

            case eActivationRewardType.DailyVipGift:
            {
                var vipLevel = character.mBag.GetRes(eResourcesType.VipLevel);
                var tbVip    = Table.GetVIP(vipLevel);
                Dictionary <int, int> dic = new Dictionary <int, int>();
                Utils.GetVipReward(vipLevel, ref dic);



                if (dic.Count == 0)
                {
                    return(ErrorCodes.Error_NoVipGift);
                }
                var tbDA = Table.GetDailyActivity(giftId);
                var flag = tbDA.CommonParam[0];
                if (character.GetFlag(flag))
                {
                    return(ErrorCodes.Error_VipGiftGained);
                }
                result = BagManager.CheckAddItemList(character.mBag, dic);
                if (result != ErrorCodes.OK)
                {
                    return(result);
                }
                character.SetFlag(flag);

                result = character.mBag.AddItems(dic, eCreateItemType.DailyVipGift);
            }
            break;

            case eActivationRewardType.MonthCard:
            {
                var diaCount = Table.GetServerConfig(419).ToInt();
                result = character.mBag.AddRes(eResourcesType.DiamondRes, diaCount, eCreateItemType.MonthCard);
                var tbDA = Table.GetDailyActivity(giftId);
                var flag = tbDA.CommonParam[0];
                if (character.GetFlag(flag))
                {
                    return(ErrorCodes.Error_MonthCardGained);
                }
                character.SetFlag(flag);
                character.SetFlag(tbDA.CommonParam[0]);
                character.AddExData((int)eExdataDefine.e778, 1);
            }
            break;

            case eActivationRewardType.WeekCard:
            {
                var tbRecharge = Table.GetRecharge(43);
                var diaCount   = tbRecharge.Param[0];      //策划配置到此列
                result = character.mBag.AddRes(eResourcesType.DiamondRes, diaCount, eCreateItemType.WeekCard);
                var tbDA = Table.GetDailyActivity(giftId);
                var flag = tbDA.CommonParam[0];
                if (character.GetFlag(flag))
                {
                    return(ErrorCodes.Error_WeekCardGained);
                }
                character.SetFlag(flag);
                character.AddExData((int)eExdataDefine.e779, 1);
            }
            break;

            case eActivationRewardType.LifeCard:
            {
                var tbRecharge = Table.GetRecharge(giftId);
                if (null == tbRecharge)
                {
                    return(ErrorCodes.Error_GiftID);
                }
                var flagId = tbRecharge.Param[2];
                if (character.GetFlag(flagId))
                {
                    return(ErrorCodes.Error_LifeCardGained);
                }
                var diaCount = tbRecharge.Param[0];
                result = character.mBag.AddRes(eResourcesType.DiamondRes, diaCount, eCreateItemType.LifeCard);
                if (result == ErrorCodes.OK)
                {
                    character.SetFlag(flagId);
                }
                else
                {
                    return(result);
                }
            }
            break;
            }
            return(result);
        }