def freed(self, huid, hsid): #玩家达到一定要求,被释放。 '''被释放 , 玩家使用调解卡时调用,释放自己 @param huid: 主人的用户ID @param hsid: 主人的服务器ID ''' if hsid == self.serverid: #占领者在本服 Data = Gcore.getMod('Building_resource',self.uid).collectAll() #将地里的资源以被占领的身份收集一次 Data['HoldEndTime'] = 0 Gcore.push(112, self.uid, Data,Type=0) #查出进贡的钱 row = self.db.out_fields('tb_hold', ["JcoinGive", "GcoinGive"],\ 'GiverId="%s" AND HolderId="%s"'%(self.uid, huid)) if row: ja, ga = row["JcoinGive"], row["GcoinGive"] modCoin = Gcore.getMod('Coin', huid) j = modCoin.GainCoin(0, 2, ja, 'Building_holdMod.freed', {'hsid':hsid, 'huid':huid}) g = modCoin.GainCoin(0, 3, ga, 'Building_holdMod.freed', {'hsid':hsid, 'huid':huid}) dic = {'HolderId':0,'HolderServerId':0,'HoldEndTime':0} self.db.update('tb_user', dic, 'UserId="%s"' % self.uid) self.db.execute('DELETE FROM `tb_hold` WHERE GiverId="%s" AND HolderId="%s"' % (self.uid, huid)) self.db.execute('DELETE FROM `tb_hold_log` WHERE UserId="%s"' % self.uid) self.db.execute('DELETE FROM `tb_hold_revenge` WHERE UserId="%s"' % self.uid) else: #占领者不在本服 Gcore.sendmq(3, hsid, {'HolderId':huid, 'GiverServerId':self.serverid, 'GiverId':self.uid}) #删除自己的藩国redis Gcore.redisM.hdel("sgHold", '%s.%s' % (self.serverid, self.uid)) return 1
def free(self, uid, sid, ts=None): """释放""" if self.serverid == sid: # 本服 dic = {"HolderId": 0, "HolderServerId": 0, "HoldEndTime": 0} self.db.update("tb_user", dic, 'UserId="%s"' % uid) self.db.execute('DELETE FROM `tb_hold` WHERE GiverId="%s" AND HolderId="%s"' % (uid, self.uid)) self.db.execute('DELETE FROM `tb_hold_log` WHERE UserId="%s"' % uid) self.db.execute('DELETE FROM `tb_hold_revenge` WHERE UserId="%s"' % uid) else: # 非本服 Gcore.sendmq(2, sid, {"GiverId": uid}) Gcore.redisM.hdel("sgHold", "%s.%s" % (sid, uid)) return True
def free(self, uid, sid, ts=None): '''释放''' if self.serverid == sid: #本服 dic = {'HolderId': 0, 'HolderServerId': 0, 'HoldEndTime': 0} self.db.update('tb_user', dic, 'UserId="%s"' % uid) self.db.execute( 'DELETE FROM `tb_hold` WHERE GiverId="%s" AND HolderId="%s"' % (uid, self.uid)) self.db.execute('DELETE FROM `tb_hold_log` WHERE UserId="%s"' % uid) self.db.execute('DELETE FROM `tb_hold_revenge` WHERE UserId="%s"' % uid) else: #非本服 Gcore.sendmq(2, sid, {'GiverId': uid}) Gcore.redisM.hdel("sgHold", '%s.%s' % (sid, uid)) return True
def free(self, uid, sid, ts=None): '''主动释放别人''' if self.serverid == sid: #本服 Data = Gcore.getMod('Building_resource',uid).collectAll() #被释放前,以被占领的身份收集一次 Data['HoldEndTime'] = 0 Gcore.push(112, uid, Data,Type=0) dic = {'HolderId':0,'HolderServerId':0,'HoldEndTime':0} self.db.update('tb_user', dic, 'UserId="%s"' % uid) self.db.execute('DELETE FROM `tb_hold` WHERE GiverId="%s" AND HolderId="%s"' % (uid, self.uid)) self.db.execute('DELETE FROM `tb_hold_log` WHERE UserId="%s"' % uid) self.db.execute('DELETE FROM `tb_hold_revenge` WHERE UserId="%s"' % uid) else: #非本服 Gcore.sendmq(2, sid, {'GiverId':uid}) Gcore.redisM.hdel("sgHold", '%s.%s' % (sid, uid)) return True
def freed(self, huid, hsid): #玩家达到一定要求,被释放。 '''被释放''' if hsid == self.serverid: #占领者在本服 #查出进贡的钱 row = self.db.out_fields('tb_hold', ["JcoinGive", "GcoinGive"],\ 'GiverId="%s" AND HolderId="%s"'%(self.uid, huid)) if not row: return -1 ja, ga = row["JcoinGive"], row["GcoinGive"] modCoin = Gcore.getMod('Coin', huid) j = modCoin.GainCoin(0, 2, ja, 'Building_holdMod.freed', { 'hsid': hsid, 'huid': huid }) g = modCoin.GainCoin(0, 3, ga, 'Building_holdMod.freed', { 'hsid': hsid, 'huid': huid }) if j < -1 or g < -1: return -2 #占领者收钱失败 dic = {'HolderId': 0, 'HolderServerId': 0, 'HoldEndTime': 0} self.db.update('tb_user', dic, 'UserId="%s"' % self.uid) self.db.execute( 'DELETE FROM `tb_hold` WHERE GiverId="%s" AND HolderId="%s"' % (self.uid, huid)) self.db.execute('DELETE FROM `tb_hold_log` WHERE UserId="%s"' % self.uid) self.db.execute('DELETE FROM `tb_hold_revenge` WHERE UserId="%s"' % self.uid) else: #占领者不在本服 Gcore.sendmq( 3, hsid, { 'HolderId': huid, 'GiverServerId': self.serverid, 'GiverId': self.uid }) return 1
def freed(self, huid, hsid): # 玩家达到一定要求,被释放。 """被释放""" if hsid == self.serverid: # 占领者在本服 # 查出进贡的钱 row = self.db.out_fields( "tb_hold", ["JcoinGive", "GcoinGive"], 'GiverId="%s" AND HolderId="%s"' % (self.uid, huid) ) if not row: return -1 ja, ga = row["JcoinGive"], row["GcoinGive"] modCoin = Gcore.getMod("Coin", huid) j = modCoin.GainCoin(0, 2, ja, "Building_holdMod.freed", {"hsid": hsid, "huid": huid}) g = modCoin.GainCoin(0, 3, ga, "Building_holdMod.freed", {"hsid": hsid, "huid": huid}) if j < -1 or g < -1: return -2 # 占领者收钱失败 dic = {"HolderId": 0, "HolderServerId": 0, "HoldEndTime": 0} self.db.update("tb_user", dic, 'UserId="%s"' % self.uid) self.db.execute('DELETE FROM `tb_hold` WHERE GiverId="%s" AND HolderId="%s"' % (self.uid, huid)) self.db.execute('DELETE FROM `tb_hold_log` WHERE UserId="%s"' % self.uid) self.db.execute('DELETE FROM `tb_hold_revenge` WHERE UserId="%s"' % self.uid) else: # 占领者不在本服 Gcore.sendmq(3, hsid, {"HolderId": huid, "GiverServerId": self.serverid, "GiverId": self.uid}) return 1
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 '本服' # + 更新用户表 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) print self.db.sql # + 插入纳贡记录 arr = { "UserId": PeerUID, "HolderId": self.uid, "Gcoin": 0, "HolderServerId": self.serverid, "Jcoin": 0, "LastGiveTime": BeginTime } self.db.insert('tb_hold_log', arr) # + 插入藩国反抗记录 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('tb_hold_revenge', arr) else: #非本服,发消息 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.%s.%s' % (self.serverid, self.uid, BeginTime, StopTime, EndTime, LastCollectTime, Jcoin, Gcoin) Gcore.redisM.hset('sgHold', k, v) #Gcore.redisM.hset('sgHoldJcoin', k, 0) #Gcore.redisM.hset('sgHoldGcoin', k, 0) return True
2, 0)) jstr += ' END ' gstr += ' END ' sql = 'UPDATE tb_hold_log SET Jcoin = Jcoin+%s, Gcoin = Gcoin+%s, LastGiveTime="%s" WHERE %s' \ % (jstr, gstr, curtime, where) db.execute(sql) print '进贡日志:', sql #自动解除关系 (前台自己到时间,请求接口,自动更新资源情况) for row in rows: if row["HoldEndTime"] > curtime + 600: #提前10分钟释放 continue if row["HolderServerId"] == Gcore.getServerId(): #本服 ui = Gcore.getUI('Building_hold', row["HolderId"]) ui.SlaveOperand({ 'typ': 2, 'uid': row["UserId"], 'sid': Gcore.getServerId() }) else: #非本服,发消息 msg = { 'HolderId': row["HolderId"], "GiverId": row["UserId"], "GiverServerId": Gcore.getServerId() } Gcore.sendmq(3, int(row["HolderServerId"]), msg) cnt += 1 runtime = time.time() - curtime print 'Finish at:', Gcore.common.now() print 'Total Runtime:', runtime
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
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 "本服" # + 更新用户表 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) print self.db.sql # + 插入纳贡记录 arr = { "UserId": PeerUID, "HolderId": self.uid, "Gcoin": 0, "HolderServerId": self.serverid, "Jcoin": 0, "LastGiveTime": BeginTime, } self.db.insert("tb_hold_log", arr) # + 插入藩国反抗记录 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("tb_hold_revenge", arr) else: # 非本服,发消息 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.%s.%s" % ( self.serverid, self.uid, BeginTime, StopTime, EndTime, LastCollectTime, Jcoin, Gcoin, ) Gcore.redisM.hset("sgHold", k, v) # Gcore.redisM.hset('sgHoldJcoin', k, 0) # Gcore.redisM.hset('sgHoldGcoin', k, 0) return True
chan = self.ensure_chan() message = amqp.Message(str(msg)) message.properties['delivery_mode'] = 2 toServerId = msg['toServerId'] eid = toServerId % config.EXCHANGE_NUM if eid==0: eid = config.EXCHANGE_NUM chan.basic_publish(message, exchange='sggameexchange%d'%eid, routing_key=str(toServerId)) def ensure_chan(self): '''获取channel''' if not isinstance(self.con, amqp.connection.Connection): self.con = amqp.Connection(host=config.MQ_HOST, userid=config.MQ_UID, \ password=config.MQ_PWD, virtual_host=config.MQ_VHOST, insit=False) else: for k in self.con.channels: if isinstance(self.con.channels[k], amqp.channel.Channel): return self.con.channels[k] return self.con.channel() if '__main__' == __name__: '''调试''' r = Rabbit() #print r.put({'toServerId':2, 'optId':15013}) #print r.loop() Gcore.sendmq(15013, 1,{'jj':'sb'}) print 'before sleep' time.sleep(10) print 'end'
#进贡记录 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)) jstr += ' END ' gstr += ' END ' sql = 'UPDATE tb_hold_log SET Jcoin = Jcoin+%s, Gcoin = Gcoin+%s, LastGiveTime="%s" WHERE %s' \ % (jstr, gstr, curtime, where) db.execute(sql) print '进贡日志:',sql #自动解除关系 (前台自己到时间,请求接口,自动更新资源情况) for row in rows: if row["HoldEndTime"] > curtime + 600: #提前10分钟释放 continue if row["HolderServerId"] == Gcore.getServerId(): #本服 ui = Gcore.getUI('Building_hold', row["HolderId"]) ui.SlaveOperand({'typ':2, 'uid':row["UserId"], 'sid':Gcore.getServerId()}) else: #非本服,发消息 msg = {'HolderId':row["HolderId"], "GiverId":row["UserId"], "GiverServerId":Gcore.getServerId()} Gcore.sendmq(3, int(row["HolderServerId"]), msg) cnt += 1 runtime = time.time()-curtime print 'Finish at:',Gcore.common.now() print 'Total Runtime:', runtime