1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.TurnBuff
#
# @todo:»ØºÏÕ½¶·buff
# @author hxp
# @date 2025-08-06
# @version 1.0
#
# ÏêϸÃèÊö: »ØºÏÕ½¶·buff
#
#-------------------------------------------------------------------------------
#"""Version = 2025-08-06 18:30"""
#-------------------------------------------------------------------------------
 
import ChConfig
import GameWorld
import ChPyNetSendPack
import ObjPool
 
def OnAddBuff(turnFight, batObj, curSkill, buffOwner=None):
    skillID = curSkill.GetSkillID()
    enhanceBySkill = curSkill.GetEnhanceBySkill()
    relatedSkillID = enhanceBySkill.GetSkillID() if enhanceBySkill else 0
    curID = batObj.GetID()
    ownerID = buffOwner.GetID() if buffOwner else curID
    GameWorld.DebugLog("OnAddBuff: curID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s" % (curID, skillID, ownerID, relatedSkillID))
    #¼ì²éÊÇ·ñ¼¸ÂÊ´¥·¢
    if not enhanceBySkill:
        rate = curSkill.GetHappenRate()
        if rate and rate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(rate, ChConfig.Def_MaxRateValue):
            GameWorld.DebugLog("    ¸ÅÂʲ»´¥·¢buff!")
            return
        
    skillTypeID = curSkill.GetSkillTypeID()
    # Ïȼòµ¥×öÏÂÄܼÓÉϼ´¿É
    buffMgr = batObj.GetBuffManager()
    buffIDList = buffMgr.FindBuffIDBySkillTypeID(skillTypeID)
    if buffIDList:
        GameWorld.DebugLog("    ÒѾ­´æÔÚ¸Ãbuff: skillTypeID=%s,buffIDList=%s" % (skillTypeID, buffIDList))
        return True
    
    buff = buffMgr.AddBuff(skillID)
    if not buff:
        GameWorld.DebugLog("    Ìí¼Óbuffʧ°Ü! skillID=%s" % skillID)
        return False
    GameWorld.DebugLog("    AddBuffOK. buffID=%s" % buff.GetBuffID())
    buff.SetOwnerID(ownerID)
    buff.SetRemainTime(curSkill.GetLastTime())
    #buff.SetLayer()
    SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
    return True
 
def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0):
    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBuffRefresh)
    clientPack.ObjID = curBatObj.GetID()
    clientPack.BuffID = curBuff.GetBuffID()
    clientPack.SkillID = curBuff.GetSkillID()
    clientPack.RelatedSkillID = relatedSkillID
    clientPack.LastTime = curBuff.GetRemainTime()
    clientPack.Layer = curBuff.GetLayer()
    clientPack.OwnerID = curBuff.GetOwnerID()
    turnFight.addBatPack(clientPack)
    return
 
def SyncBuffDel(turnFight, curBatObj, buffID, relatedSkillID=0):
    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBuffDel)
    clientPack.ObjID = curBatObj.GetID()
    clientPack.BuffID = buffID
    clientPack.RelatedSkillID = relatedSkillID
    turnFight.addBatPack(clientPack)
    return