Exemple #1
0
 def online_add_sitexp(self):
     """ 上线添加打坐经验 """
     if self.online_rs is not None or self.player is None:
         return
     #离线前是否处于打坐状态
     logout_time = self.sit_data.get(SIT_LOGOUT_TIME)
     can_site_time, finish_site_time = self._get_time_exp(logout_time)
     data ={}
     if can_site_time > 0:
         data = {'canSitTime':can_site_time}
         #如打坐时间未超过上线 则继续打坐
         if self.sit_data[SIT_START_TIME]:
             start = self.sit_data[SIT_START_TIME]
         else:
             start = logout_time
         self.sit_data[SIT_START_TIME] = start
     tAddCnt = finish_site_time / self.fetch_exppre_time
     self.online_rs = data
     self._clear_logout_time()
     if not tAddCnt:
         return data
     tAddExp = self._handle_exp(tAddCnt)
     if tAddExp:
         #添加经验
         vip = self.player.data.vip
         res_rate = self.vip_addexp(vip)
         tAddExps = tAddExp + tAddExp * res_rate / 100
         log.debug('player-sit-exp pid = %s, tAddExps = %s', self.player.data.id, tAddExps)
         self.player.add_exp(tAddExps)
         self.sit_data[SIT_EXP] += tAddExps
     return data
Exemple #2
0
 def _loop(self, aFinishSitTime=0):
     """ 按规定时间每一段时间获得一段经验
         aFinishSitTime 为零时表示开始打坐
         不为零 表示已打坐的时间
      """
     tPerTime = self.fetch_exppre_time
     is_online = aFinishSitTime
     while self.is_sit:
         aFinishSitTime += tPerTime
         if aFinishSitTime > self.fetch_time_max:
             self.stop_sit()
             break
         if is_online:
             #上线打坐时算出第一次到达60s剩余的描述
             sleep(tPerTime - aFinishSitTime % tPerTime)
             is_online = False
         else:
             sleep(tPerTime)
             #在线每两分钟的广播
             self._sit_time += 60
             if self._sit_time / 60 % 2 == 0:
                 self.player.pub(MSG_SIT_PER, 2)
         #服务端检测位置是否发生变化
         if self.start_sit_pos and self.start_sit_pos != self.player.data.pos:
             log.debug('start_sit_pos = %s, change_pos = %s', self.start_sit_pos, self.player.data.pos)
             self.stop_sit()
             break
         self.add_sit_exp()
Exemple #3
0
 def load(self):
     """ 加载数据 """
     v = self.player.play_attr.get(PLAYER_ATTR_SIT)
     log.debug('player-login-exp1 pid = %s, exp = %s', self.player.data.id, self.player.data.exp)
     if not v:
         v = self.make_sit_data()
         self.player.play_attr.set(PLAYER_ATTR_SIT, v)
     self.sit_data = v
     self._save_logout_time()
     tResLevelExp = self._get_res_exp(self.player.data.level)
     #vip提速
     self.vip_addexp = self.fetch_res(SIT_ADD_EXP, SIT_ADD_EXP_V)
     if not tResLevelExp or not tResLevelExp.siteExp:
         return
     #提前更新玩家状态
     self._update_player_state()
     #判断离线之前是否处于打坐状态,并且做处理
     #延迟5秒 是因为此模块会抛出消息如果先执行别的模块获得不到消息
     def _delay():
         try:
             self.online_add_sitexp()
         except:
             log.log_except()
     if not self.player.no_game:
         spawn_later(5, _delay)
Exemple #4
0
    def load(self):
        self.d_quality = self._game.setting_mgr.setdefault(GEM_SANDING_QUALITY, GEM_SANDING_QUALITY_V)
        self.d_level = self._game.setting_mgr.setdefault(GEM_SANDING_LEVEL, GEM_SANDING_LEVEL_V)
        self.d_type = self._game.setting_mgr.setdefault(GEM_SANDING_TYPE, GEM_SANDING_TYPE_V)
        self.d_rate = self._game.setting_mgr.setdefault(GEM_UPGRADE_RATE, GEM_UPGRADE_RATE_V)
        self.max_level = int(self._game.setting_mgr.setdefault(GEM_MAX_LEVEL, GEM_MAX_LEVEL_V))
        self.max_free = int(self._game.setting_mgr.setdefault(GEM_MINE_FREE_NUM, GEM_MINE_FREE_NUM_V))
        self.max_coin = int(self._game.setting_mgr.setdefault(GEM_MINE_COIN3_NUM, GEM_MINE_COIN3_NUM_V))
        self.mime_cost = self._game.setting_mgr.setdefault(GEM_MINE_COIN3_COST, GEM_MINE_COIN3_COST_V)
        self.mine_reward = eval(self._game.setting_mgr.setdefault(GEM_MINE_REWARD, GEM_MINE_REWARD_V))
        self.mine_reward_coin_num = int(self._game.setting_mgr.setdefault(GEM_MINE_REWARD_COIN_NUM,
                                                                            GEM_MINE_REWARD_COIN_NUM_V))
        self.mine_vip_level = int(self._game.setting_mgr.setdefault(GEM_MINE_VIP_LEVEL, GEM_MINE_VIP_LEVEL_V))

        self.d_quality = str2dict3(self.d_quality)
        self.d_quality = self.decode_data(self.d_quality)
        self.d_level = str2dict3(self.d_level)
        self.d_level = self.decode_data(self.d_level)
        self.d_type = str2dict3(self.d_type)
        self.d_type = self.decode_data(self.d_type)
        self.d_rate = str2dict3(self.d_rate)
        self.d_rate = self.decode_data(self.d_rate)

        for gem in self._game.res_mgr.gem.itervalues():
            k = (gem.type, gem.quality)
            self.d_gid[k] = gem.id
        log.debug('GemMgr inited')
Exemple #5
0
    def get_random_name(self, sex=None):
        """ 根据性别取名 """
        male = 1
        if not hasattr(self, '_names_'):
            #[<姓区间>, <男名区间>, <女名区间>]
            self._names_ = [[0, 0], [0, 0], [0, 0]]
            keys = self.names.keys()
            keys.sort()
            for k in keys:
                n = self.names[k]
                if n.t == 1:
                    rg = self._names_[0]
                elif n.sex == male:
                    rg = self._names_[1]
                else:
                    rg = self._names_[2]
                if rg[0] == 0 or k < rg[0]:
                    rg[0] = k
                if rg[1] == 0 or k > rg[1]:
                    rg[1] = k
            log.debug('names range:%s', self._names_)

        if sex is None:
            sex = random.choice([1, 2])

        xr = self._names_[0]
        xi = random.randint(xr[0], xr[1])
        mr = self._names_[1] if sex == male else self._names_[2]
        mi = random.randint(mr[0], mr[1])
        return '%s%s' % (self.names[xi].n, self.names[mi].n)
