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
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
c¤µgc@srddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl!Z!ddl"Z"ddl#Z#ddl$Z$ddl%Z%ddl&Z&d„Z'd„Z(d„Z)d„Z*d„Z+d„Z,d„Z-d    „Z.d
„Z/d „Z0d „Z1d „Z2d„Z3d„Z4e5d„Z6d„Z7d„Z8d„Z9d„Z:d„Z;d„Z<d„Z=d„Z>d„Z?d„Z@d„ZAd„ZBd„ZCd„ZDd„ZEd „ZFe5d!„ZGd"„ZHd#„ZId$„ZJd%„ZKeLd&„ZMeLd'„ZNeLd(„ZOd)„ZPd*„ZQd+„ZRd,„ZSd-„ZTe5d.„ZUd/„ZVd0„ZWd1„ZXd2„ZYd3„ZZd4fd5„ƒYZ[d6„Z\d7„Z]d8„Z^d9„Z_d:„Z`d;„Zad<„Zbd=„Zcd>„Zdd?„Zed@„ZfdA„ZgdB„ZhdC„ZidD„ZjdE„ZkdF„ZldG„ZmdH„ZndI„ZodJ„ZpdK„ZqerdL„ZsdM„ZtdN„ZudO„ZvdP„ZwdQ„ZxdR„ZydS„ZzdT„Z{dU„Z|dV„Z}dW„Z~dX„ZdY„Z€dZ„Zd[„Z‚d\„Zƒd]„Z„d^„Z…d_„Z†d`„Z‡da„Zˆdb„Z‰dc„ZŠdd„Z‹de„ZŒdS(fiÿÿÿÿNcCsO|jƒ}|j||jƒ||tj|tj|jƒ|jƒƒdS(N(tGetGameObjTypetAddHurttGetIDt ShareDefinetDef_PerPointValuetGetHPtGetHPEx(ttagObjthurtListthurtTypet    hurtValuet
tagObjType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRLs  cCs4|jƒ}|j|||tj|tjƒdS(N(tGetPlayerHurtListt AddHurtValueRR(tdefendertattackIDtattackHurtTypetvaluetdefendHurtList((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR Ss $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.pytAddTeamPlayerHurtValueXs      
 cCs¡tj}|jƒ}|sdS|jƒtjkr8dStjƒjƒ}||j    ƒ|j
ƒf}||krudS||}||j ƒf}|j |dƒS(Ni( RRt    GetTeamIDRRRRRRRRt GetPlayerIDR(t    curPlayerRRRRR R!R"((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetTeamPlayerHurtValuejs      
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&RRRRR RtplayerHurtValuet teamHurtValueR!R
t
hurtTeamIDt hurtPlayerIDthurtPer((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetTeamPlayerHurtPer{s2       
 
      cCsotj}|jƒtjkr"dStjƒjƒ}||jƒ|j    ƒf}||krk|j
|ƒndS(N( RRRRRRRRRRtpop(RRRR ((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œdStj    |ƒdkrµdS|j
ƒ}|tj krÔdSt j |ƒ}|tj krödSdS(Ni(R1R5R6R7R8RR3R4tGameObjRtGetPlayerNameColort    pncNormalt PlayerTrucktGetTruckNameColor(R&tcurTruckRDtcurPlayerAreaTypet 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
|||ƒt j |||ƒrˆdSt |||ƒt||ƒtjƒjƒtjkrÙtj|tjdƒndS(Nt PK_lhs_318691i(t PlayerStatetSetPKStateTickt
EventShelltEventResponse_OnKillEnemytEventResponse_OnEnemyKillR?t
NotifyCodeRBt__GiveKill_Player_ValuePrizet    NPCCommontOnPlayerKillNPCPlayertFBLogictDoFBOnKill_PlayerREt__DoKillPlayerNotifyRtGetMapt GetMapFBTypeRtfbtNulltNomalDictSetPropertytChConfigtDef_PDict_IsAddReviveTired(R&RRD((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytOnPlayerKillPlayer s c    CsÝ|jƒ}|dkrdS|jƒ}|jƒ}|jƒ}|jƒ}|jƒ}|jƒ}tjƒjƒt    j
krƒdSg}    tj ƒ}
t j |ƒ} t j |ƒ} tjƒjƒ} |jƒdkr|jƒ}|jƒ}d}||||||||| g    }n!d}||||||| g}|
r_|    jt j|||ƒƒnt j|||ƒ|dkr½|jƒ}|jtj|jƒƒd}|jtj|jƒ|ƒ|jtj|jƒdƒtjdƒ}t|jƒƒ}d}x$|D]}||kr(Pn|}qW||kr½||}|||||g}|
r¤|    jt jd||ƒƒ| | kr·t j|||ƒq·qºt jd||ƒq½n|    rÙt j | g|    ƒndS(Nit PK_pan_671654t PK_pan_318691itFamilyKilledNotify(!t GetFamilyIDtGetFamilyMemberLVRBtGetMapIDR7R8RR^R_RR`t IsCrossServerR?tGetPlayerServerGroupIDRRt GetFamilyNametappendtGetCrossFamilyNotifyInfot FamilyNotifyt GetDictByKeyRbtDef_PlayerKey_KillPlayerCntR%tSetDictt IpyGameDataPYtGetFuncEvalCfgtsortedtkeystGetCrossWorldNotifyInfoRWt WorldNotifyt CrossNotify(tattackerRt defFamilyIDtdefFamilyMemberLvtdefNametatkNametdefMapIDtdefPosXtdefPosYtcrossNotifyListt isCrossServertatkServerGroupIDtdefServerGroupIDRt atkFamilyNametatkFamilyMemberLvt
notifyCodet    paramListt defFamilyNametkillCnttkillPlayerNotifyDicttkillKeyst    notifyKeyt
killCntKeyt
notifyMarkt msgParamList((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR]5sb           $     
 
 cCs&tj|ƒr"tj||ƒndS(N(Rbt
IsGameBossRRtSetBossStateTick(tcurNPCRRD((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytOnNPCHitPlayer|scCs‚|jƒ|jƒkrdSt||ƒs>t|||ƒnt|||ƒt|||ƒtj||ƒtj||ƒdS(N(RR>tAddMaliciousAttackPlayertUpdMaliciousAttackTicktAddPlayerHitPlayerHurtRRRS(R{RRD((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytOnPlayerHitPlayer‡scCsE|jƒ}|jƒtjkr%dSt||jƒtjdƒdS(Ni(R t GetHurtCountRbtDef_PlayerHurtListCountR R%tDef_NPCHurtTypePlayer(R{RRDtdefPlayerHurtList((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR™¦s
 cCsdS(N((RCRDt
isSuperHit((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytDefenderSpringBuff·scCsK|s tjSt|ƒ\}}t|ƒ\}}|rD|rDtjStjS(N(RbtDef_BattleRelationType_CommtGetAttackPlayertDef_BattleRelationType_PVPtDef_BattleRelationType_PVE(R{Rt attackPlayert    attackNPCtdefenderPlayert defenderNPC((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetBattleRelationType¼s cCs¯tj|ƒ}|tjtjgkr+tS|tjkr›|jƒtjtj    gkr›tj|ƒtjkr›|j
ƒt j kr˜t |ƒr˜tSq›n||kr«tStS(N(t SkillCommontGetSkillBattleTypeRbR¡t!Def_BattleRelationType_CommNoBossR2R£t GetSkillTypetDef_SkillType_AtktDef_SkillType_PassiveRRt    gotPlayertIsPVPNPCR;(R{RtcurSkilltbattleRelationTypetskillBattleType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckBattleRelationTypeÊs!
 cCs2|s
tS|jƒtjko1|jƒtjkS(N(R;RRRtGetTypeRbtPVPNPCTypeList(tobj((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR±ßscCs tj|ƒS(N(Rªt GetBattleType(tattacktattackUseSkill((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR¹éscCsL|jdƒjdƒ}|jdƒjdƒ}t||tj|dƒS(Nii(t    GetEffecttGetEffectValuetmaxRbtDef_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¾RbR¿(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    EffGetSettGetValueByEffIndexR1R¾RbR¿(R&t    curEffecttindextskillPerteffecttmaxValue((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetEnhanceIndexValue_Effs cCs|j|ƒ|jtƒdS(N(tSetLastBattleTicktSetBattleStateR2(RRD((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(RRR°tCheckPlayerAttackMode_PlayerRR¶tntFairytrangetGetSummonCounttGetSummonNPCAttGetNPC_Has_Attackt GetOrgSpeedtCheckNPCAttackDistR1RYt
NPCControltAddObjToAngryListR2R;t    GetPetMgrt GetFightPet(    tcurObjR&t
angryValuetit curTagSummont summonControltpetMgrt fightPetObjt
petControl((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytSummonAddAngryByOwner6s&%     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(    RbtDef_PASysMessage_NonetDef_MessageDicRwRtErrLogR%R?RW(R&tmessaget
messageDic((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytPlayerAttackFailSysMessanagefs    cCstS(N(R2(R&RC((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÐ~scCs&|jƒtjddƒkr"tStS(NtPKConfigi(tGetLVRtt
GetFuncCfgR2R;(R&((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt GetIsNewGuyŒscCs5tjƒjƒ}|tjkr%tStj||ƒS(N(RR^R_RR`R;R[tCheckPlayersRelationInFB_IsNone(R&RCtmapType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRñšscCstj||ƒS(N(R[t!CheckPlayersRelationInFB_IsFriend(R&RC((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRó§scCstj||ƒS(N(R[tDoCanAttackTeamer(R&RC((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytPlayerCanAttackTeamerInFB¶scCsÂ|dkrtjdƒdS|jƒ}|tjkrtj|||ƒ|jƒtjkrvt    j
|||ƒnt j |ƒdkr§|j tj|jƒƒntj||||ƒrÃdStj||||ƒrßdS|jƒ}|jƒtjkr|jƒtjks!|dkrAt||jƒtj|ƒtSt||jƒtj|ƒt||jƒ|jƒ|ƒn?|tjkr­t||jƒtj|ƒntjd|ƒtS(NsNPCAddObjInHurtList NoFindObjis'NPCAddObjInHurtList UnKnow ObjType = %s(R1RRéRRR°t FamilyRobBosstOnPlayerHurtFamilyOwnerBossRR[tDoFB_Player_HurtNPCRFRRsRbtDef_PlayerKey_LastHurtR%tNPCHurtManagerR t
NPCHurtMgrtGetTeamtGetGameNPCObjTypet    gnotTruckRR2R$tDef_NPCHurtTypeTeamR#RtDef_NPCHurtTypeNPC(RÜt    curTagObjtcurTaglNPCHPBeforethurtHPtisBouncet
curObjTypetcurTeam((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytNPCAddObjInHurtListÈs2    !"cCstj|||ƒdS(N(R[t OnPVPDamage(R&t damageValueR<t    damageMsg((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRøscCsb|jƒ s|jƒ rtS|jƒtjksH|jƒtjkrLtS|jƒ|jƒkS(N(t
GetVisibleR;t GetSightLevelRbtSightLevel_PublicR2(R{R((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckSightLevelþs
*c CsWt||ƒstS|jƒs#tSt||ƒs6tS|jƒ}|jƒ}|tjkr¯|tjkr¯tj    |j
ƒ|ƒ r™t ||ƒ r™tSt ||ƒs¼tSn |tjkr|tjkrt ||tƒ rýtj    |j
ƒ|ƒ rýtSt ||tƒs¼tSn¦|tjkr¼|tjkr¼t j|ƒsX|jƒtjkr¼t ||tƒs t|ƒd}|r tj    |j
ƒ|ƒ r tSnt ||tƒs¹tSq¼n|tjkré|jƒtjtjgks|tjkr|jƒtjtjgkrtnt}| r=t||ƒ r=tStj||ƒsStStS(Ni(tCheckIsAvailableTagR;t GetCanAttackRRRR°RRútIsAssistPlayerR%tCheckKillNPCByCnttCheckCanAttackFamilyOwnerNPCt
PetControltIsPetRýt
gnotSummonR¢R¶RbtntPriWoodPilePVEtntPriWoodPilePVPR2tCheckCanAtkByAreaR[tCheckCanAttackTagObjInFB(R{Rt
atkObjTypet
defObjTypet ownerPlayert
isWoodPile((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckCanAttackTagsB   ),$
-9c    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( RRRR2Rt ReadChConfigtGetEvalChConfigR¢RîR1R?RWR;(    R{RtnpcIDtattackLVLimitDicttminLVtmaxLVt    atkPlayert
npcObjTypet
judgeMaxLV((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckCanAttackNPCByLVVs*  "    cCs´|jƒtjkrtStj|ƒtjkr5tSt|ƒ\}}|sQtSd}t    |ƒrld}n|j
ƒsd}n|r°|dkr¬|r¬t j ||ƒntStS(s ÅжϿɷñ¹¥»÷ÏÉÃ˹éÊôµÄNPC ttFairyGrabBossNotAtktFairyGrabBossNoFairyN(RRRR2RYtGetDropOwnerTypeRbtDropOwnerType_FamilyR¢RðRhR1R?RWR;(R{RtisNotifyR*R+tatkLimitNotifyMark((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR{s"          cCs®|jƒtjkrtStj|ƒs,tS|jƒ}tjdƒ}t    j
||ƒ}|dkritSt |ƒ\}}|s…tStjddiƒ}||krß||\}    }
t j||    ƒsßtj||
ƒdSntj||ƒd} | dkrN|dkrJ|rJtjddiƒj|dƒ} tj|| ƒqJntStj|ƒ} | rª| jƒrª| jƒtj|ƒkrª|r£tj|dƒntSntS(s Åжϵ±ÈÕ»÷ɱ¸ÃNPC´ÎÊýÊÇ·ñÒÑÂú tKillBossCntLimitiNiiR.tBossFightPowerHint(RRRR2RbR“RRtRuRtGetDictValueByKeyR1R¢t GameFuncCommt GetFuncCanUseR?RWt BossHurtMngtGetCanKillBossCntRR;RYt GetNPCDataExtGetFightPowerLackAtkLimittGetSuppressFightPowert GetFightPower(R{RR3R&tkillBossCntLimitDictRÈR*R+t funcInfoDicttfuncIDt funcSysMarkt
canKillCnttsysMarkt    npcDataEx((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR—s@     !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(RRRR2RbR“R$R%RR¢tNomalDictGetPropertytDef_PDict_WorldBoss_HurtCntR1R?RWR;(    R{RR3tlimitBossIDListtlimitCntR&R*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°R1RýRRt GetObjDetailtGetOwnertgnotPetRt GetPetOwner(tatkObjRR+t curNPCDetailt curNPCOwnert summonOwnerR((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR¢ìs" 
    cCsœ|jtjƒ}|jtjƒ}|r:||kr:tStj|jƒ|jƒƒ}tj|jƒ|jƒƒ}|tj    ks”|tj    kr˜t
StS(N( RqRbtDef_PlayerKey_MirrorBattleIDR2R5R6R7R8RtgatSafeR;(RÜRt curBattleIDt tagBattleIDtareaTypet tagAreaType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRscCst|dks|jƒdkr"tStj|ƒdksLtj|ƒdkrPtS|jƒs`tS|jƒsptStS(Ni(R1RR;RFRR R2(R{R((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR*s*  cCsO|dks|jƒdkr"tStj|ƒdkr;tS|jƒsKtStS(Ni(R1RR;RFRR R2(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_AttackFailRRR7R8RtafrNullR;tGetPlayerActionRbtDef_PlayerCanAttackStateR2(R&R((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckPlayerCanAttackTagSs                
  cCs    | s| rtS|jƒtjkr+tS|jƒ}|jƒ}ttj    |||j
ƒ|j ƒƒtj    |j
ƒ|j ƒ|j
ƒ|j ƒƒƒ}|s¤tS|j ƒ}|dkrÀtS|t j|||tjƒ7}|sõ|tj7}n||krtStS(Ni(R;RRR°R2tGetAttackTargetPosXtGetAttackTargetPosYtminRtGetDistR7R8t
GetAtkDisttPassiveBuffEffMngt!GetPassiveSkillValueByTriggerTypeRbtTriggerType_SkillDisttDef_PlayerAttackDistZoom(R&tcurTagtuseSkilltpreciseAtkDictt atkStartPosXt atkStartPosYtdistt    skillDist((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckPlayerAttackDist~s&  $3   cCsCt||ƒstSt|||ƒs)tStj||ƒr?tStS(N(RR;R×Rt    IsSameObjR2(R•RRÀ((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCheckNPCCanAttackTag¥scCsotj|jƒ|jƒ|jƒ|jƒƒ}|dkrU||jƒkrkdSn||jƒkrkdStS(N(RRfR7R8R1RgR2(R•RlRÀRq((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR×¹s cCsdS(N((RC((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( R1RR;RRR°Rt IsSameCountryRFRRsRÐR2(R&RlRÀ((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(R1RR;RRtR2RRR°RFRRsRÐRüR$(R&RlRÀ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(tHurtHPR|tLostHPt
RealHurtHP(tself((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt__init__,s            (t__name__t
__module__R}R|R(((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR|$scCs||@S(N((t happenStatetcmpType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytIsHappenStateByType8scCsÚtj}itddgtj6tddgtj6tddgtj6tddgtj6tddgtj6tddgtj6}g}|t    j
krÁ|tjtjtjtjtjg7}nJ|t    j kr t j |ƒrò|tjg7}q |tjtjg7}n|t    j
kr-|tjg7}n|s=||fStjdƒ\}    }
ittj6ttj6ttj6ttj6ttj6} g} x |
D]˜} t}x‰| D]}||ksª|| krÎqªn|| kràqªn| j|ƒ|rùqªn| |||||ƒ}|rª|||<t}qªqªWq—Wxš|    D]’}||ks:|| kr^q:n|| kr¦| j|ƒ| |||||ƒ}|r¦|||<q¦n||dr:|tjkr:|}q:q:W||fS(s´ »ñÈ¡É˺¦ÀàÐͽá¹û 
    Ö§³Ö¶àÖÖÉ˺¦ÀàÐÍͬʱ´¥·¢, Æ®×Ö±íÏÖÒÔ×îÖÕ±íÏÖÉ˺¦ÀàÐÍΪÖ÷
    @return: ×îÖÕ±íÏÖÉ˺¦ÀàÐÍ, {É˺¦ÀàÐÍ:[ÊÇ·ñ´¥·¢, É˺¦¼ÆËãÖµ, ´¥·¢Ê±·ÀÊØ·½µÄÉ˺¦¼õÃâÖµ], ...}
    itCalcHurtTypeInfo(RbtDef_HurtType_NormalR;tDef_HurtType_LuckyHittDef_HurtType_SuperHittDef_HurtType_ParrytDef_HurtType_ZhuxiantDef_HurtType_DeadlyHittDef_HurtType_ThumpHitRR°RRtIsPetNPCR$R%t__HurtTypeHappen_LuckyHitt__HurtTypeHappen_SuperHitt__HurtTypeHappen_Parryt__HurtTypeHappen_Deadlyt__HurtTypeHappen_ThumpHitRnR2(RStdefObjRRR„R²R    thurtTypeResultDictt calcTypeListt priorityListt    mutexListt
happenFunct hadCheckListtmutexHurtTypeListt curMHHappenthTypetresult((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCalcHurtTypeResult>sl     
 
 
 
 
 
    cCst|tjƒr.t|jƒtj|ƒfS|jƒ}tj|ƒ}t    t
j dƒƒ}|dkrndSt j |ƒr™t|jƒtj|ƒfSdS(so ÅжÏÉ˺¦ÀàÐÍÊÇ·ñ·¢Éú - »áÐÄÒ»»÷
    @return: ÊÇ·ñ´¥·¢, ´¥·¢Ê±É˺¦¼ÆËã¹Ì¶¨Öµ, ´¥·¢Ê±·ÀÊØ·½µÄÉ˺¦¼õÃâ¹Ì¶¨Öµ
    tCalcLuckyHitRateiN(R†RbtDef_Skill_HappenState_LuckyHitR2tGetLuckyHitValR?tGetLuckyHitReducetGetLuckyHitRatetGetLuckyHitRateReducetevalR$t GetChConfigRt    CanHappen(RSR•R„R²t aLuckyHitRatetdLuckyHitRateReducetatkLuckyHitRate((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRŽs  cCsÛt|tjƒr.t|jƒtj|ƒfS|jƒ}tj|ƒ}t    t
j dƒƒ}|t j |||tjƒ7}|t j|||tjƒ7}|dkr¬dStj|ƒr×t|jƒtj|ƒfSdS(sk ÅжÏÉ˺¦ÀàÐÍÊÇ·ñ·¢Éú - ±©»÷
    @return: ÊÇ·ñ´¥·¢, ´¥·¢Ê±É˺¦¼ÆËã¹Ì¶¨Öµ, ´¥·¢Ê±·ÀÊØ·½µÄÉ˺¦¼õÃâ¹Ì¶¨Öµ
    tCalcSuperHitRateiN(R†RbtDef_Skill_HappenState_SuperHitR2t GetSuperHitRFtGetSuperHitReducetGetSuperHitRatetGetSuperHitRateReduceR§R$R¨Rht GetValueByPassiveBuffTriggerTypet TriggerType_Buff_AddSuperHitRateRiRR©(RSR•R„R²t aSuperHitRatetdSuperHitRateReducet superHitRate((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR‘ s    cCs<tj|ƒ}|sdStjtjƒr8td|fSdS(si ÅжÏÉ˺¦ÀàÐÍÊÇ·ñ·¢Éú - ·ÀÊØ·½µÖÓù
    @return: ÊÇ·ñ´¥·¢, ´¥·¢Ê±É˺¦¼ÆËãÖµ, ´¥·¢Ê±·ÀÊØ·½µÄÉ˺¦¼õÃâÖµ
    Ni(R?tGetDamChanceDefRR©RbtDef_ChanceDefRateR2(RSR•R„R²t chanceDefPer((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR’µs  cCs2tj||dtjƒ}|r.t|dfSdS(Ni(RhRiR1RbtTriggerType_IsDealyR2(RSR•R„R²tdeadlyHitValue((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR“Ës cCs¿t|tjƒr8tt|jƒdƒtj|ƒfSd}|tj    |||tj
ƒ7}|tj |||tj
ƒ7}|dkrŒdSt j |ƒr»t|jƒdtj|ƒfSdS(Ngø?ii(R†RbtDef_Skill_HappenState_ThumpHitR2tintR¯RFR°RhRitTriggerType_AddThumpHitRateR³RR©(RSR•R„R²t thumpHitRate((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR”Òs&    cCsã|s
|S|jƒtjkr#|S|jƒ}d}d}|tj||ƒ7}|jƒtjkr³tj||ƒ}|jƒtj    tj
gkr¬|t j |ƒ7}nh|jƒtj tjgkrà|t j|ƒ7}n4|jƒtjtjgkr|t j|ƒ7}n|jƒtj    tj
gkrH|t j|ƒ7}q³|jƒtj tjgkr||t j|ƒ7}q³|jƒtjtjgkr³|t j|ƒ7}q³n|s¿|rß||}td||ƒ}n|S(Ni(RRR°tGetSkillTypeIDRªtGetSkillAddPerByIDtGetSkillReducePerByIDtGetJobRtPlayerJob_WarriortPlayerJob_KnightR?tGetJobAHurtAddPertPlayerJob_WizardtPlayerJob_ForceUsertGetJobBHurtAddPertPlayerJob_AssassintPlayerJob_BowMastertGetJobCHurtAddPertGetJobAAtkReducePertGetJobBAtkReducePertGetJobCAtkReducePerR¾(RSR•R²RÉt skillTypeIDtaddPert    reducePert addSkillPer((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytChangeSkillHurtPerãs4  
cCs7t|||||ƒ}|r-|\}}n||fS(N(tGetCanChangeSkillHurtEffect(R&R•R²RÉt
skillValuet
changeInfo((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytChangeSkillHurt sc
Cs!|s
dS|jtjƒsÂ|jƒtjkr5dS|jƒtjkrc|jƒtjkrcdS|jƒtj    kr|dSt
j ƒj ƒtj krÂt
j ƒjƒtjddƒkrÂdSntjtjtjtjg}t||ƒ\}}|sÿdS|tjkr†|jƒtj    kr'dSt
j ƒj ƒtj krjt
j ƒjƒtjddƒkrjdS|jdƒ|jdƒfS|tjkr×|jdƒtj|ƒ@dkr»dS|jdƒ|jdƒfS|tjkr¤|jdƒ}|jdƒ}    tj|ƒttjƒtj|ƒ}
|    dkrL|
|kr\dSn|
|kr\dS|jdƒ} t
jd|jƒ|jƒ|
|| |fƒ| |fS|tjkr|jdƒ} tj || ƒsØdS|jdƒ} t
jd|jƒ|jƒ| | |fƒ| |fSdS(NtSkillXPAddByFBiiisb        Ä¿±êѪÁ¿±ä¸ü¼¼ÄÜÉ˺¦! atkID=%s,defID=%s,tagHPPer=%s,hpPer=%s,changeSkillPer=%s,skillPer=%ssY        Ä¿±ê״̬±ä¸ü¼¼ÄÜÉ˺¦! atkID=%s,defID=%s,tagState=%s,changeSkillPer=%s,skillPer=%s(!RqRbtDef_Obj_Dict_TurnFightTimelineRRRR¶t    ntMonstert    GetIsBosstDef_NPCType_Ogre_SuperRR^R_R`RjRtRutDef_Skill_Effect_AttackReplacet)Def_Skill_Effect_AttackReplaceByNPCSeriest%Def_Skill_Effect_AttackReplaceByTagHPt(Def_Skill_Effect_AttackReplaceByTagStatetGetSkillEffectByEffectIDsR½RYt GetNPCSeriesRFRtfloatR¿tGetMaxHPtDebugLogRtGetPyPlayerState( R{R•R²RÉR×t effectIDListt
findEffectteffectIDthpPertcalcTypettagHPPertchangeSkillPerttagState((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÖsd*$ $")       &
    #
cCsdx]td|jƒƒD]F}|j|ƒ}|jƒ}|sCqn||krUqn||fSWdS(Ni(Ni(RÒtGetEffectCountR¼t GetEffectIDR1(R²RéRÞRÇt curEffectID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRã^s   cCs_|s
|S|jƒtjkr#|S|jƒ}|tjkr[tj|ƒ}|sW|S|S|S(N(RRRR¶tntElfRYtGetSummonOwnerDetel(R{tnpcTypetowner((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytElfChangeAttackerss cCs|s
tS|jƒ}|tjkr)tS|jƒ}|tjkrHtS|tjkrŒtj    |ƒ}|sptS|jƒtjkrŒtSntS(N(
R;RRR°R2Rýt
gnotNormalRRYRõ(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ýR?t    GetProDefRetGetProDefAbsorbRbR¿t    SetProDefRst#Def_PlayerKey_GodWeaponBeforeProDefRhtOnPassiveSkillTriggerR1tTriggerType_ProDefValue(RSR•R
R²RDt    curProDeft absortValue((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt CalcAtkProDefžs #cCst|jƒtjkrdS|rA|jƒtjtjgkrAdS|jtjƒrWdS|j    tj|j
ƒƒdS(N( RRR°t GetFuncTypeRbtDef_SkillFuncType_FbSkilltDef_SkillFuncType_NormalAttackRqtDef_PlayerKey_FirstDefenderRsR(R{R•R²((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytSetFirstDefender´scCs0|jƒtjkrdS|jtjdƒdS(Ni(RRR°RsRbR
(R{((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytClearFirstDefenderÃscCs|jtjƒS(N(RqRbR
(R{((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetFirstDefenderIDÊsc
Csèt|ƒ}t|||ƒtƒ}|jƒ}tj|ƒ}    tj|ƒ}
tj|||t    j
ƒr¦t    j } tj|ƒ} | |_ | |_| |_ d} n…tj|||t    jƒrýt    j} tj|ƒ} | |_ | |_| |_ d} n.|dkr8t|ƒt    j} } | |jt    jƒ7} n‹tj||ƒrœtj|jƒ|ƒrœtj|jƒ|ƒ\}} t||jƒdƒ} n't||||||d|ƒ\} } t|||| | dƒt||| ||ƒ} | |_ | |_| |_ t|
td|    | ƒƒ} t| ƒ} |tj krõtj|ƒ}tj!|| t"ƒtj#|||t    j$|ƒ}|rtj|ƒ|t    j%}||krÇ| |krÇ|} n||krÜ|} ntj!|| t"ƒqn#|tj&kr|j'ƒtj(kr,t)j*|| ƒq|j'ƒtj+krltt,j-|ƒ| ƒ} tj!|| ƒq|j.ƒt    j/kr¹t|    ttj|ƒd| ƒƒ} tj!|| ƒq|j0ƒ}t1j2d|ƒ}|rðt3|||ƒqtj!|| ƒnt4j5d|ƒ|Stj|ƒdkrqtj6|||t    j7ƒ}|rqt8j9|dt|| ƒƒqqn|    tj|ƒ}||_:|tj kr¯t;j<||ƒnt||||j:|jdƒt=|||||ƒ|S(    NiiÈt    orgAtkObjs¹«Ê½²ãit NPCTimeLostHPs,¼ÆËãÉËѪֵʱ,·ÀÊØ·½ÀàÐÍ´íÎó£ºdefObjType = %ss×îÖÕ¿ÛѪ(>RøR R|RRFRRæRhRiRbtTriggerType_ZhongjiZhanshatDef_HurtType_ZhognjiZhanshaR}RtTriggerType_AttackKilltDef_HurtType_ZhanshaR¾RˆRqtDef_PlayerKey_MoreHurtValuet
SkillShelltIsPlayerUseSkilltisClientHurtValueRtGetClientHurtByObjReRæt
CalcHurtHPt WriteHurtLogtCalcHurtHPWithBuffR¾RR°tSetHPR;tOnObjsPassiveSkillLockHPtTriggerType_LockHPR¿RRýRQRtSetPetHPRþRItGetTruckDestroyMinHPR¶tntHelpBattleRobotRRttGetIpyGameDataNotLogtUpdateTimeMonsterHPRRéR³tTriggerType_ChangeHurtToHPRªt
SkillAddHPR~R[t
OnFBLostHPtAttackEventTrigger(R{R•R²t atkSkillValuet atkSkillPerRDRStresultHurtTypeRtdHPtdMaxHPR    R
tremainHPt clientValuetcurHPt    lockHPPertlockHPR&ttimeLostHPIpyDatat    changePert    lostValue((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt    GetHurtHPÚs                                               *'                      % #    cCsä|jtjƒ}|jtj|ƒ| s<||dkrEd}n
||}|dkr_dS|jƒ}|jƒ}|jƒ}|jƒ}|jƒ}    |j    ƒ}
|j
ƒ} |j ƒ} |r8|    r8t j |ƒ} tj| ƒ}|sódS|jƒ}|t|    ƒ}|}    t|
|ƒ}
t| |ƒ} n|jtjƒ|jtjƒtj}|jtjƒ}|jtjƒ}| sœ||dkr|jtj|ƒd}d}x¸t|jƒƒD]¤}|j|ƒ}|dkrõqÎn|jƒsqÎn|jƒ}|tjkr(qÎn|d7}|    rÎt j!|j"ƒ|ƒ}||s_dn tj#|ƒ7}qÎqÎWt$|dƒ}t||ƒ}|
r°||
kr°|
}n|rË||krË|}n|jtj|tjƒ|jtj|tjƒ|jtj|ƒn|}|dkrB|d|}||7}n|    r|r| r| r||    t| ƒ| }||7}nt$dt||dƒƒ}t%t&j'|ƒt$dt&j(|ƒ|ƒƒ}t&j)||dt*ƒdS(    s¡
    NPC×ÜѪÁ¿ = µ¥ÈËÿÃëµôѪÁ¿*ÀíÂÛ»÷ɱËùÐèʱ¼ä
         µôѪֵ = µ¥ÈËÿÃëµôѪÁ¿+min(µ±Ç°ÈËÊý, ×î´óÈËÊý)*¸½¼ÓµôѪÁ¿+(ÓÐЧսÁ¦-±ê×¼Õ½Á¦)/xÕ½Á¦*xÕ½Á¦¸½¼ÓµôѪ
    iÐièiNi¸ ig@@tisByTime(+RqRbtDef_NPC_Dict_TimeLostHPTickRstGetLostHPPerSecondtGetMaxPlayerCounttGetLostHPPerSecondExtGetFightPowerMinByLVtGetFightPowerMintGetFightPowerMaxtGetEveryFightPowertGetEveryFightPowerLostHPExRYtGetNPCLVR?tGetPlayerLVIpyDatatGetReFightPowerRåR¾t!Def_NPC_Dict_TimeLostHPFightPowert#Def_NPC_Dict_TimeLostHPFightPowerExRt"Def_NPC_Dict_TimeLostHPPlayerCountt&Def_NPC_Dict_TimeLostHPPlayerCountTicktxrangetGetInSightObjCounttGetInSightObjByIndexR1R RRR°RtGetObjRR?R¾ReRFRæRRR2(R•tipyDataRDtlastLostHPTicktpassTicktlostHPPerSecondtmaxPlayerCounttlostHPPerSecondExtfightPowerMinByLVt fightPowerMint fightPowerMaxteveryFightPowerteveryFightPowerLostHPExtnpcLVtplayerCurLVIpyDatat ReFightPowertreRatet effFightPowerteffPlayerCounttrefreshPlayerCountTicktfightPowerTotalRÞtseeObjt
seeObjTypet    seePlayerthurtValuePerSecondtplayerCountHurtExtfightPowerHurtExt lostHPTotalR-((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR#Ps„    
 
&           .c Cs¤t|||||ƒ}|jƒ}tj|tjƒ\}}}|rët||jdƒtj    ƒ}    |    rë||    8}t
j ||ƒd}
|
rè|
j t |
jƒ|    |
jƒƒƒ|
jƒ|
jƒkrå|
jdƒqåqèqëntj|tjƒ\}}}|r‡||jdƒtj    }    |    r‡||    8}t
j ||ƒd}
|
r„|
jt t|
jƒ|    ƒtjƒƒq„q‡ntt|ƒdƒ}tj||dtjƒ} |jtj|tjƒ|jtj|tjƒ| tj||dtjƒ7} t|ttj    | dƒdtj    ƒ}t|||ƒ}tj||dtjƒ} | dkr t j!d|j"ƒ| |fƒt || ƒ}n|S(Niigð?s:        ×î¸ßÊÜÉËÖµÏÞÖÆ: defID=%s,beHurtMax=%s,hurtValue=%s(#Rt GetBuffStatet    BuffSkilltFindBuffEffectPlusByEffectIDRbtDef_Skill_Effect_AbsorbShieldR¾R½RR¿Rªt FindBuffByIDt    SetValue1Ret    GetValue1tGetValuet SetRemainTimet!Def_Skill_Effect_AbsorbShieldXMZJtSetValuetDef_UpperLimit_DWordR¾RhR³R1tTriggerType_ReduceHurtHPPerRstDef_PlayerKey_curHurtValueRtDef_PlayerKey_curHurtValueExRitCalcBloodShieldtTriggerType_BeHurtMaxRRçR( RSR•R
R²RDt buffManagerRÇt    plusValuetskillIDRtfindBuffRÓt    beHurtMax((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR±s@  
&
2+  c CsŠtjƒjtjƒ}|s"dS|dkr^|s8dS|jƒtjkrQdSd|}n|rp|jƒnd}|rˆ|jƒnd}|r |j    ƒnd}    |r¸|j
ƒnd}
|rÐ|j ƒnd} |rè|j ƒnd} |r$|jƒtjkr$| j dƒj dƒ} n|rZ|jƒtjkrZ| j dƒj dƒ} ntjd||| || |    |
||f    ƒdS(NisÍæ¼ÒiR.tutf8tgbksH¹¥»÷É˺¦-%s£º(%s %s)¹¥»÷(%s %s), ¼¼ÄÜID:(%s %s), É˺¦Öµ:%s, É˺¦ÀàÐÍ:%s (RRtGetGameWorldDictByKeyRtDef_Notify_WorldKey_HurtLogRRR°Rt
GetSkillIDt GetSkillNameRBtdecodetencodeRç( R{R•R²R
R    tmsgtlogLevelt
attackerIDt
defenderIDRxt    skillNamet attackerNamet defenderName((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRós,      cCs6tj||ƒtj||dtjƒtj|ƒS(N(RFtSetBloodShiledHurtRhR³R1RbtTriggerType_BloodShieldtGetBloodShiledHurt(RSR•R
((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRtsc{#Ks||jtjƒdkr)dtjfSd}tj}    |jddƒr\|jddƒn|}
|
jƒtj    krØ|
j
ƒtj krØ|
jtj ƒ} | dkrØt j|
ƒ} | sÌdtjfS| }    qØn|jƒ} |jƒ}t||| |ƒ\}}|tj    krätj|ƒrä||krätjd|ƒ}tjd|ƒ}|rk|jƒnd}|rƒ|jƒnd}||krä| tjkrÔtjd||fƒtj|d|gƒndtjfSnt||ƒ}|rÿ|n tj|ƒ}|tj|||tjƒ7}|j ƒ}|j ƒ}t!j"|ƒ}|r—| tjkr—|j#ƒtj$kr—|tj%dd    ƒ}nt!j&|ƒ}|tj||dtj'ƒ7}|r×|j(ƒnd}d}d}d}d#\}}d} d}!d$\}"}#| tj    kr*|tjkr*|rƒ|j#ƒtj)krƒt||| |ƒ\}}||krƒdtj*fSntj|ƒr˜dnd}t j+|ƒrót,d||ƒ}|rótj-|ƒ}$|$sádn    |$j.ƒ} qónt j/|ƒ}!|!r*t,d|!tj0|ƒƒ}q*n|jtj1ƒ}%t2}&d}'d
}(| tj    krÀ|j3ƒtj4krÀt5}&t j/|ƒ}!tj6ƒj7tj8ƒ}"tj6ƒj7tj9ƒ}#d }(n|tj    kr2|j3ƒtj4kr2t5}&t j/|ƒ}!tj6ƒj7tj8ƒ}"tj6ƒj7tj9ƒ}#d }(n| tj    krut:j;|ƒrut5}&tjd ƒt:j<|ƒ}'nt=|tj>ƒr¡t5}&tjd|ƒnt?j@dƒ})|& rtjA|||tjBƒ r|tj    kr+|jCƒtjDkr+tEjF|ƒtjGkr+tjH|ƒr+dtjfSt!jI|tjJƒrbt!jI|tjKƒrbdtjfStL|)ƒ}*tjM|*ƒrdtjfSnd}+tN||| |||ƒ\},}-|-tjO\}.}/}0|-tjP\}1}2}3t!jQ|ƒ}4t!jQ|ƒ}5|1s¡|-tjR\}1}2}3d}6|6tj|||tjSƒ7}6|6tjA|||tjSƒ7}6|2|6tjtj}2|1rý|+tjA|||tjTƒ7}+qýn\d}7|7tj|||tjUƒ7}7|7tjA|||tjUƒ7}7|2|7tjtj}2|-tjVd    }8|-tjW\}9}:};|-tjX\}<}=}>tj||dtjYƒr_d|,fSd}?tjZƒj[t\j]ƒ}@|@r­tj-|@ƒ}A|Asždn    |Aj^ƒ}?nt_|||||ƒ\}}t`||||ƒ}| tjkr~    | s     |j#ƒtj$kr4    |tja|ƒ7}|tjb|ƒ7}q~    |j#ƒtjctjdgkr~    |tje|ƒ7}|tjf|ƒ7}q~    n|tj|||tjgƒ7}|tjA|||tjgƒ7}|tj|||tjhƒ7}|tjA|||tjhƒ7}|tjA|||tjiƒ7}tj|||tjjƒ}B||B7}|rr
|jkƒrr
|tj|||tjlƒ7}n|,tjRkrÞ
|tj|||tjmƒ7}|tjA|||tjmƒ7}tjn|||tjo|ƒn1|,tjPkr |tj|||tjpƒ7}n|.re |/tj|||tjqƒ7}/|/tjA|||tjrƒ8}/t,|/dƒ}/ntsjsƒ}C|jtƒ}D|juƒ}E|'rß |'jvd|jwƒƒ|'jtƒ}D|'juƒ}E|+tj|'||tjxƒ7}+n|    tj|||tjyƒ7}    |    tjkr> |Dtz|    ƒtj}D|Etz|    ƒtj}End}Fd%\}G}H|%r˜ |'r˜ t!j{|'ƒ}Gt|j}|'ƒ}F|Fr• t!j~|Fƒ}Hq• q˜ n|jƒ}I|Itj|||tj€ƒ7}I|jtƒ}J|juƒ}K|jƒ}Lt!j‚|ƒ}Mt!jƒ|ƒ}N|j„ƒ}Ot!j…|ƒ}P|Ptj|||tj†ƒ7}P| tjkr/|j‡ƒ}Q|jˆƒ}Rtj‰|ƒ}StjŠ|ƒ}Ttj‹|ƒ}UtjŒ|ƒ}V|Vtj|||tjƒ7}VtjŽ|ƒ}W|Wtj|||tjƒ7}W|WtjA|||tjƒ7}Wtj|ƒ}Xtj0|ƒ}Ynˆd}Qt jˆ|ƒ}R| tj    kr{|j
ƒtj‘kr{|R|jˆƒ7}Rnd}Ud}Vd}Sd}Tt jŽ|ƒ}Wd}Xt j/|ƒ}Yt!j’|ƒ}Z|Ztj|||tj“ƒ7}Z|tjkrtj”|ƒ}[tj•|ƒ}\tj–|ƒ}]tj—|ƒ}^|^tj||dtj˜ƒ7}^tj™|ƒ}_tjš|ƒ}`tj0|ƒ}an3d}[d}\d}]d}^d}_d}`t j/|ƒ}at›jœtjƒjžƒƒ}bt?jŸdƒ}c|r d|}d|d|ckr |c|d}etLt j¡|d|eƒƒ}q n|rdd|}f|f|ckrd|c|f}gtLt j¡|f|gƒƒ}qdn|dks||dkr…d}hnAd|b}i|i|ckr¤d}int¢tLt j¡|i|c|iƒƒƒ}h|tj    krRt£j¤|j¥ƒƒrRt¦|ƒ\}j}k|jrRtEj§|jtj¨ƒd}l|lrO|lj©ƒjªdƒj«dƒ}m|P|m8}PqOqRn| tjkr†|btj¬kr†|Ptj­|ƒ7}Pn| tjkrÿ|tj    krÿtj|ƒrÿtj®dƒ}ntj¯|n|j¥ƒƒ}o|odkrÿ|Ptj°|ƒ7}Pqÿnt±|ƒ}pt±|ƒ}qd|p|q|f}rd}sd|r|bf}t|t|ckrU|t}rnT|pdkr|qdkrt j+|ƒ}sn*|pdkr©|qdkr©t j+|ƒ}sn|sr×d|r|sf}u|u|ckr×|u}rq×n|(ræ|(}rn|%rd|p|q|f}rn|r|ckr2tj²d|r|fƒdtjfS|jddƒr}|jddƒ}v|jd dƒ}w|jddƒ}rn|c|r}xt¢tLt j¡|r|xƒƒƒ}y|<rÄ|=dkrÄ||=7}n| tjkr|tj    kr|btj³krt´jµ||ƒ}z|zdkr||z7}qn|rdtjd!|jwƒ|jwƒ||y|fƒt¢|y|ƒ}yn|+dkrÀtjd"|jwƒ|jwƒ||y|+fƒ|yt¢|y|+tztjƒƒ7}yn|,tjkrè|Bdkrè|ytj¶fS|,tjkr|hdkr|ytj·fS|y|,fS(&NiôiRtRealmsBossRealmHint%s-%st BossRealmHintitFightHappenRateiR.t HelpRobot_Atkt HelpRobot_Defs        Áé³è±ØÃüÖÐs        ¼¼ÄܱØÃüÖÐ: skillID=%st
CalcCanHitt useSkillPetIDtCalcAttackValuesSuppressValueLV_%ssSuppressValueFP_%si'sSuppressValueRealm_%stSuppressValueRealmR5s%sV%s_%ss%s_%stEtPsTurnFight_%sV%s_%ss6CalcAttackValue.txt É˺¦¹«Ê½Î´ÅäÖÃ, key=%s, skillID=%sthurtFormulaKeyt    burnValuetburnPersI        ¶à±¶É˺¦: atkID=%s,defID=%s,skillID=%s,hurtValue=%s,multiValue=%ssQ        ¶îÍ⸽¼ÓÉ˺¦: atkID=%s,defID=%s,skillID=%s,hurtValue=%s,hurtValueExPer=%s(ii(ii(ii(¸RqRbtDef_PlayerKey_SomersaultTimetDef_HurtType_MissR¿RR1RRRRýRtDef_GameObjKey_InheritOwnerRYRõtGetPVERealmLVsR“RtR"t
GetLvLargeR°RRçR?RWRˆR¹RtGetHappenStateRhRitTriggerType_HappenStateRîRFtGetMissDefRateRR    Rït GetMissRatetTriggerType_MissPerRtDef_SkillFuncType_RealmSuppresstDef_HurtType_ImmunetGetIsLVSuppressR¾RAt
GetReMaxHPR>R?RÛR;R¶R!R2t    GetGameFBtGetGameFBDictByKeytFBPD_HelpBattleFBFightPowertFBPD_HelpBattleFBBaseHurtRRtGetPetNPCOwnerR†tDef_Skill_HappenState_HitOnR$R¨R³tTriggerType_Buff_MustBeHitRÝtDef_SkillAttack_NPCIsBossRªR«R¬tIsNPCSkillResistRètDef_PlayerState_SneertDef_PlayerState_MissSneerAtkR§R©R R‰RŽtGetSuperHitHurtPerRŠtTriggerType_SuperHitPertTriggerType_BeSuperHitHurtExPertTriggerType_AddThumpHitPerR‹RŒRtTriggerType_OneDamageRR}Rt"Def_Notify_WorldKey_WorldAverageLvRBRÙRÕtGetNormalHurtPert GetNormalHurtRt Def_SkillFuncType_FbPassiveSkilltGetFabaoHurtPert GetFabaoHurttTriggerType_SkillValuetTriggerType_AttackAddSkillPertTriggerType_BeAttackAddSkillPert"TriggerType_AttackAddSkillPerYinjitGetXPtTriggerType_XPAttackAddSkillPertTriggerType_SuperHitSkillPertOnPassiveBuffTriggertTriggerType_SuperHitSubLayertTriggerType_ThumpSkillValuetTriggerType_LuckyHittTriggerType_BeLuckyHitSubPertrandomRåRæRsRtTriggerType_PetAtkHurtExPertTriggerType_AttackAddAtkPerRåtGetPetStrengthenPert
TurnAttackt GetEnemyObjtGetPetWeakenPert    GetIceAtktTriggerType_AddIceAtktGetDefRRæt    GetIceDeftGetFinalHurtPertTriggerType_AttackAddFinalPertGetIgnoreDefRatetGetSkillAtkRatet GetDamagePVPt GetDamagePVEtGetNPCHurtAddPertGetDamagePerPVPtTriggerType_AddPVPDamagePert GetFinalHurttTriggerType_AttackAddFinalValuetGetOnlyFinalHurtRQtGetFinalHurtReducePertTriggerType_dFinalHurtReducePertGetIgnoreDefRateReducetGetSkillAtkRateReducetGetDamagePVPReducetGetDamagePerPVPReducetTriggerType_DamageReducePVPtGetFinalHurtReducet GetBeHurtPertFBCommontGetRecordMapIDR^RjR%tFormulaControltGetCompileFormulaR¾RötIsHorsePetRobBossRR¢Rit&Def_SkillID_HorsePetRobBossKillCntBufftGetSkillR¼R½tDef_FBMapID_FamilyBossMaptGetFamilyBossHurtPerRuR7tGetBossFinalHurtPertGetObjAtkStateMarkRétDef_FBMapID_CrossBattlefieldR[tGetFBPlayerHurtNPCMultiValuetDef_HurtType_YinjitDef_HurtType_RealmSupress({RSR•R²R(R)RDR„tatkwargst
multiValuetatkPert summonAtkObjtsummonAtkPerValuet ownerAtkObjRRtaRealmLVtdRealmLVt aRealmIpyDatat dRealmIpyDatat aRealmLVLarget dRealmLVLargetatkTypetaLVtdLVtaHittdMissRxt    atkIsBosstsuppressValueLVtsuppressValueFPt
suppressLVtsuppressFightPowertsuppressReMaxHPtsuppressNPCFightPowert fbFightPowert
fbBaseHurttsuppressLVIpyDatatturnFightTimelinetmustHitt petNPCOwnerthelpBattleFormatKeytmissRateFormulatmissRatethurtValueExPerR    R–t
isLuckyHitt    aLuckyHittdLuckyHitReduceRŸt    aSuperHittdSuperHitReducetaSuperHitHurtPertdSuperHitHurtDefPert superHitPertthumpPert dDamChanceDeft isZhuxianHittaZhuxianHurtPertdZhuxianReducePert isDeadlyHittdeadlyHitMultiValuet_t wReFightPowertworldLVt
wLVIpyDatatatkSkillPerYinjitrandtaMinAtktaMaxAtktenemyObjtaPetStrengthenPert dPetWeakenPertaIceAtktdMinAtktdMaxAtktdDefR+R,tdIceDeft aFinalHurtPertaIgnoreDefRatet aSkillAtkRatet
aDamagePVPt
aDamagePVEtaNPCHurtAddPert aDamagePerPVPt
aFinalHurttaOnlyFinalHurtt aFightPowertdFinalHurtReducePertdIgnoreDefRateReducetdSkillAtkRateReducetdDamagePVPReducetdDamagePerPVPReducetdFinalHurtReducet
dBeHurtPert dFightPowertmapIDthurtDisttsuppressFormulaKeyLVtsuppressLVFormulatsuppressFormulaKeyFPtsuppressFPFormulatSuppressValueRealmRatetsuppressRealmRateMapKeyRR+RytreduceFinalHurtPerR@t
limitIndext atkStateMarkt defStateMarkR˜tsuppressLVGroupt
mapHurtKeytsuppressLVHurtKeyt
aBurnValuetaBurnPert hurtFormulaR
t fbMultiValue((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRsV     **     *   *   "$    $      $'   !%
 
""     "        $
 
 
 
    
     "$-                
 -     #     #$  cCsd}tjd|ƒ}d}||krDt|d|dƒ}nt|d|dƒ}d}x$|D]}||j|dƒ7}qhW||S(Nit
RealmGroupiiÿÿÿÿ(RtRuRÒR(RRt    gridIndextsuppressRealmHurtPertsuppressRealmDictt
plus_minust suppressListtrealmLV((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetRealmHurtPerÉ    s  cCs«|tjkrXt|ƒ\}}|r6|jƒ}qdtj|ƒ}|dkrddSn |jƒ}|tjkr•tj|ƒ}|dkr¡dSn |jƒ}||fS(Ni(ii(ii(RRR¢tGetOfficialRankRYt
GetRealmLV(RSR•RRRR+RR((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRžÜ    s    cCs#t|||j|j|ƒt|||||ƒ|jtjƒ}|jƒtj    ks_|rÒt
j ||j ƒt
j ||j ƒ|jƒtjkr¶|jtj|jƒƒqÒ|jtj|jƒƒntj|||j|j |j|ƒ|j rtj||dtj|ƒndS(N(t CalcBounceHPR~R|t CalcSuckBloodRqRbRÛRRR°RFtSetLastHurtValueRtSetLastBeHurtValueRRstDef_PlayerKey_LastHurtNPCObjIDRtDef_PlayerKey_LastAttackerObjIDRÏtAddTurnObjHurtValueRhRR1tTriggerType_BeHurt(RSR•R²R*RDR((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR'ù    s%    cCs¸|jƒ}|tjkrdS|tjkr•|jƒtjkrGdS|jƒtjkr`dS|jƒtjkrydS|jƒtj    kr•dSn|j
ƒ}|tj kr´dSdS(NR—tRobott    HelpRobottPetR–( RRR°RR¶RbtntRobotR!R·tntPetRýRQ(R¸Rû((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRõ
s   cCsCtj|ƒ}t|ƒs't|ƒr5|s1dSdS|s?dSdS(NsPVE_%ssPetVE_%ssPVP_%ssPetVP_%s(RRt IsPVENPCObj(RSR•tisPet((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt GetAtkState+
scCsy|jƒ}|tjkrtS|jƒ}|tjkr>tS|tjkrutjtj|ƒ}|dkrutSnt
S(N( RRR°R;RýRQRRYtGetSummonNPCOwnerR1R2(R¸RûtnpcOwner_Player((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRw6
s   c CsM|jƒsdStj|ƒdkr)dS|jƒ}|tjkr/|jƒ}t||||ƒ\}}|tjkrütj    |ƒrü||krüt
j d|ƒ}    t
j d|ƒ}
|    rË|    j ƒnd} |
rã|
j ƒnd} | | krüdSnt ||tƒ r/tj|jƒ|ƒ r/dSntj|ƒ} | tj|ddtjƒ7} | tj|||tjƒ7} || ttjƒ}t|tj|ddtjƒƒ}t|tj|ddtjƒƒ}|dkrídS|rÿ|jƒnd}tjd|j ƒ|j ƒ||| |fƒ|tj|ƒkrO|ntj|ƒd}t!|||ƒ}t"tj|ƒ|dƒ}|jƒ}|tjkræ|j#ƒtj$krÓt%j&||ƒq0tj'||ƒnJ|tjkr0tj'||tƒ|tjkr0t(|||dƒq0nt)||||tj*ƒdS(NiRis\        ·´µ¯: defID=%s,atkID=%s,skillID=%s,hurtValue=%s,defObj_DamageBackRate=%s,bounceHP=%ssPlayer bounce Player(+RRFRRRR°RžRRbR“RtR"RŸRR;RúRR%tGetDamageBackRateRhRiR1tTriggerType_BounceHPPerR³t!TriggerType_BounceHPPerByAttackerRåR¿R¾tTriggerType_BounceHPRRRçRRtR¾RýRQRRRRt ChangeHPViewtDef_HurtType_BounceHurt(RSR•R
R    R²RRRRRRRRtdefObj_DamageBackRatetbounceHPRxt    realSubHPR-((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRjL
sT   * ,%%     &. cCsã|j|j}}|sdS|r6tj|ƒr6dS|jtjƒrKnOtjƒj    ƒ}||j
tj ƒtj tj kr‡dS|j tj |ƒ|jƒ}|jƒ}tj|ƒ}    |tjkr/|tjkrtj|ƒdkr|    |jƒ7}    n|tjkr/|    tj|ƒ7}    q/ntj|||tjƒ}
|
tj|||tjƒ7}
|tjkrš|
tj|||tjƒ7}
n1|tjkrË|
tj|||tjƒ7}
n|
tj |ƒ7}
tj!|ƒ} t"d|
| ƒ} t#|| dtj$ƒ} | |    }|dkr5dS|rG|j%ƒnd}tj&|t'tj(|ƒtj|ƒ|ƒt)ƒt*|d||tj,ƒtj-d|j.ƒ|j.ƒ| |
| ||| |    tj|ƒ|f ƒdS(Nigð?s\        ÎüѪ: atkID=%s,defID=%s,×îÖÕ±ÈÀý=%s(%s-%s),ÉËѪ=%s,×ÜÎüѪ=%s(%s+%s),HP=%s,skillID=%s(/RR|RªtisPassiveSkillRqRbRÛRRtGetTickt GetTickByTypetTYPE_Player_Tick_SuckBloodtTYPE_Player_Tick_Timet SetTickByTypeRRFt GetAtkBackHPRR°RRt GetKillBackHPR?tGetPVPAtkBackHPRhR³tTriggerType_Buff_SuckBloodPerRiRŠt TriggerType_SuperHitSuckBloodPerRŽt TriggerType_ThumpHitSuckBloodPert GetSuckHPPertGetSuckHPDefPerR¾R¾R¿RRReRæR;R€R1tDef_HurtTYpe_RecoveryRçR(RSR•R²R*RDR
R    RRtsuckHPt    suckHPPert suckHPDefPertsuckHPPerFinalt suckHPByPert suckHPTotalRx((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRk›
sN  $""
 2    >cCs$|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‡RbtTYPE_Player_Tick_SuckMagicR‰RŠRRFRt GetKillBackMPR?tGetAtkBackMPPerR¾RåR¿tSetMPRetGetMaxMPtGetMP(RSR•R
RDtsuckMPt 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 (R2RRR°R`tpaDieRRýRþRt 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;Rw(R&R<R((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR9 s cCsŒ|jƒ}|jƒ}i}|tjkr=tj|}n||krqtjƒ}||_tj||ƒn|||<|tj|<dS(N(R%RRªtChPyNetSendPackttagMCAddMaliciousAtkPlayert AtkPlayerIDt NetPackCommont SendFakePack(R*t    defPlayerRDt 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°RDR±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ªRtRïR(R/R«ttagMCDelMaliciousAtkPlayerR­R®R¯(R&RDRt
defendTimeR³R±tatkTicktdelAtkPlayerPack((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytProcessMaliciousAttackPlayer8 s        c
CsÔ|jtjƒ}|jtjƒ}|rŸ||krŸtj|ƒ}|jtjkrgtjtjfS|j    ƒ|j    ƒkrtj
tjfStj tjfSt ||ƒr¾tjtjfSt j|jƒ|jƒƒ}t j|jƒ|jƒƒ}|tjks|tjkr(tj tjfS||krDtjtjfS|jƒtjkritjtjfSt|ƒr…tjtjfSt|ƒr¡tjtjfSt||ƒrÀtj
tjfS|jƒ}|tjkrëtj tjfS|tjkrZt ||ƒrtj tj!fSt"||ƒr8tj tj#fSt$||ƒr#tj tj%fSnÉ|tj&kr‹t'||ƒr#tj tj(fSn˜|tj)krt ||ƒr¹tj tj!fS|jtj*ƒ}|jtj+ƒ}    |tj,ksþ|    |j-ƒkr#tj tjfSn|tj.kr#nt/j0||ƒrEtj tj!fS|tj1kr¥|j2ƒt3j4ƒkr|tj tj5fS|j2ƒ r¥t6ƒr¥tj tj7fSnt8||ƒrÄtj tjfStj
tjfS(s*
    PKģʽ
        0    ºÍƽģʽ    IPY_GameWorld.amPeace            ¶ÔËùÓÐÍæ¼Ò¶¼ÊÇÓѺ㬶ñÒâ¹¥»÷×Ô¼ºµÄÍæ¼Ò³ýÍâ
        1    È«Ìåģʽ    IPY_GameWorld.amAll              ¶ÔËùÓÐÍæ¼Ò¶¼Êǵжԣ¬¼Ò×åÇøÓòͬÃËÍæ¼Ò³ýÍâ  
        2    ·ÀÎÀģʽ    IPY_GameWorld.amCountry          ±¾·þÍæ¼ÒÓѺã¬Ëû·þÍæ¼Ò¶¼ÊǵжÔ
        5    Ç¿ÖÆÄ£Ê½    IPY_GameWorld.amFamily           ¶ÓÓÑ¡¢ÏÉÃ˳ÉÔ±¡¢Í¬ÕóÓªÓѺã¬ÆäËûÍæ¼ÒµÐ¶Ô
        7    Ëø¶¨µ¥Ò»Ä¿±êģʽ IPY_GameWorld.amContest       Ö»¶ÔÑ¡ÖÐÄ¿±êÓÐÉ˺¦, Ä¿Ç°Ö»ÓÃÓÚ²¿·ÖBOSSÕù¶áµØÍ¼
        
    ³¡¾°ÇøÓò
        ÆÕÍ¨ÇøÓò    IPY_GameWorld.gatNormal    ¿É¸ù¾Ý²»Í¬PKģʽPK£¬»÷É±Íæ¼ÒÓгͷ£
        °²È«ÇøÓò    IPY_GameWorld.gatSafe      ²»ÄÜPK
        ×ÔÓÉÇøÓò    IPY_GameWorld.gatFreePK    ¿É¸ù¾Ý²»Í¬PKģʽPK£¬»÷É±Íæ¼ÒÎ޳ͷ£
        
    ¼ò»¯¹ØÏµÅжÏÂß¼­£º ¿É·ñ¹¥»÷È«Óɹ¥»÷ģʽ¾ö¶¨£¬²ß»®Í¨¹ýµØÍ¼Ä¬ÈÏģʽ¼°¿ÉÇл»Ä£Ê½¿ØÖÆPK¹ØÏµ
    
    Ç±¹æÔò:
        °²È«ÇøÓò²»¿É¹¥»÷
        ÆÕÍ¨ÇøÓòÖÐPKÖµ´ïµ½ÉÏÏÞ²»Äܹ¥»÷±ðÈË
        Ë«·½²»Í¬ÔÚÍ¬Ò»ÇøÓò²»¿É¹¥»÷
        ²»¿É¹¥»÷´ò×øÖеÄÍæ¼Ò
        ¶ñÒâ¹¥»÷×Ô¼ºµÄÍæ¼ÒÎÞÂÛʲôÇé¿ö϶¼¿É·´»÷£¬²»ÓÃÇл»Ä£Ê½
    (9RqRbRWt MirrorAttacktGetMirrorBattleByIDtbatStatetDef_MirrorBatState_FighttType_Relation_NoneRçt
GetFactiontType_Relation_EnemytType_Relation_FriendRñR5R6R7R8RRXtDef_PASysMessage_IsSafeAreatDef_PASysMessage_CurAreaNotPKR`tpaSittDef_PASysMessage_SitNotPKRðtDef_PASysMessage_NewGuyt Def_PASysMessage_NotAttackNewGuyR9t GetAttackModetamPeacetDef_PASysMessage_AttackModetamFamilyt CanAlikeTeamtDef_PASysMessage_NotAttackTeamtCanAlikeFamilyt Def_PASysMessage_NotAttackFamilytCanAlikeFactiont!Def_PASysMessage_NotAttackFactiont    amCountryt IsSameServert Def_PASysMessage_NotAttackServert    amContesttDef_PlayerKey_SelectObjTypetDef_PlayerKey_SelectObjIDR°R%tamAllRútIsAssistRelationt    gatNormalR:R?t GetMaxPKValuetDef_PASysMessage_AttackNotPKtIsPKProtectTimetDef_PASysMessage_PKProtectTimeRó(
R&R<RYRZtbattleRLttagPlayerAreaTypetcurPlayerAttackModet selectObjTypet selectObjID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytGetPlayersRelationW sr    !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(&R1RbR¿RçR5R6R7R8RRXRÃRÄRYRzR°RR8R9RtGameFuncID_TruckR?RWtGetFuncLimitLVRItGetTruckTeamIDtGetTruckFamilyIDRJRÛRÉRÊtpncGraytpncRedRÂR$RhRÎRÐRÁ(
R&t curTagTruckRLRMRCtcurTruckOTeamIDtcurTruckFamilyIDROtcurPlayerTeamIDtcurPlayerFamilyID((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(
RtRuR;RtGetCurrentTimetyeartmonthtdaytdatetimeR2( tpkProtecTimeListt    startTimetendTimet    startHourt startMinutetendHourt    endMinutetcurTimetcurYeartcurMonthtcurDayt startDateTimet endDateTime((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÞ s    cCstS(N(R2(R&RC((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÔ$ scCs.|jƒ}|jƒ}|o-|o-||kS(N(RÀ(R&RCt
curFactiont
tagFaction((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÑ- s  cCs.|jƒ}|jƒ}|o-|o-||kS(N(Rh(R&RCt curFamilyIDt tagFamilyID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÏ6 s  cCs.|jƒ}|jƒ}|o-|o-||kS(N(R$(R&RCRðt curTagTeamID((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRÍ? s  cCs—tj|ƒdkrdStj|ƒr,dS|jƒtjkr^tj|ƒ}|jƒdSt    j
||||ƒszdSt j |ƒ}|jƒdS(Ni( RFRRÏt    SetKilledRRR°R?tSetDeadtChNPCt OnCheckCanDieRYRØ(RSt curObjDetelR²RDt playerControlt
npcControl((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytDoLogic_ObjDeadH s
 
cCs    tjƒjƒ}tjƒjƒ}|tjkrDtjdƒdS|jƒ}tj    |ƒ}|j
ƒ}|j ƒ}tj |ƒ}    |jƒ}
tj    |ƒ} |j
ƒ} |j ƒ} tj |ƒ}|j t|tjtjƒƒ|j t| tjdƒƒdS(Ns;    __GiveKill_Player_ValuePrize ¸±±¾µØÍ¼É±È˲»¸ø½±Àø£¡£¡£¡i(RR^R_RjRR`RçRîR?t GetPrestigetGetInfamyValueR:R?tSetInfamyValueReRbtDef_KillValue_NotorietyRpR¾tDef_BeKilledValue_Notoriety(R&RRDRòRMtattackLVtattackPrestigetattackNotorietyt attackPkValuetattackFightPowertdefendLVtdefendPrestigetdefendNotorietyt defendPkValuetdefendFightPower((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyRXc s&        cCsš|jƒtjkr1|jƒtjkr1tSntjƒj    |j
ƒ|j ƒ|j
ƒ|j ƒƒ}|jƒtj kr–| r–t j|dƒn|S(NtPK_liubo_827276(RRRRÝRbtDef_NPCType_Boss_BlueR2RR^t    CanLineToR7R8R°R?RW(R{Rt    canLineTo((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pytCanAttackByPath± sc    Csnd\}}|r.|jƒ|jƒ}}n|j||tj|tj||||jƒ|jƒƒdS(Ni(ii(RRR€RRRR(RÜtsrcObjRxtchangeHPt    changTypetsrcIDtsrcType((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyR€ s  (RËRRbRR?RYRªRÅR[RTR$RR5RIt PlayerFamilyRht PlayerSuccessR8RRt    PlayerVipRíRtRRFRfRRR»R«RúR®RöRëR R:RûRÏR÷tmathRR R#R'R.R0R>RERPRdR]R–RšR™R;R R©RµR±R¹RÃRÄRÌRÏRäRÕRìRÐRðRñRóRõRRRRR-R2RRRNR¢RRR]RbRsRuR×RvRxR{R|R†R RR‘R’R“R”RÕRÙRÖRãRøRýRR R R R5R#RRRtR1RRgRžR'RõRyRwRjRkR¢R©R9R—R˜RºRåRòRÞRÔRÑRÏRÍRRXR%R€(((sxE:\SnxxServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Attack\AttackLogic\AttackCommon.pyt<module>s                                                           #                *    (    G                          
                          %                               0            H    %  4 !    $                + '                 "    ,        P                        )            I                                v    a    B          ÿ¬                             O    ?    "                        ƒ    6                                            N