Esempio n. 1
0
def loginToServer_101(dynamicId, request_proto):
    """登陆服务器
    """
    from app.scense.protoFile.login import loginToServer_pb2

    argument = loginToServer_pb2.loginToServerRequest()
    argument.ParseFromString(request_proto)
    response = loginToServer_pb2.loginToServerResponse()

    dynamicId = dynamicId
    username = argument.user
    password = argument.password
    data = login.loginToServer(dynamicId, username, password)
    response.result = data.get("result", False)
    response.message = data.get("message", "")
    if data.get("data", None):
        response.data.len = data["data"].get("len", 0)
        response.data.userId = data["data"].get("userId", 0)
        response.data.defaultId = data["data"].get("defaultId", -1)
        for character in data["data"].get("UserCharacterList", []):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get("id", 0)
            characterInfo.nickname = character.get("nickname", u"")
            characterInfo.level = character.get("level", 1)
            professionId = character.get("profession", 1)
            professionName = loader.getById("profession", professionId, ["name"]).get("name", u"新手")
            characterInfo.profession = professionName
            characterInfo.viptype = character.get("viptype", 1)
    return response.SerializeToString()
Esempio n. 2
0
def activeNewPlayer_102(dynamicId, request_proto):
    """创建角色
    """
    from app.scense.protoFile.login import activeNewPlayer_pb2

    argument = activeNewPlayer_pb2.activeNewPlayerRequest()
    argument.ParseFromString(request_proto)
    response = activeNewPlayer_pb2.activeNewPlayerResponse()

    dynamicId = dynamicId
    userId = argument.userId
    nickName = argument.nickName
    profession = argument.profession
    data = login.activeNewPlayer(dynamicId, userId, nickName, profession)
    response.result = data.get("result", False)
    response.message = data.get("message", "")
    if data.get("data", None):
        response.data.len = data["data"].get("len", 0)
        response.data.userId = userId
        response.data.newCharacterId = data["data"].get("newCharacterId", 0)
        for character in data["data"].get("UserCharacterList", []):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get("id", 0)
            characterInfo.nicName = character.get("nickname", u"")
            characterInfo.level = character.get("level", 1)
            professionId = character.get("profession", 1)
            professionName = loader.getById("profession", professionId, ["name"]).get("name", u"新手")
            characterInfo.profession = professionName
            characterInfo.roletype = character.get("viptype", 1)

    return response.SerializeToString()
Esempio n. 3
0
def deleteRole_104(dynamicId, request_proto):
    '''删除角色'''
    from app.scense.protoFile.login import deleteRole_pb2
    argument = deleteRole_pb2.deleteRoleRequest()
    argument.ParseFromString(request_proto)
    response = deleteRole_pb2.deleteRoleResponse()
    
    
    userId = argument.userId
    characterId = argument.id
    password = argument.password
    data = login.deleteRole(dynamicId, userId, characterId,password)
    
    response.result = data.get('result',False)
    response.message = data.get('message',u'')
    if data.get('data',None):
        response.data.len = len(data.get('data',[]))
        for character in data['data'].get('UserCharacterListInfo',[]):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get('id',0)
            characterInfo.nicName = character.get('nickname',u'')
            characterInfo.level = character.get('level',1)
            professionId = character.get('profession',1)
            professionName = loader.getById('profession',professionId,['name']).get('name',u'新手')
            characterInfo.profession = professionName
            characterInfo.roletype = character.get('viptype',1)
    return response.SerializeToString()
Esempio n. 4
0
def activeNewPlayer_102(dynamicId, request_proto):
    '''创建角色
    '''
    from app.scense.protoFile.login import activeNewPlayer_pb2
    argument = activeNewPlayer_pb2.activeNewPlayerRequest()
    argument.ParseFromString(request_proto)
    response = activeNewPlayer_pb2.activeNewPlayerResponse()

    dynamicId = dynamicId
    userId = argument.userId
    nickName = argument.nickName
    profession = argument.profession
    data = login.activeNewPlayer(dynamicId, userId, nickName, profession)
    response.result = data.get('result', False)
    response.message = data.get('message', '')
    if data.get('data', None):
        response.data.len = data['data'].get('len', 0)
        response.data.userId = userId
        response.data.newCharacterId = data['data'].get('newCharacterId', 0)
        for character in data['data'].get('UserCharacterList', []):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get('id', 0)
            characterInfo.nicName = character.get('nickname', u'')
            characterInfo.level = character.get('level', 1)
            professionId = character.get('profession', 1)
            professionName = loader.getById('profession', professionId,
                                            ['name']).get('name', u'新手')
            characterInfo.profession = professionName
            characterInfo.roletype = character.get('viptype', 1)

    return response.SerializeToString()
Esempio n. 5
0
def deleteRole_104(dynamicId, request_proto):
    """删除角色"""
    from app.scense.protoFile.login import deleteRole_pb2

    argument = deleteRole_pb2.deleteRoleRequest()
    argument.ParseFromString(request_proto)
    response = deleteRole_pb2.deleteRoleResponse()

    userId = argument.userId
    characterId = argument.id
    password = argument.password
    data = login.deleteRole(dynamicId, userId, characterId, password)

    response.result = data.get("result", False)
    response.message = data.get("message", u"")
    if data.get("data", None):
        response.data.len = len(data.get("data", []))
        for character in data["data"].get("UserCharacterListInfo", []):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get("id", 0)
            characterInfo.nicName = character.get("nickname", u"")
            characterInfo.level = character.get("level", 1)
            professionId = character.get("profession", 1)
            professionName = loader.getById("profession", professionId, ["name"]).get("name", u"新手")
            characterInfo.profession = professionName
            characterInfo.roletype = character.get("viptype", 1)
    return response.SerializeToString()
Esempio n. 6
0
def deleteRole_104(dynamicId, request_proto):
    '''删除角色'''
    from app.scense.protoFile.login import deleteRole_pb2
    argument = deleteRole_pb2.deleteRoleRequest()
    argument.ParseFromString(request_proto)
    response = deleteRole_pb2.deleteRoleResponse()

    userId = argument.userId
    characterId = argument.id
    password = argument.password
    data = login.deleteRole(dynamicId, userId, characterId, password)

    response.result = data.get('result', False)
    response.message = data.get('message', u'')
    if data.get('data', None):
        response.data.len = len(data.get('data', []))
        for character in data['data'].get('UserCharacterListInfo', []):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get('id', 0)
            characterInfo.nicName = character.get('nickname', u'')
            characterInfo.level = character.get('level', 1)
            professionId = character.get('profession', 1)
            professionName = loader.getById('profession', professionId,
                                            ['name']).get('name', u'新手')
            characterInfo.profession = professionName
            characterInfo.roletype = character.get('viptype', 1)
    return response.SerializeToString()
Esempio n. 7
0
def loginToServer_101(dynamicId, request_proto):
    '''登陆服务器
    '''
    from app.scense.protoFile.login import loginToServer_pb2
    argument = loginToServer_pb2.loginToServerRequest()
    argument.ParseFromString(request_proto)
    response = loginToServer_pb2.loginToServerResponse()

    dynamicId = dynamicId
    username = argument.user
    password = argument.password
    data = login.loginToServer(dynamicId, username, password)
    response.result = data.get('result', False)
    response.message = data.get('message', '')
    if data.get('data', None):
        response.data.len = data['data'].get('len', 0)
        response.data.userId = data['data'].get('userId', 0)
        response.data.defaultId = data['data'].get('defaultId', -1)
        for character in data['data'].get('UserCharacterList', []):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get('id', 0)
            characterInfo.nickname = character.get('nickname', u'')
            characterInfo.level = character.get('level', 1)
            professionId = character.get('profession', 1)
            professionName = loader.getById('profession', professionId,
                                            ['name']).get('name', u'新手')
            characterInfo.profession = professionName
            characterInfo.viptype = character.get('viptype', 1)
    return response.SerializeToString()
Esempio n. 8
0
def loginToServer_101(dynamicId, request_proto):
    '''登陆服务器
    '''
    from app.scense.protoFile.login import loginToServer_pb2
    argument = loginToServer_pb2.loginToServerRequest()
    argument.ParseFromString(request_proto)
    response = loginToServer_pb2.loginToServerResponse()
    
    dynamicId = dynamicId
    username = argument.user
    password = argument.password
    data = login.loginToServer(dynamicId, username, password)
    response.result = data.get('result',False)
    response.message = data.get('message','')
    if data.get('data',None):
        response.data.len = data['data'].get('len',0)
        response.data.userId = data['data'].get('userId',0)
        response.data.defaultId = data['data'].get('defaultId',-1)
        for character in data['data'].get('UserCharacterList',[]):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get('id',0)
            characterInfo.nickname = character.get('nickname',u'')
            characterInfo.level = character.get('level',1)
            professionId = character.get('profession',1)
            professionName = loader.getById('profession',professionId,['name']).get('name',u'新手')
            characterInfo.profession = professionName
            characterInfo.viptype = character.get('viptype',1)
    return response.SerializeToString()
