Да, и собственно, саму то 2д точку как получить?трансформируй 2д точку
Не смог разобраться. А есть ли возможность в динамике посмотреть java-функции (брякнуть в отладчике)? Другими словами, возможно ли запустить свой java-скрипт? У меня windows 7 и Workshop Tools не запускается (пишет, что нужна 10-ка). Так что, легальный подход мне не подойдет. Тут обсуждается какой-то способ. Он еще рабочий?реверси GameUI.GetScreenWorldPosition(там габен уже за тебя рейтрейсит)
да способ рабочий. -tempcontent в параметры запуска, компилишь впкшку, засовываешь ее dota 2 beta\game\dota_tempcontent\pak01_dir.vpk. в пабе не работает(обход тут есть в соседних темах поищешь если надо https://yougame.biz/threads/222259/) но в демке работает для тестов самое то. бпшки работают. в дебагере ищешь по хрефу функцию джаваскриптовую ставишь на нее бряку вызываешь из джаваскрипта и все. я так половину вещей в доте и реверсил. workshop tools забей можно без него спокойно. просто пропатчи оригинальный vxml_c файлик с соблюдением размера(если добавляешь x байт, то столько же и вырежи из файла(всякие двойные пробелы и прочую хуйню можешь вырезать спокойно)). там чек именно на размер файла.Не смог разобраться. А есть ли возможность в динамике посмотреть java-функции (брякнуть в отладчике)? Другими словами, возможно ли запустить свой java-скрипт? У меня windows 7 и Workshop Tools не запускается (пишет, что нужна 10-ка). Так что, легальный подход мне не подойдет. Тут обсуждается какой-то способ. Он еще рабочий?
.text:0000000180CB49E0 48 89 5C 24 10 mov [rsp-8+arg_8], rbx
.text:0000000180CB49E5 48 89 4C 24 08 mov [rsp-8+arg_0], rcx
.text:0000000180CB49EA 55 push rbp
.text:0000000180CB49EB 48 8D 6C 24 80 lea rbp, [rsp-80h]
.text:0000000180CB49F0 48 81 EC 80 01 00 00 sub rsp, 180h
.text:0000000180CB49F7 48 8B 0D 92 02 99 02 mov rcx, cs:qword_183644C90
.text:0000000180CB49FE 4C 8D 85 90 00 00 00 lea r8, [rbp+80h+arg_0]
.text:0000000180CB4A05 48 8B DA mov rbx, rdx
.text:0000000180CB4A08 48 8D 95 A0 00 00 00 lea rdx, [rbp+80h+arg_10]
.text:0000000180CB4A0F 48 8B 01 mov rax, [rcx]
.text:0000000180CB4A12 FF 90 E8 01 00 00 call qword ptr [rax+1E8h]
.text:0000000180CB4A18 44 8B 85 90 00 00 00 mov r8d, dword ptr [rbp+80h+arg_0]
.text:0000000180CB4A1F 48 8D 44 24 40 lea rax, [rsp+180h+var_140]
.text:0000000180CB4A24 8B 95 A0 00 00 00 mov edx, [rbp+80h+arg_10]
.text:0000000180CB4A2A 4C 8D 4C 24 30 lea r9, [rsp+180h+var_150]
.text:0000000180CB4A2F 48 89 44 24 20 mov [rsp+180h+var_160], rax
.text:0000000180CB4A34 E8 F7 FB FF FF call CDOTAInput__GetWorldRayFromMousePosition
.text:0000000180CB4A39 48 8D 15 A0 0C 66 02 lea rdx, qword_1833156E0
.text:0000000180CB4A40 48 8D 4C 24 30 lea rcx, [rsp+180h+var_150]
.text:0000000180CB4A45 E8 D6 86 67 FF call sub_18032D120
.text:0000000180CB4A4A 84 C0 test al, al
.text:0000000180CB4A4C 0F 85 56 01 00 00 jnz loc_180CB4BA8
.text:0000000180CB4A52 F3 0F 10 05 86 0C 66 02 movss xmm0, dword ptr cs:qword_1833156E0
.text:0000000180CB4A5A 33 C9 xor ecx, ecx
.text:0000000180CB4A5C 0F B6 44 24 77 movzx eax, [rsp+180h+var_109]
.text:0000000180CB4A61 F3 0F 11 03 movss dword ptr [rbx], xmm0
.text:0000000180CB4A65 24 F9 and al, 0F9h
.text:0000000180CB4A67 F3 0F 10 0D 75 0C 66 02 movss xmm1, dword ptr cs:qword_1833156E0+4
.text:0000000180CB4A6F 0C 19 or al, 19h
.text:0000000180CB4A71 F3 0F 11 4B 04 movss dword ptr [rbx+4], xmm1
.text:0000000180CB4A76 F3 0F 10 05 6A 0C 66 02 movss xmm0, cs:dword_1833156E8
.text:0000000180CB4A7E 48 89 4C 24 58 mov [rsp+180h+var_128], rcx
.text:0000000180CB4A83 48 89 4C 24 60 mov [rsp+180h+var_120], rcx
.text:0000000180CB4A88 66 89 4C 24 70 mov [rsp+180h+var_110], cx
.text:0000000180CB4A8D 48 89 4D 40 mov [rbp+80h+var_40], rcx
.text:0000000180CB4A91 48 89 4D 48 mov [rbp+80h+var_38], rcx
.text:0000000180CB4A95 48 89 4D 50 mov [rbp+80h+var_30], rcx
.text:0000000180CB4A99 89 4D 58 mov [rbp+80h+var_28], ecx
.text:0000000180CB4A9C 48 8D 4D D0 lea rcx, [rbp+80h+var_B0]
.text:0000000180CB4AA0 F3 0F 11 43 08 movss dword ptr [rbx+8], xmm0
.text:0000000180CB4AA5 48 C7 44 24 68 FF FF FF FF mov [rsp+180h+var_118], 0FFFFFFFFFFFFFFFFh
.text:0000000180CB4AAE C7 44 24 72 00 00 01 00 mov [rsp+180h+var_10E], 10000h
.text:0000000180CB4AB6 88 44 24 77 mov [rsp+180h+var_109], al
.text:0000000180CB4ABA C6 44 24 76 03 mov [rsp+180h+var_10A], 3
.text:0000000180CB4ABF 48 C7 44 24 50 21 30 00 00 mov [rsp+180h+var_130], 3021h
.text:0000000180CB4AC8 C7 45 5C 00 00 00 07 mov [rbp+80h+var_24], 7000000h
.text:0000000180CB4ACF E8 AC 13 11 01 call sub_181DC5E80
.text:0000000180CB4AD4 F3 0F 10 44 24 44 movss xmm0, [rsp+180h+var_13C]
.text:0000000180CB4ADA 0F 57 ED xorps xmm5, xmm5
.text:0000000180CB4ADD F3 0F 5C 44 24 34 subss xmm0, dword ptr [rsp+180h+var_150+4]
.text:0000000180CB4AE3 F3 0F 10 5C 24 40 movss xmm3, [rsp+180h+var_140]
.text:0000000180CB4AE9 F3 0F 10 54 24 48 movss xmm2, [rsp+180h+var_138]
.text:0000000180CB4AEF F3 0F 5C 5C 24 30 subss xmm3, dword ptr [rsp+180h+var_150]
.text:0000000180CB4AF5 F3 0F 5C 54 24 38 subss xmm2, [rsp+180h+var_148]
.text:0000000180CB4AFB C6 45 C1 01 mov [rbp+80h+var_BF], 1
.text:0000000180CB4AFF 0F 28 E3 movaps xmm4, xmm3
.text:0000000180CB4B02 0F 14 E0 unpcklps xmm4, xmm0
.text:0000000180CB4B05 0F 16 E2 movlhps xmm4, xmm2
.text:0000000180CB4B08 0F 29 65 90 movaps [rbp+80h+var_F0], xmm4
.text:0000000180CB4B0C 0F 59 E4 mulps xmm4, xmm4
.text:0000000180CB4B0F 0F 28 CC movaps xmm1, xmm4
.text:0000000180CB4B12 0F 28 C4 movaps xmm0, xmm4
.text:0000000180CB4B15 0F C6 CC AA shufps xmm1, xmm4, 0AAh ; 'Є'
.text:0000000180CB4B19 0F C6 C4 55 shufps xmm0, xmm4, 55h ; 'U'
.text:0000000180CB4B1D 0F C6 E4 00 shufps xmm4, xmm4, 0
.text:0000000180CB4B21 0F 58 E0 addps xmm4, xmm0
.text:0000000180CB4B24 0F 58 E1 addps xmm4, xmm1
.text:0000000180CB4B27 0F 2E E5 ucomiss xmm4, xmm5
.text:0000000180CB4B2A 75 04 jnz short loc_180CB4B30
.text:0000000180CB4B2C C6 45 C1 00 mov [rbp+80h+var_BF], 0
.text:0000000180CB4B30
.text:0000000180CB4B30 loc_180CB4B30: ; CODE XREF: sub_180CB49E0+14A↑j
.text:0000000180CB4B30 F3 0F 10 54 24 38 movss xmm2, [rsp+180h+var_148]
.text:0000000180CB4B36 4C 8D 4D D0 lea r9, [rbp+80h+var_B0]
.text:0000000180CB4B3A F2 0F 10 5C 24 30 movsd xmm3, [rsp+180h+var_150]
.text:0000000180CB4B40 4C 8D 44 24 50 lea r8, [rsp+180h+var_130]
.text:0000000180CB4B45 0F 57 C0 xorps xmm0, xmm0
.text:0000000180CB4B48 0F 16 DA movlhps xmm3, xmm2
.text:0000000180CB4B4B 48 8D 55 80 lea rdx, [rbp+80h+var_100]
.text:0000000180CB4B4F 0F 29 5D 80 movaps [rbp+80h+var_100], xmm3
.text:0000000180CB4B53 0F 29 45 B0 movaps [rbp+80h+var_D0], xmm0
.text:0000000180CB4B57 C6 45 C0 01 mov [rbp+80h+var_C0], 1
.text:0000000180CB4B5B 0F 29 45 A0 movaps [rbp+80h+var_E0], xmm0
.text:0000000180CB4B5F E8 BC B0 D0 FF call sub_1809BFC20
.text:0000000180CB4B64 F3 0F 10 45 0C movss xmm0, [rbp+80h+var_74]
.text:0000000180CB4B69 0F 2F 05 E4 58 26 02 comiss xmm0, cs:dword_182F1A454
.text:0000000180CB4B70 73 36 jnb short loc_180CB4BA8
.text:0000000180CB4B72 80 7D 16 00 cmp [rbp+80h+var_6A], 0
.text:0000000180CB4B76 75 30 jnz short loc_180CB4BA8
.text:0000000180CB4B78 F3 0F 10 45 DC movss xmm0, [rbp+80h+var_A4]
.text:0000000180CB4B7D B0 01 mov al, 1
.text:0000000180CB4B7F F3 0F 10 4D E0 movss xmm1, [rbp+80h+var_A0]
.text:0000000180CB4B84 F3 0F 11 03 movss dword ptr [rbx], xmm0
.text:0000000180CB4B88 F3 0F 10 45 E4 movss xmm0, [rbp+80h+var_9C]
.text:0000000180CB4B8D F3 0F 11 43 08 movss dword ptr [rbx+8], xmm0
.text:0000000180CB4B92 F3 0F 11 4B 04 movss dword ptr [rbx+4], xmm1
.text:0000000180CB4B97 48 8B 9C 24 98 01 00 00 mov rbx, [rsp+180h+arg_8]
.text:0000000180CB4B9F 48 81 C4 80 01 00 00 add rsp, 180h
.text:0000000180CB4BA6 5D pop rbp
.text:0000000180CB4BA7 C3 retn
.text:0000000180CB4BA8 ; ---------------------------------------------------------------------------
.text:0000000180CB4BA8
.text:0000000180CB4BA8 loc_180CB4BA8: ; CODE XREF: sub_180CB49E0+6C↑j
.text:0000000180CB4BA8 ; sub_180CB49E0+190↑j ...
.text:0000000180CB4BA8 48 8B 9C 24 98 01 00 00 mov rbx, [rsp+180h+arg_8]
.text:0000000180CB4BB0 32 C0 xor al, al
.text:0000000180CB4BB2 48 81 C4 80 01 00 00 add rsp, 180h
.text:0000000180CB4BB9 5D pop rbp
.text:0000000180CB4BBA C3 retn
.text:0000000180CB4BBA sub_180CB49E0 endp
скрины.Проблему решил! Прототип:
typedef bool (__fastcall* pGetScreenWorldPosition)(PVOID This /* не используется */, Dota::Vector* pVec);
Функция в IDA (доту давно не обновлял):
Функцию найти можно по такому алгоритму:Код:.text:0000000180CB49E0 48 89 5C 24 10 mov [rsp-8+arg_8], rbx .text:0000000180CB49E5 48 89 4C 24 08 mov [rsp-8+arg_0], rcx .text:0000000180CB49EA 55 push rbp .text:0000000180CB49EB 48 8D 6C 24 80 lea rbp, [rsp-80h] .text:0000000180CB49F0 48 81 EC 80 01 00 00 sub rsp, 180h .text:0000000180CB49F7 48 8B 0D 92 02 99 02 mov rcx, cs:qword_183644C90 .text:0000000180CB49FE 4C 8D 85 90 00 00 00 lea r8, [rbp+80h+arg_0] .text:0000000180CB4A05 48 8B DA mov rbx, rdx .text:0000000180CB4A08 48 8D 95 A0 00 00 00 lea rdx, [rbp+80h+arg_10] .text:0000000180CB4A0F 48 8B 01 mov rax, [rcx] .text:0000000180CB4A12 FF 90 E8 01 00 00 call qword ptr [rax+1E8h] .text:0000000180CB4A18 44 8B 85 90 00 00 00 mov r8d, dword ptr [rbp+80h+arg_0] .text:0000000180CB4A1F 48 8D 44 24 40 lea rax, [rsp+180h+var_140] .text:0000000180CB4A24 8B 95 A0 00 00 00 mov edx, [rbp+80h+arg_10] .text:0000000180CB4A2A 4C 8D 4C 24 30 lea r9, [rsp+180h+var_150] .text:0000000180CB4A2F 48 89 44 24 20 mov [rsp+180h+var_160], rax .text:0000000180CB4A34 E8 F7 FB FF FF call CDOTAInput__GetWorldRayFromMousePosition .text:0000000180CB4A39 48 8D 15 A0 0C 66 02 lea rdx, qword_1833156E0 .text:0000000180CB4A40 48 8D 4C 24 30 lea rcx, [rsp+180h+var_150] .text:0000000180CB4A45 E8 D6 86 67 FF call sub_18032D120 .text:0000000180CB4A4A 84 C0 test al, al .text:0000000180CB4A4C 0F 85 56 01 00 00 jnz loc_180CB4BA8 .text:0000000180CB4A52 F3 0F 10 05 86 0C 66 02 movss xmm0, dword ptr cs:qword_1833156E0 .text:0000000180CB4A5A 33 C9 xor ecx, ecx .text:0000000180CB4A5C 0F B6 44 24 77 movzx eax, [rsp+180h+var_109] .text:0000000180CB4A61 F3 0F 11 03 movss dword ptr [rbx], xmm0 .text:0000000180CB4A65 24 F9 and al, 0F9h .text:0000000180CB4A67 F3 0F 10 0D 75 0C 66 02 movss xmm1, dword ptr cs:qword_1833156E0+4 .text:0000000180CB4A6F 0C 19 or al, 19h .text:0000000180CB4A71 F3 0F 11 4B 04 movss dword ptr [rbx+4], xmm1 .text:0000000180CB4A76 F3 0F 10 05 6A 0C 66 02 movss xmm0, cs:dword_1833156E8 .text:0000000180CB4A7E 48 89 4C 24 58 mov [rsp+180h+var_128], rcx .text:0000000180CB4A83 48 89 4C 24 60 mov [rsp+180h+var_120], rcx .text:0000000180CB4A88 66 89 4C 24 70 mov [rsp+180h+var_110], cx .text:0000000180CB4A8D 48 89 4D 40 mov [rbp+80h+var_40], rcx .text:0000000180CB4A91 48 89 4D 48 mov [rbp+80h+var_38], rcx .text:0000000180CB4A95 48 89 4D 50 mov [rbp+80h+var_30], rcx .text:0000000180CB4A99 89 4D 58 mov [rbp+80h+var_28], ecx .text:0000000180CB4A9C 48 8D 4D D0 lea rcx, [rbp+80h+var_B0] .text:0000000180CB4AA0 F3 0F 11 43 08 movss dword ptr [rbx+8], xmm0 .text:0000000180CB4AA5 48 C7 44 24 68 FF FF FF FF mov [rsp+180h+var_118], 0FFFFFFFFFFFFFFFFh .text:0000000180CB4AAE C7 44 24 72 00 00 01 00 mov [rsp+180h+var_10E], 10000h .text:0000000180CB4AB6 88 44 24 77 mov [rsp+180h+var_109], al .text:0000000180CB4ABA C6 44 24 76 03 mov [rsp+180h+var_10A], 3 .text:0000000180CB4ABF 48 C7 44 24 50 21 30 00 00 mov [rsp+180h+var_130], 3021h .text:0000000180CB4AC8 C7 45 5C 00 00 00 07 mov [rbp+80h+var_24], 7000000h .text:0000000180CB4ACF E8 AC 13 11 01 call sub_181DC5E80 .text:0000000180CB4AD4 F3 0F 10 44 24 44 movss xmm0, [rsp+180h+var_13C] .text:0000000180CB4ADA 0F 57 ED xorps xmm5, xmm5 .text:0000000180CB4ADD F3 0F 5C 44 24 34 subss xmm0, dword ptr [rsp+180h+var_150+4] .text:0000000180CB4AE3 F3 0F 10 5C 24 40 movss xmm3, [rsp+180h+var_140] .text:0000000180CB4AE9 F3 0F 10 54 24 48 movss xmm2, [rsp+180h+var_138] .text:0000000180CB4AEF F3 0F 5C 5C 24 30 subss xmm3, dword ptr [rsp+180h+var_150] .text:0000000180CB4AF5 F3 0F 5C 54 24 38 subss xmm2, [rsp+180h+var_148] .text:0000000180CB4AFB C6 45 C1 01 mov [rbp+80h+var_BF], 1 .text:0000000180CB4AFF 0F 28 E3 movaps xmm4, xmm3 .text:0000000180CB4B02 0F 14 E0 unpcklps xmm4, xmm0 .text:0000000180CB4B05 0F 16 E2 movlhps xmm4, xmm2 .text:0000000180CB4B08 0F 29 65 90 movaps [rbp+80h+var_F0], xmm4 .text:0000000180CB4B0C 0F 59 E4 mulps xmm4, xmm4 .text:0000000180CB4B0F 0F 28 CC movaps xmm1, xmm4 .text:0000000180CB4B12 0F 28 C4 movaps xmm0, xmm4 .text:0000000180CB4B15 0F C6 CC AA shufps xmm1, xmm4, 0AAh ; 'Є' .text:0000000180CB4B19 0F C6 C4 55 shufps xmm0, xmm4, 55h ; 'U' .text:0000000180CB4B1D 0F C6 E4 00 shufps xmm4, xmm4, 0 .text:0000000180CB4B21 0F 58 E0 addps xmm4, xmm0 .text:0000000180CB4B24 0F 58 E1 addps xmm4, xmm1 .text:0000000180CB4B27 0F 2E E5 ucomiss xmm4, xmm5 .text:0000000180CB4B2A 75 04 jnz short loc_180CB4B30 .text:0000000180CB4B2C C6 45 C1 00 mov [rbp+80h+var_BF], 0 .text:0000000180CB4B30 .text:0000000180CB4B30 loc_180CB4B30: ; CODE XREF: sub_180CB49E0+14A↑j .text:0000000180CB4B30 F3 0F 10 54 24 38 movss xmm2, [rsp+180h+var_148] .text:0000000180CB4B36 4C 8D 4D D0 lea r9, [rbp+80h+var_B0] .text:0000000180CB4B3A F2 0F 10 5C 24 30 movsd xmm3, [rsp+180h+var_150] .text:0000000180CB4B40 4C 8D 44 24 50 lea r8, [rsp+180h+var_130] .text:0000000180CB4B45 0F 57 C0 xorps xmm0, xmm0 .text:0000000180CB4B48 0F 16 DA movlhps xmm3, xmm2 .text:0000000180CB4B4B 48 8D 55 80 lea rdx, [rbp+80h+var_100] .text:0000000180CB4B4F 0F 29 5D 80 movaps [rbp+80h+var_100], xmm3 .text:0000000180CB4B53 0F 29 45 B0 movaps [rbp+80h+var_D0], xmm0 .text:0000000180CB4B57 C6 45 C0 01 mov [rbp+80h+var_C0], 1 .text:0000000180CB4B5B 0F 29 45 A0 movaps [rbp+80h+var_E0], xmm0 .text:0000000180CB4B5F E8 BC B0 D0 FF call sub_1809BFC20 .text:0000000180CB4B64 F3 0F 10 45 0C movss xmm0, [rbp+80h+var_74] .text:0000000180CB4B69 0F 2F 05 E4 58 26 02 comiss xmm0, cs:dword_182F1A454 .text:0000000180CB4B70 73 36 jnb short loc_180CB4BA8 .text:0000000180CB4B72 80 7D 16 00 cmp [rbp+80h+var_6A], 0 .text:0000000180CB4B76 75 30 jnz short loc_180CB4BA8 .text:0000000180CB4B78 F3 0F 10 45 DC movss xmm0, [rbp+80h+var_A4] .text:0000000180CB4B7D B0 01 mov al, 1 .text:0000000180CB4B7F F3 0F 10 4D E0 movss xmm1, [rbp+80h+var_A0] .text:0000000180CB4B84 F3 0F 11 03 movss dword ptr [rbx], xmm0 .text:0000000180CB4B88 F3 0F 10 45 E4 movss xmm0, [rbp+80h+var_9C] .text:0000000180CB4B8D F3 0F 11 43 08 movss dword ptr [rbx+8], xmm0 .text:0000000180CB4B92 F3 0F 11 4B 04 movss dword ptr [rbx+4], xmm1 .text:0000000180CB4B97 48 8B 9C 24 98 01 00 00 mov rbx, [rsp+180h+arg_8] .text:0000000180CB4B9F 48 81 C4 80 01 00 00 add rsp, 180h .text:0000000180CB4BA6 5D pop rbp .text:0000000180CB4BA7 C3 retn .text:0000000180CB4BA8 ; --------------------------------------------------------------------------- .text:0000000180CB4BA8 .text:0000000180CB4BA8 loc_180CB4BA8: ; CODE XREF: sub_180CB49E0+6C↑j .text:0000000180CB4BA8 ; sub_180CB49E0+190↑j ... .text:0000000180CB4BA8 48 8B 9C 24 98 01 00 00 mov rbx, [rsp+180h+arg_8] .text:0000000180CB4BB0 32 C0 xor al, al .text:0000000180CB4BB2 48 81 C4 80 01 00 00 add rsp, 180h .text:0000000180CB4BB9 5D pop rbp .text:0000000180CB4BBA C3 retn .text:0000000180CB4BBA sub_180CB49E0 endp
1) Находим ScreenXYToWorld стандартным способом (xref на строку "ScreenXYToWorld")
2) Ищем в ScreenXYToWorld функцию GetWorldRayFromMousePosition (dylib в помощь)
3) Перебираем xref-ы на вызов GetWorldRayFromMousePosition, ищем похожую функцию (по прототипу, etc)
ты уверен что там они есть?Я CreateMove хукаю, там после возврата из функции в параметрах есть координаты курсора.
class CUserCmd
{
public:
// For matching server and client commands for debugging
int command_number;
// the tick the client created this command
int tick_count;
// Player instantaneous view angles.
QAngle viewangles;
// Intended velocities
// forward velocity.
float forwardmove;
// sideways velocity.
float sidemove;
// upward velocity.
float upmove;
// Attack button states
int buttons;
// Impulse command issued.
byte impulse;
// Current weapon id
int weaponselect;
int weaponsubtype;
int random_seed; // For shared random functions
#ifdef GAME_DLL
int server_random_seed; // Only the server populates this seed
#endif
short mousedx; // mouse accum in x from create move
short mousedy; // mouse accum in y from create move
// Client only, tracks whether we've predicted this command at least once
bool hasbeenpredicted;
// Back channel to communicate IK state
#if defined( HL2_DLL ) || defined( HL2_CLIENT_DLL )
CUtlVector< CEntityGroundContact > entitygroundcontact;
#endif
};
Да уверен, Createmove сильно поменялся. Посмотри у lwss, CursorRay в конце структуры. Я так понимаю твоя структура из csgo. У lwss когда я последний раз тестил (пол года назад) оффсеты были неверные. Лень щас искать исходники на диске, не помню оффсет правильный. Просто поставь хук на CreateMove и в реклассе посмотри. Перейди по адресу CUserCmd и Все адреса его покажи как Vecotr3 Если в демо хиро, то узнаешь по z = 128.0 на горе(на реке 0.0).ты уверен что там они есть?
там онли mousedx/mousedy, это дельта мышки за 1 кадр. то есть ты мышку двинул на 10 пикселей, там будет число 10. но это не координаты мышки, это дельта. (по крайней мере в сурс1 движке так было)
C++:class CUserCmd { public: // For matching server and client commands for debugging int command_number; // the tick the client created this command int tick_count; // Player instantaneous view angles. QAngle viewangles; // Intended velocities // forward velocity. float forwardmove; // sideways velocity. float sidemove; // upward velocity. float upmove; // Attack button states int buttons; // Impulse command issued. byte impulse; // Current weapon id int weaponselect; int weaponsubtype; int random_seed; // For shared random functions #ifdef GAME_DLL int server_random_seed; // Only the server populates this seed #endif short mousedx; // mouse accum in x from create move short mousedy; // mouse accum in y from create move // Client only, tracks whether we've predicted this command at least once bool hasbeenpredicted; // Back channel to communicate IK state #if defined( HL2_DLL ) || defined( HL2_CLIENT_DLL ) CUtlVector< CEntityGroundContact > entitygroundcontact; #endif };
это из тф2 был:DДа уверен, Createmove сильно поменялся. Посмотри у lwss, CursorRay в конце структуры. Я так понимаю твоя структура из csgo. У lwss когда я последний раз тестил (пол года назад) оффсеты были неверные. Лень щас искать исходники на диске, не помню оффсет правильный. Просто поставь хук на CreateMove и в реклассе посмотри. Перейди по адресу CUserCmd и Все адреса его покажи как Vecotr3 Если в демо хиро, то узнаешь по z = 128.0 на горе(на реке 0.0).
Но это временный метод, по хорошему разобрать как работает CreateMove и этим методом определять. Потому что для хуманайзера условно не будет лишним кинуть луч в World из любой точки, а не только из текущей мышки. Плюс хук менее производительный, потому что CreateMove очень часто вызывается(чаще чем тик сервера), а информация в данный момент нам может быть и не нужна.
полазал в чит енджине от 128 до 0 сканил(и камеру туда сюда перемещал сначала на 128 высоту потом на 0(речку)) по кд чтобы этот луч найти в памяти. нашел, хвбпшки сделал, нашел оффсет rsi+0x39cc, чекнул че лежит в rsi, там CDOTAInput. поискал в дилибе че интересного есть из функций CDOTAInput, увидел UpdateCrosshairEntityAndPosition почекал вроде оно(в коде функции movzx r12d, dl. то есть dl = bool. вызывается xor edx, edx; lea rcx, g_Input; call xxx. значит два аргумента(ну всмысле первый аргумент это this так что это как бы не аргумент но не суть) и один из них bool. совпадает с сигнатурой).Да уверен, Createmove сильно поменялся. Посмотри у lwss, CursorRay в конце структуры. Я так понимаю твоя структура из csgo. У lwss когда я последний раз тестил (пол года назад) оффсеты были неверные. Лень щас искать исходники на диске, не помню оффсет правильный. Просто поставь хук на CreateMove и в реклассе посмотри. Перейди по адресу CUserCmd и Все адреса его покажи как Vecotr3 Если в демо хиро, то узнаешь по z = 128.0 на горе(на реке 0.0).
Но это временный метод, по хорошему разобрать как работает CreateMove и этим методом определять. Потому что для хуманайзера условно не будет лишним кинуть луч в World из любой точки, а не только из текущей мышки. Плюс хук менее производительный, потому что CreateMove очень часто вызывается(чаще чем тик сервера), а информация в данный момент нам может быть и не нужна.
Лайк!!полазал в чит енджине от 128 до 0 сканил(и камеру туда сюда перемещал сначала на 128 высоту потом на 0(речку)) по кд чтобы этот луч найти в памяти. нашел, хвбпшки сделал, нашел оффсет rsi+0x39cc, чекнул че лежит в rsi, там CDOTAInput. поискал в дилибе че интересного есть из функций CDOTAInput, увидел UpdateCrosshairEntityAndPosition почекал вроде оно(в коде функции movzx r12d, dl. то есть dl = bool. вызывается xor edx, edx; lea rcx, g_Input; call xxx. значит два аргумента(ну всмысле первый аргумент это this так что это как бы не аргумент но не суть) и один из них bool. совпадает с сигнатурой).
кароче в CDOTAInput лежит этот вектор, оттуда он в CUserCmd летит. в CDOTAInput он обновляется функцией CDOTAInput::UpdateCrosshairEntityAndPosition(bool)
она вызывает C_DOTAPlayer::GetCursorPositionAtTime(float) потом CDOTAInput::GetWorldRayFromMousePosition(int,int,Vector *,Vector *) потом CDOTAInput::FindWorld(Vector const&,Vector const&,Vector*)
ScreenToWorld он везде одинаковый - луч от nearz до farz(то есть луч в пределах фрустума просмотра) который проходит через коорды мыши с последующим рейтрейсом.Лайк!!
Если ей нужен World, получается как ты и писал выше. Проводит луч к миру. А я предполагал, что она внутри юзает что то вроде ScreenToWorld из исходников cs-go.
вопрос не по теме. Как думаешь, получится на macos запустить старые билды доты 16 года для которых есть dylibы ? В steamdb есть эти версии, но они подозрительно маловаты. К сожалению у меня нет мака, покупал один раз даже аренду на пару часов через тим вивер, чтобы попробовать подебажить, но не вышло. Нужно много конфигов добавить. Скорее всего наиболее верный вариант скачать актуальную доту и уже в ней заменять библиотеки.
Еще проблема что ни под мак ни под линукс человеческого дебагера нет(даже не представляю как lwss все это раскопал через gdb), но думаю можно через иду попробовать дебажить
На линуксе без стима не работает, даже с манипуляциями разными крашит после загрузки в меню. НО это не проблема я думаю. Есть же старая soruce1 dota, которую щас через стим запускают на винде. Можно будет так же попробовать подставить старую доту вместо новой в стиме.ScreenToWorld он везде одинаковый - луч от nearz до farz(то есть луч в пределах фрустума просмотра) который проходит через коорды мыши с последующим рейтрейсом.
а смысл запускать старые билды? если в новых билдах код с момента дилибов не изменился, то ты его запросто найдешь. если он изменился - тогда и смысл от дилибов минимальный так как все новое. единственное чего нет в дилибах - это хрефов на виртуальные вызовы(так как они через вмт вызываются), а так там инфы достаточно чтобы ничего не дебажить. еще раз: если ты что-то увидел в дилибах но не до конца понимаешь - найди это в современной длл и подебажь уже там. если в длл все изменилось, тогда и смысла 0 от дилиба в данном случае. ну подебажишь ты старый дилиб и поймешь как че делалось несколько лет назад, а толку то если щас уже все изменилось?
а так, ну да, наверно можно запустить. если дота на маке ваще запускается без стима. на винде например да(ну просто ехешник без открытого стима запускаешь, тебе потом просто пишет нет соединения и тд и тп а так демо работает). но опять же смысла не вижу.
а так через иду да можешь попробовать подебажить. я конечно на других ОС не дебажил, но пробовал одну игруху старую в иде дебажить на винде(другие дебагеры чето крашили мне игру я хуй забил с иды просто начал дебажить она не крашила. как и встроенный дебагер винды но он параша ваще), говнецо конечно но покатит если других вариантов нет.
ну да, я тоже про систему навигации задумывался(правда дальше мыслей не уходило).На линуксе без стима не работает, даже с манипуляциями разными крашит после загрузки в меню. НО это не проблема я думаю. Есть же старая soruce1 dota, которую щас через стим запускают на винде. Можно будет так же попробовать подставить старую доту вместо новой в стиме.
Зачем это нужно ? С дебагом проще понять как работает поиск путей, очень важная функция для скриптов, чтобы построить траекторию или преследования противника. Например летит в тебя стан лины по области, нужно чтобы скрипат выходил из него кратчайшим путем, а ты стоишь в крипах. Можно рассчитать примитивным способом, с твоими предположениями о механике доты, но 1/10 случаев это будет работать неправильно.
Вообще поиск путей в доте работает на сервере, но можно переиспользовать функции локальной игры с ботами, которые лежат в server.dll
Либо не переиспользовать, а понять принцып работы и реализовать свои.
Там хранится список всех препятствий, динамические(крипы, герои) и статические(по типу деревьев). Сначала строится приблизительный путь с помощью алгоритма A*, которому похуй на препятствия, потом строится уже более точный Алгоритм, который и динамтческие объекты учитывает.
Как пишет разработчик valve на реддит, они какой то свой алгоритм разработали умный для окончательной траектории пути, называется WallTracing. Вот понять как он работает достаточно сложно глядя на огромные функции в декомпайлере иды. без дебага с символами тут не обойтись.
Я видел в старых API Ensage что то подобное, не знаю как это работало, я его не застал.
В остальных читах в API этого нет.
Arting Добрый день, есть ли у вас поиск путей в чите ? Если да, почему не высуните в js ?
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz