Beispiel #1
0
def mine_accelerate_1254(data, player):
    """docstring for battle"""
    request = mine_pb2.MineAccelerateRequest()
    request.ParseFromString(data)
    pos = request.pos                    # 矿所在位置
    response = mine_pb2.MineAccelerateResponse()

    need_gold = player.mine.get_acc_time_gold(pos)
    if need_gold <= 0:
        logger.error('gold num error:%s', need_gold)
        response.res.result = False
        response.res.result_no = 125401
        return response.SerializePartialToString()

    price = []
    price.append(CommonGroupItem(const.COIN, need_gold, need_gold, const.GOLD))

    def func():
        consume_return_data = item_group_helper.consume(player,
                                                        price,
                                                        const.MINE_ACC)
        item_group_helper.get_return(player,
                                     consume_return_data,
                                     response.consume)
        response.res.result = player.mine.acc_mine_time(pos)

    player.pay.pay(need_gold, const.MINE_ACC, func)
    tlog_action.log('MineAccelerate', player, need_gold)
    response.res.result = True
    logger.debug('mine accelerate:%s', response)
    return response.SerializePartialToString()
Beispiel #2
0
class BigBag(object):
    def __init__(self, big_bag_config_id):
        self.big_bag = game_configs.big_bag_config.get(big_bag_config_id)
        if not self.big_bag:
            logger.error("big_bag is None %s, %s", big_bag_config_id,
                         game_configs.big_bag_config)

    def get_drop_items(self):
        """获取大包内物品"""
        drop_items = []
        try:
            for small_bag_id, small_bag_times, is_uniq in \
                    zip(self.big_bag.small_packages, self.big_bag.small_package_times, self.big_bag.is_uniq_list):
                small_bag = SmallBag(small_bag_id)
                items = small_bag.get_drop_items()
                if is_uniq:
                    ids = random_multi_pick_without_repeat(
                        items, small_bag_times)
                else:
                    ids = random_multi_pick(items, small_bag_times)
                for drop_id in ids:
                    drop_items.append(small_bag.get_drop_item(drop_id))
        except Exception, e:
            logger.exception(e)
        drop_item_group = []
        for drop_item in drop_items:
            if drop_item.item_type == 0:
                continue
            drop_item_type = u'%s' % drop_item.item_type
            drop_item_no = drop_item.item_no
            drop_item_num = drop_item.item_num
            drop_item_group.append(
                CommonGroupItem(drop_item_no, drop_item_num, drop_item_num,
                                drop_item_type))
        return drop_item_group
Beispiel #3
0
def parse(data):

    item_group = []
    for typeid, lst in data.items():
        min_num = lst[0]
        max_num = lst[1]
        obj_id = lst[2]
        item_group.append(CommonGroupItem(obj_id, max_num, min_num, typeid))
    return item_group
Beispiel #4
0
def reset_1242(data, player):
    """
    重置地图,ok
    """
    request = mine_pb2.resetMap()
    request.ParseFromString(data)
    response = mine_pb2.resetResponse()
    response.free = request.free
    # print '1242-request', request
    reset_pos = []
    if request.free == 1:
        if player.mine.can_reset_free():
            reset_pos = player.mine.reset_map()
            mine_status(player, response.mine)
            response.res.result = True
        else:
            response.res.result = False
            response.res.result_no = 12420
            response.res.message = u"免费次数已用完"
    else:
        if not player.mine.can_reset():
            response.res.result = False
            response.res.result_no = 12421
            response.res.message = u"重置次数已用完"
        else:
            reset_price = player.mine.reset_price()
            price = CommonGroupItem(0, reset_price, reset_price, const.GOLD)
            result = item_group_helper.is_afford(player, [price])  # 校验
            if not result.get('result'):
                response.res.result = False
                response.res.result_no = result.get('result_no')
                response.res.message = u'消费不足!'
            else:
                need_gold = item_group_helper.get_consume_gold_num([price])

                def func():
                    consume_data = item_group_helper.consume(player,
                                                             [price],
                                                             const.MINE_RESET)
                    item_group_helper.get_return(player,
                                                 consume_data,
                                                 response.consume)
                    reset_pos = player.mine.reset_map()
                    mine_status(player, response.mine)
                    response.res.result = True
                player.pay.pay(need_gold, const.MINE_RESET, func)
    player.mine.save_data()
    player.act.mine_refresh()
    target_update(player, [56])

    reset_times, _, _ = player.mine.reset_times
    tlog_action.log('MineReset', player, reset_times,
                    str(reset_pos))
    return response.SerializePartialToString()
Beispiel #5
0
def activate_fund_activity_1851(data, player):
    # 成长基金活动
    request = activity_pb2.GetActGiftRequest()
    request.ParseFromString(data)
    activity_id = request.act_id
    response = activity_pb2.GetActGiftResponse()
    response.res.result = False

    if not player.act.is_activiy_open(activity_id):
        response.res.result = False
        response.res.result_no = 800
        return response.SerializeToString()

    act_item = game_configs.activity_config.get(activity_id)

    if act_item.parameterB == 0:
        logger.error('no need activate this activity:%s', activity_id)
        response.res.result_no = 185101
        return response.SerializeToString()

    info = get_act_info(player, activity_id)

    if info.get('state') != 2:
        response.res.result = False
        logger.error("条件不满足")
        response.res.result_no = 800
        return response.SerializeToString()

    need_gold = act_item.parameterB
    price = []
    price.append(
        CommonGroupItem(const.RESOURCE, need_gold, need_gold, const.GOLD))

    def func():
        consume_return_data = item_group_helper.consume(
            player, price, const.MINE_ACC)
        item_group_helper.get_return(player, consume_return_data,
                                     response.consume)

    player.pay.pay(need_gold, const.FUND, func)

    player.act.act_infos[activity_id][0] = 3
    player.act.update_51()
    player.act.save_data()

    # fund['consume'] = need_gold
    # player.fund_activity.check_precondition()
    # player.fund_activity.check_time()
    response.res.result = True
    return response.SerializeToString()
