You are not logged in.
Точно, забыл, так наверное только в CLEO4 можно)
PS Так как ты написал работать не будет)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
В КЛЕО4 размер чтения/записи по-прежнему составляет 1,2,4 байта. Если бы была возможность записывать 6 байт, то в опкод следовало подставлять число 0x909090909090, т.к. при записи 0x90 оставшиеся 5 байтов заполнятся нулями, что неправильно - надо записать 0x90 по каждому байту команды.
Правильный вариант приведён в сообщении 23.
Offline
Точно, забыл, так наверное только в CLEO4 можно)
PS Так как ты написал работать не будет)
Будет, я ж всё тестирую досконально перед тем как выложить.
Пришлось даже недавно отказаться от SAAP 1.1 из за пропадания игровых звуков, поставил таки 1.8, пофиксил код квиксейва и автосейва, теперь не вылетают, и работают точно также.
Offline
@Den_Spb:
Оставшиеся байты заполнятся числом опкодом-нопом 0x90
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Провёл небольшой эксперимент:
1 | 0A8C: write_memory 0x 400000 size 6 value 0x 90 virtual_protect 1 |
--
1 | 0A8C: write_memory 0x 400000 size 6 value 0x 909090909090 virtual_protect 1 |
Offline
А вот ещё один адрес - 0x6A70B8
NOP 6 байт и когда здоровье машины уйдёт в минус, она не загорится и не взорвётся. Тоже самое с переворачиванием.
Last edited by Sergey81 (22-05-2011 10:56)
Offline
@Den_Spb:
Оставшиеся байты заполнятся числом опкодом-нопом 0x90
Запись
1 | 0A8C: write_memory 0xC0BC 15 size 4 value 0x 90 virtual_protect 0 |
равносильна
1 | 0A8C: write_memory 0xC0BC 15 size 4 value 0x 00000090 virtual_protect 0 |
т.к. в опкоде указывается размер записываемого числа, а не количество копирований одного и того же числа по разным адресам.
Last edited by Den_spb (21-05-2011 16:29)
Offline
@Den_Spb
Если заполняемый размер - больше 4 байт, то происходит "автозаполнение", так сказать.
Это же "фишка" CLEO4))
@Sergey81 - компилил на CLEO4??
когда здоровье машины уйдёт в минус, она не загорится и не взорвётся.
Если бы не загоралась, когда перевернулась, было бы круто. А просто отключать взрыв - не вижу смысла.
Last edited by DK22Pac (21-05-2011 17:20)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
@DK22Pac - CLEO3 конечно.
Если бы не загоралась, когда перевернулась, было бы круто. А просто отключать взрыв - не вижу смысла.
Так она и не загорается. Правда там и без этого косяки появляются.
Offline
Написал не глючную версию скрипта, теперь если здоровье машины меньше нуля(от повреждений или если она просто перевернулась), двигатель заглохнет. Если в это время нанести ещё больший урон, она загорится и взорвётся.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | { $CLEO } 0000: //0A8C: write_memory 0x859F80 size 4 value 100.0 virtual_protect 1 {0AB1: call_scm_func @__VarToOffset 1 varnumber 15 result 20@ 15@ = 100.0 0A8C: write_memory 0x6A70C0 size 4 value 20@ virtual_protect 0 } 0A8C: write_memory 0x6A70C 0 size 4 value 0x 288685 virtual_protect 1 while true wait 0 if 00DF: actor $PLAYER_ACTOR driving then 0811: 0@ = actor $PLAYER_ACTOR car 0227: 4@ = car 0@ health if 4@ <= 249 then if and 84A7: not actor $PLAYER_ACTOR driving_boat 89AE: not actor $PLAYER_ACTOR driving_train 84C8: not actor $PLAYER_ACTOR driving_flying_vehicle then 02D4: car 0@ turn_off_engine 10@ = true end if or 04A7: actor $PLAYER_ACTOR driving_boat 09AE: actor $PLAYER_ACTOR driving_train 04C8: actor $PLAYER_ACTOR driving_flying_vehicle then 0A8C: write_memory 0x6A70C 0 size 4 value 0x809F 85 virtual_protect 1 //15@ = 250.0 else 0A8C: write_memory 0x6A70C 0 size 4 value 0x 288685 virtual_protect 1 //15@ = 100.0 end end end if and 10@ == true 056E: car 0@ defined then 03ED: set_car 0@ disable_flipped_explosion_when_empty true 10@ = false end // 03F0: enable_text_draw 1 //045B: draw_text_2numbers 320.0 390.0 GXT 'msefct' numbers 4@ 4@ end //0A93: end_custom_thread { :__VarToOffset 0A9F: 23@ = current_thread_pointer 23@ += 0x3C 0@ *= 4 005A: 23@ += 0@ // address of the local variable 0AB2: ret 1 23@ } |
Last edited by Sergey81 (25-05-2011 11:18)
Offline
@mfisto - Работает и так, смысл что-то менять?
Offline
Ошибки там нет. В структуре машины значение здоровья представлено дробным числом, но опкод 0227 возвращает значение здоровья в виде целого числа (переводит дробное в целое).
Last edited by Den_spb (22-05-2011 17:42)
Offline
Адаптировал clever_trams.cs и star_for_red_3.cs от Den_spb под клео 3.
Если кому нужно, код здесь:
clever_trams.cs - http://pastebin.com/zEXZrUVm
star_for_red_3.cs - http://pastebin.com/b8HrtaLy
Offline
Очередная полезность, дополнение к коду из поста 35:
1 | 0A8C: write_memory 0x570E 14 size 2 value 0x1DEB virtual_protect 1 |
Теперь у перевёрнутой машины здоровье не будет сбрасываться на ноль, чтобы можно её было перевернуть и ехать дальше.
Offline
О, классный опкод!
Offline
Не опкод, а адрес памяти.
Offline
Ну и опкод тоже, столько полезных функций открывает...
Offline
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { $CLEO } 0000: 0A8C: write_memory 0x 00732926 size 4 value 0x00858FD 8 virtual_protect 1 //[(float)300.0000] Vehicle LOD threshold, default: 70.0f 0A8C: write_memory 0x 00732978 size 4 value 0x00858FD 8 virtual_protect 1 //[(float)300.0000] Vehicle LOD threshold, default: 70.0f 0A8C: write_memory 0x004250F 0 size 4 value 0x0085AB 00 virtual_protect 1 //[(float)1500.0000] onscreen spawn range for vehicles, default: 110.0f //0A8C: write_memory 0x00431A24 size 4 value 0x0085AB00 virtual_protect 1 //[(float)1500.0000] unknown //0A8C: write_memory 0x00431A7C size 4 value 0x0085AB00 virtual_protect 1 //[(float)1500.0000] unknown 0A8C: write_memory 0x004253E 3 size 4 value 0x00858EDC virtual_protect 1 //[(float)600.0000] DespawnOffscr? 0A8C: write_memory 0x00431A 24 size 4 value 0x00858B 40 virtual_protect 1 //unknown 50.0 0A8C: write_memory 0x0073295E size 4 value 0x 00863994 virtual_protect 1 //[(float)220.0000] pedsDrawDistanceInstall 0A8C: write_memory 0x006120FF size 4 value 0x00858EDC virtual_protect 1 //[(float)600.0000] ?absMaxDespawnOnscrInstall 0A8C: write_memory 0x 00612128 size 4 value 0x 00863994 virtual_protect 1 //[(float)220.0000] unknown absMaxDespawnOnscrInstall 0A8C: write_memory 0x 00612142 size 4 value 0x00B6F11C virtual_protect 1 //[(float)0.9563] unknown 0A8C: write_memory 0x86D 284 size 4 value 600.0 virtual_protect 1 // ped spawn distance 0A8C: write_memory 0x 871008 size 4 value 500.0 virtual_protect 1 // spawnOffscrRingSizeInstall 0A93: |
Я изучил VC.Traffic и решил поискать аналогичные адреса для SA. Вроде как что-то получилось, но надо тестить. Увеличена дистанция прорисовки машин и педов, соответственно и их лодов тоже.
PS. Скрины сделаны с немного другими значениями.
Last edited by Sergey81 (18-06-2011 10:03)
Offline
А можете увеличить дистанцию прорисовки в 2,5 раза, относительно этих значений?
Offline
Позвольте спросить, в 19 посте Sergey81 давал ссылку на канал UT - там спидометр, с названиями ТС (маленьким, аккуратным шрифтом). Никто не подскажет, где можно найти такой?
Извине за флуд. В PM написал, но не знаю, будет ли ответ.
Offline
12345{
$CLEO
}
0000:
0A8C: write_memory 0x60B4FA size
4
value 0x
90909090
virtual_protect
1
0A8C: write_memory 0x60B4FE size
2
value 0x
9090
virtual_protect
1
0A93: end_custom_thread
А вот это круто. Проверил, работает как часы. Осталось только отключить перезарядку оружия при подбирании патронов к нему. Есть у кого мысли по этому поводу?
Offline
Наверняка, всё зарыто в processPickup (0x457410)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Наверняка, всё зарыто в processPickup (0x457410)
В таком случае я бы мог как-нибудь разобраться с этим, но, увы, в скриптинге знаю так - основы - куда уж мне операции с памятью проводить
Offline