예제 #1
0
def create(guildInfo, srcMap='10002'):
    ffext.dump(__name__, srcMap)
    h = GuildCopy(guildInfo)
    mapObj = MapMgr.getMapMgr().createCopyMap(srcMap, h)
    h.mapname = mapObj.mapname

    return mapObj
예제 #2
0
 def useSkill(self, skill, objDest, param):
     hurtCalcultor = skill.skillCfg.hurtCalcultor
     ffext.dump('UUUUUUUUUUUUU*********************', skill.skillCfg.skillId, type(hurtCalcultor))
     if hurtCalcultor != None:
         #伤血计算
         return hurtCalcultor.exe(self.ownerref(), skill, objDest, param)
     return '该技能禁止使用'
예제 #3
0
 def addGuildMemberTemp(self, uid, name, level, job):
     guildMember = PlayerGuildInfo()
     guildMember.setPlayerGuildInfo(uid, name, MsgDef.GuildPostCmd.MEMBER,
                                    0, 0, level, job)
     self.allGuildMemberTemp[guildMember.uid] = guildMember
     ffext.dump(self.allGuildMemberTemp)
     return
예제 #4
0
 def timercb():
     ffext.dump("timercb teamburst...")
     cb = callbackArg['prizecallback']
     if cb:
         callbackArg['prizecallback'] = None
         cb()
     return
예제 #5
0
def processTransferPointOpsReq(session, msg):
    print('processTransferPointOpsReq', msg)
    player = session.player
    destCfg = MapMgr.getMapMgr().getTransferPointCfg(msg.cfgid)
    if not destCfg:
        session.sendMsg(
            MsgDef.ServerCmd.ERROR_MSG,
            buildErrMsg(MsgDef.ClientCmd.TRANSFER_POINT_OPS,
                        Base.lang('传送点不存在')))
        return
    #添加player到地图管理器中
    mapObj = MapMgr.getMapMgr().allocMap(destCfg.tomapid)
    if not mapObj:
        ffext.error('processTransferPointOpsReq %s not exist' %
                    (str(destCfg.tomapid)))
        session.sendMsg(
            MsgDef.ServerCmd.ERROR_MSG,
            buildErrMsg(MsgDef.ClientCmd.TRANSFER_POINT_OPS,
                        Base.lang('传送点不存在!')))
        return
    # if msg.cfgid == 7:#TODO
    #     from model.copymap import TestCopy
    #     mapObj = TestCopy.create(destCfg.tomapid)
    ffext.dump('transfer ', mapObj.mapname, mapObj.showName)
    if mapObj.showName.find('副本') >= 0:
        player.taskCtrl.trigger(Base.Action.COPY_MAP, int(mapObj.mapname), 1)
    mapObj.playerEnterMap(player, destCfg.tox, destCfg.toy)
    return
예제 #6
0
def handleTimerDivorce(marryId):
    #ffext.dump('marry divorcing handleTimerDivorce', marryId)
    marryTotalInfo = getMarryMgr().getMarryTotalInfo(marryId)
    if not marryTotalInfo:
        return
    myMarryInfo = marryTotalInfo.getInfoByGender(Base.Gender.MALE)
    if myMarryInfo.status != MsgDef.MarryStatusCmd.MARRY_STATUS_DIVORCING:#取消了
        ffext.dump('marry divorcing handleTimerDivorce cancel', marryId)
        return
    getMarryMgr().delMarryById(marryTotalInfo.marryId)

    husbend = marryTotalInfo.coupleData[0].getPlayer()
    wife    = marryTotalInfo.coupleData[1].getPlayer()

    from handler import  MarryHandler
    opstype = MsgDef.MarriageClientCmd.MARRY_DIVORCE_NORMAL
    if husbend:
        husbend.marriageCtrl.divorceForce()
        ret_msg = MarryHandler.processMarryOpsMsgRet(opstype, husbend)
        husbend.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)

    if wife:
        wife.marriageCtrl.divorceForce()
        ret_msg = MarryHandler.processMarryOpsMsgRet(opstype, wife)
        wife.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)

    # 更新数据库
    DbService.getPlayerService().updateMarryDivorce(marryTotalInfo.marryId)
    DbService.getPlayerService().updateMarryDivorcePlayer(marryTotalInfo.coupleData[0].uid)
    DbService.getPlayerService().updateMarryDivorcePlayer(marryTotalInfo.coupleData[1].uid)
예제 #7
0
파일: TeamModel.py 프로젝트: fanchy/spython
 def brotherInfo(ret):
     ffext.dump('brother init', ret.result)
     if ret.flag == False or len(ret.result) == 0:
         self.allBrotherList = {}
         return
     for i in range(0, len(ret.result)):
         brotherID = long(ret.result[i][0])
         if None == self.getBrotherById(brotherID):
             brotherCtrl = BrotherCtrl()
             brotherCtrl.bid = brotherID
             brotherCtrl.allBrothers = {}
             brotherCtrl.flag = True
             extra = str(ret.result[i][1])
             if extra != '':
                 extra = json.loads(extra)
                 if extra:
                     brotherCtrl.extra = extra
             brotherCtrl.ranking = 0
             self.allBrotherList[brotherCtrl.bid] = brotherCtrl
         brotherCtrl = self.getBrotherById(brotherID)
         playerBrotherInfo = PlayerBrotherInfo()
         playerBrotherInfo.setPlayerBrother(long(ret.result[i][2]),
                                            str(ret.result[i][3]),
                                            long(ret.result[i][4]),
                                            long(ret.result[i][5]),
                                            long(ret.result[i][6]))
         brotherCtrl.allBrothers[
             playerBrotherInfo.uid] = playerBrotherInfo
     return
예제 #8
0
def randsuit(session, args):
    xiongJiaCfgId = 0
    xiongJiaItem = session.player.itemCtrl.allEquiped.get(
        Base.EQUIP_XIONGJIA_POS, None)
    from handler import ItemHandler
    if xiongJiaItem:
        ffext.dump('randsuit...', xiongJiaItem.uid)
        ItemHandler.processUnEquipItem(session,
                                       MsgDef.EquipOpsReq(xiongJiaItem.uid))
        session.player.itemCtrl.delItem(xiongJiaItem.uid)
    itemCfgId = 30111113
    canUseCfgId = []
    needlv = 10  #session.player.level
    randomLv = [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
    lv = randomLv[random.randint(0, len(randomLv) - 1)]
    sql = "SELECT cfgid FROM  equipprop  WHERE itemtype = 103 AND job = " + str(
        session.player.job) + " and name like '%" + str(lv) + "级-品质1-1套'"
    db = ffext.allocDbConnection('cfg', ffext.getConfig('-cfg'))
    ret = db.queryResult(sql)
    if ret:
        result = ret.result
        ffext.dump('result:', result)
        randRow = result[random.randint(0, len(result) - 1)]
        itemCfgId = int(randRow[0])
    item = session.player.itemCtrl.addItemByCfgId(itemCfgId)

    ItemHandler.processEquipItem(session, MsgDef.EquipOpsReq(item.uid))
예제 #9
0
def create(srcMap = '10002'):
    ffext.dump(__name__, srcMap)
    h = ArenaCopy()
    mapObj = MapMgr.getMapMgr().createCopyMap(srcMap, h)
    h.mapname = mapObj.mapname
    
    return mapObj
예제 #10
0
def create(attackGuild, defendGuild, mgr, srcMap=CITYWAR_MAP_ID):
    ffext.dump(__name__, srcMap)
    h = CityWarCopy(attackGuild, defendGuild, mgr)
    mapObj = MapMgr.getMapMgr().createCopyMap(srcMap, h)
    h.mapname = mapObj.mapname

    return mapObj
예제 #11
0
 def checkNewTask(self, player):
     taskCtrl = player.taskCtrl
     for taskType, destList in self.type2Task.iteritems():
         ffext.dump('checkNewTask', player.name, taskType)
         if taskType not in (TaskType.MAIN_TASK, TaskType.BRANCH_TASK):
             continue
         if None != taskCtrl.getTaskByType(taskType):
             continue
         tid = destList[0].taskId
         if taskType == TaskType.BRANCH_TASK:
             taskCfg = self.getCfgById(tid)
             if not taskCfg:
                 continue
             if taskCfg.needLevel > player.level:
                 continue
         status = TaskStatus.INIT
         task = taskCtrl.addTaskById(tid, True, status)
         if taskType == TaskType.MAIN_TASK:
             taskCtrl.acceptTask(task.taskId)
             #第一个主线任务发对白
             cfg = task.taskCfg
             if cfg.acceptdialog:
                 player.sendMsg(MsgDef.ServerCmd.SHOW_PLAY,
                                MsgDef.ShowPlayRet(cfg.acceptdialog))
             elif cfg.acceptplay:
                 player.sendMsg(MsgDef.ServerCmd.SHOW_PLAY,
                                MsgDef.ShowPlayRet(cfg.acceptplay))
         ffext.info('uid=%d taskCtrl.addTaskById=%d' % (player.uid, tid))
     return True
예제 #12
0
 def onEnd(self):
     ffext.dump('CopyMapHandler onEnd', self.mapname)
     mapObj = MapMgr.getMapMgr().allocMap(self.mapname)
     ffext.dump('CopyMapHandler mapObj.allPlayer', len(mapObj.allPlayer))
     for k, v in mapObj.allPlayer.iteritems():
         v.sendMsg(MsgDef.ServerCmd.COPYMAP_END, MsgDef.CopymapEndRet(0, 0, 0, []))
     MapMgr.getMapMgr().closeCopyMap(self.mapname, '10001', 47, 171)
예제 #13
0
def traceTarge(monster, destX, destY, dist = 0):
    srcX = monster.x
    srcY = monster.y
    destDirection = Base.getDirection(srcX, srcY, destX, destY)
    #ffext.dump('move traceTarge', monster.name, srcX, srcY, destX, destY, destDirection)
    selectList = Base.MOVE_HELP_DIRECTION[destDirection]
    for direction in selectList:
        len = 1
        if dist >= 5:
            len = 5
        elif dist  >= 3:
            dist = 2
        else:
            len = 1
        newX, newY = Base.getPosByDirection(srcX, srcY, direction, len)
        monster.direction = direction
        if True == monster.mapObj.moveMonster(monster, newX, newY):
            return True
        else:
            newX, newY = Base.getPosByDirection(srcX, srcY, direction, 1)
            if True == monster.mapObj.moveMonster(monster, newX, newY):
                return True
            else:
                ffext.dump('move failed', monster.name, srcX, srcY, newX, newY, direction)
    return False
예제 #14
0
 def doCallBack(self, callbackId):
     ffext.dump('doCallBack', callbackId, self.callbackFuncs)
     func = self.callbackFuncs.pop(callbackId, None)
     if None != func:
         func[0](self, func[1])
         return True
     return False
예제 #15
0
파일: MailModel.py 프로젝트: fanchy/spython
def saveMailOffline(uid, mail):
    mailStr = mail.toJsonStr()
    if not mailStr or mailStr == '':
        return
    ffext.dump('mailStr', mailStr)
    DbService.getPlayerService().updateMail4Extend(uid, mailStr)
    return
예제 #16
0
 def sevenData2Cfg(self, row):
     id = int(row[0])
     loginDay = int(Base.parseStrBetween(row[1], '登录第', '天'))
     sevenCfg = SevenLoginRewardCfg(id, loginDay, row[2], int(row[3]),
                                    row[4], int(row[5]))
     ffext.dump(id, row[1], sevenCfg.loginDay)
     return sevenCfg
예제 #17
0
 def monsterLeaveMap(self, monster):  #怪物消失
     if monster.mapObj:
         ffext.dump('monsterLeaveMap', monster.name, monster.x, monster.y)
     ret = ffext.ff.obj_leave(monster, monster.uid, True)
     if ret != 0:
         return False
     monster.mapObj = None
     return monster
예제 #18
0
 def onEnd(self):
     ffext.dump('CopyMapHandler onEnd', self.mapname)
     mapObj = MapMgr.getMapMgr().allocMap(self.mapname)
     ffext.dump('CopyMapHandler mapObj.allPlayer', mapObj.getPlayerNum())
     #for k, v in mapObj.allPlayer.iteritems():
     #    v.sendMsg(MsgDef.ServerCmd.COPYMAP_END, MsgDef.CopymapEndRet(0, 0, 0, []))
     MapMgr.getMapMgr().closeCopyMap(self.mapname, '10001', 74, 35)
     self.guildInfo.closeCopyMap()
예제 #19
0
 def fromData(self, result):
     ffext.dump('petctrl fromdata', result)
     player = self.ownerref()
     for row in result:
         pet = Pet(player)
         if True == pet.fromData(row):
             self.allPet[pet.uid] = pet
     return True
예제 #20
0
    def update(self, monster, nowMs):
        if monster.hp <= 0:
            monster.lastAttackObjRef = None
            if nowMs < monster.nextMoveTm + 10*1000:
                return True
            else:
                if nowMs -  monster.tmpInfo.get('_killedtm_', 0) <= 2000:#2秒内不要消失
                    return True
                #先从地图上消失.,再出现
                mapObj = monster.mapObj
                oldMon = mapObj.monsterLeaveMap(monster)
                #ffext.dump('monster leave map start reborn', monster.name)
                def reborn():
                    oldMon.hp = oldMon.hpMax
                    oldMon.x = oldMon.bornX
                    oldMon.y = oldMon.bornY
                    mapObj.monsterEnterMap(oldMon, oldMon.x, oldMon.y)
                if mapObj.copyMapHandler == None and oldMon.rebornSec > 0:
                    ffext.timer(1000*oldMon.rebornSec, reborn)
                #ffext.dump('monster reborn', monster.name)
                return True
        if nowMs < monster.nextMoveTm:
            if monster.lastAttackObjRef != None:
                targetObj = monster.lastAttackObjRef()
                if targetObj != None:#直接进入攻击模式
                    ffext.dump(monster.name, 'find target', targetObj.name)
                    monster.fsm.changeState(ffext.singleton(StateAttack))
            return True
        #回血
        if monster.hp < monster.hpMax:
            nowTm = ffext.getTime()
            nAddHP = int((nowTm - monster.lastRecoverHPTM) * monster.hpMax / 100)
            if nAddHP > 0:
                monster.addHPMsg(nAddHP)
        # 如果仇恨列表中有敌人在线,那么切换到战斗状态
        if monster.aiFlag == 0:#被动攻击
            if monster.lastAttackObjRef != None:
                targetObj = monster.lastAttackObjRef()
                if targetObj != None:#直接进入攻击模式
                    ffext.dump(monster.name, 'find target', targetObj.name)
                    monster.fsm.changeState(ffext.singleton(StateAttack))
            return True
        enemyObj =  monster.selectEnemy()
        if enemyObj:
            monster.fsm.changeState(ffext.singleton(StateAttack))
            return True
        #先朝一个方向走,走到头,再随机选一个方向
        curDir = monster.direction
        if Base.distance(monster.x, monster.y, monster.bornX, monster.bornY) >= monster.calMaxReachEnemyDistance():
            curDir = int((curDir + 4 ) % 8)
        desrDir= Base.MOVE_HELP_DIRECTION[curDir]
        curDir = desrDir[random.randint(0, len(desrDir) - 1)]
        monster.direction = curDir
        x, y   = Base.getPosByDirection(monster.x, monster.y, curDir)

        monster.nextMoveTm = nowMs + random.randint(5000, 10000)
        monster.mapObj.moveMonster(monster, x, y)
        return True
예제 #21
0
 def updateGuildRankWarInvitedOverTime(self,
                                       memberUid,
                                       overTime,
                                       callback=None):
     sql = "update guildmemberinfo set rankWarInvitedOverTime = %d where uid = %d " % (
         overTime, memberUid)
     ffext.dump("sql", sql)
     DbServiceBase.getDB().query(sql, callback)
     return True
예제 #22
0
 def cbNewUser(retNew):
     accountId = long(retNew.result[0][0])
     session.user.accountid = accountId
     ffext.dump('cbNewUser', retNew, accountId)
     # 登录(new)-记录log
     LogModel.logLoginData(accountId, 0, '',
                           LogModel.LoginOpType.LOGIN_ACCOUNT,
                           LogModel.LoginReason.NEW_LOGIN)
     return
예제 #23
0
 def getDefaultSkillList(self, job):
     skillType = skillId2Type((job)*100+10)
     ffext.dump('get default skill type', skillType)
     ret = [self.getCfgByTypeLevel(skillType, 1)]#默认给一个1级的技能
     skillType2= skillType + 10
     cfg2 = self.getCfgByTypeLevel(skillType2, 0)
     if None != cfg2:
         ret.append(cfg2)
     return ret
예제 #24
0
    def __init__(self, cfg, mapname, width, height, allPos, keyName=None):
        self.cfg = cfg
        #self.keyName  = mapname#唯一性地图名
        self.showName = ''
        self.mapname = mapname
        self.tmxFilePath = ''  #地图文件名
        if keyName != None:
            self.mapname = str(keyName)
        self.width = width
        self.height = height
        self.allPos = allPos  #地图上所有点,index = Y * width + X
        self.allMovePos = []  #所有可以移动的点,方便随机
        self.allBlock = []  #地图被分成大格子,方便广播
        self.copyMapHandler = None  #副本处理事件的对象

        #先生成block点
        self.blockWidth = int(math.ceil(self.width * 1.0 /
                                        Base.MAP_BLOCK_SIZE))
        self.blockHeight = int(
            math.ceil(self.height * 1.0 / Base.MAP_BLOCK_SIZE))
        for y in range(self.blockHeight):
            for x in range(self.blockWidth):
                self.allBlock.append(MapBlock())

        def calBlockIndex(x, y):
            blockX = int(math.ceil(x * 1.0 / Base.MAP_BLOCK_SIZE))
            if blockX > 0:
                blockX -= 1
            blockY = int(math.ceil(y * 1.0 / Base.MAP_BLOCK_SIZE))
            if blockY > 0:
                blockY -= 1
            return blockY * self.blockWidth + blockX

        #整理一下数据结构
        for y in range(self.height):
            for x in range(self.width):
                index = y * width + x

                if index >= len(self.allPos):
                    ffext.dump('MapObj init out range', x, y)
                    continue
                val = self.allPos[index]
                # if x == 85 and y == 165:
                #     ffext.dump('MapObj init x, y, val',x, y, val)
                # if x == 27 and y == 4:
                #     ffext.dump('MapObj init x, y, val',x, y, val)

                if val == 0:
                    self.allPos[index] = None
                else:
                    self.allMovePos.append((x, y))
                    self.allPos[index] = MapPos(calBlockIndex(x,
                                                              y))  #存储id-> obj

        #上次更新怪物的时间
        self.lastMonsterUpdateMs = 0
예제 #25
0
 def addBrother(self, bid, uid1, uid2, uid3):
     sql = "insert into brother (bid, uid1, uid2, uid3, extra) values (%d, %d, %d, %d, '') " % (
         bid, uid1, uid2, uid3)
     ffext.dump(sql)
     DbServiceBase.getDB().query(sql)
     sql = 'update player set brotherid =%d where uid in (%d,%d,%d)' % (
         bid, uid1, uid2, uid3)
     DbServiceBase.getDB().query(sql)
     ffext.dump(sql)
     return True
예제 #26
0
 def doOps():
     mapObj = self.allMap.pop(mapname, None)
     if None == mapObj:
         return None
     self.allCopyMap.pop(mapname, None)
     #如果地图上有人,那么踢人
     self.kickoutTo(mapObj, kickpoutMap, x, y)
     #如果有怪,那么把怪给释放掉, 这个时候已经没有人了,不用广播消息了,直接把怪物释放掉即可
     mapObj.cleanup()
     ffext.dump('closeCopyMap', mapname)
예제 #27
0
def create(srcMap='10002'):
    ffext.dump(__name__, srcMap)
    h = TestCopy()
    mapObj = MapMgr.getMapMgr().createCopyMap(srcMap, h)
    h.mapname = mapObj.mapname
    for k in MonsterModel.getMonsterMgr().mnstergen:
        MonsterModel.genMonster(mapObj.mapname, k[1], k[2], k[3], k[4], k[5],
                                k[6])
        break
    return mapObj
예제 #28
0
    def init(self):  #读取配置
        db = ffext.allocDbConnection('cfg', ffext.getConfig('-cfg'))
        ret = db.queryResult(
            'select quality,level,expMax,needlevel,hp,mp,physic_attack_min,physic_attack_max,magic_attack_min,magic_attack_max,physic_defend_min,physic_defend_max,\
magic_defend_min,magic_defend_max,crit,hit,avoid,attackspeed,attacksing,attackinterval,attackdistance,movespeed,hurtabsorb,hpabsorb, cfgid from pet'
        )
        self.allCfg = {}

        def toNum(s, d=0):
            if s != '':
                return int(s)
            return d

        def toFloat(s, d=0.0):
            if s != '':
                m = s.replace('%', '')
                return float(m)
            return d

        for row in ret.result:
            cfg = PetCfg()
            cfg.quality = row[0]
            cfg.level = int(row[1])
            cfg.expMax = toNum(row[2])
            cfg.needlevel = toNum(row[3])
            cfg.hp = toNum(row[4])
            cfg.mp = toNum(row[5])
            cfg.physicAttackMin = toNum(row[6])
            cfg.physicAttackMax = toNum(row[7])
            cfg.magicAttackMin = toNum(row[8])
            cfg.magicAttackMax = toNum(row[9])
            cfg.physicDefendMin = toNum(row[10])
            cfg.physicDefendMax = toNum(row[11])
            cfg.magicDefendMin = toNum(row[12])
            cfg.magicDefendMax = toNum(row[13])
            cfg.crit = int(toFloat(row[14]) * Base.CRIT_RATE_BASE / 100)
            cfg.hit = int(toFloat(row[15]) * Base.HIT_RATE_BASE / 100)
            cfg.avoid = int(toFloat(row[16]) * Base.AVOID_RATE_BASE / 100)
            cfg.attackspeed = toNum(row[17])
            cfg.attacksing = toNum(row[18])
            cfg.attackinterval = toNum(row[19])
            cfg.attackdistance = toNum(row[20])
            cfg.movespeed = toNum(row[21])
            cfg.hurtabsorb = toNum(row[22])
            cfg.hpabsorb = toNum(row[23])
            cfg.petType = self.str2Type[cfg.quality]
            destDict = self.allCfg.get(cfg.petType)
            cfg.cfgid = toNum(row[24])
            if None == destDict:
                destDict = {}
                self.allCfg[cfg.petType] = destDict
            destDict[cfg.level] = cfg
            self.id2cfg[cfg.cfgid] = cfg
        ffext.dump('load pet num=%d' % (len(ret.result)))
        return True
예제 #29
0
def processUpdateSkillPosReq(session, msg):
    ffext.dump('processUpdateSkillPosReq', msg)
    player = session.player
    for pos,skillId in msg.skill2pos.iteritems():
        skill = player.skillCtrl.getSkillById(skillId)
        if not skill:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG, buildErrMsg(MsgDef.ClientCmd.UPDATE_SKILL_POS, '技能不存在'))
            continue
        skill.position = pos
    session.sendMsg(MsgDef.ServerCmd.UPDATE_SKILL_POS, MsgDef.UpdateSkillPosRet(msg.skill2pos))
    return
예제 #30
0
    def onWeeklyNightEvent(self):
        ffext.dump(
            "***************** New Week Process Begin ... ******************:",
            ffext.getTime())

        #所有在线玩家对象,每日refresh
        ffext.getSessionMgr().foreach(self.weeklyRefresh4Session)

        ffext.dump(
            "***************** New Week Process End ... ******************:",
            ffext.getTime())
        return True