Raised This Month: $ Target: $400
 0% 

Solved Something strange about function limit


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Adryyy
Member
Join Date: Oct 2011
Old 06-13-2021 , 09:48   Something strange about function limit
Reply With Quote #1

Hi. I have this code:
PHP Code:
    set_user_health(iKiller,min(user_data[iKiller][max_hp],get_user_health(iKiller) + user_data[iKiller][!hs?hp_kill:hp_kill_hs]+wpn[0]=='k'?
    
user_data[iKiller][!hs?knife_kill_multi:knife_kill_hs_multi]:wpn[1]=='r'?user_data[iKiller][grenade_kill_multi]:0));
    
set_user_armor(iKiller,min(user_data[iKiller][max_ap],get_user_armor(iKiller) + user_data[iKiller][!hs?ap_kill:ap_kill_hs]+wpn[0]=='k'?
    
user_data[iKiller][!hs?knife_kill_multi:knife_kill_hs_multi]:wpn[1]=='r'?user_data[iKiller][grenade_kill_multi]:0))
    
cs_set_user_money(iKillercs_get_user_money(iKiller) + user_data[iKiller][!hs?money_kill:money_kill_hs]+wpn[0]=='k'?
    
user_data[iKiller][!hs?knife_kill_multi:knife_kill_hs_multi]:wpn[1]=='r'?user_data[iKiller][grenade_kill_multi]:DEFAULT_CS_KILL_MONEY,1); 
But will set everything(hp,ap,money) to 0, but the logic of function is ok. I tested stored values(every one, one by one), and they are ok.

If i use like this:
PHP Code:
    if(hs){
        if(
wpn[0]=='k'){
            
set_user_health(iKiller,min(user_data[iKiller][max_hp],\
            
get_user_health(iKiller)+user_data[iKiller][hp_kill_hs]+user_data[iKiller][knife_kill_hs_multi]))
            
cs_set_user_money(iKiller,min(16000,\
            
cs_get_user_money(iKiller)+user_data[iKiller][money_kill_hs]+user_data[iKiller][knife_kill_hs_multi]),1)
            
set_user_armor(iKiller,min(user_data[iKiller][max_ap],\
            
get_user_armor(iKiller)+user_data[iKiller][ap_kill_hs]+user_data[iKiller][knife_kill_hs_multi]))
        }
        else{
            
set_user_health(iKiller,min(user_data[iKiller][max_hp],get_user_health(iKiller)+user_data[iKiller][hp_kill_hs]))
            
cs_set_user_money(iKiller,min(16000,cs_get_user_money(iKiller)+user_data[iKiller][money_kill_hs]),1)
            
set_user_armor(iKiller,min(user_data[iKiller][max_ap],get_user_armor(iKiller)+user_data[iKiller][ap_kill_hs]))
        }
    }
    else{
        if(
wpn[0]=='k'){
            
set_user_health(iKiller,min(user_data[iKiller][max_hp],\
            
get_user_health(iKiller)+user_data[iKiller][hp_kill]+user_data[iKiller][knife_kill_multi]))
            
cs_set_user_money(iKiller,min(16000,\
            
cs_get_user_money(iKiller)+user_data[iKiller][money_kill]+user_data[iKiller][knife_kill_multi]),1)
            
set_user_armor(iKiller,min(user_data[iKiller][max_ap],\
            
get_user_armor(iKiller)+user_data[iKiller][ap_kill]+user_data[iKiller][knife_kill_multi]))
        }
        else if(
wpn[1]=='r'){
            
set_user_health(iKiller,min(user_data[iKiller][max_hp],\
            
get_user_health(iKiller)+user_data[iKiller][hp_kill]+user_data[iKiller][grenade_kill_multi]))
            
cs_set_user_money(iKiller,min(16000,\
            
cs_get_user_money(iKiller)+user_data[iKiller][money_kill]+user_data[iKiller][grenade_kill_multi]),1)
            
set_user_armor(iKiller,min(user_data[iKiller][max_ap],\
            
get_user_armor(iKiller)+user_data[iKiller][ap_kill]+user_data[iKiller][grenade_kill_multi]))
        }
        else{
            
set_user_health(iKiller,min(user_data[iKiller][max_hp],get_user_health(iKiller)+user_data[iKiller][hp_kill]))
            
cs_set_user_money(iKiller,min(16000,cs_get_user_money(iKiller)+user_data[iKiller][money_kill]),1)
            
set_user_armor(iKiller,min(user_data[iKiller][max_ap],get_user_armor(iKiller)+user_data[iKiller][ap_kill]))
        }
    } 
Will set the right values.

So..i don't understand why the first type is not working, but the second is...I tried with clamp, the same problem for first code.

Last edited by Adryyy; 06-15-2021 at 09:27.
Adryyy is offline
Send a message via Yahoo to Adryyy Send a message via Skype™ to Adryyy
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 06-13-2021 , 16:16   Re: Something strange about function limit
Reply With Quote #2

There is often no benefit to trying to put an insane amount of code into a single line and often causes you to create bugs.

Are the two codes supposed to do the same thing? If yes, is there some reason you are trying to refactor the code? Maybe there is a better solution for your goal.

I did my own version of refactoring the second code you posted and it is much more modular, easier to change the calculations, and much much easier to debug:

PHP Code:
// Set headshot bonus based on headshot status
new hsHealthBonushsMoneyBonushsArmorBonus
hsHealthBonus 
user_data[iKiller][hs hp_kill_hs hp_kill]
hsMoneyBonus user_data[iKiller][hs money_kill_hs money_kill]
hsArmorBonus user_data[iKiller][hs ap_kill_hs ap_kill]

// Set the bonus values based on weapon type
new weaponHealthBonus 0weaponMoneyBonus 0weaponArmorBonus 0
if( wpn[0] == 'k' // Knife
{
    
weaponHealthBonus user_data[iKiller][knife_kill_multi]
    
weaponMoneyBonus user_data[iKiller][knife_kill_multi]
    
weaponArmorBonus user_data[iKiller][knife_kill_multi]
}
else if( 
wpn[1] == 'r' // Grenade
{
    
weaponHealthBonus user_data[iKiller][grenade_kill_multi]
    
weaponMoneyBonus user_data[iKiller][grenade_kill_multi]
    
weaponArmorBonus user_data[iKiller][grenade_kill_multi]
}

// Calculate new values
new newHealthnewMoneynewArmor
newHealth 
get_user_health(iKiller) + hsHealthBonus weaponHealthBonus
newMoney 
cs_get_user_money(iKiller) + hsMoneyBonus weaponMoneyBonus
newArmor 
get_user_armor(iKiller) + hsArmorBonus weaponArmorBonus

// Set new values without exceeding max value
set_user_health(iKillermin(user_data[iKiller][max_hp], newHealth))
cs_set_user_money(iKillermin(16000newMoney), 1)
set_user_armor(iKillermin(user_data[iKiller][max_ap], newArmor)) 
__________________

Last edited by fysiks; 06-13-2021 at 17:15.
fysiks is offline
Adryyy
Member
Join Date: Oct 2011
Old 06-15-2021 , 09:26   Re: Something strange about function limit
Reply With Quote #3

ok i got the idea, thanks!! (solved)
Adryyy is offline
Send a message via Yahoo to Adryyy Send a message via Skype™ to Adryyy
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 03:09.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode