Среда, 15.05.2024, 17:26
Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


  • Страница 1 из 1
  • 1
Форум серии игр Grand Theft Auto » Помощь в моддинге » Помощь в CLEO » [CLEO-Урок] Средняя синхронизация (Урок для скриптеров среднего уровня)
[CLEO-Урок] Средняя синхронизация
FreeNeedProd
Дата: Среда, 19.06.2013, 03:23 | Сообщение # 1
аватар пользователя FreeNeedProd
Рядовой
Группа: Проверенные
Сообщений: 10
Статус: offline
Здравствуйте.
Сегодня я сделаю урок по созданию хорошего CarShooter'а aka CarGun'а с довольно хорошей синхронизацией, плюс с стрельбой в центра экрана.
Этот урок я советую людям, которые уже ранее занимались Cleo скриптингом, и которые уже имеют опыт работы.
P.S. Снизу под спойлером будет сразу готовый код, плюс прикреплю файлы .txt и .cs
И так, поехали.

{$CLEO .cs} - создаем файл с расширением .cs
0000: nop - переходим на нулевой офсет

Код
:1
wait 0
if and
0ab0: 17
0ab0: 90
jf @1
0ACD: show_text_highpriority "~R~ACTIVATED: ~W~ CARSHOOTER ~B~ON." time 2000
wait 200

Это проверка на нажатие клавиш CTRL+Z, т.е. активация.
Код
:2
wait 0  
if and
0ab0: 17
0ab0: 90
jf @3
0ACD: show_text_highpriority "~R~DEACTIVATED: ~W~ CARSHOOTER ~B~OFF." time 2000  
wait 200
jump @1

Опять же проверка на нажатие клавиш CTRL+Z, но в этот раз это дезактивация.
Код
:3
wait 0
if and
0ab0: 1
    not Actor.Driving($PLAYER_ACTOR)
    not Actor.Dead($PLAYER_ACTOR)
else_jump @2

Тут сразу 3 проверки
1 - Это на нажатие ЛКМ
2 - На то не находится ли игрок в авто
3 - На то жив ли игрок
Код
13@ = 2.0  
17@ = 0

Присваивание переменным значение. Это нам понадобиться в дальнейшем.
Код
:4  
wait 0
if
0ab0: 1
else_jump @2
Actor.StorePos($PLAYER_ACTOR, 14@, 15@, 16@)
if  
0AE2:   find_all_random_vehicles_in_sphere 14@ 15@ 16@ radius 5000.0 find_next 17@ skip_dead 0 store_to 9@  
else_jump @2

Сохранение координат игрока в переменные 14@, 15@, 16@.
Поиск авто в радиусе 5000 метров и запись в переменную 9@.
Код
Actor.StorePos($PLAYER_ACTOR, 20@, 21@, 22@)
068D: get_camera_position_to 24@ 25@ 26@  
0063: 20@ -= 24@ // (float)  
0063: 21@ -= 25@ // (float)  
0063: 22@ -= 26@ // (float)  
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
006B: 20@ *= 13@ // (float)  
006B: 21@ *= 13@ // (float)  
006B: 22@ *= 13@ // (float)  
005B: 22@ += 13@ // (float)  
005B: 0@ += 20@ // (float)  
005B: 1@ += 21@ // (float)  
005B: 2@ += 22@ // (float)

Математический расчет, благодаря которому мы можем запускать авто прям в центр экрана.
Код
Car.Health(9@) = 9999999
Car.PutAt(9@, 0@, 1@, 2@)
Actor.StorePos($PLAYER_ACTOR, 3@, 4@, 5@)

Установка авто(9@) 9999999 единиц здоровья.
Телепорт авто(9@) в координаты 0@, 1@, 2@.
Сохранение координат игрока в переменные 3@, 4@, 5@.
Код
0063: 0@ -= 3@ // (float)  
0063: 1@ -= 4@ // (float)  
0063: 2@ -= 5@ // (float)

Опять же математический расчет.
Код
07D5: set_car 9@ velocity_in_direction_XYZ 0@ 1@ 2@ rotation_velocitiesXY 0.0 0.0 unk 0.0  
0AB1: call_scm_func @8 1 9@  
wait 20  
17@ = 1  
0AB1: call_scm_func @9 0  
jump @4

Не знаю как лучше объяснить, но опкод 07D5 сам по себе задает как бы движение авто в направление координат 0@ 1@ 2@.
Опкод 0AB1 сам по себе поход на gosub.
Записываем в переменную 17@ 1-ку, дабы в дальнейшем поиск опкодом 0AE2 не останавливался только на одном авто.

Код
:8
0A96: 3@ = actor $PLAYER_ACTOR struct  
0A97: 2@ = car 0@ struct  
0A8E: 4@ = 3@ + 1328 // int  
0A8C: write_memory 4@ size 4 value 50 virtual_protect 0  
0A8E: 4@ = 3@ + 1420 // int  
0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0  
0AB2: ret 0  

:9
0A96: 3@ = actor $PLAYER_ACTOR struct  
0A8E: 4@ = 3@ + 1328 // int  
0A8C: write_memory 4@ size 4 value 1 virtual_protect 0  
0AB2: ret 0

А это и есть код самой синхронизации.



http://rghost.ru/46857790 - Ссылка на файлы.

Если вам понравился урок, и вы считаете что он будет полезен в дальнейшем вам и другим скриптерам, просто поставь в мне в репутацию в поле "Действие", "не изменять репутацию" и в поле "Комментарий" просто напиши "За урок".
Тогда я буду знать что уроки действительно нужны, и буду делать чаще и разного уровня сложности.

Автор срипта и урока: FreeNeed
 
NOP
Дата: Вторник, 25.06.2013, 13:22 | Сообщение # 2
аватар пользователя NOP
Сержант
Группа: Проверенные
Сообщений: 26
Статус: offline
Цитата
Математический расчет, благодаря которому мы можем запускать авто прям в центр экрана.

Расчет матрицы.
 
Форум серии игр Grand Theft Auto » Помощь в моддинге » Помощь в CLEO » [CLEO-Урок] Средняя синхронизация (Урок для скриптеров среднего уровня)
  • Страница 1 из 1
  • 1
Поиск:

Рейтинг@Mail.ru