Четверг, 25.04.2024, 13:02
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов (Вопросы по опкодам, кодингу и др.)
Вопросы по созданию КЛЕО-скриптов
walkДата: Среда, 05.01.2011, 14:58 | Сообщение # 451
Группа: Проверенные
Сообщений: 96
Статус: Offline
Code
0A96: $ActorStruct = actor $PLAYER_ACTOR struct
$ActorStruct += +0x544
05E0: 0@ = read_memory $ActorStruct size 4 virtual_protect 0

Помоему так

Обратно вернуть по:

Code
0A96: $ActorStruct = actor $PLAYER_ACTOR struct
$ActorStruct += +0x544
05DF: write_memory $ActorStruct size 4 value 100 virtual_protect 0

Добавлено (05.01.2011, 14:58)
---------------------------------------------

Quote (Den_spb)
CPed +0x544 = [float] Максимальное здоровье

Почему тут float?


Сообщение отредактировал walk - Среда, 05.01.2011, 14:57
 
Den_spbДата: Среда, 05.01.2011, 15:39 | Сообщение # 452
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (d88)
И как отсюда узнать макс. Здоровье?
К началу структуры надо прибавить смещение (в данном случае 0x544) - в результате получим адрес, по которому записано значение максимального здоровья данного педа. Для чтения значения, записанного по определённому адресу, применяется опкод 0A8D, а для перезаписи значения - 0A8C. Получается так:
Code
0A96: 1@ = actor 0@ struct
1@ += 0x544
0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
if
             2@ <> 101.0 // проверяем значение максимального здоровья (отмечен ли пед)
then
             // действия над неотмеченным педом
             0A8C: write_memory 1@ size 4 value 101.0 virtual_protect 0 // отмечаем педа (вместо 101.0 можно взять другое значение)
end
...
0A96: 1@ = actor 0@ struct
1@ += 0x544             
0A8C: write_memory 1@ size 4 value 100.0 virtual_protect 0 // снимаем отметку с педа (выставляем другое значение макс. здоровья)

Quote (d88)
У всех должно быть разное макс. здоровье.
Обычным педам можно выставлять одно значение, а актёрам, созданным скриптом - другое. Проверить, создан ли актёр скриптом, или это обычный пед, можно, прочитав значение флага уникальности ($ActorStruct += 0x484 Флаг уникальности. Значения: 2 - флаг есть (актёр создан скриптом), 1 - флага нет. Размер адреса: 1 байт)
Quote
Почему тут float?
Проверил в игре макс. здоровье педов - у всех педов оно имеет значение 100.0 (используются дробные числа)
 
walkДата: Среда, 05.01.2011, 15:56 | Сообщение # 453
Группа: Проверенные
Сообщений: 96
Статус: Offline
Quote (Den_spb)
Проверил в игре макс. здоровье педов - у всех педов оно имеет значение 100.0 (используются дробные числа)

Ну тогда и выставлять надо дробное или нет разницы?

И судя с этого и здоровье педа в игре тоже float?

 
Den_spbДата: Среда, 05.01.2011, 16:01 | Сообщение # 454
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (walk)
Ну тогда и выставлять надо дробное или нет разницы?
Выставлять надо как дробное. Иначе при восприятии игрой целого значения как дробного, пед может моментально стать нежизнеспособным (или наоборот, бессмертным).
Quote (walk)
И судя с этого и здоровье педа в игре тоже float?
Да.
 
walkДата: Среда, 05.01.2011, 16:06 | Сообщение # 455
Группа: Проверенные
Сообщений: 96
Статус: Offline
Quote (Den_spb)
Да.

Тогда и его желательно ставить дробным?

Добавлено (05.01.2011, 16:06)
---------------------------------------------
И ещё вопрос, а можно как-нибудь замерить максимальную скорость на отрезке пути? В принципе я всё смогу сам рассчитать, но вот как мне замерить отрезок пути (расстояние от точки до точки пройденное машиной)?

 
Den_spbДата: Среда, 05.01.2011, 16:31 | Сообщение # 456
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (walk)
Тогда и его желательно ставить дробным?
Да.
Quote (walk)
И ещё вопрос, а можно как-нибудь замерить максимальную скорость на отрезке пути? В принципе я всё смогу сам рассчитать, но вот как мне замерить отрезок пути (расстояние от точки до точки пройденное машиной)?
Code
while true
     car.StorePos(0@ 1@ 2@ 3@)
     32@ = 0
     wait 0
     car.StorePos(0@ 4@ 5@ 6@)
     050A: 1@ = distance_between_XYZ 1@ 2@ 3@ and_XYZ 4@ 5@ 6@
     32@ /= 1000
     0093: 2@ = integer 32@ to_float  
     0073: 1@ /= 2@ // (float) получается скорость в м/с  
