From 6018c2872ce2e6d7a22fcc09d39ff4267a42c746 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 10 五月 2019 15:15:05 +0800
Subject: [PATCH] 6723 【后端】【2.0】灵器1.0版本
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 52 +++++++++++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py | 72 ++++++++++++------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 12 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py | 13 +++-
6 files changed, 101 insertions(+), 52 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 511bab0..19bf715 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -2405,6 +2405,8 @@
EquipPlace_Special = [ShareDefine.retNeck, ShareDefine.retFairyCan, ShareDefine.retFairyCan2, ShareDefine.retJade]
## 装备位 - 所有基础
EquipPlace_Base = EquipPlace_BaseWeapon + EquipPlace_BaseArmor
+## 装备位 - 灵器
+EquipPlace_LingQi = [ShareDefine.retWing, ShareDefine.retGuard1, ShareDefine.retPeerlessWeapon, ShareDefine.retPeerlessWeapon2]
#装备物品位置,不需要重刷属性
EquipItemNoRefreshState = [
@@ -2416,15 +2418,14 @@
# 需要广播外观的装备部位(除了境界装备3部位)
Def_SyncEquipStateByIndex = [
- ShareDefine.retWing, #11 翅膀
+ ShareDefine.retWing, #13 翅膀
ShareDefine.retGuard1, #14 守护1
ShareDefine.retHorse, #19 坐骑
]
#---------------------------------------------------------------------
#特殊物品光环,永久存在
-Def_SuperBuffList = [
- ]
+Def_SuperBuffList = []
#------------------------------------------------------------
@@ -4358,7 +4359,8 @@
Def_CalcAttrFunc_MagicWeapon3, # 仙族法宝属性 34
Def_CalcAttrFunc_MagicWeapon4, # 王者法宝 35
Def_CalcAttrFunc_Coat, # 时装 36
-) = range(37)
+Def_CalcAttrFunc_LingQi, # 灵器 37
+) = range(38)
# 技能功能点列表 - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉
CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
@@ -4373,7 +4375,7 @@
ShareDefine.Def_MFPType_Star:[Def_CalcAttrFunc_Star],
ShareDefine.Def_MFPType_Plus:[Def_CalcAttrFunc_Plus],
ShareDefine.Def_MFPType_Stone:[Def_CalcAttrFunc_Stone],
- ShareDefine.Def_MFPType_Wing:[Def_CalcAttrFunc_Wing],
+ ShareDefine.Def_MFPType_Wing:[Def_CalcAttrFunc_Wing, Def_CalcAttrFunc_LingQi],
ShareDefine.Def_MFPType_Wash:[Def_CalcAttrFunc_Wash],
ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign, Def_CalcAttrFunc_PetSkill],
ShareDefine.Def_MFPType_PetSoul:[Def_CalcAttrFunc_PetSoul],
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
index 07f97a7..0011390 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
@@ -65,6 +65,7 @@
ChConfig.Def_CalcAttrFunc_Stone:"宝石",
ChConfig.Def_CalcAttrFunc_Wash:"洗练",
ChConfig.Def_CalcAttrFunc_Wing:"翅膀",
+ ChConfig.Def_CalcAttrFunc_LingQi:"灵器",
ChConfig.Def_CalcAttrFunc_Pet:"灵宠",
ChConfig.Def_CalcAttrFunc_Horse:"坐骑",
ChConfig.Def_CalcAttrFunc_Prestige:"境界",
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index c1d8bd3..1b90e7e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -144,9 +144,9 @@
curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Equip)
#先刷装备BUFF 再计算属性
- if changeItemEquipPlace == ShareDefine.retWing:
- PlayerWing.CalcWingAttr(curPlayer)
- else:
+ if changeItemEquipPlace in ChConfig.EquipPlace_LingQi:
+ RefreshPlayerLingQiEquipAttr(curPlayer)
+ elif itemClassLV:
RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
#刷新所有属性
@@ -158,7 +158,6 @@
return True
-
## 刷新装备对人物属性的改变
# @param self 类实例
# @return 返回值无意义
@@ -516,9 +515,9 @@
return
#先刷装备BUFF 再计算属性
- if equipPlace == ShareDefine.retWing:
- PlayerWing.CalcWingAttr(curPlayer)
- else:
+ if equipPlace in ChConfig.EquipPlace_LingQi:
+ RefreshPlayerLingQiEquipAttr(curPlayer)
+ elif itemClassLV:
RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
#刷新所有属性
@@ -574,6 +573,45 @@
return
+def RefreshPlayerLingQiEquipAttr(curPlayer):
+ ''' 刷新玩家灵器装备属性
+ '''
+
+ classLV = 0 # 灵器阶默认为0
+ allAttrList = [{} for _ in range(4)]
+ equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+
+ for equipPlace in ChConfig.EquipPlace_LingQi:
+
+ if equipPlace == ShareDefine.retWing:
+ PlayerWing.CalcWingAttr(curPlayer)
+ continue
+
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+ if not ipyData:
+ continue
+
+ equipIndex = ipyData.GetGridIndex()
+ curEquip = equipPack.GetAt(equipIndex)
+ if not curEquip or curEquip.IsEmpty():
+ continue
+
+ if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
+ # 过期
+ continue
+
+ #基础属性效果
+ for effIndex in xrange(curEquip.GetEffectCount()):
+ curEff = curEquip.GetEffectByIndex(effIndex)
+ effID = curEff.GetEffectID()
+ if effID == 0:
+ break
+ PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), allAttrList)
+
+ #GameWorld.DebugLog("灵器属性: %s" % allAttrList)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQi, allAttrList)
+ return
+
def __CalcEquips_Effect(curPlayer, classLV):
''' 境界装备系统属性
1. 装备模块,每个境界阶独立,每个境界战力独立模块计算
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 12aa572..c130127 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4210,8 +4210,9 @@
#先压入BUFF的效果值及技能战斗力
self.RefreshAllSkill()
ChEquip.RefreshPlayerEquipAttribute(curPlayer)
+ ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
#SkillShell.RefreshPlayerBuffOnAttrAddEffect(curPlayer)
- PlayerWing.CalcWingAttr(curPlayer)
+ #PlayerWing.CalcWingAttr(curPlayer) # 翅膀暂时算在灵器里面
PlayerHorse.CalcHorseAttrEx(curPlayer)
PlayerPrestigeSys.CalcOfficialRankAttr(curPlayer)
PlayerGodWeapon.CalcGodWeaponAttr(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 7c339df..abd7f1d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -673,14 +673,14 @@
# @remarks 刷新以单位时间(分钟)消耗耐久的物品
def ProcessRefreshTimeItem(curPlayer, tick):
reFlash = False
-
+
#2分钟遍历一次,时效道具时间到不消失,
if tick - curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_EquipTime) \
- < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_TimeItem] :
+ < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_TimeItem]:
return reFlash
#耐久减少值/分钟
reFlash = ProcessTimeEquip(curPlayer, tick)
-
+
return reFlash
@@ -1074,38 +1074,38 @@
# @return 布尔值
# @remarks 处理耐久计算方式为:现实时间刷新方式的物品
def ProcessTimeEquip(curPlayer, tick):
- return
-#境界装备修改,暂屏蔽,待优化
-# itemManager = curPlayer.GetItemManager()
-# hasItemClear = False
-#
-# curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
-# for i in range(0, curPack.GetCount()):
-# curItem = curPack.GetAt(i)
-#
-# #异常物品
-# if not ItemCommon.CheckItemCanUse(curItem):
-# continue
-#
-# if curItem.GetEndureReduceType() not in [ChConfig.Def_EquipReduceType_RTimeItem,
-# ChConfig.Def_EquipReduceType_Time]:
-# continue
-#
-# #处理现实时间物品逻辑
-# if __DoLogic_ProcessTimeEquip(curPlayer, curItem, i):
-# hasItemClear = True
-#
-#
-# if hasItemClear:
-# #装备重刷属性
-# PlayerWing.CalcWingAttr(curPlayer)
-# ChEquip.RefreshPlayerEquipAttribute(curPlayer)
-#
-#
-# # 进行更新时效道具刷新时间
-# curPlayer.SetDict(ChConfig.Def_PlayerKey_EquipTime, tick)
-#
-# return hasItemClear
+ itemManager = curPlayer.GetItemManager()
+ hasItemClear = False
+
+ classLV = 0 # 只处理非境界装备的时效物品
+ curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
+ for equipPlace in ChConfig.EquipPlace_LingQi:
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+ if not ipyData:
+ continue
+ index = ipyData.GetGridIndex()
+ curItem = curPack.GetAt(index)
+
+ #异常物品
+ if not ItemCommon.CheckItemCanUse(curItem):
+ continue
+
+ if curItem.GetEndureReduceType() not in [ChConfig.Def_EquipReduceType_RTimeItem,
+ ChConfig.Def_EquipReduceType_Time]:
+ continue
+
+ #处理现实时间物品逻辑
+ if __DoLogic_ProcessTimeEquip(curPlayer, curItem, index):
+ hasItemClear = True
+
+ if hasItemClear:
+ #装备重刷属性
+ ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
+
+ # 进行更新时效道具刷新时间
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_EquipTime, tick)
+ return hasItemClear
+
#---------------------------------------------------------------------
## 装备有效时间到了需要脱下,有效时间物品改成不消失,但是无使用效果 可出售和续费
def __DoLogic_ProcessTimeEquip(curPlayer, curItem, equipIndex):
@@ -1122,7 +1122,7 @@
# 没有空位,玩家主动取下,计算属性时无效化
# 过期属性时效需刷属性
return True
-
+
result = ItemControler.PlayerItemControler(curPlayer).UnEquipItem(equipIndex, spaceIndex)
if not result:
# 过期属性时效需刷属性
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
index 2270926..cc27958 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
@@ -279,10 +279,17 @@
# @param allAttrList 属性列表
# @return None
def CalcWingAttr(curPlayer):
- allAttrList = [{} for _ in range(4)]
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- curWing = equipPack.GetAt(ShareDefine.retWing)
+ classLV = 0
+ equipPlace = ShareDefine.retWing
+ allAttrList = [{} for _ in range(4)]
+
+ curWing = None
+ equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+ if ipyData:
+ curWing = equipPack.GetAt(ipyData.GetGridIndex())
+
if not ItemCommon.CheckItemCanUse(curWing):
#GameWorld.DebugLog("没有穿戴翅膀!")
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wing, allAttrList)
--
Gitblit v1.8.0