Casey Conundrum Posted January 1, 2023 Share Posted January 1, 2023 Hello all! I needing some help on a script, I know it has to be pretty simple but I'm just not seeing it my self. I'm trying to return a positive when subtracting from a given number even when its returns a negative number. I just can't rap my head around lsl and math. I was able to get it to this point integer subtract(integer x, integer y) { if( x < y ) return 0; else return x - y; } default { state_entry() { llOwnerSay((string)subtract(10, 11)); } } but the system I working on works on positive returns and returning 0 throws off my system when I just want to remove what the system has. IE Object A is asking to remove 11 from Object B, but Object B only has 10 Units, So Object B would send back it was only able to remove 10 Units so it would tell Object A 10 was removed. Link to comment Share on other sites More sharing options...
Wulfie Reanimator Posted January 1, 2023 Share Posted January 1, 2023 (edited) llAbs will give you the absolute (positive) value of a given integer. llFabs will do the same for floats. Edited January 1, 2023 by Wulfie Reanimator Link to comment Share on other sites More sharing options...
Casey Conundrum Posted January 1, 2023 Author Share Posted January 1, 2023 3 minutes ago, Wulfie Reanimator said: llAbs will give you the absolute (positive) value of a given integer. llAbs would work just fine, but on the math end of lsl I just don't know how I would be able to tell hey I can only give you 10 of the 11 your asking for. Link to comment Share on other sites More sharing options...
Casey Conundrum Posted January 1, 2023 Author Share Posted January 1, 2023 Thanks Wulfie seems to be working so far with this code. But if I run into trouble I will ask again on it integer subtract(integer x, integer y) { integer a; if(x < y) { integer z = ShowAbsolute(x - y); a = y - z; return a; } else { return x - y; } } integer ShowAbsolute(integer inputInteger) { integer A = llAbs(inputInteger); return A; } default { state_entry() { llOwnerSay((string)subtract(10, 11)); } } Link to comment Share on other sites More sharing options...
Fenix Eldritch Posted January 1, 2023 Share Posted January 1, 2023 7 hours ago, Casey Conundrum said: Object A is asking to remove 11 from Object B, but Object B only has 10 Units, So Object B would send back it was only able to remove 10 Units so it would tell Object A 10 was removed. So within your function, does this mean x is what object B actually has and y is what it's being told to remove? If so, then just return x instead of zero when x is less than y. 1 Link to comment Share on other sites More sharing options...
animats Posted January 1, 2023 Share Posted January 1, 2023 Oh, you want it to work like a bank account, where you can't withdraw more if your balance is zero. I think. // Minimum value of two integers integer min(integer x, integer y) { if (x < y) { return x; } else { return y; } } // Withdraw from balance integer gBalance = 100; // Withdraw from balance integer withdraw(integer n) { integer withdrawal = min(n, gBalance); // limit of what you can withdraw gBalance -= withdrawal; // will not go negative llOwnerSay("Tried to withdraw " + (string)n + " received " + (string) withdrawal); return withdrawal; } default { touch_start(integer total_number) { llSay(0, "Touched."); withdraw(25); withdraw(50); withdraw(50); // overdrawn } } This should work. Link to comment Share on other sites More sharing options...
Recommended Posts
Please take a moment to consider if this thread is worth bumping.
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now