Exemple #6
0
 def _handle_bf_bestbox(self, rs_items):
     """ 兵符任务宝箱开启获得极品装备广播 """
     for rs_item in rs_items:
         if rs_item[IKEY_TYPE] == IT_ITEM_STR and \
             rs_item[IKEY_ID] in DIFF_TITEM_IDS:
             continue
         game = self.player._game
         res_horn = game.res_mgr.hornmsgs.get(HORN_TYPE_BFBOX)
         iid = rs_item[IKEY_ID]
         type = ''
         log.debug('errr------------ %s', rs_item)
         item_type = rs_item[IKEY_TYPE]
         if item_type == IT_EQUIP_STR:
             res_eq = game.res_mgr.equips.get(iid)
             res = game.res_mgr.equip_sets.get(res_eq.sid)
             name = res_eq.name
         elif item_type == IT_FATE_STR:
             type = language.HORN_BFBOX_FATE
             res = game.res_mgr.fates.get(iid)
             name = res.name
         elif item_type == IT_GEM_STR:
             res = game.res_mgr.gem.get(iid)
             name = res.name
         else:
             res = game.res_mgr.items.get(iid)
             name = res.name
         color = '#' + game.item_mgr.get_color(res.quality)
         pc = self.get_player_color(self.player)
         arg = dict(name=self.player.data.name, pcolor=pc, iname=name, color=color)
         part_msg = res_horn.msg % arg
         msg = "%s%s" % (part_msg, type)
         game.rpc_horn_mgr.send(msg)
Exemple #7
0
 def complete(self, player_task, old_exp, old_level):
     """ 兵符任务完成处理 """
     self.completed = True
     #记录
     player_task.player.log_task(self.data.tid, self.data.id)
     super(BFTask, self).complete(player_task, old_exp, old_level)
     player = player_task.player
     player_bftask = player._game.bftask_mgr.init_player_bftask(player)
     bfTaskData = player_bftask.bfTaskData
     if BFTASK_ALREADY_ACCEPT not in bfTaskData.ss:
         log.debug('pid=%d bfTaskData= (%s, %s) tid=%d ttid=%d', player.data.id, bfTaskData.ss, bfTaskData.tids, self.data.id, self.data.tid)
         return
     index = bfTaskData.ss.index(BFTASK_ALREADY_ACCEPT)
     q = bfTaskData.qs[index]
     tExp = int(player_bftask.fetch_bf_exp[q])
     bfTaskData.exp += tExp
     bfTaskData.ss[index] = BFTASK_TYPE_FINISH
     bfTaskData.btid = 0
     if player.data.level > old_level:
         tExpLevel = player._game.res_mgr.exps_by_level.get(old_level+1)
         addExp = tExpLevel.exp - old_exp + player.data.exp
     else:
         addExp = player.data.exp - old_exp
     bfTaskData.exps[index] = addExp
     player.pub(MSG_TASK_FINISH, TT_OFFER)
     player.task.p_attr_task[TASK_BFTASK_FINISH] += 1
Exemple #8
0
 def rc_dayLuckDraw(self, index):
     """ 每日抽奖进行抽奖 """
     log.debug('rc_dayluckDarw == %s' % index)
     resp_f = 'dayLuckDraw'
     rs, data = self.player._game.day_lucky_mgr.day_luck_draw(self.player, index)
     if not rs:
         return pack_msg(resp_f, 0, err=data)
     return pack_msg(resp_f, 1, data=data)
Exemple #9
0
 def player_logout(self, pid):
     """ 玩家退出监听 """
     self.exit_room(pid)
     rs, is_win = self.room_mgr.player_logout(pid)
     log.debug('is--win %s, rs %s pid %s', pid, rs, is_win)
     if rs and is_win:
         self.win_pids.append(pid)
         self.clear_player_data(pid)
Exemple #10
0
 def _on_client_accept(self, sock, addr):
     """ 处理玩家登陆请求 """
     log.debug(u'client发起连接(%s)', addr)
     _rpc = ClientRpc(sock, addr, self)
     _rpc.call_link_rpc = True
     _rpc.start()
     sleep(120)
     _rpc.stop()#该链接只用于登录接口,之后断开
Exemple #11
0
def test_app_store():
    from webapi import app_store
    apple_urls = "['sandbox.itunes.apple.com', None, '/verifyReceipt']"
    #apple_urls = ['buy.itunes.apple.com', 443, '/verifyReceipt']
    store = app_store.AppStore(apple_urls)
    s = 'ewoJInNpZ25hdHVyZSIgPSAiQWoxZk5BSXZyQVZ2cGh0RVFnWVJzd2puaHhSUDdJLzBQZ2s4bUhlRzBYcGtBNHVIek8wb3NlbGYrY3kvRzZ1dGxFd0twVHFkNUR5UlBBWElaT3l2d25jbmEzeENRWGdlYXl4VHBDTU5kUE1iQU5qSksvOGNSMkpOYkdKUm4vb25vbW1wWmhxaHNmNy9oMytTYnZwY1F2dkFCMFdScFhRUmlUeUtqbFpodmwzQ0FBQURWekNDQTFNd2dnSTdvQU1DQVFJQ0NHVVVrVTNaV0FTMU1BMEdDU3FHU0liM0RRRUJCUVVBTUg4eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUtEQXBCY0hCc1pTQkpibU11TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURXpNREVHQTFVRUF3d3FRWEJ3YkdVZ2FWUjFibVZ6SUZOMGIzSmxJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNU1CNFhEVEE1TURZeE5USXlNRFUxTmxvWERURTBNRFl4TkRJeU1EVTFObG93WkRFak1DRUdBMVVFQXd3YVVIVnlZMmhoYzJWU1pXTmxhWEIwUTJWeWRHbG1hV05oZEdVeEd6QVpCZ05WQkFzTUVrRndjR3hsSUdsVWRXNWxjeUJUZEc5eVpURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNclJqRjJjdDRJclNkaVRDaGFJMGc4cHd2L2NtSHM4cC9Sd1YvcnQvOTFYS1ZoTmw0WElCaW1LalFRTmZnSHNEczZ5anUrK0RyS0pFN3VLc3BoTWRkS1lmRkU1ckdYc0FkQkVqQndSSXhleFRldngzSExFRkdBdDFtb0t4NTA5ZGh4dGlJZERnSnYyWWFWczQ5QjB1SnZOZHk2U01xTk5MSHNETHpEUzlvWkhBZ01CQUFHamNqQndNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVOaDNvNHAyQzBnRVl0VEpyRHRkREM1RllRem93RGdZRFZSMFBBUUgvQkFRREFnZUFNQjBHQTFVZERnUVdCQlNwZzRQeUdVakZQaEpYQ0JUTXphTittVjhrOVRBUUJnb3Foa2lHOTJOa0JnVUJCQUlGQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQUVhU2JQanRtTjRDL0lCM1FFcEszMlJ4YWNDRFhkVlhBZVZSZVM1RmFaeGMrdDg4cFFQOTNCaUF4dmRXLzNlVFNNR1k1RmJlQVlMM2V0cVA1Z204d3JGb2pYMGlreVZSU3RRKy9BUTBLRWp0cUIwN2tMczlRVWU4Y3pSOFVHZmRNMUV1bVYvVWd2RGQ0TndOWXhMUU1nNFdUUWZna1FRVnk4R1had1ZIZ2JFL1VDNlk3MDUzcEdYQms1MU5QTTN3b3hoZDNnU1JMdlhqK2xvSHNTdGNURXFlOXBCRHBtRzUrc2s0dHcrR0szR01lRU41LytlMVFUOW5wL0tsMW5qK2FCdzdDMHhzeTBiRm5hQWQxY1NTNnhkb3J5L0NVdk02Z3RLc21uT09kcVRlc2JwMGJzOHNuNldxczBDOWRnY3hSSHVPTVoydG04bnBMVW03YXJnT1N6UT09IjsKCSJwdXJjaGFzZS1pbmZvIiA9ICJld29KSW05eWFXZHBibUZzTFhCMWNtTm9ZWE5sTFdSaGRHVXRjSE4wSWlBOUlDSXlNREV6TFRBMkxURTRJREF3T2pVNE9qRXdJRUZ0WlhKcFkyRXZURzl6WDBGdVoyVnNaWE1pT3dvSkluVnVhWEYxWlMxcFpHVnVkR2xtYVdWeUlpQTlJQ0k0Tmpjd1ptVmpPV0psTTJWbU1qSmlObVUxTURZek9EZ3hNVE0yWTJVeVpqRTBaVFJqTjJKaUlqc0tDU0p2Y21sbmFXNWhiQzEwY21GdWMyRmpkR2x2YmkxcFpDSWdQU0FpTVRBd01EQXdNREEzTnpjeU1EYzNPQ0k3Q2draVluWnljeUlnUFNBaU1TNHdMamdpT3dvSkluUnlZVzV6WVdOMGFXOXVMV2xrSWlBOUlDSXhNREF3TURBd01EYzNOekl3TnpjNElqc0tDU0p4ZFdGdWRHbDBlU0lnUFNBaU1TSTdDZ2tpYjNKcFoybHVZV3d0Y0hWeVkyaGhjMlV0WkdGMFpTMXRjeUlnUFNBaU1UTTNNVFUwTWpJNU1EQXdNQ0k3Q2draWNISnZaSFZqZEMxcFpDSWdQU0FpWTI5dExuWnhkeTU2Wkhwc2RIY3VOakFpT3dvSkltbDBaVzB0YVdRaUlEMGdJalkwTXpZd09EY3dPQ0k3Q2draVltbGtJaUE5SUNKamIyMHVkbkYzTG5wa2VteDBkeUk3Q2draWNIVnlZMmhoYzJVdFpHRjBaUzF0Y3lJZ1BTQWlNVE0zTVRVME1qSTVNREF3TUNJN0Nna2ljSFZ5WTJoaGMyVXRaR0YwWlNJZ1BTQWlNakF4TXkwd05pMHhPQ0F3TnpvMU9Eb3hNQ0JGZEdNdlIwMVVJanNLQ1NKd2RYSmphR0Z6WlMxa1lYUmxMWEJ6ZENJZ1BTQWlNakF4TXkwd05pMHhPQ0F3TURvMU9Eb3hNQ0JCYldWeWFXTmhMMHh2YzE5QmJtZGxiR1Z6SWpzS0NTSnZjbWxuYVc1aGJDMXdkWEpqYUdGelpTMWtZWFJsSWlBOUlDSXlNREV6TFRBMkxURTRJREEzT2pVNE9qRXdJRVYwWXk5SFRWUWlPd3A5IjsKCSJlbnZpcm9ubWVudCIgPSAiU2FuZGJveCI7CgkicG9kIiA9ICIxMDAiOwoJInNpZ25pbmctc3RhdHVzIiA9ICIwIjsKfQ=='
    rs = store.pay(s, 'com.vqw.zdzltw.c60')
    log.debug('app_store:%s', rs)
    assert rs[0]
Exemple #12
0
 def add_player(self, player):
     """ 玩家进入游戏 """
     pid = player.data.id
     rs = Game.rpc_player_mgr.add(self.key, pid, player.data.name, player.data.rid, player.data.uid)
     if not rs:
         return False
     self.players[pid] = player
     log.debug('sub_player_mgr.add_player:%s', pid)
     return True
Exemple #13
0
def _thread(pool):
    while pool.started:
        task = pool.getTask()
        try:
            task()
        except:
            #TODO 添加到log
            log.debug("多线程战报写入错误")
            pass
Exemple #14
0
 def del_player(self, player):
     """ 玩家退出 """
     pid = player.data.id
     if pid not in self.players:
         return
     log.debug('sub_player_mgr.del_player:%s', pid)
     assert self.players[pid] == player, 'player != p'
     self.players.pop(pid)
     Game.rpc_player_mgr.delete(self.key, pid, player.data.uid)
     self.safe_pub(MSG_LOGOUT, player)
Exemple #15
0
 def pub_floor(self, player, floor):
     """ 抛出当前到达的最高层事件 """
     #进入大厅不用广播
     if not floor:
         return
     log.debug('enter----floor-------%s', floor)
     pid = player.data.id
     floor_max = self._enter_floor_max.get(pid)
     if not floor_max or floor_max < floor:
         self._enter_floor_max[pid] = floor
         Game.rpc_horn_mgr.safe_pub(MSG_DEEP_FLOOR, pid, floor)
Exemple #16
0
 def _check_rid_fate(self, rid, fate1, fate2):
     """ 检测玩家是否穿此命格 """
     role = self.roles.get(rid)
     used = 0
     for key, fid in role.iter_fates():
         if fid == fate1.data.id or fid == fate2.data.id:
             used += 1
     if used and used == fate1.data.used + fate2.data.used:
         return True, None
     log.debug('check-rid-fate rid %s, fate1 %s, fate2 %s', rid, fate1.data.id, fate2.data.id)
     return False, errcode.EC_ROLE_WEARED
Exemple #17
0
 def init(self):
     log.debug('------stop-----')
     self.room_mgr = RoomMgr()
     #开战后守龙战 {pid:守龙战1...}
     #self.sky_wars = {}
     #开战后降世战 {pid:降世战1...}
     #self.world_wars = {}
     #降世战组的保存 {组id:组的对象}
     self.groups = {}
     #保存已获胜的玩家
     self.win_pids= []
Exemple #18
0
 def _check(self, boss, check_data, hurt, pid):
     """ 伤害值检测 """
     p_level, join_nums, m_atk = check_data
     boss_def = boss.get_boss_def()
     hurt1 = m_atk * (1 - boss_def * math.sqrt(p_level*10)
         /(boss_def * p_level + p_level * p_level * 180))
     check_hurt = join_nums * 5 * hurt1 * 3
     if check_hurt < hurt:
         log.debug('world_boss_finish - pid %d check_hurt %s, hurt %s, check-data %s', pid, check_hurt, hurt, check_data)
         return False
     return True
Exemple #19
0
 def auto_choose_node(self):
     """ 时间到自动选择路线 """
     n = 0
     while not self.is_choose:
         sleep(1)
         n += 1
         if n > self.fetch_choose_time :
             log.debug('time out !! %s, %s, %s', self.room.pids, self.is_choose, n)
             war_node = self.group.auto_choose(self.war_node)
             self.choose_node(war_node, NODE_TYPE_MONSTER)
             break
Exemple #20
0
 def _process(self, data):
     msgs = self._unpacker.unpack(data)
     if DEBUG_PACK: log.debug('read data:%s, msgs=%s', len(data), msgs)
     for m in msgs:
         tag = m.pop('_tag')
         full_name = m['f']
         func = self._get_handle(full_name)
         if func:
             corelib.spawn(self._call_func, func, tag, m)
         else:
             self.send(self.pack_msg(full_name, 0, err=1, tag=tag))
Exemple #21
0
 def _test_boss(name):
     print 'name --- %s', name
     player = enter(name, host, port)
     player.valid_gm()
     log.debug(u'玩家(%s)进入', name)
     while 1:
         player.chat.chat_send(1, u'(%s)世界测试', player.name)
         sleep(2)
         player.chat.chat_send(2, u'(%s)世界测试', player.name)
         sleep(2)
         player.chat.chat_send(2, u'(%s)世界测试', player.name)
         sleep(2)
Exemple #22
0
 def rc_goodsBuy(self, t, gid):
     """ 购买商品 """
     log.debug('[rc_goodsBuy](%s)(%s, %s)', self.player.data.id, t, gid)
     resp_f = 'goodsBuy'
     rs, data = self.player._game.rpc_vip_mgr.buy_goods(
         t, gid, self.player.data.uid, self.player.data.id)
     if not rs:
         return pack_msg(resp_f, 0, err=data)
     gorder, price, good_id = data
     return pack_msg(resp_f,
                     1,
                     data=dict(gorder=gorder, price=price, gid=good_id))
Exemple #23
0
 def _notice_data(self, l_sec):
     """ 广播数据 包括世界boss剩余血量和排名 """
     #log.debug('(%s)WorldBoss_notice_data %s', self.data.blid, l_sec)
     hp_resp_f = 'bossHp'
     rank_resp_f = 'bossRank'
     hp_time = self.fetch_hp_time
     c = self.fetch_rank_time / hp_time
     sleep(l_sec)
     tmp = 0
     self.is_start = is_win =True
     while not self.gm_stoped:
         sleep(hp_time)
         msg = pack_msg(hp_resp_f, 1, data={'hp':self.boss_hp, 'mhp':self.max_hp})
         Game.rpc_player_mgr.player_send_msg(self.enter_pids, msg)
         #log.debug('world hp enter_pids %s %s', self.boss_hp, self.enter_pids)
         if self.boss_hp <= 0:
             break
         if self.boss_start + self.fetch_world_boss_times < time.time():
             is_win = False
             break
         tmp += 1
         if tmp != c:
             continue
         tmp = 0
         rs, data = self._get_rank()
         #log.debug('world_rank %s', data)
         if not rs:
             continue
         msg = pack_msg(rank_resp_f, 1, data=data)
         Game.rpc_player_mgr.player_send_msg(self.enter_pids, msg)
     self.boss_mgr.w_start_boss = None
     log.debug('is_win------- %s, gm %s, join-player %s', is_win, self.gm_stoped, len(self.pid_hurts))
     if self.gm_stoped:
         is_win = False
     #if is_win:
     #更改为不管怪物是否死都发奖励
     try:
         #发放奖励
         self._reward()
         #vip不参加也发奖励
         self._reward_vip()
     except:
         log.log_except()
     #写入log 记录伤害
     self._log_info()
     #清楚数据
     self._clear_data()
     #记录数据
     self.save_data(is_win)
     if self.boss_mgr.gm_wboss:
         self.boss_mgr.gm_wboss = False
         self.boss_mgr.gm_start = False
         self.gm_stoped = False
Exemple #24
0
 def time_start(self):
     """ 根据当前时间和配置表数据对应开启活动 """
     now_sec = common.current_time() - common.zero_day_time()
     for res_config in self.res_warstart_configs.itervalues():
         notice_time = res_config.stime - res_config.ntime
         if notice_time <= now_sec < res_config.etime:
             self.warstart_config = res_config
             l_sec = now_sec - res_config.stime
             spawn(self._notice, l_sec)
             log.debug('start----- %s, %s', res_config.stime, res_config.type)
             return True
     return False
Exemple #25
0
 def handle_score(self, num, type):
     """ 获取分数 """
     res_awar_scores = Game.res_mgr.awar_world_score_bykeys.get(type)
     l = res_awar_scores.keys()
     l.sort()
     index = bisect.bisect_left(l, num)
     if index >= len(l):
         log.debug('res-err-----------type %s,index %s, l-%s',type, index, l)
         return 0
     key = l[index]
     res_awar_score = res_awar_scores[key]
     return res_awar_score.score
Exemple #26
0
 def auto_choose_node(self):
     """ 时间到自动选择路线 """
     n = 0
     while not self.is_choose:
         sleep(1)
         n += 1
         if n > self.fetch_choose_time:
             log.debug('time out !! %s, %s, %s', self.room.pids,
                       self.is_choose, n)
             war_node = self.group.auto_choose(self.war_node)
             self.choose_node(war_node, NODE_TYPE_MONSTER)
             break
Exemple #27
0
 def loop_connon(self):
     """ 处理打炮 """
     if not self.connon2data or self.war_mgr.war_data.war_end:
         return
     log.debug('loop_connon----------- %s', self.connon2data)
     now = common.current_time()
     hurt_pids = []
     for index, (pid, use_time) in self.connon2data.items():
         if now < use_time + self.ctime:
             continue
         hurt_pids.append(pid)
         self.connon2data.pop(index)
     return hurt_pids
Exemple #28
0
 def rc_awarGetBox(self):
     """ 获取宝箱 """
     resp_f = 'awarGetBox'
     pid = self.player.data.id
     log.debug('rc_awarGetBox --pid %s', pid)
     rs, data, war_type = self.player._game.rpc_awar_mgr.get_box(pid)
     log.debug('rc_awarGetBox -- %s', data)
     if rs is False:
         return pack_msg(resp_f, 0, err=data)
     rs, data = self.reward(data, war_type=war_type)
     if rs:
         return pack_msg(resp_f, 1, data=data)
     return pack_msg(resp_f, 0, err=data)
Exemple #29
0
 def gm_kill_monsters(self, pid):
     """ 秒杀制定玩家该战场出现的怪物 """
     if not self.war_data.show_npcids:
         return False, None
     log.debug('gm---kill pid-%s, npcids-%s', pid, self.war_data.show_npcids)
     kill_npcids = self.war_data.show_npcids[:]
     for npcid in kill_npcids:
         log.debug('npcid---- %s', npcid)
         if npcid == self.war_data.b_npcid:
             continue
         self.war_monster_start(pid, npcid)
         self.war_monster_end(pid, npcid, 1, 0)
     return True, None
Exemple #30
0
 def send_msg(self, resp_f, data, remove_pid=0, send_pids=None):
     """ 主动发给客户端的数据 """
     msg = pack_msg(resp_f, 1, data=data)
     if not send_pids:
         if self.war_data:
             send_pids = self.war_data.war_pids[:]
         else:
             send_pids = self.room.pids[:]
         if remove_pid and remove_pid in send_pids:
             send_pids.remove(remove_pid)
     if send_pids:
         log.debug('broad-- pids-%s, resp_f-%s, data- %s', send_pids, resp_f, msg)
         Game.rpc_player_mgr.player_send_msg(send_pids, msg)
Exemple #31
0
 def time_start(self):
     """ 根据当前时间和配置表数据对应开启活动 """
     now_sec = common.current_time() - common.zero_day_time()
     for res_config in self.res_warstart_configs.itervalues():
         notice_time = res_config.stime - res_config.ntime
         if notice_time <= now_sec < res_config.etime:
             self.warstart_config = res_config
             l_sec = now_sec - res_config.stime
             spawn(self._notice, l_sec)
             log.debug('start----- %s, %s', res_config.stime,
                       res_config.type)
             return True
     return False
Exemple #32
0
 def handle_score(self, num, type):
     """ 获取分数 """
     res_awar_scores = Game.res_mgr.awar_world_score_bykeys.get(type)
     l = res_awar_scores.keys()
     l.sort()
     index = bisect.bisect_left(l, num)
     if index >= len(l):
         log.debug('res-err-----------type %s,index %s, l-%s', type, index,
                   l)
         return 0
     key = l[index]
     res_awar_score = res_awar_scores[key]
     return res_awar_score.score
Exemple #33
0
 def rc_awarSkyInvite(self, msg):
     """ 守龙战邀请同盟加入战斗 """
     from game.mgr.chat import CT_ALLY
     resp_f = 'awarSkyInvite'
     pid = self.player.data.id
     log.debug('rc_awarSkyInvite --pid %s, %s', pid, msg)
     aid = self.player._game.rpc_ally_mgr.get_aid_by_pid(pid)
     if not aid:
         pack_msg(resp_f, 0, err=errcode.EC_PLAYER_NO)
     msg = PlayerAllyHandler.WAR_SKY_HEAD + msg
     rs, data = self.player._game.chat_mgr.chat_send(
         self.player, CT_ALLY, msg)
     return pack_msg(resp_f, 1)
Exemple #34
0
 def loop_connon(self):
     """ 处理打炮 """
     if not self.connon2data or self.war_mgr.war_data.war_end:
         return
     log.debug('loop_connon----------- %s', self.connon2data)
     now = common.current_time()
     hurt_pids = []
     for index, (pid, use_time) in self.connon2data.items():
         if now < use_time + self.ctime:
             continue
         hurt_pids.append(pid)
         self.connon2data.pop(index)
     return hurt_pids
Exemple #35
0
 def _check(self, boss, check_data, hurt, pid):
     """ 伤害值检测 """
     p_level, join_nums, m_atk = check_data
     boss_def = boss.get_boss_def()
     hurt1 = m_atk * (1 - boss_def * math.sqrt(p_level * 10) /
                      (boss_def * p_level + p_level * p_level * 180))
     check_hurt = join_nums * 5 * hurt1 * 3
     if check_hurt < hurt:
         log.debug(
             'world_boss_finish - pid %d check_hurt %s, hurt %s, check-data %s',
             pid, check_hurt, hurt, check_data)
         return False
     return True
Exemple #36
0
 def one_finish(self, pid, name, hurt):
     """ 单场boss战结束 """
     if self.boss_hp <= 0:
         return False, EC_BOSS_FINISH
     now = int(time.time())
     #防范短时间内多次提交
     finish_time = self.finish_time.get(pid)
     if finish_time and now - finish_time < self.fetch_boss_safetimes:
         return False, EC_BOSS_CD
     max_hp = self._get_max_hp()
     rhurt = hurt / float(max_hp) * 100
     if rhurt >= 5:
         log.debug('world--boss---(pid, one_hurt) = (%d, %d)', pid, hurt)
     old_boss_hp = self.boss_hp
     self.finish_time[pid] = now
     self.pid_hurt[pid] = hurt
     if self.pid_hurts.has_key(pid):
         self.pid_hurts[pid] += hurt
     else:
         self.pid_hurts.setdefault(pid, hurt)
     #排名
     self._handle_rank(pid, name)
     rs, data = self._get_rank()
     #扣血要在排名数据后
     self.boss_hp -= hurt
     #boss剩余血量的广播
     if not self.aid:
         self.handle_horn(HORN_TYPE_WORLDBOSSHP,
                          pid=pid,
                          pname=name,
                          old_boss_hp=old_boss_hp)
     else:
         self.handle_horn(HORN_TYPE_ALLYBOSSHP,
                          pid=pid,
                          pname=name,
                          old_boss_hp=old_boss_hp,
                          aid=self.aid)
     if self.boss_hp <= 0:
         self.boss_hp = 0
         #世界boss最后一击广播
         if not self.aid:
             self.handle_horn(HORN_TYPE_WORLDBOSSEND, pid=pid, pname=name)
         else:
             self.handle_horn(HORN_TYPE_ALLYBOSSEND,
                              pid=pid,
                              pname=name,
                              aid=self.aid)
     if self.pid_hurts.has_key(pid):
         data.update({'hurt': self.pid_hurts[pid]})
     #Game.rpc_boss_mgr.world_boss_cdend(pid)
     return True, data
Exemple #37
0
 def login(self, user):
     """ 登录 """
     log.debug('player(%s-%s) login, sns(%s)', self.data.id, self.data.name,
               user.sns_type)
     self.logon_time = int(time.time())
     self.log_normal(PL_LOGIN, u=self.data.uid, ip=self._rpc.addr[0])
     self.user = user
     self.save_time = int(time.time())
     self.load()
     if self.is_guide:
         self._init_guide()
     self.logined = True
     self.init()
     self.safe_pub(MSG_LOGON)
Exemple #38
0
 def rc_awarCopyStart(self, ancid):
     """ 击杀影分身开始 """
     resp_f = 'awarCopyStart'
     pid = self.player.data.id
     log.debug('rc_awarCopyStart --pid %s', pid)
     rs, data = self.player._game.rpc_awar_mgr.war_copy_start(pid, ancid)
     if rs is False:
         return pack_msg(resp_f, 0, err=data)
     rpid, pbuff = data
     rs, info = self.player._game.player_mgr.look(rpid)
     if not rs:
         return pack_msg(resp_f, 0, err=info)
     info.update(dict(pbuff=pbuff))
     return pack_msg(resp_f, 1, data=info)
Exemple #39
0
 def send_msg(self, resp_f, data, remove_pid=0, send_pids=None):
     """ 主动发给客户端的数据 """
     msg = pack_msg(resp_f, 1, data=data)
     if not send_pids:
         if self.war_data:
             send_pids = self.war_data.war_pids[:]
         else:
             send_pids = self.room.pids[:]
         if remove_pid and remove_pid in send_pids:
             send_pids.remove(remove_pid)
     if send_pids:
         log.debug('broad-- pids-%s, resp_f-%s, data- %s', send_pids,
                   resp_f, msg)
         Game.rpc_player_mgr.player_send_msg(send_pids, msg)
Exemple #40
0
    def rc_loginSNS(self, t, sid, session, UDID, DT,
            MAC='', DEV='', VER='', **kw):
        """ 平台登录接口 """
        resp_f = 'loginSNS'
        if not self.area_legal():
            return pack_msg(resp_f, 0, err=errcode.EC_LOGIN_AREA_ERR)
        if not self.is_debug_time():
            return pack_msg(resp_f, 0, err=errcode.EC_LOGIN_DEBUG_TIME)

        log.debug(u'平台(%s)用户登录请求:%s, %s, %s, %s, %s, %s, %s, %s',
                t, sid, session, UDID, DT, MAC, DEV, VER, kw)
        if self.count >= self.max_players:
            return pack_msg(resp_f, 0, err=errcode.EC_TEAM_ROLE_FULL)

        if not sid and t not in SNS_LOGINS:#游客登录
            return pack_msg(resp_f, 0, err=errcode.EC_VALUE)
            #u = Game.rpc_store.query_loads(TN_USER, dict(UDID=UDID, name=''))
        else:
            rs, data = self.sns_client.login(t, sid, session)
            if not rs:
                return pack_msg(resp_f, 0, err=data)
            if data:#login返回sid
                sid = data
            u = UserData.user_by_sns(t, sid)
        if not u:
            #不存在自动增加
            u = self._new_user(t, sid, '', UDID, DT, MAC, DEV, VER)
        else:
            u = u[0]
            u = User(adict=u)
            #如果mac地址不同,记录
            if u.data.UDID != UDID or u.data.DT != DT or \
                u.data.DEV != DEV or \
                u.data.MAC != MAC or u.data.VER != VER:
                def _log_mac():
                    if 1: #强制保存更新信息, not u.data.MAC:
                        u.data.UDID = UDID
                        u.data.DT = DT
                        u.data.MAC = MAC
                        u.data.DEV = DEV
                        u.data.VER = VER
                        u.save(Game.rpc_store)
                    else:
                        self.glog(PM_MAC, u=u.data.id,
                                UDID=UDID, MAC=MAC, DEV=DEV, VER=VER)
                spawn(_log_mac)

        params = self._get_login_params(sid, u.data.id, t)
        log.debug(u'loginSNS finish:%s', params)
        return pack_msg(resp_f, 1, data=params)
Exemple #41
0
 def kill_boss(self, pid, name, hurts, aid=0):
     """ 秒杀boss aid=0 世界 aid!=0同盟"""
     if aid:
         boss_id = self.a_bosses.get(aid)
         a_boss = self.bosses.get(boss_id)
         if not a_boss:
             return False
         a_boss.one_finish(pid, name, hurts, is_cd=False)
         return True
     if not self.w_start_boss:
         return True
     rs = self.w_start_boss.one_finish(pid, name, hurts, is_cd=False)
     log.debug('kill_boss=rs----- %s', rs)
     return True
Exemple #42
0
 def gm_kill_monsters(self, pid):
     """ 秒杀制定玩家该战场出现的怪物 """
     if not self.war_data.show_npcids:
         return False, None
     log.debug('gm---kill pid-%s, npcids-%s', pid,
               self.war_data.show_npcids)
     kill_npcids = self.war_data.show_npcids[:]
     for npcid in kill_npcids:
         log.debug('npcid---- %s', npcid)
         if npcid == self.war_data.b_npcid:
             continue
         self.war_monster_start(pid, npcid)
         self.war_monster_end(pid, npcid, 1, 0)
     return True, None
Exemple #43
0
 def _test_one(name):
     tasks.append(name)
     try:
         p = enter(name, host, port)
         log.debug(u'玩家(%s)进入', name)
         p.valid_gm()
         while 1:
             _test(name, p, TESTS[:], func_times)
             #close(p.user)
     except KeyboardInterrupt:
         wait_event.set()
     except:
         log.log_except()
     finally:
         tasks.remove(name)
Exemple #44
0
 def get_scene_key(self, player, map):
     """ 获取场景key,如:
     同盟地图, key=ally_id
     """
     t = map.type
     if t in MAP_ALLYS:#返回同盟id
         key = SCENE_ALLY + str(player.ally_id)
         return key
     if t in MAP_ALLY_WAR:
         room_key = self._game.rpc_awar_mgr.get_roomkey_by_pid(player.data.id)
         log.debug('room_key %s, pid %s', room_key, player.data.id)
         if room_key:
             return "%s%d%s" % (SCENE_ALLY, player.ally_id, room_key)
         print 'player--------',player.ally_id
         return "%s%s" % (SCENE_ALLY, player.ally_id)
Exemple #45
0
    def start_apns(self, pem_data, pem_path, sandbox, **sslargs):
        """ start apns """
        import apns
        if self.apns_started:
            return

        import zlib, base64
        pem_data = zlib.decompress(base64.b64decode(pem_data))
        self.apns_pem = fn = join(pem_path, 'apns.pem')
        log.debug(self.apns_pem)
        with open(fn, 'wb') as f:
            f.write(pem_data)
        self.apns = apns.NotificationService(sandbox=sandbox,
                certfile=fn, **sslargs)
        self.apns.start()
Exemple #46
0
    def _handle_request(self, tag, procId, params):
        """ 消息处理 """
        # log.debug("_handle_request(%s):tag(%d):procId(%d):%s", self.player_id, tag, procId, params)
        fname = params[FIELD_FUNC]
        func = getattr(self.export, '%s%s' % (self.PRE, fname), None)

        if func is None:
            print("======找不到协议=====",fname)
            self._handle_exception(procId, fname, EC_NOFOUND)
            return

        st=time.time()
        try:
            kw = params[FIELD_DATA]
            with self:
                if kw is not None: rs = func(**kw)
                else: rs = func()
            if rs is None:
                log.debug("_handle_resp(%s):tag(%d):procId(%d): ok(%s) data(%s)", self.player_id, tag, procId, 1, rs)
                return
            ok, data = rs
            # log.debug("_handle_resp(%s):tag(%d):procId(%d): ok(%s) data(%s)", self.player_id, tag, procId, ok, data)
            if not ok:
                self._handle_exception(procId, fname, data)
            else:
                if data is None:
                    data = '[]'
                self.resp(procId, fname, RES_OK, data, 0)
        except GreenletExit:
            log.error("[Processer(%s-%s)] stoped. _handle_msg:func(%s)", self.pid, self.player_id, fname)
        except:
            log.log_except("_handle_msg:func(%s) %s", fname, params)
            self._handle_exception(procId, fname, EC_VALUE)
        
        
        et=time.time()

        us=et-st
        if fname not in STATISTICS:
            STATISTICS[fname]={"max":us,"avg":us,"num":1,"tot":us,"n":fname}
        else:
            max=STATISTICS[fname]["max"]
            if us>max:
                max=us
            STATISTICS[fname]["num"]+=1
            STATISTICS[fname]["max"]=max
            STATISTICS[fname]["avg"]=int((STATISTICS[fname]["avg"]+us)/2)
            STATISTICS[fname]["tot"]=STATISTICS[fname]["num"]*STATISTICS[fname]["avg"]
Exemple #47
0
    def start_apns(self, pem_data, pem_path, sandbox, **sslargs):
        """ start apns """
        import apns
        if self.apns_started:
            return

        import zlib, base64
        pem_data = zlib.decompress(base64.b64decode(pem_data))
        self.apns_pem = fn = join(pem_path, 'apns.pem')
        log.debug(self.apns_pem)
        with open(fn, 'wb') as f:
            f.write(pem_data)
        self.apns = apns.NotificationService(sandbox=sandbox,
                                             certfile=fn,
                                             **sslargs)
        self.apns.start()
Exemple #48
0
 def new(cls, mgr, aid):
     _, (hard, cfire, ctime,
         gtime) = Game.rpc_ally_mgr.get_boat_init_params(aid)
     #gtime, ctime, cfire, hard = 60, 10, 40, 30000
     #cfire = 500000
     #ctime = 4
     log.debug('--------- %s, %s, %s, %s', gtime, ctime, cfire, hard)
     o = cls()
     o.war_mgr = mgr
     o.cannon = mgr.fetch_mcannon
     o.gtime = gtime
     o.ctime = ctime
     o.cfire = cfire
     o.hard = hard
     o.mhard = hard
     return o
Exemple #49
0
 def get_scene_key(self, player, map):
     """ 获取场景key,如:
     同盟地图, key=ally_id
     """
     t = map.type
     if t in MAP_ALLYS:  #返回同盟id
         key = SCENE_ALLY + str(player.ally_id)
         return key
     if t in MAP_ALLY_WAR:
         room_key = self._game.rpc_awar_mgr.get_roomkey_by_pid(
             player.data.id)
         log.debug('room_key %s, pid %s', room_key, player.data.id)
         if room_key:
             return "%s%d%s" % (SCENE_ALLY, player.ally_id, room_key)
         print 'player--------', player.ally_id
         return "%s%s" % (SCENE_ALLY, player.ally_id)
Exemple #50
0
    def _remove_logic(self, app, app_exist=True):
        pid, game = self.logics.pop(app, None)
        log.debug('remove_logic:%s, %s', pid, game)
        #self.mgr.apps.pop(app, None)
        #反注册
        try:
            if game:
                Game.unreg_other_game(game.get_addr())
        except:
            log.log_except()

        if app_exist:
            game.stop()
            app.stop()
            app.get_service().stop()
        spawn(self.mgr._del_game, app)
        spawn_later(5, self.mgr._del_subgame, pid, app)
Exemple #51
0
 def rc_awarMosterEnd(self, ancid, isWin, hurts=0):
     """ 击杀怪物结束 """
     resp_f = 'awarMosterEnd'
     pid = self.player.data.id
     log.debug('rc_awarMosterEnd --pid %s, ancid %s, iswin %s', pid, ancid,
               isWin)
     rs, data = self.player._game.rpc_awar_mgr.war_monster_end(
         pid, ancid, isWin, hurts)
     log.debug('rc_awarMosterEnd -- %s', data)
     if not rs:
         return pack_msg(resp_f, 0, err=data)
     if data is None:
         return pack_msg(resp_f, 1)
     rs, data = self.reward(data)
     if rs:
         return pack_msg(resp_f, 1, data=data)
     return pack_msg(resp_f, 0, err=data)
Exemple #52
0
 def new_logic(self):
     """ 新建游戏逻辑进程 """
     log.info(u'新建游戏逻辑进程')
     mgr = self.mgr
     app, pid = mgr._new_subgame(self._get_key())
     name = mgr._app_register(app, new_logic_game)[0]
     game = app.get_proxy(name)
     self.mgr.init_subgame(app)
     game.init()
     game.start()
     self.logics[app] = pid, game
     #注册
     Game.reg_other_game(game, pid)
     log.debug('new_logic:%s, %s', pid, game)
     app.sub_close(self._on_close)
     spawn_later(1, self.mgr._new_game, app, game, pid)
     return app
Exemple #53
0
 def loop_data_cbe(self, cbe_rank):
     """ 战斗力排名数据载入 """
     while 1:
         cbe_fields = [CONST_PID, CONST_CBE]
         cbe_sort_by = [(CONST_CBE, DESCENDING)]
         cbe_list = cbe_rank.query(TN_P_ATTR, cbe_fields, limit=TIMES_NUMS,
             sort_by=cbe_sort_by, rpc=CONST_RPC_STORE)
         player_fields = [CONST_NAME, CONST_LEVEL, CONST_RID]
         cbe_rank.queryByList(cbe_list, CONST_PID, TN_PLAYER, player_fields,
             rpc=CONST_RPC_STORE)
         del_key_list = [CONST_ID]
         cbe_rank.getRet(cbe_list, CONST_PID, del_key_list, type=RANK_CBE)
         sleep(0.1)
         if not cbe_rank.is_next:
             self.player_cbe_data = cbe_rank.data
             log.debug("rank--load--data--cbe")
             break
Exemple #54
0
 def hard_broad(self, book_data=None, boss_data=None):
     """ 广播天舟耐久度 """
     if self.war_mgr.war_data.war_end:
         return
     resp_f = 'awarHardB'
     data = dict(hard=self.hard)
     if book_data:
         data.update(dict(type=HARD_TYPE_BOOK, mhard=self.mhard))
     if boss_data:
         boss_hurts = boss_data
         desc = self.war_mgr.fetch_boat_desc % dict(hurt=boss_hurts)
         #desc = 'boss 袭击了天舟 天舟失去了 %d 耐久度' % boss_hurts
         data.update(dict(desc=desc, type=HARD_TYPE_BOSS))
     self.war_mgr.send_msg(resp_f, data)
     if self.hard <= 0:
         log.debug('self.hard %s', self.hard)
         self.war_mgr.war_result_borad(ALLY_WAR_FAIL_HARD)
Exemple #55
0
 def save_data(self, is_win):
     """ boss数据的保存 """
     #log.debug('boss--end--is_win %s', is_win)
     self.data.c += 1
     if not is_win:
         self.save(Game.rpc_store, forced=True)
         return
     self.data.deads += 1
     res_boss_level = Game.res_mgr.boss_level.get(self.data.blid)
     key = (res_boss_level.mid, res_boss_level.level + 1)
     res_boss_level_up = Game.res_mgr.boss_level_by_midlevel.get(key)
     log.debug('kill-time %s', common.current_time() - self.boss_start)
     if common.current_time() - self.boss_start < self.fetch_bosskill_time or\
        self.data.deads >= res_boss_level_up.deads:
         self.data.blid = res_boss_level_up.id
         self.data.deads = 0
     self.save(Game.rpc_store, forced=True)
Exemple #56
0
 def start(self, init=False):
     if not self.stoped:
         return
     init_setting()
     if not self.is_start:  #开启自动启动线程
         if self._auto_start_task is None:
             self._auto_start_task = spawn_later(0, self._auto_start)
         return
     log.debug(u'arena_mgr start!')
     spawn(self.lood_save)
     Game.setting_mgr.sub(MSG_RES_RELOAD, self.reload)
     if init:
         self.init()
     else:
         self.load()
     self.arena_reward()
     Game.chat_mgr.sys_send(language.ARENA_START)
     self.stoped = False
Exemple #57
0
 def logout(self):
     """ 登出 """
     log.debug('player(%s-%s) logout', self.data.id, self.data.name)
     self._handler.close_handler()
     self.log_normal(PL_LOGOUT)
     try:
         self._logout()
     except:
         log.log_except(u'player(%s) logout error', self.data.name)
     logout_time = int(time.time())
     self.data.tTotal += logout_time - self.logon_time
     self.data.tLogin = self.logon_time
     self.data.tLogout = int(time.time())
     self.save()
     self._runtimes_exec('logout', lambda obj: obj.logout(self))
     self.logined = False
     self.user.player_logout()
     self.uninit()
Exemple #58
0
 def gm_start_activity(self, war_type, time=300):
     """ gm开启活动 """
     if time > 300:
         time = 300
     self.stop_activity()
     now_sec = common.current_time() - common.zero_day_time()
     for res_warstart in self.res_warstart_configs.itervalues():
         if war_type == res_warstart.type:
             self.warstart_config = copy.copy(res_warstart)
             self.warstart_config.etime = now_sec + 60 * 60
             start_time = now_sec + time
             self.warstart_config.stime = start_time
             log.debug('gm-start----- %s, %s', start_time,
                       res_warstart.type)
             break
     l_sec = self.warstart_config.stime - now_sec
     if l_sec <= self.warstart_config.ntime:
         spawn(self._notice, l_sec)
Exemple #59
0
 def iter_servers(self, sids=None):
     self._init_servers()
     if sids is None:
         sids = self.servers.keys()
     for sid in sids:
         if sid not in self.servers:
             continue
         s = self.servers.get(sid)
         host, port = s.host, s.port
         log.debug('iter_servers, host:%s, port:%s', host, port)
         rpc_client = with_timeout(3,
                                   grpc.get_proxy_by_addr, (host, port - 1),
                                   'rpc_client',
                                   timeout_value=None)
         if not rpc_client:
             continue
         #缓存代理类,保持连接一段时间
         self.rpc_caches.set(sid, rpc_client)
         yield sid, rpc_client