From 37e044190ad9c4cd98e3ecc42762379676bd6c23 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 15 四月 2019 11:44:18 +0800
Subject: [PATCH] 6515 【测试】【主干】新增游戏警报邮件
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py | 257 +++++++++++++++++++++++----------------------------
1 files changed, 116 insertions(+), 141 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index ed2f6f1..d6ece9a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -45,7 +45,6 @@
import ShareDefine
import PlayerAttrFruit
import DataRecordPack
-import PyMapTable
import ChPyNetSendPack
import NetPackCommon
import IpyGameDataPY
@@ -213,7 +212,7 @@
singItem.Clear()
#===============================================================================================
# # (跨服掉落功勋物品, 不给实际物品,转化为功勋值)
- # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsMergeServer():
+ # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsCrossServer():
# #=======================================================================
# # # 不需要队伍提示
# # if not isTeamNotify:
@@ -240,14 +239,14 @@
curItemCount = singItem.GetCount()
curItemID = singItem.GetItemTypeID()
- curItemIsBind = singItem.GetIsBind()
+ curItemIsAuctionItem = ItemControler.GetIsAuctionItem(singItem)
isPutInTemp = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PickupItemPutInTemp)
packIndex = ShareDefine.rptTempItem if isPutInTemp else IPY_GameWorld.rptItem
packIndex = ChConfig.GetItemPackType(singItem.GetType(), packIndex)
# 是否可放入
- if not itemControl.CanPutInItem(packIndex, curItemID, curItemCount, curItemIsBind):
+ if not itemControl.CanPutInItem(packIndex, curItemID, curItemCount, curItemIsAuctionItem):
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packIndex])
GameWorld.Log("拾取物品无法放入背包!mapItemID=%s,dropItemNPCID=%s,curItemID=%s,packIndex=%s"
% (mapItemID, dropItemNPCID, curItemID, packIndex), curPlayer.GetPlayerID())
@@ -266,9 +265,10 @@
return
if dropItemNPCID:
+ serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
mapID = GameWorld.GetGameWorld().GetMapID()
NPCCommon.SendGameServerGoodItemRecord(mapID, dropItemNPCID, curPlayer.GetName(),
- curPlayer.GetPlayerID(), curItemID, equipInfo)
+ curPlayer.GetPlayerID(), curItemID, equipInfo, serverGroupID)
# 不需要队伍提示
#=======================================================================
@@ -543,7 +543,7 @@
# @remarks
def CheckPlayerUseItemSelf(curPlayer, curItem, tick):
#----------------------检查非法物品属性
- if not ItemCommon.CheckItemCanUse(curItem):
+ if not ItemCommon.CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_644055")
return False
@@ -570,13 +570,20 @@
maxCnt = ItemCommon.GetCanUseCountDaily(curItem)
if maxCnt <= 0:
return -1
+ curItemID = curItem.GetItemTypeID()
+ useCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % curItemID)
+ for itemIDList in IpyGameDataPY.GetFuncEvalCfg('ShareUseCntItem'):
+ if curItemID not in itemIDList:
+ continue
+ for itemID in itemIDList:
+ if itemID == curItemID:
+ continue
+ useCnt += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID)
- itemID = curItem.GetItemTypeID()
- useCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID)
canUseCnt = max(0, maxCnt - useCnt)
if canUseCnt <= 0:
- GameWorld.DebugLog("已达到今日使用次数上限!itemID=%s,useCnt=%s,maxCnt=%s" % (itemID, useCnt, maxCnt))
+ GameWorld.DebugLog("已达到今日使用次数上限!itemID=%s,useCnt=%s,maxCnt=%s" % (curItemID, useCnt, maxCnt))
#PlayerControl.NotifyCode(curPlayer, notifyMark, [itemID])
#GameWorld.DebugLog("物品ID(%s)今日已使用次数(%s), maxCnt=%s" % (itemID, useCnt, maxCnt))
@@ -697,7 +704,8 @@
ChConfig.Def_ItemType_GiveMoney:"Item_GiveMoney", # 给人物金钱
ChConfig.Def_ItemType_AddLimitBuff:"Item_Add_LimitingBuff", # 给限时buff物品
ChConfig.Def_ItemType_AddExpBuff:"Item_Add_LimitingBuff", # 给限时buff物品
- ChConfig.Def_ItemType_ResetAttrPoint:"Item_ResetAttrPoint" #单个属性点重置
+ ChConfig.Def_ItemType_ResetAttrPoint:"Item_ResetAttrPoint", #单个属性点重置
+ ChConfig.Def_ItemType_AddCrossRealmPKCnt:"Item_AddCrossRealmPKCnt" #增加跨服PK次数
}
#根据物品效果使用{物品效果ID:call的py名}
@@ -713,7 +721,9 @@
ChConfig.Def_Effect_AddFBCnt:"Item_AddFBCnt", # 增加副本可进入次数
ChConfig.Def_Effect_AddKillBossCnt:"Item_AddKillBossCnt", # 增加BOSS可击杀次数
ChConfig.Def_Effect_AddMagicWeaponUpExp:"Item_AddMagicWeaponUpExp", # 增加法宝升星经验
- #ChConfig.Def_PhoneVip_EffID:"Item_AddPhoneVip", # 手机VIP物品卡
+ ChConfig.Def_Effect_ChatBubbleBox:"Item_ChatBubbleBox", # 激活聊天气泡框
+ ChConfig.Def_Effect_ItemGiveWeekPartyPoint:"Item_WeekPartyPoint", # 增加活动巡礼积分
+ ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # 增加活动巡礼积分
#ChConfig.Def_Effect_AddZhenQiByTimes:"Item_AddZhenQiByTimes", # 增加真气按一天使用次数减少
#ChConfig.Def_Effect_AddPrestige:"Item_AddPrestige", # 给人物威望
#ChConfig.Def_Effect_FamilyImpeach:"Item_FamilyImpeach", # 弹劾符
@@ -946,17 +956,12 @@
# return
#职业限制
- if not ItemCommon.JobUseable(curPlayer, curItem):
+ if not ItemCommon.CheckJob(curPlayer, curItem):
PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_31379")
return
#物品使用等级检查
if not ItemControler.CheckItemUseLV(curPlayer, curItem):
- return
-
- #使用物品检查是否满足属性
- if not ItemControler.CheckItemAttrLimit(curPlayer, curItem):
- PlayerControl.NotifyCode(curPlayer, "itemuse_andyshao_671654")
return
#===============================================================================
@@ -992,7 +997,7 @@
PlayerControl.NotifyCode(curPlayer, "UseResLost10")
return False
- #绑定物品不可掉落
+ #绑定物品不可丢弃
if curItem.GetIsBind():
PlayerControl.NotifyCode(curPlayer, "UseResLost10")
return False
@@ -1048,7 +1053,7 @@
curItem = curPack.GetAt(itemIndex)
#物品不存在
- if not ItemCommon.CheckItemCanUse(curItem):
+ if not ItemCommon.CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
return
#检查物品可否丢弃
@@ -1519,6 +1524,12 @@
GameWorld.DebugLog(" 物品无法使用!")
return
+ # 使用拍品
+ if ItemControler.GetIsAuctionItem(curItem):
+ GameWorld.DebugLog("玩家使用拍品: itemID=%s" % (curItem.GetItemTypeID()), curPlayer.GetPlayerID())
+ ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
+ return
+
if useCnt <= 0:
useCnt = curItem.GetCount()
GameWorld.DebugLog(" 没指定使用个数,默认使用全部=%s" % useCnt)
@@ -1769,6 +1780,53 @@
return
#---------------------------------------------------------------------
+
+def DropItem(curPlayer, itemList, npcID, dropPosX, dropPosY, isOnlySelfSee=True, isDropDisperse=True):
+ if not itemList:
+ return
+ if isDropDisperse:
+ dropItemList = []
+ for itemInfo in itemList:
+ if isinstance(itemInfo, list):
+ itemID, itemCount, isAuctionItem = itemInfo
+ # 拍品不拆
+ if isAuctionItem:
+ dropItemList.append(itemInfo)
+ continue
+ for _ in xrange(itemCount):
+ dropItemList.append([itemID, 1, isAuctionItem])
+ else:
+ dropItemList.append(itemInfo)
+ else:
+ dropItemList = itemList
+
+ index = 0
+ playerID = curPlayer.GetPlayerID()
+ gameMap = GameWorld.GetMap()
+ for posX, posY in ChConfig.Def_DropItemAreaMatrix:
+ resultX = dropPosX + posX
+ resultY = dropPosY + posY
+
+ if not gameMap.CanMove(resultX, resultY):
+ #玩家不可移动这个点
+ continue
+
+ if index > len(dropItemList) - 1:
+ break
+
+ curItem = dropItemList[index]
+ index += 1
+ if isinstance(curItem, list):
+ itemID, itemCount, isAuctionItem = curItem
+ curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer)
+
+ if not curItem:
+ continue
+
+ AddMapDropItem(resultX, resultY, curItem, ownerInfo=[ChConfig.Def_NPCHurtTypePlayer, playerID],
+ dropNPCID=npcID, isOnlySelfSee=isOnlySelfSee)
+ return
+
## 在地上添加物品(统一接口)
# @param itemPosX 位置x
# @param itemPosY 位置y
@@ -1838,8 +1896,8 @@
# @return
def EquipAddAdditionEx(curItem, equipData):
# 绑定
- if equipData.isBind:
- ItemControler.SetItemIsBind(curItem, equipData.isBind)
+ #if equipData.isBind:
+ # ItemControler.SetItemIsBind(curItem, equipData.isBind)
if not ItemCommon.CheckItemIsEquip(curItem):
return
@@ -1864,10 +1922,10 @@
#===========================================================================
# 套装
- if equipData.isSuite:
- curItem.SetIsSuite(equipData.isSuite)
- if equipData.suiteLV:
- curItem.SetUserAttr(ShareDefine.Def_IudetSuiteLV, equipData.suiteLV)
+ #if equipData.isSuite:
+ # curItem.SetIsSuite(equipData.isSuite)
+ #if equipData.suiteLV:
+ # curItem.SetUserAttr(ShareDefine.Def_IudetSuiteLV, equipData.suiteLV)
# 物品来源
if equipData.source:
curItem.SetUserAttr(ShareDefine.Def_IudetSource, equipData.source)
@@ -1907,120 +1965,6 @@
Def_Discount_ItemType, #折扣卡物品类型
Def_SelectMore_ItemType #多选礼包物品类型
) = range(2)
-
-#//A3 21 使用特殊运营物品 #tagCMUseSpecialItem
-#
-#struct tagCMUseSpecialItem
-#{
-# tagHead Head;
-# BYTE SpeicalItemType; //特殊运营物品类型,0打折卡,1多选礼包
-# int ItemID; //物品ID
-# BYTE ItemIndex; //物品在背包中的索引位置
-# BYTE Select; //选择,只对多选礼包有用
-#};
-## 使用特殊运营物品(封包参数)
-# @param index 玩家索引
-# @param packData 接收到的封包数据
-# @param tick 当前时间
-# @return None
-def OnUseSpecialItem(index, packData, tick):
-# #GameWorld.Log("OnUseSpecialItem")
-# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-# specialItemType = packData.SpeicalItemType
-# itemID = packData.ItemID
-# itemIndex = packData.ItemIndex
-# selectIndex = packData.Select
-#
-# curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-# curItem = curPack.GetAt(itemIndex)
-# if curItem.GetItemTypeID() != itemID:
-# GameWorld.Log("使用特殊运营物品失败,物品ID不一致")
-# return
-# isBind = curItem.GetIsBind()#继承被使用物品的绑定属性,先记录
-# itemName = curItem.GetName()
-#
-# needGold = 0 #需要消耗多少钻石
-# itemInfoList = []
-# useMoneyInfo = ""
-# #如果是打折卡类型
-# if specialItemType == Def_Discount_ItemType:
-# #GameWorld.Log("处理打折卡物品类型")
-# discountItem = ReadChConfig.GetEvalChConfig("DiscountItem")
-# #GameWorld.Log("读取到的打折卡物品配置信息=%s"%discountItem)
-# itemSetInfo = discountItem.get(itemID, None)
-# if not itemSetInfo:
-# GameWorld.ErrLog("折扣卡,没有找到对应物品的配置信息,物品ID:%s"%itemID)
-# return
-# needGold, itemInfo = itemSetInfo
-# itemInfoList.append(itemInfo)
-# useMoneyInfo = "UseSpecialItem_Discount"
-# else:
-# #GameWorld.Log("处理多选礼包物品类型")
-# selectMoreItem = ReadChConfig.GetEvalChConfig("SelectMoreItem")
-# #GameWorld.Log("读取到的多选礼包物品配置信息=%s"%selectMoreItem)
-# itemSetInfo = selectMoreItem.get(itemID, None)
-# if not itemSetInfo:
-# GameWorld.ErrLog("多选礼包,没有找到对应物品的配置信息,物品ID:%s"%itemID)
-# return
-# if selectIndex < 0 or selectIndex >= len(itemSetInfo):
-# GameWorld.ErrLog("多选礼包,选择索引越界,物品ID:%s 选择索引:%s"%(itemID, selectIndex))
-# return
-# itemSetInfo = itemSetInfo[selectIndex]
-# needGold, itemInfoList = itemSetInfo
-# useMoneyInfo = "UseSpecialItem_SelectMore"
-# #GameWorld.Log("needGold=%s itemInfoList=%s"%(needGold, itemInfoList))
-#
-# #钻石不足
-# if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold):
-# GameWorld.ErrLog("钻石不足")
-# return
-# #背包剩余空间
-# packSpace = ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
-# if packSpace < len(itemInfoList):
-# PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-# GameWorld.ErrLog("背包空间不足")
-# return
-# #给物品
-# for itemInfo in itemInfoList:
-# newItemId, itemCount, bind, isAppoint = itemInfo
-# makeItemID = newItemId
-# #是定制物品
-# if isAppoint:
-# appointItemList = PyMapTable.GetPyMapTable("AppointItemList") #定制物品列表
-# itemData = appointItemList.GetRecord("ItemIndex", str(newItemId))
-# if not itemData:
-# GameWorld.ErrLog("使用特殊运营物品 找不到定制物品数据, itemID = %s"%newItemId)
-# return False
-#
-# if len(itemData) != 1:
-# GameWorld.ErrLog("使用特殊运营物品 定制表配置的数据有误, itemID = %s"%newItemId)
-# return False
-#
-# itemDictData = itemData[0]
-# makeItemID = int(itemDictData['ItemID'])
-# itemCount = 1
-# itemDictData['IsBind'] = isBind
-# if not ItemControler.GivePlayerEquip(curPlayer, itemDictData, False,
-# [IPY_GameWorld.rptItem]):
-# GameWorld.ErrLog("使用特殊运营物品 给予定制物品失败")
-# return
-# else:
-# #给予物品
-# if not ItemControler.GivePlayerItem(curPlayer, newItemId, itemCount, isBind,
-# [IPY_GameWorld.rptItem], False):
-# GameWorld.ErrLog("使用特殊运营物品 给予普通物品失败")
-# return
-# #PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [makeItemID, itemCount])
-#
-# #扣除物品
-# itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-# #扣除物品
-# ItemCommon.ReduceItem(curPlayer, itemPack, [itemIndex], 1, False)
-#
-# #扣金钱
-# addDataDict = {"SpecialItemType":specialItemType, "UseItemID":itemID, "SelectIndex":selectIndex, ChConfig.Def_Cost_Reason_SonKey:itemName}
-# PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, ChConfig.Def_Cost_GiftBag, addDataDict)
- return
#// A3 07 过期物品续费 #tagCMItemRenew
#
@@ -2065,6 +2009,37 @@
return
#先删原物品再给新物品
ItemCommon.DelItem(curPlayer, timeOutItem, 1, False, "RenewItem")
- ItemControler.GivePlayerItem(curPlayer, changeItemID, 1, True, [IPY_GameWorld.rptItem])
+ ItemControler.GivePlayerItem(curPlayer, changeItemID, 1, 0, [IPY_GameWorld.rptItem])
PlayerControl.NotifyCode(curPlayer, 'Guardian_ContinuePay')
- return
\ No newline at end of file
+ return
+
+#// A3 08 物品过期 #tagCMItemTimeout
+#
+#struct tagCMItemTimeout
+#
+#{
+# tagHead Head;
+# BYTE PackType; //背包类型
+# BYTE ItemIndex; //物品在背包中索引
+#};
+def OnItemTimeout(index, clientData, tick):
+ packType = clientData.PackType
+ itemIndex = clientData.ItemIndex
+
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ backPack = curPlayer.GetItemManager().GetPack(packType)
+ if not backPack:
+ return
+ curItem = backPack.GetAt(itemIndex)
+ if not ItemCommon.CheckItemCanUse(curItem):
+ GameWorld.DebugLog("物品不存在!")
+ return
+
+ # 拍品
+ if ItemControler.GetIsAuctionItem(curItem):
+ GameWorld.DebugLog("玩家拍品过期: itemID=%s" % (curItem.GetItemTypeID()), curPlayer.GetPlayerID())
+ ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
+ return
+
+
+ return
--
Gitblit v1.8.0