end
 
d88Дата: Среда, 05.01.2011, 16:49 | Сообщение # 457
Группа: Проверенные
Сообщений: 113
Статус: Offline
Den_spb, спасибо, но мне это всё равно кажется неправильных. Потому что надо делать проверку 2@ <> 101.0, а если актёр создан скриптом, то это значение может получится другое. Я ведь правильно понял, что 101 получается путём прибавления 1 к макс. значению?
Quote (Den_spb)
Обычным педам можно выставлять одно значение, а актёрам, созданным скриптом - другое. Проверить, создан ли актёр скриптом, или это обычный пед, можно, прочитав значение флага уникальности ($ActorStruct += 0x484 Флаг уникальности. Значения: 2 - флаг есть (актёр создан скриптом), 1 - флага нет. Размер адреса: 1 байт)

Но так ведь нельзя узнать какое должно быть макс. здоровье. Оно в начале могло быть 200, 300 или 500…

 
DK22PacДата: Среда, 05.01.2011, 16:54 | Сообщение # 458
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Quote
101 получается путём прибавления 1 к макс. значению?

Нет. Просто записывается 101.0.
 
Den_spbДата: Среда, 05.01.2011, 17:01 | Сообщение # 459
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (d88)
Но так ведь нельзя узнать какое должно быть макс. здоровье. Оно в начале могло быть 200, 300 или 500…
Если ты его не менял, то оно должно быть равно 100.
 
walkДата: Среда, 05.01.2011, 17:11 | Сообщение # 460
Группа: Проверенные
Сообщений: 96
Статус: Offline
Quote (Den_spb)
while true
car.StorePos(0@ 1@ 2@ 3@)
32@ = 0
wait 0
car.StorePos(0@ 4@ 5@ 6@)
050A: 1@ = distance_between_XYZ 1@ 2@ 3@ and_XYZ 4@ 5@ 6@
32@ /= 1000
0093: 2@ = integer 32@ to_float
0073: 1@ /= 2@ // (float) получается скорость в м/с
end

Получается так я получу наивысшую скорость в этом промежутке пути?

З.Ы.

А зачем ты делил на 1000? smile

 
Den_spbДата: Среда, 05.01.2011, 17:26 | Сообщение # 461
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (walk)
Получается так я получу наивысшую скорость в этом промежутке пути?
При делении пройденного расстояния на время получается средняя скорость.
Quote (walk)
А зачем ты делил на 1000?
Потому что значение таймера в миллисекундах.
П.С.Почему не хочешь применить стандартный опкод получения значения скорости 02E3?
 
walkДата: Среда, 05.01.2011, 17:51 | Сообщение # 462
Группа: Проверенные
Сообщений: 96
Статус: Offline
Quote (Den_spb)
П.С.Почему не хочешь применить стандартный опкод получения значения скорости 02E3?

Мне легче будет способом, который предложил ты smile
 
DK22PacДата: Среда, 05.01.2011, 18:01 | Сообщение # 463
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Den_spb, кстати, таймер 33@ - это же не таймер "с обратным отсчётом".
(Это сообщение не относится к предыдущим постам))
 
walkДата: Среда, 05.01.2011, 18:09 | Сообщение # 464
Группа: Проверенные
Сообщений: 96
Статус: Offline
Den_spb, чёрт, только щас допёрло, действительно, переменные 32 и 33 как-то с таймерами связанны tongue
 
Den_spbДата: Среда, 05.01.2011, 18:25 | Сообщение # 465
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Den_spb, кстати, таймер 33@ - это же не таймер "с обратным отсчётом".
32@ и 33@ - таймеры с прямым отсчётом (их значения увеличиваются).
 
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов (Вопросы по опкодам, кодингу и др.)
Поиск: