예제 #1
0
def GetJingJiInfo3700(dynamicId,characterId):
    '''获取竞技场信息
    '''
    player = PlayersManager().getPlayerByID(characterId)
    res = CanDoServer(characterId)
    if not res['result']:
        pushOtherMessage(905, res.get('message',u''), [dynamicId])
        return res
    if not player or not player.CheckClient(dynamicId):
        return {'result':False,'message':Lg().g(18)}
    data = player.arena.getArenaAllInfo()
    return {'result':True,'data':data}
예제 #2
0
def ArenaBattle_3704(dynamicId,characterId,tocharacterId):
    '''竞技场战斗
    '''
    player = PlayersManager().getPlayerByID(characterId)
    res = CanDoServer(characterId)
    if not res['result']:
        pushOtherMessage(905, res.get('message',u''), [dynamicId])
        return res
    if not player or not player.CheckClient(dynamicId):
        return {'result':False,'message':Lg().g(18)}
    result = player.arena.doFight(tocharacterId)
    msg = result.get('message',u'')
    if msg:
        pushOtherMessage(905, result.get('message',u''), [dynamicId])
    return result
예제 #3
0
def FightInScene(dynamicId, characterId, monsterId):
    '''副本战斗
    @param dynamicId: int 客户端的动态id
    @param characterId: int 角色的id
    @param monsterId: int 碰撞的怪物在场景中的id
    '''
    res = CanDoServer(characterId)
    if not res['result']:
        return res
    player = PlayersManager().getPlayerByID(characterId)
    if not player.CheckClient(dynamicId):
        return {'result': False, 'message': Lg().g(18)}
    if not player.status.getLifeStatus():
        return {'result': False, 'message': Lg().g(97)}
    if player.baseInfo.getState() == 1:  #如果角色在副本
        dtid = player.baseInfo.getInstancetag()  #副本动态Id
        instance = InstanceManager().getInstanceByIdTag(dtid)  #获取副本实例
        sceneId = player.baseInfo.getLocation()
        nowScene = instance._Scenes[sceneId]  #获取场景实例
    else:
        town = player.baseInfo.getTown()
        nowScene = MapManager().getMapId(town)
#        return {'result':False,'message':Lg().g(64)}
    data = nowScene.FightInScene(monsterId,
                                 int(player.baseInfo.getPosition()[0]),
                                 characterId)
    if data.get('result'):
        player.baseInfo.setStatus(4)  #角色状态设置为战斗状态
    return data
예제 #4
0
def enterGuildBattleField(dynamicId,characterId):
    '''进入行会战副本
    @param dynamicId: int 客户端的动态id
    @param characterId: int 角色的id
    '''
    res = CanDoServer(characterId)
    if not res['result']:
        return res        
    player = PlayersManager().getPlayerByID(characterId)
    if  not player.CheckClient(dynamicId):
        return {'result':False,'message':Lg().g(18)}
    if not player.status.getLifeStatus():
        return {'result':False,'message':Lg().g(97)}
    if player.baseInfo.getState()==1:
        return {'result':False,'message':Lg().g(98)}
    guildId = player.guild.getID()
    if not guildId:
        return {'result':False,'message':Lg().g(79)}
    battleArea = BattleAreaManager().getGuildBattleAreaIdByGuildId(guildId)
    if not battleArea:
        return {'result':False,'message':Lg().g(99)}
    nowSceneId = battleArea.enterGuildBattleField(guildId,characterId)
    if not nowSceneId:
        return {'result':False,'message':Lg().g(100)}
    lastscene = SceneManager_new().getSceneById(player.baseInfo.getLocation())
    lastscene.dropPlayer(player.baseInfo.id)
    player.baseInfo.setState(2)
    data = {'placeId':nowSceneId}
    return {'result':True,'data':data}
    

    
    
        
        
예제 #5
0
def TowerBattle_4203(dynamicId,characterId):
    '''爬塔战斗
    @param dynamicId: int 客户端的连接ID
    @param characterId: int 角色的ID
    '''
    player = PlayersManager().getPlayerByID(characterId)
    res = CanDoServer(characterId)
    if not res['result']:
        pushOtherMessage(905, res.get('message',u''), [dynamicId])
        return res
    if not player or not player.CheckClient(dynamicId):
        return {'result':False,'message':Lg().g(18)}
    result = player.tower.climb()
    msg = result.get('message')
    if msg:
        pushOtherMessage(905, msg, [dynamicId])
    return result
