예제 #1
0
def get_act_gift_1832(data, player):
    args = activity_pb2.GetActGiftRequest()
    args.ParseFromString(data)
    act_id = args.act_id
    response = activity_pb2.GetActGiftResponse()
    response.res.result = False

    act_conf = game_configs.activity_config.get(act_id)
    is_open = player.act.is_activiy_open(act_id)
    if not act_conf or not is_open:
        response.res.result_no = 800
        return response.SerializeToString()
    act_type = act_conf.type
    received_ids = player.act.received_ids.get(act_type)
    if received_ids and act_id in received_ids:
        response.res.result_no = 801
        return response.SerializeToString()
    if act_type == 20:  # 战力
        res = get_20_gift(player, act_conf, response)
        tlog_arg = player.line_up_component.combat_power
    elif act_type == 21:  # 通关关卡
        res = get_21_gift(player, act_conf, response)
        tlog_arg = player.stage_component.stage_progress
    if res:
        if received_ids:
            player.act.received_ids.get(act_type).append(act_id)
        else:
            player.act.received_ids[act_type] = [act_id]
        player.act.save_data()
        response.res.result = True
        tlog_action.log('Activity', player, act_id, tlog_arg)

    return response.SerializeToString()
예제 #2
0
def invite_1908(data, player):
    """发送/接受邀请"""
    request = escort_pb2.InviteEscortTaskRequest()
    request.ParseFromString(data)
    logger.debug("request %s" % request)
    response = common_pb2.CommonResponse()
    task_id = request.task_id
    send_or_in = request.send_or_in
    protect_or_rob = request.protect_or_rob
    task_guild_id = request.task_guild_id
    rob_no = request.rob_no

    escort_open_time_item = game_configs.base_config.get("EscortOpenTime")
    if not is_in_period(escort_open_time_item):
        logger.error("feature not open!")
        response.result = False
        response.result_no = 30000
        return response.SerializePartialToString()
    res = None
    if send_or_in == 1:
        res = send_invite(player, task_id, protect_or_rob, task_guild_id, rob_no)
    elif send_or_in == 2:
        res = in_invite(player, task_id, protect_or_rob, task_guild_id, rob_no)

    response.result = res.get('result')
    if not res.get('result'):
        response.result_no = res.get('result_no')
        return response.SerializePartialToString()

    tlog_action.log('GuildTaskInvite', player, task_id, task_guild_id, send_or_in, protect_or_rob, rob_no)
    response.result = True
    return response.SerializePartialToString()
예제 #3
0
파일: inherit.py 프로젝트: Cuick/traversing
def inherit_equipment_152(pro_data, player):
    """
    装备传承
    """
    request = inherit_pb2.InheritEquipmentRequest()
    request.ParseFromString(pro_data)
    origin_id = request.origin
    target_id = request.target

    response = common_pb2.CommonResponse()

    if is_not_open(player, FO_INHERIT):
        response.result = False
        response.result_no = 837
        return response.SerializeToString()
    origin = player.equipment_component.get_equipment(origin_id)
    target = player.equipment_component.get_equipment(target_id)
    # print origin.attribute.strengthen_lv, target.attribute.strengthen_lv, "+"*10

    if not origin or (not target):
        logger.error("equip %s or %s not exists" % (origin_id, target_id))
        response.result = False
        return response.SerializeToString()

    if origin.attribute.strengthen_lv <= target.attribute.strengthen_lv:
        logger.error(
            "origin equip %s strengthen_lv <= target equip %s strengthen_lv!" %
            (origin_id, target_id))
        response.result = False
        return response.SerializeToString()

    if origin.equipment_config_info.get(
            "quality") != target.equipment_config_info.get("quality"):
        logger.error("origin.quality!=target.quality")
        response.result = False
        return response.SerializeToString()

    i_value = 0

    def func():
        """docstring for func"""
        target.attribute.strengthen_lv = origin.attribute.strengthen_lv
        i_value = target.attribute.strengthen_lv

        origin.attribute.strengthen_lv = 1
        # 传承强化过程
        target.enhance_record.enhance_record = origin.enhance_record.enhance_record
        origin.enhance_record.enhance_record = []

        target.save_data()
        origin.save_data()
        print origin.attribute.strengthen_lv, target.attribute.strengthen_lv, "+" * 10

    gold = game_configs.base_config.get("equInheritPrice")
    player.pay.pay(gold, const.INHERIT_EQUIPMENT, func)
    response.result = True
    tlog_action.log('Inherit', player, 2, origin.base_info.id,
                    origin.base_info.equipment_no, target.base_info.id,
                    target.base_info.equipment_no, i_value)
    return response.SerializeToString()
예제 #4
0
def get_act_gift_1832(data, player):
    args = activity_pb2.GetActGiftRequest()
    args.ParseFromString(data)
    act_id = args.act_id
    response = activity_pb2.GetActGiftResponse()
    response.res.result = False

    act_conf = game_configs.activity_config.get(act_id)
    is_open = player.act.is_activiy_open(act_id)
    if not act_conf or not is_open:
        response.res.result_no = 800
        return response.SerializeToString()
    act_type = act_conf.type
    received_ids = player.act.received_ids.get(act_type)
    if received_ids and act_id in received_ids:
        response.res.result_no = 801
        return response.SerializeToString()
    if act_type == 20:  # 战力
        res = get_20_gift(player, act_conf, response)
        tlog_arg = player.line_up_component.combat_power
    elif act_type == 21:  # 通关关卡
        res = get_21_gift(player, act_conf, response)
        tlog_arg = player.stage_component.stage_progress
    if res:
        if received_ids:
            player.act.received_ids.get(act_type).append(act_id)
        else:
            player.act.received_ids[act_type] = [act_id]
        player.act.save_data()
        response.res.result = True
        tlog_action.log('Activity', player, act_id, tlog_arg)

    return response.SerializeToString()
예제 #5
0
def pvp_daily_award():
    logger.debug('pvp daily send award mail ')
    arena_award = game_configs.base_config.get('arena_day_points')
    records = tb_pvp_rank.zrangebyscore(0, 10000, withscores=True)

    childs = groot.childsmanager.childs
    for k, v in records:
        rank = int(v)
        character_id = int(k)
        if character_id < 10000:
            continue
        for up, down, mail_id in arena_award.values():
            if rank >= up and rank <= down:
                break
        else:
            logger.error('pvp daily award error:%s-%s', rank, character_id)
            continue

        mail_data, _ = deal_mail(conf_id=mail_id, receive_id=character_id)

        for child in childs.values():
            if 'gate' in child.name:
                result = child.pull_message_remote('receive_mail_remote',
                                                   character_id, (mail_data, ))
                if type(result) is bool and result:
                    break
                else:
                    logger.debug('pvp_daily_award_tick result:%s,%s,%s',
                                 result, k, mail_data)
        else:
            message_cache.cache_time('receive_mail_remote', character_id,
                                     60 * 60 * 24 * 180, mail_data)
        tlog_action.log('PvpDailyAward', character_id, mail_id, rank)
예제 #6
0
파일: mine.py 프로젝트: Cuick/traversing
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()
예제 #7
0
def compose_equipment_403(pro_data, player):
    """合成装备
    @param dynamic_id:
    @param pro_data:
    @return:
    """
    request = equipment_request_pb2.ComposeEquipmentRequest()
    request.ParseFromString(pro_data)
    equipment_chip_no = request.no
    response = equipment_response_pb2.ComposeEquipmentResponse()

    open_stage_id = game_configs.base_config.get('equAssembleOpenStage')
    if player.stage_component.get_stage(open_stage_id).state != 1:
        response.res.result = False
        response.res.result_no = 837
        return response.SerializeToString()

    data = compose_equipment(equipment_chip_no, player)
    result = data.get('result')
    res = response.res
    if not result:
        res.result_no = data.get('result_no')
        res.message = data.get('message')
        return response.SerializePartialToString()

    equipment_obj = data.get('equipment_obj')
    equ = response.equ
    equipment_obj.update_pb(equ)
    tlog_action.log('EquipmentCompose', player,
                    equipment_obj.base_info.equipment_no,
                    equipment_obj.base_info.id)

    res.result = True
    return response.SerializePartialToString()
예제 #8
0
def melting_equipment(equipment_id, response, player):
    """熔炼
    @param dynamic_id:
    @param equipment_ids:
    @param kwargs:
    @return:
    """
    if is_not_open(player, FO_EQUIP_SACRIFICE):
        return {"result": False, "result_no": 837}
    equipment_obj = player.equipment_component.get_equipment(equipment_id)
    if not equipment_obj:
        return {'result': False, 'result_no': 401, 'message': u''}
    melting_items = equipment_obj.melting_item
    gain = item_group_helper.gain(player, melting_items,
                                  const.MELTING_EQUIPMENT)

    item_group_helper.get_return(player, gain, response.cgr)

    tlog_action.log('EquipmentMelting', player,
                    equipment_obj.base_info.equipment_no,
                    equipment_obj.base_info.id)

    # 删除装备
    player.equipment_component.delete_equipment(equipment_id)

    # 添加强化金币
    strength_coin = 0
    for record in equipment_obj.enhance_record.enhance_record:
        strength_coin += record[2]

    strength_coin = int(strength_coin *
                        game_configs.base_config.get("equRefundRatio"))
    return strength_coin
예제 #9
0
def upgrade_guild_skill_2404(pro_data, player):
    """
    升级军团技能
    """
    request = guild_pb2.UpGuildSkillRequest()
    request.ParseFromString(pro_data)
    logger.error("request %s" % request)
    response = guild_pb2.UpGuildSkillResponse()
    logger.error("request %s" % request)
    skill_type = request.skill_type
    data = remote_gate['world'].guild_boss_init_remote(player.guild.g_id)
    guild_skills = data.get("guild_skills")
    build = data.get("build")
    skill_level = guild_skills.get(skill_type)
    logger.debug("skill level %s" % skill_level)
    # check
    guild_skill_item = game_configs.guild_skill_config.get(skill_type).get(skill_level)
    logger.debug("guild_skill_config %s" % guild_skill_item)
    response.res.result = False

    if guild_skills.get(skill_type) >= 10:
        logger.debug("guild skill %s has reach the max!" % skill_type)
        response.res.result_no = 24044
        return response.SerializeToString()

    #if not is_afford(player, guild_skill_item.Consume).get('result'):
        #logger.debug("consume not enough!")
        #response.res.result_no = 24041
        #return response.SerializeToString()

    for condition2 in guild_skill_item.Skill_condition[2]:
        tmp_guild_skill_item = game_configs.guild_skill_config.get(condition2)
        _skill_type = tmp_guild_skill_item.type
        skill_level = tmp_guild_skill_item.Skill_level
        if skill_level > guild_skills[_skill_type]:
            logger.debug("skill level conidtion not enough!")
            response.res.result_no = 24042
            return response.SerializeToString()

    for condition1 in guild_skill_item.Skill_condition[1]:
        tmp_guild_item = game_configs.guild_config.get(condition1)
        guild_type = tmp_guild_item.type
        guild_level = tmp_guild_item.level
        if guild_level > build[guild_type]:
            logger.debug("guild build level not enough!")
            response.res.result_no = 24043
            return response.SerializeToString()

    res = remote_gate['world'].upgrade_guild_skill_remote(player.guild.g_id, skill_type)
    if res.get("result"):
        # consume
        #return_data = consume(player, guild_skill_item.Consume, const.UPGRADE_GUILD_SKILL)
        #get_return(player, return_data, response.consume)
        response.guild_skill_point = guild_skill_item.Consumption

    response.res.result = res.get("result")
    tlog_action.log('UpgradeGuildSkill', player, player.guild.g_id,
                    skill_type, guild_skills.get(skill_type)+1, guild_skill_item.Consumption)
    logger.debug("response %s" % response)
    return response.SerializeToString()
예제 #10
0
    def change_hero(self, slot_no, hero_no, change_type):
        """更换阵容主将
        @param slot_no:
        @param hero_no:
        @:param change_type: 0:阵容  1:助威
        @return:
        """
        if not change_type:
            slot_obj = self._line_up_slots.get(slot_no)
        else:
            slot_obj = self._sub_slots.get(slot_no)

        origin_hero_no = slot_obj.hero_slot.hero_no
        origin_hero = self.owner.hero_component.get_hero(origin_hero_no)
        if origin_hero:
            origin_hero.is_online = False
        else:
            origin_hero_no = 0
        slot_obj.change_hero(hero_no)

        target_hero = self.owner.hero_component.get_hero(hero_no)
        if hero_no != 0:
            assert target_hero != None, "change hero can not be None!"
            target_hero.is_online = True

        tlog_action.log('LineUpChange', self.owner, slot_no, origin_hero_no,
                        hero_no, change_type)
        # 如果无双条件不满足,则无双设为空
        hero_nos = set(self.hero_nos)  # 阵容英雄编号
        for skill_id, item in game_configs.warriors_config.items():
            if skill_id not in self._unpars:
                conditions = item.get('conditions')
                if conditions and hero_nos.issuperset(conditions):
                    self._unpars[skill_id] = 1
예제 #11
0
def compose_equipment_403(pro_data, player):
    """合成装备
    @param dynamic_id:
    @param pro_data:
    @return:
    """
    request = equipment_request_pb2.ComposeEquipmentRequest()
    request.ParseFromString(pro_data)
    equipment_chip_no = request.no
    response = equipment_response_pb2.ComposeEquipmentResponse()

    data = compose_equipment(equipment_chip_no, player)
    result = data.get('result')
    res = response.res
    if not result:
        res.result_no = data.get('result_no')
        res.message = data.get('message')
        return response.SerializePartialToString()

    equipment_obj = data.get('equipment_obj')
    equ = response.equ
    equipment_obj.update_pb(equ)
    tlog_action.log('EquipmentCompose', player,
                    equipment_obj.base_info.equipment_no,
                    equipment_obj.base_info.id)

    res.result = True
    return response.SerializePartialToString()
예제 #12
0
def melting_equipment(equipment_id, response, player):
    """熔炼
    @param dynamic_id:
    @param equipment_ids:
    @param kwargs:
    @return:
    """
    if is_not_open(player, FO_EQUIP_SACRIFICE):
        return {"result": False, "result_no": 837}
    equipment_obj = player.equipment_component.get_equipment(equipment_id)
    if not equipment_obj:
        return {'result': False, 'result_no': 401, 'message': u''}
    melting_items = equipment_obj.melting_item
    gain = item_group_helper.gain(player, melting_items, const.MELTING_EQUIPMENT)

    item_group_helper.get_return(player, gain, response.cgr)

    tlog_action.log('EquipmentMelting', player,
                    equipment_obj.base_info.equipment_no,
                    equipment_obj.base_info.id)

    # 删除装备
    player.equipment_component.delete_equipment(equipment_id)

    # 添加强化金币
    strength_coin = 0
    for record in equipment_obj.enhance_record.enhance_record:
        strength_coin += record[2]

    strength_coin = int(strength_coin*game_configs.base_config.get("equRefundRatio"))
    return strength_coin
