10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(奖励增加支持仙官;优化称号、仙官、膜拜关联逻辑及配置;支持物品激活仙盟徽章;C026C028增加Job信息;)
| | |
| | | BYTE LimitVIPLV; //需要VIP等级
|
| | | };
|
| | |
|
| | | //物品表
|
| | |
|
| | | struct tagChinItem
|
| | | {
|
| | | DWORD _ItemID; //物品ID
|
| | | BYTE ItemType; //物品类型
|
| | | DWORD Effect1; //道具使用效果1
|
| | | DWORD EffectValueA1; //效果1的a值
|
| | | DWORD EffectValueB1; //效果1的b值
|
| | | DWORD EffectValueC1; //效果1的c值
|
| | | };
|
| | |
|
| | | //NPC表
|
| | |
|
| | | struct tagChinNPC
|
| | |
| | | DWORD TitleID; //称号ID
|
| | | list AwardItemList; //晋级仙宫奖励物品列表
|
| | | char MailKey; //仙官通知邮件
|
| | | BYTE WorshipType; //膜拜类型
|
| | | DWORD WorshipValue; //膜拜值
|
| | | };
|
| | |
|
| | | //缥缈仙域表
|
| | |
| | | Def_Billboard_MaxCnt = 100
|
| | | #---------------------------------------------------------------------
|
| | | #请求类型(需要和MapServer中的一致)
|
| | | Def_QueryType_Count = 55
|
| | | Def_QueryType_Count = 56
|
| | | (
|
| | | queryType_sqtPlayer, #查询玩家
|
| | | queryType_sqtFamilyWar, #家族战
|
| | |
| | | queryType_EnterFB, #进入副本
|
| | | queryType_NPCInfo, #查询NPCInfo
|
| | | queryType_NPCCnt, #查询NPC数量
|
| | | queryType_FamilyEmblem, #仙盟徽章
|
| | | ) = range(0, Def_QueryType_Count)
|
| | | #------------------------------------------------------------------------------
|
| | | #家族某行为类型保存的条数
|
| | |
| | | ShareDefine.TYPE_Price_GongdePoint:Def_ItemID_GongdePoint,
|
| | | }
|
| | |
|
| | | #写死的物品类型都放这边
|
| | | Def_ItemType_Title = 4 #称号
|
| | |
|
| | | #写死的物品效果ID都放这边------请按数值顺序存放
|
| | | Def_Effect_AddDienstgrad = 204 #使用物品获得称号
|
| | |
| | | class tagGCFamilyGCZBatScenePlayer(Structure):
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | Name = "" #(char Name[33])
|
| | | Job = 0 #(BYTE Job)
|
| | | Face = 0 #(DWORD Face)
|
| | | FacePic = 0 #(DWORD FacePic)
|
| | | data = None
|
| | |
| | | self.Clear()
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
| | | def Clear(self):
|
| | | self.PlayerID = 0
|
| | | self.Name = ""
|
| | | self.Job = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | return
|
| | |
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | |
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.Name)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | return data
|
| | |
| | | DumpString = '''
|
| | | PlayerID:%d,
|
| | | Name:%s,
|
| | | Job:%d,
|
| | | Face:%d,
|
| | | FacePic:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.Name,
|
| | | self.Job,
|
| | | self.Face,
|
| | | self.FacePic
|
| | | )
|
| | |
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | Name = "" #(char Name[33])//参与玩家名字
|
| | | FamilyLV = 0 #(BYTE FamilyLV)//参与时的家族职位
|
| | | Job = 0 #(BYTE Job)
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | FightPower = 0 #(DWORD FightPower)//战力,求余亿部分
|
| | |
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | | self.PlayerID = 0
|
| | | self.Name = ""
|
| | | self.FamilyLV = 0
|
| | | self.Job = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.FightPower = 0
|
| | |
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | |
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.Name)
|
| | | data = CommFunc.WriteBYTE(data, self.FamilyLV)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | |
| | | PlayerID:%d,
|
| | | Name:%s,
|
| | | FamilyLV:%d,
|
| | | Job:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | FightPower:%d,
|
| | |
| | | self.PlayerID,
|
| | | self.Name,
|
| | | self.FamilyLV,
|
| | | self.Job,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.FightPower,
|
| | |
| | | def OnExec(orderId, gmCmdDict):
|
| | | serverIDList = eval(gmCmdDict.get("serverIDList", '[]'))
|
| | | queryCnt = GameWorld.ToIntDef(gmCmdDict.get("queryCnt", '0') , 100)
|
| | | GameWorld.DebugLog("GMT_GetFamilyByServerID queryCnt=%s, %s, %s" % (queryCnt, serverIDList, gmCmdDict))
|
| | | page = GameWorld.ToIntDef(gmCmdDict.get("page", '0') , 1)
|
| | | queryCnt = min(queryCnt, 100)
|
| | | GameWorld.DebugLog("GMT_GetFamilyByServerID queryCnt=%s,page=%s, %s, %s" % (queryCnt, page, serverIDList, gmCmdDict))
|
| | |
|
| | | isCrossServer = GameWorld.IsCrossServer()
|
| | | familyMgr = GameWorld.GetFamilyManager()
|
| | | if isCrossServer:
|
| | | sortFamilyIDList, totalCnt = PlayerFamily.SortCrossFamily(serverIDList, queryCnt)
|
| | | sortFamilyIDList, totalCnt = PlayerFamily.SortCrossFamily(serverIDList, queryCnt, page)
|
| | | else:
|
| | | sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
|
| | | totalCnt = len(sortFamilyIDList)
|
| | | startIndex = (page - 1) * queryCnt
|
| | | sortFamilyIDList = sortFamilyIDList[startIndex:startIndex + queryCnt], totalCnt
|
| | |
|
| | | retCnt = 0
|
| | | familyList = []
|
| | |
| | | import NetPackCommon
|
| | | import PyDataManager
|
| | | import PlayerControl
|
| | | import GameXiangong
|
| | | import PyGameData
|
| | | import ChConfig
|
| | | import ChPlayer
|
| | |
| | | scenePlayer = ChPyNetSendPack.tagGCFamilyGCZBatScenePlayer()
|
| | | scenePlayer.PlayerID = playerID
|
| | | scenePlayer.Name = joinMember.playerName
|
| | | scenePlayer.Job = joinMember.job
|
| | | scenePlayer.Face = joinMember.face
|
| | | scenePlayer.FacePic = joinMember.facePic
|
| | | clientPack.PlayerInfoList.append(scenePlayer)
|
| | |
| | | return
|
| | |
|
| | | __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, billRank, playerAwardItemList)
|
| | | |
| | | serverIDList = actInfo.get(ShareDefine.ActKey_ServerIDRangeList, [])
|
| | | GameXiangong.AddXiangongPlayerByItem(playerAwardItemList, playerID, serverIDList, billRank)
|
| | | return
|
| | |
|
| | | def __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, awardValue, awardItemList):
|
| | |
| | | paramList = [billRank]
|
| | | PlayerCompensation.SendMailByKey("FamilyGCZAwardHurt", [playerID], playerAwardItemList, paramList, crossMail=True)
|
| | |
|
| | | serverIDList = ipyData.GetServerIDRangeList()
|
| | | GameXiangong.AddXiangongPlayerByItem(playerAwardItemList, playerID, serverIDList, billRank)
|
| | | |
| | | # 仙盟积分名次奖励
|
| | | if not joinMember.awardState&pow(2, AwwardType_FamilyScore):
|
| | | joinMember.awardState = joinMember.awardState | pow(2, AwwardType_FamilyScore)
|
| | |
| | | if playerAwardItemList:
|
| | | paramList = [billRank]
|
| | | PlayerCompensation.SendMailByKey("FamilyGCZAwardScore", [playerID], playerAwardItemList, paramList, crossMail=True)
|
| | | |
| | | serverIDList = ipyData.GetServerIDRangeList()
|
| | | GameXiangong.AddXiangongPlayerByItem(playerAwardItemList, playerID, serverIDList, billRank)
|
| | |
|
| | | # 竞猜奖励
|
| | | if not joinMember.awardState&pow(2, AwwardType_Guess):
|
| | |
| | | defMem.PlayerID = playerID
|
| | | defMem.Name = joinMember.playerName
|
| | | defMem.FamilyLV = joinMember.fmLV
|
| | | defMem.Job = joinMember.job
|
| | | defMem.Face = joinMember.face
|
| | | defMem.FacePic = joinMember.facePic
|
| | | defMem.FightPower = joinMember.fightPower % ChConfig.Def_PerPointValue
|
| | |
| | | #"""Version = 2024-09-04 16:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorship
|
| | | import ShareDefine
|
| | | import PyDataManager
|
| | | import NetPackCommon
|
| | |
| | | return True
|
| | | return False
|
| | |
|
| | | def AddXiangongPlayerByItem(awardItemList, playerID, serverIDList, rank=None):
|
| | | ## 根据奖励的物品信息自动发放仙官,仅跨服服务器
|
| | | |
| | | if not GameWorld.IsCrossServer():
|
| | | return
|
| | | |
| | | titleID, titleItemID = 0, 0
|
| | | for itemInfo in awardItemList:
|
| | | itemID = itemInfo[0]
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ChinItem", itemID)
|
| | | if not ipyData:
|
| | | continue
|
| | | itemType = ipyData.GetItemType()
|
| | | if itemType != ChConfig.Def_ItemType_Title:
|
| | | continue
|
| | | effID = ipyData.GetEffect1()
|
| | | if effID != ChConfig.Def_Effect_AddDienstgrad:
|
| | | continue
|
| | | titleID = ipyData.GetEffectValueA1()
|
| | | titleItemID = itemID
|
| | | break
|
| | | |
| | | if not titleID:
|
| | | GameWorld.DebugLog("奖励没有给称号,不用处理称号仙官! %s" % str(awardItemList), playerID)
|
| | | return
|
| | | |
| | | xiangongID = GetTitleXiangongID(titleID)
|
| | | if not xiangongID:
|
| | | GameWorld.DebugLog("奖励的称号没有对应仙官不处理! titleItemID=%s,titleID=%s" % (titleItemID, titleID), playerID)
|
| | | return
|
| | | |
| | | GameWorld.Log("根据奖励称号物品晋升仙官: titleItemID=%s,titleID=%s,xiangongID=%s" % (titleItemID, titleID, xiangongID), playerID)
|
| | | AddXiangongPlayer(xiangongID, playerID, serverIDList, rank)
|
| | | return
|
| | |
|
| | | def GetTitleXiangongID(titleID):
|
| | | ## 获取称号对应的仙宫ID
|
| | | TitleXiangongIDDict = IpyGameDataPY.GetConfigEx("TitleXiangongID")
|
| | | if not TitleXiangongIDDict:
|
| | | TitleXiangongIDDict = {}
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in range(ipyDataMgr.GetXiangongCount()):
|
| | | ipyData = ipyDataMgr.GetXiangongByIndex(index)
|
| | | xiangongID = ipyData.GetXiangongID()
|
| | | tID = ipyData.GetTitleID()
|
| | | if not tID:
|
| | | continue
|
| | | TitleXiangongIDDict[tID] = xiangongID
|
| | | IpyGameDataPY.SetConfigEx("TitleXiangongID", TitleXiangongIDDict)
|
| | | GameWorld.Log("加载称号ID对应仙宫ID: %s" % TitleXiangongIDDict)
|
| | | return TitleXiangongIDDict.get(titleID, 0)
|
| | |
|
| | | def AddXiangongPlayer(xiangongID, playerID, serverIDList, rank=None, syncDict=None):
|
| | | ## 添加新晋仙官玩家
|
| | | if not xiangongID:
|
| | |
| | | paramList = [rank, titleID, addQiyun]
|
| | | PlayerCompensation.SendMailByKey(ipyData.GetMailKey(), [playerID], addItemList, paramList, crossMail=True)
|
| | |
|
| | | # 同步激活膜拜
|
| | | worshipType = ipyData.GetWorshipType()
|
| | | worshipValue = ipyData.GetWorshipValue()
|
| | | if worshipType:
|
| | | GameWorship.AddWorshipPlayer(worshipType, worshipValue, playerID, serverIDList)
|
| | | |
| | | if isinstance(syncDict, dict):
|
| | | if xiangongID not in syncDict:
|
| | | syncDict[xiangongID] = []
|
| | | newRecDataList = syncDict[xiangongID]
|
| | | newRecDataList.append(recData)
|
| | | else:
|
| | | SendNewXiangongPlayerToClientServer({xiangongID:[recData]})
|
| | | return
|
| | |
|
| | | def SendNewXiangongPlayerToClientServer(syncDict):
|
| | |
| | | ("BYTE", "LimitVIPLV", 0),
|
| | | ),
|
| | |
|
| | | "ChinItem":(
|
| | | ("DWORD", "ItemID", 1),
|
| | | ("BYTE", "ItemType", 0),
|
| | | ("DWORD", "Effect1", 0),
|
| | | ("DWORD", "EffectValueA1", 0),
|
| | | ("DWORD", "EffectValueB1", 0),
|
| | | ("DWORD", "EffectValueC1", 0),
|
| | | ),
|
| | |
|
| | | "ChinNPC":(
|
| | | ("DWORD", "NPCID", 1),
|
| | | ("char", "NPCName", 0),
|
| | |
| | | ("DWORD", "TitleID", 0),
|
| | | ("list", "AwardItemList", 0),
|
| | | ("char", "MailKey", 0),
|
| | | ("BYTE", "WorshipType", 0),
|
| | | ("DWORD", "WorshipValue", 0),
|
| | | ),
|
| | |
|
| | | "FairyDomain":(
|
| | |
| | | def GetLimitMagicWeapon(self): return self.attrTuple[2] # 需要解锁法宝ID DWORD
|
| | | def GetLimiRealmLV(self): return self.attrTuple[3] # 需要境界等级 WORD
|
| | | def GetLimitVIPLV(self): return self.attrTuple[4] # 需要VIP等级 BYTE |
| | | |
| | | # 物品表 |
| | | class IPY_ChinItem(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetItemID(self): return self.attrTuple[0] # 物品ID DWORD
|
| | | def GetItemType(self): return self.attrTuple[1] # 物品类型 BYTE
|
| | | def GetEffect1(self): return self.attrTuple[2] # 道具使用效果1 DWORD
|
| | | def GetEffectValueA1(self): return self.attrTuple[3] # 效果1的a值 DWORD
|
| | | def GetEffectValueB1(self): return self.attrTuple[4] # 效果1的b值 DWORD
|
| | | def GetEffectValueC1(self): return self.attrTuple[5] # 效果1的c值 DWORD |
| | | |
| | | # NPC表 |
| | | class IPY_ChinNPC(): |
| | |
| | | def GetMoneyValue(self): return self.attrTuple[3] # 货币值 DWORD
|
| | | def GetTitleID(self): return self.attrTuple[4] # 称号ID DWORD
|
| | | def GetAwardItemList(self): return self.attrTuple[5] # 晋级仙宫奖励物品列表 list
|
| | | def GetMailKey(self): return self.attrTuple[6] # 仙官通知邮件 char |
| | | def GetMailKey(self): return self.attrTuple[6] # 仙官通知邮件 char
|
| | | def GetWorshipType(self): return self.attrTuple[7] # 膜拜类型 BYTE
|
| | | def GetWorshipValue(self): return self.attrTuple[8] # 膜拜值 DWORD |
| | | |
| | | # 缥缈仙域表 |
| | | class IPY_FairyDomain(): |
| | |
| | | self.__LoadFileData("ActFeastWish", onlyCheck)
|
| | | self.__LoadFileData("ActFeastTravel", onlyCheck)
|
| | | self.__LoadFileData("FuncOpenLV", onlyCheck)
|
| | | self.__LoadFileData("ChinItem", onlyCheck)
|
| | | self.__LoadFileData("ChinNPC", onlyCheck)
|
| | | self.__LoadFileData("PlayerLV", onlyCheck)
|
| | | self.__LoadFileData("VipPrivilege", onlyCheck)
|
| | |
| | | self.CheckLoadData("FuncOpenLV") |
| | | return self.ipyFuncOpenLVCache[index]
|
| | | |
| | | def GetChinItemCount(self): |
| | | self.CheckLoadData("ChinItem") |
| | | return self.ipyChinItemLen
|
| | | def GetChinItemByIndex(self, index): |
| | | self.CheckLoadData("ChinItem") |
| | | return self.ipyChinItemCache[index]
|
| | | |
| | | def GetChinNPCCount(self): |
| | | self.CheckLoadData("ChinNPC") |
| | | return self.ipyChinNPCLen
|
| | |
| | | return cmp(GetMemberJoinTime(member1), GetMemberJoinTime(member2))
|
| | | return ret
|
| | |
|
| | | def SortCrossFamily(serverIDList, top=0):
|
| | | def SortCrossFamily(serverIDList, getCnt=0, page=1):
|
| | | ''' 跨服仙盟排序, 排序规则: 总战力 > 等级 > ID
|
| | | @param serverIDList: 仙盟所属区服ID范围列表
|
| | | @param top: 返回排序靠前x个仙盟,0则全部返回
|
| | | @param getCnt: 返回排序靠前x个仙盟,0则全部返回
|
| | | @param page: 第几页
|
| | | '''
|
| | | familyList = []
|
| | | familyManager = GameWorld.GetFamilyManager()
|
| | |
| | | familyList.append(family)
|
| | | familyList.sort(key=lambda f: (GetFamilyTotalFightPower(f), f.GetLV(), f.GetID()), reverse=True)
|
| | | totalCnt = len(familyList)
|
| | | return familyList[:top] if top else familyList, totalCnt
|
| | | if getCnt:
|
| | | startIndex = (page - 1) * getCnt
|
| | | return familyList[startIndex:startIndex + getCnt], totalCnt
|
| | | return familyList, totalCnt
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ##通知地图服务器, 玩家家族属性刷新
|
| | |
| | | def AddFamilyEmblem(familyID, emblemID, setExpireTimes=None):
|
| | | ## 添加仙盟徽章
|
| | | # @param setExpireTimes: 指定的有效时长秒,0-永久,>0-有效时长秒;没有指定时直接读配置进行累加
|
| | | |
| | | if not familyID or not emblemID:
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("FamilyEmblem", emblemID)
|
| | | if not ipyData:
|
| | | return
|
| | |
| | | import GameWorldBoss
|
| | | import GameWorldFamilyWar
|
| | | #import PlayerFamilyTech
|
| | | import PlayerFamilyEmblem
|
| | | import PlayerFamilyZhenfa
|
| | | import PlayerFamilyRedPacket
|
| | | import PlayerFamilyZhenbaoge
|
| | |
| | | PlayerFamily.PlayerExecLeaderImpeach(curPlayer, tick)
|
| | | return
|
| | |
|
| | | elif queryType == ChConfig.queryType_FamilyEmblem:
|
| | | #玩家激活仙盟徽章
|
| | | familyID = curPlayer.GetFamilyID()
|
| | | emblemID = GameWorld.ToIntDef(sendCMD)
|
| | | PlayerFamilyEmblem.AddFamilyEmblem(familyID, emblemID)
|
| | | return
|
| | | |
| | | #角色改名
|
| | | elif queryType == ChConfig.queryType_UpdatePlayerName:
|
| | | UpdatePlayerName.MapServer_UpdatePlayerName(curPlayer, sendCMD, tick)
|
| | |
| | | Def_WorshipType_CrossXianXiaMJ, # 跨服秘境寻宝 4
|
| | | Def_WorshipType_CrossHorsePetTrain, # 跨服骑宠养成 5
|
| | | Def_WorshipType_CrossGubaoTrain, # 跨服古宝养成 6
|
| | | ) = range(1, 1 + 6)
|
| | | Def_WorshipType_FamilyGCZ, # 仙盟攻城战 7
|
| | | ) = range(1, 1 + 7)
|
| | |
|
| | | #跨服膜拜类型
|
| | | Def_WorshipTypeCross = [Def_WorshipType_CrossChampionship, Def_WorshipType_CrossBossTrial, Def_WorshipType_CrossXianXiaMJ,
|
| | | Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain,
|
| | | Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain, Def_WorshipType_FamilyGCZ,
|
| | | ]
|
| | |
|
| | | #玩家记录类型
|
| | |
| | | Def_Effect_FacePic = 275 #头像框物品;A值-头像框ID
|
| | | Def_Effect_EmojiPack = 276 #表情包物品;A值-表情包ID
|
| | | Def_Effect_RecycleItemMoney = 277 #回收物品转化为货币; A值-直接给货币物品ID;B值-货币数量
|
| | | Def_Effect_FamilyEmblem = 278 #激活仙盟徽章; A值-徽章ID;
|
| | | #----以下未使用或代码依然存在的---
|
| | | Def_Effect_ItemGiveGongXun = 1920 #使用道具给予功勋
|
| | | Def_Effect_ItemGiveRuneJH = 1925 #使用道具给予符印精华
|
| | |
| | |
|
| | | #---------------------------------------------------------------------
|
| | | #请求类型(需要和GameServer中的一致)
|
| | | Def_QueryType_Count = 55
|
| | | Def_QueryType_Count = 56
|
| | | (
|
| | | queryType_sqtPlayer, #查询玩家
|
| | | queryType_sqtFamilyWar, #家族战
|
| | |
| | | queryType_EnterFB, #进入副本
|
| | | queryType_NPCInfo, #查询NPCInfo
|
| | | queryType_NPCCnt, #查询NPC数量
|
| | | queryType_FamilyEmblem, #仙盟徽章
|
| | | ) = range(0, Def_QueryType_Count)
|
| | | #------------------------------------------------------------------------------
|
| | | #---------------------------------------------------------------------
|
| | |
| | | class tagGCFamilyGCZBatScenePlayer(Structure):
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | Name = "" #(char Name[33])
|
| | | Job = 0 #(BYTE Job)
|
| | | Face = 0 #(DWORD Face)
|
| | | FacePic = 0 #(DWORD FacePic)
|
| | | data = None
|
| | |
| | | self.Clear()
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
| | | def Clear(self):
|
| | | self.PlayerID = 0
|
| | | self.Name = ""
|
| | | self.Job = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | return
|
| | |
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | |
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.Name)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | return data
|
| | |
| | | DumpString = '''
|
| | | PlayerID:%d,
|
| | | Name:%s,
|
| | | Job:%d,
|
| | | Face:%d,
|
| | | FacePic:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.Name,
|
| | | self.Job,
|
| | | self.Face,
|
| | | self.FacePic
|
| | | )
|
| | |
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | Name = "" #(char Name[33])//参与玩家名字
|
| | | FamilyLV = 0 #(BYTE FamilyLV)//参与时的家族职位
|
| | | Job = 0 #(BYTE Job)
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | FightPower = 0 #(DWORD FightPower)//战力,求余亿部分
|
| | |
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | | self.PlayerID = 0
|
| | | self.Name = ""
|
| | | self.FamilyLV = 0
|
| | | self.Job = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.FightPower = 0
|
| | |
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | |
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.Name)
|
| | | data = CommFunc.WriteBYTE(data, self.FamilyLV)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | |
| | | PlayerID:%d,
|
| | | Name:%s,
|
| | | FamilyLV:%d,
|
| | | Job:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | FightPower:%d,
|
| | |
| | | self.PlayerID,
|
| | | self.Name,
|
| | | self.FamilyLV,
|
| | | self.Job,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.FightPower,
|
| | |
| | | ChConfig.Def_Effect_AddMagicWeaponUpExp:"Item_AddMagicWeaponUpExp", # 增加法宝升星经验
|
| | | ChConfig.Def_Effect_ChatBubbleBox:"Item_ChatBubbleBox", # 激活聊天气泡框
|
| | | ChConfig.Def_Effect_EmojiPack:"Item_EmojiPack",
|
| | | ChConfig.Def_Effect_FamilyEmblem:"Item_FamilyEmblem",
|
| | | ChConfig.Def_Effect_ItemGiveWeekPartyPoint:"Item_WeekPartyPoint", # 增加活动巡礼积分
|
| | | ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # 增加活动巡礼积分
|
| | | ChConfig.Def_Effect_AddRealmExpRate:"Item_AddRealmExpRate", # 增加聚灵效率
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package UseItem.Item_FamilyEmblem
|
| | | #
|
| | | # @todo:仙盟徽章
|
| | | # @author hxp
|
| | | # @date 2025-04-16
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 仙盟徽章
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-04-16 15:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import ItemCommon
|
| | | import GameWorld
|
| | |
|
| | | def UseItem(curPlayer, curRoleItem, tick):
|
| | | useItemEff = curRoleItem.GetEffectByIndex(0)
|
| | | emblemID = useItemEff.GetEffectValue(0) |
| | | if emblemID == 0:
|
| | | return
|
| | | if not curPlayer.GetFamilyID():
|
| | | GameWorld.DebugLog("玩家没有仙盟,无法使用徽章物品!", curPlayer.GetPlayerID())
|
| | | return
|
| | | ItemCommon.DelItem(curPlayer, curRoleItem, 1, False, "FamilyEmblem", isForceDR=True)
|
| | | #通知GameServer激活
|
| | | sendMsg = str(emblemID)
|
| | | curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_FamilyEmblem, 0, '', sendMsg, len(sendMsg))
|
| | | return True
|
| | |
| | | Def_WorshipType_CrossXianXiaMJ, # 跨服秘境寻宝 4
|
| | | Def_WorshipType_CrossHorsePetTrain, # 跨服骑宠养成 5
|
| | | Def_WorshipType_CrossGubaoTrain, # 跨服古宝养成 6
|
| | | ) = range(1, 1 + 6)
|
| | | Def_WorshipType_FamilyGCZ, # 仙盟攻城战 7
|
| | | ) = range(1, 1 + 7)
|
| | |
|
| | | #跨服膜拜类型
|
| | | Def_WorshipTypeCross = [Def_WorshipType_CrossChampionship, Def_WorshipType_CrossBossTrial, Def_WorshipType_CrossXianXiaMJ,
|
| | | Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain,
|
| | | Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain, Def_WorshipType_FamilyGCZ,
|
| | | ]
|
| | |
|
| | | #玩家记录类型
|