You are not logged in.
"0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: <номер оружия> + <смещение>. Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat. "
Взял с gtamodding.ru ,Вопрос как сосчитать значение указателя что бы получить адрес памяти
например там написано "+0x38 = [dword] accuracy " , я считал 0xC8AAB8 + номер оружия+skilllevel + 0x38.
Думаю это не правильно ,т.к у меня ничего не получилось изменить . Помогите пожалуйста.
Тема переименована для соответствия содержимому. Часть сообщений вынесена в отдельную тему
Last edited by Seemann (23-05-2010 18:46)
Offline
0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: <номер оружия> + <смещение>. Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat.
Эту фиговину я писал. Только после меня кто-то видать еще руками потрогал.:D
Должно быть так:
accuracy = 0xC8AAB8 + (<номер оружия> + <смещение>)*0x70 + 0x38
Offline
Спасибо огромное ,сейчас проверю
Offline
Не получается чего то сосчитать.=(
Пробую найти targetRange для m4 с уровнем hitman
0xC8AAB8 + (31 + 36)*0x70 + 0x4
получаю какие то длинные циферки, изменение которых ничего не дает (или эти адреса только для чтения?)
или перевожу 31 в hex получаю 1F
считаю
0xC8AAB8 + (1F + 36)*0x70 + 0x4
или перевожу еще 36 в hex.
0xC8AAB8 + (1F + 24)*0x70 + 0x4 то же самое.
Можно поподробнее расписать, пожалуйста, или привести 1 пример
Offline
получаю какие то длинные циферки
там же float...
Offline
если поставить float тоже длинные где-то с 6 знаками до запятой.
Alien ,скажи пожалуйста, в каком из 3х случаев я считаю правильно ?
Last edited by DimP (13-12-2009 13:59)
Offline
если поставить float тоже длинные где-то с 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
Алиен, спасибо Вам, вы гений
Все работает отлично, а я даже не верил что так возможно сделать
Offline
Да что Вы, Мы никакой не гений.:crazy:
Offline
Товарищи, здравствуйте!
{$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
для работы с флагами используются опкоды:
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
Alien, приведи пожалуйста пример.
{$CLEO} 0@ = 30 0@ += 36 0@ *= 0x70 0@ += 0xC8AAB8 0@ += 0x18 08BA: set 0@ bit 11 0a93:
Подход правильный? Пытаюсь сделать две М4.
Offline
{$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
Хм. Нужно найти значение пинга игрока (каждого, кто подключен), используя айди игрока.
Два вопроса: как можно искать такое значение? где именно его искать?
Создавал серв, где игроку ставилось количество очков, равное его пингу и пришёл к мнению, что, пока игра свёрнута (игрок афк), пинг не меняется. Искал я то значение, которое видел в сампе (для этого и ставил фраги, равные пингу). Искал в самой игре (gta_sa.exe) с помощью АртМани. Эти значения есть именно в игре, но, как оказалось позднее, это и было количество фрагов игрока, а не его пинг.
Offline
Думаю, раз меню создаётся в игре (а не в сампе), то значения точно должны быть в gta_sa.exe. Ну, я о таблице очков (TAB).
Offline
Хм. Нужно найти значение пинга игрока (каждого, кто подключен), используя айди игрока.
Два вопроса: как можно искать такое значение? где именно его искать?
Вроде нужно искать в процессе 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
попробовал я таким способом изменить скорострельность оружия, АК-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