Beispiel #6
0
def acc_mine_1250(data, player):
    """
    增产, 只有主矿能增产, 增产累计时长,ok
    """
    request = mine_pb2.positionRequest()
    request.ParseFromString(data)
    response = mine_pb2.IncreaseResponse()

    detail_info = player.mine.detail_info(request.position)
    last_increase = detail_info['increase']

    now = xtime.timestamp()
    main_mine = game_configs.mine_config.get(10001)
    if last_increase + main_mine.increasTime * 60 - now > main_mine.increasMaxTime * 60:
        response.res.result = True
        response.result_no = 12501
        return response.SerializePartialToString()

    mine_item = game_configs.mine_config[detail_info['mine_id']]
    increasePrice = mine_item.increasePrice

    price = CommonGroupItem(0, increasePrice, increasePrice, const.GOLD)
    result = item_group_helper.is_afford(player, [price])  # 校验
    if not result.get('result'):
        response.res.result = False
        response.res.result_no = result.get('result_no')
        response.res.message = u'消费不足!'
        return response.SerializePartialToString()
    else:
        response.res.result = True
    # print 'price', price
    need_gold = item_group_helper.get_consume_gold_num([price])

    def func():
        consume_return_data = item_group_helper.consume(player,
                                                        [price],
                                                        const.MINE_ACC)
        item_group_helper.get_return(player,
                                     consume_return_data,
                                     response.consume)

    player.pay.pay(need_gold, const.MINE_ACC, func)
    last_time = player.mine.increase_mine()
    player.mine.save_data()
    tlog_action.log('MineAcc', player, time.strftime("%Y-%m-%d %X",
                    time.localtime(int(last_time))))

    response.position = 0
    response.last_time = int(last_time)
    return response.SerializePartialToString()
Beispiel #7
0
 def add_settle_coin(self, drops, coin):
     """docstring for add_settle_coin"""
     drops.append(CommonGroupItem(const.RESOURCE, coin, coin, const.COIN))
Beispiel #8
0
    def fighting_settlement(self, result, star_num):
        """战斗结算
        stage_type: 1剧情关卡 6精英关卡 4活动宝库关卡5活动校场关卡 14隐藏关卡
        """
        stage_info = self._get_stage_config()
        self.owner.stage_component.settlement(self._stage_id, result, star_num)
        self.owner.stage_component.save_data()
        drops = []
        if result:
            # 关卡掉落
            for _ in range(self._drop_num):
                common_bag = BigBag(self._common_drop)
                common_drop = common_bag.get_drop_items()
                drops.extend(common_drop)
            if stage_info.type == 1 or stage_info.type == 14:
                self.get_stage_drop(stage_info, drops)
                self.owner.stage_component.save_data()
            else:
                if self._elite_drop:
                    elite_bag = BigBag(self._elite_drop)
                    elite_drop = elite_bag.get_drop_items()
                    drops.extend(elite_drop)

        if stage_info.type == 4:
            # 宝库活动副本
            formula = game_configs.formula_config.get("Activitycurrency").get(
                "formula")
            assert formula != None, "Activitycurrency formula can not be None!"
            coin_num = eval(
                formula, {
                    "damage_percent": self.damage_percent,
                    "currency": stage_info.currency
                })
            if coin_num:
                drops.append(
                    CommonGroupItem(const.COIN, coin_num, coin_num,
                                    const.RESOURCE))

        elif stage_info.type == 5:
            # 校场活动副本
            formula = game_configs.formula_config.get("ActivityExpDrop").get(
                "formula")
            assert formula != None, "ActivityExpDrop formula can not be None!"
            exp_drop = eval(
                formula, {
                    "damage_percent": self.damage_percent,
                    "ExpDrop": stage_info.ExpDrop
                })

            if stage_info.id % 10 == 1:
                formula = game_configs.formula_config.get(
                    "ActivityExpDropConvert_1").get("formula")
                assert formula != None, "ActivityExpDrop formula can not be None!"
                exp_item_num = eval(formula, {"ActivityExpDrop": exp_drop})
                if exp_item_num >= 1:
                    drops.append(
                        CommonGroupItem(10001, exp_item_num, exp_item_num,
                                        const.ITEM))
            elif stage_info.id % 10 == 2:
                formula = game_configs.formula_config.get(
                    "ActivityExpDropConvert_2").get("formula")
                assert formula != None, "ActivityExpDrop formula can not be None!"
                exp_item_num = eval(formula, {"ActivityExpDrop": exp_drop})
                if exp_item_num >= 1:
                    drops.append(
                        CommonGroupItem(10002, exp_item_num, exp_item_num,
                                        const.ITEM))
            elif stage_info.id % 10 == 3:
                formula = game_configs.formula_config.get(
                    "ActivityExpDropConvert_3").get("formula")
                assert formula != None, "ActivityExpDrop formula can not be None!"
                exp_item_num = eval(formula, {"ActivityExpDrop": exp_drop})
                if exp_item_num >= 1:
                    drops.append(
                        CommonGroupItem(10003, exp_item_num, exp_item_num,
                                        const.ITEM))
        elif stage_info.type == 6:
            # 精英活动副本
            hero_soul_num = stage_info.reward
            if hero_soul_num:
                drops.append(
                    CommonGroupItem(const.RESOURCE, hero_soul_num,
                                    hero_soul_num, const.HERO_SOUL))
            #drops.extend(stage_info.ClearanceReward)

        logger.debug("drops %s" % drops)

        return drops