diff options
Diffstat (limited to 'npc/commands/zeny.txt')
-rwxr-xr-x[-rw-r--r--] | npc/commands/zeny.txt | 160 |
1 files changed, 70 insertions, 90 deletions
diff --git a/npc/commands/zeny.txt b/npc/commands/zeny.txt index 944c1bb9..de1013eb 100644..100755 --- a/npc/commands/zeny.txt +++ b/npc/commands/zeny.txt @@ -1,98 +1,78 @@ -// @esp atcommand -// changes the number of Esperin -// -// group lv: 3 -// group char lv: 99 -// log: True -// -// usage: -// @esp <delta> -// #esp "char" <delta> -// -// example: -// @esp +5 -// @esp -5 -// @esp +++ +- script @zeny NPC32767,{ + callfunc "argv_splitter"; + .@n$ = if_then_else(@argv$[1] != "", "char", "") + "Zeny"; + if (GM < CMD_ZENY && GM < G_SYSOP) goto L_GM; // check if you can use it on self + .@target_id = BL_ID; + if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]); + if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self + if (@argv$[1] != "" && GM < CMD_CHARZENY && GM < G_SYSOP) goto L_GM; // when target is not self, use charZeny permission + if (@argv$[0] == "--") goto L_Remove; + if (@argv$[0] == "---") goto L_RemoveAll; + if (@argv$[0] == "++") goto L_Max; + if (@argv$[0] == "+++") goto L_MaxAll; + set .@delta, @argv[0]; // ± Zeny + set .@Zeny, get(Zeny, .@target_id); // get the number of Zeny in char + set .@bank, get(#BankAccount, .@target_id); // get number of Zeny in (world) account + set .@new_Zeny, .@Zeny + .@delta; // new balance in char + if (.@new_Zeny < 0) goto L_MaybeRemoveBank; // Zeny would be below 0 so check if we can take from bank + if (.@new_Zeny > .max_Zeny) goto L_MaybeAddBank; // Zeny would be over the limit so check if we can store in bank + Zeny = (.@Zeny + .@delta), .@target_id; + goto L_Success; -- script @esp 32767,{ +L_Remove: + Zeny = 0, .@target_id; + goto L_Success; + +L_RemoveAll: + Zeny = 0, .@target_id; + #BankAccount = 0, .@target_id; + goto L_Success; + +L_Max: + Zeny = .max_Zeny, .@target_id; + goto L_Success; + +L_MaxAll: + Zeny = .max_Zeny, .@target_id; + #BankAccount = .max_int, .@target_id; + goto L_Success; + +L_MaybeAddBank: + .@new_bank = (.@bank + (.@new_Zeny - .max_Zeny)); + if (.@new_bank > .max_int || .@new_bank < 0) goto L_OutOfBounds; + Zeny = .max_Zeny, .@target_id; + #BankAccount = .@new_bank, .@target_id; + goto L_Success; + +L_MaybeRemoveBank: + if ((.@bank + .@new_Zeny) < 0) goto L_OutOfBounds; + Zeny = 0, .@target_id; + #BankAccount = (.@bank + .@new_Zeny), .@target_id; + goto L_Success; + +L_OutOfBounds: + // XXX: maybe we could also take from other chars from the same accout? + message strcharinfo(0), .@n$+" : Impossible to proceed! This would cause the player to have less than 0 Zeny or more than " + .max_int + "."; end; -OnCall: - .@delta$ = .@atcmd_parameters$[0]; +L_Failed: + // XXX: should we allow GMs to change Zeny of users that are not logged in? + message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?"; + end; - if (debug && startswith(.@delta$, "--")) - { - Zeny = 0; - if (.@delta$ == "---") - { - BankVault = 0; - } - } - else if (debug && (startswith(.@delta$, "++") || .@delta$ == "")) - { - Zeny = MAX_ZENY; - if (.@delta$ == "+++") - { - BankVault = MAX_BANK_ZENY; - } - } - else - { - .@d = atoi(.@delta$); - if (.@d < 0) - { - .@a = Zeny + .@d; // The amount of zeny remaining after - if (.@a < 0) // If we can't remove that much zeny, try removing from bank too - { - Zeny = 0; - .@b = BankVault + .@a; // amount remaining in bank after - if (.@b < 0) - { - BankVault = 0; - } - else - { - BankVault += .@a; - } - } - else // We can remove that much zeny - { - Zeny += .@d; - } - } - else - { - .@a = Zeny + .@d; // The amount of zeny after - if (.@a < 0 || .@a >= MAX_ZENY) // If we can't add that much zeny, try adding to bank - { - .@c = .@d - (.@a - Zeny); // the amount to put in bank - Zeny = MAX_ZENY; - .@b = BankVault + .@c; // amout in bank after - if (.@b < 0 || .@b == MAX_BANK_ZENY) - { - BankVault = MAX_BANK_ZENY; - } - else - { - BankVault += .@c; - } - } - else // We can add that much zeny - { - Zeny += .@d; - } - } - } +L_Success: + gmlog "@Zeny " + @args$; + message strcharinfo(0), .@n$+" : The operation succeeded."; end; -OnInit: - if (debug > 0) - { - bindatcmd "e", "@esp::OnCall", 0, 99, 0; - bindatcmd "esp", "@esp::OnCall", 0, 99, 0; - bindatcmd "money", "@esp::OnCall", 0, 99, 0; - end; - } +L_GM: + message strcharinfo(0), .@n$+" : GM command is level "+ if_then_else(@argv$[1] != "", CMD_CHARZENY, CMD_ZENY) +", but you are level " + GM; + end; - bindatcmd "esp", "@esp::OnCall", 99, 99, 1; +OnInit: + set .max_Zeny, 1000000000; // hardcoded in tmwa + set .max_int, 2147483647; // max int32 value + registercmd chr(ATCMD_SYMBOL) + "Zeny", strnpcinfo(0); + registercmd chr(ATCMD_SYMBOL) + "charZeny", strnpcinfo(0); + end; } |