Пример #1
0
def pvb_reborn_1704(data, player):
    """
    使用元宝复活。
    """
    response = CommonResponse()
    # 1. 校验元宝
    gold = player.finance.gold
    money_relive_price = base_config.get('money_relive_price')
    need_gold = money_relive_price
    print need_gold, gold, "*" * 80
    if gold < need_gold:
        logger.debug("reborn error: %s" % 102)
        response.result = False
        response.result_no = 102
        return response.SerializePartialToString()

    #2. 校验CD
    current_time = get_current_timestamp()
    if current_time - player.world_boss.last_fight_time > base_config.get(
            "free_relive_time"):
        logger.debug("reborn error: %s" % 1701)
        response.result = False
        response.result_no = 1701
        return response.SerializePartialToString()

    player.finance.gold -= need_gold
    player.finance.save_data()
    response.result = True
    print response
    return response.SerializePartialToString()
Пример #2
0
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 = 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 += 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
Пример #3
0
    def update_boss(self):
        """
        boss被打死或者boss到期后,更新下一个boss相关信息。
        """
        # 初始化幸运武将
        lucky_hero_1_num = base_config.get("lucky_hero_1_num")
        lucky_hero_2_num = base_config.get("lucky_hero_2_num")
        lucky_hero_3_num = base_config.get("lucky_hero_3_num")
        all_high_heros, all_middle_heros, all_low_heros = self.get_hero_category()
        self._lucky_high_heros =  random.sample(all_high_heros, lucky_hero_1_num)

        for k in self._lucky_high_heros: # 去重
            all_middle_heros.remove(k)
        self._lucky_middle_heros =  random.sample(all_middle_heros, lucky_hero_2_num)

        for k in self._lucky_middle_heros: # 去重
            all_low_heros.remove(k)
        self._lucky_low_heros =  random.sample(all_low_heros, lucky_hero_3_num)

        # 初始化奇遇
        debuff_skill = base_config.get("debuff_skill")
        self._debuff_skill_no = random_pick_with_percent(debuff_skill)

        self.set_next_stage(self._hp<=0)
        self._hp = self.get_hp() # 重置血量
        instance = self.get_rank_instance()
        instance.clear_rank() # 重置排行
        #todo: 重置玩家信息
        self.save_data()
Пример #4
0
    def price(self):
        price = base_config.get('arenaShopRefreshPrice').get(2)[0]
        k = base_config.get('arenaShopRefreshFactor')
        free_times = base_config.get('arenaShopFreeRefreshTimes')

        if self._refresh_times < free_times:
            return 0
        else:
            return price * pow(k, self._refresh_times - free_times)
Пример #5
0
def encourage_heros_1703(data, player):
    """
    使用金币或者元宝鼓舞士气。
    """
    # 1. 校验金币或者元宝
    # 3. 减少金币
    # 4. 更新战斗力
    response = CommonResponse()

    request = EncourageHerosRequest()
    request.ParseFromString(data)

    if request.finance_type == 1:
        # 金币鼓舞
        goldcoin_inspire_price = base_config.get("goldcoin_inspire_price")
        goldcoin_inspire_price_multiple = base_config.get(
            "goldcoin_inspire_price_multiple")
        coin = player.finance.coin
        need_coin = goldcoin_inspire_price * (pow(
            goldcoin_inspire_price_multiple,
            player.world_boss.encourage_coin_num))
        if coin < need_coin:
            response.result = False
            response.result_no = 101
            logger.debug("*" * 80)
            print response
            return response.SerializePartialToString()

        player.finance.coin -= need_coin
        player.finance.save_data()
        player.world_boss.encourage_coin_num += 1

    if request.finance_type == 2:
        # 钻石鼓舞
        money_inspire_price = base_config.get("money_inspire_price")
        #money_inspire_price_multiple = base_config.get("money_inspire_price_multiple")
        gold = player.finance.gold
        need_gold = money_inspire_price
        if gold < need_gold:
            response.result = False
            response.result_no = 102
            logger.debug("*" * 80)
            print response
            return response.SerializePartialToString()
        player.finance.gold -= need_gold
        player.finance.save_data()
        player.world_boss.encourage_gold_num += 1

    player.world_boss.save_data()
    response.result = True
    logger.debug("encourage_coin_num %s" %
                 player.world_boss.encourage_coin_num)
    logger.debug("encourage_gold_num %s" %
                 player.world_boss.encourage_gold_num)
    return response.SerializePartialToString()
Пример #6
0
 def update_slot_activation(self):
     # 根据base_config获取卡牌位激活状态
     for i in range(1, 7):
         slot = self._line_up_slots[i]
         __level = base_config.get("hero_position_open_level").get(i)
         if self.owner.level.level >= __level:
             slot.activation = True
     for i in range(1, 7):
         slot = self._sub_slots[i]
         __level = base_config.get("friend_position_open_level").get(i)
         if self.owner.level.level >= __level:
             slot.activation = True
Пример #7
0
    def do_brew(self, brew_type):
        vip_level = self.owner.vip_component.vip_level
        brew_times_max = vip_config.get(vip_level).get('cookingTimes')

        MAX_STEPS = len(base_config.get('cookingWinePrice')[brew_type])

        self.check_time()
        if self._brew_step > MAX_STEPS:
            return False

        if self.owner.level.level < base_config.get('cookingWineOpenLevel'):
            logger.error('char brew level error!!:%s', self.owner.level.level)
            return False

        critical = base_config.get('cookingWineOutputCrit')
        if brew_type not in critical:
            logger.error('base config error type:%s', brew_type)
            return False

        if self.brew_times >= brew_times_max:
            logger.error('there is no times to brew:%s', self.brew_times)
            return False

        brew_prices = base_config.get('cookingWinePrice')
        if brew_type not in brew_prices:
            logger.error('base config error step:%s', brew_type)
            return False

        if not self.owner.finance.consume_gold(
                brew_prices[brew_type][self._brew_step - 1]):
            logger.error('not enough gold to do brew:%s:%s',
                         self.owner.finance.gold,
                         brew_prices[brew_type][self._brew_step - 1])
            return False

        self._brew_step += 1
        critical = critical[brew_type]
        rand = random.random()
        for critical_num, rand_range in critical.items():
            if rand < rand_range:
                self._nectar_cur = int(critical_num * self._nectar_cur)
                break
            else:
                rand -= rand_range
        logger.info(
            'brew type:%s, rand:%s nectar:%s nectar\
cur:%s time:%s cri:%s', brew_type, rand, self.nectar, self._nectar_cur,
            self.brew_times, critical_num)

        self.save_data()
        return True
Пример #8
0
def open_chest_836(data, player):

    response = OpenChestResponse()

    chest_time = player.travel_component.chest_time

    if time.localtime(chest_time).tm_year == time.localtime().tm_year \
            and time.localtime(chest_time).tm_yday == time.localtime().tm_yday:
        response.res.result = False
        response.res.result_no = 816
        return response.SerializeToString()

    res_drops = response.drops
    drops = []
    common_bag = BigBag(base_config.get('travelChest'))
    common_drop = common_bag.get_drop_items()
    drops.extend(common_drop)
    drop_data = gain(player, drops)
    get_return(player, drop_data, res_drops)

    player.travel_component.chest_time = int(time.time())

    player.travel_component.save()

    response.res.result = True
    return response.SerializeToString()
Пример #9
0
def buy_shoes_832(data, player):
    """buy_shoes"""
    args = BuyShoesRequest()
    args.ParseFromString(data)
    response = BuyShoesResponse()

    need_good = 0
    for shoes_info in args.shoes_infos:
        need_good += base_config.get("travelShoe"+str(shoes_info.shoes_type))[2] \
            * shoes_info.shoes_no

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

    for shoes_info in args.shoes_infos:
        player.travel_component.shoes[shoes_info.shoes_type-1] += \
            shoes_info.shoes_no

    player.finance.gold -= need_good

    player.travel_component.save()
    player.finance.save_data()

    response.res.result = True
    return response.SerializeToString()
Пример #10
0
def continus_sign_in_1402(pro_data, player):
    """连续签到"""
    request = ContinuousSignInRequest()
    request.ParseFromString(pro_data)
    days = request.sign_in_days
    response = ContinuousSignInResponse()

    sign_in_prize = base_config.get("signInPrize")
    if not sign_in_prize:
        return
    # 验证连续签到日期
    if player.sign_in_component.continuous_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()

    drop_bag_id = sign_in_prize.get(days)
    big_bag = BigBag(drop_bag_id)
    gain_data = big_bag.get_drop_items()
    return_data = gain(player, gain_data)
    get_return(player, return_data, response.gain)

    response.res.result = True
    return response.SerializePartialToString()
Пример #11
0
 def __init__(self, unit):
     super(FriendSkill, self).__init__()
     friend_mp_config = base_config.get('huoban_value_config')
     self._unit = unit
     self._mp_init = friend_mp_config[0]
     self._mp = self._mp_init
     self._mp_step = friend_mp_config[1]
     self._mp_max = friend_mp_config[2]
Пример #12
0
 def check_time(self):
     tm = time.localtime(self._brew_date)
     local_tm = time.localtime()
     if local_tm.tm_year != tm.tm_year or local_tm.tm_yday != tm.tm_yday:
         self._brew_date = time.time()
         # vip_level = self.owner.vip_component.vip_level
         self._brew_times = 0
         # logger.debug('brew times vip:%s :%s', vip_level, self._brew_times)
         self._nectar_cur = base_config.get('cookingWineOutput')
         self._brew_step = 1
Пример #13
0
def join_guild_802(data, player):
    """加入公会 """
    p_id = player.base_info.id
    args = JoinGuildRequest()
    args.ParseFromString(data)
    response = JoinGuildResponse()
    g_id = args.g_id
    m_g_id = player.guild.g_id
    m_exit_time = player.guild.exit_time
    the_time = int(time.time()) - m_exit_time

    if m_exit_time != 1 and the_time < base_config.get('exit_time'):
        response.result = False
        response.message = "退出公会半小时内不可加入公会"
        response.spare_time = base_config.get('exit_time') - the_time
        return response.SerializeToString()

    if m_g_id != 0:
        response.result = False
        response.message = "您已加入公会"
        return response.SerializeToString()

    data1 = tb_guild_info.getObjData(g_id)

    if not data1:
        response.result = False
        response.message = "公会ID错误"
        return response.SerializeToString()

    guild_obj = Guild()
    guild_obj.init_data(data1)

    if guild_obj.get_p_num() >= guild_config.get(guild_obj.level).p_max:
        response.result = False
        response.message = "公会已满员"
        return response.SerializeToString()
    else:
        guild_obj.join_guild(p_id)
        guild_obj.save_data()

    response.result = True
    return response.SerializeToString()
Пример #14
0
def repair_sign_in_1403(pro_data, player):
    """补充签到"""
    request = RepairSignInRequest()
    request.ParseFromString(pro_data)
    day = request.day
    print "repair_sign_in+++++++++++", day
    response = SignInResponse()

    sign_in_add = base_config.get("signInAdd")
    if not sign_in_add:
        return

    repair_sign_in_times = player.sign_in_component.repair_sign_in_times
    gold = player.finance.gold
    # 校验签到次数
    if repair_sign_in_times == len(sign_in_add):
        response.res.result = False
        response.res.result_no = 1404
        return response.SerializePartialToString()
    # 校验消耗元宝数
    consume_gold = sign_in_add[repair_sign_in_times]
    if consume_gold > gold:
        response.res.result = False
        response.res.result_no = 102
        return response.SerializePartialToString()

    # 消耗
    player.finance.gold -= consume_gold
    player.finance.save_data()
    # 签到奖励

    date = datetime.datetime.now()
    month = date.month

    # 同一天签到校验
    if player.sign_in_component.is_signd(month, day):
        response.res.result = False
        response.res.result_no = 1405
        return response.SerializePartialToString()

    player.sign_in_component.sign_in(month, day)
    player.sign_in_component.save_data()
    if not sign_in_config.get(month) or not sign_in_config.get(month).get(day):
        return
    gain_data = sign_in_config.get(month).get(day)
    return_data = gain(player, gain_data)
    get_return(player, return_data, response.gain)

    player.sign_in_component.repair_sign_in_times += 1
    player.sign_in_component.save_data()
    response.res.result = True
    return response.SerializePartialToString()
Пример #15
0
 def taken_brew(self):
     self.check_time()
     vip_level = self.owner.vip_component.vip_level
     brew_times_max = vip_config.get(vip_level).get('cookingTimes')
     if self._brew_times >= brew_times_max:
         logger.error('not enough times to taken brew:%s', self._brew_times)
         return False
     self._nectar += self._nectar_cur
     self._nectar_cur = base_config.get('cookingWineOutput')
     self._brew_step = 1
     self._brew_times += 1
     self.save_data()
     return True
Пример #16
0
 def __init__(self, skill_no, player_level):
     super(BestSkill, self).__init__()
     best_mp_config = base_config.get('wushang_value_config')
     self._mp = best_mp_config[0]
     self._skill_no = skill_no
     self._mp_step = best_mp_config[1]
     self._mp_max_1 = best_mp_config[2]
     self._mp_max_2 = best_mp_config[3]
     self._mp_max_3 = best_mp_config[4]
     self._skill_buffs = []
     self._player_level = player_level
     skill_info = skill_config.get(self._skill_no, None)
     if skill_info:
         for buff_id in skill_info.group:
             self._skill_buffs.append(skill_buff_config.get(buff_id))
