Example #1
0
    def login(self,loginIp=None,loginMode=None):
        '''登入时调用的方法'''
        now = time.time()
        sql = "UPDATE tb_user SET LastLoginTime=UNIX_TIMESTAMP(),Online=1,LoginTimes=LoginTimes+1 WHERE UserId=%s"%self.uid
        self.db.execute(sql)
        
        #if not self.uid in Gcore.StorageUser: #缓存基础用户信息
        if 1: # fixed by zhoujingjiang
            self.cacheUserData(self.uid)

        UserType = Gcore.getUserData(self.uid,'UserType')   
        #添加登录日志
#         loginLogTB = 'tb_log_login201306'
        loginLogTB = self.tb_log_login()
        data = {'UserId':self.uid,'LoginTime':now,'UserType':UserType,
                'LoginModel':loginMode,'LoginIP':loginIp}
        self.logId = self.db.insert(loginLogTB,data)
        print self.uid,'login get logId:%s at %s'%(self.logId,now)
        
        key = Gcore.redisKey(self.uid)
        Gcore.redisM.hset('sgLogin',key,'1')
        UserLevel = self.getUserLevel()
        modActivity=Gcore.getMod('Activity',self.uid)
        modActivity.signin(0,'')
        if UserLevel>=Gcore.loadCfg(9301).get('FightLevel'):
            row = {}
            row['Online']=1 
            row['UserId']=self.uid
Example #2
0
    def login(self, loginIp=None, loginMode=None):
        '''登入时调用的方法'''
        now = time.time()
        sql = "UPDATE tb_user SET LastLoginTime=UNIX_TIMESTAMP(),Online=1,LoginTimes=LoginTimes+1 WHERE UserId=%s" % self.uid
        self.db.execute(sql)

        #if not self.uid in Gcore.StorageUser: #缓存基础用户信息
        if 1:  # fixed by zhoujingjiang
            self.cacheUserData(self.uid)

        UserType = Gcore.getUserData(self.uid, 'UserType')
        #添加登录日志
        #         loginLogTB = 'tb_log_login201306'
        loginLogTB = self.tb_log_login()
        data = {
            'UserId': self.uid,
            'LoginTime': now,
            'UserType': UserType,
            'LoginModel': loginMode,
            'LoginIP': loginIp
        }
        self.logId = self.db.insert(loginLogTB, data)
        print self.uid, 'login get logId:%s at %s' % (self.logId, now)

        key = Gcore.redisKey(self.uid)
        Gcore.redisM.hset('sgLogin', key, '1')
        UserLevel = self.getUserLevel()
        modActivity = Gcore.getMod('Activity', self.uid)
        modActivity.signin(0, '')
        if UserLevel >= Gcore.loadCfg(9301).get('FightLevel'):
            row = {}
            row['Online'] = 1
            row['UserId'] = self.uid
Example #3
0
 def addProtectHoldTime(self, second):
     '''添加藩国保护时间 by Qiudx'''
     second = int(second)
     now = Gcore.common.nowtime()
     protectHoldEndTime = self.getUserInfo('ProtectHoldEndTime')
     if protectHoldEndTime < now:
         protectHoldEndTime = now + second
     else:
         protectHoldEndTime += second
     sql = 'UPDATE tb_user SET ProtectHoldEndTime=%s WHERE UserId=%s'%(protectHoldEndTime, self.uid)
     self.db.execute(sql)
     Gcore.redisM.hset('sgProtectHold', Gcore.redisKey(self.uid), protectHoldEndTime)
     return protectHoldEndTime
Example #4
0
 def addProtectHoldTime(self, second):
     '''添加藩国保护时间 by Qiudx'''
     second = int(second)
     now = Gcore.common.nowtime()
     protectHoldEndTime = self.getUserInfo('ProtectHoldEndTime')
     if protectHoldEndTime < now:
         protectHoldEndTime = now + second
     else:
         protectHoldEndTime += second
     sql = 'UPDATE tb_user SET ProtectHoldEndTime=%s WHERE UserId=%s' % (
         protectHoldEndTime, self.uid)
     self.db.execute(sql)
     Gcore.redisM.hset('sgProtectHold', Gcore.redisKey(self.uid),
                       protectHoldEndTime)
     return protectHoldEndTime
Example #5
0
 def addProtectTime(self,second):
     '''添加保护时间By Yew  此方法是对的 by Lizr'''
     second = int(second)
     now=Gcore.common.nowtime()
     protectEndTime=self.getUserInfo('ProtectEndTime')
     if protectEndTime<now:
         protectEndTime=now+second
     else:
         protectEndTime=protectEndTime+second
     
     sql='UPDATE tb_user SET ProtectEndTime=%s WHERE UserId=%s'%(protectEndTime,self.uid)
     self.db.execute(sql)
     Gcore.redisM.hset('sgProtect', Gcore.redisKey(self.uid), protectEndTime) #更新总服redis 其他人不可以攻打
     #Gcore.sendmq(1, 10000, {'UserId':self.uid,'protectEndTime':protectEndTime}) #发送到总服更新 攻城查找表
     
     return protectEndTime   #返回保护结束时间 by qiudx 2013/06/27
Example #6
0
 def getProtectHoldTime(self, PeerUID, PeerSID, tm):
     '''获取调停保护时间 add by qiudx 2013/07/11'''
     tm = tm if tm else int(time.time())
     if PeerSID == self.serverid:
         pMod = Gcore.getMod('Player', PeerUID)
         protectHoldEndTime = pMod.getUserInfo('ProtectHoldEndTime')
         protectTime = protectHoldEndTime - tm
         protectTime = protectTime if protectTime > 0 else 0
     else:
         peerKey = Gcore.redisKey(PeerUID)
         protectHoldEndTime = Gcore.redisM.hget('sgProtectHold', peerKey)
         if protectHoldEndTime and protectHoldEndTime > tm:
             protectTime = protectHoldEndTime - tm
         else:
             protectTime = 0
     return protectTime
Example #7
0
    def addProtectTime(self, second):
        '''添加保护时间By Yew  此方法是对的 by Lizr'''
        second = int(second)
        now = Gcore.common.nowtime()
        protectEndTime = self.getUserInfo('ProtectEndTime')
        if protectEndTime < now:
            protectEndTime = now + second
        else:
            protectEndTime = protectEndTime + second

        sql = 'UPDATE tb_user SET ProtectEndTime=%s WHERE UserId=%s' % (
            protectEndTime, self.uid)
        self.db.execute(sql)
        Gcore.redisM.hset('sgProtect', Gcore.redisKey(self.uid),
                          protectEndTime)  #更新总服redis 其他人不可以攻打
        #Gcore.sendmq(1, 10000, {'UserId':self.uid,'protectEndTime':protectEndTime}) #发送到总服更新 攻城查找表

        return protectEndTime  #返回保护结束时间 by qiudx 2013/06/27
Example #8
0
 def collect(self, uid, sid, jr, gr, ts):
     '''纳贡'''
     jr=abs(jr)
     gr=abs(gr)
     if jr or gr:
         if sid == self.serverid: #本服
             sql = "UPDATE tb_hold SET JcoinGive=JcoinGive-'%s',GcoinGive=GcoinGive-'%s' WHERE HolderId='%s' AND GiverId='%s'" \
             %(jr,gr,self.uid, uid)
             self.db.execute(sql)
             
         else: #非本服,更新总服redis
             key = '%s.%s' % (sid, uid)
             key+=Gcore.redisKey(self.uid)
             
             jr = int(jr)*-1
             gr = int(gr)*-1
             Gcore.redisM.hincrby('sgHoldJcoin',key,jr)
             Gcore.redisM.hincrby('sgHoldJcoin',key,gr)
     return True
Example #9
0
    def logout(self):
        '''登出时调用的方法'''
        now = time.time()
        sql = "UPDATE tb_user SET LastLogoutTime=UNIX_TIMESTAMP(),Online=0 WHERE UserId=%s" % self.uid
        #print sql
        self.db.execute(sql)
        #更新登录日志

        loginLogTB = self.tb_log_login()
        if self.logId:
            loginLogId = self.logId
        else:
            loginLogId = self.db.out_field(
                loginLogTB, 'LogId',
                'UserId=%s ORDER BY LogId DESC LIMIT 0,1' % self.uid)

        sql = '''UPDATE %s  
                SET LogoutTime=%s,OnlineTime=%s-LoginTime  
                WHERE LogId=%s''' % (loginLogTB, now, now, loginLogId)
        print self.uid, 'logout at %s' % now, sql
        self.db.execute(sql)

        Gcore.getMod('Redis', self.uid).offCacheAll()  #更新Redis

        row = self.getUserInfo(
            ['UserId', 'UserLevel', 'UserCamp',
             'ProtectEndTime'])  #只是用于查询 不是十分准确
        if row['UserLevel'] >= Gcore.loadCfg(9301).get('FightLevel'):
            row['Online'] = 0
            #Gcore.sendmq(1, 10000, row) #发送到总服更新

        key = Gcore.redisKey(self.uid)
        ProtectEndTime = Gcore.redisM.hget('sgProtect', key)
        if not ProtectEndTime:
            ProtectEndTime = 0
        if row['ProtectEndTime'] > int(ProtectEndTime):  #更新保护时间
            Gcore.redisM.hset('sgProtect', key, row['ProtectEndTime'])

        modActivity = Gcore.getMod('Activity', self.uid)
        modActivity.refreashTime()  #在线奖励活动更新时间 Yew

        Gcore.redisM.hdel('sgLogin', key)
Example #10
0
 def isMyHold(self, uid, sid):
     '''判断是否是我的藩国
     @note 如果是我的藩国,返回(可纳贡的军资,可纳贡的铜币),否则返回False
     '''
     
     if sid == self.serverid:#本服
         table = 'tb_hold'
         fields = ['JcoinGive', 'GcoinGive']
         where = 'HolderId="%s" AND GiverId="%s"' % (self.uid, uid)
         res = self.db.out_fields(table, fields, where)
         return False if not res else (res["JcoinGive"], res["GcoinGive"])
     else: #跨服
         try:
             key = '%s.%s' %(sid, uid)
             key += Gcore.redisKey(self.uid)
             Jcoin = Gcore.redisM.hget('sgHoldJcoin', key)
             Gcoin = Gcore.redisM.hget('sgHoldGcoin', key)
             return (int(Jcoin), int(Gcoin))
         except Exception, e:
             print str(e)
             return False
Example #11
0
    def logout(self):
        '''登出时调用的方法'''
        now = time.time()
        sql = "UPDATE tb_user SET LastLogoutTime=UNIX_TIMESTAMP(),Online=0 WHERE UserId=%s"%self.uid
        #print sql
        self.db.execute(sql)
        #更新登录日志

        loginLogTB = self.tb_log_login()
        if self.logId:
            loginLogId = self.logId
        else:
            loginLogId = self.db.out_field(loginLogTB,'LogId','UserId=%s ORDER BY LogId DESC LIMIT 0,1'%self.uid)
            
        sql = '''UPDATE %s  
                SET LogoutTime=%s,OnlineTime=%s-LoginTime  
                WHERE LogId=%s'''%(loginLogTB,now,now,loginLogId)
        print self.uid,'logout at %s'%now,sql
        self.db.execute(sql)
        
        Gcore.getMod('Redis', self.uid).offCacheAll() #更新Redis
        
        row = self.getUserInfo(['UserId','UserLevel','UserCamp','ProtectEndTime']) #只是用于查询 不是十分准确
        if row['UserLevel']>=Gcore.loadCfg(9301).get('FightLevel'):
            row['Online']=0 
            #Gcore.sendmq(1, 10000, row) #发送到总服更新
        
        key = Gcore.redisKey(self.uid)
        ProtectEndTime = Gcore.redisM.hget('sgProtect',key)
        if not ProtectEndTime:
            ProtectEndTime = 0
        if row['ProtectEndTime'] > int(ProtectEndTime): #更新保护时间
            Gcore.redisM.hset('sgProtect',key,row['ProtectEndTime'])
        
        modActivity=Gcore.getMod('Activity',self.uid)
        modActivity.refreashTime()#在线奖励活动更新时间 Yew
        
        Gcore.redisM.hdel('sgLogin',key)
Example #12
0
                if v_fields[0] == Gcore.getServerId():
                    continue

                endtime, lastcollecttime = v_fields[4:]
                seconds = int(min(endtime, curtime) - lastcollecttime)
                jc = int(seconds * (Speed.get(uid, {}).get(1, 0) / 3600.))
                gc = int(seconds * (Speed.get(uid, {}).get(2, 0) / 3600.))
                print 'jc', jc, 'gc', gc

                incdic[uid] = {1: jc, 2: gc}

                v = '.'.join(map(str, v_fields[0:5] + [int(curtime)]))
                redis_client.hset('sgHold', giver, v)

                #by Lizr
                key = Gcore.redisKey(uid) + '%s.%s' % (v_fields[0],
                                                       v_fields[1])
                redis_client.hincrby('sgHoldJcoin', key, jc)
                redis_client.hincrby('sgHoldGcoin', key, gc)

            except Exception, e:
                print 'error', e
                raise

        #进贡记录
        table = 'tb_hold_log'
        where = 'UserId=' + ' OR UserId= '.join(map(str, uids))
        jstr = 'CASE UserId '
        gstr = ' CASE UserId'
        for UserId in uids:
            jstr += ' WHEN %d THEN %d' % (UserId, incdic.get(UserId, {}).get(
Example #13
0
    def setHold(self, PeerUID, PeerSID):
        '''设置别人成为藩国'''
        #根据配置得出自动解除的天
        HoldConfig = Gcore.loadCfg(Gcore.defined.CFG_BUILDING_HOLD)
        RemoveRatio = HoldConfig['RemoveRatio']
        d = None
        for ind in range(1, len(RemoveRatio) + 1, 1):
            r = random.random()
            if  r <= RemoveRatio[str(ind)]:
                d = ind
                break

        #初始化元数据
        BeginTime = int(time.time()) #开始时间
        EndTime = BeginTime + int(d * 24 * 60 * 60) #预计结束时间(自动解除时间)
        # + StopTime是真正结束的时间:默认是EndTime
        # + LastCollectTime是最近一次奴隶的自动收集资源时间
        StopTime, LastCollectTime = EndTime, BeginTime    
        Jcoin, Gcoin = 0, 0 #奴隶的贡献
        
        print '是否是本服', PeerSID == self.serverid, PeerSID, self.serverid
        if PeerSID == self.serverid: #本服
            print '本服'
            pMod = Gcore.getMod('Player', PeerUID)
            protectHoldEndTime = pMod.getUserInfo('ProtectHoldEndTime')
            if BeginTime < protectHoldEndTime:
                return -1   #对方处于保护时间内,设置失败add by qiudx
            
            Data = Gcore.getMod('Building_resource',PeerUID).collectAll() #将地里的资源以自由身的身份收集一次
            Data['HoldEndTime'] = EndTime if not Gcore.TEST else int(time.time()+180)
            Data['HolderName'] = Gcore.getUserData(self.uid,'NickName')
            Data['GiveRatio'] = Gcore.loadCfg(1506).get('GiveRatio',0.05)
            Gcore.push(112, PeerUID, Data,Type=1)
            
            # + 更新用户表
            arr = {'HolderId':self.uid,'HolderServerId':self.serverid,'HoldEndTime':EndTime}
            self.db.update('tb_user', arr, 'UserId=%s' % PeerUID)
            # + 插入本服藩国记录
            arr = {"HolderId":self.uid, "GiverId":PeerUID, "LastCollectTime":LastCollectTime,
                   "JcoinGive":Jcoin, "GcoinGive":Gcoin, "StopTime":StopTime, 
                   "BeginTime": BeginTime, "EndTime":EndTime}
            #self.db.insert('tb_hold', arr)
            self.db.insert_update('tb_hold', arr, {"GiverId":PeerUID} )
            
            # + 插入纳贡记录
            arr = {"UserId":PeerUID, "HolderId":self.uid, "Gcoin":0,
                   "HolderServerId":self.serverid, "Jcoin":0, "LastGiveTime":BeginTime}
            self.db.insert_update('tb_hold_log', arr, {"UserId":PeerUID} )
            
            # + 插入藩国反抗记录
            date = datetime.date.strftime(datetime.date.fromtimestamp(BeginTime), "%Y-%m-%d")
            arr = {"UserId":PeerUID, "HolderId":self.uid, "HolderServerId":self.serverid,
                   "ProcessTotal":0, "RevengeCount":0, "LastRevengeDate":date}
            self.db.insert_update('tb_hold_revenge', arr, {"UserId":PeerUID} )
        else: #非本服,发消息
            peerKey = Gcore.redisKey(PeerUID)
            protectHoldEndTime = Gcore.redisM.hget('sgProtectHold', peerKey)
            if BeginTime < protectHoldEndTime:
                return -1   #潘国保护时间内,设置失败
            Gcore.sendmq(1, PeerSID, {'HolderId':self.uid,
                                      'HolderServerId':self.serverid,
                                      'GiverId':PeerUID,
                                      'EndTime':int(EndTime)})
        k = '%s.%s' % (PeerSID, PeerUID)
        v = '%s.%s.%s.%s.%s.%s' % (self.serverid, self.uid, BeginTime, StopTime, EndTime, LastCollectTime)
        Gcore.redisM.hset('sgHold', k, v) #货币相关已独立出来 by Lizr
        k += Gcore.redisKey(self.uid)
        Gcore.redisM.hset('sgHoldJcoin', k, 0) #1.1008.2.1001  前面是进贡的人 后面的纳贡的人
        Gcore.redisM.hset('sgHoldGcoin', k, 0)
        return True
Example #14
0
                if v_fields[0] == Gcore.getServerId():
                    continue
                
                endtime, lastcollecttime = v_fields[4:]
                seconds = int(min(endtime, curtime) - lastcollecttime)
                jc = int(seconds*(Speed.get(uid, {}).get(1, 0) / 3600.))
                gc = int(seconds*(Speed.get(uid, {}).get(2, 0) / 3600.))
                print 'jc', jc, 'gc',gc

                incdic[uid]={1:jc,2:gc}

                v = '.'.join(map(str, v_fields[0:5] + [int(curtime)]))
                redis_client.hset('sgHold', giver, v)
                
                #by Lizr
                key = Gcore.redisKey(uid)+'%s.%s'%(v_fields[0],v_fields[1])
                redis_client.hincrby('sgHoldJcoin',key,jc)
                redis_client.hincrby('sgHoldGcoin',key,gc)
                
            except Exception, e:
                print 'error', e
                raise

        #进贡记录
        table = 'tb_hold_log'
        where = 'UserId=' + ' OR UserId= '.join(map(str, uids))
        jstr = 'CASE UserId '
        gstr = ' CASE UserId'
        for UserId in uids:
            jstr += ' WHEN %d THEN %d' % (UserId, incdic.get(UserId, {}).get(1, 0))
            gstr += ' WHEN %d THEN %d' % (UserId, incdic.get(UserId, {}).get(2, 0))