Esempio n. 9
0
def activeNewPlayer_102(dynamicId, request_proto):
    '''创建角色
    '''
    from app.scense.protoFile.login import activeNewPlayer_pb2
    argument = activeNewPlayer_pb2.activeNewPlayerRequest()
    argument.ParseFromString(request_proto)
    response = activeNewPlayer_pb2.activeNewPlayerResponse()
    
    dynamicId = dynamicId
    userId = argument.userId
    nickName = argument.nickName
    profession = argument.profession
    data = login.activeNewPlayer(dynamicId, userId, nickName, profession)
    response.result = data.get('result',False)
    response.message = data.get('message','')
    if data.get('data',None):
        response.data.len = data['data'].get('len',0)
        response.data.userId = userId
        response.data.newCharacterId = data['data'].get('newCharacterId',0)
        for character in data['data'].get('UserCharacterList',[]):
            characterInfo = response.data.character.add()
            characterInfo.id = character.get('id',0)
            characterInfo.nicName = character.get('nickname',u'')
            characterInfo.level = character.get('level',1)
            professionId = character.get('profession',1)
            professionName = loader.getById('profession',professionId,['name']).get('name',u'新手')
            characterInfo.profession = professionName
            characterInfo.roletype = character.get('viptype',1)
            
    return response.SerializeToString()
    def getShopItemExtraAttr(self, shopInfo):
        '''得到商店物品附加属性'''
        characterLevel = self._owner.level.getLevel()

        cursor = connection.cursor()
        sql = "select parameterMin,parameterMax from `shop_extra_attr_level_config` where type=%d and characterLevel=%d"\
            % (shopInfo['extraAttrLevelConfigType'], characterLevel)
        cursor.execute(sql)
        result = cursor.fetchone()
        min = result['parameterMin']
        max = result['parameterMax']
        r = random.randint(min, max)
        cursor.execute("select level from `exattribute_level` where value>=%d" % r)
        level = cursor.fetchone()['level']
        cursor.execute("select * from `extra_attributes` where level=%d" % level)
        tempAttributeList = cursor.fetchall()
        r1 = random.randint(0, len(tempAttributeList) - 1)
        attributeInfo = tempAttributeList[r1]

        attributeInfo['attributeEffects'] = []
        if attributeInfo['effects'] <> '-1' or attributeInfo['effects'] <> u'-1':
            effects = attributeInfo['effects'].split(';')
            for effect in effects:
                effect = int(effect)
                description = loader.getById('effect', effect, ['description'])['description']
                attributeInfo['attributeEffects'].append(description)
        else:
            script = attributeInfo['script']
            script = util.parseScript(script)
            attributeInfo['attributeEffects'].append(script)

        return attributeInfo
 def getShopItemPrice(self, itemTemplateId, extraAttribute):
     '''获取商店物品的购买价格'''
     #all_ItemTemplate = dbaccess.all_ItemTemplate.values()
     sellPrice = dbaccess.all_ItemTemplate[itemTemplateId]['buyingRateCoin']#loader.getById('item_template', itemTemplateId, ['buyingRateCoin'])['buyingRateCoin']
     extraAttributes = eval('[' + extraAttribute + ']')
     for extraAttrId in extraAttributes:
         extraAttrId = int(extraAttrId)
         isValidExtraAttrID = loader.getById('extra_attributes', extraAttrId, ['id'])
         if((extraAttrId != -1) and isValidExtraAttrID):
             eAttribute = loader.getById('extra_attributes', extraAttrId, ['level'])
             cursor = connection.cursor()
             cursor.execute("select price from exattribute_level where level=%d" % eAttribute['level'])
             value = cursor.fetchone()
             cursor.close()
             sellPrice += int(value['price'])
     return sellPrice
Esempio n. 12
0
 def __init__(self,id = -1,name='',templateId= 0,x = 300,y = 400):
     '''初始化怪物类
     '''
     Character.__init__(self, id, name)
     self.CharacterType = 2
     self.templateId = templateId
     self.baseInfo.setPosition((x,y))
     data = loader.getById('npc',templateId, '*')
     self.formatInfo = {}
     if data:
         self.initialise(data)
Esempio n. 13
0
 def __init__(self, id=-1, name='', templateId=0, x=300, y=400):
     '''初始化怪物类
     '''
     Character.__init__(self, id, name)
     self.CharacterType = 2
     self.templateId = templateId
     self.baseInfo.setPosition((x, y))
     data = loader.getById('npc', templateId, '*')
     self.formatInfo = {}
     if data:
         self.initialise(data)
 def getShopItemPrice(self, itemTemplateId, extraAttribute):
     '''获取商店物品的购买价格'''
     #all_ItemTemplate = dbaccess.all_ItemTemplate.values()
     sellPrice = dbaccess.all_ItemTemplate[itemTemplateId][
         'buyingRateCoin']  #loader.getById('item_template', itemTemplateId, ['buyingRateCoin'])['buyingRateCoin']
     extraAttributes = eval('[' + extraAttribute + ']')
     for extraAttrId in extraAttributes:
         extraAttrId = int(extraAttrId)
         isValidExtraAttrID = loader.getById('extra_attributes',
                                             extraAttrId, ['id'])
         if ((extraAttrId != -1) and isValidExtraAttrID):
             eAttribute = loader.getById('extra_attributes', extraAttrId,
                                         ['level'])
             cursor = connection.cursor()
             cursor.execute(
                 "select price from exattribute_level where level=%d" %
                 eAttribute['level'])
             value = cursor.fetchone()
             cursor.close()
             sellPrice += int(value['price'])
     return sellPrice
Esempio n. 15
0
    def immediateFinishPractice(self, payType, payNum):
        '''立即完成修炼'''
        id = self._owner.baseInfo.id
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        exp = self._owner.level.getExp()
        if payType == 'gold':
            gold -= payNum
        else:
            coupon -= payNum
        if gold < 0:
            return {'result': False, 'reason': u'您的黄金不够'}
        if coupon < 0:
            return {'result': False, 'reason': u'您的礼券不够'}
        record = dbaccess.getPlayerPracticeRecord(id)
        countHit = record[3]
        totalExp = record[3] * record[6]
        exp += totalExp
        monster = loader.getById('npc', record[2], '*')
        monsterName = monster['name']

        for i in range(0, countHit):
            self._owner.quest.onSuccessKillOneMonster(record[2], 'battle')