Пример #17
0
    def process(self):
        """docstring for process"""
        battle_round = BattleRound()
        if not battle_round.init_round(self._red_units, self._red_best_skill, self._blue_units, self._blue_best_skill, self._firent_skill):
            return True
        logger.debug_cal("开始战斗...")

        for i in range(base_config.get("max_times_fight")):
            i = i + 1
            logger.debug_cal("第%d回合......" % i)
            battle_round.perform_round()
            result = battle_round.result
            if result == 0: continue
            if result == 1:
                logger.debug_cal("我赢了。")
                return True
            if result == -1:
                logger.debug_cal("我输了。")
                return False
        return False
Пример #18
0
def buy_stamina_6(request_proto, player):
    """购买体力"""
    response = CommonResponse()

    current_vip_level = player.vip_component.vip_level
    current_buy_stamina_times = player.stamina.buy_stamina_times
    current_stamina = player.stamina.stamina
    current_gold = player.finance.gold

    available_buy_stamina_times = vip_config.get(current_vip_level).get("buyStaminaMax")

    logger.debug("available_buy_stamina_times:", available_buy_stamina_times,
                 current_buy_stamina_times)
    # 校验购买次数上限
    if current_buy_stamina_times >= available_buy_stamina_times:
        response.result = False
        response.result_no = 11
        return response.SerializePartialToString()

    need_gold = base_config.get("price_buy_manual").get(current_buy_stamina_times+1)[1]
    logger.debug("need_gold++++++++++++++++", need_gold)
    # 校验金币是否不足
    if need_gold > current_gold:
        logger.debug("gold not enough++++++++++++")
        response.result = False
        response.result_no = 102
        return response.SerializePartialToString()

    player.finance.gold -= need_gold
    player.finance.save_data()

    player.stamina.buy_stamina_times += 1
    player.save_data()

    player.stamina.stamina += 120
    player.stamina.save_data()

    response.result = True
    return response.SerializePartialToString()
Пример #19
0
def worship_809(data, player):
    """膜拜 """
    args = WorshipRequest()
    args.ParseFromString(data)
    response = GuildCommonResponse()
    w_type = args.w_type

    m_g_id = player.guild.g_id

    data1 = tb_guild_info.getObjData(m_g_id)
    if not data1 or m_g_id == 0:
        response.result = False
        response.message = "公会ID错误"
        return response.SerializeToString()

    guild_obj = Guild()
    guild_obj.init_data(data1)

    # {膜拜编号:[资源类型,资源消耗量,获得公会经验,获得公会资金,获得个人贡献值]}
    worship_info = base_config.get('worship').get(w_type)

    if worship_info[1] == 1:  # 1金币  2元宝
        if worship_info[2] > player.finance.coin:
            response.result = False
            response.message = "金币不足"
            return response.SerializeToString()
    else:
        if worship_info[2] > player.finance.gold:
            response.result = False
            response.message = "元宝不足"
            return response.SerializeToString()

    if (int(time.time()) - player.guild.worship_time) < (60 * 60 * 24):
        if player.vip_component.guild_worship_times > player.guild.worship:
            player.guild.worship += 1
            player.guild.contribution += worship_info[4]
            player.guild.all_contribution += worship_info[3]
            guild_obj.fund += worship_info[3]
            guild_obj.exp += worship_info[2]
        else:
            response.result = False
            response.message = "今天的膜拜次数已用完"
            return response.SerializeToString()
    else:
        localtime = time.localtime(time.time())
        new_time = time.mktime(
            time.strptime(time.strftime('%Y-%m-%d 00:00:00', localtime),
                          '%Y-%m-%d %H:%M:%S'))
        player.guild.worship += 1
        player.guild.contribution += worship_info[4]
        player.guild.all_contribution += worship_info[4]
        guild_obj.fund += worship_info[3]
        guild_obj.exp += worship_info[2]
        player.guild.worship_time = new_time

    if guild_obj.exp >= guild_config.get(guild_obj.level).exp:
        guild_obj.exp -= guild_config.get(guild_obj.level).exp
        guild_obj.level += 1
        remote_gate.add_guild_to_rank_remote(
            guild_obj.g_id, guild_obj.level + (guild_obj.fund * 100))

    player.guild.save_data()
    guild_obj.save_data()

    # 根据膜拜类型判断减什么钱,然后扣除
    if worship_info[1] == 1:  # 1金币  2元宝
        player.finance.coin -= worship_info[2]
    else:
        player.finance.gold -= worship_info[2]
    player.finance.save_data()
    response.result = True
    response.message = "膜拜成功"
    return response.SerializeToString()
Пример #20
0
def promotion_808(data, player):
    """晋升 """
    response = PromotionResponse()
    m_g_id = player.guild.g_id
    m_p_id = player.base_info.id
    m_position = player.guild.position
    if m_position <= 2:
        response.result = False
        response.message = "您不能再晋升了"
        return response.SerializeToString()

    data1 = tb_guild_info.getObjData(m_g_id)
    guild_obj = Guild()
    guild_obj.init_data(data1)

    p_list = guild_obj.p_list
    t_p_list = p_list.get(m_position - 1)
    # 此职位还没有人
    if t_p_list and len(t_p_list) >= 1:
        list_len = len(t_p_list)
        t_position = m_position - 1
        flag = 0
        if t_position == 2:
            if list_len >= base_config.get('pos_p_num')[0]:
                flag = 1
        elif t_position == 3:
            if list_len >= base_config.get('pos_p_num')[1]:
                flag = 1
        elif t_position == 4:
            if list_len >= base_config.get('pos_p_num')[2]:
                flag = 1
        else:
            response.result = False
            response.message = "未知错误"
            return response.SerializeToString()
        # 此职位的人满了
        if flag == 1:
            guildinfolist = {}
            for p_id1 in t_p_list:
                guildinfo = tb_character_guild.getObjData(p_id1)
                if guildinfo:
                    guildinfolist.update(
                        {guildinfo.get('id'): guildinfo.get('info')})
            m_guildinfo = tb_character_guild.getObjData(m_p_id)
            guildinfolist.update(
                {m_guildinfo.get('id'): m_guildinfo.get('info')})
            new_list = sorted(guildinfolist.items(),
                              key=lambda x: (x[1]['contribution']),
                              reverse=True)
            if new_list[-1][0] == m_p_id or new_list[-1][1].get(
                    'contribution') == new_list[-2][1].get('contribution'):
                response.result = False
                response.message = "总贡献必须超过上一级职位最低贡献才能晋级"
                return response.SerializeToString()

            tihuan_id = new_list[-1][0]
            character_guild = tb_character_guild.getObjData(tihuan_id)
            info = character_guild.get("info")
            if info.get("g_id") != player.guild.g_id:
                response.result = False
                response.message = "未知错误"
                return response.SerializeToString()
            invitee_player = PlayersManager().get_player_by_id(tihuan_id)
            if invitee_player:  # 在线
                remote_gate.logout_guild_chat_remote(invitee_player.dynamic_id)
                invitee_player.guild.position = m_position
                invitee_player.guild.save_data()
            else:
                data = {
                    'info': {
                        'g_id': info.get("g_id"),
                        'position': m_position,
                        'contribution': info.get("contribution"),
                        'all_contribution': info.get("all_contribution"),
                        'k_num': info.get("k_num"),
                        'worship': info.get("worship"),
                        'worship_time': info.get("worship_time"),
                        'exit_time': info.get("exit_time")
                    }
                }
                p_guild_data = tb_character_guild.getObj(tihuan_id)
                p_guild_data.update_multi(data)

            p_list1 = p_list.get(m_position)
            p_list1.remove(m_p_id)
            p_list1.append(tihuan_id)
            p_list2 = p_list.get(m_position - 1)
            p_list2.remove(tihuan_id)
            p_list2.append(m_p_id)
            response.p_id = tihuan_id

        else:  #此职位还没满
            p_list1 = p_list.get(m_position)
            p_list1.remove(m_p_id)
            p_list2 = p_list.get(m_position - 1)
            p_list2.append(m_p_id)
    else:
        p_list1 = p_list.get(m_position)
        p_list1.remove(m_p_id)
        p_list2 = [m_p_id]

    player.guild.position -= 1
    player.guild.save_data()

    p_list.update({m_position: p_list1, m_position - 1: p_list2})
    guild_obj.p_list = p_list
    guild_obj.save_data()

    response.result = True
    response.message = "晋升成功"
    return response.SerializeToString()
Пример #21
0
def create_guild_801(data, player):
    """创建公会 """
    args = CreateGuildRequest()
    args.ParseFromString(data)
    g_name = args.name
    response = GuildCommonResponse()
    p_id = player.base_info.id
    g_id = player.guild.g_id

    if base_config.get('create_level') > player.level.level:
        response.result = False
        response.message = "等级不够"
        return response.SerializeToString()

    if base_config.get('create_money') > player.finance.gold:
        response.result = False
        response.message = "元宝不足"
        return response.SerializeToString()

    if g_id != 0:
        response.result = False
        response.message = "您已加入公会"
        return response.SerializeToString()

    if not g_name:
        response.result = False
        response.message = "公会名不能为空"
        return response.SerializeToString()

    match = re.search(u'[\uD800-\uDBFF][\uDC00-\uDFFF]',
                      unicode(g_name, "utf-8"))
    if match:
        response.result = False
        response.message = "公会名不合法"
        return response.SerializeToString()

    if trie_tree.check.replace_bad_word(g_name).encode("utf-8") != g_name:
        response.result = False
        response.message = "公会名不合法"
        return response.SerializeToString()

    if len(g_name) > 18:
        response.result = False
        response.message = "名称超过字数限制"
        return response.SerializeToString()

    # 判断有没有重名
    guild_name_data = tb_guild_name.getObjData(g_name)
    if guild_name_data:
        response.result = False
        response.message = "此名已存在"
        return response.SerializeToString()

    # 创建公会
    guild_obj = Guild()
    guild_obj.create_guild(p_id, g_name)

    remote_gate.add_guild_to_rank_remote(guild_obj.g_id, 1)

    data = {'g_name': g_name, 'g_id': guild_obj.g_id}
    tb_guild_name.new(data)

    player.guild.g_id = guild_obj.g_id
    player.guild.worship = 0
    player.guild.worship_time = 1
    player.guild.contribution = 0
    player.guild.all_contribution = 0
    player.guild.k_num = 0
    player.guild.position = 1
    player.guild.save_data()
    guild_obj.save_data()
    player.finance.gold -= base_config.get('create_money')
    player.finance.save_data()

    # 加入公会聊天
    remote_gate.login_guild_chat_remote(player.dynamic_id, player.guild.g_id)

    response.result = True
    return response.SerializeToString()
Пример #22
0
 def peroid_of_stamina_recover(self):
     return base_config.get('peroid_of_vigor_recover', 300)
Пример #23
0
 def max_of_stamina(self):
     return base_config.get('max_of_vigor', 120)
Пример #24
0
def do_assemble(no,
                quality,
                break_skills,
                hp,
                atk,
                physical_def,
                magic_def,
                hit,
                dodge,
                cri,
                cri_coeff,
                cri_ded_coeff,
                block,
                ductility,
                position,
                level,
                is_boss=False,
                is_hero=True,
                is_break_hero=False,
                unit_name=""):
    """组装战斗单位
    @param no: 编号
    @param quality: 品质
    @param normal_skill: 普通技能[技能ID, 技能buffs]
    @param rage_skill: 怒气技能[技能ID, 技能buffs]
    @param break_skills: 突破技能 [[技能ID, 技能buffs], [技能ID, 技能buffs]]
    @param hp: 血
    @param atk: 攻
    @param physical_def: 物理防御
    @param magic_def: 魔法防御
    @param hit: 命中
    @param dodge: 闪避
    @param cri: 暴击
    @param cri_coeff: 暴击伤害系数
    @param cri_ded_coeff: 暴击减免系数
    @param block: 格挡率
    @param is_boss: 是否是boss
    @return: 战斗单位对象
    """
    battle_unit = BattleUnit()

    battle_unit.unit_no = no
    battle_unit.unit_name = unit_name
    battle_unit.quality = quality

    battle_unit.hp_max = hp
    battle_unit.hp = hp
    battle_unit.hp_max = hp
    battle_unit.atk = atk
    battle_unit.physical_def = physical_def
    battle_unit.magic_def = magic_def
    battle_unit.hit = hit
    battle_unit.dodge = dodge
    battle_unit.cri = cri
    battle_unit.cri_coeff = cri_coeff
    battle_unit.cri_ded_coeff = cri_ded_coeff
    battle_unit.block = block

    battle_unit.level = level
    battle_unit.is_boss = is_boss

    battle_unit.slot_no = position

    # init skill
    mp_config = base_config.get('chushi_value_config')
    if is_hero:
        battle_unit.skill = HeroSkill(battle_unit, mp_config)
        if is_break_hero:
            mp_config = base_config.get('stage_break_angry_value')
            battle_unit.skill = HeroSkill(battle_unit, mp_config)
    else:
        battle_unit.skill = MonsterSkill(battle_unit, mp_config)

    battle_unit.skill.break_skill_ids = break_skills
    return battle_unit
Пример #25
0
def execute_demage(attacker, target, skill_buff_info, is_block):
    """
    执行技能[1,2]
    """
    logger.debug_cal(
        "    攻方 no(%d), unit_no(%d), name(%s), hp(%f), mp(%f), buff(%s)" %
        (attacker.slot_no, attacker.unit_no, attacker.unit_name, attacker.hp,
         attacker.mp, attacker.buff_manager))
    logger.debug_cal(
        "    守方 no(%d), unit_no(%d), name(%s), hp(%f), mp(%f), buff(%s)" %
        (target.slot_no, target.unit_no, target.unit_name, target.hp,
         target.mp, target.buff_manager))

    is_cri = False  # 是否暴击
    is_trigger = False  # 是否trigger

    if get_random_int(1, 100) <= skill_buff_info.triggerRate:
        is_trigger = True

    if not is_trigger:
        logger.debug_cal("    技能未触发。")

    if get_random_int(1, 100) < attacker.cri - target.ductility:
        is_cri = True
    cri_coeff = (attacker.cri_coeff - target.cri_ded_coeff) / 100  # 暴击伤害系数

    k1 = attacker.atk  # 攻方总实际攻击力
    k2 = 0  # 守方总物理或者魔法防御
    if skill_buff_info.effectId == 1:
        k2 = target.physical_def
    elif skill_buff_info.effectId == 2:
        k2 = target.magic_def

    k3_k4 = base_config.get("a3")  # 基础伤害值调整参数
    k3 = k3_k4[0]
    k4 = k3_k4[1]

    base_demage_value = (k1 * k1 / (k1 + k3 * k2)) * k4  # 基础伤害值
    block_demage_coeff = base_config.get("a4")  # 格挡受伤比参数
    #
    level_coeff = 1  # 等级压制系数
    k1 = attacker.level  # 攻方等级
    k2 = target.level  # 守方等级
    temp = base_config.get("a5")  # 等级压制调整参数
    k3, k4, k5 = temp[0], temp[1], temp[2]  # 等级压制调整参数
    if (k2 - k1) > 5:
        if (1 - k3 / k4 * ((k2 - k1) * (k2 - k1) + (k2 - k1) + k5)) > 0.1:
            level_coeff = 1 - k3 / k4 * ((k2 - k1) * (k2 - k1) +
                                         (k2 - k1) + k5)
        else:
            level_coeff = 0.1
    else:
        level_coeff = 1
        #
    temp = base_config.get("a6")  # 伤害浮动调整参数
    k1, k2 = temp[0], temp[1]  #
    demage_fluct_coeff = random.uniform(k1, k2)  # 伤害浮动系数

    if not is_cri:
        cri_coeff = 1

    if not is_block:
        block_demage_coeff = 1

    total_demage = base_demage_value * cri_coeff * block_demage_coeff * level_coeff * demage_fluct_coeff  # 总伤害值
    #
    actual_demage = 0  # 实际伤害值

    if (skill_buff_info.effectId == 1 or skill_buff_info.effectId
            == 2) and skill_buff_info.valueType == 1:
        actual_demage = total_demage + skill_buff_info.valueEffect + skill_buff_info.levelEffectValue * attacker.level
        #logger.debug_cal(actual_demage, total_demage, skill_buff_info.valueEffect, skill_buff_info.levelEffectValue, attacker.level, type(skill_buff_info.valueType))

    elif (skill_buff_info.effectId == 1
          or skill_buff_info.effectId == 2) and skill_buff_info.valueType == 2:
        actual_demage = total_demage * (
            skill_buff_info.valueEffect / 100 +
            skill_buff_info.levelEffectValue / 100 * attacker.level)
        #logger.debug_cal(actual_demage, total_demage, skill_buff_info.valueEffect, skill_buff_info.levelEffectValue, attacker.level, skill_buff_info.valueType)
        #logger.debug_cal(skill_buff_info.valueEffect/100 + skill_buff_info.levelEffectValue/100 * attacker.level)


    logger.debug_cal("    技能ID(%d),暴击(%s),格挡(%s),基础伤害值(%s),暴击伤害系数(%s),等级压制系数(%s),伤害浮动系数(%s),总伤害值(%s),攻方实际伤害值(%s)" \
    % (skill_buff_info.id, is_cri, is_block, base_demage_value, cri_coeff, level_coeff, demage_fluct_coeff,
            total_demage, actual_demage))
    target.hp = target.hp - actual_demage
Пример #26
0
 def strength_max(self):
     """获取装备上限为玩家等级+strength_max"""
     return base_config.get("max_equipment_strength", 3)
