Exemplo n.º 1
0
def clean_faction(entityID):
    p = g_entityManager.get_player(entityID)
    if not p:
        p = Player.simple_load(entityID, ['factionID', 'applyFactions'])
    if p.factionID:
        faction = Faction.simple_load(p.factionID, ['memberset'])
        if faction:
            safe_remove(faction.memberset, p.entityID)
            faction.save()
        p.last_factionID = p.factionID
        gm_logger.info({
            'faction': {
                'entityID': p.entityID,
                'type': 'quit_faction',
                'factionID': p.factionID,
            }
        })
    p.factionID = 0
    p.fp = 0
    p.faction_name = ''
    p.faction_level = 0
    p.faction_is_leader = False
    p.applyFactions.clear()
    # p.applyFactionTime = 0
    p.save()
    if g_entityManager.get_player(entityID):
        p.sync()
Exemplo n.º 2
0
def join_faction(entityID, factionID):
    faction = Faction.simple_load(factionID, [
        "level", "name", "memberset", "inviteset", "applyset",
        "strengthen_hp_level", "strengthen_at_level", "strengthen_ct_level",
        "strengthen_df_level"
    ])
    # recommend
    level = FactionRankRanking.get_score(factionID) or 1
    limit = get_config(FactionLimitConfig)[level].limit
    if limit - len(faction.memberset) <= 1:
        unrecommend(factionID)
    clean_faction(entityID)
    p = g_entityManager.get_player(entityID)
    if not p:
        p = Player.simple_load(entityID, [
            'inviteFactionSet',
            'factionID',
            'last_factionID',
            'strengthen_at_level',
            'strengthen_hp_level',
            'strengthen_ct_level',
            'strengthen_df_level',
        ])
    p.factionID = faction.factionID
    p.faction_name = faction.name
    p.faction_level = level
    now = int(time.time())
    p.joinFactionTime = now
    # FIXME
    for fid in p.inviteFactionSet:
        f = Faction.simple_load(fid, ['inviteset'])
        safe_remove(f.inviteset, p.entityID)
        f.save()
    p.inviteFactionSet.clear()
    if p.factionID != p.last_factionID:
        p.totalfp = 0
        p.todayfp_donate = 0
        p.todayfp_task = 0
        p.todayfp_sp = 0
    faction.memberset.add(p.entityID)
    safe_remove(faction.applyset, p.entityID)
    safe_remove(faction.inviteset, p.entityID)
    if g_entityManager.get_player(entityID):
        p.load_faction()
        p.sync()
    p.save()
    faction.save()
    gm_logger.info({
        'faction': {
            'entityID': p.entityID,
            'type': 'join_faction',
            'factionID': faction.factionID,
        }
    })
Exemplo n.º 3
0
def quit_group(entityID, groupID):
    g = Group.simple_load(groupID, ["leaderID", "members", "invites"])
    if not g:
        return msgTips.FAIL_MSG_GROUP_NOT_IN_THIS
    g.members.load()
    g.invites.load()
    p = g_entityManager.get_player(entityID)
    if not p:
        p = Player.simple_load(entityID, ["groupID", "group_last_kicked_time"])
    if not p.groupID:
        return msgTips.FAIL_MSG_GROUP_HAS_NOT_JOINED  # "未加入同门了"
    if p.entityID not in g.members:
        return msgTips.FAIL_MSG_GROUP_NOT_IN_THIS
    del g.members[p.entityID]
    if p.entityID in g.invites:
        g.invites.remove(p.entityID)
    if p.entityID == g.leaderID:
        rest = sorted(g.members.items(), key=lambda v: v[1]["jointime"])
        if rest:
            new_leaderID, _ = rest[0]
            g.leaderID = new_leaderID
    recommend(groupID)
    g.save()
    p.groupID = 0
    now = int(time.time())
    p.group_last_kicked_time = now
    p.save()
    return SUCCESS
Exemplo n.º 4
0
def update_player_group_damage(entityID, damage):
    p = g_entityManager.get_player(entityID)
    if not p:
        return
    p.gve_groupdamage = damage
    p.save()
    p.sync()
Exemplo n.º 5
0
def join_group(entityID, groupID):
    now = int(time.time())
    p = g_entityManager.get_player(entityID)
    if not p:
        p = Player.simple_load(entityID, ["groupID", "group_last_kicked_time"])
    if p.groupID:
        return msgTips.FAIL_MSG_GROUP_ALREADY_JOINED
    if now < p.group_last_kicked_time + ONE_DAY:
        return msgTips.FAIL_MSG_GROUP_KICKED_RECENTLY
    g = Group.simple_load(groupID, ["members", "applys"])
    g.members.load()
    g.applys.load()
    if len(g.members) >= MAX_MEMBERS_COUNT:
        return msgTips.FAIL_MSG_GROUP_LIMITED_EXCEED
    if p.entityID in g.members:
        return msgTips.FAIL_MSG_GROUP_ALREADY_JOINED_THIS
    g.members[p.entityID] = {"jointime": now, "intimate": 0}
    if len(g.members) >= MAX_MEMBERS_COUNT:
        unrecommend(groupID)
        g.applys.clear()
    else:
        recommend(groupID)
        try:
            del g.applys[p.entityID]
        except KeyError:
            pass
    g.save()
    p.groupID = groupID
    p.save()
    return SUCCESS
Exemplo n.º 6
0
Arquivo: boss.py Projeto: kimch2/x8623
 def run():
     ranks = self.BossCampaignRanking.get_range_by_score(
         "-inf", "+inf", withscores=True)
     configs = get_config(FriendfbRewardConfig)
     group = get_config(FriendfbRewardByFbIDConfig).get(
         self.config.fbID, [])
     configs = [configs[e.ID] for e in group]
     rank = 1
     for index, entityID in enumerate(ranks, 0):
         if index % 2 == 1:
             continue
         for r in configs:
             start, end = r.range
             if rank >= start and (not end or rank <= end):
                 p = g_entityManager.get_player(entityID)
                 rewards = {
                     self.identification: {
                         "rewards": r.rewards,
                         "damage": ranks[rank],
                         "rank": rank
                     }
                 }
                 if p:
                     give_reward(p, rewards=rewards)
                 else:
                     keep_reward(entityID, rewards)
                 break
         rank += 1
Exemplo n.º 7
0
def discredit(manager, entityID, current_floor):
    """以当前派驻层向下查找可派驻层,暂存收益并派驻或结算派驻收益"""
    now = int(time.time())
    floor = manager.avail_floor(current_floor)

    p = g_entityManager.get_player(entityID)
    if p:
        if floor:
            # 可派驻,暂存当前派驻层收益
            manager.stash_earnings(p)
            p.climb_tower_accredit_floor = floor
            p.climb_tower_accredit_stash_time = now
            # 结束时间作为 score
            score = int(p.climb_tower_accredit_cd)
            # 取消当前层派驻
            manager.floors[current_floor].idx.unregister(p.entityID)
            manager.floors[floor].idx.register(p.entityID, score)
        else:
            # 取消派驻
            manager.floors[current_floor].idx.unregister(p.entityID)
            p.climb_tower_accredit_cd = now
            # 结算派驻收益
            manager.tally_up(p)
        p.save()
        p.sync()
Exemplo n.º 8
0
def resetAttr(entityID, attrName):
    from entity.manager import g_entityManager
    entityID = int(entityID)
    p = g_entityManager.get_player(entityID)
    if not p:
        from player.model import Player, OfflineAttrType
        Player.add_offline_attr(entityID,
                                Player.getAttributeIDByName(attrName),
                                None,
                                type=OfflineAttrType.Reset)
        return SUCCESS
    else:
        try:
            f = p.fields[attrName]
            if callable(f.default):
                default = f.default()
            else:
                default = f.default
            setattr(p, attrName, default)
            p.save()
            p.sync()
        except:
            import traceback
            traceback.print_exc()
            return FAILURE
    return SUCCESS
Exemplo n.º 9
0
def modifyfbId(playerId):
    ''' 修改用户副本进度 '''
    from scene.constants import FbType
    from scene.manager import set_fb_score, sync_scene_infos
    from config.configs import get_config, FbInfoByTypeConfig, FbInfoConfig

    from entity.manager import g_entityManager
    player = g_entityManager.get_player(int(playerId))
    if not player:
        return FAILURE

    fbID = int(request.GET.getone("fbId") or 0)
    if not fbID:
        configs = get_config(FbInfoByTypeConfig).get(FbType.Normal, [])\
            + get_config(FbInfoByTypeConfig).get(FbType.Guide,  [])\
            + get_config(FbInfoByTypeConfig).get(FbType.Advanced, [])
        for c in configs:
            if c.ID not in player.fbscores:
                set_fb_score(player, c.ID, 3)
    else:
        configs = get_config(FbInfoConfig)
        if fbID in configs:
            set_fb_and_prev_score(player, fbID, 3)
        else:
            return json.dumps('failure')
    player.save()
    sync_scene_infos(player, FbType.Normal)
    sync_scene_infos(player, FbType.Advanced)
    return SUCCESS
Exemplo n.º 10
0
def lock_device_and_skip_guide(entityID):
    from entity.manager import g_entityManager
    from player.model import Player, OfflineAttrType
    entityID = int(entityID)
    deviceID = request.POST.getone('deviceID', '')
    lock_level = int(request.POST.getone('lock_level', '50'))
    role = g_entityManager.get_player(entityID)
    if not role:
        Player.add_offline_attr(entityID,
                                Player.getAttributeIDByName('skip_guide'),
                                True, OfflineAttrType.Set)
        Player.add_offline_attr(entityID,
                                Player.getAttributeIDByName('lock_level'),
                                lock_level, OfflineAttrType.Set)
    else:
        role.skip_guide = True
        role.lock_level = lock_level
        role.save()
        role.sync()

    # lock device
    if not role:
        userID = Player.simple_load(entityID, ['userID']).userID
    else:
        userID = role.userID

    from user.model import User
    u = User.simple_load(userID, ['lock_device', 'imsi'])
    u.lock_device = deviceID or u.imsi
    u.save()
    return SUCCESS
Exemplo n.º 11
0
def get_lineup_info(playerID, attrs, type=None):
    from player.model import Player
    from pet.model import Pet
    from entity.manager import g_entityManager
    if not type:
        type = LineupType.ATK
    p = g_entityManager.get_player(playerID)
    if p:
        pets = [p.pets.get(i, None) for i in p.lineups.get(type, [])]
    else:
        # p = Player.batch_load([playerID], ['lineups'])[0]  # FIXME
        p = Player.simple_load(playerID, ["entityID", "lineups"])
        p.lineups.load()
        if p:
            try:
                pets = Pet.batch_load(p.lineups.get(type, []),
                                      Pet.expend_fields(attrs))
            except IndexError:
                pets = []
    result = []
    for pos, pet in enumerate(pets):
        if not pet:
            continue
        info = {n: getattr(pet, n) for n in attrs}
        if type == LineupType.Daily:
            if info.get("daily_restHP", 0):
                info["restHP"] = info["daily_restHP"]
        info['posIndex'] = pos
        info['isTeamLeader'] = (pos == 0)
        result.append(info)
    return result
Exemplo n.º 12
0
Arquivo: log.py Projeto: fcua/x8623
 def process(self, msg, kwargs):
     value = msg.items()[0][1]
     entityID = value.get('entityID')
     if entityID:
         from entity.manager import g_entityManager
         player = g_entityManager.get_player(entityID)
         if player:
             value.update(
                 playername=player.name,
                 username=player.username,
                 channel=player.channel,
                 userID=player.userID,
                 level=player.level,
                 vip=player.vip,
                 totalfp=player.totalfp,
                 fbprocess=player.fbprocess,
                 appid=player.appid,
                 UDID=player.UDID,
                 idfa=player.idfa,
                 IMEI=player.IMEI,
                 MAC=player.MAC,
             )
         value['worldID'] = REGION['ID']  # WORLD['ID']
     value['sessionID'] = SESSION['ID']
     value['_id'] = str(objectid.ObjectId())
     return json.dumps(msg), kwargs
Exemplo n.º 13
0
    def user_out(self, msgtype, body):
        req = rainbow_pb.KickOutRequest()
        req.ParseFromString(body)

        room_obj = g_gameManager.get_room(self.player.room_id)
        if room_obj.master_entity_id != self.player.entityID:
            return fail_msg(msgtype,
                            msgTips.FAIL_MSG_ROOM_KICK_OUT_PERMISSION_DENY)

        rsp = rainbow_pb.KickOutResponse()
        rsp.kick_out_id = req.kick_out_id
        msg = success_msg(msgtype, rsp)
        for role in room_obj.roles:
            if role['entityID'] == 0:
                continue

            p = g_entityManager.get_player(role['entityID'])
            if p:
                # 如果就是这个玩家被踢的话,清空一下数据
                if p.entityID == req.kick_out_id:
                    p.room_id = 0
                    p.save()
                    p.sync()

                # 发送踢人的消息
                if role['entityID'] != self.player.entityID:
                    g_playerManager.sendto(role['entityID'], msg)

            # 把这个位置空出来
            if role['entityID'] == req.kick_out_id:
                role['entityID'] = 0
                role['username'] = ''

        return msg
Exemplo n.º 14
0
def pay_handler(entityID, username, goodsid, amount=None):
    goodsid = str(goodsid)  # 必须是字符串
    label = username2label(username)
    sdktype = username2type(username)
    sdkconfigs = get_config(RechargeBySdktypeConfig).get(sdktype, [])
    labconfigs = get_config(RechargeByLabelConfig).get(label, [])
    configs = get_config(RechargeConfig)
    ids = {e.id for e in sdkconfigs} & {e.id for e in labconfigs}
    good = {configs[e].goodsid: configs[e] for e in ids}.get(goodsid)
    if not good:
        logger.error("error goodsid %r", goodsid)
        return
    p = g_entityManager.get_player(entityID)
    if p:
        level = p.level
        reward = give_goods(p, good, amount=amount)
        get_gold = reward.get("gold", 0)
    else:
        # patch 离线玩家,需要计算可获得金额
        p = Player.simple_load(
            entityID,
            ["userID", "level", "bought_recharges", "offline_recharges"])
        level = p.level
        if p.offline_recharges:
            p.offline_recharges.append([good.id, amount])
        else:
            p.offline_recharges = [[good.id, amount]]
        is_first = (good.id not in (p.bought_recharges or set())) \
            and (good.id not in ({i for i, j in p.offline_recharges} or set()))
        from reward.manager import open_reward, RewardType
        reward = open_reward(RewardType.Recharge, good, is_first, amount)
        rs = reward.apply_after()  # 仅计算可获金额,并不发货
        get_gold = rs.get("gold", 0)
        p.save()
    return {"username": username, "level": level, "get_gold": get_gold}
Exemplo n.º 15
0
    def user_out(self, msgtype, body):
        req = rainbow_pb.KickOutRequest()
        req.ParseFromString(body)

        room_obj = g_roomManager.get_room(self.player.room_id)
        if not room_obj:
            return fail_msg(msgtype, msgTips.FAIL_MSG_ROOM_NOT_EXIST)

        if room_obj.master_entity_id != self.player.entityID:
            return fail_msg(msgtype, msgTips.FAIL_MSG_ROOM_KICK_OUT_PERMISSION_DENY)

        rsp_user_kick_out = rainbow_pb.UserKickOut()
        rsp_user_kick_out.kick_out_id = req.kick_out_id
        msg = success_msg(msgid.ROOM_USER_BEEN_KICK_OUT, rsp_user_kick_out)
        for role in room_obj.roles:
            if role.entityID == 0:
                continue

            p = g_entityManager.get_player(role.entityID)
            if p:
                if p.entityID == req.kick_out_id:
                    p.room_id = 0
                    p.pos_index = 0
                    p.save()
                g_playerManager.sendto(role.entityID, msg)

            if role.entityID == req.kick_out_id:
                role.entityID = 0
                role.username = ''

        return success_msg(msgtype, '')
Exemplo n.º 16
0
def sync_apply(entityID):
    player = g_entityManager.get_player(entityID)
    if player:
        faction = Faction.simple_load(player.factionID,
                                      ['applyset', 'leaderID'])
        player.applyMemberSet = faction.applyset
        player.sync()
    return SUCCESS
Exemplo n.º 17
0
def apply_friend(entityID, applyID):
    now = int(time.time())
    friend = g_entityManager.get_player(entityID)
    if applyID in friend.friend_applys:
        return msgTips.FAIL_MSG_FRIEND_ALREADY_APPLYED
    friend.friend_applys[applyID] = {"applytime": now}
    friend.save()
    friend.sync()
    return OK
Exemplo n.º 18
0
def remove_apply_friend(entityID, applyID):
    p = g_entityManager.get_player(entityID)
    try:
        del p.friend_applys[applyID]
    except KeyError:
        pass
    p.save()
    p.sync()
    return True
Exemplo n.º 19
0
Arquivo: city.py Projeto: kimch2/x8623
def city_send_mail(entityID, title, content, rewards, key, ID):
    if not int(Player.pool.execute(
            "HSET", "city_rewards_recv_p{%d}" % entityID, key, "") or 0):
        return
    p = g_entityManager.get_player(entityID)
    if not p:
        p = Player.simple_load(entityID, ['factionID'])
    rank = CityDungeonKillRanking.get_rank(p.factionID)
    content = content.format(rank)
    send_mail(entityID, title, content, addition=rewards, configID=ID)
Exemplo n.º 20
0
def sync_daily_rank(entityID, history=None):
    p = g_entityManager.get_player(entityID)
    if p:
        if history:
            p.daily_histories.appendleft(history)
            p.daily_histories.ltrim(0, MAX_HIST_LEN - 1)
            p.daily_history_flag = True
        p.clear_daily_win_count()
        p.save()
        p.sync()
Exemplo n.º 21
0
def sync_faction(entityID, factionID, level, name):
    from entity.manager import g_entityManager
    p = g_entityManager.get_player(entityID)
    if p.factionID == factionID:
        p.faction_level = level
        p.faction_name = name
        from task.manager import on_faction_level
        on_faction_level(p, level)
        p.save()
        p.sync()
    return True
Exemplo n.º 22
0
def get_equip_base_power(entityID, prototypeID, masterID, baseHP, baseATK,
                         baseDEF, baseCRI, baseEVA):
    base = baseHP / 5 + baseATK + baseDEF * 2 + baseCRI * 15 + baseEVA * 25
    from entity.manager import g_entityManager
    p = g_entityManager.get_player(masterID)
    if p:
        pet_id = p.equipeds.get(entityID, 0)
        if pet_id in p.lineups.get(LineupType.ATK, []):
            p.clear_equip_power()
            p.clear_power()
    return base
Exemplo n.º 23
0
def allow_friend(applyID, entityID):
    applicant = g_entityManager.get_player(applyID)
    if len(applicant.friendset) >= applicant.friend_max_count:
        return False
    if len(applicant.friendset) + 1 >= applicant.friend_max_count:
        unrecommend(entityID)
        unrecommendp(applicant)
    add_friend(applyID, entityID)
    from task.manager import on_friends_count
    on_friends_count(applicant)
    return True
Exemplo n.º 24
0
def update_gve_entity_index(entityID):
    p = g_entityManager.get_player(entityID)
    if p:
        g = Group.simple_load(p.groupID, ["gve_joineds"])
        if g:
            g.gve_joineds.load()
            try:
                p.gve_index = g.gve_joineds.index(entityID)
                p.save()
            except ValueError:
                pass
Exemplo n.º 25
0
def remove_friend(entityID, friendID):
    p = g_entityManager.get_player(entityID)
    try:
        p.friendset.remove(friendID)
        recommend(entityID)
        recommendp(p)
    except KeyError:
        pass
    p.save()
    p.sync()
    return True
Exemplo n.º 26
0
def sync_products(entityID, history):
    from entity.manager import g_entityManager
    p = g_entityManager.get_player(entityID)
    cc, _, _ = cost_player_products(p, history["booty"], history['type'])
    if cc:
        now = int(time.time())
        p.mine_protect_time = now + 3600 * history['protect_time']
        p.mine_rob_history.appendleft(history)
        p.mine_rob_history_flag = True
        p.save()
        p.sync()
    return 'SUCCESS'
Exemplo n.º 27
0
def ranking_send_mail(entityID, title, content, rewards, key, ID):
    if not int(
            Player.pool.execute("HSET", "ranking_receiveds_p{%d}" % entityID,
                                key, "") or 0):
        return
    p = g_entityManager.get_player(entityID)
    if p:
        if key in p.rankingreceiveds:
            return
        p.ranking_receiveds.load()
        send_mail(p.entityID, title, content, addition=rewards, configID=ID)
        p.save()
        p.sync()
Exemplo n.º 28
0
def sync_loot_cost(entityID, history):
    from entity.manager import g_entityManager
    p = g_entityManager.get_player(entityID)
    if not history["result"]:  # lose
        costed = cost_mats(entityID, history["loot"], history["count"])
        if not costed:
            return
        now = int(time.time())
        p.loot_protect_time = now + 3600
    p.loot_history.appendleft(history)
    p.loot_history.ltrim(0, 10)
    p.save()
    p.sync()
Exemplo n.º 29
0
def add_climb_tower_history(entityID, history, fight=None):
    history['ID'] = '%d:%d' % (history['time'], history['oppID'])
    p = g_entityManager.get_player(entityID)
    if p:
        p.climb_tower_history.appendleft(history)
        p.climb_tower_history.ltrim(0, HISTORY_LIMIT)
        if fight:  # clean fight history
            p.climb_tower_fight_history[history['ID']] = fight
            if len(p.climb_tower_fight_history) > HISTORY_LIMIT:
                for key in sorted(p.climb_tower_fight_history)[:-HISTORY_LIMIT]:
                    del p.climb_tower_fight_history[key]
        p.save()
        p.sync()
Exemplo n.º 30
0
def kick_group_member(entityID, groupID):
    rs = quit_group(entityID, groupID)
    dt = datetime.now()
    g = Group.simple_load(groupID, ["name"])
    title, content, ID = get_mail("GroupKick")
    send_mail(entityID,
              title,
              content.format(dt.strftime(DATETIMEFMT), g.name),
              configID=ID)
    p = g_entityManager.get_player(entityID)
    if p:
        p.sync()
    return rs