コード例 #1
0
ファイル: PvpMod.py プロジェクト: hw233/python_misc
    def grep_users(self):
        '''匹配用户,生成战斗对象。'''
        while self._arena_started:  #竞技场开放
            try:
                gevent.sleep(0)  #避免hog cpu,切换协程。
                typ = random.choice([1, 2, 3])  #三种类型房间中,随机选一个。
                #如果房间人数小于(2 * 类型),人数不足。
                if len(self._arena_members[typ]) < 2 * typ:
                    continue

                all_fighters = self.choice_users(typ)  #匹配结果
                if all_fighters == False:  #匹配失败
                    continue
            except Exception, e:
                print str(e)
                print '程序运行错误'
            else:  #生成战斗对象
                print '所有参加战斗的人', all_fighters
                print '生成一场战斗%s vs %s' % (str(
                    all_fighters[0:typ]), str(all_fighters[typ:]))
                print '战斗类型是', typ, 'vs', typ

                ArmyInfo = {}
                UserInfo = {}
                PosId = 1

                for ind, pair in enumerate(all_fighters):
                    gid = 1 if ind < typ else 2
                    uid, sid = pair
                    Generals = self._arena_members[typ][pair]['info'][
                        'Generals']
                    Techs = self._arena_members[typ][pair]['info']['Techs']

                    army = pvp_common.getArmyInfo(typ, sid, uid, gid, PosId,
                                                  Generals, Techs)
                    ArmyInfo.update(army)

                    UserInfo[pair] = self._arena_members[typ][pair]['info'][
                        'User']
                    UserInfo[pair]['BeginX'] = cr.get_cfg(
                        'tb_cfg_pvp_pos', (typ, PosId), 'BeginX')
                    UserInfo[pair]['BeginY'] = cr.get_cfg(
                        'tb_cfg_pvp_pos', (typ, PosId), 'BeginY')
                    UserInfo[pair]['GroupId'] = gid

                    PosId += 1

                ao = ArenaObj(typ, ArmyInfo, UserInfo)  #生成一个公共的战斗对象
                for pair in all_fighters:
                    self._arena_objs[pair] = ao  #这场战斗的参战人员,可以操作这个战斗对象。
                    del self._arena_members[typ][pair]  #从房间中移除
コード例 #2
0
ファイル: PvpMod.py プロジェクト: fycheung/misc
    def grep_users(self):
        '''匹配用户,生成战斗对象。'''
        while self._arena_started: #竞技场开放
            try:
                gevent.sleep(0) #避免hog cpu,切换协程。
                typ = random.choice([1, 2, 3]) #三种类型房间中,随机选一个。
                #如果房间人数小于(2 * 类型),人数不足。
                if len(self._arena_members[typ]) < 2 * typ:
                    continue
                
                all_fighters = self.choice_users(typ) #匹配结果
                if all_fighters == False: #匹配失败
                    continue
            except Exception, e:
                print str(e)
                print '程序运行错误'
            else: #生成战斗对象
                print '所有参加战斗的人', all_fighters
                print '生成一场战斗%s vs %s' % (str(all_fighters[0:typ]), str(all_fighters[typ:]))
                print '战斗类型是', typ, 'vs', typ
                
                ArmyInfo = {}
                UserInfo = {}
                PosId = 1
                
                for ind, pair in enumerate(all_fighters):
                    gid = 1 if ind < typ else 2
                    uid, sid = pair
                    Generals = self._arena_members[typ][pair]['info']['Generals']
                    Techs = self._arena_members[typ][pair]['info']['Techs']
                    
                    army = pvp_common.getArmyInfo(typ, sid, uid, gid, PosId, Generals, Techs)
                    ArmyInfo.update(army)                    
                    
                    UserInfo[pair] = self._arena_members[typ][pair]['info']['User']
                    UserInfo[pair]['BeginX'] = cr.get_cfg('tb_cfg_pvp_pos', (typ, PosId), 'BeginX')
                    UserInfo[pair]['BeginY'] = cr.get_cfg('tb_cfg_pvp_pos', (typ, PosId), 'BeginY')
                    UserInfo[pair]['GroupId'] = gid
                    
                    PosId += 1

                ao = ArenaObj(typ, ArmyInfo, UserInfo) #生成一个公共的战斗对象
                for pair in all_fighters:
                    self._arena_objs[pair] = ao #这场战斗的参战人员,可以操作这个战斗对象。
                    del self._arena_members[typ][pair] #从房间中移除
コード例 #3
0
def getArmyAttack(**kw):
    '''计算方阵(军队)初始攻击力 未加技能加成
    初始攻击力 = 方阵初始士兵数量*兵种攻击*(1+α*武力)*军团科技加成*地形系数
    '''
    A = {1: 0.000145, 2: 0.000145}

    #间接变量
    generalType = kw['generalType']  #武将类型
    soldierType = kw['soldierType']  #兵种类型
    landForm = kw.get('landForm', 0)  #地形

    #直接变量
    soldierAttack = kw['soldierAttack']  #兵种攻击 (已加成军团科技)
    soldierNum = kw['soldierNum']  #士兵数量
    forceValue = kw['forceValue']  #武将武力

    #缺省变量
    clubTechAdd = kw.get('clubTechAdd', 1)  #军团科技加成

    job = cr.get_cfg('tb_cfg_general', generalType, 'Job')

    m = M if cr.get_cfg('tb_cfg_soldier', soldierType,
                        'LandForm') == landForm else 1
    a = A[job]
    if 0:
        print 'soldierAttack', soldierAttack
        print 'clubTechAdd', clubTechAdd
        print 'forceValue', forceValue
        print 'soldierNum', soldierNum
        print 'm', m
        print 'forceValue', forceValue
        print 'a', a

    result = soldierAttack * clubTechAdd * (1 +
                                            a * forceValue) * soldierNum * m

    return int(result)
コード例 #4
0
ファイル: pvp_common.py プロジェクト: fycheung/misc
def getArmyAttack(**kw):
    '''计算方阵(军队)初始攻击力 未加技能加成
    初始攻击力 = 方阵初始士兵数量*兵种攻击*(1+α*武力)*军团科技加成*地形系数
    '''
    A = {1:0.000145,2:0.000145}
    
    
    #间接变量
    generalType = kw['generalType'] #武将类型
    soldierType = kw['soldierType'] #兵种类型
    landForm = kw.get('landForm',0) #地形
    
    #直接变量
    soldierAttack = kw['soldierAttack'] #兵种攻击 (已加成军团科技)
    soldierNum = kw['soldierNum'] #士兵数量
    forceValue = kw['forceValue'] #武将武力
    
    #缺省变量 
    clubTechAdd = kw.get('clubTechAdd',1)  #军团科技加成
    
    job = cr.get_cfg('tb_cfg_general', generalType, 'Job')

    m = M if cr.get_cfg('tb_cfg_soldier',soldierType,'LandForm')==landForm else 1
    a = A[job]
    if 0:
        print 'soldierAttack',soldierAttack
        print 'clubTechAdd',clubTechAdd
        print 'forceValue',forceValue
        print 'soldierNum',soldierNum
        print 'm',m
        print 'forceValue',forceValue
        print 'a',a
    
    result = soldierAttack * clubTechAdd * (1+a*forceValue) * soldierNum  * m
    
    return int(result)
コード例 #5
0
ファイル: PvpMod.py プロジェクト: hw233/python_misc
 def gain_honour(self, groupid):
     '''计算获得的荣誉'''
     if not groupid in [1, 2]:
         return False
     diff = self.user_level_diff()
     diff = diff if groupid == 1 else -diff
     print 'diff', diff
     base_honour = cr.get_cfg('tb_cfg_honour', diff,
                              'P%sv%s' % (self._typ, self._typ))
     print 'P%dv%d' % (self._typ, self._typ)
     print 'base_honour', base_honour
     modify = self.army_avg_lv['general_avg_level'][groupid] / \
                 self.army_avg_lv['general_avg_level'][0] * \
                 self.army_avg_lv['soldier_avg_level'][groupid] / \
                 self.army_avg_lv['soldier_avg_level'][0]
     honour = base_honour * (2 - modify)
     return 2 if honour <= 2 else honour
コード例 #6
0
ファイル: PvpMod.py プロジェクト: fycheung/misc
 def gain_honour(self, groupid):
     '''计算获得的荣誉'''
     if not groupid in [1, 2]:
         return False
     diff = self.user_level_diff()
     diff = diff if groupid == 1 else -diff
     print 'diff', diff
     base_honour = cr.get_cfg('tb_cfg_honour', diff, 
                              'P%sv%s'%(self._typ, self._typ))
     print 'P%dv%d'%(self._typ, self._typ)
     print 'base_honour', base_honour
     modify = self.army_avg_lv['general_avg_level'][groupid] / \
                 self.army_avg_lv['general_avg_level'][0] * \
                 self.army_avg_lv['soldier_avg_level'][groupid] / \
                 self.army_avg_lv['soldier_avg_level'][0]
     honour = base_honour * (2 - modify)
     return 2 if honour <= 2 else honour
コード例 #7
0
ファイル: pvp_common.py プロジェクト: fycheung/misc
def getArmyInfo(pvpType,serverId,userId,groupId,posId, generalRows, SoldiersTech): 
    '''获取参战军队信息 refer:BattleMod.getMyArmy 
    @param pvpType: 竞技类型 1:1v1 2:2v2 3:3v3
    @param serverId: 服务器ID
    @param userId: 用户DI
    @param groupId: 分组ID(1组 2组)
    @param posId: 组内成员ID(1,2,3,4,5,6)
    '''
    assert pvpType in (1,2,3)
    assert groupId in (1,2)
    assert posId in (1,2,3,4,5,6)
    
    MyArmy = {}
    MapId = pvpType
    #row_map = Gcore.getCfg('tb_cfg_pve_map',MapId)
    row_map = cr.get_cfg('tb_cfg_pvp_pos',(MapId,posId))
    CoordSet = Get9Coord(row_map['CenterX'], row_map['CenterY'], row_map['ArmySpace'], False)

    armyId = 100*posId
    armyNum = 0
    for row in generalRows:
        armyId += 1
        i = row['PosId']
        SoldierType = row['TakeType']
        SoldierNum = row['TakeNum']
        if SoldierNum == 0 or SoldierType == 0: #没有带兵不能上场,带兵类型是0也不能上场
            continue
        SoldierLevel = SoldiersTech.get(SoldierType,0)
        GeneralId = row['GeneralId']
        
        #row_soldier = cr.get_cfg('tb_cfg_soldier',SoldierType)
        row_soldier_up = cr.get_cfg('tb_cfg_soldier_up',(SoldierType,SoldierLevel))
        
        SoldierLife = row_soldier_up['Life']
        
        army = {}
        army['armyId'] = armyId
        army['armyUserId'] = '%s.%s' % (serverId, userId)
        army['armyType'] = groupId  #军队类型: 分组类型 1或2
        
        #army['__armySizeL'] = 3 #军队尺寸的长
        #army['__armySizeW'] = 3 #军队尺寸的宽
        
        army['armyLife'] = SoldierLife * SoldierNum   #军队的生命
        
        #按校场布阵 地图9宫格而定
        army['initPointX'] = CoordSet[i][0] #初始位置X
        army['initPointY'] = CoordSet[i][1] #初始位置Y
        army['generalId'] = GeneralId #武将ID 用于损兵
        army['generalType'] = row['GeneralType']   #武将技能种类 , 军队需要显示武将的名称 来源于武将类型配置
        army['generalLevel'] = row['GeneralLevel'] #武将技能等级
        SkillId = cr.get_cfg('tb_cfg_general',row['GeneralType'],'SkillId') #武将技能ID 暂定每个武将只有一个技能
        if SkillId:
            ChanceAdd = int( row['WitValue'] * 0.000055 )
            Chance = cr.get_cfg('tb_cfg_skill',SkillId,'SkillChance')+ChanceAdd
            army['SkillDict'] = gen01Dict(Chance,SkillId) 
        else:
            army['SkillDict'] = {}
        army['generalForce'] = row['ForceValue'] 
        army['generalWit'] = row['WitValue']  
        army['generalSpeed'] = row['SpeedValue']  
        army['generalLeader'] = row['LeaderValue']  
        
        army['soldierType'] = SoldierType
        #army['__soldierSort'] = row_soldier['SoldierSort'] #分类 步弓骑
        army['soldierLevel'] = SoldierLevel
        #army['__soldierLife'] = SoldierLife
        army['soldierNum'] = SoldierNum

        #army['__soldierAttackNum'] = row_soldier_up['Attack']
        #army['__soldierDefenseNum'] = row_soldier_up['Defense']
        #SumDefense += row_soldier_up['Defense']
        #army['__attackDistance'] = row_soldier['AttackDistance'] #攻击距离
        #army['__attackAngle'] = row_soldier['AttackRange'] #攻击角度
        #army['__attackFre'] = row_soldier['AttackFre'] #攻击频率
        #army['__armySpeed'] = row_soldier['Speed'] #移动速度
        #army['__warnRadius'] = row_soldier['WarnRadius'] #警戒距离 (半径 角度360度固定)
        army['face'] = 2 #面向            
        
        army['cur_armyLife'] = army['armyLife'] #当前军队生命 战斗中减少
        r = army
        ArmyAttack = getArmyAttack(
                                           generalType = r['generalType'],
                                           soldierType = r['soldierType'],
                                           soldierAttack = row_soldier_up['Attack'],
                                           soldierNum = r['soldierNum'],
                                           forceValue = r['generalForce'],
                                           )
        army['armyInitAttack'] = ArmyAttack
        armyNum += 1
        MyArmy[armyId] = army
    

    
    data = {
            'ArmyInfo':MyArmy,
            'armyNum':armyNum
            }
    return MyArmy
コード例 #8
0
def getArmyInfo(pvpType, serverId, userId, groupId, posId, generalRows,
                SoldiersTech):
    '''获取参战军队信息 refer:BattleMod.getMyArmy 
    @param pvpType: 竞技类型 1:1v1 2:2v2 3:3v3
    @param serverId: 服务器ID
    @param userId: 用户DI
    @param groupId: 分组ID(1组 2组)
    @param posId: 组内成员ID(1,2,3,4,5,6)
    '''
    assert pvpType in (1, 2, 3)
    assert groupId in (1, 2)
    assert posId in (1, 2, 3, 4, 5, 6)

    MyArmy = {}
    MapId = pvpType
    #row_map = Gcore.getCfg('tb_cfg_pve_map',MapId)
    row_map = cr.get_cfg('tb_cfg_pvp_pos', (MapId, posId))
    CoordSet = Get9Coord(row_map['CenterX'], row_map['CenterY'],
                         row_map['ArmySpace'], False)

    armyId = 100 * posId
    armyNum = 0
    for row in generalRows:
        armyId += 1
        i = row['PosId']
        SoldierType = row['TakeType']
        SoldierNum = row['TakeNum']
        if SoldierNum == 0 or SoldierType == 0:  #没有带兵不能上场,带兵类型是0也不能上场
            continue
        SoldierLevel = SoldiersTech.get(SoldierType, 0)
        GeneralId = row['GeneralId']

        #row_soldier = cr.get_cfg('tb_cfg_soldier',SoldierType)
        row_soldier_up = cr.get_cfg('tb_cfg_soldier_up',
                                    (SoldierType, SoldierLevel))

        SoldierLife = row_soldier_up['Life']

        army = {}
        army['armyId'] = armyId
        army['armyUserId'] = '%s.%s' % (serverId, userId)
        army['armyType'] = groupId  #军队类型: 分组类型 1或2

        #army['__armySizeL'] = 3 #军队尺寸的长
        #army['__armySizeW'] = 3 #军队尺寸的宽

        army['armyLife'] = SoldierLife * SoldierNum  #军队的生命

        #按校场布阵 地图9宫格而定
        army['initPointX'] = CoordSet[i][0]  #初始位置X
        army['initPointY'] = CoordSet[i][1]  #初始位置Y
        army['generalId'] = GeneralId  #武将ID 用于损兵
        army['generalType'] = row[
            'GeneralType']  #武将技能种类 , 军队需要显示武将的名称 来源于武将类型配置
        army['generalLevel'] = row['GeneralLevel']  #武将技能等级
        SkillId = cr.get_cfg('tb_cfg_general', row['GeneralType'],
                             'SkillId')  #武将技能ID 暂定每个武将只有一个技能
        if SkillId:
            ChanceAdd = int(row['WitValue'] * 0.000055)
            Chance = cr.get_cfg('tb_cfg_skill', SkillId,
                                'SkillChance') + ChanceAdd
            army['SkillDict'] = gen01Dict(Chance, SkillId)
        else:
            army['SkillDict'] = {}
        army['generalForce'] = row['ForceValue']
        army['generalWit'] = row['WitValue']
        army['generalSpeed'] = row['SpeedValue']
        army['generalLeader'] = row['LeaderValue']

        army['soldierType'] = SoldierType
        #army['__soldierSort'] = row_soldier['SoldierSort'] #分类 步弓骑
        army['soldierLevel'] = SoldierLevel
        #army['__soldierLife'] = SoldierLife
        army['soldierNum'] = SoldierNum

        #army['__soldierAttackNum'] = row_soldier_up['Attack']
        #army['__soldierDefenseNum'] = row_soldier_up['Defense']
        #SumDefense += row_soldier_up['Defense']
        #army['__attackDistance'] = row_soldier['AttackDistance'] #攻击距离
        #army['__attackAngle'] = row_soldier['AttackRange'] #攻击角度
        #army['__attackFre'] = row_soldier['AttackFre'] #攻击频率
        #army['__armySpeed'] = row_soldier['Speed'] #移动速度
        #army['__warnRadius'] = row_soldier['WarnRadius'] #警戒距离 (半径 角度360度固定)
        army['face'] = 2  #面向

        army['cur_armyLife'] = army['armyLife']  #当前军队生命 战斗中减少
        r = army
        ArmyAttack = getArmyAttack(
            generalType=r['generalType'],
            soldierType=r['soldierType'],
            soldierAttack=row_soldier_up['Attack'],
            soldierNum=r['soldierNum'],
            forceValue=r['generalForce'],
        )
        army['armyInitAttack'] = ArmyAttack
        armyNum += 1
        MyArmy[armyId] = army

    data = {'ArmyInfo': MyArmy, 'armyNum': armyNum}
    return MyArmy