You are not logged in.
Pages: 1
ivwpnpckpsvc.cs
{$CLEO}
0000: //v 0.7.07.04.2011
wait 2000
05DE: create_custom_thread 'pkpbl.s'
05E5: 0@ = game_version
if
0@ == 0
then
9@ = 0x945D5E
10@ = 0x94A13C
else
9@ = 0x945D66
10@ = 0x94A144
end
while true
wait 0
for 0@ = 9@ {0x945D5E} to 10@ {0x94A13C} step 0x34
05E0: 1@ = read_memory 0@ size 1 virtual_protect 0
if or
0039: 1@ == 8 //money
//0039: 1@ == 15 //scm
0039: 1@ == 4 //ped pickups
then
0085: 2@ = 0@ // handles
2@ -= 0x2A
05E0: 3@ = read_memory 2@ size 4 virtual_protect 0 //RwV3d x Y z
if
3@ <> -801.1
then
0085: 4@ = 2@ // handles
000A: 4@ += 0x0C
05E0: 5@ = read_memory 4@ size 4 virtual_protect 0 //5@ - pointer to object
000A: 4@ += 0x12 //mdlid
05E0: 6@ = read_memory 4@ size 2 virtual_protect 0 //6@ - model id
05EB: 7@ = object_struct 5@ handle
if
03CA: object 7@ exists
then
01BB: store_object 7@ position_to 12@ 13@ 14@
000A: 4@ += -0x1E //RwV3d x Y z
05DF: write_memory 4@ size 4 value -801.1 virtual_protect 0
000A: 4@ += -0x4 //RwV3d X y z
05DF: write_memory 4@ size 4 value -801.1 virtual_protect 0
000A: 4@ += 0x8 //RwV3d x y Z
05DF: write_memory 4@ size 4 value -801.1 virtual_protect 0
if
1@ == 4
then
14@ -= 0.99
else
if
1@ == 8
then
14@ -= 0.90
else
if
1@ == 15
then
14@ -= 1.2
end
end
end
if
6@ == 337
then
6@ = 376
end
0107: 8@ = create_object 6@ at 12@ 13@ 14@ //8@ - landed pickup
0382: set_object 8@ collision_detection 0
0208: 11@ = random_float 0.0 360.0
if
not 6@ == 376
then
0453: object 8@ set_rotation 90.0 0.0 11@
else
0453: object 8@ set_rotation 0.0 0.0 11@
end
05E8: 15@ = object 8@ struct
15@ += 0x174
05F5: call_scm_func @model2wpnid params_count 1 6@ 6@
05DF: write_memory 15@ size 4 value 6@ virtual_protect 0 //wpn id
15@ += 0x4
05DF: write_memory 15@ size 4 value 13 virtual_protect 0 //flag for .s
01C4: remove_references_to_object 8@
end
end
end
end
end
:model2wpnid
for 1@ = 1 to 36
05E2: call_function 0x4418B0 num_params 1 pop 1 1@ 2@ //weapon id to model id
if
003B: 2@ == 0@ // (int)
then
05F6: ret 1 1@ //model id to weapon id
end
end
05F6: ret 1 40pkpbl.s
{$CLEO .s}
0000:
while true
wait 0
if and
84A8: not player $player_char driving_boat
84C9: not player $player_char driving_flying_vehicle
80E0: not player $player_char driving
then
0054: store_player $player_char position_to 0@ 1@ 2@
//0437: scatter_particle 55 size 0.52 at 0@ 1@ 2@ speed_XYZ 0.0 0.0 0.0
//03F0: enable_text_draw 1
//045B: draw_text_2numbers 320.0 390.0 GXT 'AMMO' numbers 9@ 9@ // ~1~:~1~
if
05F1: 3@ = random_object_near_point 0@ 1@ 2@ in_radius 1.5 find_next 0 //IF and SET
then
7@ = 1
05E8: 4@ = object 3@ struct
4@ += 0x174
05E0: 5@ = read_memory 4@ size 4 virtual_protect 1 //weapon id
4@ += 0x4
05E0: 8@ = read_memory 4@ size 4 virtual_protect 1 //flag
if and
not 5@ == 0
not 5@ == 40
8@ == 13
0490: player $player_char has_weapon 5@
then
03E6: remove_text_box
0209: 9@ = random_int_in_ranges 4 40
//046F: store_player $player_char currently_armed_weapon_to 6@
//01B2: give_actor $PLAYER_ACTOR weapon 5@ ammo 20 // Load the weapon model before using this
//01B8: set_player $player_char armed_weapon_to 6@
0114: set_actor $PLAYER_ACTOR weapon 5@ add_ammo 9@
0108: destroy_object 3@
end
if and
8@ == 13
not 5@ == 0
not 5@ == 40
8490: not player $player_char has_weapon 5@
then
0512: show_permanent_text_box 'PU_CF1'
if
00E1: key_pressed 0 4
then
03E6: remove_text_box
0209: 9@ = random_int_in_ranges 10 70
046F: store_player $player_char currently_armed_weapon_to 6@
05E2: call_function 0x4418B0 num_params 1 pop 1 5@ 10@ //weapon id to model id
if
8248: not model 10@ available
then
0247: request_model 10@
038B: load_requested_models
end
01B2: give_actor $PLAYER_ACTOR weapon 5@ ammo 9@ // Load the weapon model before using this
if
0248: model 10@ available
then
0249: release_model 10@
end
01B8: set_player $player_char armed_weapon_to 6@
0108: destroy_object 3@
end
end
if and
not 5@ == 0
5@ == 40
8@ == 13
then
0209: 9@ = random_int_in_ranges 10 500
0109: player $player_char money += 9@
0108: destroy_object 3@
end
else
if
7@ == 1
then
03E6: remove_text_box
7@ = 0
end
end
end
endВидео - http://www.youtube.com/watch?v=0WaoHo7qSQ4
Скачать - http://www.gtagarage.com/mods/show.php?id=15721
Last edited by Sergey81 (07-04-2011 12:12)
Offline
В принципе, я переделал код до работающего состояния, правда есть вылеты иногда, надо дальше разбираться. Просьба перенести тему в форум модификаций. Также добавил небольшую видео демонстрацию.
Offline
А почему два скрипта? Чёта по коду не пойму, в одном пикапы рядом с ГГ изображаются лежащими на земле, а в другом их можно подобрать?
Offline
for 0@ = 0x945D5E to 0x94A13C step 0x34
05E0: 1@ = read_memory 0@ size 1 virtual_protect 1
if //or
//0039: 1@ == 8 //money
//0039: 1@ == 15 //scm
0039: 1@ == 4 //ped pickups
then
0085: 8@ = 1@ // integer values and handles
000A: 0@ += -0x1E
05E0: 1@ = read_memory 0@ size 4 virtual_protect 1
000A: 0@ += 0x1E
if
8039: not 1@ == 0
then
05EB: 2@ = object_struct 1@ handleЯ так понял, здесь ты проверяешь есть-ли по близости игрока пикапы оставленные педами.
А если раскоментировать 1@ == 8 и 15, то каким будет эффект?
Offline
@Sw[ee]t
Если раскомментировать, то по идее будут проверяться пикапы денег и труляля. Однако в самом скрипте это не продумано еще. Т.к там все сосредоточено пока на оружии, насколько я понял в скрипте.
Проверил на версии 1.1 не работает
И еще такой косяк, когда у игрока нет оружия, то приходиться нажимать "ответить на звонок".
I know everything and nothing...
Offline
А почему два скрипта? Чёта по коду не пойму, в одном пикапы рядом с ГГ изображаются лежащими на земле, а в другом их можно подобрать?
Ага, в первом прячем сами пикапы(опкода 0750 нету, так что просто меняю координату Х на -1000.0), создаём на их месте объекты с той же моделью и двумя флагами(model id и и число 0.13 для идентификации во втором скрипте). Во втором скрипте(в SA можно было бы уместить всё в один, но тут всего 16 локальных переменных, поэтому решил разделить) ищем модели, если они рядом с гг, проверяем флаги(чтобы не подбирать пикапы, которые не являются оружием) и либо даём ему оружие и удаляем модель, либо ждём нажатия кнопки Tab.
t]Я так понял, здесь ты проверяешь есть-ли по близости игрока пикапы оставленные педами.
А если раскоментировать 1@ == 8 и 15, то каким будет эффект?
Здесь надо тоже доделывать код, делать проверку на то, что модель оружие, а не бронежилет например.
А ещё у этих пикапов разная высота, т.е. если оружие будет на земле, броня будет невидимая под землёй.
Пря нажатии таб естественно вылет.
У денег вобще какой то странный эффект получается...
Я кстати пробовал оптимизировать метку model2id,
if or 4@ == *** 4@ == *** 4@ == *** 4@ == *** *** then 4@ -= *** end
Правда таким образом вылезали глюки на пустом месте, когда вместо дубинки копов игроку давалась бейсбольная бита(естественно расчёт был правильный), поэтому сделал максимально наглядно чтоб ничего не перепуталось.
@mfisto - Да, пока все адреса от 1.0, возможно сделаю и под 1.1 позже.
Насчёт косяка, что именно имеешь в виду, а то я не совсем понял. Неверный GXT отображается?
UPD. Выложил обновлённую версию с поддержкой версии 1.1 и некоторыми улучшениями.
Last edited by Sergey81 (02-04-2011 14:59)
Offline
Проблема в том, что когда, например, у игрока нет пистолетов или оружия ближнего боя итд, т.е. определенного типа. Тогда для того, чтобы подобрать оружие, надо всегда нажимать "ответить на звонок".
Однако, если оружие уже есть, например, colt45, то тогда оно просто подберется.
Скажем у игрока вообще нет пистолетов, то, например, лежит оружие python, подходишь к нему, а вместо того чтоб подобраться, выскакивает сообщение нажмите "ответить на звонок".
I know everything and nothing...
Offline
@mfisto - А, ну да, есть такое, я правда незнаю почему так происходит.
Offline
И кстате еще такое. Ты можешь использовать буфер в качестве переменных, которых не хватает тебе в скрипте. Я так всегда поступаю, т.к. мне даже 34-х то в сане не канает.
05F7: 0@ = label @label offset
I know everything and nothing...
Offline
Сделал пикап денег, тем же способом что и DK22Pac, моделька кстати тоже из его мода. Также добавил условий, теперь созданные игрой пикапы тоже лежат на земле, кроме этих:
#ADRENALINE
#info
#health
#bodyarmour
#briefcase
#package1
#BRIBE
#PICKUPSAVE
По прежнему натыкаюсь на рандомные вылеты(хоть и не так часто), по прежнему без понятия почему так происходит.
Last edited by Sergey81 (02-04-2011 19:08)
Offline
@mfisto - возможно, хотя же вроде если пикап существует, его модель уже загружена. Впрочем добавлю на всякий случай.
Ошибка по адресу 0x462197 кстати.
Last edited by Sergey81 (02-04-2011 23:50)
Offline
Бета 7 в первом посте. Убрал воздействие скрипта на скм пикапы, сделал gosub model id to weapon id в виде скм функции, код стал компактнее теперь. Вылеты и прочие глюки вроде не наблюдаются.
То, что оружие, которого нет у игрока нужно поднимать по кнопке, наверно так и оставлю.
Offline
Pages: 1