コード例 #1
0
ファイル: loginout.py プロジェクト: chuyiwen/DiabloWorld
def NetConnLost_2(dynamicId):
    '''loginout
    '''
    player = PlayersManager().getPlayerBydynamicId(dynamicId)
    if not player:
        return True
    player.updatePlayerDBInfo()  # 更新角色在数据库中的数据
    PlayersManager().dropPlayer(player)  # 移除角色
    return True
コード例 #2
0
ファイル: initconfig.py プロジェクト: chuyiwen/DiabloWorld
def doWhenStop():
    """服务器关闭前的处理
    """
    for player in PlayersManager()._players.values():  # 遍历所有玩家
        try:
            player.updatePlayerDBInfo()  # 将所有玩家更新到数据库
            PlayersManager().dropPlayer(player)  # 移除玩家
        except Exception as ex:
            log.err(ex) 
コード例 #3
0
ファイル: initconfig.py プロジェクト: wingwu123/Diablo-World
def doWhenStop():
    """服务器关闭前的处理
    """
    for player in PlayersManager()._players.values():
        try:
            player.updatePlayerDBInfo()
            PlayersManager().dropPlayer(player)
        except Exception as ex:
            log.err(ex)
コード例 #4
0
ファイル: loginout.py プロジェクト: zzl133/firefly_study
def NetConnLost_2(dynamicId):
    """loginout
    """
    player = PlayersManager().getPlayerBydynamicId(dynamicId)
    if not player:
        return True
    player.updatePlayerDBInfo()
    PlayersManager().dropPlayer(player)
    return True
コード例 #5
0
def enter_scene_remote(dynamic_id, character_id):
    """进入场景"""
    player = PlayersManager().get_player_by_id(character_id)
    if not player:
        player = PlayerCharacter(character_id, dynamic_id=dynamic_id)
        init_player(player)
        PlayersManager().add_player(player)

    responsedata = GameLoginResponse()
    responsedata.res.result = True
    responsedata.id = player.base_info.id
    responsedata.nickname = player.base_info.base_name

    responsedata.level = player.level.level
    responsedata.exp = player.level.exp

    responsedata.coin = player.finance.coin
    responsedata.gold = player.finance.gold
    responsedata.hero_soul = player.finance.hero_soul
    responsedata.junior_stone = player.finance.junior_stone
    responsedata.middle_stone = player.finance.middle_stone
    responsedata.high_stone = player.finance.high_stone

    responsedata.fine_hero = player.last_pick_time.fine_hero
    responsedata.excellent_hero = player.last_pick_time.excellent_hero
    responsedata.fine_equipment = player.last_pick_time.fine_equipment
    responsedata.excellent_equipment = player.last_pick_time.excellent_equipment

    responsedata.pvp_times = player.pvp_times

    responsedata.combat_power = player.line_up_component.combat_power

    if player.guild.g_id != 0:
        responsedata.guild_id = player.guild.g_id

    responsedata.vip_level = player.vip_component.vip_level
    # 体力
    responsedata.stamina = player.stamina.stamina
    responsedata.get_stamina_times = player.stamina.get_stamina_times
    responsedata.buy_stamina_times = player.stamina.buy_stamina_times
    responsedata.last_gain_stamina_time = player.stamina.last_gain_stamina_time
    responsedata.server_time = int(time.time())
    responsedata.soul_shop_refresh_times = player.soul_shop.refresh_times

    logger.debug("character info:----------------------")
    logger.debug("vip_level:%d", player.vip_component.vip_level)
    logger.debug("stamina:%d", player.stamina.stamina)
    logger.debug("coin:%d", player.finance.coin)
    logger.debug("gold:%d", player.finance.gold)
    logger.debug("hero_soul:%d", player.finance.hero_soul)
    logger.debug("soul_shop_refresh_times:%d", player.soul_shop.refresh_times)

    # GlobalObject().remote['gate']['world'].on_test_remote('43432', 4324)
    return responsedata.SerializeToString()
コード例 #6
0
def GetOnePetInfo(dynamicId,characterId, petId,masterId):
    """获取单个武将的信息"""
    player = PlayersManager().getPlayerByID(characterId)
    if not player:
        return {'result':False,'message':u""}
    toplayer = PlayersManager().getPlayerByID(masterId)
    if not toplayer:
        return {'result':False,'message':u""}
    else:
        pet = toplayer.pet.getPet(petId)
    return {'result':True,'data':pet}