Пример #27
0
def travel_831(data, player):
    """游历"""
    args = TravelRequest()
    args.ParseFromString(data)
    stage_id = args.stage_id
    response = TravelResponse()

    if base_config.get('travelOpenLevel') > player.level.level:
        response.res.result = False
        response.res.result_no = 811  # 等级不够
        return response.SerializeToString()

    shoes = player.travel_component.shoes
    if shoes[0] + shoes[1] + shoes[2] == 0:
        response.res.result = False
        response.res.result_no = 812  # 鞋子不足
        return response.SerializeToString()

    travel_cache = player.travel_component.travel

    while (True):
        travel_event_id = get_travel_event_id()
        flag = 1
        if travel_cache.get(stage_id):
            for event in travel_cache.get(stage_id):
                if travel_event_id == event[0]:
                    flag = 0
            if flag:
                break
        else:
            travel_cache[stage_id] = []
            break
    event_info = travel_event_config.get('events').get(travel_event_id)
    if not event_info:
        logger.error('get travel event config error')
        response.res.result = False
        response.res.result_no = 800  # 未知错误
        return response.SerializeToString()

    response.event_id = travel_event_id

    res_drops = response.drops
    drops = []
    stage_info = stage_config.get('stages').get(stage_id)
    common_bag = BigBag(stage_info.commonDrop)
    common_drop = common_bag.get_drop_items()
    drops.extend(common_drop)

    drop_data = get_drop_data(drops)

    get_return(player, drop_data, res_drops)

    # 等待 战斗 答题 领取
    if event_info.type == 4:
        gain(player, drops)
    else:
        travel_cache.get(stage_id).append([travel_event_id, drops])

    if shoes[3] == 0:
        for i in [2, 1, 0]:
            if shoes[i] != 0:
                shoes[3] = i + 1
                shoes[4] = 1
                break
    else:
        if base_config.get("travelShoe" + str(shoes[3]))[1] == shoes[4] + 1:
            shoes[shoes[3] - 1] -= 1
            shoes[4] = 0
            shoes[3] = 0
        else:
            shoes[4] += 1

    player.travel_component.save()

    response.res.result = True
    return response.SerializeToString()
Пример #28
0
def get_shop_item_ids():
    """随机筛选ids"""
    items = get_all_shop_items()
    item_num = base_config.get('soulShopItemNum')
    return random_multi_pick_without_repeat(items, item_num)
Пример #29
0
def get_shop_item_ids():
    """随机筛选ids"""
    items = get_all_shop_items()
    item_num = base_config.get('arena_shop_item_num')
    print 'arena_shop_item_num', item_num
    return random_multi_pick_without_repeat(items, item_num)
Пример #30
0
def pvb_fight_start_1705(pro_data, player):
    """开始战斗
    """
    logger.debug("fight start..")
    request = stage_request_pb2.StageStartRequest()
    request.ParseFromString(pro_data)

    stage_id = request.stage_id  # 关卡编号
    unparalleled = request.unparalleled  # 无双编号

    logger.debug("unparalleled,%s" % unparalleled)

    line_up = {}  # {hero_id:pos}
    for line in request.lineup:
        if not line.hero_id:
            continue
        line_up[line.hero_id] = line.pos

    stage_info = fight_start(stage_id, line_up, unparalleled, 0, player)
    result = stage_info.get('result')

    response = PvbFightResponse()

    res = response.res
    res.result = result
    if stage_info.get('result_no'):
        res.result_no = stage_info.get('result_no')

    if not result:
        logger.info('进入关卡返回数据:%s', response)
        return response.SerializePartialToString(), stage_id

    red_units = stage_info.get('red_units')
    blue_units = stage_info.get('blue_units')

    logger.debug("--" * 40)

    # 根据鼓舞次数,增加ATK百分比
    atk_rate = player.world_boss.encourage_coin_num * base_config.get("worldbossInspireAtk", 0) + \
               player.world_boss.encourage_gold_num * base_config.get("worldbossInspireAtkMoney", 0)

    for slot_no, red_unit in red_units.items():
        red_unit.atk *= (1 + atk_rate)

    print red_units
    print blue_units
    for slot_no, red_unit in red_units.items():
        red_add = response.red.add()
        assemble(red_add, red_unit)

    blue_units = blue_units[0]
    for no, blue_unit in blue_units.items():
        blue_add = response.blue.add()
        assemble(blue_add, blue_unit)

    response.red_best_skill = unparalleled
    if unparalleled in player.line_up_component.unpars:
        response.red_best_skill_level = player.line_up_component.unpars[
            unparalleled]

    # mock fight.
    player_info = {}
    player_info["player_id"] = player.base_info.id
    player_info["nickname"] = player.base_info.base_name
    player_info["level"] = player.level.level
    player_info["line_up_info"] = line_up_info(
        player).SerializePartialToString()

    str_red_units = cPickle.dumps(red_units)
    str_blue_units = cPickle.dumps(blue_units)
    logger.debug("--" * 40)
    print red_units
    print blue_units
    result = remote_gate['world'].pvb_fight_remote(str_red_units, unparalleled,
                                                   str_blue_units, player_info)
    response.fight_result = result

    # 玩家信息更新
    player.world_boss.fight_times += 1
    player.world_boss.last_fight_time = get_current_timestamp()
    player.world_boss.save_data()

    print response
    logger.debug("fight end..")

    return response.SerializePartialToString()