From 732aca3b8264a1cfc49975de2a92a6d6030befe7 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 13 十月 2025 14:12:17 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(主线支持定制掉落装备;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py | 52 ++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 44 insertions(+), 8 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
index 123be33..15c11a5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
@@ -25,6 +25,7 @@
import ItemControler
import IPY_GameWorld
import NetPackCommon
+import PlayerArena
import ItemCommon
import PlayerTask
import NPCCommon
@@ -130,6 +131,22 @@
if dropBootyCnt <= 0:
continue
+ itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
+ if not itemData:
+ continue
+
+ # 判断挑战券
+ if itemData.GetType() == ChConfig.Def_ItemType_AutoUseMoney:
+ curEff = itemData.GetEffectByIndex(0)
+ effID = curEff.GetEffectID()
+ moneyType = curEff.GetEffectValue(1)
+ if effID == ChConfig.Def_Effect_ItemGiveMoney and moneyType == ShareDefine.TYPE_Price_ArenaTicket:
+ curMoney = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket)
+ storeMax = PlayerArena.GetArenaTicketStoreMax(curPlayer)
+ if curMoney >= storeMax:
+ GameWorld.DebugLog("挑战券已达存储上限! itemID=%s,curMoney=%s >= %s" % (itemID, curMoney, storeMax), playerID)
+ continue
+
dropCntRange = bootyDropCntDict[itemID]
if not isinstance(dropCntRange, (list, tuple)) or len(dropCntRange) != 2:
continue
@@ -203,6 +220,8 @@
return
GameWorld.DebugLog("主线掉落装备: unXiantaoCntEquip=%s,dropEquipCnt=%s,treeLV=%s,objDropCntDict=%s"
% (unXiantaoCntEquip, dropEquipCnt, treeLV, objDropCntDict), playerID)
+ dropAppointEquipDict = IpyGameDataPY.GetFuncEvalCfg("MainDropAppoint", 1, {})
+ appointDropCntMax = max(dropAppointEquipDict) if dropAppointEquipDict else 0
for tagID, dropInfo in objDropCntDict.items():
tagObj, dropCnt, bossType = dropInfo
@@ -234,15 +253,30 @@
for _ in range(dropCnt):
if dropEquipCnt <= 0:
break
- itemColor = GameWorld.GetResultByRandomList(colorRateList)
- if not itemColor:
- continue
- equipIDList = NPCCommon.__GetEquipIDList(0, color=itemColor, placeList=ChConfig.Def_MainEquipPlaces, findType="MainEquipDrop")
- if not equipIDList:
- continue
- randEquipID = random.choice(equipIDList)
- curItem = ItemControler.GetOutPutItemObj(randEquipID, 1, False, curPlayer=curPlayer)
+ setAttrDict = None
+ appointDropEquipCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AppointDropEquipCnt) + 1
+ if appointDropEquipCnt in dropAppointEquipDict:
+ appointInfo = dropAppointEquipDict[appointDropEquipCnt]
+ randEquipID = appointInfo[0]
+ equipLV = appointInfo[1] if len(appointInfo) > 1 else 0
+ appointID = appointInfo[2] if len(appointInfo) > 2 else 0
+ setAttrDict = {}
+ if equipLV > 0:
+ setAttrDict["%s" % ShareDefine.Def_IudetItemLV] = equipLV
+ if appointID:
+ setAttrDict[ShareDefine.Def_CItemKey_AppointID] = appointID
+ GameWorld.DebugLog("定制掉落第%s次: equipID=%s,setAttrDict=%s" % (appointDropEquipCnt, randEquipID, setAttrDict))
+ else:
+ itemColor = GameWorld.GetResultByRandomList(colorRateList)
+ if not itemColor:
+ continue
+ equipIDList = NPCCommon.__GetEquipIDList(0, color=itemColor, placeList=ChConfig.Def_MainEquipPlaces, findType="MainEquipDrop")
+ if not equipIDList:
+ continue
+ randEquipID = random.choice(equipIDList)
+
+ curItem = ItemControler.GetOutPutItemObj(randEquipID, 1, False, curPlayer=curPlayer, setAttrDict=setAttrDict)
if curItem == None:
continue
curItem.SetIsBind(1) # 为1时代表是掉落
@@ -252,6 +286,8 @@
dropEquipCnt -= 1
+ if appointDropEquipCnt <= appointDropCntMax:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AppointDropEquipCnt, appointDropEquipCnt)
return
def GMTestKill(curPlayer, useXiantao):
--
Gitblit v1.8.0