karabawka |
Дата: Суббота, 26.10.2013, 13:41 | Сообщение # 1
|
Главный предприниматель
Сообщений: 1121
Статус: Offline
|
[CLEO] Car Spawner. Разбор скрипта
Всем доброго времени суток. Данный урок будет полезен новичкам, т.к. скрипт по своему строению не сложный, но очень полезный в игре и интересный для скриптера.
Что делает скрипт?
Скрипт создает автомобиль и садит Вас в него, если вы ввели название модели авто (не в чат!), например вводишь 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
|
Молодец, + за старание
|
|
|
|