You are not logged in.
Привет, форум. Вот и моя очередь задать вопрос по скриптингу ) В общем, суть такова, что я хочу изменить количество патронов в пикапе, которые создаются при смерти актёров. Собственно, изменить то я изменил, но клавиша TAB при смене оружия в слоте начинает бесится и даёт либо стандартное количество патронов, либо пикап не исчезает и даёт бесконечное количество патронов (по новому количеству патронов примерно за 250 ms). Сам скрипт:
{$CLEO} if 0AA9: is_game_version_original jf @end_script // вспомогательный мусор: начало Model.Load(#SAWNOFF) 038B: load_requested_models 0376: 0@ = create_random_actor_at 2484.2766 -1672.1981 13.3359 01B2: give_actor 0@ weapon 26 ammo 100 0A27: set_actor 0@ death_pickups_persist 1 Model.Destroy(#SAWNOFF) // вспомогательный мусор: конец while true wait 0 // 250 for 0@ = 0 to 620 0A90: 1@ = 0@ * 32 // int [INDEX IN POOL] 0A8E: 1@ = 0x9788C0 + 1@ // int [ADDRESS IN POOL] 0A8E: 2@ = 1@ + 4 // int [OBJECT HANDLE] 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 if 2@ == 0 // <if object not exist> then continue end 0A8E: 2@ = 1@ + 28 // int [TYPE] 0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0 if not 2@ == 4 // <if type is not deadman pickup> then continue end 0A8E: 2@ = 1@ + 24 // int [MODEL ID] 0A8D: 2@ = read_memory 2@ size 2 virtual_protect 0 4@ = 0 // <NEW COUNT> if 2@ == #SAWNOFF // 350 then 4@ = 2 end if 2@ == #CHROMEGUN // 349 then 4@ = 3 end if or 2@ == #DESERT_EAGLE // 348 2@ == #SHOTGSPA// 351 2@ == #SNIPER// 358 then 4@ = 4 end if 2@ == #CUNTGUN // 357 then 4@ = 6 end if or 2@ == #COLT45 // 346 2@ == #SILENCED// 347 then 4@ = 11 end if 2@ == #MP5LNG // 353 then 4@ = 14 end if 2@ == #MICRO_UZI // 352 then 4@ = 21 end if 2@ == #M4 // 356 then 4@ = 22 end if 2@ == #TEC9 // 372 then 4@ = 33 end if 2@ == #AK47 // 355 then 4@ = 41 end 0A8E: 3@ = 1@ + 8 // int [COUNT] //0A8D: 2@ = read_memory 3@ size 4 virtual_protect 0 //if //003B: 2@ == 4@ // (int) //then //continue //end 0A8C: write_memory 3@ size 4 value 4@ virtual_protect 0 end end :end_script 0ACE: show_formatted_text_box "GAME VERSION IS NOT ORIGINAL" 0A93: end_custom_thread
Откуда берёт игра количество новых патронов при смене оружия в слоте?
Last edited by wmysterio (09-03-2020 18:39)
Offline
Насколько я вижу в коде игры, к пикапам оружия относится не только тип 4, но еще 3. Попробуй изменить условие
if not 2@ == 4 // <if type is not deadman pickup> then continue end
на
if and 2@ < 3 2@ > 4 then continue end
в такой интерпретации твой пример работает у меня.
Offline
Максимальное число патронов для пикапов оружия хранятся в массиве: uint16_t AmmoForWeapon_OnStreet[48] (0x8A5F50). При смерти педа берётся это значение и делится на 2, а после это число пихается в функцию в качестве аргумента, отвечающего за число патронов.
К примеру, для того, чтобы скриптом изменить максимальное число патронов для пистолета на 150, можно написать следующее:
0A8C: write_memory 0x8A5F7C size 2 value 300 virtual_protect True // 0x8A5F7C = 0x8A5F50 + 22 * 2
Offline