예제 #6
0
def RefreshInfo4201(dynamicId,characterId):
    '''刷新爬塔信息
    @param dynamicId: int 客户端的连接ID
    @param characterId: int 角色的ID
    '''
    player = PlayersManager().getPlayerByID(characterId)
    res = CanDoServer(characterId)
    if not res['result']:
        pushOtherMessage(905, res.get('message',u''), [dynamicId])
        return res
    if not player or not player.CheckClient(dynamicId):
        return {'result':False,'message':Lg().g(18)}
    data = player.tower.flushTowerRecord()
    msg = data.get('message')
    if msg:
        pushOtherMessage(905, msg, [dynamicId])
    return data
예제 #7
0
def GetCurLevelInfo4200(dynamicId,characterId):
    '''获取当前塔层的信息
    @param dynamicId: int 客户端的连接ID
    @param characterId: int 角色的ID
    '''
    player = PlayersManager().getPlayerByID(characterId)
    res = CanDoServer(characterId)
    if not res['result']:
        pushOtherMessage(905, res.get('message',u''), [dynamicId])
        return res
    if not player or not player.CheckClient(dynamicId):
        return {'result':False,'message':Lg().g(18)}
    data = player.tower.getTowerInfo()
    msg = data.get('message')
    if msg:
        pushOtherMessage(905, msg, [dynamicId])
    return {'result':True,'data':data}
예제 #8
0
def FightWithPlayer(dynamicId, characterId, tid):
    '''玩家PK
    @param dynamicId: int 客户端的动态id
    @param characterId: int 角色的id
    @param tid: int 对方的id
    '''
    res = CanDoServer(characterId)
    if not res['result']:
        return res
    player = PlayersManager().getPlayerByID(characterId)
    if not player or not player.CheckClient(dynamicId):
        return {'result': False, 'message': Lg().g(18)}
    toplayer = PlayersManager().getPlayerByID(tid)
    if not toplayer:
        return {'result': False, 'message': Lg().g(66)}
    guildid = player.guild.getID()
    tguildid = toplayer.guild.getID()
    town = player.baseInfo.getTown()
    ttown = toplayer.baseInfo.getTown()
    if not player.pvp.checktime():
        return {'result': False, 'message': u"PK战斗CD中"}
    if not toplayer.pvp.checktime():
        return {'result': False, 'message': u"对方PK战斗CD中"}
    if town != ttown:
        return {'result': False, 'message': u"不在统一场景无法进行战斗"}
    if player.guild.getID() == toplayer.guild.getID() or 0 in [
            guildid, tguildid
    ]:
        return {'result': False, 'message': u"不允许本国之间战斗"}
    level = player.level.getLevel()
    tlevel = player.level.getLevel()
    if level < 25 or tlevel < 25:
        return {'result': False, 'message': u"低于25级不能进行战斗"}
    player.pvp.recordtime()
    toplayer.pvp.recordtime()
    data = DoFight([player], [toplayer], now_X=550)
    #战后的处理
    battleresult = data.battleResult
    nowscene = MapManager().getMapId(ttown)  #获取当前场景
    if battleresult == 1:  #如果主动方胜利
        nowscene.dropPlayer(tid)  #在当前场景中移除被攻击的玩家
        toscene = MapManager().getMapId(1000)  #扔回其他场景
        toscene.addPlayer(tid)
        toscene.pushEnterPlace([toplayer.dynamicId])
        toplayer.baseInfo.setTown(1000)
    else:
        nowscene.dropPlayer(characterId)  #在当前场景中移主动攻击的玩家
        toscene = MapManager().getMapId(1000)  #扔回其他场景
        toscene.addPlayer(characterId)
        toscene.pushEnterPlace([player.dynamicId])
        player.baseInfo.setTown(1000)
    return {
        'result': True,
        'data': data,
        'sendlist': [dynamicId, toplayer.dynamicId]
    }
