summaryrefslogtreecommitdiff
path: root/npc/custom/eAAC_Scripts/DonationGirl
diff options
context:
space:
mode:
Diffstat (limited to 'npc/custom/eAAC_Scripts/DonationGirl')
-rw-r--r--npc/custom/eAAC_Scripts/DonationGirl/donate.txt597
-rw-r--r--npc/custom/eAAC_Scripts/DonationGirl/sql/donate.sql8
-rw-r--r--npc/custom/eAAC_Scripts/DonationGirl/sql/donate_item_db.sql8
3 files changed, 306 insertions, 307 deletions
diff --git a/npc/custom/eAAC_Scripts/DonationGirl/donate.txt b/npc/custom/eAAC_Scripts/DonationGirl/donate.txt
index dc7c0bb2a..f3d25c6d2 100644
--- a/npc/custom/eAAC_Scripts/DonationGirl/donate.txt
+++ b/npc/custom/eAAC_Scripts/DonationGirl/donate.txt
@@ -1,300 +1,250 @@
-//===== Athena Script =======================================
+//===== rAthena Script =======================================
//= Donation NPC
-//===== By ==================================================
+//===== By: ==================================================
//= Josh
-//===== Version =============================================
-//= 1.0 - First release. Probably contains bugs/security
-//= risks.
-//= 1.1 - Added a check for whether the account exists when
-//= adding a donator. Need to improve ordering when
-//= viewing all donations.
-//= 1.2 - Modified for public use. Added checkweight feature.
-//= 2.0 - Many changes, especially ones I had always wanted
-//= to add to this script. Includes reading items from
-//= a separate SQL table and more database manipulation
-//= options for GMs.
-//= 2.1 - Made few changes including the add/remove items
-//= feature.
-//= 3.0 - All strings inputted by a user and user/char names
-//= in SQL queries are now escaped. Each item has a
-//= price rather than a quantity. This script can work
-//= with decimals.
-//= 3.1 - Added quotes to some queries, fixed a variable and
-//= removed a comment.
-//= 3.2 - Fixed a problem where rAthena would crash if a
-//= query returned NULL.
-//= 3.3 - Optimized query speeds by combining a few select
-//= queries into one. Requires Trunk 7975.
-//= 3.4 - Added MySQL version check. If version < 5.0.8, all
-//= queries with CAST are omitted. Use 5.0.8 and up
-//= when possible. SQL errors may consequent if GM's
-//= input is incorrect. Added logging of claims.
-//= "log_npc" in log_athena.conf must be enabled. Logs
-//= will appear in the "npclog" table. Claim menu now
-//= only shows items that can be afforded.
-//= 3.5 - Minor change to table.
-//= 3.6 - Removed name column in donate_item_db. Added
-//= support for item_db2 table.
-//= 3.7 - Added Zeny support. $rate must be set for it to be
-//= used. Removed truncate() in a query since rAthena
-//= automatically truncates floats to ints.
-//= 3.8 - Fixed problem with menus and null values.
-//= 3.9 - Explicit reset of @aid.
-//= 3.10 - Applied previous fix to other variables and forced
-//= dialogue box closure every time database is
-//= modified.
-//= 3.11 - Explicit reset of another variable. Fixed typo
-//= - with $rate. Added logmes for GM operations.
-//===== Compatible With =====================================
-//= rAthena SQL - any version with the new query_sql command
-//= (Trunk 7975 and up).
-//= MySQL - 5.0.8 and up highly recommended but not required.
-//===== Description =========================================
+//===== Current Version: =====================================
+//= 3.11 (changelog at end of file)
+//===== Compatible With: =====================================
+//= rAthena SVN; SQL only, revision 7975+
+//===== Description: =========================================
//= A script that lets a player claim an item for donating.
//= Allows a GM to input each donation.
-//===== Comments ============================================
+//===== Comments =============================================
//= This script uses SQL tables to store variables for the
//= amount donated by users and the items claimable.
-//===== Installation ========================================
+//===== Installation =========================================
//= You must import donate.sql and donate_item_db.sql (and
//= item_db.sql and item_db2.sql, which comes with rAthena)
//= before using this script.
-//===========================================================
-//= Thanks to Vich for helping me with the SQL syntax.
-//= Thanks to Lance for helping me with the the arrays and
-//= for implementing query_sql.
-//= Thanks to Skotlex for implementing escape_sql.
-//= Thanks to Toms for implementing the new multi-column
-//= query_sql command.
-//===========================================================
+//============================================================
prontera,145,179,5 script Donation Girl 714,{
-if (getgmlevel() >= 80) goto L_GM;
+ if (getgmlevel() >= 80) goto L_GM;
L_START:
-mes "[Donation Girl]";
-mes "Hello! I'm the Donation Girl!";
-mes "If you have made a donation,";
-mes "you are entitled to a reward!";
-next;
-menu "More info",-,"Make a claim",L_CHECK,"Statistics",L_STATS;
+ mes "[Donation Girl]";
+ mes "Hello! I'm the Donation Girl!";
+ mes "If you have made a donation,";
+ mes "you are entitled to a reward!";
+ next;
+ menu "More info",-,"Make a claim",L_CHECK,"Statistics",L_STATS;
L_INFO:
-mes "[Donation Girl]";
-mes "Each month, a lot of money is paid to keep this server running.";
-next;
-mes "[Donation Girl]";
-mes "You can support us by donating any amount of money.";
-next;
-mes "[Donation Girl]";
-mes "To show our appreciation, we will gladly give you a reward.";
-next;
-menu "Continue",L_START,"Cancel",-;
+ mes "[Donation Girl]";
+ mes "Each month, a lot of money is paid to keep this server running.";
+ next;
+ mes "[Donation Girl]";
+ mes "You can support us by donating any amount of money.";
+ next;
+ mes "[Donation Girl]";
+ mes "To show our appreciation, we will gladly give you a reward.";
+ next;
+ menu "Continue",L_START,"Cancel",-;
L_CHECK:
-query_sql "SELECT `amount`,`claimed` FROM `donate` WHERE `account_id` = "+getcharid(3), @amount$, @claimed$;
-query_sql "SELECT "+@amount$+" - "+@claimed$, @value$;
-query_sql "SELECT '"+@value$+"' > 0", @enough;
-if(!@enough) {
- mes "[Donation Girl]";
- mes "Sorry, you do not have enough to make a claim.";
- mes "If you have donated but have not made a claim,";
- mes "Please give us time to process your donation.";
- close;
+ query_sql "SELECT `amount`,`claimed` FROM `donate` WHERE `account_id` = "+getcharid(3), @amount$, @claimed$;
+ query_sql "SELECT "+@amount$+" - "+@claimed$, @value$;
+ query_sql "SELECT '"+@value$+"' > 0", @enough;
+ if(!@enough) {
+ mes "[Donation Girl]";
+ mes "Sorry, you do not have enough to make a claim.";
+ mes "If you have donated but have not made a claim,";
+ mes "Please give us time to process your donation.";
+ close;
}
L_CLAIM:
-mes "[Donation Girl]";
-mes "Thankyou for donating!";
-mes "You have $"+@value$+" worth of credit!";
-mes "What would you like to claim?";
-next;
-menu "Items",L_CLAIMITEM,"Zeny",L_ZENY;
+ mes "[Donation Girl]";
+ mes "Thankyou for donating!";
+ mes "You have $"+@value$+" worth of credit!";
+ mes "What would you like to claim?";
+ next;
+ menu "Items",L_CLAIMITEM,"Zeny",L_ZENY;
L_CLAIMITEM:
-mes "[Donation Girl]";
-mes "Very well. Which item would you like?";
-next;
-query_sql "SELECT `id` FROM `donate_item_db` WHERE `price` <= "+@value$+" ORDER BY `id`",@name;
-set @menu$, getitemname(@name[0]);
+ mes "[Donation Girl]";
+ mes "Very well. Which item would you like?";
+ next;
+ query_sql "SELECT `id` FROM `donate_item_db` WHERE `price` <= "+@value$+" ORDER BY `id`",@name;
+ set @menu$, getitemname(@name[0]);
for(set @i, 1; @i < getarraysize(@name); set @i, @i + 1){
set @menu$, @menu$ + ":" + getitemname(@name[@i]);
}
-set @m, select(@menu$)-1;
+ set @m, select(@menu$)-1;
-query_sql "SELECT `price` FROM `donate_item_db` WHERE `id` = "+@name[@m], @price$;
-query_sql "SELECT "+@value$+" / "+@price$, @max;
+ query_sql "SELECT `price` FROM `donate_item_db` WHERE `id` = "+@name[@m], @price$;
+ query_sql "SELECT "+@value$+" / "+@price$, @max;
-mes "[Donation Girl]";
-mes getitemname(@name[@m])+"s cost $"+@price$+" each.";
-mes "How many "+getitemname(@name[@m])+"s would you like to claim?";
-mes "Maximum: "+@max+".";
-input @quantity;
-mes "[Donation Girl]";
-if(@quantity>@max) {
- mes "Sorry, but you do not have enough to claim "+@quantity+" "+getitemname(@name[@m])+"s.";
- next;
- goto L_CLAIM;
+ mes "[Donation Girl]";
+ mes getitemname(@name[@m])+"s cost $"+@price$+" each.";
+ mes "How many "+getitemname(@name[@m])+"s would you like to claim?";
+ mes "Maximum: "+@max+".";
+ input @quantity;
+ mes "[Donation Girl]";
+ if(@quantity>@max) {
+ mes "Sorry, but you do not have enough to claim "+@quantity+" "+getitemname(@name[@m])+"s.";
+ next;
+ goto L_CLAIM;
}
-if(!@quantity) {
- mes "You can't have 0 as an amount!";
- next;
- goto L_CLAIM;
+ if(!@quantity) {
+ mes "You can't have 0 as an amount!";
+ next;
+ goto L_CLAIM;
}
-if(!checkweight(@name[@m],@quantity)) {
- mes "I'm sorry, but you cannot carry "+@quantity+" "+getitemname(@name[@m])+"s.";
- next;
- goto L_CLAIM;
+ if(!checkweight(@name[@m],@quantity)) {
+ mes "I'm sorry, but you cannot carry "+@quantity+" "+getitemname(@name[@m])+"s.";
+ next;
+ goto L_CLAIM;
}
-query_sql "SELECT "+@quantity+" * "+@price$, @total$;
-mes "Are you sure you want to claim "+@quantity+" "+getitemname(@name[@m])+"s for $"+@total$+"?";
-next;
-menu "No",L_CLAIM,"Yes",-;
-query_sql "UPDATE `donate` SET `claimed` = `claimed` + "+@total$+" WHERE `account_id` = "+getcharid(3);
-logmes "Claimed "+@quantity+" "+getitemname(@name[@m])+"s";
-getitem @name[@m],@quantity;
-mes "[Donation Girl]";
-mes "Thankyou for donating! We hope you enjoy your gift!";
-close;
+ query_sql "SELECT "+@quantity+" * "+@price$, @total$;
+ mes "Are you sure you want to claim "+@quantity+" "+getitemname(@name[@m])+"s for $"+@total$+"?";
+ next;
+ menu "No",L_CLAIM,"Yes",-;
+ query_sql "UPDATE `donate` SET `claimed` = `claimed` + "+@total$+" WHERE `account_id` = "+getcharid(3);
+ logmes "Claimed "+@quantity+" "+getitemname(@name[@m])+"s";
+ getitem @name[@m],@quantity;
+ mes "[Donation Girl]";
+ mes "Thankyou for donating! We hope you enjoy your gift!";
+ close;
L_ZENY:
-mes "[Donation Girl]";
-if(!$rate) {
- mes "Sorry, we currently do not allow claiming Zeny.";
- mes "Please go back and claim an item instead.";
- next;
- goto L_CLAIM;
+ mes "[Donation Girl]";
+ if(!$rate) {
+ mes "Sorry, we currently do not allow claiming Zeny.";
+ mes "Please go back and claim an item instead.";
+ next;
+ goto L_CLAIM;
}
-query_sql "SELECT "+@value$+" * "+$rate, @maxzeny;
-mes "Very well. You can claim as much as "+@maxzeny+"Z.";
-mes "How much Zeny would you like to claim?";
-input @zeny;
-mes "[Donation Girl]";
-if(@zeny>@maxzeny) {
- mes "Sorry, but you do not have enough to claim "+@zeny+"Z.";
- next;
- goto L_CLAIM;
+ query_sql "SELECT "+@value$+" * "+$rate, @maxzeny;
+ mes "Very well. You can claim as much as "+@maxzeny+"Z.";
+ mes "How much Zeny would you like to claim?";
+ input @zeny;
+ mes "[Donation Girl]";
+ if(@zeny>@maxzeny) {
+ mes "Sorry, but you do not have enough to claim "+@zeny+"Z.";
+ next;
+ goto L_CLAIM;
}
-if(!@zeny) {
- mes "You can't have 0 as an amount!";
- next;
- goto L_CLAIM;
+ if(!@zeny) {
+ mes "You can't have 0 as an amount!";
+ next;
+ goto L_CLAIM;
}
-set @total, @zeny * $rate;
-mes "Are you sure you want to claim "+@zeny+"Z for $"+@total+"?";
-next;
-menu "No",L_CLAIM,"Yes",-;
-query_sql "UPDATE `donate` SET `claimed` = `claimed` + "+@total+" WHERE `account_id` = "+getcharid(3);
-logmes "Claimed "+@zeny+" zenies";
-set Zeny, Zeny + @zeny;
-mes "[Donation Girl]";
-mes "Thankyou for donating! We hope you enjoy your gift!";
-close;
+ set @total, @zeny * $rate;
+ mes "Are you sure you want to claim "+@zeny+"Z for $"+@total+"?";
+ next;
+ menu "No",L_CLAIM,"Yes",-;
+ query_sql "UPDATE `donate` SET `claimed` = `claimed` + "+@total+" WHERE `account_id` = "+getcharid(3);
+ logmes "Claimed "+@zeny+" zenies";
+ set Zeny, Zeny + @zeny;
+ mes "[Donation Girl]";
+ mes "Thankyou for donating! We hope you enjoy your gift!";
+ close;
L_STATS:
-mes "[Donation Girl]";
-query_sql "SELECT IFNULL((SELECT SUM(amount) FROM `donate`),0)", @total$;
-mes "Our fund is at a total of $"+@total$;
-next;
-menu "More info",L_INFO,"Make a claim",L_CHECK,"Statistics",L_STATS;
+ mes "[Donation Girl]";
+ query_sql "SELECT IFNULL((SELECT SUM(amount) FROM `donate`),0)", @total$;
+ mes "Our fund is at a total of $"+@total$;
+ next;
+ menu "More info",L_INFO,"Make a claim",L_CHECK,"Statistics",L_STATS;
L_GM:
-mes "[GM Menu]";
-mes "Hello GM!";
-mes "What would you like to do?";
-next;
-query_sql "SHOW VARIABLES LIKE 'version'", @version, @valule$;
-query_sql "SELECT '"+@valule$+"' >= '5.0.8'", @version;
-menu "Add/Remove Donation",L_GM2,"Add/Remove Items",L_ITEM,"(Re)Set Exchange Rate",L_RATE,"Test Script",L_START;
+ mes "[GM Menu]";
+ mes "Hello GM!";
+ mes "What would you like to do?";
+ next;
+ query_sql "SHOW VARIABLES LIKE 'version'", @version, @valule$;
+ query_sql "SELECT '"+@valule$+"' >= '5.0.8'", @version;
+ menu "Add/Remove Donation",L_GM2,"Add/Remove Items",L_ITEM,"(Re)Set Exchange Rate",L_RATE,"Test Script",L_START;
L_GM2:
-menu "Add a donation",L_DONATE,"Remove a donation",L_REMOVE,"View all donations",L_VIEWALL,"Return to main menu",L_GM;
+ menu "Add a donation",L_DONATE,"Remove a donation",L_REMOVE,"View all donations",L_VIEWALL,"Return to main menu",L_GM;
L_ITEM:
-menu "Add an item",L_NEWITEM,"Remove an item",L_DELITEM,"View all items",L_ALLITEMS,"Return to main menu",L_GM;
+ menu "Add an item",L_NEWITEM,"Remove an item",L_DELITEM,"View all items",L_ALLITEMS,"Return to main menu",L_GM;
L_NEWITEM:
-mes "[GM Menu]";
-mes "Please enter the item name:";
-input @itemname$;
-set @iid, 0;
-query_sql "SELECT `id` FROM `item_db` WHERE `name_english` = '"+escape_sql(@itemname$)+"' || `name_japanese` = '"+escape_sql(@itemname$)+"' UNION SELECT `id` FROM `item_db2` WHERE `name_english` = '"+escape_sql(@itemname$)+"' || `name_japanese` = '"+escape_sql(@itemname$)+"'", @iid;
-if(!@iid) goto L_INONE;
-query_sql "SELECT 1 FROM `donate_item_db` WHERE `id` = "+@iid, @check;
-mes "[GM Menu]";
-mes "Please enter the cost of each "+@itemname$+":";
-input @cost$;
-if(@version) query_sql "SELECT CAST('"+escape_sql(@cost$)+"' AS DECIMAL)", @cost$;
-query_sql "SELECT '"+escape_sql(@cost$)+"' > 0", @valid;
-if(!@valid) goto L_ZERO;
-mes "[GM Menu]";
-mes "You have specified that donators can claim "+@itemname$+"s for $"+@cost$+" each.";
-mes "Would you like to continue?";
-next;
-menu "No",L_ITEM,"Yes",-;
-mes "[GM Menu]";
-if(!@check){
- query_sql "INSERT INTO `donate_item_db` VALUES ("+@iid+",'"+@cost$+"')";
- logmes "Added "+@itemname$+"s to list of claimable items";
- mes "Item added successfully!";
- } else {
- mes "Item "+@itemname$+" already exists in the database.";
- mes "Would you like to replace it?";
+ mes "[GM Menu]";
+ mes "Please enter the item name:";
+ input @itemname$;
+ set @iid, 0;
+ query_sql "SELECT `id` FROM `item_db` WHERE `name_english` = '"+escape_sql(@itemname$)+"' || `name_japanese` = '"+escape_sql(@itemname$)+"' UNION SELECT `id` FROM `item_db2` WHERE `name_english` = '"+escape_sql(@itemname$)+"' || `name_japanese` = '"+escape_sql(@itemname$)+"'", @iid;
+ if(!@iid) goto L_INONE;
+ query_sql "SELECT 1 FROM `donate_item_db` WHERE `id` = "+@iid, @check;
+ mes "[GM Menu]";
+ mes "Please enter the cost of each "+@itemname$+":";
+ input @cost$;
+ if(@version) query_sql "SELECT CAST('"+escape_sql(@cost$)+"' AS DECIMAL)", @cost$;
+ query_sql "SELECT '"+escape_sql(@cost$)+"' > 0", @valid;
+ if(!@valid) goto L_ZERO;
+ mes "[GM Menu]";
+ mes "You have specified that donators can claim "+@itemname$+"s for $"+@cost$+" each.";
+ mes "Would you like to continue?";
next;
menu "No",L_ITEM,"Yes",-;
- query_sql "REPLACE INTO `donate_item_db` VALUES ("+@iid+",'"+@cost$+"')";
- logmes "Changed the price of "+@itemname$+"s";
mes "[GM Menu]";
- mes "Item replaced successfully!";
+ if(!@check){
+ query_sql "INSERT INTO `donate_item_db` VALUES ("+@iid+",'"+@cost$+"')";
+ logmes "Added "+@itemname$+"s to list of claimable items";
+ mes "Item added successfully!";
+ } else {
+ mes "Item "+@itemname$+" already exists in the database.";
+ mes "Would you like to replace it?";
+ next;
+ menu "No",L_ITEM,"Yes",-;
+ query_sql "REPLACE INTO `donate_item_db` VALUES ("+@iid+",'"+@cost$+"')";
+ logmes "Changed the price of "+@itemname$+"s";
+ mes "[GM Menu]";
+ mes "Item replaced successfully!";
}
-close;
+ close;
L_INONE:
-mes "[GM Menu]";
-mes "Item "+@itemname$+" does not exist.";
-next;
-goto L_ITEM;
+ mes "[GM Menu]";
+ mes "Item "+@itemname$+" does not exist.";
+ next;
+ goto L_ITEM;
L_DELITEM:
-mes "[GM Menu]";
-mes "Please enter the item name:";
-input @itemname$;
-set @iid, 0;
-query_sql "SELECT `donate_item_db`.`id` FROM `donate_item_db` LEFT JOIN `item_db` ON `donate_item_db`.`id` = `item_db`.`id` LEFT JOIN `item_db2` ON `donate_item_db`.`id` = `item_db2`.`id` WHERE `item_db`.`name_english` = '"+escape_sql(@itemname$)+"' || `item_db`.`name_japanese` = '"+escape_sql(@itemname$)+"' || `item_db2`.`name_english` = '"+escape_sql(@itemname$)+"' || `item_db2`.`name_japanese` = '"+escape_sql(@itemname$)+"'", @iid;
-if(!@iid) goto L_INONE;
-next;
-mes "[GM Menu]";
-mes "You have specified to delete "+@itemname$+" from the database.";
-mes "Would you like to continue?";
-next;
-menu "No",L_ITEM,"Yes",-;
-query_sql "DELETE FROM `donate_item_db` WHERE `id` = "+@iid;
-logmes "Deleted "+@itemname$+"s from list of claimable items";
-mes "[GM Menu]";
-mes "Item deleted successfully!";
-close;
+ mes "[GM Menu]";
+ mes "Please enter the item name:";
+ input @itemname$;
+ set @iid, 0;
+ query_sql "SELECT `donate_item_db`.`id` FROM `donate_item_db` LEFT JOIN `item_db` ON `donate_item_db`.`id` = `item_db`.`id` LEFT JOIN `item_db2` ON `donate_item_db`.`id` = `item_db2`.`id` WHERE `item_db`.`name_english` = '"+escape_sql(@itemname$)+"' || `item_db`.`name_japanese` = '"+escape_sql(@itemname$)+"' || `item_db2`.`name_english` = '"+escape_sql(@itemname$)+"' || `item_db2`.`name_japanese` = '"+escape_sql(@itemname$)+"'", @iid;
+ if(!@iid) goto L_INONE;
+ next;
+ mes "[GM Menu]";
+ mes "You have specified to delete "+@itemname$+" from the database.";
+ mes "Would you like to continue?";
+ next;
+ menu "No",L_ITEM,"Yes",-;
+ query_sql "DELETE FROM `donate_item_db` WHERE `id` = "+@iid;
+ logmes "Deleted "+@itemname$+"s from list of claimable items";
+ mes "[GM Menu]";
+ mes "Item deleted successfully!";
+ close;
L_ALLITEMS:
-mes "[GM Menu]";
-query_sql "SELECT `id`,`price` FROM `donate_item_db` ORDER BY `id`", @items, @itemamount$;
-for(set @i, 0; @i < getarraysize(@items); set @i, @i + 1){
+ mes "[GM Menu]";
+ query_sql "SELECT `id`,`price` FROM `donate_item_db` ORDER BY `id`", @items, @itemamount$;
+ for(set @i, 0; @i < getarraysize(@items); set @i, @i + 1){
mes getitemname(@items[@i])+" - $"+@itemamount$[@i];
}
-next;
-goto L_GM;
+ next;
+ goto L_GM;
L_DONATE:
-mes "[GM Menu]";
-mes "Please enter the donator's username:";
-input @donator$;
-set @aid, 0;
-query_sql "SELECT `account_id` FROM `login` WHERE `userid` = '"+escape_sql(@donator$)+"'", @aid;
-if(!@aid) goto L_NONE;
-set @donated$, "";
-query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid, @donated$;
-query_sql "SELECT '"+@donated$+"' > 0", @donated;
-switch(@donated) {
+ mes "[GM Menu]";
+ mes "Please enter the donator's username:";
+ input @donator$;
+ set @aid, 0;
+ query_sql "SELECT `account_id` FROM `login` WHERE `userid` = '"+escape_sql(@donator$)+"'", @aid;
+ if(!@aid) goto L_NONE;
+ set @donated$, "";
+ query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid, @donated$;
+ query_sql "SELECT '"+@donated$+"' > 0", @donated;
+ switch(@donated) {
case 0:
mes @donator$+" has not donated before.";
break;
@@ -302,19 +252,19 @@ switch(@donated) {
mes @donator$+" has donated $"+@donated$+".";
break;
}
-next;
-mes "[GM Menu]";
-mes "Please enter the amount donated by "+@donator$;
-input @donating$;
-if(@version) query_sql "SELECT CAST('"+escape_sql(@donating$)+"' AS DECIMAL)", @donating$;
-query_sql "SELECT '"+escape_sql(@donating$)+"' > 0", @valid;
-if(!@valid) goto L_ZERO;
-mes "[GM Menu]";
-mes "You have specified that "+@donator$+" has donated $"+@donating$+".";
-mes "Would you like to continue?";
-next;
-menu "No",L_GM,"Yes",-;
-switch(@donated) {
+ next;
+ mes "[GM Menu]";
+ mes "Please enter the amount donated by "+@donator$;
+ input @donating$;
+ if(@version) query_sql "SELECT CAST('"+escape_sql(@donating$)+"' AS DECIMAL)", @donating$;
+ query_sql "SELECT '"+escape_sql(@donating$)+"' > 0", @valid;
+ if(!@valid) goto L_ZERO;
+ mes "[GM Menu]";
+ mes "You have specified that "+@donator$+" has donated $"+@donating$+".";
+ mes "Would you like to continue?";
+ next;
+ menu "No",L_GM,"Yes",-;
+ switch(@donated) {
case 0:
query_sql "INSERT INTO `donate` VALUES ("+@aid+", '"+@donating$+"', 0)";
break;
@@ -322,44 +272,44 @@ switch(@donated) {
query_sql "UPDATE `donate` SET `amount` = `amount` + "+@donating$+" WHERE `account_id` = "+@aid;
break;
}
-logmes "Credited "+@donator$+" with $"+@donating$;
-query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid, @newdonated$;
-mes "[GM Menu]";
-mes "Donation added successfully!";
-mes @donator$+" has donated a total of $"+@newdonated$;
-close;
+ logmes "Credited "+@donator$+" with $"+@donating$;
+ query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid, @newdonated$;
+ mes "[GM Menu]";
+ mes "Donation added successfully!";
+ mes @donator$+" has donated a total of $"+@newdonated$;
+ close;
L_ZERO:
-mes "[GM Menu]";
-mes "You can't have 0 as an amount!";
-next;
-goto L_GM;
+ mes "[GM Menu]";
+ mes "You can't have 0 as an amount!";
+ next;
+ goto L_GM;
L_NONE:
-mes "[GM Menu]";
-mes "Account name "+@donator$+" does not exist.";
-next;
-goto L_GM;
+ mes "[GM Menu]";
+ mes "Account name "+@donator$+" does not exist.";
+ next;
+ goto L_GM;
L_REMOVE:
-mes "[GM Menu]";
-mes "Please enter the donator's username:";
-input @donator$;
-set @aid, 0;
-query_sql "SELECT `account_id` FROM `login` WHERE `userid` = '"+escape_sql(@donator$)+"'", @aid;
-if(!@aid) goto L_NONE;
-query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid, @donated$;
-query_sql "SELECT '"+@donated$+"' > 0", @donated;
-mes "[GM Menu]";
-if(!@donated) {
- query_sql "DELETE FROM `donate` WHERE `account_id` = "+@aid;
- logmes "Deleted "+@donator$+" from donation database";
- mes @donator$+" is not a donator and has been deleted from the donation database.";
+ mes "[GM Menu]";
+ mes "Please enter the donator's username:";
+ input @donator$;
+ set @aid, 0;
+ query_sql "SELECT `account_id` FROM `login` WHERE `userid` = '"+escape_sql(@donator$)+"'", @aid;
+ if(!@aid) goto L_NONE;
+ query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid, @donated$;
+ query_sql "SELECT '"+@donated$+"' > 0", @donated;
+ mes "[GM Menu]";
+ if(!@donated) {
+ query_sql "DELETE FROM `donate` WHERE `account_id` = "+@aid;
+ logmes "Deleted "+@donator$+" from donation database";
+ mes @donator$+" is not a donator and has been deleted from the donation database.";
} else {
- mes @donator$+" has donated $"+@donated$+".";
- next;
- switch(select("Deduct an amount from "+@donator$,"Remove "+@donator$+" from the donation database")){
- mes "[GM Menu]";
+ mes @donator$+" has donated $"+@donated$+".";
+ next;
+ switch(select("Deduct an amount from "+@donator$,"Remove "+@donator$+" from the donation database")){
+ mes "[GM Menu]";
case 1:
mes "Please enter the amount "+@donator$+" is to be deducted by:";
input @deduct$;
@@ -390,27 +340,76 @@ if(!@donated) {
break;
}
}
-close;
+ close;
L_VIEWALL:
-mes "[GM Menu]";
-query_sql "SELECT `account_id`,`amount` FROM `donate` ORDER BY `amount` DESC", @donatoraid, @donatedamount$;
-for(set @i, 0; @i < getarraysize(@donatoraid); set @i, @i + 1){
- query_sql "SELECT `userid` FROM `login` WHERE `account_id` = "+@donatoraid[@i], @donateruserid$;
- for(set @j, 0; @j < getarraysize(@donateruserid$); set @j, @j + 1){
- mes @donateruserid$[@j]+" - "+@donatedamount$[@i];
+ mes "[GM Menu]";
+ query_sql "SELECT `account_id`,`amount` FROM `donate` ORDER BY `amount` DESC", @donatoraid, @donatedamount$;
+ for(set @i, 0; @i < getarraysize(@donatoraid); set @i, @i + 1){
+ query_sql "SELECT `userid` FROM `login` WHERE `account_id` = "+@donatoraid[@i], @donateruserid$;
+ for(set @j, 0; @j < getarraysize(@donateruserid$); set @j, @j + 1){
+ mes @donateruserid$[@j]+" - "+@donatedamount$[@i];
+ }
}
-}
-next;
-goto L_GM;
+ next;
+ goto L_GM;
L_RATE:
-mes "[GM Menu]";
-if($rate) mes "$1 is currently worth "+$rate+"Z.";
-mes "How much Zeny is $1 worth?";
-input $rate;
-mes "[GM Menu]";
-mes "The value of $1 successfully changed to "+$rate+"Z.";
-next;
-goto L_GM;
+ mes "[GM Menu]";
+ if($rate) mes "$1 is currently worth "+$rate+"Z.";
+ mes "How much Zeny is $1 worth?";
+ input $rate;
+ mes "[GM Menu]";
+ mes "The value of $1 successfully changed to "+$rate+"Z.";
+ next;
+ goto L_GM;
}
+
+//===== Additional Comments: =================================
+//= 1.0 - First release. Probably contains bugs/security risks.
+//= 1.1 - Added a check for whether the account exists when
+//= adding a donator. Need to improve ordering when
+//= viewing all donations.
+//= 1.2 - Modified for public use. Added checkweight feature.
+//= 2.0 - Many changes, especially ones I had always wanted
+//= to add to this script. Includes reading items from
+//= a separate SQL table and more database manipulation
+//= options for GMs.
+//= 2.1 - Made few changes including the add/remove items feature.
+//= 3.0 - All strings inputted by a user and user/char names
+//= in SQL queries are now escaped. Each item has a
+//= price rather than a quantity. This script can work
+//= with decimals.
+//= 3.1 - Added quotes to some queries, fixed a variable and
+//= removed a comment.
+//= 3.2 - Fixed a problem where rAthena would crash if a
+//= query returned NULL.
+//= 3.3 - Optimized query speeds by combining a few select
+//= queries into one. Requires Trunk 7975.
+//= 3.4 - Added MySQL version check. If version < 5.0.8, all
+//= queries with CAST are omitted. Use 5.0.8 and up
+//= when possible. SQL errors may consequent if GM's
+//= input is incorrect. Added logging of claims.
+//= "log_npc" in log_athena.conf must be enabled. Logs
+//= will appear in the "npclog" table. Claim menu now
+//= only shows items that can be afforded.
+//= 3.5 - Minor change to table.
+//= 3.6 - Removed name column in donate_item_db. Added
+//= support for item_db2 table.
+//= 3.7 - Added Zeny support. $rate must be set for it to be
+//= used. Removed truncate() in a query since rAthena
+//= automatically truncates floats to ints.
+//= 3.8 - Fixed problem with menus and null values.
+//= 3.9 - Explicit reset of @aid.
+//= 3.10 - Applied previous fix to other variables and forced
+//= dialogue box closure every time database is modified.
+//= 3.11 - Explicit reset of another variable. Fixed typo
+//= - with $rate. Added logmes for GM operations.
+//============================================================
+//= Thanks to Vich for helping me with the SQL syntax.
+//= Thanks to Lance for helping me with the the arrays and
+//= for implementing query_sql.
+//= Thanks to Skotlex for implementing escape_sql.
+//= Thanks to Toms for implementing the new multi-column
+//= query_sql command.
+//============================================================
diff --git a/npc/custom/eAAC_Scripts/DonationGirl/sql/donate.sql b/npc/custom/eAAC_Scripts/DonationGirl/sql/donate.sql
index 6838297bc..b820e2605 100644
--- a/npc/custom/eAAC_Scripts/DonationGirl/sql/donate.sql
+++ b/npc/custom/eAAC_Scripts/DonationGirl/sql/donate.sql
@@ -1,6 +1,6 @@
CREATE TABLE `donate` (
- `account_id` int(11) unsigned NOT NULL,
- `amount` float(9,2) unsigned NOT NULL,
- `claimed` float(9,2) unsigned NOT NULL,
+ `account_id` INT(11) UNSIGNED NOT NULL,
+ `amount` FLOAT(9,2) UNSIGNED NOT NULL,
+ `claimed` FLOAT(9,2) UNSIGNED NOT NULL,
PRIMARY KEY (`account_id`)
-) TYPE=MyISAM; \ No newline at end of file
+) TYPE=MYISAM;
diff --git a/npc/custom/eAAC_Scripts/DonationGirl/sql/donate_item_db.sql b/npc/custom/eAAC_Scripts/DonationGirl/sql/donate_item_db.sql
index 2b3caf104..54b4895b3 100644
--- a/npc/custom/eAAC_Scripts/DonationGirl/sql/donate_item_db.sql
+++ b/npc/custom/eAAC_Scripts/DonationGirl/sql/donate_item_db.sql
@@ -1,8 +1,8 @@
CREATE TABLE `donate_item_db` (
- `id` smallint(5) unsigned NOT NULL default '0',
- `price` float(9,2) unsigned NOT NULL,
+ `id` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `price` FLOAT(9,2) UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
-) TYPE=MyISAM;
+) TYPE=MYISAM;
#(ID,Price);
REPLACE INTO `donate_item_db` VALUES (601,0.06); #Wing_Of_Fly
@@ -10,4 +10,4 @@ REPLACE INTO `donate_item_db` VALUES (602,0.33); #Wing_Of_Butterfly
REPLACE INTO `donate_item_db` VALUES (603,10); #Old_Blue_Box
REPLACE INTO `donate_item_db` VALUES (604,0.05); #Branch_Of_Dead_Tree
REPLACE INTO `donate_item_db` VALUES (605,2); #Anodyne
-REPLACE INTO `donate_item_db` VALUES (606,2); #Aloebera \ No newline at end of file
+REPLACE INTO `donate_item_db` VALUES (606,2); #Aloebera