[CLEO] Полный разбор скрипта CarSpawner. - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Alowir, Sanoxxx  
[CLEO] Полный разбор скрипта CarSpawner.
karabawka Дата: Суббота, 26.10.2013, 13:41 | Сообщение # 1
Главный предприниматель
Сообщений: 1121
Статус: Offline
[CLEO] Car Spawner. Разбор скрипта


Всем доброго времени суток. bye Данный урок будет полезен новичкам, т.к. скрипт по своему строению не сложный, но очень полезный в игре и интересный для скриптера.

Что делает скрипт?


Скрипт создает автомобиль и садит Вас в него, если вы ввели название модели авто (не в чат!), например вводишь elegy и ты персонаж появляется в данном авто, или любое другое авто.

На самп-рп визуален, можно перемещаться быстро таким способом, как инвизом, но каждые 100-200 метров создавать новое авто, ибо из прорисовки не уедешь, кикнет за ТП (#100). Данный скрипт больше полезен для ДМ серверов и прочих и конечно же для сингла.


Чем полезен данный разбор?


-Наглядный пример чтения памяти из файла vehicles.ide
-Пример работы с игровыми моделями gta sa
-Возможно, Вы узнаете новые опкоды



Полный код с моими комментариями


Код
{$CLEO .cs}
{$I includes/VK_KEYS.txt} //includes
//{$include includes/RakNetDefines.txt}

0000: NOP

thread "CarSpawnerManual_by_Karabawka"

// В первой части скрипта читаем память из vehicles.ide , чтобы скрипт узнавал модельки машин.
0AC8: 1@ = allocate_memory_size 32

:carspawn_read_string
wait 0 // ждем 0 мс, для избежания зависаний   
0@ = 400 // Указывает на строчку в файле vehicles.ide   

// Проверки на введение названия модели авто

:carspawn_checking
0ADB: 1@ = car_model 0@ name   
if
0ADC:   test_cheat 1@ // Проверка: если введено название модели авто на клавиатуре.   
else_jump @carspawn_str_num // если не введено, прыгаем на метку str_num
if   
     Car.Defined(5@) // Проверка: если машина создана. То есть игрок уже в какой-то машине. ( Хендл : 5@ )
else_jump @carspawn_model_checking // если не создана, прыгаем на метку carspawn_model_checking
Actor.StorePos($PLAYER_ACTOR, 10@, 11@, 12@) // записывем координаты игрока $PLAYER_ACTOR в переменные X Y Z
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at 10@ 11@ 12@ // Выкидываем игрока $PLAYER_ACTOR из машины на координаты X Y Z, записанные строчкой выше.
Car.Destroy(5@) // удаляем авто c хендлом 5@

// Проверки на существования модели авто
:carspawn_model_checking
wait 0   
if   
     Model.Available(0@)
else_jump @carspawn_model_checking_load   
jump @carspawn // Если существует, прыгаем на метку создания авто carspawn (наша основная часть работы скрипта)

:carspawn_model_checking_load
Model.Load(0@)
jump @carspawn_model_checking
// Конец проверок моделей.

// Создание авто.
:carspawn
Actor.StorePos($PLAYER_ACTOR, 10@, 11@, 12@) // Записываем коордианты игрока $PLAYER_ACTOR в 3 перменные (координаты X Y Z)
5@ = Car.Create(0@, 10@, 11@, 12@) // Создаем тачку с хендлом 5@
Model.Destroy(0@) // Необходимо удалить модель
036A: put_actor $PLAYER_ACTOR in_car 5@ // ТПшим игрока $PLAYER_ACTOR в созданое авто с хендлом 5@
Car.SetImmunities(5@, 1, 1, 1, 1, 1) // Делаем авто неуязвимым (можно убрать это, как хотите)
01EC: make_car 5@ very_heavy 1 // Данный опкод делает наше авто 5@ тяжелым (1 - значение true)
0ACD: "Car spawned, fuck yeah!" 3000 // Данный опкод выводит текст на экран о том, что машина создана, текст выводится в течении 3000 милисекунд = 3 секунды

:carspawn_str_num
0@ += 1   
    0@ > 611   
else_jump @carspawn_checking
jump @carspawn_read_string



Разбираем скрипт по частям.


Итак, в начале конечно же указываем формат скрипта CLEO .cs и просто название в thread.

Код
{$CLEO .cs}
0000: NOP

thread "CarSpawnerManual_by_Karabawka"


Затем, начинается скрипт. Читаем память из vehicles.ide

Код
// В первой части скрипта читаем память из vehicles.ide , чтобы скрипт узнавал модельки машин.
0AC8: 1@ = allocate_memory_size 32

:carspawn_read_string
wait 0   
0@ = 400 // Указывает на строчку в файле vehicles.ide


Затем, в данной части кода мы проверяем две вещи:

-Введеность чит-кода с названием модели авто.
-Не создана ли машина с хендлом 5@ уже, если создана то выкинем игрока из этой машины и удалим ее, ибо затем нужно будет создать новую, ведь вы ввели чит-код на новое авто, а старое вам уже не нужно.

Код
// Проверки на введение названия модели авто

:carspawn_checking
0ADB: 1@ = car_model 0@ name   
if
0ADC:   test_cheat 1@ // Проверка: если введено название модели авто на клавиатуре.   
else_jump @carspawn_str_num // если не введено, прыгаем на метку str_num
if   
     Car.Defined(5@) // Проверка: если машина создана. То есть игрок уже в какой-то машине. ( Хендл : 5@ )
else_jump @carspawn_model_checking // если не создана, прыгаем на метку carspawn_model_checking
Actor.StorePos($PLAYER_ACTOR, 10@, 11@, 12@) // записывем координаты игрока $PLAYER_ACTOR в переменные X Y Z
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at 10@ 11@ 12@ // Выкидываем игрока $PLAYER_ACTOR из машины на координаты X Y Z, записанные строчкой выше.
Car.Destroy(5@) // удаляем авто c хендлом 5@


Далее идут проверки, связанные с тем, существует ли введенная игроком модель вообще.

Код
// Проверки на существования модели авто
:carspawn_model_checking
wait 0   
if   
     Model.Available(0@)
else_jump @carspawn_model_checking_load   
jump @carspawn // Если существует, прыгаем на метку создания авто carspawn (наша основная часть работы скрипта)

:carspawn_model_checking_load
Model.Load(0@)
jump @carspawn_model_checking
// Конец проверок моделей.


Далее идет наша самая вкусная часть кода, где мы создаем авто.
Здесь мы: Записываем координаты нашего игрока -> создаем тачку 5@ в этих координатах -> ТПшим игрока в это авто -> делаем кое-какую магию с авто, чтобы оно стало неуязвимым.

Код
// Создание авто.
:carspawn
Actor.StorePos($PLAYER_ACTOR, 10@, 11@, 12@) // Записываем коордианты игрока $PLAYER_ACTOR в 3 переменные (координаты X Y Z)
5@ = Car.Create(0@, 10@, 11@, 12@) // Создаем тачку с хендлом 5@
Model.Destroy(0@) // Необходимо удалить модель
036A: put_actor $PLAYER_ACTOR in_car 5@ // ТПшим игрока $PLAYER_ACTOR в созданое авто с хендлом 5@
Car.SetImmunities(5@, 1, 1, 1, 1, 1) // Делаем авто неуязвимым (можно убрать это, как хотите)
01EC: make_car 5@ very_heavy 1 // Данный опкод делает наше авто 5@ тяжелым (1 - значение true)
0ACD: "Car spawned, fuck yeah!" 3000 // Данный опкод выводит текст на экран о том, что машина создана, текст выводится в течении 3000 милисекунд = 3 секунды


Здесь кое-какие фекалии с памятью и возвращение в начало скрипта ( jump @carspawn_read_string )

Код
:carspawn_str_num
0@ += 1   
    0@ > 611   
else_jump @carspawn_checking
jump @carspawn_read_string


Всем счастливого пути в освоении CLEO, разбирайте больше скриптов, несмотря ни на что, какой бы гов*окод внутри не был, все в любом случае пригодится.

Автор скрипта: Меломан Cool
Автор разбора: Я.


Прошу прощения, что код имеет не совсем опрятный вид, т.к за основу взят декомпилированый код, однако он компилируется и скрипт работает, проверенно лично мной. Надеюсь, будет действительно полезен новичкам. :)


Сообщение отредактировал karabawka - Суббота, 26.10.2013, 14:03
[CM]Duksxamik Дата: Среда, 06.11.2013, 23:15 | Сообщение # 2
Читор
Сообщений: 62
Статус: Offline
Молодец, + за старание
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума