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
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)
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)
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
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
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()
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)
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
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
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)
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
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
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