#            break
#            if item:
#                self._owner.pack.putOneItemIntoTempPackage(item,1)
        self.placePracticeItems(countHit, monster)

        self._owner.level.setExp(exp)
        if not self._owner.level.updateLevel():
            dbaccess.updatePlayerInfo(id, {
                'status': 1,
                'gold': gold,
                'coupon': coupon,
                'exp': exp
            })
        else:
            dbaccess.updatePlayerInfo(id, {
                'status': 1,
                'gold': gold,
                'coupon': coupon
            })

        self._owner.baseInfo.setStatus(1)
        self._owner.finance.setGold(gold)
        self._owner.finance.setCoupon(coupon)

        return {'result':True, 'data':{'monsterName':monsterName, 'totalExp':totalExp, 'countHit':countHit, \
                                      'gold':gold, 'coupon':coupon, 'status':self._owner.baseInfo.getStatus(), \
                                      'level':self._owner.level.getLevel()}}
    def getPracticeInfo(self):
        '''获取玩家修炼的信息'''
        id = self._owner.baseInfo.id

        record = dbaccess.getPlayerPracticeRecord(id)
        monsterName = loader.getById('npc', record[2], ['name'])
        if not monsterName:
            return {'result':False, 'reason':u'没有找到修炼的怪物'}
        monsterName = monsterName['name']
        countHit = record[3]
        finishTime = record[5]
        seconds = (finishTime - datetime.datetime.now()).seconds
        singleMonsterExpBonus = record[6]
        totalExp = singleMonsterExpBonus * countHit

        return {'countHit':countHit, 'seconds':seconds, 'totalExp':totalExp, 'monsterName':monsterName}
    def immediateFinishPractice(self, payType, payNum):
        '''立即完成修炼'''
        id = self._owner.baseInfo.id
        gold = self._owner.finance.getGold()
        coupon = self._owner.finance.getCoupon()
        exp = self._owner.level.getExp()
        if payType == 'gold':
            gold -= payNum
        else:
            coupon -= payNum
        if gold < 0 :
            return {'result':False, 'reason':u'您的黄金不够'}
        if coupon < 0:
            return {'result':False, 'reason':u'您的礼券不够'}
        record = dbaccess.getPlayerPracticeRecord(id)
        countHit = record[3]
        totalExp = record[3] * record[6]
        exp += totalExp
        monster = loader.getById('npc', record[2], '*')
        monsterName = monster['name']

        for i in range(0,countHit):
            self._owner.quest.onSuccessKillOneMonster(record[2],'battle')
#            break
#            if item:
#                self._owner.pack.putOneItemIntoTempPackage(item,1)
        self.placePracticeItems(countHit, monster)

        self._owner.level.setExp(exp)
        if not self._owner.level.updateLevel():
            dbaccess.updatePlayerInfo(id, {'status':1, 'gold':gold, 'coupon':coupon, 'exp':exp})
        else:
            dbaccess.updatePlayerInfo(id, {'status':1, 'gold':gold, 'coupon':coupon})

        self._owner.baseInfo.setStatus(1)
        self._owner.finance.setGold(gold)
        self._owner.finance.setCoupon(coupon)

        return {'result':True, 'data':{'monsterName':monsterName, 'totalExp':totalExp, 'countHit':countHit, \
                                      'gold':gold, 'coupon':coupon, 'status':self._owner.baseInfo.getStatus(), \
                                      'level':self._owner.level.getLevel()}}
Esempio n. 18
0
    def getPracticeInfo(self):
        '''获取玩家修炼的信息'''
        id = self._owner.baseInfo.id

        record = dbaccess.getPlayerPracticeRecord(id)
        monsterName = loader.getById('npc', record[2], ['name'])
        if not monsterName:
            return {'result': False, 'reason': u'没有找到修炼的怪物'}
        monsterName = monsterName['name']
        countHit = record[3]
        finishTime = record[5]
        seconds = (finishTime - datetime.datetime.now()).seconds
        singleMonsterExpBonus = record[6]
        totalExp = singleMonsterExpBonus * countHit

        return {
            'countHit': countHit,
            'seconds': seconds,
            'totalExp': totalExp,
            'monsterName': monsterName
        }
    def getSingleMonsterPracticeExp(self, monsterId):
        id = self._owner.baseInfo.id

        monsterInfo = loader.getById('npc', monsterId, ['monsterGroupId', 'levelGroup'])
        if not monsterInfo:
            return False, Lg().g(439)
        levelList = list(monsterInfo['levelGroup'].split(';'))
        groupId = monsterInfo['monsterGroupId']
        tempList = []
        for level in levelList:
            level = int(level)
            tempList.append(level)
        caughtLevel = tempList[0]
        cursor = connection.cursor()
        cursor.execute("select expBonus from `monster_instance` where level=%d and groupId=%d" % (caughtLevel, groupId))
        monsterInstance = cursor.fetchone()
        cursor.close()
        if not monsterInstance:
            return False, Lg().g(439)
        expBonus = monsterInstance['expBonus']
        return True, expBonus,caughtLevel
Esempio n. 20
0
    def doWhenPracticeFinsihed(self, attrs):
        '''当修炼结束时'''
        id = self._owner.baseInfo.id
        practiceRecord = dbaccess.getPlayerPracticeRecord(id)
        monsterId = practiceRecord[2]
        countHit = practiceRecord[3]
        finishTime = practiceRecord[5]
        now = datetime.datetime.now()

        if not finishTime or (finishTime - now).seconds < 0:
            return
        self._owner.level.updateExp(attrs['exp'])
        #        if not self._owner.level.updateLevel():
        #            dbaccess.updatePlayerInfo(id, attrs)
        self._owner.baseInfo.setStatus(1)

        npc = loader.getById('npc', monsterId, '*')
        if npc:
            #            for i in range(0, countHit):
            #                self._owner.quest.onSuccessKillOneMonster(monsterId)

            self.placePracticeItems(countHit, npc)

        practiceFinsihed(id)
    def getShopItemExtraAttr(self, shopInfo):
        '''得到商店物品附加属性'''
        characterLevel = self._owner.level.getLevel()

        cursor = connection.cursor()
        sql = "select parameterMin,parameterMax from `shop_extra_attr_level_config` where type=%d and characterLevel=%d"\
            % (shopInfo['extraAttrLevelConfigType'], characterLevel)
        cursor.execute(sql)
        result = cursor.fetchone()
        min = result['parameterMin']
        max = result['parameterMax']
        r = random.randint(min, max)
        cursor.execute(
            "select level from `exattribute_level` where value>=%d" % r)
        level = cursor.fetchone()['level']
        cursor.execute("select * from `extra_attributes` where level=%d" %
                       level)
        tempAttributeList = cursor.fetchall()
        r1 = random.randint(0, len(tempAttributeList) - 1)
        attributeInfo = tempAttributeList[r1]

        attributeInfo['attributeEffects'] = []
        if attributeInfo['effects'] <> '-1' or attributeInfo[
                'effects'] <> u'-1':
            effects = attributeInfo['effects'].split(';')
            for effect in effects:
                effect = int(effect)
                description = loader.getById('effect', effect,
                                             ['description'])['description']
                attributeInfo['attributeEffects'].append(description)
        else:
            script = attributeInfo['script']
            script = util.parseScript(script)
            attributeInfo['attributeEffects'].append(script)

        return attributeInfo
Esempio n. 22
0
    def getSingleMonsterPracticeExp(self, monsterId):
        id = self._owner.baseInfo.id

        monsterInfo = loader.getById('npc', monsterId,
                                     ['monsterGroupId', 'levelGroup'])
        if not monsterInfo:
            return False, Lg().g(439)
        levelList = list(monsterInfo['levelGroup'].split(';'))
        groupId = monsterInfo['monsterGroupId']
        tempList = []
        for level in levelList:
            level = int(level)
            tempList.append(level)
        caughtLevel = tempList[0]
        cursor = connection.cursor()
        cursor.execute(
            "select expBonus from `monster_instance` where level=%d and groupId=%d"
            % (caughtLevel, groupId))
        monsterInstance = cursor.fetchone()
        cursor.close()
        if not monsterInstance:
            return False, Lg().g(439)
        expBonus = monsterInstance['expBonus']
        return True, expBonus, caughtLevel
Esempio n. 23
0
    def terminatePractice(self):
        '''
                     终止玩家修炼
        '''
        id = self._owner.baseInfo.id
        exp = self._owner.level.getExp()

        record = dbaccess.getPlayerPracticeRecord(id)
        monsterId = record[2]
        startTime = record[4]
        finishTime = record[5]
        singleExpBonus = record[6]
        now = datetime.datetime.now()
        currentCountHit = int((now - startTime).seconds / (60 * 3))
        int((finishTime - startTime).seconds / 60)
        currentExp = currentCountHit * singleExpBonus
        monster = loader.getById('npc', monsterId, '*')
        if not monster:
            return {'result': False, 'message': Lg().g(441)}

        for i in range(0, currentCountHit):
            pass
#            self._owner.quest.onSuccessKillOneMonster(monsterId)
#            break
#        if item:
#            self._owner.pack.putOneItemIntoTempPackage(item, currentCountHit)
#            pushMessage(str(self._owner.baseInfo.id),'newTempPackage')
#        self.placePracticeItems(currentCountHit, monster)

        monsterName = monster['name']
        self._owner.level.setExp(exp + currentExp)
        dbaccess.updatePlayerInfo(id, {'status': 1})
        self._owner.baseInfo.setStatus(1)
        return {'result':True, 'data':{'monsterName':monsterName, 'currentExp':currentExp, \
                                      'currentCountHit':currentCountHit, 'status':self._owner.baseInfo.getStatus(), \
                                      'level':self._owner.level.getLevel()}}
    def getItemByDropping(self, dropConfigId):
        '''
                     根据掉落配置得到物品
        @param dropConfigId: 掉落配置id
        '''
        dropConfig = loader.getById('drop_config', dropConfigId, '*')
        if not dropConfig or len(dropConfig.items()) == 0:
            log.err( _why= 'no item for the dropconfig dropConfigId(%d) characterId(%d)'%(dropConfigId,self._owner.baseInfo.id))
            return None
        itemTemplate = self.getDropItemTemplate(dropConfig)
#        itemTemplate = dbaccess.all_ItemTemplate[1]
        if itemTemplate:
            isBound = 0
            if itemTemplate['bindType']==1:
                isBound = 1
            itemTemplate['id'] = 27
            dropItem = Item(itemTemplateId =itemTemplate['id'])
            dropItem.attribute.setIsBound(isBound)
#            itemId = dropItem.InsertItemIntoDB(characterId = self._owner.baseInfo.id)
#            dropItem.baseInfo.setId(itemId)
            
            return dropItem
        else:
            return None
    def doWhenPracticeFinsihed(self, attrs):
        '''当修炼结束时'''
        id = self._owner.baseInfo.id
        practiceRecord = dbaccess.getPlayerPracticeRecord(id)
        monsterId = practiceRecord[2]
        countHit = practiceRecord[3]
        finishTime = practiceRecord[5]
        now = datetime.datetime.now()

        if not finishTime or (finishTime - now).seconds < 0:
            return
        self._owner.level.updateExp(attrs['exp'])
#        if not self._owner.level.updateLevel():
#            dbaccess.updatePlayerInfo(id, attrs)
        self._owner.baseInfo.setStatus(1)

        npc = loader.getById('npc', monsterId, '*')
        if npc:
#            for i in range(0, countHit):
#                self._owner.quest.onSuccessKillOneMonster(monsterId)
            
            self.placePracticeItems(countHit, npc)

        practiceFinsihed(id)
    def terminatePractice(self):
        '''
                     终止玩家修炼
        '''
        id = self._owner.baseInfo.id
        exp = self._owner.level.getExp()

        record = dbaccess.getPlayerPracticeRecord(id)
        monsterId = record[2]
        startTime = record[4]
        finishTime = record[5]
        singleExpBonus = record[6]
        now = datetime.datetime.now()
        currentCountHit = int((now - startTime).seconds / (60 * 3))
        int((finishTime - startTime).seconds / 60)
        currentExp = currentCountHit * singleExpBonus
        monster = loader.getById('npc', monsterId, '*')
        if not monster:
            return {'result':False, 'message':Lg().g(441)}

        for i in range(0, currentCountHit):
            pass
#            self._owner.quest.onSuccessKillOneMonster(monsterId)
#            break
#        if item:
#            self._owner.pack.putOneItemIntoTempPackage(item, currentCountHit)
#            pushMessage(str(self._owner.baseInfo.id),'newTempPackage')
#        self.placePracticeItems(currentCountHit, monster)

        monsterName = monster['name']
        self._owner.level.setExp(exp + currentExp)
        dbaccess.updatePlayerInfo(id, {'status':1})
        self._owner.baseInfo.setStatus(1)
        return {'result':True, 'data':{'monsterName':monsterName, 'currentExp':currentExp, \
                                      'currentCountHit':currentCountHit, 'status':self._owner.baseInfo.getStatus(), \
                                      'level':self._owner.level.getLevel()}}
Esempio n. 27
0
 def initSkillBaseInfo(self):
     '''初始化技能基础信息'''
     skillInfo = loader.getById('skill', self.templateId, '*')
     if not skillInfo:
         raise "skill(%d) not found " % self.templateId
     self.setName(skillInfo['name'])
Esempio n. 28
0
 def getSkillBaseInfo(self):
     '''获取技能基础信息'''
     return loader.getById('skill', self.templateId, '*')
Esempio n. 29
0
 def Fight(self,ch ,de ,tag):
     '''产生每一个行动者的战斗数据'''
     if self.battlefield[ch]['died'] == 1:
         return {}
     if self.battlefield[de]['died'] == 1:
         return {}
     
     self.battlefield[ch]['attackNum'] = self.battlefield[ch]['attackNum'] + 1
     self.battlefield[de]['defenseNum'] = self.battlefield[de]['defenseNum'] +1
     
     owner = self.battlefield[ch]
     opponent = self.battlefield[de]
     data = {}
     data['actorsDBId'] = self.battlefield[ch]['id']
     data['actors'] = ch
     data['actType'] = 103# 行动类型 
     data['isCrit']= 0
     data['actorsFightType'] = self.battlefield[ch]['fightType']#角色的攻击类型,由角色的职业来决定 1 为近战 2为远程
     data['actorsFigure'] = self.battlefield[ch]['figure'] #攻击者的形象
     #---------------*------技能特效相关-------*----------------
     data['skillId'] = -1# 技能id -1 表示没有使用技能
     data['skillReleaseEffect'] = -1 #发动技能时自身产生的特效
     data['skillthrowEffect'] = -1 # 技能投射的特效ID
     
     data['fixedPointEffectId'] = -1 # 定点特效ID
     
     data['startPosition'] = self.battlefield[ch]['position']#起始坐标
     data['endPosition'] = [0,0]#结束坐标
     data['actorsHp'] = self.battlefield[ch]['hp']#行动者当前血量值
     data['actorsMp'] = self.battlefield[ch]['mp']#行动者当前魔力值
     data['actorsMaxHp']= self.battlefield[ch]['maxHp']#行动者最大血量值
     data['actorsMaxMp']= self.battlefield[ch]['maxMp']#行动者最大魔力值
     data['actorLostHp'] = 0#行动者丢失血量
     data['actorLostMp'] = 0#行动者丢失魔力
     #--------------------*----受攻击者信息-----*---------------
     data['victimDBId'] = self.battlefield[de]['id']
     data['victim'] = de#受伤者的id
     data['victimFigure'] = self.battlefield[de]['figure']   #受攻击者的形象
     data['victimPosition'] = self.battlefield[de]['position']#受伤者所处的位置
     data['skillBearEffect'] = -1 #技能承受时产生的特效
     data['victimFixedPointEffectId'] = -1#受伤者定点特效ID
     data['injuredType'] = 104#受伤者的受伤类型  104 受攻击 105 死亡 #106 miss   #暴击 4破防 5暴击+破防 6 闪避 7 死亡
     data['victimHp'] = self.battlefield[de]['hp']#受攻击者当前血量
     data['victimMp'] = self.battlefield[de]['mp']#受攻击者当前魔力
     data['victimMaxHp'] = self.battlefield[de]['maxHp']#受攻击者最大血量
     data['victimMaxMp'] = self.battlefield[de]['maxMp']#受攻击者最大魔力
     data['victimLostHp'] = 0#受攻击者丢失血量
     data['victimLostMp'] = 0#受攻击者丢失魔力
     
     if self.battlefield[ch]['camp'] == 1:
         data['endPosition'] = [data['victimPosition'][0]-100,data['victimPosition'][1]]
     else:
         data['endPosition'] = [data['victimPosition'][0]+100,data['victimPosition'][1]]
     #开始计算伤害
     damageType = 104
     skillId = self.ProcessSkill(owner)
     skillInfo = loader.getById('attackSkill',skillId,'*')
     
     data['skillId'] = skillId
     data['skillReleaseEffect'] = skillInfo['skillReleaseEffect']
     data['skillthrowEffect'] = skillInfo['skillthrowEffect']
     data['skillBearEffect'] = skillInfo['skillBearEffect']
     #damage = 0
     damage = self.doSkill(skillId, owner, opponent)
     reduction = opponent['defense']
     
     isMissed = 0 #是否miss 0未miss 1 miss
     if skillId == owner['OrdinarySkills']:
         hitRate = (95 + owner['hitRate'] - opponent['dodgeRate'])
         r = random.uniform(0, 100)
         if r <= hitRate:#是否命中  命中
             tag_cri = 0  #暴击标识   0未暴击 1暴击
             tag_bogey = 0 #破防标识  0 未破防 1破防
             
             r = random.uniform(0, 100)
             if r <= 30 and self.battlefield[ch]['figure'] in [1,2,3,4]:#owner['criRate']:#是否暴击
                 tag_cri = 1
                 self.battlefield[ch]['criNum'] = self.battlefield[ch]['criNum']+1
                 damage = damage * 1.5
                 data['isCrit'] =1
                 
             r = random.uniform(0, 100)#是否破防  
             if r <= owner['bogeyRate']:
                 tag_bogey = 1
                 self.battlefield[ch]['bogeyNum'] = self.battlefield[ch]['bogeyNum']+1
                 reduction = 0 #破防后减伤为 0
                 
             if tag_cri==1 and tag_bogey==1:
                 self.battlefield[ch]['cri_bogeyNum'] = self.battlefield[ch]['cri_bogeyNum']+1
                 
         else:#未命中
             self.battlefield[ch]['beDodgeNum'] = self.battlefield[ch]['beDodgeNum']+1
             self.battlefield[de]['dodgeNum'] = self.battlefield[de]['dodgeNum']+1
             damageType = 104
             isMissed = 1
             damage = 0
             
     if isMissed !=1: #是否miss
         damage = damage - (float(reduction) * 0.000215)
         if damage < 1: #如果没有miss 造成的最终伤害小于1时,强制掉血1点
             damage = 1
             
     opponent['hp'] = opponent['hp'] - damage
     
     if opponent['hp']<=0 :#受攻击者的血量小于或等于0 死亡
         damageType =105
         #print "one fighter died %d"%de
         self.battlefield[de]['hp'] = 0
         opponent['hp'] = 0
         
     if owner['hp'] <= 0:
         owner['hp'] =0
         
     data['victimLostHp'] = -(data['victimHp'] - opponent['hp'])
     data['victimLostMp'] = -(data['victimMp'] - opponent['mp'])
     
     data['actorLostHp'] = -(data['actorsHp'] - owner['hp'])
     data['actorLostMp'] = -(data['actorsMp'] - owner['mp'])
     data['injuredType'] = damageType
     #记录保留战斗后的数据
     self.battlefield[de]['hp'] = opponent['hp']
     self.battlefield[de]['mp'] = opponent['mp']
     self.battlefield[ch]['hp'] = owner['hp']
     self.battlefield[ch]['mp'] = owner['mp']
     if damageType == 105:
         self.battlefield[de]['died'] = 1
         #print "% id died"%de
         if opponent['camp'] ==1:
             self.allFighter['ch'].remove(de)
         else:
             self.allFighter['de'].remove(de)
             
     return data
Esempio n. 30
0
    def Fight(self, ch, de, tag):
        '''产生每一个行动者的战斗数据'''
        if self.battlefield[ch]['died'] == 1:
            return {}
        if self.battlefield[de]['died'] == 1:
            return {}

        self.battlefield[ch][
            'attackNum'] = self.battlefield[ch]['attackNum'] + 1
        self.battlefield[de][
            'defenseNum'] = self.battlefield[de]['defenseNum'] + 1

        owner = self.battlefield[ch]
        opponent = self.battlefield[de]
        data = {}
        data['actorsDBId'] = self.battlefield[ch]['id']
        data['actors'] = ch
        data['actType'] = 103  # 行动类型
        data['isCrit'] = 0
        data['actorsFightType'] = self.battlefield[ch][
            'fightType']  #角色的攻击类型,由角色的职业来决定 1 为近战 2为远程
        data['actorsFigure'] = self.battlefield[ch]['figure']  #攻击者的形象
        #---------------*------技能特效相关-------*----------------
        data['skillId'] = -1  # 技能id -1 表示没有使用技能
        data['skillReleaseEffect'] = -1  #发动技能时自身产生的特效
        data['skillthrowEffect'] = -1  # 技能投射的特效ID

        data['fixedPointEffectId'] = -1  # 定点特效ID

        data['startPosition'] = self.battlefield[ch]['position']  #起始坐标
        data['endPosition'] = [0, 0]  #结束坐标
        data['actorsHp'] = self.battlefield[ch]['hp']  #行动者当前血量值
        data['actorsMp'] = self.battlefield[ch]['mp']  #行动者当前魔力值
        data['actorsMaxHp'] = self.battlefield[ch]['maxHp']  #行动者最大血量值
        data['actorsMaxMp'] = self.battlefield[ch]['maxMp']  #行动者最大魔力值
        data['actorLostHp'] = 0  #行动者丢失血量
        data['actorLostMp'] = 0  #行动者丢失魔力
        #--------------------*----受攻击者信息-----*---------------
        data['victimDBId'] = self.battlefield[de]['id']
        data['victim'] = de  #受伤者的id
        data['victimFigure'] = self.battlefield[de]['figure']  #受攻击者的形象
        data['victimPosition'] = self.battlefield[de]['position']  #受伤者所处的位置
        data['skillBearEffect'] = -1  #技能承受时产生的特效
        data['victimFixedPointEffectId'] = -1  #受伤者定点特效ID
        data[
            'injuredType'] = 104  #受伤者的受伤类型  104 受攻击 105 死亡 #106 miss   #暴击 4破防 5暴击+破防 6 闪避 7 死亡
        data['victimHp'] = self.battlefield[de]['hp']  #受攻击者当前血量
        data['victimMp'] = self.battlefield[de]['mp']  #受攻击者当前魔力
        data['victimMaxHp'] = self.battlefield[de]['maxHp']  #受攻击者最大血量
        data['victimMaxMp'] = self.battlefield[de]['maxMp']  #受攻击者最大魔力
        data['victimLostHp'] = 0  #受攻击者丢失血量
        data['victimLostMp'] = 0  #受攻击者丢失魔力

        if self.battlefield[ch]['camp'] == 1:
            data['endPosition'] = [
                data['victimPosition'][0] - 100, data['victimPosition'][1]
            ]
        else:
            data['endPosition'] = [
                data['victimPosition'][0] + 100, data['victimPosition'][1]
            ]
        #开始计算伤害
        damageType = 104
        skillId = self.ProcessSkill(owner)
        skillInfo = loader.getById('attackSkill', skillId, '*')

        data['skillId'] = skillId
        data['skillReleaseEffect'] = skillInfo['skillReleaseEffect']
        data['skillthrowEffect'] = skillInfo['skillthrowEffect']
        data['skillBearEffect'] = skillInfo['skillBearEffect']
        #damage = 0
        damage = self.doSkill(skillId, owner, opponent)
        reduction = opponent['defense']

        isMissed = 0  #是否miss 0未miss 1 miss
        if skillId == owner['OrdinarySkills']:
            hitRate = (95 + owner['hitRate'] - opponent['dodgeRate'])
            r = random.uniform(0, 100)
            if r <= hitRate:  #是否命中  命中
                tag_cri = 0  #暴击标识   0未暴击 1暴击
                tag_bogey = 0  #破防标识  0 未破防 1破防

                r = random.uniform(0, 100)
                if r <= 30 and self.battlefield[ch]['figure'] in [
                        1, 2, 3, 4
                ]:  #owner['criRate']:#是否暴击
                    tag_cri = 1
                    self.battlefield[ch][
                        'criNum'] = self.battlefield[ch]['criNum'] + 1
                    damage = damage * 1.5
                    data['isCrit'] = 1

                r = random.uniform(0, 100)  #是否破防
                if r <= owner['bogeyRate']:
                    tag_bogey = 1
                    self.battlefield[ch][
                        'bogeyNum'] = self.battlefield[ch]['bogeyNum'] + 1
                    reduction = 0  #破防后减伤为 0

                if tag_cri == 1 and tag_bogey == 1:
                    self.battlefield[ch]['cri_bogeyNum'] = self.battlefield[
                        ch]['cri_bogeyNum'] + 1

            else:  #未命中
                self.battlefield[ch][
                    'beDodgeNum'] = self.battlefield[ch]['beDodgeNum'] + 1
                self.battlefield[de][
                    'dodgeNum'] = self.battlefield[de]['dodgeNum'] + 1
                damageType = 104
                isMissed = 1
                damage = 0

        if isMissed != 1:  #是否miss
            damage = damage - (float(reduction) * 0.000215)
            if damage < 1:  #如果没有miss 造成的最终伤害小于1时,强制掉血1点
                damage = 1

        opponent['hp'] = opponent['hp'] - damage

        if opponent['hp'] <= 0:  #受攻击者的血量小于或等于0 死亡
            damageType = 105
            #print "one fighter died %d"%de
            self.battlefield[de]['hp'] = 0
            opponent['hp'] = 0

        if owner['hp'] <= 0:
            owner['hp'] = 0

        data['victimLostHp'] = -(data['victimHp'] - opponent['hp'])
        data['victimLostMp'] = -(data['victimMp'] - opponent['mp'])

        data['actorLostHp'] = -(data['actorsHp'] - owner['hp'])
        data['actorLostMp'] = -(data['actorsMp'] - owner['mp'])
        data['injuredType'] = damageType
        #记录保留战斗后的数据
        self.battlefield[de]['hp'] = opponent['hp']
        self.battlefield[de]['mp'] = opponent['mp']
        self.battlefield[ch]['hp'] = owner['hp']
        self.battlefield[ch]['mp'] = owner['mp']
        if damageType == 105:
            self.battlefield[de]['died'] = 1
            #print "% id died"%de
            if opponent['camp'] == 1:
                self.allFighter['ch'].remove(de)
            else:
                self.allFighter['de'].remove(de)

        return data
 def initSkillBaseInfo(self):
     '''初始化技能基础信息'''
     skillInfo = loader.getById('skill', self.templateId, '*')
     if not skillInfo:
         raise "skill(%d) not found "%self.templateId
     self.setName(skillInfo['name'])
 def getSkillBaseInfo(self):
     '''获取技能基础信息'''
     return loader.getById('skill', self.templateId, '*')