From 6e928c09df9d294e2f90cd91189a3c9abb7b007f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 31 十月 2025 17:58:33 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(词条技能1014 ~ 1019:增加技能初始CD支持,优化技能CD;优化技能属性、buff属性计算;修复纯buff怒技没有同步技能的bug;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py | 211 +++++++++++-----------------------------------------
1 files changed, 47 insertions(+), 164 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
index ac64644..e3a59b7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -77,9 +77,7 @@
import ItemControler
import ItemCommon
import ShareDefine
-import DataRecordPack
import PlayerCoat
-import PlayerGatherSoul
import PlayerRune
import IpyGameDataPY
import NPCCommon
@@ -133,10 +131,10 @@
#@remarks 远程执行NPC功能
def FuncDirectCall(curPlayer, responseType, funcAnswer, tick, clientData=None):
#远程事件,状态统一判断
- if not FunctionNPCCommon.CheckPlayerCanStateEvent(curPlayer):
- #退出回包
- SyncMakeItemRefuse(curPlayer, funcAnswer)
- return
+ #if not FunctionNPCCommon.CheckPlayerCanStateEvent(curPlayer):
+ # #退出回包
+ # SyncMakeItemRefuse(curPlayer, funcAnswer)
+ # return
callFunc = GameWorld.GetExecFunc(EventSrc, "%s.%s"%(responseType, funcAnswer))
@@ -193,36 +191,6 @@
return GameWorld.GetPsycoFunc(callFunc)(curPlayer, tick)
#===============================================================================
-# //08 03 玩家购买物品#tagCBuyItemList
-# tagCBuyItemList * GettagCBuyItemList();
-#
-# class IPY_CBuyItemList
-# {
-# public:
-#
-# int GetBuyItemIndex();
-# //购买数量
-# int GetBuyCount();
-# };
-#===============================================================================
-##客户端封包响应//08 03 玩家购买物品#tagCBuyItemList
-#@param index 玩家索引
-#@param tick 时间戳
-#@return 返回值无意义
-#@remarks 客户端封包响应//08 03 玩家购买物品#tagCBuyItemList
-def BuyItem(index, tick):
- #得到玩家的对象
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-
- result = FuncDirectCall(curPlayer, "FunctionNPCCommon", "BuyItem", tick)
-
- if result:
- PlayerControl.NotifyCode(curPlayer, "BuyResSucceed")
-
- return
-
-
-#===============================================================================
# //A2 03 回购物品 #tagCMBuyItemBack
#
# struct tagCMBuyItemBack
@@ -236,31 +204,8 @@
# @return None
def BuyItemBack(index, clientPack, tick):
#得到玩家的对象
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- FunctionNPCCommon.BuyItemBack(curPlayer, clientPack, tick)
- return
-
-#===============================================================================
-# //08 06 卖物品#tagCPlayerSellItem
-# tagCPlayerSellItem * GettagCPlayerSellItem();
-#
-# class IPY_CPlayerSellItem
-# {
-# public:
-# //背包类型
-# int GetPackType();
-# //物品索引
-# int GetItemIndex();
-# };
-#===============================================================================
-##客户端封包响应//08 06 卖物品#tagCPlayerSellItem
-#@param index 玩家索引
-#@param tick 时间戳
-#@return 返回值无意义
-#@remarks 客户端封包响应//08 06 卖物品#tagCPlayerSellItem
-def SellItem(index, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- FuncDirectCall(curPlayer, "FunctionNPCCommon", "SellItem", tick)
+ #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ #FunctionNPCCommon.BuyItemBack(curPlayer, clientPack, tick)
return
#===============================================================================
@@ -387,16 +332,16 @@
# @return 无返回值
# @remarks 07 3C通用背包操作#tagCBackpackOperate
def BackpackOperate(index, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- sendPack = IPY_GameWorld.IPY_CBackpackOperate()
- pack_SrcBackpack = sendPack.GetSrcBackpack()
- pack_DesBackPack = sendPack.GetDesBackPack()
- pack_SrcIndex = sendPack.GetSrcIndex()
- pack_DestIndex = sendPack.GetDestIndex()
- pack_ItemCount = sendPack.GetCount()
-
- FunctionNPCCommon.BackpackOperate(curPlayer, pack_SrcBackpack, pack_DesBackPack,
- pack_SrcIndex, pack_DestIndex, pack_ItemCount, tick)
+# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+# sendPack = IPY_GameWorld.IPY_CBackpackOperate()
+# pack_SrcBackpack = sendPack.GetSrcBackpack()
+# pack_DesBackPack = sendPack.GetDesBackPack()
+# pack_SrcIndex = sendPack.GetSrcIndex()
+# pack_DestIndex = sendPack.GetDestIndex()
+# pack_ItemCount = sendPack.GetCount()
+#
+# FunctionNPCCommon.BackpackOperate(curPlayer, pack_SrcBackpack, pack_DesBackPack,
+# pack_SrcIndex, pack_DestIndex, pack_ItemCount, tick)
return
#---------------------------------------------------------------------
#===============================================================================
@@ -426,16 +371,13 @@
# 符印交换
if PlayerRune.SwitchRune(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
return
- # 聚魂交换
- if PlayerGatherSoul.SwitchGatherSoul(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
- return
#时装
if PlayerCoat.SwitchCoat(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
return
- FunctionNPCCommon.PackItemExchange(curPlayer, pack_SrcBackpack, pack_DesBackPack,
- pack_SrcIndex, pack_DestIndex, tick)
+ #FunctionNPCCommon.PackItemExchange(curPlayer, pack_SrcBackpack, pack_DesBackPack,
+ # pack_SrcIndex, pack_DestIndex, tick)
return
#===============================================================================
@@ -455,104 +397,45 @@
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
pack = IPY_GameWorld.IPY_COpenPackCount()
packType = pack.GetPackType()
- if packType not in ChConfig.Def_Type_CanBuyPack_PlayerDict.keys():
- return
-
- buyCount = pack.GetCount()
+ #buyCount = pack.GetCount()
+ __DoOpenPackCount(curPlayer, packType)
+ return
- #已购买格子数
- keyName = ChConfig.Def_Type_CanBuyPack_PlayerDict[packType][ChConfig.Def_PlayerPackDict_Index_Key]
- curGridCnt = curPlayer.NomalDictGetProperty(keyName)
-
- #默认格子数
- initCnt = ItemCommon.GetPackInitCount(packType)
+def __DoOpenPackCount(curPlayer, packType):
+ costMoneyTypeDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 1, {})
+ costMoneyValueDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 2, {})
+ openGridListDict = IpyGameDataPY.GetFuncEvalCfg("OpenPack", 3, {})
+ if str(packType) not in costMoneyTypeDict or str(packType) not in costMoneyValueDict or str(packType) not in openGridListDict:
+ GameWorld.ErrLog("该背包不可购买! packType=%s" % packType)
+ return
+ moneyType = costMoneyTypeDict[str(packType)]
+ costValueList = costMoneyValueDict[str(packType)]
+ openGridList = openGridListDict[str(packType)]
curPack = curPlayer.GetItemManager().GetPack(packType)
curPackMaxCnt = curPack.GetMaxCount()
- openAnonCnt = initCnt + curGridCnt + buyCount
+ initCnt = ItemCommon.GetPackInitCount(packType)
+ alreadyOpenCnt = ItemCommon.GetPackOpenItemCnt(curPlayer, packType)
+ canOpenGridCnt = curPackMaxCnt - initCnt - alreadyOpenCnt
- if curPackMaxCnt < openAnonCnt:
+ nextBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PackBuyCnt % packType) + 1
+ nextOpenCnt = openGridList[nextBuyCnt - 1] if len(openGridList) >= nextBuyCnt else openGridList[-1]
+ moneyCnt = costValueList[nextBuyCnt - 1] if len(costValueList) >= nextBuyCnt else costValueList[-1]
+
+ if canOpenGridCnt < nextOpenCnt:
#数量超过最大格子数
- GameWorld.DebugLog("购买背包格子,数量超过最大格子数!packType=%s,buyCount=%s" % (packType, buyCount))
- return
-
- isBuyOK, costMoneyList = DoOpenGrid(curPlayer, curGridCnt, packType, buyCount)
- if not isBuyOK:
+ GameWorld.DebugLog("购买背包格子,数量超过最大格子数!packType=%s,initCnt=%s,alreadyOpenCnt=%s,已购买次数=%s,curPackMaxCnt=%s,canOpenGridCnt=%s < %s"
+ % (packType, initCnt, alreadyOpenCnt, nextBuyCnt - 1, curPackMaxCnt, canOpenGridCnt, nextOpenCnt))
return
- #fromIndex, toIndex = curGridCnt + 1, curGridCnt + buyCount
-# GameWorld.Log("fromIndex=%s toIndex=%s"%(fromIndex, toIndex))
- PlayerControl.NomalDictSetProperty(curPlayer, keyName, curGridCnt + buyCount)
+ infoDict = {"BuyCount":nextBuyCnt, ChConfig.Def_Cost_Reason_SonKey:packType}
+ if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_BuyPack, infoDict, 1):
+ return
- if packType == IPY_GameWorld.rptItem:
- #背包刷新
- PlayerControl.Init_ItemPack(curPlayer)
- PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_671654")
- #PlayerControl.SyncOnLineTimeTotal(curPlayer)
- #PlayerControl.SyncOnLineTimeLastOpenPack(curPlayer, packType)
-
-
- elif packType == IPY_GameWorld.rptWarehouse:
- #仓库刷新
- PlayerControl.Init_Warehouse(curPlayer)
-
- else:
- #收纳柜刷新
- PlayerControl.Init_CabinetCountByType(curPlayer, packType)
-
- DataRecordPack.DR_OpenPackCount(curPlayer, packType, buyCount, curPlayer.NomalDictGetProperty(keyName))
-
- if costMoneyList:
- #消费记录
- for moneyType, money in costMoneyList:
- GameWorld.Login_Interface_GoldRec(curPlayer, 0, 1, 'BuyPackGrid', moneyType, money)
-
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PackBuyCnt % packType, nextBuyCnt)
+ PlayerControl.Init_PackCount(curPlayer, packType)
+ ItemCommon.SyncPackBuyCnt(curPlayer, packType)
return
-
-##开启格子扣道具钻石
-# @param curPlayer 玩家对象
-# @param buyMoney 钻石消耗
-# @param packType 背包类型
-# @param curPack 物品管理器
-# @param buyPackMoneyType 货币类型
-# @param buyCount 购买格子数
-# @return None 是否购买成功, 玩家是否有钱款
-def DoOpenGrid(curPlayer, curGridCnt, packType, buyCount):
- curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-
- itemId = IpyGameDataPY.GetFuncCfg('OpenBagItem')
- itemCntFormula = IpyGameDataPY.GetFuncCompileCfg('OpenBagItem', 2)
- buyMoney = IpyGameDataPY.GetFuncCfg('OpenBagItem', 3)
- totalItemCnt = 0
- for index in range(curGridCnt+1, curGridCnt + buyCount+1):
- itemcnt = eval(itemCntFormula)
- totalItemCnt += itemcnt
-
- hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemId, curPack, totalItemCnt)
-
- needMoney = lackCnt * buyMoney if not hasEnough else 0
-
-
- # 需要付钱
- costMoneyList = []
- if needMoney > 0:
- costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, needMoney)
- if costMoneyList == []:
- #金钱不足
- return False, costMoneyList
-
- #付款
- for moneyType, moneyCnt in costMoneyList:
- infoDict = {"BuyCount":buyCount, ChConfig.Def_Cost_Reason_SonKey:packType}
- if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_BuyPack, infoDict, 1):
- return False, costMoneyList
-
- # 扣道具
- delCnt = max(0, totalItemCnt - lackCnt) # 实际扣除的个数
- if indexList:
- ItemCommon.ReduceItem(curPlayer, curPack, indexList, delCnt, True)
-
- return True, costMoneyList
#===============================================================================
#//A2 04 请求打开远程仓库 #tagCMOpenLongWarehouse
--
Gitblit v1.8.0