summaryrefslogtreecommitdiff
path: root/npc/commands/zeny.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/commands/zeny.txt')
-rwxr-xr-x[-rw-r--r--]npc/commands/zeny.txt160
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;
}