From f198885f31c9c7eb19eb28adce562e39e64d581c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 18 七月 2025 16:23:11 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(属性计算、战斗力计算;新角色初始给默认装备、默认阵容武将;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 128
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini | 18
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 1136 --------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 52
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 88
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py | 9
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py | 15
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 14
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 114
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 99
PySysDB/PySysDBPY.h | 47
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 2081 ---------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 536 ----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 38
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py | 72
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 273 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py | 348 --
/dev/null | 95
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py | 290 --
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py | 180 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py | 619 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 12
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py | 188 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py | 31
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 145 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py | 311 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 15
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py | 229 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py | 62
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 536 +--
46 files changed, 1,549 insertions(+), 6,290 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 513a1e7..dd16eba 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -40,6 +40,7 @@
WORD DefInheritPer; //防御继承
WORD HPInheritPer; //生命继承
dict BatAttrDict; //其他战斗属性字典 {"属性ID":值, ...}
+ list FetterIDList; //羁绊ID列表
};
//武将星级天赋表
@@ -80,6 +81,15 @@
{
WORD _FetterID; //羁绊ID
list HeroIDList; // 武将ID组合列表
+ list AttrIDList; // 属性ID列表
+ list AttrValueList; // 属性值列表
+};
+
+//阵容光环表
+struct HeroLineupHalo
+{
+ WORD _Country; //国家
+ BYTE NeedHeroCount; // 所需武将数
list AttrIDList; // 属性ID列表
list AttrValueList; // 属性值列表
};
@@ -133,6 +143,13 @@
DWORD _Quality; //品质
DWORD _HeroLV; //武将等级
list UPCostItem; // 升级到下级消耗道具
+};
+
+//属性条目表
+struct PlayerAttr
+{
+ DWORD _AttrID; //属性ID
+ char Parameter; //属性名、参数名
};
//主线章节表
@@ -874,33 +891,9 @@
{
WORD _LV; //玩家等级
DWORD Exp; //升级所需经验
- BYTE TalentPoint; //等级获得的天赋点
- DWORD ReExp; //等级经验效率(second)
- DWORD ReMaxHP; //生命
- DWORD ReAtk; //攻击
- DWORD ReDef; //防御
- DWORD ReHit; //命中
- DWORD ReMiss; //闪避
- DWORD ReAtkSpeed; //攻速
- DWORD ReSkillAtkRate; //技能伤害比例
- DWORD ReDamagePer; //增加伤害
- DWORD ReDamReduce; //减少伤害
- DWORD ReIgnoreDefRate; //无视防御比例
- DWORD ReLuckyHitRate; //会心一击率
- DWORD ReLuckyHit; //会心一击伤害
- DWORD ReBleedDamage; //流血伤害增加
- DWORD ReIceAtk; //真实伤害
- DWORD ReIceDef; //真实抵御
- DWORD RePetAtk; //灵宠攻击
- DWORD RePetSkillAtkRate; //灵宠技能
- DWORD RePetDamPer; //灵宠伤害增加
- DWORD ReFinalHurt; //固定伤害增加
- DWORD ReFinalHurtReduce; //固定伤害减少
- DWORD RePotionReply; //血瓶恢复量
- DWORD RePotionCD; //血瓶CD
- DWORD AttackEff; //挂机效率
- DWORD ReFightPower; //战斗力
- DWORD IceLodeFightPower; //冰晶矿脉扫荡战斗力
+ DWORD MaxHP; //生命
+ DWORD Atk; //攻击
+ DWORD Def; //防御
};
//特殊地图玩家属性公式表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 47e278f..b3b91b1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -668,18 +668,6 @@
PacketSubCMD_25=0x20
PacketCallFunc_25=OnMoneyExchange
-;购买相关的
-[BuySomething]
-ScriptName = Event\EventSrc\Operate_PlayerBuyZhenQi.py
-Writer = xcc
-Releaser = xcc
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1 = 0xA5
-PacketSubCMD_1 = 0x30
-PacketCallFunc_1 = OnPlayerBuySomething
-
;签到
[PlayerSignDay]
ScriptName = Player\PlayerSignDay.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
index a61f4ff..6aa7b63 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
@@ -441,24 +441,6 @@
PacketSubCMD_11=0x21
PacketCallFunc_11=GetBackItemInFabao
-
-;装备
-[Equip]
-ScriptName = Item\ChEquip.py
-Writer = eggxp
-Releaser = eggxp
-RegType = 0
-RegisterPackCount = 3
-PacketCMD_1=0x7
-PacketSubCMD_1=0x3
-PacketCallFunc_1=PlayerEquipItem
-PacketCMD_2=0x7
-PacketSubCMD_2=0x4
-PacketCallFunc_2=PlayerUnEquip
-PacketCMD_3=0x3
-PacketSubCMD_3=0x2F
-PacketCallFunc_3=RequestEquipShowHide
-
;事件
[Event]
ScriptName = Event\EventShell.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index d4639ce..4f4bdcb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -31,7 +31,6 @@
import PlayerControl
import NPCCommon
import SkillCommon
-import EffGetSet
import FBLogic
import ReadChConfig
import PetControl
@@ -374,15 +373,6 @@
AddHurtValue(defender, attacker.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, 1)
return
-## 被攻击者被动buff触发
-# @param curTagPlayer 被攻击者
-# @param tick 当前时间
-# @param isSuperHit 暴击
-# @return None
-# @remarks 函数详细说明.
-def DefenderSpringBuff(curTagPlayer, tick, isSuperHit=False):
- return
-
#---------------------------------------------------------------------
def GetBattleRelationType(attacker, defender):
@@ -470,44 +460,6 @@
return ChConfig.AtkDistType_Short
-## 输入基础数值,返回增强后的值 - 技能加强
-# @param value 基础值
-# @param skill 技能
-# @return 增强后的值
-# @remarks 函数详细说明.
-def GetEnhanceValue(value, skill):
- per = skill.GetEffect(0).GetEffectValue(0)
- eff = skill.GetEffect(0).GetEffectValue(1)
- #GameWorld.Log("被动 -> 自身属性,技能ID = %s,技能增强 = %s,附加 = %s , 基础值 = %s"%(skill.GetSkillName(),per,eff,value))
- return max(value * per / ChConfig.Def_MaxRateValue + eff , 1)
-
-## 输入基础数值,返回增强后的值 (LV)- 效果加强
-# @param value 基础值
-# @param eff 效果
-# @return 增强后的值
-# @remarks 函数详细说明.
-def GetEnhanceValue_Eff(value, eff):
- per = eff.GetEffectValue(0)
- eff = eff.GetEffectValue(1)
- #GameWorld.Log("value = %s,per = %s,erf = %s"%(value,per,eff))
- return max(value * per / ChConfig.Def_MaxRateValue + eff , 1)
-
-## 输入基础效果值,(玩家索引) -> 技能增强
-# @param curPlayer 当前玩家
-# @param curEffect 当前效果
-# @return 增强后的值
-# @remarks 函数详细说明.
-def GetEnhanceIndexValue_Eff(curPlayer, curEffect):
- index = curEffect.GetEffectValue(0)
- skillPer = curEffect.GetEffectValue(1)
- effect = curEffect.GetEffectValue(2)
- maxValue = EffGetSet.GetValueByEffIndex(curPlayer, index)
- #GameWorld.Log("-----%s,%s,%s,%s"%(index,skillPer,effect,maxValue))
-
- if maxValue == None:
- return 0
-
- return max(maxValue * skillPer / ChConfig.Def_MaxRateValue + effect , 1)
#--------------------------------------------------------------------------
## 设置玩家进入战斗状态
# @param defender 当前玩家(被攻击了)
@@ -1379,25 +1331,6 @@
return hurtType, hurtTypeResultDict
-
-def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState, curSkill):
- ''' 判断伤害类型是否发生 - 会心一击
- @return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
- '''
- if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_LuckyHit):
- return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
-
- aLuckyHitRate = atkObj.GetLuckyHitRate()
- dLuckyHitRateReduce = PlayerControl.GetLuckyHitRateReduce(defObj)
-
-
- atkLuckyHitRate = eval(ReadChConfig.GetChConfig("CalcLuckyHitRate"))
- if atkLuckyHitRate <= 0:
- return
- if GameWorld.CanHappen(atkLuckyHitRate):
- return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
- return
-
def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState, curSkill):
''' 判断伤害类型是否发生 - 暴击
@return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
@@ -1423,22 +1356,12 @@
''' 判断伤害类型是否发生 - 防守方抵御
@return: 是否触发, 触发时伤害计算值, 触发时防守方的伤害减免值
'''
- chanceDefPer = PlayerControl.GetDamChanceDef(defObj)
- if not chanceDefPer:
- return
- if GameWorld.CanHappen(ChConfig.Def_ChanceDefRate):
- return True, 0, chanceDefPer
- return
-
-#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState, curSkill):
-# """诛仙一击"""
-# rate = PlayerControl.GetZhuXianRate(atkObj)
-# if not rate:
+# chanceDefPer = PlayerControl.GetDamChanceDef(defObj)
+# if not chanceDefPer:
# return
-#
-# if GameWorld.CanHappen(rate):
-# return True, PlayerControl.GetZhuXianHurtPer(atkObj), 0
-# return
+# if GameWorld.CanHappen(ChConfig.Def_ChanceDefRate):
+# return True, 0, chanceDefPer
+ return
# 致命一击
def __HurtTypeHappen_Deadly(atkObj, defObj, happenState, curSkill):
@@ -1483,21 +1406,21 @@
if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
reducePer = SkillCommon.GetSkillReducePerByID(defObj, skillTypeID)
- #根据防守方职业 计算攻击方伤害加成
- if defObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
- addPer += PlayerControl.GetJobAHurtAddPer(atkObj)
- elif defObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
- addPer += PlayerControl.GetJobBHurtAddPer(atkObj)
- elif defObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
- addPer += PlayerControl.GetJobCHurtAddPer(atkObj)
-
- #根据攻击方职业 计算防守方伤害减免
- if atkObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
- reducePer += PlayerControl.GetJobAAtkReducePer(defObj)
- elif atkObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
- reducePer += PlayerControl.GetJobBAtkReducePer(defObj)
- elif atkObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
- reducePer += PlayerControl.GetJobCAtkReducePer(defObj)
+# #根据防守方职业 计算攻击方伤害加成
+# if defObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
+# addPer += PlayerControl.GetJobAHurtAddPer(atkObj)
+# elif defObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
+# addPer += PlayerControl.GetJobBHurtAddPer(atkObj)
+# elif defObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
+# addPer += PlayerControl.GetJobCHurtAddPer(atkObj)
+#
+# #根据攻击方职业 计算防守方伤害减免
+# if atkObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
+# reducePer += PlayerControl.GetJobAAtkReducePer(defObj)
+# elif atkObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
+# reducePer += PlayerControl.GetJobBAtkReducePer(defObj)
+# elif atkObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
+# reducePer += PlayerControl.GetJobCAtkReducePer(defObj)
if addPer or reducePer:
addSkillPer = addPer - reducePer
@@ -1620,24 +1543,25 @@
# 攻击时防守方神兵护盾的处理
def CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick):
- if defObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
- return hurtValue
-
- if not CheckIsPlayerOnwer(atkObj):
- return hurtValue
-
- curProDef = PlayerControl.GetProDef(defObj)
- if not curProDef:
- return hurtValue
-
- absortValue = min(PlayerControl.GetProDefAbsorb(defObj)*hurtValue/ChConfig.Def_MaxRateValue, curProDef)
-
- PlayerControl.SetProDef(defObj, curProDef - absortValue)
-
- # 被动技能触发
- defObj.SetDict(ChConfig.Def_PlayerKey_GodWeaponBeforeProDef, curProDef)
- PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
- return hurtValue - absortValue
+ return hurtValue
+# if defObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
+# return hurtValue
+#
+# if not CheckIsPlayerOnwer(atkObj):
+# return hurtValue
+#
+# curProDef = PlayerControl.GetProDef(defObj)
+# if not curProDef:
+# return hurtValue
+#
+# absortValue = min(PlayerControl.GetProDefAbsorb(defObj)*hurtValue/ChConfig.Def_MaxRateValue, curProDef)
+#
+# PlayerControl.SetProDef(defObj, curProDef - absortValue)
+#
+# # 被动技能触发
+# defObj.SetDict(ChConfig.Def_PlayerKey_GodWeaponBeforeProDef, curProDef)
+# PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
+# return hurtValue - absortValue
# 设置玩家一次主动型攻击中的第一个防御者
@@ -1646,7 +1570,7 @@
return
if curSkill and curSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
- ChConfig.Def_SkillFuncType_TurnNormaAttack]:
+ ChConfig.Def_SkillFuncType_TurnNormaSkill]:
return
if attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender):
@@ -1817,20 +1741,20 @@
fightPowerMax = ipyData.GetFightPowerMax()
everyFightPower = ipyData.GetEveryFightPower()
everyFightPowerLostHPEx = ipyData.GetEveryFightPowerLostHPEx()
- if fightPowerMinByLV and fightPowerMin:
- npcLV = NPCCommon.GetNPCLV(curNPC)
- playerCurLVIpyData = PlayerControl.GetPlayerLVIpyData(npcLV)
- if not playerCurLVIpyData:
- return
- ReFightPower = playerCurLVIpyData.GetReFightPower() # 战斗力
- reRate = ReFightPower / float(fightPowerMin)
- #GameWorld.DebugLog("标准战力需要取等级表: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s,npcLV=%s,ReFightPower=%s,reRate=%s"
- # % (fightPowerMin, fightPowerMax, everyFightPower, npcLV, ReFightPower, reRate))
- fightPowerMin = ReFightPower
- fightPowerMax = int(fightPowerMax * reRate)
- everyFightPower = int(everyFightPower * reRate)
- #GameWorld.DebugLog("按比例更新战力值信息: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s"
- # % (fightPowerMin, fightPowerMax, everyFightPower))
+ #if fightPowerMinByLV and fightPowerMin:
+ # npcLV = NPCCommon.GetNPCLV(curNPC)
+ # playerCurLVIpyData = PlayerControl.GetPlayerLVIpyData(npcLV)
+ # if not playerCurLVIpyData:
+ # return
+ # ReFightPower = playerCurLVIpyData.GetReFightPower() # 战斗力
+ # reRate = ReFightPower / float(fightPowerMin)
+ # #GameWorld.DebugLog("标准战力需要取等级表: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s,npcLV=%s,ReFightPower=%s,reRate=%s"
+ # # % (fightPowerMin, fightPowerMax, everyFightPower, npcLV, ReFightPower, reRate))
+ # fightPowerMin = ReFightPower
+ # fightPowerMax = int(fightPowerMax * reRate)
+ # everyFightPower = int(everyFightPower * reRate)
+ # #GameWorld.DebugLog("按比例更新战力值信息: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s"
+ # # % (fightPowerMin, fightPowerMax, everyFightPower))
effFightPower = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPower) \
+ curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPowerEx) * ChConfig.Def_PerPointValue
@@ -2035,7 +1959,7 @@
turnFightPosInfo = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightPosInfo)
mustHit = False
- if SkillCommon.isXPSkill(curSkill):
+ if SkillCommon.isAngerSkill(curSkill):
mustHit = True
GameWorld.DebugLog(" XP必命中")
angerOverflow = max(GameObj.GetXP(atkObj) - IpyGameDataPY.GetFuncCfg("AngerXP", 2), 0)
@@ -2096,13 +2020,13 @@
atkSkillPer = ChangeSkillHurtPer(atkObj, defObj, curSkill, atkSkillPer)
# --- 新增普通攻击的数值和技能攻击的数值,根据类型各自计算
- if atkObjType == IPY_GameWorld.gotPlayer:
- if not curSkill or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaAttack:
- atkSkillPer += PlayerControl.GetNormalHurtPer(atkObj)
- atkSkillValue += PlayerControl.GetNormalHurt(atkObj)
- elif curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_FbPassiveSkill]:
- atkSkillPer += PlayerControl.GetFabaoHurtPer(atkObj)
- atkSkillValue += PlayerControl.GetFabaoHurt(atkObj)
+ #if atkObjType == IPY_GameWorld.gotPlayer:
+ # if not curSkill or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaSkill:
+ # atkSkillPer += PlayerControl.GetNormalHurtPer(atkObj)
+ # atkSkillValue += PlayerControl.GetNormalHurt(atkObj)
+ # elif curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_FbPassiveSkill]:
+ # atkSkillPer += PlayerControl.GetFabaoHurtPer(atkObj)
+ # atkSkillValue += PlayerControl.GetFabaoHurt(atkObj)
atkSkillValue += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SkillValue)
atkSkillValue += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SkillValue)
@@ -2149,19 +2073,19 @@
if atkObjType == IPY_GameWorld.gotPlayer:
aIgnoreDefRate = atkObj.GetIgnoreDefRate() # 无视防御比率
aSkillAtkRate = atkObj.GetSkillAtkRate() # 技能攻击力加成
- aDamagePVP = PlayerControl.GetDamagePVP(atkObj) # PVP固定伤害
- aDamagePVE = PlayerControl.GetDamagePVE(atkObj) # PVE固定伤害
+ aDamagePVP = 0 #PlayerControl.GetDamagePVP(atkObj) # PVP固定伤害
+ aDamagePVE = 0 #PlayerControl.GetDamagePVE(atkObj) # PVE固定伤害
- aNPCHurtAddPer = PlayerControl.GetNPCHurtAddPer(atkObj) # PVE伤害加成
- aDamagePerPVP = PlayerControl.GetDamagePerPVP(atkObj) # 外层PVP伤害加成
+ aNPCHurtAddPer = 0 #PlayerControl.GetNPCHurtAddPer(atkObj) # PVE伤害加成
+ aDamagePerPVP = 0 #PlayerControl.GetDamagePerPVP(atkObj) # 外层PVP伤害加成
aDamagePerPVP += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddPVPDamagePer)
- aFinalHurt = PlayerControl.GetFinalHurt(atkObj) # 最终固定伤害
+ aFinalHurt = 0#PlayerControl.GetFinalHurt(atkObj) # 最终固定伤害
# 被动增加最终伤害
aFinalHurt += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
aFinalHurt += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
- aOnlyFinalHurt = PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
+ aOnlyFinalHurt = 0 #PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
aFightPower = PlayerControl.GetFightPower(atkObj)
else:
aIgnoreDefRate = 0 # 无视防御比率
@@ -2182,14 +2106,14 @@
dFinalHurtReducePer = GameObj.GetFinalHurtReducePer(defObj)
dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
if defObjType == IPY_GameWorld.gotPlayer:
- dIgnoreDefRateReduce = PlayerControl.GetIgnoreDefRateReduce(defObj) # 无视防御比率抗性
- dSkillAtkRateReduce = PlayerControl.GetSkillAtkRateReduce(defObj) # 技能攻击力减少
- dDamagePVPReduce = PlayerControl.GetDamagePVPReduce(defObj) # PVP固定减伤
+ dIgnoreDefRateReduce = 0 #PlayerControl.GetIgnoreDefRateReduce(defObj) # 无视防御比率抗性
+ dSkillAtkRateReduce = 0 #PlayerControl.GetSkillAtkRateReduce(defObj) # 技能攻击力减少
+ dDamagePVPReduce = 0 #PlayerControl.GetDamagePVPReduce(defObj) # PVP固定减伤
#dDamReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReduce)
- dDamagePerPVPReduce = PlayerControl.GetDamagePerPVPReduce(defObj) # 外层PVP减伤
+ dDamagePerPVPReduce = 0 #PlayerControl.GetDamagePerPVPReduce(defObj) # 外层PVP减伤
dDamagePerPVPReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReducePVP)
- dFinalHurtReduce = PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
- dBeHurtPer = PlayerControl.GetBeHurtPer(defObj) # 加深受到伤害百分比
+ dFinalHurtReduce = 0 #PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
+ dBeHurtPer = 0#PlayerControl.GetBeHurtPer(defObj) # 加深受到伤害百分比
dFightPower = PlayerControl.GetFightPower(defObj)
else:
@@ -2233,10 +2157,10 @@
elif not curSkill:
hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 3))
GameWorld.DebugLog(" 普攻伤害=%s" % (hurtValue))
- elif SkillCommon.isTurnNormalAtkSkill(curSkill):
+ elif SkillCommon.isTurnNormalSkill(curSkill):
hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 1))
GameWorld.DebugLog(" 普攻技能伤害=%s" % (hurtValue))
- elif SkillCommon.isXPSkill(curSkill):
+ elif SkillCommon.isAngerSkill(curSkill):
hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 2))
GameWorld.DebugLog(" 怒气技能伤害=%s" % (hurtValue))
else:
@@ -2482,10 +2406,10 @@
suckHP += atkObj.GetKillBackHP()
# 攻击吸血
- atkBackHP = PlayerControl.GetAtkBackHPPer(atkObj)
- if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- #PVP 攻击回血
- atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
+ atkBackHP = 0 #PlayerControl.GetAtkBackHPPer(atkObj)
+ #if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ # #PVP 攻击回血
+ # atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
# 百分比吸血
atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
@@ -2506,39 +2430,6 @@
GameObj.SetHP(atkObj, min(GameObj.GetMaxHP(atkObj), GameObj.GetHP(atkObj) + suckHP), False)
ChangeHPView(atkObj, None, 0, suckHP, ChConfig.Def_HurtTYpe_Recovery)
- return
-
-## 攻击者回蓝逻辑
-# @param atkObj 攻击者
-# @param defObj 防守者
-# @return None
-def CalcSuckMagic(atkObj, defObj, hurtValue):
-
- if atkObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
- return
-
- tick = GameWorld.GetGameWorld().GetTick()
- if tick - atkObj.GetTickByType(ChConfig.TYPE_Player_Tick_SuckMagic) \
- < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_SuckMagic]:
- return
-
- atkObj.SetTickByType(ChConfig.TYPE_Player_Tick_SuckMagic, tick)
-
- suckMP = 0
-
- # 杀怪回蓝
- if defObj.GetGameObjType() == IPY_GameWorld.gotNPC and GameObj.GetHP(defObj) <= 0:
- suckMP += atkObj.GetKillBackMP()
-
- # 攻击吸蓝
- atkBackMPPer = PlayerControl.GetAtkBackMPPer(atkObj)
- if atkBackMPPer > 0:
- suckMP += int(hurtValue * atkBackMPPer / float(ChConfig.Def_MaxRateValue))
-
- if suckMP <= 0:
- return
-
- atkObj.SetMP(min(atkObj.GetMaxMP(), atkObj.GetMP() + suckMP))
return
#---------------------------------------------------------------------
@@ -2852,13 +2743,13 @@
return
attackLV = curPlayer.GetLV() # 攻击者等级
- attackPrestige = PlayerControl.GetPrestige(curPlayer) # 攻击者威望
+ attackPrestige = 0 #PlayerControl.GetPrestige(curPlayer) # 攻击者威望
attackNotoriety = curPlayer.GetInfamyValue() # 攻击者恶名值
attackPkValue = curPlayer.GetPKValue() # 攻击者pk值
attackFightPower = PlayerControl.GetFightPower(curPlayer) # 攻击者战斗力
defendLV = defender.GetLV() # 防守者等级
- defendPrestige = PlayerControl.GetPrestige(defender) # 防守者威望
+ defendPrestige = 0 #PlayerControl.GetPrestige(defender) # 防守者威望
defendNotoriety = defender.GetInfamyValue() # 防守者恶名值
defendPkValue = defender.GetPKValue() # 防守者pk值
defendFightPower = PlayerControl.GetFightPower(defender) # 防守者战斗力
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py
index 7b987b7..678d07c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py
@@ -105,8 +105,6 @@
#被攻击玩家进入战斗状态
AttackCommon.OnNPCHitPlayer(curNormalNPC, curTagPlayer, tick)
AttackCommon.SetPlayerBattleState(curTagPlayer, tick)
- #触发被动buff
- #AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())
else:
#通知玩家
if curTagPlayer.GetMapID() != ChConfig.Def_FBMapID_XMZZ:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py
index c5f5266..ae825f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Pet_Attack_Player.py
@@ -122,8 +122,6 @@
#防守方血量
curTagPlayerHP = GameObj.GetHP(curTagPlayer)
- #防守方被动Buff触发
-# AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())
#是否同国籍
#获得攻击方拥有者
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py
index a877200..eb1e2ee 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/Player_Attack_Player.py
@@ -129,7 +129,6 @@
if curTagPlayerHP > 0:
#被攻击的玩家也进入战斗状态
AttackCommon.SetPlayerBattleState(curTagPlayer, tick)
-# AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())
AttackCommon.OnPlayerHitPlayer(curPlayer, curTagPlayer, tick)
else:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py
index 2bdd44b..e3e790f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_Player.py
@@ -125,9 +125,6 @@
curTagPlayerHP = GameObj.GetHP(curTagPlayer)
curTagPlayerFBHP = FBLogic.OnGetFBCurHP(curTagPlayer)
- #防守方被动Buff触发
-# AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())
-
#是否同国籍
#获得攻击方拥有者
curPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curSummonNPC)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
index cc94e04..c5ef889 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1676,7 +1676,7 @@
curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill,
ChConfig.Def_SkillFuncType_PetSkill,
ChConfig.Def_SkillFuncType_NormalAttack,
- ChConfig.Def_SkillFuncType_TurnNormaAttack]):
+ ChConfig.Def_SkillFuncType_TurnNormaSkill]):
# 攻击减层级 优先处理,因为同个技能触发buff后,会再处理层级,导致立即减层级
PassiveBuffEffMng.OnPassiveBuffTrigger(attacker, defender, curSkill, ChConfig.TriggerType_Buff_AttackSubLayer, tick)
@@ -1823,7 +1823,7 @@
#===========================================================================
#----------扣XP点
- #if SkillCommon.isXPSkill(curSkill):
+ #if SkillCommon.isAngerSkill(curSkill):
# GameObj.SetXP(curObj, 0)
#----------扣HP点
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 0311541..e1e95ad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -517,14 +517,6 @@
self.turnFight.clearFight()
return
- def playerLogin(self, curPlayer):
- self.turnFight.curPlayer = curPlayer
- return
-
- def playerOffline(self, curPlayer):
- self.turnFight.curPlayer = None
- return
-
def GetMainFightMgr(curPlayer):
## 获取主线战斗管理
olPlayer = PlayerOnline.GetOnlineMgr().GetOnlinePlayer(curPlayer)
@@ -1412,7 +1404,7 @@
continue
skillTypeID = useSkill.GetSkillTypeID()
# 常规攻击优先xp
- if SkillCommon.isXPSkill(useSkill) and turnBattleType == ChConfig.TurnBattleType_Normal:
+ if SkillCommon.isAngerSkill(useSkill) and turnBattleType == ChConfig.TurnBattleType_Normal:
if curXP < xpMax:
continue
useCnt = -1 # xp技能优先释放
@@ -1704,11 +1696,11 @@
return
skillID = curSkill.GetSkillID() if curSkill else 0
- isXP = SkillCommon.isXPSkill(curSkill)
+ isXP = SkillCommon.isAngerSkill(curSkill)
if isXP:
GameObj.SetXP(curObj, 0)
elif curSkill:
- if SkillCommon.isTurnNormalAtkSkill(curSkill):
+ if SkillCommon.isTurnNormalSkill(curSkill):
addXP = IpyGameDataPY.GetFuncCfg("AngerXP", 3)
AddTurnFightXP(curObj, addXP, "skillID:%s" % skillID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 5c4acdc..966c29e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -11,6 +11,7 @@
#---------------------------------------------------------------------
import os
import IPY_GameWorld
+import IPY_PlayerDefine
import ShareDefine
@@ -93,6 +94,147 @@
Def_BuffValue_Count = 3 # buff记录的value个数
#游戏对象属性--------------------------------------------
+# 属性ID列表,所有对象类型通用,如Player、NPC
+AttrIDList = (
+AttrID_1,
+AttrID_2,
+AttrID_3,
+AttrID_4,
+AttrID_5,
+AttrID_Atk, # 攻击 6
+AttrID_Def, # 防御 7
+AttrID_MaxHP, # 最大生命 8
+AttrID_HP, # 当前生命 9
+AttrID_Speed, # 移速 10
+AttrID_AtkSpeed, # 攻速 11
+AttrID_XP, # 当前XP 12
+AttrID_AtkInheritPer, # 攻击继承 13
+AttrID_DefInheritPer, # 防御继承 14
+AttrID_HPInheritPer, # 生命继承 15
+AttrID_AtkPer, # 攻击加成 16
+AttrID_DefPer, # 防御加成 17
+AttrID_MaxHPPer, # 生命加成 18
+AttrID_19,
+AttrID_20,
+AttrID_StunRate, # 击晕 21
+AttrID_StunRateDef, # 抗击晕 22
+AttrID_SuperHitRate, # 暴击 23
+AttrID_SuperHitRateDef, # 抗暴击 24
+AttrID_ComboRate, # 连击 25
+AttrID_ComboRateDef, # 抗连击 26
+AttrID_MissRate, # 闪避 27
+AttrID_MissRateDef, # 抗闪避 28
+AttrID_ParryRate, # 格挡 29
+AttrID_ParryRateDef, # 抗格挡 30
+AttrID_SuckHPPer, # 吸血 31
+AttrID_SuckHPPerDef, # 抗吸血 32
+AttrID_33,
+AttrID_34,
+AttrID_FinalDamPer, # 最终增伤 35
+AttrID_FinalDamPerDef, # 最终减伤 36
+AttrID_PhyDamPer, # 物理增伤 37
+AttrID_PhyDamPerDef, # 物理减伤 38
+AttrID_MagDamPer, # 法术增伤 39
+AttrID_MagDamPerDef, # 法术减伤 40
+AttrID_NormalSkillPer, # 普技增伤 41
+AttrID_NormalSkillPerDef, # 普技减伤 42
+AttrID_AngerSkillPer, # 怒技增伤 43
+AttrID_AngerSkillPerDef, # 怒技减伤 44
+AttrID_SuperDamPer, # 强化暴伤 45
+AttrID_SuperDamPerDef, # 弱化暴伤 46
+AttrID_47,
+AttrID_48,
+AttrID_49,
+AttrID_50,
+AttrID_CurePer, # 强化治疗 51
+AttrID_CurePerDef, # 弱化治疗 52
+AttrID_ShieldPer, # 强化护盾 53
+AttrID_ShieldPerDef, # 弱化护盾 54
+AttrID_DOTPer, # 持续增伤 55 (中毒、燃烧、流血)
+AttrID_DOTPerDef, # 持续减伤 56
+) = range(1, 1 + 56)
+
+# 需要计算的武将战斗属性ID列表
+CalcBattleAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP, AttrID_StunRate, AttrID_StunRateDef,
+ AttrID_SuperHitRate, AttrID_SuperHitRateDef, AttrID_ComboRate, AttrID_ComboRateDef,
+ AttrID_MissRate, AttrID_MissRateDef, AttrID_ParryRate, AttrID_ParryRateDef,
+ AttrID_SuckHPPer, AttrID_SuckHPPerDef, AttrID_FinalDamPer, AttrID_FinalDamPerDef,
+ AttrID_PhyDamPer, AttrID_PhyDamPerDef, AttrID_MagDamPer, AttrID_MagDamPerDef,
+ AttrID_NormalSkillPer, AttrID_NormalSkillPerDef, AttrID_AngerSkillPer, AttrID_AngerSkillPerDef,
+ AttrID_SuperDamPer, AttrID_SuperDamPerDef, AttrID_CurePer, AttrID_CurePerDef,
+ AttrID_ShieldPer, AttrID_ShieldPerDef, AttrID_DOTPer, AttrID_DOTPerDef,
+ ]
+
+# 基础三维属性ID列表
+BaseAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP]
+BaseAttrPerIDList = [AttrID_AtkPer, AttrID_DefPer, AttrID_MaxHPPer]
+
+# 属性ID对应可对其百分比提升的属性ID {属性ID:百分比属性ID, ...}
+AttrPerDict = {
+ AttrID_Atk:AttrID_AtkPer,
+ AttrID_Def:AttrID_DefPer,
+ AttrID_MaxHP:AttrID_MaxHPPer,
+ }
+
+# 属性ID对应的继承属性ID {属性ID:继承属性ID, ...}
+AttrInheritPerDict = {
+ AttrID_Atk:AttrID_AtkInheritPer,
+ AttrID_Def:AttrID_DefInheritPer,
+ AttrID_MaxHP:AttrID_HPInheritPer,
+ }
+
+# 属性ID对应0418刷新类型 {属性ID:[刷新同步类型, 是否支持超20亿的大数值], ...}
+# 卡牌项目玩家/主公属性仅为中间层属性,并非最终属性,最终属性体现在卡牌上,暂定全部前端自己算
+# 所以仅配置战斗场景需要同步的属性即可
+CDBRefresh_AttrIDDict = {
+# AttrID_Atk:[IPY_PlayerDefine.CDBPlayerRefresh_MAXATK, 0],
+# AttrID_Def:[IPY_PlayerDefine.CDBPlayerRefresh_DEF, 0],
+ AttrID_MaxHP:[IPY_PlayerDefine.CDBPlayerRefresh_MaxHP, 1],
+ AttrID_HP:[IPY_PlayerDefine.CDBPlayerRefresh_HP, 1],
+# AttrID_Speed:[ShareDefine.CDBPlayerRefresh_SpeedValue, 0],
+# AttrID_AtkSpeed:[IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx1, 0],
+ AttrID_XP:[IPY_GameWorld.CDBPlayerRefresh_XP, 0],
+# AttrID_StunRate:[ShareDefine.CDBPlayerRefresh_StunRate, 0],
+# AttrID_StunRateDef:[ShareDefine.CDBPlayerRefresh_StunRateDef, 0],
+# AttrID_SuperHitRate:[IPY_PlayerDefine.CDBPlayerRefresh_SuperHitRate, 0],
+# AttrID_SuperHitRateDef:[ShareDefine.CDBPlayerRefresh_SuperHitRateDef, 0],
+# AttrID_ComboRate:[ShareDefine.CDBPlayerRefresh_ComboRate, 0],
+# AttrID_ComboRateDef:[ShareDefine.CDBPlayerRefresh_ComboRateDef, 0],
+# AttrID_MissRate:[IPY_PlayerDefine.CDBPlayerRefresh_Miss, 0],
+# AttrID_MissRateDef:[IPY_PlayerDefine.CDBPlayerRefresh_HIT, 0],
+# AttrID_ParryRate:[ShareDefine.CDBPlayerRefresh_ParryRate, 0],
+# AttrID_ParryRateDef:[ShareDefine.CDBPlayerRefresh_ParryRateDef, 0],
+# AttrID_SuckHPPer:[ShareDefine.CDBPlayerRefresh_SuckHPPer, 0],
+# AttrID_SuckHPPerDef:[ShareDefine.CDBPlayerRefresh_SuckHPPerDef, 0],
+# AttrID_FinalDamPer:[ShareDefine.CDBPlayerRefresh_FinalDamPer, 0],
+# AttrID_FinalDamPerDef:[ShareDefine.CDBPlayerRefresh_FinalDamPerDef, 0],
+# AttrID_PhyDamPer:[ShareDefine.CDBPlayerRefresh_PhyDamPer, 0],
+# AttrID_PhyDamPerDef:[ShareDefine.CDBPlayerRefresh_PhyDamPerDef, 0],
+# AttrID_MagDamPer:[ShareDefine.CDBPlayerRefresh_MagDamPer, 0],
+# AttrID_MagDamPerDef:[ShareDefine.CDBPlayerRefresh_MagDamPerDef, 0],
+# AttrID_NormalSkillPer:[ShareDefine.CDBPlayerRefresh_NormalSkillPer, 0],
+# AttrID_NormalSkillPerDef:[ShareDefine.CDBPlayerRefresh_NormalSkillPerDef, 0],
+# AttrID_AngerSkillPer:[ShareDefine.CDBPlayerRefresh_AngerSkillPer, 0],
+# AttrID_AngerSkillPerDef:[ShareDefine.CDBPlayerRefresh_AngerSkillPerDef, 0],
+# AttrID_SuperDamPer:[ShareDefine.CDBPlayerRefresh_SuperDamPer, 0],
+# AttrID_SuperDamPerDef:[ShareDefine.CDBPlayerRefresh_SuperDamPerDef, 0],
+# AttrID_CurePer:[ShareDefine.CDBPlayerRefresh_CurePer, 0],
+# AttrID_CurePerDef:[ShareDefine.CDBPlayerRefresh_CurePerDef, 0],
+# AttrID_ShieldPer:[ShareDefine.CDBPlayerRefresh_ShieldPer, 0],
+# AttrID_ShieldPerDef:[ShareDefine.CDBPlayerRefresh_ShieldPerDef, 0],
+# AttrID_DOTPer:[ShareDefine.CDBPlayerRefresh_DOTPer, 0],
+# AttrID_DOTPerDef:[ShareDefine.CDBPlayerRefresh_DOTPerDef, 0],
+ }
+
+#刷属性分类索引
+Def_CalcAttrList = (
+Def_CalcAttr_LV, # 角色等级 0
+Def_CalcAttr_MainEquip, # 主装备 1
+Def_CalcAttr_HeroBook, # 武将图鉴 2
+) = range(3)
+
+##-----------------------------------------------------------------------------------------------
+
Def_Calc_AllAttrType_MAX = 192
#基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
TYPE_Calc_AttrList = (
@@ -507,6 +649,9 @@
#ShareDefine.retGuard1:[Def_ItemType_retGuard1],
#ShareDefine.retGuard2:[Def_ItemType_retGuard2],
}
+# 主线装备部位
+Def_MainEquipPlaces = range(ShareDefine.retWeapon, ShareDefine.retAmulet + 1)
+
#---------------------------------------------------------------------
#写死的物品效果ID都放这边------请按数值顺序存放
Def_Effect_GivePlayerMoneySilver = 201 #给人物金钱 铜钱道具效果ID
@@ -1511,8 +1656,6 @@
Def_RecycleReturnMoney = 1000
#玩家换装的最短时间
Def_MinChangeEquipTime = 300
-#玩家一键换装的最短时间
-Def_OneKeyChangeEquipTime = 3000
#背包重整的最短时间间隔
Def_ItemPackResetInterval = 3000
#自动恢复计算间隔
@@ -1962,7 +2105,6 @@
'TrialTower':[Def_FBMapID_TrialTower], # 试炼之塔
'ClearDevil':[Def_FBMapID_ClearDevil], # 除魔卫道
'MagicWeapon':[Def_FBMapID_MagicWeapon], # 法宝副本
- 'IceLode':[Def_FBMapID_IceLode], # 冰晶矿脉
'DuJie':[Def_FBMapID_DuJie], #渡劫
'KirinHome':[Def_FBMapID_KirinHome], #麒麟之府
'BZZD':[Def_FBMapID_BZZD], # 百战之地(仙界秘境)
@@ -3049,32 +3191,18 @@
# key的长度不能超过29个字节
Def_PlayerKey_BurnOwnerID = "burnOwnerID" # 灼烧BUFF特殊处理,部分buff跟随灼烧消失
Def_PlayerKey_SkillInDelBuff = "SkillInDelBuff" # buff中释放技能添加buff要特殊记录给后续处理,直接删除/添加会导致错乱
-Def_PlayerKey_TheFBSkillsCD = "TheFBSkillsCD" # 减少指定技能组CD XX%
-Def_PlayerKey_BurnValue = "BurnValue" # 灼烧固定伤害
-Def_PlayerKey_BurnTimePer = "BurnTimePer" # 延长灼烧时间百分比
-Def_PlayerKey_SubSpeedPer = "SubSpeedPer" # 减移动速度百分比
-Def_PlayerKey_YinjiCnt = "YinjiCnt" # 当前印记数
-Def_PlayerKey_LostYinjiTime = "LostYinjiTime" # 每X秒自动消失一个印记
Def_PlayerKey_1314HurtCount = "1314cnt" # 类剑刃风暴技能的1314效果,伤害次数处理
Def_PlayerKey_FirstDefender = "FDID" # 第一个防守者,只用于比较
Def_PlayerKey_SelectObjID = "selectID" # 锁定模式选中,不用SetActionObj
Def_PlayerKey_SelectObjType = "selectType" # 锁定模式选中
-Def_PlayerKey_NormalHurt = "NormalHurt" # 属性普通攻击增伤:普通攻击附加的固定值伤害
-Def_PlayerKey_NormalHurtPer = "NormalHurtPer" # 属性普通攻击加成:普通攻击附加的伤害百分比
-Def_PlayerKey_FabaoHurt = "FabaoHurt" # 属性法宝技能增伤:法宝技能攻击附加的固定值伤害
-Def_PlayerKey_FabaoHurtPer = "FabaoHurtPer" # 属性法宝技能加成:法宝技能攻击附加的伤害百分比
Def_PlayerKey_AddBuffLayer = "addBuffLayer" # buff当前层数
Def_PlayerKey_BuffHurtCnt = "BuffHurtCnt" # 持续buff掉血次数
Def_PlayerKey_Zhansha = "zhansha" # 斩杀标志
-Def_PlayerKey_ZhuxianRate = "ZXRate" # 诛仙一击的概率
-Def_PlayerKey_ZhuxianHurtPer = "ZXHurtPer" # 诛仙一击的伤害%
Def_PlayerKey_LockHPSkillID = "LockHPSkillID" # 锁血功能的技能
Def_PlayerKey_GodWeaponBeforeProDef = "GWBPD" # 神兵护盾被攻击前的值
Def_PlayerKey_curHurtValue = "curHurtValue" # 计算中的临时伤害值,技能特殊用
Def_PlayerKey_curHurtValueEx = "curHurtValueEx" # 计算中的临时伤害值,技能特殊用
Def_PlayerKey_SomersaultTime = "Somersault" # 翻滚一定时间内无敌,表现为MISS
-Def_PlayerKey_CopyFuncAttr = "CopyFuncAttr%s" # 玩家属性刷新中的计算属性缓存,便于buff刷新计算
-Def_PlayerKey_CopyFuncAttrEx = "CopyFuncAttrEx%s" # 玩家属性刷新中的计算属性缓存,便于buff刷新计算
Def_Player_RefreshAttrByBuff = "PlayerAttrByBuff" # 玩家属性刷新功能属性缓存,便于buff刷新计算, 间隔刷新
Def_Player_HadRefreshAttr = "HadRefreshAttr" # 玩家在本地图是否刷新过属性
Def_PlayerKey_ClientCustomScene = "ClientCustomScene" # 客户端自定义场景状态
@@ -3086,9 +3214,6 @@
Def_PlayerKey_ResetFBLinePosY = "ResetFBLinePosY" # 请求切换副本多合一地图功能线路ID
Def_PlayerKey_AttackFollowMaster = "FollowAtk" # 召唤兽跟随攻击
Def_PlayerKey_MoreHurtValue = "MoreHurtValue" # 额外的伤害值,一般用于不走公式
-Def_PlayerKey_BloodShiledHurt = "BSHurt" # 伤害值用于血盾抵消
-Def_PlayerKey_BloodShiledHurtEx = "BSHurtEx" # 伤害值用于血盾抵消
-Def_PlayerKey_EquipTime = "EquipTime" # 时效装备
Def_PlayerKey_PowerPartTime = "PowerPartTime" # 蓄力每次消耗时间,因攻速改变
Def_PlayerKey_PowerPartCount = "PowerPartCount" # 蓄力技能能量次数
Def_Player_RefreshAttr = "Player_RefreshAttr" # 玩家刷新属性标志
@@ -3117,16 +3242,10 @@
Def_PlayerKey_MirrorBattleTime = 'MirrorBattleTime' # 最近一次请求镜像战斗时间戳
Def_PlayerKey_MirrorBattleID = 'MirrorBattleID' # 镜像战斗ID,有值时代表处于镜像战斗中
-Def_PlayerKey_FamilyArrestQueryState = 'ArrestQueryState' # 家族悬赏任务完成查询状态
Def_PlayerKey_Frist_Lock = "Frist_Lock" # 是否接受了任务1
Def_PlayerKey_TaskExpRewardMultiple = "TaskExpRewardMultiple" # 任务经验奖励倍值
Def_PlayerKey_BuyItemCnt = "BuyItemCnt" # 购买物品数量
-Def_PlayerKey_SpeedValueNotBuff = "SpeedValueNotBuff" # 玩家移动速度数值参数, 非实际移动速度,不含buff
-Def_PlayerKey_SpeedValue = "SpeedValue" # 玩家移动速度数值参数, 非实际移动速度,含buff
Def_PlayerKey_SpeedHorse = "SpeedHorse" # 骑乘时附加移动速度值
-Def_PlayerKey_AtkSpeedSet = "AtkSpeedSet" # 攻击速度固定值, 大于0表示攻击速度强制为该值
-Def_PlayerKey_AtkInterval = "NormalAtkInterval_%s" # 公共技能CD类型
-Def_PlayerKey_AtkTick = "NormalAtkTick_%s" # 公共技能CD类型
Def_PlayerKey_QueryOpenServerAwardState = "QueryOpenServerAwardState" # 查询开服奖励状态
Def_PlayerKey_QueryFamilyStoreTick = "QueryFamilyStoreTick" # 战盟仓库操作tick
@@ -3134,10 +3253,6 @@
Def_PlayerKey_QueryNewGuyCardType = 'QueryNewGuyCardType' # 查询的新手卡类型
Def_PlayerKey_TradeTagNPC = "TradeTagNPC" # 当前商店的npcid
-Def_PlayerKey_LastSkillComboTick = "LastSkillComboTick" #上次技能连击tick
-Def_PlayerKey_SkillComboCnt = "SkillComboCnt" #技能连击数
-Def_PlayerKey_ComboSkillTypeID = "ComboSkillTypeID" #当前连击的技能TypeID
-Def_PlayerKey_ComboAddHurtPer = "ComboAddHurtPer" #当前连击的伤害加成万分率
Def_PlayerKey_ComboBuffProcessState = "ComboBuffProcessState" #持续性buff连击处理状态
Def_PlayerKey_LvAwardQueryState = 'LvAwardQueryState' # 等级奖励领奖查询状态
Def_PlayerKey_StoreQueryState = 'StoreQueryState' # 商店全服购买次数查询状态
@@ -3153,40 +3268,8 @@
Def_PlayerKey_TeamMemCount = "TeamMemCount" #队伍在线玩家数
Def_PlayerKey_CurState = "PlayerCurState" # 当前状态信息, 标记详见 Def_PlayerStateList
Def_PlayerKey_AttrFaintCD = "AttrFaintCD" #击晕CD控制
-Def_PlayerKey_AttrFaintRate = "FaintRate" #触发击晕
-Def_PlayerKey_AttrFaintDefRate = "FaintDefRate" #击晕抵抗
-Def_PlayerKey_AttrAtkerFreezed = "AttrAtkerFreezed_50" #玩家被攻击触发定身
-Def_PlayerKey_AttrAddAngry = "AttrAddAngry_51" #玩家攻击增加额外仇恨
-Def_PlayerKey_AttrComboRate = "ComboRate" #连击几率
-Def_PlayerKey_AttrComboDamPer = "ComboDamPer" #连击伤害
-Def_PlayerKey_SkillAtkRateReduce = "SkillAtkRateReduce" #技能攻击比例减少
-Def_PlayerKey_AttrDropEquipPer = "DropEquipPer" #装备掉率
-Def_PlayerKey_AttrDamagePVP = "DamagePVP" #PVP固定伤害输出
-Def_PlayerKey_AttrDamagePVPReduce = "DamagePVPReduce" #PVP固定伤害减少
-Def_PlayerKey_AttrDamagePVE = "DamagePVE" #伤害输出计算固定值PVE
-Def_PlayerKey_AttrDamagePerPVP = "DamagePerPVP" #伤害输出计算百分比PVP
-Def_PlayerKey_AttrDamagePerPVPReduce = "DamagePerPVPReduce" #伤害输出计算百分比PVP减少
-Def_PlayerKey_AttrHurtPer = "AttrHurtPer" #受伤计算百分比
-Def_PlayerKey_AttrDamChanceDef = "DamChanceDef" #20%的概率抵御伤害比率
-Def_PlayerKey_AttrProDefHPPer = "ProDefHPPer" #生命上限换算为防护值的百分比
-Def_PlayerKey_AttrProDefAbsorb = "ProDefAbsorb" #防护值吸收伤害比率
-Def_PlayerKey_AttrPetMinAtk = "AttrPetMinAtk" #宠物最小攻击力
-Def_PlayerKey_AttrPetMaxAtk = "AttrPetMaxAtk" #宠物最大攻击力
-Def_PlayerKey_AttrPetDamPer = "AttrPetDamPer" #宠物伤害百分比提升
-Def_PlayerKey_PetSkillAtkRate = "PetSkillAtkRate" #宠物技能攻击比例加成
-Def_PlayerKey_AttrPerLVAtk = "PerLVAtk" #每1级+%s攻击, 数值取万分率,支持小数算法
-Def_PlayerKey_AttrPerLVMaxHP = "PerLVMaxHP" #每1级+%s生命, 数值为固定值
-Def_PlayerKey_AttrShieldMPCostRate = "AttrShieldMPCostRate" #魔法盾伤害吸收蓝耗比率
-Def_PlayerKey_AttrXP = "AttrXP" #当前XP
-Def_PlayerKey_AttrXPRestorePer = "AttrXPRestorePer" #自动恢复XP值比率
Def_PlayerKey_MarkLoadMapTick = "LoadMapTickVIP" #记录切换地图后的tick,VIP
Def_PlayerKey_MTFreeOnlineRefreshTick = "MTFreeOnlineRTick" # 寻宝在线计算时间
-Def_PlayerKey_MFPFightPower = "MFPFightPower_%s" #模块战斗力, 求余亿部分,参数(模块类型索引)
-Def_PlayerKey_MFPFightPowerPoint = "MFPFightPowerPoint_%s" #模块战斗力, 整除亿部分,参数(模块类型索引)
-Def_PlayerKey_MFPSkill = "MFPSkill_%s" #技能附加战斗力, 参数(模块类型索引)
-Def_PlayerKey_MFPSkillEx = "MFPSkillEx_%s" #技能附加战斗力, 参数(模块类型索引)
-Def_PlayerKey_MFPEx = "MFPEx_%s" #模块附加战斗力, 参数(模块类型索引)
-Def_PlayerKey_MFPExPoint = "MFPExPoint_%s" #模块附加战斗力, 参数(模块类型索引)
Def_PlayerKey_AtkWithoutBuff = "AtkWithoutBuff" #玩家无buff状态下的攻击值
Def_PlayerKey_DefWithoutBuff = "DefWithoutBuff" #玩家无buff状态下的防御值
Def_PlayerKey_HPWithoutBuff = "HPWithoutBuff" #玩家无buff状态下的生命值
@@ -3200,137 +3283,21 @@
Def_PlayerKey_AttrActivatyNotify = "AttrActivatyNotify" # 属性激活提示类型
Def_PlayerKey_EquipOrangeCount = "EquipOrangeCount" # 装备信息 - 橙装及以上件数
Def_PlayerKey_LastHurt = "PlayerLastHurt" # 最后补刀
-Def_PlayerKey_AddBackHPPer = "AddBackHPPer" #增加生命恢复效果
-Def_PlayerKey_ReduceBackHPPer = "ReduceBackHPPer" #降低生命恢复效果
-Def_PlayerKey_NPCHurtAddPer = "NPCHurtAddPer" # 对怪物伤害加成
-Def_PlayerKey_JobAHurtAddPer = "JobAHurtAddPer" # 目标战士伤害加成
-Def_PlayerKey_JobBHurtAddPer = "JobBHurtAddPer" # 目标法师伤害加成
-Def_PlayerKey_JobCHurtAddPer = "JobCHurtAddPer" # 目标弓手伤害加成
-Def_PlayerKey_NPCAtkReducePer = "NPCAtkReducePer" # NPC攻击伤害减免
-Def_PlayerKey_JobAAtkReducePer = "JobAAtkReducePer" # 战士攻击伤害减免
-Def_PlayerKey_JobBAtkReducePer = "JobBAtkReducePer" # 法师攻击伤害减免
-Def_PlayerKey_JobCAtkReducePer = "JobCAtkReducePer" # 弓手攻击伤害减免
-Def_PlayerKey_LuckyHitReduce = "LuckyHitReduce" # 会心一击伤害减免固定值
-Def_PlayerKey_GreatHitReducePer = "GreatHitReducePer" # 卓越一击伤害减免
-Def_PlayerKey_SuperHitReduce = "SuperHitReduce" # 暴击伤害减免固定值
-Def_PlayerKey_IgnoreDefReducePer = "IgnoreDefReducePer" # 无视防御伤害减免
-Def_PlayerKey_LuckyHitRateReduce = "LuckyHitRateReduce" # 抗会心一击概率
-Def_PlayerKey_GreatHitRateReduce = "GreatHitRateReduce" # 抗卓越一击概率
-Def_PlayerKey_SuperHitRateReduce = "SuperHitRateReduce" # 抗暴击概率
-Def_PlayerKey_IgnoreDefRateReduce = "IgnoreDefRateReduce" # 抗无视防御概率
Def_PlayerKey_LastHurtValue = "LastHurtValue" # 最后一次伤害值
Def_PlayerKey_LastHurtValueEx = "LastHurtValueEx" # 最后一次伤害值
Def_PlayerKey_LastHurtNPCObjID = "LastHurtNPCObjID" # 最后攻击的NPCObjID
Def_PlayerKey_LastAttackerObjID = "LastAttackerObjID" # 被攻击者记录的最近攻击玩家ID
-Def_PlayerKey_CommMapExpRate = "CommMapExpRate" # 常规地图经验倍率加成
-Def_PlayerKey_BossFinalHurtPer = "BossFinalHurtPer" # boss最终伤害百分比
-Def_PlayerKey_FinalHurtPer = "FinalHurtPer" # 最终伤害百分比
-Def_PlayerKey_FinalHurtReducePer = "FHReducePer" # 最终伤害减免百分比
-Def_PlayerKey_FuhaoHitRate = "FuhaoHitRate" # 富豪一击概率
-Def_PlayerKey_FinalHurt = "FinalHurt" # 最终固定伤害增加
-Def_PlayerKey_BleedDamage = "BleedDamage" # 流血伤害
-Def_PlayerKey_FinalHurtReduce = "FinalHurtReduce" # 最终固定伤害减少
-Def_PlayerKey_BossIDHurt = "BossIDHurt" # 对指定boss伤害加成固定值
-Def_PlayerKey_BossIDHurtAddPer = "BossIDHurtAddPer" # 对指定boss伤害加成倍率
-Def_PlayerKey_DropEquipDoCount = "DropEquipDoCount" # 装备掉落执行次数加成万分率
-Def_PlayerKey_BaseAtkMin = "BaseAtkMin" # 基础最小攻击
-Def_PlayerKey_BaseAtkMax = "BaseAtkMax" # 基础最大攻击
-Def_PlayerKey_BaseMaxHP = "BaseMaxHP" # 基础生命
-Def_PlayerKey_BaseDef = "BaseDef" # 基础防御
-Def_PlayerKey_BaseHit = "BaseHit" # 基础命中
-Def_PlayerKey_BaseMiss = "BaseMiss" # 基础闪避
-Def_PlayerKey_BaseAtkAddPer = "BaseAtkAddPer" # 基础攻击百分比
-Def_PlayerKey_BaseMaxHPAddPer = "BaseMaxHPAddPer" # 基础生命百分比
-Def_PlayerKey_BaseDefAddPer = "BaseDefAddPer" # 基础防御百分比
-Def_PlayerKey_BaseHitAddPer = "BaseHitAddPer" # 基础命中百分比
-Def_PlayerKey_BaseMissAddPer = "BaseMissAddPer" # 基础闪避百分比
-Def_PlayerKey_FaQiMaxHPPer = "FaQiMaxHPPer" # 法器生命百分比
-Def_PlayerKey_FaQiAtkPer = "FaQiAtkPer" # 法器攻击百分比
-Def_PlayerKey_FaQiDefPer = "FaQiDefPer" # 法器防御百分比
-Def_PlayerKey_GodWeaponMaxHPPer = "GodWeaponMaxHPPer" # 神兵生命百分比
-Def_PlayerKey_GodWeaponAtkPer = "GodWeaponAtkPer" # 神兵攻击百分比
-Def_PlayerKey_StoneMaxHPPer = "StoneMaxHPPer" # 宝石生命百分比
-Def_PlayerKey_StoneAtkPer = "StoneAtkPer" # 宝石攻击百分比
-Def_PlayerKey_HPCureEnhance = "HPCureEnhance" # 血瓶恢复效果
Def_PlayerKey_HadInitFruitAttr = "HadInitFruitAttr" # 是否已经刷新过果实属性
-Def_PlayerKey_OnlyFinalHurt = "OnlyFinalHurt" # 额外输出伤害
-Def_PlayerKey_PVPAtkBackHP = "PVPAtkBackHP" # PVP攻击回血
-Def_PlayerKey_HitSucessRate = "HitSucessRate" # 命中成功率
-Def_PlayerKey_MissSucessRate = "MissSucessRate" # 闪避成功率
-Def_PlayerKey_CurePer = "CurePer" # 治疗加成 默认百分百
-Def_PlayerKey_BeHurtPer = "BeHurtPer" # 加深受到伤害百分比
-Def_PlayerKey_TitleMaxHPPer = "TitleMaxHPPer" # 称号生命加成
-Def_PlayerKey_TitleAtkPer = "TitleAtkPer" # 称号攻击加成
-Def_PlayerKey_TitleDefPer = "TitleDefPer" # 称号防御加成
-Def_PlayerKey_FaceMaxHPPer = "FaceMaxHPPer" # 头像生命加成
-Def_PlayerKey_FaceAtkPer = "FaceAtkPer" # 头像攻击加成
-Def_PlayerKey_FaceDefPer = "FaceDefPer" # 头像防御加成
-Def_PlayerKey_FacePicMaxHPPer = "FacePicMaxHPPer" # 头像框生命加成
-Def_PlayerKey_FacePicAtkPer = "FacePicAtkPer" # 头像框攻击加成
-Def_PlayerKey_FacePicDefPer = "FacePicDefPer" # 头像框防御加成
-Def_PlayerKey_HorseSkinMaxHPPer = "HorseSkinMaxHPPer" # 坐骑幻化生命加成
-Def_PlayerKey_HorseSkinAtkPer = "HorseSkinAtkPer" # 坐骑幻化攻击加成
-Def_PlayerKey_HorseSkinDefPer = "HorseSkinDefPer" # 坐骑幻化防御加成
-Def_PlayerKey_HorseAtkPer = "HorseAtkPer" # 坐骑攻击百分比
-Def_PlayerKey_HorseMaxHPPer = "HorseMaxHPPer" # 坐骑生命加成
-Def_PlayerKey_PetAtkPer = "PetAtkPer" # 灵宠攻击加成
-Def_PlayerKey_HorseTrainAttrPer = "HorseTrainAttrPer" # 坐骑培养属性加成
-Def_PlayerKey_PetTrainAttrPer = "PetTrainAttrPer" # 灵宠培养属性加成
-Def_PlayerKey_GuardTrainAttrPer = "GuardTrainAttrPer" # 守护培养属性加成
-Def_PlayerKey_WingTrainAttrPer = "WingTrainAttrPer" # 翅膀培养属性加成
-Def_PlayerKey_PeerlessWeaponTrainAttrPer = "PeerlessWeaponTrainAttrPer" # 灭世培养属性加成
-Def_PlayerKey_PeerlessWeapon2TrainAttrPer = "PeerlessWeapon2TrainAttrPer" # 弑神培养属性加成
-Def_PlayerKey_LianTiAttrPer = "LianTiAttrPer" # 炼体属性属性加成
-Def_PlayerKey_AffairSpeedPer = "AffairSpeedPer" # 仙盟事务速度加成
-Def_PlayerKey_FamilyBossHurtPer = "FamilyBossHurtPer" # 仙盟BOSS伤害加成
-Def_PlayerKey_FamilyWarHPPer = "FamilyWarHPPer" # 仙盟联赛生命加成
-Def_PlayerKey_FamilyWarAtkPer = "FamilyWarAtkPer" # 仙盟联赛攻击加成
-Def_PlayerKey_FamilySitExpPer = "FamilySitExpPer" # 仙盟打坐经验加成
-Def_PlayerKey_StoneBasePer = "StoneBasePer" # 宝石基础属性百分比
-Def_PlayerKey_RealmBasePer = "RealmBasePer" # 境界基础属性百分比
-Def_PlayerKey_WingHPPer = "WingHPPer" # 翅膀生命百分比
-Def_PlayerKey_SuiteBasePer = "SuiteBasePer" # 套装基础属性百分比
-Def_PlayerKey_PlusBaseAtkPer = "PlusBaseAtkPer" # 强化基础攻击百分比
-Def_PlayerKey_Metal = "PointMetal" # 金
-Def_PlayerKey_Wood = "PointWood" # 木
-Def_PlayerKey_Water = "PointWater" # 水
-Def_PlayerKey_Fire = "PointFire" # 火
-Def_PlayerKey_Earth = "PointEarth" # 土
-Def_PlayerKey_MetalQualityLV = "MetalQualityLV" # 金灵根品级
-Def_PlayerKey_WoodQualityLV = "WoodQualityLV" # 木灵根品级
-Def_PlayerKey_WaterQualityLV = "WaterQualityLV" # 水灵根品级
-Def_PlayerKey_FireQualityLV = "FireQualityLV" # 火灵根品级
-Def_PlayerKey_EarthQualityLV = "EarthQualityLV" # 土灵根品级
-Def_PlayerKey_SkillAddPer1 = "SkillAddPer1" # 技能伤害增强1
-Def_PlayerKey_SkillAddPer2 = "SkillAddPer2" # 技能伤害增强2
-Def_PlayerKey_SkillAddPer3 = "SkillAddPer3" # 技能伤害增强3
-Def_PlayerKey_SkillAddPer4 = "SkillAddPer4" # 技能伤害增强4
-Def_PlayerKey_SkillAddPer5 = "SkillAddPer5" # 技能伤害增强5
-Def_PlayerKey_SkillAddPer6 = "SkillAddPer6" # 技能伤害增强6
-Def_PlayerKey_SkillAddPer7 = "SkillAddPer7" # 技能伤害增强7
-Def_PlayerKey_SkillReducePer1 = "SkillReducePer1" # 受到技能伤害减少1
-Def_PlayerKey_SkillReducePer2 = "SkillReducePer2" # 受到技能伤害减少2
-Def_PlayerKey_SkillReducePer3 = "SkillReducePer3" # 受到技能伤害减少3
-Def_PlayerKey_SkillReducePer4 = "SkillReducePer4" # 受到技能伤害减少4
-Def_PlayerKey_SkillReducePer5 = "SkillReducePer5" # 受到技能伤害减少5
-Def_PlayerKey_SkillReducePer6 = "SkillReducePer6" # 受到技能伤害减少6
-Def_PlayerKey_SkillReducePer7 = "SkillReducePer7" # 受到技能伤害减少7
#功能索引ShareDefine.Def_AttrFruitFuncList
Def_PlayerKey_FruitAttr = "FruitAttr_%s_%s" # 属性果实增加的属性,参数为(功能索引, 物品效果id)
Def_PlayerKey_FruitFightPowerEx = "FruitFightPowerEx_%s" # 属性果实增加的附加战力,参数为(功能索引)
-Def_PlayerKey_FamilyLVLeave = "FamilyLVLeave" # 离开的最后一个家族的等级
Def_PDict_QueryTechLVUPState = "QueryTechLVUPState" # 查询科技等级提升状态
Def_PDict_PKStateTick = "PKStateTick" # PK状态tick,只要有一方发起攻击,双方均进入PK状态
Def_PDict_BossStateTick = "BossStateTick" # boss状态tick,攻击boss即进入boss状态
Def_PDict_MapAreaExpTick = "MapAreaExpTick" # 给场景经验tick
-# 装备累计基础属性
-Def_PDict_EquipTotalBaseMinAtk = "EquipTotalBaseMinAtk" # 装备累计基础最小攻击
-Def_PDict_EquipTotalBaseMaxAtk = "EquipTotalBaseMaxAtk" # 装备累计基础最大攻击
-Def_PDict_EquipTotalBaseDef = "EquipTotalBaseDef" # 装备累计基础防御
-Def_PDict_EquipTotalBaseHP = "EquipTotalBaseHP" # 装备累计基础生命
#---玩家字典KEY,存于数据库---
#===========================================================================
@@ -3877,13 +3844,6 @@
Def_PDict_ChatBoxStar = "ChatBoxStar_%s" # 星级,参数(气泡ID)
Def_PDict_EmojiPackState = "EmojiPackState_%s" # 表情包状态,参数(key编号)
Def_PDict_EmojiPackEndTime = "EmojiPackEndTime_%s" # 到期时间戳,0为永久,参数(表情包ID)
-
-#冰晶矿脉
-Def_PDict_IceLodeStarAwardRecord = "IceLodeStarAwardRecord" #星级奖励领奖记录
-Def_PDict_IceLodeHasSweep = "IceLodeHasSweep" #今日是否已扫荡过
-Def_PDict_IceLodeLastCheckTime = "IceLodeLastCheckTime" #上次补发星级奖励时间
-Def_PDict_IceLodeDayLV = "IceLodeDayLV" #今日等级
-Def_PDict_IceLodeIsInFBOnDay = "IceLodeIsInFBOnDay" #在副本里过天
#助战
Def_PDict_HelpBattleCheckInCount = "HelpBattleCheckInCount" #助战登记次数, 登记次数*10+今日是否登记过
@@ -4446,99 +4406,6 @@
}
#-------------------------------------------------------------------------------
-#------属性计算相关常量字符串定义
-AttrName_MinAtk = "MinAtk" # 最小攻击力
-AttrName_MaxAtk = "MaxAtk" # 最大攻击力
-AttrName_MinMAtk = "MinMAtk" # 最小魔法攻击力
-AttrName_MaxMAtk = "MaxMAtk" # 最大魔法攻击力
-AttrName_Atk = "Atk" # 物理攻击力
-AttrName_MAtk = "MAtk" # 魔法攻击
-AttrName_Def = "Def" # 防御
-AttrName_DefRate = "Miss" # 闪避
-AttrName_MagAtkPer = "MagAtkPer" # 魔法攻击百分比
-AttrName_AtkPer = "AtkPer" # 物理攻击百分比
-AttrName_MaxHP = "MaxHP" # 最大血量
-AttrName_MaxMP = "MaxMP" # 最大蓝量
-AttrName_MaxHPPer = "MaxHPPer" # 最大血量百分比
-AttrName_MaxMPPer = "MaxMPPer" # 最大蓝量百分比
-AttrName_IceAtk = "IceAtk" # 冰攻
-AttrName_FireAtk = "FireAtk" # 火攻
-AttrName_PoisonAtk = "PoisonAtk" # 毒攻
-AttrName_ThunderAtk = "ThunderAtk" # 雷攻
-AttrName_WindAtk = "WindAtk" # 风攻
-AttrName_IceDef = "IceDef" # 冰防
-AttrName_FireDef = "FireDef" # 火攻
-AttrName_PoisonDef = "PoisonDef" # 毒防
-AttrName_ThunderDef = "ThunderDef" # 雷防
-AttrName_WindDef = "WindDef" # 风攻
-AttrName_DamagePVPReduce = "DamagePVPReduce" # PVP固定减伤
-AttrName_DamagePVP = "DamagePVP" # pvp固定伤害
-AttrName_Speed = "Speed" # 移动速度
-AttrName_BothAtk = "BothAtk" # 双攻物魔
-AttrName_Hit = "Hit" # 命中
-AttrName_AutoRestoreHPPer = "AutoRestoreHPPer" # 生命自动回复
-AttrName_GreatHitRate = "GreatHitRate" # 卓越一击几率
-AttrName_GreatHit = "GreatHit" # 卓越一击伤害倍率
-AttrName_LuckyHitRate = "LuckyHitRate" # 会心一击几率
-AttrName_LuckyHit = "LuckyHit" # 会心一击伤害固定值
-AttrName_IgnoreDefRate = "IgnoreDefRate" # 无视防御几率
-AttrName_AtkSpeed = "AtkSpeed" # 攻击速度
-AttrName_ReduceSkillCDPer = "ReduceSkillCDPer" # 减技能CD比例
-AttrName_BleedDamage = "BleedDamage" # 流血伤害增加
-AttrName_KillBackHP = "KillBackHP" # 击杀回血
-AttrName_KillBackMP = "KillBackMP" # 击杀回蓝
-AttrName_DamBackPer = "DamBackPer" # 反伤百分比
-AttrName_DropMoneyPer = "DropMoneyPer" # 掉落金钱值增加
-AttrName_BothAtkPer = "BothAtkPer" # 双攻物魔百分比
-AttrName_DefRatePer = "MissPer" #闪避百分比
-AttrName_DefPer = "DefPer" # 防御比率
-AttrName_HitPer = "HitPer" # 命中比率
-AttrName_FightExpRate = "FightExpRate" # 杀怪经验倍率
-AttrName_GameExpRate = "GameExpRate" # 游戏事件经验倍率
-AttrName_SkillAtkRate = "SkillAtkRate" # 技能伤害加成 (用作伤害加成)
-AttrName_AtkBackHP = "AtkBackHP" # 攻击回复血量固定值
-AttrName_AtkBackHPPer = "AtkBackHPPer" # 攻击回复血量比率
-AttrName_SuperHit = "SuperHit" # 暴击伤害固定值
-AttrName_SuperHitRate = "SuperHitRate" # 暴击概率
-AttrName_NPCHurtAddPer = "NPCHurtAddPer" # 对怪物伤害加成
-AttrName_JobAHurtAddPer = "JobAHurtAddPer" # 目标战士伤害加成
-AttrName_JobBHurtAddPer = "JobBHurtAddPer" # 目标法师伤害加成
-AttrName_JobCHurtAddPer = "JobCHurtAddPer" # 目标弓手伤害加成
-AttrName_NPCAtkReducePer = "NPCAtkReducePer" # 怪物攻击伤害减免
-AttrName_JobAAtkReducePer = "JobAAtkReducePer" # 战士攻击伤害减免
-AttrName_JobBAtkReducePer = "JobBAtkReducePer" # 法师攻击伤害减免
-AttrName_JobCAtkReducePer = "JobCAtkReducePer" # 弓手攻击伤害减免
-AttrName_LuckyHitReduce = "LuckyHitReduce" # 会心一击伤害减免固定值
-AttrName_GreatHitReducePer = "GreatHitReducePer" # 卓越一击伤害减免
-AttrName_SuperHitReduce = "SuperHitReduce" # 暴击伤害减免固定值
-AttrName_IgnoreDefReducePer = "IgnoreDefReducePer" # 无视防御伤害减免
-AttrName_LuckyHitRateReduce = "LuckyHitRateReduce" # 抗会心一击概率
-AttrName_GreatHitRateReduce = "GreatHitRateReduce" # 抗卓越一击概率
-AttrName_SuperHitRateReduce = "SuperHitRateReduce" # 抗暴击概率
-AttrName_IgnoreDefRateReduce = "IgnoreDefRateReduce" # 抗无视防御概率
-AttrName_BossFinalHurtPer = "BossFinalHurtPer" # Boss最终伤害百分比
-AttrName_FinalHurtPer = "FinalHurtPer" # 最终伤害百分比
-AttrName_FuhaoHitRate = "FuhaoHitRate" # 富豪一击概率
-AttrName_FinalHurt = "FinalHurt" # 最终固定伤害增加
-AttrName_FinalHurtReduce = "FinalHurtReduce" # 最终固定伤害减少
-AttrName_BossIDHurt = "BossIDHurt" # 对指定boss伤害加成固定值
-AttrName_BossIDHurtAddPer = "BossIDHurtAddPer" # 对指定boss伤害加成倍率
-AttrName_DropEquipDoCount = "DropEquipDoCount" # 装备掉落执行次数加成万分率
-AttrName_PetAtk = "PetAtk" # 灵宠攻击
-AttrName_PetSkillAtkRate = "PetSkillAtkRate" # 灵宠技能
-AttrName_PetDamPer = "PetDamPer" # 灵宠伤害增加
-AttrName_ComboDefRate = "ComboDefRate" # 抗连击概率
-AttrName_AtkBackRate = "AtkBackRate" # 反击概率
-AttrName_AtkBackDefRate = "AtkBackDefRate" # 抗反击概率
-AttrName_SuckHPPer = "SuckHPPer" # 吸血比率
-AttrName_SuckHPDefPer = "SuckHPDefPer" # 抗吸血比率
-AttrName_CurePer = "CurePer" # 强化治疗
-AttrName_CureDefPer = "CureDefPer" # 弱化治疗
-AttrName_PetStrengthenPer = "PetStrengthenPer" # 强化灵兽
-AttrName_PetWeakenPer = "PetWeakenPer" # 弱化灵兽
-AttrName_SuperHitHurtPer = "SuperHitHurtPer" # 强化暴伤
-AttrName_SuperHitHurtDefPer = "SuperHitHurtDefPer" # 弱化暴伤
-
#物品效果(ID或指定类型)对应的属性计算信息 {效果(ID/指定类型):[[属性索引, ...], 是否基础属性,(非)线性]}
#对应 Def_Calc_AllAttrType_MAX
ItemEffect_AttrDict = {
@@ -4570,82 +4437,24 @@
ShareDefine.Def_Effect_ToxinDef:[[TYPE_Calc_AttrPoisonDef], False, TYPE_Linear],
ShareDefine.Def_Effect_ThunderDef:[[TYPE_Calc_AttrThunderDef], False, TYPE_Linear],
ShareDefine.Def_Effect_IgnoreDefRate:[[TYPE_Calc_IgnoreDefRate], False, TYPE_Linear],
- ShareDefine.Def_Effect_IgnoreDefRateReduce:[[TYPE_Calc_IgnoreDefRateReduce], False, TYPE_Linear],
ShareDefine.Def_Effect_DamBackPer:[[TYPE_Calc_DamBackPer], False, TYPE_Linear],
ShareDefine.Def_Effect_GreatHit:[[TYPE_Calc_GreatHit], False, TYPE_Linear],
ShareDefine.Def_Effect_LuckyHit:[[TYPE_Calc_LuckyHit], False, TYPE_Linear],
ShareDefine.Def_Effect_LuckyHitRate:[[TYPE_Calc_LuckyHitRate], False, TYPE_Linear],
- ShareDefine.Def_Effect_LuckyHitRateReduce:[[TYPE_Calc_LuckyHitRateReduce], False, TYPE_Linear],
ShareDefine.Def_Effect_Luck:[[TYPE_Calc_Luck], False, TYPE_Linear],
ShareDefine.Def_Effect_ReduceSkillCDPer:[[TYPE_Calc_ReduceSkillCDPer], False, TYPE_Linear],
- AttrName_MinAtk:[[TYPE_Calc_AttrATKMin], False, TYPE_Linear],
- AttrName_MaxAtk:[[TYPE_Calc_AttrATKMax], False, TYPE_Linear],
- #AttrName_MinMAtk:[[TYPE_Calc_AttrMATKMin], False, TYPE_Linear],
- #AttrName_MaxMAtk:[[TYPE_Calc_AttrMATKMax], False, TYPE_Linear],
- AttrName_Def:[[TYPE_Calc_AttrDEF], False, TYPE_Linear],
- AttrName_DefRate:[[TYPE_Calc_AttrMiss], False, TYPE_Linear],
- AttrName_MaxHP:[[TYPE_Calc_AttrMaxHP], False, TYPE_Linear],
- AttrName_MaxMP:[[TYPE_Calc_AttrMaxMP], False, TYPE_Linear],
- AttrName_IceAtk:[[TYPE_Calc_AttrIceAtk], False, TYPE_Linear],
ShareDefine.Def_Effect_IceAtk:[[TYPE_Calc_AttrIceAtk], False, TYPE_Linear],
- AttrName_FireAtk:[[TYPE_Calc_AttrFireAtk], False, TYPE_Linear],
- AttrName_PoisonAtk:[[TYPE_Calc_AttrPoisonAtk], False, TYPE_Linear],
- AttrName_ThunderAtk:[[TYPE_Calc_AttrThunderAtk], False, TYPE_Linear],
- AttrName_WindAtk:[[TYPE_Calc_AttrWindAtk], False, TYPE_Linear],
- AttrName_IceDef:[[TYPE_Calc_AttrIceDef], False, TYPE_Linear],
ShareDefine.Def_Effect_IceDef:[[TYPE_Calc_AttrIceDef], False, TYPE_Linear],
- AttrName_FireDef:[[TYPE_Calc_AttrFireDef], False, TYPE_Linear],
- AttrName_PoisonDef:[[TYPE_Calc_AttrPoisonDef], False, TYPE_Linear],
- AttrName_ThunderDef:[[TYPE_Calc_AttrThunderDef], False, TYPE_Linear],
- AttrName_WindDef:[[TYPE_Calc_AttrWindDef], False, TYPE_Linear],
- AttrName_BothAtk:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_Linear],
- #AttrName_BothAtk:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax,
- # TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_Linear],
- AttrName_Hit:[[TYPE_Calc_AttrHit], False, TYPE_Linear],
- AttrName_Atk:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_Linear],
- #AttrName_Atk:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_Linear],
- #AttrName_MAtk:[[TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_Linear],
- AttrName_AutoRestoreHPPer:[[TYPE_Calc_HPRestorePer], False, TYPE_Linear],
ShareDefine.Def_Effect_HPRestore:[[TYPE_Calc_HPRestorePer], False, TYPE_Linear],
- AttrName_GreatHitRate:[[TYPE_Calc_GreatHitRate], False, TYPE_Linear],
- AttrName_GreatHit:[[TYPE_Calc_GreatHit], False, TYPE_Linear],
- AttrName_LuckyHitRate:[[TYPE_Calc_LuckyHitRate], False, TYPE_Linear],
- AttrName_LuckyHit:[[TYPE_Calc_LuckyHit], False, TYPE_Linear],
- AttrName_LuckyHitReduce:[[TYPE_Calc_LuckyHitReduce], False, TYPE_Linear],
- AttrName_LuckyHitRateReduce:[[TYPE_Calc_LuckyHitRateReduce], False, TYPE_Linear],
- AttrName_IgnoreDefRate:[[TYPE_Calc_IgnoreDefRate], False, TYPE_Linear],
- AttrName_IgnoreDefRateReduce:[[TYPE_Calc_IgnoreDefRateReduce], False, TYPE_Linear],
- AttrName_IgnoreDefReducePer:[[TYPE_Calc_IgnoreDefReducePer], False, TYPE_Linear],
- AttrName_AtkSpeed:[[TYPE_Calc_AttrAtkSpeed], False, TYPE_Linear],
- AttrName_ReduceSkillCDPer:[[TYPE_Calc_ReduceSkillCDPer], False, TYPE_Linear],
- AttrName_KillBackHP:[[TYPE_Calc_KillBackHP], False, TYPE_Linear],
- AttrName_KillBackMP:[[TYPE_Calc_KillBackMP], False, TYPE_Linear],
- AttrName_DamBackPer:[[TYPE_Calc_DamBackPer], False, TYPE_Linear],
- AttrName_DropMoneyPer:[[TYPE_Calc_DropMoneyPer], False, TYPE_Linear],
- ShareDefine.Def_Effect_DropEquipPer:[[TYPE_Calc_DropEquipPer], False, TYPE_Linear],
ShareDefine.Def_Effect_DropMoneyPer:[[TYPE_Calc_DropMoneyPer], False, TYPE_Linear],
- AttrName_FightExpRate:[[TYPE_Calc_AttrFightExpRate], False, TYPE_Linear],
ShareDefine.Def_Effect_FightExpRate:[[TYPE_Calc_AttrFightExpRate], False, TYPE_Linear],
- AttrName_GameExpRate:[[TYPE_Calc_AttrGameExpRate], False, TYPE_Linear],
- AttrName_SkillAtkRate:[[TYPE_Calc_SkillAtkRate], False, TYPE_Linear],
- ShareDefine.Def_Effect_DamChanceDef:[[TYPE_Calc_DamChanceDef], False, TYPE_Linear],
- ShareDefine.Def_Effect_FaintRate:[[TYPE_Calc_FaintRate], False, TYPE_Linear],
- ShareDefine.Def_Effect_FaintDefRate:[[TYPE_Calc_FaintDefRate], False, TYPE_Linear],
ShareDefine.Def_Effect_SkillAtkRate:[[TYPE_Calc_SkillAtkRate], False, TYPE_Linear],
ShareDefine.Def_Effect_SkillAtkRateReduce:[[TYPE_Calc_SkillAtkRateReduce], False, TYPE_Linear],
ShareDefine.Def_Effect_DamagePVP:[[TYPE_Calc_DamagePVP], False, TYPE_Linear],
ShareDefine.Def_Effect_DamagePVPReduce:[[TYPE_Calc_DamagePVPReduce], False, TYPE_Linear],
ShareDefine.Def_Effect_DamagePerPVP:[[TYPE_Calc_DamagePerPVP], False, TYPE_Linear],
ShareDefine.Def_Effect_DamagePerPVPReduce:[[TYPE_Calc_DamagePerPVPReduce], False, TYPE_Linear],
- ShareDefine.Def_Effect_ComboRate:[[TYPE_Calc_ComboRate], False, TYPE_Linear],
- ShareDefine.Def_Effect_ComboDamPer:[[TYPE_Calc_ComboDamPer], False, TYPE_Linear],
ShareDefine.Def_Effect_BleedDamage:[[TYPE_Calc_BleedDamage], False, TYPE_Linear],
- AttrName_BleedDamage:[[TYPE_Calc_BleedDamage], False, TYPE_Linear],
- AttrName_AtkBackHPPer:[[TYPE_Calc_AtkBackHPPer], False, TYPE_Linear],
- ShareDefine.Def_Effect_AtkBackHP:[[TYPE_Calc_AtkBackHPPer], False, TYPE_Linear],
- AttrName_SuperHitRate:[[TYPE_Calc_SuperHitRate], False, TYPE_Linear],
- AttrName_SuperHit:[[TYPE_Calc_SuperHit], False, TYPE_Linear],
- AttrName_NPCHurtAddPer:[[TYPE_Calc_NPCHurtAddPer], False, TYPE_Linear],
ShareDefine.Def_Effect_NPCHurtAddPer:[[TYPE_Calc_NPCHurtAddPer], False, TYPE_Linear],
ShareDefine.Def_Effect_JobAHurtAddPer:[[TYPE_Calc_JobAHurtAddPer], False, TYPE_Linear],
ShareDefine.Def_Effect_JobBHurtAddPer:[[TYPE_Calc_JobBHurtAddPer], False, TYPE_Linear],
@@ -4653,45 +4462,11 @@
ShareDefine.Def_Effect_JobAAtkReducePer:[[TYPE_Calc_JobAAtkReducePer], False, TYPE_Linear],
ShareDefine.Def_Effect_JobBAtkReducePer:[[TYPE_Calc_JobBAtkReducePer], False, TYPE_Linear],
ShareDefine.Def_Effect_JobCAtkReducePer:[[TYPE_Calc_JobCAtkReducePer], False, TYPE_Linear],
- AttrName_JobAHurtAddPer:[[TYPE_Calc_JobAHurtAddPer], False, TYPE_Linear],
- AttrName_JobBHurtAddPer:[[TYPE_Calc_JobBHurtAddPer], False, TYPE_Linear],
- AttrName_JobCHurtAddPer:[[TYPE_Calc_JobCHurtAddPer], False, TYPE_Linear],
- AttrName_NPCAtkReducePer:[[TYPE_Calc_NPCAtkReducePer], False, TYPE_Linear],
- AttrName_JobAAtkReducePer:[[TYPE_Calc_JobAAtkReducePer], False, TYPE_Linear],
- AttrName_JobBAtkReducePer:[[TYPE_Calc_JobBAtkReducePer], False, TYPE_Linear],
- AttrName_JobCAtkReducePer:[[TYPE_Calc_JobCAtkReducePer], False, TYPE_Linear],
- AttrName_GreatHitReducePer:[[TYPE_Calc_GreatHitReducePer], False, TYPE_Linear],
- AttrName_SuperHitReduce:[[TYPE_Calc_SuperHitReduce], False, TYPE_Linear],
- AttrName_GreatHitRateReduce:[[TYPE_Calc_GreatHitRateReduce], False, TYPE_Linear],
- AttrName_SuperHitRateReduce:[[TYPE_Calc_SuperHitRateReduce], False, TYPE_Linear],
ShareDefine.Def_Effect_SuperHitRateReduce:[[TYPE_Calc_SuperHitRateReduce], False, TYPE_Linear],
- AttrName_DamagePVPReduce:[[TYPE_Calc_DamagePVPReduce], False, TYPE_Linear],
- AttrName_DamagePVP:[[TYPE_Calc_DamagePVP], False, TYPE_Linear],
- AttrName_BossFinalHurtPer:[[TYPE_Calc_BossFinalHurtPer], False, TYPE_Linear],
- AttrName_FinalHurtPer:[[TYPE_Calc_FinalHurtPer], False, TYPE_Linear],
- AttrName_FuhaoHitRate:[[TYPE_Calc_FuhaoHitRate], False, TYPE_Linear],
ShareDefine.Def_Effect_FinalHurt:[[TYPE_Calc_FinalHurt], False, TYPE_Linear],
ShareDefine.Def_Effect_FinalHurtReduce:[[TYPE_Calc_FinalHurtReduce], False, TYPE_Linear],
- AttrName_FinalHurt:[[TYPE_Calc_FinalHurt], False, TYPE_Linear],
- AttrName_FinalHurtReduce:[[TYPE_Calc_FinalHurtReduce], False, TYPE_Linear],
- AttrName_BossIDHurt:[[TYPE_Calc_BossIDHurt], False, TYPE_Linear],
- AttrName_BossIDHurtAddPer:[[TYPE_Calc_BossIDHurtAddPer], False, TYPE_Linear],
- AttrName_DropEquipDoCount:[[TYPE_Calc_DropEquipDoCount], False, TYPE_Linear],
- AttrName_Speed:[[TYPE_Calc_AttrSpeed], False, TYPE_Linear],
ShareDefine.Def_Effect_Speed:[[TYPE_Calc_AttrSpeed], False, TYPE_Linear],
- ShareDefine.Def_Effect_PetAtk:[[TYPE_Calc_PetMinAtk, TYPE_Calc_PetMaxAtk], False, TYPE_Linear],
- AttrName_PetAtk:[[TYPE_Calc_PetMinAtk, TYPE_Calc_PetMaxAtk], False, TYPE_Linear],
- ShareDefine.Def_Effect_PetMinAtk:[[TYPE_Calc_PetMinAtk], False, TYPE_Linear],
- ShareDefine.Def_Effect_PetMaxAtk:[[TYPE_Calc_PetMaxAtk], False, TYPE_Linear],
- ShareDefine.Def_Effect_PetDamPer:[[TYPE_Calc_PetDamPer], False, TYPE_Linear],
- AttrName_PetDamPer:[[TYPE_Calc_PetDamPer], False, TYPE_Linear],
ShareDefine.Def_Effect_PetSkillAtkRate:[[TYPE_Calc_PetSkillAtkRate], False, TYPE_Linear],
- AttrName_PetSkillAtkRate:[[TYPE_Calc_PetSkillAtkRate], False, TYPE_Linear],
- ShareDefine.Def_Effect_PerLVAtk:[[TYPE_Calc_PerLVAtk], False, TYPE_Linear],
- ShareDefine.Def_Effect_PerLVMaxHP:[[TYPE_Calc_PerLVMaxHP], False, TYPE_Linear],
- ShareDefine.Def_Effect_MaxProDef:[[TYPE_Calc_MaxProDef], False, TYPE_Linear],
- ShareDefine.Def_Effect_ProDefHPPer:[[TYPE_Calc_ProDefHPPer], False, TYPE_Linear],
- ShareDefine.Def_Effect_ProDefAbsorb:[[TYPE_Calc_ProDefAbsorb], False, TYPE_Linear],
ShareDefine.Def_Effect_OnlyFinalHurt:[[TYPE_Calc_OnlyFinalHurt], False, TYPE_Linear],
ShareDefine.Def_Effect_PVPAtkBackHP:[[TYPE_Calc_PVPAtkBackHP], False, TYPE_Linear],
ShareDefine.Def_Effect_NormalHurt:[[TYPE_Calc_NormalHurt], False, TYPE_Linear],
@@ -4699,7 +4474,6 @@
ShareDefine.Def_Effect_FabaoHurt:[[TYPE_Calc_FabaoHurt], False, TYPE_Linear],
ShareDefine.Def_Effect_FabaoHurtPer:[[TYPE_Calc_FabaoHurtPer], False, TYPE_Linear],
ShareDefine.Def_Effect_SuperHitRateReduce:[[TYPE_Calc_SuperHitRateReduce], False, TYPE_Linear], # 暴击概率抗性
- ShareDefine.Def_Effect_LuckyHitReduce:[[TYPE_Calc_LuckyHitReduce], False, TYPE_Linear],# 会心一击伤害固定减伤
ShareDefine.Def_Effect_DamagePVE:[[TYPE_Calc_DamagePVE], False, TYPE_Linear], # PVE固定伤害
ShareDefine.Def_Effect_BossFinalHurtPer:[[TYPE_Calc_BossFinalHurtPer], False, TYPE_Linear], # Boss最终伤害万分率
ShareDefine.Def_Effect_FinalHurtPer:[[TYPE_Calc_FinalHurtPer], False, TYPE_Linear], # 最终伤害万分率
@@ -4729,15 +4503,10 @@
ShareDefine.Def_Effect_FamilyWarAtkPer:[[TYPE_Calc_FamilyWarAtkPer], False, TYPE_Linear],
ShareDefine.Def_Effect_FamilySitExpPer:[[TYPE_Calc_FamilySitExpPer], False, TYPE_Linear],
ShareDefine.Def_Effect_ComboDefRate:[[TYPE_Calc_ComboDefRate], False, TYPE_Linear],
- AttrName_ComboDefRate:[[TYPE_Calc_ComboDefRate], False, TYPE_Linear],
ShareDefine.Def_Effect_AtkBackRate:[[TYPE_Calc_AtkBackRate], False, TYPE_Linear],
- AttrName_AtkBackRate:[[TYPE_Calc_AtkBackRate], False, TYPE_Linear],
ShareDefine.Def_Effect_AtkBackDefRate:[[TYPE_Calc_AtkBackDefRate], False, TYPE_Linear],
- AttrName_AtkBackDefRate:[[TYPE_Calc_AtkBackDefRate], False, TYPE_Linear],
ShareDefine.Def_Effect_SuckHPPer:[[TYPE_Calc_SuckHPPer], False, TYPE_Linear],
- AttrName_SuckHPPer:[[TYPE_Calc_SuckHPPer], False, TYPE_Linear],
ShareDefine.Def_Effect_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
- AttrName_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
ShareDefine.Def_Effect_CurePer:[[TYPE_Calc_CurePer], False, TYPE_Linear],
ShareDefine.Def_Effect_CureDefPer:[[TYPE_Calc_CureDefPer], False, TYPE_Linear],
ShareDefine.Def_Effect_PetStrengthenPer:[[TYPE_Calc_PetStrengthenPer], False, TYPE_Linear],
@@ -4754,23 +4523,10 @@
ShareDefine.Def_Effect_MissRate:[[TYPE_Calc_AttrMiss], False, TYPE_NoLinear],
#ShareDefine.Def_Effect_AddMAtkByPer:[[TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_NoLinear],
ShareDefine.Def_Effect_AddAtkByPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
- ShareDefine.Def_Effect_PetAtkPer:[[TYPE_Calc_PetMinAtk, TYPE_Calc_PetMaxAtk], False, TYPE_NoLinear],
ShareDefine.Def_Effect_SpeedPer:[[TYPE_Calc_AttrSpeed], False, TYPE_NoLinear],
ShareDefine.Def_Effect_LuckPer:[[TYPE_Calc_Luck], False, TYPE_NoLinear],
ShareDefine.Def_Effect_IceAtkPer:[[TYPE_Calc_AttrIceAtk], False, TYPE_NoLinear],
ShareDefine.Def_Effect_IceDefPer:[[TYPE_Calc_AttrIceDef], False, TYPE_NoLinear],
- #ShareDefine.Def_Effect_AddAtkByPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
- #AttrName_MagAtkPer:[[TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_NoLinear],
- AttrName_AtkPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
- #AttrName_AtkPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
- AttrName_BothAtkPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax], False, TYPE_NoLinear],
- #AttrName_BothAtkPer:[[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax,
- # TYPE_Calc_AttrMATKMin, TYPE_Calc_AttrMATKMax], False, TYPE_NoLinear],
- AttrName_DefRatePer:[[TYPE_Calc_AttrMiss], False, TYPE_NoLinear],
- AttrName_MaxHPPer:[[TYPE_Calc_AttrMaxHP], False, TYPE_NoLinear],
- AttrName_MaxMPPer:[[TYPE_Calc_AttrMaxMP], False, TYPE_NoLinear],
- AttrName_DefPer:[[TYPE_Calc_AttrDEF], False, TYPE_NoLinear],
- AttrName_HitPer:[[TYPE_Calc_AttrHit], False, TYPE_NoLinear],
#功能交叉影响的战斗非线性
ShareDefine.Def_Effect_BaseAtkAddPer:[[TYPE_Calc_BaseAtkAddPer], False, TYPE_NoLinear],
@@ -5782,7 +5538,7 @@
Def_SkillFuncType_ShentongSkill, #20 神通技能
Def_SkillFuncType_ElfSkill, #21 精怪技能
Def_SkillFuncType_GatherTheSoul, #22 聚魂技能
-Def_SkillFuncType_TurnNormaAttack, #23 回合普攻技能
+Def_SkillFuncType_TurnNormaSkill, #23 回合普攻技能
) = range(24)
# 受技能效果完全影响的怪, 对应 Def_BattleRelationType_CommNoBoss
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 658d84e..3c04f3a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -5491,58 +5491,6 @@
#------------------------------------------------------
-# A5 30 购买魔魂铜钱经验什么的 #tagCMBuySomething
-
-class tagCMBuySomething(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("Type", c_ubyte), #14铜钱,15经验
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xA5
- self.SubCmd = 0x30
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xA5
- self.SubCmd = 0x30
- self.Type = 0
- return
-
- def GetLength(self):
- return sizeof(tagCMBuySomething)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// A5 30 购买魔魂铜钱经验什么的 //tagCMBuySomething:
- Cmd:%s,
- SubCmd:%s,
- Type:%d
- '''\
- %(
- self.Cmd,
- self.SubCmd,
- self.Type
- )
- return DumpString
-
-
-m_NAtagCMBuySomething=tagCMBuySomething()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuySomething.Cmd,m_NAtagCMBuySomething.SubCmd))] = m_NAtagCMBuySomething
-
-
-#------------------------------------------------------
#A5 01 坐骑激活 #tagPlayerActivateHorse
class tagPlayerActivateHorse(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 1638a89..8777856 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -46639,94 +46639,6 @@
#------------------------------------------------------
-# B2 04 冰晶矿脉信息通知 #tagMCIceLodeInfo
-
-class tagMCIceLodeInfo(Structure):
- Head = tagHead()
- Cnt = 0 #(BYTE Cnt)// 今日玩法数量
- LineList = list() #(vector<BYTE> LineList)// 玩法列表
- AwardRecord = 0 #(DWORD AwardRecord)// 领奖记录
- HasSweep = 0 #(BYTE HasSweep)// 是否已扫荡
- DayLV = 0 #(WORD DayLV)// 今日等级
- data = None
-
- def __init__(self):
- self.Clear()
- self.Head.Cmd = 0xB2
- self.Head.SubCmd = 0x04
- return
-
- def ReadData(self, _lpData, _pos=0, _Len=0):
- self.Clear()
- _pos = self.Head.ReadData(_lpData, _pos)
- self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.Cnt):
- value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
- self.LineList.append(value)
- self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.HasSweep,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.DayLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
- return _pos
-
- def Clear(self):
- self.Head = tagHead()
- self.Head.Clear()
- self.Head.Cmd = 0xB2
- self.Head.SubCmd = 0x04
- self.Cnt = 0
- self.LineList = list()
- self.AwardRecord = 0
- self.HasSweep = 0
- self.DayLV = 0
- return
-
- def GetLength(self):
- length = 0
- length += self.Head.GetLength()
- length += 1
- length += 1 * self.Cnt
- length += 4
- length += 1
- length += 2
-
- return length
-
- def GetBuffer(self):
- data = ''
- data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
- data = CommFunc.WriteBYTE(data, self.Cnt)
- for i in range(self.Cnt):
- data = CommFunc.WriteBYTE(data, self.LineList[i])
- data = CommFunc.WriteDWORD(data, self.AwardRecord)
- data = CommFunc.WriteBYTE(data, self.HasSweep)
- data = CommFunc.WriteWORD(data, self.DayLV)
- return data
-
- def OutputString(self):
- DumpString = '''
- Head:%s,
- Cnt:%d,
- LineList:%s,
- AwardRecord:%d,
- HasSweep:%d,
- DayLV:%d
- '''\
- %(
- self.Head.OutputString(),
- self.Cnt,
- "...",
- self.AwardRecord,
- self.HasSweep,
- self.DayLV
- )
- return DumpString
-
-
-m_NAtagMCIceLodeInfo=tagMCIceLodeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCIceLodeInfo.Head.Cmd,m_NAtagMCIceLodeInfo.Head.SubCmd))] = m_NAtagMCIceLodeInfo
-
-
-#------------------------------------------------------
# B2 03 公共副本扫荡信息 #tagMCPubFBSweepData
class tagMCPubFBSweep(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
index f9cc3d6..7a9eb91 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
@@ -985,37 +985,6 @@
SendEventPack("PlayerFamily_%s"%eventName, dataDict, curPlayer)
return
-
-## 获得威望值
-# @param curPlayer 玩家实例
-# @param addPrestige 添加值
-# @param addType 原因
-# @return
-def DR_GetPrestigeValue(curPlayer, addPrestige, addType):
- return
- dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),
- 'AccID':curPlayer.GetAccID(),
- "Prestige":addPrestige, "TotalPrestige":PlayerControl.GetPrestige(curPlayer), "Type":addType}
-
- SendEventPack("GetPrestigeValue", dataDict, curPlayer)
- return
-
-
-## 失去威望值
-# @param curPlayer 玩家实例
-# @param addPrestige 添加值
-# @param addType 原因
-# @return
-def DR_LostPrestigeValue(curPlayer, addPrestige, addType):
- return
- dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),
- 'AccID':curPlayer.GetAccID(),
- "Prestige":addPrestige, "TotalPrestige":PlayerControl.GetPrestige(curPlayer), "Type":addType}
-
- SendEventPack("LostPrestigeValue", dataDict, curPlayer)
- return
-
-
## 记录错误信息
# @param info: 错误信息
# @param playerID: 玩家ID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_PlayerBuyZhenQi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_PlayerBuyZhenQi.py
deleted file mode 100644
index 3007dee..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_PlayerBuyZhenQi.py
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-#
-##@package Operate_PlayerBuyZhenQi
-# @todo:祈愿
-# @author sgj
-# @date 2017-10-31 11:30
-# @version 1.0
-#
-
-#------------------------------------------------------------------------------
-#"""Version = 2017-10-31 11:30"""
-#------------------------------------------------------------------------------
-# 导入
-import GameWorld
-import ChConfig
-import PlayerControl
-import NetPackCommon
-import ChPyNetSendPack
-import IPY_GameWorld
-import IpyGameDataPY
-import PlayerVip
-import time
-import ShareDefine
-import GameFuncComm
-import ItemCommon
-import ItemControler
-import PlayerSuccess
-import PlayerActivity
-import PlayerBossReborn
-import PlayerFairyCeremony
-import PlayerNewFairyCeremony
-import PlayerFeastTravel
-import PlayerActLogin
-import PlayerActTask
-import PlayerWeekParty
-#------------------------------------------------------------------------------
-
-#获取金币祈愿奖励
-def GetMoneyPrayAward():
- return IpyGameDataPY.GetFuncCfg("MoneyPray", 2)
-#获取金币祈愿消耗
-def GetMoneyPrayCost():
- return IpyGameDataPY.GetFuncCfg("MoneyPray", 1)
-#获取经验祈愿奖励
-def GetExpPrayAward():
- return IpyGameDataPY.GetFuncCfg("ExpPray", 2)
-#获取经验起眼消耗
-def GetExpPrayCost():
- return IpyGameDataPY.GetFuncCfg("ExpPray", 1)
-
-
-#祈愿类型列表
-TotalPrayList = [ChConfig.VIPPrivilege_MoneyPray, ChConfig.VIPPrivilege_ExpPray]
-
-
-#struct tagCMBuySomething
-#{
-# tagHead Head;
-# BYTE Type; //14铜钱,15经验
-#};
-## A5 30 玩家祈愿
-# @param index: 玩家索引
-# @param clientData: 客户端封包数据
-# @param tick: 时间戳
-# @return: None
-def OnPlayerBuySomething(index, clientData, tick):
-
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-
- buyType = clientData.Type #购买的类型
- #祈愿类型错误,不处理
- if buyType not in TotalPrayList:
- GameWorld.DebugLog("祈愿类型错误---buyType:%s" % buyType)
- return
- if buyType == ChConfig.VIPPrivilege_MoneyPray:
- if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_RefineMoney):
- GameWorld.DebugLog("金币祈愿功能未开启")
- return
- elif buyType == ChConfig.VIPPrivilege_ExpPray:
- if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_RefineExp):
- GameWorld.DebugLog("经验祈愿功能未开启")
- return
-
- totalCnt = PlayerVip.GetPrivilegeValue(curPlayer, buyType)
- curCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HasPrayCnt % buyType)
- cnt = curCnt + 1 #参数用
- #金币祈愿
- if buyType == ChConfig.VIPPrivilege_MoneyPray:
- historyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HistoryPrayCnt % buyType)
- #判断免费祈愿CD时间
- needTime = __GetFreeCD(curPlayer)
- if needTime:
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- needItemID = IpyGameDataPY.GetFuncCfg('FreeExpPrayItem', 2)
- hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, 1)
- if not hasEnough and totalCnt <= curCnt:
- GameWorld.DebugLog("金币祈愿次数已经用完,当前次数:%s,每日最大次数:%s" % (curCnt, totalCnt))
- return
- isCostItem = False #是否使用了物品
- if hasEnough:
- #优先用物品
- isCostItem = True
- ItemCommon.ReduceItem(curPlayer, itemPack, itemList, 1, False)
- else:
-
- infoDict = {ChConfig.Def_Cost_Reason_SonKey:buyType}
- needGold = eval(GetMoneyPrayCost())
- if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, ChConfig.Def_Cost_Pray, infoDict):
- GameWorld.DebugLog("仙玉不足!costGold=%s" % needGold)
- return
- if not isCostItem: #用物品不增加次数
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % buyType, curCnt + 1)
- else:
- curTime = int(time.time())
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FreePrayTime, curTime)
-
- preCnt, fixMoney = IpyGameDataPY.GetFuncEvalCfg("MoneyPray", 4)
- GameWorld.DebugLog('11111fixMoney=%s,historyCnt=%s,preCnt=%s' % (fixMoney, historyCnt, preCnt))
- if fixMoney and historyCnt < preCnt:
- addMoney = fixMoney
- #更新历史次数(特殊收益次数达到后不再更新)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HistoryPrayCnt % buyType, historyCnt + 1)
- else:
- addMoney = GetMoneyPrayAward()
- addDataDict = {ChConfig.Def_Give_Reason_SonKey:"MoneyPray"}
- #20190917 by hxp 祈愿金币改为绑玉
- giveMoneyType = IPY_GameWorld.TYPE_Price_Gold_Paper
- PlayerControl.GiveMoney(curPlayer, giveMoneyType, addMoney, ChConfig.Def_GiveMoney_Pray, addDataDict, False)
- PlayerControl.NotifyCode(curPlayer, 'MoneyPray_HowMuch', [addMoney, giveMoneyType])
- ItemControler.NotifyGiveAwardInfo(curPlayer, [], "Pray", moneyInfo={giveMoneyType:addMoney})
- PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_MoneyPray, 1)
- PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MoneyPray)
-
- #经验祈愿
- elif buyType == ChConfig.VIPPrivilege_ExpPray:
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- needItemID = IpyGameDataPY.GetFuncCfg('FreeExpPrayItem')
- hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, 1)
- if not hasEnough and totalCnt <= curCnt:
- GameWorld.DebugLog("经验祈愿次数已经用完,当前次数:%s,每日最大次数:%s" % (curCnt, totalCnt))
- return
- playerLV = curPlayer.GetLV()
- lvMsg = PlayerControl.GetPlayerLVIpyData(playerLV)
- if not lvMsg:
- GameWorld.DebugLog("玩家等级信息错误")
- return
- isCostItem = False #是否使用了物品
- if hasEnough:
- #优先用物品
- isCostItem = True
- ItemCommon.ReduceItem(curPlayer, itemPack, itemList, 1, False)
- else:
- infoDict = {ChConfig.Def_Cost_Reason_SonKey:buyType}
- needGold = eval(GetExpPrayCost())
- GameWorld.DebugLog("需要仙玉--needGold--%s" % needGold)
- if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, ChConfig.Def_Cost_Pray, infoDict):
- GameWorld.DebugLog("仙玉不足!costGold=%s" % needGold)
- return
-
- reExp = lvMsg.GetReExp()
- exp = PlayerControl.GetLVUPTotalExpNeed(lvMsg)
- addExp = eval(GetExpPrayAward())
- PlayerControl.PlayerControl(curPlayer).AddExp(addExp)
- PlayerControl.NotifyCode(curPlayer, 'ExpPray_HowMuch', [addExp])
- ItemControler.NotifyGiveAwardInfo(curPlayer, [], "Pray", exp=addExp)
- if not isCostItem: #用物品不增加次数
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % buyType, curCnt + 1)
- PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_ExpPray, 1)
- PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_ExpPray)
- else:
- return
- #成就
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Pray, 1, [buyType])
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_Pray, 1)
-
- # 每日活动
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Pray)
- PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Pray, 1)
- PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Pray, 1)
- PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_Pray, 1)
- PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pray, 1)
- PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Pray, 1)
- Sync_NotifyDataChange(curPlayer, [buyType])
- return
-
-#获取免费金币祈愿CD
-def __GetFreeCD(curPlayer):
- lastTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FreePrayTime)
- curTime = int(time.time())
- passTime = curTime - lastTime
- cdTime = IpyGameDataPY.GetFuncCfg("MoneyPray", 3)
- needTime = max(0, cdTime - passTime)
- return needTime
-
-## OnDay操作,通知客户端,购买次数变了
-# @param curPlayer: 玩家实例
-# @return None
-def PlayerOnDay(curPlayer):
- needSyncList = []
- for prayType in TotalPrayList:
- hasPrayCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HasPrayCnt % prayType)
- if not hasPrayCnt:
- continue
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % prayType, 0)
- needSyncList.append(prayType)
- Sync_NotifyDataChange(curPlayer, needSyncList)
- return
-
-
-## 通知客户端,购买次数变了
-# @param curPlayer: 玩家实例
-# @return None
-def Sync_NotifyDataChange(curPlayer, prayType=[]):
- if prayType == []:
- prayList = TotalPrayList
- else:
- prayList = prayType
- pack = ChPyNetSendPack.tagMCBuySomething()
- for buyType in prayList:
- subPack = ChPyNetSendPack.tagMCSingleBuySomethingInfo()
- subPack.Type = buyType
- subPack.BuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HasPrayCnt % buyType)
- subPack.HistoryBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_HistoryPrayCnt % buyType)
-
- if buyType == ChConfig.VIPPrivilege_MoneyPray:
- subPack.LastFreeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FreePrayTime)
- pack.Infos.append(subPack)
- GameWorld.DebugLog("通知祈愿次数--buyType:%s--BuyCnt:%s--LastFreeTime%s" % (subPack.Type, subPack.BuyCnt, subPack.LastFreeTime))
- pack.Cnt = len(pack.Infos)
- NetPackCommon.SendFakePack(curPlayer, pack)
-
-
-## 玩家登录时通知
-# @param curPlayer: 玩家实例
-# @return None
-def DoPlayerLogin(curPlayer):
- Sync_NotifyDataChange(curPlayer)
- return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py
index 79568c9..514a9a4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/FormulaControl.py
@@ -33,6 +33,10 @@
#===============================================================================
#---------------------------------------------------------------------
+import traceback
+import random
+import math
+
#---------------------------------------------------------------------
#公式字典名注册
#注册公式字典名方式 'Facl_DistKey_ + KeyName' (前缀名用于区别策划配置txt公式Key)
@@ -74,3 +78,71 @@
AllFormulaDist = {}
#GameWorld.Log('ClearCompileFormulaDist Sucess AllFormulaDist = %s'%(AllFormulaDist))
return
+
+def Eval(formulaKey, formula, paramDict, toInt=True, ceil=False, playerID=0):
+ """ 动态计算
+ :param formulaKey: 公式编译缓存key
+ :param formula: 公式字符串,如 "int(Atk*10 + MaxHP)"
+ :param paramDict: 参数字典,如 {'Atk': 100, 'MaxHP': 5000}
+ :param toInt: 是否转为整数
+ :param ceil: 是否向上取整
+ :return: 计算结果
+ """
+ compileFormula = GetCompileFormula(formulaKey, formula)
+
+ safe_env = {
+ '__builtins__': None,
+ # 基础数学函数
+ 'abs': abs,
+ 'min': min,
+ 'max': max,
+ 'pow': pow,
+ 'round': round,
+ # 类型转换
+ 'int': int,
+ 'float': float,
+ 'bool': bool,
+ # 数学常数
+ #'pi': math.pi,
+ #'e': math.e
+ }
+ safe_env.update(paramDict)
+ try:
+ # 执行计算
+ value = eval(compileFormula, safe_env)
+ if ceil:
+ value = math.ceil(value)
+ if toInt:
+ value = int(value)
+ return value
+ except:
+ import GameWorld
+ GameWorld.SendGameErrorEx("FormulaEvalError", "formulaKey:%s, %s, %s" % (formulaKey, paramDict, traceback.format_exc()), playerID)
+ return 0
+
+def test():
+ attrParamDict={
+ 'lineupHaloPer': 0, 'awakeTalentPer': 0, 'breakLVPer': 0, 'breakLVValue': 0, 'bookValue': 0, 'lineupStarAddPer': 0, 'lvValue': 0,
+ 'heroSelfValue': 0, 'awakeTalentValue': 0, 'fetterPer': 0, 'lineupBreakLVAddPer': 0,
+ 'starTalentValue': 30, 'inheritPer': 1, 'equipValue': 269, 'fetterValue': 0, 'lineupLVAddPer': 0, 'heroSelfPer': 0,
+ 'bookPer': 0, 'starTalentPer': 0, 'lineupHaloValue': 0, 'lineupInitAddPer': 0
+ }
+
+ formula = "(lvValue+equipValue+bookValue)*inheritPer+(heroSelfValue+lineupHaloValue+starTalentValue+breakLVValue+awakeTalentValue)+fetterValue"
+ formula = "(lvValue+equipValue+bookValue)*(1+lineupHaloPer+bookPer+lineupInitAddPer+lineupLVAddPer+lineupBreakLVAddPer+lineupStarAddPer)*(inheritPer+fetterPer+starTalentValue+breakLVValue+awakeTalentValue)+heroSelfValue"
+
+ import time
+ doCount = 1
+
+ time1 = time.time()
+ for _ in xrange(doCount):
+ value = Eval("aaa", formula, attrParamDict)
+ print "公式 计算结果: ", value
+ print "use time %s" % (time.time() - time1)
+ return
+
+## 使用示例
+#if __name__ == "__main__":
+# test()
+
+
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py
deleted file mode 100644
index 8d7d709..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.AddLegendAttr
-#
-# @todo:添加/重新生成传奇属性
-# @author hxp
-# @date 2017-08-23
-# @version 1.0
-#
-# 详细描述: 添加/重新生成传奇属性
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2017-08-23 23:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ItemCommon
-import ItemControler
-import IPY_GameWorld
-
-#---------------------------------------------------------------------
-#逻辑实现
-## GM命令执行入口
-# @param curPlayer 当前玩家
-# @param cmdList 参数列表 [index,attrIndexList]
-# @return None
-def OnExec(curPlayer, cmdList):
- cmdlen = len(cmdList)
- if cmdlen < 1:
- GameWorld.DebugAnswer(curPlayer, "重新随机传奇属性: AddLegendAttr 背包格子索引")
- GameWorld.DebugAnswer(curPlayer, "部位所有传奇属性: AddLegendAttr 背包格子索引 1")
- return
-
- #获取物品
- index = cmdList[0]
- curItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem).GetAt(index)
- if not ItemCommon.CheckItemIsEquip(curItem):
- GameWorld.DebugAnswer(curPlayer, "非装备无法获得传奇属性!")
- return
-
- isAllAttr = cmdList[1] if len(cmdList) > 1 else 0
- legendAttrInfo = ItemControler.GetAddEquipLegendAttr(curItem, curPlayer, isAllAttr)
- if not legendAttrInfo:
- GameWorld.DebugAnswer(curPlayer, "获取该装备传奇属性失败或没有传奇属性!")
- return
- ItemControler.SetEquipLegendAttr(curItem, legendAttrInfo)
-
- if legendAttrInfo[2]:
- GameWorld.DebugAnswer(curPlayer, "神传奇属性:%s %s" % (legendAttrInfo[2], legendAttrInfo[3]))
- if legendAttrInfo[4]:
- GameWorld.DebugAnswer(curPlayer, "仙传奇属性:%s %s" % (legendAttrInfo[4], legendAttrInfo[5]))
- if legendAttrInfo[6]:
- GameWorld.DebugAnswer(curPlayer, "极传奇属性:%s %s" % (legendAttrInfo[6], legendAttrInfo[7]))
- if legendAttrInfo[0]:
- GameWorld.DebugAnswer(curPlayer, "传奇属性:%s %s" % (legendAttrInfo[0], legendAttrInfo[1]))
-
- return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py
index 096f80d..7a9c3ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintExpRate.py
@@ -17,7 +17,6 @@
import GameWorld
import PlayerControl
-import PlayerWorldAverageLv
import ChConfig
import PlayerVip
@@ -30,7 +29,6 @@
def OnExec(curPlayer, cmdList):
GameWorld.DebugAnswer(curPlayer, "===== 总倍率: %s" % PlayerControl.GetPlayerExpRate(curPlayer))
GameWorld.DebugAnswer(curPlayer, "系统功能及Buff=%s" % curPlayer.GetFightExpRate())
- GameWorld.DebugAnswer(curPlayer, "世界等级加成=%s" % PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer))
GameWorld.DebugAnswer(curPlayer, "队伍加成=%s" % curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate))
GameWorld.DebugAnswer(curPlayer, "VIP加成=%s" % PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FightExpRate))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index 06009e9..2f512de 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -21,6 +21,74 @@
import ChNetSendPack
import TurnAttack
+# 通用属性值字典key
+Def_AttrValue = "AttrValue_%s"
+
+#战斗单位属性通用接口, 仅配置需要指定函数的属性ID即可,没有的话通过通用接口可直接 GetAttrValue, SetAttrValue
+#同个属性Get, Set 写在一起,方便维护 [Get, Set]
+ObjProperty_AttrIDDict = {
+ ChConfig.AttrID_Atk:[lambda curObj:curObj.GetMaxAtk(), lambda curObj, value:curObj.SetMaxAtk(value)],
+ ChConfig.AttrID_Def:[lambda curObj:curObj.GetDef(), lambda curObj, value:curObj.SetDef(value)],
+ ChConfig.AttrID_MaxHP:[lambda curObj:GetMaxHP(curObj), lambda curObj, value:SetMaxHP(curObj, value)],
+ ChConfig.AttrID_HP:[lambda curObj:GetHP(curObj), lambda curObj, value:SetHP(curObj, value)],
+ ChConfig.AttrID_AtkSpeed:[lambda curObj:GetAtkSpeed(curObj), lambda curObj, value:SetAtkSpeed(curObj, value)],
+ ChConfig.AttrID_XP:[lambda curObj:GetXP(curObj), lambda curObj, value:SetXP(curObj, value)],
+ ChConfig.AttrID_StunRate:[lambda curObj:GetFaintRate(curObj), lambda curObj, value:SetFaintRate(curObj, value)],
+ ChConfig.AttrID_StunRateDef:[lambda curObj:GetFaintDefRate(curObj), lambda curObj, value:SetFaintDefRate(curObj, value)],
+ ChConfig.AttrID_SuperHitRate:[lambda curObj:GetSuperHitRate(curObj), lambda curObj, value:SetSuperHitRate(curObj, value)],
+ ChConfig.AttrID_SuperHitRateDef:[lambda curObj:GetSuperHitRateReduce(curObj), lambda curObj, value:SetSuperHitRateReduce(curObj, value)],
+ ChConfig.AttrID_ComboRate:[lambda curObj:GetComboRate(curObj), lambda curObj, value:SetComboRate(curObj, value)],
+ ChConfig.AttrID_ComboRateDef:[lambda curObj:GetComboDefRate(curObj), lambda curObj, value:SetComboDefRate(curObj, value)],
+ ChConfig.AttrID_MissRate:[lambda curObj:GetMissRate(curObj), lambda curObj, value:SetMissRate(curObj, value)],
+ ChConfig.AttrID_MissRateDef:[lambda curObj:GetMissDefRate(curObj), lambda curObj, value:SetMissDefRate(curObj, value)],
+ ChConfig.AttrID_ParryRate:[lambda curObj:GetParryRate(curObj), lambda curObj, value:SetParryRate(curObj, value)],
+ ChConfig.AttrID_ParryRateDef:[lambda curObj:GetParryRateDef(curObj), lambda curObj, value:SetParryRateDef(curObj, value)],
+ ChConfig.AttrID_SuckHPPer:[lambda curObj:GetSuckHPPer(curObj), lambda curObj, value:SetSuckHPPer(curObj, value)],
+ ChConfig.AttrID_SuckHPPerDef:[lambda curObj:GetSuckHPDefPer(curObj), lambda curObj, value:SetSuckHPDefPer(curObj, value)],
+ ChConfig.AttrID_FinalDamPer:[lambda curObj:GetFinalHurtPer(curObj), lambda curObj, value:SetFinalHurtPer(curObj, value)],
+ ChConfig.AttrID_FinalDamPerDef:[lambda curObj:GetFinalHurtReducePer(curObj), lambda curObj, value:SetFinalHurtReducePer(curObj, value)],
+ ChConfig.AttrID_PhyDamPer:[lambda curObj:GetPhyDamPer(curObj), lambda curObj, value:SetPhyDamPer(curObj, value)],
+ ChConfig.AttrID_PhyDamPerDef:[lambda curObj:GetPhyDamPerDef(curObj), lambda curObj, value:SetPhyDamPerDef(curObj, value)],
+ ChConfig.AttrID_MagDamPer:[lambda curObj:GetMagDamPer(curObj), lambda curObj, value:SetMagDamPer(curObj, value)],
+ ChConfig.AttrID_MagDamPerDef:[lambda curObj:GetMagDamPerDef(curObj), lambda curObj, value:SetMagDamPerDef(curObj, value)],
+ ChConfig.AttrID_NormalSkillPer:[lambda curObj:GetNormalSkillPer(curObj), lambda curObj, value:SetNormalSkillPer(curObj, value)],
+ ChConfig.AttrID_NormalSkillPerDef:[lambda curObj:GetNormalSkillPerDef(curObj), lambda curObj, value:SetNormalSkillPerDef(curObj, value)],
+ ChConfig.AttrID_AngerSkillPer:[lambda curObj:GetAngerSkillPer(curObj), lambda curObj, value:SetAngerSkillPer(curObj, value)],
+ ChConfig.AttrID_AngerSkillPerDef:[lambda curObj:GetAngerSkillPerDef(curObj), lambda curObj, value:SetAngerSkillPerDef(curObj, value)],
+ ChConfig.AttrID_SuperDamPer:[lambda curObj:GetSuperHitHurtPer(curObj), lambda curObj, value:SetSuperHitHurtPer(curObj, value)],
+ ChConfig.AttrID_SuperDamPerDef:[lambda curObj:GetSuperHitHurtDefPer(curObj), lambda curObj, value:SetSuperHitHurtDefPer(curObj, value)],
+ ChConfig.AttrID_CurePer:[lambda curObj:GetCurePer(curObj), lambda curObj, value:SetCurePer(curObj, value)],
+ ChConfig.AttrID_CurePerDef:[lambda curObj:GetCureDefPer(curObj), lambda curObj, value:SetCureDefPer(curObj, value)],
+ ChConfig.AttrID_ShieldPer:[lambda curObj:GetShieldPer(curObj), lambda curObj, value:SetShieldPer(curObj, value)],
+ ChConfig.AttrID_ShieldPerDef:[lambda curObj:GetShieldPerDef(curObj), lambda curObj, value:SetShieldPerDef(curObj, value)],
+ ChConfig.AttrID_DOTPer:[lambda curObj:GetDOTPer(curObj), lambda curObj, value:SetDOTPer(curObj, value)],
+ ChConfig.AttrID_DOTPerDef:[lambda curObj:GetDOTPerDef(curObj), lambda curObj, value:SetDOTPerDef(curObj, value)],
+}
+
+def GetAttrValue(gameObj, attrID):
+ ## 通用的获取属性
+ if attrID in ObjProperty_AttrIDDict:
+ return ObjProperty_AttrIDDict[attrID][0](gameObj)
+ return gameObj.GetDictByKey(Def_AttrValue % attrID)
+
+def SetAttrValue(gameObj, attrID, value, isNotify=True):
+ ## 通用的设置属性
+ if attrID in ObjProperty_AttrIDDict:
+ ObjProperty_AttrIDDict[attrID][1](gameObj, value)
+ else:
+ gameObj.SetDict(Def_AttrValue % attrID, value)
+
+ if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ # 卡牌项目,暂不需要通知玩家相关的属性,因为最终都体现在卡牌上,全部由前端自己计算
+ return
+
+ if isNotify:
+ if attrID in ChConfig.CDBRefresh_AttrIDDict:
+ refreshType, isBig = ChConfig.CDBRefresh_AttrIDDict[attrID]
+ NotifyObjInfoRefresh(gameObj, refreshType, isBig)
+
+ return
+
# 关于血量的函数这里只包装最简单的超DWORD处理
def GetMaxHP(gameObj):
@@ -59,10 +127,10 @@
gameObj.SetBaseMaxHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue)
return
-def GetXP(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrXP)
+def GetXP(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_XP)
def SetXP(gameObj, value, isNotify=True):
## XP值,用作怒气值
- gameObj.SetDict(ChConfig.Def_PlayerKey_AttrXP, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_XP, value)
if isNotify:
NotifyObjInfoRefresh(gameObj, IPY_GameWorld.CDBPlayerRefresh_XP, value)
return
@@ -187,12 +255,8 @@
def GetBloodShiledHurt(gameObj):
## 伤害值用于血盾抵消
- hurt = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurt)
- hurtEx = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurtEx)
- return hurtEx * ShareDefine.Def_PerPointValue + hurt
+ return 0
def SetBloodShiledHurt(gameObj, value):
- gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, value % ShareDefine.Def_PerPointValue)
- gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurtEx, value / ShareDefine.Def_PerPointValue)
return
## ---------------------------------------------------------
@@ -224,27 +288,94 @@
SetSuperHitHurtDefPer(gameObj, 0)
return
-def GetPetDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
+def GetPetDamPer(gameObj): return 0
def SetPetDamPer(gameObj, value):
- gameObj.SetDict(ChConfig.Def_PlayerKey_AttrPetDamPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetDamPer, value)
return
-def GetFinalHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtPer)
+def GetFinalHurtPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_FinalDamPer)
def SetFinalHurtPer(gameObj, value):
## 最终伤害百分比
- gameObj.SetDict(ChConfig.Def_PlayerKey_FinalHurtPer, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_FinalDamPer, value)
if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FinalHurtPer, value)
+ PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FinalDamPer, value)
return
-def GetFinalHurtReducePer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtReducePer)
+def GetFinalHurtReducePer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_FinalDamPerDef)
def SetFinalHurtReducePer(gameObj, value):
## 最终伤害减免百分比
- gameObj.SetDict(ChConfig.Def_PlayerKey_FinalHurtReducePer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_FinalDamPerDef, value)
+ return
+
+def GetPhyDamPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_PhyDamPer)
+def SetPhyDamPer(gameObj, value):
+ ## 物理增伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_PhyDamPer, value)
+ return
+
+def GetPhyDamPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_PhyDamPerDef)
+def SetPhyDamPerDef(gameObj, value):
+ ## 物理减伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_PhyDamPerDef, value)
+ return
+
+def GetMagDamPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_MagDamPer)
+def SetMagDamPer(gameObj, value):
+ ## 法术增伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_MagDamPer, value)
+ return
+
+def GetMagDamPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_MagDamPerDef)
+def SetMagDamPerDef(gameObj, value):
+ ## 法术减伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_MagDamPerDef, value)
+ return
+
+def GetNormalSkillPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_NormalSkillPer)
+def SetNormalSkillPer(gameObj, value):
+ ## 普技增伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_NormalSkillPer, value)
+ return
+
+def GetNormalSkillPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_NormalSkillPerDef)
+def SetNormalSkillPerDef(gameObj, value):
+ ## 普技减伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_NormalSkillPerDef, value)
+ return
+
+def GetAngerSkillPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_AngerSkillPer)
+def SetAngerSkillPer(gameObj, value):
+ ## 怒技增伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_AngerSkillPer, value)
+ return
+
+def GetAngerSkillPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_AngerSkillPerDef)
+def SetAngerSkillPerDef(gameObj, value):
+ ## 怒技减伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_AngerSkillPerDef, value)
+ return
+
+def GetDOTPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_DOTPer)
+def SetDOTPer(gameObj, value):
+ ## 持续增伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_DOTPer, value)
+ return
+
+def GetDOTPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_DOTPerDef)
+def SetDOTPerDef(gameObj, value):
+ ## 持续减伤
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_DOTPerDef, value)
+ return
+
+def GetShieldPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ShieldPer)
+def SetShieldPer(gameObj, value):
+ ## 强化护盾
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ShieldPer, value)
+ return
+
+def GetShieldPerDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ShieldPerDef)
+def SetShieldPerDef(gameObj, value):
+ ## 弱化护盾
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ShieldPerDef, value)
return
def GetFaction(gameObj):
@@ -260,16 +391,9 @@
gameObj.SetFaction(value)
return
-def GetAtkSpeed(gameObj):
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- return gameObj.GetBattleValEx1()
- return gameObj.GetDictByKey(ChConfig.AttrName_AtkSpeed)
+def GetAtkSpeed(gameObj): return 0
def SetAtkSpeed(gameObj, value):
## 攻击速度
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- gameObj.SetBattleValEx1(value, True)
- else:
- gameObj.SetDict(ChConfig.AttrName_AtkSpeed, value)
return
def GetMissRate(gameObj): return gameObj.GetMiss()
@@ -287,167 +411,128 @@
## 暴击概率
gameObj.SetSuperHitRate(value)
return
-def GetSuperHitRateReduce(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitRateReduce)
+def GetSuperHitRateReduce(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuperHitRateDef)
def SetSuperHitRateReduce(gameObj, value):
## 抗暴击概率
- gameObj.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuperHitRateDef, value)
return
-def GetSuperHitReduce(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitReduce)
+def GetSuperHitReduce(gameObj): return 0
def SetSuperHitReduce(gameObj, value):
## 暴击固定伤害减免 - 暴击时附加固定伤害减免,与 atkObj.GetSuperHit() 相对
- gameObj.SetDict(ChConfig.Def_PlayerKey_SuperHitReduce, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitReduce, value)
return
-def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtPer)
+def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuperDamPer)
def SetSuperHitHurtPer(gameObj, value):
## 强化暴伤 - 暴击时的总伤害加成,与 SuperHitHurtDefPer 相对,注意与暴击固定伤害区分
- gameObj.SetDict(ChConfig.AttrName_SuperHitHurtPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuperDamPer, value)
return
-def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtDefPer)
+def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuperDamPerDef)
def SetSuperHitHurtDefPer(gameObj, value):
## 弱化暴伤 - 暴击时的总伤害减免
- gameObj.SetDict(ChConfig.AttrName_SuperHitHurtDefPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuperDamPerDef, value)
return
+def GetParryRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ParryRate)
+def SetParryRate(gameObj, value):
+ ## 格挡概率
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ParryRate, value)
+ return
-def GetFaintRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintRate)
+def GetParryRateDef(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ParryRateDef)
+def SetParryRateDef(gameObj, value):
+ ## 抗格挡概率
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ParryRateDef, value)
+ return
+
+def GetFaintRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_StunRate)
def SetFaintRate(gameObj, value):
## 击晕概率
- gameObj.SetDict(ChConfig.Def_PlayerKey_AttrFaintRate, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FaintRate, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_StunRate, value)
return
-def GetFaintDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintDefRate)
+def GetFaintDefRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_StunRateDef)
def SetFaintDefRate(gameObj, value):
## 抗击晕概率
- gameObj.SetDict(ChConfig.Def_PlayerKey_AttrFaintDefRate, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FaintDefRate, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_StunRateDef, value)
return
-def GetComboRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboRate)
+def GetComboRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ComboRate)
def SetComboRate(gameObj, value):
## 连击概率
- gameObj.SetDict(ChConfig.Def_PlayerKey_AttrComboRate, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboRate, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ComboRate, value)
return
-def GetComboDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_ComboDefRate)
+def GetComboDefRate(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_ComboRateDef)
def SetComboDefRate(gameObj, value):
## 抗连击概率
- gameObj.SetDict(ChConfig.AttrName_ComboDefRate, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboDefRate, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_ComboRateDef, value)
return
-def GetComboDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboDamPer)
+def GetComboDamPer(gameObj): return 0
def SetComboDamPer(gameObj, value):
## 连击伤害
- gameObj.SetDict(ChConfig.Def_PlayerKey_AttrComboDamPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboDamPer, value)
return
-def GetAtkBackRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackRate)
+def GetAtkBackRate(gameObj): return 0
def SetAtkBackRate(gameObj, value):
## 反击概率
- gameObj.SetDict(ChConfig.AttrName_AtkBackRate, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_AtkBackRate, value)
return
-def GetAtkBackDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackDefRate)
+def GetAtkBackDefRate(gameObj): return 0
def SetAtkBackDefRate(gameObj, value):
## 抗反击概率
- gameObj.SetDict(ChConfig.AttrName_AtkBackDefRate, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_AtkBackDefRate, value)
return
-def GetSuckHPPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuckHPPer)
+def GetSuckHPPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuckHPPer)
def SetSuckHPPer(gameObj, value):
## 吸血比率
- gameObj.SetDict(ChConfig.AttrName_SuckHPPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuckHPPer, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuckHPPer, value)
return
-def GetSuckHPDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuckHPDefPer)
+def GetSuckHPDefPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_SuckHPPerDef)
def SetSuckHPDefPer(gameObj, value):
## 抗吸血比率
- gameObj.SetDict(ChConfig.AttrName_SuckHPDefPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuckHPDefPer, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_SuckHPPerDef, value)
return
-def GetAtkBackHP(gameObj):
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- return gameObj.GetBattleValEx2()
- return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackHP)
+def GetAtkBackHP(gameObj): return 0
def SetAtkBackHP(gameObj, value):
## 吸血固定值
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- gameObj.SetBattleValEx2(value)
- else:
- gameObj.SetDict(ChConfig.AttrName_AtkBackHP, value)
return
-def GetCurePer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_CurePer)
+def GetCurePer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_CurePer)
def SetCurePer(gameObj, value):
## 强化治疗
- gameObj.SetDict(ChConfig.AttrName_CurePer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_CurePer, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_CurePer, value)
return
-def GetCureDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_CureDefPer)
+def GetCureDefPer(gameObj): return gameObj.GetDictByKey(Def_AttrValue % ChConfig.AttrID_CurePerDef)
def SetCureDefPer(gameObj, value):
## 弱化治疗
- gameObj.SetDict(ChConfig.AttrName_CureDefPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_CureDefPer, value)
+ gameObj.SetDict(Def_AttrValue % ChConfig.AttrID_CurePerDef, value)
return
-def GetPetStrengthenPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_PetStrengthenPer)
+def GetPetStrengthenPer(gameObj): return 0
def SetPetStrengthenPer(gameObj, value):
## 强化灵兽
- gameObj.SetDict(ChConfig.AttrName_PetStrengthenPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetStrengthenPer, value)
return
-def GetPetWeakenPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_PetWeakenPer)
+def GetPetWeakenPer(gameObj): return 0
def SetPetWeakenPer(gameObj, value):
## 弱化灵兽
- gameObj.SetDict(ChConfig.AttrName_PetWeakenPer, value)
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetWeakenPer, value)
return
-def GetDamageBackRate(gameObj):
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- return gameObj.GetDamageBackRate()
- return gameObj.GetDictByKey(ChConfig.AttrName_DamBackPer)
+def GetDamageBackRate(gameObj): 0
def SetDamageBackRate(gameObj, value):
## 反弹伤害
- if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- gameObj.SetDamageBackRate(value)
- else:
- gameObj.SetDict(ChConfig.AttrName_DamBackPer, value)
return
-def NotifyObjInfoRefresh(gameObj, refreshType, value):
+def NotifyObjInfoRefresh(gameObj, refreshType, value, isBig=False):
##0418通知对象属性刷新
sendPack = ChNetSendPack.tagObjInfoRefresh()
sendPack.Clear()
sendPack.ObjID = gameObj.GetID()
sendPack.ObjType = gameObj.GetGameObjType()
sendPack.RefreshType = refreshType
- sendPack.Value = value % ShareDefine.Def_PerPointValue
- sendPack.ValueEx = value / ShareDefine.Def_PerPointValue
+ if isBig:
+ sendPack.Value = value % ShareDefine.Def_PerPointValue
+ sendPack.ValueEx = value / ShareDefine.Def_PerPointValue
+ else:
+ sendPack.Value = value
+ sendPack.ValueEx = 0
turnFight = TurnAttack.GetTurnFightMgr().getNPCTurnFight(gameObj.GetID())
if turnFight:
turnFight.addBatPack(sendPack)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py
deleted file mode 100644
index 67b528e..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py
+++ /dev/null
@@ -1,811 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GameWorldLogic.FBProcess.GameLogic_IceLode
-#
-# @todo:冰晶矿脉
-# @author xdh
-# @date 2017-9-14
-# @version 1.0
-#
-# 详细描述: 冰晶矿脉
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2017-09-14 15:30"""
-#-------------------------------------------------------------------------------
-
-import FBCommon
-import GameWorld
-import IPY_GameWorld
-import NPCCustomRefresh
-import GameWorldProcess
-import PlayerControl
-import ShareDefine
-import IpyGameDataPY
-import PyGameData
-import ChConfig
-import PlayerActivity
-import ItemCommon
-import ItemControler
-import EventReport
-import ChPyNetSendPack
-import NetPackCommon
-import PlayerSuccess
-import PlayerWeekParty
-import PlayerActLogin
-import BuffSkill
-
-import random
-import datetime
-import time
-import math
-
-#---副本配置对应key值---
-(
-Def_PrepareTime, # 副本准备时间(秒)
-Def_FightTime, # 进行时间(秒)
-Def_PickTime, # 拾取时间(秒)(包含退出时间)
-Def_LeaveTime, # 退出时间(秒)
-Def_StarTime, #星级时间
-) = range(5)
-
-
-#---副本分线配置索引信息---
-(
-Def_RefreshMark, # 刷怪标识点
-DL_NPCID, # NPCID
-DL_TotalNPCCnt, # 累计刷NPC总个数
-DL_ScreenMaxNPC, # 同时存在NPC数
-) = range(4)
-
-
-#当前副本地图的状态
-(
-FB_Step_Open, # 副本开启
-FB_Step_Prepare, # 副本等待
-FB_Step_Fighting, # 副本进行中
-FB_Step_PickItem, # 拾取物品中
-FB_Step_Over, # 副本结束
-FB_Step_Close, # 副本关闭
-) = range(6)
-
-
-FBPlayerDict_RemainNPCCnt = 'FBPlayerDict_RemainNPCCnt' # 剩余怪数量
-FBPlayerDict_TotalPoint = 'FBPlayerDict_TotalPoint' # 获得的总怒气值
-FBPlayerDict_CostTime = 'FBPlayerDict_CostTime' #通关时间
-FBPlayerDict_TotalExp = 'FBPlayerDict_TotalExp' # 获得的总经验
-FBPlayerDict_TotalExpPoint = 'FBPlayerDict_TotalExpPoint' # 获得的总经验点
-FBPlayerDict_FBStar = 'FBPlayerDict_FBStar' # 当前星级
-
-
-
-##---获得副本分线配置---
-# @param None
-# @return 配置信息
-def GetIceLodeNPCCfg():
- lineID = FBCommon.GetFBPropertyMark()
- return FBCommon.GetFBLineRefreshNPC(GameWorld.GetMap().GetMapID(), lineID)
-
-def GetPointByNPCID(npcid):
- '''通过NPCID获取对应的积分'''
- npcPointDict = IpyGameDataPY.GetFuncEvalCfg('IceLodeNeedPoint', 2, {})
-
- return npcPointDict.get(npcid, 0)
-
-
-## OnDay处理
-# @param curPlayer
-# @return None
-def OnFBPlayerOnDay(curPlayer):
- if curPlayer.GetMapID() == ChConfig.Def_FBMapID_IceLode:
- #玩家还在副本中,等这次副本结束,以最新的总星级给发奖励
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeIsInFBOnDay, 1)
- return
-
- #补发奖励
- CheckIceLodeStarAwardMail(curPlayer)
- return
-
-def OnFBPlayerOnLogin(curPlayer):
- isInFBOnDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeIsInFBOnDay)
- if isInFBOnDay and curPlayer.GetMapID() != ChConfig.Def_FBMapID_IceLode: #在副本里过天,副本结束后再补发奖励
- if CheckIceLodeStarAwardMail(curPlayer):
- return
- starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
- if not lineList:
- __RandomLine(curPlayer, lineList)
- SyncIceLoddInfo(curPlayer)
- return
-
-def __RandomLine(curPlayer, oldlineList):
- # 随机今日玩法
- maxCnt, randomCnt = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 2)
- lineList = range(maxCnt)
- newlineList = list(set(lineList) - set(oldlineList))
- if len(newlineList) < randomCnt:
- random.shuffle(oldlineList)
- newlineList += oldlineList[:randomCnt-len(newlineList)]
- else:
- random.shuffle(newlineList)
- newlineList = newlineList[:randomCnt]
- #random.shuffle(lineList)
- for lineID in lineList:
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IceLoadLineID, lineID, 1 if lineID in newlineList else 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeDayLV, curPlayer.GetLV())
- GameWorld.DebugLog(' 随机冰晶矿脉今日玩法 oldlineList=%s, newlineList =%s'%(oldlineList, newlineList), curPlayer.GetID())
- return
-
-## 是否能够通过活动查询进入
-# @param curPlayer 玩家实例
-# @param mapID 地图ID
-# @param lineID 线路id
-# @param tick 时间戳
-# @return 布尔值
-def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
- starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
- if lineID not in lineList:
- GameWorld.DebugLog('冰晶矿脉今日没有该线路 lineID=%s,lineList=%s'%(lineID, lineList))
- return False
- return True
-
-
-
-##副本玩家进入点
-# @param curPlayer 玩家实例
-# @param mapID 地图ID
-# @param lineId 分线ID
-# @param ipyEnterPosInfo 功能线路IPY配置坐标信息
-# @param tick 时间戳
-# @return posX, posY, 随机半径(可选)
-def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick):
- return ipyEnterPosInfo
-
-
-##查询是否可以进入地图
-# @param ask:请求结构体(IPY_BMChangeMapAsk)
-# @param tick:时间戳
-# @return IPY_GameWorld.cme 枚举
-def OnChangeMapAsk(ask, tick):
- return IPY_GameWorld.cmeAccept
-
-
-## 进副本
-# @param curPlayer
-# @param tick
-# @return None
-def DoEnterFB(curPlayer, tick):
- PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default * 2)
- playerID = curPlayer.GetPlayerID()
- mapID = GameWorld.GetGameWorld().GetMapID()
- gameFB = GameWorld.GetGameFB()
- lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine)
- GameWorld.DebugLog("DoEnterFB...lineID=%s"%lineID, playerID)
- hadDelTicket = FBCommon.GetHadDelTicket(curPlayer)
- if not hadDelTicket:
- PyGameData.g_fbPickUpItemDict.pop(playerID, 0)
- GameWorld.DebugLog("DoEnterFB 扣除入场券,重置信息!")
- delResult = FBCommon.DelFBEnterTicket(curPlayer, mapID)
- isOK = delResult[0]
- #hasBind = delResult[1]
- if not isOK:
- PlayerControl.PlayerLeaveFB(curPlayer)
- return
- #星级为0则免费,否则收钱
- curStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
- if curStar:
- costGold = IpyGameDataPY.GetFuncCfg('IceLodeCfg')
- if costGold:
- costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costGold)
- if not costMoneyList:
- GameWorld.Log('钱不够 lineID=%s,costGold=%s'%(lineID, costGold))
- PlayerControl.PlayerLeaveFB(curPlayer)
- return
- for moneyType, moneyNum in costMoneyList:
- PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_BuyFBCnt, {"MapID":mapID, 'lineID':lineID})
-
- FBCommon.SetFBPropertyMark(lineID)
- FBCommon.SetHadDelTicket(curPlayer)
- FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_IceLode)
- FBCommon.SetFBStep(FB_Step_Prepare, tick)
- EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_IceLode, 0, ChConfig.CME_Log_Start)
-
- fbStep = gameFB.GetFBStep()
- if fbStep <= FB_Step_Prepare:
- mapID = GameWorld.GetMap().GetMapID()
- notify_tick = FBCommon.GetFBLineStepTime(mapID)[Def_PrepareTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
- curPlayer.Sync_TimeTick(IPY_GameWorld.tttAddUpTime, 0, max(notify_tick, 0), True)
- curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
-
- elif fbStep == FB_Step_Fighting:
- mapID = GameWorld.GetMap().GetMapID()
- notify_tick = FBCommon.GetFBLineStepTime(mapID)[Def_FightTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
- curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, max(notify_tick, 0), True)
- __UpdIceLoadFBStar(tick, True, curPlayer)
- DoFBHelp(curPlayer, tick)
- return
-
-##玩家退出副本
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def DoExitFB(curPlayer, tick):
- PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
- return
-
-##玩家主动离开副本.
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-def DoPlayerLeaveFB(curPlayer, tick):
- PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
- return
-
-##玩家切换地图
-def DoPlayerChangeMapLogic(curPlayer):
- tick = GameWorld.GetGameWorld().GetTick()
- for buffID in IpyGameDataPY.GetFuncEvalCfg('IceLodeSpecial', 2):
- BuffSkill.DelBuffBySkillID(curPlayer, buffID, tick)
- return
-
-def OnPickUpItem(curPlayer, curItem, tick):
- return
- mapItemType = curItem.GetType()
- if mapItemType == ChConfig.Def_ItemType_Money:
- return
- playerID = curPlayer.GetID()
- isEquip = ItemCommon.CheckItemIsEquip(curItem)
- jsonItem = ItemCommon.GetJsonItem(curItem)
- if playerID in PyGameData.g_fbPickUpItemDict:
- if isEquip:
- PyGameData.g_fbPickUpItemDict[playerID].append(jsonItem)
- else:
- for itemInfo in PyGameData.g_fbPickUpItemDict[playerID]:
- if itemInfo["ItemID"] == jsonItem["ItemID"] and itemInfo.get("IsBind") == jsonItem.get("IsBind"):
- itemInfo["Count"] = itemInfo.get("Count", 1)+ jsonItem.get("Count", 1)
- else:
- PyGameData.g_fbPickUpItemDict[playerID] = [jsonItem]
-
- isItemAllPickUp = (GameWorld.GetMapItemManager().GetMapItemCount() <= 1)
- if isItemAllPickUp and GameWorld.GetGameFB().GetFBStep() == FB_Step_PickItem:
- __DoIceLodeOver(True)
-
-
- #GameWorld.Log('PyGameData.g_fbPickUpItemDict=%s'%PyGameData.g_fbPickUpItemDict)
- return
-
-
-## 获得副本帮助信息
-# @param curPlayer 当前玩家(被通知对象)
-# @param tick 当前时间
-# @return None
-def DoFBHelp(curPlayer, tick):
- gameFB = GameWorld.GetGameFB()
-
- # 获得副本信息
- star = gameFB.GetGameFBDictByKey(FBPlayerDict_FBStar)
- lineID = FBCommon.GetFBPropertyMark()
- #副本帮助
- helpDict = {FBCommon.Help_grade:star, FBCommon.Help_lineID:lineID}
- GameWorld.DebugLog("DoFBHelp %s" % str(helpDict))
- FBCommon.Notify_FBHelp(curPlayer, helpDict)
- return
-
-
-##---副本总逻辑计时器---
-# @param tick:时间戳
-# @return 无意义
-# @remarks 副本总逻辑计时器
-def OnProcess(tick):
- fbStep = GameWorld.GetGameFB().GetFBStep()
-
- # 副本准备
- if fbStep == FB_Step_Prepare:
- __DoLogic_FB_Prepare(tick)
- # 副本进行中
- elif fbStep == FB_Step_Fighting:
- __DoLogic_FB_Fighting(tick)
- __UpdIceLoadFBStar(tick)
- # 副本拾取中
- elif fbStep == FB_Step_PickItem:
- __DoLogic_FB_PickItem(tick)
- # 副本结束
- elif fbStep == FB_Step_Over:
- __DoLogic_FB_Over(tick)
-
- return
-
-
-## 更新当前副本星级
-def __UpdIceLoadFBStar(tick, isEnter=False, curPlayer=None):
- gameFB = GameWorld.GetGameFB()
- curStar = gameFB.GetGameFBDictByKey(FBPlayerDict_FBStar)
- if curStar == 1:
- return curStar
-
- mapID = GameWorld.GetMap().GetMapID()
- useSecond = int(math.ceil((tick - gameFB.GetFBStepTick()) / 1000.0))
- icelodeTimeCfg = FBCommon.GetFBLineStepTime(mapID)
- starTimeList = icelodeTimeCfg[Def_StarTime]
- diffSecond = 0
- updStar = 1 # 默认至少1星
- for star, starTime in enumerate(starTimeList, 2):
- if useSecond <= starTime:
- updStar = star
- diffSecond = starTime-useSecond
-
- if curStar == updStar and not isEnter:
- return curStar
-
- gameFB.SetGameFBDict(FBPlayerDict_FBStar, updStar)
-
- GameWorld.DebugLog("__UpdFBStar useSecond=%s,curStar=%s,updStar=%s, diffSecond=%s"
- % (useSecond, curStar, updStar, diffSecond))
-
- if curPlayer:
- DoFBHelp(curPlayer, tick)
- if updStar != 1:
- curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, diffSecond * 1000, True)
- else:
- playerManager = GameWorld.GetMapCopyPlayerManager()
- for index in xrange(playerManager.GetPlayerCount()):
- curPlayer = playerManager.GetPlayerByIndex(index)
- if not curPlayer:
- continue
- DoFBHelp(curPlayer, tick)
- if updStar != 1:
- curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, diffSecond * 1000, True)
-
-
- return updStar
-
-## 副本准备逻辑
-# @param tick:时间戳
-# @return 无意义
-def __DoLogic_FB_Prepare(tick):
- gameFB = GameWorld.GetGameFB()
- mapID = GameWorld.GetMap().GetMapID()
- stepTimeCfg = FBCommon.GetFBLineStepTime(mapID)
- # 间隔未到
- if tick - gameFB.GetFBStepTick() < stepTimeCfg[Def_PrepareTime] * 1000:
- return
-
- # 设置开始刷怪
- npcCnt = 0
- npcCfg = GetIceLodeNPCCfg()
- for npcInfo in npcCfg:
- npcid = npcInfo[DL_NPCID]
- maxCnt = npcInfo[DL_ScreenMaxNPC]
- totalMaxCnt = npcInfo[DL_TotalNPCCnt]
- NPCCustomRefresh.SetNPCRefresh(npcInfo[Def_RefreshMark], [npcid], maxCnt, totalMaxCnt)
- npcCnt += totalMaxCnt
- NPCCustomRefresh.ProcessAllNPCRefresh(tick) # 立即出发一次标识点刷新
- gameFB.SetGameFBDict(FBPlayerDict_RemainNPCCnt, npcCnt)
- GameWorld.DebugLog('设置开始刷怪 remainNPCCnt=%s'%npcCnt)
- # 副本开始
- FBCommon.SetFBStep(FB_Step_Fighting, tick)
- FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, stepTimeCfg[Def_FightTime] * 1000)
- return
-
-
-## 副本进行中
-# @param tick:时间戳
-# @return 无意义
-def __DoLogic_FB_Fighting(tick):
- # 间隔未到
- mapID = GameWorld.GetMap().GetMapID()
- if tick - GameWorld.GetGameFB().GetFBStepTick() < FBCommon.GetFBLineStepTime(mapID)[Def_FightTime] * 1000:
- return
-
- __DoIceLodeOver(False)
- return
-
-## 副本拾取
-# @param tick:时间戳
-# @return 无意义
-def __DoLogic_FB_PickItem(tick):
- # 间隔未到
- mapID = GameWorld.GetMap().GetMapID()
- if tick - GameWorld.GetGameFB().GetFBStepTick() < FBCommon.GetFBLineStepTime(mapID)[Def_PickTime] * 1000:
- return
-
- #副本关闭
- GameWorldProcess.CloseFB(tick)
- FBCommon.SetFBStep(FB_Step_Close, tick)
- return
-
-
-##副本关闭中
-# @param tick:时间戳
-# @return 无意义
-# @remarks 副本关闭中
-def __DoLogic_FB_Over(tick):
-
- # 间隔未到
- mapID = GameWorld.GetMap().GetMapID()
- if tick - GameWorld.GetGameFB().GetFBStepTick() < FBCommon.GetFBLineStepTime(mapID)[Def_LeaveTime] * 1000:
- return
-
- #副本关闭
- GameWorldProcess.CloseFB(tick)
- FBCommon.SetFBStep(FB_Step_Close, tick)
- return
-
-## 获得经验
-# @param curPlayer 当前玩家
-# @param addExp 获得的经验
-# @param expViewType 经验类型
-# @return True or False
-def OnGetExp(curPlayer, addExp, expViewType):
-
- if expViewType != ShareDefine.Def_ViewExpType_KillNPC:
- return
-
- playerID = curPlayer.GetID()
- gameFB = GameWorld.GetGameFB()
- exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp)
- expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint)
- totalExp = expPoint * ChConfig.Def_PerPointValue + exp
- updTotalExp = totalExp + addExp
- updExp = updTotalExp % ChConfig.Def_PerPointValue
- updExpPoint = updTotalExp / ChConfig.Def_PerPointValue
- gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_TotalExp, updExp)
- gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_TotalExpPoint, updExpPoint)
-
-
- GameWorld.DebugLog("OnGetExp() totalExp=%s,addExp=%s,updTotalExp=%s"
- % (totalExp, addExp, updTotalExp), playerID)
-
- return
-
-## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定
-# @param attacker 攻击方
-# @param defender 防守方
-# @return bool
-def CheckCanAttackTagObjInFB(attacker, defender):
- gameFB = GameWorld.GetGameFB()
- if gameFB.GetFBStep() != FB_Step_Fighting:
- return False
- return True
-
-def __OnKillNPC(curNPC, tick):
- gameFB = GameWorld.GetGameFB()
- npcid = curNPC.GetNPCID()
- npcCfg = GetIceLodeNPCCfg()
- isfbnpc = False
- for npcInfo in npcCfg:
- if npcid == npcInfo[DL_NPCID]:
- isfbnpc = True
- break
- if not isfbnpc:
- return
-
- remainNPCCnt = max(0, gameFB.GetGameFBDictByKey(FBPlayerDict_RemainNPCCnt) - 1)
- gameFB.SetGameFBDict(FBPlayerDict_RemainNPCCnt, remainNPCCnt)
- GameWorld.DebugLog('__OnKillNPC remainNPCCnt=%s'%remainNPCCnt)
- if remainNPCCnt <=0 or npcid in IpyGameDataPY.GetFuncEvalCfg('IceLodeSpecial'):
- __DoIceLodeOver(True)
- return
-
-def DoFB_NPCDead(curNPC):
- __OnKillNPC(curNPC, GameWorld.GetGameWorld().GetTick())
- return
-
-#def DoFB_Npc_KillNPC(attacker, curNPC, tick):
-# GameWorld.Log('__OnKillNPC 1111111111')
-# __OnKillNPC(attacker, curNPC, tick)
-# return
-
-## 执行副本杀怪逻辑
-# @param curPlayer 杀怪的人
-# @param curNPC 被杀的怪
-# @param tick 当前时间
-# @return None
-#def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
-# GameWorld.Log('__OnKillNPC 2222222222')
-# __OnKillNPC(curPlayer, curNPC, tick)
-#
-
-# addPoint = GetPointByNPCID(npcid)
-# if not addPoint:
-# return
-# totalPoint = gameFB.GetGameFBDictByKey(FBPlayerDict_TotalPoint)
-# maxPoint = IpyGameDataPY.GetFuncCfg('IceLodeNeedPoint')
-# updPoint = min(totalPoint + addPoint, maxPoint)
-# gameFB.SetGameFBDict(FBPlayerDict_TotalPoint, updPoint)
-#
-# if updPoint >= maxPoint:
-# costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
-# gameFB.SetGameFBDict(FBPlayerDict_CostTime, costTime)
-# FBCommon.SetFBStep(FB_Step_PickItem, tick)
-# mapID = GameWorld.GetMap().GetMapID()
-# curPlayer.Sync_TimeTick(ChConfig.tttPickupItem, 0, FBCommon.GetFBLineStepTime(mapID)[Def_PickTime] * 1000, True)
-#
-# FBCommon.ClearFBNPC()
-# npcCfg = GetIceLodeNPCCfg()
-# for npcInfo in npcCfg:
-# NPCCustomRefresh.CloseNPCRefresh(npcInfo[Def_RefreshMark], tick)
-#
-# #__DoIceLodeOver(True)
-
- #DoFBHelp(curPlayer, tick)
- return
-
-## 是否副本复活
-# @param None
-# @return 是否副本复活
-def OnPlayerReborn():
- return True
-
-## 副本结束处理
-def __DoIceLodeOver(isPass):
- gameFB = GameWorld.GetGameFB()
- if gameFB.GetFBStep() == FB_Step_Over:
- return
- tick = GameWorld.GetGameWorld().GetTick()
- curPlayer = None
- playerManager = GameWorld.GetMapCopyPlayerManager()
- if playerManager.GetPlayerCount() > 0:
- curPlayer = playerManager.GetPlayerByIndex(0)
-
- if not curPlayer:
- GameWorldProcess.CloseFB(tick)
- return
-
- __UpdIceLoadFBStar(tick) # 结算前更新一次星级
- playerID = curPlayer.GetPlayerID()
- lineID = FBCommon.GetFBPropertyMark()
- star = GameWorld.GetGameFB().GetGameFBDictByKey(FBPlayerDict_FBStar)
- mapID = ChConfig.Def_FBMapID_IceLode
- isInFBOnDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeIsInFBOnDay)
- #更新星级
- lastStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
- if isPass and star > lastStar:
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, star, False, [mapID])
- FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID) # 同步信息
- if not lastStar and not isInFBOnDay: #每日活动
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_IceLode)
- PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_IceLode, 1)
- PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_IceLode, 1)
-
- if isInFBOnDay: #在副本里过天,副本结束后再补发星级奖励
- CheckIceLodeStarAwardMail(curPlayer)
-# exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp)
-# expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint)
-# totalExp = expPoint * ChConfig.Def_PerPointValue + exp
-
- costTime = gameFB.GetGameFBDictByKey(FBPlayerDict_CostTime)
- if not costTime:
- costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
- #jsonItemList = PyGameData.g_fbPickUpItemDict.get(playerID, [])
- overDict = {FBCommon.Over_isPass:int(isPass), FBCommon.Over_costTime:costTime}
- if isPass:
- itemList = FBCommon.GetFBLineReward(mapID, lineID)
- # 给物品
- needSpace = len(itemList)
- packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
- if needSpace > packSpace:
- PlayerControl.SendMailByKey('', [curPlayer.GetID()], itemList)
- else:
- for itemID, itemCount, isBind in itemList:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
-
- jsonItemList = FBCommon.GetJsonItemList(itemList)
- overDict[FBCommon.Over_itemInfo] = jsonItemList
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_IceLode, 1)
-
- # 通知结果
- __SendIceLodeOverInfo(curPlayer, overDict)
-
- # 进入离开阶段
- FBCommon.SetFBStep(FB_Step_Over, tick)
- FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttLeaveMap, FBCommon.GetFBLineStepTime(mapID)[Def_LeaveTime] * 1000)
-
- # 清怪,关闭刷怪
-# FBCommon.ClearFBNPC()
-# npcCfg = GetIceLodeNPCCfg()
-# for npcInfo in npcCfg:
-# NPCCustomRefresh.CloseNPCRefresh(npcInfo[Def_RefreshMark], tick)
-
- return
-
-## 发送挑战结果信息,扫荡结果通用
-def __SendIceLodeOverInfo(curPlayer, overDict):
- overDict[FBCommon.Over_dataMapID] = ChConfig.Def_FBMapID_IceLode
- GameWorld.DebugLog("__SendIceLodeOverInfo overDict=%s" % (str(overDict)), curPlayer.GetPlayerID())
-
- FBCommon.Notify_FB_Over(curPlayer, overDict)
- return
-
-
-## 副本行为
-# @param curPlayer 玩家
-# @param actionType 行为类型
-# @param actionInfo 行为信息
-# @param tick 当前时间
-# @return None
-def DoFBAction(curPlayer, actionType, actionInfo, tick):
-
- return
-
-## 可否扫荡
-def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx):
- if curPlayer.GetMapID() == ChConfig.Def_FBMapID_IceLode:
- GameWorld.DebugLog('冰晶矿脉扫荡 副本里不能扫荡 ')
- return
- #战力判断
- LVIpyData = PlayerControl.GetPlayerLVIpyData(curPlayer.GetLV())
- reFightPower = 0 if not LVIpyData else LVIpyData.GetIceLodeFightPower() # 当前等级参考战力
- if PlayerControl.GetFightPower(curPlayer) < reFightPower:
- GameWorld.DebugLog('冰晶矿脉扫荡 战力不足 %s'%(reFightPower))
- return
- #vip判断
- if curPlayer.GetVIPLv() < IpyGameDataPY.GetFuncCfg('IceLodeCfg', 5):
- GameWorld.DebugLog('冰晶矿脉扫荡 vip不足 ')
- return
-
- #钱
- if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeHasSweep):
- costMoney = IpyGameDataPY.GetFuncCfg('IceLodeCfg', 3)
- else:
- costMoney = 0
- if costMoney:
- costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
- if not costMoneyList:
- return
- for moneyType, moneyNum in costMoneyList:
- if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_FBSweep):
- GameWorld.DebugLog("冰晶矿脉扫荡仙玉不足!costGold=%s" % (costMoney))
- return
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeHasSweep, 1)
-
- SyncIceLoddInfo(curPlayer)
- return True
-
-## 扫荡结果
-def OnPlayerFBSweepResult(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx):
- itemList = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 4)
- jsonItemList = FBCommon.GetJsonItemList(itemList)
- needSpace = len(itemList)
- if needSpace > ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace):
- PlayerControl.SendMailByKey(0, [curPlayer.GetID()], itemList)
- else:
- for itemID, itemCnt, isBind in itemList:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
- #直接将5条线星级改为3星
- addCnt = 0
- starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
- for lineid in lineList:
- curStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineid, False, [mapID])
- if curStar == 0:
- addCnt += 1
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineid, 3, False, [mapID])
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_IceLode, addCnt)
- PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_IceLode, addCnt)
- PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_IceLode, addCnt)
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_IceLode, len(lineList))
- FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID) # 同步信息
-# npcCountDict = {}
-# iceLodeSweepDict = IpyGameDataPY.GetFuncEvalCfg('IceLodeSweep')
-# for npcID, count in iceLodeSweepDict.items():
-# npcCountDict[npcID] = count * sweepCnt
-#
-# exp_rate = PlayerControl.GetLimitExpRate(curPlayer, ChConfig.ExpRateLimitType_Sweep)
-# jsonItemList, totalExp, totalMoney = NPCCommon.GiveKillNPCDropPrize(curPlayer, mapID, npcCountDict, exp_rate)
- GameWorld.DebugLog("扫荡奖励: 次数=%s,jsonItemList=%s" % (sweepCnt, jsonItemList))
- overDict = {FBCommon.Over_isPass:1, FBCommon.Over_isSweep:1, FBCommon.Over_itemInfo:jsonItemList}
- __SendIceLodeOverInfo(curPlayer, overDict)
- for _ in xrange(sweepCnt):
- EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_IceLode, 0, ChConfig.CME_Log_Start)
- return True
-
-
-def GetIceLodeStarAward(curPlayer, starIndex):
- ## 领取冰晶矿脉星级奖励
- ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('IceLodeStarAward', {'Index':starIndex}, True)
- if not ipyDataList:
- return
- playerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeDayLV)
- #playerLV = curPlayer.GetLV()
- awardList = []
- needStar = 0
- for ipyData in ipyDataList:
- lvLimit = ipyData.GetLVLimit()
- if lvLimit[0]<=playerLV <=lvLimit[1]:
- awardList = ipyData.GetItemList()
- needStar = ipyData.GetStar()
- break
- if not awardList:
- GameWorld.Log(' 领取冰晶矿脉星级奖励,没找到奖励 starIndex=%s,playerLV=%s'%(starIndex,playerLV), curPlayer.GetID())
- return
- awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeStarAwardRecord)
- if awardRecord & pow(2, starIndex):
- GameWorld.DebugLog('领取冰晶矿脉星级奖励, 奖励已领取 starIndex=%s'%starIndex)
- return
-
- starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
- if starCnt < needStar:
- GameWorld.DebugLog('领取冰晶矿脉星级奖励, 总星数不足starIndex=%s starCnt=%s,needStar=%s'%(starIndex,starCnt,needStar))
- return
-
- # 检查背包
- needSpace = len(awardList)
- packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
- if needSpace > packSpace:
- PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
- return
-
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeStarAwardRecord, awardRecord|pow(2, starIndex))
-
- for itemID, itemCount, isBind in awardList:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
- #通知
- SyncIceLoddInfo(curPlayer)
- return
-
-def GetIceLodeAllStarCnt(curPlayer):
- ##获取当前总星数
- maxCnt, randomCnt = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 2)
- starCnt = 0
- lineList = []
- for i in xrange(maxCnt):
- if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IceLoadLineID, i):
- starCnt += GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, i, False, [ChConfig.Def_FBMapID_IceLode])
- lineList.append(i)
- if lineList and len(lineList) != randomCnt:
- GameWorld.ErrLog(' 冰晶矿脉获取当前总星数,当前线路数量异常!lineList=%s'%lineList)
- return starCnt, lineList[:randomCnt]
-
-def CheckIceLodeStarAwardMail(curPlayer):
- #邮件补发未领取星级奖励
- serverTime = GameWorld.GetCurrentTime()
- curDateTimeStr = "%d-%d-%d 00:00:00" % (serverTime.year, serverTime.month, serverTime.day)
- curDateTime = datetime.datetime.strptime(curDateTimeStr, ChConfig.TYPE_Time_Format)
- curDateTime = int(time.mktime(curDateTime.timetuple()))
- lastCheckTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeLastCheckTime)
- if lastCheckTime and lastCheckTime == curDateTime:
- return
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeLastCheckTime, curDateTime)
-
- itemList = []
- mailStarList = []
- awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeStarAwardRecord)
- playerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeDayLV)
- starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
- ipyMgr = IpyGameDataPY.IPY_Data()
- newRecord = awardRecord
- for i in xrange(ipyMgr.GetIceLodeStarAwardCount()):
- ipyData = ipyMgr.GetIceLodeStarAwardByIndex(i)
- starIndex = ipyData.GetIndex()
- lvLimit = ipyData.GetLVLimit()
- if lvLimit[0]<=playerLV <=lvLimit[1]:
- if starCnt >= ipyData.GetStar() and not awardRecord & pow(2, starIndex):
- itemList += ipyData.GetItemList()
- newRecord |= pow(2, starIndex)
- mailStarList.append(starIndex)
- if itemList:
- PlayerControl.SendMailByKey('IceLodeStarReward', [curPlayer.GetID()], itemList, detail=mailStarList)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeIsInFBOnDay, 0)
- maxCnt, randomCnt = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 2)
- for i in xrange(maxCnt):
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, i, 0, False, [ChConfig.Def_FBMapID_IceLode])
- FBCommon.Sync_FBPlayerFBInfoData(curPlayer, ChConfig.Def_FBMapID_IceLode) # 同步信息
- #重置领奖记录
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeStarAwardRecord, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeHasSweep, 0)
- #随机今日玩法
- __RandomLine(curPlayer, lineList)
- #通知
- SyncIceLoddInfo(curPlayer)
- return True
-
-def SyncIceLoddInfo(curPlayer):
- starCnt, lineList = GetIceLodeAllStarCnt(curPlayer)
- packdata = ChPyNetSendPack.tagMCIceLodeInfo()
- packdata.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeStarAwardRecord)
- packdata.DayLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeDayLV)
- packdata.HasSweep = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeHasSweep)
- packdata.LineList = lineList
- packdata.Cnt = len(packdata.LineList)
- NetPackCommon.SendFakePack(curPlayer, packdata)
- return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
index bae12fc..72f075a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MainLevel.py
@@ -28,6 +28,8 @@
import TurnAttack
import ItemCommon
import NPCCommon
+import ChEquip
+
import random
def OnFBPlayerOnLogin(curPlayer):
@@ -73,7 +75,7 @@
def __doCostZhanchui(curPlayer, atkObj, curSkill):
## 扣除战锤消耗
costZhanchui = 0
- isXP = SkillCommon.isXPSkill(curSkill)
+ isXP = SkillCommon.isAngerSkill(curSkill)
turnBattleType = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnBattleType)
if isXP:
costZhanchui = IpyGameDataPY.GetFuncCfg("ZhanchuiCost", 2)
@@ -81,7 +83,7 @@
costZhanchui = IpyGameDataPY.GetFuncCfg("ZhanchuiCost", 3)
elif turnBattleType == ChConfig.TurnBattleType_AtkBack:
costZhanchui = IpyGameDataPY.GetFuncCfg("ZhanchuiCost", 4)
- elif SkillCommon.isTurnNormalAtkSkill(curSkill):
+ elif SkillCommon.isTurnNormalSkill(curSkill):
costZhanchui = IpyGameDataPY.GetFuncCfg("ZhanchuiCost", 1)
if costZhanchui <= 0:
@@ -222,7 +224,7 @@
itemColor = GameWorld.GetResultByRandomList(colorRateList)
if not itemColor:
continue
- equipIDList = NPCCommon.__GetEquipIDList(0, color=itemColor, findType="MainEquipDrop")
+ equipIDList = NPCCommon.__GetEquipIDList(0, color=itemColor, placeList=ChConfig.Def_MainEquipPlaces, findType="MainEquipDrop")
if not equipIDList:
continue
randEquipID = random.choice(equipIDList)
@@ -319,7 +321,7 @@
__doDecomposeMainEquip(curPlayer, decomposeIndexList)
# 刷属性
-
+ ChEquip.RefreshRoleEquipAttr(curPlayer)
return
def __doDecomposeMainEquip(curPlayer, itemIndexList):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 29411cc..e39ca0d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -68,6 +68,7 @@
("WORD", "DefInheritPer", 0),
("WORD", "HPInheritPer", 0),
("dict", "BatAttrDict", 0),
+ ("list", "FetterIDList", 0),
),
"HeroTalent":(
@@ -100,6 +101,13 @@
"HeroFetter":(
("WORD", "FetterID", 1),
("list", "HeroIDList", 0),
+ ("list", "AttrIDList", 0),
+ ("list", "AttrValueList", 0),
+ ),
+
+ "HeroLineupHalo":(
+ ("WORD", "Country", 1),
+ ("BYTE", "NeedHeroCount", 0),
("list", "AttrIDList", 0),
("list", "AttrValueList", 0),
),
@@ -143,6 +151,11 @@
("DWORD", "Quality", 1),
("DWORD", "HeroLV", 1),
("list", "UPCostItem", 0),
+ ),
+
+ "PlayerAttr":(
+ ("DWORD", "AttrID", 1),
+ ("char", "Parameter", 0),
),
"MainChapter":(
@@ -697,33 +710,9 @@
"PlayerLV":(
("WORD", "LV", 1),
("DWORD", "Exp", 0),
- ("BYTE", "TalentPoint", 0),
- ("DWORD", "ReExp", 0),
- ("DWORD", "ReMaxHP", 0),
- ("DWORD", "ReAtk", 0),
- ("DWORD", "ReDef", 0),
- ("DWORD", "ReHit", 0),
- ("DWORD", "ReMiss", 0),
- ("DWORD", "ReAtkSpeed", 0),
- ("DWORD", "ReSkillAtkRate", 0),
- ("DWORD", "ReDamagePer", 0),
- ("DWORD", "ReDamReduce", 0),
- ("DWORD", "ReIgnoreDefRate", 0),
- ("DWORD", "ReLuckyHitRate", 0),
- ("DWORD", "ReLuckyHit", 0),
- ("DWORD", "ReBleedDamage", 0),
- ("DWORD", "ReIceAtk", 0),
- ("DWORD", "ReIceDef", 0),
- ("DWORD", "RePetAtk", 0),
- ("DWORD", "RePetSkillAtkRate", 0),
- ("DWORD", "RePetDamPer", 0),
- ("DWORD", "ReFinalHurt", 0),
- ("DWORD", "ReFinalHurtReduce", 0),
- ("DWORD", "RePotionReply", 0),
- ("DWORD", "RePotionCD", 0),
- ("DWORD", "AttackEff", 0),
- ("DWORD", "ReFightPower", 0),
- ("DWORD", "IceLodeFightPower", 0),
+ ("DWORD", "MaxHP", 0),
+ ("DWORD", "Atk", 0),
+ ("DWORD", "Def", 0),
),
"SpecMapPlayerAttrFormat":(
@@ -2868,7 +2857,8 @@
def GetAtkInheritPer(self): return self.attrTuple[7] # 攻击继承 WORD
def GetDefInheritPer(self): return self.attrTuple[8] # 防御继承 WORD
def GetHPInheritPer(self): return self.attrTuple[9] # 生命继承 WORD
- def GetBatAttrDict(self): return self.attrTuple[10] # 其他战斗属性字典 {"属性ID":值, ...} dict
+ def GetBatAttrDict(self): return self.attrTuple[10] # 其他战斗属性字典 {"属性ID":值, ...} dict
+ def GetFetterIDList(self): return self.attrTuple[11] # 羁绊ID列表 list
# 武将星级天赋表
class IPY_HeroTalent():
@@ -2921,6 +2911,18 @@
def GetFetterID(self): return self.attrTuple[0] # 羁绊ID WORD
def GetHeroIDList(self): return self.attrTuple[1] # 武将ID组合列表 list
+ def GetAttrIDList(self): return self.attrTuple[2] # 属性ID列表 list
+ def GetAttrValueList(self): return self.attrTuple[3] # 属性值列表 list
+
+# 阵容光环表
+class IPY_HeroLineupHalo():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetCountry(self): return self.attrTuple[0] # 国家 WORD
+ def GetNeedHeroCount(self): return self.attrTuple[1] # 所需武将数 BYTE
def GetAttrIDList(self): return self.attrTuple[2] # 属性ID列表 list
def GetAttrValueList(self): return self.attrTuple[3] # 属性值列表 list
@@ -2989,6 +2991,16 @@
def GetQuality(self): return self.attrTuple[0] # 品质 DWORD
def GetHeroLV(self): return self.attrTuple[1] # 武将等级 DWORD
def GetUPCostItem(self): return self.attrTuple[2] # 升级到下级消耗道具 list
+
+# 属性条目表
+class IPY_PlayerAttr():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetAttrID(self): return self.attrTuple[0] # 属性ID DWORD
+ def GetParameter(self): return self.attrTuple[1] # 属性名、参数名 char
# 主线章节表
class IPY_MainChapter():
@@ -3848,33 +3860,9 @@
def GetLV(self): return self.attrTuple[0] # 玩家等级 WORD
def GetExp(self): return self.attrTuple[1] # 升级所需经验 DWORD
- def GetTalentPoint(self): return self.attrTuple[2] # 等级获得的天赋点 BYTE
- def GetReExp(self): return self.attrTuple[3] # 等级经验效率(second) DWORD
- def GetReMaxHP(self): return self.attrTuple[4] # 生命 DWORD
- def GetReAtk(self): return self.attrTuple[5] # 攻击 DWORD
- def GetReDef(self): return self.attrTuple[6] # 防御 DWORD
- def GetReHit(self): return self.attrTuple[7] # 命中 DWORD
- def GetReMiss(self): return self.attrTuple[8] # 闪避 DWORD
- def GetReAtkSpeed(self): return self.attrTuple[9] # 攻速 DWORD
- def GetReSkillAtkRate(self): return self.attrTuple[10] # 技能伤害比例 DWORD
- def GetReDamagePer(self): return self.attrTuple[11] # 增加伤害 DWORD
- def GetReDamReduce(self): return self.attrTuple[12] # 减少伤害 DWORD
- def GetReIgnoreDefRate(self): return self.attrTuple[13] # 无视防御比例 DWORD
- def GetReLuckyHitRate(self): return self.attrTuple[14] # 会心一击率 DWORD
- def GetReLuckyHit(self): return self.attrTuple[15] # 会心一击伤害 DWORD
- def GetReBleedDamage(self): return self.attrTuple[16] # 流血伤害增加 DWORD
- def GetReIceAtk(self): return self.attrTuple[17] # 真实伤害 DWORD
- def GetReIceDef(self): return self.attrTuple[18] # 真实抵御 DWORD
- def GetRePetAtk(self): return self.attrTuple[19] # 灵宠攻击 DWORD
- def GetRePetSkillAtkRate(self): return self.attrTuple[20] # 灵宠技能 DWORD
- def GetRePetDamPer(self): return self.attrTuple[21] # 灵宠伤害增加 DWORD
- def GetReFinalHurt(self): return self.attrTuple[22] # 固定伤害增加 DWORD
- def GetReFinalHurtReduce(self): return self.attrTuple[23] # 固定伤害减少 DWORD
- def GetRePotionReply(self): return self.attrTuple[24] # 血瓶恢复量 DWORD
- def GetRePotionCD(self): return self.attrTuple[25] # 血瓶CD DWORD
- def GetAttackEff(self): return self.attrTuple[26] # 挂机效率 DWORD
- def GetReFightPower(self): return self.attrTuple[27] # 战斗力 DWORD
- def GetIceLodeFightPower(self): return self.attrTuple[28] # 冰晶矿脉扫荡战斗力 DWORD
+ def GetMaxHP(self): return self.attrTuple[2] # 生命 DWORD
+ def GetAtk(self): return self.attrTuple[3] # 攻击 DWORD
+ def GetDef(self): return self.attrTuple[4] # 防御 DWORD
# 特殊地图玩家属性公式表
class IPY_SpecMapPlayerAttrFormat():
@@ -7101,11 +7089,13 @@
self.__LoadFileData("HeroBreak", onlyCheck)
self.__LoadFileData("HeroAwake", onlyCheck)
self.__LoadFileData("HeroFetter", onlyCheck)
+ self.__LoadFileData("HeroLineupHalo", onlyCheck)
self.__LoadFileData("HeroSkin", onlyCheck)
self.__LoadFileData("HeroQuality", onlyCheck)
self.__LoadFileData("HeroQualityBreak", onlyCheck)
self.__LoadFileData("HeroQualityAwake", onlyCheck)
self.__LoadFileData("HeroQualityLV", onlyCheck)
+ self.__LoadFileData("PlayerAttr", onlyCheck)
self.__LoadFileData("MainChapter", onlyCheck)
self.__LoadFileData("MainLevel", onlyCheck)
self.__LoadFileData("NPCLineup", onlyCheck)
@@ -7649,6 +7639,13 @@
self.CheckLoadData("HeroFetter")
return self.ipyHeroFetterCache[index]
+ def GetHeroLineupHaloCount(self):
+ self.CheckLoadData("HeroLineupHalo")
+ return self.ipyHeroLineupHaloLen
+ def GetHeroLineupHaloByIndex(self, index):
+ self.CheckLoadData("HeroLineupHalo")
+ return self.ipyHeroLineupHaloCache[index]
+
def GetHeroSkinCount(self):
self.CheckLoadData("HeroSkin")
return self.ipyHeroSkinLen
@@ -7684,6 +7681,13 @@
self.CheckLoadData("HeroQualityLV")
return self.ipyHeroQualityLVCache[index]
+ def GetPlayerAttrCount(self):
+ self.CheckLoadData("PlayerAttr")
+ return self.ipyPlayerAttrLen
+ def GetPlayerAttrByIndex(self, index):
+ self.CheckLoadData("PlayerAttr")
+ return self.ipyPlayerAttrCache[index]
+
def GetMainChapterCount(self):
self.CheckLoadData("MainChapter")
return self.ipyMainChapterLen
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 d7360f8..1d0363f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -17,438 +17,66 @@
import IPY_GameWorld
import GameWorld
import ItemControler
-import SkillShell
import PlayerControl
import ChConfig
-import ChItem
import ItemCommon
-import FBLogic
-import OperControlManager
-import Operate_EquipWash
-import Operate_EquipPlus
import ShareDefine
import ChPyNetSendPack
import NetPackCommon
import IpyGameDataPY
-import Operate_EquipStone
import OpenServerCampaign
-import PassiveBuffEffMng
-import time
-import json
import FormulaControl
-import PyGameData
-#---------------------------------------------------------------------
+import PlayerOnline
+def RefreshRoleEquipAttr(curPlayer):
+ ## 刷新主公装备属性
+ CalcRoleEquipAttr(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
+ return
-##检查玩家是否可以换装
-# @param curPlayer 玩家实例
-# @return 返回值, 是否通过检查
-# @remarks 检查玩家是否可以换装
-def CheckPlayerCanEquipItem(curPlayer):
- if curPlayer.GetPlayerAction() not in ChConfig.Def_Player_DoEquip_State:
- #InsteadEquip 对不起,当前状态无法更换装备
- #InsteadEquip替换为GeRen_chenxin_436832
- PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_436832")
- return False
+def CalcRoleEquipAttr(curPlayer):
+ ## 计算主公装备属性
+ playerID = curPlayer.GetPlayerID()
+ mainEquipAttrDict = {}
- return True
-
-
-## 执行玩家换装逻辑
-# @param curPlayer 当前玩家
-# @param curItem 物品实例
-# @param equipPackIndex 装备背包索引
-# @param tick 当前时间
-# @return 布尔值
-# @remarks 执行玩家换装逻辑
-def DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):
- if equipPackIndex < 0:
- return False
- playerItemControl = ItemControler.PlayerItemControler(curPlayer)
+ packType = IPY_GameWorld.rptEquip
+ equipPack = curPlayer.GetItemManager().GetPack(packType)
- #---验证是否可以换这件装备---
- if not ItemCommon.CheckItemCanUse(curItem):
- return False
-
- if not ItemCommon.CheckItemCanUseByExpireTime(curItem):
- # 过期
- GameWorld.DebugLog("装备已过期!")
- return False
-
- changeItemEquipPlace = curItem.GetEquipPlace()
- if changeItemEquipPlace not in ShareDefine.RoleEquipType:
- return False
-
- if ItemCommon.GetEquipPackIndex(curItem) != equipPackIndex:
- #检查装备位置和填表是否一致
- return False
-
- #--设置穿上物品星级--
- #===========================================================================
- # if changeItemEquipPlace in ShareDefine.RoleEquipType:
- # equipPartStar = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace)
- # if equipPartStar != curItem.GetItemStarLV():
- # curItem.SetItemStarLV(equipPartStar)
- #===========================================================================
- #GameWorld.DebugLog("穿上的装备设置星级: index=%s,star=%s" % (changeItemEquipPlace, equipPartStar))
-
- #---开始换装逻辑---
-
- #记录换装物品信息
- itemClassLV = ItemCommon.GetItemClassLV(curItem)
- changeItemID = curItem.GetItemTypeID()
- changeItemStarLV = 0 #curItem.GetItemStarLV()
- changeItemStoneCnt = 0 #curItem.GetUseStoneCount()
- changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount()
- changeItemUseData = curItem.GetUserData()
- suiteID = curItem.GetSuiteID()
- endureReduceType = curItem.GetEndureReduceType()
- #changeItemIsHorse = (curItem.GetType() == ChConfig.Def_Item_Type_Horse)
-
- #执行换装动作
- equipPlace = playerItemControl.EquipItem(curItem, equipPackIndex)
-
- if equipPlace == -1:
- return False
-
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- curEquip = equipPack.GetAt(equipPackIndex)
-
- if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0:
- curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time()))
- #---换装成功---
- if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex:
- #通知客户端交换物品
- curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
- if itemClassLV == GetEquipFacadeClassLV(curPlayer):
- #穿当前外观阶的套装
- ChangeEquipfacadeByClassLV(curPlayer, itemClassLV)
+ # 主装备
+ for equipPlace in ChConfig.Def_MainEquipPlaces:
+ equipIndex = equipPlace - 1
+ if equipIndex < 0 or equipIndex >= equipPack.GetCount():
+ continue
+ curEquip = equipPack.GetAt(equipIndex)
+ if not curEquip or curEquip.IsEmpty():
+ continue
+ #itemColor = curEquip.GetItemColor()
- #特殊装备, 不需要刷属性
- if changeItemEquipPlace in ChConfig.EquipItemNoRefreshState:
- return True
-
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Equip)
-
- #先刷装备BUFF 再计算属性
- if changeItemEquipPlace in ChConfig.EquipPlace_LingQi:
- RefreshPlayerLingQiEquipAttr(curPlayer)
- elif itemClassLV:
- RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
-
- #刷新所有属性
- playControl = PlayerControl.PlayerControl(curPlayer)
- playControl.RefreshPlayerAttrState()
-
- #装备的被动触发类技能
- PassiveBuffEffMng.GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)
- return True
-
+ baseAttrIDCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrID)
+ baseAttrValueCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrValue)
+ if baseAttrIDCnt == baseAttrValueCnt:
+ for i in xrange(baseAttrIDCnt):
+ attrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrID, i)
+ attrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrValue, i)
+ mainEquipAttrDict[attrID] = mainEquipAttrDict.get(attrID, 0) + attrValue
+
+ legendAttrIDCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
+ legendAttrValueCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
+ if legendAttrIDCnt == legendAttrValueCnt:
+ for i in xrange(legendAttrIDCnt):
+ attrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i)
+ attrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i)
+ mainEquipAttrDict[attrID] = mainEquipAttrDict.get(attrID, 0) + attrValue
+
+ GameWorld.DebugLog("主线装备属性: %s" % mainEquipAttrDict, playerID)
+ PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_MainEquip, mainEquipAttrDict)
+ return
## 刷新装备对人物属性的改变
# @param self 类实例
# @return 返回值无意义
# @remarks 刷新装备对人物属性的改变
def RefreshPlayerEquipAttribute(curPlayer, classLV=0):
- GameWorld.DebugLog("Start RefreshPlayerEquipAttribute classLV=%s!!!" % classLV, curPlayer.GetPlayerID())
- classlvList = xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1) if classLV == 0 else [classLV]
- for rclasslv in classlvList:
- __CalcEquips_Effect(curPlayer, rclasslv)
-
- #if isRefreshEquipBuff:
- # __RefreshPlayerAllEquipBuff(curPlayer)
-
- if classLV:
- playerID = curPlayer.GetPlayerID()
- if playerID not in PyGameData.g_equipChangeClassLVInfo:
- PyGameData.g_equipChangeClassLVInfo[playerID] = []
- classLVList = PyGameData.g_equipChangeClassLVInfo[playerID]
- if classLV not in classLVList:
- classLVList.append(classLV)
- #GameWorld.DebugLog("添加装备缓存变更阶: classLV=%s, %s" % (classLV, classLVList), playerID)
- return
-
-def OnPlayerEquipLoginLogic(curPlayer):
- ''' 玩家登录统一处理装备,只遍历一次装备背包,通知信息、更新一次数据,防止总等级统计异常
- 装备品质橙装及以上数量、装备总星数、强化总等级、进化总等级、洗练总等级、宝石总等级
- '''
-
- #NotifyEquipPartPlusLV(curPlayer)
- #NotifyEquipPartStar(curPlayer)
- #Operate_EquipWash.OnEquipWashLogin(curPlayer)
- #装备位宝石镶嵌通知
- #Operate_EquipStone.OnLogin(curPlayer)
-# if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_LingGenShow):
-# GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_LingGenShow, 1)
-# ChangeEquipfacadeByLingGen(curPlayer)
-
- ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo() # A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
- ePartPlusLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo() # A3 B3 装备部位强化信息 #tagMCEquipPartPlusInfo
- ePartXLPack = ChPyNetSendPack.tagMCEquipPartXLAttrInfo() # A3 BB 装备位洗练属性信息 #tagMCEquipPartXLAttrInfo
- ePartStonePack = ChPyNetSendPack.tagMCStoneInfo() # A3 BC 通知装备位孔位宝石ID #tagMCStoneInfo
-
- orangeEquipCount = 0
- totalStar = 0
- totalPlusLV = 0
- totalEvolveLV = 0
- totalWashLV = 0
- totalStoneLV = 0
- holeIndexList = Operate_EquipStone.GetAllEquipPlaceHoleIndex()
-
- gameData = GameWorld.GetGameData()
- packType = IPY_GameWorld.rptEquip
- equipPack = curPlayer.GetItemManager().GetPack(packType)
- for index in xrange(equipPack.GetCount()):
- ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':index}, isLogNone=False)
- if not ipyData:
- continue
- # 只计算有阶的境界装备
- if not ipyData.GetClassLV():
- continue
-
- curEquip = equipPack.GetAt(index)
- if not curEquip.IsEmpty():
- if curEquip.GetItemColor() >= ShareDefine.Def_Item_Color_Orange:
- orangeEquipCount += 1
-
- # 星级
- starLV = GetEquipPartStar(curPlayer, index)
- totalStar += starLV
-
- # 强化等级
- plusProficiency = GetEquipPartProficiency(curPlayer, packType, index)
- plusLV = GetEquipPartPlusLV(curPlayer, packType, index)
- totalPlusLV += plusLV
-
- # 进化等级
- evolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, index)
- totalEvolveLV += evolveLV
-
- # 洗练等级
- washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % index)
- totalWashLV += washLV
-
- # 宝石等级
- stoneIDList, stoneIsBindList = [], []
- for holeIndex in holeIndexList:
- stoneID, stoneIsBind = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, index, holeIndex)
- stoneIDList.append(stoneID)
- stoneIsBindList.append(stoneIsBind)
- if stoneID == 0:
- continue
- curStone = gameData.GetItemByTypeID(stoneID)
- stoneLV = 0 if not curStone else curStone.GetEffectByIndex(0).GetEffectValue(1)
- totalStoneLV += stoneLV
-
- # 星级信息包
- if starLV:
- ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar()
- ePartStarLV.Clear()
- ePartStarLV.EquipPackIndex = index
- ePartStarLV.Star = starLV
- ePartStarLVPack.InfoList.append(ePartStarLV)
-
- # 强化、进化信息包
- if plusLV or plusProficiency or evolveLV:
- ePartPlusLV = ChPyNetSendPack.tagMCEquipPartPlusLV()
- ePartPlusLV.Clear()
- ePartPlusLV.PackType = packType
- ePartPlusLV.EquipIndex = index
- ePartPlusLV.EquipPartStarLV = plusLV
- ePartPlusLV.Proficiency = plusProficiency
- ePartPlusLV.EvolveLV = evolveLV
- ePartPlusLVPack.InfoList.append(ePartPlusLV)
-
- # 洗练信息包
- hasXLValue = False
- xlAttrList = []
- for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
- washValue = ChPyNetSendPack.tagMCEquipPartXLAttrValue()
- washValue.XLAttrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (index, attrNum))
- washValue.XLAttrChange = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValueTemp % (index, attrNum))
- xlAttrList.append(washValue)
- if washValue.XLAttrValue or washValue.XLAttrChange:
- hasXLValue = True
- if hasXLValue or washLV:
- ePartXLAttr = ChPyNetSendPack.tagMCEquipPartXLAttr()
- ePartXLAttr.EquipPlace = index
- ePartXLAttr.XLAttrLV = washLV
- ePartXLAttr.XLAttrList = xlAttrList
- ePartXLAttr.XLAttrCnt = len(ePartXLAttr.XLAttrList)
- ePartXLPack.InfoList.append(ePartXLAttr)
-
- # 宝石信息包
- stoneCount = len(stoneIDList)
- if stoneIDList.count(0) != stoneCount:
- stoneMsg = ChPyNetSendPack.tagMCStoneMsg()
- stoneMsg.EquipPlace = index
- stoneMsg.MaxStoneCount = stoneCount
- stoneMsg.StoneInfo = stoneIDList
- stoneMsg.StoneBind = stoneIsBindList
- ePartStonePack.InfoList.append(stoneMsg)
-
- # 通知封包,有值时才通知
- if ePartStarLVPack.InfoList:
- ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
- NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)
-
- if ePartPlusLVPack.InfoList:
- ePartPlusLVPack.Count = len(ePartPlusLVPack.InfoList)
- NetPackCommon.SendFakePack(curPlayer, ePartPlusLVPack)
-
- if ePartXLPack.InfoList:
- ePartXLPack.Count = len(ePartXLPack.InfoList)
- NetPackCommon.SendFakePack(curPlayer, ePartXLPack)
-
- if ePartStonePack.InfoList:
- ePartStonePack.EquipCount = len(ePartStonePack.InfoList)
- NetPackCommon.SendFakePack(curPlayer, ePartStonePack)
-
- Operate_EquipPlus.SyncEquipMasterPlusLVInfo(curPlayer)
-
- # 更新统计汇总值
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_EquipOrangeCount, orangeEquipCount)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipStar, totalStar)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusLV, totalPlusLV)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusEvolveLV, totalEvolveLV)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipWashLV, totalWashLV)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalStoneLV, totalStoneLV)
- GameWorld.DebugLog("登录更新装备相关值汇总: orangeEquipCount=%s,totalStar=%s,totalPlusLV=%s,totalEvolveLV=%s,totalWashLV=%s,totalStoneLV=%s"
- % (orangeEquipCount, totalStar, totalPlusLV, totalEvolveLV, totalWashLV, totalStoneLV))
- Sync_EquipPartSuiteActivateInfo(curPlayer)
-
- for equipPlace in ChConfig.EquipPlace_LingQi:
- Sync_LingQiTrainData(curPlayer, equipPlace)
-
- return
-
-#===============================================================================
-# #//07 03 人物装备物品#tagCEquipItem
-# //角色装备类型
-# int GetRoleEquipType();
-# //物品在物品背包的索引
-# int GetItemIndex();
-#===============================================================================
-## 人物装备物品
-# @param index 背包索引
-# @param tick 当前时间
-# @return None
-# @remarks 客户端封包响应 //07 03 人物装备物品#tagCEquipItem
-def PlayerEquipItem(index, tick):
- GameWorld.GetPsycoFunc(__Func_PlayerEquipItem)(index, tick)
- return
-
-
-## 人物装备物品
-# @param index 背包索引
-# @param tick 当前时间
-# @return None
-# @remarks 客户端封包响应 //07 03 人物装备物品#tagCEquipItem
-def __Func_PlayerEquipItem(index, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- sendPack = IPY_GameWorld.IPY_CEquipItem()
- #物品在物品背包的索引
- packItemIndex = sendPack.GetItemIndex()
- #角色装备部位
- equipPackIndex = sendPack.GetRoleEquipType()
-
- #检查玩家状态是否可以换装
- if not CheckPlayerCanEquipItem(curPlayer):
- return
-
- #检查换装间隔
- #===========================================================================
- # if tick - curPlayer.GetLastChangeEquipTick() <= ChConfig.Def_MinChangeEquipTime:
- # #GameWorld.Log("更换装备时间过短! %d"%(tick - curPlayer.GetLastChangeEquipTick()))
- # return
- #
- # curPlayer.SetLastChangeEquipTick(tick)
- #===========================================================================
-
- #---获取封包需要装备的物品---
- rolePack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- curItem = rolePack.GetAt(packItemIndex)
- #---执行玩家换装逻辑---
- if DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):
- return
-
- #换装失败通知客户端信息
- curPlayer.Notify_ItemPutFail(IPY_GameWorld.rptItem, packItemIndex, IPY_GameWorld.rptEquip, 0)
- return
-
-
-#---------------------------------------------------------------------
-## 一键换装(封包)
-# @param index 玩家索引
-# @param tick 当前时间
-# @return None
-# @remarks 函数详细说明.
-def OneKeyChangeEquip(index, tick):
- return
-
-
-## 玩家卸下装备(封包参数)
-# @param index 玩家索引
-# @param tick 当前时间
-# @return None
-# @remarks 函数详细说明.
-def PlayerUnEquip(index, tick):
- GameWorld.GetPsycoFunc(__Func_PlayerUnEquip)(index, tick)
- return
-
-
-#---------------------------------------------------------------------
-## 玩家卸下装备(封包参数)
-# @param index 玩家索引
-# @param tick 当前时间
-# @return None
-# @remarks 函数详细说明.
-def __Func_PlayerUnEquip(index, tick):
- sendPack = IPY_GameWorld.IPY_CUnEquipItem()
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-
- if not CheckPlayerCanEquipItem(curPlayer):
- return
-
- equipPackIndex = sendPack.GetEquipIndex()
-
- #如果卸下的是马匹,需要判定如果马匹装备背包有物品,不让放下
- #===========================================================================
- # if equipIndex == IPY_GameWorld.rptHorse :
- # itemEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptHorseEquip)
- #
- # if not ItemControler.GetPackIsEmpty(itemEquipPack):
- # PlayerControl.NotifyCode(curPlayer, "7E355D97-520A-4A8C-8BC993AAEAF6071F")
- # return
- #===========================================================================
-
- playerItemControl = ItemControler.PlayerItemControler(curPlayer)
- result = playerItemControl.UnEquipItem(equipPackIndex, sendPack.GetPackIndex())
-
- if not result:
- #卸下装备失败
- return
-
- equipID = result[0]
- equipPlace = result[1]
- itemClassLV = result[2]
-
- ##特殊装备 , 不需要冲刷属性
- if equipPlace in ChConfig.EquipItemNoRefreshState:
- return
-
- #先刷装备BUFF 再计算属性
- if equipPlace in ChConfig.EquipPlace_LingQi:
- RefreshPlayerLingQiEquipAttr(curPlayer)
- elif itemClassLV:
- RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
-
- #刷新所有属性
- playControl = PlayerControl.PlayerControl(curPlayer)
- playControl.RefreshPlayerAttrState()
-
- #装备的被动触发类技能
- PassiveBuffEffMng.GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)
return
#// A3 18 灵器突破 #tagCMLingQiEquipBreak
@@ -634,7 +262,7 @@
def RefreshPlayerLingQiEquipAttr(curPlayer):
''' 刷新玩家灵器装备属性
'''
-
+ return
classLV = 0 # 灵器阶默认为0
allAttrList = [{} for _ in range(4)]
lingQiAttrList = [{} for _ in range(4)]
@@ -752,503 +380,8 @@
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQiAttr, lingQiAttrList)
return
-def __CalcEquips_Effect(curPlayer, classLV):
- ''' 境界装备系统属性
- 1. 装备模块,每个境界阶独立,每个境界战力独立模块计算
- 1.1 装备本身属性: 不能有影响其他境界装备的属性
- 基础属性: 物品表中的配置
- 传奇属性:
-
- 2.装备位星级模块
- 2.1 装备位升星属性:不能有影响其他境界装备的属性
- 升星基础属性,属性属于装备基础
- 升星等级属性,会影响本阶装备基础
- 星级套装属性,详见套装属性
-
- 2.2 装备位套装属性:不能有影响其他境界装备的属性
- 由装备位是否套装及星级数决定套装属性
-
- 3.装备位强化模块:战力为所有境界装备位强化属性总和战力
- 强化等级属性
- 进化等级属性,影响本部位本境界装备基础
-
- 4.装备位宝石属性:战力为所有境界装备位宝石属性总和战力
- 宝石等级属性
- 宝石觉醒属性,会影响本阶装备基础
-
- 5.装备位洗练属性:战力为所有境界装备位洗练属性总和战力
- 洗练等级属性
- 洗练套装属性,会影响本阶装备基础
- '''
-
- if classLV < 1:
- GameWorld.ErrLog("刷境界装备属性阶错误!当前不支持该阶模块: classLV=%s" % classLV)
- return
- #GameWorld.DebugLog("----- 刷境界装备战力: classLV=%s" % (classLV))
-
- allEquipBaseAttrDict = {} # 所有装备基础属性 {attrID:value, ...}
- baseEquipBaseAttrDict = {} # 基础装备基础属性{attrID:value, ...}
- equipBaseAttrDict = {} # 装备基础属性 {装备位:{attrID:value, ...}, ...}
-
- equipColorDict = {} # 装备品质信息 {装备位:itemColor, ...}
- allAttrListEquip = [{} for _ in range(4)] # 装备属性
- equip_addEquipBaseAttrPerList = [{}, {}, {}] # 装备功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
- baseAttrDictStar, totalStarLV = {}, 0
- allAttrListStar = [{} for _ in range(4)] # 升星属性
- star_addEquipBaseAttrPerList = [{}, {}, {}] # 升星功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
- baseAttrDictPlus, totalPlusLV = {}, 0
- allAttrListPlus = [{} for _ in range(4)] # 强化属性
- plus_addEquipBaseAttrPerList = [{}, {}, {}] # 强化功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
- baseAttrDictStone, totalStoneLV = {}, 0
- allAttrListStone = [{} for _ in range(4)] # 宝石属性
- #stone_addEquipBaseAttrPerList = [{}, {}, {}] # 宝石功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
- baseAttrDictWash, totalWashLV = {}, 0
- allAttrListWash = [{} for _ in range(4)] # 洗练属性
- #wash_addEquipBaseAttrPerList = [{}, {}, {}] # 洗练功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
-
- packType = IPY_GameWorld.rptEquip
- playerEquip = curPlayer.GetItemManager().GetPack(packType)
- equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
- #maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2) #最大套装类型
- #equipPlaceList = [] # 有穿戴装备的装备位列表
- suitCntDict = {} #套装数量字典
- #legendAttrDict = {} #所有传奇属性
- equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
-
- basePlusLVMin = None # 基础装备最小强化等级,计算大师强化属性用
-
- # 1. 循环遍历本阶装备
- for equipPlace in equipPartStarIndexList:
- ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
- if not ipyData:
- continue
- equipIndex = ipyData.GetGridIndex()
- curEquip = playerEquip.GetAt(equipIndex)
- if not curEquip or curEquip.IsEmpty():
- continue
-
- #if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
- # # 过期,暂不判断,以后境界装备有时效装备再开启
- # continue
-
- #equipPlaceList.append(equipIndex)
- equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
-
- itemColor = curEquip.GetItemColor()
- equipColorDict[equipPlace] = itemColor
-
- baseAttrDict = {} # 装备位基础属性: 物品表 + 星级基础
- isBaseEquip = equipPlace in ChConfig.EquipPlace_Base
-
- #GameWorld.DebugLog("装备位 %s: itemID=%s,isBaseEquip=%s,equipScoreTotal=%s" % (equipPlace, curEquip.GetItemTypeID(), isBaseEquip, equipScoreTotal))
-
- #基础属性效果
- for i in xrange(curEquip.GetEffectCount()):
- curEffect = curEquip.GetEffectByIndex(i)
- if not curEffect:
- break
- effectID = curEffect.GetEffectID()
- if effectID == 0:
- #最后一个
- break
- effectValue = curEffect.GetEffectValue(0)
- if not effectValue:
- continue
- PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
- baseAttrDict[effectID] = baseAttrDict.get(effectID, 0) + effectValue
- allEquipBaseAttrDict[effectID] = allEquipBaseAttrDict.get(effectID, 0) + effectValue
- if isBaseEquip:
- baseEquipBaseAttrDict[effectID] = baseEquipBaseAttrDict.get(effectID, 0) + effectValue
- #GameWorld.DebugLog(" 物品表属性: ID=%s +%s" % (effectID, effectValue))
-
- #星数属性
- equipPartStar = GetEquipPartStarByRank(curPlayer, equipIndex, curEquip) # 生效的星数
- if equipPartStar:
- totalStarLV += equipPartStar
- #GameWorld.DebugLog(" 星级属性: classLV=%s, equipPlace=%s, equipPartStar=%s" % (classLV, equipPlace, equipPartStar))
- ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classLV, equipPlace, equipPartStar)
- starBaseAttrDict = {} if not ipyData else ipyData.GetBaseAttrInfo() # 星级基础
- for starBaseAttrID, starBaseAttrValue in starBaseAttrDict.items():
- PlayerControl.CalcAttrDict_Type(starBaseAttrID, starBaseAttrValue, allAttrListStar)
- baseAttrDict[starBaseAttrID] = baseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
- baseAttrDictStar[starBaseAttrID] = baseAttrDictStar.get(starBaseAttrID, 0) + starBaseAttrValue
- allEquipBaseAttrDict[starBaseAttrID] = allEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
- if isBaseEquip:
- baseEquipBaseAttrDict[starBaseAttrID] = baseEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
- #GameWorld.DebugLog(" 星级基础属性: ID=%s +%s" % (starBaseAttrID, starBaseAttrValue))
-
- starAttrDict = {} if not ipyData else ipyData.GetStarAttrInfo() # 星级附加
- for starAttrID, starAttrValue in starAttrDict.items():
- PlayerControl.CalcAttrDict_Type(starAttrID, starAttrValue, allAttrListStar)
- #GameWorld.DebugLog(" 星级附加属性: ID=%s +%s" % (starAttrID, starAttrValue))
- __CalcFuncAddEquipAttrPer(equipPlace, starAttrID, starAttrValue, star_addEquipBaseAttrPerList)
-
- equipBaseAttrDict[equipPlace] = baseAttrDict
-
- #套装计数
- suiteID = curEquip.GetSuiteID()
- if suiteID:
- if suiteID not in suitCntDict:
- suitCntDict[suiteID] = []
- suitCntDict[suiteID].append(equipPartStar)
-
- #传奇属性
- legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip)
- for i, legendAttrID in enumerate(legAttrIDList):
- legendAttrValue = legAttrValueList[i]
- PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)
- #GameWorld.DebugLog(" 传奇属性: ID=%s +%s" % (legendAttrID, legendAttrValue))
- __CalcFuncAddEquipAttrPer(equipPlace, legendAttrID, legendAttrValue, equip_addEquipBaseAttrPerList)
-
- #物品强化属性
- plusLV = __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, baseAttrDictPlus, allAttrListPlus, plus_addEquipBaseAttrPerList)
- totalPlusLV += plusLV
- if isBaseEquip:
- basePlusLVMin = plusLV if basePlusLVMin == None else min(basePlusLVMin, plusLV)
-
- #计算装备宝石加成
- gemLVList = CalcEquipStone_Effect(curPlayer, equipIndex, baseAttrDictStone, allAttrListStone)
- totalStoneLV += (sum(gemLVList) if gemLVList else 0)
-
- #洗练属性
- washLV = Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, baseAttrDictWash, allAttrListWash)
- totalWashLV += washLV
-
-# GameWorld.DebugLog(" 装备循环属性: %s" % (allAttrListEquip))
-# GameWorld.DebugLog(" 升星循环属性: %s" % (allAttrListStar))
-# GameWorld.DebugLog(" 强化循环属性: %s" % (allAttrListPlus))
-# GameWorld.DebugLog(" 宝石循环属性: %s" % (allAttrListStone))
-# GameWorld.DebugLog(" 洗练循环属性: %s" % (allAttrListWash))
-# GameWorld.DebugLog(" -----" )
- # 2. 计算遍历后的附加属性
- #套装属性,暂归为星级套装属性
- CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListStar)
- #大师
- __CalcMasterPlusLVAttr(curPlayer, classLV, basePlusLVMin, allAttrListPlus, plus_addEquipBaseAttrPerList)
-
-# GameWorld.DebugLog(" 升星属性套装: %s" % (allAttrListEquip))
-
- # 3. 计算对装备基础的附加加成
-# GameWorld.DebugLog(" -----" )
-# GameWorld.DebugLog(" 所有装备基础属性: %s" % (allEquipBaseAttrDict))
-# GameWorld.DebugLog(" 基础装备基础属性: %s" % (baseEquipBaseAttrDict))
-# GameWorld.DebugLog(" 单件装备基础属性: %s" % (equipBaseAttrDict))
-# GameWorld.DebugLog(" -----" )
- #计算功能点对装备基础的加成
- insideAttrDictEquip, insideAttrDictStar, insideAttrDictPlus, insideAttrDictStone, insideAttrDictWash = {}, {}, {}, {}, {}
- __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, equip_addEquipBaseAttrPerList, insideAttrDictEquip, "Equip")
- __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, star_addEquipBaseAttrPerList, insideAttrDictStar, "Star")
- __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, plus_addEquipBaseAttrPerList, insideAttrDictPlus, "Plus")
- #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, stone_addEquipBaseAttrPerList, insideAttrDictStone, "Stone")
- #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, wash_addEquipBaseAttrPerList, insideAttrDictWash, "Wash")
-
- #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
- equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
-
- # 4. 累加所有阶装备位属性
- playerID = curPlayer.GetPlayerID()
- if playerID not in PyGameData.g_playerEquipPartAttrDict:
- PyGameData.g_playerEquipPartAttrDict[playerID] = {}
- equipPartAttrDict = PyGameData.g_playerEquipPartAttrDict[playerID]
- equipPartAttrDict[classLV] = [equipFightPowerEx,
- allAttrListEquip, insideAttrDictEquip, equipColorDict,
- baseAttrDictStar, allAttrListStar, insideAttrDictStar, totalStarLV,
- baseAttrDictPlus, allAttrListPlus, insideAttrDictPlus, totalPlusLV,
- baseAttrDictStone, allAttrListStone, insideAttrDictStone, totalStoneLV,
- baseAttrDictWash, allAttrListWash, insideAttrDictWash, totalWashLV,
- ]
-
-# GameWorld.DebugLog(" ----- 累加所有阶装备位养成属性")
-# GameWorld.DebugLog(" 本阶装备战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
-# GameWorld.DebugLog(" 本阶装备属性: %s, 内部加成=%s" % (allAttrListEquip, insideAttrDictEquip))
-# GameWorld.DebugLog(" 本阶升星属性: %s, 内部加成=%s" % (allAttrListStar, insideAttrDictStar))
-# GameWorld.DebugLog(" 本阶强化属性: %s, 内部加成=%s" % (allAttrListPlus, insideAttrDictPlus))
-# GameWorld.DebugLog(" 本阶宝石属性: %s, 内部加成=%s" % (allAttrListStone, insideAttrDictStone))
-# GameWorld.DebugLog(" 本阶洗练属性: %s, 内部加成=%s" % (allAttrListWash, insideAttrDictWash))
-
- allClassEquipFightPowerEx = 0
- allClassAttrListEquip, allClassInsideAttrDictEquip, classEquipColorDict = [{} for _ in range(4)], {}, {}
- allClassAttrListStar, allClassInsideAttrDictStar, classBaseAttrDictStar, classStarLVDict = [{} for _ in range(4)], {}, {}, {}
- allClassAttrListPlus, allClassInsideAttrDictPlus, classBaseAttrDictPlus, classPlusLVDict = [{} for _ in range(4)], {}, {}, {}
- allClassAttrListStone, allClassInsideAttrDictStone, classBaseAttrDictStone, classStoneLVDict = [{} for _ in range(4)], {}, {}, {}
- allClassAttrListWash, allClassInsideAttrDictWash, classBaseAttrDictWash, classWashLVDict = [{} for _ in range(4)], {}, {}, {}
- for classLV, attrList in equipPartAttrDict.items():
- equipFightPowerEx, \
- allAttrListEquip, insideAttrDictEquip, equipColorDict, \
- baseAttrDictStar, allAttrListStar, insideAttrDictStar, totalStarLV, \
- baseAttrDictPlus, allAttrListPlus, insideAttrDictPlus, totalPlusLV, \
- baseAttrDictStone, allAttrListStone, insideAttrDictStone, totalStoneLV, \
- baseAttrDictWash, allAttrListWash, insideAttrDictWash, totalWashLV = attrList
- #GameWorld.DebugLog(" classLV=%s, %s" % (classLV, attrList))
- allClassEquipFightPowerEx += equipFightPowerEx
- for i in xrange(4):
- PlayerControl.AddAttrDictValue(allClassAttrListEquip[i], allAttrListEquip[i])
- PlayerControl.AddAttrDictValue(allClassAttrListStar[i], allAttrListStar[i])
- PlayerControl.AddAttrDictValue(allClassAttrListPlus[i], allAttrListPlus[i])
- PlayerControl.AddAttrDictValue(allClassAttrListStone[i], allAttrListStone[i])
- PlayerControl.AddAttrDictValue(allClassAttrListWash[i], allAttrListWash[i])
- PlayerControl.AddAttrDictValue(allClassInsideAttrDictEquip, insideAttrDictEquip)
- PlayerControl.AddAttrDictValue(allClassInsideAttrDictStar, insideAttrDictStar)
- PlayerControl.AddAttrDictValue(allClassInsideAttrDictPlus, insideAttrDictPlus)
- PlayerControl.AddAttrDictValue(allClassInsideAttrDictStone, insideAttrDictStone)
- PlayerControl.AddAttrDictValue(allClassInsideAttrDictWash, insideAttrDictWash)
-
- classEquipColorDict[classLV] = equipColorDict
- classBaseAttrDictStar[classLV] = baseAttrDictStar
- classBaseAttrDictPlus[classLV] = baseAttrDictPlus
- classBaseAttrDictStone[classLV] = baseAttrDictStone
- classBaseAttrDictWash[classLV] = baseAttrDictWash
- classStarLVDict[classLV] = totalStarLV
- classPlusLVDict[classLV] = totalPlusLV
- classStoneLVDict[classLV] = totalStoneLV
- classWashLVDict[classLV] = totalWashLV
-
- customAttrDictEquip = {"classEquipColorDict":classEquipColorDict}
- customAttrDictStar = {"classBaseAttrDictStar":classBaseAttrDictStar, "classStarLVDict":classStarLVDict}
- customAttrDictPlus = {"classBaseAttrDictPlus":classBaseAttrDictPlus, "classPlusLVDict":classPlusLVDict}
- customAttrDictStone = {"classBaseAttrDictStone":classBaseAttrDictStone, "classStoneLVDict":classStoneLVDict}
- customAttrDictWash = {"classBaseAttrDictWash":classBaseAttrDictWash, "classWashLVDict":classWashLVDict}
-
-# GameWorld.DebugLog(" 所有阶装备战力: %s" % (allClassEquipFightPowerEx))
-# GameWorld.DebugLog(" 所有阶装备属性: %s, 内部加成=%s" % (allClassAttrListEquip, allClassInsideAttrDictEquip))
-# GameWorld.DebugLog(" 所有阶升星属性: %s, 内部加成=%s" % (allClassAttrListStar, allClassInsideAttrDictStar))
-# GameWorld.DebugLog(" 所有阶强化属性: %s, 内部加成=%s" % (allClassAttrListPlus, allClassInsideAttrDictPlus))
-# GameWorld.DebugLog(" 所有阶宝石属性: %s, 内部加成=%s" % (allClassAttrListStone, allClassInsideAttrDictStone))
-# GameWorld.DebugLog(" 所有阶洗练属性: %s, 内部加成=%s" % (allClassAttrListWash, allClassInsideAttrDictWash))
- PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Equip, allClassEquipFightPowerEx)
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allClassAttrListEquip, allClassInsideAttrDictEquip, customAttrDict=customAttrDictEquip)
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star, allClassAttrListStar, allClassInsideAttrDictStar, customAttrDict=customAttrDictStar)
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus, allClassAttrListPlus, allClassInsideAttrDictPlus, customAttrDict=customAttrDictPlus)
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allClassAttrListStone, allClassInsideAttrDictStone, customAttrDict=customAttrDictStone)
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allClassAttrListWash, allClassInsideAttrDictWash, customAttrDict=customAttrDictWash)
- return
-
-def __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, addPerInfoList):
- ## 计算其他功能属性对装备基础属性的加成
-
- if attrID not in ChConfig.EquipBassAttrAddInfoSet:
- return
- effPlace, calcAttrList = ChConfig.EquipBassAttrAddInfoSet[attrID]
- #GameWorld.DebugLog(" 装备基础加成信息: ID=%s,effPlace=%s,calcAttrList=%s" % (attrID, effPlace, calcAttrList))
- # 所有部位
- if effPlace == -1:
- allPlaceAddPerDict = addPerInfoList[0]
- for calcAttrIndex in calcAttrList:
- allPlaceAddPerDict[calcAttrIndex] = allPlaceAddPerDict.get(calcAttrIndex, 0) + attrValue
- #GameWorld.DebugLog(" 当前加成信息=%s" % (addPerInfoList))
- return
-
- # 基础部位
- if effPlace == -2:
- basePlaceAddPerDict = addPerInfoList[1]
- for calcAttrIndex in calcAttrList:
- basePlaceAddPerDict[calcAttrIndex] = basePlaceAddPerDict.get(calcAttrIndex, 0) + attrValue
- #GameWorld.DebugLog(" 当前加成信息=%s" % (addPerInfoList))
- return
-
- # 指定部位
- elif effPlace > 0 and equipPlace == effPlace:
- assignPlaceAddPerDict = addPerInfoList[2]
- if equipPlace not in assignPlaceAddPerDict:
- assignPlaceAddPerDict[equipPlace] = {}
- curPlaceAddPerDict = assignPlaceAddPerDict[equipPlace]
- for calcAttrIndex in calcAttrList:
- curPlaceAddPerDict[calcAttrIndex] = curPlaceAddPerDict.get(calcAttrIndex, 0) + attrValue
- #GameWorld.DebugLog(" 当前加成信息=%s" % (addPerInfoList))
- return
-
- return
-
-def __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, addEquipBaseAttrPerList, allAttrDict, sign=""):
- ## 计算其他功能属性对装备基础属性加成的属性具体值
- allPlaceAddPerDict, basePlaceAddPerDict, assignPlaceAddPerDict = addEquipBaseAttrPerList
- #GameWorld.DebugLog(" 计算功能点对装备基础属性加成: %s" % sign)
- #GameWorld.DebugLog(" 全部装备属性: %s, 加成%s" % (allEquipBaseAttrDict, allPlaceAddPerDict))
- for attrID, addPer in allPlaceAddPerDict.items():
- if attrID not in allEquipBaseAttrDict:
- continue
- baseValue = allEquipBaseAttrDict[attrID]
- addValue = int(baseValue * addPer / 10000.0)
- PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
- #GameWorld.DebugLog(" 加成: ID=%s +%s %s" % (attrID, addValue, addPer))
-
- #GameWorld.DebugLog(" 基础装备属性: %s, 加成%s" % (baseEquipBaseAttrDict, basePlaceAddPerDict))
- for attrID, addPer in basePlaceAddPerDict.items():
- if attrID not in baseEquipBaseAttrDict:
- continue
- baseValue = baseEquipBaseAttrDict[attrID]
- addValue = int(baseValue * addPer / 10000.0)
- PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
- #GameWorld.DebugLog(" 加成: ID=%s +%s %s" % (attrID, addValue, addPer))
-
- #GameWorld.DebugLog(" 指定装备属性: %s, 加成%s" % (equipBaseAttrDict, assignPlaceAddPerDict))
- for equipPlace, addPerDict in assignPlaceAddPerDict.items():
- if equipPlace not in equipBaseAttrDict:
- continue
- baseAttrDict = equipBaseAttrDict[equipPlace]
- for attrID, addPer in addPerDict.items():
- if attrID not in baseAttrDict:
- continue
- baseValue = baseAttrDict[attrID]
- addValue = int(baseValue * addPer / 10000.0)
- PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
- #GameWorld.DebugLog(" 加成: ID=%s +%s %s" % (attrID, addValue, addPer))
- return
-
def CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict={}):
## 计算传奇属性
-
- legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip)
- if not legAttrIDList:
- #GameWorld.DebugLog("没有传奇属性!")
- return
- #GameWorld.DebugLog("传奇属性: place=%s,IDList=%s, v=%s" % (curEquip.GetEquipPlace(), legAttrIDList, legAttrValueList))
-
- for i, legendAttrID in enumerate(legAttrIDList):
- legendAttrValue = legAttrValueList[i]
- #GameWorld.DebugLog("加传奇属性: %s +%s" % (legendAttrID, legendAttrValue))
- PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)
- #legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value
-
- return
-
-def __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, baseAttrDictPlus, allAttrList, plus_addEquipBaseAttrPerList):
- ## 计算装备强化后的属性
- equipPartPlusLV = GetEquipPartPlusLV(curPlayer, packType, equipIndex)
- equipPartPlusEvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, equipIndex)
-
- if not equipPartPlusLV:
- return equipPartPlusLV
- plusType = GetEquipPlusType(curEquip)
- if plusType is None:
- return equipPartPlusLV
-
- #GameWorld.DebugLog(" 强化属性: plusType=%s,equipPartPlusLV=%s,equipPartPlusEvolveLV=%s" % (plusType, equipPartPlusLV, equipPartPlusEvolveLV))
- ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", plusType, equipPartPlusLV)
- if not ipyData:
- return equipPartPlusLV
- attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()
- for i, attrID in enumerate(attrTypeList):
- #GameWorld.DebugLog(" 强化基础属性: ID=%s +%s" % (attrID, attrValueList[i]))
- PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
- baseAttrDictPlus[attrID] = baseAttrDictPlus.get(attrID, 0) + attrValueList[i]
-
- if not equipPartPlusEvolveLV:
- return equipPartPlusLV
- #进化属性
- equipPlace = curEquip.GetEquipPlace()
- ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, equipPartPlusEvolveLV)
- if not ipyData:
- return equipPartPlusLV
- for attrID, attrValue in ipyData.GetAttr().items():
- #GameWorld.DebugLog(" 强化进阶属性: ID=%s +%s" % (attrID, attrValue))
- PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
- __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, plus_addEquipBaseAttrPerList)
-
- return equipPartPlusLV
-
-def __CalcMasterPlusLVAttr(curPlayer, classLV, basePlusLVMin, allAttrListPlus, plus_addEquipBaseAttrPerList):
- ## 计算装备大师强化属性
-
- ipyDataList = IpyGameDataPY.GetIpyGameDataList("ItemPlusMaster", classLV)
- if not ipyDataList:
- return
-
- actMasterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV) # 已激活的最大大师等级
-
- for ipyData in ipyDataList:
- needMasterPlusLV = ipyData.GetMasterPlusLV()
- if basePlusLVMin < needMasterPlusLV:
- #GameWorld.DebugLog(" 未达到大师强化等级! classLV=%s,basePlusLVMin=%s < needMasterPlusLV=%s" % (classLV, basePlusLVMin, needMasterPlusLV))
- continue
- if actMasterPlusLV < needMasterPlusLV:
- #GameWorld.DebugLog(" 未激活大师强化等级! classLV=%s,actMasterPlusLV=%s < needMasterPlusLV=%s" % (classLV, actMasterPlusLV, needMasterPlusLV))
- continue
-
- attrIDList = ipyData.GetMasterPlusAttrIDList()
- attrValueList = ipyData.GetMasterPlusAttrValueList()
- for i, attrID in enumerate(attrIDList):
- attrValue = attrValueList[i]
- PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPlus)
- __CalcFuncAddEquipAttrPer(None, attrID, attrValue, plus_addEquipBaseAttrPerList)
- #GameWorld.DebugLog(" 强化大师属性! needMasterPlusLV=%s, attrID=%s + %s" % (needMasterPlusLV, attrID, attrValue))
-
- return
-
-## 装备套装属性计算
-# @param curPlayer 当前玩家
-# @return None
-def CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit):
- if not suitCntDict:
- return
- #GameWorld.DebugLog(' suitCntDict=%s'%suitCntDict)
- learnSkillInfo = {}
- suiteSkillTypeIDList = []
- skillManager = curPlayer.GetSkillManager()
- for suiteID, starList in suitCntDict.items():
- ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID)
- if not ipyDataList:
- continue
- for ipyData in ipyDataList:
- suiteCnt = ipyData.GetSuiteCnt()
- needStar = ipyData.GetStar()
- skillID = ipyData.GetSkillID()
- activateIndex = ipyData.GetActivateIndex()
- isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex)
- skillData = None if not skillID else GameWorld.GetGameData().GetSkillBySkillID(skillID)
- skillTypeID = 0 if not skillData else skillData.GetSkillTypeID()
- skillLV = 0 if not skillData else skillData.GetSkillLV()
- #GameWorld.DebugLog("suiteID=%s,suiteCnt=%s,needStar=%s,isActivate=%s,skillID=%s,skillTypeID=%s,skillLV=%s" % (suiteID, suiteCnt, needStar, isActivate, skillID, skillTypeID, skillLV))
- if skillTypeID and skillTypeID not in suiteSkillTypeIDList:
- suiteSkillTypeIDList.append(skillTypeID)
- if isActivate and [1 if star >= needStar else 0 for star in starList].count(1) >= suiteCnt:
- #GameWorld.DebugLog(" 套装: suiteID=%s,suiteCnt=%s,needStar=%s" % (suiteID, suiteCnt, needStar))
- for attrID, attrValue in ipyData.GetAttrInfo().items():
- PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSuit)
- #GameWorld.DebugLog(" 属性: ID=%s +%s" % (attrID, attrValue))
- #技能
- if skillTypeID and skillLV and skillLV > learnSkillInfo.get(skillTypeID, 0):
- learnSkillInfo[skillTypeID] = skillLV
-
- #GameWorld.DebugLog("suiteSkillTypeIDList:%s" % suiteSkillTypeIDList)
- #GameWorld.DebugLog("learnSkillInfo:%s" % learnSkillInfo)
- skillChange = False
- playerCtl = PlayerControl.PlayerControl(curPlayer)
- for skillTypeID in suiteSkillTypeIDList:
- if skillTypeID in learnSkillInfo:
- #需要学习的不处理
- continue
- curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID)
- if not curSkill:
- continue
- skillChange = True
- skillID = curSkill.GetSkillID()
- GameWorld.DebugLog(" 删除套装技能: skillID=%s" % skillID)
- skillManager.DeleteSkillBySkillID(skillID)
- playerCtl.RefreshSkillFightPowerByDel(skillID)
-
- for skillTypeID, skillLV in learnSkillInfo.items():
- skillData = GameWorld.GetGameData().FindSkillByType(skillTypeID, skillLV)
- if not skillData:
- continue
- skillID = skillData.GetSkillID()
- curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID)
- if curSkill:
- if skillLV == curSkill.GetSkillLV():
- continue
- delSkillID = curSkill.GetSkillID()
- GameWorld.DebugLog(" 删除套装技能等级: skillTypeID=%s,skillLV=%s,skillID=%s,delSkillID=%s" % (skillTypeID, skillLV, skillID, delSkillID))
- skillManager.DeleteSkillBySkillID(delSkillID)
- playerCtl.RefreshSkillFightPowerByDel(delSkillID)
-
- GameWorld.DebugLog(" 激活套装技能等级: skillTypeID=%s,skillLV=%s,skillID=%s" % (skillTypeID, skillLV, skillID))
- skillManager.LVUPSkillByID(skillID)
- playerCtl.RefreshSkillFightPowerEx(skillID, 0)
- skillChange = True
-
- if skillChange:
- # 重刷被动技能
- PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer)
return
#// A5 C6 装备部位星级套装激活 #tagCMEquipPartSuiteActivate
@@ -1322,193 +455,6 @@
NetPackCommon.SendFakePack(curPlayer, activateInfo)
return
-
-## 1算装备触发的技能 (全身)
-# @param curPlayer 当前玩家
-# @param curEquip 当前装备
-# @return None
-# @remarks 函数详细说明.
-def CalcCurEquip_SkillBuff(curPlayer, curEquip):
- SkillShell.RefreshSkillBuffByEquip(curPlayer, curEquip)
- return
-
-
-## 计算装备镶嵌宝石附加效果->基本属性 (宝石)
-# @param curPlayer 当前玩家
-# @param curEquip 当前装备
-# @param allAttrList 属性信息
-# @return 无返回值
-def CalcEquipStone_Effect(curPlayer, equipIndex, baseAttrDictStone, allAttrList):
- gameData = GameWorld.GetGameData()
-
- effIndexList = [1, 2, 3, 4] # 第一个效果值是类型等级效果值,非属性效果值
- gemLVList = []
- for holeIndex in Operate_EquipStone.GetAllEquipPlaceHoleIndex():
-
- curGemID = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
- if curGemID == 0:
- continue
- curGem = gameData.GetItemByTypeID(curGemID)
- if not curGem:
- GameWorld.ErrLog('equip stone id:%s not in item table' % (curGemID))
- continue
- for effIndex in effIndexList:
- curGemEffect = curGem.GetEffectByIndex(effIndex)
- effectID, effectValue = curGemEffect.GetEffectID(), curGemEffect.GetEffectValue(0)
- if effectID and effectValue:
- PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrList)
- baseAttrDictStone[effectID] = baseAttrDictStone.get(effectID, 0) + effectValue
- gemEffect = curGem.GetEffectByIndex(0)
- gemLV = gemEffect.GetEffectValue(1)
- gemLVList.append(gemLV)
- return gemLVList
-
-#---------------------------------------------------------------------
-## 装备添加Buff
-# @param curPlayer 当前玩家
-# @param addSkillID 技能ID
-# @return None
-# @remarks 函数详细说明.
-def EquipAddBuff(curPlayer, addSkillID, value=0):
-
- value = min(value, ChConfig.Def_UpperLimit_DWord)
- curBuff = curPlayer.GetEquipBuff().AddBuff(addSkillID, 0, False)
- curBuff.SetOwnerID(curPlayer.GetID())
- curBuff.SetOwnerType(curPlayer.GetGameObjType())
- if value > 0:
- curBuff.SetValue(value)
- return
-
-
-#---------------------------------------------------------------------
-#===============================================================================
-# #//03 2F 请求装备显隐#tagRequestEquipShowHide
-# //装备显示开关
-# int GetEquipShowSwitch(); 灵宠外观索引*10000000+坐骑外观索引*1000000+灵根特效表key * 1000+第几套*10+是否有套装
-#===============================================================================
-##请求装备显隐. (设置显示哪套装备外观)
-# @param index 玩家索引
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 客户端封包响应 //03 2F 请求装备显隐#tagRequestEquipShowHide
-def RequestEquipShowHide(index, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-
- #---检查刷新间隔--
- interval = ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_RequestEquipShowHide]
-
- if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide) < interval:
- #没有到刷新间隔,54外挂,不给提示
-# GameWorld.ErrLog('请求装备显隐, 没有到刷新间隔')
- return
- curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide, tick)
- sendPack = IPY_GameWorld.IPY_CRequestEquipShowHide()
- classLV = sendPack.GetEquipShowSwitch()
- oldClassLV = GetEquipFacadeClassLV(curPlayer)
- if oldClassLV == classLV:
- return
- if not ChangeEquipfacadeByClassLV(curPlayer, classLV):
- return
-
- #通知外观装备
- updFaceEquipIndex = 0
- equipIndexList = []
-
- for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]:
- ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
- if not ipyData:
- continue
- gridIndex = ipyData.GetGridIndex()
- updFaceEquipIndex = updFaceEquipIndex * 1000 + gridIndex
- equipIndexList.append(gridIndex)
-
- PlayerControl.SetFaceEquipIndex(curPlayer, updFaceEquipIndex)
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- for equipPackIndex in equipIndexList:
- curEquip = equipPack.GetAt(equipPackIndex)
- if not ItemCommon.CheckItemCanUse(curEquip):
- continue
- changeItemID = curEquip.GetItemTypeID()
- changeItemStarLV = 0 #curItem.GetItemStarLV()
- changeItemStoneCnt = 0 #curItem.GetUseStoneCount()
- changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount()
- changeItemUseData = curEquip.GetUserData()
- curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
-
- return
-
-def ChangeEquipfacadeByClassLV(curPlayer, classLV):
- ##变更第X套装备外观 灵根特效表key * 1000+第几套*10+是否有套装
- oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
- realSuit=1
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- for place in ChConfig.EquipPlace_Base:
- ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
- if not ipyData:
- realSuit = 0
- break
- gridIndex = ipyData.GetGridIndex()
- curEquip = equipPack.GetAt(gridIndex)
- if not ItemCommon.CheckItemCanUse(curEquip):
- realSuit = 0
- break
- if not curEquip.GetSuiteID():
- realSuit = 0
- break
- updEquipShowSwitch = oldEquipShowSwitch /1000*1000+ classLV*10+realSuit
- if oldEquipShowSwitch == updEquipShowSwitch:
- return
- curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
- ChangeEquipEffectByPlusMaster(curPlayer, classLV)
- return True
-
-#!!! 特效根据灵根品级变化改成根据强化大师变化
-def ChangeEquipfacadeByLingGen(curPlayer):
-# ## 灵根品级变化影响角色外观显示 灵根特效表key * 1000+第几套*10+是否有套装
-# pointValueInfo = [[ShareDefine.Def_Effect_Metal,PlayerControl.GetMetalQualityLV(curPlayer)],
-# [ShareDefine.Def_Effect_Wood,PlayerControl.GetWoodQualityLV(curPlayer)],
-# [ShareDefine.Def_Effect_Water,PlayerControl.GetWaterQualityLV(curPlayer)],
-# [ShareDefine.Def_Effect_Fire,PlayerControl.GetFireQualityLV(curPlayer)],
-# [ShareDefine.Def_Effect_Earth,PlayerControl.GetEarthQualityLV(curPlayer)],
-# ]
-# g_skillElementCntDict = {} #灵根对应使用专精技能数量
-# skillManager = curPlayer.GetSkillManager()
-# gameData = GameWorld.GetGameData()
-# for i in xrange(skillManager.GetSkillCount()):
-# curSkill = skillManager.GetSkillByIndex(i)
-# skillID = curSkill.GetSkillTypeID()
-# curSelectSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % skillID)
-# if not curSelectSkillID:
-# continue
-# elementSkillData = gameData.GetSkillBySkillID(curSelectSkillID)
-# if not elementSkillData:
-# continue
-# skillElementType = SkillShell.GetSkillElementType(elementSkillData)
-# g_skillElementCntDict[skillElementType] = g_skillElementCntDict.get(skillElementType, 0) + 1
-#
-# showPointID, showQualityLV = 0, 0
-# for pointID, qualityLV in pointValueInfo:
-# if qualityLV > showQualityLV:
-# showQualityLV = qualityLV
-# showPointID = pointID
-# elif showQualityLV and qualityLV == showQualityLV:
-# #比谁的专精技能数量多
-# if g_skillElementCntDict.get(pointID, 0) > g_skillElementCntDict.get(showPointID, 0):
-# showQualityLV = qualityLV
-# showPointID = pointID
-# effectID = 0
-# if showPointID:
-# ipyData = IpyGameDataPY.GetIpyGameData('LingGenEffect', showPointID, showQualityLV)
-# if not ipyData:
-# return
-# effectID = ipyData.GetID()
-# oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
-# updEquipShowSwitch = oldEquipShowSwitch % 1000 + oldEquipShowSwitch / 1000000 * 1000000+ 1000 * effectID
-# GameWorld.DebugLog('灵根品级变化影响角色外观显示g_skillElementCntDict=%s,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'%
-# (g_skillElementCntDict, oldEquipShowSwitch, updEquipShowSwitch))
-# if oldEquipShowSwitch != updEquipShowSwitch:
-# curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
- return
def ChangeEquipEffectByPlusMaster(curPlayer, classLV):
# 强化大师特效
if (classLV != GetEquipFacadeClassLV(curPlayer)):
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 eb58ca8..55c26ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -648,15 +648,6 @@
#这个物品不是一般物品, 直接返回结果
return useSpecialItemResult
- #---特殊装备不验证装备属性, 普通物品要验证装备属性---
- itemControler = ItemControler.PlayerItemControler(curPlayer)
-
- #装备无法使用
- if itemControler.PlayerCanEquipItem(curItem, False):
- #这个物品是装备
- PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_774045")
- return
-
#物品类型ID
itemTypeID = curItem.GetItemTypeID()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 3d0c00b..57071d1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -747,65 +747,6 @@
self.__PlayerItem = self.__PlayerItemManager.GetPack(IPY_GameWorld.rptItem)
return
- ## 玩家是否能装备物品
- # @param curItem 当前物品
- # @param needNotify 是否需要通知客户端
- # @return 布尔值
- # @remarks 函数详细说明.
- def PlayerCanEquipItem(self, curItem, needNotify):
- curPlayer = self.__Player
- #非法装备检查
- if curItem.GetIsLocked():
- if needNotify:
- PlayerControl.NotifyCode(curPlayer, "RescannotEquip")
-
- return False
-
- #任务物品检查
- if IsEventItem(curItem):
- if needNotify:
- PlayerControl.NotifyCode(curPlayer, "TaskRes")
-
- return False
-
- #数据库中是1开始
-# if curItem.GetEquipPlace() == 0:
-# if needNotify:
-# #物品不能装备
-# PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_595819")
-#
-# return False
-
- #职业检查
- if not ItemCommon.CheckJob(curPlayer, curItem):
- if needNotify:
- PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_31379")
-
- return False
-
- #性别检查
- curItemNeedSexReq = curItem.GetSexReq()
-
- if curItemNeedSexReq != ChConfig.Def_PlayerSex_All and curItemNeedSexReq != curPlayer.GetSex() :
- if needNotify:
- PlayerControl.NotifyCode(curPlayer, "SexErr")
-
- return False
-
- #等级检查
- if not CheckItemUseLV(curPlayer, curItem, needNotify):
- return False
-
- #=======================================================================
- # #马匹检查
- # if curItem.GetType() == ChConfig.Def_Item_Type_Horse and not CheckCanEquipHorse(curPlayer):
- # return False
- #=======================================================================
-
-
- return True
-
-
## 交换装备
# @param curItem 当前物品
# @param equipPackIndex 装备背包格子
@@ -827,76 +768,13 @@
#curEquip.SetItemStarLV(0) # 交换下的装备星级设置为0
return ItemCommon.SwitchItem(curPlayer, curEquip, curItem, IPY_GameWorld.rptEquip)
- return False
-
- # 计算装备的珍品数量
- def RefreshStartEquipCount(self):
-# curPlayer = self.__Player
-# count = 0
-# equipPack = self.__PlayerEquip
-# for i in xrange(equipPack.GetCount()):
-# curEquip = equipPack.GetAt(i)
-#
-# if curEquip.IsEmpty():
-# continue
-#
-# if not curEquip.GetItemQuality():
-# continue
-#
-# count += 1
-#
-# curPlayer.SetDict(ChConfig.Def_PlayerKey_StartEquipCnt, count)
- return
+ return False
def GetStartEquipCount(self):
return 0
#curPlayer = self.__Player
#return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StartEquipCnt)
- ## 装备当前物品
- # @param curItem 当前物品
- # @param equipPackIndex 客户端发来装备位置(IPY_GameWorld.retMax 代表服务器自动装备)
- # @return 替换的位置 -1表示替换失败
- def EquipItem(self, curItem, equipPackIndex):
- if not self.PlayerCanEquipItem(curItem, True):
- return -1
-
- classLV = ItemCommon.GetItemClassLV(curItem)
- equipPlace = curItem.GetEquipPlace()
-
- curPlayer = self.__Player
- equipPack = self.__PlayerEquip
- equipItem = equipPack.GetAt(equipPackIndex)
- if not equipItem:
- return -1
- desItemID, desUserData = [0, ''] if equipItem.IsEmpty() else [equipItem.GetItemTypeID(), equipItem.GetUserData()]
- srcItemID, srcUserData = curItem.GetItemTypeID(), curItem.GetUserData()
-
- befIsOrangeEquip = 1 if (not equipItem.IsEmpty() and equipItem.GetItemColor() >= ChConfig.Def_Quality_Orange) else 0
- aftIsOrangeEquip = 1 if curItem.GetItemColor() >= ChConfig.Def_Quality_Orange else 0
-
- #--其他装备物品---
- #itemColor = curItem.GetItemColor()
- result = self.SwitchEquip(curItem, equipPackIndex)
- if result:
- #换装宝石处理
- Operate_EquipStone.DoMoveEquipStone(curPlayer, equipPackIndex)
- dataDict = {'dotype':'EquipItem', 'desItemID':desItemID, 'desUserData':desUserData,'srcItemID':srcItemID,'srcUserData':srcUserData}
- DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
- self.__UpdEquipOrangeCount(befIsOrangeEquip, aftIsOrangeEquip)
-
- self.RefreshStartEquipCount()
- return equipPlace if result else -1
-
- def __UpdEquipOrangeCount(self, befIsOrangeEquip, aftIsOrangeEquip):
- #更新橙装数量
- curPlayer = self.__Player
- befEquipOrangeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_EquipOrangeCount)
- aftEquipOrangeCount = max(0, befEquipOrangeCount + aftIsOrangeEquip - befIsOrangeEquip)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_EquipOrangeCount, aftEquipOrangeCount)
- GameWorld.DebugLog("更新橙装及以上件数: befIsOrangeEquip=%s,aftIsOrangeEquip=%s,befEquipOrangeCount=%s,aftEquipOrangeCount=%s"
- % (befIsOrangeEquip, aftIsOrangeEquip, befEquipOrangeCount, aftEquipOrangeCount))
- return
## 替换可以叠加物品逻辑
# @param curEquip 当前装备
@@ -938,85 +816,6 @@
SetItemCount(curItem, sumValue - equipPackCount)
return True
-
- ## 卸载物品
- # @param equipIndex 装备索引
- # @param packIndex 背包索引
- # @return equipID , equipPlace
- # @remarks 函数详细说明.
- def UnEquipItem(self, equipIndex, packIndex):
- curPlayer = self.__Player
- equipItem = self.__PlayerEquip
- curEquip = equipItem.GetAt(equipIndex)
- #目标装备检查
- if curEquip == None or curEquip.IsEmpty():
- return
-
- equipID = curEquip.GetItemTypeID()
- userData = curEquip.GetUserData()
- equipPlace = curEquip.GetEquipPlace()
- suiteID = curEquip.GetSuiteID()
- itemClassLV = ItemCommon.GetItemClassLV(curEquip)
- #该物品锁定不执行==============================================
- if curEquip.GetIsLocked():
- PlayerControl.NotifyCode(curPlayer, "RescannotEquip")
- return
-
- if IsEventItem(curEquip):
- PlayerControl.NotifyCode(curPlayer, "TaskRes")
- return
-
- #物品栏背包
- curPack = self.__PlayerItemManager.GetPack(IPY_GameWorld.rptItem)
-
- if packIndex < 0 or packIndex >= curPack.GetCount():
- PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem])
- return
-
- curEquipCount = curEquip.GetCount()
-
- #装备为单数量物品无需遍历背包判定,以拖入的某个格子是否可以填充为判定 __CanDragItem
- #=======================================================================
- # if not self.CanPutInItem(IPY_GameWorld.rptItem, equipID, curEquipCount, curEquip.GetIsBind()):
- # #GameWorld.Log("玩家背包无法放入这个物品")
- # return
- #=======================================================================
-
- #设置物品激活状态为False
- #curEquip.SetIsSoulActive(False)
-# if curEquip.GetItemStarLV() != 0:
-# curEquip.SetItemStarLV(0) # 脱下的物品星级设置为0
-
- befIsOrangeEquip = 1 if curEquip.GetItemColor() >= ChConfig.Def_Quality_Orange else 0
- aftIsOrangeEquip = 0
-
- #背包物品放入仓库
- if not DragItem(curPlayer, IPY_GameWorld.rptEquip, equipIndex, IPY_GameWorld.rptItem, packIndex, curEquipCount):
- return
- self.RefreshStartEquipCount()
- self.__UpdEquipOrangeCount(befIsOrangeEquip, aftIsOrangeEquip)
-
- # 广播卸装
- if equipIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex:
- curPlayer.Sync_UnEquipItem(equipID, equipIndex)
- if suiteID and itemClassLV == ChEquip.GetEquipFacadeClassLV(curPlayer):
- #脱当前外观阶的套装
- ChEquip.ChangeEquipfacadeByClassLV(curPlayer, itemClassLV)
-
- dataDict = {'dotype':'UnEquipItem', 'equipID':equipID, 'userData':userData}
- DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
-#===============================================================================
-# #destItemPlace = 卸下物品的位置
-# destItemPlace = curPack.GetAt(packIndex)
-#
-# if destItemPlace == None or destItemPlace.IsEmpty() == 0:
-# #卸下目标不是空的
-# GameWorld.Log("卸下目标不是空的")
-# return
-#
-# destItemPlace.PutIn(curEquip)
-#===============================================================================
- return equipID, equipPlace, itemClassLV
#是否能放入物品(第几个物品栏, 物品序号, 放入的物品, 放入物品ID, 物品是否绑定)
#===============================================================================
@@ -1330,10 +1129,6 @@
itemNoteDict = ItemCommon.GetItemNoteDict(item, canPutinCount, packItemCount, canPutinCount)
ItemCommon.DR_GetItem(curPlayer, packIndex, eventName, itemNoteDict, addDict)
else:
- #可以放下
- if isEquip:
- self.CheckEquipAttr(packIndex, tagItem)
-
if tagItem.GetGameWorldItemType() == IPY_GameWorld.gwitRoleItem:
item.PutIn(tagItem)
elif tagItem.GetGameWorldItemType() == IPY_GameWorld.gwitSingleItem:
@@ -1354,27 +1149,6 @@
#放入东西
return putResult
- def CheckEquipAttr(self, packType, curItem):
- legendAttrIDCount = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
- legendAttrValueCount = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
-
- if legendAttrIDCount and legendAttrValueCount and legendAttrIDCount == legendAttrValueCount:
- return
-
- curPlayer = self.__Player
- legendAttrInfo = GetAddEquipLegendAttr(curItem, curPlayer)
- if not legendAttrInfo:
- return
-
- curPlayer = self.__Player
- srcScore = ItemCommon.GetEquipGearScore(curItem)
- SetEquipLegendAttr(curItem, legendAttrInfo)
- ItemCommon.MakeEquipGS(curItem)
- updScore = ItemCommon.GetEquipGearScore(curItem)
- GameWorld.DebugLog("传奇属性异常,重新刷新一次属性: packType=%s,itemID=%s,srcScore=%s,updScore=%s"
- % (packType, curItem.GetItemTypeID(), srcScore, updScore), curPlayer.GetPlayerID())
- return
-
## 是否能放入物品
# @param packIndex 背包索引
# @param curItemID 当前物品ID
@@ -1696,10 +1470,10 @@
## 背包整理
def ResetItem(curPlayer, packIndex, beingIndex, endIndex, tick):
-
+ # 卡牌约定后端不整理背包,由前端自行排序
#开始整理
- __DoResetItem(curPlayer, packIndex, beingIndex, endIndex, tick)
- curPlayer.Notify_PackResetOK()
+ #__DoResetItem(curPlayer, packIndex, beingIndex, endIndex, tick)
+ #curPlayer.Notify_PackResetOK()
return
@@ -2004,18 +1778,18 @@
posNum1, posNum2 = 0, 0
for lpIndex in range(item1.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
lineupValue = item1.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
- lineupID = lineupValue / 10000
+ lineupID, _, posNum = PlayerHero.GetLineupValue(lineupValue)
if lineupID != ShareDefine.Lineup_Main:
continue
- posNum1 = lineupValue % 100
+ posNum1 = posNum
break
for lpIndex in range(item2.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)):
lineupValue = item2.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
- lineupID = lineupValue / 10000
+ lineupID, _, posNum = PlayerHero.GetLineupValue(lineupValue)
if lineupID != ShareDefine.Lineup_Main:
continue
- posNum2 = lineupValue % 100
+ posNum2 = posNum
break
if (posNum1 and posNum2) or (not posNum1 and not posNum2):
@@ -2235,35 +2009,6 @@
return
-## 清除背包中的任务物品
-# @param curPlayer 当前玩家
-# @param packIndex 背包类型
-# @return None
-# @remarks 函数详细说明.
-def ClearPackEventItem(curPlayer , packIndex):
- curPack = curPlayer.GetItemManager().GetPack(packIndex)
- itemList = []
-
- for i in range(0, curPack.GetCount()):
- item = curPack.GetAt(i)
- #空物品
- if not item or item.IsEmpty():
- continue
-
- #不是任务物品
- if not IsEventItem(item):
- continue
-
- itemList.append(item)
-
- curPlayerID = curPlayer.GetID()
-
- for item in itemList:
- GameWorld.Log('###清空背包 = %s 中的任务物品 = %s' % (packIndex , item.GetItemTypeID()) , curPlayerID)
- item.Clear()
-
- return
-
def CheckGiveBindMoneyTypeItem(curPlayer, checkMoneyType=None):
## 检查给绑定货币的展示物品
bindMoneyItemInfo = IpyGameDataPY.GetFuncEvalCfg("PutInItemPack", 2, {})
@@ -2424,40 +2169,6 @@
if isAuctionItem:
curItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
return
-
- if not curPlayer:
- return
-
- if ItemCommon.GetIsEquip(curItem):
- legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
- legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
- if legendAttrIDCnt and legendAttrIDCnt == legendAttrValueCnt:
- legendAttrInfo = GetEquipLegendAttrGroup(curItem)
- #GameWorld.DebugLog("已经有传奇属性的拍品: %s" % str(legendAttrInfo))
- else:
- # 生成传奇属性
- legendAttrInfo = GetAddEquipLegendAttr(curItem, curPlayer)
- #GameWorld.DebugLog("重新生成传奇属性的拍品: %s" % str(legendAttrInfo))
- if not legendAttrInfo:
- return
-
- updateDict = {}
- if legendAttrInfo[0]:
- updateDict[ShareDefine.Def_IudetLegendAttrID] = legendAttrInfo[0]
- updateDict[ShareDefine.Def_IudetLegendAttrValue] = legendAttrInfo[1]
- if legendAttrInfo[2]:
- updateDict[ShareDefine.Def_IudetLegendAttrIDShen] = legendAttrInfo[2]
- updateDict[ShareDefine.Def_IudetLegendAttrValueShen] = legendAttrInfo[3]
- if legendAttrInfo[4]:
- updateDict[ShareDefine.Def_IudetLegendAttrIDXian] = legendAttrInfo[4]
- updateDict[ShareDefine.Def_IudetLegendAttrValueXian] = legendAttrInfo[5]
- if legendAttrInfo[6]:
- updateDict[ShareDefine.Def_IudetLegendAttrIDJi] = legendAttrInfo[6]
- updateDict[ShareDefine.Def_IudetLegendAttrValueJi] = legendAttrInfo[7]
-
- delKeyList = [ShareDefine.Def_IudetAuctionItemCreateTime]
- ItemCommon.UpdateItemUserData(curItem, updateDict, delKeyList, isUpdateGS=True)
-
return
def GetItemCountByID(curPlayer, itemID):
@@ -2518,45 +2229,6 @@
return True
return False
-## 双手武器,需要两只手才拿得动
-# @param curEquip
-# @return bool
-def IsTwoHandedWeapon(curEquip):
- return curEquip.IsBothHands() == ShareDefine.Def_Weapon_Two_Handed
-
-
-## 双持武器,左右手都可以拿得起来的武器
-# @param curEquip
-# @return bool
-def IsDualWeapons(curEquip):
- return curEquip.IsBothHands() == ShareDefine.Def_Weapon_Dual_Hands
-
-
-## 装备多位置装备处理
-# @param equipPack 当前装备背包
-# @param packEquipIndex 客户端发来装备位置(IPY_GameWorld.retMax 代表服务器自动装备)
-# @param placeList 可装备的位置列表
-# @return 装备位置
-def GetMultiPlaceEquipPlace(equipPack, packEquipIndex, placeList):
-
- #---客户端指定位置---
- if packEquipIndex in placeList:
- return packEquipIndex
-
- #---服务端判断空位置---
- for placeIndex in placeList:
- curEquip = equipPack.GetAt(placeIndex)
-
- if curEquip.IsEmpty():
- return placeIndex
-
- elif IsTwoHandedWeapon(curEquip):
- #武器特殊处理,双手直接交换
- return placeIndex
-
- #---无空位置,替换---
- return placeList[0]
-
def GetOutPutItemObj(itemID, itemCount=1, isAuctionItem=False, expireTime=0, curPlayer=None, setAttrDict=None):
''' 获取功能产出的物品实例
@param isAuctionItem: 是否拍品,默认非拍品
@@ -2569,198 +2241,6 @@
GameWorld.ErrLog("产出物品异常,无法创建物品 = %s" % (itemID))
return
return curItem
-
-def GetAddEquipLegendAttr(curItem, curPlayer, isAllAttr=False):
- '''获取生成到装备上的传奇属性
- @return: None 或者 [传奇属性效果ID列表], [属性值列表], [神ID], [神值], [仙ID], [仙值], [极ID], [极值]
- '''
-# if GetIsAuctionItem(curItem):
-# #GameWorld.DebugLog("拍品无法生成传奇属性!")
-# return
- itemID = curItem.GetItemTypeID()
- itemType = curItem.GetType()
- itemColor = curItem.GetItemColor()
- itemQuality = curItem.GetItemQuality()
- isSuit = 1 if curItem.GetSuiteID() else 0
-
- ipyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipShenAttr", itemID)
- if ipyData:
- return ipyData.GetLegendAttrIDList(), ipyData.GetLegendAttrValueList(), \
- ipyData.GetShenAttrIDList(), ipyData.GetShenAttrValueList(), \
- ipyData.GetXianAttrIDList(), ipyData.GetXianAttrValueList(), \
- ipyData.GetJiAttrIDList(), ipyData.GetJiAttrValueList()
-
- # 1. 定条数
- attrCountIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipLegendAttrCount", itemType, itemColor, isSuit, itemQuality)
- if not attrCountIpyData:
- if itemColor >= ChConfig.Def_Quality_Purple:
- GameWorld.DebugLog("该装备没有传奇属性: itemID=%s" % (itemID))
- return
- legendAttrCountInfoList = attrCountIpyData.GetLegendAttrCountInfo() # 传奇属性条数信息 [[条数, [属性类型库编号, ...]], ...]
- if not legendAttrCountInfoList:
- return
-
- if curPlayer:
- playerID, playerLV = curPlayer.GetPlayerID(), curPlayer.GetLV()
- else:
- playerID = 0
- playerLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
- GameWorld.Log("生成装备传奇属性时没有玩家等级, 取当前世界等级! itemID=%s,worldLV=%s" % (itemID, playerLV))
-
- # 2. 定属性ID
- attrTypeIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrType", itemType)
- if not attrTypeIpyData:
- return
- legendAttrTypeLibDict = attrTypeIpyData.GetLegendAttrTypeLib() # 传奇属性类型库 {属性类型库编号:[属性ID,...], ...}
-
- curLegAttrIDList = []
- curLegAttrValueList = []
- itemClassLV = ItemCommon.GetItemClassLV(curItem)
- if isAllAttr:
- if curPlayer.GetGMLevel() != 90:
- return
- for attrIDList in legendAttrTypeLibDict.values():
- curLegAttrIDList += attrIDList
- #GameWorld.DebugLog("所有传奇属性: %s" % (curLegAttrIDList), playerID)
- else:
- #GameWorld.DebugLog("随机传奇属性: itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s"
- # % (itemID, itemType, itemClassLV, itemColor, isSuit), playerID)
- for attrCount, libNumList in legendAttrCountInfoList:
- attrIDList = []
- for libNum in libNumList:
- attrIDList.extend(legendAttrTypeLibDict.get(libNum, []))
- for curAttrID in curLegAttrIDList:
- if curAttrID in attrIDList:
- attrIDList.remove(curAttrID)
- if len(attrIDList) < attrCount:
- GameWorld.ErrLog("装备传奇属性ID库配置不够条数随机!itemID=%s,itemType=%s,legendAttrCountInfoList=%s,legendAttrTypeLibDict=%s"
- % (itemID, itemType, legendAttrCountInfoList, legendAttrTypeLibDict), playerID)
- return
- curLegAttrIDList += random.sample(attrIDList, attrCount)
- #GameWorld.DebugLog(" 随机传奇属性: attrCount=%s,libNumList=%s,attrIDList=%s,curLegAttrIDList=%s"
- # % (attrCount, libNumList, attrIDList, curLegAttrIDList), playerID)
-
- # 3. 定数值
- attrValueIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrValue", itemType, itemClassLV, itemColor, isSuit, itemQuality)
- if not attrValueIpyData:
- GameWorld.ErrLog("传奇属性等级数值表找不到配置!itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s,itemQuality=%s"
- % (itemID, itemType, itemClassLV, itemColor, isSuit, itemQuality), playerID)
- return
-
- attrLVLibNumDict = attrValueIpyData.GetLVLegendAttrLibNumInfo() # {属性ID:{等级:库编号, ...}}
- for attrID in curLegAttrIDList:
- if attrID not in attrLVLibNumDict:
- GameWorld.ErrLog("传奇属性等级数值表没有配置属性ID对应等级库编号!itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s,attrID=%s"
- % (itemID, itemType, itemClassLV, itemColor, isSuit, attrID), playerID)
- return
- curLibNum = None
- lvAttrLibList = attrLVLibNumDict[attrID]
- for lv, libNum in lvAttrLibList:
- if playerLV <= lv:
- curLibNum = libNum
- break
- if curLibNum == None:
- GameWorld.ErrLog("传奇属性等级数值表找不到属性ID对应等级库编号!itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s,attrID=%s,playerLV=%s"
- % (itemID, itemType, itemClassLV, itemColor, isSuit, attrID, playerLV), playerID)
- return
- attrLibIpyData = attrValueIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrLib", attrID)
- if not attrLibIpyData:
- GameWorld.ErrLog("传奇属性库不存在传奇属性ID配置!itemID=%s,attrID=%s" % (itemID, attrID), playerID)
- return
- attrLibDict = attrLibIpyData.GetLegendAttrLib() # {库编号:[随机数值, ...], ...}
- if curLibNum not in attrLibDict:
- GameWorld.ErrLog("传奇属性库编号不存在!itemID=%s,attrID=%s,curLibNum=%s" % (itemID, attrID, curLibNum), playerID)
- return
- valueList = attrLibDict[curLibNum]
- attrValue = random.choice(valueList)
- curLegAttrValueList.append(attrValue)
- #GameWorld.DebugLog(" 随机属性: attrID=%s,attrValue=%s,playerLV=%s,curLibNum=%s,valueList=%s"
- # % (attrID, attrValue, playerLV, curLibNum, valueList), playerID)
- return curLegAttrIDList, curLegAttrValueList, [], [], [], [], [], []
-
-def GetEquipLegendAttrAll(curItem):
- ## 获取装备传奇属性 - 所有分组合并返回
- legendAttrInfo = GetEquipLegendAttrGroup(curItem)
- legAttrIDList = legendAttrInfo[0] + legendAttrInfo[2] + legendAttrInfo[4] + legendAttrInfo[6]
- legAttrValueList = legendAttrInfo[1] + legendAttrInfo[3] + legendAttrInfo[5] + legendAttrInfo[7]
- return legAttrIDList, legAttrValueList
-
-def GetEquipLegendAttrGroup(curItem):
- ## 获取装备传奇属性 - 按类型分组返回
-
- legAttrIDList, legAttrValueList = [], []
- legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
- legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
- if legendAttrIDCnt == legendAttrValueCnt:
- for i in xrange(legendAttrIDCnt):
- legAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i))
- legAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i))
-
- shenAttrIDList, shenAttrValueList = [], []
- shenAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDShen)
- shenAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueShen)
- if shenAttrIDCnt == shenAttrValueCnt:
- for i in xrange(shenAttrIDCnt):
- shenAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDShen, i))
- shenAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueShen, i))
-
- xianAttrIDList, xianAttrValueList = [], []
- xianAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDXian)
- xianAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueXian)
- if xianAttrIDCnt == xianAttrValueCnt:
- for i in xrange(xianAttrIDCnt):
- xianAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDXian, i))
- xianAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueXian, i))
-
- jiAttrIDList, jiAttrValueList = [], []
- jiAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDJi)
- jiAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueJi)
- if jiAttrIDCnt == jiAttrValueCnt:
- for i in xrange(jiAttrIDCnt):
- jiAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDJi, i))
- jiAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueJi, i))
-
- return legAttrIDList, legAttrValueList, shenAttrIDList, shenAttrValueList, xianAttrIDList, xianAttrValueList, jiAttrIDList, jiAttrValueList
-
-def SetEquipLegendAttr(curItem, legendAttrInfo):
- ## 设置装备传奇属性
-
- legAttrIDList, legAttrValueList, shenAttrIDList, shenAttrValueList, \
- xianAttrIDList, xianAttrValueList, jiAttrIDList, jiAttrValueList = legendAttrInfo
-
- # 普通传奇属性
- if legAttrIDList and legAttrValueList and len(legAttrIDList) == len(legAttrValueList):
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
- for i in xrange(len(legAttrIDList)):
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, legAttrIDList[i])
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, legAttrValueList[i])
-
- # 神 传奇属性
- if shenAttrIDList and shenAttrValueList and len(shenAttrIDList) == len(shenAttrValueList):
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDShen)
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueShen)
- for i in xrange(len(shenAttrIDList)):
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDShen, shenAttrIDList[i])
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueShen, shenAttrValueList[i])
-
- # 仙 传奇属性
- if xianAttrIDList and xianAttrValueList and len(xianAttrIDList) == len(xianAttrValueList):
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDXian)
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueXian)
- for i in xrange(len(xianAttrIDList)):
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDXian, xianAttrIDList[i])
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueXian, xianAttrValueList[i])
-
- # 极 传奇属性
- if jiAttrIDList and jiAttrValueList and len(jiAttrIDList) == len(jiAttrValueList):
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDJi)
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueJi)
- for i in xrange(len(jiAttrIDList)):
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDJi, jiAttrIDList[i])
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueJi, jiAttrValueList[i])
-
- return
##创建物品所需的动态数据
#
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index 850d19e..c694aee 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -479,9 +479,9 @@
else:
attrProportion = placeIpyData.GetBaseAttrProportion()
attrInfoList = [
- [ShareDefine.Def_Effect_Atk, colorIpyData.GetAtkStep()],
- [ShareDefine.Def_Effect_Def, colorIpyData.GetDefStep()],
- [ShareDefine.Def_Effect_MaxHP, colorIpyData.GetHPStep()],
+ [ChConfig.AttrID_Atk, colorIpyData.GetAtkStep()],
+ [ChConfig.AttrID_Def, colorIpyData.GetDefStep()],
+ [ChConfig.AttrID_MaxHP, colorIpyData.GetHPStep()],
]
baseAttrIDList, baseAttrValueList = [], []
for attrID, attrStep in attrInfoList:
@@ -550,182 +550,8 @@
curItem.SetUserData(UserData, len(UserData))
return
-def UpdateItemUserData(curItem, updateDict={}, delKeyList=[], isUpdateGS=False):
- ''' 更新物品UserData数据
- @param curItem: IPY_SingleItem 或 IPY_RoleItem
- @param updateDict: 需要更新的数据 {key:value, key:valueList, ...}
- @param delKeyList: 需要删除的数据 key列表[key, ...]
- @param isUpdateGS: 是否更新评分
- @note: UserData格式举例 {'17':['65','7','52'],'50':['0'],'19':['420','380','50'],'50':['1552728662']}
- '''
-
- isRoleItem = False
- if not hasattr(curItem, "SetUserData"):
- item = curItem.GetItem()
- isRoleItem = True
- else:
- item = curItem
- userData = item.GetUserData()
- if not userData:
- userDataDict = {}
- else:
- userDataDict = eval(userData)
-
- for delKey in delKeyList:
- userDataDict.pop(str(delKey), None)
-
- for key, value in updateDict.items():
- if type(value) == int:
- valueList = ['%s' % value]
- elif type(value) == list:
- valueList = ['%s' % v for v in value]
- else:
- continue
- userDataDict['%s' % key] = valueList
-
- SetItemUserData(item, userDataDict)
- if isUpdateGS:
- MakeEquipGS(curItem)
- elif isRoleItem:
- curItem.SetCount(curItem.GetCount()) # 为了触发物品同步
- return
-
def MakeEquipGS(curItem):
- if not CheckNoteEquipGS(curItem):
- #GameWorld.DebugLog("不设置装备评分")
- return
- value = CalcEquipGS(curItem)
- #GameWorld.DebugLog("设置装备评分: ItemID=%s,attrDict=%s,value=%s" % (curItem.GetItemTypeID(), attrDict, value))
- SetEquipGearScore(curItem, value)
return
-
-def CalcEquipGS(curItem):
- '''计算装备评分
- 评分组成:装备基础 + 传奇属性
- '''
- if not CheckNoteEquipGS(curItem):
- #GameWorld.DebugLog("不设置装备评分")
- return 0
-
- attrDict = {}
- #基础属性效果
- for i in xrange(curItem.GetEffectCount()):
- curEffect = curItem.GetEffectByIndex(i)
- if not curEffect:
- break
- effectID = curEffect.GetEffectID()
- if effectID == 0:
- break
- attrDict[effectID] = attrDict.get(effectID, 0) + curEffect.GetEffectValue(0)
-
- gsValueEx = 0
- skillGSDict = IpyGameDataPY.GetFuncCfg("EquipGSFormula", 4)
- itemSkillIDList = GetItemSkillIDList(curItem)
- for addSkillID in itemSkillIDList:
- gsValueEx += skillGSDict.get(str(addSkillID), 0)
-
- itemID = curItem.GetItemTypeID()
- classLV = GetItemClassLV(curItem)
- color = curItem.GetItemColor()
- itemQuality = curItem.GetItemQuality()
- isSuit = 1 if curItem.GetSuiteID() > 0 else 0
- gsParamIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipGSParam", classLV, color, isSuit, itemQuality)
- # 传奇属性
- legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curItem)
- for i, legendAttrID in enumerate(legAttrIDList):
- legendAttrValue = legAttrValueList[i]
- attrDict[legendAttrID] = attrDict.get(legendAttrID, 0) + legendAttrValue
-
- lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID)
- if lingQiIpyData:
- gsValueEx += lingQiIpyData.GetLingQiAttrScore()
-
- Atk = attrDict.get(ShareDefine.Def_Effect_Atk, 0)
- MinAtk = attrDict.get(ShareDefine.Def_Effect_MinAtk, 0) + Atk
- MaxAtk = attrDict.get(ShareDefine.Def_Effect_MaxAtk, 0) + Atk
- MaxHP = attrDict.get(ShareDefine.Def_Effect_MaxHP, 0)
- Def = attrDict.get(ShareDefine.Def_Effect_Def, 0)
- ArmorDefPer = 0
- IceAtk = attrDict.get(ShareDefine.Def_Effect_IceAtk, 0)
- IceDef = attrDict.get(ShareDefine.Def_Effect_IceDef, 0)
- FabaoHurt = attrDict.get(ShareDefine.Def_Effect_FabaoHurt, 0)
- AtkBackHP = attrDict.get(ShareDefine.Def_Effect_AtkBackHP, 0)
-
- FinalHurt = attrDict.get(ShareDefine.Def_Effect_FinalHurt, 0)
- FinalHurtReduce = attrDict.get(ShareDefine.Def_Effect_FinalHurtReduce, 0)
-
- BaseEquipMaxHPAddPer = attrDict.get(ShareDefine.Def_Effect_BaseEquipMaxHPAddPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetBaseEquipMaxHPAddPerC())
- BaseEquipAtkAddPer = attrDict.get(ShareDefine.Def_Effect_BaseEquipAtkAddPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetBaseEquipAtkAddPerC())
- AtkPer = attrDict.get(ShareDefine.Def_Effect_AddAtkByPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetAtkPerC())
- DamagePer = 0#attrDict.get(ShareDefine.Def_Effect_DamagePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamagePerC())
- SuperHitRate = attrDict.get(ShareDefine.Def_Effect_SuperHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitRateC())
- SuperHit = attrDict.get(ShareDefine.Def_Effect_SuperHit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitC())
- SuperHitPer = attrDict.get(ShareDefine.Def_Effect_SuperHitPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitPerC())
- DamReducePer = 0#attrDict.get(ShareDefine.Def_Effect_DamReducePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamReducePerC())
- MaxHPPer = attrDict.get(ShareDefine.Def_Effect_MaxHPPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMaxHPPerC())
- DefPer = 0#attrDict.get(ShareDefine.Def_Effect_DefPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDefPerC())
- LuckyHitRate = attrDict.get(ShareDefine.Def_Effect_LuckyHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitRateC())
- LuckyHitRateReduce = attrDict.get(ShareDefine.Def_Effect_LuckyHitRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitRateReduceC())
- LuckyHitPer = attrDict.get(ShareDefine.Def_Effect_LuckyHitPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitPerC())
- LuckyHit = attrDict.get(ShareDefine.Def_Effect_LuckyHit, 0)
- LuckyHitReduce = attrDict.get(ShareDefine.Def_Effect_LuckyHitReduce, 0)
- LuckPer = attrDict.get(ShareDefine.Def_Effect_LuckPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckPerC())
- PetDamPer = attrDict.get(ShareDefine.Def_Effect_PetDamPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPetDamPerC())
- PerLVAtk = attrDict.get(ShareDefine.Def_Effect_PerLVAtk, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPerLVAtkC())
- MissRate = 0#attrDict.get(ShareDefine.Def_Effect_MissRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissRateC())
- HitRate = 0#attrDict.get(ShareDefine.Def_Effect_HitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitRateC())
- DamBackPer = 0#attrDict.get(ShareDefine.Def_Effect_DamBackPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamBackPerC())
- PerLVMaxHP = attrDict.get(ShareDefine.Def_Effect_PerLVMaxHP, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPerLVMaxHPC())
- DropEquipPer = attrDict.get(ShareDefine.Def_Effect_DropEquipPer, 0)# * (1 if not gsParamIpyData else gsParamIpyData.GetDropEquipPerC())
- DropMoneyPer = attrDict.get(ShareDefine.Def_Effect_DropMoneyPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDropMoneyPerC())
- IgnoreDefRateReduce = 0#attrDict.get(ShareDefine.Def_Effect_IgnoreDefRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateReduceC())
- DamChanceDef = 0#attrDict.get(ShareDefine.Def_Effect_DamChanceDef, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamChanceDefC())
- SuperHitReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitReduceC())
- SuperHitRateReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitRateReduceC())
- SkillAtkRate = attrDict.get(ShareDefine.Def_Effect_SkillAtkRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateC())
- SpeedPer = 0#attrDict.get(ShareDefine.Def_Effect_SpeedPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSpeedPerC())
- SkillAtkRateReduce = attrDict.get(ShareDefine.Def_Effect_SkillAtkRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateReduceC())
- Hit = attrDict.get(ShareDefine.Def_Effect_Hit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitC())
- Miss = attrDict.get(ShareDefine.Def_Effect_Miss, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissC())
- SkillAddPerA = attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
- SkillAddPerB = attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
- SkillAddPerC = attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
- SkillAddPerD = attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
- SkillAddPerE = attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
- SkillAddPerF = attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
- SkillAddPerG = attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
- SkillReducePerA = attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
- SkillReducePerB = attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
- SkillReducePerC = attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
- SkillReducePerD = attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
- SkillReducePerE = attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
- SkillReducePerF = attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
- SkillReducePerG = attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
-
- ReduceSkillCDPer = attrDict.get(ShareDefine.Def_Effect_ReduceSkillCDPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetReduceSkillCDPerC())
-
- FaintDefRate = attrDict.get(ShareDefine.Def_Effect_FaintDefRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFaintDefRateC())
-
- IgnoreDefRate = attrDict.get(ShareDefine.Def_Effect_IgnoreDefRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateC())
- IgnoreDefRateReduce = attrDict.get(ShareDefine.Def_Effect_IgnoreDefRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateReduceC())
- ProDefPer = attrDict.get(ShareDefine.Def_Effect_ProDefHPPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetProDefPerC())
- FinalHurtPerC = attrDict.get(ShareDefine.Def_Effect_FinalHurtPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFinalHurtPerC())
- FinalHurtReducePerC = attrDict.get(ShareDefine.Def_Effect_FinalHurtReducePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetFinalHurtReducePerC())
-
- # 攻速不默认乘,仅作为参数提供策划使用
- AtkSpeed = 0#attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
- AtkSpeedC = 1#1 if not gsParamIpyData else gsParamIpyData.GetAtkSpeedC()
-
- OnlyFinalHurt = attrDict.get(ShareDefine.Def_Effect_OnlyFinalHurt, 0)
- PVPAtkBackHP = attrDict.get(ShareDefine.Def_Effect_PVPAtkBackHP, 0)
-
- if GetIsDogzEquip(curItem):
- # 神兽装备用不同公式
- value = eval(FormulaControl.GetCompileFormula("EquipGSFormula3", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 3)))
- else:
- value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
- value += gsValueEx
- return value
#---------------------------------------------------------------------
## 通过效果ID,检查是否为指定物品
@@ -1293,13 +1119,7 @@
return True
def CheckNoteEquipGS(curItem):
- if not CheckItemCanUse(curItem):
- return False
-
- if curItem.GetType() not in IpyGameDataPY.GetFuncEvalCfg("EquipGSTypeForSort", 1):
- return False
-
- return True
+ return False
#---------------------------------------------------------------------
## 通过背包查找指定效果ID的指定数量物品
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py
index e94c51f..829e069 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddExp.py
@@ -49,7 +49,7 @@
confLV = curEff.GetEffectValue(1) #等级限制当=0为不限制等级
reLV = min(confLV, curLV) if confLV else curLV
- lvIpyData = PlayerControl.GetPlayerLVIpyData(reLV)
+ lvIpyData = None #PlayerControl.GetPlayerLVIpyData(reLV)
if not lvIpyData:
return
giveExp = int(lvIpyData.GetReExp() * expPer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 017176d..8b29dc8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -232,7 +232,7 @@
if "LV" in npcFBAttrDict:
strengthenLV = npcFBAttrDict["LV"]
- attrDict = GetNPCStrengthenAttrDict(npcID, strengthenLV, strengthenPlayerCnt, strengthenIpyData)
+ attrDict = {} #GetNPCStrengthenAttrDict(npcID, strengthenLV, strengthenPlayerCnt, strengthenIpyData)
attrDict.update(npcFBAttrDict) # 如果副本有指定属性,则以副本为主
if not attrDict:
return
@@ -320,130 +320,6 @@
for skillID in skillIDList:
skillManager.LearnSkillByID(skillID)
return
-
-def GetNPCStrengthenAttrDict(npcID, strengthenLV=0, strengthenPlayerCnt=0, strengthenIpyData=None):
- if not strengthenLV and not strengthenPlayerCnt:
- return {}
- npcData = GameWorld.GetGameData().FindNPCDataByID(npcID)
- if not npcData:
- return {}
-
- attrStrengthenInfo = ReadChConfig.GetEvalChConfig("NPCAttrStrengthen")
- if not attrStrengthenInfo:
- return {}
-
- attrDict = {}
- paramDict = attrStrengthenInfo[NPCAttr_ParamDict] # 过程参数公式字典
- attrStrengthenDict = attrStrengthenInfo[NPCAttr_AttrStrengthenList] # 属性成长公式字典
- playerCntCoefficient = attrStrengthenInfo[NPCAttr_PlayerCntCoefficient] # 人数系数
- npcIDPlayerCntCoefficient = attrStrengthenInfo[NPCAttr_NPCPlayerCntCoefficient] # 特殊NPC人数系数
- baseMaxHP = GameObj.GetHP(npcData) # NPCData 没有提供Max接口,对应使用GetHP
-
- if strengthenLV:
- if not strengthenIpyData:
- strengthenIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCStrengthen", npcID)
- if not strengthenIpyData:
- return {}
-
- playerCurLVIpyData = PlayerControl.GetPlayerLVIpyData(strengthenLV) # 取增强怪物等级对应此等级的玩家参考属性值
- if not playerCurLVIpyData:
- return {}
-
- # NPC表可用参数
- SkillAtkRate = GetSkillAtkRate(npcData) # 技能伤害
- FinalHurt = GetFinalHurt(npcData)
-
- # 参考玩家属性参数
- ReMaxHP = playerCurLVIpyData.GetReMaxHP() # 最大生命值
- ReAtk = playerCurLVIpyData.GetReAtk() # 攻击(最小、最大攻击)
- ReDef = playerCurLVIpyData.GetReDef() # 防御
- ReHit = playerCurLVIpyData.GetReHit() # 命中
- ReMiss = playerCurLVIpyData.GetReMiss() # 闪避
- ReAtkSpeed = playerCurLVIpyData.GetReAtkSpeed() # 攻击速度
- ReSkillAtkRate = playerCurLVIpyData.GetReSkillAtkRate() # 技能伤害比例
- ReDamagePer = playerCurLVIpyData.GetReDamagePer() # 增加伤害
- ReDamReduce = playerCurLVIpyData.GetReDamReduce() # 减少伤害
- ReIgnoreDefRate = playerCurLVIpyData.GetReIgnoreDefRate() # 无视防御比例
- ReLuckyHitRate = playerCurLVIpyData.GetReLuckyHitRate() # 会心一击率
- ReLuckyHit = playerCurLVIpyData.GetReLuckyHit() # 会心一击伤害
- ReBleedDamage = playerCurLVIpyData.GetReBleedDamage() # 流血伤害增加
- ReIceAtk = playerCurLVIpyData.GetReIceAtk() # 真实伤害
- ReIceDef = playerCurLVIpyData.GetReIceDef() # 真实抵御
- RePetAtk = playerCurLVIpyData.GetRePetAtk() # 灵宠攻击
- RePetSkillAtkRate = playerCurLVIpyData.GetRePetSkillAtkRate() # 灵宠技能
- RePetDamPer = playerCurLVIpyData.GetRePetDamPer() # 灵宠伤害增加
- ReFinalHurt = playerCurLVIpyData.GetReFinalHurt() # 固定伤害增加
- ReFinalHurtReduce = playerCurLVIpyData.GetReFinalHurtReduce() # 固定伤害减少
- RePotionReply = playerCurLVIpyData.GetRePotionReply() # 血瓶恢复量
- RePotionCD = playerCurLVIpyData.GetRePotionCD() # 血瓶CD
- ReFightPower = playerCurLVIpyData.GetReFightPower() # 战斗力
-
- # 增加NPC属性参数
- HitTime = strengthenIpyData.GetHitTime() # 怪物受击次数
- DefCoefficient = strengthenIpyData.GetDefCoefficient() # 人物防御系数
- AtkCoefficient = strengthenIpyData.GetAtkCoefficient() # 人物攻击系数
- AdjustCoefficient = strengthenIpyData.GetAdjustCoefficient() # 调整系数比例
- AtkInterval = strengthenIpyData.GetAtkInterval() # 怪物攻击间隔
- HitRate = strengthenIpyData.GetHitRate() # 对人物的命中率
- MissRate = strengthenIpyData.GetMissRate() # 对人物的闪避率
- MonterNum = strengthenIpyData.GetMonterNum() # 怪物数
- IceAtkCoefficient = strengthenIpyData.GetIceAtkCoefficient() # 元素攻击比例
- IceDefCoefficient = strengthenIpyData.GetIceDefCoefficient() # 元素抗性比例
- MaxEnduranceTime = strengthenIpyData.GetMaxEnduranceTime() # 玩家最大承受伤害时间
- FightPowerCoefficient = strengthenIpyData.GetFightPowerCoefficient() # 压制战斗力系数
-
- # 过程参数
- AtkReplyCoefficient = eval(FormulaControl.GetCompileFormula("NPCParam_AtkReplyCoefficient",
- paramDict["AtkReplyCoefficient"])) # 怪物攻击回复调整值
- MonterHurt = eval(FormulaControl.GetCompileFormula("NPCParam_MonterHurt", paramDict["MonterHurt"])) # 怪物固定伤害
- LostHPPerSecond = eval(FormulaControl.GetCompileFormula("NPCParam_LostHPPerSecond", paramDict["LostHPPerSecond"])) # 玩家每秒掉血量
- LVStrengthenMark = strengthenIpyData.GetLVStrengthenMark()
- attrStrengthenList = attrStrengthenDict.get(LVStrengthenMark, [])
- for attrKey, strengthenFormat in attrStrengthenList:
- strengthenValue = int(eval(FormulaControl.GetCompileFormula("NPCStrengthen_%s_%s" % (attrKey,LVStrengthenMark), strengthenFormat)))
- #GameWorld.DebugLog(" %s=%s" % (attrKey, strengthenValue))
- locals()[attrKey] = strengthenValue # 创建该属性局部变量作为参数提供给后面属性计算时用
- attrDict[attrKey] = strengthenValue
-
- # 当战力系数为0时,NPC战力默认为NPC表压制战力
- if FightPowerCoefficient:
- attrDict["FightPower"] = int(ReFightPower * FightPowerCoefficient / 10000.0)
-
- if strengthenPlayerCnt:
- mapID = GameWorld.GetMap().GetMapID()
- dataMapID = FBCommon.GetRecordMapID(mapID)
- formulaKey = "MapCoefficient_%s" % mapID
- playerCntAttrCoefficient = playerCntCoefficient.get(mapID, {})
- if not playerCntAttrCoefficient and dataMapID in playerCntCoefficient:
- playerCntAttrCoefficient = playerCntCoefficient[dataMapID]
- formulaKey = "MapCoefficient_%s" % dataMapID
- if npcID in npcIDPlayerCntCoefficient:
- playerCntAttrCoefficient = npcIDPlayerCntCoefficient[npcID]
- formulaKey = "NPCCoefficient_%s" % npcID
- for attrKey, coefficientDict in playerCntAttrCoefficient.items():
- if attrKey in attrDict:
- attrValue = attrDict[attrKey]
- elif attrKey == "MaxHP":
- attrValue = baseMaxHP
- else:
- attrFuncName = "Get%s" % attrKey
- if not hasattr(npcData, attrFuncName):
- continue
- attrValue = getattr(npcData, attrFuncName)()
- # 按字典配置
- if isinstance(coefficientDict, dict):
- coefficient = GameWorld.GetDictValueByRangeKey(coefficientDict, strengthenPlayerCnt, 1)
- # 按公式配置
- elif isinstance(coefficientDict, str):
- formulaKey = "%s_%s" % (formulaKey, attrKey)
- coefficient = eval(FormulaControl.GetCompileFormula(formulaKey, coefficientDict))
- else:
- coefficient = 1
- attrDict[attrKey] = int(attrValue * coefficient)
-
- #GameWorld.DebugLog("计算NPC属性成长: npcID=%s,strengthenLV=%s,strengthenPlayerCnt=%s,baseMaxHP=%s,attrDict=%s"
- # % (npcID, strengthenLV, strengthenPlayerCnt, baseMaxHP, attrDict))
- return attrDict
def GiveKillNPCDropPrize(curPlayer, mapID, npcCountDict, exp_rate=None, mailTypeKey=None, isMail=False,
extraItemList=[], prizeMultiple=1, dropItemMapInfo=[], curGrade=0, isVirtualDrop=False):
@@ -1836,8 +1712,8 @@
addAngry += useSkill.GetSkillAngry()
# 玩家攻击增加额外仇恨
- if objDetel.GetGameObjType() == IPY_GameWorld.gotPlayer:
- addAngry += PlayerControl.GetAddAngry(objDetel)
+ #if objDetel.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ # addAngry += PlayerControl.GetAddAngry(objDetel)
self.AddObjToAngryList(objDetel, addAngry)
return
@@ -2726,19 +2602,6 @@
curNPC.SetMaxAtk(heroAttrDict.get(ShareDefine.Def_Effect_Atk, 1))
curNPC.SetDef(heroAttrDict.get(ShareDefine.Def_Effect_Def, 1))
GameObj.SetMaxHP(curNPC, heroAttrDict.get(ShareDefine.Def_Effect_MaxHP, 1))
-
- #GameObj.SetMissRate(curNPC, npcDataEx.GetMissRate())
- #GameObj.SetMissDefRate(curNPC, npcDataEx.GetMissDefRate())
- #GameObj.SetSuperHitRate(curNPC, npcDataEx.GetSuperHitRate())
- #GameObj.SetSuperHitRateReduce(curNPC, npcDataEx.GetSuperHitRateReduce())
- #GameObj.SetFaintRate(curNPC, npcDataEx.GetFaintRate())
- #GameObj.SetFaintDefRate(curNPC, npcDataEx.GetFaintDefRate())
- #GameObj.SetComboRate(curNPC, npcDataEx.GetComboRate())
- #GameObj.SetComboDefRate(curNPC, npcDataEx.GetComboDefRate())
- #GameObj.SetAtkBackRate(curNPC, npcDataEx.GetAtkBackRate())
- #GameObj.SetAtkBackDefRate(curNPC, npcDataEx.GetAtkBackDefRate())
- #GameObj.SetSuckHPPer(curNPC, npcDataEx.GetSuckHPPer())
- #GameObj.SetSuckHPDefPer(curNPC, npcDataEx.GetSuckHPDefPer())
return
## 刷新NPC属性
@@ -3232,7 +3095,7 @@
PlayerVip.DoAddVIPKillLVExp(lastHurtPlayer, GetNPCLV(curNPC))
# SP值
- PlayerControl.AddZhenQiByKillNPC(lastHurtPlayer, curNPC.GetSP())
+ #PlayerControl.AddZhenQiByKillNPC(lastHurtPlayer, curNPC.GetSP())
return
#---------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 9c84d58..c82f489 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -38,7 +38,6 @@
import PlayerGameWallow
import NetPackCommon
import ChPyNetSendPack
-import Operate_PlayerBuyZhenQi
import DataRecordPack
import PlayerBillboard
import UpdatePlayerName
@@ -51,7 +50,6 @@
import PlayerFamily
import PlayerLoginDayAward
import PlayerGodWeapon
-import PlayerWorldAverageLv
import PlayerGoldInvest
import PlayerActivity
import FBCommon
@@ -62,7 +60,6 @@
import PlayerDienstgrad
import PlayerFreeGoods
import PlayerRecover
-import GameLogic_IceLode
import GameLogic_SkyTower
import PlayerEquipDecompose
import PlayerGreatMaster
@@ -200,6 +197,7 @@
#@return 返回值无意义
#@remarks 玩家登陆游戏初始化
def InitLoginPlayer(curPlayer, tick):
+ PlayerOnline.OnPlayerLogin(curPlayer)
#初始化玩家的时钟个数
if curPlayer.GetTickTypeCount() == 0:
curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count)
@@ -509,7 +507,6 @@
if PlayerControl.GetCrossMapID(curPlayer):
PlayerControl.SetCrossMapID(curPlayer, 0)
- PlayerOnline.OnPlayerLogin(curPlayer)
TurnAttack.OnPlayerLogin(curPlayer)
SyncGuideState(curPlayer)
@@ -531,9 +528,6 @@
#通知玩家的buff
__Sync_ClientBuff(curPlayer)
-
- #初始化现实时间物品
- InitRealityTimeItem(curPlayer, tick)
#---刷新了玩家属性, 登陆只刷新一次,其他地方不用刷
DoPlayerLoginInMap(curPlayer, tick)
@@ -563,9 +557,6 @@
#PK模式
SyncPKModel(curPlayer)
-
- #装备相关信息
- ChEquip.OnPlayerEquipLoginLogic(curPlayer)
#大师
PlayerGreatMaster.MasterOnLogin(curPlayer)
@@ -580,9 +571,6 @@
PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
PlayerPet.OnPlayerPetLogin(curPlayer)
- #清空玩家万能背包中的任务物品
- ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere)
-
#PlayerLoginNotify(curPlayer, tick)
#防沉迷计算下线累积时间
@@ -595,9 +583,6 @@
# 首充/天天首充/充值豪礼
PlayerGoldGift.OnLogin(curPlayer)
- #通知购买功能中各购买类型的已购买和可购买次数
- Operate_PlayerBuyZhenQi.DoPlayerLogin(curPlayer)
-#
# #通知功能首次触发情况
GameFuncComm.Sync_FuncOpenState(curPlayer)
#
@@ -646,9 +631,6 @@
# 副本进入时间
FBCommon.FBOnLogin(curPlayer)
-
- #世界等级
- PlayerWorldAverageLv.OnLogin(curPlayer)
# 投资理财
PlayerGoldInvest.OnLogin(curPlayer)
@@ -928,19 +910,19 @@
#---补满血满魔---
GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer))
- curPlayer.SetMP(curPlayer.GetMaxMP())
+ #curPlayer.SetMP(curPlayer.GetMaxMP())
#默认触发一次功能开启
if curPlayer.GetLV() == 1:
GameFuncComm.DoFuncOpenLogic(curPlayer)
#初始化组队状态
- autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1)
- autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2)
- PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck))
+ #autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1)
+ #autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2)
+ #PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck))
#玩家默认恶名值
- curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)
+ #curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)
#curPlayer.SetDict("ThunderLogin", 1)
#记录第一次登陆
@@ -951,6 +933,8 @@
for mailTypeKey, mailItemList in mailList:
PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
+ PlayerHero.OnPlayerFirstLogin(curPlayer)
+
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1)
return
@@ -1097,18 +1081,6 @@
rolePack = itemManager.GetPack(packIndex)
rolePack.Sync_Refresh()
- # 刷下装备评分,仓库可以暂不处理,取出装备后登录触发刷新
- for i in xrange(rolePack.GetCount()):
- curItem = rolePack.GetAt(i)
- if curItem.IsEmpty():
- continue
- newScore = ItemCommon.CalcEquipGS(curItem)
- hisScore = ItemCommon.GetEquipGearScore(curItem)
- if hisScore != newScore:
- ItemCommon.SetEquipGearScore(curItem, newScore)
- GameWorld.Log("登录更新装备评分: packType=%s,i=%s,hisScore=%s,newScore=%s,itemID=%s,guid=%s"
- % (packIndex, i, hisScore, newScore, curItem.GetItemTypeID(), curItem.GetGUID()), curPlayer.GetPlayerID())
-
for packIndex in ChConfig.Def_VPackCnt_Dict.keys():
ItemControler.Sync_VPackItem_Refresh(curPlayer, packIndex)
@@ -1139,16 +1111,6 @@
# #itemManager.GetPack(IPY_GameWorld.rptBreakPrepare).Sync_Refresh()
# #itemManager.GetPack(IPY_GameWorld.rptBreakItem).Sync_Refresh()
#===============================================================================
- return
-
-#---------------------------------------------------------------------
-##初始化现实时间物品
-#@param curPlayer 玩家实例
-#@param tick 时间戳
-#@return 返回值无意义
-#@remarks 初始化现实时间物品
-def InitRealityTimeItem(curPlayer, tick):
- PlayerState.ProcessTimeEquip(curPlayer, tick)
return
#---------------------------------------------------------------------
@@ -1291,9 +1253,8 @@
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(False)
- playerControl = PlayerControl.PlayerControl(curPlayer)
- #刷新所有状态
- playerControl.ReCalcAllState()
+ olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
+ olPlayer.ReCalcAllAttr()
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(True)
@@ -1769,7 +1730,6 @@
PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
PlayerYinji.OnLoadMap(curPlayer)
- ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount() # 刷新装备珍品星级
#EndLoadMap需放在最后, 0403 tagPlayerLoginLoadOK
curPlayer.EndLoadMap()
@@ -1861,7 +1821,7 @@
NotifyPlayerBasePoint(curPlayer, pointAttrIDList)
playerControl = PlayerControl.PlayerControl(curPlayer)
playerControl.RefreshPlayerAttrState()
- PlayerControl.SetLingGenMaxIndex(curPlayer)
+ #PlayerControl.SetLingGenMaxIndex(curPlayer)
return
#// B2 07 重置加点 #tagCMResetAttrPoint
@@ -2409,7 +2369,6 @@
#下线了,将存储在字典中的真实XP值,设置给玩家,完成通知和存储
#curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue))
#######################################################################
- PlayerOnline.OnPlayerLogoff(curPlayer)
#下线逻辑
PlayerControl.PlayerLeaveServer(curPlayer, tick)
@@ -2448,6 +2407,9 @@
#离线session
EventReport.WriteEvent_session(curPlayer)
+
+ #需放最后
+ PlayerOnline.OnPlayerLogoff(curPlayer)
return
#---------------------------------------------------------------------
@@ -3435,7 +3397,7 @@
#参考经验
rExp = PlayerControl.GetPlayerReExp(curPlayer)
reLV = curPlayer.GetLV() #参考等级
- worldLvExpRate = PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) #世界等级经验加成
+ worldLvExpRate = 0
#经验公式
redeemExp = int(eval(recList[1]))
@@ -3486,34 +3448,6 @@
# @param tick: 时间戳
# @return: None
def ReceiveFamilyArrestAward(index, clientData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- arrestID = clientData.ArrestID
-
- bit = ShareDefine.Def_ArrestOverState_BitDic.get(arrestID)
- if bit == None:
- #没有这个家族悬赏任务
- GameWorld.DebugLog("没有这个家族悬赏任务 arrestID=%s" % arrestID)
- return
-
- receiveState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
-
- if receiveState & pow(2, bit):
- #该任务奖励已经领取
- GameWorld.DebugLog("该任务奖励已经领取 arrestID=%s" % arrestID)
- return
-
- if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyArrestQueryState) == 1:
- #已经在查询中, 不重复查询
- GameWorld.DebugLog("已经在查询中, 不重复查询 arrestID=%s" % arrestID)
- return
-
- sendMsg = '%s' % arrestID
-
- #向GameServer请求该悬赏任务是否已经完成
- curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_FamilyArrest, 0, 'FamilyArrestAward', sendMsg, len(sendMsg))
-
- #设置状态查询中
- curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyArrestQueryState, 1)
return
@@ -3651,9 +3585,6 @@
# 功能开启奖励
elif rewardType == ChConfig.Def_RewardType_OpenFunc:
GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
- # 冰晶矿脉星级奖励
- elif rewardType == ChConfig.Def_RewardType_IceLodeStar:
- GameLogic_IceLode.GetIceLodeStarAward(curPlayer, dataEx)
# 领取周狂欢活动奖励
elif rewardType == ChConfig.Def_RewardType_WeekPartyAct:
PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
index befdb67..3d91259 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -78,8 +78,6 @@
ShareDefine.GameFuncID_Guaji:lambda curObj:PlayerGuaji.DoGuajiOpen(curObj),
#ShareDefine.GameFuncID_RunDaily:lambda curObj:FBCommon.DoFuncOpen_RunDaily(curObj),
#ShareDefine.GameFuncID_RunFamily:lambda curObj:FBCommon.DoFuncOpen_RunFamily(curObj),
- #ShareDefine.GameFuncID_RefineExp:lambda curObj:Operate_PlayerBuyZhenQi.DoFuncOpen_RefineExp(curObj),
- #ShareDefine.GameFuncID_RefineMoney:lambda curObj:Operate_PlayerBuyZhenQi.DoFuncOpen_RefineMoney(curObj),
}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
index 33107f2..1699a7f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
@@ -405,9 +405,9 @@
#SkillShell.CalcBuffer_NPCBaseEffect(rolePet)
#宠物不可被攻击, 命中与攻速直接继承主人攻击属性,攻击取等级阶级加成
- rolePet.SetMinAtk(PlayerControl.GetPetMinAtk(curPlayer))
- rolePet.SetMaxAtk(PlayerControl.GetPetMaxAtk(curPlayer))
- rolePet.SetSkillAtkRate(PlayerControl.GetPetSkillAtkRate(curPlayer))
+ #rolePet.SetMinAtk(PlayerControl.GetPetMinAtk(curPlayer))
+ #rolePet.SetMaxAtk(PlayerControl.GetPetMaxAtk(curPlayer))
+ #rolePet.SetSkillAtkRate(PlayerControl.GetPetSkillAtkRate(curPlayer))
GameObj.SetPetDamPer(rolePet, GameObj.GetPetDamPer(curPlayer))
#rolePet.SetMAtkMin(curPlayer.GetMAtkMin())
#rolePet.SetMAtkMax(curPlayer.GetMAtkMax())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
index 4b9a6a4..cc3e3da 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -170,14 +170,15 @@
def UpdatePyPetBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True):
## 更新宠物排行榜
- petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer)
- if not petMaxAtk:
- return
- UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Pet, petMaxAtk)
-
- if isUpdateTotal:
- UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)
return
+# petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer)
+# if not petMaxAtk:
+# return
+# UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Pet, petMaxAtk)
+#
+# if isUpdateTotal:
+# UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)
+# return
def UpdatePlayerLVBillboard(curPlayer, isForceUpdate=True):
##更新玩家等级排行榜
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 623a240..e9bb496 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -50,7 +50,6 @@
import OpenServerCampaign
import PlayerGodWeapon
import PlayerExpandPackCfgMgr
-import PlayerWorldAverageLv
import PlayerActivity
import FBCommon
import PassiveBuffEffMng
@@ -59,7 +58,6 @@
import PlayerGatherTheSoul
import PlayerSuccess
import PlayerPet
-import PlayerGreatMaster
import ItemControler
import GameFuncComm
import IpyGameDataPY
@@ -96,11 +94,11 @@
import PlayerLove
import PlayerGubao
import PlayerShentong
+import PlayerOnline
import PlayerCharm
import PlayerTask
import PlayerFace
import PlayerMail
-import PlayerHero
import ChPlayer
import GameObj
@@ -1061,7 +1059,6 @@
#清除地图玩家缓存
PyGameData.g_playerFuncAttrDict.pop(playerID, None)
PyGameData.g_playerEquipPartAttrDict.pop(playerID, None)
- PyGameData.g_equipChangeClassLVInfo.pop(playerID, None)
PyGameData.g_playerReqEnterFBEx.pop(playerID, None)
NPCCommon.ClearPriWoodPile(curPlayer)
#移除地图缓存的境界难度玩家ID信息
@@ -3288,16 +3285,11 @@
# @return 返回值, 参考经验
# @remarks 获得当前玩家的参考经验
def GetPlayerReExp(curPlayer):
- lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV())
- if not lvIpyData:
- return 0
- return lvIpyData.GetReExp()
-
-## 获得当前玩家的参考金钱
-# @param curPlayer 玩家实例
-# @return
-def GetPlayerReMoney(curPlayer):
return 0
+ #lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV())
+ #if not lvIpyData:
+ # return 0
+ #return lvIpyData.GetReExp()
#---------------------------------------------------------------------
##增加玩家的PK值
@@ -3463,204 +3455,6 @@
#---------------------------------------------------------------------
-
-## 功能模块战斗力类
-#
-# 分模块计算战斗力
-class ModuleFightPower():
-
- __AttrName = "%s" # 参数为ChConfig.Def_Calc_AllAttrType_MAX对应所有属性列表索引
- __AttrNameNoline = "Noline_%s" # 参数为ChConfig.Def_Calc_AllAttrType_MAX对应所有属性列表索引
- __NolineAttrList = [ChConfig.TYPE_Calc_AttrSpeed] # 需要记录的非线性战斗属性
-
- ## 初始化
- # @param self 类实例
- # @return 返回值无意义
- # @remarks 初始化
- def __init__(self, mfpType):
- self.mfpType = mfpType
- self.ClearAttr()
- return
-
- ## 重置所有属性
- # @param self 类实例
- # @return 返回值无意义
- def ClearAttr(self):
- for attrIndex in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
- value = 0
- setattr(self, self.__AttrName % attrIndex, value)
- for attrIndex in self.__NolineAttrList:
- setattr(self, self.__AttrNameNoline % attrIndex, 0)
- return
-
- ## 根据战斗属性列表设置计算战斗力属性
- # @param self 类实例
- # @return 返回值无意义
- def SetCalcMFPBattleAttr(self, allAttrList):
- battleAttrDict = allAttrList[ChConfig.CalcAttr_Battle]
- # 设置本模块增加的线性战斗属性,非线性战斗属性增加的在刷属性时累加上去
- for attrIndex, value in battleAttrDict.items():
- self.AddCalcMFPAttr(attrIndex, value)
-
- # 非线性战斗属性仅设置时记录即可
- battleNolineAttrDict = allAttrList[ChConfig.CalcAttr_BattleNoline]
- for attrIndex, value in battleNolineAttrDict.items():
- if attrIndex in self.__NolineAttrList:
- setattr(self, self.__AttrNameNoline % attrIndex, value)
- return
-
- ## 设置计算战斗力属性值
- def SetCalcMFPAttr(self, attrIndex, value):
- if 1 <= attrIndex < ChConfig.Def_Calc_AllAttrType_MAX:
- attrName = self.__AttrName % attrIndex
- setattr(self, attrName, value)
- return
-
- ## 增加计算战斗力属性
- # @param self 类实例
- # @param key 计算属性类型
- # @param value 计算属性数值
- # @return 返回值无意义
- def AddCalcMFPAttr(self, attrIndex, value):
- # 如果有存在计算战斗力所需的参数key值,则增加上去
- if 1 <= attrIndex < ChConfig.Def_Calc_AllAttrType_MAX:
- attrName = self.__AttrName % attrIndex
- setattr(self, attrName, getattr(self, attrName) + value)
-
- def GetModuleFightPower(self, fpParam, curPlayer):
- MaxHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrMaxHP) # 最大血量
- MinAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrATKMin) # 最小攻击
- MaxAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrATKMax) # 最大攻击
- Def = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrDEF) # 物防
- Hit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrHit) * fpParam.GetCftHit() # 命中值
- Miss = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrMiss) * fpParam.GetCftMiss() # 闪避值
- AtkSpeed = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrAtkSpeed) # 攻击速度(数值非攻击间隔)
- SuperHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRate) * fpParam.GetCftSuperHitRate() # 暴击率
- SuperHitRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRateReduce) * fpParam.GetCftSuperHitRateReduce() # 暴击概率抗性
- SuperHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHit) # 暴击伤害固定值
- SuperHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitReduce) # 暴击固定减伤
- LuckyHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRate) * fpParam.GetCftLuckyHitRate() # 会心一击
- LuckyHitRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRateReduce) * fpParam.GetCftLuckyHitRateReduce() # 会心一击概率抗性
- LuckyHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHit) # 会心一击伤害固定值
- LuckyHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitReduce) # 会心一击伤害固定减伤
- SkillAtkRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SkillAtkRate) * fpParam.GetCftSkillAtkRate() # 技能攻击比例加成
- SkillAtkRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SkillAtkRateReduce) * fpParam.GetCftSkillAtkRateReduce() # 技能攻击比例减少
- DamagePVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVP) # PVP固定伤害
- DamagePVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVPReduce) # PVP固定减伤
- DamagePVE = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePVE) # PVE固定伤害
- HPRestore = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_HPRestorePer) # 自动回复血量,固定值
- DamBackPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamBackPer) * fpParam.GetCftDamBackPer() # 反伤百分比
- SpeedValue = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrSpeed) # 移动速度值
- SpeedPer = 0#getattr(self, self.__AttrNameNoline % ChConfig.TYPE_Calc_AttrSpeed) * fpParam.GetCftSpeedPer() # 移动速度百分比系数
- PetMinAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PetMinAtk) # 宠物最小攻击
- PetMaxAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PetMaxAtk) # 宠物最大攻击
- PetDamPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PetDamPer) # 宠物伤害百分比提升
- IceAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrIceAtk) # 冰攻, 元素攻击
- IceDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrIceDef) # 冰防, 元素防御
- IgnoreDefRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_IgnoreDefRate) * fpParam.GetCftIgnoreDefRate() # 无视防御几率
- IgnoreDefRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_IgnoreDefRateReduce) * fpParam.GetCftIgnoreDefRateReduce() # 无视防御概率抗性
- DamChanceDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamChanceDef) * fpParam.GetCftDamChanceDef() # 20%的概率抵御伤害比率
- BleedDamage = 0#getattr(self, self.__AttrName % ChConfig.TYPE_Calc_BleedDamage) * fpParam.GetCftBleedDamage() # 流血伤害
- AtkBackHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AtkBackHPPer) # 攻击回复血量
- FaintRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FaintRate) * fpParam.GetCftFaintRate() # 触发击晕
- FaintDefRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FaintDefRate) * fpParam.GetCftFaintDefRate() # 击晕抵抗
- FinalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurt) # 最终固定伤害增加
- FinalHurtReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReduce) # 最终固定伤害减少
- BossFinalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_BossFinalHurtPer) * fpParam.GetCftBossFinalHurtPer() # Boss最终伤害万分率
- FinalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtPer) * fpParam.GetCftFinalHurtPer() # 最终伤害万分率
- FinalHurtReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReducePer) * fpParam.GetCftFinalHurtReducePer() # 最终伤害减少万分率
- DamagePerPVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVP) * fpParam.GetCftDamagePerPVP() # 伤害输出计算百分比PVP
- DamagePerPVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVPReduce) * fpParam.GetCftDamagePerPVPReduce() # 伤害输出计算百分比PVP减少
- JobAHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAHurtAddPer) * fpParam.GetCftJobAHurtAddPer() # 对目标战士伤害加成
- JobBHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobBHurtAddPer) * fpParam.GetCftJobBHurtAddPer() # 对目标法师伤害加成
- JobCHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobCHurtAddPer) * fpParam.GetCftJobCHurtAddPer() # 对目标弓箭伤害加成
- JobAAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAAtkReducePer) * fpParam.GetCftJobAAtkReducePer() # 战士攻击伤害减免
- JobBAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobBAtkReducePer) * fpParam.GetCftJobBAtkReducePer() # 法师攻击伤害减免
- JobCAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobCAtkReducePer) * fpParam.GetCftJobCAtkReducePer() # 弓箭攻击伤害减免
- AffairSpeedPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AffairSpeedPer) * fpParam.GetCftAffairSpeedPer() # 仙盟事务速度加成
- FamilyBossHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyBossHurtPer) * fpParam.GetCftFamilyBossHurtPer() # 仙盟BOSS伤害加成
- FamilyWarHPPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyWarHPPer) * fpParam.GetCftFamilyWarHPPer() # 仙盟联赛生命加成
- FamilyWarAtkPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilyWarAtkPer) * fpParam.GetCftFamilyWarAtkPer() # 仙盟联赛攻击加成
- FamilySitExpPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FamilySitExpPer) * fpParam.GetCftFamilySitExpPer() # 仙盟打坐经验加成
-
- NormalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NormalHurt)
- NormalHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NormalHurtPer) * fpParam.GetCftNormalHurtPer() # 普通附加伤害加成
- FabaoHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FabaoHurt)
- FabaoHurtPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FabaoHurtPer) * fpParam.GetCftFabaoHurtPer() # 法宝附加伤害加成
- Luck = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_Luck)
-
- ComboRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboRate) # 连击几率
- ComboDamPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboDamPer) # 连击伤害
- #MaxProDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_MaxProDef) # 最大防护值
- #ProDefAbsorb = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefAbsorb) # 防护值吸收伤害比率
- ProDefPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefHPPer) # 防护转化百分比
-
- OnlyFinalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_OnlyFinalHurt) # 额外输出伤害
- PVPAtkBackHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PVPAtkBackHP) # PVP攻击回血
- NPCHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_NPCHurtAddPer) * fpParam.GetCftNPCHurtAddPer() # 对怪物伤害加成
-
- #其他需作为公式参数的系数
- AtkSpeedParameter = fpParam.GetCftAtkSpeed()
- LuckyHitParameter = 0#fpParam.GetCftLuckyHit()
-
- #取总属性的
- SuperHitRateTotal = curPlayer.GetSuperHitRate()
- LuckyHitRateTotal = curPlayer.GetLuckyHitRate()
-
- job = curPlayer.GetJob()
- diffAttrDict = self.__GetAttrFightPowerParamDiff(job)
- for paramName, diffValue in diffAttrDict.items():
- exec("%s = max(0, %s - %s)" % (paramName, paramName, diffValue))
-
- #获取策划配置的表格
- FightpowerFormula = IpyGameDataPY.GetFuncCfg("FightpowerFormula")
- totalFightPower = eval(FormulaControl.GetCompileFormula("FightpowerFormula", FightpowerFormula))
-
- #GameWorld.DebugLog("MfpType=%s,FightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
- if totalFightPower > ShareDefine.Def_UpperLimit_DWord:
- GameWorld.ErrLog("模块战力超过数值上限, MfpType=%s,fightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
- #totalFightPower = ShareDefine.Def_UpperLimit_DWord 模块战力支持超20亿,日志暂保留用于输出提醒
- return totalFightPower
-
- def __GetAttrFightPowerParamDiff(self, job):
- ## 战力计算属性参数与实际属性差值
-
- #角色基础模块某些属性不计算战力
- if self.mfpType != ShareDefine.Def_MFPType_Role:
- return {}
-
- roleBaseAttrDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 1)
- notFightPowerEffIDNameDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 2)
- if job not in roleBaseAttrDict:
- return {}
-
- diffAttrDict = {}
- jobBaseAttrDict = roleBaseAttrDict[job]
- for attrID, paramName in notFightPowerEffIDNameDict.items():
- if attrID not in jobBaseAttrDict:
- continue
- diffAttrDict[paramName] = jobBaseAttrDict[attrID]
- return diffAttrDict
-
- def GetMFPAttrStr(self):
- attrStr = ""
- for attrIndex in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
- attrName = self.__AttrName % attrIndex
- attrValue = getattr(self, attrName)
- if attrValue <= 0:
- continue
-
- attrStr += "%s=%s," % (attrName, attrValue)
-
- for attrIndex in self.__NolineAttrList:
- attrName = self.__AttrNameNoline % attrIndex
- attrValue = getattr(self, attrName)
- if attrValue <= 0:
- continue
-
- attrStr += "%s=%s," % (attrName, attrValue)
- return attrStr
-
###############################################################
#人物控制类
@@ -3669,7 +3463,7 @@
# 人物死亡等逻辑处理
class PlayerControl:
__Player = None
- __fpTypeObjDict = {}
+
#---------------------------------------------------------------------
## 初始化
# @param self 类实例
@@ -3678,46 +3472,6 @@
# @remarks 初始化
def __init__(self, iPlayer):
self.__Player = iPlayer
-
- ## 获取模块战斗力对象
- # @param self 类实例
- # @param fpType 战斗力类型
- # @return 返回战斗力对象
- def GetModuleFightPowerObj(self, fpType):
- fpObj = self.__fpTypeObjDict.get(fpType)
- if not fpObj:
- fpObj = ModuleFightPower(fpType)
- self.__fpTypeObjDict[fpType] = fpObj
- return fpObj
-
- ## 获取模块战斗力对象
- # @param self 类实例
- # @return 返回战斗力对象
- def ResetFightPowerObj(self):
- for obj in self.__fpTypeObjDict.values():
- obj.ClearAttr()
-
- #---------------------------------------------------------------------
- ## 玩家升级加点加技能 前20级自动加点 20级后 以前是加技能点现改成直接升级后读表加技能
- # @param self 类实例
- # @return None
- # @remarks 玩家升级 加点 2010-05-26 adaws修改 原来有加技能点 现将升级加技能提出
- def __DoLVUPAddPoint(self):
- curPlayer = self.__Player
- if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint):
- # 未开启前不可加点,因为DoAddPointOpen会一次性补齐,避免意外情况多加了点数
- return
-
- curFreePoint = curPlayer.GetFreePoint()
- addPoint = GetLvUp_AddPoint(curPlayer)
- if addPoint != 0:
- setFreePoint = curFreePoint + addPoint
- #NotifyCode(curPlayer, "ObtainAttributeDot", [addPoint])
-
- DataRecordPack.DR_Freepoint(curPlayer, "LvUP", addPoint)
- curPlayer.SetFreePoint(setFreePoint)
-
- return
## 加经验值
# @param self 类实例
@@ -3769,7 +3523,7 @@
exp_rate = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TotalExpRate)
elif expViewType in [ShareDefine.Def_ViewExpType_GameEvent, ShareDefine.Def_ViewExpType_Sit]:
exp_rate = curPlayer.GetGameEventExpRate()
- exp_rate += GetFamilySitExpPer(curPlayer)
+ #exp_rate += GetFamilySitExpPer(curPlayer)
else:
exp_rate = max(GameWorld.GetGameWorld().GetExpRate(), ChConfig.Def_MaxRateValue)
@@ -3818,9 +3572,9 @@
def PlayerLvUp(self, handLvUp=False):
curPlayer = self.__Player
- if GameObj.GetHP(curPlayer) <= 0:
- #玩家死亡不可升级
- return
+ #if GameObj.GetHP(curPlayer) <= 0:
+ # #玩家死亡不可升级
+ # return
lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV())
if not lvIpyData:
@@ -3895,18 +3649,18 @@
# 升级需要执行的游戏功能处理
GameFuncComm.DoFuncOpenLogic(curPlayer)
- ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer) # 灵器属性会随等级成长
+ #ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer) # 灵器属性会随等级成长
#if aftLV%10 == 0:
# # 控制下刷新次数
# PlayerPet.CalcPetItemAddPlayerAttr(curPlayer) # 宠物有随等级变化的技能
- self.RefreshPlayerAttrState(billboardFunc=PlayerBillboard.UpdatePlayerLVBillboard)
- #放在功能开启后面
- PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
+ PlayerOnline.CalcRoleBase(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
+
#将血设置为最大
- GameObj.SetHPFull(curPlayer)
- if curPlayer.GetMaxMP() > 0:
- curPlayer.SetMP(curPlayer.GetMaxMP())
+ #GameObj.SetHPFull(curPlayer)
+ #if curPlayer.GetMaxMP() > 0:
+ # curPlayer.SetMP(curPlayer.GetMaxMP())
FBLogic.OnPlayerLVUp(curPlayer)
# 记录开服活动冲级数据
@@ -3929,149 +3683,6 @@
return
#---------------------------------------------------------------------
-
- def CalcRoleBaseAttr(self, curPlayer):
- # 计算玩家角色基础属性值
-
- curPlayerID = curPlayer.GetID()
- job = curPlayer.GetJob()
-
- lvAttrDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAttr%s" % job, 1)
-
- if not lvAttrDict:
- GameWorld.ErrLog('无此职业等级刷属性配置!job=%s' % (job), curPlayerID)
- return
-
- allAttrList = [{} for _ in range(4)]
-
- # 职业初始属性
- roleBaseAttrDict = IpyGameDataPY.GetFuncEvalCfg("CreatRoleBaseAttr", 1)
- if job in roleBaseAttrDict:
- for roleBaseAttrID, value in roleBaseAttrDict[job].items():
- CalcAttrDict_Type(roleBaseAttrID, value, allAttrList)
- #GameWorld.DebugLog("初始加属性: %s" % allAttrList)
-
- # 等级成长属性
- LV = curPlayer.GetLV()
- for lvAttrID, formula in lvAttrDict.items():
- calcValue = eval(FormulaControl.GetCompileFormula("LVUPAttr%s_%s" % (job, lvAttrID), formula))
- CalcAttrDict_Type(lvAttrID, calcValue, allAttrList)
- #GameWorld.DebugLog(" lvAttrID=%s,calcValue=%s" % (lvAttrID, calcValue))
- #GameWorld.DebugLog("等级加属性: %s" % allAttrList)
-
- # 属性点属性
- hadRefreshAttr = curPlayer.GetDictByKey(ChConfig.Def_Player_HadRefreshAttr) # 本地图是否刷新过属性
- pointFightPowerEx = 0
- pointValueInfo = {ShareDefine.Def_Effect_Metal:[lambda curObj:GetMetal(curObj), lambda curObj, value:SetMetalQualityLV(curObj, value), lambda curObj:GetMetalQualityLV(curObj)],
- ShareDefine.Def_Effect_Wood:[lambda curObj:GetWood(curObj), lambda curObj, value:SetWoodQualityLV(curObj, value), lambda curObj:GetWoodQualityLV(curObj)],
- ShareDefine.Def_Effect_Water:[lambda curObj:GetWater(curObj), lambda curObj, value:SetWaterQualityLV(curObj, value), lambda curObj:GetWaterQualityLV(curObj)],
- ShareDefine.Def_Effect_Fire:[lambda curObj:GetFire(curObj), lambda curObj, value:SetFireQualityLV(curObj, value), lambda curObj:GetFireQualityLV(curObj)],
- ShareDefine.Def_Effect_Earth:[lambda curObj:GetEarth(curObj), lambda curObj, value:SetEarthQualityLV(curObj, value), lambda curObj:GetEarthQualityLV(curObj)],
- }
- hasChange_Qualitylv = False #灵根品级是否有变更
- lingGenQualityAttrList = [{} for _ in range(4)]
- for pointAttrID, pointFuncInfo in pointValueInfo.items():
- pointValue = pointFuncInfo[0](curPlayer)
- befPQLV = pointFuncInfo[2](curPlayer)
- pointFuncInfo[1](curPlayer, 0)
- if not pointValue:
- if 0 != befPQLV:
- hasChange_Qualitylv = True
- continue
- ipyData = IpyGameDataPY.GetIpyGameData("RolePoint", pointAttrID)
- if not ipyData:
- continue
- # 每点属性
- perPointAddAttrDict = ipyData.GetAddAttrInfoPerPoint() # {"职业":[[每X点,属性ID,值], ...], ..}
- addAttrList = perPointAddAttrDict.get(str(job), [])
- for needPoint, pointAddAttrID, pointAddAttrValue in addAttrList:
- pointAddValueTotal = pointAddAttrValue * (pointValue / needPoint)
- CalcAttrDict_Type(pointAddAttrID, pointAddValueTotal, allAttrList)
- #GameWorld.DebugLog(" 属性点(%s)加属性: pointValue=%s,pointAddAttrID=%s,pointAddValueTotal=%s" % (pointAttrID, pointValue, pointAddAttrID, pointAddValueTotal))
-
- pointFightPowerEx += (ipyData.GetFightPowerPerPoint() * pointValue)
-
- # 点数品质属性
- curPQLV = 0
- pqIntervalList = ipyData.GetPointQualityIntervalList()
- for pqLV, pqValue in enumerate(pqIntervalList, 1): # 灵根品级从1开始
- if pointValue >= pqValue:
- curPQLV = pqLV
- else:
- break
- pointFuncInfo[1](curPlayer, curPQLV)
- if curPQLV != befPQLV:
- hasChange_Qualitylv = True
- if not curPQLV:
- continue
- pqAttrInfoDict = ipyData.GetPointQualityAttrDict().get(str(curPlayer.GetJob()), {})
- for pqAttrID, pqAttrValueList in pqAttrInfoDict.items():
- pqAttrValue = 0 if curPQLV > len(pqAttrValueList) else pqAttrValueList[curPQLV - 1]
- CalcAttrDict_Type(int(pqAttrID), pqAttrValue, lingGenQualityAttrList)
- #GameWorld.DebugLog(" 属性点(%s)品阶等级属性: befPQLV=%s,curPQLV=%s,pqAttrInfoDict=%s" % (pointAttrID, befPQLV, curPQLV, pqAttrInfoDict))
-
- #GameWorld.DebugLog("等级属性点加属性: %s" % allAttrList)
- #GameWorld.DebugLog("灵根品阶等级属性: %s" % lingGenQualityAttrList)
- #GameWorld.DebugLog("灵根点数附加战力: %s" % pointFightPowerEx)
- SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Role, pointFightPowerEx)
- SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase, allAttrList)
- SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty, lingGenQualityAttrList)
- return hasChange_Qualitylv
-
- #---------------------------------------------------------------------
- def NotifyAllState(self, playerStateDict):
- curPlayer = self.__Player
- notifySelfList = []
- notifyAllList = []
- notifyAllAttrState = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NotifyAllAttrState)
-
- #在此处把所有属性的不同通知给客户端
- for index, value in playerStateDict.items():
-
- curPlayerState, attrType, notifySelf, notifyAll = EffGetSet.GetValueByEffIndexEx(curPlayer, index)
-
- if not attrType:
- continue
-
- if notifyAllAttrState and curPlayerState == value:
- #GameWorld.Log("第%d个,原值%d等于现值%d,不发给客户端"%( index, value, curPlayerState ) )
- continue
- notifyStruct = ChPyNetSendPack.tagRefreshType()
- notifyStruct.RefreshType = attrType
- if attrType in [IPY_PlayerDefine.CDBPlayerRefresh_HP, IPY_PlayerDefine.CDBPlayerRefresh_MaxHP]:
- notifyStruct.Value = curPlayerState % ShareDefine.Def_PerPointValue
- notifyStruct.ValueEx = curPlayerState / ShareDefine.Def_PerPointValue
- else:
- notifyStruct.Value = curPlayerState
- if notifySelf:
- notifySelfList.append(notifyStruct)
- if notifyAll:
- notifyAllList.append(notifyStruct)
-
- #属性组合包
- #通知自己
- if notifySelfList:
- sendPack = ChPyNetSendPack.tagObjInfoListRefresh()
- sendPack.Clear()
- sendPack.ObjID = curPlayer.GetID()
- sendPack.ObjType = curPlayer.GetGameObjType()
- sendPack.Count = len(notifySelfList)
- sendPack.RefreshType = notifySelfList
- NetPackCommon.SendFakePack(curPlayer, sendPack)
-
- if len(notifyAllList) != 0:
- #广播周围玩家
- sendPack = ChPyNetSendPack.tagObjInfoListRefresh()
- sendPack.Clear()
- sendPack.ObjID = curPlayer.GetID()
- sendPack.ObjType = curPlayer.GetGameObjType()
- sendPack.Count = len(notifyAllList)
- sendPack.RefreshType = notifyAllList
- PyNotifyAll(curPlayer, sendPack, False, -1)
-
- if not notifyAllAttrState:
- curPlayer.SetDict(ChConfig.Def_PlayerKey_NotifyAllAttrState, 1)
- return
## 刷新玩家所有状态
# @param self 类实例
@@ -4079,59 +3690,13 @@
# @return 返回值无意义
# @remarks 刷新玩家所有状态
def RefreshAllState(self, isSyncBuff=False, billboardFunc=None, isForce=False):
- curPlayer = self.__Player
- playerID = curPlayer.GetPlayerID()
- GameWorld.DebugLog("Start RefreshAllState!!!", playerID)
-
- self.RefreshPlayerActionState()
- self.RefreshPlayerAttrState(billboardFunc, isForce)
return
-
## 重计算并刷新玩家所有状态, 目前只用与切换地图
# @param self 类实例
# @return 返回值无意义
# @remarks 刷新玩家所有状态
def ReCalcAllState(self):
- curPlayer = self.__Player
- playerID = curPlayer.GetPlayerID()
- GameWorld.DebugLog("Start ReCalcAllState!!!", playerID)
-
- for funcIndex in ChConfig.CalcAttrFuncList:
- ClearCalcAttrListValue(curPlayer, funcIndex)
-
- #先压入BUFF的效果值及技能战斗力
- self.RefreshAllSkill()
- ChEquip.RefreshPlayerEquipAttribute(curPlayer)
- ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
- #SkillShell.RefreshPlayerBuffOnAttrAddEffect(curPlayer)
- PlayerHorse.CalcHorseAttrEx(curPlayer)
- PlayerPrestigeSys.CalcOfficialRankAttr(curPlayer)
- PlayerGodWeapon.CalcGodWeaponAttr(curPlayer)
- PlayerDienstgrad.CalcAllDienstgradAttr(curPlayer)
- PlayerPet.CalcPetItemAddPlayerAttr(curPlayer)
- PlayerRune.RefreshRuneAttr(curPlayer)
- PlayerMagicWeapon.CalcMagicWeaponAttr(curPlayer)
- PlayerSuccess.CalcSuccessAttr(curPlayer)
- PlayerVip.CalcVIPAttr(curPlayer)
- PlayerRefineStove.CalcStoveAttr(curPlayer)
- PlayerFamilyTech.CalcFamilyTechAttr(curPlayer)
- PlayerEquipDecompose.RefreshEDAttr(curPlayer)
- PlayerDogz.RefreshDogzAttr(curPlayer)
- PlayerGatherSoul.RefreshGatherSoulAttr(curPlayer)
- PlayerGatherTheSoul.CalcSoulAttr(curPlayer)
- PlayerCoat.CalcClothesCoatSkinAttr(curPlayer)
- PlayerFaQi.CalcFaQiAttr(curPlayer)
- PlayerLove.CalcLoveAttr(curPlayer)
- PlayerCharm.CalcCharmAttr(curPlayer)
- PlayerLianTi.CalcLianTiAttr(curPlayer)
- PlayerShentong.CalcShentongAttr(curPlayer)
- PlayerFamilyZhenfa.CalcZhenfaAttr(curPlayer)
- PlayerFace.CalcFaceAttr(curPlayer)
- PlayerFace.CalcFacePicAttr(curPlayer)
- PlayerHero.CalcHeroItemAddAttr(curPlayer)
- self.RefreshAllState(isForce=True)
- GameWorld.DebugLog("End ReCalcAllState!!!", playerID)
return
@@ -4146,36 +3711,7 @@
# BUFF层单独刷新属性
def RefreshPlayerAttrByBuffEx(self):
-
- curPlayer = self.__Player
- if curPlayer.GetDictByKey(ChConfig.Def_Player_RefreshAttrByBuff) != 1:
- return
-
- playerID = curPlayer.GetPlayerID()
- GameWorld.DebugLog("Start RefreshPlayerAttrByBuffEx!!!", playerID)
- beforeMaxHP = GameObj.GetMaxHP(curPlayer)
- beforeMoveSpeedValue = GetSpeedValue(curPlayer)
- #构建玩家刷新通知客户端字典, 缓存[索引, 数值]
- playerStateDict = {}
- for index in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
- playerStateDict.update({index:EffGetSet.GetValueByEffIndex(curPlayer, index)})
- #GameWorld.DebugLog("刷属性前=%s" % playerStateDict, playerID)
- #self.PrintAttr(curPlayer, "刷之前")
- #---------------------------开始计算-------------------------------------
- curPlayer.BeginRefreshState()
- # 恢复功能数值 不能调用函数self.InitPlayerState()
- EffGetSet.RestorePlayerFuncAttr(curPlayer)
-
- # 6.计算buff属性, buff层级的不算如战斗力
- self.__RefreshBuffAttr()
-
- # 7.刷完属性后需要处理的逻辑
- self.__DoRefreshAttrAfterLogic(beforeMaxHP, beforeMoveSpeedValue, playerStateDict)
-
- curPlayer.SetDict(ChConfig.Def_Player_RefreshAttrByBuff, 0)
- GameWorld.DebugLog("End RefreshPlayerAttrByBuffEx!!!", playerID)
return
-
#===========================================================================
# #装备和BUFF 效果的计算移到外层
@@ -4196,15 +3732,6 @@
if isForce:
self.RefreshPlayerAttrStateEx()
- return
-
- def PrintAttr(self, curPlayer, mark):
- attrInfo = ""
- for index in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
- value = EffGetSet.GetValueByEffIndex(curPlayer, index)
- if value:
- attrInfo = "%s,%s=%s" % (attrInfo, index, value)
- GameWorld.DebugLog("%s AttrInfo=%s" % (mark, attrInfo))
return
def RefreshPlayerAttrStateEx(self):
@@ -4238,808 +3765,33 @@
无buff总属性 = 固定总属性 + 内部百分比加成值 + 交叉百分比加成 + 固定总属性百分比加成 + 技能百分比对固定属性加成 + 技能固定值
含buff总属性 = 无buff总属性 * buff百分比加成 + buff固定值
'''
- curPlayer = self.__Player
-
- if curPlayer.GetDictByKey(ChConfig.Def_Player_RefreshAttr) != 1:
- return False
-
- PlayerGubao.CalcGubaoAttr(curPlayer) # 古宝定位为对贯通所有游戏功能系统的属性玩法,所以每次都重新刷新
-
- playerID = curPlayer.GetPlayerID()
- GameWorld.DebugLog("Start RefreshPlayerAttrStateEx!!!", playerID)
-
- #beforeAtkInterval = curPlayer.GetAtkInterval()
- beforeMaxHP = GameObj.GetMaxHP(curPlayer)
- beforeMoveSpeedValue = GetSpeedValue(curPlayer)
- beforeMaxProDef = GetMaxProDef(curPlayer)
- #[金木水火土]
- beforePointList = [GetMetal(curPlayer), GetWood(curPlayer), GetWater(curPlayer), GetFire(curPlayer), GetEarth(curPlayer)]
- #构建玩家刷新通知客户端字典, 缓存[索引, 数值]
- playerStateDict = {}
- for index in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
- playerStateDict.update({index:EffGetSet.GetValueByEffIndex(curPlayer, index)})
- #GameWorld.DebugLog("刷属性前=%s" % playerStateDict, playerID)
- #self.PrintAttr(curPlayer, "刷之前")
- #---------------------------开始计算-------------------------------------
- curPlayer.BeginRefreshState()
- self.ResetFightPowerObj()
- #self.PrintAttr(curPlayer, "重置后")
- notAttrList = [{} for _ in range(4)]
-
- # 1.初始化人物各项状态及属性
- self.InitPlayerState()
- #self.PrintAttr(curPlayer, "初始化")
-
- # 功能属性层级一...
- # 2.计算基础属性
- # 2.1 获取所有功能计算点计算的属性值, 统计基础属性累加
- baseAttrDict = {}
- baseAttrNolineDict = {}
- funcAttrLen = len(ChConfig.CalcAttrFuncList)
- funcAttrInfoList = [[{} for _ in range(4)]] * funcAttrLen
- funcInsidePerAttrList = [{}] * funcAttrLen # 功能内部百分比附加属性
- for funcIndex in ChConfig.CalcAttrFuncList:
- # 基础属性等功能汇总完后统一刷新,因为各功能可能会加属性点数
- if funcIndex in [ChConfig.Def_CalcAttrFunc_RoleBase, ChConfig.Def_CalcAttrFunc_LingGenQuailty]:
- continue
- attrInfo, insidePerAttrDict = GetCalcAttrListValue(curPlayer, funcIndex)[:2]
- if attrInfo == notAttrList and not insidePerAttrDict:
- continue
- GameWorld.DebugLog("功能点属性: %s(%s), %s, 内层百分比附加: %s" % (funcIndex, ChConfig.FuncIndexName.get(funcIndex, ""), attrInfo, insidePerAttrDict), playerID)
- funcAttrInfoList[funcIndex] = attrInfo
- funcInsidePerAttrList[funcIndex] = insidePerAttrDict
- # 不同功能点间的数值累加,需使用支持衰减递增的计算方式
- AddAttrDictValue(baseAttrDict, attrInfo[ChConfig.CalcAttr_Base])
- AddAttrDictValue(baseAttrNolineDict, attrInfo[ChConfig.CalcAttr_BaseNoline])
-
- # 2.2 将基础属性累加到玩家身上
- if baseAttrDict or baseAttrNolineDict:
- # 因为基础属性会影响战斗属性计算,所以先统计增加基础属性
- GameWorld.DebugLog("功能附加点: baseAttrDict=%s,baseAttrNolineDict=%s" % (baseAttrDict, baseAttrNolineDict), playerID)
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, baseAttrDict)
- CalcNoLineEffect.ChangePlayerAttrInNoLineEffectList(curPlayer, baseAttrNolineDict)
-
- # 功能有加基础属性值,这里再重新刷新一下基础属性, 基础属性会影响战斗属性, 每次都刷新角色基础属性
- hasChange_Qualitylv = self.CalcRoleBaseAttr(curPlayer)
- roleBaseAttrInfo, roleInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase)[:2]
- lingGenQualityAttrList, lingGenQualityInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty)[:2]
- funcAttrInfoList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleBaseAttrInfo
- funcInsidePerAttrList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleInsidePerAttrDict
- funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LingGenQuailty] = lingGenQualityAttrList
- funcInsidePerAttrList[ChConfig.Def_CalcAttrFunc_LingGenQuailty] = lingGenQualityInsidePerAttrDict
- GameWorld.DebugLog("功能点属性: %s(%s), %s, 内层百分比附加: %s"
- % (ChConfig.Def_CalcAttrFunc_RoleBase, ChConfig.FuncIndexName.get(ChConfig.Def_CalcAttrFunc_RoleBase, ""), roleBaseAttrInfo, roleInsidePerAttrDict), playerID)
- GameWorld.DebugLog("功能点属性: %s(%s), %s, 内层百分比附加: %s"
- % (ChConfig.Def_CalcAttrFunc_LingGenQuailty, ChConfig.FuncIndexName.get(ChConfig.Def_CalcAttrFunc_LingGenQuailty, ""), lingGenQualityAttrList, lingGenQualityInsidePerAttrDict), playerID)
-
- #self.PrintAttr(curPlayer, "基础后", playerID)
-
- # 3.计算战斗属性
- # 3.1 战斗属性层级交叉影响基值数值汇总
- # 基础层级(角色基础属性)
- baseAttrList = AddAttrListValue([funcAttrInfoList[ChConfig.Def_CalcAttrFunc_RoleBase],
- funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LingGen],
- funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LingGenQuailty],
- ])
- #GameWorld.DebugLog("基础层级: %s" % baseAttrList, playerID)
-
- # 功能点交叉影响非线性层对应属性基值列表
- funcAttrPerInfo = {ChConfig.TYPE_Calc_BaseAtkAddPer:[baseAttrList],
- ChConfig.TYPE_Calc_BaseMaxHPAddPer:[baseAttrList],
- ChConfig.TYPE_Calc_BaseDefAddPer:[baseAttrList],
- ChConfig.TYPE_Calc_BaseHitAddPer:[baseAttrList],
- ChConfig.TYPE_Calc_BaseMissAddPer:[baseAttrList],
- ChConfig.TYPE_Calc_FaQiMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FaQi]],
- ChConfig.TYPE_Calc_FaQiAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FaQi]],
- ChConfig.TYPE_Calc_FaQiDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FaQi]],
- ChConfig.TYPE_Calc_GodWeaponMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_GodWeapon]],
- ChConfig.TYPE_Calc_GodWeaponAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_GodWeapon]],
- ChConfig.TYPE_Calc_StoneMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Stone]],
- ChConfig.TYPE_Calc_StoneAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Stone]],
- ChConfig.TYPE_Calc_StoneBasePer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Stone]],
- ChConfig.TYPE_Calc_RealmBasePer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Prestige]],
- ChConfig.TYPE_Calc_HorseAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Horse]],
- ChConfig.TYPE_Calc_HorseMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Horse]],
- ChConfig.TYPE_Calc_HorseTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseTarin]],
- ChConfig.TYPE_Calc_PetTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_PetTarin]],
- ChConfig.TYPE_Calc_GuardTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_GuardTarin]],
- ChConfig.TYPE_Calc_WingTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_WingTarin]],
- ChConfig.TYPE_Calc_PeerlessWeaponTrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_PeerlessWeaponTrain]],
- ChConfig.TYPE_Calc_PeerlessWeapon2TrainAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_PeerlessWeapon2Train]],
- ChConfig.TYPE_Calc_LianTiAttrPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LianTi]],
- ChConfig.TYPE_Calc_HorseSkinMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseSkin], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseStar]],
- ChConfig.TYPE_Calc_HorseSkinAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseSkin], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseStar]],
- ChConfig.TYPE_Calc_HorseSkinDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseSkin], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_HorseStar]],
- ChConfig.TYPE_Calc_TitleMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Dienstgrad], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_TitleStar]],
- ChConfig.TYPE_Calc_TitleAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Dienstgrad], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_TitleStar]],
- ChConfig.TYPE_Calc_TitleDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Dienstgrad], funcAttrInfoList[ChConfig.Def_CalcAttrFunc_TitleStar]],
- ChConfig.TYPE_Calc_FaceMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Face]],
- ChConfig.TYPE_Calc_FaceAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Face]],
- ChConfig.TYPE_Calc_FaceDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Face]],
- ChConfig.TYPE_Calc_FacePicMaxHPPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FacePic]],
- ChConfig.TYPE_Calc_FacePicAtkPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FacePic]],
- ChConfig.TYPE_Calc_FacePicDefPer:[funcAttrInfoList[ChConfig.Def_CalcAttrFunc_FacePic]],
- }
- # 3.2 统计各功能之间非线性属性交叉影响累加
- funcCrossAttrPerInfoDict = {} # 百分比交叉影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
- for i, funcAttrList in enumerate(funcAttrInfoList):
- battleNoLineAttrDict = funcAttrList[ChConfig.CalcAttr_BattleNoline] # 暂写死只取战斗非线性的
- if not battleNoLineAttrDict:
- continue
- addAttrDict = {}
- #GameWorld.DebugLog("交叉功能点: i=%s,%s" % (i,battleNoLineAttrDict), playerID)
- for noLineAttrType, addAttrPer in battleNoLineAttrDict.items():
- if noLineAttrType not in funcAttrPerInfo or noLineAttrType not in ChConfig.FuncNoLinearAttrDict:
- continue
- # 使用的基值目标功能索引
- attrRate = addAttrPer / float(ChConfig.Def_MaxRateValue)
- addAttrTypeList = ChConfig.FuncNoLinearAttrDict[noLineAttrType]
- useFuncAttrList = funcAttrPerInfo[noLineAttrType]
- for attrType in addAttrTypeList:
- addValue = 0
- for useAttrList in useFuncAttrList:
- useAttrDict = useAttrList[ChConfig.CalcAttr_Battle] # 默认增加的是战斗线性
- # 默认提升的属性在线性战斗属性里
- if attrType not in useAttrDict:
- continue
- baseValue = useAttrDict[attrType] # 只是用到目标功能的基值
- addValue += int(baseValue * attrRate)
- #GameWorld.DebugLog(" i=%s,calcID=%s,per=%s,rate=%s,baseValue=%s,attrType=%s,addValue=%s" % (i, noLineAttrType, addAttrPer, attrRate, baseValue, attrType, addValue), playerID)
- if addValue <= 0:
- continue
- addAttrDict[attrType] = addAttrDict.get(attrType, 0) + addValue
-
- if addAttrDict:
- # 增加的数值统计到百分比属性所属功能点
- # 如符文有个武器攻击百分比增加属性,增加的数值属于符文功能,不属于武器功能点的,只是基值使用了武器攻击
- funcCrossAttrPerInfoDict[i] = addAttrDict # 先都统计完后再累加到对应功能属性里,不然可能会导致功能基值变更
-
- GameWorld.DebugLog("交叉影响属性: %s" % funcCrossAttrPerInfoDict, playerID)
-
- # 3.3 统计所有功能固定属性影响累加
- allFixAttrDict = {} # 固定属性层级总属性基值
- for funcIndex, funcAttrList in enumerate(funcAttrInfoList):
- # 技能模块不计入功能固定属性、不计战力
- if funcIndex in ChConfig.CalcAttrFuncSkillList:
- continue
- AddAttrDictValue(allFixAttrDict, funcAttrList[ChConfig.CalcAttr_Battle])
-
- fixAttrPerAddExDict = {} # 固定总属性百分比影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
- for funcIndex, funcAttrList in enumerate(funcAttrInfoList):
- fixAddPerDict = funcAttrList[ChConfig.CalcAttr_BattleNoline]
- if not fixAddPerDict:
- continue
- addValueExDict = {}
- for fixAttrType, addPer in fixAddPerDict.items():
- if fixAttrType not in allFixAttrDict:
- continue
- curFixValue = allFixAttrDict[fixAttrType]
- addValueEx = int(curFixValue * addPer / 10000.0)
- addValueExDict[fixAttrType] = addValueEx
- fixAttrPerAddExDict[funcIndex] = addValueExDict
-
- GameWorld.DebugLog("固定属性总和: %s" % allFixAttrDict, playerID)
- GameWorld.DebugLog("固定百分比附加属性: %s" % fixAttrPerAddExDict, playerID)
-
- # 4. 计算属性及战力, 需在计算buff层之前计算
- curLV = curPlayer.GetLV()
- fpParam = IpyGameDataPY.GetIpyGameData("FightPowerParam", curLV)
- mfpDict = {} # 模块战斗力
- mfpObjDict = {}
- for mfpType, attrFuncIndexList in ChConfig.MFPTypeAttrFuncIndexDict.items():
- mfpAttrList = [{} for _ in range(4)]
- mfpAttrExDict = {}
- for funcIndex in attrFuncIndexList:
- if funcIndex in ChConfig.CalcAttrFuncSkillList:
- # 技能模块不计入功能固定属性、不计战力
- continue
- funcAttrList = funcAttrInfoList[funcIndex]
- funcInsidePerAttrDict = funcInsidePerAttrList[funcIndex] # 功能点内部百分比加成属性
- funcCrossPerAttrDict = funcCrossAttrPerInfoDict.get(funcIndex, {}) # 功能点交叉百分比加成属性
- fixPerAttrDict = fixAttrPerAddExDict.get(funcIndex, {}) # 功能总固定属性百分比加成属性
-
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcAttrList[ChConfig.CalcAttr_Battle])
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcInsidePerAttrDict)
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcCrossPerAttrDict)
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, fixPerAttrDict)
- # 不算战力的
- if funcIndex in ChConfig.CalcAttrFuncNoFightPowerList:
- continue
- mfpAttrList = AddAttrListValue([mfpAttrList, funcAttrList])
- AddAttrDictValue(mfpAttrExDict, funcInsidePerAttrDict)
- AddAttrDictValue(mfpAttrExDict, funcCrossPerAttrDict)
- AddAttrDictValue(mfpAttrExDict, fixPerAttrDict)
-
- mfpObj = self.GetModuleFightPowerObj(mfpType)
- mfpObj.SetCalcMFPBattleAttr(mfpAttrList)
- for attrIndex, value in mfpAttrExDict.items():
- mfpObj.AddCalcMFPAttr(attrIndex, value)
- mfpObjDict[mfpType] = mfpObj
-
- # 因为计算战力需要取到总属性,所以等各功能点属性累加完后再计算
- for mfpType, mfpObj in mfpObjDict.items():
- mfpValue = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam, curPlayer)
- mfpSkill = GetMFPSkillFightPower(curPlayer, mfpObj.mfpType)
- mfpEx = GetMFPExFightPower(curPlayer, mfpType)
- mfpTotal = mfpValue + mfpSkill + mfpEx
- mfpDict[mfpObj.mfpType] = mfpTotal
-
- if mfpType == ShareDefine.Def_MFPType_Plus:
- OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Plus, mfpTotal)
- elif mfpType == ShareDefine.Def_MFPType_Horse:
- OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Horse, mfpTotal)
- elif mfpType == ShareDefine.Def_MFPType_Wash:
- OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Wash, mfpTotal)
-
- #GameWorld.DebugLog("整体层级线性属性: %s" % allAttrList, playerID)
-
- # 5.被动技能附加属性,不算战力
- passiveSkillAttrList = [{} for _ in range(4)]
- SkillShell.CalcPassiveAttr_Effect(curPlayer, passiveSkillAttrList) # 属性类技能与buff同层
- for funcIndex in ChConfig.CalcAttrFuncSkillList:
- passiveSkillAttrList = AddAttrListValue([passiveSkillAttrList, funcAttrInfoList[funcIndex]])
- GameWorld.DebugLog("无战力被动属性: %s" % passiveSkillAttrList, playerID)
-
- skillFixAttrExDict = {}
- skillFixAddPerDict = passiveSkillAttrList[ChConfig.CalcAttr_BattleNoline]
- for fixAttrType, addPer in skillFixAddPerDict.items():
- if fixAttrType not in allFixAttrDict:
- continue
- curFixValue = allFixAttrDict[fixAttrType]
- addValueEx = int(curFixValue * addPer / 10000.0)
- skillFixAttrExDict[fixAttrType] = addValueEx
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, passiveSkillAttrList[ChConfig.CalcAttr_Battle])
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, skillFixAttrExDict)
-
- #特殊指定属性公式
- GameMap.SpecialMapSetAttrValueByFormat(curPlayer)
-
- #护盾值刷新
- self.__RefreshMaxProDef(beforeMaxProDef)
-
- # 【到此所有功能属性都已刷新处理完毕,复制一份 功能属性的刷新结果,用于BUFF属性单独刷新】
- EffGetSet.CopyPlayerFuncAttr(curPlayer)
-
- # 6.计算buff属性, buff层级的不算如战斗力
- self.__RefreshBuffAttr()
-
- # 7.刷完属性后需要处理的逻辑
- self.__DoRefreshAttrAfterLogic(beforeMaxHP, beforeMoveSpeedValue, playerStateDict)
-
- #通知基础属性
- self.__SyncBaseAttr(curPlayer, baseAttrList)
- #五行灵根变更需要处理的逻辑
- afterPointList = [GetMetal(curPlayer), GetWood(curPlayer), GetWater(curPlayer), GetFire(curPlayer), GetEarth(curPlayer)]
- if beforePointList != afterPointList:
- diffPointAttrList = []
- for i, attrID in enumerate([ShareDefine.Def_Effect_Metal, ShareDefine.Def_Effect_Wood, ShareDefine.Def_Effect_Water,
- ShareDefine.Def_Effect_Fire, ShareDefine.Def_Effect_Earth]):
- if beforePointList[i] != afterPointList[i]:
- diffPointAttrList.append(attrID)
- SkillShell.RefreshElementSkillByAttr(curPlayer, diffPointAttrList)
-# if hasChange_Qualitylv:
-# #灵根品级变化处理
-# ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
-
- # 更新开服活动灵根数据
- OpenServerCampaign.UpdOpenServerCampaignLingGenData(curPlayer)
-
- # 同步前端战力,因为有 SetFightPower 所以累加战力放在这里所有刷新及计算处理完后才处理,才能正常触发set同步前端
- self.SendModuleFightPowerPack(curPlayer, mfpDict)
- billFuncCnt = len(PyGameData.g_refreshAttrBillboardFunc) # 只处理固定次数,防止死循环
- while billFuncCnt > 0 and PyGameData.g_refreshAttrBillboardFunc:
- billFuncCnt -= 1
- billboardFunc = PyGameData.g_refreshAttrBillboardFunc.pop(0)
- GameWorld.DebugLog("回调排行榜: %s" % billboardFunc, playerID)
- billboardFunc(curPlayer, isForceUpdate=True)
-
- # 暂停刷新属性标志,必须被调用
- curPlayer.SetDict(ChConfig.Def_Player_RefreshAttr, 0)
- curPlayer.SetDict(ChConfig.Def_Player_RefreshAttrByBuff, 0)
- curPlayer.SetDict(ChConfig.Def_Player_HadRefreshAttr, 1)
- GameWorld.DebugLog("End RefreshPlayerAttrStateEx!!!", playerID)
- return True
-
-
- # 生命转化为防护值
- def __RefreshMaxProDef(self, beforeMaxProDef):
- curPlayer = self.__Player
- if GetProDefHPPer(curPlayer) == 0:
- return
- maxHP = GameObj.GetMaxHP(curPlayer)
- proDefPer = GetProDefHPPer(curPlayer)
-
- #获取策划配置的表格
- GodWeapon4 = IpyGameDataPY.GetFuncCfg("GodWeapon4", 2)
- maxProDef = eval(FormulaControl.GetCompileFormula("GodWeapon4", GodWeapon4))
- SetMaxProDef(curPlayer, int(maxProDef))
-
- afterMaxProDef = GetMaxProDef(curPlayer)
- addValue = max(0, afterMaxProDef - beforeMaxProDef)
- curProDef = GetProDef(curPlayer)
-
- if beforeMaxProDef > 0 and addValue > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
- # 同步增加 (死亡状态下不刷)
- SetProDef(curPlayer, min(curProDef + addValue, afterMaxProDef))
- elif curProDef > afterMaxProDef:
- # 做一次防范纠正
- SetProDef(curPlayer, min(curProDef, afterMaxProDef))
-
return
-
- def __RefreshBuffAttr(self):
- ## 刷新buff层属性,该层属性只会改变玩家最终属性,不会影响战力等
- curPlayer = self.__Player
- playerID = curPlayer.GetPlayerID()
- allAttrListBuffs = [{} for _ in range(4)]
- # 6.计算buff属性, buff层级的不算如战斗力
- # 算战斗力总值时该层影响的数值不统计,但刷属性时需计算
- SkillShell.CalcBuffers_Effect(curPlayer, allAttrListBuffs)
-
- # 层非线性战斗属性累加
- battleNolineAttrBuff = allAttrListBuffs[ChConfig.CalcAttr_BattleNoline]
- CalcNoLineEffect.AddPlayerMapAttrNolineEffect(curPlayer, battleNolineAttrBuff)
- CalcNoLineEffect.ChangePlayerAttrInNoLineEffectList(curPlayer, battleNolineAttrBuff, isBuffAttr=True)
-
- battleAttrBuff = allAttrListBuffs[ChConfig.CalcAttr_Battle]
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, battleAttrBuff, isBuffAttr=True)
-
- # 速度特殊处理 计算一次
- self.__RefreshMoveSpeed(allAttrListBuffs)
-
- # GM测试属性特殊逻辑
- self.__DoRefreshGMAttr()
-
- # 刷新攻击速度
- self.__SetAtkInterval()
- GameWorld.DebugLog("Buff层属性: %s" % allAttrListBuffs, playerID)
- return
-
- def __DoRefreshGMAttr(self):
- ## 刷新GM测试属性
- curPlayer = self.__Player
- if curPlayer.GetGMLevel() != ChConfig.Def_GM_LV_God:
- return
-
- platform = GameWorld.GetPlatform()
- if not GameWorld.IsTestPlatform(platform):
- return
-
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- if not ipyDataMgr.GetGMAttrCount():
- return
-
- playerAccID = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
- gmIpyData = None
- commIpyData = None
- for i in xrange(ipyDataMgr.GetGMAttrCount()):
- ipyData = ipyDataMgr.GetGMAttrByIndex(i)
- if not ipyData.GetIsValid():
- continue
- gmMaxLV = ipyData.GetGMMaxLV()
- if curPlayer.GetLV() > gmMaxLV:
- continue
- gmAccID = ipyData.GetGMAccID()
- if gmAccID == playerAccID:
- gmIpyData = ipyData
- break
-
- if not gmAccID and not commIpyData:
- commIpyData = ipyData
-
- if not gmIpyData:
- if not commIpyData:
- return
- gmIpyData = commIpyData
-
- setAttrDict = {}
- specAttrDict = gmIpyData.GetAttrSpecDict()
- attrLV = gmIpyData.GetAttrLV()
- attrPer = gmIpyData.GetAttrPer()
- if attrLV:
- if attrLV == 1:
- attrLV = curPlayer.GetLV()
- lvIpyData = GetPlayerLVIpyData(attrLV)
- if lvIpyData:
- setAttrDict[ChConfig.AttrName_MaxHP] = int(lvIpyData.GetReMaxHP() * attrPer) # 最大生命值
- setAttrDict[ChConfig.AttrName_Atk] = int(lvIpyData.GetReAtk() * attrPer) # 攻击(最小、最大攻击)
- setAttrDict[ChConfig.AttrName_Def] = int(lvIpyData.GetReDef() * attrPer) # 防御
- setAttrDict[ChConfig.AttrName_Hit] = int(lvIpyData.GetReHit() * attrPer) # 命中
- setAttrDict[ChConfig.AttrName_DefRate] = int(lvIpyData.GetReMiss() * attrPer) # 闪避
- setAttrDict[ChConfig.AttrName_AtkSpeed] = int((lvIpyData.GetReAtkSpeed() + 10000) * attrPer) # 攻击速度, 策划等级表配置的是附加值,所以这里要加
- setAttrDict[ChConfig.AttrName_SkillAtkRate] = int(max(0, lvIpyData.GetReSkillAtkRate() - 10000) * attrPer) # 技能伤害比例, 策划等级表配置的是最终值,初始值是0,所以这里要减
- setAttrDict[ChConfig.AttrName_DamagePVP] = int(lvIpyData.GetReDamagePer() * attrPer) # PVP固定伤害
- setAttrDict[ChConfig.AttrName_DamagePVPReduce] = int(lvIpyData.GetReDamReduce() * attrPer) # PVP固定减伤
- setAttrDict[ChConfig.AttrName_IgnoreDefRate] = int(lvIpyData.GetReIgnoreDefRate() * attrPer) # 无视防御比例
- setAttrDict[ChConfig.AttrName_LuckyHitRate] = int(lvIpyData.GetReLuckyHitRate() * attrPer) # 会心一击率
- setAttrDict[ChConfig.AttrName_LuckyHit] = int(lvIpyData.GetReLuckyHit() * attrPer) # 会心一击伤害
- setAttrDict[ChConfig.AttrName_BleedDamage] = int(lvIpyData.GetReBleedDamage() * attrPer) # 流血伤害增加
- setAttrDict[ChConfig.AttrName_IceAtk] = int(lvIpyData.GetReIceAtk() * attrPer) # 真实伤害
- setAttrDict[ChConfig.AttrName_IceDef] = int(lvIpyData.GetReIceDef() * attrPer) # 真实抵御
- setAttrDict[ChConfig.AttrName_PetAtk] = int(lvIpyData.GetRePetAtk() * attrPer) # 灵宠攻击
- setAttrDict[ChConfig.AttrName_PetSkillAtkRate] = int(max(0, lvIpyData.GetRePetSkillAtkRate() - 10000) * attrPer) # 灵宠技能, 策划等级表配置的是最终值,初始值是0,所以这里要减
- setAttrDict[ChConfig.AttrName_PetDamPer] = int(lvIpyData.GetRePetDamPer() * attrPer) # 灵宠伤害增加
- setAttrDict[ChConfig.AttrName_FinalHurt] = int(lvIpyData.GetReFinalHurt() * attrPer) # 固定伤害增加
- setAttrDict[ChConfig.AttrName_FinalHurtReduce] = int(lvIpyData.GetReFinalHurtReduce() * attrPer) # 固定伤害减少
-
- # 特殊属性的直接优先级最高,直接覆盖
- for attrType, attrValue in specAttrDict.items():
- setAttrDict[attrType] = attrValue
-
- gmAttrSetInfo = [{} for _ in range(4)]
- for attrType, attrValue in setAttrDict.items():
- if not attrValue:
- setAttrDict.pop(attrType)
- continue
- CalcAttrDict_Type(attrType, attrValue, gmAttrSetInfo)
-
- # 直接设置的属性
- if gmAttrSetInfo:
- for key, value in gmAttrSetInfo[ChConfig.CalcAttr_Battle].items():
- EffGetSet.SetValueByEffIndex(curPlayer, key, value)
-
- # 附加属性
- attrExDict = gmIpyData.GetAttrExDict()
- gmAttrExInfo = [{} for _ in range(4)]
- for attrType, attrValue in attrExDict.items():
- CalcAttrDict_Type(attrType, attrValue, gmAttrExInfo)
- CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, gmAttrExInfo[ChConfig.CalcAttr_Battle])
-
- GameWorld.DebugLog("GM测试设置属性: GMAttrID=%s,playerAccID=%s" % (gmIpyData.GetGMAttrID(), playerAccID))
- GameWorld.DebugLog(" GM等级属性: GMAttrLV=%s,attrPer=%s,setAttrDict=%s,specAttrDict=%s,%s"
- % (attrLV, attrPer, setAttrDict, specAttrDict, gmAttrSetInfo))
- GameWorld.DebugLog(" GM附加属性: attrExDict=%s,%s" % (attrExDict, gmAttrExInfo))
- return
-
- def __DoRefreshAttrAfterLogic(self, beforeMaxHP, beforeMoveSpeedValue, playerStateDict):
- '''刷完总属性(功能属性 + buff属性) 后需要处理的逻辑
- 包含一些数值纠正、属性变更通知等
- @attention: 此函数为刷 功能属性 及 buff属性 通用逻辑,所以不是受buff影响的相关处理请不要放这里,比如战斗力等
- '''
- curPlayer = self.__Player
- #------------------------------计算完毕--------------------------------
- afterMaxHP = GameObj.GetMaxHP(curPlayer)
- addMaxHP = max(0, afterMaxHP - beforeMaxHP)
- if beforeMaxHP > 0 and addMaxHP > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
- # 最大血量增加时,同步增加等量的当前血量 (死亡状态下不刷当前血量)
- GameObj.SetHP(curPlayer, min(GameObj.GetHP(curPlayer) + addMaxHP, afterMaxHP))
- #self.PrintAttr(curPlayer, "最终的")
- curPlayer.EndRefreshState() # 统一在刷属性结束逻辑中调用
- #---------------------------------------------------------------------
- #把属性合并通知
- self.NotifyAllState(playerStateDict)
-
- #移动速度不同则通知给客户端, 功能层处理的是 SpeedNotBuff , 通知客户端的需要是最终的 SpeedValue
- if beforeMoveSpeedValue != GetSpeedValue(curPlayer):
- SetSpeedValue(curPlayer, GetSpeedValue(curPlayer))
-
- #纠正当前血魔量不超过最大值
- self.__RestoreHPMP()
-
- #通知客户端玩家当前经验倍率
- Sync_ExpRateChange(curPlayer)
- return
-
- def __SyncBaseAttr(self, curPlayer, baseAttrList):
- baseBattleAttrDict = baseAttrList[ChConfig.CalcAttr_Battle]
- attrTypeKeyDict = {ChConfig.TYPE_Calc_AttrATKMin:[ChConfig.Def_PlayerKey_BaseAtkMin, ShareDefine.CDBPlayerRefresh_BaseAtkMin],
- ChConfig.TYPE_Calc_AttrATKMax:[ChConfig.Def_PlayerKey_BaseAtkMax, ShareDefine.CDBPlayerRefresh_BaseAtkMax],
- ChConfig.TYPE_Calc_AttrMaxHP:[ChConfig.Def_PlayerKey_BaseMaxHP, ShareDefine.CDBPlayerRefresh_BaseMaxHP],
- ChConfig.TYPE_Calc_AttrDEF:[ChConfig.Def_PlayerKey_BaseDef, ShareDefine.CDBPlayerRefresh_BaseDef],
- ChConfig.TYPE_Calc_AttrHit:[ChConfig.Def_PlayerKey_BaseHit, ShareDefine.CDBPlayerRefresh_BaseHit],
- ChConfig.TYPE_Calc_AttrMiss:[ChConfig.Def_PlayerKey_BaseMiss, ShareDefine.CDBPlayerRefresh_BaseMiss],
- }
-
- notifySList = []
- for attrType, attrInfo in attrTypeKeyDict.items():
- attrKey, refreshType = attrInfo
- baseValue = baseBattleAttrDict.get(attrType, 0)
- curBaseValue = curPlayer.GetDictByKey(attrKey)
- if baseValue != curBaseValue:
- curPlayer.SetDict(attrKey, baseValue)
-
- notifyStruct = ChPyNetSendPack.tagRefreshType()
- notifyStruct.RefreshType = refreshType
- notifyStruct.Value = baseValue
- notifySList.append(notifyStruct)
-
- # 通知基础属性
- if notifySList:
- sendPack = ChPyNetSendPack.tagObjInfoListRefresh()
- sendPack.Clear()
- sendPack.ObjID = curPlayer.GetID()
- sendPack.ObjType = curPlayer.GetGameObjType()
- sendPack.Count = len(notifySList)
- sendPack.RefreshType = notifySList
- NetPackCommon.SendFakePack(curPlayer, sendPack)
- return
-
- #---------------------------------------------------------------------
## 刷新玩家技能战斗力
# @param self 类实例
# @return 返回值无意义
# @remarks 刷新玩家被动技能Buff
def RefreshAllSkill(self):
- curPlayer = self.__Player
-
- skillManager = curPlayer.GetSkillManager()
-
- # 重置模块技能战斗力
- for mfpType in ShareDefine.ModuleFightPowerTypeList:
- SetMFPSkillFightPower(curPlayer, mfpType, 0)
-
- for i in range(0, skillManager.GetSkillCount()):
- curSkill = skillManager.GetSkillByIndex(i)
-
- mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
-
- skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
- SetMFPSkillFightPower(curPlayer, mfpType, skillMFP + curSkill.GetFightPower())
-
return
## 技能升级刷属性战斗力处理
def RefreshSkillFightPowerEx(self, skillID, beforeFightPower, isRefreshState=True):
- curPlayer = self.__Player
- # 新技能战力-旧技能战力为增加的技能战力
- curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
- if not curSkill:
- return
-
- mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
- addFightPower = curSkill.GetFightPower() - beforeFightPower
- skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
- SetMFPSkillFightPower(curPlayer, mfpType, max(0, skillMFP + addFightPower))
- GameWorld.DebugLog("刷新技能附加战斗力: skillID=%s,beforeFightPower=%s,mfpType=%s,skillMFP=%s,updMFP=%s"
- % (skillID, beforeFightPower, mfpType, skillMFP, skillMFP + addFightPower), curPlayer.GetPlayerID())
-
- if isRefreshState:
- # 如果需要同步排行榜的话先强制刷属性
- self.RefreshPlayerAttrState()
-
return
def RefreshSkillFightPowerByDel(self, delSkillID, isRefreshState=True):
- curPlayer = self.__Player
- # 新技能战力-旧技能战力为增加的技能战力
- curSkill = GameWorld.GetGameData().GetSkillBySkillID(delSkillID)
- if not curSkill:
- return
- delFightPower = curSkill.GetFightPower()
- mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
- skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
- SetMFPSkillFightPower(curPlayer, mfpType, max(0, skillMFP - delFightPower))
- GameWorld.DebugLog("刷新技能附加战斗力: delSkillID=%s,mfpType=%s,skillMFP=%s,delFightPower=%s"
- % (delSkillID, mfpType, skillMFP, delFightPower), curPlayer.GetPlayerID())
-
- if isRefreshState:
- # 如果需要同步排行榜的话先强制刷属性
- self.RefreshPlayerAttrState()
-
return
## 计算被动buff属性加成
# @param self 类实例
# @return
def CalcPassiveBuffAttr(self):
- #=======================================================================
- # curPlayer = self.__Player
- # allAttrListPassive = [{} for i in range(4)]
- # SkillShell.CalcCurBuffer_Effect(curPlayer.GetPassiveBuf(), curPlayer, allAttrListPassive)
- # SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PassiveBuf, allAttrListPassive)
- #=======================================================================
return
-
- ## //A3 A1 各功能模块战斗力信息 #tagMCModuleFightPowerInfo
- # @param curPlayer 玩家
- # @return None
- def SendModuleFightPowerPack(self, curPlayer, mfpDict):
- mfpDataList = []
- totalFightPower = 0
- playerID = curPlayer.GetPlayerID()
- GameWorld.DebugLog("战力功能点: %s" % ChConfig.MFPTypeAttrFuncIndexDict, playerID)
- GameWorld.DebugLog("模块战力: %s" % mfpDict, playerID)
- for mfpType, fightPower in mfpDict.items():
- SetMFPFightPower(curPlayer, mfpType, fightPower)
- mfpData = ChPyNetSendPack.tagMCModuleFightPower()
- mfpData.Clear()
- mfpData.MfpType = mfpType
- mfpData.FightPower = fightPower % ChConfig.Def_PerPointValue # 当前模块战斗力数值
- mfpData.FightPowerEx = fightPower / ChConfig.Def_PerPointValue # 当前模块战斗力数值
- mfpDataList.append(mfpData)
- totalFightPower += fightPower # 累加总战斗力
-
- # //A3 A1 各功能模块战斗力信息 #tagMCModuleFightPowerInfo
- mfpInfo = ChPyNetSendPack.tagMCModuleFightPowerInfo()
- mfpInfo.Clear()
-
- mfpInfo.TotalFightPower = totalFightPower % ChConfig.Def_PerPointValue
- mfpInfo.TotalFightPoweEx = totalFightPower / ChConfig.Def_PerPointValue
- mfpInfo.MFPCnt = len(mfpDataList)
- mfpInfo.MFPList = mfpDataList
- NetPackCommon.SendFakePack(curPlayer, mfpInfo)
- beforeFightPower = GetFightPower(curPlayer)
- SetFightPower(curPlayer, totalFightPower)
- if totalFightPower < beforeFightPower:
- DataRecordPack.DR_FightPowerChangeInfo(curPlayer, beforeFightPower)
- highestFightPower = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_Highest, 0,
- ChConfig.Def_PDictType_FightPower)
- highestFightPower += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_HighestEx, 0,
- ChConfig.Def_PDictType_FightPower) * ChConfig.Def_PerPointValue
- if totalFightPower > highestFightPower:
- highestFightPower = totalFightPower
- NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Highest, highestFightPower % ChConfig.Def_PerPointValue,
- ChConfig.Def_PDictType_FightPower)
- NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_HighestEx, highestFightPower / ChConfig.Def_PerPointValue,
- ChConfig.Def_PDictType_FightPower)
- GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (totalFightPower, highestFightPower, beforeFightPower), playerID)
- PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
- # 记录开服活动数据
- OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower)
- if beforeFightPower != totalFightPower:
- CrossPlayerData.OnPlayerFightPowerChange(curPlayer)
- return
-
- def __RefreshMoveSpeed(self, allAttrListBuffs):
- ## 刷新移动速度
- curPlayer = self.__Player
- playerID = curPlayer.GetPlayerID()
-
- moveSpeedFormat = IpyGameDataPY.GetFuncCfg("MoveSpeed")
-
- speed = GetSpeedNotBuff(curPlayer)
- GameWorld.DebugLog("功能移动速度值: speed=%s" % speed, playerID)
-
- # 骑乘状态加上骑乘附加速度
- if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvHorse:
- speedHorse = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SpeedHorse)
- speed += speedHorse
- GameWorld.DebugLog(" 骑乘状态附加值: %s, speed=%s" % (speedHorse, speed), playerID)
-
-
- buffBattleAttr = allAttrListBuffs[ChConfig.CalcAttr_Battle]
- buffBattleNolineAttr = allAttrListBuffs[ChConfig.CalcAttr_BattleNoline]
- #buff速度加成
- buffSpeed = buffBattleAttr.get(ChConfig.TYPE_Calc_AttrSpeed, 0)
- buffSpeedPer = buffBattleNolineAttr.get(ChConfig.TYPE_Calc_AttrSpeed, 0)
-
- if buffSpeed or buffSpeedPer:
- speed = int(speed * (ShareDefine.Def_MaxRateValue + buffSpeedPer) / float(ShareDefine.Def_MaxRateValue) + buffSpeed)
- GameWorld.DebugLog(" buff影响后速度值: speed=%s,buffSpeedPer=%s,buffSpeed=%s" % (speed, buffSpeedPer, buffSpeed), playerID)
-
- speed = max(speed, 0) #防小于0错误
-
- if GetSpeedValue(curPlayer) != speed:
- SetSpeedValue(curPlayer, speed)
- moveSpeed = eval(FormulaControl.GetCompileFormula("MoveSpeed", moveSpeedFormat))
- curPlayer.SetSpeed(moveSpeed)
- GameWorld.DebugLog("公式计算后移动频率: moveSpeed=%s 毫秒/格" % moveSpeed, playerID)
-
- fightPet = curPlayer.GetPetMgr().GetFightPet()
- #无出战宠物
- if fightPet:
- fightPet.SetSpeed(moveSpeed)
-
- return
-
- ##刷新攻击间隔
- # @param self 类实例
- # @return None
- def __SetAtkInterval(self):
- curPlayer = self.__Player
-
- atkSpeed = GameObj.GetAtkSpeed(curPlayer)
-
- formula = IpyGameDataPY.GetFuncCfg("AtkInterval")
- atkInterval = 0 if not formula else eval(FormulaControl.GetCompileFormula("AtkInterval", formula))
- curPlayer.SetAtkInterval(atkInterval)
- return
-
## 刷新玩家所有行为BUFF状态
# @param self 类实例
# @return 返回值无意义
# @remarks 刷新玩家所有行为BUFF状态
def RefreshPlayerActionState(self):
- curPlayer = self.__Player
- playerID = curPlayer.GetPlayerID()
- GameWorld.DebugLog("Start RefreshPlayerActionState!!!", playerID)
- #curTime = time.clock()
-
- #先清除所有状态
- OperControlManager.ClearObjActionState(curPlayer)
-
- #再根据BUFF 加上状态
- SkillShell.CalcBuffer_ActionState(curPlayer)
-
- #---------------------------------------------------------------------
- ## 刷新血量和魔
- # @param self 类实例
- # @return 返回值无意义
- # @remarks 刷新血量和魔
- def __RestoreHPMP(self):
- curPlayer = self.__Player
-
- if not curPlayer.GetInitOK():
- #玩家未初始化成功, 不修正血量和魔法值, 因此时有可能因为某些影响主角的物品未初始化完毕(如宠物装备)
- return
-
- curPlayerHP = GameObj.GetHP(curPlayer)
- curPlayerMaxHP = GameObj.GetMaxHP(curPlayer)
- #=======================================================================
- # curPlayerMP = curPlayer.GetMP()
- # curPlayerMaxMP = curPlayer.GetMaxMP()
- #=======================================================================
-
- if curPlayerHP > curPlayerMaxHP:
- GameObj.SetHPFull(curPlayer)
-
- #=======================================================================
- # if curPlayerMP > curPlayerMaxMP:
- # curPlayer.SetMP(curPlayerMaxMP)
- #=======================================================================
-
- return
- #---------------------------------------------------------------------
- ## 初始化玩家基本状态 这里不对( 计算现有战斗属性中的元素进行处理 )
- # @param self 类实例
- # @return 返回值无意义
- # @remarks 初始化玩家基本状态 这里不对( 计算现有战斗属性中的元素进行处理 )
- def InitPlayerState(self):
- curPlayer = self.__Player
- #清空战斗属性 //战斗属性设置数值为0的, 由C++处理 如元素属性,命中等
- curPlayer.ClearBattleEffect()
-
- initAttrDict = {
- #ChConfig.TYPE_Calc_AttrCurSTR:curPlayer.GetBaseSTR(),
- #ChConfig.TYPE_Calc_AttrCurPNE:curPlayer.GetBasePNE(),
- #ChConfig.TYPE_Calc_AttrCurPHY:curPlayer.GetBasePHY(),
- #ChConfig.TYPE_Calc_AttrCurCON:curPlayer.GetBaseCON(),
- #ChConfig.TYPE_Calc_AttrSpeed:curPlayer.GetBaseSpeed(),
- ChConfig.TYPE_Calc_AttrAtkSpeed:ChConfig.Def_BaseAtkSpeed,
- ChConfig.TYPE_Calc_AttrFightExpRate:GameWorld.GetGameWorld().GetExpRate(),
- ChConfig.TYPE_Calc_AttrGameExpRate:GameWorld.GetGameWorld().GetExpRate(),
- ChConfig.TYPE_Calc_AttrPetExpRate:GameWorld.GetGameWorld().GetExpRate(),
- ChConfig.TYPE_Calc_HitSucessRate:ChConfig.Def_MaxRateValue,
- ChConfig.TYPE_Calc_CurePer:ChConfig.Def_MaxRateValue,
- ChConfig.TYPE_Calc_YinjiTime:IpyGameDataPY.GetFuncCfg('Yinji', 1), # 每X秒自动消失一个印记
- }
-
- for i in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
- if i in [ChConfig.TYPE_Calc_AttrHP, ChConfig.TYPE_Calc_AttrMP, ChConfig.TYPE_Calc_ProDef]:
- continue
- value = 0 if i not in initAttrDict else initAttrDict[i]
- EffGetSet.SetValueByEffIndex(curPlayer, i, value)
-
- #初始化拾取距离
- if curPlayer.GetPickupDist() != ChConfig.Def_RolePickupItemDist:
- curPlayer.SetPickupDist(ChConfig.Def_RolePickupItemDist)
-
- #玩家初始化可攻击
- if not curPlayer.GetCanAttack():
- curPlayer.SetCanAttack(True)
-
- #初始化灵根
- SetMetal(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Metal))
- SetWood(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Wood))
- SetWater(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Water))
- SetFire(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Fire))
- SetEarth(curPlayer, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % ShareDefine.Def_Effect_Earth))
- return True
-
- #---------------------------------------------------------------------
- ## 初始化场景buff
- # @param self 类实例
- # @return 返回值无意义
- # @remarks 初始化场景buff
- def InitMapBuffState(self):
- curPlayer = self.__Player
-
- #初始化区域, 默认为普通区域
- if GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY()) != IPY_GameWorld.gatNormal:
- curPlayer.SetAreaType(IPY_GameWorld.gatNormal)
-
return
#---------------------------------------------------------------------
@@ -5660,7 +4412,6 @@
def Sync_ExpRateChange(curPlayer):
totalExpRate = GetPlayerExpRate(curPlayer)
fightExpRate = curPlayer.GetFightExpRate() # 系统及功能累加
- fightExpRate += PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) # 世界等级
fightExpRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FightExpRate) # VIP加成
fightExpRate += PlayerGoldInvest.GetAddFightExpRate(curPlayer)
@@ -5717,17 +4468,6 @@
totalExpRate -= effExpRate
return totalExpRate
-
-##记录玩家失去金钱的流向记录,消息中会记录玩家拥有的金钱信息
-# @param curPlayer 玩家实例
-# @param moneyType 金钱类型
-# @param logIndex 流向记录索引
-# @param tagID 在此用于记录特别标识(物品ID)
-# @param par 在此用于记录金额
-# @param msg 记录特别的信息
-# @return None
-def DataServerMoneyLog(curPlayer, moneyType, logIndex, tagID=0, par=0, msg=""):
- return
#===============================================================================
#---玩家扩展字段---
@@ -5917,8 +4657,8 @@
def SetVIPExpireTime(curPlayer, expireTime): return
##最近一次提升VIP等级时间
-def GetVIPLVUpTime(curPlayer): return curPlayer.GetExAttr9()
-def SetVIPLVUpTime(curPlayer, lvUpTime): return curPlayer.SetExAttr9(lvUpTime, False, True)
+def GetVIPLVUpTime(curPlayer): return 0
+def SetVIPLVUpTime(curPlayer, lvUpTime): return
##聊天气泡框
def GetChatBubbleBox(curPlayer): return curPlayer.GetExAttr10()
@@ -5979,69 +4719,16 @@
GameWorld.DebugLog("更新玩家所属服务器组ID: serverGroupID=%s" % serverGroupID)
return
-##影响外观的3部位索引记录 123456789 123:武器格子索引 456:副手 789:衣服
-def GetFaceEquipIndexList(curPlayer):
- attr15 = curPlayer.GetExAttr15()
- return [attr15%1000, attr15/1000%1000, attr15/1000000]
-def SetFaceEquipIndex(curPlayer, value): return curPlayer.SetExAttr15(value)
-
-def SetLingGenMaxIndex(curPlayer):
- return
-
# 境界难度等级
-def GetRealmDifficulty(curPlayer): return curPlayer.GetExAttr18()
+def GetRealmDifficulty(curPlayer): return 0
def SetRealmDifficulty(curPlayer, realmDifficulty):
''' 设置境界难度等级,任何地图均可选择
'''
- playerID = curPlayer.GetPlayerID()
-
- if realmDifficulty:
- needRealmLV = GetDifficultyRealmLV(realmDifficulty)
- curRealmLV = curPlayer.GetOfficialRank()
- if curRealmLV < needRealmLV:
- GameWorld.DebugLog("当前境界低于境界难度,无法选择! curRealmLV(%s) < %s" % (curRealmLV, needRealmLV), playerID)
- return
-
- difficultyRealmList = IpyGameDataPY.GetFuncEvalCfg("RealmDifficulty", 2)
- if needRealmLV not in difficultyRealmList:
- GameWorld.ErrLog("realmDifficulty(%s) needRealmLV(%s) not in difficultyRealmList(%s)"
- % (realmDifficulty, needRealmLV, difficultyRealmList), playerID)
- return
-
- GameWorld.DebugLog("SetRealmDifficulty: realmDifficulty=%s" % realmDifficulty, playerID)
- realmMapIDList = IpyGameDataPY.GetFuncEvalCfg("RealmDifficulty", 1)
- mapID = curPlayer.GetMapID()
- if mapID in realmMapIDList:
- # 先移除之前选的难度
- for playerIDList in PyGameData.g_realmDiffPlayerDict.values():
- if playerID in playerIDList:
- playerIDList.remove(playerID)
-
- # 加入新难度,0难度不处理
- if realmDifficulty:
- if realmDifficulty not in PyGameData.g_realmDiffPlayerDict:
- PyGameData.g_realmDiffPlayerDict[realmDifficulty] = []
- playerIDList = PyGameData.g_realmDiffPlayerDict[realmDifficulty]
- if playerID not in playerIDList:
- playerIDList.append(playerID)
-
- SetPlayerSightLevel(curPlayer, realmDifficulty)
-
- if curPlayer.GetExAttr18() != realmDifficulty:
- curPlayer.SetExAttr18(realmDifficulty)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ExAttr18, realmDifficulty)
return
-def GetDifficultyRealmLV(realmDifficulty): return realmDifficulty % 1000
+def GetDifficultyRealmLV(realmDifficulty): return 0
def GetMapRealmDifficulty(curPlayer):
## 获取玩家在本地图中的境界难度层级,必须在境界地图且有选择境界难度才算,否则为默认0;该难度值同时也是视野层级
- realmDifficulty = GetRealmDifficulty(curPlayer)
- if not realmDifficulty:
- return 0
- mapID = curPlayer.GetMapID()
- realmMapIDList = IpyGameDataPY.GetFuncEvalCfg("RealmDifficulty", 1)
- if mapID not in realmMapIDList:
- return 0
- return realmDifficulty
+ return 0
##玩家离开仙盟时间(主动或被踢都算)
def GetLeaveFamilyTimeEx(curPlayer):return curPlayer.GetExAttr19()
@@ -6051,48 +4738,42 @@
curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ExAttr19, value, 0, False)
return
-##获得玩家威望值
-def GetPrestige(curPlayer): return 0
-def SetPrestige(curPlayer, value): return
-
##总战斗力,支持超过20E = 各模块战力总和
def GetFightPower(curPlayer): return curPlayer.GetFightPowerEx() * ChConfig.Def_PerPointValue + curPlayer.GetFightPower()
def SetFightPower(curPlayer, value):
+ beforeFightPower = GetFightPower(curPlayer)
curPlayer.SetFightPower(value % ChConfig.Def_PerPointValue, value / ChConfig.Def_PerPointValue, False) # 不通知GameServer bNotifyGameServer False
+ if value < beforeFightPower:
+ DataRecordPack.DR_FightPowerChangeInfo(curPlayer, beforeFightPower)
+ highestFightPower = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_Highest)
+ highestFightPower += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_HighestEx) * ChConfig.Def_PerPointValue
+ if value > highestFightPower:
+ highestFightPower = value
+ NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Highest, highestFightPower % ChConfig.Def_PerPointValue)
+ NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_HighestEx, highestFightPower / ChConfig.Def_PerPointValue)
+
+ GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (value, highestFightPower, beforeFightPower), curPlayer.GetPlayerID())
+ PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
+ # 记录开服活动数据
+ #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower)
+ #if beforeFightPower != totalFightPower:
+ # CrossPlayerData.OnPlayerFightPowerChange(curPlayer)
return
## 设置模块战斗力,支持超过20E = 模块公式战力 + 技能附加战力 + 其他附加战力
-def SetMFPFightPower(curPlayer, mfpType, fightPower):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPower % mfpType, fightPower % ChConfig.Def_PerPointValue)
- curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPowerPoint % mfpType, fightPower / ChConfig.Def_PerPointValue)
- return
-
+def SetMFPFightPower(curPlayer, mfpType, fightPower): return
## 获取模块战斗力
-def GetMFPFightPower(curPlayer, mfpType):
- return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPFightPowerPoint % mfpType) * ChConfig.Def_PerPointValue + \
- curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPFightPower % mfpType)
+def GetMFPFightPower(curPlayer, mfpType): return 0
## 设置模块附加战斗力,支持超过20E
-def SetMFPExFightPower(curPlayer, mfpType, fightPower):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % mfpType, fightPower % ChConfig.Def_PerPointValue)
- curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPExPoint % mfpType, fightPower / ChConfig.Def_PerPointValue)
- return
-
+def SetMFPExFightPower(curPlayer, mfpType, fightPower): return
## 获取模块附加战斗力
-def GetMFPExFightPower(curPlayer, mfpType):
- return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPExPoint % mfpType) * ChConfig.Def_PerPointValue + \
- curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpType)
+def GetMFPExFightPower(curPlayer, mfpType): return 0
## 设置模块技能附加战斗力,支持超过20E
-def SetMFPSkillFightPower(curPlayer, mfpType, fightPower):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % mfpType, fightPower % ChConfig.Def_PerPointValue)
- curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkillEx % mfpType, fightPower / ChConfig.Def_PerPointValue)
- return
-
+def SetMFPSkillFightPower(curPlayer, mfpType, fightPower): return
## 获取模块技能附加战斗力
-def GetMFPSkillFightPower(curPlayer, mfpType):
- return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkillEx % mfpType) * ChConfig.Def_PerPointValue + \
- curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpType)
+def GetMFPSkillFightPower(curPlayer, mfpType): return 0
#===============================================================================
##获取玩家分线信息
@@ -6131,19 +4812,6 @@
atkInterval *= 100
return atkInterval
-
-def AddZhenQiByKillNPC(curPlayer, npcSP, killCount=1):
- ## 杀怪加真气
- if not npcSP:
- return
- addSPValue = npcSP * killCount
- npcSPRate = PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_NPCSPRate)
-
- if npcSPRate:
- npcHPRate = ChConfig.Def_MaxRateValue + npcSPRate
- addSPValue = int(addSPValue * npcHPRate / float(ChConfig.Def_MaxRateValue))
- PlayerAddZhenQi(curPlayer, addSPValue)
- return
##玩家增加真气
# @param curPlayer 玩家
@@ -6198,16 +4866,8 @@
return True
## SP真气值 - 暂废弃 ExAttr7、ExAttr8 改为专精选择通知,用于前端表现其他玩家的不同专精特效
-def GetZhenQi(curPlayer): return 0 #curPlayer.GetExAttr8() * ChConfig.Def_PerPointValue + curPlayer.GetExAttr7()
-def SetZhenQi(curPlayer, totalZhenQi):
-# zhenQi = totalZhenQi % ChConfig.Def_PerPointValue
-# zhenQiPoint = min(totalZhenQi / ChConfig.Def_PerPointValue, ChConfig.Def_UpperLimit_DWord)
-# # 玩家单独通知,不广播; c++接口默认广播,故这里设置False
-# if zhenQi != curPlayer.GetExAttr7():
-# curPlayer.SetExAttr7(zhenQi)
-# if zhenQiPoint != curPlayer.GetExAttr8():
-# curPlayer.SetExAttr8(zhenQiPoint)
- return
+def GetZhenQi(curPlayer): return 0
+def SetZhenQi(curPlayer, totalZhenQi): return
#===============================================================================
# #@warning: ExAttr6~ExAttr10, 新增2个布尔默认参数, 是否通知客户端, 是否通知GameServer, 默认值为False
@@ -6413,36 +5073,6 @@
GameWorld.AddDictValue(allAttrDict, {i:value})
return
-#===============================================================================
-# CalcAttr_Base,
-# CalcAttr_BaseNoline,
-# CalcAttr_Battle,
-# CalcAttr_BattleNoline,
-#===============================================================================
-
-# 从srcAttrList计算出addAttrList带来的固定属性,用于后续计算使用
-#===============================================================================
-# def CalcAddFuncAttrByAttrList(srcAttrList, addAttrList):
-# for addKey, addValue in addAttrList[ChConfig.CalcAttr_BaseNoline].items():
-# value = srcAttrList[ChConfig.CalcAttr_Base].get(addKey, 0)
-# if value == 0:
-# continue
-#
-# addAttrList[ChConfig.CalcAttr_Base][addKey] = addAttrList[ChConfig.CalcAttr_Base].get(addKey, 0)\
-# + value*addValue / ChConfig.Def_MaxRateValue
-#
-# addAttrList[ChConfig.CalcAttr_BaseNoline] = {}
-# for addKey, addValue in addAttrList[ChConfig.CalcAttr_BattleNoline].items():
-# value = srcAttrList[ChConfig.CalcAttr_Battle].get(addKey, 0)
-# if value == 0:
-# continue
-#
-# addAttrList[ChConfig.CalcAttr_Battle][addKey] = addAttrList[ChConfig.CalcAttr_Battle].get(addKey, 0)\
-# + value*addValue / ChConfig.Def_MaxRateValue
-#
-# addAttrList[ChConfig.CalcAttr_BattleNoline] = {}
-# return addAttrList
-#===============================================================================
## 培养境界等级
def GetTrainRealmLVReal(curPlayer, funcType):
trainRealmLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TrainRealmLV % funcType)
@@ -6482,324 +5112,23 @@
def GetTotalLingGenPoint(curPlayer):
# 总灵根点数(金木水火土+自由点数)
- attrIDList = [ShareDefine.Def_Effect_Metal, ShareDefine.Def_Effect_Wood, ShareDefine.Def_Effect_Water, ShareDefine.Def_Effect_Fire, ShareDefine.Def_Effect_Earth]
- curTotalPoint = 0
- for attrID in attrIDList:
- curTotalPoint += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID)
- curTotalPoint += curPlayer.GetFreePoint()
- return curTotalPoint
+ return 0
# 灵根 - 金木水火土
-def GetMetal(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Metal)
-def SetMetal(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Metal, value)
-def GetWood(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Wood)
-def SetWood(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Wood, value)
-def GetWater(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Water)
-def SetWater(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Water, value)
-def GetFire(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Fire)
-def SetFire(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Fire, value)
-def GetEarth(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Earth)
-def SetEarth(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_Earth, value)
-# 灵根品级 - 金木水火土
-def GetMetalQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MetalQualityLV)
-def SetMetalQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_MetalQualityLV, value)
-def GetWoodQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_WoodQualityLV)
-def SetWoodQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_WoodQualityLV, value)
-def GetWaterQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_WaterQualityLV)
-def SetWaterQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_WaterQualityLV, value)
-def GetFireQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FireQualityLV)
-def SetFireQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FireQualityLV, value)
-def GetEarthQualityLV(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_EarthQualityLV)
-def SetEarthQualityLV(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_EarthQualityLV, value)
+def GetMetal(curPlayer): return 0
+def GetWood(curPlayer): return 0
+def GetWater(curPlayer): return 0
+def GetFire(curPlayer): return 0
+def GetEarth(curPlayer): return 0
#---玩家扩展接口, 战斗属性,不存数据库,只通知本人---
-##玩家移动速度值, 不含buff对速度的影响; 功能等对速度的影响直接改变此值
-def GetSpeedNotBuff(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SpeedValueNotBuff)
-def SetSpeedNotBuff(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedValueNotBuff, value)
-##玩家移动速度值, 含buff对速度的影响; 此数值不是真正的移动速度,只是用于计算移动速度的参数值
-def GetSpeedValue(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SpeedValue)
-def SetSpeedValue(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedValue, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SpeedValue, value, True) # 移动速度值暂定广播周围玩家
-
-#---攻击回复血量比率----
-## 获取玩家攻击回复血量比率
-# @param curPlayer 玩家实例
-# @return
-def GetAtkBackHPPer(curPlayer):
- return curPlayer.GetBattleValEx2()
-
-
-## 设置玩家攻击回复血量比率
-# @param curPlayer 玩家实例
-# @return None
-def SetAtkBackHPPer(curPlayer, value):
- curPlayer.SetBattleValEx2(value)
-
-## 获取玩家攻击回复蓝量比率
-def GetAtkBackMPPer(curPlayer): return 0
-def SetAtkBackMPPer(curPlayer, value): return
-
## 玩家减技能CD比例
-def GetReduceSkillCDPer(curPlayer): return curPlayer.GetBattleValEx3()
-def SetReduceSkillCDPer(curPlayer, reducePer): return curPlayer.SetBattleValEx3(reducePer)
+def GetReduceSkillCDPer(curPlayer): return 0
+def SetReduceSkillCDPer(curPlayer, reducePer): return
-## 常规地图经验倍率加成
-def GetCommMapExpRate(curPlayer):
- if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
- return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CommMapExpRate)
- return 0
-def SetCommMapExpRate(curPlayer, expRate): return curPlayer.SetDict(ChConfig.Def_PlayerKey_CommMapExpRate, expRate)
-
-## 对怪物伤害加成
-def GetNPCHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NPCHurtAddPer)
-def SetNPCHurtAddPer(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_NPCHurtAddPer, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_NPCHurtAddPer, value)
-
-#---职业伤害加成---
-## 目标战士伤害加成
-def GetJobAHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobAHurtAddPer)
-def SetJobAHurtAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobAHurtAddPer, value)
-## 目标法师伤害加成
-def GetJobBHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobBHurtAddPer)
-def SetJobBHurtAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobBHurtAddPer, value)
-## 目标弓手伤害加成
-def GetJobCHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobCHurtAddPer)
-def SetJobCHurtAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobCHurtAddPer, value)
-
-#---伤害减免---
-## NPC攻击伤害减免
-def GetNPCAtkReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NPCAtkReducePer)
-def SetNPCAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_NPCAtkReducePer, value)
-## 战士攻击伤害减免
-def GetJobAAtkReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobAAtkReducePer)
-def SetJobAAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobAAtkReducePer, value)
-## 法师攻击伤害减免
-def GetJobBAtkReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobBAtkReducePer)
-def SetJobBAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobBAtkReducePer, value)
-## 弓手攻击伤害减免
-def GetJobCAtkReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_JobCAtkReducePer)
-def SetJobCAtkReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_JobCAtkReducePer, value)
-
-#---特殊伤害减免---
-## 会心一击伤害减免固定值
-def GetLuckyHitReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LuckyHitReduce)
-def SetLuckyHitReduce(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_LuckyHitReduce, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_LuckyHitReduce, value)
-
-## 卓越一击伤害减免
-def GetGreatHitReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitReducePer)
-def SetGreatHitReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitReducePer, value)
-
-## 无视防御伤害减免
-def GetIgnoreDefReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefReducePer)
-def SetIgnoreDefReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_IgnoreDefReducePer, value)
-
-#---抗特殊伤害概率---
-## 抗会心一击概率
-def GetLuckyHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LuckyHitRateReduce)
-def SetLuckyHitRateReduce(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_LuckyHitRateReduce, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_LuckyHitRateReduce, value)
-## 抗卓越一击概率
-def GetGreatHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitRateReduce)
-def SetGreatHitRateReduce(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitRateReduce, value)
-
-## 抗无视防御概率
-def GetIgnoreDefRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefRateReduce)
-def SetIgnoreDefRateReduce(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_IgnoreDefRateReduce, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_IgnoreDefRateReduce, value)
-
-#---特殊伤害概率---
-## 富豪一击概率
-def GetFuhaoHitRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FuhaoHitRate)
-def SetFuhaoHitRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FuhaoHitRate, value)
-
-## 流血伤害
-def GetBleedDamage(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BleedDamage)
-def SetBleedDamage(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_BleedDamage, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BleedDamage, value)
-
-## Boss最终伤害百分比
-def GetBossFinalHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BossFinalHurtPer)
-def SetBossFinalHurtPer(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_BossFinalHurtPer, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossFinalHurtPer, value)
-
-## 最终固定伤害增加
-def GetFinalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurt)
-def SetFinalHurt(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurt, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FinalHurt, value)
-## 最终固定伤害减少
-def GetFinalHurtReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtReduce)
-def SetFinalHurtReduce(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurtReduce, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FinalHurtReduce, value)
-## 对指定boss伤害加成固定值
-def GetBossIDHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BossIDHurt)
-def SetBossIDHurt(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BossIDHurt, value)
-## 对指定boss伤害加成倍率
-def GetBossIDHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BossIDHurtAddPer)
-def SetBossIDHurtAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BossIDHurtAddPer, value)
-## 装备掉落执行次数加成万分率
-def GetDropEquipDoCount(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_DropEquipDoCount)
-def SetDropEquipDoCount(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_DropEquipDoCount, value)
-
-# 基础攻击百分比
-def GetBaseAtkAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseAtkAddPer)
-def SetBaseAtkAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseAtkAddPer, value)
-# 基础生命百分比
-def GetBaseMaxHPAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseMaxHPAddPer)
-def SetBaseMaxHPAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseMaxHPAddPer, value)
-# 基础防御百分比
-def GetBaseDefAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseDefAddPer)
-def SetBaseDefAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseDefAddPer, value)
-# 基础命中百分比
-def GetBaseHitAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseHitAddPer)
-def SetBaseHitAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseHitAddPer, value)
-# 基础闪避百分比
-def GetBaseMissAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BaseMissAddPer)
-def SetBaseMissAddPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BaseMissAddPer, value)
-# 法器生命百分比
-def GetFaQiMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaQiMaxHPPer)
-def SetFaQiMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaQiMaxHPPer, value)
-# 法器攻击百分比
-def GetFaQiAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaQiAtkPer)
-def SetFaQiAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaQiAtkPer, value)
-# 法器防御百分比
-def GetFaQiDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaQiDefPer)
-def SetFaQiDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaQiDefPer, value)
-# 神兵生命百分比
-def GetGodWeaponMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GodWeaponMaxHPPer)
-def SetGodWeaponMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GodWeaponMaxHPPer, value)
-# 神兵攻击百分比
-def GetGodWeaponAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GodWeaponAtkPer)
-def SetGodWeaponAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GodWeaponAtkPer, value)
-# 宝石生命百分比
-def GetStoneMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StoneMaxHPPer)
-def SetStoneMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_StoneMaxHPPer, value)
-# 宝石攻击百分比
-def GetStoneAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StoneAtkPer)
-def SetStoneAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_StoneAtkPer, value)
# 血瓶恢复效果
-def GetHPCureEnhance(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HPCureEnhance)
-def SetHPCureEnhance(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HPCureEnhance, value)
-
-# 额外输出伤害
-def GetOnlyFinalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_OnlyFinalHurt)
-def SetOnlyFinalHurt(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_OnlyFinalHurt, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_OnlyFinalHurt, value)
- return
-
-# PVP攻击回血
-def GetPVPAtkBackHP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PVPAtkBackHP)
-def SetPVPAtkBackHP(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PVPAtkBackHP, value)
-
-# 命中成功率
-def GetHitSucessRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HitSucessRate)
-def SetHitSucessRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HitSucessRate, value)
-
-# 闪避成功率
-def GetMissSucessRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MissSucessRate)
-def SetMissSucessRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_MissSucessRate, value)
-
-# 治疗加成 默认百分百
-def GetCurePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CurePer)
-def SetCurePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_CurePer, value)
-
-# 加深受到伤害百分比
-def GetBeHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BeHurtPer)
-def SetBeHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BeHurtPer, value)
-
-# 称号生命加成
-def GetTitleMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TitleMaxHPPer)
-def SetTitleMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TitleMaxHPPer, value)
-# 称号攻击加成
-def GetTitleAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TitleAtkPer)
-def SetTitleAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TitleAtkPer, value)
-# 称号防御加成
-def GetTitleDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TitleDefPer)
-def SetTitleDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TitleDefPer, value)
-
-# 头像生命加成
-def GetFaceMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaceMaxHPPer)
-def SetFaceMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaceMaxHPPer, value)
-# 头像攻击加成
-def GetFaceAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaceAtkPer)
-def SetFaceAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaceAtkPer, value)
-# 头像防御加成
-def GetFaceDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FaceDefPer)
-def SetFaceDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FaceDefPer, value)
-
-# 头像框生命加成
-def GetFacePicMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FacePicMaxHPPer)
-def SetFacePicMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FacePicMaxHPPer, value)
-# 头像框攻击加成
-def GetFacePicAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FacePicAtkPer)
-def SetFacePicAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FacePicAtkPer, value)
-# 头像框防御加成
-def GetFacePicDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FacePicDefPer)
-def SetFacePicDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FacePicDefPer, value)
-
-# 坐骑幻化生命加成
-def GetHorseSkinMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseSkinMaxHPPer)
-def SetHorseSkinMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseSkinMaxHPPer, value)
-# 坐骑幻化攻击加成
-def GetHorseSkinAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseSkinAtkPer)
-def SetHorseSkinAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseSkinAtkPer, value)
-# 坐骑幻化防御加成
-def GetHorseSkinDefPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseSkinDefPer)
-def SetHorseSkinDefPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseSkinDefPer, value)
-
-# 坐骑攻击百分比
-def GetHorseAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseAtkPer)
-def SetHorseAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseAtkPer, value)
-
-# 坐骑生命加成
-def GetHorseMaxHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseMaxHPPer)
-def SetHorseMaxHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseMaxHPPer, value)
-
-# 灵宠攻击加成
-def GetPetAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PetAtkPer)
-def SetPetAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PetAtkPer, value)
-
-# 坐骑培养属性加成
-def GetHorseTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_HorseTrainAttrPer)
-def SetHorseTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_HorseTrainAttrPer, value)
-
-# 灵宠培养属性加成
-def GetPetTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PetTrainAttrPer)
-def SetPetTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PetTrainAttrPer, value)
-
-# 守护培养属性加成
-def GetGuardTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GuardTrainAttrPer)
-def SetGuardTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GuardTrainAttrPer, value)
-
-# 翅膀培养属性加成
-def GetWingTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_WingTrainAttrPer)
-def SetWingTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_WingTrainAttrPer, value)
-
-# 灭世培养属性加成
-def GetPeerlessWeaponTrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PeerlessWeaponTrainAttrPer)
-def SetPeerlessWeaponTrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PeerlessWeaponTrainAttrPer, value)
-
-# 弑神培养属性加成
-def GetPeerlessWeapon2TrainAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PeerlessWeapon2TrainAttrPer)
-def SetPeerlessWeapon2TrainAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PeerlessWeapon2TrainAttrPer, value)
-
-# 炼体属性属性加成
-def GetLianTiAttrPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LianTiAttrPer)
-def SetLianTiAttrPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_LianTiAttrPer, value)
-
-def GetAttr160(curPlayer): return 0
-def SetAttr160(curPlayer, value): pass
+def GetHPCureEnhance(curPlayer): return 0
# 仙盟徽章ID
def GetFamilyEmblemID(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyEmblemID)
@@ -6813,302 +5142,34 @@
curPlayer.SetFamilyMemberLV(fmLV) # 也同步设置该值,防止有些地方直接调用 curPlayer.GetFamilyMemberLV()
return
-# 仙盟事务速度加成
-def GetAffairSpeedPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AffairSpeedPer)
-def SetAffairSpeedPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AffairSpeedPer, value)
-
-# 仙盟BOSS伤害加成
-def GetFamilyBossHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyBossHurtPer)
-def SetFamilyBossHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyBossHurtPer, value)
-
-# 仙盟联赛生命加成
-def GetFamilyWarHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyWarHPPer)
-def SetFamilyWarHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyWarHPPer, value)
-
-# 仙盟联赛攻击加成
-def GetFamilyWarAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyWarAtkPer)
-def SetFamilyWarAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyWarAtkPer, value)
-
-# 仙盟打坐经验加成
-def GetFamilySitExpPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilySitExpPer)
-def SetFamilySitExpPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilySitExpPer, value)
-
-# 宝石基础属性百分比
-def GetStoneBasePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_StoneBasePer)
-def SetStoneBasePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_StoneBasePer, value)
-
-# 境界基础属性百分比
-def GetRealmBasePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RealmBasePer)
-def SetRealmBasePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_RealmBasePer, value)
-
-# 翅膀生命百分比
-def GetWingHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_WingHPPer)
-def SetWingHPPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_WingHPPer, value)
-
-# 套装基础属性百分比
-def GetSuiteBasePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuiteBasePer)
-def SetSuiteBasePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SuiteBasePer, value)
-
-# 强化基础攻击百分比
-def GetPlusBaseAtkPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PlusBaseAtkPer)
-def SetPlusBaseAtkPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PlusBaseAtkPer, value)
-
-## 暂无用
-# @param curPlayer 玩家实例
-# @return
-def GetAddBackHPPer(curPlayer):
- return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AddBackHPPer)
-
-## 暂无用
-# @param curPlayer 玩家实例
-# @return None
-def SetAddBackHPPer(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AddBackHPPer, value)
-
-#---降低生命恢复效果----
-## 获取降低生命恢复效果万分率
-# @param curPlayer 玩家实例
-# @return
-def GetReduceBackHPPer(curPlayer):
- return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ReduceBackHPPer)
-
-## 设置降低生命恢复效果万分率
-# @param curPlayer 玩家实例
-# @return None
-def SetReduceBackHPPer(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_ReduceBackHPPer, value)
-
-#---触发定身----
-def GetAtkerFreezed(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAtkerFreezed)
-def SetAtkerFreezed(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAtkerFreezed, value)
-
-#---增加仇恨----
-def GetAddAngry(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAddAngry)
-def SetAddAngry(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAddAngry, value)
-
-#---技能攻击比例减少----
-def GetSkillAtkRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAtkRateReduce)
-def SetSkillAtkRateReduce(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAtkRateReduce, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SkillAtkRateReduce, value)
-#---PVP固定伤害----
-def GetDamagePVP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVP)
-def SetDamagePVP(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVP, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVP, value)
-#---PVP固定伤害减少----
-def GetDamagePVPReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVPReduce)
-def SetDamagePVPReduce(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVPReduce, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVPReduce, value)
-#---伤害输出固定值计算对NPC附加----
-def GetDamagePVE(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVE)
-def SetDamagePVE(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVE, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVE, value)
-
-#---伤害输出计算百分比对玩家附加----
-def GetDamagePerPVP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePerPVP)
-def SetDamagePerPVP(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePerPVP, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePerPVP, value)
-def GetDamagePerPVPReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePerPVPReduce)
-def SetDamagePerPVPReduce(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePerPVPReduce, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePerPVPReduce, value)
-
-#---受伤计算百分比----
-def GetHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrHurtPer)
-def SetHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrHurtPer, value)
-
-#---自动恢复XP值比率----
-def GetXPRestorePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrXPRestorePer)
-def SetXPRestorePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrXPRestorePer, value)
-
-#---魔法盾伤害吸收蓝耗比率----
-def GetShieldMPCostRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrShieldMPCostRate)
-def SetShieldMPCostRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrShieldMPCostRate, value)
-
-#---20%的概率抵御伤害比率----
-def GetDamChanceDef(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamChanceDef)
-def SetDamChanceDef(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamChanceDef, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamChanceDef, value)
-
#---当前防护值,需存DB----
-def GetProDef(curPlayer): return curPlayer.GetExAttr4()
-def SetProDef(curPlayer, value):
- curPlayer.SetExAttr4(value, True)
- return
+def GetProDef(curPlayer): return 0
+def SetProDef(curPlayer, value): return
#---最大防护值----
-def GetMaxProDef(curPlayer): return curPlayer.GetExAttr16()
-def SetMaxProDef(curPlayer, value):
- value = min(value, ChConfig.Def_UpperLimit_DWord)
- curPlayer.SetExAttr16(value)
- curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_MaxProDef, value, 0, True) # 周围玩家需要通知
- return
-
-#---生命上限换算为防护值的百分比----
-def GetProDefHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrProDefHPPer)
-def SetProDefHPPer(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrProDefHPPer, value)
- #SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ProDefHPPer, value)
-
-#---防护值吸收伤害比率----
-def GetProDefAbsorb(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrProDefAbsorb)
-def SetProDefAbsorb(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrProDefAbsorb, value)
- #SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ProDefAbsorb, value)
-
-#---宠物攻击提升值----
-def GetPetMinAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetMinAtk)
-def SetPetMinAtk(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetMinAtk, value)
-def GetPetMaxAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetMaxAtk)
-def SetPetMaxAtk(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetMaxAtk, value)
-
-#---宠物伤害百分比提升----移到GameObj下
-#===============================================================================
-# def GetPetDamPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
-# def SetPetDamPer(curPlayer, value):
-# curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetDamPer, value)
-# SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PetDamPer, value)
-#===============================================================================
-#---宠物技能伤害百分比提升----
-def GetPetSkillAtkRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PetSkillAtkRate)
-def SetPetSkillAtkRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PetSkillAtkRate, value)
-
-#---每1级+%s攻击, 数值取万分率,支持小数算法----
-def GetPerLVAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPerLVAtk)
-def SetPerLVAtk(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPerLVAtk, value)
-#---每1级+%s生命, 数值为固定值----
-def GetPerLVMaxHP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPerLVMaxHP)
-def SetPerLVMaxHP(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPerLVMaxHP, value)
-
-#---装备掉率----
-def GetDropEquipPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDropEquipPer)
-def SetDropEquipPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDropEquipPer, value)
-
-#---功能层防御值----
-def GetFuncDef(curPlayer): return EffGetSet.GetCopyFuncAttrValue(curPlayer, ChConfig.TYPE_Calc_AttrDEF)
-def SetFuncDef(curPlayer, value): EffGetSet.SetCopyFuncAttrValue(curPlayer, ChConfig.TYPE_Calc_AttrDEF, value)
-
-#普通攻击增伤:普通攻击附加的固定值伤害
-def GetNormalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NormalHurt)
-def SetNormalHurt(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_NormalHurt, value)
-#普通攻击加成:普通攻击附加的伤害百分比
-def GetNormalHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NormalHurtPer)
-def SetNormalHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_NormalHurtPer, value)
-#法宝技能增伤:法宝技能攻击附加的固定值伤害
-def GetFabaoHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FabaoHurt)
-def SetFabaoHurt(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FabaoHurt, value)
-#法宝技能加成:法宝技能攻击附加的伤害百分比
-def GetFabaoHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FabaoHurtPer)
-def SetFabaoHurtPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_FabaoHurtPer, value)
+def GetMaxProDef(curPlayer): return 0
+def SetMaxProDef(curPlayer, value): return
# 每X秒自动消失一个印记, 毫秒记录
-def GetLostYinjiTime(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LostYinjiTime)
-def SetLostYinjiTime(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_LostYinjiTime, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_YinjiTime, value)
+def GetLostYinjiTime(curPlayer): return 0
+def SetLostYinjiTime(curPlayer, value): return
# 当前印记数
-def GetYinjiCnt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_YinjiCnt)
-def SetYinjiCnt(curPlayer, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_YinjiCnt, value)
- SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_YinjiCnt, value)
+def GetYinjiCnt(curPlayer): return 0
+def SetYinjiCnt(curPlayer, value): return
# 减少指定技能组CD XX%
-def GetTheFBSkillsCD(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TheFBSkillsCD)
-def SetTheFBSkillsCD(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_TheFBSkillsCD, value)
+def GetTheFBSkillsCD(curPlayer): return 0
+def SetTheFBSkillsCD(curPlayer, value): return
# 灼烧固定伤害
-def GetBurnValue(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BurnValue)
-def SetBurnValue(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BurnValue, value)
+def GetBurnValue(curPlayer): return 0
+def SetBurnValue(curPlayer, value): return
# 延长灼烧时间百分比
-def GetBurnTimePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BurnTimePer)
-def SetBurnTimePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BurnTimePer, value)
+def GetBurnTimePer(curPlayer): return 0
+def SetBurnTimePer(curPlayer, value): return
# 减移动速度百分比
-def GetSubSpeedPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SubSpeedPer)
-def SetSubSpeedPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SubSpeedPer, value)
-
-# 技能伤害增强
-def GetSkillAddPer1(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer1)
-def SetSkillAddPer1(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer1, value)
-def GetSkillAddPer2(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer2)
-def SetSkillAddPer2(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer2, value)
-def GetSkillAddPer3(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer3)
-def SetSkillAddPer3(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer3, value)
-def GetSkillAddPer4(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer4)
-def SetSkillAddPer4(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer4, value)
-def GetSkillAddPer5(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer5)
-def SetSkillAddPer5(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer5, value)
-def GetSkillAddPer6(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer6)
-def SetSkillAddPer6(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer6, value)
-def GetSkillAddPer7(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAddPer7)
-def SetSkillAddPer7(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAddPer7, value)
-
-# 受到技能伤害减少
-def GetSkillReducePer1(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer1)
-def SetSkillReducePer1(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer1, value)
-def GetSkillReducePer2(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer2)
-def SetSkillReducePer2(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer2, value)
-def GetSkillReducePer3(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer3)
-def SetSkillReducePer3(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer3, value)
-def GetSkillReducePer4(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer4)
-def SetSkillReducePer4(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer4, value)
-def GetSkillReducePer5(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer5)
-def SetSkillReducePer5(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer5, value)
-def GetSkillReducePer6(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer6)
-def SetSkillReducePer6(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer6, value)
-def GetSkillReducePer7(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillReducePer7)
-def SetSkillReducePer7(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillReducePer7, value)
-
-#---诛仙一击概率---
-def GetZhuXianRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ZhuxianRate)
-def SetZhuXianRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_ZhuxianRate, value)
-
-#---诛仙护体减伤---
-def GetZhuXianReducePer(curPlayer): return 0#curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ZhuXianReducePer)
-def SetZhuXianReducePer(curPlayer, value): return #curPlayer.SetDict(ChConfig.Def_PlayerKey_ZhuXianReducePer, value)
-
-## 计算功能背包物品属性
-# @param curPlayer 当前玩家
-# @param packType 背包类型
-# @param allAttrListEquip 属性列表
-# @return None
-def CalcFuncPackItem(curPlayer, packType, allAttrListEquip):
- #===========================================================================
- # funcPack = curPlayer.GetItemManager().GetPack(packType)
- # equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
- #
- # #玩家当前可装备的装备类型
- # for equipIndex in range(0, funcPack.GetCount()):
- #
- # curEquip = funcPack.GetAt(equipIndex)
- # if curEquip.IsEmpty():
- # continue
- #
- # #计算效果
- # for i in range(0, curEquip.GetEffectCount()):
- # curEffect = curEquip.GetEffectByIndex(i)
- # if not curEffect:
- # break
- #
- # effectID = curEffect.GetEffectID()
- # if effectID == 0:
- # #最后一个
- # break
- #
- # effectValue = curEffect.GetEffectValue(0)
- # if not effectValue:
- # continue
- #
- # #添加物品效果的属性值
- # CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
- #
- #
- #===========================================================================
- return
+def GetSubSpeedPer(curPlayer): return 0
+def SetSubSpeedPer(curPlayer, value): return
#-------------------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
index b0d3e90..5c8f699 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
@@ -522,6 +522,7 @@
def RefreshDogzAttr(curPlayer, isUpdateSucc=False):
## 刷新神兽属性
+ return
totalPlusLv = 0 #出战神兽装备总强化等级
fightPowerEx = 0
allAttrList = [{} for _ in range(4)]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 4068544..ba98981 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -24,11 +24,9 @@
import GameServerRefresh
import ShareDefine
import PlayerGameWallow
-import Operate_PlayerBuyZhenQi
import PlayerSignDay
import PlayerCoin
import PlayerControl
-import PlayerWorldAverageLv
import PlayerFamily
import PlayerFamilyZhenfa
import PlayerOnlinePrize
@@ -350,8 +348,6 @@
elif onEventType == ShareDefine.Def_OnEventTypeEx:
# 资源找回
PlayerRecover.RecoverOnDay(curPlayer)
- #购买次数清空
- Operate_PlayerBuyZhenQi.PlayerOnDay(curPlayer)
# 世界boss
BossHurtMng.OnDay(curPlayer)
# 仙盟过天
@@ -1262,17 +1258,6 @@
elif key == ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.CrossDailyActionID_YaomoBoss:
if gameWorldMgr.GetGameWorldDictByKey(key) != value:
PlayerCrossYaomoBoss.OnYaomoBossStateChange(value, tick)
-
- # 世界等级
- elif key == ShareDefine.Def_Notify_WorldKey_WorldAverageLv:
- if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
- gameWorldMgr.SetGameWorldDict(key, value) # 世界等级先更新再处理
- playerManager = GameWorld.GetPlayerManager()
- for index in xrange(playerManager.GetPlayerCount()):
- curPlayer = playerManager.GetPlayerByIndex(index)
- if not GameWorld.IsNormalPlayer(curPlayer):
- continue
- PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
#通用设置
befValue = gameWorldMgr.GetGameWorldDictByKey(key)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
index a59e6a5..c5ce267 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -1638,7 +1638,7 @@
starInfo = affairStarDict.get(str(star), [])
needDuration = starInfo[1] if len(starInfo) > 1 else 0
# 可扩展减时长属性
- speedPer = PlayerControl.GetAffairSpeedPer(curPlayer)
+ speedPer = 0#PlayerControl.GetAffairSpeedPer(curPlayer)
if speedPer:
needDuration = int(needDuration * max(10000 - speedPer, 0) / 10000.0)
#GameWorld.DebugLog("事务加速: needDuration=%s,speedPer=%s" % (needDuration, speedPer), curPlayer.GetPlayerID())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
index b0d20d0..06d0f9a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
@@ -406,68 +406,6 @@
# tagHead Head;
#};
def OnTryFirstGoldItem(index, clientData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldTry) != 1:
- return
- tryItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 1, {})
- tryItemID = tryItemDict.get(curPlayer.GetJob(), 0)
- if not tryItemID:
- return
-
-
- #先卸下主手武器(若背包满则发邮件),再穿上送的武器
- equipPlace = ShareDefine.retWeapon
- curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- curItem = curPack.GetAt(equipPlace)
- if ItemCommon.CheckItemCanUse(curItem):
- spaceIndex = ItemControler.GetItemPackSpaceIndex(curPlayer, IPY_GameWorld.rptItem)
- if spaceIndex == -1:
- itemObj = ItemCommon.GetMailItemDict(curItem)
- PlayerControl.SendMailByKey('', [curPlayer.GetID()], [itemObj])
- ItemCommon.DelItem(curPlayer, curItem, 1, False)
- else:
- result = ItemControler.PlayerItemControler(curPlayer).UnEquipItem(equipPlace, spaceIndex)
- if not result:
- GameWorld.Log(' 试用首充武器 卸下原装备失败!!', curPlayer.GetID())
- return
- tryItem = ItemControler.GetOutPutItemObj(tryItemID)
- if ChEquip.DoPlayerEquipItem(curPlayer, tryItem, ItemCommon.GetEquipPackIndex(tryItem), tick):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 2)
- else:
- curItem.clear()
- GameWorld.Log(' 试用首充武器 试穿失败!!tryItemID=%s'%tryItemID, curPlayer.GetID())
- Sync_FirstGoldInfo(curPlayer)
- return
-
-def FirstGoldTryItemOutTime(curPlayer):
- ##首充试用物品过期了 若背包仓库没武器则送一把
-
- haveEquip = False #是否有可穿的武器
- playerItemControl = ItemControler.PlayerItemControler(curPlayer)
- for packIndex in [IPY_GameWorld.rptItem, IPY_GameWorld.rptWarehouse]:
- curPack = curPlayer.GetItemManager().GetPack(packIndex)
- for i in range(0, curPack.GetCount()):
- curItem = curPack.GetAt(i)
- if not ItemCommon.CheckItemCanUse(curItem):
- continue
- if curItem.GetEquipPlace() != ShareDefine.retWeapon:
- continue
- if not ItemCommon.CheckItemCanUseByExpireTime(curItem):
- # 过期
- continue
- if not playerItemControl.PlayerCanEquipItem(curItem, False):
- continue
- haveEquip = True
- break
- if not haveEquip:
- giveItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 2, {})
- giveItemID = giveItemDict.get(curPlayer.GetJob(), 0)
- if not giveItemID:
- return
- GameWorld.DebugLog('首充试用物品过期了 背包仓库没武器则送一把giveItemID=%s'%giveItemID, curPlayer.GetID())
- if not ItemControler.GivePlayerItem(curPlayer, giveItemID, 1, 0, [IPY_GameWorld.rptItem]):
- GameWorld.DebugLog('首充试用物品过期了 背包仓库没武器则送一把 没给成功!!giveItemID=%s'%giveItemID, curPlayer.GetID())
-
return
def OnGetHistoryRechargeAward(curPlayer, awardID):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py
index 8c8c66b..7342acf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py
@@ -43,7 +43,7 @@
openLV = GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_Talent)
setTalentPoint = 0
for lv in xrange(openLV, curLV+1):
- lvIpyData = PlayerControl.GetPlayerLVIpyData(lv)
+ lvIpyData = None #PlayerControl.GetPlayerLVIpyData(lv)
addTalentPoint = lvIpyData.GetTalentPoint() if lvIpyData else 0
setTalentPoint += addTalentPoint
curFreeSkillPoint = GetGreatMasterFreeSkillPoint(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py
index f737e3d..8de7d6b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGuaji.py
@@ -19,7 +19,6 @@
import ShareDefine
import PlayerControl
import ChPyNetSendPack
-import PlayerWorldAverageLv
import PlayerActGarbageSorting
import PlayerActCollectWords
import PlayerGoldInvest
@@ -36,11 +35,13 @@
Def_Process_Seconds = 60 # 在线定时处理间隔,秒,离线上线后一次性处理
def DoGuajiOpen(curPlayer):
+ return
openAwardMinutes = IpyGameDataPY.GetFuncCfg("GuajiTime", 1) # 功能开启获得收益时长,分钟
AddGuajiAward(curPlayer, openAwardMinutes * 60)
return
def OnPlayerLogin(curPlayer):
+ return
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji):
return
if not ProcessGuaji(curPlayer):
@@ -48,6 +49,7 @@
return
def PlayerOnDay(curPlayer):
+ return
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji):
return
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiQuickCount, 0)
@@ -56,6 +58,7 @@
def ProcessGuaji(curPlayer):
## 挂机定时处理收益
+ return
if GameWorld.IsCrossServer():
return
@@ -200,7 +203,7 @@
playerID = curPlayer.GetPlayerID()
reLV = curPlayer.GetLV()
- lvIpyData = PlayerControl.GetPlayerLVIpyData(reLV)
+ lvIpyData = None #PlayerControl.GetPlayerLVIpyData(reLV)
reExp = lvIpyData.GetReExp() if lvIpyData else 0
worldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
#GameWorld.DebugLog("计算挂机收益: awardSeconds=%s,useUnsecond=%s,reLV=%s,reExp=%s,worldLV=%s"
@@ -317,7 +320,6 @@
def GetGuajiExpRate(curPlayer):
## 挂机收益经验加成
expRate = curPlayer.GetFightExpRate() # 系统及功能累加
- expRate += PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) # 世界等级
expRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FightExpRate) # VIP加成
return expRate
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index e0515cf..6139b88 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -23,13 +23,71 @@
import ChPyNetSendPack
import NetPackCommon
import PlayerControl
+import PlayerOnline
import GameWorld
import ChConfig
import random
-
+
+
def OnPlayerLogin(curPlayer):
Sync_HeroInfo(curPlayer)
+ return
+
+def OnPlayerFirstLogin(curPlayer):
+ OnFirstLoginInitPlayer(curPlayer)
+ OnFirstLoginInitHero(curPlayer)
+ return
+
+def OnFirstLoginInitPlayer(curPlayer):
+ ## 初始化主公
+ equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ if not equipPack.GetCount():
+ identifyPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptIdentify)
+ if not identifyPack.GetCount():
+ return
+ defaultEquipInfo = IpyGameDataPY.GetFuncEvalCfg("NewRoleInit", 1, {})
+ if not defaultEquipInfo:
+ return
+ GameWorld.DebugLog("初始化新手定制装备: %s" % defaultEquipInfo, curPlayer.GetPlayerID())
+
+ for equipID, appointID in defaultEquipInfo.items():
+ itemData = GameWorld.GetGameData().GetItemByTypeID(equipID)
+ if not itemData:
+ continue
+ equipPlace = itemData.GetEquipPlace()
+ equipPlaceIndex = equipPlace - 1 # 暂固定直接装备位-1
+ if equipPlaceIndex < 0 or equipPlaceIndex >= equipPack.GetCount():
+ continue
+ destEquip = equipPack.GetAt(equipPlaceIndex)
+ if not destEquip.IsEmpty():
+ continue
+ setAttrDict = {ShareDefine.Def_CItemKey_AppointID:appointID} if appointID else {}
+ curItem = ItemControler.GetOutPutItemObj(equipID, 1, curPlayer=curPlayer, setAttrDict=setAttrDict)
+ if not curItem:
+ continue
+ destEquip.AssignItem(curItem)
+
+ return
+
+def OnFirstLoginInitHero(curPlayer):
+ ## 初始化默认武将阵型
+ curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+ GameWorld.DebugLog("OnFirstLoginInitHero: %s" % curPack.GetCount(), curPlayer.GetPlayerID())
+ if not curPack.GetCount():
+ return
+ defaultHeroInfo = IpyGameDataPY.GetFuncEvalCfg("NewRoleInit", 2, {})
+ if not defaultHeroInfo:
+ return
+ GameWorld.DebugLog("初始化新手武将: %s" % defaultHeroInfo, curPlayer.GetPlayerID())
+
+ lineupID = ShareDefine.Lineup_Main
+ shapeType = 0
+ for heroID, posNum in defaultHeroInfo.items():
+ lineupValue = ComLineupValue(lineupID, shapeType, posNum)
+ setAttrDict = {ShareDefine.Def_IudetHeroLineup:[lineupValue]}
+ ItemControler.GivePlayerItem(curPlayer, heroID, 1, False, [ShareDefine.rptHero], setAttrDict=setAttrDict)
+
return
def InitHeroItem(singleItem):
@@ -201,10 +259,10 @@
return 0
for lpIndex in range(lineupCount)[::-1]:
lineupValue = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
- #阵容类型*10000+阵型类型*100+位置编号
- if lineupValue / 10000 != lineupID:
+ lpID, _, posNum = GetLineupValue(lineupValue)
+ if lpID != lineupID:
continue
- return lineupValue % 100
+ return posNum
return 0
#// B2 30 武将升级 #tagCSHeroLVUP
@@ -258,9 +316,7 @@
GameWorld.DebugLog("武将升级: itemIndex=%s,heroID=%s,updHeroLV=%s" % (itemIndex, heroID, updHeroLV), playerID)
heroItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, updHeroLV)
- # 刷属性
- if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
- RefreshLordAttr(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
return
def GetHeroLVMax(heroItem):
@@ -373,9 +429,8 @@
__DoHeroStarTalentUp(item, addStar)
heroItem.Sync_Item()
- # 刷属性
- if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
- RefreshLordAttr(curPlayer)
+ itemIndex = heroItem.GetItemPlaceIndex()
+ PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
return
def __DoHeroStarTalentUp(singleItem, addLV):
@@ -517,9 +572,7 @@
GameWorld.DebugLog("武将突破: itemIndex=%s,heroID=%s,nextBreakLV=%s" % (itemIndex, heroID, nextBreakLV), playerID)
SetHeroBreakLV(heroItem, nextBreakLV)
- # 刷属性
- if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
- RefreshLordAttr(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
return
def SetHeroBreakLV(heroItem, breakLV):
@@ -574,12 +627,10 @@
GameWorld.DebugLog("材料不足,武将无法觉醒! costItemID=%s, costItemCount=%s" % (costItemID, costItemCount))
return
ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, costItemCount, True, "HeroAwake")
- GameWorld.DebugLog("武将觉醒: itemIndex=%s,heroID=%s,nextBreakLV=%s" % (itemIndex, heroID, nextAwakeLV), playerID)
+ GameWorld.DebugLog("武将觉醒: itemIndex=%s,heroID=%s,nextAwakeLV=%s" % (itemIndex, heroID, nextAwakeLV), playerID)
SetHeroAwakeLV(heroItem, nextAwakeLV)
- # 刷属性
- if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
- RefreshLordAttr(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
return
def SetHeroAwakeLV(heroItem, awakeLV):
@@ -711,9 +762,7 @@
heroItem.Sync_Item()
- # 刷属性
- if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
- RefreshLordAttr(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
return
#// B2 35 武将洗炼 #tagCSHeroWash
@@ -849,9 +898,7 @@
heroItem.Sync_Item()
GameWorld.DebugLog("武将洗炼替换! itemIndex=%s,heroID=%s,washIDList=%s" % (itemIndex, heroID, washIDList))
- # 刷属性
- if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
- RefreshLordAttr(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
return
#// B2 36 武将换肤 #tagCSHeroWearSkin
@@ -884,10 +931,7 @@
return
heroItem.SetUserAttr(ShareDefine.Def_IudetHeroSkin, skinIndex)
- # 刷属性
- if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
- RefreshLordAttr(curPlayer)
-
+ PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
return
def ActiveHeroSkin(curPlayer, heroID, skinIndex, isActive=True):
@@ -962,6 +1006,9 @@
def __doHeroBookStarLVUP(curPlayer, heroID, itemIndex):
## 图鉴星级升级
playerID = curPlayer.GetPlayerID()
+ if not GetHeroBookInitState(curPlayer, heroID):
+ GameWorld.DebugLog("该武将图鉴未激活! heroID=%s" % heroID, playerID)
+ return
heroItem = GetHeroItem(curPlayer, itemIndex)
if not heroItem:
return
@@ -983,6 +1030,9 @@
def __doHeroBookBreakLVUP(curPlayer, heroID, itemIndex):
## 图鉴突破升级
playerID = curPlayer.GetPlayerID()
+ if not GetHeroBookInitState(curPlayer, heroID):
+ GameWorld.DebugLog("该武将图鉴未激活! heroID=%s" % heroID, playerID)
+ return
heroItem = GetHeroItem(curPlayer, itemIndex)
if not heroItem:
return
@@ -1071,8 +1121,7 @@
item = heroItem.GetItem()
for lpIndex in range(lineupCount)[::-1]:
lineupValue = item.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
- #阵容类型*10000+阵型类型*100+位置编号
- if lineupValue / 10000 != lineupID:
+ if GetLineupValue(lineupValue)[0] != lineupID:
continue
item.DelUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
delCount += 1
@@ -1082,6 +1131,7 @@
# 更新新阵型
heroIDList = []
+ heroItemDict = {}
for posNum, itemIndex in heroPosDict.items():
if itemIndex < 0 or itemIndex >= curPack.GetCount():
continue
@@ -1094,34 +1144,70 @@
continue
heroIDList.append(itemID)
item = heroItem.GetItem()
- lineupValue = lineupID * 10000 + shapeType * 100 + posNum
+ lineupValue = ComLineupValue(lineupID, shapeType, posNum)
item.AddUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
if itemIndex not in syncItemDict:
syncItemDict[itemIndex] = heroItem
+ heroItemDict[itemIndex] = posNum
- # 主阵容修改时重整背包
- if lineupID == ShareDefine.Lineup_Main:
- ResetHeroPack(curPlayer)
- else:
- for syncItem in syncItemDict.values():
- syncItem.Sync_Item()
-
- RefreshLordAttr(curPlayer)
+ # 主阵容修改时重整背包,约定所有背包由前端自行排序
+ #if lineupID == ShareDefine.Lineup_Main:
+ # ResetHeroPack(curPlayer)
+ #else:
+ for syncItem in syncItemDict.values():
+ syncItem.Sync_Item()
+
+ lineup = PlayerOnline.GetOnlinePlayer(curPlayer).GetLineup(lineupID)
+ lineup.UpdLineup(heroItemDict, shapeType)
return
-def ResetHeroPack(curPlayer):
- tick = GameWorld.GetGameWorld().GetTick()
- curPlayer.SetResetItemTick(0)
- ItemControler.ResetItem(curPlayer, ShareDefine.rptHero, 0, 0, tick)
- return
-
+def ComLineupValue(lineupID, shapeType, posNum): return lineupID * 10000 + shapeType * 100 + posNum
+def GetLineupValue(lineupValue):
+ lineupID = lineupValue / 10000
+ shapeType = lineupValue % 10000 / 100
+ posNum = lineupValue % 100
+ return lineupID, shapeType, posNum
+
+#def ResetHeroPack(curPlayer):
+# tick = GameWorld.GetGameWorld().GetTick()
+# curPlayer.SetResetItemTick(0)
+# ItemControler.ResetItem(curPlayer, ShareDefine.rptHero, 0, 0, tick)
+# return
+
def RefreshLordAttr(curPlayer):
## 刷新主公属性
- CalcHeroItemAddAttr(curPlayer)
+ CalcHeroAddAttr(curPlayer)
+ PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
return
-def CalcHeroItemAddAttr(curPlayer):
- #allAttrListPet = [{} for _ in range(4)]
+def CalcHeroAddAttr(curPlayer):
+ ## 计算武将对主公增加的属性
+
+ heroBookAttrDict = {}
+ playerID = curPlayer.GetID()
+
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetHeroCount()):
+ ipyData = ipyDataMgr.GetHeroByIndex(index)
+ heroID = ipyData.GetHeroID()
+ if not GetHeroBookInitState(curPlayer, heroID):
+ # 图鉴未激活
+ continue
+ quality = ipyData.GetQuality()
+ qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
+ if not qualityIpyData:
+ continue
+ bookInitAddPer = qualityIpyData.GetBookInitAddPer()
+ bookStarAddPer = qualityIpyData.GetBookStarAddPer()
+ bookBreakLVAddPer = qualityIpyData.GetBookBreakLVAddPer()
+ bookStar = GetHeroBookStarLV(curPlayer, heroID)
+ bookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
+ for attrPerID in ChConfig.BaseAttrPerIDList:
+ addPer = bookInitAddPer + bookStar * bookStarAddPer + bookBreakLV * bookBreakLVAddPer
+ heroBookAttrDict[attrPerID] = heroBookAttrDict.get(attrPerID, 0) + addPer
+
+ GameWorld.DebugLog("武将图鉴属性: %s" % heroBookAttrDict, playerID)
+ PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_HeroBook, heroBookAttrDict)
return
def RefreshLineupHeroAttr(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 19ee09a..9c66bbb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -314,9 +314,9 @@
PlayerRideHorseDown(curPlayer, False)
#---执行玩家换装逻辑---
- if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
- if isRideHorse:
- PlayerRideHorseUp(curPlayer, False)
+ #if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
+ # if isRideHorse:
+ # PlayerRideHorseUp(curPlayer, False)
return True
@@ -377,8 +377,8 @@
if not curHorse:
return
#---执行玩家换装逻辑---
- tick = GameWorld.GetGameWorld().GetTick()
- ChEquip.DoPlayerEquipItem(curPlayer, curHorse, Def_HorseEquipIndex, tick)
+ #tick = GameWorld.GetGameWorld().GetTick()
+ #ChEquip.DoPlayerEquipItem(curPlayer, curHorse, Def_HorseEquipIndex, tick)
GameWorld.DebugLog("坐骑功能开启! horseLV=%s,horseID=%s" % (horseLV, horseID))
Sync_HorseClassData(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
index ef64c77..0c96bc7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -9,7 +9,7 @@
# @date 2025-07-02
# @version 1.0
#
-# 详细描述: 在线玩家管理,用于管理在线玩家、准在线玩家的临时数据
+# 详细描述: 在线玩家管理,用于管理在线玩家、准在线玩家的临时数据,重读不会被重置
# 准在线玩家 - 实际不在线,x分钟内离线的玩家,用于支持断线重连,短时间内临时数据可持续
#
#-------------------------------------------------------------------------------
@@ -18,28 +18,222 @@
import TurnAttack
import PyGameData
+import ShareDefine
+import PlayerControl
+import IpyGameDataPY
+import FormulaControl
+import PlayerHero
+import GameWorld
+import ChConfig
+import ChEquip
import time
+class LineupHero():
+ ## 阵容战斗武将,注意:同一个武将在不同阵容中可能属性不一样
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def Clear(self):
+ self.itemIndex = 0
+ self.heroID = 0
+ self.posNum = 0
+ self.heroBatAttrDict = {} # 武将的最终战斗属性字典, {attrID:value, ...}
+ self.heroSkillIDList = [] # 武将拥有的技能ID列表 [skillID, ...]
+ self.fightPower = 0 # 武将最终战力
+ return
+
+class Lineup():
+ ## 阵容
+
+ def __init__(self, playerID, lineupID):
+ self.playerID = playerID
+ self.lineupID = lineupID
+ self.olPlayer = None
+ self.shapeType = 0
+ self.heroItemDict = {} # 阵容武将背包索引信息 {itemIndex:posNum, ...}
+ self.__refreshState = 0 # 刷属性标记, 0-不需要刷新了,1-需要刷新
+
+ self.__freeLineupHeroObjs = [] # 释放的空闲对象[LineupHero, ...]
+ self.lineupHeroDict = {} # 阵容武将 {posNum:LineupHero, ...}
+ self.fightPower = 0 # 阵容总战力
+ return
+
+ def UpdLineup(self, heroItemDict, shapeType=0, refreshForce=False):
+ '''变更阵容时更新
+ @param heroItemDict: 武将背包索引信息 {itemIndex:posNum, ...}
+ @param shapeType: 阵型
+ @param refreshForce: 是否强制刷属性
+ '''
+ self.shapeType = shapeType
+ self.heroItemDict = heroItemDict
+ GameWorld.DebugLog("更新阵容: lineupID=%s,%s" % (self.lineupID, heroItemDict), self.playerID)
+ self.RefreshLineupAttr(refreshForce)
+ return
+
+ def FreeLineupHero(self):
+ ## 释放阵容武将对象,重新计算
+ for freeObj in self.lineupHeroDict.values():
+ if freeObj not in self.__freeLineupHeroObjs:
+ self.__freeLineupHeroObjs.append(freeObj)
+ self.lineupHeroDict = {}
+ self.fightPower = 0
+ return
+
+ def GetLineupHero(self, posNum):
+ lineupHero = None
+ if posNum in self.lineupHeroDict:
+ lineupHero = self.lineupHeroDict[posNum]
+ elif self.__freeLineupHeroObjs:
+ lineupHero = self.__freeLineupHeroObjs.pop(0)
+ lineupHero.Clear()
+ self.lineupHeroDict[posNum] = lineupHero
+ else:
+ lineupHero = LineupHero()
+ self.lineupHeroDict[posNum] = lineupHero
+ return lineupHero
+
+ def GetLineupHeroByID(self, heroID):
+ for posNum in self.lineupHeroDict.keys():
+ lineup = self.GetLineupHero(posNum)
+ if lineup.heroID == heroID:
+ return lineup
+ return
+
+ def GetLineupInfo(self):
+ ## 获取阵容信息,即要用到该阵容了,如战斗或者保存缓存信息等
+ self.DoRefreshLineupAttr() # 取阵容时先检查
+ return
+
+ def SetNeedRefreshState(self):
+ ## 设置需要刷属性
+ self.__refreshState = 1
+ return
+
+ def RefreshLineupAttr(self, refreshForce=False):
+ self.__refreshState = 1 # 标记要刷新
+ if refreshForce:
+ self.DoRefreshLineupAttr()
+ return
+
+ def DoRefreshLineupAttr(self):
+ if not self.__refreshState:
+ return False
+ doRefreshLineupAttr(self.olPlayer.curPlayer, self.olPlayer, self)
+ self.__refreshState = 0
+ return True
+
+ def CheckHeroItemUpdate(self, itemIndex):
+ if itemIndex not in self.heroItemDict:
+ return
+ self.RefreshLineupAttr()
+ return True
+
class OnlinePlayer():
- ## 准在线玩家临时数据
+ ## 玩家在线临时数据,主要时数据的缓存,逻辑可不在类中处理,方便重读脚本时测试
def __init__(self, playerID):
self.playerID = playerID
+ self.curPlayer = None
+
+ # 属性、阵容
+ self.calcAttrDict = {} # 非武将功能点属性统计 {calcIndex:{attrID:value, ...}, ...}
+ self.lineupDict = {} # 上阵阵容 {lineupID:Lineup, ...}
+
+ # 主线战斗
self.mainFight = TurnAttack.MainFight(playerID)
- return
-
- def OnPlayerLogin(self, curPlayer):
- self.mainFight.playerLogin(curPlayer)
- return
-
- def OnPlayerOffline(self, curPlayer):
- self.mainFight.playerOffline(curPlayer)
return
def OnClear(self):
self.mainFight.clear()
return
+
+ def SetPlayer(self, curPlayer):
+ self.curPlayer = curPlayer
+ self.mainFight.turnFight.curPlayer = curPlayer
+ return
+
+ def IsRealOnline(self):
+ ## 是否真的在线
+ return self.curPlayer != None
+
+ def GetLineup(self, lineupID):
+ lineup = None
+ if lineupID in self.lineupDict:
+ lineup = self.lineupDict[lineupID]
+ else:
+ lineup = Lineup(self.playerID, lineupID)
+ self.lineupDict[lineupID] = lineup
+ lineup.olPlayer = self
+ return lineup
+
+ def GetCalcAttr(self, calcIndex): return self.calcAttrDict.get(calcIndex, {})
+ def SetCalcAttr(self, calcIndex, attrDict):
+ ## 设置某个功能点计算的属性
+ self.calcAttrDict[calcIndex] = attrDict
+ return
+
+ def ReCalcAllAttr(self):
+ ## 重置所有功能点计算的属性,一般登录的时候调用一次即可,其他单功能刷新的话一般使用 RefreshRoleAttr
+ curPlayer = self.curPlayer
+ GameWorld.DebugLog("ReCalcAllAttr...", self.playerID)
+
+ self.calcAttrDict = {}
+ self.lineupDict = {}
+
+ doCalcAllAttr(curPlayer)
+ doReloadLineup(curPlayer, self)
+
+ self.RefreshRoleAttr()
+ return
+
+ def RefreshRoleAttr(self, refreshForce=False, isAllLineup=False):
+ '''刷新主公属性,影响主公属性的功能点属性变化时统一调用此函数
+ @param refreshForce: 是否强制立马刷新
+ @param isAllLineup: 是否只同步刷所有阵容属性,如果设置False则默认仅刷主阵容属性
+ '''
+ GameWorld.DebugLog("请求刷属性: refreshForce=%s" % (refreshForce), self.playerID)
+ # 主公属性刷新时,所有阵容都要同步刷新
+ for lineup in self.lineupDict.values():
+ lineup.SetNeedRefreshState()
+
+ if refreshForce:
+ self.DoRefreshRoleAttr(isAllLineup)
+ return
+
+ def DoRefreshRoleAttr(self, isAllLineup=False):
+ '''执行刷属性,默认额外刷主阵容,其他阵容可以用到的时候再刷新
+ @param isAllLineup: 是否刷所有阵容,如果设置False则默认仅刷主阵容属性
+ @return: 是否有刷属性,0-无;1-有
+ '''
+
+ isRefresh = False
+ # 同步执行阵容属性刷新
+ for lineupID, lineup in self.lineupDict.items():
+ if not isAllLineup and lineupID != ShareDefine.Lineup_Main:
+ continue
+ if lineup.DoRefreshLineupAttr():
+ isRefresh = True
+
+ return isRefresh
+
+ def OnHeroItemUpate(self, itemIndexList):
+ '''武将物品养成更新
+ @param itemIndexList: 变化武将物品所在武将背包格子索引列表
+ @param return: 影响的阵容ID列表
+ '''
+ effLineupIDList = []
+
+ for lineupID, lineup in self.lineupDict.items():
+ for itemIndex in itemIndexList:
+ if lineup.CheckHeroItemUpdate(itemIndex):
+ if lineupID not in effLineupIDList:
+ effLineupIDList.append(lineupID)
+
+ GameWorld.DebugLog("武将物品养成更新索引: %s, 影响阵容:%s" % (itemIndexList, effLineupIDList), self.playerID)
+ return effLineupIDList
class OnlineMgr():
## 准在线玩家管理
@@ -57,7 +251,7 @@
else:
olPlayer = OnlinePlayer(playerID)
self.__onlinePlayerDict[playerID] = olPlayer
-
+ olPlayer.SetPlayer(curPlayer)
return olPlayer
def SetPlayerOnline(self, curPlayer):
@@ -69,7 +263,7 @@
self.__onlinePlayerDict[playerID] = olPlayer
else:
olPlayer = self.__onlinePlayerDict[playerID]
- olPlayer.OnPlayerLogin(curPlayer)
+ olPlayer.SetPlayer(curPlayer)
return
def SetPlayerOffline(self, curPlayer):
@@ -78,7 +272,7 @@
if playerID not in self.__onlinePlayerDict:
return
olPlayer = self.__onlinePlayerDict[playerID]
- olPlayer.OnPlayerOffline(curPlayer)
+ olPlayer.SetPlayer(None)
self.__offlinePlayerTimeDict[playerID] = int(time.time())
return
@@ -104,15 +298,412 @@
mgr = OnlineMgr()
PyGameData.g_onlineMgr = mgr
return mgr
-
+
+def GetOnlinePlayer(curPlayer): return GetOnlineMgr().GetOnlinePlayer(curPlayer)
+
def OnPlayerLogin(curPlayer):
+ ## 需登录逻辑最早调用
GetOnlineMgr().SetPlayerOnline(curPlayer)
return
def OnPlayerLogoff(curPlayer):
+ ## 需下线逻辑最后调用
GetOnlineMgr().SetPlayerOffline(curPlayer)
return
def OnMinute():
GetOnlineMgr().ProcessOffline()
return
+
+def CalcRoleBase(curPlayer):
+ playerID = curPlayer.GetID()
+ playerLV = curPlayer.GetLV()
+ lvIpyData = PlayerControl.GetPlayerLVIpyData(playerLV)
+
+ lvAttrDict = {}
+ if lvIpyData:
+ lvAttrDict = {ChConfig.AttrID_Atk:lvIpyData.GetAtk(),
+ ChConfig.AttrID_Def:lvIpyData.GetDef(),
+ ChConfig.AttrID_MaxHP:lvIpyData.GetMaxHP()
+ }
+
+ GameWorld.DebugLog("角色等级属性: %s" % lvAttrDict, playerID)
+ GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_LV, lvAttrDict)
+ return
+
+def doReloadLineup(curPlayer, olPlayer):
+ ## 重新载入阵容
+ loadLineupIDList = ShareDefine.LineupList
+ lineupDict = {} # {阵容ID:{itemIndex:posNum, ...}, ...}
+ lineShapeTypeDict = {} # {阵容ID:阵型, ...}
+ syncItemDict = {} # 需要同步的异常物品 {index:heroItem, ...}
+ curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+ for index in range(curPack.GetCount()):
+ heroItem = curPack.GetAt(index)
+ if not heroItem or heroItem.IsEmpty():
+ continue
+ lineupCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)
+ if not lineupCount:
+ continue
+ delValueList = []
+ for lpIndex in range(lineupCount)[::-1]:
+ lineupValue = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
+ lineupID, shapeType, posNum = PlayerHero.GetLineupValue(lineupValue)
+ if lineupID not in loadLineupIDList:
+ continue
+ # 任意取一个武将保存的阵型即可,同阵容的武将理论上保存的阵型是一样的
+ if lineupID not in lineShapeTypeDict:
+ lineShapeTypeDict[lineupID] = shapeType
+ if lineupID not in lineupDict:
+ lineupDict[lineupID] = {}
+ heroItemDict = lineupDict[lineupID]
+
+ # 超出人数限制或位置异常
+ if len(heroItemDict) >= ShareDefine.LineupObjMax or posNum in heroItemDict.values() or index in heroItemDict:
+ delValueList.append(lineupValue)
+ else:
+ heroItemDict[index] = posNum
+
+ if delValueList:
+ item = heroItem.GetItem()
+ for lineupValue in delValueList:
+ item.DelUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
+ syncItemDict[index] = heroItem
+
+ for syncItem in syncItemDict.values():
+ syncItem.Sync_Item()
+
+ GameWorld.DebugLog("重载阵容: %s" % lineupDict, curPlayer.GetPlayerID())
+ for lineupID, heroItemDict in lineupDict.items():
+ lineup = olPlayer.GetLineup(lineupID)
+
+ # 获取其他绑定该阵容的功能,如红颜、灵兽等
+
+ shapeType = lineShapeTypeDict.get(lineupID, 0)
+ lineup.UpdLineup(heroItemDict, shapeType)
+
+ return
+
+def doCalcAllAttr(curPlayer):
+ ## 计算所有属性
+ GameWorld.DebugLog("doCalcAllAttr...", curPlayer.GetPlayerID())
+ CalcRoleBase(curPlayer)
+ ChEquip.CalcRoleEquipAttr(curPlayer)
+ PlayerHero.CalcHeroAddAttr(curPlayer)
+ return
+
+def doRefreshLineupAttr(curPlayer, olPlayer, lineup):
+ ''' 刷新某个阵容属性
+ 基础属性-面板显示:
+ 1.全体基础固定值=所有穿戴装备【装备基础固定值】+【法宝基础固定值】+【红颜基础固定值】+【其它模块的固定值】
+ 2.全体百分比加成=图鉴加成+【灵兽模块】+【红颜模块】+【其它模块】+所有上阵卡牌【初始加成+升级加成+突破加成+吞噬加成】
+ 3.卡牌继承比例=卡牌品质及职业继承比例不同
+ 4.卡牌自身培养加成=【羁绊加成%+突破词条加成%+天赋加成%】
+ 最终面板生命=【E全体基础固定值】*【1+E全体百分比加成】*【卡牌自身继承比例+ 卡牌自身培养%加成】+【卡牌自身固定值】
+
+ 战斗属性/战斗抗性/特殊属性-面板显示:
+ 1.全体战斗属性值=所有穿戴装备【装备战斗属性值】+【法宝战斗属性值】+【红颜战斗属性值】+【其它模块的战斗属性】
+ 2.卡牌继承比例=默认100%
+ 3.卡牌自身培养战斗属性=【卡牌初始战斗属性+突破词条战斗属性+天赋战斗属性+觉醒战斗属性】+【法则洗炼】+【秘能装备】+【其它模块】
+ 最终面板战斗属性=【E全体战斗属性值】*【卡牌继承比例】+【卡牌自身培养战斗属性】
+ '''
+ playerID = curPlayer.GetPlayerID()
+ lineupID = lineup.lineupID
+
+ GameWorld.DebugLog("刷新阵容属性: lineupID=%s" % lineupID, playerID)
+ GameWorld.DebugLog(" itemIndex-posNum : %s" % lineup.heroItemDict, playerID)
+
+ lineup.FreeLineupHero()
+
+ # 因为同阵容的武将ID不能重复,所以字典key可以用武将ID
+ countryHeroInfo = {} # 国家武将统计 {country:[heroID, ...], ...}
+ fetterHeroInfo = {} # 阵容羁绊武将统计信息 {fetterID:[heroID, ...], ...}
+ heroSelfAttrInfo = {} # 武将自身属性 {heroID:{attrID:value, ...}, ...}
+ heroStarTalentInfo = {} # 武将星级天赋属性 {heroID:{attrID:value, ...}, ...}
+ heroBreakAttrInfo = {} # 武将突破潜能属性 {heroID:{attrID:value, ...}, ...}
+ heroAwakeTalentInfo = {} # 武将觉醒天赋属性 {heroID:{attrID:value, ...}, ...}
+
+ # 上阵卡牌【初始加成+升级加成+突破加成+吞噬加成】
+ InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer = 0, 0, 0, 0
+
+ curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+ for itemIndex, posNum in lineup.heroItemDict.items():
+ if itemIndex < 0 or itemIndex >= curPack.GetCount():
+ continue
+ heroItem = curPack.GetAt(itemIndex)
+ if not heroItem or heroItem.IsEmpty():
+ continue
+ heroID = heroItem.GetItemTypeID()
+ heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
+ if not heroIpyData:
+ continue
+ quality = heroIpyData.GetQuality()
+ qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
+ if not qualityIpyData:
+ continue
+
+ heroLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroLV)
+ star = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
+ breakLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
+ awakeLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroAwakeLV)
+
+ InitAddPer += qualityIpyData.GetInitAddPer()
+ LVAddPer += qualityIpyData.GetLVAddPer() * heroLV
+ BreakLVAddPer += qualityIpyData.GetBreakLVAddPer() * breakLV
+ StarAddPer += qualityIpyData.GetStarAddPer() * star
+
+ lineupHero = lineup.GetLineupHero(posNum)
+ #if False:
+ # lineupHero = LineupHero()
+ lineupHero.itemIndex = itemIndex
+ lineupHero.posNum = posNum
+ lineupHero.heroID = heroID
+ lineupHero.heroBatAttrDict = {}
+ lineupHero.heroSkillIDList = []
+ lineupHero.fightPower = 0
+
+ normalSkillID = heroIpyData.GetNormalSkillID()
+ angerSkillID = heroIpyData.GetAngerSkillID()
+ lineupHero.heroSkillIDList.extend([normalSkillID, angerSkillID])
+
+ # 自身属性
+ selfAttrDict = {}
+ selfAttrDict.update({ChConfig.AttrID_AtkInheritPer:heroIpyData.GetAtkInheritPer(),
+ ChConfig.AttrID_DefInheritPer:heroIpyData.GetDefInheritPer(),
+ ChConfig.AttrID_HPInheritPer:heroIpyData.GetHPInheritPer(),
+ })
+ for k, v in heroIpyData.GetBatAttrDict().items():
+ selfAttrDict[int(k)] = v
+ heroSelfAttrInfo[heroID] = selfAttrDict
+
+ # 星级天赋
+ starTalentAttrDict = {}
+ idCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentID)
+ lvCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDLV)
+ for aIndex in range(min(idCount, lvCount)):
+ talentID = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroTalentID, aIndex)
+ talentLV = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroTalentIDLV, aIndex)
+ stIpyData = IpyGameDataPY.GetIpyGameData("HeroTalent", talentID)
+ if not stIpyData:
+ continue
+ attrID = stIpyData.GetAttrID()
+ attrValue = stIpyData.GetAttrValue() * talentLV
+ starTalentAttrDict[attrID] = starTalentAttrDict.get(attrID, 0) + attrValue
+ heroStarTalentInfo[heroID] = starTalentAttrDict
+
+ # 突破潜能
+ breakAttrDict = {}
+ awakeIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroBreak", heroID)
+ if awakeIpyDataList:
+ for breakIpyData in awakeIpyDataList:
+ if breakIpyData.GetBreakLV() > breakLV:
+ break
+ attrIDList = breakIpyData.GetAttrIDList()
+ attrValueList = breakIpyData.GetAttrValueList()
+ for aIndex in range(min(len(attrIDList), len(attrValueList))):
+ attrID = attrIDList[aIndex]
+ attrValue = attrValueList[aIndex]
+ breakAttrDict[attrID] = breakAttrDict.get(attrID, 0) + attrValue
+ skillID = breakIpyData.GetSkillID()
+ if skillID:
+ lineupHero.heroSkillIDList.append(skillID)
+ heroBreakAttrInfo[heroID] = breakAttrDict
+
+ # 觉醒天赋
+ awakeTalentAttrDict = {}
+ awakeIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroAwake", heroID)
+ if awakeIpyDataList:
+ for awakeIpyData in awakeIpyDataList:
+ if awakeIpyData.GetAwakeLV() > awakeLV:
+ break
+ attrIDList = awakeIpyData.GetAttrIDList()
+ attrValueList = awakeIpyData.GetAttrValueList()
+ for aIndex in range(min(len(attrIDList), len(attrValueList))):
+ attrID = attrIDList[aIndex]
+ attrValue = attrValueList[aIndex]
+ awakeTalentAttrDict[attrID] = awakeTalentAttrDict.get(attrID, 0) + attrValue
+ skillID = awakeIpyData.GetSkillID()
+ if skillID:
+ lineupHero.heroSkillIDList.append(skillID)
+ heroAwakeTalentInfo[heroID] = awakeTalentAttrDict
+
+ # 羁绊统计
+ for fetterID in heroIpyData.GetFetterIDList():
+ if fetterID not in fetterHeroInfo:
+ fetterHeroInfo[fetterID] = []
+ fetterHeroIDList = fetterHeroInfo[fetterID]
+ if heroID not in fetterHeroIDList:
+ fetterHeroIDList.append(heroID)
+
+ # 国家统计
+ country = heroIpyData.GetCountry()
+ if country not in countryHeroInfo:
+ countryHeroInfo[country] = []
+ countryHeroIDList = countryHeroInfo[country]
+ if heroID not in countryHeroIDList:
+ countryHeroIDList.append(heroID)
+
+ # 羁绊属性 - 仅羁绊相关武将有效
+ heroFetterAttrInfo = {} # 武将羁绊属性 {heroID:{attrID:value, ...}, ...}
+ for fetterID, fetterHeroIDList in fetterHeroInfo.items():
+ fetterIpyData = IpyGameDataPY.GetIpyGameData("HeroFetter", fetterID)
+ if not fetterIpyData:
+ continue
+ needHeroIDList = fetterIpyData.GetHeroIDList()
+ canFetter = True
+ for needHeroID in needHeroIDList:
+ if needHeroID not in fetterHeroIDList:
+ canFetter = False
+ break
+ if not canFetter:
+ continue
+ attrIDList = fetterIpyData.GetAttrIDList()
+ attrValueList = fetterIpyData.GetAttrValueList()
+ for aIndex in range(min(len(attrIDList), len(attrValueList))):
+ attrID = attrIDList[aIndex]
+ attrValue = attrValueList[aIndex]
+ for heroID in needHeroIDList:
+ if heroID not in heroFetterAttrInfo:
+ heroFetterAttrInfo[heroID] = {}
+ heroFetterAttrDict = heroFetterAttrInfo[heroID]
+ heroFetterAttrDict[attrID] = heroFetterAttrDict.get(attrID, 0) + attrValue
+
+ # 阵容属性 - 阵容所有武将有效
+ lineupHaloAttrInfo = {} # 阵容光环属性 {attrID:value, ...}
+ for country, countryHeroIDList in countryHeroInfo.items():
+ haloIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroLineupHalo", country)
+ if not haloIpyDataList:
+ continue
+
+ attrIDList, attrValueList = [], []
+ countryHeroCnt = len(countryHeroIDList)
+ for haloIpyData in haloIpyDataList:
+ needHeroCount = haloIpyData.GetNeedHeroCount()
+ if countryHeroCnt < needHeroCount:
+ break
+ attrIDList = haloIpyData.GetAttrIDList()
+ attrValueList = haloIpyData.GetAttrValueList()
+ # 每个国家最多仅生效一条属性,不同国家属性可叠加
+ for aIndex in range(min(len(attrIDList), len(attrValueList))):
+ attrID = attrIDList[aIndex]
+ attrValue = attrValueList[aIndex]
+ lineupHaloAttrInfo[attrID] = lineupHaloAttrInfo.get(attrID, 0) + attrValue
+
+ # --------------------------- 上面统计好了,下面计算武将最终属性 --------------------------------
+ baseAttrFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 1)
+ otherAttrFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 2)
+ fightPowerFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 3)
+
+ lvAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_LV)
+ equipAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_MainEquip)
+ bookAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_HeroBook)
+
+ GameWorld.DebugLog(" 国家武将统计=%s" % countryHeroInfo, playerID)
+ GameWorld.DebugLog(" 羁绊武将统计=%s" % fetterHeroInfo, playerID)
+ GameWorld.DebugLog(" 武将自身属性=%s" % heroSelfAttrInfo, playerID)
+ GameWorld.DebugLog(" 武将吞噬属性=%s" % heroStarTalentInfo, playerID)
+ GameWorld.DebugLog(" 武将突破潜能=%s" % heroBreakAttrInfo, playerID)
+ GameWorld.DebugLog(" 武将觉醒天赋=%s" % heroAwakeTalentInfo, playerID)
+ GameWorld.DebugLog(" 武将羁绊属性=%s" % heroFetterAttrInfo, playerID)
+ GameWorld.DebugLog(" 阵容光环属性=%s" % lineupHaloAttrInfo, playerID)
+ GameWorld.DebugLog(" 阵容上阵加成=InitAddPer=%s,LVAddPer=%s,BreakLVAddPer=%s,StarAddPer=%s" % (InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer), playerID)
+
+ GameWorld.DebugLog(" 主公等级属性=%s" % lvAttrDict, playerID)
+ GameWorld.DebugLog(" 主公装备属性=%s" % equipAttrDict, playerID)
+ GameWorld.DebugLog(" 主公图鉴属性=%s" % bookAttrDict, playerID)
+
+ lineupFightPower = 0 # 阵容总战力
+ InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer = InitAddPer / 10000.0, LVAddPer / 10000.0, BreakLVAddPer / 10000.0, StarAddPer / 10000.0
+ for heroID, selfAttrDict in heroSelfAttrInfo.items():
+ lineupHero = lineup.GetLineupHeroByID(heroID)
+ if not lineupHero:
+ continue
+ lineupHero.heroBatAttrDict = {}
+ lineupHero.fightPower = 0
+
+ starTalentAttrDict = heroStarTalentInfo.get(heroID, {})
+ breakAttrDict = heroBreakAttrInfo.get(heroID, {})
+ awakeTalentAttrDict = heroAwakeTalentInfo.get(heroID, {})
+ fetterAttrDict = heroFetterAttrInfo.get(heroID, {})
+
+ logAttrDict = {}
+ fightPowerParamDict = {}
+ for attrID in ChConfig.CalcBattleAttrIDList:
+ attrPerID = ChConfig.AttrPerDict.get(attrID, 0) # 对应百分比提升的属性ID
+
+ lvValue = lvAttrDict.get(attrID, 0)
+ equipValue = equipAttrDict.get(attrID, 0)
+ bookValue = bookAttrDict.get(attrID, 0)
+ bookPer = bookAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+
+ lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = 0, 0, 0, 0
+ if attrID in ChConfig.BaseAttrIDList:
+ lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer
+
+ heroSelfValue, heroSelfPer = selfAttrDict.get(attrID, 0), 0 # 武将自身基值
+ inheritPer = 1 # 继承比例,默认100%
+ if attrID in ChConfig.AttrInheritPerDict:
+ attrInheritPerID = ChConfig.AttrInheritPerDict[attrID] # 继承ID
+ inheritPer = selfAttrDict.get(attrInheritPerID, 100) # 继承比例从武将自身属性中取
+ inheritPer /= 100.0
+
+ lineupHaloValue, lineupHaloPer = lineupHaloAttrInfo.get(attrID, 0), 0
+ fetterValue, fetterPer = fetterAttrDict.get(attrID, 0), 0
+ starTalentValue, starTalentPer = starTalentAttrDict.get(attrID, 0), 0
+ breakLVValue, breakLVPer = breakAttrDict.get(attrID, 0), 0
+ awakeTalentValue, awakeTalentPer = awakeTalentAttrDict.get(attrID, 0), 0
+ if attrPerID:
+ heroSelfPer = selfAttrDict.get(attrPerID, 0) / 10000.0
+ lineupHaloPer = lineupHaloAttrInfo.get(attrPerID, 0) / 10000.0
+ fetterPer = fetterAttrDict.get(attrPerID, 0) / 10000.0
+ starTalentPer = starTalentAttrDict.get(attrPerID, 0) / 10000.0
+ breakLVPer = breakAttrDict.get(attrPerID, 0) / 10000.0
+ awakeTalentPer = awakeTalentAttrDict.get(attrPerID, 0) / 10000.0
+
+ # 计算
+ attrParamDict = {"lvValue":lvValue, "equipValue":equipValue, "bookValue":bookValue, "bookPer":bookPer,
+ "lineupInitAddPer":lineupInitAddPer, "lineupLVAddPer":lineupLVAddPer, "lineupBreakLVAddPer":lineupBreakLVAddPer, "lineupStarAddPer":lineupStarAddPer,
+ "heroSelfValue":heroSelfValue, "heroSelfPer":heroSelfPer, "inheritPer":inheritPer,
+ "lineupHaloValue":lineupHaloValue, "lineupHaloPer":lineupHaloPer, "fetterValue":fetterValue, "fetterPer":fetterPer,
+ "starTalentValue":starTalentValue, "starTalentPer":starTalentPer, "breakLVValue":breakLVValue, "breakLVPer":breakLVPer,
+ "awakeTalentValue":awakeTalentValue, "awakeTalentPer":awakeTalentPer,
+ }
+
+ if attrID in ChConfig.BaseAttrIDList:
+ attrValue = FormulaControl.Eval("baseAttrFormula", baseAttrFormula, attrParamDict)
+ else:
+ attrValue = FormulaControl.Eval("otherAttrFormula", otherAttrFormula, attrParamDict)
+ #GameWorld.DebugLog(" attrID=%s,attrValue=%s,attrParamDict=%s" % (attrID, attrValue, attrParamDict))
+ lineupHero.heroBatAttrDict[attrID] = attrValue
+
+ attrIpyData = IpyGameDataPY.GetIpyGameData("PlayerAttr", attrID)
+ attrName = attrIpyData.GetParameter() if attrIpyData else "%s" % attrID
+ fightPowerParamDict[attrName] = attrValue
+ if attrValue:
+ logAttrDict["%s-%s" % (attrID, attrName)] = attrValue
+
+ # 计算战力
+ fightPower = FormulaControl.Eval("fightPowerFormula", fightPowerFormula, fightPowerParamDict)
+ skillFightPower = 0
+ for skillID in lineupHero.heroSkillIDList:
+ skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
+ if not skillData:
+ continue
+ skillFightPower += skillData.GetFightPower()
+ fightPowerTotal = fightPower + skillFightPower
+ lineupHero.fightPower = fightPowerTotal
+ lineupFightPower += fightPowerTotal
+
+ GameWorld.DebugLog(" 武将最终战力: heroID=%s,fightPower=%s(%s+%s),%s,skillIDList=%s"
+ % (heroID, fightPowerTotal, fightPower, skillFightPower, logAttrDict, lineupHero.heroSkillIDList), playerID)
+
+ lineup.fightPower = lineupFightPower
+ GameWorld.DebugLog(" 阵容最终战力: lineupID=%s,lineupFightPower=%s" % (lineupID, lineupFightPower), playerID)
+
+ # 更新排行榜
+ if lineupID != ShareDefine.Lineup_Main:
+ return
+
+ PlayerControl.SetFightPower(curPlayer, lineupFightPower)
+
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRequest.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRequest.py
deleted file mode 100644
index f29edf3..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRequest.py
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-
-##@package PlayerRequest
-# 请求逻辑处理
-#
-# @author Mark
-# @date 2010-4-28
-# @version 1.0
-#
-# 修改时间 修改人 修改内容
-# VER = "2010-05-12 18:30" zhengyang 添加注释
-#
-# 模块详细说明
-#---------------------------------------------------------------------
-import GameWorld
-import ChConfig
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-## 判断玩家是否有相同的请求
-# @param curPlayer 当前玩家
-# @param curTagPlayer 目标玩家
-# @param requestType 请求类型
-# @return True or False
-# @remarks 函数详细说明.
-def CheckRequest(curPlayer,curTagPlayer,requestType):
- if curTagPlayer == None:
- return False
-
- curTagPlayerID = curTagPlayer.GetPlayerID()
- #玩家请求次数
- requestCount = curPlayer.GetRequestCount()
- for i in range(0,requestCount):
- requestID = curPlayer.GetRequestID(i)
- type = curPlayer.GetRequestType(i)
- if requestID == curTagPlayerID and type == requestType:
- #GameWorld.Log("curTagID = %d请求检查通过"%requestID)
- return True
-
- GameWorld.Log("双方请求ID不同或组队类型不正确" , curPlayer.GetPlayerID(), curTagPlayerID)
- #GameWorld.Log("请求失败")
- return False
-
-## 刷新玩家请求
-# @param curPlayer 当前玩家
-# @param tick 当前时间
-# @return None
-# @remarks 函数详细说明.
-def ProcessPlayerRequest(curPlayer, tick):
- if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_PlayerRequest) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_PlayerRequest]:
- #没有到刷新间隔
- return
-
- curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_PlayerRequest, tick)
-
- #单位时间刷新一次
- #玩家请求次数
- requestCount = curPlayer.GetRequestCount()
- curIndex = 0
- while curIndex < requestCount:
- #获得请求开始时间
- requestTick = curPlayer.GetRequestTick(curIndex)
- if requestTick == 0:
- curIndex += 1
- continue
-
- #获得请求最大时间
- requestMaxTick = curPlayer.GetRequestMaxTick(curIndex)
- if (tick - requestTick) < requestMaxTick:
- curIndex += 1
- continue
-
- curPlayer.DeleteRequest(curIndex)
- #GameWorld.Log("请求响应 = %s超时,状态已清除"%(curIndex) , curPlayer.GetPlayerID())
- requestCount = curPlayer.GetRequestCount()
-
- return
\ No newline at end of file
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 582a8cf..5cc7d0c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -18,7 +18,6 @@
import SkillShell
import BuffSkill
import PlayerControl
-import PlayerRequest
import ChEquip
import SkillCommon
import FBLogic
@@ -58,6 +57,7 @@
import PlayerActivity
import PlayerBackup
import MirrorAttack
+import PlayerOnline
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -671,25 +671,6 @@
return
#---------------------------------------------------------------------
-##刷新时效道具
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值, 是否重刷玩家属性
-# @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]:
- return reFlash
- #耐久减少值/分钟
- reFlash = ProcessTimeEquip(curPlayer, tick)
-
- return reFlash
-
-
-#---------------------------------------------------------------------
##刷新玩家Buff
# @param curPlayer 玩家实例
# @param tick 时间戳
@@ -875,68 +856,6 @@
# curPlayer.SetXP(nextXPValue)
#===========================================================================
-
-#---------------------------------------------------------------------
-##玩家自动回复生命和魔法
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return None
-# @remarks 玩家自动回复生命和魔法
-def ProcessHPMPState(curPlayer, tick):
-
-# #仅打坐状态回复
-# if curPlayer.GetPlayerAction() != IPY_GameWorld.paSit:
-# return
-
- if not curPlayer.IsAlive():
- #死亡状态不处理
- return
-
- #检测是否到CD时间, 暂定5秒回一次
- if tick - curPlayer.GetRestoreTime() < ChConfig.Def_HPRestoreInterval:
- return
- #设置当前回复开始时间
- curPlayer.SetRestoreTime(tick)
-
- #没有恢复能力
- if curPlayer.GetHPRestorePer() == 0:
- return
-
- #满血不处理
- if GameObj.GetHP(curPlayer) == GameObj.GetMaxHP(curPlayer):
- return
-
- #战斗中返回
- #if curPlayer.IsBattleState():
- # return False
-
-# #战斗对峙返回
-# if curPlayer.GetIsConfronting():
-# return False
-
- #---回复玩家血量---
- playerHP = GameObj.GetHP(curPlayer)
- #playerMP = curPlayer.GetMP()
- playerMaxHP = GameObj.GetMaxHP(curPlayer)
- #playerMaxMP = curPlayer.GetMaxMP()
-
- # 目前回复频率暂定5秒回复一次,回复数值是1秒的值,所以此处乘5
- addHPValue = curPlayer.GetHPRestorePer() * 5
-
- #addMPValue = GameWorld.GetFloatUpper(playerMaxMP * mpPer + mpValue)
-
- #GameWorld.Log('addHPValue = %s, addMPValue = %s'%(addHPValue, addMPValue))
-
- #当前不是满血, 就回血
- if playerHP != playerMaxHP:
- SkillCommon.SkillAddHP(curPlayer, 0, addHPValue)
- #GameObj.SetHP(curPlayer, min(playerHP + addHPValue, playerMaxHP))
-
- #当前不是满魔, 就回魔
- #if playerMP != playerMaxMP:
- # curPlayer.SetMP(min(playerMP + addMPValue, playerMaxMP))
- return
-
#---------------------------------------------------------------------
##刷新组队状态
# @param curPlayer 玩家实例
@@ -1071,81 +990,6 @@
return
#---------------------------------------------------------------------
-##处理耐久计算方式为:现实时间刷新方式的物品
-# @param curPlayer 玩家实例
-# @return 布尔值
-# @remarks 处理耐久计算方式为:现实时间刷新方式的物品
-def ProcessTimeEquip(curPlayer, tick):
- 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):
- #验证物品是否过期
- curItemExpireTime = curItem.GetUserAttr(ShareDefine.Def_IudetExpireTime)
- if not curItemExpireTime:
- curItemExpireTime = curItem.GetExpireTime()
- curItemPastTime = time.time() - curItem.GetUserAttr(ShareDefine.Def_IudetCreateTime)
- if curItemExpireTime - curItemPastTime > 0:
- return
-
- spaceIndex = ItemControler.GetItemPackSpaceIndex(curPlayer, IPY_GameWorld.rptItem)
- if spaceIndex == -1:
- # 没有空位,玩家主动取下,计算属性时无效化
- # 过期属性时效需刷属性
- return True
-
- result = ItemControler.PlayerItemControler(curPlayer).UnEquipItem(equipIndex, spaceIndex)
- if not result:
- # 过期属性时效需刷属性
- return True
- equipID = result[0]
- equipPlace = result[1]
- if equipPlace in [ShareDefine.retGuard1, ShareDefine.retGuard2]:
- PlayerControl.NotifyCode(curPlayer, 'Guardian_Timeout', [equipID, spaceIndex])
- elif equipPlace == ShareDefine.retWing:
- PlayerControl.NotifyCode(curPlayer, 'WingTiyan_Timeout')
-
- #tryItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 1, {})
- #tryItemID = tryItemDict.get(curPlayer.GetJob(), 0)
- #if tryItemID and ItemControler.GetAppointItemRealID(tryItemID) == equipID:
- # #首充试用武器过期并且还没首充的提示()
- # if not curPlayer.GetChangeCoinPointTotal():
- # PlayerControl.NotifyCode(curPlayer, 'FirstGoldWPOver')
- # PlayerGoldGift.FirstGoldTryItemOutTime(curPlayer)
-
- return True
-#---------------------------------------------------------------------
##全局定时器调用, 刷新玩家状态
# @param curPlayer 玩家实例
# @param tick 时间戳
@@ -1166,112 +1010,56 @@
PlayerBackup.CheckPlayerBackup(curPlayer)
#玩家镜像战斗AI
- MirrorAttack.ProcessPlayerMirrorAI(curPlayer, tick)
+ #MirrorAttack.ProcessPlayerMirrorAI(curPlayer, tick)
#被GM封状态响应
ProcessGMOperLogic(curPlayer, tick)
#刷新玩家战斗状态
- ProcessPlayerBattle(curPlayer, tick)
+ #ProcessPlayerBattle(curPlayer, tick)
#战斗状态判断
- CheckBattleState(curPlayer, tick)
+ #CheckBattleState(curPlayer, tick)
#切换玩家呆滞状态
- ProcessPlayerNeedProcess(curPlayer , tick)
+ #ProcessPlayerNeedProcess(curPlayer , tick)
#放在刷buff前
- ProcessPassiveSkill(curPlayer, tick)
-
- #---影响属性刷新---------------------------------------------
- #是否刷新列表
- reFlashList = []
-
- #刷新玩家Buff
- reFlashBuff = ProcessRefreshBuffState(curPlayer, tick)
-
- #刷新玩家场景buff效果
- ProcessPlayerBuffEffect(curPlayer, tick)
-
- #时效道具刷新
- reFlash = ProcessRefreshTimeItem(curPlayer, tick)
- reFlashList.append(reFlash)
-# GameWorld.Log('刷新以单位时间(分钟)消耗耐久的物品 %s'%(time.clock() - curTime))
-# curTime = time.clock()
+ #ProcessPassiveSkill(curPlayer, tick)
ProcessPlayerMinute(curPlayer, tick)
- #vip体验
- reFlash = PlayerVip.CheckVIPExperience(curPlayer, tick)
- reFlashList.append(reFlash)
-
- #===影响人物行为刷新, 支持控制类BUFF可刷属性======================================
- # 控制类有属性刷新交给属性处理
- attrBuffResult, actBuffResult = ProcessRefreshActionBuffState(curPlayer, tick)
-
- playerControl = PlayerControl.PlayerControl(curPlayer)
- if actBuffResult:
- playerControl.RefreshPlayerActionState()
-
- #===行为刷新结束==============================================================
-
- #重刷属性
- # 1. 循环内需要刷属性
- # 2. buff消失刷属性
- # 3. 玩家其他行为触发缓存刷属性
- # 4. 玩家因buff缓存刷属性
- if True in reFlashList :
- #Buff影响到属性刷新
- playerControl.RefreshPlayerAttrState()
-
-
- #此处才是真正的刷新人物属性值,需刷属性逻辑应在此行前调用
- if not playerControl.RefreshPlayerAttrStateEx():
- if reFlashBuff or attrBuffResult:
- playerControl.RefreshPlayerAttrByBuff()
-
- # 只刷BUFF情况
- playerControl.RefreshPlayerAttrByBuffEx()
-
+ PlayerOnline.GetOnlinePlayer(curPlayer).DoRefreshRoleAttr()
#---到这边应该属性刷新结束,下面的逻辑有的需要用到属性值--------------------
#当前玩家的状态
- curPlayerAction = curPlayer.GetPlayerAction()
+ #curPlayerAction = curPlayer.GetPlayerAction()
# curTime = time.clock()
#刷新玩家的准备进度条
- if curPlayerAction == IPY_GameWorld.paPreparing :
- ProcessPlayerPrepareState(curPlayer, tick)
+ #if curPlayerAction == IPY_GameWorld.paPreparing :
+ # ProcessPlayerPrepareState(curPlayer, tick)
- #刷新玩家请求
- PlayerRequest.ProcessPlayerRequest(curPlayer, tick)
-
- #回血回魔状态处理
- ProcessHPMPState(curPlayer, tick)
-
- PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
+ #PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
#刷新组队状态
#ProcessTeamState(curPlayer, tick)
#玩家在线时间刷新
- ProcessPlayer_OnlineTime(curPlayer, tick)
+ #ProcessPlayer_OnlineTime(curPlayer, tick)
#反外挂验证
- PlayerAutoCheckOnline.HackDefense(curPlayer, tick)
+ #PlayerAutoCheckOnline.HackDefense(curPlayer, tick)
#副本相关时间处理
- PlayerFB.DoPlayerFBTimeProcess(curPlayer, tick)
+ #PlayerFB.DoPlayerFBTimeProcess(curPlayer, tick)
#挂机收益
- PlayerGuaji.ProcessGuaji(curPlayer)
-
- #PK/boss状态
- ProcessPKBossState(curPlayer, tick)
+ #PlayerGuaji.ProcessGuaji(curPlayer)
#恶意攻击时间处理
- AttackCommon.ProcessMaliciousAttackPlayer(curPlayer, tick)
+ #AttackCommon.ProcessMaliciousAttackPlayer(curPlayer, tick)
#成就
PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick, False)
#限时抢购
@@ -1281,15 +1069,15 @@
#神秘商店刷新
FunctionNPCCommon.CheckMysticalShopRefresh(curPlayer, tick)
#活跃放置
- PlayerActivity.ProcessActivityPlace(curPlayer)
+ #PlayerActivity.ProcessActivityPlace(curPlayer)
#自定义场景
- FBLogic.OnCustomSceneProcess(curPlayer, tick)
+ #FBLogic.OnCustomSceneProcess(curPlayer, tick)
#炼器
- PlayerActLianqi.OnProcess(curPlayer)
+ #PlayerActLianqi.OnProcess(curPlayer)
#仙盟攻城战
- PlayerActFamilyGCZ.OnProcess(curPlayer)
+ #PlayerActFamilyGCZ.OnProcess(curPlayer)
#跨服数据同步,放最后
- CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
+ #CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
return
def ProcessPlayerMinute(curPlayer, tick):
@@ -1423,66 +1211,6 @@
PlayerGMOper.DoGMOperLogic(curPlayer, tick)
return
-
-#===============================================================================
-# 警告:1.此功能应该会导致更加频繁处理战斗逻辑附带的刷新属性等逻辑
-# 需三思考虑,暂时关闭。
-#
-# ## 计时器入口,战斗逻辑
-# # @param None
-# # @return None
-# def PlayerProcessFight(timerType, tick):
-# if not GameWorld.GetGameWorld().GetInitOK() :
-# return
-#
-# #GameWorld.DebugLog("---!!PlayerProcessFight %s"%([timerType, tick]))
-#
-# for i in xrange(GameWorld.GetGameWorld().GetGameWorldCount()):
-# #设置当前的世界
-# GameWorld.GetGameWorld().SetCurGameWorldIndex(i)
-#
-# playerManager = GameWorld.GetPlayerManager()
-# playerCount = playerManager.GetActivePlayerCount()
-# for i in range(0, playerCount):
-# curPlayer = playerManager.GetActivePlayerByIndex(i)
-# if curPlayer.IsEmpty():
-# continue
-#
-# if not curPlayer.GetInitOK():
-# #GameWorld.Log("玩家还未初始化成功, 不处理")
-# continue
-#
-# if curPlayer.IsMoving():
-# continue
-#
-# ProcessFight(curPlayer, tick)
-#
-# GameWorld.GetGameWorld().SetCurGameWorldIndex(-1)
-#
-# return
-#===============================================================================
-
-def ProcessPKBossState(curPlayer, tick):
- ## 处理PK及boss状态
- validTime = IpyGameDataPY.GetFuncCfg("PKConfig", 4) * 1000
-
- pkStateTick = curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick)
- if pkStateTick and (tick - pkStateTick) >= validTime:
- curPlayer.SetDict(ChConfig.Def_PDict_PKStateTick, 0)
- PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PKState, 0)
- #GameWorld.DebugLog("退出PK状态!", curPlayer.GetPlayerID())
- curPlayer.SetDict("StartProDTick", tick) # 开始恢复时间点
-
- bossStateTick = curPlayer.GetDictByKey(ChConfig.Def_PDict_BossStateTick)
- if bossStateTick and (tick - bossStateTick) >= validTime:
- curPlayer.SetDict(ChConfig.Def_PDict_BossStateTick, 0)
- PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossState, 0)
- #GameWorld.DebugLog("退出Boss状态!", curPlayer.GetPlayerID())
-
- # 脱离PK战斗 X秒后按比例恢复
- ProcessProDef(curPlayer, tick)
- return
-
def Sync_PKBossState(curPlayer):
psState = 1 if curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick) else 0
PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PKState, psState)
@@ -1490,40 +1218,6 @@
bossState = 1 if curPlayer.GetDictByKey(ChConfig.Def_PDict_BossStateTick) else 0
PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossState, bossState)
return
-
-# 脱离PK战斗 X秒后按比例恢复
-def ProcessProDef(curPlayer, tick):
- if PlayerControl.GetProDefHPPer(curPlayer) == 0:
- # 没转化值
- return
-
- # 脱离PK战斗 X秒后按比例恢复
- if IsInPKState(curPlayer):
- return
-
- if tick - curPlayer.GetDictByKey("StartProDTick") < IpyGameDataPY.GetFuncCfg("MagicExterior", 2) * 1000:
- return
-
- if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
- return
-
- # 每秒恢复
- if tick - curPlayer.GetDictByKey("restoreProDTick") < 1000:
- return
-
- curProDef = PlayerControl.GetProDef(curPlayer)
- maxProDef = PlayerControl.GetMaxProDef(curPlayer)
-
- if curProDef == maxProDef:
- return
-
- #非PK状态恢复护盾
- PlayerControl.SetProDef(curPlayer, min(curProDef + \
- IpyGameDataPY.GetFuncCfg("MagicExterior", 3)*maxProDef/ChConfig.Def_MaxRateValue, maxProDef))
- curPlayer.SetDict("restoreProDTick", tick)
-
- return
-
def IsInPKState(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick) > 0
def SetPKStateTick(curPlayer, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWorldAverageLv.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWorldAverageLv.py
deleted file mode 100644
index 6d48083..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWorldAverageLv.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-#
-##@package PlayerWorldAverageLv.py
-#
-# @todo:世界等级
-#
-# @author zhangxi
-# @date 2012-07-09
-# @version 1.2
-# @note:
-# @change: "2013-03-13 17:00" wdb 删除封包
-# @change: "2014-08-18 12:30" hxp 恢复世界等级
-#
-#------------------------------------------------------------------------------
-#"""Version = 2014-08-18 12:30"""
-#------------------------------------------------------------------------------
-import GameWorld
-import ShareDefine
-import ChPyNetSendPack
-import NetPackCommon
-import PlayerControl
-import GameFuncComm
-import IpyGameDataPY
-
-import math
-#-----------------------------------------------------------------------------
-
-
-def OnLogin(curPlayer):
- ## 登录世界等级处理
- if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_WorldLV):
- return
-
- __CheckAverageLvBuff(curPlayer)
- # 同步
- Sync_WorldAverageLv(curPlayer)
- return
-
-def UpdatePlayerWorldAverageLv(curPlayer):
- ## 世界等级变更更新
- if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_WorldLV):
- return
-
- # 世界等级,经验倍率,能否领奖
- Sync_WorldAverageLv(curPlayer)
- # 经验倍率改变
- PlayerControl.Sync_ExpRateChange(curPlayer)
-
- __CheckAverageLvBuff(curPlayer)
- return
-
-def __CheckAverageLvBuff(curPlayer):
- ## 检查世界等级buff
- #===========================================================================
- # tick = GameWorld.GetGameWorld().GetTick()
- # worldLv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
- # expRate = GetWorldAverageLvExpRate(curPlayer)
- # GameWorld.DebugLog("UpdatePlayerWorldAverageLv...worldLv=%s,expRate=%s" % (worldLv, expRate))
- # if expRate > 0:
- # GameWorld.DebugLog(" AddBuffNoRefreshState...")
- # addSkill = GameWorld.GetGameData().GetSkillBySkillID(ChConfig.Def_SkillID_WorldAverageLvBuff)
- # buffType = SkillCommon.GetBuffType(addSkill)
- # BuffSkill.AddBuffNoRefreshState(curPlayer, buffType, addSkill, tick, 0, curPlayer)
- # else:
- # GameWorld.DebugLog(" DelBuffBySkillID...")
- # BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_WorldAverageLvBuff, tick, False)
- #===========================================================================
- return
-
-
-def GetWorldAverageLvExpRate(curPlayer):
- ## 获取世界等级的经验倍率
- worldLv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
- if not worldLv:
- return 0
-
- #等级限制
- if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_WorldLV):
- return 0
- playerLv = curPlayer.GetLV() #参数
- worldExpRateFormula = IpyGameDataPY.GetFuncCompileCfg('WorldLvExpRate')
- expRate = eval(worldExpRateFormula)
-
- expRate = int(expRate)
- return expRate
-
-
-def Sync_WorldAverageLv(curPlayer):
- ## 通知世界等级
- gameWorld = GameWorld.GetGameWorld()
- worldAverageLv = ChPyNetSendPack.tagPyMCWorldAverageLv()
- worldAverageLv.Clear()
- worldAverageLv.WorldLv = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
- worldAverageLv.ExpRate = GetWorldAverageLvExpRate(curPlayer)
- NetPackCommon.SendFakePack(curPlayer, worldAverageLv)
- return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyArrestAward.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyArrestAward.py
deleted file mode 100644
index 8f00e1b..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyArrestAward.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#---------------------------------------------------------------------
-#
-#---------------------------------------------------------------------
-##@package GY_Query_FamilyArrestAward
-# @todo: 领取帮会悬赏任务奖励
-#
-# @author: jiang
-# @date 2012-02-14
-# @version 1.2
-#
-# @note:
-# @change: "2014-10-31 13:30" hxp 恢复战盟悬赏任务;增加给物品奖励
-# @change: "2015-02-11 16:40" ljd 领奖记录流向
-#---------------------------------------------------------------------
-"""Version = 2015-02-11 16:40"""
-#---------------------------------------------------------------------
-import IPY_GameWorld
-import GameWorld
-import ChConfig
-import ReadChConfig
-import ItemCommon
-import PlayerControl
-import ItemControler
-import ShareDefine
-import ChPlayer
-import DataRecordPack
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 领取帮会悬赏任务奖励
-# @param query_Type 请求类型
-# @param query_ID 请求的玩家ID
-# @param packCMDList 发包命令
-# @param tick 当前时间
-# @return "True" or "False" or ""
-# @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
- return ''
-
-
-#---------------------------------------------------------------------
-## 执行结果
-# @param curPlayer 发出请求的玩家
-# @param callFunName 功能名称
-# @param funResult 查询的结果
-# @param tick 当前时间
-# @return None
-# @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
- #更改查询状态
- curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyArrestQueryState, 0)
-
- result, arrestID = eval(funResult)
- if not result:
- #该悬赏任务还没有完成
- GameWorld.DebugLog("该悬赏任务还没有完成")
- return
-
- state = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
- bit = ShareDefine.Def_ArrestOverState_BitDic.get(arrestID)
-
- if state & pow(2, bit):
- #已经领取过
- GameWorld.DebugLog("该悬赏任务奖励已经领取过")
- return
-
- arrestAwardDict = ReadChConfig.GetEvalChConfig("FamilyArrestAward")
- awardItemInfo = arrestAwardDict.get(arrestID)
- if awardItemInfo == None:
- #找不到悬赏奖励的威望
- GameWorld.ErrLog("PlayerFamilyArrest arrestID = %s no award"%arrestID)
- return
-
- needSpace, awardItemList = awardItemInfo
- # 检查背包
- packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
- if needSpace > packSpace:
- PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
- return
-
- # 给物品
- for itemID, itemCnt, isBind in awardItemList:
- recordData = {'FamilyArrest':state, 'ArrestID':arrestID}
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem], event=["FamilyArrestAward", False, recordData])
-
- #设置奖励领取成功
- state = state|pow(2, bit)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyArrestAwardState, state)
-
- #奖励领取情况
- ChPlayer.Sync_FamilyArrestAwardReceiveState(curPlayer)
- return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index dc9a2e1..69d97b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -50,7 +50,6 @@
g_refreshAttrBillboardFunc = [] # 刷属性后需要触发的同步排行榜函数列表
g_playerFuncAttrDict = {} # 玩家功能点属性 {playerID:{funcIndex:属性列表, ...}, ...}
g_playerEquipPartAttrDict = {} # 玩家装备位养成属性 {playerID:{阶:[强化属性列表, 宝石属性列表, 洗练属性列表], ...}, ...}
-g_equipChangeClassLVInfo = {} # 玩家装备变更的装备阶信息 {playerID:[classLV, ...], ...}
g_filterEquipDict = {} # 按装备条件过滤的装备ID,不分职业 {"classLV_color_star":{(itemJob,itemPlace):itemID, ...}, ...}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index dc071ed..95da8ae 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1057,10 +1057,10 @@
CDBPlayerRefresh_DamagePVE, # 对NPC的伤害固定值
CDBPlayerRefresh_PetDamPer, # 灵宠增加伤害
CDBPlayerRefresh_IgnoreDefRateReduce, # 无视防御抗性
-CDBPlayerRefresh_DamChanceDef, # 概率抵御, 玩家每次被攻击有20%的几率减少伤害比率
+CDBPlayerRefresh_ParryRate, # 概率抵御, 玩家每次被攻击有20%的几率减少伤害比率
CDBPlayerRefresh_BleedDamage, # 流血伤害 155
-CDBPlayerRefresh_FaintRate, # 击晕概率
-CDBPlayerRefresh_FaintDefRate, # 击晕概率抵抗
+CDBPlayerRefresh_StunRate, # 击晕概率
+CDBPlayerRefresh_StunRateDef, # 击晕概率抵抗
CDBPlayerRefresh_FinalHurt, # 最终输出伤害附加
CDBPlayerRefresh_FinalHurtReduce, # 最终输出伤害减少
CDBPlayerRefresh_DamagePerPVP, # PVP伤害增加 160
@@ -1077,7 +1077,7 @@
CDBPlayerRefresh_RealmPoint, # 境界修炼点
CDBPlayerRefresh_Ysog, # 魔精
CDBPlayerRefresh_FamilyActivity, # 仙盟活跃令
-CDBPlayerRefresh_174,
+CDBPlayerRefresh_ParryRateDef, # 抗格挡
CDBPlayerRefresh_PKState, # 战斗状态 175
CDBPlayerRefresh_BossState, # boss状态
CDBPlayerRefresh_BaseAtkMin, # 基础最小攻击
@@ -1092,7 +1092,7 @@
CDBPlayerRefresh_TreasureScore, # 寻宝积分
CDBPlayerRefresh_Danjing, # 丹精
CDBPlayerRefresh_NPCHurtAddPer, # 对怪物伤害加成
-CDBPlayerRefresh_FinalHurtPer, # 最终输出伤害百分比
+CDBPlayerRefresh_FinalDamPer, # 最终输出伤害百分比
CDBPlayerRefresh_TalentPoint, # 天赋点数 190
CDBPlayerRefresh_DamagePVPReduce, # PVP固定伤害减少
CDBPlayerRefresh_GodWeaponLV_1, # 神兵等级 - 类型1 192
@@ -1113,9 +1113,9 @@
CDBPlayerRefresh_NormalHurtPer, # 属性普通攻击加成:普通攻击附加的伤害百分比 207
CDBPlayerRefresh_FabaoHurt, # 属性法宝技能增伤:法宝技能攻击附加的固定值伤害 208
CDBPlayerRefresh_FabaoHurtPer, # 属性法宝技能加成:法宝技能攻击附加的伤害百分比 209
-CDBPlayerRefresh_SuperHitRateReduce, # 暴击概率抗性 210
+CDBPlayerRefresh_SuperHitRateDef, # 暴击概率抗性 210
CDBPlayerRefresh_LuckyHitReduce, # 会心伤害减免固定值
-CDBPlayerRefresh_FinalHurtReducePer, # 最终伤害减少百分比
+CDBPlayerRefresh_FinalDamPerDef, # 最终伤害减少百分比
CDBPlayerRefresh_YinjiTime, # 每X秒减少印记时间,毫秒
CDBPlayerRefresh_YinjiCnt, # 当前印记数 214
CDBPlayerRefresh_SkillAddPer1, # 技能伤害增强1 215
@@ -1152,18 +1152,18 @@
CDBPlayerRefresh_BTGMYuE, # BTGM余额 246
CDBPlayerRefresh_SuccessScore, # 成就积分 247
CDBPlayerRefresh_FamilyFlagWarPoint, # 成就积分 248
-CDBPlayerRefresh_ComboDefRate, # 抗连击概率 249
+CDBPlayerRefresh_ComboRateDef, # 抗连击概率 249
CDBPlayerRefresh_AtkBackRate, # 反击概率 250
CDBPlayerRefresh_AtkBackDefRate, # 抗反击概率 251
CDBPlayerRefresh_SuckHPPer, # 吸血比率 252
-CDBPlayerRefresh_SuckHPDefPer, # 抗吸血比率 253
+CDBPlayerRefresh_SuckHPPerDef, # 抗吸血比率 253
CDBPlayerRefresh_Xiantao, # 仙桃 254
CDBPlayerRefresh_CurePer, # 强化治疗 255
-CDBPlayerRefresh_CureDefPer, # 弱化治疗 256
+CDBPlayerRefresh_CurePerDef, # 弱化治疗 256
CDBPlayerRefresh_PetStrengthenPer, # 强化灵兽 257
CDBPlayerRefresh_PetWeakenPer, # 弱化灵兽 258
-CDBPlayerRefresh_SuperHitHurtPer, # 强化暴伤 259
-CDBPlayerRefresh_SuperHitHurtDefPer, # 弱化暴伤 260
+CDBPlayerRefresh_SuperDamPer, # 强化暴伤 259
+CDBPlayerRefresh_SuperDamPerDef, # 弱化暴伤 260
CDBPlayerRefresh_Lingyu, # 灵玉 261
CDBPlayerRefresh_BossTrial, # 凭证积分 262
CDBPlayerRefresh_GatherSoul, # 聚魂精华 263
@@ -1176,7 +1176,19 @@
CDBPlayerRefresh_XianyuanScore, # 仙缘积分 270
CDBPlayerRefresh_HuanjinggeScore, # 幻境阁积分 271
CDBPlayerRefresh_HeroScore, # 招募积分 272
-) = range(146, 273)
+CDBPlayerRefresh_PhyDamPer, # 物理增伤 273
+CDBPlayerRefresh_PhyDamPerDef, # 物理减伤 274
+CDBPlayerRefresh_MagDamPer, # 法术增伤 275
+CDBPlayerRefresh_MagDamPerDef, # 法术减伤 276
+CDBPlayerRefresh_NormalSkillPer, # 普技增伤 277
+CDBPlayerRefresh_NormalSkillPerDef, # 普技减伤 278
+CDBPlayerRefresh_AngerSkillPer, # 怒技增伤 279
+CDBPlayerRefresh_AngerSkillPerDef, # 怒技减伤 280
+CDBPlayerRefresh_ShieldPer, # 强化护盾 281
+CDBPlayerRefresh_ShieldPerDef, # 弱化护盾 282
+CDBPlayerRefresh_DOTPer, # 持续增伤 283
+CDBPlayerRefresh_DOTPerDef, # 持续减伤 284
+) = range(146, 285)
TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
index fb3c2e9..532527f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -15,298 +15,10 @@
#------------------------------------------------------------------------------
#"""Version = 2017-10-30 16:00"""
#---------------------------------------------------------------------
-import GameWorld
-import PlayerControl
-import ChConfig
-import GameObj
-import IPY_PlayerDefine
-import ShareDefine
-
-
-#生物属性接口,顺序对应ChConfig.TYPE_Calc_AttrList
-#同个属性Get, Set 写在一起,方便维护 [Get, Set, 属性类型, 是否通知自身, 是否通知周围玩家]
-ObjProperty_AttrByIndex = [
- [lambda curObj:PlayerControl.GetMetal(curObj), lambda curObj, value:PlayerControl.SetMetal(curObj, value), ShareDefine.CDBPlayerRefresh_Mater, 1, 0], # 金
- [lambda curObj:PlayerControl.GetWood(curObj), lambda curObj, value:PlayerControl.SetWood(curObj, value), ShareDefine.CDBPlayerRefresh_Wood, 1, 0], # 木
- [lambda curObj:PlayerControl.GetWater(curObj), lambda curObj, value:PlayerControl.SetWater(curObj, value), ShareDefine.CDBPlayerRefresh_Water, 1, 0], # 水
- [lambda curObj:PlayerControl.GetFire(curObj), lambda curObj, value:PlayerControl.SetFire(curObj, value), ShareDefine.CDBPlayerRefresh_Fire, 1, 0], # 火
-
- [lambda curObj:GameObj.GetHP(curObj), lambda curObj, value:GameObj.SetHP(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_HP, 1, 1], # 当前血量
- [lambda curObj:curObj.GetMP(), lambda curObj, value:curObj.SetMP(value), IPY_PlayerDefine.CDBPlayerRefresh_MP, 0, 0], # 当前魔量
- [lambda curObj:GameObj.GetMaxHP(curObj), lambda curObj, value:GameObj.SetMaxHP(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_MaxHP, 1, 1], # 最大血量
- [lambda curObj:curObj.GetMaxMP(), lambda curObj, value:curObj.SetMaxMP(value), IPY_PlayerDefine.CDBPlayerRefresh_MaxMP, 0, 0], # 最大魔量
- [lambda curObj:curObj.GetMinAtk(), lambda curObj, value:curObj.SetMinAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_MINATK, 1, 0], # 最小攻击力
- [lambda curObj:curObj.GetMaxAtk(), lambda curObj, value:curObj.SetMaxAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_MAXATK, 1, 0], # 最大攻击力
- [lambda curObj:PlayerControl.GetEarth(curObj), lambda curObj, value:PlayerControl.SetEarth(curObj, value), ShareDefine.CDBPlayerRefresh_Earth, 1, 0], # 土
- [lambda curObj:curObj.GetLuckValue(), lambda curObj, value:curObj.SetLuckValue(value), IPY_PlayerDefine.CDBPlayerRefresh_LuckValue, 1, 0], # 气运
- [lambda curObj:curObj.GetDef(), lambda curObj, value:curObj.SetDef(value), IPY_PlayerDefine.CDBPlayerRefresh_DEF, 1, 0], # 防御力
- [lambda curObj:curObj.GetHit(), lambda curObj, value:curObj.SetHit(value), IPY_PlayerDefine.CDBPlayerRefresh_HIT, 1, 0], # 命中
- [lambda curObj:curObj.GetMiss(), lambda curObj, value:curObj.SetMiss(value), IPY_PlayerDefine.CDBPlayerRefresh_Miss, 1, 0], # 闪避
- #[lambda curObj:curObj.GetMAtkMin(), lambda curObj, value:curObj.SetMAtkMin(value), IPY_PlayerDefine.CDBPlayerRefresh_MAtkMin, 0, 0], # 最小魔攻
- #[lambda curObj:curObj.GetMAtkMax(), lambda curObj, value:curObj.SetMAtkMax(value), IPY_PlayerDefine.CDBPlayerRefresh_MAtkMax, 0, 0], # 最大魔攻
- [lambda curObj:PlayerControl.GetSpeedNotBuff(curObj), lambda curObj, value:PlayerControl.SetSpeedNotBuff(curObj, value), 0, 0, 0], # 移动速度
- [lambda curObj:GameObj.GetAtkSpeed(curObj), lambda curObj, value:GameObj.SetAtkSpeed(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx1, 1, 1], # 攻击速度
-
- [lambda curObj:curObj.GetSuperHitRate(), lambda curObj, value:curObj.SetSuperHitRate(value), IPY_PlayerDefine.CDBPlayerRefresh_SuperHitRate, 1, 0], # 暴击概率
- [lambda curObj:curObj.GetSuperHit(), lambda curObj, value:curObj.SetSuperHit(value), IPY_PlayerDefine.CDBPlayerRefresh_SuperHit, 1, 0], # 暴击伤害固定值
- [lambda curObj:GameObj.GetSuperHitRateReduce(curObj), lambda curObj, value:GameObj.SetSuperHitRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, 1, 0],# 暴击概率抗性
- [lambda curObj:GameObj.GetSuperHitReduce(curObj), lambda curObj, value:GameObj.SetSuperHitReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitReduce, 1, 0], # 暴击伤害抗性固定值
-
- [lambda curObj:curObj.GetGreatHitRate(), lambda curObj, value:curObj.SetGreatHitRate(value), 0, 0, 0], # 卓越一击几率
- [lambda curObj:curObj.GetGreatHitVal(), lambda curObj, value:curObj.SetGreatHitVal(value), 0, 0, 0], # 卓越一击伤害倍率
- [lambda curObj:PlayerControl.GetGreatHitRateReduce(curObj), lambda curObj, value:PlayerControl.SetGreatHitRateReduce(curObj, value), 0, 0, 0],# 卓越一击概率抗性
- [lambda curObj:PlayerControl.GetGreatHitReducePer(curObj), lambda curObj, value:PlayerControl.SetGreatHitReducePer(curObj, value), 0, 0, 0], # 卓越一击伤害减免
-
- [lambda curObj:curObj.GetLuckyHitRate(), lambda curObj, value:curObj.SetLuckyHitRate(value), IPY_PlayerDefine.CDBPlayerRefresh_LuckyHitRate, 1, 0], # 会心一击几率
- [lambda curObj:curObj.GetLuckyHitVal(), lambda curObj, value:curObj.SetLuckyHitVal(value), IPY_PlayerDefine.CDBPlayerRefresh_LuckyHitVal, 1, 0], # 会心一击伤害固定值
- [lambda curObj:PlayerControl.GetLuckyHitRateReduce(curObj), lambda curObj, value:PlayerControl.SetLuckyHitRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_LuckyHitRateReduce, 1, 0],# 会心一击概率抗性
- [lambda curObj:PlayerControl.GetLuckyHitReduce(curObj), lambda curObj, value:PlayerControl.SetLuckyHitReduce(curObj, value), ShareDefine.CDBPlayerRefresh_LuckyHitReduce, 1, 0], # 会心一击伤害减免固定值
-
- [lambda curObj:curObj.GetIgnoreDefRate(), lambda curObj, value:curObj.SetIgnoreDefRate(value), IPY_PlayerDefine.CDBPlayerRefresh_IgnoreDefRate, 1, 0], # 无视防御几率
- [lambda curObj:PlayerControl.GetIgnoreDefRateReduce(curObj), lambda curObj, value:PlayerControl.SetIgnoreDefRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_IgnoreDefRateReduce, 1, 0], # 无视防御概率抗性
- [lambda curObj:PlayerControl.GetIgnoreDefReducePer(curObj), lambda curObj, value:PlayerControl.SetIgnoreDefReducePer(curObj, value), 0, 0, 0], # 无视防御伤害减免
-
- [lambda curObj:curObj.GetIceAtk(), lambda curObj, value:curObj.SetIceAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_ICEATK, 1, 0], # 冰攻
- [lambda curObj:curObj.GetFireAtk(), lambda curObj, value:curObj.SetFireAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_FIREATK, 1, 0], # 火攻
- [lambda curObj:curObj.GetPoisionAtk(), lambda curObj, value:curObj.SetPoisionAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_POISIONATK, 1, 0], # 毒攻
- [lambda curObj:curObj.GetThunderAtk(), lambda curObj, value:curObj.SetThunderAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_THUNDERATK, 1, 0], # 雷攻
- [lambda curObj:curObj.GetWindAtk(), lambda curObj, value:curObj.SetWindAtk(value), IPY_PlayerDefine.CDBPlayerRefresh_WINDATK, 1, 0], # 风攻
- [lambda curObj:curObj.GetIceDef(), lambda curObj, value:curObj.SetIceDef(value), IPY_PlayerDefine.CDBPlayerRefresh_ICEDEF, 1, 0], # 冰防
- [lambda curObj:curObj.GetFireDef(), lambda curObj, value:curObj.SetFireDef(value), IPY_PlayerDefine.CDBPlayerRefresh_FIREDEF, 1, 0], # 火防
- [lambda curObj:curObj.GetPoisionDef(), lambda curObj, value:curObj.SetPoisionDef(value), IPY_PlayerDefine.CDBPlayerRefresh_POISIONDEF, 1, 0], # 毒防
- [lambda curObj:curObj.GetThunderDef(), lambda curObj, value:curObj.SetThunderDef(value), IPY_PlayerDefine.CDBPlayerRefresh_THUNDERDEF, 1, 0], # 雷防
- [lambda curObj:curObj.GetWindDef(), lambda curObj, value:curObj.SetWindDef(value), IPY_PlayerDefine.CDBPlayerRefresh_WINDDEF, 1, 0], # 风防
-
- [lambda curObj:curObj.GetFightExpRate(), lambda curObj, value:curObj.SetFightExpRate(value), 0, 0, 0], # 杀怪经验倍率
- [lambda curObj:curObj.GetGameEventExpRate(), lambda curObj, value:curObj.SetGameEventExpRate(value), 0, 0, 0], # 娱乐事件经验倍率
- [lambda curObj:curObj.GetFightPetExpRate(), lambda curObj, value:curObj.SetFightPetExpRate(value), 0, 0, 0], # 宠物经验倍率
- [lambda curObj:PlayerControl.GetDropEquipPer(curObj), lambda curObj, value:PlayerControl.SetDropEquipPer(curObj, value), 0, 0, 0],# 装备掉率
- [lambda curObj:curObj.GetGoldFoundRate(), lambda curObj, value:curObj.SetGoldFoundRate(value), IPY_PlayerDefine.CDBPlayerRefresh_GoldFoundRate, 1, 0], # 掉落金钱值增加
- [lambda curObj:PlayerControl.GetPetMinAtk(curObj), lambda curObj, value:PlayerControl.SetPetMinAtk(curObj, value), 0, 0, 0], # 宠物最小攻击
- [lambda curObj:PlayerControl.GetPetMaxAtk(curObj), lambda curObj, value:PlayerControl.SetPetMaxAtk(curObj, value), 0, 0, 0], # 宠物最大攻击
- [lambda curObj:GameObj.GetPetDamPer(curObj), lambda curObj, value:GameObj.SetPetDamPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetDamPer, 1, 0], # 宠物伤害百分比提升
- [lambda curObj:PlayerControl.GetPerLVAtk(curObj), lambda curObj, value:PlayerControl.SetPerLVAtk(curObj, value), 0, 0, 0], # 每1级+%s攻击, 数值取万分率,支持小数算法
- [lambda curObj:PlayerControl.GetPerLVMaxHP(curObj), lambda curObj, value:PlayerControl.SetPerLVMaxHP(curObj, value), 0, 0, 0], # 每1级+%s生命, 数值为固定值
-
- [lambda curObj:PlayerControl.GetMaxProDef(curObj), lambda curObj, value:PlayerControl.SetMaxProDef(curObj, value), ShareDefine.CDBPlayerRefresh_MaxProDef, 1, 0], # 最大防护值
- [lambda curObj:PlayerControl.GetProDefHPPer(curObj), lambda curObj, value:PlayerControl.SetProDefHPPer(curObj, value), ShareDefine.CDBPlayerRefresh_ProDefHPPer, 1, 0], # 生命上限换算为防护值的百分比
- [lambda curObj:PlayerControl.GetProDefAbsorb(curObj), lambda curObj, value:PlayerControl.SetProDefAbsorb(curObj, value), ShareDefine.CDBPlayerRefresh_ProDefAbsorb, 1, 0], # 防护值吸收伤害比率
- [lambda curObj:curObj.GetDamageBackRate(), lambda curObj, value:curObj.SetDamageBackRate(value), IPY_PlayerDefine.CDBPlayerRefresh_DamageBackRate, 1, 0], # 反伤百分比
- [lambda curObj:PlayerControl.GetDamChanceDef(curObj), lambda curObj, value:PlayerControl.SetDamChanceDef(curObj, value), ShareDefine.CDBPlayerRefresh_DamChanceDef, 1, 0], # 20%的概率抵御伤害比率
- [lambda curObj:PlayerControl.GetShieldMPCostRate(curObj), lambda curObj, value:PlayerControl.SetShieldMPCostRate(curObj, value), 0, 0, 0], # 魔法盾伤害吸收蓝耗比率
- [lambda curObj:GameObj.GetFaintRate(curObj), lambda curObj, value:GameObj.SetFaintRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintRate, 1, 0], # 触发击晕
- [lambda curObj:GameObj.GetFaintDefRate(curObj), lambda curObj, value:GameObj.SetFaintDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintDefRate, 1, 0], # 击晕抵抗
- [lambda curObj:PlayerControl.GetAtkerFreezed(curObj), lambda curObj, value:PlayerControl.SetAtkerFreezed(curObj, value), 0, 0, 0], # 触发定身
- [lambda curObj:PlayerControl.GetAddAngry(curObj), lambda curObj, value:PlayerControl.SetAddAngry(curObj, value), 0, 0, 0], # 攻击增加额外仇恨
- [lambda curObj:GameObj.GetComboRate(curObj), lambda curObj, value:GameObj.SetComboRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboRate, 0, 0], # 连击几率
- [lambda curObj:GameObj.GetComboDamPer(curObj), lambda curObj, value:GameObj.SetComboDamPer(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDamPer, 0, 0], # 连击伤害
-
- [lambda curObj:curObj.GetHPRestorePer(), lambda curObj, value:curObj.SetHPRestorePer(value), IPY_PlayerDefine.CDBPlayerRefresh_HPRestorePer, 1, 0], # 自动回复生命
- [lambda curObj:curObj.GetKillBackHP(), lambda curObj, value:curObj.SetKillBackHP(value), 0, 0, 0], # 击杀回血
- [lambda curObj:curObj.GetKillBackMP(), lambda curObj, value:curObj.SetKillBackMP(value), 0, 0, 0], # 击杀回蓝
- [lambda curObj:PlayerControl.GetAtkBackHPPer(curObj), lambda curObj, value:PlayerControl.SetAtkBackHPPer(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx2, 1, 0], # 攻击回复血量固定值
- [lambda curObj:PlayerControl.GetAtkBackMPPer(curObj), lambda curObj, value:PlayerControl.SetAtkBackMPPer(curObj, value), 0, 0, 0], # 攻击回复蓝量比率
- [lambda curObj:PlayerControl.GetAddBackHPPer(curObj), lambda curObj, value:PlayerControl.SetAddBackHPPer(curObj, value), 0, 0, 0], # 暂无用
- [lambda curObj:PlayerControl.GetReduceBackHPPer(curObj), lambda curObj, value:PlayerControl.SetReduceBackHPPer(curObj, value), 0, 0, 0], # 暂无用
- [lambda curObj:PlayerControl.GetXPRestorePer(curObj), lambda curObj, value:PlayerControl.SetXPRestorePer(curObj, value), 0, 0, 0], # 自动恢复XP值比率
-
- [lambda curObj:PlayerControl.GetReduceSkillCDPer(curObj), lambda curObj, value:PlayerControl.SetReduceSkillCDPer(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx3, 1, 0], # 减技能CD比例
- [lambda curObj:curObj.GetSkillAtkRate(), lambda curObj, value:curObj.SetSkillAtkRate(value), IPY_PlayerDefine.CDBPlayerRefresh_SkillAtkRate, 1, 0], # 技能攻击比例加成
- [lambda curObj:PlayerControl.GetSkillAtkRateReduce(curObj), lambda curObj, value:PlayerControl.SetSkillAtkRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAtkRateReduce, 1, 0],# 技能攻击比例减少
- [lambda curObj:PlayerControl.GetDamagePVP(curObj), lambda curObj, value:PlayerControl.SetDamagePVP(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePVP, 1, 0], # PVP固定伤害
- [lambda curObj:PlayerControl.GetDamagePVPReduce(curObj), lambda curObj, value:PlayerControl.SetDamagePVPReduce(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePVPReduce, 1, 0], # PVP固定减伤
- [lambda curObj:PlayerControl.GetHurtPer(curObj), lambda curObj, value:PlayerControl.SetHurtPer(curObj, value), 0, 0, 0], # 受伤计算百分比
- [lambda curObj:PlayerControl.GetBleedDamage(curObj), lambda curObj, value:PlayerControl.SetBleedDamage(curObj, value), ShareDefine.CDBPlayerRefresh_BleedDamage, 1, 0], # 流血伤害
- [lambda curObj:PlayerControl.GetFinalHurt(curObj), lambda curObj, value:PlayerControl.SetFinalHurt(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurt, 1, 0], # 最终固定伤害增加
- [lambda curObj:PlayerControl.GetFinalHurtReduce(curObj), lambda curObj, value:PlayerControl.SetFinalHurtReduce(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurtReduce, 1, 0], # 最终固定伤害减少
- [lambda curObj:PlayerControl.GetDamagePerPVP(curObj), lambda curObj, value:PlayerControl.SetDamagePerPVP(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePerPVP, 1, 0], # 伤害输出计算百分比PVP
- [lambda curObj:PlayerControl.GetDamagePerPVPReduce(curObj), lambda curObj, value:PlayerControl.SetDamagePerPVPReduce(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePerPVPReduce, 1, 0],# 伤害输出计算百分比PVP减少
- [lambda curObj:PlayerControl.GetDamagePVE(curObj), lambda curObj, value:PlayerControl.SetDamagePVE(curObj, value), ShareDefine.CDBPlayerRefresh_DamagePVE, 1, 0], # 伤害输出计算固定值PVE
- [lambda curObj:PlayerControl.GetNPCHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetNPCHurtAddPer(curObj, value), ShareDefine.CDBPlayerRefresh_NPCHurtAddPer, 1, 0], # 对怪物伤害加成
- [lambda curObj:PlayerControl.GetJobAHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetJobAHurtAddPer(curObj, value), 0, 0, 0], # 目标战士伤害加成
- [lambda curObj:PlayerControl.GetJobBHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetJobBHurtAddPer(curObj, value), 0, 0, 0], # 目标法师伤害加成
- [lambda curObj:PlayerControl.GetJobCHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetJobCHurtAddPer(curObj, value), 0, 0, 0], # 目标弓手伤害加成
- [lambda curObj:PlayerControl.GetNPCAtkReducePer(curObj), lambda curObj, value:PlayerControl.SetNPCAtkReducePer(curObj, value), 0, 0, 0], # NPC攻击伤害减免
- [lambda curObj:PlayerControl.GetJobAAtkReducePer(curObj), lambda curObj, value:PlayerControl.SetJobAAtkReducePer(curObj, value), 0, 0, 0], # 战士攻击伤害减免
- [lambda curObj:PlayerControl.GetJobBAtkReducePer(curObj), lambda curObj, value:PlayerControl.SetJobBAtkReducePer(curObj, value), 0, 0, 0], # 法师攻击伤害减免
- [lambda curObj:PlayerControl.GetJobCAtkReducePer(curObj), lambda curObj, value:PlayerControl.SetJobCAtkReducePer(curObj, value), 0, 0, 0], # 弓手攻击伤害减免
-
- [lambda curObj:PlayerControl.GetCommMapExpRate(curObj), lambda curObj, value:PlayerControl.SetCommMapExpRate(curObj, value), 0, 0, 0], # 常规地图经验倍率加成
- [lambda curObj:GameObj.GetFinalHurtPer(curObj), lambda curObj, value:GameObj.SetFinalHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurtPer, 1, 0], # 最终伤害百分比
- [lambda curObj:PlayerControl.GetFuhaoHitRate(curObj), lambda curObj, value:PlayerControl.SetFuhaoHitRate(curObj, value), 0, 0, 0], # 富豪一击概率
- [lambda curObj:PlayerControl.GetBossIDHurt(curObj), lambda curObj, value:PlayerControl.SetBossIDHurt(curObj, value), 0, 0, 0], # 对指定boss伤害加成固定值
- [lambda curObj:PlayerControl.GetBossIDHurtAddPer(curObj), lambda curObj, value:PlayerControl.SetBossIDHurtAddPer(curObj, value), 0, 0, 0],# 对指定boss伤害加成倍率
- [lambda curObj:PlayerControl.GetDropEquipDoCount(curObj), lambda curObj, value:PlayerControl.SetDropEquipDoCount(curObj, value), 0, 0, 0], # 装备掉落执行次数加成万分率
-
- [lambda curObj:PlayerControl.GetBaseAtkAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseAtkAddPer(curObj, value), 0, 0, 0], # 基础攻击百分比
- [lambda curObj:PlayerControl.GetBaseMaxHPAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseMaxHPAddPer(curObj, value), 0, 0, 0], # 基础生命百分比
- [lambda curObj:PlayerControl.GetBaseDefAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseDefAddPer(curObj, value), 0, 0, 0], # 基础防御百分比
- [lambda curObj:PlayerControl.GetBaseHitAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseHitAddPer(curObj, value), 0, 0, 0], # 基础命中百分比
- [lambda curObj:PlayerControl.GetBaseMissAddPer(curObj), lambda curObj, value:PlayerControl.SetBaseMissAddPer(curObj, value), 0, 0, 0], # 基础闪避百分比
- [lambda curObj:PlayerControl.GetGodWeaponMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetGodWeaponMaxHPPer(curObj, value), 0, 0, 0], # 神兵生命百分比
- [lambda curObj:PlayerControl.GetGodWeaponAtkPer(curObj), lambda curObj, value:PlayerControl.SetGodWeaponAtkPer(curObj, value), 0, 0, 0], # 神兵攻击百分比
- [lambda curObj:PlayerControl.GetStoneMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetStoneMaxHPPer(curObj, value), 0, 0, 0], # 宝石生命百分比
- [lambda curObj:PlayerControl.GetStoneAtkPer(curObj), lambda curObj, value:PlayerControl.SetStoneAtkPer(curObj, value), 0, 0, 0], # 宝石攻击百分比
- [lambda curObj:PlayerControl.GetHPCureEnhance(curObj), lambda curObj, value:PlayerControl.SetHPCureEnhance(curObj, value), 0, 0, 0], # 血瓶恢复效果增强
- [lambda curObj:PlayerControl.GetOnlyFinalHurt(curObj), lambda curObj, value:PlayerControl.SetOnlyFinalHurt(curObj, value), 0, 0, 0], # 额外输出伤害
- [lambda curObj:PlayerControl.GetPVPAtkBackHP(curObj), lambda curObj, value:PlayerControl.SetPVPAtkBackHP(curObj, value), 0, 0, 0], # PVP攻击回血
- [lambda curObj:PlayerControl.GetHitSucessRate(curObj), lambda curObj, value:PlayerControl.SetHitSucessRate(curObj, value), 0, 0, 0], # 命中成功率
- [lambda curObj:PlayerControl.GetMissSucessRate(curObj), lambda curObj, value:PlayerControl.SetMissSucessRate(curObj, value), 0, 0, 0], # 命中成功率
- [lambda curObj:curObj.GetAtkInterval(), lambda curObj, value:curObj.SetAtkInterval(value), IPY_PlayerDefine.CDBPlayerRefresh_AtkInterval, 0, 0], # NPC攻击频率
- [lambda curObj:PlayerControl.GetFuncDef(curObj), lambda curObj, value:PlayerControl.SetFuncDef(curObj, value), ShareDefine.CDBPlayerRefresh_FuncDef, 1, 0], # 功能层防御
- [lambda curObj:PlayerControl.GetCurePer(curObj), lambda curObj, value:PlayerControl.SetCurePer(curObj, value), 0, 0, 0], # 治疗加成百分比 默认百分百
- [lambda curObj:PlayerControl.GetBeHurtPer(curObj), lambda curObj, value:PlayerControl.SetBeHurtPer(curObj, value), 0, 0, 0], # 加深受到伤害百分比
- [lambda curObj:PlayerControl.GetHorseAtkPer(curObj), lambda curObj, value:PlayerControl.SetHorseAtkPer(curObj, value), 0, 0, 0], # 坐骑攻击百分比
- [lambda curObj:PlayerControl.GetStoneBasePer(curObj), lambda curObj, value:PlayerControl.SetStoneBasePer(curObj, value), 0, 0, 0], # 宝石基础属性百分比
- [lambda curObj:PlayerControl.GetRealmBasePer(curObj), lambda curObj, value:PlayerControl.SetRealmBasePer(curObj, value), 0, 0, 0], # 境界基础属性百分比
- [lambda curObj:PlayerControl.GetPetSkillAtkRate(curObj), lambda curObj, value:PlayerControl.SetPetSkillAtkRate(curObj, value), 0, 0, 0], # 宠物技能伤害比例
- [lambda curObj:PlayerControl.GetWingHPPer(curObj), lambda curObj, value:PlayerControl.SetWingHPPer(curObj, value), 0, 0, 0], # 翅膀生命百分比
- [lambda curObj:PlayerControl.GetSuiteBasePer(curObj), lambda curObj, value:PlayerControl.SetSuiteBasePer(curObj, value), 0, 0, 0], # 套装基础属性百分比
- [lambda curObj:PlayerControl.GetPlusBaseAtkPer(curObj), lambda curObj, value:PlayerControl.SetPlusBaseAtkPer(curObj, value), 0, 0, 0], # 强化基础攻击百分比
- [lambda curObj:PlayerControl.GetProDef(curObj), lambda curObj, value:PlayerControl.SetProDef(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_ExAttr4, 1, 0], # 当前防护值
- [lambda curObj:PlayerControl.GetNormalHurt(curObj), lambda curObj, value:PlayerControl.SetNormalHurt(curObj, value), ShareDefine.CDBPlayerRefresh_NormalHurt, 1, 0], # 属性普通攻击增伤
- [lambda curObj:PlayerControl.GetNormalHurtPer(curObj), lambda curObj, value:PlayerControl.SetNormalHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_NormalHurtPer, 1, 0], # 属性普通攻击加成
- [lambda curObj:PlayerControl.GetFabaoHurt(curObj), lambda curObj, value:PlayerControl.SetFabaoHurt(curObj, value), ShareDefine.CDBPlayerRefresh_FabaoHurt, 1, 0], # 属性法宝技能增伤
- [lambda curObj:PlayerControl.GetFabaoHurtPer(curObj), lambda curObj, value:PlayerControl.SetFabaoHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_FabaoHurtPer, 1, 0], # 属性法宝技能加成
- [lambda curObj:GameObj.GetFinalHurtReducePer(curObj), lambda curObj, value:GameObj.SetFinalHurtReducePer(curObj, value), ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, 1, 0], # 最终伤害减少百分比
- [lambda curObj:PlayerControl.GetLostYinjiTime(curObj), lambda curObj, value:PlayerControl.SetLostYinjiTime(curObj, value), ShareDefine.CDBPlayerRefresh_YinjiTime, 1, 0], # 每X秒自动消失一个印记 毫秒
- [lambda curObj:PlayerControl.GetTheFBSkillsCD(curObj), lambda curObj, value:PlayerControl.SetTheFBSkillsCD(curObj, value), 0, 0, 0], # 减少指定技能组CD XX%
- [lambda curObj:PlayerControl.GetBurnValue(curObj), lambda curObj, value:PlayerControl.SetBurnValue(curObj, value), 0, 0, 0], # 灼烧固定伤害
- [lambda curObj:PlayerControl.GetBurnTimePer(curObj), lambda curObj, value:PlayerControl.SetBurnTimePer(curObj, value), 0, 0, 0], # 延长灼烧时间百分比
- [lambda curObj:PlayerControl.GetSubSpeedPer(curObj), lambda curObj, value:PlayerControl.SetSubSpeedPer(curObj, value), 0, 0, 0], # 减移动速度百分比
- [lambda curObj:PlayerControl.GetSkillAddPer1(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer1(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer1, 1, 0], # 技能伤害增强1
- [lambda curObj:PlayerControl.GetSkillAddPer2(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer2(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer2, 1, 0], # 技能伤害增强2
- [lambda curObj:PlayerControl.GetSkillAddPer3(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer3(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer3, 1, 0], # 技能伤害增强3
- [lambda curObj:PlayerControl.GetSkillAddPer4(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer4(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer4, 1, 0], # 技能伤害增强4
- [lambda curObj:PlayerControl.GetSkillAddPer5(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer5(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer5, 1, 0], # 技能伤害增强5
- [lambda curObj:PlayerControl.GetSkillAddPer6(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer6(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer6, 1, 0], # 技能伤害增强6
- [lambda curObj:PlayerControl.GetSkillAddPer7(curObj), lambda curObj, value:PlayerControl.SetSkillAddPer7(curObj, value), ShareDefine.CDBPlayerRefresh_SkillAddPer7, 1, 0], # 技能伤害增强7
- [lambda curObj:PlayerControl.GetSkillReducePer1(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer1(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer1, 1, 0], # 受到技能伤害减少1
- [lambda curObj:PlayerControl.GetSkillReducePer2(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer2(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer2, 1, 0], # 受到技能伤害减少2
- [lambda curObj:PlayerControl.GetSkillReducePer3(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer3(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer3, 1, 0], # 受到技能伤害减少3
- [lambda curObj:PlayerControl.GetSkillReducePer4(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer4(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer4, 1, 0], # 受到技能伤害减少4
- [lambda curObj:PlayerControl.GetSkillReducePer5(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer5(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer5, 1, 0], # 受到技能伤害减少5
- [lambda curObj:PlayerControl.GetSkillReducePer6(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer6(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer6, 1, 0], # 受到技能伤害减少6
- [lambda curObj:PlayerControl.GetSkillReducePer7(curObj), lambda curObj, value:PlayerControl.SetSkillReducePer7(curObj, value), ShareDefine.CDBPlayerRefresh_SkillReducePer7, 1, 0], # 受到技能伤害减少7
- [lambda curObj:PlayerControl.GetZhuXianRate(curObj), lambda curObj, value:PlayerControl.SetZhuXianRate(curObj, value), 0, 0, 0], # 诛仙一击: 概率直接减少BOSS当前10%血量
- [lambda curObj:PlayerControl.GetZhuXianReducePer(curObj), lambda curObj, value:PlayerControl.SetZhuXianReducePer(curObj, value), 0, 0, 0], # 诛仙护体: 受到BOSS伤害减免 万分率
- [lambda curObj:PlayerControl.GetHorseMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetHorseMaxHPPer(curObj, value), 0, 0, 0], # 坐骑生命加成
- [lambda curObj:PlayerControl.GetPetAtkPer(curObj), lambda curObj, value:PlayerControl.SetPetAtkPer(curObj, value), 0, 0, 0], # 灵宠攻击加成
- [lambda curObj:PlayerControl.GetHorseTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetHorseTrainAttrPer(curObj, value), 0, 0, 0], # 坐骑培养属性加成
- [lambda curObj:PlayerControl.GetPetTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetPetTrainAttrPer(curObj, value), 0, 0, 0], # 灵宠培养属性加成
- [lambda curObj:PlayerControl.GetGuardTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetGuardTrainAttrPer(curObj, value), 0, 0, 0], # 守护培养属性加成
- [lambda curObj:PlayerControl.GetWingTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetWingTrainAttrPer(curObj, value), 0, 0, 0], # 翅膀培养属性加成
- [lambda curObj:PlayerControl.GetPeerlessWeaponTrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetPeerlessWeaponTrainAttrPer(curObj, value), 0, 0, 0], # 灭世培养属性加成
- [lambda curObj:PlayerControl.GetPeerlessWeapon2TrainAttrPer(curObj), lambda curObj, value:PlayerControl.SetPeerlessWeapon2TrainAttrPer(curObj, value), 0, 0, 0], # 弑神培养属性加成
- [lambda curObj:PlayerControl.GetLianTiAttrPer(curObj), lambda curObj, value:PlayerControl.SetLianTiAttrPer(curObj, value), 0, 0, 0], # 炼体属性属性加成
- [lambda curObj:PlayerControl.GetAttr160(curObj), lambda curObj, value:PlayerControl.SetAttr160(curObj, value), 0, 0, 0], # 160
- [lambda curObj:PlayerControl.GetAffairSpeedPer(curObj), lambda curObj, value:PlayerControl.SetAffairSpeedPer(curObj, value), 0, 0, 0], # 仙盟事务速度加成
- [lambda curObj:PlayerControl.GetFamilyBossHurtPer(curObj), lambda curObj, value:PlayerControl.SetFamilyBossHurtPer(curObj, value), 0, 0, 0], # 仙盟BOSS伤害加成
- [lambda curObj:PlayerControl.GetFamilyWarHPPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarHPPer(curObj, value), 0, 0, 0], # 仙盟联赛生命加成
- [lambda curObj:PlayerControl.GetFamilyWarAtkPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarAtkPer(curObj, value), 0, 0, 0], # 仙盟联赛攻击加成
- [lambda curObj:PlayerControl.GetFamilySitExpPer(curObj), lambda curObj, value:PlayerControl.SetFamilySitExpPer(curObj, value), 0, 0, 0], # 仙盟打坐经验加成
- [lambda curObj:GameObj.GetComboDefRate(curObj), lambda curObj, value:GameObj.SetComboDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDefRate, 1, 0], # 抗连击概率
- [lambda curObj:GameObj.GetAtkBackRate(curObj), lambda curObj, value:GameObj.SetAtkBackRate(curObj, value), ShareDefine.CDBPlayerRefresh_AtkBackRate, 1, 0], # 反击概率
- [lambda curObj:GameObj.GetAtkBackDefRate(curObj), lambda curObj, value:GameObj.SetAtkBackDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_AtkBackDefRate, 1, 0], # 抗反击概率
- [lambda curObj:GameObj.GetSuckHPPer(curObj), lambda curObj, value:GameObj.SetSuckHPPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPPer, 1, 0], # 吸血比率
- [lambda curObj:GameObj.GetSuckHPDefPer(curObj), lambda curObj, value:GameObj.SetSuckHPDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPDefPer, 1, 0], # 抗吸血比率
- [lambda curObj:GameObj.GetCureDefPer(curObj), lambda curObj, value:GameObj.SetCureDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_CureDefPer, 1, 0], # 弱化对方治疗
- [lambda curObj:GameObj.GetPetStrengthenPer(curObj), lambda curObj, value:GameObj.SetPetStrengthenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetStrengthenPer, 1, 0], # 强化灵兽
- [lambda curObj:GameObj.GetPetWeakenPer(curObj), lambda curObj, value:GameObj.SetPetWeakenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetWeakenPer, 1, 0], # 弱化灵兽
- [lambda curObj:GameObj.GetSuperHitHurtPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, 1, 0], # 强化暴伤
- [lambda curObj:GameObj.GetSuperHitHurtDefPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, 1, 0], # 弱化暴伤
- [lambda curObj:PlayerControl.GetBossFinalHurtPer(curObj), lambda curObj, value:PlayerControl.SetBossFinalHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_BossFinalHurtPer, 1, 0], # Boss最终伤害百分比
- [lambda curObj:PlayerControl.GetFaQiMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetFaQiMaxHPPer(curObj, value), 0, 0, 0], # 法器生命百分比
- [lambda curObj:PlayerControl.GetFaQiAtkPer(curObj), lambda curObj, value:PlayerControl.SetFaQiAtkPer(curObj, value), 0, 0, 0], # 法器攻击百分比
- [lambda curObj:PlayerControl.GetFaQiDefPer(curObj), lambda curObj, value:PlayerControl.SetFaQiDefPer(curObj, value), 0, 0, 0], # 法器防御百分比
- [lambda curObj:PlayerControl.GetHorseSkinMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetHorseSkinMaxHPPer(curObj, value), 0, 0, 0], # 坐骑幻化生命加成
- [lambda curObj:PlayerControl.GetHorseSkinAtkPer(curObj), lambda curObj, value:PlayerControl.SetHorseSkinAtkPer(curObj, value), 0, 0, 0], # 坐骑幻化攻击加成
- [lambda curObj:PlayerControl.GetHorseSkinDefPer(curObj), lambda curObj, value:PlayerControl.SetHorseSkinDefPer(curObj, value), 0, 0, 0], # 坐骑幻化防御加成
- [lambda curObj:PlayerControl.GetTitleMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetTitleMaxHPPer(curObj, value), 0, 0, 0], # 称号生命加成
- [lambda curObj:PlayerControl.GetTitleAtkPer(curObj), lambda curObj, value:PlayerControl.SetTitleAtkPer(curObj, value), 0, 0, 0], # 称号攻击加成
- [lambda curObj:PlayerControl.GetTitleDefPer(curObj), lambda curObj, value:PlayerControl.SetTitleDefPer(curObj, value), 0, 0, 0], # 称号防御加成
- [lambda curObj:PlayerControl.GetFaceMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetFaceMaxHPPer(curObj, value), 0, 0, 0], # 头像生命加成
- [lambda curObj:PlayerControl.GetFaceAtkPer(curObj), lambda curObj, value:PlayerControl.SetFaceAtkPer(curObj, value), 0, 0, 0], # 头像攻击加成
- [lambda curObj:PlayerControl.GetFaceDefPer(curObj), lambda curObj, value:PlayerControl.SetFaceDefPer(curObj, value), 0, 0, 0], # 头像防御加成
- [lambda curObj:PlayerControl.GetFacePicMaxHPPer(curObj), lambda curObj, value:PlayerControl.SetFacePicMaxHPPer(curObj, value), 0, 0, 0], # 头像框生命加成
- [lambda curObj:PlayerControl.GetFacePicAtkPer(curObj), lambda curObj, value:PlayerControl.SetFacePicAtkPer(curObj, value), 0, 0, 0], # 头像框攻击加成
- [lambda curObj:PlayerControl.GetFacePicDefPer(curObj), lambda curObj, value:PlayerControl.SetFacePicDefPer(curObj, value), 0, 0, 0], # 头像框防御加成
-]
## 通过索引获得属性值
-# @param curObj 当前对象
-# @param effIndex 属性索引
-# @return 指定属性值
-def GetValueByEffIndex(curObj, effIndex):
- if effIndex <= 0 or effIndex > len(ObjProperty_AttrByIndex):
- GameWorld.ErrLog("查找对象属性失败, Index = %s" % (effIndex))
- return
-
- return ObjProperty_AttrByIndex[effIndex - 1][0](curObj)
-
-
-## 设置属性
-# @param curObj 当前对象
-# @param effIndex 属性索引
-# @param effectValue 值
-# @return None
+def GetValueByEffIndex(curObj, effIndex): return 0
def SetValueByEffIndex(curObj, effIndex, effectValue):
- if effectValue < 0:
- effectValue = 0
-
- if effIndex <= 0 or effIndex > len(ObjProperty_AttrByIndex):
- GameWorld.ErrLog("设置对象属性失败, Index = %s" % (effIndex))
- return
-
- if effIndex not in ChConfig.TYPE_BIGVALUE_ATTR:
- effectValue = min(effectValue, ChConfig.Def_UpperLimit_DWord)
- return ObjProperty_AttrByIndex[effIndex - 1][1](curObj, effectValue)
-
-
-## 通过索引获得属性值和通知信息
-# @param curObj 当前对象
-# @param effIndex 属性索引
-# @return 指定属性值
-def GetValueByEffIndexEx(curObj, effIndex):
- if effIndex <= 0 or effIndex > len(ObjProperty_AttrByIndex):
- GameWorld.ErrLog("查找对象属性失败, Index = %s" % (effIndex))
- return
-
- return ObjProperty_AttrByIndex[effIndex - 1][0](curObj), \
- ObjProperty_AttrByIndex[effIndex - 1][2],\
- ObjProperty_AttrByIndex[effIndex - 1][3],\
- ObjProperty_AttrByIndex[effIndex - 1][4]
-
-# 缓存功能属性的刷新结果,用于BUFF属性单独刷新
-def CopyPlayerFuncAttr(curPlayer):
- for i in xrange(len(ObjProperty_AttrByIndex)):
- # Get
- effIndex = i + 1
- if effIndex in [ChConfig.TYPE_Calc_AttrHP, ChConfig.TYPE_Calc_AttrMP, ChConfig.TYPE_Calc_ProDef]:
- continue
- value = ObjProperty_AttrByIndex[i][0](curPlayer)
- if value == 0 and GetCopyFuncAttrValue(curPlayer, effIndex) == 0:
- continue
- SetCopyFuncAttrValue(curPlayer, effIndex, value)
- return
-
-# 恢复缓存功能属性的刷新结果,用于BUFF属性单独刷新
-def RestorePlayerFuncAttr(curPlayer):
- for i in xrange(len(ObjProperty_AttrByIndex)):
- effIndex = i + 1
- if effIndex in [ChConfig.TYPE_Calc_AttrHP, ChConfig.TYPE_Calc_AttrMP, ChConfig.TYPE_Calc_ProDef]:
- continue
- ObjProperty_AttrByIndex[i][1](curPlayer, GetCopyFuncAttrValue(curPlayer, effIndex))
- return
-
-def GetCopyFuncAttrValue(curPlayer, effIndex):
- value = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CopyFuncAttr % effIndex)
- valueEx = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CopyFuncAttrEx % effIndex)
- return valueEx * ShareDefine.Def_PerPointValue + value
-
-def SetCopyFuncAttrValue(curPlayer, effIndex, value):
- curPlayer.SetDict(ChConfig.Def_PlayerKey_CopyFuncAttr % effIndex, value % ShareDefine.Def_PerPointValue)
- curPlayer.SetDict(ChConfig.Def_PlayerKey_CopyFuncAttrEx % effIndex, value / ShareDefine.Def_PerPointValue)
return
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index 080a469..032cb06 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -521,38 +521,6 @@
return summonNPCList, maxBornIndex
-## 获得持续性技能的总量(技能类型 -> 12,13)
-# @param curPlayer 当前玩家
-# @param curSkill 当前技能
-# @param skillPlus ,技能增益
-# @return value
-# @remarks 函数详细说明.
-def GetLastSkillMaxValue(curPlayer , curSkill , skillPlus=None):
- #根据约定,总量一定是第0个效果
- curEffect = curSkill.GetEffect(0)
- index = curEffect.GetEffectValue(0)
- skillPer = curEffect.GetEffectValue(1)
- effect = curEffect.GetEffectValue(2)
- maxValue = EffGetSet.GetValueByEffIndex(curPlayer, index)
- #GameWorld.Log("持续伤害总值设置curSkill = %s,maxValue = %s skillPer = %s,effect = %s"%(curSkill.GetSkillName(),maxValue,skillPer,effect))
- if maxValue == None:
- GameWorld.Log("计算附加技能总量错误,skillID = %s,index = %s" % (curSkill.GetSkillID(), index) , curPlayer.GetPlayerID())
- return effect
-
- #总值
- value = 0
- if skillPlus == None :
- value = (maxValue * skillPer / ChConfig.Def_MaxRateValue) + effect
- #GameWorld.Log("持续伤害总值设置 value = %s"%value)
- else:
- plus = 1 + skillPlus / float(ChConfig.Def_MaxRateValue)
- value = (maxValue * (skillPer * plus) / ChConfig.Def_MaxRateValue) + effect
- #GameWorld.Log("持续伤害总值设置 value = %s 技能附加 = %s"%(value,plus))
-
- return int(value)
-
-
-
## 玩家召唤NPC(当前玩家,召唤技能,召唤兽ID,召唤兽属性列表, 召唤兽离自己的距离, 当前时间)
# @param curPlayer 当前玩家
# @param curSkill 召唤技能
@@ -648,21 +616,6 @@
if curSkill:
Calc_Summon_BaseEffectBySkillPer(curPlayer, summonNPC, curSkill)
return
-
-# #同一个召唤兽有10个等级, 所以必须用GetFunctionType来决定召唤兽的类型
-# summonID = summonNPC.GetFunctionType()
-#
-# summonList = None
-# if ChConfig.Def_SummonProperty.has_key(summonID):
-# summonList = ChConfig.Def_SummonProperty[summonID]
-#
-# #设置玩家被动技能对召唤兽属性的影响
-# __PassiveSkill_AddSummonAttribute(curPlayer, summonNPC, summonID)
-#
-# if summonList != None:
-# lvSummonNPC = summonNPC.GetLV()
-# #设置召唤兽战斗信息
-# __CalcSummonEffectValue(lvSummonNPC, summonNPC, summonList)
#计算基础总值
Calc_Summon_BaseEffect(summonNPC)
@@ -910,67 +863,6 @@
#返回值,技能释放成功
return summonNPC
-
-## 召唤兽使用技能召唤
-# @param curNPC 当前NPC
-# @param curSkill 当前技能
-# @param maxSummonCount 最大召唤数量
-# @param maxAngryCount 最大怒值数量
-# @param posX 重生坐标X
-# @param posY 重生坐标Y
-# @param tick 当前时间
-# @return 召唤兽
-# @remarks 函数详细说明.
-#def SummonNPC_UseSkill_SummonNPC(curNPC, curSkill , maxSummonCount , maxAngryCount , posX, posY, tick):
-# #获得召唤兽ID
-# summonNPCID = curSkill.GetEffect(0).GetEffectValue(0)
-#
-# if not summonNPCID:
-# return
-#
-# #第一次召唤的时候,需要初始化最大召唤个数
-# if not curNPC.GetSummonCount() :
-# curNPC.SetSummonCount(maxSummonCount, summonNPCID, maxAngryCount)
-#
-# #召唤兽召唤补足
-# elif curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotSummon and maxSummonCount > curNPC.GetSummonCount():
-# curNPC.AddSummonCount(maxSummonCount - curNPC.GetSummonCount(), summonNPCID, maxAngryCount)
-#
-# #寻找一个可以召唤的NPC
-# summonIsFull = True
-# summonNPC = None
-#
-# for i in range(0, curNPC.GetSummonCount()):
-# summonNPC = curNPC.GetSummonNPCAt(i)
-# if GameObj.GetHP(summonNPC) > 0:
-# continue
-#
-# summonIsFull = False
-# break
-#
-# #已经没有可召唤兽的召唤兽,满了
-# if summonIsFull:
-# return
-#
-# #设置这个NPC属性,并召唤出这个NPC
-# NPCCommon.InitNPC(summonNPC)
-#
-# summonNPC.Reborn(posX , posY)
-# summonNPC.SetBornTime(tick)
-# summonNPC.SetLastTime(curSkill.GetLastTime())
-#
-# #返回summonNPC,技能释放成功
-# return summonNPC
-
-## 设置玩家被动技能对召唤兽属性的影响
-# @param curPlayer 当前玩家
-# @param summonNPC 当前召唤兽
-# @param summonID 召唤兽ID
-# @return None
-# @remarks 函数详细说明.
-def __PassiveSkill_AddSummonAttribute(curPlayer, summonNPC, summonID):
- return
-
## 根据效果获得值
# @param valueList
# @param curSkill 当前技能
@@ -985,21 +877,6 @@
returnList.append(value)
return returnList
-
-## 计算NPC属性效果
-# @param lvSummonNPC 玩家
-# @param summonNPC 效果
-# @param summonList NPC
-# @return True
-# @remarks 函数详细说明.
-def __CalcSummonEffectValue(lvSummonNPC, summonNPC, summonList):
- for value in summonList:
- curValue = EffGetSet.GetValueByEffIndex(summonNPC, value[0])
- #GameWorld.Log("当期属性 = %s index = %s"%(curValue,value[0]))
- #GameWorld.Log("设置属性 = %s"%(curValue + value[1] * lvSummonNPC))
- EffGetSet.SetValueByEffIndex(summonNPC, value[0], curValue + value[1] * lvSummonNPC)
-
- return True
## 设置这个召唤兽的基础属性
# @param summonNPC 召唤兽
@@ -1973,13 +1850,13 @@
#0通哟 1 PVP类型 2PVE类型
return curSkill.GetHurtType() % 10
-def isXPSkill(curSkill):
- ## 是否xp怒气技能
+def isAngerSkill(curSkill):
+ ## 是否怒气技能
return curSkill and curSkill.GetXP() > 0
-def isTurnNormalAtkSkill(curSkill):
+def isTurnNormalSkill(curSkill):
## 是否回合普攻技能,区别与无技能的普通A一下,该普攻同样可以有各种技能效果,只是他属于普攻
- return curSkill and curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaAttack
+ return curSkill and curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaSkill
## 检查技能是否为被动技能, 用于控制不可释放技能
def isPassiveSkill(curSkill):
@@ -2223,7 +2100,7 @@
cureDefPer = 0 # 敌方的弱化治疗
angerOverflow = 0 # 怒气溢出值
if userObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightPosInfo):
- if isXPSkill(curSkill):
+ if isAngerSkill(curSkill):
angerOverflow = max(GameObj.GetXP(userObj) - IpyGameDataPY.GetFuncCfg("AngerXP", 2), 0)
#enemyObj = TurnAttack.GetEnemyObj(userObj)
#curePer += GameObj.GetCurePer(userObj)
@@ -2286,101 +2163,7 @@
# @return
def UpdateSkillCombo(attacker, skill, tick):
return
- #===========================================================================
- # if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
- # return
- #
- # SkillComboDict = ReadChConfig.GetEvalChConfig("SkillCombo")
- # jobType = ChConfig.JOB_TYPE_DICT[attacker.GetJob()]
- #
- # if jobType not in SkillComboDict:
- # return
- #
- # jobSkillComboDict = SkillComboDict[jobType]
- #
- # curSkillTypeID = skill.GetSkillTypeID()
- #
- # isCombo = False
- # lastComboTick = attacker.GetDictByKey(ChConfig.Def_PlayerKey_LastSkillComboTick)
- # comboCnt = attacker.GetDictByKey(ChConfig.Def_PlayerKey_SkillComboCnt)
- # buffProcessState = attacker.GetDictByKey(ChConfig.Def_PlayerKey_ComboBuffProcessState)
- # # 持续性伤害buff已处理过不再处理
- # if curSkillTypeID in ChConfig.Ded_ComboBuffProcessSkillIDList and buffProcessState:
- # #GameWorld.DebugLog("持续性伤害buff已处理过不再处理:%s" % curSkillTypeID)
- # return
- #
- # for comboNum, comboInfo in jobSkillComboDict.items():
- #
- # skillList = comboInfo[0]
- # stateSkillReq = comboInfo[1]
- # comboInterval = comboInfo[2]
- # addHurtPerFormat = comboInfo[3]
- # modulusPlusHappenRate = comboInfo[4] # 伤害系数加成概率万分率
- # modulusPlusFormat = comboInfo[5] # 伤害系数公式
- #
- # if curSkillTypeID not in skillList:
- # continue
- #
- # # 如果有姿态要求
- # if stateSkillReq != 0:
- # buffState = attacker.GetBuffState()
- # if buffState.FindBuff(stateSkillReq) == None:
- # #GameWorld.DebugLog("非对应职业姿态(%s),无法连击!" % stateSkillReq)
- # continue
- #
- # curComboCnt = skillList.index(curSkillTypeID) + 1 # 当前技能所在连击数
- #
- # # 在规定时间内完成连击
- # #GameWorld.DebugLog("skillList=%s, curSkillTypeID=%s,comboCnt=%s,curComboCnt=%s,tick=%s,lastComboTick=%s,(%s),comboInterval=%s"
- # # % (skillList, curSkillTypeID, comboCnt, curComboCnt, tick, lastComboTick, tick - lastComboTick, comboInterval))
- # if comboCnt > 0 and (comboCnt + 1) == curComboCnt and (tick - lastComboTick) <= comboInterval:
- # isCombo = True
- # #GameWorld.DebugLog(" 连击成功!")
- #
- # # 第一击
- # elif curComboCnt == 1:
- # GameWorld.DebugLog(" 技能第一击!")
- # comboCnt = 0
- # isCombo = True
- #
- # if isCombo:
- # STR = attacker.GetSTR()
- # PHY = attacker.GetPHY()
- # modulus = 1 # 伤害系数
- # if GameWorld.CanHappen(modulusPlusHappenRate):
- # modulus = eval(modulusPlusFormat)
- # addHurtPer = eval(addHurtPerFormat)
- # attacker.SetDict(ChConfig.Def_PlayerKey_LastSkillComboTick, tick)
- # attacker.SetDict(ChConfig.Def_PlayerKey_SkillComboCnt, curComboCnt)
- # attacker.SetDict(ChConfig.Def_PlayerKey_ComboSkillTypeID, curSkillTypeID)
- # attacker.SetDict(ChConfig.Def_PlayerKey_ComboAddHurtPer, addHurtPer)
- # if curSkillTypeID in ChConfig.Ded_ComboBuffProcessSkillIDList:
- # attacker.SetDict(ChConfig.Def_PlayerKey_ComboBuffProcessState, 1)
- # #GameWorld.DebugLog(" 持续性伤害buff连击!%s" % curSkillTypeID)
- #
- #
- # # 通知客户端连击数
- # skillComboPack = ChPyNetSendPack.tagMCSkillCombo()
- # skillComboPack.Clear()
- # skillComboPack.ComboNum = comboNum
- # skillComboPack.ComboCnt = curComboCnt
- # NetPackCommon.SendFakePack(attacker, skillComboPack)
- # GameWorld.DebugLog("技能连击: num=%s,curCnt=%s,comboCnt=%s,力=%s,敏=%s,modulus=%s,addHurtPer=%s"
- # % (comboNum, curComboCnt, comboCnt, STR, PHY, modulus, addHurtPer))
- # break
- #
- # # 没有连击成功, 重置连击信息
- # if not isCombo and comboCnt != 0:
- # attacker.SetDict(ChConfig.Def_PlayerKey_LastSkillComboTick, 0)
- # attacker.SetDict(ChConfig.Def_PlayerKey_SkillComboCnt, 0)
- # attacker.SetDict(ChConfig.Def_PlayerKey_ComboSkillTypeID, 0)
- # attacker.SetDict(ChConfig.Def_PlayerKey_ComboAddHurtPer, 0)
- # attacker.SetDict(ChConfig.Def_PlayerKey_ComboBuffProcessState, 0)
- # GameWorld.DebugLog("连击失败!curSkillTypeID=%s" % curSkillTypeID)
- #
- # return
- #===========================================================================
-
+
def GetSkillAddPerByID(curPlayer, skillTypeID):
## 获取技能伤害百分比提升值
# @param skillTypeID: 技能TypeID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index caa2f54..ec02178 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -2594,8 +2594,8 @@
# @remarks 刷新玩家场景状态
def ProcessPlayerAreaState(curPlayer):
#初始化所有的场景buff状态
- playerControl = PlayerControl.PlayerControl(curPlayer)
- playerControl.InitMapBuffState()
+ #playerControl = PlayerControl.PlayerControl(curPlayer)
+ #playerControl.InitMapBuffState()
buffManager = curPlayer.GetMapBuff()
@@ -2621,89 +2621,6 @@
callFunc(curPlayer, curEffect)
return
-#---------------------------------------------------------------------
-##添加装备触发的Buff
-# @param curPlayer 玩家实例
-# @param curEquip 装备实例
-# @return 返回值无意义
-# @remarks 添加装备触发的Buff
-def RefreshSkillBuffByEquip(curPlayer, curEquip) :
- #一般装备新增Buff
- __DoEquip_AddBuff(curPlayer, curEquip)
- return
-
-#---------------------------------------------------------------------
-##添加装备触发的Buff, 一般装备新增Buff
-# @param curPlayer 玩家实例
-# @param curEquip 装备实例
-# @return 返回值无意义
-# @remarks 添加装备触发的Buff, 一般装备新增Buff
-def __DoEquip_AddBuff(curPlayer, curEquip):
- gameData = GameWorld.GetGameData()
- playerVehicle = curPlayer.GetPlayerVehicle()
- houseState = curPlayer.GetPlayerRidehorseState()
-
- for index in range(0 , curEquip.GetAddSkillCount()):
- curSkillID = curEquip.GetAddSkill(index)
-
- if curSkillID == 0:
- continue
-
- #通过技能ID获得使用技能
- curSkill = gameData.GetSkillBySkillID(curSkillID)
-
- if curSkill == None :
- GameWorld.Log("装备触发技能,物品表错误 curSkillID = %s"%(curSkillID) , curPlayer.GetPlayerID())
- continue
-
- #骑马触发技能
- houseSkill = ChConfig.Def_Skill_TypeID_Speed
- curSkillType = curSkill.GetSkillTypeID()
-
- if not SkillCommon.IsBuff(curSkill):
- continue
-
- if curSkillType in houseSkill:
- #不使用,不添加buff
- if playerVehicle != IPY_GameWorld.pvHorse :
- continue
-
- if curSkillType == houseSkill[0] and houseState != IPY_GameWorld.prsNormal :
- continue
-
- if curSkillType == houseSkill[1] and houseState != IPY_GameWorld.prsRun :
- continue
-
- #添加Buff
- BuffSkill.AddBuffNoRefreshState(curPlayer, IPY_GameWorld.bfEquipBuff, curSkill, 0, [], buffOwner = curPlayer)
-
- return
-#---------------------------------------------------------------------
-##刷新buff的效果
-# @param buffState Buff管理器
-# @param sameEffectCanWork 是否可以叠加相同效果, <sameEffectCanWork> : 效果是否可以叠加, 默认为否
-# @return 返回值无意义
-# @remarks 刷新buff的效果 (参数 -> buff管理器,是否叠加)
-def __RefreshSkillBuffEffect(buffState, sameEffectCanWork = False):
- return
- #===========================================================================
- # buffState.ClearEffects()
- # for buffIndex in range(0, buffState.GetBuffCount()):
- # curBuff = buffState.GetBuff(buffIndex)
- # buffValue = curBuff.GetValue()
- # curSkill = curBuff.GetSkill()
- # skillID = curSkill.GetSkillID()
- # if skillID == 0:
- # continue
- #
- # for effectIndex in range(0, curSkill.GetEffectCount()):
- # curEffect = curSkill.GetEffect(effectIndex)
- # effectID = curEffect.GetEffectID()
- # if effectID == 0:
- # continue
- #
- # buffState.AddEffect(curEffect, buffValue, skillID, curBuff.GetOwnerID(), curBuff.GetOwnerType())
- #===========================================================================
#---------------------------------------------------------------------
##计算效果值
@@ -2807,35 +2724,6 @@
return ChConfig.Def_CalcAttrIndexDict[(isBaseEff, calcType)]
-
-##刷新玩家所有影响属性的Buff,添加时只重计算同类型BUFF,删除时刷新所有类型BUFF
-# @param curPlayer 玩家实例
-# @param buffType buff类型 -1代表全部刷性
-# @return 返回值无意义
-def RefreshPlayerBuffOnAttrAddEffect(curPlayer, buffType=-1):
- return
-#===============================================================================
-# GameWorld.DebugLog("Start RefreshPlayerBuffOnAttrAddEffect!!!")
-#
-# #[[BuffState, CanPileup]]
-# if buffType == -1:
-# buffRefreshList = [
-# [curPlayer.GetBuffState(), False], [curPlayer.GetDeBuffState(), False],
-# [curPlayer.GetAura(), False], [curPlayer.GetIncBuff(), True],
-# [curPlayer.GetPassiveBuf(), True], [curPlayer.GetEquipBuff(), True],
-# ]
-# else:
-# #只重计算改变的BUFF, 这里不防范非属性类型BUFF外层过滤
-# buffManagerInfo = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType)
-# buffRefreshList = [[buffManagerInfo[0], buffManagerInfo[2]]]
-#
-# #执行刷新逻辑
-# __DoRefreshBuff(buffRefreshList)
-#
-# return
-#===============================================================================
-
-
# 通过技能ID删除buff对应的效果ID
def ClearBuffEffectBySkillID(curObj, skillID, ownerID, ownerType):
curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
@@ -2936,18 +2824,6 @@
for i in effectIndexList:
buffState.DeleteEffectByIndex(i)
-
-
-##刷新管理器中的Buff
-# @param buffRefreshList Buff刷新列表[[BuffState, CanPileup]]
-# @return 返回值无意义
-# @remarks 按照叠加规则, 刷新指定管理中的Buff
-def __DoRefreshBuff(buffRefreshList):
- for buffState, canPileUp in buffRefreshList:
- __RefreshSkillBuffEffect(buffState, canPileUp)
-
- return
-
##计算行为BUFF对人物行为状态的改变
# @param curPlayer 玩家实例
--
Gitblit v1.8.0