Форум сайта python.su
Помогите разобраться со скриптом, точнее с деобфускацией. Байс64 легкоЮ а дальше путаюсь в лямбдах.
exec 'import re;import base64' exec (lambda p, y: (lambda o, b, f: re.sub(o, b, f))('([0-9a-f]+)', lambda m: p(m, y), base64.b64decode('ZSAxCmUgNiAsIDdiCmUgMmQKZSA4ZgplIDc2CmUgYTgKMzYgNWUgLiBjMSBlIDkyICwgMjIgLCAxYwozNiBjNSBlIDRkCjM2IDg0IGUgOTEKMzYgODMgZSAxZiAsIDNkCjM2IDZmIGUgYzkKMzYgYTggZSBkMSAsIDliICwgY2EgLCBhOSAsIGEwICwgYzcgLCBhNSAsIDhiICwgY2YKMzYgMmUgZSBiMQozNiAyZSBlIGMwCjM2IDZhIGUgNGUgLCA0MwpkMCA2NCAtIDY0OiBkOAo1NCA9IDFmIC8gMTAKZDAgODEgLSA4MTogMmMgKyAzZSAlIGJjICUgMzcgLSBkNgo2NSBhZSA6CglkMAk2NgktCTY2Ogk0YgkqCTE3CSoJZAoJNGYJPQkxZgoJMjUJPQkwLmQ3CgkyYQk9CTAuZDcKCWQwCTI3CS0JMjc6CTE4CS8JNWIJLQliNwkuCTMwCgkzMwk5MwkoCWQ1CSwJYwkpCToKCQlkNQkuCWJmCT0JOGYJLglhNAkoCSkKCQlkNQkuCWMJPQljCgkJZDUJLgk1Zgk9CTYJLgk3OQkoCSkKCQlkNQkuCWYJPQkxYgoJCWQwCTlkCTU3CSgJZDUJLgljCSwJMmQJLgkyZAkpCToKCQkJNGQJKAknNjUJPQknCSwJZDUJLgljCS4JODcJLgk4YQkpCgkJCWEzCTg2CSgJJ2MJYzMJYmUJYQkyZAlhZCcJKQoJCQlkMAk3MwktCTczOgkxMwkvCTFhCgkzMwk0MAkoCWQ1CSkJOgoJCWI4CT0JN2IJLgk2ZAkoCWQ1CS4JYwkuCTYyCSkKCQlkMAk0NwktCTQ3OgkxZQklCTMJKwk4CSsJMTkJLQk3CgkJMWQJPQk2CS4JNWQJKAkpCgkJNjAJPQkxZAkuCTQxCgkJY2MJPQkxZAkuCWM0CgkJYTcJPQkxZAkuCWM4CgkJZDAJNTYJLQk1NjoJMWEJLQkzNwoJCWQwCWI4CTYzCTFiCToKCQkJNGQJKAknYjAJYWYnCSkKCQkJZDkKCQlkMAlkNQkuCWYJNjMJMWIJOgoJCQkzYQk9CWI4CgkJN2EJOgoJCQkzYQk9CWQ1CS4JZgoJCWQ1CS4JZgk9CWI4CgkJZDAJNzgJLQk3ODoJMWEJLwlkCS0JMmMJLgk4CgkJMzkJPQkoCTFkCS4JNTIJKAkpCS0JZDUJLgljCS4JNjIJKQkuCTllCgkJMzQJPQlhNwkuCThjCVsJJ2EyJwldCgkJODkJPQlhNwkuCThjCVsJJzk5JwldCgkJNTEJPQkzNAkqCTM0CS8JODkKCQlkMAkzOQk8PQk1MQk6CgkJCTdmCT0JYTgJLgk4YgkoCSgJMzkJKgk4OQkpCS8JKAkzNAkqCTM0CSkJKQkqCTAuNQoJCTdhCToKCQkJN2YJPQkwLmM2CgkJNWEJPQlhOAkuCTliCSgJN2YJKQkqCTM0CS8JKAk4OQkqCWQ3CSkKCQlkMAk5NAktCTk0Ogk3CgkJODIJPQkoCWI4CS4JY2IJLQkzYQkuCWNiCSkJLwk1NAoJCWMyCT0JKAliOAkuCTljCS0JM2EJLgk5YwkpCS8JNTQKCQk1NQk9CSgJYjgJLgljZQktCTNhCS4JY2UJKQkvCTU0CgkJZDAJMzEJLQkzMToJZDYJKwlkCS4JMTkKCQk1Ywk9CWI4CS4JY2IJKwk4MgkqCTVhCgkJNmMJPQliOAkuCTljCSsJYzIJKgk1YQoJCTUwCT0JYjgJLgljZQkrCTU1CSoJNWEKCQlkMAkyMAktCTIwOgkzNwkrCWQ4CS0JMWUJJQlkCS4JYmMKCQkyMQk9CTdiCS4JNmQJKAk1YwksCTZjCSwJNTAJKQoJCWQwCTkwCS0JOTA6CWQ2CSsJMzAJLwk1YgklCWQ2CS0JMmMKCQlkMAkyOQktCTI5Ogk1YgkvCTNlCgkJZDAJMjQJLQkyNDoJMmMJJQk1YgkrCTM3CSsJMTkJKwliNwoJCTIxCS4JOWMJKz0JZDUJLgljCS4JNDQJLgk5YQlbCSc3NycJXQkuCTljCSsJZDUJLgljCS4JNDQJLglhNglbCSc2NycJXQlbCTAJXQkuCTljCgkJZDAJNzAJLQk3MDoJMTcJJQkxNwkuCTgJJQlkCSoJNWIJJQkzMAoJCWQwCTIzCS0JMjM6CWQ4CSsJNGIKCQlkMAk2OAktCTY4OgkxOAkuCTMwCS4JZDgKCQk2MAkuCTJiCSgJMjEJKQoJCWQzCT0JZDUJLgk0OAkoCSkKCQlkMAlkMwk2MwkxYgk6CgkJCWQ5CgkJZDUJLgk1Zgk9CTYJLgk3OQkoCSkKCQk2MAkuCTQ5CSgJMjEJLAlkMwkpCgkJNjAJLgkzYgkoCSkKCQlkMAkxNAktCTE0OgkxNwkuCTRiCS8JMWUKCQlkMAkzOAktCTM4OglkNgklCWQ4CS4JNwktCTEzCSsJMWUKCTMzCTQ4CSgJZDUJKQk6CgkJZDMJPQk2CS4JNzkJKAkpCS0JZDUJLgk1ZgoJCWQwCWQzCTwJZDUJLgkyNQk6CgkJCWQ5CTFiCgkJN2EJOgoJCQlkMAlkMwk+CWQ1CS4JMmEJOgoJCQkJZDMJPQlkNQkuCTJhCgkJCWQ5CWQzCgkJCWQwCTY2CS0JNjY6CWJjCSoJYmMJLgkxMwkuCTM3CS0JMTMKCTMzCTdlCSgJZDUJKQk6CgkJNDYJPQk2CS4JYwkoCSkKCQlkOQk1NwkoCTQ2CSwJMmQJLgkyZAkpCTRjCTQ2CS4JYmYJIT0JZDUJLgljCS4JYmYKCQlkMAk5NgktCTk2OgkyYwklCTMwCSUJM2UKCTMzCWJkCSgJZDUJKQk6CgkJZDkJZDUJLgliZgoJCWQwCTc4CS0JNzg6CTNlCS0JMWUJKglkCSsJNWIJKwkzCSsJMwoJCWQwCTExCS0JMTE6CTMJLQlkCSUJNwklCTMJLwkxOAktCWQKCQlkMAk3NAktCTc0OgkzCSoJMmMKNjUJOWYJOgoJYjUJPQkxYgoJZDAJODAJLQk4MDoJMWEJKglkOAkvCTE5CglACWIzCgkzMwk3ZAkoCWI1CSkJOgoJCTlmCS4JYmIJKAkpCgkJOWYJLgliNQk9CWI1CgkJMWQJPQk2CS4JNWQJKAkpCgkJMWQJLgkzMgkuCWI5CSgJJzZiJwkpCgkJMWQJLgk0MQkuCTU5CT0JYTEKCQk5ZgkuCTQwCSgJYjUJLgliZAkoCSkJKQoJCWQwCTkJLQk5OgkxZQkrCTMwCSUJMWUJKwkzNwkuCTEzCgkJZDAJMzEJLQkzMToJNWIJKwkxYQkrCTFhCS8JZDYKCUAJYjMKCTMzCWJiCSgJKQk6CgkJZDAJOWYJLgliNQk2MwkxYgk6CgkJCWQ5CgkJMWQJPQk2CS4JNWQJKAkpCgkJOWYJLgliNQk9CTFiCgkJMWQJLgk0MQkuCTU5CT0JYmEKCQkxZAkuCTMyCS4JYjkJKAknN2MnCSkKCQlkMAkyNgktCTI2OgliYwoJQAliMwoJMzMJNDIJKAkpCToKCQlkOQk5ZgkuCWI1CTYzCTlkCTFiCgkJZDAJMTIJLQkxMjoJYmMJJQkxOAkvCTcJJQk1YgoJQAliMwoJMzMJNDAJKAliZgkpCToKCQlkMAk5ZgkuCTQyCSgJKQk0Ywk5ZgkuCWI1CS4JYmQJKAkpCT09CWJmCToKCQkJOWYJLgliNQkuCTQwCSgJKQoJCQk2CS4JOTUJKAk1NAksCTkxCSgJOWYJLgk0MAksCWJmCSkJKQoJCQlkMAkyOQktCTI5OgliYwoJCQlkMAkyMwktCTIzOgk1YgkuCWQ2CgkJCWQwCTk4CS0JOTg6CTNlCSUJMTgJKgliNwkqCTE4CgkJCWQwCTQ1CS0JNDU6CTE5CS4JMTgKMzMJYjIJKAlkNQksCWIJLAkyOAksCWFiCSwJOGUJPQkxYgkpCToKCWI0CT0JMQkuCTNmCglkMAk1MwktCTUzOgk4CSsJNGIJKgkzMAoJZDAJNjEJLQk2MToJMzcJKgkxMwkvCWJjCS4JZDgJLgkxOAoJZDAJYjQJLgkyZgkoCTEJLglhYQksCTI4CSkJNGMJYgk6CgkJNzUJPQk2CS4JYwkoCSkKCQlkMAk3NQk2MwkxYglkMgk5ZgkuCTQyCSgJKQk6CgkJCTlmCS4JYmIJKAkpCgkJCWQ5CTNjCSgJZDUJLAliCSwJMjgJLAlhYgksCThlCSkKCQk5ZgkuCTdkCSgJYWUJKAk3NQkpCSkKCQlkOQoJCWQwCTMxCS0JMzE6CWQ2CS0JMTMJLgkxOQklCTE4CS0JMmMKCWQwCWI0CS4JMmYJKAkxCS4JYjYJLAkyOAkpCTRjCWIJOgoJCTlmCS4JYmIJKAkpCglkOQkzYwkoCWQ1CSwJYgksCTI4CSwJYWIJLAk4ZQkpCglkMAk0CS0JNDoJZDYJLwk3CS4JMwozMwk0YQkoCWQ1CSwJYgksCTI4CSwJYWIJLAk4ZQk9CTFiCSkJOgoJYjQJPQkxCS4JM2YKCWQwCTM1CS0JMzU6CTgJJQk0YgoJZDAJNzAJLQk3MDoJMwkqCWI3CglkMAliNAkuCTJmCSgJMQkuCWFhCSwJMjgJKQk0YwliCToKCQk3NQk9CTYJLgljCSgJKQoJCWQwCTc1CTYzCTFiCToKCQkJOWYJLgliYgkoCSkKCQkJZDkJNjkJKAlkNQksCWIJLAkyOAksCWFiCSwJOGUJKQoJCTlmCS4JN2QJKAlhZQkoCTc1CSkJKQoJCWQ5CgkJIzg1CWNkCTk3CWI1CThkCglkMAliNAkuCTJmCSgJMQkuCWI2CSwJMjgJKQk0YwliCToKCQk5ZgkuCWJiCSgJKQoJZDkJNjkJKAlkNQksCWIJLAkyOAksCWFiCSwJOGUJKQoJZDAJNjYJLQk2NjoJYmMJKwkxZQkrCTFlCS0JMzcKMzMJNmUJKAlkNQksCWIJLAkyOAksCWFiCSwJOGUJPQkxYgkpCToKCWI0CT0JMQkuCTNmCglkMAk1NgktCTU2Ogk3CS4JMTgJKgkzCS4JMTgKCWQwCTcyCS0JNzI6CTMJLwkzNwkqCTE3CS0JMTkKCWQwCWI0CS4JMmYJKAkxCS4JYWEJLAkyOAkpCTRjCWIJOgoJCTc1CT0JNgkuCWMJKAkpCgkJZDAJNzUJNjMJMWIJOgoJCQk5ZgkuCWJiCSgJKQoJCQlkOQlhYwkoCWQ1CSwJYgksCTI4CSwJYWIJLAk4ZQkpCgkJOWYJLgk3ZAkoCWFlCSgJNzUJKQkpCgkJZDkKCQlkMAkxNQktCTE1OgliNwkrCTE4CS0JYmMJLwkxMwoJZDAJYjQJLgkyZgkoCTEJLgliNgksCTI4CSkJNGMJYgk6CgkJOWYJLgliYgkoCSkKCWQ5CWFjCSgJZDUJLAliCSwJMjgJLAlhYgksCThlCSkKCWQwCTU4CS0JNTg6CWQ4CSUJMWEKCWQwCTcxCS0JNzE6CTEzCSsJNwklCWQ4CSsJYjcJLQk4CjNjCT0JOTIJLglkNAo2OQk9CTIyCS4JZDQKYWMJPQkxYwkuCWQ0CmQwCTg4CS0JODg6CTE4CS0JZAklCTEzCjkyCS4JZDQJPQliMgoyMgkuCWQ0CT0JNGEKMWMJLglkNAk9CTZlCmQwCTE2CS0JMTY6CTRiCSoJMzAJJQk4')))(lambda a, b: b[int('0x' + a.group(1), 16)], '0|CommandMapping|02|iI1Ii11111iIi|4|5|BigWorld|iiIIIII1i1iI|ii1II11I1ii1I|9|a|isDown|target|o0OoOoOO00|import|__targetLastShotPoint|10|11|12|OOooOOo|14|15|16|iIiiiI1IiI1I1|OOOo0|oO0o0ooO0|ii11ii1ii|None|StrategicControlMode|o0oO0|oO0ooO|SERVER_TICK_LENGTH|20|Ooo00O00O0O0O|SniperControlMode|23|24|__INSUFFICIENT_TIME_DIFF|26|27|key|29|__MAX_TIME_DIFF|_VehicleGunRotator__updateShotPointOnServer|Iii1I1|Vehicle|projectile_trajectory|isFired|I1IiI|31|soundNotifications|def|OOo000|35|from|ii1I|38|OOooo0000ooo|o00oOoo|_VehicleGunRotator__updateGunMarker|OOO0OOO00oo|SHELL_TRAJECTORY_EPSILON_CLIENT|OO0O0O|g_instance|update|gunRotator|hasAutoAim|collideVehiclesAndStaticScene|typeDescriptor|45|o0o00ooo0|47|__getTimeDiff|_VehicleGunRotator__rotate|O0oo0OO0oOOOo|iIiI|and|LOG_NOTE|collideDynamicAndStatic|__ROTATION_TICK_LENGTH|I1iiiiI1iII|I11i1i11i1I|getOwnVehiclePosition|53|OO0o|O0OoOoo00o|56|isinstance|58|clientMode|OOO0O|Oo|OoOooOOOO|player|AvatarInputHandler|__time|oo00|61|position|is|64|class|66|turretPositions|68|i1II1|ProjectileMover|target_captured|i11iiII|Vector3|O0o0Ooo|ModelHitTester|70|71|72|73|74|o00O|BattleReplay|hullPosition|78|time|else|Math|target_unlocked|add|isTankMarked|Iiii|80|81|IiI1i|constants|functools|intercept|TypeError|__class__|88|O0|__name__|asin|shot|deactivation|event|uuid|90|partial|ArcadeControlMode|__init__|94|callback|96|default|98|gravity|chassis|sin|y|not|length|oOOo0oo|atan2|False|speed|raise|uuid4|fmod|hull|Oo0oO0ooo|math|atan|CMD_CM_LOCK_TARGET|mods|Oo0O0O0ooO0O|instance|ii11i|none|shotPos|computeProjectileTrajectory|oO|staticmethod|ii1i1I1i|autoaim|CMD_CM_LOCK_TARGET_OFF|Ooo00oOo00o|O00ooOO|play|True|remove|iiiii|getId|be|id|getShotAngles|control_modes|OOo0o0|must|inputHandler|debug_utils|785398163|sqrt|vehicleTypeDescriptor|segmentMayHitVehicle|cos|x|o00|the|z|tan|if|pi|or|II|handleKeyEvent|self|ooO0OO000o|2|i11iIiiIii|return'.split('|'))
Офлайн
практически разгадал ответ, есть
1. расшифрованная строка из base64
e 1
e 6 , 7b
e 2d
e 8f
e 76
e a8
36 5e . c1 e 92 , 22 , 1c
36 c5 e 4d
36 84 e 91
36 83 e 1f , 3d
36 6f e c9
36 a8 e d1 , 9b , ca , a9 , a0 , c7 , a5 , 8b , cf
36 2e e b1
36 2e e c0
36 6a e 4e , 43
d0 64 - 64: d8
54 = 1f / 10
d0 81 - 81: 2c + 3e % bc % 37 - d6
65 ae :
d0 66 - 66: 4b * 17 * d
4f = 1f
25 = 0.d7
2a = 0.d7
d0 27 - 27: 18 / 5b - b7 . 30
33 93 ( d5 , c ) :
d5 . bf = 8f . a4 ( )
d5 . c = c
d5 . 5f = 6 . 79 ( )
d5 . f = 1b
d0 9d 57 ( d5 . c , 2d . 2d ) :
4d ( ‘65 = ’ , d5 . c . 87 . 8a )
a3 86 ( ‘c c3 be a 2d ad’ )
d0 73 - 73: 13 / 1a
33 40 ( d5 ) :
b8 = 7b . 6d ( d5 . c . 62 )
d0 47 - 47: 1e % 3 + 8 + 19 - 7
1d = 6 . 5d ( )
60 = 1d . 41
cc = 1d . c4
a7 = 1d . c8
d0 56 - 56: 1a - 37
d0 b8 63 1b :
4d ( ‘b0 af’ )
d9
d0 d5 . f 63 1b :
3a = b8
7a :
3a = d5 . f
d5 . f = b8
d0 78 - 78: 1a / d - 2c . 8
39 = ( 1d . 52 ( ) - d5 . c . 62 ) . 9e
34 = a7 . 8c
89 = a7 . 8c
51 = 34 * 34 / 89
d0 39 <= 51 :
7f = a8 . 8b ( ( 39 * 89 ) / ( 34 * 34 ) ) * 0.5
7a :
7f = 0.c6
5a = a8 . 9b ( 7f ) * 34 / ( 89 * d7 )
d0 94 - 94: 7
82 = ( b8 . cb - 3a . cb ) / 54
c2 = ( b8 . 9c - 3a . 9c ) / 54
55 = ( b8 . ce - 3a . ce ) / 54
d0 31 - 31: d6 + d . 19
5c = b8 . cb + 82 * 5a
6c = b8 . 9c + c2 * 5a
50 = b8 . ce + 55 * 5a
d0 20 - 20: 37 + d8 - 1e % d . bc
21 = 7b . 6d ( 5c , 6c , 50 )
d0 90 - 90: d6 + 30 / 5b % d6 - 2c
d0 29 - 29: 5b / 3e
d0 24 - 24: 2c % 5b + 37 + 19 + b7
21 . 9c += d5 . c . 44 . 9a . 9c + d5 . c . 44 . a6 . 9c
d0 70 - 70: 17 % 17 . 8 % d * 5b % 30
d0 23 - 23: d8 + 4b
d0 68 - 68: 18 . 30 . d8
60 . 2b ( 21 )
d3 = d5 . 48 ( )
d0 d3 63 1b :
d9
d5 . 5f = 6 . 79 ( )
60 . 49 ( 21 , d3 )
60 . 3b ( )
d0 14 - 14: 17 . 4b / 1e
d0 38 - 38: d6 % d8 . 7 - 13 + 1e
33 48 ( d5 ) :
d3 = 6 . 79 ( ) - d5 . 5f
d0 d3 < d5 . 25 :
d9 1b
7a :
d0 d3 > d5 . 2a :
d3 = d5 . 2a
d9 d3
d0 66 - 66: bc * bc . 13 . 37 - 13
33 7e ( d5 ) :
46 = 6 . c ( )
d9 57 ( 46 , 2d . 2d ) 4c 46 . bf != d5 . c . bf
d0 96 - 96: 2c % 30 % 3e
33 bd ( d5 ) :
d9 d5 . bf
d0 78 - 78: 3e - 1e * d + 5b + 3 + 3
d0 11 - 11: 3 - d % 7 % 3 / 18 - d
d0 74 - 74: 3 * 2c
65 9f :
b5 = 1b
d0 80 - 80: 1a * d8 / 19
@ b3
33 7d ( b5 ) :
9f . bb ( )
9f . b5 = b5
1d = 6 . 5d ( )
1d . 32 . b9 ( ‘6b’ )
1d . 41 . 59 = a1
9f . 40 ( b5 . bd ( ) )
d0 9 - 9: 1e + 30 % 1e + 37 . 13
d0 31 - 31: 5b + 1a + 1a / d6
@ b3
33 bb ( ) :
d0 9f . b5 63 1b :
d9
1d = 6 . 5d ( )
9f . b5 = 1b
1d . 41 . 59 = ba
1d . 32 . b9 ( ‘7c’ )
d0 26 - 26: bc
@ b3
33 42 ( ) :
d9 9f . b5 63 9d 1b
d0 12 - 12: bc % 18 / 7 % 5b
@ b3
33 40 ( bf ) :
d0 9f . 42 ( ) 4c 9f . b5 . bd ( ) == bf :
9f . b5 . 40 ( )
6 . 95 ( 54 , 91 ( 9f . 40 , bf ) )
d0 29 - 29: bc
d0 23 - 23: 5b . d6
d0 98 - 98: 3e % 18 * b7 * 18
d0 45 - 45: 19 . 18
33 b2 ( d5 , b , 28 , ab , 8e = 1b ) :
b4 = 1 . 3f
d0 53 - 53: 8 + 4b * 30
d0 61 - 61: 37 * 13 / bc . d8 . 18
d0 b4 . 2f ( 1 . aa , 28 ) 4c b :
75 = 6 . c ( )
d0 75 63 1b d2 9f . 42 ( ) :
9f . bb ( )
d9 3c ( d5 , b , 28 , ab , 8e )
9f . 7d ( ae ( 75 ) )
d9
d0 31 - 31: d6 - 13 . 19 % 18 - 2c
d0 b4 . 2f ( 1 . b6 , 28 ) 4c b :
9f . bb ( )
d9 3c ( d5 , b , 28 , ab , 8e )
d0 4 - 4: d6 / 7 . 3
33 4a ( d5 , b , 28 , ab , 8e = 1b ) :
b4 = 1 . 3f
d0 35 - 35: 8 % 4b
d0 70 - 70: 3 * b7
d0 b4 . 2f ( 1 . aa , 28 ) 4c b :
75 = 6 . c ( )
d0 75 63 1b :
9f . bb ( )
d9 69 ( d5 , b , 28 , ab , 8e )
9f . 7d ( ae ( 75 ) )
d9
#85 cd 97 b5 8d
d0 b4 . 2f ( 1 . b6 , 28 ) 4c b :
9f . bb ( )
d9 69 ( d5 , b , 28 , ab , 8e )
d0 66 - 66: bc + 1e + 1e - 37
33 6e ( d5 , b , 28 , ab , 8e = 1b ) :
b4 = 1 . 3f
d0 56 - 56: 7 . 18 * 3 . 18
d0 72 - 72: 3 / 37 * 17 - 19
d0 b4 . 2f ( 1 . aa , 28 ) 4c b :
75 = 6 . c ( )
d0 75 63 1b :
9f . bb ( )
d9 ac ( d5 , b , 28 , ab , 8e )
9f . 7d ( ae ( 75 ) )
d9
d0 15 - 15: b7 + 18 - bc / 13
d0 b4 . 2f ( 1 . b6 , 28 ) 4c b :
9f . bb ( )
d9 ac ( d5 , b , 28 , ab , 8e )
d0 58 - 58: d8 % 1a
d0 71 - 71: 13 + 7 % d8 + b7 - 8
3c = 92 . d4
69 = 22 . d4
ac = 1c . d4
d0 88 - 88: 18 - d % 13
92 . d4 = b2
22 . d4 = 4a
1c . d4 = 6e
d0 16 - 16: 4b * 30 % 8
spisok='0|CommandMapping|02|iI1Ii11111iIi|4|5|BigWorld|iiIIIII1i1iI|ii1II11I1ii1I|9|a|isDown|target|o0OoOoOO00|import|__targetLastShotPoint|10|11|12|OOooOOo|14|15|16|iIiiiI1IiI1I1|OOOo0|oO0o0ooO0|ii11ii1ii|None|StrategicControlMode|o0oO0|oO0ooO|SERVER_TICK_LENGTH|20|Ooo00O00O0O0O|SniperControlMode|23|24|__INSUFFICIENT_TIME_DIFF|26|27|key|29|__MAX_TIME_DIFF|_VehicleGunRotator__updateShotPointOnServer|Iii1I1|Vehicle|projectile_trajectory|isFired|I1IiI|31|soundNotifications|def|OOo000|35|from|ii1I|38|OOooo0000ooo|o00oOoo|_VehicleGunRotator__updateGunMarker|OOO0OOO00oo|SHELL_TRAJECTORY_EPSILON_CLIENT|OO0O0O|g_instance|update|gunRotator|hasAutoAim|collideVehiclesAndStaticScene|typeDescriptor|45|o0o00ooo0|47|__getTimeDiff|_VehicleGunRotator__rotate|O0oo0OO0oOOOo|iIiI|and|LOG_NOTE|collideDynamicAndStatic|__ROTATION_TICK_LENGTH|I1iiiiI1iII|I11i1i11i1I|getOwnVehiclePosition|53|OO0o|O0OoOoo00o|56|isinstance|58|clientMode|OOO0O|Oo|OoOooOOOO|player|AvatarInputHandler|__time|oo00|61|position|is|64|class|66|turretPositions|68|i1II1|ProjectileMover|target_captured|i11iiII|Vector3|O0o0Ooo|ModelHitTester|70|71|72|73|74|o00O|BattleReplay|hullPosition|78|time|else|Math|target_unlocked|add|isTankMarked|Iiii|80|81|IiI1i|constants|functools|intercept|TypeError|__class__|88|O0|__name__|asin|shot|deactivation|event|uuid|90|partial|ArcadeControlMode|__init__|94|callback|96|default|98|gravity|chassis|sin|y|not|length|oOOo0oo|atan2|False|speed|raise|uuid4|fmod|hull|Oo0oO0ooo|math|atan|CMD_CM_LOCK_TARGET|mods|Oo0O0O0ooO0O|instance|ii11i|none|shotPos|computeProjectileTrajectory|oO|staticmethod|ii1i1I1i|autoaim|CMD_CM_LOCK_TARGET_OFF|Ooo00oOo00o|O00ooOO|play|True|remove|iiiii|getId|be|id|getShotAngles|control_modes|OOo0o0|must|inputHandler|debug_utils|785398163|sqrt|vehicleTypeDescriptor|segmentMayHitVehicle|cos|x|o00|the|z|tan|if|pi|or|II|handleKeyEvent|self|ooO0OO000o|2|i11iIiiIii|return' .split('|')
regexp = '([0-9a-f]+)'
Отредактировано avsv3 (Июль 8, 2014 22:42:55)
Офлайн
import CommandMapping import BigWorld, Math import Vehicle import uuid import BattleReplay import math from AvatarInputHandler.control_modes import ArcadeControlMode, SniperControlMode, StrategicControlMode from debug_utils import LOG_NOTE from functools import partial from constants import SERVER_TICK_LENGTH, SHELL_TRAJECTORY_EPSILON_CLIENT from ModelHitTester import segmentMayHitVehicle from math import pi, sin, cos, atan, atan2, sqrt, fmod, asin, tan from projectile_trajectory import computeProjectileTrajectory from projectile_trajectory import getShotAngles from ProjectileMover import collideDynamicAndStatic, collideVehiclesAndStaticScene OO0o = (SERVER_TICK_LENGTH / 10) class ii11i: __ROTATION_TICK_LENGTH = SERVER_TICK_LENGTH __INSUFFICIENT_TIME_DIFF = 0.2 __MAX_TIME_DIFF = 0.2 def __init__(self, target): self.id = uuid.uuid4() self.target = target self.__time = BigWorld.time() self.__targetLastShotPoint = None if (not isinstance(self.target, Vehicle.Vehicle)): LOG_NOTE('class = ', self.target.__class__.__name__) raise TypeError('target must be a Vehicle instance') def update(self): O00ooOO = Math.Vector3(self.target.position) o0oO0 = BigWorld.player() oo00 = o0oO0.gunRotator o00 = o0oO0.inputHandler Oo0oO0ooo = o0oO0.vehicleTypeDescriptor if (O00ooOO is None): LOG_NOTE('shotPos none') return if (self.__targetLastShotPoint is None): o00oOoo = O00ooOO else: o00oOoo = self.__targetLastShotPoint self.__targetLastShotPoint = O00ooOO OOooo0000ooo = (o0oO0.getOwnVehiclePosition() - self.target.position).length OOo000 = Oo0oO0ooo.shot['speed'] O0 = Oo0oO0ooo.shot['gravity'] I11i1i11i1I = ((OOo000 * OOo000) / O0) if (OOooo0000ooo <= I11i1i11i1I): Iiii = (math.asin(((OOooo0000ooo * O0) / (OOo000 * OOo000))) * 0.5) else: Iiii = 0.785398163 OOO0O = ((math.sin(Iiii) * OOo000) / (O0 * 2)) IiI1i = ((O00ooOO.x - o00oOoo.x) / OO0o) OOo0o0 = ((O00ooOO.y - o00oOoo.y) / OO0o) O0OoOoo00o = ((O00ooOO.z - o00oOoo.z) / OO0o) OoOooOOOO = (O00ooOO.x + (IiI1i * OOO0O)) i11iiII = (O00ooOO.y + (OOo0o0 * OOO0O)) I1iiiiI1iII = (O00ooOO.z + (O0OoOoo00o * OOO0O)) Ooo00O00O0O0O = Math.Vector3(OoOooOOOO, i11iiII, I1iiiiI1iII) Ooo00O00O0O0O.y += (self.target.typeDescriptor.chassis['hullPosition'].y + self.target.typeDescriptor.hull['turretPositions'][0].y) oo00._VehicleGunRotator__updateShotPointOnServer(Ooo00O00O0O0O) II = self.__getTimeDiff() if (II is None): return self.__time = BigWorld.time() oo00._VehicleGunRotator__rotate(Ooo00O00O0O0O, II) oo00._VehicleGunRotator__updateGunMarker() def __getTimeDiff(self): II = (BigWorld.time() - self.__time) if (II < self.__INSUFFICIENT_TIME_DIFF): return None else: if (II > self.__MAX_TIME_DIFF): II = self.__MAX_TIME_DIFF return II def isTankMarked(self): o0o00ooo0 = BigWorld.target() return (isinstance(o0o00ooo0, Vehicle.Vehicle) and (o0o00ooo0.id != self.target.id)) def getId(self): return self.id class oOOo0oo: autoaim = None @staticmethod def add(autoaim): oOOo0oo.remove() oOOo0oo.autoaim = autoaim o0oO0 = BigWorld.player() o0oO0.soundNotifications.play('target_captured') o0oO0.gunRotator.clientMode = False oOOo0oo.update(autoaim.getId()) @staticmethod def remove(): if (oOOo0oo.autoaim is None): return o0oO0 = BigWorld.player() oOOo0oo.autoaim = None o0oO0.gunRotator.clientMode = True o0oO0.soundNotifications.play('target_unlocked') @staticmethod def hasAutoAim(): return (oOOo0oo.autoaim is not None) @staticmethod def update(id): if (oOOo0oo.hasAutoAim() and (oOOo0oo.autoaim.getId() == id)): oOOo0oo.autoaim.update() BigWorld.callback(OO0o, partial(oOOo0oo.update, id)) def oO(self, isDown, key, mods, event=None): ii1i1I1i = CommandMapping.g_instance if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET, key) and isDown): o00O = BigWorld.target() if ((o00O is None) or oOOo0oo.hasAutoAim()): oOOo0oo.remove() return OOO0OOO00oo(self, isDown, key, mods, event) oOOo0oo.add(ii11i(o00O)) return if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET_OFF, key) and isDown): oOOo0oo.remove() return OOO0OOO00oo(self, isDown, key, mods, event) def O0oo0OO0oOOOo(self, isDown, key, mods, event=None): ii1i1I1i = CommandMapping.g_instance if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET, key) and isDown): o00O = BigWorld.target() if (o00O is None): oOOo0oo.remove() return i1II1(self, isDown, key, mods, event) oOOo0oo.add(ii11i(o00O)) return if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET_OFF, key) and isDown): oOOo0oo.remove() return i1II1(self, isDown, key, mods, event) def O0o0Ooo(self, isDown, key, mods, event=None): ii1i1I1i = CommandMapping.g_instance if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET, key) and isDown): o00O = BigWorld.target() if (o00O is None): oOOo0oo.remove() return Oo0O0O0ooO0O(self, isDown, key, mods, event) oOOo0oo.add(ii11i(o00O)) return if (ii1i1I1i.isFired(CommandMapping.CMD_CM_LOCK_TARGET_OFF, key) and isDown): oOOo0oo.remove() return Oo0O0O0ooO0O(self, isDown, key, mods, event) OOO0OOO00oo = ArcadeControlMode.handleKeyEvent i1II1 = SniperControlMode.handleKeyEvent Oo0O0O0ooO0O = StrategicControlMode.handleKeyEvent ArcadeControlMode.handleKeyEvent = oO SniperControlMode.handleKeyEvent = O0oo0OO0oOOOo StrategicControlMode.handleKeyEvent = O0o0Ooo
Офлайн
вау о есть скриптик, чтобы можно было различать имена переменных не только по длинне, а по имени
Офлайн
не понял вопроса. На вход exec должна подаваться строка с валидной питонограмматикой (поэтому разбирать что там делается в лямбдах смысла не имеет). Эту строку подаешь на вход http://svn.python.org/view/python/trunk/Demo/parser/unparse.py?view=markup который делает форматирование в соответствие со стандартами. Им же легко делать наобходимые тебе преобразования. Например, убрать фиктивный код типа:
if 15-15: ...
def _If(self, t): if isinstance(t.test, ast.BinOp): if t.test.left.n == t.test.right.n: return ...
Офлайн
avsv3Есть такой скрипт для js, который пытается угадать имя по тому, что делает объект.
вау о есть скриптик, чтобы можно было различать имена переменных не только по длинне, а по имени
Офлайн