#1 11-12-2009 15:04

DimP
Registered: 23-03-2009
Posts: 51

Скриптово меняем навык стрельбы из оружия

"0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: <номер оружия> + <смещение>. Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat. "

Взял с gtamodding.ru ,Вопрос как сосчитать значение указателя что бы получить адрес памяти
например там написано "+0x38 = [dword] accuracy " , я считал  0xC8AAB8 + номер оружия+skilllevel + 0x38.
Думаю это не правильно ,т.к у меня ничего не получилось изменить sad. Помогите пожалуйста.


Тема переименована для соответствия содержимому. Часть сообщений вынесена в отдельную тему

Last edited by Seemann (23-05-2010 18:46)

Offline

#2 11-12-2009 15:42

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Скриптово меняем навык стрельбы из оружия

0xC8AAB8 + номер оружия + 0x38 = skill level


GIMS developer

Offline

#3 11-12-2009 16:07

Alien
Registered: 12-10-2008
Posts: 564

Re: Скриптово меняем навык стрельбы из оружия

0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: <номер оружия> + <смещение>. Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat.

Эту фиговину я писал. Только после меня кто-то видать еще руками потрогал.:D
Должно быть так:

accuracy = 0xC8AAB8 + (<номер оружия> + <смещение>)*0x70 + 0x38

Offline

#4 11-12-2009 16:20

DimP
Registered: 23-03-2009
Posts: 51

Re: Скриптово меняем навык стрельбы из оружия

Спасибо огромное ,сейчас проверю smile

Offline

#5 13-12-2009 12:36

DimP
Registered: 23-03-2009
Posts: 51

Re: Скриптово меняем навык стрельбы из оружия

Не получается чего то сосчитать.=(
Пробую найти targetRange  для m4 с уровнем hitman
0xC8AAB8 + (31 + 36)*0x70 + 0x4
получаю какие то длинные циферки, изменение которых ничего не дает sad (или эти адреса только для чтения?)
или перевожу 31 в hex получаю 1F
считаю
0xC8AAB8 + (1F + 36)*0x70 + 0x4
или перевожу еще 36 в hex.
0xC8AAB8 + (1F + 24)*0x70 + 0x4  то же самое.
Можно поподробнее расписать, пожалуйста, или привести 1 пример smile

Offline

#6 13-12-2009 13:28

Alien
Registered: 12-10-2008
Posts: 564

Re: Скриптово меняем навык стрельбы из оружия

получаю какие то длинные циферки

там же float...

Offline

#7 13-12-2009 13:58

DimP
Registered: 23-03-2009
Posts: 51

Re: Скриптово меняем навык стрельбы из оружия

если поставить float тоже длинные smile где-то с 6 знаками до запятой.
Alien ,скажи пожалуйста, в каком из 3х случаев я считаю правильно ?

Last edited by DimP (13-12-2009 13:59)

Offline

#8 14-12-2009 13:23

Alien
Registered: 12-10-2008
Posts: 564

Re: Скриптово меняем навык стрельбы из оружия

DimP wrote:

если поставить float тоже длинные smile где-то с 6 знаками до запятой.

это из-за дискретности float'а.
Пример: [q]нулевой разброс пуль при стрельбе из АК-47 на уровне "Киллер"[/q].

{$CLEO}
0@ = 30    //индекс оружия
0@ += 36   //приращение индекса по навыку
0@ *= 0x70 //размер структуры
0@ += 0xC8AAB8 //поинтер на массив структур
0@ += 0x38  //смещение в структуре
0A8C: write_memory 0@ size 4 value 100.0 virtual_protect 0
0a93:

Offline

#9 14-12-2009 15:32

DimP
Registered: 23-03-2009
Posts: 51

Re: Скриптово меняем навык стрельбы из оружия

Алиен, спасибо Вам, вы гений smile
Все работает отлично, а я даже не верил что так возможно сделать smile

Offline

#10 14-12-2009 20:14

Alien
Registered: 12-10-2008
Posts: 564

Re: Скриптово меняем навык стрельбы из оружия

Да что Вы, Мы никакой не гений.:crazy:

Offline

#11 12-03-2010 13:58

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Скриптово меняем навык стрельбы из оружия

Товарищи, здравствуйте!

{$CLEO}
0@ = 30    //индекс оружия
0@ += 36   //приращение индекса по навыку
0@ *= 0x70 //размер структуры
0@ += 0xC8AAB8 //поинтер на массив структур
0@ += 0x38  //смещение в структуре
0A8C: write_memory 0@ size 4 value 100.0 virtual_protect 0
0a93:

Насчёт вот этого. А как можно залезть в флаги оружия?
Я так понимаю, смещение в структуре будет +0x18 (+0x18 = [dword] flags - из gtamodding).
А если нужно добраться до анимационной группы оружия? Или до рендеринга в двух руках?
Или надо записать/считать всю последовательность флагов?

Last edited by dragonforce (12-03-2010 13:59)

Offline

#12 13-03-2010 10:28

Alien
Registered: 12-10-2008
Posts: 564

Re: Скриптово меняем навык стрельбы из оружия

для работы с флагами используются опкоды:

08B4:   test $390 bit 1 
08B5:   test $GIRLS_GIFTS_BITMASK bit $GIRLFRIEND 
08B6:   test $383($GIRLFRIEND,6i) bit 3@ 
08B7:   test 54@ bit 5 
08B9:   test 239@ bit 216@ 
08BA: set $377[0] bit 1 
08BB: set $1210 bit $GIRLFRIEND 
08BC: set $390 bit 3@ 
08BD: set 54@ bit 10 
08BF: set 54@ bit 49@ 
08C0: clear $391 bit 31 
08C1: clear $1210 bit $GIRLFRIEND 
08C2: clear $391 bit 3@ 
08C3: clear 54@ bit 11

Offline

#13 13-03-2010 11:59

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Скриптово меняем навык стрельбы из оружия

Alien, приведи пожалуйста пример.

{$CLEO}
0@ = 30
0@ += 36
0@ *= 0x70
0@ += 0xC8AAB8
0@ += 0x18
08BA: set 0@ bit 11
0a93:

Подход правильный? Пытаюсь сделать две М4.

Offline

#14 13-03-2010 12:48

Alien
Registered: 12-10-2008
Posts: 564

Re: Скриптово меняем навык стрельбы из оружия

{$CLEO}
wait 0
0@ = 31
0@ += 36
0@ *= 0x70
0@ += 0xC8AAB8
0@ += 0x18
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0
08BD: set 1@ bit 11
0A8C: write_memory 0@ size 4 value 1@ virtual_protect 0

0a93:

Offline

#15 03-05-2010 14:03

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Скриптово меняем навык стрельбы из оружия

Хм. Нужно найти значение пинга игрока (каждого, кто подключен), используя айди игрока.
Два вопроса: как можно искать такое значение? где именно его искать?

Создавал серв, где игроку ставилось количество очков, равное его пингу и пришёл к мнению, что, пока игра свёрнута (игрок афк), пинг не меняется. Искал я то значение, которое видел в сампе (для этого и ставил фраги, равные пингу). Искал в самой игре (gta_sa.exe) с помощью АртМани. Эти значения есть именно в игре, но, как оказалось позднее, это и было количество фрагов игрока, а не его пинг.

Offline

#16 07-05-2010 03:24

BritishColonist
Registered: 30-09-2009
Posts: 72

Re: Скриптово меняем навык стрельбы из оружия

Думаю, раз меню создаётся в игре (а не в сампе), то значения точно должны быть в gta_sa.exe. Ну, я о таблице очков (TAB).

Offline

#17 12-05-2010 13:15

DimP
Registered: 23-03-2009
Posts: 51

Re: Скриптово меняем навык стрельбы из оружия

Хм. Нужно найти значение пинга игрока (каждого, кто подключен), используя айди игрока.
Два вопроса: как можно искать такое значение? где именно его искать?

Вроде нужно искать в процессе gta_sa.exe, с того места, куда в него загрузилась samp.dll.
Дальше надо искать таблицу, которая вызывается на TAB.

Тут вроде то что надо: http://code.google.com/p/m0d-s0beit-sa/ … c/samp.cpp

Last edited by DimP (12-05-2010 13:28)

Offline

#18 01-09-2011 17:23

It's FYP
Registered: 01-09-2011
Posts: 1

Re: Скриптово меняем навык стрельбы из оружия

попробовал я таким способом изменить скорострельность оружия, АК-47 изменил на дигл и  +0x38 = [dword] accuracy заменил на  +0x5C = [dword] Скорость, а так же поменял значение 100.0 на 9000.0

0@ = 24   //дигл
0@ += 36   //приращение индекса по навыку
0@ *= 0x70 //размер структуры
0@ += 0xC8AAB8 //поинтер на массив структур
0@ += 0x5C  //скорость
0A8C: write_memory 0@ size 4 value 9000.0 virtual_protect 0
0a93:

никаких изменений в игре это не дало. не вылета, ничего. подскажите в чем проблема, что я неправильно делаю?

Last edited by It's FYP (02-09-2011 15:05)

Offline

Board footer

Powered by FluxBB