From 35d98e9c630fd4408561c8c54b4c09193bb9ce9e Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 20 三月 2026 14:57:32 +0800
Subject: [PATCH] 0312 修改服务端补主线进度通知
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 119 ++++++++++++++++-------------------------------------------
1 files changed, 33 insertions(+), 86 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 6a76568..15d3233 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -28,11 +28,11 @@
import PlayerActivity
import ChPyNetSendPack
import NetPackCommon
-import PlayerXiangong
import IpyGameDataPY
import PlayerGubao
import PyGameData
import PlayerHero
+import PlayerMail
import math
import time
@@ -924,14 +924,6 @@
tagItem.Clear()
return True
- #气运
- if itemEff.GetEffectID() == ChConfig.Def_Effect_TiandaoQiyun:
- isAutoUse = itemEff.GetEffectValue(1)
- if isAutoUse:
- addQiyun = itemEff.GetEffectValue(0) * tagItemCount
- PlayerXiangong.AddTiandaoQiyun(curPlayer, addQiyun, {"ItemID":itemID, "ItemCount":tagItemCount, "isAutoUse":1})
- tagItem.Clear()
- return True
#增加副本次数
if itemEff.GetEffectID() == ChConfig.Def_Effect_AddFBCnt:
isAutoUse = itemEff.GetEffectValue(1)
@@ -968,7 +960,11 @@
return self.PutItemInVPack(packIndex, tagItem, event)
eventName, isForceEvent, addDict = event
-
+
+ if PlayerHero.AutoChangeToSkinPoint(curPlayer, tagItem, eventName):
+ tagItem.Clear()
+ return True
+
#记录创建物品时的登录天
if tagItem.GetItemTypeID() in ReadChConfig.GetEvalChConfig('OpenBoxByLoginDayCfg'):
if tagItem.GetUserAttr(ShareDefine.Def_IudetCreateItemLoginDay) == 0:#没有设置过才设置
@@ -1670,74 +1666,9 @@
return
def ResetHeroPack(curPlayer, curPack, beingIndex, endIndex):
- itemList = []
- for i in range(beingIndex, endIndex + 1):
- curRoleItem = curPack.GetAt(i)
- if curRoleItem.IsEmpty():
- continue
- curItem = curRoleItem.GetItem()
- itemList.append(curItem)
- itemList.sort(__CmpHeroPack)
-
- curPack.WipePack(beingIndex, endIndex)
- putPlace = beingIndex
- for item in itemList:
- curPack.GetAt(putPlace).AssignItem(item, False)
- putPlace += 1
-
+ ## 前端自行排序
return
-def __CmpHeroPack(item1, item2):
- '''排序规则:上阵武将排前,未上阵武将排后,再各自按照以下规则排序
- 武将等级>突破等级>武将星级>武将品质>武将ID
- '''
-
- posNum1, posNum2 = 0, 0
- for lpIndex in range(item1.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
- lineupValue = item1.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
- lineupID, _, posNum = PlayerHero.GetLineupValue(lineupValue)
- if lineupID != ShareDefine.Lineup_Main:
- continue
- posNum1 = posNum
- break
-
- for lpIndex in range(item2.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
- lineupValue = item2.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
- lineupID, _, posNum = PlayerHero.GetLineupValue(lineupValue)
- if lineupID != ShareDefine.Lineup_Main:
- continue
- posNum2 = posNum
- break
-
- if (posNum1 and posNum2) or (not posNum1 and not posNum2):
- lv1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroLV)
- lv2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroLV)
- if lv1 == lv2:
- bLV1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
- bLV2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
- if bLV1 == bLV2:
- star1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroStar)
- star2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroStar)
- if star1 == star2:
- heroID1 = item1.GetItemTypeID()
- heroID2 = item2.GetItemTypeID()
- ipyData1 = IpyGameDataPY.GetIpyGameData("Hero", heroID1)
- ipyData2 = IpyGameDataPY.GetIpyGameData("Hero", heroID2)
- quality1 = ipyData1.GetQuality() if ipyData1 else 0
- quality2 = ipyData2.GetQuality() if ipyData2 else 0
- if quality1 == quality2:
- return cmp(heroID1, heroID2)
- return -cmp(quality1, quality2)
- return -cmp(star1, star2)
- return -cmp(bLV1, bLV2)
- return -cmp(lv1, lv2)
- elif posNum1:
- return -1
- elif posNum2:
- return 1
- else:
- return cmp(item1.GetItemTypeID(), item2.GetItemTypeID())
-
#===============================================================================
#Python 版重整物品
# def ResetItem(curPlayer, curPackIndex, tick):
@@ -2078,14 +2009,20 @@
GameWorld.ErrLog('DoLogic_PutItemInPack Error 物品无法放入背包')
return False
+def GetIsBindValue(isBind=0, srcSign=0):
+ ## 获取IsBind值,适用于配置或者通知前端特殊标记用,兼容是否绑定/拍品设定
+ # @param isBind: 可支持原绑定/拍品逻辑,如果该项目没有该逻辑暂时默认都为0
+ # @param srcSign: 标记物品特殊来源,如xx特权额外产出等
+ return srcSign * 10 + isBind
+
## 是否拍品
-def GetIsAuctionItem(curItem): return curItem.GetIsBind()
+def GetIsAuctionItem(curItem): return 0#curItem.GetIsBind()
def SetIsAuctionItem(curItem, isAuctionItem, curPlayer=None):
- curItem.SetIsBind(isAuctionItem)
-
- if isAuctionItem:
- curItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
- return
+ #curItem.SetIsBind(isAuctionItem)
+ #
+ #if isAuctionItem:
+ # curItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
+ # return
return
def GetItemCountByID(curPlayer, itemID):
@@ -2338,7 +2275,7 @@
break
if isSendMail:
- PlayerControl.SendMailByKey(mailKey, [curPlayer.GetPlayerID()], giveItemList)
+ PlayerMail.SendMailByKey(mailKey, curPlayer.GetPlayerID(), giveItemList)
GameWorld.DebugLog("GivePlayerItemOrMail背包空间不够,发送邮件: mailItemList=%s" % str(giveItemList), curPlayer.GetPlayerID())
else:
for itemID, itemCnt, isAuctionItem in giveItemList:
@@ -2353,6 +2290,7 @@
'''通知玩家获得奖励信息
@param giveItemInfo: 可以是列表 [[itemID,count,isBind], ...] 或 [[itemID,count], ...] 或 {itemID:count, ...}
@param moneyInfo: 奖励货币信息 {moneyType:moneyValue, ...} moneyType 可以是字符串或数值
+ moneyValue 也可以传入列表 [moneyValue, isBind],其中 isBind 同物品的 isBind 标记逻辑
'''
notifyItemList = []
if isinstance(giveItemInfo, dict):
@@ -2366,14 +2304,23 @@
clientPack.ExpPoint = exp / ChConfig.Def_PerPointValue
clientPack.Exp = exp % ChConfig.Def_PerPointValue
if moneyInfo and isinstance(moneyInfo, dict):
- for moneyType, moneyValue in moneyInfo.items():
+ for moneyType, moneyValueInfo in moneyInfo.items():
if isinstance(moneyType, str):
moneyType = int(moneyType)
- if not moneyType or not moneyValue:
+ if not moneyType or not moneyValueInfo:
+ continue
+ isBind = 0
+ if isinstance(moneyValueInfo, int):
+ moneyValue = moneyValueInfo
+ elif isinstance(moneyValueInfo, list):
+ moneyValue = moneyValueInfo[0]
+ isBind = moneyValueInfo[1] if len(moneyValueInfo) > 1 else 0
+ else:
continue
money = ChPyNetSendPack.tagMCGiveAwardMoney()
money.MoneyType = moneyType
money.MoneyValue = moneyValue
+ money.IsBind = isBind
clientPack.MoneyList.append(money)
clientPack.MoneyLen = len(clientPack.MoneyList)
for itemInfo in notifyItemList:
@@ -2445,7 +2392,7 @@
if notifyMailKey:
paramList = [itemID, itemID, recycleCount]
- PlayerControl.SendMailByKey(notifyMailKey, [playerID], addItemList, paramList)
+ PlayerMail.SendMailByKey(notifyMailKey, playerID, addItemList, paramList)
elif addItemList:
GivePlayerItemOrMail(curPlayer, addItemList, event=["RecycleItem", False, {"RecycleItemID":itemID}])
--
Gitblit v1.8.0