From b82e6dbda1129a3f55d0177964a35d77feff7c77 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 20 十二月 2019 16:40:51 +0800
Subject: [PATCH] 8360 【主干】仙界秘境修改(改为击杀固定怪物数模式)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py |  181 +++++++++-----------------------------------
 1 files changed, 38 insertions(+), 143 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
index 040d5b8..7dedfe8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
@@ -72,6 +72,9 @@
 import math
 import time
 
+# 商店类型定义
+ShopType_FairyCeremony = 19 # 仙界盛典烟花
+
 g_mysticalShopDict = {} #神秘商店{等级范围:[等级段,{金钱类型:库}]}
 #---------------------------------------------------------------------
 ##开始交易
@@ -194,17 +197,9 @@
     return
 
 ## 登录
-def ShopItemOnLogin(curPlayer):
-    if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_SuperGift):
-        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_SuperGift, 1)
-        isGet = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldGiftFirstRecord)
-        if isGet:#首充奖励已领取则代表超值礼包已开启过,
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftHasOpen, 1)
-            
-    
+def ShopItemOnLogin(curPlayer):    
     SyncMysticalLimitShopInfo(curPlayer)
     SyncShopItemTodayBuyCount(curPlayer)
-    SyncSuperGiftInfo(curPlayer)
     if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MysticalShopGoods % 0):
         __DoMysticalShopRefresh(curPlayer, True, GameWorld.GetGameWorld().GetTick())
     SyncMysticalShopInfo(curPlayer)
@@ -215,7 +210,6 @@
 # @return 
 def ShopItemOnDay(curPlayer, onEventType):
     if onEventType == ShareDefine.Def_OnEventType:
-        UpdataSuperGiftTime(curPlayer, True)
         OSSaleOpenMail(curPlayer)
         refreshType = [3]
         #神秘商店刷新次数重置
@@ -363,7 +357,7 @@
     diffTime = GameWorld.GetCurrentTime() - GameWorld.GetDateTimeByStr(createRoleTime, ChConfig.TYPE_Time_Format)
     pastSeconds = diffTime.days*24*60*60 + diffTime.seconds
     refreshTime = IpyGameDataPY.GetFuncCfg('MysteryShopRefresh', 4)
-    if pastSeconds % refreshTime == 0:
+    if refreshTime and pastSeconds % refreshTime == 0:
         __DoMysticalShopRefresh(curPlayer, True, tick)
     return
 
@@ -379,7 +373,10 @@
 
 def __DoMysticalShopRefresh(curPlayer, isFree, tick):
     global g_mysticalShopDict #{等级范围:[等级段,{金钱类型:库}]}
-    
+    refreshTime = IpyGameDataPY.GetFuncCfg('MysteryShopRefresh', 4)
+    if not refreshTime:
+        return
+
     lastTime = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MysticalShopLastTime)
     if lastTime and tick - lastTime < 1000:
         #GameWorld.DebugLog('神秘商店刷新,过于频繁!')
@@ -392,6 +389,8 @@
             lvRange = ipyData.GetLVRange()
             goodsID = ipyData.GetGoodsID()
             goodsIpyData = IpyGameDataPY.GetIpyGameData('Store', goodsID)
+            if not goodsIpyData:
+                continue
             moneyType = goodsIpyData.GetMoneyType()
             weight = goodsIpyData.GetLimitValue()
             lvkey = tuple(lvRange)
@@ -402,7 +401,8 @@
                 g_mysticalShopDict[lvkey][1][moneyType] = []
             weightDict[moneyType] = weightDict.get(moneyType, 0) + weight
             g_mysticalShopDict[lvkey][1][moneyType].append([weightDict[moneyType], goodsID])
-            
+    if not g_mysticalShopDict:
+        return 
     playerLV = curPlayer.GetLV()
     curLVDan, shopDict = GameWorld.GetDictValueByRangeKey(g_mysticalShopDict, playerLV)
     if not shopDict:
@@ -680,7 +680,7 @@
     sendMailKey = mailKey if isLackPack and mailKey else '' #背包不足且配置了mailKey的才发邮件
         
     # 购买限制条件扩展
-    if CheckBuyItemLimitEx(curPlayer, shopType, itemIndex, mainItemID, ipyData.GetLimitValue()):
+    if CheckBuyItemLimitEx(curPlayer, shopType, itemIndex, mainItemID, ipyData.GetLimitValue(), clientBuyCount):
         GameWorld.Log("Store shop item buy limit! shopType=%s,itemIndex=%s,limitValue=%s" 
                       % (shopType, itemIndex, ipyData.GetLimitValue()), curPlayer.GetPlayerID())
         return
@@ -732,7 +732,7 @@
 
     itemControl = ItemControler.PlayerItemControler(curPlayer)
     for itemID, itemCount, isBind in totalItemList:
-        curItemObj = ItemControler.GetOutPutItemObj(itemID, itemCount, False)
+        curItemObj = ItemControler.GetOutPutItemObj(itemID, itemCount, False, curPlayer=curPlayer)
         if not curItemObj:
             continue
         userData = curItemObj.GetUserData()
@@ -747,17 +747,24 @@
         
         if ipyData.GetNotifyMark() and itemID == mainItemID:
             PlayerControl.WorldNotify(0, ipyData.GetNotifyMark(), [curPlayer.GetName(), mainItemID, userData])
+            
+        # 购买永久守护时删除限时守护
+        if itemID == 4101:
+            delGuardItem = ItemCommon.FindItemInPackByItemID(curPlayer, 4105, IPY_GameWorld.rptItem)
+            if delGuardItem:
+                ItemCommon.DelItem(curPlayer, delGuardItem, 1)
+                
     if sendMailKey:
         PlayerControl.SendMailByKey(sendMailKey, [curPlayer.GetID()], totalItemList, detail=dataDict)
     #触发任务购买物品
     EventShell.EventRespons_ShopBuy(curPlayer, shopType)
     #curPlayer.ShopResult(itemIndex, IPY_GameWorld.tsrShopOK)
     SyncShoppingResult(curPlayer, itemIndex, clientBuyCount)
-    if itemIndex in IpyGameDataPY.GetFuncEvalCfg('CeremonyFireParty', 1, {}).values():
-        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Fireworks, clientBuyCount)
-    if itemIndex in IpyGameDataPY.GetFuncEvalCfg('NewCeremonyFireParty', 1, {}).values():
-        PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Fireworks, clientBuyCount)
     
+    if shopType == ShopType_FairyCeremony:
+        PlayerFairyCeremony.OnBuyFireworks(curPlayer, itemIndex, clientBuyCount)
+#    if itemIndex in IpyGameDataPY.GetFuncEvalCfg('NewCeremonyFireParty', 1, {}).values():
+#        PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Fireworks, clientBuyCount)
     return
 
 def GetShopJobItem(job, itemID, jobItemList):
@@ -784,7 +791,7 @@
 ## 商店购买物品限制条件扩展
 #  @param curPlayer 玩家实例
 #  @return 
-def CheckBuyItemLimitEx(curPlayer, shopNPCID, itemIndex, curItemID, limitValue):
+def CheckBuyItemLimitEx(curPlayer, shopNPCID, itemIndex, curItemID, limitValue, clientBuyCount):
     if shopNPCID == 7: #符印商店
         return not PlayerRune.GetIsOpenByRuneID(curPlayer, curItemID)
     if shopNPCID in [8, 9, 10]: #仙盟商店
@@ -799,13 +806,15 @@
         #playerCreateRoleDays = GameWorld.GetCreateRoleDays(curPlayer)
         openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)+1
         return openServerDay != limitValue
-    #烟花狂欢
-    if itemIndex in IpyGameDataPY.GetFuncEvalCfg('CeremonyFireParty', 1, {}).values():
-        return not PlayerFairyCeremony.IsCanBuyFireworks(curPlayer, itemIndex)
-    if itemIndex in IpyGameDataPY.GetFuncEvalCfg('NewCeremonyFireParty', 1, {}).values():
-        return not PlayerNewFairyCeremony.IsCanBuyFireworks(curPlayer, itemIndex)
-#    if itemIndex in dict(IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList')):
-#        return not CheckSuperGiftBuy(curPlayer, itemIndex)
+    
+    #仙界盛典 - 烟花狂欢
+    if shopNPCID == ShopType_FairyCeremony:
+        return not PlayerFairyCeremony.IsCanBuyFireworks(curPlayer, itemIndex, clientBuyCount)
+    
+    #另一个仙界盛典可用其他商店NPCID,这里先注释,之后再改
+#    if itemIndex in IpyGameDataPY.GetFuncEvalCfg('NewCeremonyFireParty', 1, {}).values():
+#        return not PlayerNewFairyCeremony.IsCanBuyFireworks(curPlayer, itemIndex)
+    
     if shopNPCID == 16:#神秘限购
         startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopItemStartTime % itemIndex)
         curTime = int(time.time())
@@ -848,52 +857,6 @@
     PlayerControl.SendMailByKey('SellMail1', [curPlayer.GetID()], addItemList)
     return
 
-#超值礼包购买时间
-def UpdataSuperGiftTime(curPlayer, isOnday=False):
-    curTime = int(time.time())
-    if isOnday:
-        startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime)
-        if not startTime:
-            return
-        superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList')
-        maxDay = max([info[1] for info in superGiftTimeList])
-        if curTime - startTime >= maxDay * 86400:
-            #活动结束 重置
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftStartTime, 0)
-    else:
-        if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftHasOpen):
-            #老号已开启过超值礼包则不再开启
-            return
-        
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftStartTime, curTime)
-        addItemList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList', 2)
-        PlayerControl.SendMailByKey('SellMail2', [curPlayer.GetID()], addItemList)
-        SyncSuperGiftInfo(curPlayer)
-    return True
-
-def SyncSuperGiftInfo(curPlayer):
-    startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime)
-    if not startTime:
-        return
-    packData = ChPyNetSendPack.tagMCSuperGiftInfo()
-    packData.StartTime = startTime
-    NetPackCommon.SendFakePack(curPlayer, packData)
-    return
-def CheckSuperGiftBuy(curPlayer, giftID):
-    #超值礼包是否可购买
-    startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime)
-    if not startTime:
-        return
-    
-    superGiftTimeDict = dict(IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList'))
-    totalDay = superGiftTimeDict.get(giftID, 0)
-    if not totalDay:
-        return
-    curTime = int(time.time())
-    if (curTime - startTime)/86400 >= totalDay:
-        #已结束
-        return
-    return True
 
 ## 商店npcid
 #  @param curPlayer 玩家实例
@@ -936,46 +899,6 @@
 
     return True
 
-
-#---------------------------------------------------------------------
-##检查物品可否修理
-# @param curPlayer 玩家实例
-# @param curItem 物品实例
-# @param farRepair 是否远程修理
-# @return 返回值真, 检查通过
-# @remarks 检查物品可否修理
-#===============================================================================
-# def __CheckRepairItem(curPlayer, curItem, farRepair):
-#    
-#    if not ItemCommon.CheckItemCanUse(curItem):
-#        if not farRepair:
-#            #封包信息不正确
-#            PlayerControl.NotifyCode(curPlayer, "UseResLost04")
-#            
-#        return
-#    
-#    if curItem.GetCanRepair() == 0:
-#        if not farRepair:
-#            #物品不可修理
-#            PlayerControl.NotifyCode(curPlayer, "UseResLost13")   
-#            
-#        return
-#    
-#    if ItemControler.IsEventItem(curItem):
-#        if not farRepair:
-#            PlayerControl.NotifyCode(curPlayer, "itemuse_chenxin_31379")
-#             
-#        return
-#    
-#    if curItem.GetEndureReduceType() == ChConfig.Def_EquipReduceType_None or curItem.GetMaxEndure() == 0:
-#        if not farRepair:
-#            #耐久字段为0,不符合要求,返回
-#            PlayerControl.NotifyCode(curPlayer, "UseResLost13")
-#            
-#        return
-#    
-#    return True
-#===============================================================================
 #--------------------出售物品
 ##出售物品
 # @param curPlayer 玩家实例
@@ -1097,7 +1020,7 @@
 # @return 返回值真, 检查通过
 # @remarks 检查物品是否可以出售
 def __CheckItemSell(curPlayer, curItem) :
-    if not ItemCommon.CheckItemCanUse(curItem):
+    if not ItemCommon.CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_644055")
         return
     
@@ -1142,35 +1065,7 @@
     priceType = IPY_GameWorld.TYPE_Price_Silver_Money
     curItemPrice = curItem.GetSilverPrice()
     return curItemPrice, priceType
-    #绑定价格售价为0, 2011.4.27
-#    if curItem.GetIsBind():
-#        itrmPrice_bind = eval(ReadChConfig.GetChConfig("ItemSellPrice_Bind"))
-#        return itrmPrice_bind, priceType
-#    
-#    #无耐久物品
-#    if curItemEndure == 0 :
-#        return curItemPrice * 0.5, priceType
-#    
-#    itrmPrice_notBind = eval(ReadChConfig.GetChConfig("ItemSellPrice_NotBind"))
-#    return itrmPrice_notBind, priceType
-#===============================================================================
-#   2010.11.25 绑定售价和非绑定一致
-#        #绑定的
-#        if curItem.GetIsBind():
-#            return curItemPrice * 0.5 * 0.5, curItemType
-#        #非绑定的
-#        return curItemPrice * 0.5, curItemType
-#===============================================================================
-#===============================================================================
-#    
-#    #绑定正常物品出售价格
-#    if curItem.GetIsBind() :
-#        return eval(ChConfig.Def_Formula_ItemSellPrice) * 0.5, curItemType
-#    
-#    #未绑定正常物品出售价格
-#    return eval(ChConfig.Def_Formula_ItemSellPrice), curItemType
-#===============================================================================
-#---------------------------------------------------------------------
+
 ##检查玩家可否开始NPC事件
 # @param curPlayer 玩家实例
 # @return 返回值真, 检查通过

--
Gitblit v1.8.0