Перейти к содержанию

Terraria. сбор предметов с области


Рекомендуемые сообщения

*Длинное видео к тому же содержит кучу моих ошибок, советую посмотреть полностью, (если будете сразу что то делать) , возможно такой опыт вам пригодится ?

В этом видео показано как сделать сбор предметов с области (на сервере тоже) область регулируется (квадрат).


Скрипт (поиск персонажа):

 

Спойлер

[ENABLE]
alloc(newmem,100)
label(returnhere)
label(originalcode)
label(exit)

label(PlayerAddr)
registersymbol(PlayerAddr)

newmem:
mov [PlayerAddr],edx

originalcode:
fild dword ptr [edx+00000340]

exit:
jmp returnhere

PlayerAddr:
db 0

Terraria.Main::DrawInterface_Resources_Life+510:
jmp newmem
nop
returnhere:

 
 
[DISABLE]
unregistersymbol(PlayerAddr)
dealloc(newmem)
Terraria.Main::DrawInterface_Resources_Life+510:
fild dword ptr [edx+00000340]

 


 

Скрипт (сбор) с пояснениями:
 

Спойлер

[ENABLE]
alloc(newmem,600)
label(returnhere)
label(originalcode)
label(exit)

label(GrabSize)
registersymbol(GrabSize)
label(Control)
registersymbol(Control)

newmem:
cmp byte ptr [Control],1 //Если не включено не делать ничего
jne originalcode
//Тут сделаем сразу преобразование координат
fld dword [eax] //Берем координаты предмета.
fistp dword [GrabSize+8]

push ecx //Теперь нужно
push ebx
mov ecx,[PlayerAddr] //Адрес игрока в ecx, нам нужны его координаты! =)
fld dword [ecx+20]
fistp dword [GrabSize+C] //переводим в 4 байта
mov ebx,[GrabSize+C]
add ebx,[GrabSize] //Размер зоны поиска(проверяем в право)
cmp [GrabSize+8],ebx
jg noGrab //Если больше чем зона которую мы задаем вправо, то не собирать.
mov ebx,[GrabSize+C]
sub ebx,[GrabSize] //Размер зоны поиска проверяем влево.
cmp [GrabSize+8],ebx //Если меньше зоны то не собирать.
jl noGrab

fld dword [ecx+20] //Заносим в стек Х координаты игрока
fstp dword [eax] //Записываем в координаты предмета.

fld dword [eax+4] //Берем координаты предмета Y.
fistp dword [GrabSize+8]

fld dword [ecx+24] //Берем координаты игрока по Y
fistp dword [GrabSize+C] //переводим в 4 байта
mov ebx,[GrabSize+C]
add ebx [GrabSize+4] //Это вниз, чем ниже тем больше число
cmp [GrabSize+8],ebx //Ниже чем зона то не трогать.
jg noGrab
mov ebx,[GrabSize+C]
sub ebx [GrabSize+4] //Это вверх.
cmp [GrabSize+8],ebx //Выше чем зона то не трогать.
jl noGrab

fld dword [ecx+24] //Заносим в стек Y координаты игрока
fstp dword [eax+4] //Записываем в координаты предмета.

mov byte ptr [eax+101],1

noGrab:
pop ebx
pop ecx

originalcode:
fld dword ptr [eax]
mov eax,[ebp-000004E4]

exit:
jmp returnhere

Control:
db 0

GrabSize:
db 0 0  0 0 //Это будет промежуточное значение


Terraria.Main::DrawItem+50:
jmp newmem
nop
nop
nop
returnhere:
 
[DISABLE]
unregistersymbol(Control)
unregistersymbol(GrabSize)
dealloc(newmem)
Terraria.Main::DrawItem+50:
fld dword ptr [eax]
mov eax,[ebp-000004E4]

 

 

Видео (2 часа):
 

Спойлер

 

 

  • Понравилось 1
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.