예제 #9
0
def instanceColonizeBattle_712(dynamicId, request_proto):
    '''副本殖民战斗'''

    argument = ColonizationBattle712_pb2.FightRequest()
    argument.ParseFromString(request_proto)
    response = ColonizationBattle712_pb2.FightResponse()

    dynamicId = dynamicId
    cid = argument.id  #角色id 挑战方ids
    instanceid = argument.copyId  #副本id(难度最小的那个)
    player = PlayersManager().getPlayerByID(cid)
    res = CanDoServer(cid)
    if not res['result']:
        pushOtherMessage(905, res.get('message', u''), [dynamicId])
        return res
    if player:
        player.quest.specialTaskHandle(106, state=0)  #特殊任务处理
    else:
        log.err(u"instanceColonize_net-76row-not playerid-%s-error" % cid)

    iname = InstanceColonizeGuerdon.getInstancenameByinstanceid(instanceid)
    if not InstanceColonizeGuerdon.goClonizeGue(cid):  #如果没有战书
        response.result = False
        response.message = Lg().g(611)
        return response.SerializeToString()

    list1, zon, pid = InstanceColonizeGuerdon.getBattlePlayer(
        instanceid, cid)  #返回  list,zon
    if not list1:
        response.result = False
        response.message = zon
        response.data.setData.itemsBonus.extend([])
        response.data.setData.sceneName = u""
        response.data.battleResult = 0
        response.data.centerX = 0
        response.data.centerY = 0
        return response.SerializeToString()

    data1 = InstanceColonizeGuerdon.getFightData(cid, list1, zon, instanceid)
    response.result = True
    response.data.battleResult = data1.battleResult
    response.data.centerX = data1.center
    response.data.centerY = 325
    rResArr = response.data.rResArr
    startData = response.data.startData
    setpdata = response.data.stepData
    data1.SerializationResource(rResArr)
    data1.SerializationInitBattleData(startData)
    data1.SerializationStepData(setpdata)
    pids = InstanceColonizeGuerdon.getPidByinstanceid(instanceid)

    cb = False  #入侵成功或者失败 ,默认失败
    if data1.battleResult == 1:
        cb = True
    else:
        cb = False

    if pids > 0:
        if pids == cid:
            response.result = False
            response.message = Lg().g(612)
            response.data.setData.itemsBonus.extend([])
            response.data.setData.sceneName = iname
            return response.SerializeToString()
        else:
            pushObjectNetInterface.pushEnterPlace_new(pid,
                                                      [dynamicId])  #推送进入场景
    else:
        pushObjectNetInterface.pushEnterPlace_new(pid, [dynamicId])  #推送进入场景

    itemList = instance_app.dropItem(
        cid, instanceid, cb, iname)  ##########添加成功失败记录,获取掉落物品,返回物品列表和副本名称
    if (not itemList) or (len(itemList)) < 1:
        response.data.setData.itemsBonus.extend([])
    else:
        it = response.data.setData.itemsBonus.add()
        for item in itemList:
            item.SerializationItemInfo(it)
    response.data.setData.sceneName = iname
    ct = InstanceColonizeGuerdon.getWinningCount(cid)
    response.data.setData.sucNum = ct  #连胜次数
    plv = player.level.getLevel()
    response.data.setData.goldNum = plv * 1000  #连胜奖金

    return response.SerializeToString()
def instanceColonizeBattle_712(dynamicId, request_proto):
    '''副本殖民战斗'''

    argument = ColonizationBattle712_pb2.FightRequest()
    argument.ParseFromString(request_proto)
    response = ColonizationBattle712_pb2.FightResponse()
    
    dynamicId = dynamicId
    cid = argument.id #角色id 挑战方ids
    instanceid = argument.copyId #副本id(难度最小的那个)
    player=PlayersManager().getPlayerByID(cid)
    res = CanDoServer(cid)
    if not res['result']:
        pushOtherMessage(905, res.get('message',u''), [dynamicId])
        return res
    if player:
        player.quest.specialTaskHandle(106,state=0) #特殊任务处理
    else:
        log.err(u"instanceColonize_net-76row-not playerid-%s-error"%cid)
    
    iname=InstanceColonizeGuerdon.getInstancenameByinstanceid(instanceid)
    if not InstanceColonizeGuerdon.goClonizeGue(cid): #如果没有战书
        response.result = False
        response.message=Lg().g(611)
        return response.SerializeToString()
        
    list1,zon,pid= InstanceColonizeGuerdon.getBattlePlayer(instanceid,cid) #返回  list,zon
    if not list1:
        response.result = False
        response.message=zon;
        response.data.setData.itemsBonus.extend([])
        response.data.setData.sceneName=u""
        response.data.battleResult = 0
        response.data.centerX = 0
        response.data.centerY = 0
        return response.SerializeToString()
        
    data1=InstanceColonizeGuerdon.getFightData(cid, list1, zon,instanceid)
    response.result = True
    response.data.battleResult = data1.battleResult
    response.data.centerX = data1.center
    response.data.centerY = 325
    rResArr = response.data.rResArr
    startData = response.data.startData
    setpdata = response.data.stepData
    data1.SerializationResource(rResArr)
    data1.SerializationInitBattleData(startData)
    data1.SerializationStepData(setpdata)
    pids=InstanceColonizeGuerdon.getPidByinstanceid(instanceid)
    
    cb=False #入侵成功或者失败 ,默认失败
    if data1.battleResult==1:
        cb=True
    else:
        cb=False
    
    
    if pids>0:
        if pids==cid:
            response.result = False
            response.message=Lg().g(612)
            response.data.setData.itemsBonus.extend([])
            response.data.setData.sceneName=iname
            return response.SerializeToString()
        else:
            pushObjectNetInterface.pushEnterPlace_new(pid,[dynamicId]) #推送进入场景
    else:
        pushObjectNetInterface.pushEnterPlace_new(pid,[dynamicId]) #推送进入场景
   
    itemList=instance_app.dropItem(cid, instanceid, cb,iname)##########添加成功失败记录,获取掉落物品,返回物品列表和副本名称
    if (not itemList) or (len(itemList))<1:
        response.data.setData.itemsBonus.extend([])
    else:
        it=response.data.setData.itemsBonus.add()
        for item in itemList:
            item.SerializationItemInfo(it)
    response.data.setData.sceneName=iname
    ct=InstanceColonizeGuerdon.getWinningCount(cid)
    response.data.setData.sucNum=ct#连胜次数
    plv=player.level.getLevel()
    response.data.setData.goldNum=plv*1000 #连胜奖金
    
    return response.SerializeToString()
예제 #11
0
def lobbyOperate(dynamicId, characterId, operaType, duration):
    '''
          大厅操作:修炼、卖艺
    @param operaType: 操作类型:1、训练   2、卖艺
    @param duration: 持续时间
        训练得到的经验=[(自身等级+1)*33]^1.15*训练小时数
        训练消耗的铜币=[(自身等级+1)*44]^1.15*训练小时数
    '''

    ret = CanDoServer(characterId)
    if not ret['result']:
        return ret

    player = PlayersManager().getPlayerByID(characterId)
    if player is None:
        return {'result': False, 'message': Lg().g(18)}

    level = player.level.getLevel()
    exp = player.level.getExp()
    coin = player.finance.getCoin()
    startTime = datetime.datetime.now()
    finishTime = startTime + datetime.timedelta(hours=1)
    status = 0
    getExp = 0
    costCoin = 0
    if operaType == 1:  #训练
        status = 3
        getExp = int(math.pow((level + 1) * 33, 1.15) * duration)
        costCoin = int(math.pow(((level) + 1) * 44, 1.15) * duration)
        exp += getExp
        coin -= costCoin
        if coin < 0:
            return {'result': False, 'message': u'您的铜币不足'}
        dbaccess.updatePlayerInfo(characterId, {
            'status': status,
            'coin': coin
        })
        bonusCount = getExp
    else:  #卖艺
        status = 6
        pass
    dbaccess.updatePlayerLobbyRecord(
        characterId, {
            'startTime': str(startTime),
            'finishTime': str(finishTime),
            'isDoubleBonus': 0
        })
    player.finance.setCoin(coin)
    player.baseInfo.setStatus(status)
    statusDesc = player.baseInfo.setStatus(1)
    durationTime = duration * 3600
    reactor.callLater(durationTime, doWhenLobbyOperateFinsihed, {
        'status': 1,
        'coin': coin,
        'exp': exp
    }, player)

    startTime = int(time.mktime(startTime.timetuple()))
    finishTime = int(time.mktime(finishTime.timetuple()))

    return {'result':True, 'data':{'status':statusDesc, 'bonusCount':bonusCount, \
                                   'startTime':startTime, 'finishTime':finishTime, \
                                   'duration':duration}}