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