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
8õÁec@s9ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ed„Zd„Zd„Zd„Zd„Zdd„Zd„Zd    „Zd
„Zd „Zd „Zd „Zd„Zd„Zd„ZdS(iÿÿÿÿNc    CsÐ|jƒtjkrdStjtj|ƒ}|s8dStj|ƒsKdS|jƒ}| sk|j    ƒ rodS|j
ƒ}|tj kr¨t j |jƒtj ƒ}nW|tjkrÕt j |jƒtjƒ}n*t jd|jƒ|f|jƒƒdS|dkrdS|jƒsdStj||d|ƒd}|tjkrNdStj||d|ƒd}|tjkr}dS|rÌt j|jƒ|jƒ|jƒ|jƒƒ}||jƒkrÌdSn|S(Ns)###curNPC = %s ÎÞ·¨²éÕÒÖ÷È˹¥»÷¶ÔÏóÀàÐÍ%si(t GetCurActiont IPY_GameWorldt    laNPCMovet    NPCCommontGetSummonNPCOwnert    gotPlayert PlayerControltIsPlayerInFightt GetActionObjtIsAlivetGetGameObjTypetgotNPCt    GameWorldtGetObjtGetIDtLogtGetNamet GetPlayerIDtNonet GetCanAttackt
BaseAttacktGetTagRelationtChConfigtType_Relation_EnemytGetDisttGetPosXtGetPosYt
GetAtkDist(    tcurNPCtticktnoSpeedt    curPlayertmasterAttackObjt attackObjTypetattackObjDeteltrelationtatkDist((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytPlayerSummonAkObj,sD  &  cCsÂ|jƒtjkrdStj|ƒ}|jƒ}|jƒjƒdkrY|jƒne|tj    krˆ|j
tj ƒ|j dƒn6|tj kr¾|j |ƒt|ƒ|j|ƒndS(Ni(tGetTypeRt    ntMonsterRt
NPCControlRtGetPlayerHurtListt GetHurtCountt ResetNPC_Initt laNPCAttackt SetCurActiont    laNPCNullt SetActionTicktProcessHPRestoret__ReSetBattleStatetDoNormalNPCMove(RRt
npcControlt curNPCAction((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytNormalNPCFree_Moveus   
cCsbtj|ƒ}|jƒs)|jƒdS|jƒjƒdkrQ|j|ƒn |j|ƒdS(Ni(RR(tIsInRefreshAreatMoveBackR)R*R0tProcessBattleHPRestore(RRR3((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytNormalNPCFast_Move”s 
 cCs@|jƒsdS|jƒr<|jtƒ|jƒjƒndS(N(tGetIsNeedProcesstSetIsNeedProcesstFalset GetNPCAngrytClear(R((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pyR1ªs    cCsƒ|jƒ}|dkrXtjd|dƒ}|j|ƒ}|jƒ}|jƒ}n!tj|ƒ}|jƒ\}}||fS(Nii(    tGetPatrolPosCounttrandomtrandinttGetPatrolPosAtRRRR(tGetRandPosInRefreshArea(Rt patrolCountt patrolIndext    patrolPostposXtposYR3((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pyt GetPatrolPosÎs   cCs.|jƒ}xt|jƒƒD]ý}|j|ƒ}|dkrFqn|jƒ}tj|tj    ƒ}|dkst
j |ƒdkrŽqn|r²|j ƒ|j ƒkr²qn|j ƒtjkrÍqn|jƒ}|dkrëqn|j ƒ|j ƒkr    qntj|tjƒqW|jƒdS(Ni(R)trangeR*t    GetHurtAtRt
GetValueIDR R RRtGameObjtGetHPRtGetPlayerActiont paPreparingRRtChangePlayerActiontpaNullR>(Rt    srcPlayertcurNPC_HurtListtit    hurtValuet    hurtObjIDRthurtObjActionObj((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytClearPlayerPreparingâs(   !  c    CsÙg}tj}x›td|jƒƒD]„}|j|ƒ}|jƒ}|sRq%n||krdq%nxBt|jƒƒD].}|j|ƒ}|s˜qwn|j|ƒqwWq%W|s·dSt    j
|ƒ}t j ƒj |ƒS(Ni(RtDef_Skill_Effect_RandSkilltxrangetGetEffectCountt    GetEffectt GetEffectIDtGetEffectValueCounttGetEffectValuetappendR@tchoiceR t GetGameDatatGetSkillBySkillID(    tcurSkillt skillIDListteffectIDRUt    curEffectt curEffectIDtjtskillIDt
curSkillID((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytGetPassiveRandomSkills$      cCs| s|jƒdkrtStj|ƒr0tS|jtjƒ}|r[|jƒr{tSn ||jƒ|j    ƒkr{tS|j
ƒ}|rÎt j
|ƒ|kr¦tS|rÎ|jtj ƒdkrËtSqÎnt j|ƒ}|tjkr|jƒtjkrtSn|jƒ}|tjkr=tj|tjƒ r=tSt|ƒ}    |    r˜|jƒ}
|jƒj|
ƒ} | rtj| d||ƒn|    }nt j|ƒ} t j|ƒ} | tjksÔ| tjkrçt j|||ƒS| tjkrXt j!|ƒstj"dƒtSt j#|ƒ}|dkrOtj"d|j%ƒj&ƒtS|}n˜| tj'krðt(j)|ƒs‡tj"dƒtSt(j*tj|ƒ}|dkrÀt(j*tj+|ƒ}n|dkrçtj"d|j,ƒƒdS|}n||j-ƒkrtSt j.||||ƒS(Niis!¸ÃNPC·Ç³èÎÎÞ·¨»ñµÃÖ÷ÈËÊͷż¼ÄÜs$³èÎ%s£©¶ÔÖ÷ÈËÊͷż¼ÄÜ£¬ÕÒ²»µ½Ö÷ÈËs#¸ÃNPC·ÇÕÙ»½ÊÞ£¬ÎÞ·¨»ñµÃÖ÷ÈËÊͷż¼ÄÜs&ÕÙ»½ÊÞ£¨%s£©¶ÔÖ÷ÈËÊͷż¼ÄÜ£¬ÕÒ²»µ½Ö÷ÈË(/tGetSkillTypeIDR<t SkillCommontisPassiveSkillt GetDictByKeyRtDef_Obj_Dict_TurnFightTimelinet GetRemainTimetGetLastUseTicktGetCoolDownTimetGetXPRMtDef_Obj_Dict_TurnXPUseStatet
SkillShelltGetSkillAffectTagtDef_UseSkillTag_CanAttackPlayerR
RRt GetHappenRatetDef_MaxRateValueR t    CanHappenRmtGetSkillManagertFindSkillBySkillTypeIDtSetSkillRemainTimetGetSkillFireAimtDef_ST_CanNPCUseSkilltDef_UseSkillAim_Nonet NPCUseSkilltDef_UseSkillTag_PetMastert
PetControltIsPetNPCtErrLogtGetPetNPCOwnerRt
GetRolePettPetIDtDef_UseSkillTag_SummonMasterRt IsSummonNPCRR tGetNPCIDRtNPCUseSkillTag(RtcurTagtuseSkillttagDistRtturnFightTimelinetcurSkillNeedXPtcurSkillUseTagtratet changeSkillt skillTypeIDt curNPCSkilltskillTagtskillAimtpetOwnertcurSummonOwner((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pyt DoNPCUseSkill*st  
 %                   c
Cs|jƒtjkrtStj|ƒ}|jƒ}xätd|jƒƒD]Í}|j    |ƒ}|dksJ|j ƒdkrƒqJnt j |ƒ}|dkr¤qJn|jƒr¶qJn|j ƒ}|jƒ}|tjkrãqJntj||ƒ}    |    sqJn|    jƒ|krJtSqJWtS(Ni(t GetFuncTypeRtDef_SkillFuncType_RealmSuppresstTrueRt
GetRealmLVR=RJt GetAngryCounttGetAngryValueTagRtGetObjIDRMt GetAngryValuet GetIsDisablet
GetObjTypeRRR R tGetOfficialRankR<(
RRet
npcRealmLVt angryManagerRUtcurAngryt curAngryValuetangryIDt angryObjTypeR((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytGetCanUseRealmSuppressSkll¥s.     c    Cs||jƒ|jƒkrDtj|ƒp:|jtjƒsDtSn|jƒ}t    j
dƒ}i}||kr~||}nd}t    j
dƒ}||kr°||d}ni}    t    j
dƒ}
||
krÞ|
|}    n|j ƒ} |j ƒ} g} x®t d| jƒƒD]—}| j|ƒ}| s@|jƒdkrDPn|jƒtjkr_qn|r}||jƒkr}qn|jƒ}||    kr·|    |}tj|ƒr·qq·ntj|ƒrÌqntj|ƒtjkr8tj|ƒ}|tjkr8tjj|ƒ}|s qn| |kr5qq5q8n|ikrbt||||ƒsbqqbnt ||ƒswqn|jtj!|jƒƒ}| j"|||gƒqW| s·tS| j#ƒx?| D]7\}}}|jƒ}t$|||||ƒrÈ|SqÈWtS(NtNPCLogic_AI186_TriggeritNPCLogic_AI_UseSkillOnDiet!NPCLogic_AI_UseSkillAfterOtherDie(%t GetAttackTicktGetAtkIntervalR†tIsPetRqRRrR<RŽt ReadChConfigtGetEvalChConfigR~R
RJt GetSkillCounttGetSkillByIndexRnt GetSkillTypetDef_SkillType_Revivet
GetSkillIDR tFindNPCByNPCIDRoRpRxRtDef_UseSkillAim_ObjRytDef_UseSkillTag_AppointNPCtDef_Dict_UseSkillTag_ObjTypetgettCheckSkillTriggerR°tDef_NPC_Dict_SkillUseCntRatsortRž(RRR’RtnpcIDt npcAITriggert triggerDicttuseSkillIDOnDietnpcUseSkillOnDieDicttuseSkillAfterOtherDieDicttuseSkillAfterOtherDieNPCDictt skillManagert
tagObjTypet useSkillListtindexR‘R˜tcheckIsDeadNPCIDR•t hurtTypeListtuseCntRk((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytDoAutoUseSkillÐsr!          
           
 cCs˜|j|ƒ}|dkr”ttj|ƒttj|ƒƒdƒ}|d}|dkrm||krmtStj    ||d|d|ƒs”tSnt
S(Nidiii( RÂRtintRMRNtfloattGetMaxHPR<Rt&CheckCanAttackTagLimitCountInSight_NPCR¡(RRÈt npcSkillindexRt    skillInfot    hpPercenttcheckHP((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pyRÃ0s ,
 c Cs|jƒ}tjdƒ}||kr+dS||\}}|jƒ}|j|ƒ}|s`dSd}d}|rŽtj|ƒ}|sÇdSn9|rÇtj|j    ƒ|j
ƒ|j    ƒ|j
ƒƒ}ntj ƒj ƒ}    t j|dƒt|||||    ƒ}
t j|dƒdS(NR²ii(RŽR·R¸R~tFindSkillBySkillIDRR R¾RRRt GetGameWorldtGetTickRMtSetHPRž( RRÆRÊRkttagNPCIDRÍR‘R’RRtisOK((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytDoNPCUseSkillOnDieBs,   3cCsä|jƒtjkrdS|jtjƒ}|jƒj|ƒ}|sutj    d|ƒ|j
tj ƒt |ƒdS|jtj ƒ}td||jƒƒ}||kr°dS|j
tjƒ|jƒtjkrîtj||||ƒnè|jtjdƒ}|jtjdƒ}||dkrQ|jtjƒ}|jtjƒ}ntj|d||||ƒ|jtjƒdkrÖ|j|jtjƒ|jtjƒƒ|jtjdƒ|jtjdƒnt |ƒdS(sUÔ¤¾¯¼¼ÄÜÕ½¶·´¦Àí
    @return: 0-·ÇÔ¤¾¯×´Ì¬£»1-Ô¤¾¯´¦Àí½áÊø£¬³É¹¦Ö´ÐУ»2-Ô¤¾¯ÖУ»
    is5    Ô¤¾¯×´Ì¬ÏÂÔ¤¾¯¼¼Äܲ»´æÔÚ, ÖØÖÃ״̬!warnSkillID=%siiN(RRtlaNPCSkillWarningRqRtDef_NPC_Dict_SkillWarnSkillIDR~RÝR tDebugLogR-R.t__ClearNPCSkillWarntDef_NPC_Dict_SkillWarnTimetmaxt GetActionTickR,R»tDef_SkillType_SummonRxtDoLogic_UseSkilltDef_NPC_Dict_SkillWarnPosXtDef_NPC_Dict_SkillWarnPosYtDef_NPC_Dict_AtkMovePosXtDef_NPC_Dict_AtkMovePosYRt    ChangePostSetDict(RRt warnSkillIDR‘twarnTimetpassTickRGRH((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytDoNPCSkillWarningProcessfs:
 
cCs”|jtjƒ}|jtjdƒ|jtjdƒ|jtjdƒxBt|ƒD]4}|jtj|dƒ|jtj|dƒqXWdS(Ni(    RqRtDef_NPC_Dict_SkillWarnPosCntRòRåRèR[RíRî(RtposCntRU((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pyRç’sc    CsP|s
dS|jtjƒ}||\}}|jƒ|jƒ}}tj||||ƒ}xk|dkrÊ|t|ƒdkrÊ|d7}|jtj|ƒ||\}}tj||||ƒ}q`W|dkr#|j    ƒt
j krðdSt j |tjt
jƒsdS|j||ƒdS|t|ƒdkrLtj||ƒndS(Niii(RqRtDef_NPC_Dict_MovePointIndexRRR RtlenRòRRRtOperControlManagertIsObjCanDoActiontDef_Obj_ActState_ServerActtoalMovetMovetFBLogictOnTDNPCReachTheGoal(    Rt movePointListRt
pointIndextdestPosXtdestPosYtcurPosXtcurPosYtcurDis((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pytNPCMoveByPointLists.%
      (RRR RRR@RRûRoRxR†R·RMRR¡R%R5R9R1RIRRYRmRžR°RÔRÃRãRöRçR    (((skE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\NPC\NPCAI\AICommon.pyt<module>s8             
I            $     $    $    {    +    `        $    ,