cehua_ZWJ
2019-01-05 d241a47011ae0c14d182ff565e273abfeb37ec85
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
²+ \c@sÍddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl!Z!d„Z"d„Z#d„Z$d„Z%d„Z&d„Z'd„Z(d    „Z)d
„Z*d „Z+d „Z,d „Z-d„Z.d„Z/e0d„Z1d„Z2d„Z3d„Z4d„Z5d„Z6d„Z7d„Z8d„Z9d„Z:d„Z;d„Z<d„Z=d„Z>d„Z?d„Z@d „ZAd!„ZBd"„ZCd#„ZDeEd$„ZFeEd%„ZGeEd&„ZHd'„ZId(„ZJd)„ZKd*„ZLd+„ZMd,„ZNd-„ZOd.„ZPd/„ZQd0„ZRd1„ZSd2fd3„ƒYZTd4„ZUd5„ZVd6„ZWd7„ZXd8„ZYd9„ZZd:„Z[d;„Z\d<„Z]d=„Z^d>„Z_d?„Z`d@„ZaebdA„ZcdB„ZddC„ZedD„ZfdE„ZgdF„ZhdG„ZidH„ZjdI„ZkdJ„ZldK„ZmdL„ZndM„ZodN„ZpdO„ZqdP„ZrdQ„ZsdR„ZtdS„ZudT„ZvdU„ZwdV„ZxdW„ZydX„ZzdY„Z{dZ„Z|dS([iÿÿÿÿNcCsx|jƒ}t|dƒsF|j||jƒ|||jƒdƒn.|j||jƒ|||jƒ|jƒƒdS(NtGetHPExi(tGetGameObjTypethasattrtAddHurttGetIDtGetHPR(ttagObjthurtListthurtTypet    hurtValuet
tagObjType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRGs +cCsa|jƒ}t|dƒs2|j|||ƒdStj|jƒ|ƒ}|j|||ƒdS(Nt
GetMaxHPEx(tGetPlayerHurtListRt AddHurtValuet    NPCCommontFixValueByValueExR (tdefendertattackIDtattackHurtTypetvaluetdefendHurtList((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR Rs  c    Cs¦|s
dS|jƒtjkr#dStj}tjƒjƒ}||jƒ|j    ƒf}||krri||<n||}||f}|j
|dƒ|||<dS(Ni( Rt IPY_GameWorldtgotNPCt
PyGameDatatg_teamPlayerHurtValuet    GameWorldt GetGameWorldt    GetLineIDRtGetNPCIDtget(    RtteamIDtplayerIDRtteamPlayerHurtDicttlineIDtkeythurtDictthurtKey((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytAddTeamPlayerHurtValue\s      
 cCs¡tj}|jƒ}|sdS|jƒtjkr8dStjƒjƒ}||j    ƒ|j
ƒf}||krudS||}||j ƒf}|j |dƒS(Ni( RRt    GetTeamIDRRRRRRRRt GetPlayerIDR(t    curPlayerRR RR!R"R#R$((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetTeamPlayerHurtValuens      
cCs$tj}|jƒ}|sdS|jƒtjkr8dStjƒjƒ}||j    ƒ|j
ƒf}||krudS|j ƒ}d}d}||}    xW|    j ƒD]I\}}
|\} } | |krÎq¤n||
7}| |kr¤|
}q¤q¤W|dks    |dkrd} n|d|} | S(Nigð?( RRR&RRRRRRRRR'titems(R(RR RR!R"RtplayerHurtValuet teamHurtValueR#R    t
hurtTeamIDt hurtPlayerIDthurtPer((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetTeamPlayerHurtPers2       
 
      cCsotj}|jƒtjkr"dStjƒjƒ}||jƒ|j    ƒf}||krk|j
|ƒndS(N( RRRRRRRRRRtpop(RR R!R"((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytClearTeamPlayerHurtValue¢s     cCs£|dks|dkrtStjtjg}tj|jƒ|jƒƒ|ksvtj|jƒ|jƒƒ|krztSt    ||ƒs›|j
ƒdkrŸtSt S(Ni( tNonetTrueRt    gatFreePKt gatFamilyPKtGameMaptGetAreaTypeByMapPostGetPosXtGetPosYtIsMaliciousAttackPlayert
GetPKValuetFalse(R(t    tagPlayertlegalityAreaList((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetIsPKLegality´s$$!cCsCt||ƒrdStj||ƒ|j|jƒ|jƒƒdS(N(R@t PlayerControltAddPlayerPKValuetGameServer_AddEnemyRtGetName(R(t curTagPlayerttick((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt
AddPKValueÒs
cCs÷|dks|dkrdStj|jƒ|jƒƒ}tj|jƒ|jƒƒ}|tjksv|tjkrzdS|tjks˜|tjkrœdS|jƒdkr²dS|j    ƒ}|tj
krÑdSt j |ƒ}|tj
kródSdS(Ni( R3R7R8R9R:RR5R6RtGetPlayerNameColort    pncNormalt PlayerTrucktGetTruckNameColor(R(tcurTruckRFtcurPlayerAreaTypet truckAreaTypetcurPlayerNameColortcurTruckNameColor((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytOnPlayerKillTruckçs" cCsÊtj||ƒtj||ƒtj||ƒtj|d|jƒgƒt|||ƒt    j
|||ƒrudSt |||ƒt ||ƒt jƒjƒtjkrÆtj|tjdƒndS(Nt PK_lhs_318691i(t PlayerStatetSetPKStateTickt
EventShelltEventResponse_OnKillEnemytEventResponse_OnEnemyKillRAt
NotifyCodeRDt__GiveKill_Player_ValuePrizetFBLogictDoFBOnKill_PlayerRGt__DoKillPlayerNotifyRtGetMapt GetMapFBTypeRtfbtNulltNomalDictSetPropertytChConfigtDef_PDict_IsAddReviveTired(R(RRF((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytOnPlayerKillPlayers c    Cs |jƒ}|dkrdS|jƒ}|jƒ}|jƒ}|jƒ}|jƒ}|jƒ}tjƒjƒt    j
krƒdStj ƒj ƒ}    |jƒdkré|j ƒ}
|jƒ} d} ||||
| ||||    g    } n!d} |||||||    g} tj|| | ƒ|dkr-dS|j ƒ}|jtj|jƒƒd}|jtj|jƒ|ƒ|jtj|jƒdƒtjdƒ}t|jƒƒ}d}x$|D]}||kr×Pn|}qÁW||kr||}tjd||||||gƒndS(Nit PK_pan_671654t PK_pan_318691itFamilyKilledNotify(t GetFamilyIDtGetFamilyMemberLVRDtGetMapIDR9R:RR]R^RR_RRt GetFamilyNameRAt FamilyNotifyt GetDictByKeyRatDef_PlayerKey_KillPlayerCntR'tSetDictt IpyGameDataPYtGetFuncEvalCfgtsortedtkeyst WorldNotify(tattackerRt defFamilyIDtdefFamilyMemberLvtdefNametatkNametdefMapIDtdefPosXtdefPosYR!t atkFamilyNametatkFamilyMemberLvt
notifyCodet    paramListt defFamilyNametkillCnttkillPlayerNotifyDicttkillKeyst    notifyKeyt
killCntKeyt
notifyMark((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR\7sJ          $     
 
%cCs&tj|ƒr"tj||ƒndS(N(Rat
IsGameBossRStSetBossStateTick(tcurNPCRRF((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytOnNPCHitPlayerpscCs‚|jƒ|jƒkrdSt||ƒs>t|||ƒnt|||ƒt|||ƒtj||ƒtj||ƒdS(N(RR@tAddMaliciousAttackPlayertUpdMaliciousAttackTicktAddPlayerHitPlayerHurtRSRT(RtRRF((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytOnPlayerHitPlayer{scCsE|jƒ}|jƒtjkr%dSt||jƒtjdƒdS(Ni(R t GetHurtCountRatDef_PlayerHurtListCountR R'tDef_NPCHurtTypePlayer(RtRRFtdefPlayerHurtList((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRšs
 cCsdS(N((RERFt
isSuperHit((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytDefenderSpringBuff«scCsK|s tjSt|ƒ\}}t|ƒ\}}|rD|rDtjStjS(N(RatDef_BattleRelationType_CommtGetAttackPlayertDef_BattleRelationType_PVPtDef_BattleRelationType_PVE(RtRt attackPlayert    attackNPCtdefenderPlayert defenderNPC((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetBattleRelationType°s cCs0|tjtjgkrtS||kr,tStS(N(RaR•t!Def_BattleRelationType_CommNoBossR4R=(tskillBattleTypetbattleRelationType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckBattleRelationType¾s
 cCstjS(N(RtghtPhy(tattacktattackUseSkill((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt GetBattleTypeÏscCsL|jdƒjdƒ}|jdƒjdƒ}t||tj|dƒS(Nii(t    GetEffecttGetEffectValuetmaxRatDef_MaxRateValue(Rtskilltperteff((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetEnhanceValueäscCs:|jdƒ}|jdƒ}t||tj|dƒS(Nii(R§R¨RaR©(RR¬R«((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetEnhanceValue_EffïscCsk|jdƒ}|jdƒ}|jdƒ}tj||ƒ}|dkrOdSt||tj|dƒS(Niii(R§t    EffGetSettGetValueByEffIndexR3R¨RaR©(R(t    curEffecttindextskillPerteffecttmaxValue((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetEnhanceIndexValue_Effús cCs|j|ƒ|jtƒdS(N(tSetLastBattleTicktSetBattleStateR4(RRF((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytSetPlayerBattleState s  c        Cs-|jƒtjkr)t||ƒ r)dS|jƒtjkrW|jƒtjkrWdSx‰td|jƒƒD]r}|j    |ƒ}t
|ƒs”qmn|j ƒ rºt ||dƒ rºqmntj|ƒ}|j||ttƒqmW|jƒ}|jƒ}|dkr)tj|ƒ}|j||ƒndS(Ni(RRt    gotPlayertCheckPlayerAttackMode_PlayerRtGetTypetntFairytrangetGetSummonCounttGetSummonNPCAttGetNPC_Has_Attackt GetOrgSpeedtCheckNPCAttackDistR3Rt
NPCControltAddObjToAngryListR4R=t    GetPetMgrt GetFightPet(    tcurObjR(t
angryValuetit curTagSummont summonControltpetMgrt fightPetObjt
petControl((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytSummonAddAngryByOwners&%     cCs|jƒp|jƒS(N(t    GetMinAtkt    GetMaxAtk(R‰((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÁ@scCsd|tjkrdStj}||jƒkrLtjd||jƒƒdStj|||ƒdS(Ns7Íæ¼Ò¹¥»÷ʧ°ÜϵͳÌáʾÕÒ²»µ½¶ÔÓ¦µÄÌáʾmark,´«ÈëµÄÔ­Òò£º%s(    RatDef_PASysMessage_NonetDef_MessageDicRrRtErrLogR'RARX(R(tmessaget
messageDic((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytPlayerAttackFailSysMessanageKs    cCstS(N(R4(R(RE((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR»cscCs&|jƒtjddƒkr"tStS(NtPKConfigi(tGetLVRot
GetFuncCfgR4R=(R(((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt GetIsNewGuyqscCs5tjƒjƒ}|tjkr%tStj||ƒS(N(RR]R^RR_R=RZtCheckPlayersRelationInFB_IsNone(R(REtmapType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÝscCstj||ƒS(N(RZt!CheckPlayersRelationInFB_IsFriend(R(RE((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRߌscCstj||ƒS(N(RZtDoCanAttackTeamer(R(RE((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytPlayerCanAttackTeamerInFB›scCs«|dkrtjdƒdS||kr2|}n|jƒ}|jƒ}|tjkrhtj|||ƒ|jƒtj    kr—t
j |||ƒnt j |ƒdkrÈ|jtj|jƒƒn|jƒ}|jƒtj    krþ|jƒtjks
|dkr*t||jƒtj|ƒtSt||jƒtj|ƒt||jƒ|jƒ|ƒn?|tj    kr–t||jƒtj|ƒntjd|ƒtS(NsNPCAddObjInHurtList NoFindObjis'NPCAddObjInHurtList UnKnow ObjType = %s(R3RRÕR RRRºt FamilyRobBosstOnPlayerHurtFamilyOwnerBossRRZtDoFB_Player_HurtNPCtGameObjRRnRatDef_PlayerKey_LastHurtR'tGetTeamtGetGameNPCObjTypet    gnotTruckR R‘R4R&tDef_NPCHurtTypeTeamR%RtDef_NPCHurtTypeNPC(RÈt    curTagObjtcurTaglNPCHPBeforethurtHPtdefNPCHurtListt
curObjTypetcurTeam((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytNPCAddObjInHurtList­s0          !"cCstj|||ƒdS(N(RZt OnPVPDamage(R(t damageValueR>t    damageMsg((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRóØscCspt||ƒstS|jƒs#tS|jƒ}|jƒ}|tjkr‚|tjkr‚t||ƒsltSt||ƒsCtSnÁ|tjkrÏ|tjkrÏt||tƒs¶tSt||tƒsCtSnt|tjkrC|tjkrCt    j
|ƒs|j ƒtj krCt||tƒs'tSt||tƒs@tSqCnt ||ƒsVtStj||ƒsltStS(N(tCheckIsAvailableTagR=t GetCanAttackRRRºRtCheckKillNPCByCnttCheckCanAttackFamilyOwnerNPCt
PetControltIsPetRèt
gnotSummontCheckCanAtkByAreaRZtCheckCanAttackTagObjInFBR4(RtRt
atkObjTypet
defObjType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckCanAttackTagès6   $
c    CsG|jƒtjkrtS|jƒ}tjdƒ}||krDtS||\}}t|ƒ\}}|sptS|dkr‚|nd}||jƒko¥|knr®tS|dkrC|dkrî|dkrît
j |d||gƒqC|dkrt
j |d|dgƒqC|dkrCt
j |d|dgƒqCnt S(    s Åжϵ±Ç°µÈ¼¶¿É·ñ¹¥»÷¸ÃNPC tAttackNPCLVLimitiiŸ†tGeRen_liubo_689354tGeRen_liubo_198823itGeRen_liubo_437659N( RRRR4Rt ReadChConfigtGetEvalChConfigR–RÚR3RARXR=(    RtRtnpcIDtattackLVLimitDicttminLVtmaxLVt    atkPlayert
npcObjTypet
judgeMaxLV((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckCanAttackNPCByLV)s*  "    cCs´|jƒtjkrtStj|ƒtjkr5tSt|ƒ\}}|sQtSd}t    |ƒrld}n|j
ƒsd}n|r°|dkr¬|r¬t j ||ƒntStS(s ÅжϿɷñ¹¥»÷ÏÉÃ˹éÊôµÄNPC ttFairyGrabBossNotAtktFairyGrabBossNoFairyN(RRRR4RtGetDropOwnerTypeRatDropOwnerType_FamilyR–RÜRgR3RARXR=(RtRtisNotifyR R tatkLimitNotifyMark((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRùNs"          cCsÏ|jƒtjkrtStj|ƒs,tS|jƒ}tjdƒ}t    j
||ƒ}|dkritSt |ƒ\}}|s…tStjddiƒ}||krß||\}    }
t j||    ƒsßtj||
ƒdSn|jtj|dƒ} |jtj|dƒ} tjddiƒj|dƒ} | rMtj|| ƒ}n!tjddiƒj|dƒ}| || krË|dkrÇ|rÇtjddiƒj|dƒ}tj||ƒqÇntStS(    s Åжϵ±ÈÕ»÷ɱ¸ÃNPC´ÎÊýÊÇ·ñÒÑÂú tKillBossCntLimitiNiiiiR(RRRR4RaR‡RRoRpRtGetDictValueByKeyR3R–t GameFuncCommt GetFuncCanUseRARXtNomalDictGetPropertytDef_PDict_Boss_KillCntt Def_PDict_Boss_KillCntItemAddCntRt    PlayerViptGetPrivilegeValueR=(RtRRRtkillBossCntLimitDictR²R R t funcInfoDicttfuncIDt funcSysMarkt
hasKillCnttitemAddKillCnttkillLimitPrivilegetlimitCnttsysMark((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRøjs>   !! !c    CsÊ|jƒtjkrtStj|ƒs,tStjdƒ\}}|jƒ}||kr]tSt    |ƒ\}}|sytS|j
tj dƒ}||krÆ|dkrÂ|rÂt j|dƒqÂntStS(s Åжϵ±ÈÕ¹¥»÷¸ÃNPC´ÎÊýÊÇ·ñÒÑÂú tAttackBossCntLimititGeRen_liubo_759061N(RRRR4RaR‡RRRR–RtDef_PDict_WorldBoss_HurtCntR3RARXR=(    RtRRtlimitBossIDListR'RR R t hasAttackCnt((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckAttackNPCByCnt›s$    cCsß|jƒ}|tjkr%|dfS|jƒ}|tjkr¤tj|ƒ}|rÛ|jƒ}|r¡tj|ƒ}|rž|jƒtjkrž||fSq¡qÛn7|tj    krÛt
j |ƒ}|dkrÛ||fSndS(sè »ñÈ¡¹¥»÷ÕßËùÊôÍæ¼ÒʵÀý
    @return:
             µ±Êµ¼Ê¹¥»÷ÕßÎªÍæ¼Òʱ£¬·µ»Ø [curPlayer, None] 
             µ±Êµ¼Ê¹¥»÷ÕßÊÇÆÕͨNPCʱ£¬·µ»Ø [None, None]
             µ±Êµ¼Ê¹¥»÷ÕßÊdzèÎï»òÕÙ»½ÊÞʱ£¬·µ»Ø [Ö÷ÈËcurPlayer, npcObjType]
    N(NN( RRRºR3RèRüRt GetObjDetailtGetOwnertgnotPetRút GetPetOwner(tatkObjRÿR t curNPCDetailt curNPCOwnert summonOwnert ownerPlayer((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR–¼s" 
    cCsbtj|jƒ|jƒƒ}tj|jƒ|jƒƒ}|tjksZ|tjkr^tStS(N(R7R8R9R:RtgatSafeR=R4(RÈRtareaTypet tagAreaType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRýàs
cCst|dks|jƒdkr"tStj|ƒdksLtj|ƒdkrPtS|jƒs`tS|jƒsptStS(Ni(R3RR=RåRt
GetVisibleR4(RtR((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRöôs*  cCsO|dks|jƒdkr"tStj|ƒdkr;tS|jƒsKtStS(Ni(R3RR=RåRR;R4(RÈ((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckObjCanDoLogic    s cCsdt||ƒsG|j|jƒ|jƒ|jƒ|jƒtjƒtS|j    ƒt
j kr`tSt S(N( RtNotify_AttackFailRRR9R:RtafrNullR=tGetPlayerActionRatDef_PlayerCanAttackStateR4(R(R((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckPlayerCanAttackTags                
  cCsÏ|jƒ}|jƒ}ttj|||jƒ|jƒƒtj|jƒ|jƒ|jƒ|jƒƒƒ}|sytS|jƒ}|dkr•tS|t    j
|||t j ƒ7}||t j krËtStS(Ni(tGetAttackTargetPosXtGetAttackTargetPosYtminRtGetDistR9R:R4t
GetAtkDisttPassiveBuffEffMngt!GetPassiveSkillValueByTriggerTypeRatTriggerType_SkillDisttDef_PlayerAttackDistZoomR=(R(tcurTagtuseSkillt atkStartPosXt atkStartPosYtdistt    skillDist((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckPlayerAttackDistHs  $3  cCsCt||ƒstSt|||ƒs)tStj||ƒr?tStS(N(RR=RÃRt    IsSameObjR4(R‰RRª((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckNPCCanAttackTagiscCsotj|jƒ|jƒ|jƒ|jƒƒ}|dkrU||jƒkrkdSn||jƒkrkdStS(N(RRER9R:R3RFR4(R‰RKRªRO((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÃ}s cCsdS(N((RE((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytSuperAttackedBuffscCs—|dks|jƒdkr"tS|jƒtjkr;tStj||ƒsQtStj    |ƒdkrjtSt
|||ƒs€tSt ||ƒr“tSt S(Ni( R3RR=RRRºRt IsSameCountryRåRRQR»R4(R(RKRª((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckSkill_ReBornšscCsÝ|dks|jƒdkr"tStj||ƒr8tS|jƒtjkrQtSt    j
|ƒdkrjtSt |||ƒs€tSt ||ƒr“tS|j ƒ}|j ƒ}|dksÃ|dkrÇtS|jƒ|jƒkS(Ni(R3RR=RRRR4RRRºRåRRQR»RçR&(R(RKRªt
curTagTeamt curPlayerTeam((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckSkill_Team¼s"  tHurtTypecBseZdZdZd„ZRS(icCs(d|_d|_d|_d|_dS(Ni(tHurtHPRZtLostHPt
RealHurtHP(tself((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt__init__ðs            (t__name__t
__module__R[RZR_(((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRZèscCs||@S(N((t happenStatetcmpType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytIsHappenStateByTypeüscCstj}itddgtj6tddgtj6tddgtj6}g}|tjkrv|tjtjg7}n|tjkr˜|tjg7}n|s¨||fStj    dƒ\}}    id„tj6d„tj6d„tj6}
g} x‘|    D]‰} t} xz| D]r}||kr"q
n|| kr4q
n| j
|ƒ| rMq
n|
||||ƒ}|r
|||<t } q
q
Wq÷Wx‹|D]ƒ}||kr£q‹n|| krè| j
|ƒ|
||||ƒ}|rè|||<qèn||dr‹|tjkr‹|}q‹q‹W||fS(s´ »ñÈ¡É˺¦ÀàÐͽá¹û 
    Ö§³Ö¶àÖÖÉ˺¦ÀàÐÍͬʱ´¥·¢, Æ®×Ö±íÏÖÒÔ×îÖÕ±íÏÖÉ˺¦ÀàÐÍΪÖ÷
    @return: ×îÖÕ±íÏÖÉ˺¦ÀàÐÍ, {É˺¦ÀàÐÍ:[ÊÇ·ñ´¥·¢, É˺¦¼ÆËãÖµ, ´¥·¢Ê±·ÀÊØ·½µÄÉ˺¦¼õÃâÖµ], ...}
    itCalcHurtTypeInfocSst|||ƒS(N(t__HurtTypeHappen_LuckyHit(taObjtdObjthState((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt<lambda>scSst|||ƒS(N(t__HurtTypeHappen_SuperHit(RgRhRi((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRjscSst|||ƒS(N(t__HurtTypeHappen_Parry(RgRhRi((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRjs( RatDef_HurtType_NormalR=tDef_HurtType_LuckyHittDef_HurtType_SuperHittDef_HurtType_ParryRRºRRtappendR4(R3tdefObjRÿRRbRthurtTypeResultDictt calcTypeListt priorityListt    mutexListt
happenFunct hadCheckListtmutexHurtTypeListt curMHHappenthTypetresult((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCalcHurtTypeResultÿsV    
 
     cCst|tjƒr.t|jƒtj|ƒfS|jƒ}tj|ƒ}t    t
j dƒƒ}|dkrndSt j |ƒr™t|jƒtj|ƒfSdS(sg ÅжÏÉ˺¦ÀàÐÍÊÇ·ñ·¢Éú - ÐÒÔËÒ»»÷
    @return: ÊÇ·ñ´¥·¢, ´¥·¢Ê±É˺¦¼ÆËãÖµ, ´¥·¢Ê±·ÀÊØ·½µÄÉ˺¦¼õÃâÖµ
    tCalcLuckyHitRateiN(RdRatDef_Skill_HappenState_LuckyHitR4tGetLuckyHitValRAtGetLuckyHitReducePertGetLuckyHitRatetGetLuckyHitRateReducetevalRt GetChConfigRt    CanHappen(R3RrRbt aLuckyHitRatetdLuckyHitRateReducetatkLuckyHitRate((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRfAs  cCs¼t|tjƒr.t|jƒtj|ƒfS|jƒ}tj|ƒ}t    t
j dƒƒ}|t j ||dtjƒ7}|dkrdStj|ƒr¸t|jƒtj|ƒfSdS(sc ÅжÏÉ˺¦ÀàÐÍÊÇ·ñ·¢Éú - ±©»÷
    @return: ÊÇ·ñ´¥·¢, ´¥·¢Ê±É˺¦¼ÆËãÖµ, ´¥·¢Ê±·ÀÊØ·½µÄÉ˺¦¼õÃâÖµ
    tCalcSuperHitRateiN(RdRatDef_Skill_HappenState_SuperHitR4t GetSuperHitRAtGetSuperHitReducePertGetSuperHitRatetGetSuperHitRateReduceR„RR…RGt GetValueByPassiveBuffTriggerTypeR3t TriggerType_Buff_AddSuperHitRateRR†(R3RrRbt aSuperHitRatetdSuperHitRateReducet superHitRate((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRkSs   cCs<tj|ƒ}|sdStjtjƒr8td|fSdS(si ÅжÏÉ˺¦ÀàÐÍÊÇ·ñ·¢Éú - ·ÀÊØ·½µÖÓù
    @return: ÊÇ·ñ´¥·¢, ´¥·¢Ê±É˺¦¼ÆËãÖµ, ´¥·¢Ê±·ÀÊØ·½µÄÉ˺¦¼õÃâÖµ
    Ni(RAtGetDamChanceDefRR†RatDef_ChanceDefRateR4(R3RrRbt chanceDefPer((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRlfs  cCsKt|||ƒ}|s"||fS|jdƒttjƒ|jdƒfS(Nii(tGetCanChangeSkillHurtEffectR§tfloatRaR©(R(RrtcurSkillR³t
skillValuet
findEffect((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytChangeSkillHurtss
cCs‚|s
dS|jƒtjkr#dS|jƒtjkrQ|jƒtjkrQdS|jƒtjkrjdStj    ƒj
ƒtj kr­tj    ƒj ƒt jddƒkr­dSt|tjtjgƒ\}}|sØdS|tjkrF|jƒtjkrdStj    ƒj
ƒtj kr~tj    ƒj ƒt jddƒkr~dSn8|tjkr~|jdƒtj|ƒ@dkr~dSn|S(NtSkillXPAddByFBiii(RRRR¼t    ntMonstert    GetIsBossRatDef_NPCType_Ogre_SuperRR]R^R_RiRoRptGetSkillEffectByEffectIDstDef_Skill_Effect_AttackReplacet)Def_Skill_Effect_AttackReplaceByNPCSeriesR§Rt GetNPCSeries(RtRrRšRœteffectID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR˜~s2*$ $"cCsdx]td|jƒƒD]F}|j|ƒ}|jƒ}|sCqn||krUqn||fSWdS(Ni(Ni(R¾tGetEffectCountR¦t GetEffectIDR3(Ršt effectIDListRÊR±t curEffectID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR¢¤s   cCsU|jƒtjkr|S|jƒ}|tjkrQtj|ƒ}|sM|S|S|S(N(RRRR¼tntElfRtGetSummonOwnerDetel(RttnpcTypetowner((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytElfChangeAttacker¹s cCs|s
tS|jƒ}|tjkr)tS|jƒ}|tjkrHtS|tjkrŒtj    |ƒ}|sptS|jƒtjkrŒtSntS(N(
R=RRRºR4Rèt
gnotNormalRüRR¬(tgameObjtobjTypet
objNPCTypeR®((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckIsPlayerOnwerËs  cCs°|jƒtjkr|St|ƒs)|Stj|ƒ}|sB|Sttj|ƒ|tj    |ƒ}tj
|||ƒ|j tj |ƒt j||dtj|ƒ||S(N(RRRºR´RAt    GetProDefRDtGetProDefAbsorbRaR©t    SetProDefRnt#Def_PlayerKey_GodWeaponBeforeProDefRGtOnPassiveSkillTriggerR3tTriggerType_ProDefValue(R3RrR    RšRFt    curProDeft absortValue((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt CalcAtkProDefâs #c
Cs@t|ƒ}tƒ}|jƒ}tj|ƒ}    tj|ƒ}
|dkrzt|ƒtj} } | |j    tj
ƒ7} nõt j ||ƒrHt j |jƒ|ƒrH|j    tjƒ} | dkrÙ|jƒ|d} nt j|jƒ|ƒ\} } | | kr | } qotj|d|jƒ| | g| fƒt| dƒ} n't||||||d|ƒ\} } t||| ||ƒ} |jƒ}tj|tjƒ\}}}|r#| |jdƒtj}|r#| |8} tj||ƒd}|r |jt|j ƒ|ƒƒq q#n|j    tj!ƒrÊt|j    tj!ƒt"tjƒ| ƒ}| |8} |j    tj#ƒ}||j    tj$ƒkrÊt%|||j    tj$ƒƒ}|j&tj#|ƒqÊnt'j(||dtj*ƒ}|j&tj+| ƒ|t'j,||dtj*ƒ7}t| t-tj|dƒdtjƒ} t'j,|||tj.ƒrtj|ƒ} | |_/| |_| |_0d}nI| |_/| |_| |_0t1||| ƒ} t%|
t-d|    | ƒƒ}t|ƒ}|t2j3kr£tj|ƒ}tj4||t5ƒt'j6|||tj7|ƒ}|rtj|ƒ|tj}||kru||kru|}n||krŠ|}ntj4||t5ƒqnì|t2j8krz|j9ƒt2j:krÚt;j<||ƒq|j9ƒt2j=krt-t>j?|ƒ|ƒ}tj4||ƒq|j@ƒtjAkrgt%|    t-tj|ƒd|ƒƒ}tj4||ƒqtj4||ƒntjBd|ƒ|Stj|ƒdkrèt'j(||dtjCƒ}|rètjD|dt|| ƒƒqèn|    tj|ƒ}||_E|t2j3kr&tFjG||ƒntH|||||ƒ|S(    Niis%%s----¿Í»§¶ËÉ˺¦ %s ·þÎñ¶Ë×î¸ßÉ˺¦ %sgš™™™™™é?t    orgAtkObjgð?is,¼ÆËãÉËѪֵʱ,·ÀÊØ·½ÀàÐÍ´íÎó£ºdefObjType = %s(IR¯RZRRåRtGetMaxHPtintRaRmRltDef_PlayerKey_MoreHurtValuet
SkillShelltIsPlayerUseSkilltisClientHurtValueRt Def_PlayerKey_ClientMaxHurtValueRÒtGetClientHurtByObjRt DebugAnswert
CalcHurtHPR½t GetBuffStatet    BuffSkilltFindBuffEffectPlusByEffectIDt!Def_Skill_Effect_AbsorbShieldXMZJR§t ShareDefineR©t SkillCommont FindBuffByIDtSetValuetGetValuetDef_PlayerKey_AbsorbShieldValueR™tDef_PlayerKey_AbsorbShieldtDef_PlayerKey_AbsorbShieldMaxRDRnRGRR3tTriggerType_ReduceHurtHPPertDef_PlayerKey_curHurtValueRHR¨tTriggerType_AttackKillR[R]tCalcBloodShieldRRºtSetHPR=tOnObjsPassiveSkillLockHPtTriggerType_LockHPRRèR1RútSetPetHPRéRJtGetTruckDestroyMinHPR¼tntHelpBattleRobotRÕtTriggerType_ChangeHurtToHPt
SkillAddHPR\RZt
OnFBLostHPtAttackEventTrigger(RtRrRšt atkSkillValuet atkSkillPerRFR3tresultHurtTypeRtdHPtdMaxHPR    Rt clientValuet buffManagerR±t    plusValuetskillIDR¼tfindBufft
absorbHurtRµt    reducePertremainHPtcurHPt    lockHPPertlockHPt    changePert    lostValue((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt    GetHurtHPs¨       *      )' 
&)
+                                      %#    cCs<|jtj|ƒtj||dtjƒ|jtjƒS(N(RnRatDef_PlayerKey_BloodShiledHurtRGRR3tTriggerType_BloodShieldRl(R3RrR    ((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRؘscgKsÞ||jtjƒdkr)dtjfSd}|jddƒrS|jddƒn|}    |    jƒtjkrÚ|    j    ƒtj
krÚ|    jtj ƒ}
|
dkrÚt j |    ƒ} | sÃdtjfS|
dtj}qÚn|jƒ} |jƒ} t||ƒ}|r |n tj|ƒ}|tj|||tjƒ7}|jƒ}|jƒ}|jƒ}| tjkr}tj|ƒntj}|jƒ}|tj||dtjƒ7}| tjkrÏtj|ƒnd}|tj||dtjƒ7}|r|jƒnd}d}d}d}d\}}d}d}d\}}| tjkrV| tjkrV|r²|jƒtj kr²t!||| | ƒ\}} || kr²dtj"fSntj#|ƒrÇdnd}t j$|ƒr"t%d||ƒ}|r"tj&|ƒ}!|!sdn    |!j'ƒ}q"nt j(|ƒ}|rVt%d||j)ƒƒ}qVnt*}"d}#| tjkrÔ|j+ƒtj,krÔt-}"t j(|ƒ}t.j/ƒj0tj1ƒ}t.j/ƒj0tj2ƒ}d}#n| tjkrF|j+ƒtj,krFt-}"t j(|ƒ}t.j/ƒj0tj1ƒ}t.j/ƒj0tj2ƒ}d}#nt3j4d    ƒ}$|" r-tj5|||tj6ƒ r-| tjkrÁ|j7ƒtj8krÁt9j:|ƒtj;krÁdtjfSt<j=|tj>ƒrøt<j=|tj?ƒrødtjfSt@|tjAƒ r-tB|$ƒdkr-dtjfSntC||| | |ƒ\}%}&|&tjD\}'}(})|&tjE\}*}+},|&tjFd
}-tj||dtjGƒr­d|%fSt.jHƒjItJjKƒ}.tj&|.ƒ}/|/sàdn    |/jLƒ}0tM|||||ƒ\}}|tj|||tjNƒ7}|tj5|||tjNƒ7}d}1|1tj|||tjOƒ7}1|1tj5|||tjOƒ7}1|*rëtj|||tjPƒ}2|+tj|2dtj}+|tj|||tjQƒ7}n|'rA|(tj|||tjRƒ7}(|(tj5|||tjSƒ8}(t%|(dƒ}(ntTjTƒ}3|jUƒ|}4|jVƒ|}5|jWƒ}6|6tj|||tjXƒ7}6|jUƒ}7|jVƒ}8|jYƒ}9t<jZ|ƒ}:t<j[|ƒ};|j\ƒ}<| tjkr    |j]ƒ}=|j^ƒ}>tj_|ƒ}?|?tj|||tj`ƒ7}?|?tj5|||tj`ƒ7}?tja|ƒ}@tjb|ƒ}Atjc|ƒ}B|Btj|||tjdƒ7}Btje|ƒ}C|Ctj|||tjfƒ7}C|Ctj5|||tjfƒ7}Ctjg|ƒ}D|j)ƒ}En‹d}=t<jh|ƒ}Bt j^|ƒ}>| tjkrl    |j    ƒtjikrl    |>|j^ƒ7}>nd}@d}?d}At je|ƒ}Ct j(|ƒ}E| tjkrO
tjj|ƒ}Ftjk|ƒ}G|jlƒ}H|Htj||dtjmƒ7}Htjn|ƒ}I|Itj||dtjoƒ7}Itjp|ƒ}Jtjq|ƒ}K|j)ƒ}Ln3d}Fd}Gd}Hd}Id}Jd}Kt j(|ƒ}Lt3jrd ƒ}M|rÕ
d |}N|N|MkrÕ
|M|N}OtBtsjt|N|Oƒƒ}qÕ
n|r d |}P|P|Mkr |M|P}QtBtsjt|P|Qƒƒ}q nd}Rd}S| tjkr" | tjkr" tujvddƒ}T|jwƒ|jwƒ}} d\}U}Vxatx|TdƒD]P\}W}X|r¸ ||Xkr¸ |U r¸ |W}Un| rŠ | |XkrŠ |V rŠ |W}VqŠ qŠ W|U|V}Sd}Y|Y|Mkrf tytBtsjt|Y|M|Yƒƒƒ}Rqf nD| tjkrÄ | tjkrÄ t!||| | ƒ\}} || dkrf || }Stz|| d
ƒ}Zd}Y|Y|MkrÁ tytBtsjt|Y|M|Yƒƒƒ}RqÁ qf n¢| tjkrf | tjkrf t!||| | ƒ\}} || dkrf || }Stz|| dƒ}Zd}Y|Y|Mkrc tytBtsjt|Y|M|Yƒƒƒ}Rqc qf n| tjkrXt{j||j}ƒƒrXd}[|jƒtjkrü |j    ƒtjikrÌ t~j|ƒ}[q|j    ƒtj
krt j€tj|ƒ}[qn|}[|[rXt9j|[tj‚ƒd}\|\rU|\jƒƒj„dƒj…dƒ}]|B|]8}BqUqXnt†|ƒ}^t†|ƒ}_d|^|_|f}`d}at‡jˆt.j‰ƒjŠƒƒ}bd|`|bf}c|c|MkrÉ|c}`nT|^dkró|_dkrót j$|ƒ}an*|^dkr|_dkrt j$|ƒ}an|arKd|`|af}d|d|MkrK|d}`qKn|#rZ|#}`n|`|Mkr„t.j‹d|`ƒdtjfS|M|`}etytBtsjt|`|eƒƒƒ}f|%tjŒkrÔ|RdkrÔ|ftjfS|f|%fS(NiôiiR¾gð?Rt HelpRobot_Atkt HelpRobot_Deft
CalcCanHititCalcAttackValuesSuppressValueLV_%ssSuppressValueFP_%si't
RealmGrouptPVPSuppressValueRealmtEVPSuppressValueRealmitPVESuppressValueRealms%sV%s_%ss%s_%stEtPs*CalcAttackValue.txt É˺¦¹«Ê½Î´ÅäÖÃ, key=%s(ii(ii(ii(ŽRlRatDef_PlayerKey_SomersaultTimetDef_HurtType_MissRR3RRRRèRütDef_GameObjKey_InheritOwnerRR¬R©R¥RÂtGetHappenStateRGRHtTriggerType_HappenStateRÚtGetHitRºRAtGetHitSucessRatetGetMisstTriggerType_MissPertGetMissSucessRatetTriggerType_MissSuccessPert
GetSkillIDt GetFuncTypetDef_SkillFuncType_RealmSuppresstGetPVERealmLVstDef_HurtType_ImmuneR‡tGetIsLVSuppressR¨tGetPlayerLVIpyDatat
GetReMaxHPtGetSuppressFightPowert GetFightPowerR=R¼RÞR4Rt    GetGameFBtGetGameFBDictByKeytFBPD_HelpBattleFBFightPowertFBPD_HelpBattleFBBaseHurtRR…RtTriggerType_Buff_MustBeHitR tDef_SkillAttack_NPCIsBossRÎtGetSkillBattleTypeRžRåtGetPyPlayerStatetDef_PlayerState_SneertDef_PlayerState_MissSneerAtkRdtDef_Skill_HappenState_HitOnR„R}RnRoRptTriggerType_OneDamageRtGetGameWorldDictByKeyRÍt"Def_Notify_WorldKey_WorldAverageLvtGetReFightPowerRtTriggerType_AttackAddSkillPertTriggerType_AddIceAtkPertTriggerType_SuperHitValuetTriggerType_SuperHitSkillPertTriggerType_LuckyHittTriggerType_BeLuckyHitSubPertrandomRÑRÒt    GetIceAtktTriggerType_AddIceAtktGetDefRR¿t    GetIceDeftGetIgnoreDefRatetGetSkillAtkRatet GetDamagePertTriggerType_AddDamagePertGetNPCHurtAddPertGetDamagePerPVPtGetFinalHurtPertTriggerType_AttackAddFinalPert GetFinalHurttTriggerType_AttackAddFinalValuetGetOnlyFinalHurtt GetPetDamPerR1tGetIgnoreDefRateReducetGetSkillAtkRateReducetGetDamageReduceRatetTriggerType_DamageReducetGetDamagePerPVPReducetTriggerType_DamageReducePVPtGetFinalHurtReducet GetBeHurtPerRtFormulaControltGetCompileFormulaRoRptGetOfficialRankt    enumerateRÀtGetRealmHurtPerRâtIsHorsePetRobBossRRúR2tGetSummonNPCOwnerRÏt&Def_SkillID_HorsePetRobBossKillCntBufftGetSkillR¦R§tGetObjAtkStateMarktFBCommontGetRecordMapIDR]RiRÕRmtDef_HurtType_RealmSupress(gR3RrRšRãRäRFRbtatkwargst summonAtkPert summonAtkObjtsummonAtkPerValuet ownerAtkObjRÿRtatkTypetaLVtdLVtaHittaHitSuccessRatetdMisstdMissSuccessRateRët    atkIsBosstsuppressValueLVtsuppressValueFPt
suppressLVtsuppressFightPowertsuppressReMaxHPtsuppressNPCFightPowert fbFightPowert
fbBaseHurttaRealmLVtdRealmLVtsuppressLVIpyDatatmustHitthelpBattleFormatKeyt
hitFormulaRRst
isLuckyHitt    aLuckyHittdLuckyHitReduceR“t    aSuperHittdSuperHitReducet dDamChanceDeftworldLVt
wLVIpyDatat wReFightPowertaIceAtkSuperHitt addASuperHittrandtaMinAtktaMaxAtktaIceAtktdMinAtktdMaxAtktdDefRæRçtdIceDeftaIgnoreDefRatet aSkillAtkRatet
aDamagePertaNPCHurtAddPert aDamagePerPVPt aFinalHurtPert
aFinalHurttaOnlyFinalHurtt aFightPowertdIgnoreDefRateReducetdSkillAtkRateReducet
dDamReducetdDamagePerPVPReducetdFinalHurtReducet
dBeHurtPert dFightPowerthurtDisttsuppressFormulaKeyLVtsuppressLVFormulatsuppressFormulaKeyFPtsuppressFPFormulatSuppressValueRealmRatet suppressRealmtRealmGroupListt aRealmGroupt dRealmGrouptgt gMaxRealmLVtsuppressFormulaKeyRealmtsuppressRealmHurtPerR7RìtreduceFinalHurtPert atkStateMarkt defStateMarkthurtFormulaKeytsuppressLVGrouptmapIDt
mapHurtKeytsuppressLVHurtKeyt hurtFormulaR    ((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÈ£sÊ **       ' $   $    $     $  
"        $ 
 
 
 
      
 (
 +
 +$               
 cCsd}tjd|ƒ}d}||krDt|d|dƒ}nt|d|dƒ}d}x$|D]}||j|dƒ7}qhW||S(NiRüiiÿÿÿÿ(RoRpR¾R(RgRht    gridIndexRtsuppressRealmDictt
plus_minust suppressListtrealmLV((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRIæs  cCs„|tjkr1tj|ƒ}|dkr=dSn |jƒ}|tjkrntj|ƒ}|dkrzdSn |jƒ}||fS(Ni(ii(ii(RRRt
GetRealmLVRG(R3RrRÿRRgRh((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRùs    cCs•t|||j|jƒt||||j|ƒ|jƒtjkr‘|jt    j
|jƒ|jƒtj kr‘|jt    j |j ƒƒq‘ndS(N(t CalcBounceHPR\RZt CalcSuckBloodR]RRRºRnRatDef_PlayerKey_LastHurtValueRtDef_PlayerKey_LastHurtNPCObjIDR(R3RrRšRåRF((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRâscCs†|jƒ}|tjkrdS|tjkrc|jƒtjkrGdS|jƒtjkrcdSn|jƒ}|tj    kr‚dSdS(NRtRobott    HelpRobottPetR(
RRRºRR¼RatntRobotRÞRèR1(tobjR²((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRN!s  cCsCtj|ƒ}t|ƒs't|ƒr5|s1dSdS|s?dSdS(NsPVE_%ssPetVE_%ssPVP_%ssPetVP_%s(RúRût IsPVENPCObj(R3RrtisPet((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt GetAtkState5scCsy|jƒ}|tjkrtS|jƒ}|tjkr>tS|tjkrutjtj|ƒ}|dkrutSnt
S(N( RRRºR=RèR1RüRRKR3R4(RµR²tnpcOwner_Player((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR¶@s   c
Cs|jƒsdS|jƒ}|tjkr/dStj|ƒdkrHdSt||tƒs^dS|jƒ}|t    j
|ddt j ƒ7}||tt jƒ}t|t    j
|ddt jƒƒ}t|t    j|ddt jƒƒ}|dkrúdS|tj|ƒkr|ntj|ƒd}t|||ƒ}ttj|ƒ|dƒ}|jƒ}    |    tjkr¬|jƒtjkr™tj||ƒqötj||ƒnJ|    tjkrötj||tƒ|tjkröt|||dƒqönt||d|t jƒdS(NiisPlayer bounce Player(R÷RRRºRåRRøR=tGetDamageBackRateRGRHR3RatTriggerType_BounceHPPerR™R©RÀtTriggerType_BounceHPRRØR¨RRèR1RúRÜRÙRót ChangeHPViewtDef_HurtType_BounceHurt(
R3RrR    RRtdefObj_DamageBackRatetbounceHPt    realSubHPRïRÿ((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR­Vs<   %% . cCs±|jƒtjkrdS|s#dStjƒjƒ}||jtjƒtj    tjkr_dS|j
tj|ƒd}|jƒtj krµt j |ƒdkrµ||jƒ7}ntj|ƒ}|jƒtjkrH|tj|ƒ7}tj||dtjƒ}|tj|||tjƒ7}|t||dtjƒ7}n||7}|dkrbdSt j|tt j|ƒt j |ƒ|ƒtƒt|dd|tjƒdS(Nigð?(RRRºRRtGetTickt GetTickByTypeRatTYPE_Player_Tick_SuckBloodtTYPE_Player_Tick_Timet SetTickByTypeRRåRt GetKillBackHPRAtGetAtkBackHPPertGetPVPAtkBackHPRGRR3tTriggerType_Buff_SuckBloodPerRHRÀR©RÙRDR¿R=R½tDef_HurtTYpe_Recovery(R3RrRšR    RFtsuckHPt    atkBackHPt atkBackHPPer((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR®—s0*"
 2cCs$|jƒtjkrdStjƒjƒ}||jtjƒtj    tjkrUdS|j
tj|ƒd}|jƒtj kr«t j |ƒdkr«||jƒ7}ntj|ƒ}|dkrê|t||ttjƒƒ7}n|dkrúdS|jt|jƒ|jƒ|ƒƒdS(Ni(RRRºRRRÂRÃRatTYPE_Player_Tick_SuckMagicRÅRÆRRåRt GetKillBackMPRAtGetAtkBackMPPerRÀR™R©tSetMPRDtGetMaxMPtGetMP(R3RrR    RFtsuckMPt atkBackMPPer((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt CalcSuckMagicÄs"* $ &cCs|s
tS|jƒ}|tjkr8|jƒtjkS|tjkrz|jƒtjkrg|j    ƒ S|j
ƒtj kSt j d|ƒtS(Ns###GetIsDead = %s (R4RRRºR?tpaDieRRèRéR÷t GetCurActiontlaNPCDieRtLogR=(ttagett    tagetType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt    GetIsDeadæs  cCs<|jƒ}|tjkrtS|jƒtj|jƒkS(N(R'Rtg_maliciousAttackDictR=Rr(R(R>R((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR;ùs cCsŒ|jƒ}|jƒ}i}|tjkr=tj|}n||krqtjƒ}||_tj||ƒn|||<|tj|<dS(N(R'RRßtChPyNetSendPackttagMCAddMaliciousAtkPlayert AtkPlayerIDt NetPackCommont SendFakePack(R t    defPlayerRFt atkPlayerIDt defPlayerIDtdefMaliciousAttackPlayerDicttaddAtkPlayerPack((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR‹    s        
 cCsV|jƒ}|tjkrdStj|}|jƒ}||krHdS|||<dS(N(R'RRß(R RåRFRætmaliciousAtkPlayerDictRç((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRŒ    s    
cCsÄ|jƒ}|tjkrdStjddƒd}tj|}xb|jƒD]T\}}|||krqqOn|j|ƒtjƒ}||_    t
j ||ƒqOW|sÀtjj|ƒndS(NRÙiiè( R'RRßRoRÛR*R1RàttagMCDelMaliciousAtkPlayerRâRãRä(R(RFRt
defendTimeRèRætatkTicktdelAtkPlayerPack((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytProcessMaliciousAttackPlayer"    s        cCst||ƒrtjtjfStj|jƒ|jƒƒ}tj|jƒ|jƒƒ}|tj    ksy|tj    kr‰tj
tj fS||kr¥tjtj fS|j ƒtjkrÊtjtjfSt|ƒrætjtjfSt|ƒrtjtjfSt||ƒr!tjtjfS|jƒ}|tjkrLtj
tjfS|tjkr»t||ƒrztj
tjfSt||ƒr™tj
tjfSt||ƒrþtj
tjfSnC|tjkrìt ||ƒrþtj
tj!fSn|tj"krþn|tj#kr^|j$ƒt%j&ƒkr5tj
tj'fS|j$ƒ r^t(ƒr^tj
tj)fSnt*||ƒr}tj
tjfStjtjfS(s¿
    PKģʽ
        0    ºÍƽģʽ    IPY_GameWorld.amPeace            ¶ÔËùÓÐÍæ¼Ò¶¼ÊÇÓѺ㬶ñÒâ¹¥»÷×Ô¼ºµÄÍæ¼Ò³ýÍâ
        1    È«Ìåģʽ    IPY_GameWorld.amAll              ¶ÔËùÓÐÍæ¼Ò¶¼Êǵжԣ¬¼Ò×åÇøÓòͬÃËÍæ¼Ò³ýÍâ  
        2    ·ÀÎÀģʽ    IPY_GameWorld.amCountry          ±¾·þÍæ¼ÒÓѺã¬Ëû·þÍæ¼Ò¶¼ÊǵжÔ
        5    Ç¿ÖÆÄ£Ê½    IPY_GameWorld.amFamily           ¶ÓÓÑ¡¢ÏÉÃ˳ÉÔ±¡¢Í¬ÕóÓªÓѺã¬ÆäËûÍæ¼ÒµÐ¶Ô
        
    ³¡¾°ÇøÓò
        ÆÕÍ¨ÇøÓò    IPY_GameWorld.gatNormal    ¿É¸ù¾Ý²»Í¬PKģʽPK£¬»÷É±Íæ¼ÒÓгͷ£
        °²È«ÇøÓò    IPY_GameWorld.gatSafe      ²»ÄÜPK
        ×ÔÓÉÇøÓò    IPY_GameWorld.gatFreePK    ¿É¸ù¾Ý²»Í¬PKģʽPK£¬»÷É±Íæ¼ÒÎ޳ͷ£
        
    ¼ò»¯¹ØÏµÅжÏÂß¼­£º ¿É·ñ¹¥»÷È«Óɹ¥»÷ģʽ¾ö¶¨£¬²ß»®Í¨¹ýµØÍ¼Ä¬ÈÏģʽ¼°¿ÉÇл»Ä£Ê½¿ØÖÆPK¹ØÏµ
    
    Ç±¹æÔò:
        °²È«ÇøÓò²»¿É¹¥»÷
        ÆÕÍ¨ÇøÓòÖÐPKÖµ´ïµ½ÉÏÏÞ²»Äܹ¥»÷±ðÈË
        Ë«·½²»Í¬ÔÚÍ¬Ò»ÇøÓò²»¿É¹¥»÷
        ²»¿É¹¥»÷´ò×øÖеÄÍæ¼Ò
        ¶ñÒâ¹¥»÷×Ô¼ºµÄÍæ¼ÒÎÞÂÛʲôÇé¿ö϶¼¿É·´»÷£¬²»ÓÃÇл»Ä£Ê½
    (+RÝRatType_Relation_NoneRÓR7R8R9R:RR8tType_Relation_FriendtDef_PASysMessage_IsSafeAreatDef_PASysMessage_CurAreaNotPKR?tpaSittDef_PASysMessage_SitNotPKRÜtDef_PASysMessage_NewGuyt Def_PASysMessage_NotAttackNewGuyR;tType_Relation_Enemyt GetAttackModetamPeacetDef_PASysMessage_AttackModetamFamilyt CanAlikeTeamtDef_PASysMessage_NotAttackTeamtCanAlikeFamilyt Def_PASysMessage_NotAttackFamilytCanAlikeFactiont!Def_PASysMessage_NotAttackFactiont    amCountryt IsSameServert Def_PASysMessage_NotAttackServertamAllt    gatNormalR<RAt GetMaxPKValuetDef_PASysMessage_AttackNotPKtIsPKProtectTimetDef_PASysMessage_PKProtectTimeRß(R(R>RMttagPlayerAreaTypetcurPlayerAttackMode((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetPlayersRelationA    sN        c
Cs2|dks|dkr(tjtjfStj|jƒ|jƒƒ}tj|jƒ|jƒƒ}|tj    ks‚|tj    kr’tjtj
fS||kr®tjtj fSt j tj|ƒ}|rô|jƒ|jƒkrôtjtjfSntj|tjƒs;tj|dtjtjƒgƒtjtjfStj|ƒ}tj|ƒ}tj|ƒ}|tjkrº|jƒtjkrº|tjtjgkr·tj tj fSqºn|j!ƒ}|j"ƒ}    |rú|rú||krútj tj#fS|r"|    r"||    kr"tj tj$fStj%tjfS(NtTruck_hgg_31379(&R3RaRðRÓR7R8R9R:RR8RòRóRRKRºRRRRÍtGameFuncID_TruckRARXtGetFuncLimitLVRJtGetTruckTeamIDtGetTruckFamilyIDRKRRùRútpncGraytpncRedRñR&RgRþRRø(
R(t curTagTruckRMRNREtcurTruckOTeamIDtcurTruckFamilyIDRPtcurPlayerTeamIDtcurPlayerFamilyID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetPlayerAndTruckRelation§    s: "  c CsÅtjddƒ}|stS|\}}|\}}|\}}tjƒ}|j|j|j}}    }
tj||    |
||dƒ} tj||    |
||dƒ} || ks½|| krÁt    StS(NRÙii(
RoRpR=RtGetCurrentTimetyeartmonthtdaytdatetimeR4( tpkProtecTimeListt    startTimetendTimet    startHourt startMinutetendHourt    endMinutetcurTimetcurYeartcurMonthtcurDayt startDateTimet endDateTime((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR
Ý    s    cCstS(N(R4(R(RE((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRñ    scCs.|jƒ}|jƒ}|o-|o-||kS(N(t
GetFaction(R(REt
curFactiont
tagFaction((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRú    s  cCs.|jƒ}|jƒ}|o-|o-||kS(N(Rg(R(REt curFamilyIDt tagFamilyID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÿ
s  cCs.|jƒ}|jƒ}|o-|o-||kS(N(R&(R(RERt curTagTeamID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRý
s  cCs„tj|ƒdkrdS|jƒtjkrKtj|ƒ}|jƒdStj||||ƒsgdSt    j
|ƒ}|j ƒdS(Ni( RåRRRRºRAtSetDeadtChNPCt OnCheckCanDieRRÄt    SetKilled(R3t curObjDetelRšRFt playerControlt
npcControl((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytDoLogic_ObjDead
s
 
cCstjƒjƒ}tjƒjƒ}|tjkrDtjdƒdS|jƒ}tj    |ƒ}|j
ƒ}|j ƒ}|j ƒ}    |jƒ}
tj    |ƒ} |j
ƒ} |j ƒ} |j ƒ}|j t|tjtjƒƒ|j t| tjdƒƒdS(Ns;    __GiveKill_Player_ValuePrize ¸±±¾µØÍ¼É±È˲»¸ø½±Àø£¡£¡£¡i(RR]R^RiRR_tDebugLogRÚRAt GetPrestigetGetInfamyValueR<RtSetInfamyValueRDRatDef_KillValue_NotorietytDef_UpperLimit_DWordR¨tDef_BeKilledValue_Notoriety(R(RRFRÞR£tattackLVtattackPrestigetattackNotorietyt attackPkValuetattackFightPowertdefendLVtdefendPrestigetdefendNotorietyt defendPkValuetdefendFightPower((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRY-
s&          cCsš|jƒtjkr1|jƒtjkr1tSntjƒj    |j
ƒ|j ƒ|j
ƒ|j ƒƒ}|jƒtj kr–| r–t j|dƒn|S(NtPK_liubo_827276(RRRR RatDef_NPCType_Boss_BlueR4RR]t    CanLineToR9R:RºRARX(RtRt    canLineTo((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCanAttackByPath{
scCsxd\}}|r.|jƒ|jƒ}}nt|dƒsCdn    |jƒ}|j||||||jƒ|ƒdS(NiR(ii(RRRRR½R(RÈtsrcObjRëtchangeHPt    changTypetsrcIDtsrcTypetHPEx((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR½Œ
s  !%(}R,RRaRRARRÎR¯RZRURRúR7RJt PlayerFamilyRGt PlayerSuccessRRÍRÂRRERoRRåRÊRSRàRãRâROR5R tmathRR R%R)R0R2R@RGRQRcR\RŠRŽRR=R”RR¡R¥R­R®R¶R¹RÐRÁRØR»RÜRÝRßRáRòRóRRR4RùRøR.R–RýRöR<RARQRSRÃRTRVRYRZRdR}RfRkRlRR˜R¢R¯R´R½RõRØR3RÈRIRRâRNR¸R¶R­R®R×RÞR;R‹RŒRïRRR
RRRÿRýR;RYRQR½(((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt<module>sô                                           
            #                *    &    9                                                %                                  +        A    %  1 !    $                +    !                 "    ,        B                      &                    —     ÿD                             A    -    "                        f    6                                            N