ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -41,13 +41,12 @@
import GameMap
import collections
import PassiveBuffEffMng
import EffGetSet
import ChEquip
import SkillShell
import FBCommon
import IpyGameDataPY
import PyGameData
import EventShell
#import EquipZhuXian
#---------------------------------------------------------------------
GameWorld.ImportAll("Script\\Skill\\" , "GameSkills")
GameWorld.ImportAll("Script\\Skill\\" , "GameBuffs")
@@ -55,6 +54,7 @@
# 记录客户端伤害 {(objID, objType):[HurtHP, AttackType]}
g_ClientHurtDict = collections.OrderedDict()
g_UseSkillPlayerID = 0  # 全服攻击为单线程 记录的是当前使用技能的玩家 用于判断g_ClientHurtDict的归属
#---------------------------------------------------------------------
##C++调用函数, 重新读取所有技能
@@ -92,6 +92,10 @@
def GetSkillFireAim(curSkill):
    return curSkill.GetTag()%10
# 当前释放主动技能的玩家
def GetUseSkillPlayerID():
    global g_UseSkillPlayerID
    return g_UseSkillPlayerID
# 客户端伤血列表,修改了遍历对象和计算血量
def GetClientHurtDict():
@@ -100,7 +104,9 @@
def ClearClientHurtDict(curPlayer):
    global g_ClientHurtDict
    global g_UseSkillPlayerID
    g_ClientHurtDict = collections.OrderedDict()
    g_UseSkillPlayerID = 0
    
    
def GetClientHurtByObj(objID, objType):
@@ -122,6 +128,7 @@
# 技能开始初始化客户端伤血列表
def InitClientHurtDict(curPlayer, curSkill, hurtList):
    global g_ClientHurtDict
    global g_UseSkillPlayerID
    ClearClientHurtDict(curPlayer)
    
    #技能攻击最大数量
@@ -157,7 +164,8 @@
            return False
        
        g_ClientHurtDict[(hurobj.ObjID, hurobj.ObjType)] = [hurobj.HurtHP, hurobj.AttackType]
    g_UseSkillPlayerID = curPlayer.GetID()
    return True
#---------------------------------------------------------------------    
# 非客户端玩家释放的技能
@@ -169,11 +177,16 @@
        # 玩家普通也是技能,正常是不会走到这边
        return False
    
    if GetUseSkillPlayerID() != attacker.GetID():
        # 非释放者
        return False
    useSkillData = attacker.GetUseSkill()
    if useSkillData and curSkill.GetSkillTypeID() != useSkillData.GetSkillTypeID():
        # 默认群攻附加触发buff的对象与攻击对象一致
        if not SkillCommon.IsBuff(curSkill):
            return False
    
    if not GetClientHurtDict():
        return False
@@ -1858,11 +1871,8 @@
    
    #升级技能CD直接冷却
    curSkill.SetRemainTime(0)
    learnSkillNotifyDict = IpyGameDataPY.GetFuncEvalCfg("SPSkillType", 3, {})
    if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_HorseSkill:
        PlayerControl.WorldNotify(0, 'GetMountSkill', [curPlayer.GetName(), curSkillID])
    elif skillTypeID in learnSkillNotifyDict:
        PlayerControl.WorldNotify(0, learnSkillNotifyDict[skillTypeID], [curPlayer.GetName(), curSkillID])
    else:
        #通知技能已升级成功 GeRen_admin_31379
        PlayerControl.NotifyCode(curPlayer, "GeRen_admin_31379", [curSkillID, curSkill.GetSkillLV()])
@@ -1903,10 +1913,6 @@
    if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
        if not PlayerGreatMaster.GetGreatMasterFreeSkillPoint(curPlayer):
            return False
    #诛仙技能学习判断
    #if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_ZhuXian:
    #    if not EquipZhuXian.CheckLearnZhuXianSkill(curPlayer, curSkillTypeID):
    #        return False
        
    #经验检测
    skillLvUpNeedExp = upSkill.GetLVUpCostExp()
@@ -2110,9 +2116,9 @@
        #可升级则激活升一级
        EventShell.EventRespons_ElementSkill(curPlayer, mainSkillID, skillElementType, updSelectSkillLV)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % selectSkillID, updSelectSkillLV)
#        if not curElementSkillID or curElementSkillID == selectSkillID:
#            #正在使用的专精技能,则立即生效
#            isChangeSkill = True
        if curElementSkillID == selectSkillID:
            #正在使用的专精技能,则立即生效
            isChangeSkill = True
    else: # 使用
        if not activeSkillLV:
            #未激活不能使用
@@ -2128,6 +2134,7 @@
            return
        
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID)
        ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
        if curElementSkillID and curElementSkillID != selectSkillID:
            #原技能删除
            skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
@@ -2186,6 +2193,7 @@
            ipyData = IpyGameDataPY.GetIpyGameData('SkillElement', skillTypeID)
            mainSkillID = ipyData.GetMainSkillID()
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, 0)
            ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
            isNotify = True
    else:
        for _ in xrange(updSkillLV-curSkillLV):
@@ -3262,7 +3270,8 @@
    #--- 1. 先取得触发技能---
    
    #先检查数据库有没该类技能,如果最高等级不一样会找不到
    exSkill = GameWorld.GetGameData().FindSkillByType(skillEnhanceID, skillLV)
    #exSkill = GameWorld.GetGameData().FindSkillByType(skillEnhanceID, skillLV)
    exSkill = GameWorld.GetGameData().GetSkillBySkillID(skillEnhanceID)
    #异常
    if not exSkill:
        GameWorld.ErrLog("对象 = %s, 找不到附加技能ID = %s, skillLv = %s"%(attacker.GetID() , skillEnhanceID , useSkill.GetSkillLV()))
@@ -3458,7 +3467,7 @@
    
    #这个技能是Buff
    if SkillCommon.IsBuff(curSkill):
        if ChConfig.Def_SkillType_LstPlsBuffAtk == curSkill.GetSkillType():
        if curSkill.GetSkillType() in [ChConfig.Def_SkillType_LstPlsBuffAtk, ChConfig.Def_SkillType_PassiveLstPlsBuffAtk]:
            defender = attacker
        return __DoLogic_AddBuff(attacker, defender, curSkill, isEnhanceSkill, tick, tagRoundPosX, tagRoundPosY)
    
@@ -3742,11 +3751,11 @@
        
        # 当技能类型为被动技能并且tag字段为0,则此技能为媒介用于触发技能 SkillEnhance1 SkillEnhance2
        skill1 = GameWorld.GetGameData().GetSkillBySkillID(curSkill.GetSkillEnhance1())
        if skill1:
        if skill1 and GameWorld.CanHappen(skill1.GetHappenRate(), ChConfig.Def_MaxRateValue):
            result = True if UsePassiveTriggerSkill(attacker, skill1, target, tick, True) else result
            
        skill2 = GameWorld.GetGameData().GetSkillBySkillID(curSkill.GetSkillEnhance2())
        if skill2:
        if skill2 and GameWorld.CanHappen(skill2.GetHappenRate(), ChConfig.Def_MaxRateValue):
            result = True if UsePassiveTriggerSkill(attacker, skill2, target, tick, True) else result
        
        SkillCommon.SetSkillRemainTime(curSkill, PlayerControl.GetReduceSkillCDPer(attacker), tick, attacker)
@@ -3757,7 +3766,7 @@
    GameWorld.DebugLog("释放被动触发技能 : %s- %s"%(skillAim, curSkill.GetSkillID()))
    if skillAim == ChConfig.Def_UseSkillAim_None:
        if curSkill.GetSkillType() in ChConfig.Def_CanAttackSkill_List:
        if curSkill.GetSkillType() in ChConfig.Def_CanAttackSkill_List and affectTag != ChConfig.Def_UseSkillTag_Self:
            if target and target.GetGameObjType() == IPY_GameWorld.gotNPC and target.GetGameNPCObjType() == IPY_GameWorld.gnotSummon:
                owner = NPCCommon.GetNpcObjOwnerDetail(target)
                if owner and owner.GetID() == attacker.GetID():