ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/maps/perl/bank.ext
(Generate patch)

Comparing deliantra/maps/perl/bank.ext (file contents):
Revision 1.3 by pippijn, Sun May 21 22:00:19 2006 UTC vs.
Revision 1.4 by pippijn, Mon May 22 17:57:55 2006 UTC

8# provided, the bank account has this amount of money 8# provided, the bank account has this amount of money
9# - exchange, will exchange between imperials and platinum coins 9# - exchange, will exchange between imperials and platinum coins
10# - balance, simply shows how much money one has on his/her account. 10# - balance, simply shows how much money one has on his/her account.
11# 11#
12# TODO: 12# TODO:
13# - Continue modularising
14# * transaction()
15# - Comment more steps 13# - Comment more steps
16 14
17# The units are being used in each sub so they are declared globally. 15# The units are being used in each sub so they are declared globally.
18my %unit = ( 16my %unit = (
19 silver => 1, 17 silver => 1,
20 gold => 10, 18 gold => 10,
21 platina => 50, 19 platina => 50,
22 imperial => 10000, 20 imperial => 10000,
23); 21);
24 22
25# Subroutine just to calculate exchange rates, I purposefully left in the 23# Subroutine just to calculate exchange rates.
26# exchange rates for imperial => imperial, platina => platina, etc.
27sub calc_exchange_rate { 24sub calc_exchange_rate {
28 my ($value, $from_cur, $to_cur) = @_; 25 my ($value, $from_cur, $to_cur) = @_;
29 26
30 if ($unit{$from_cur} and $unit{$to_cur}) { 27 if ($unit{$from_cur} and $unit{$to_cur}) {
31 return $value * $unit{$from_cur} / $unit{$to_cur}; 28 return $value * $unit{$from_cur} / $unit{$to_cur};
55 52
56sub transaction { 53sub transaction {
57 my ($who, $action, $amount, $currency) = @_; 54 my ($who, $action, $amount, $currency) = @_;
58 my $pay = $amount * $unit{$currency}; 55 my $pay = $amount * $unit{$currency};
59 56
57 if (!$unit{$currency}) {
58 return "We don't trade in that currency.";
59 }
60
60 # First check for possible overflow and user stupidity 61 # First check for possible overflow and user stupidity
61 if ($amount > 10000) { 62 if ($amount > 10000) {
62 return "Sorry, we do not handle more than 10000 units for one ".$action."."; 63 return "Sorry, we do not handle more than 10000 units for one ".$action.".";
63 } elsif ($amount == 0) { 64 } elsif ($amount == 0) {
64 return "You can not ".$action." nothing."; 65 return "You can not ".$action." nothing.";
65 } elsif ($amount < 0) { 66 } elsif ($amount < 0) {
66 return "You can not ".$action." negative values."; 67 return "You can not ".$action." negative values.";
67 } else { 68 }
69
68 # Here we handle the transactions 70 # Here we handle the transactions
69 if ($action eq "deposit") { 71 if ($action eq "deposit") {
70 if ($who->pay_amount ($pay)) { 72 if ($who->pay_amount ($pay)) {
71 $who->{bank_balance} += $pay; 73 $who->{bank_balance} += $pay;
72 return "$amount $currency received."; 74 return "$amount $currency received.";
75 } else {
76 return "You don't have enough money with you.";
77 }
78 } elsif ($action eq "withdraw") {
79 if ($who->{bank_balance} - $pay > 0) {
80 $who->{bank_balance} -= $pay;
81 if ($currency eq "imperial") {
82 my $money = cf::object::new ("imperial");
83 $money->set_property (1, 24, $amount);
84 $money->insert_in_ob ($who);
73 } else { 85 } else {
74 return "You don't have enough money with you."; 86 my $money = cf::object::new ($currency."coin");
87 $money->set_property (1, 24, $amount);
88 $money->insert_in_ob ($who);
75 } 89 }
76 } elsif ($action eq "withdraw") {
77 if ($who->{bank_balance} - $pay > 0) {
78 $who->{bank_balance} -= $pay;
79 if ($currency eq "imperial") {
80 my $money = cf::object::new ("imperial");
81 $money->set_property (1, 24, $amount);
82 $money->insert_in_ob ($who);
83 } else {
84 my $money = cf::object::new ($currency."coin");
85 $money->set_property (1, 24, $amount);
86 $money->insert_in_ob ($who);
87 }
88 return "Withdrew $amount $currency"; 90 return "Withdrew $amount $currency";
89 }
90 } 91 }
91 } 92 }
92} 93}
93 94
94sub on_say { 95sub on_say {
120 $who->message ($ob->name." says: Withdraw $amount of what: ".$units.".", cf::NDI_WHITE); 121 $who->message ($ob->name." says: Withdraw $amount of what: ".$units.".", cf::NDI_WHITE);
121 } elsif ($cmd eq "withdraw" and $amount eq "" and $currency eq "") { 122 } elsif ($cmd eq "withdraw" and $amount eq "" and $currency eq "") {
122 $who->message ($ob->name." says: How much do you want to withdraw?", cf::NDI_WHITE); 123 $who->message ($ob->name." says: How much do you want to withdraw?", cf::NDI_WHITE);
123 } 124 }
124 125
125 elsif ($cmd eq "help" || "yes") { 126 elsif ($cmd eq "help" or $cmd eq "yes") {
126 $who->message ($ob->name." says: ".help($arguments), cf::NDI_WHITE); 127 $who->message ($ob->name." says: ".help($arguments), cf::NDI_WHITE);
128 }
129
130 else {
131 $who->message ($ob->name." says: Do you need help?", cf::NDI_WHITE);
127 } 132 }
128} 133}
129 134
130sub help { 135sub help {
131 my ($command) = @_; 136 my ($command) = @_;
149 return "We exchange between imperial notes and platinum coins at a very low price. To change from platinum to imperials, say: 154 return "We exchange between imperial notes and platinum coins at a very low price. To change from platinum to imperials, say:
150 exchange <amount> platina\nTo change from imperials to platinum, say: 155 exchange <amount> platina\nTo change from imperials to platinum, say:
151 exchange <amount> imperial\nWe currently only exchange between these two currencies. If you want to know more about exchange rates, ask me: 156 exchange <amount> imperial\nWe currently only exchange between these two currencies. If you want to know more about exchange rates, ask me:
152 help exchange rates\nThanks for using our bank."; 157 help exchange rates\nThanks for using our bank.";
153 } elsif ($command eq "exchange rates") { 158 } elsif ($command eq "exchange rates") {
154 return "Here is a list of exchange rates:\n" 159 my @units = sort { $unit{$b} <=> $unit{$a} } keys %unit;
155 ."imperial => ".calc_exchange_rate(1, "imperial", "platina")." platina\n" 160 my $exchange_rates = "Here is a list of exchange rates:\n";
156 ."imperial => ".calc_exchange_rate(1, "imperial", "gold")." gold\n"
157 ."imperial => ".calc_exchange_rate(1, "imperial", "silver")." silver\n"
158 161
159 ."platina => ".calc_exchange_rate(1, "platina", "gold")." gold\n" 162 for my $from_cur_nr (0 .. $#units) {
160 ."platina => ".calc_exchange_rate(1, "platina", "silver")." silver\n" 163 for my $to_cur_nr ($from_cur_nr+1 .. $#units) {
161 164 $exchange_rates = $exchange_rates."One $units[$from_cur_nr] is ".calc_exchange_rate(1, $units[$from_cur_nr], $units[$to_cur_nr])." $units[$to_cur_nr]\n";
165 }
166 }
162 ."gold => ".calc_exchange_rate(1, "gold", "silver")." silver\nThis may change a bit with the stock markets but don't expect it to be much."; 167 return $exchange_rates."This may change a bit with the stock markets but don't expect it to be much.";
163 } 168 }
164} 169}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines