123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- //===== Athena Script =======================================
- //= Donation NPC
- //===== 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.
- //===== Compatible With =====================================
- //= eAthena - any version that contains the sql_query
- //= function (4368)
- //===== Description =========================================
- //= A script that lets a player claim an item for donating.
- //= Allows a GM to input each donation.
- //===== Comments ============================================
- //= This script uses an sql table (donate) to store
- //= variables for the amount donated by a user.
- //===== Installation ========================================
- //= You must execute donate.sql and donate_item_db.sql 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 this feature. XD
- //===========================================================
- prontera.gat,145,179,5 script Donation Girl 714,{
- //Set how many 'dollars' per reward.
- set @currency, 10;
- if (getgmlevel(99) == 99) 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;
- L_INFO:
- mes "[Donation Girl]";
- mes "Every month, we (the admins) are required to pay hundreds of dollars 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;
- next;
- menu "Continue",L_START,"Cancel",L_CLOSE;
- close;
- L_CHECK:
- query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+getcharid(3)+"", @amount;
- query_sql "SELECT `claimed` FROM `donate` WHERE `account_id` = "+getcharid(3)+"", @claimed;
- set @value, @amount-@claimed;
- if(@value>=@currency) goto L_CLAIM;
- mes "[Donation Girl]";
- mes "Sorry, but I have no records of your donation.";
- mes "If you have donated but have not made a claim,";
- mes "Please give us time to process your donation.";
- close;
- L_CLAIM:
- set @items, @value/@currency;
- mes "[Donation Girl]";
- mes "Thankyou for donating!";
- mes "You are able to claim "+@items+" item(s).";
- mes "Would you like to claim them now?";
- next;
- menu "No",-,"Yes",L_YES;
- mes "[Donation Girl]";
- mes "Ok! You are able to collect your item(s) any time!";
- close;
- L_YES:
- mes "[Donation Girl]";
- mes "Very well. Which item would you like?";
- next;
- query_sql "SELECT name FROM `donate_item_db` order by name ASC",$@name$;
- set $@menu$, $@name$[0];
- for(set $@i, 1; $@i < 127; set $@i, $@i + 1){
- set $@menu$, $@menu$ + ":" + $@name$[$@i];
- }
- set @menu, (select($@menu$))-1;
- query_sql "SELECT ID FROM `donate_item_db` WHERE name = '"+$@name$[@menu]+"'", @id;
- query_sql "SELECT amount FROM `donate_item_db` WHERE ID = "+@id+"", @amount;
- if (checkweight(@id,@amount) == 0) goto L_OVERWEIGHT;
- mes "Are you sure you want to claim "+@amount+" "+$@name$[@menu]+"?";
- next;
- menu "No",L_YES,"Yes",-;
- getitem @id,@amount;
- query_sql "UPDATE `donate` SET `claimed` = `claimed` + "+@currency+" WHERE `account_id` = '"+getcharid(3)+"'";
- set @amount, 0;
- set @claimed, 0;
- set @value, 0;
- set @items, 0;
- mes "[Donation Girl]";
- mes "Thankyou for donating! We hope you enjoy your gift!";
- close;
- L_OVERWEIGHT:
- set @amount, 0;
- set @claimed, 0;
- set @value, 0;
- set @items, 0;
- mes "[Donation Girl]";
- mes "I'm sorry, but you cannot carry so many things.";
- close;
- L_STATS:
- mes "[Donation Girl]";
- query_sql "SELECT SUM(amount) FROM `donate`", @total;
- mes "Our fund is at a total of $"+@total+"";
- next;
- set @total, 0;
- menu "More info",L_INFO,"Make a claim",L_CHECK,"Statistics",L_STATS;
- close;
- L_GM:
- mes "[GM Menu]";
- mes "Hello GM!";
- mes "What would you like to do?";
- next;
- menu "Add/Remove Donation",L_GM2,"Add/Remove Items",L_ITEM,"Test Script",L_START;
- close;
- L_GM2:
- menu "Add a donation",L_DONATE,"Remove a donation",L_REMOVE,"View all donations",L_VIEWALL;
- close;
- L_ITEM:
- menu "Add an item",L_NEWITEM,"Remove an item",L_DELITEM,"View all items",L_ALLITEMS,"Return to main menu",L_GM;
- close;
- L_NEWITEM:
- mes "[GM Menu]";
- mes "Please enter the item name:";
- input @itemname$;
- query_sql "SELECT `id` FROM `item_db` WHERE `name_english` = '"+@itemname$+"'", @iid;
- query_sql "SELECT `id` FROM `donate_item_db` WHERE `name` = '"+@itemname$+"'", @check;
- if(@iid==0) goto L_INONE;
- next;
- mes "[GM Menu]";
- mes "Please enter the amount claimable of "+@itemname$+" per donation";
- input @quantity;
- if(@quantity==0) goto L_ZERO;
- mes "[GM Menu]";
- mes "You have specified that donators can claim "+@quantity+" "+@itemname$+"s.";
- mes "Would you like to continue?";
- next;
- menu "No",L_ITEM,"Yes",-;
- if(@check!=0) goto L_REPLACE;
- query_sql "INSERT INTO `donate_item_db` VALUES ('"+@iid+"', '"+@itemname$+"', '"+@quantity+"')";
- mes "[GM Menu]";
- mes "Item added successfully!";
- next;
- set @itemname$, 0;
- set @iid, 0;
- set @quantity, 0;
- menu "Add annother item",L_NEWITEM,"Remove an item",L_DELITEM,"View all items",L_ALLITEMS;
- close;
- L_REPLACE:
- mes "[GM Menu]";
- 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+"', '"+@itemname$+"', '"+@quantity+"')";
- mes "[GM Menu]";
- mes "Item replaced successfully!";
- next;
- set @itemname$, 0;
- set @iid, 0;
- set @quantity, 0;
- menu "Add annother item",L_NEWITEM,"Remove an item",L_DELITEM,"View all items",L_ALLITEMS;
- close;
- L_INONE:
- mes "[GM Menu]";
- mes "Item "+@itemname$+" does not exist.";
- next;
- set @itemname$, 0;
- set @iid, 0;
- goto L_ITEM;
- L_DELITEM:
- mes "[GM Menu]";
- mes "Please enter the item name:";
- input @itemname$;
- query_sql "SELECT `id` FROM `donate_item_db` WHERE `name` = '"+@itemname$+"'", @iid;
- if(@iid==0) 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+"'";
- mes "[GM Menu]";
- mes "Item deleted successfully!";
- next;
- set @itemname$, 0;
- set @iid, 0;
- menu "Add an item",L_NEWITEM,"Remove another item",L_DELITEM,"View all items",L_ALLITEMS;
- close;
- L_ALLITEMS:
- mes "[GM Menu]";
- query_sql "SELECT `name` FROM `donate_item_db` ORDER BY `name` ASC", @items$;
- query_sql "SELECT `amount` FROM `donate_item_db` ORDER BY `name` ASC", @itemamount;
- for(set @i, 0; @i < getarraysize(@items$); set @i, @i + 1){
- mes ""+@items$[@i]+" - "+@itemamount[@i]+"";
- }
- next;
- set @items$, 0;
- set @itemamount, 0;
- goto L_GM;
- L_DONATE:
- mes "[GM Menu]";
- mes "Please enter the donator's username:";
- input @donator$;
- query_sql "SELECT `account_id` FROM `login` WHERE `userid` = '"+@donator$+"'", @aid;
- query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid+"", @donated;
- if(@aid==0) goto L_NONE;
- if(@donated>0) mes ""+@donator$+" has donated $"+@donated+".";
- if(@donated==0) mes ""+@donator$+" has not donated before.";
- next;
- mes "[GM Menu]";
- mes "Please enter the amount donated by "+@donator$+"";
- input @donating;
- if(@donating==0) 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",-;
- if(@donated>0) query_sql "UPDATE `donate` SET `amount` = `amount` + "+@donating+" WHERE `account_id` = '"+@aid+"'";
- if(@donated==0) query_sql "INSERT INTO `donate` VALUES ('"+@aid+"', '"+@donating+"', '0')";
- 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+"";
- next;
- set @donator$, 0;
- set @aid, 0;
- set @donated, 0;
- set @donating, 0;
- set @newdonated, 0;
- goto L_GM;
- close;
- L_ZERO:
- 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;
- set @donator$, 0;
- set @aid, 0;
- set @donated, 0;
- set @donating, 0;
- set @newdonated, 0;
- goto L_GM;
- L_REMOVE:
- mes "[GM Menu]";
- mes "Please enter the donator's username:";
- input @donator$;
- query_sql "SELECT `account_id` FROM `login` WHERE `userid` = '"+@donator$+"'", @aid;
- query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid+"", @donated;
- if(@aid==0) goto L_NONE;
- if(@donated>0) mes ""+@donator$+" has donated $"+@donated+".";
- if(@donated==0) {
- query_sql "DELETE FROM `donate` WHERE `account_id` = '"+@aid+"'";
- mes ""+@donator$+" is not a donator and has been deleted from the donation database.";
- goto L_GM;
- close;
- }
- next;
- menu "Deduct an amount from "+@donator$+"",L_MINUS,"Remove "+@donator$+" from the donation database",L_DELETE;
- close;
- L_MINUS:
- mes "[GM Menu]";
- mes "Please enter the amount "+@donator$+" is to be deducted by:";
- input @deduct;
- mes "[GM Menu]";
- mes "You have specified that "+@donator$+" is to be deducted by $"+@deduct+".";
- mes "Would you like to continue?";
- next;
- menu "No",L_GM,"Yes",-;
- query_sql "UPDATE `donate` SET `amount` = `amount` - "+@deduct+" WHERE `account_id` = '"+@aid+"'";
- query_sql "SELECT `amount` FROM `donate` WHERE `account_id` = "+@aid+"", @afterdeduct;
- mes "[GM Menu]";
- mes "Donation deducted successfully!";
- mes ""+@donator$+" has donated a total of $"+@afterdeduct+"";
- next;
- set @donator$, 0;
- set @aid, 0;
- set @donated, 0;
- set @deduct, 0;
- set @afterdeduct, 0;
- goto L_GM;
- L_DELETE:
- mes "[GM Menu]";
- mes "You have specified to remove "+@donator$+" from the donation database.";
- mes "Would you like to continue?";
- next;
- menu "No",L_GM,"Yes",-;
- query_sql "DELETE FROM `donate` WHERE `account_id` = '"+@aid+"'";
- mes "[GM Menu]";
- mes "Donator deleted successfully!";
- next;
- set @donator$, 0;
- set @aid, 0;
- set @donated, 0;
- goto L_GM;
- L_VIEWALL:
- mes "[GM Menu]";
- query_sql "SELECT `account_id` FROM `donate` ORDER BY `amount` DESC", @donatoraid;
- query_sql "SELECT `amount` FROM `donate` ORDER BY `amount` DESC", @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;
- set @donatoraid, 0;
- set @donatedamount, 0;
- set @donateruserid$, 0;
- goto L_GM;
- L_CLOSE:
- close;
- }
|