예제 #13
0
def compose_equipment_403(pro_data, player):
    """合成装备
    @param dynamic_id:
    @param pro_data:
    @return:
    """
    request = equipment_request_pb2.ComposeEquipmentRequest()
    request.ParseFromString(pro_data)
    equipment_chip_no = request.no
    response = equipment_response_pb2.ComposeEquipmentResponse()

    data = compose_equipment(equipment_chip_no, player)
    result = data.get('result')
    res = response.res
    if not result:
        res.result_no = data.get('result_no')
        res.message = data.get('message')
        return response.SerializePartialToString()

    equipment_obj = data.get('equipment_obj')
    equ = response.equ
    equipment_obj.update_pb(equ)
    tlog_action.log('EquipmentCompose', player,
                    equipment_obj.base_info.equipment_no,
                    equipment_obj.base_info.id)

    res.result = True
    return response.SerializePartialToString()
예제 #14
0
파일: shop.py 프로젝트: isphinx/traversing
def send_tlog(player, shop_item):
        item_type = shop_item.gain[0].item_type
        item_id = shop_item.gain[0].item_no
        count = shop_item.gain[0].num
        money = shop_item.consume[0].num
        money_type = shop_item.consume[0].item_no
        discount_money = 0
        discount_money_type = 0
        is_discount = 0
        if shop_item.discountPrice:
            is_discount = 1
            discount_money = shop_item.discountPrice[0].num
            discount_money_type = shop_item.discountPrice[0].item_no
        limit_vip_everyday = []
        if shop_item.limitVIPeveryday:
            for i in range(30):
                if shop_item.limitVIPeveryday.get(i):
                    limit_vip_everyday.append(shop_item.limitVIPeveryday.get(i))
        limit_vip = []
        if shop_item.limitVIP:
            for i in range(30):
                if shop_item.limitVIP.get(i):
                    limit_vip.append(shop_item.limitVIP.get(i))

        tlog_action.log('ItemMoneyFlow', player, item_type, item_id, count,
                        money, money_type, discount_money, discount_money_type,
                        '', '', is_discount)
예제 #15
0
def refresh_tasks_1904(data, player):
    """刷新任务列表"""
    response = escort_pb2.RefreshEscortTaskResponse()
    response.res.result = True
    escort_component = player.escort_component

    if escort_component.refresh_times >= game_configs.base_config.get("EscortRefreshFrequencyMax"):
        logger.error("reach the max refresh time!")
        response.res.result = False
        response.res.result_no = 190401
        return response.SerializePartialToString()

    price = game_configs.base_config.get("EscortRefreshPrice")
    need_gold = price[escort_component.refresh_times]

    def func():
        escort_component.refresh_tasks() #刷新任务
        escort_component.refresh_times = escort_component.refresh_times + 1
        escort_component.save_data()
        for _, task in escort_component.tasks.items():
            task_pb = response.tasks.add()
            update_task_pb(task, task_pb)
    player.pay.pay(need_gold, const.REFRESH_ESCORT_TASKS, func)

    tlog_action.log('RefreshEscortTasks', player, escort_component.refresh_times+1)

    logger.debug("response %s" % response)
    return response.SerializePartialToString()
예제 #16
0
    def change_hero(self, slot_no, hero_no, change_type):
        """更换阵容主将
        @param slot_no:
        @param hero_no:
        @:param change_type: 0:阵容  1:助威
        @return:
        """
        if not change_type:
            slot_obj = self._line_up_slots.get(slot_no)
        else:
            slot_obj = self._sub_slots.get(slot_no)

        origin_hero_no = slot_obj.hero_slot.hero_no
        origin_hero = self.owner.hero_component.get_hero(origin_hero_no)
        if origin_hero:
            origin_hero.is_online = False
        else:
            origin_hero_no = 0
        slot_obj.change_hero(hero_no)
        if hero_no == 0 and slot_no == self.caption_pos:
            # 队长下阵,更改队长
            self.remove_caption_hero()

        target_hero = self.owner.hero_component.get_hero(hero_no)
        if hero_no != 0:
            assert target_hero != None, "change hero can not be None!"
            target_hero.is_online = True

            # 更新 七日奖励
            target_update(self.owner, [55])

        tlog_action.log('LineUpChange', self.owner, slot_no, origin_hero_no,
                        hero_no, change_type)
예제 #17
0
def send_tlog(player, shop_item):
    item_type = shop_item.gain[0].item_type
    item_id = shop_item.gain[0].item_no
    count = shop_item.gain[0].num
    money = shop_item.consume[0].num
    money_type = shop_item.consume[0].item_no
    discount_money = 0
    discount_money_type = 0
    is_discount = 0
    if shop_item.discountPrice:
        is_discount = 1
        discount_money = shop_item.discountPrice[0].num
        discount_money_type = shop_item.discountPrice[0].item_no
    limit_vip_everyday = []
    if shop_item.limitVIPeveryday:
        for i in range(30):
            if shop_item.limitVIPeveryday.get(i):
                limit_vip_everyday.append(shop_item.limitVIPeveryday.get(i))
    limit_vip = []
    if shop_item.limitVIP:
        for i in range(30):
            if shop_item.limitVIP.get(i):
                limit_vip.append(shop_item.limitVIP.get(i))

    tlog_action.log('ItemMoneyFlow', player, item_type, item_id, count, money,
                    money_type, discount_money, discount_money_type, '', '',
                    is_discount)
예제 #18
0
파일: stage.py 프로젝트: isphinx/traversing
    def settle(self, result, response):
        """
        战斗结算
        """
        player = self._player
        stage_id = self._stage_id
        conf = self.get_stage_config()

        # todo: 更新战斗次数
        # 体力
        if result:

            player.stamina.stamina -= conf.vigor
            player.stamina.save_data()

            # 活跃度
            # 结算
            stage_util.settle(player, result, response, conf, stage_type=1)
            # hook task
            hook_task(player, CONDITIONId.ANY_STAGE, 1)
            hook_task(player, CONDITIONId.STAGE, stage_id)

            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 1)
        else:
            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 0)
예제 #19
0
def continus_sign_in_1402(pro_data, player):
    """累积签到"""
    request = ContinuousSignInRequest()
    request.ParseFromString(pro_data)
    days = request.sign_in_days
    response = ContinuousSignInResponse()

    # 验证连续签到日期
    if len(player.sign_in_component.sign_in_days) < days:
        response.res.result = False
        response.res.result_no = 1402
        return response.SerializePartialToString()
    if days in player.sign_in_component.continuous_sign_in_prize:
        response.res.result = False
        response.res.result_no = 1403
        return response.SerializePartialToString()

    player.sign_in_component.continuous_sign_in_prize.append(days)
    player.sign_in_component.save_data()

    reward, config_id = player.sign_in_component.get_sign_in_reward(days)
    if not reward:
        response.res.result = False
        response.res.result_no = 1404
        return response.SerializePartialToString()
    return_data = gain(player, reward, const.CONTINUS_SIGN)
    get_return(player, return_data, response.gain)

    tlog_action.log('ContinusSignIn', player, days, config_id)

    response.res.result = True
    logger.debug(response)
    return response.SerializePartialToString()
예제 #20
0
    def reset_overcome(self):
        _times = self.pvp_overcome_refresh_count + 1
        if _times > self.owner.base_info.buyGgzj_times:
            logger.error('overcome reset times error:%s-%s',
                         self.pvp_overcome_refresh_count,
                         self.owner.base_info.buyGgzj_times)
            return False

        character_info = tb_character_info.getObj(self.owner.base_info.id)

        types = [20001, 20002, 20003]
        ids = get_player_ids(self.owner.base_info.id,
                             int(character_info.hget('attackPoint')),
                             types, 47)
        if not ids:
            return False
        logger.debug('reset overcome:%s', ids)
        self._pvp_overcome = ids
        self._pvp_overcome_refresh_time = time.time()
        self._pvp_overcome_refresh_count += 1
        self._pvp_overcome_current = 1
        self._pvp_overcome_awards = []
        self._pvp_overcome_stars = 0
        self._pvp_overcome_buff_init = {}
        self._pvp_overcome_buff = {}
        self._pvp_overcome_failed = False
        self.save_data()
        tlog_action.log('OvercomeReset',
                        self.owner,
                        self._pvp_overcome_refresh_count)
        return True
예제 #21
0
    def change_hero(self, slot_no, hero_no, change_type):
        """更换阵容主将
        @param slot_no:
        @param hero_no:
        @:param change_type: 0:阵容  1:助威
        @return:
        """
        if not change_type:
            slot_obj = self._line_up_slots.get(slot_no)
        else:
            slot_obj = self._sub_slots.get(slot_no)

        origin_hero_no = slot_obj.hero_slot.hero_no
        origin_hero = self.owner.hero_component.get_hero(origin_hero_no)
        if origin_hero:
            origin_hero.is_online = False
        else:
            origin_hero_no = 0
        slot_obj.change_hero(hero_no)
        if hero_no == 0 and slot_no == self.caption_pos:
            # 队长下阵,更改队长
            self.remove_caption_hero()

        target_hero = self.owner.hero_component.get_hero(hero_no)
        if hero_no != 0:
            assert target_hero != None, "change hero can not be None!"
            target_hero.is_online = True

            # 更新 七日奖励
            target_update(self.owner, [55])

        tlog_action.log('LineUpChange', self.owner, slot_no, origin_hero_no,
                        hero_no, change_type)
예제 #22
0
파일: stage.py 프로젝트: wyjstar/traversing
    def settle(self, result, response, star_num=0):
        """
        战斗结算
        """
        player = self._player
        stage_id = self._stage_id
        conf = self.get_stage_config()

        # todo: 更新战斗次数
        # 体力
        if result:

            #player.stamina.stamina -= conf.vigor
            player.finance.consume(const.STAMINA, conf.vigor, const.STAGE)
            player.finance.save_data()
            player.stamina.save_data()

            # 活跃度
            # 结算
            stage_util.settle(player, result, response, conf, star_num=star_num)
            # hook task
            hook_task(player, CONDITIONId.ANY_STAGE, 1)
            hook_task(player, CONDITIONId.STAGE, stage_id)

            # 更新 七日奖励
            target_update(player, [45])

            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 1)
        else:
            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 0)
예제 #23
0
def get_level_gift_1131(data, player):
    """get online gift"""
    request = level_gift_pb2.GetLevelGift()
    request.ParseFromString(data)
    response = level_gift_pb2.GetLevelGiftResponse()

    activity_level_gift = game_configs.activity_config.get(3)

    if request.gift_id in player.level_gift.received_gift_ids:
        response.result = False
        return response.SerializeToString()

    for a in activity_level_gift:
        if request.gift_id == a['id']:
            gain_data = a['reward']
            return_data = gain(player, gain_data, const.LEVEL_GIFT)
            get_return(player, return_data, response.gain)

            player.level_gift.received_gift_ids.append(request.gift_id)
            player.level_gift.save_data()
            tlog_action.log('LevelGift', player, request.gift_id)

            response.result = True
            return response.SerializeToString()

    response.result = False
    return response.SerializeToString()
예제 #24
0
파일: task.py 프로젝트: wyjstar/traversing
def share_1823(data, player):
    """分享"""
    args = task_pb2.ShareRequest()
    args.ParseFromString(data)
    tid = args.tid
    share_type = 0
    if args.share_type:
        share_type = args.share_type
    response = task_pb2.ShareResponse()

    player.task.update()

    task_conf = game_configs.achievement_config.get('tasks').get(tid)
    if task_conf.sort != 4:
        response.res.result = False
        response.res.result_no = 800
        return response.SerializeToString()

    res = get_condition_info(player, task_conf)

    condition_info = res.get('condition_info')
    for x in condition_info:
        if not x[1] and task_conf.condition.get(x[0])[0] != CONDITIONId.SHARE:
            response.res.result = False
            response.res.result_no = 800
            return response.SerializeToString()

    player.task.tasks[tid] = 2
    player.task.save_data()
    tlog_action.log('Share', player, tid, share_type)

    response.tid = tid
    response.res.result = True
    return response.SerializeToString()
예제 #25
0
def melting_equipment(equipment_id, response, player):
    """熔炼
    @param dynamic_id:
    @param equipment_ids:
    @param kwargs:
    @return:
    """
    equipment_obj = player.equipment_component.get_equipment(equipment_id)
    if not equipment_obj:
        return {'result': False, 'result_no': 401, 'message': u''}
    melting_items = equipment_obj.melting_item
    gain = item_group_helper.gain(player, melting_items, const.MELTING_EQUIPMENT)

    item_group_helper.get_return(player, gain, response.cgr)

    tlog_action.log('EquipmentMelting', player,
                    equipment_obj.base_info.equipment_no,
                    equipment_obj.base_info.id)

    # 删除装备
    player.equipment_component.delete_equipment(equipment_id)

    # 添加强化金币
    strength_coin = 0
    for record in equipment_obj.enhance_record.enhance_record:
        strength_coin += record[2]

    strength_coin = int(strength_coin*game_configs.base_config.get("equRefundRatio"))
    player.finance.coin += strength_coin
    player.finance.save_data()
    response.cgr.finance.coin += strength_coin
    change = response.cgr.finance.finance_changes.add()
    change.item_type = 107
    change.item_num = strength_coin
    change.item_no = 1
예제 #26
0
파일: hero.py 프로젝트: isphinx/traversing
def hero_break_logic(hero_no, player, response):
    hero = player.hero_component.get_hero(hero_no)
    hero_info = game_configs.hero_config.get(hero_no)

    # 验证武将是否突破到上限
    if hero.break_level == hero_info.breakLimit:
        return {"result": False, "result_no": 201}

    consume_info = hero_info.get('consume' + str(hero.break_level+1))
    item_group = parse(consume_info)
    hero_info = game_configs.hero_config.get(hero.hero_no)
    # 判断是否足够
    result = is_afford(player, item_group)  # 校验
    if not result.get('result'):
        return {"result": False, "result_no": result.get('result_no')}

    # 返回消耗
    return_data = consume(player, item_group, const.HERO_BREAK)
    get_return(player, return_data, response.consume)

    hero.break_level += 1
    notice_item = game_configs.notes_config.get(2003)
    if hero.break_level in notice_item.parameter1:
        push_notice(2003, player_name=player.base_info.base_name, hero_no=hero.hero_no, hero_break_level=hero.break_level)
    hero.save_data()
    # 3、返回
    tlog_action.log('HeroBreak', player, hero_no, hero.break_level)
    return {"result": True, "break_level": hero.break_level}
예제 #27
0
파일: escort.py 프로젝트: Cuick/traversing
def invite_1908(data, player):
    """发送/接受邀请"""
    request = escort_pb2.InviteEscortTaskRequest()
    request.ParseFromString(data)
    logger.debug("request %s" % request)
    response = common_pb2.CommonResponse()
    task_id = request.task_id
    send_or_in = request.send_or_in
    protect_or_rob = request.protect_or_rob
    task_guild_id = request.task_guild_id
    rob_no = request.rob_no

    escort_open_time_item = game_configs.base_config.get("EscortOpenTime")
    if not is_in_period(escort_open_time_item):
        logger.error("feature not open!")
        response.result = False
        response.result_no = 30000
        return response.SerializePartialToString()
    res = None
    if send_or_in == 1:
        res = send_invite(player, task_id, protect_or_rob, task_guild_id,
                          rob_no)
    elif send_or_in == 2:
        res = in_invite(player, task_id, protect_or_rob, task_guild_id, rob_no)

    response.result = res.get('result')
    if not res.get('result'):
        response.result_no = res.get('result_no')
        return response.SerializePartialToString()

    tlog_action.log('GuildTaskInvite', player, task_id, task_guild_id,
                    send_or_in, protect_or_rob, rob_no)
    response.result = True
    return response.SerializePartialToString()
예제 #28
0
파일: hero.py 프로젝트: isphinx/traversing
def do_hero_refine(player, hero_no, refine, response):
    hero = player.hero_component.get_hero(hero_no)
    _refine_item = game_configs.seal_config.get(refine)
    if not hero:
        logger.error('cant find hero:%s', hero_no)
        return {'result': False, 'result_no': 11801}
    if not _refine_item:
        logger.error('cant find refine item:%s', refine)
        return {'result': False, 'result_no': 11802}

    current_refine_item = game_configs.seal_config.get(hero.refine)
    if current_refine_item and _refine_item.id != current_refine_item.get('next'):
        logger.error('not next refine item:%s', refine)
        return {'result': False, 'result_no': 11803}

    result = is_afford(player, _refine_item.expend)  # 校验
    if not result.get('result'):
        logger.error('cant afford refine:%s:cur%s',
                     _refine_item.expend,
                     player.brew.nectar)
        return {'result': False, 'result_no': 11804}

    tlog_action.log('HeroRefine', player, hero_no, refine)

    return_data = consume(player, _refine_item.expend, const.HERO_REFINE)
    get_return(player, return_data, response.consume)

    hero.refine = refine
    player.brew.save_data()
    hero.save_data()

    return {'result': True}
예제 #29
0
파일: task.py 프로젝트: Cuick/traversing
def share_1823(data, player):
    """分享"""
    args = task_pb2.ShareRequest()
    args.ParseFromString(data)
    tid = args.tid
    share_type = 0
    if args.share_type:
        share_type = args.share_type
    response = task_pb2.ShareResponse()

    player.task.update()

    task_conf = game_configs.achievement_config.get('tasks').get(tid)
    if task_conf.sort != 4:
        response.res.result = False
        response.res.result_no = 800
        return response.SerializeToString()

    res = get_condition_info(player, task_conf)

    condition_info = res.get('condition_info')
    for x in condition_info:
        if not x[1] and task_conf.condition.get(x[0])[0] != CONDITIONId.SHARE:
            response.res.result = False
            response.res.result_no = 800
            return response.SerializeToString()

    player.task.tasks[tid] = 2
    player.task.save_data()
    tlog_action.log('Share', player, tid, share_type)

    response.tid = tid
    response.res.result = True
    return response.SerializeToString()
예제 #30
0
파일: sign_in.py 프로젝트: Cuick/traversing
def continus_sign_in_1402(pro_data, player):
    """累积签到"""
    request = ContinuousSignInRequest()
    request.ParseFromString(pro_data)
    days = request.sign_in_days
    response = ContinuousSignInResponse()

    # 验证连续签到日期
    if len(player.sign_in_component.sign_in_days) < days:
        response.res.result = False
        response.res.result_no = 1402
        return response.SerializePartialToString()
    if days in player.sign_in_component.continuous_sign_in_prize:
        response.res.result = False
        response.res.result_no = 1403
        return response.SerializePartialToString()

    player.sign_in_component.continuous_sign_in_prize.append(days)
    player.sign_in_component.save_data()

    reward, config_id = player.sign_in_component.get_sign_in_reward(days)
    if not reward:
        response.res.result = False
        response.res.result_no = 1404
        return response.SerializePartialToString()
    return_data = gain(player, reward, const.CONTINUS_SIGN)
    get_return(player, return_data, response.gain)

    tlog_action.log('ContinusSignIn', player, days, config_id)

    response.res.result = True
    logger.debug(response)
    return response.SerializePartialToString()
예제 #31
0
def get_level_gift_1131(data, player):
    """get online gift"""
    request = level_gift_pb2.GetLevelGift()
    request.ParseFromString(data)
    response = level_gift_pb2.GetLevelGiftResponse()

    activity_level_gift = game_configs.activity_config.get(3)

    if request.gift_id in player.level_gift.received_gift_ids:
        response.result = False
        return response.SerializeToString()

    for a in activity_level_gift:
        if request.gift_id == a['id']:
            gain_data = a['reward']
            return_data = gain(player, gain_data, const.LEVEL_GIFT)
            get_return(player, return_data, response.gain)

            player.level_gift.received_gift_ids.append(request.gift_id)
            player.level_gift.save_data()
            tlog_action.log('LevelGift', player, request.gift_id)

            response.result = True
            return response.SerializeToString()

    response.result = False
    return response.SerializeToString()
예제 #32
0
    def recharge_gain(self, recharge_item, response, is_tencent=False):
        """
        充值掉落
        """
        logger.debug("recharge_gain========1")
        isfirst = 0
        if not is_tencent:
            return_data = gain(self._owner, recharge_item.get('setting'),
                            const.RECHARGE)  # 获取
            get_return(self._owner, return_data, response.gain)
        if recharge_item.get('type') == 2:
            logger.debug("recharge_gain========")
            rebate_call(self._owner, recharge_item)
            self._owner.recharge.send_mail(recharge_item) #发送奖励邮件
        else:
            rres = self._owner.base_info.first_recharge(recharge_item, response)
            if rres:
                #首次充值
                isfirst = 1
                self._owner.recharge.send_mail(recharge_item) #发送奖励邮件

        tlog_action.log('Recharge', self._owner, isfirst,
                        recharge_item.get('id'))

        charge_num = recharge_item.get('activity') # 充值元宝数量
        # vip
        self._owner.base_info.recharge += charge_num
        self._owner.base_info.set_vip_level(self._owner.base_info.recharge)

        # 活动
        self._owner.recharge.charge(charge_num)
        if not is_tencent:
            self._owner.recharge.get_recharge_response(response.info) # recharge
예제 #33
0
def pvp_daily_award():
    logger.debug('pvp daily send award mail ')
    arena_award = game_configs.base_config.get('arena_day_points')
    records = tb_pvp_rank.zrangebyscore(0, 10000, withscores=True)

    childs = groot.childsmanager.childs
    for k, v in records:
        rank = int(v)
        character_id = int(k)
        if character_id < 10000:
            continue
        for up, down, mail_id in arena_award.values():
            if rank >= up and rank <= down:
                break
        else:
            logger.error('pvp daily award error:%s-%s', rank, character_id)
            continue

        mail_data, _ = deal_mail(conf_id=mail_id, receive_id=character_id)

        for child in childs.values():
            if 'gate' in child.name:
                result = child.pull_message_remote('receive_mail_remote',
                                                   character_id,
                                                   (mail_data,))
                if type(result) is bool and result:
                    break
                else:
                    logger.debug('pvp_daily_award_tick result:%s,%s,%s',
                                 result, k, mail_data)
        else:
            message_cache.cache_time('receive_mail_remote', character_id, 60*60*24*180, mail_data)
        tlog_action.log('PvpDailyAward', character_id, mail_id, rank)
예제 #34
0
파일: stage.py 프로젝트: Cuick/traversing
    def settle(self, result, response, star_num=0):
        """
        战斗结算
        """
        player = self._player
        stage_id = self._stage_id
        conf = self.get_stage_config()

        # todo: 更新战斗次数
        # 体力
        if result:

            #player.stamina.stamina -= conf.vigor
            player.finance.consume(const.STAMINA, conf.vigor, const.STAGE)
            player.finance.save_data()
            player.stamina.save_data()

            # 活跃度
            # 结算
            stage_util.settle(player,
                              result,
                              response,
                              conf,
                              star_num=star_num)
            # hook task
            hook_task(player, CONDITIONId.ANY_STAGE, 1)
            hook_task(player, CONDITIONId.STAGE, stage_id)

            # 更新 七日奖励
            target_update(player, [45])

            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 1)
        else:
            tlog_action.log('RoundFlow', player, stage_id, 1, 0, 0)
예제 #35
0
    def func():
        player.sign_in_component.sign_in(day)
        player.sign_in_component.save_data()
        sign_round = player.sign_in_component.sign_round
        print game_configs.sign_in_config.get(sign_round), "---------"
        print game_configs.sign_in_config.get(sign_round).get(day), "-------"
        if not game_configs.sign_in_config.get(sign_round) or not game_configs.sign_in_config.get(sign_round).get(day):
            return
        sign_in_info = game_configs.sign_in_config.get(sign_round).get(day)

        #vip双倍
        if player.base_info.vip_level > 0 and \
                sign_in_info.get("vipDouble") and \
                player.base_info.vip_level >= sign_in_info.get("vipDouble"):
            is_double = 1
        else:
            is_double = 0

        if is_double:
            return_data = gain(player, sign_in_info.get("reward"), const.REPAIR_SIGN, multiple=2)
            get_return(player, return_data, response.gain)
        else:
            return_data = gain(player, sign_in_info.get("reward"), const.REPAIR_SIGN)
            get_return(player, return_data, response.gain)

        player.sign_in_component.repair_sign_in_times += 1
        player.sign_in_component.save_data()
        tlog_action.log('RepairSignIn', player, day, len(player.sign_in_component.sign_in_days), sign_in_info.get("id"))
예제 #36
0
파일: escort.py 프로젝트: Cuick/traversing
def refresh_tasks_1904(data, player):
    """刷新任务列表"""
    response = escort_pb2.RefreshEscortTaskResponse()
    response.res.result = True
    escort_component = player.escort_component

    if escort_component.refresh_times >= game_configs.base_config.get(
            "EscortRefreshFrequencyMax"):
        logger.error("reach the max refresh time!")
        response.res.result = False
        response.res.result_no = 190401
        return response.SerializePartialToString()

    price = game_configs.base_config.get("EscortRefreshPrice")
    need_gold = price[escort_component.refresh_times]

    def func():
        escort_component.refresh_tasks()  #刷新任务
        escort_component.refresh_times = escort_component.refresh_times + 1
        escort_component.save_data()
        for _, task in escort_component.tasks.items():
            task_pb = response.tasks.add()
            update_task_pb(task, task_pb)

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

    tlog_action.log('RefreshEscortTasks', player,
                    escort_component.refresh_times + 1)

    logger.debug("response %s" % response)
    return response.SerializePartialToString()
예제 #37
0
def inherit_equipment_152(pro_data, player):
    """
    装备传承
    """
    request = inherit_pb2.InheritEquipmentRequest()
    request.ParseFromString(pro_data)
    origin_id = request.origin
    target_id = request.target

    response = common_pb2.CommonResponse()

    if is_not_open(player, FO_INHERIT):
        response.result = False
        response.result_no = 837
        return response.SerializeToString()
    origin = player.equipment_component.get_equipment(origin_id)
    target = player.equipment_component.get_equipment(target_id)
    # print origin.attribute.strengthen_lv, target.attribute.strengthen_lv, "+"*10

    if not origin or (not target):
        logger.error("equip %s or %s not exists" % (origin_id, target_id))
        response.result = False
        return response.SerializeToString()

    if origin.attribute.strengthen_lv <= target.attribute.strengthen_lv:
        logger.error("origin equip %s strengthen_lv <= target equip %s strengthen_lv!" % (origin_id, target_id))
        response.result = False
        return response.SerializeToString()

    if origin.equipment_config_info.get("quality") != target.equipment_config_info.get("quality"):
        logger.error("origin.quality!=target.quality")
        response.result = False
        return response.SerializeToString()

    i_value = 0

    def func():
        """docstring for func"""
        target.attribute.strengthen_lv = origin.attribute.strengthen_lv
        i_value = target.attribute.strengthen_lv

        origin.attribute.strengthen_lv = 1
        # 传承强化过程
        target.enhance_record.enhance_record = origin.enhance_record.enhance_record
        origin.enhance_record.enhance_record = []

        target.save_data()
        origin.save_data()
        print origin.attribute.strengthen_lv, target.attribute.strengthen_lv, "+"*10

    gold = game_configs.base_config.get("equInheritPrice")
    player.pay.pay(gold, const.INHERIT_EQUIPMENT, func)
    response.result = True
    tlog_action.log('Inherit', player, 2, origin.base_info.id,
                    origin.base_info.equipment_no,
                    target.base_info.id,
                    target.base_info.equipment_no,
                    i_value)
    return response.SerializeToString()
예제 #38
0
파일: finance.py 프로젝트: Cuick/traversing
 def consume_coin(self, num, reason):
     if num < self._finances[const.COIN]:
         return False
     self._finances[const.COIN] -= num
     tlog_action.log('ItemFlow', self.owner, const.REDUCE, const.RESOURCE,
                     num, 1, 0, reason, self._finances[const.COIN], '')
     tlog_action.log('MoneyFlow', self.owner, self._finances[const.COIN],
                     num, reason, const.REDUCE, 1)
     return True
예제 #39
0
def tick():
    result = GlobalObject().remote['login'].server_sync_remote(
        name, front_ip, front_port, '1', server_no)
    if result is False:
        reactor.callLater(1, tick)
    else:
        reactor.callLater(60, tick)
    logger.info('server online num:%s', UsersManager().get_online_num())
    tlog_action.log('OnlineNum', UsersManager().get_online_num())
예제 #40
0
파일: player.py 프로젝트: Cuick/traversing
def up_guide_1816(data, player):
    request = UpGuideRequest()
    request.ParseFromString(data)
    response = CommonResponse()
    guide_id = request.guide_id

    tlog_action.log('UpGuide', player, guide_id)
    response.result = True
    return response.SerializePartialToString()
예제 #41
0
def settle(player, result, response, conf, stage_type=1, star_num=0):
    """docstring for settle"""
    # 保存关卡信息
    player.stage_component.save_data()

    # 保存活跃度

    # 增加玩家和武将经验,增加金币
    if not result and stage_type not in [4, 5]:
        return

    player.finance.coin += conf.currency
    player.finance.save_data()
    player.base_info.addexp(conf.playerExp, const.STAGE)
    player.set_level_related()
    player.base_info.save_data()
    for (slot_no, lineUpSlotComponent
         ) in player.line_up_component.line_up_slots.items():
        hero = lineUpSlotComponent.hero_slot.hero_obj
        if hero:
            beforelevel = hero.level
            hero.upgrade(conf.HeroExp, player.base_info.level)
            afterlevel = hero.level
            changelevel = afterlevel - beforelevel
            hero.save_data()
            if changelevel:
                tlog_action.log('HeroUpgrade', player, hero.hero_no,
                                changelevel, afterlevel, 1, 0, 0, 0, 0)
            hero.save_data()

    # 更新等级相关属性

    # 构造掉落
    settlement_drops = player.fight_cache_component.fighting_settlement(
        result, star_num)

    logger.debug("stage_util.drops %s" % settlement_drops)
    multiple, part_multiple = get_drop_activity(
        player, player.fight_cache_component.stage_id, stage_type, star_num)
    data = gain(player,
                settlement_drops,
                const.STAGE,
                multiple=multiple,
                part_multiple=part_multiple)
    get_return(player, data, response.drops)
    logger.debug("stage_util.drops %s" % response.drops)

    # 乱入武将按概率获取碎片
    break_stage_id = player.fight_cache_component.break_stage_id
    if break_stage_id:
        break_stage_info = game_configs.stage_break_config.get(break_stage_id)
        ran = random.random()
        if ran <= break_stage_info.reward_odds:
            logger.debug("break_stage_info=============%s %s" %
                         (break_stage_info.reward, 1))
            data = gain(player, break_stage_info.reward, const.STAGE)
            get_return(player, data, response.drops)
예제 #42
0
 def consume_coin(self, num, reason):
     if num < self._finances[const.COIN]:
         return False
     self._finances[const.COIN] -= num
     tlog_action.log('ItemFlow', self.owner, const.REDUCE, const.RESOURCE, num,
                     1, 0, reason, self._finances[const.COIN], '')
     tlog_action.log('MoneyFlow', self.owner, self._finances[const.COIN],
                     num, reason, const.REDUCE, 1)
     return True
예제 #43
0
 def send_award_in(self):
     """ 参与奖励
     """
     mail_id = game_configs.base_config.get("world_boss").get('in_rewards')
     logger.debug("send_award_in=========== %s", self._rank_instance.get(1, 0))
     for player_id, v in self._rank_instance.get(1, 0):
         logger.debug("send_award_in==== %s %s" % (player_id, v))
         #self.send_award(player_id, const.PVB_IN_AWARD, int(v))
         send_mail(conf_id=mail_id, receive_id=player_id)
         tlog_action.log('WorldBossInReward', player_id, mail_id)
예제 #44
0
 def add_gold(self, num, reason):
     if self._owner.pay.REMOTE_DEPLOYED:
         self._owner.pay.present(num)
     else:
         self._finances[const.GOLD] += num
     if reason:
         tlog_action.log('ItemFlow', self.owner, const.ADD, const.RESOURCE, num,
                         2, 0, reason, self._finances[const.GOLD], '')
         tlog_action.log('MoneyFlow', self.owner, self._finances[const.GOLD],
                         num, reason, const.ADD, 2)
예제 #45
0
파일: player.py 프로젝트: Cuick/traversing
 def func():
     item.buy_stamina_times += num
     player.finance.add(resource_type,
                        info.get("one_buy_value") * num,
                        reason=const.BUY_STAMINA)
     item.last_buy_stamina_time = int(time.time())
     player.finance.save_data()
     player.stamina.save_data()
     logger.debug("buy stamina++++++++++++++++++++")
     tlog_action.log('BuyStamina', player, resource_type, num)
예제 #46
0
def one_key_hero_upgrade_logic(hero_no, player):
    hero = player.hero_component.get_hero(hero_no)
    total_exp = 0
    small_exp_item = player.item_package.get_item(10001)
    middle_exp_item = player.item_package.get_item(10002)
    big_exp_item = player.item_package.get_item(10003)
    small_exp = game_configs.item_config.get(10001).get('funcArg1')
    middle_exp = game_configs.item_config.get(10002).get('funcArg1')
    big_exp = game_configs.item_config.get(10003).get('funcArg1')
    need_total_exp = hero.need_exp_to_max(player.base_info.level)
    logger.debug('need_total_exp %s' % need_total_exp)
    if small_exp_item:
        logger.debug("small_exp_item num %s" % small_exp_item.num)
    if middle_exp_item:
        logger.debug("middle_exp_item num %s" % middle_exp_item.num)
    if big_exp_item:
        logger.debug("big_exp_item num %s" % big_exp_item.num)

    small_exp_num = 0
    middle_exp_num = 0
    big_exp_num = 0
    if small_exp_item:
        for i in range(small_exp_item.num):
            if total_exp > need_total_exp:
                break
            total_exp += small_exp
            small_exp_num = i + 1

    if middle_exp_item:
        for i in range(middle_exp_item.num):
            if total_exp > need_total_exp:
                break
            total_exp += middle_exp
            middle_exp_num = i + 1

    if big_exp_item:
        for i in range(big_exp_item.num):
            if total_exp > need_total_exp:
                break
            total_exp += big_exp
            big_exp_num = i + 1

    beforelevel = hero.level
    hero.upgrade(small_exp * small_exp_num + middle_exp * middle_exp_num + big_exp * big_exp_num, player.base_info.level)
    hero.save_data()
    afterlevel = hero.level
    changelevel = afterlevel-beforelevel
    tlog_action.log('HeroUpgrade', player, hero_no, changelevel, afterlevel, 3,
                    small_exp_num, middle_exp_num, big_exp_num, 0)

    player.item_package.consume_item(10001, small_exp_num)
    player.item_package.consume_item(10002, middle_exp_num)
    player.item_package.consume_item(10003, big_exp_num)

    return {"result": True, "hero": hero, "small_exp_num": small_exp_num, "middle_exp_num": middle_exp_num, "big_exp_num": big_exp_num}
예제 #47
0
def runt_set_841(data, player):
    """镶嵌符文"""
    args = RuntSetRequest()
    args.ParseFromString(data)
    hero_no = args.hero_no
    runt_type = args.runt_type
    runt_set_infos = args.runt_set_info

    response = RuntSetResponse()
    if is_not_open(player, FO_RUNT_ADD):
        response.res.result = False
        response.res.result_no = 837
        return response.SerializeToString()

    hero = player.hero_component.get_hero(hero_no)
    for runt_set_info in runt_set_infos:
        runt_po = runt_set_info.runt_po
        runt_no = runt_set_info.runt_no

        if runt_po > game_configs.base_config.get('totemSpaceNum'+str(runt_type)):
            response.res.result = False
            response.res.result_no = 827
            return response.SerializeToString()

        if hero.runt.get(runt_type):
            if hero.runt.get(runt_type).get(runt_po):
                response.res.result = False
                response.res.result_no = 821
                return response.SerializeToString()
        else:
            hero.runt[runt_type] = {}

        runt_info = player.runt.m_runt.get(runt_no)
        if not runt_info:
            response.res.result = False
            response.res.result_no = 825
            return response.SerializeToString()

    now = int(time.time())
    for runt_set_info in runt_set_infos:
        runt_po = runt_set_info.runt_po
        runt_no = runt_set_info.runt_no
        runt_info = player.runt.m_runt.get(runt_no)
        hero.runt.get(runt_type)[runt_po] = [runt_no] + runt_info
        player.runt.reduce_runt(runt_no)
        tlog_action.log('HeroRuntSet', player, hero_no, now,
                        runt_no, runt_po, runt_info[0])

    target_update(player, [55])
    hero.save_data()
    player.runt.save()

    response.res.result = True
    return response.SerializeToString()
예제 #48
0
def tick():
    result = GlobalObject().remote['login'].server_sync_remote(name, front_ip,
                                                               front_port,
                                                               '1',
                                                               server_no)
    if result is False:
        reactor.callLater(1, tick)
    else:
        reactor.callLater(60, tick)
    logger.info('server online num:%s', UsersManager().get_online_num())
    tlog_action.log('OnlineNum', UsersManager().get_online_num())
예제 #49
0
파일: finance.py 프로젝트: Cuick/traversing
 def add_gold(self, num, reason):
     if self._owner.pay.REMOTE_DEPLOYED:
         self._owner.pay.present(num)
     else:
         self._finances[const.GOLD] += num
     if reason:
         tlog_action.log('ItemFlow', self.owner, const.ADD, const.RESOURCE,
                         num, 2, 0, reason, self._finances[const.GOLD], '')
         tlog_action.log('MoneyFlow', self.owner,
                         self._finances[const.GOLD], num, reason, const.ADD,
                         2)
예제 #50
0
def auto_travel_837(data, player):

    args = AutoTravelRequest()
    args.ParseFromString(data)
    stage_id = args.stage_id
    ttime = args.ttime

    response = AutoTravelResponse()

    auto_travel_config = game_configs.base_config.get('autoTravel').get(ttime)

    if player.finance.gold < auto_travel_config[1]:
        response.res.result = False
        response.res.result_no = 102  # 充值币不足
        return response.SerializeToString()

    can_auto_travel = 1
    auto_is_finish = 1
    if player.travel_component.auto.get(stage_id):
        auto_is_finish = 0
        for auto_travel in player.travel_component.auto.get(stage_id):
            if game_configs.base_config.get('autoTravel').get(
                    auto_travel.get('continued_time'))[0] != auto_travel.get(
                        'already_times'):
                can_auto_travel = 0
            else:
                for auto_travel_event in auto_travel.get('events'):
                    if len(auto_travel_event) < 3:
                        can_auto_travel = 0

    if not can_auto_travel:
        response.res.result = False
        response.res.result_no = 819
        return response.SerializeToString()

    # 扣元宝
    player.finance.consume_gold(auto_travel_config[1], const.TRAVEL_AUTO)

    # 逻辑
    if auto_is_finish:
        player.travel_component.auto[stage_id] = []
    info = {
        'start_time': int(time.time()),
        'continued_time': ttime,
        'events': [],
        'already_times': 0
    }
    player.travel_component.auto[stage_id].append(info)
    player.finance.save_data()
    deal_auto_response(response, player)

    response.res.result = True
    tlog_action.log('AutoTravel', player, stage_id, ttime)
    return response.SerializeToString()
예제 #51
0
 def func():
     random_num = 10005
     if not request.is_newbee:
         random_num = do_get_star_random(random_num_conf)
     response.random_num = random_num
     chapter_obj.now_random = random_num
     chapter_obj.random_gift_times += 1
     chapter_obj.star_gift = 3
     player.stage_component.save_data()
     tlog_action.log('StarRandom', player, random_num,
                     chapter_obj.random_gift_times, chapter_id)
예제 #52
0
def get_award_909(pro_data, player):
    """取得章节奖励
    """
    request = stage_request_pb2.StarAwardRequest()
    request.ParseFromString(pro_data)
    chapter_id = request.chapter_id
    award_type = request.award_type
    response = stage_response_pb2.StarAwardResponse()

    chapters_info = get_chapter_info(chapter_id, player)
    if len(chapters_info) != 1 or chapter_id == 1 or len(
            chapters_info[0].award_info) == 0:
        logger.error("chapter_info dont find")
        response.res.result = False
        response.res.result_no = 831
        return response.SerializePartialToString()
    else:
        chapter_obj = chapters_info[0]

    conf = chapter_obj.get_conf()
    chapter_obj.update(player.stage_component.calculation_star(chapter_id))

    if 0 <= award_type <= 2:
        if chapter_obj.award_info[award_type] != 0:
            logger.error("already receive or can`t receive")
            response.res.result = False
            response.res.result_no = 832
            return response.SerializePartialToString()
        else:
            chapter_obj.award_info[award_type] = 1
            bag_id = conf.starGift[award_type]

        drop = get_drop(bag_id)
        return_data = gain(player, drop, const.CHAPTER_AWARD)
        get_return(player, return_data, response.drops)
        player.stage_component.save_data()
        tlog_action.log('OpenStarChest', player, chapter_id, award_type)

    else:
        response.res.result = False
        response.res.result_no = 800
        return response.SerializePartialToString()
        # 满星抽奖
        # if chapter_obj.award_info[-1] == -1:
        #     logger.error("can`t receive")
        #     response.res.result = False
        #     response.res.result_no = 833
        #     return response.SerializePartialToString()
        # else:
        #     pass

    response.res.result = True
    # logger.debug(response)
    return response.SerializePartialToString()
예제 #53
0
파일: mine.py 프로젝트: Cuick/traversing
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()
예제 #54
0
파일: feast.py 프로젝트: Cuick/traversing
def eat_feast(player):
    """ 吃 """
    """
    # (tm_year=2014, tm_mon=9, tm_mday=1, tm_hour=18, tm_min=38, tm_sec=1, tm_wday=0, tm_yday=244, tm_isdst=0)
    last_eat_time = time.localtime(player.feast.last_eat_time).tm_hour*60*60 + \
        time.localtime(player.feast.last_eat_time).tm_min*60 + time.localtime(player.feast.last_eat_time).tm_sec
    eat_times = game_configs.base_config.get(u'time_vigor_activity')
    now = time.localtime().tm_hour*60*60 + time.localtime().tm_min*60 + time.localtime().tm_sec
    for eat_time in eat_times:
        t1 = eat_time[0].split(':')
        time1 = int(t1[0])*60*60 + int(t1[1])*60
        t2 = eat_time[1].split(':')
        time2 = int(t2[0])*60*60 + int(t2[1])*60
        if time2 >= now >= time1:
            if time2 >= last_eat_time >= time1:
                # 已经吃过
                return 1
            # 吃
            player.stamina.stamina += game_configs.base_config.get(u'num_vigor_activity')
            player.stamina.save_data()
            player.feast.last_eat_time = int(time.time())
            player.feast.save_data()
            return 2
    # 没到时间
    return 3
    """

    last_eat_time = player.feast.last_eat_time
    now = int(time.time())
    eat_times = game_configs.base_config.get(u'time_vigor_activity')
    t = time.localtime(now)
    for eat_time in eat_times:
        time1 = time.mktime(
            time.strptime(time.strftime('%Y-%m-%d ' + eat_time[0] + ':00', t),
                          '%Y-%m-%d %H:%M:%S'))
        time2 = time.mktime(
            time.strptime(time.strftime('%Y-%m-%d ' + eat_time[1] + ':00', t),
                          '%Y-%m-%d %H:%M:%S'))
        if time2 >= now >= time1:
            if time2 >= last_eat_time >= time1:
                # 已经吃过
                return 1
            # 吃
            player.stamina.stamina += game_configs.base_config.get(
                u'num_vigor_activity')
            player.stamina.save_data()
            player.feast.last_eat_time = int(time.time())
            player.feast.save_data()
            tlog_action.log('Feast', player, player.stamina.stamina)
            return 2
    # 没到时间
    return 3
예제 #55
0
파일: player.py 프로젝트: Cuick/traversing
    def func():
        consume_data = consume(player, consume_config, const.NEW_GUIDE_STEP)
        get_return(player, consume_data, response.consume)

        # logger.debug("gain_data %s %s" % (gain_data, request.step_id))
        # logger.debug(player.finance.coin)
        tlog_action.log('NewGuide', player, new_guide_item.get('Sequence'),
                        request.step_id)

        if my_newbee_sequence < new_guide_item.get('Sequence'):
            player.base_info.newbee_guide[new_guide_type] = request.step_id
            player.base_info.current_newbee_guide = request.step_id
            player.base_info.save_data()