コード例 #7
0
ファイル: pet.py プロジェクト: chuyiwen/DiabloWorld
def GetOnePetInfo(dynamicId,characterId, petId,masterId):
    '''获取单个武将的信息'''
    # 这里的 masterId??? characterId就够了吧
    player = PlayersManager().getPlayerByID(characterId)
    if not player:
        return {'result':False,'message':u""}
    toplayer = PlayersManager().getPlayerByID(masterId)  # 根据角色id获取玩家角色实例
    if not toplayer:
        return {'result':False,'message':u""}
    else:
        pet = toplayer.pet.getPet(petId)
    return {'result':True,'data':pet}
コード例 #8
0
def sendMail(dynamicId, characterId, playerName, title, content):
    '''添加邮件
    @param dynamicId: int 客户端的动态id
    @param characterId: int 角色的id
    @param playerName: str 发送人的名称
    @param content: str 邮件内容
    @param title: str 标题
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': u""}
    if not dbShieldWord.checkIllegalChar(title):
        return {'result': False, 'message': u""}
    if not dbShieldWord.checkIllegalChar(content):
        return {'result': False, 'message': u""}
    if len(title) > 12:
        return {'result': False, 'message': u""}
    toId = dbCharacter.getCharacterIdByNickName(playerName)
    if not toId:
        return {'result': False, 'message': u""}
    if toId[0] == characterId:
        return {'result': False, 'message': u""}
    result = player.mail.sendMail(toId[0], title, content)
    if result:
        return {'result': True, 'message': u""}
    return {'result': False, 'message': u""}
コード例 #9
0
 def wrapper(dynamic_id, *args, **kwargs):
     player = PlayersManager().get_player_by_dynamic_id(dynamic_id)
     if not player or not player.check_dynamic_id:
         return {'result': False, 'result_no': 1, 'message': u''}
     kwargs['player'] = player
     ret = func(*args, **kwargs)
     return ret
コード例 #10
0
    def callTarget(self, targetKey, *args, **kw):
        target = self.getTarget(targetKey)
        if not target:
            logger.error('command %s not Found on service' % str(targetKey))
            print self._targets
            return None
        # if targetKey not in self.unDisplay:
        #     logger.info("call method %s on service[%s]" %
        #                 (target.__name__, self._name))

        t = time.time()
        try:
            dynamic_id = args[0]
            # logger.debug('key and dynamic_id,%s,%s', dynamic_id, targetKey)
            if targetKey != 'enter_scene_remote':
                _player = PlayersManager().get_player_by_dynamic_id(dynamic_id)
                # print 'find player:', _player
                if not _player:
                    return {'result': False, 'result_no': 1, 'message': u''}
                args = args[1:]
                kw['player'] = _player
                response = target(*args, **kw)
            else:
                response = target(*args, **kw)

        except Exception, e:
            logger.exception(e)
            return None
コード例 #11
0
 def GuYongHaoYou(self, tid):
     '''雇用好友
     '''
     characterId = self._owner.baseInfo.id
     if tid == characterId:
         return {'result': False, 'messge': u'不能雇用自己'}
     mcha = McharacterManager().getMCharacterById(tid)
     if not mcha:
         return {'result': False, 'messge': u'好友信息不存在'}
     characterId = self._owner.baseInfo.id
     self.addFriend(characterId, tid)
     if tid in self._guyong:
         return {'result': False, 'messge': u'已经被雇用'}
     from app.game.core.PlayersManager import PlayersManager
     from app.game.core.character.PlayerCharacter import PlayerCharacter
     toplayer = PlayersManager().getPlayerByID(tid)
     if not toplayer:
         toplayer = PlayerCharacter(tid)
     price = toplayer.level.getLevel() * 1000
     if self._owner.finance.getCoin() < price:
         return {'result': False, 'messge': u'资金不足无法雇用'}
     self._guyong.add(tid)  #添加到雇用列表
     characterId = self._owner.baseInfo.id
     self._owner.finance.addCoin(-price)
     dbFriend.UpdateGuYongState(characterId, tid, 1)
     return {'result': True, 'messge': u'雇用成功'}
コード例 #12
0
def SettingMatrix(dynamicId,characterId,petId,chatype,operationType,fromPos,toPos):
    """阵法设置"""
    player = PlayersManager().getPlayerByID(characterId)
    if not player:
        return {'result':False,'message':u""}
    result = player.matrix.updateMatrix(petId,chatype,operationType,fromPos,toPos)
    return result
コード例 #13
0
ファイル: pet.py プロジェクト: East196/diabloworld
def SettingMatrix(dynamicId, characterId, setting):
    '''阵法设置'''
    player = PlayersManager().getPlayerByID(characterId)
    if not player:
        return {'result': False, 'message': u""}
    result = player.matrix.updateMatrix(setting)
    return result
コード例 #14
0
ファイル: enter.py プロジェクト: nolifenameless/firefly
def enterPlace_601(dynamicId, characterId, player):
    '''进入场景'''
    if not player:
        player = PlayerCharacter(characterId, dynamicId=dynamicId)
    PlayersManager().addPlayer(player)

    now = datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S")
    print('time', now)
    result = dbCharacter.setlogintime(characterId)
    print result

    playerinfo = player.formatInfo()
    responsedata = {
        'message': 'hasrole',
        'result': True,
        'data': {
            'cid': playerinfo['id'],
            'name': playerinfo['nickname'],
            'level': playerinfo['level'],
            'viplevel': playerinfo['viplevel'],
            'exp': playerinfo['exp'],
            # 'maxexp':playerinfo['maxExp'],
            'coin': playerinfo['coin'],
            'zuanshi': playerinfo['gold'],
            'tili': playerinfo['energy'],
            'sex': playerinfo['sex']
        }
    }
    print responsedata

    return True
コード例 #15
0
 def doFight(self,characterId):
     '''执行战斗
     @param characterId: int 对手的ID
     '''
     if self.surplustimes<=0:
         return {'result':False,'message':u"竞技场今日战斗次数已满"}
     from app.game.core.character.PlayerCharacter import PlayerCharacter
     from app.game.core.PlayersManager import PlayersManager
     from app.game.core.fight.fight import DoFight
     player = PlayersManager().getPlayerByID(characterId)
     if not player:
         player = PlayerCharacter(characterId)
     nowHp = self._owner.attribute.getHp()
     player.attribute.Restoration()
     self._owner.attribute.Restoration()
     fig = DoFight([self._owner], [player], 1000)
     self.afterFight(fig.battleResult,player)
     self._owner.attribute.setHp(nowHp)
     self.lasttime = datetime.datetime.now()#更新最后战斗的时间
     pid = self._owner.baseInfo.id
     props = {'lasttime':str(self.lasttime)}
     dbarena.updateCharacterArenaInfo(pid, props)
     setData = {'coin':0,'exp':0,'star':0,
                'item':[],'huoli':0}
     return {'result':True,'data':{'fight':fig,'setData':setData}}
コード例 #16
0
def GetPetMatrixList(dynamicId,characterId):
    """获取阵法设置"""
    player = PlayersManager().getPlayerByID(characterId)
    if not player:
        return {'result':False,'message':u""}
    data = player.matrix.getMatrixListSetting()
    return {'result':True,'data':data}
コード例 #17
0
def getItemsInEquipSlotNew(dynamicId, characterId):
    '''获取角色的装备栏信息
    @param dynamicId: int 客户端的id
    @param characterId: int 角色的id
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': ""}
    equipmentList = player.pack.getEquipmentSlotItemList()
    keys_copy = dict(equipmentList)
    equipmentList_copy = []
    for position in range(1, 7):
        item = keys_copy.get(position, None)
        if item:
            _item = {}
            _item['itemid'] = item.baseInfo.id
            _item['icon'] = item.baseInfo.getItemTemplateInfo().get('icon', 0)
            _item['tempid'] = item.baseInfo.getItemTemplateId()
            _item['exp'] = item.exp
            iteminfo = {'pos': position, 'item': _item}
            equipmentList_copy.append(iteminfo)
    playerInfo = player.formatInfoForWeiXin()
    data = {}
    data['equip'] = equipmentList_copy
    data['attack'] = playerInfo['attack']
    data['fangyu'] = playerInfo['fangyu']
    data['minjie'] = playerInfo['minjie']
    return {'result': True, 'message': u'', 'data': data}
コード例 #18
0
def dailytaskreward(characterId, dynamicId, dtaskId):
    '''日常任务奖励'''
    player = PlayersManager().getPlayerByID(characterId)
    taskinfo = dbTask.getpointedDailyTaskInfo(characterId, dtaskId)
    print taskinfo
    rewardlist = {}
    if taskinfo[0]['ifachieved'] == 1:
        if dtaskId == 100001:
            #在线30min
            rewardlist.update({"Gold": 10})
            rewardlist.update({"Coin": 10000})
            RewardCleanOut(dynamicId, characterId, rewardlist)
            resutl = dbTask.setDailyTaskrInfo(characterId, 100001, 1)
            result = RewardCleanOut(dynamicId, characterId, rewardlist)
            return {'message': resutl}

        if dtaskId == 100010:
            #强化一次装备
            rewardlist.update({"stone": 2})
            RewardCleanOut(dynamicId, characterId, rewardlist)
            i = 1
            resutl = dbTask.setDailyTaskrInfo(characterId, 100010, int(i))
            result = RewardCleanOut(dynamicId, characterId, rewardlist)
            return {'message': resutl}
        return False
コード例 #19
0
ファイル: packageInfo.py プロジェクト: nolifenameless/firefly
def getItemsInEquipSlotNew(dynamicId, characterId):
    '''获取角色的装备栏信息
    @param dynamicId: int 客户端的id
    @param characterId: int 角色的id
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': ""}
    equipmentList = player.pack.getEquipmentSlotItemList()
    keys_copy = dict(equipmentList)
    equipmentList_copy = []
    for position in range(0, 8):
        item = keys_copy.get(position, None)
        if item:
            _item = {}
            _item['id'] = item.baseInfo.id
            _item['strengthen'] = dbItems.getItem(
                characterId, item.baseInfo.id)[0]['strengthen']
            _item['tempid'] = item.baseInfo.getItemTemplateId()
            #_item['pos'] = position
            #_item['item'] = _item
            #_item['stacks'] = item.pack.getStack
            iteminfo = {'pos': position, 'item': _item}
            equipmentList_copy.append(iteminfo)
    #playerInfo = player.formatInfoForWeiXin()
    #data = {}
    #data['equip'] = equipmentList_copy
    #data['attack'] = playerInfo['attack']
    #data['fangyu'] = playerInfo['fangyu']
    #data['blood'] = playerInfo['blood']
    return {'result': True, 'message': u'', 'data': equipmentList_copy}
コード例 #20
0
ファイル: compound.py プロジェクト: wingwu123/Diablo-World
def GetCompoundItem(dynamicId, characterId, tempid):
    '''获取当前碎片能合成的物品的信息
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': u""}
    suipianinfo = dbItems.all_ItemTemplate.get(tempid)
    if not suipianinfo:
        return {'result': False, 'message': u"碎片信息不存在"}
    newtempid = suipianinfo.get('compound', 0)
    newiteminfo = dbItems.all_ItemTemplate.get(newtempid)
    if not newiteminfo:
        return {'result': False, 'message': u"该物品不能合成"}
    response = {}
    info = {}
    info['itemid'] = 0
    info['icon'] = newiteminfo['icon']
    info['itemname'] = newiteminfo['name']
    info['itemdesc'] = newiteminfo['description']
    info['tempid'] = newiteminfo['id']
    info['qlevel'] = 0
    info['attack'] = newiteminfo['basePhysicalAttack']
    info['fangyu'] = newiteminfo['basePhysicalDefense']
    info['minjie'] = newiteminfo['baseSpeedAdditional']
    info['tili'] = newiteminfo['baseHpAdditional']
    info['price'] = newiteminfo['buyingRateCoin']
    info['stack'] = 1
    info['qh'] = 1 if newiteminfo['bodyType'] > 0 else 0
    response['hcprice'] = suipianinfo.get('comprice', 0)
    response['iteminfo'] = info
    return {'result': True, 'message': u"", 'data': response}
コード例 #21
0
def GetPetListInfo(dynamicId,characterId):
    """获取角色的武将列表信息"""
    player = PlayersManager().getPlayerByID(characterId)
    if not player:
        return {'result':False,'message':u""}
    petList = player.pet.getCharacterPetListInfo()
    return {'result':True,'data':petList}
コード例 #22
0
ファイル: roleinfo.py プロジェクト: East196/diabloworld
def roleInfo(dynamicId, characterId):
    '''获取角色的状态栏信息
    @param userId: int 用户id
    @param characterId: 角色的id 
    '''
    player = PlayersManager().getPlayerBydynamicId(dynamicId)
    if dynamicId != player.getDynamicId():
        return {'result': False, 'message': ""}
    playerinfo = player.formatInfo()
    responsedata = {
        'result': True,
        'message': '',
        'data': {
            'characterId': playerinfo['id'],
            'rolename': playerinfo['nickname'],
            'level': playerinfo['level'],
            'exp': playerinfo['exp'],
            'maxexp': playerinfo['maxExp'],
            'coin': playerinfo['coin'],
            'gold': playerinfo['gold'],
            'tili': playerinfo['maxHp'],
            'tilimax': playerinfo['maxHp'],
            'huoli': playerinfo['energy'],
            'maxhuoli': playerinfo['energy'],
            'profession': playerinfo['profession']
        }
    }
    return responsedata
コード例 #23
0
def sendMail(dynamicId, characterId, playerName, title, content):
    '''添加邮件
    @param dynamicId: int 客户端的动态id
    @param characterId: int 角色的id
    @param playerName: str 发送人的名称
    @param content: str 邮件内容
    @param title: str 标题
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': u""}
    if not dbShieldWord.checkIllegalChar(title):  # 查询 title 是否存在屏蔽词
        return {'result': False, 'message': u""}
    if not dbShieldWord.checkIllegalChar(content):  # 查询 content 是否存在屏蔽词
        return {'result': False, 'message': u""}
    if len(title) > 12:  # 标题长度限制
        return {'result': False, 'message': u""}
    toId = dbCharacter.getCharacterIdByNickName(
        playerName)  # 根据昵称获取 角色(发信人) 的id
    if not toId:
        return {'result': False, 'message': u""}
    if toId[0] == characterId:
        return {'result': False, 'message': u""}
    result = player.mail.sendMail(
        toId[0], title, content)  # 发送邮件(这里是保存到数据库,只有当收信人打开邮箱,才会收到从服务器更新)
    if result:
        return {'result': True, 'message': u""}
    return {'result': False, 'message': u""}
コード例 #24
0
def getPetSkillSetting(dynamicId, characterId, pet_id):
    '''获取伙伴技能设置
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': u""}
    return player.skill.getPetSkillSetting(pet_id)
コード例 #25
0
def getSkillTreeInfo(dynamicId, characterId):
    """获取所有技能信息
    """
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': u""}
    return player.skill.getSkillTreeInfo()
コード例 #26
0
def updateSkillSetting(dynamicId, characterId, pet_id, skill_id, space):
    '''更新技能设置
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': u""}
    return player.skill.equipSkill(pet_id, skill_id, space)
コード例 #27
0
def learnSkill(dynamicId, characterId, skill_id):
    '''学习技能
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': u""}
    return player.skill.learnSkill(skill_id)
コード例 #28
0
def kick_807(data, player):
    """踢人 """
    args = KickRequest()
    args.ParseFromString(data)
    response = GuildCommonResponse()
    p_ids = args.p_ids
    m_g_id = player.guild.g_id
    if player.guild.position != 1:
        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
    for p_id in p_ids:
        for num in range(2, 6):
            p_list1 = p_list.get(num)
            if p_list1 and p_list1.count(p_id) == 1:
                p_list1.remove(p_id)
                p_list.update({num: p_list1})
                guild_obj.p_list = p_list
                guild_obj.p_num -= 1
                guild_obj.save_data()
                character_guild = tb_character_guild.getObjData(p_id)
                info = character_guild.get("info")
                if info.get("g_id") == 0:
                    response.result = False
                    response.message = "此玩家不在公会"
                    return response.SerializeToString()
                data = {
                    'info': {
                        'g_id': 0,
                        'position': 5,
                        'contribution': 0,
                        'all_contribution': 0,
                        'k_num': 0,
                        'worship': 0,
                        'worship_time': 1,
                        'exit_time': time.time()
                    }
                }
                p_guild_data = tb_character_guild.getObj(p_id)
                p_guild_data.update_multi(data)

                # 踢出公会聊天室
                invitee_player = PlayersManager().get_player_by_id(p_id)
                if invitee_player:  # 在线
                    remote_gate.logout_guild_chat_remote(
                        invitee_player.dynamic_id)
                    invitee_player.guild.g_id = 0
                    invitee_player.guild.save_data()
                    remote_gate.push_object_remote(814,
                                                   args.SerializeToString(),
                                                   [invitee_player.dynamic_id])

    response.result = True
    response.message = "踢人成功"
    return response.SerializeToString()
コード例 #29
0
def getLearnedSkills(dynamicId, characterId):
    """获取所有技能信息
    """
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': u""}
    learned_skills = player.skill.getSkills()
    return {"result": True, "data": learned_skills}
コード例 #30
0
ファイル: zhanyi.py プロジェクト: zzl133/firefly_study
def zhangjieFight(dynamicId, characterId, zhangjieid):
    """章节战斗
    """
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': ""}
    fightresult = player.zhanyi.doZhangJie(zhangjieid)
    return fightresult