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