Emistry icon

[RO] SQL Bank

Emistry | PRO | 05/20/18 10:47:59 AM UTC | 0 ⭐ | 612 👁️ | Never ⏰ | []
text |

4.8 KB

|

None

|

0 👍

/

0 👎

// https://rathena.org/board/topic/115606-zeny-in-separate-table/
 /*
CREATE TABLE IF NOT EXISTS `e_bank` (
	`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	`aid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
	`bank_id` INT(11) UNSIGNED NOT NULL DEFAULT '0',
	`zeny` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
	`daily_deposit` INT(11) UNSIGNED NOT NULL DEFAULT '0',
	`daily_withdraw` INT(11) UNSIGNED NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`),
	KEY `aid` (`aid`)
) ENGINE=InnoDB;
*/
  prontera,155,181,5	script	Sample	4_F_KAFRA1,{
	doevent "bank_main::OnTalk";
}
 -	script	bank_main	-1,{
	function func_SetupBank;
 	OnInit:	
		// func_SetupBank(<id>, "<name>", <cost>, <deposit_limit>, <withdraw_limit>);
		func_SetupBank(1, "Basic Account", 1000000, 100000000, 10000000);
		func_SetupBank(2, "Premium Account", 5000000, 1000000000, 100000000);
		// func_SetupBank(3, "Wicked Account", 10000000, 5000000000, 1000000000); // by default emulator only can hold 2.1b integer
		end;
 	OnTalk:
		.@aid = getcharid(3);
		query_sql("SELECT `id`,`bank_id`,`daily_deposit`,`daily_withdraw`,`zeny` FROM `e_bank` WHERE `aid` = "+.@aid+" LIMIT 1", .@id, .@bank_id, .@daily_deposit, .@daily_withdraw, .@total_zeny$);
 		if (.@id > 0 && .@bank_id > 0) {
			mes "^0055FF" + .bank_name$[.@i]+"^000000";
			mes "Total Zeny: " + F_InsertComma(.@total_zeny$)+" z";
			mes "Daily deposit limit:";
			mes F_InsertComma(.@daily_deposit) + " / " + F_InsertComma(.bank_limit_deposit[.@bank_id - 1])+" z";
			mes "Daily withdraw limit:";
			mes F_InsertComma(.@daily_withdraw) + " / " + F_InsertComma(.bank_limit_withdraw[.@bank_id - 1])+" z";
			next;
			switch (select(
				"Deposit Zeny",
				"Withdraw Zeny",
				"^FF0000Cancel Account^000000"
			)) {
				case 1:
					.@max_amount = (.bank_limit_deposit[.@bank_id - 1] - .@daily_deposit);
					if (.@max_amount > Zeny)
						.@max_amount = Zeny;
					mes "How many Zeny will be deposit into the account? (max: "+F_InsertComma(.@max_amount)+"z)";
					input .@amount, 0, .@max_amount;
					if (.@amount > 0) {
						Zeny -= .@amount;
						query_sql("UPDATE `e_bank` SET `zeny` = `zeny` + "+.@amount+", `daily_deposit` = `daily_deposit` + "+.@amount+" WHERE `aid` = "+.@aid+" LIMIT 1");
						mes "You have deposit "+F_InsertComma(.@amount)+" Zeny into the Bank.";
					}
					break;
				case 2:
					.@max_amount = (.bank_limit_withdraw[.@bank_id - 1] - .@daily_withdraw);
					if (.@max_amount > (MAX_ZENY - Zeny))
						.@max_amount = (MAX_ZENY - Zeny);
					mes "How many Zeny will be withdraw into the account? (max: "+F_InsertComma(.@max_amount)+"z)";
					input .@amount, 0, .@max_amount;
					if (.@amount > 0) {
						Zeny += .@amount;
						query_sql("UPDATE `e_bank` SET `zeny` = `zeny` - "+.@amount+", `daily_withdraw` = `daily_withdraw` + "+.@amount+" WHERE `aid` = "+.@aid+" LIMIT 1");
						mes "You have withdraw "+F_InsertComma(.@amount)+" Zeny from the Bank.";
					}
					break;
				case 3:
					if (.@total_zeny$ != "0") {
						mes "You need to withdraw all the remaining "+F_InsertComma(.@total_zeny$)+" zeny before you can cancel your account.";
					}
					else {
						query_sql("DELETE FROM `e_bank` WHERE `aid` = "+.@aid+" LIMIT 1");
						mes "Your bank account has been cancelled.";
					}
					break;
				default:
					break;
			}
		}
		else {
			mes "You didnt have a bank account yet.";
			next;
			if (select("Create a Bank?", "Cancel") == 1) {
				mes "Pick a bank type...";
				for (.@i = 0; .@i < .bank_size; .@i++) {
					mes " ";
					mes "^0055FF" + .bank_name$[.@i]+"^000000";
					mes "Daily deposit limit:";
					mes F_InsertComma(.bank_limit_deposit[.@i])+" z";
					mes "Daily withdraw limit:";
					mes F_InsertComma(.bank_limit_withdraw[.@i])+" z";
					mes "Cost: " + F_InsertComma(.bank_cost[.@i])+" z";
					.@menu$ = .@menu$ + .bank_name$[.@i] + ":";
				}
				next;
				.@i = select(.@menu$) - 1;
				if (Zeny < .bank_cost[.@i]) {
					mes "You dont have enough zeny to purchase this bank type.";
				}
				else {
					Zeny -= .bank_cost[.@i];
					query_sql("INSERT INTO `e_bank` (`aid`,`bank_id`) VALUES ("+.@aid+", "+.bank_id[.@i]+")");
					mes "You have successfully purchased this bank type.";
				}
			}
		}
		close;
 	OnHour00:
		query_sql("UPDATE `e_bank` SET `daily_deposit` = 0, `daily_withdraw` = 0");
		end;
 	function	func_SetupBank	{
		.@id = getarg(0, 0);
		.@name$ = getarg(1, "");
		.@cost = getarg(2, MAX_ZENY);
		.@limit_deposit = getarg(3, MAX_ZENY);
		.@limit_withdraw = getarg(4, MAX_ZENY);
 		if (.@id > 0 && .@name$ != "") {
			.bank_id[.bank_size] = .@id;
			.bank_name$[.bank_size] = .@name$;
			.bank_cost[.bank_size] = .@cost;
			.bank_limit_deposit[.bank_size] = .@limit_deposit;
			.bank_limit_withdraw[.bank_size] = .@limit_withdraw;
			.bank_size++;
		}
		return;
	}
 }

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