#1 09-03-2020 18:36

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Патроны в пикапе при подборе

Привет, форум. Вот и моя очередь задать вопрос по скриптингу ) В общем, суть такова, что я хочу изменить количество патронов в пикапе, которые создаются при смерти актёров. Собственно, изменить то я изменил, но клавиша 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

#2 06-04-2020 04:50

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Патроны в пикапе при подборе

Насколько я вижу в коде игры, к пикапам оружия относится не только тип 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

#3 23-04-2020 09:35

Dyabda
Registered: 14-07-2017
Posts: 32

Re: Патроны в пикапе при подборе

Максимальное число патронов для пикапов оружия хранятся в массиве: uint16_t AmmoForWeapon_OnStreet[48] (0x8A5F50). При смерти педа берётся это значение и делится на 2, а после это число пихается в функцию в качестве аргумента, отвечающего за число патронов.
К примеру, для того, чтобы скриптом изменить максимальное число патронов для пистолета на 150, можно написать следующее:

0A8C: write_memory 0x8A5F7C size 2 value 300 virtual_protect True
// 0x8A5F7C = 0x8A5F50 + 22 * 2

Offline

Board footer

Powered by FluxBB