Beispiel #1
0
 def new_copys(self, aid, node):
     """ 新建隐分身数据 """
     res_node = Game.res_mgr.awar_strong_maps.get(node)
     if not res_node:
         return
     res_npc_configs = Game.res_mgr.awar_npc_configs_bykey.get(
         int(float(res_node.apcid)))
     ally_pids = Game.rpc_ally_mgr.member_pids_by_aid(aid)
     aname = Game.rpc_ally_mgr.ally_name_by_aid(aid)
     copys = []
     num = len(res_npc_configs)
     pid_num = len(ally_pids)
     if pid_num < num:
         ally_pids *= int(math.ceil(float(num) / pid_num))
     for res_npc_config in res_npc_configs:
         pid = ally_pids.pop()
         player = Player.load_player(pid)
         main_role = player.roles.main_role
         o = CopyData.new()
         o.ancid = res_npc_config.id
         o.pid = pid
         o.rid = main_role.data.rid
         o.q = main_role.data.q
         o.name = player.data.name
         o.aname = aname
         o.eqid = player.roles.main_role.body_equip_id
         copys.append(o)
     self.node2copys[node] = copys
Beispiel #2
0
 def send_reward(self):
     res_tbox = Game.res_mgr.tboxs.get(self.bid)
     if res_tbox is None:
         log.error('ally_team(%s) res_tbox is None, pids(%s)', self.tid,
                   self.pids)
         return
     rw = Game.reward_mgr.get(res_tbox.trid)
     items = rw.reward(None)
     if items is None:
         log.error('ally_team(%s) reward_items is None, pids(%s)', self.tid,
                   self.pids)
         return
     rw_mail = Game.res_mgr.reward_mails.get(RW_MAIL_ATBOX)
     boss = Game.res_mgr.monsters.get(res_tbox.tmid)
     content = rw_mail.content % dict(name=boss.name)
     pids = []
     for pid in self.pids:
         player = Game.rpc_player_mgr.get_rpc_player(pid)
         if player is None:
             player = Player.load_player(pid)
         if player is None:
             continue
         data = player.get_ally_tbox_data()
         if not is_today(data['t']):
             data['bids'] = []
             data['cr'] = 0
         if len(data['bids']) == 0:
             data['bids'].append(self.bid)
             data['t'] = current_time()
             pids.append(pid)
         if pid == self.lid:
             data['cr'] += 1
         player.set_ally_tbox_data(data)
     Game.mail_mgr.send_mails(pids, MAIL_REWARD, rw_mail.title, content,
                              items)
Beispiel #3
0
 def send_reward(self):
     res_tbox = Game.res_mgr.tboxs.get(self.bid)
     if res_tbox is None:
         log.error('ally_team(%s) res_tbox is None, pids(%s)', self.tid, self.pids)
         return
     rw = Game.reward_mgr.get(res_tbox.trid)
     items = rw.reward(None)
     if items is None:
         log.error('ally_team(%s) reward_items is None, pids(%s)', self.tid, self.pids)
         return
     rw_mail = Game.res_mgr.reward_mails.get(RW_MAIL_ATBOX)
     boss = Game.res_mgr.monsters.get(res_tbox.tmid)
     content = rw_mail.content % dict(name = boss.name)
     pids = []
     for pid in self.pids:
         player = Game.rpc_player_mgr.get_rpc_player(pid)
         if player is None:
             player = Player.load_player(pid)
         if player is None:
             continue
         data = player.get_ally_tbox_data()
         if not is_today(data['t']):
             data['bids'] = []
             data['cr'] = 0
         if len(data['bids']) == 0:
             data['bids'].append(self.bid)
             data['t'] = current_time()
             pids.append(pid)
         if pid == self.lid:
             data['cr'] += 1
         player.set_ally_tbox_data(data)
     Game.mail_mgr.send_mails(pids, MAIL_REWARD, rw_mail.title, content, items)
Beispiel #4
0
 def new_copys(self, aid, node):
     """ 新建隐分身数据 """
     res_node = Game.res_mgr.awar_strong_maps.get(node)
     if not res_node:
         return
     res_npc_configs = Game.res_mgr.awar_npc_configs_bykey.get(int(float(res_node.apcid)))
     ally_pids = Game.rpc_ally_mgr.member_pids_by_aid(aid)
     aname = Game.rpc_ally_mgr.ally_name_by_aid(aid)
     copys = []
     num = len(res_npc_configs)
     pid_num = len(ally_pids)
     if pid_num < num:
         ally_pids *= int(math.ceil(float(num) / pid_num))
     for res_npc_config in res_npc_configs:
         pid = ally_pids.pop()
         player = Player.load_player(pid)
         main_role = player.roles.main_role
         o = CopyData.new()
         o.ancid = res_npc_config.id
         o.pid = pid
         o.rid = main_role.data.rid
         o.q = main_role.data.q
         o.name = player.data.name
         o.aname = aname
         o.eqid = player.roles.main_role.body_equip_id
         copys.append(o)
     self.node2copys[node] = copys
Beispiel #5
0
def handle_pay_back(pid, rid, first_reward, coin):
    """ 离线支付回调 """
    from game.player.player import Player
    p = Player.load_player(pid)
    if not p:
        log.error('******pay_back error:player(%s) not found', pid)
        return 0, 0
    rs = p.pay_back(rid, first_reward, coin)
    p.save()
    return rs
Beispiel #6
0
 def gm_add_task(self, pid, tid):
     """ 添加任务 """
     offline = 0
     gp = self.gm_get_by_pid(pid)
     if not gp:  #离线
         offline = 1
         p = Player.load_player(pid)
         gp = GMPlayer(self, p)
     gp.add_task(tid)
     if offline:
         gp.player.save()
Beispiel #7
0
 def gm_copy(self, from_id, to_id):
     """ 完全复制玩家数据 """
     player = self.player._game.player_mgr.get_player(to_id)
     if player is None:
         player = Player.load_player(to_id)
     if not player:
         self.log(u'拷贝失败:(%s)找不到', to_id)
         return
     if player.copy_player(from_id):
         self.log(u'拷贝成功')
     else:
         self.log(u'拷贝失败:(%s)找不到', from_id)
Beispiel #8
0
 def get_pos(self):
     """获得阵型信息"""
     pos = {}
     pos.update(self.position)
     for pid in self.pids:
         player = Game.rpc_player_mgr.get_rpc_player(pid)
         if player is None:
             player = Player.load_player(pid)
         if player is None:
             continue
         rid, eid = player.get_main_role_eid()
         for data in pos.itervalues():
             if data['pid'] == pid and data['rid'] == rid:
                 data['eid'] = eid
     return pos
Beispiel #9
0
 def get_pos(self):
     """获得阵型信息"""
     pos = {}
     pos.update(self.position)
     for pid in self.pids:
         player = Game.rpc_player_mgr.get_rpc_player(pid)
         if player is None:
             player = Player.load_player(pid)
         if player is None:
             continue
         rid, eid = player.get_main_role_eid()
         for data in pos.itervalues():
             if data['pid'] == pid and data['rid'] == rid:
                 data['eid'] = eid
     return pos
Beispiel #10
0
 def get_fight(self):
     """获取战斗所需数据"""
     data = []
     for pid in self.pids:
         player = Game.rpc_player_mgr.get_rpc_player(pid)
         if player is None:
             player = Player.load_player(pid)
         if player is None:
             continue
         rids = []
         for d in self.position.itervalues():
             if d['pid'] == pid:
                 rids.append(d['rid'])
         info = player.team_look(rids)
         data.append(info)
     return data
Beispiel #11
0
 def get_fight(self):
     """获取战斗所需数据"""
     data = []
     for pid in self.pids:
         player = Game.rpc_player_mgr.get_rpc_player(pid)
         if player is None:
             player = Player.load_player(pid)
         if player is None:
             continue
         rids = []
         for d in self.position.itervalues():
             if d['pid'] == pid:
                 rids.append(d['rid'])
         info = player.team_look(rids)
         data.append(info)
     return data
Beispiel #12
0
 def gm_finish_achi(self, t, aid, pids):
     """完成成就 t='day' 每日  t='ever' 永久 aid成就id  pids玩家列表"""
     i = 0
     n = 10
     for pid in pids:
         player = Game.rpc_player_mgr.get_rpc_player(pid)
         if player is None:
             offline = True
             player = Player.load_player(pid)
         if player is None:
             continue
         player.gm_finish_achi(t, aid)
         if offline:
             player.save()
         i += 1
         if i % n == 0:
             sleep(0)
Beispiel #13
0
    def _get_other(self, pid, cache=1):
        """ 获取其它玩家信息 """
        if cache:
            v = self.others.get(pid)
            if v is not None:
                return v
        p = self.get_player(pid)
        if not p:
            p = self._game.rpc_player_mgr.get_rpc_player(pid)
        if not p:#不在线
            p = Player.load_player(pid)
#            p = OtherPlayer.new(pid)
        if not p:
            v = 0, errcode.EC_NOFOUND
        else:
            #先计算出战斗力
            p.init()
            v = 1, p.look()
        self.others.set(pid, v)
        return v
Beispiel #14
0
 def get_bot(self, bid):
     assert is_bot(bid), ValueError('bid(%s) is not bot' % bid)
     try:
         return self.bots[bid]
     except KeyError:
         #从数据库中随机选择某等级区间的玩家作为基础数据
         key = 'arena_bot_pids'
         pids = Game.gcaches.get(key)
         if not pids:
             pids = PlayerData.get_level_pids(arena_level, arena_level + 10)
             Game.gcaches.set(key, pids, timeout=60 * 5)
         pid = random.choice(pids)
         bot = Player.load_player(pid)
         data = bot.data
         data.id = bid
         data.name = Game.res_mgr.get_random_name()
         bot._bot_rival = (data.name, data.rid, data.level,
                           bot.play_attr.CBE)
         self.bots[bid] = bot
         return bot
Beispiel #15
0
    def _get_other(self, pid, cache=1):
        """ 获取其它玩家信息 """
        if cache:
            v = self.others.get(pid)
            if v is not None:
                return v
        p = self.get_player(pid)
        if not p:
            p = self._game.rpc_player_mgr.get_rpc_player(pid)
        if not p:  #不在线
            p = Player.load_player(pid)
#            p = OtherPlayer.new(pid)
        if not p:
            v = 0, errcode.EC_NOFOUND
        else:
            #先计算出战斗力
            p.init()
            v = 1, p.look()
        self.others.set(pid, v)
        return v