Hi All,
Here is a rather simple quest template based on arrays. It will tell users what they're missing among other things, and makes for a good way to quickly get a quest in game.
//===== eAthena Script =======================================
//= Super Awesome Quest Template
//===== By: ==================================================
//= CalciumKid
//= & Okira
//===== Current Version: =====================================
//= 2.0
//===== Compatible With: =====================================
//= eAthena 1.0 Final +
//===== Description: =========================================
//= Quest Template
//============================================================
<map>,<x>,<y>,<facing> script <npcname> <npcsprite>,{
//===== Config: ==============================================
set .npcname$,"[^FF0000 <npcname> ^000000]"; //Change to whatever you want the NPC name to be
setarray .reqid[1],<id>,<id>,<id>; //Item IDs for the items, required for item checks
setarray .reqn$[1],"<name>","<name>","<name>"; //These are names of the required items, for the dialogue
setarray .reqa[1],<amount>,<amount>,<amount>; //These are how many of each item is required
set .prize,<rewardid>; //Change this to the Item ID of the item reward
set .prizen$,"<rewardname>"; //Change this to the name of your reward
set .prizea,<rewardamount>; //Change this to the amount of the prize item
set .zeny,20000000; //Amount of zeny for quest (set to 0 to disable)
L_QUEST:
mes .npcname$;
mes "Hah! Hello there "+strcharinfo(0);
next;
mes .npcname$;
mes "I don't get many visitors, so I assume you're after my legendary ^FF0000"+.prizen$+"^000000?";
menu "Of course",-,"No way",L_EXIT;
next;
mes .npcname$;
mes "Great! I love business. I can make you a ^FF0000"+.prizen$+"^000000, but only if you bring me the materials required.";
next;
mes .npcname$;
mes "Would you like me to make one for you?";
menu "Yes",-,"No",L_EXIT;
next;
mes .npcname$;
mes "I'll need the following:";
for (set .@x,1; .@x < getarraysize(.reqid); set .@x,.@x + 1) {
mes .reqa[.@x]+" ^FF0000"+.reqn$[.@x]+"^000000";
}
if (.zeny > 0) {
mes .zeny+" ^FF0000Zeny^000000";
}
next;
mes .npcname$;
mes "Do you have those items?";
menu "Yes",-,"No",L_EXIT;
next;
mes .npcname$;
for (set .@x,1; .@x < getarraysize(.reqid); set .@x,.@x + 1) {
if(countitem(.reqid[.@x]) >= .reqa[.@x]) {mes "You've got enough ^00FF00"+.reqn$[.@x]+"^000000";} else {mes "You need more ^FF0000"+.reqn$[.@x]+"^000000";}
}
if (.zeny > 0) {
if (Zeny < .zeny) {mes "You're missing ^FF0000Zeny^000000";}
else {mes "You've got enough ^00FF00Zeny^000000";}
}
next;
mes .npcname$;
mes "Would you like to complete the quest?";
menu "Yes please!",-,"No Thanks",L_EXIT;
next;
for (set .@x,1; .@x < getarraysize(.reqid); set .@x,.@x + 1) {
if(countitem(.reqid[.@x]) < .reqa[.@x]) goto L_EXIT2;
}
if (.zeny > 0) {
if (Zeny < .zeny) goto L_EXIT2;
}
mes .npcname$;
mes "Brilliant! Fantastic! Here you go.";
for (set .@x,1; .@x < getarraysize(.reqid); set .@x,.@x + 1) {
delitem .reqid[.@x],.reqa[.@x];
}
if (.zeny > 0) {
set Zeny, Zeny - .zeny;
}
goto L_FINAL2;
close;
L_EXIT:
next;
mes .npcname$;
mes "Eh. I don't need you either. Bah!";
close;
L_EXIT2:
next;
mes .npcname$;
mes "I'm sorry, you don't have enough!";
close;
L_FINAL2:
next;
mes .npcname$;
mes "Brilliant! Fantastic! Here you go.";
getitem .prize,1;
close;
}
Just edit everywhere it has placeholders wrapped in <>.
You can expand the NPC to contain as many required items as you wish, just keep adding entries to the arrays.
I also have a version that doesn't require the input of item names. This version however I don't have laying around because the servers I have used this template on often have strange names for items in their item_dbs. I can recode release this version if requested.
If you like my work, please rate the topic and give reputation! Thanks!