summaryrefslogtreecommitdiff
path: root/npc/custom/quests
diff options
context:
space:
mode:
authoreuphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-12-20 02:18:26 +0000
committereuphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-12-20 02:18:26 +0000
commit6da12f840490b958f7e770a4ce699ec38828e97d (patch)
tree102f4f7e9f3600fc82859d7ec361742e696865e6 /npc/custom/quests
parent300f20998ac8012373024b3a3d7d88b80de7e040 (diff)
downloadhercules-6da12f840490b958f7e770a4ce699ec38828e97d.tar.gz
hercules-6da12f840490b958f7e770a4ce699ec38828e97d.tar.bz2
hercules-6da12f840490b958f7e770a4ce699ec38828e97d.tar.xz
hercules-6da12f840490b958f7e770a4ce699ec38828e97d.zip
* Follow-up r17030: documented and added bMagicAtkEle to item_combo_db (bugreport:6943).
* Follow-up r17029: moved 'clearinventory' alias to atcommand_athena.conf. * Custom Quest Shop updated to v1.5, which replaces categories with shop IDs. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17031 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'npc/custom/quests')
-rw-r--r--npc/custom/quests/quest_shop.txt253
1 files changed, 148 insertions, 105 deletions
diff --git a/npc/custom/quests/quest_shop.txt b/npc/custom/quests/quest_shop.txt
index d4668ffc4..0714fcb57 100644
--- a/npc/custom/quests/quest_shop.txt
+++ b/npc/custom/quests/quest_shop.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
-//= 1.4c
+//= 1.5
//===== Compatible With: =====================================
//= rAthena SVN r16862+
//===== Description: =========================================
@@ -11,60 +11,94 @@
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//============================================================
-
-prontera,164,203,6 script Quest Shop 998,{
+
+// Shop NPCs -- supplying no argument displays entire menu.
+// callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
+//============================================================
+prontera,164,203,6 script Quest Shop#1 998,{ callfunc "qshop"; }
+
+
+// Script Core
+//============================================================
+- script quest_shop -1,{
function Add; function Chk; function Slot; function A_An;
+OnInit:
+ freeloop(1);
- if (.Shops$ == "") set .@i, select(.menu$);
- else set .@i,1;
- dispbottom "Select one item at a time.";
- callshop "qshop"+.@i,1;
- npcshopattach "qshop"+.@i;
- end;
+// -----------------------------------------------------------
+// Basic shop settings.
+// -----------------------------------------------------------
-function Add {
- if (getitemname(getarg(1)) == "null") {
- debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
- return;
- }
- for(set .@n,5; .@n<127; set .@n,.@n+2) {
- if (!getarg(.@n,0)) break;
- if (getitemname(getarg(.@n)) == "null") {
- debugmes "Quest requirement #"+getarg(.@n)+" invalid (skipped).";
- return;
- }
+ set .Announce,1; // Announce quest completion? (1: yes / 0: no)
+ set .ShowSlot,1; // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
+ set .ShowID,0; // Show item IDs? (1: yes / 0: no)
+ set .ShowZeny,0; // Show Zeny cost, if any? (1: yes / 0: no)
+
+// -----------------------------------------------------------
+// Points variable -- optional quest requirement.
+// setarray .Points$[0],"<variable name>","<display name>";
+// -----------------------------------------------------------
+
+ setarray .Points$[0],"#CASHPOINTS","Cash Points";
+
+// -----------------------------------------------------------
+// Shop IDs -- to add shops, copy dummy data at bottom of file.
+// setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
+// -----------------------------------------------------------
+
+ setarray .Shops$[1],"Headgears","Weapons","Other";
+
+// -----------------------------------------------------------
+// Quest items -- do NOT use a reward item more than once!
+// Add(<shop ID>,<reward ID>,<reward amount>,
+// <Zeny cost>,<point cost>,
+// <required item ID>,<required item amount>{,...});
+// -----------------------------------------------------------
+
+ Add(1,5022,1,0,0,7086,1,969,10,999,40,1003,50,984,2);
+ Add(1,5032,1,0,0,1059,250,2221,1,2227,1,7063,600);
+ Add(1,5027,1,0,0,2252,1,1036,400,7001,50,4052,1);
+ Add(1,5045,1,0,0,2252,1,1054,450,943,1200);
+
+ Add(2,1224,1,0,0,7297,30,969,10,999,50,714,10);
+ Add(2,1225,1,0,0,7292,30,969,10,999,50,714,10);
+
+ Add(3,531,1,3,0,512,1,713,1);
+ Add(3,532,1,3,0,513,1,713,1);
+ Add(3,533,1,3,0,514,1,713,1);
+ Add(3,534,1,3,0,515,1,713,1);
+
+// -----------------------------------------------------------
+
+ freeloop(0);
+ set .menu$,"";
+ for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
+ set .menu$, .menu$+.Shops$[.@i]+":";
+ npcshopdelitem "qshop"+.@i,909;
}
- for(set .@i,2; .@i<.@n; set .@i,.@i+1)
- set getd(".q_"+getarg(1)+"["+(.@i-2)+"]"), getarg(.@i);
- npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
- return;
-}
-function Chk {
- if (getarg(0) < getarg(1)) {
- set @qe0,1;
- return "^FF0000";
+ end;
+
+OnMenu:
+ set .@size, getarraysize(@i);
+ if (!.@size) set .@i, select(.menu$);
+ else if (.@size == 1) set .@i, @i[0];
+ else {
+ for(set .@j,0; .@j<.@size; set .@j,.@j+1)
+ set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
+ set .@i, @i[select(.@menu$)-1];
}
- else return "^00FF00";
-}
-function Slot {
- set .@s$,getitemname(getarg(0));
- switch(.ShowSlot) {
- case 1: if (!getitemslots(getarg(0))) return .@s$;
- case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
- default: return .@s$;
+ if (.Shops$[.@i] == "") {
+ message strcharinfo(0),"An error has occurred.";
+ end;
}
-}
-function A_An {
- setarray .@A$[0],"a","e","i","o","u";
- set .@B$, "_"+getarg(0);
- for(set .@i,0; .@i<5; set .@i,.@i+1)
- if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);
- return "a "+getarg(0);
-}
+ dispbottom "Select one item at a time.";
+ callshop "qshop"+.@i,1;
+ npcshopattach "qshop"+.@i;
+ end;
OnBuyItem:
- set .@q[0],@bought_nameid;
- copyarray .@q[1],getd(".q_"+@bought_nameid+"[0]"),getarraysize(getd(".q_"+@bought_nameid+"[0]"));
+ set .@q[0],@bought_nameid[0];
+ copyarray .@q[1],getd(".q_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+.@q[0]));
if (!.@q[1]) {
message strcharinfo(0),"An error has occurred.";
end;
@@ -75,15 +109,16 @@ OnBuyItem:
if (.@q[2]) mes " > "+Chk(Zeny,.@q[2])+.@q[2]+" Zeny^000000";
if (.@q[3]) mes " > "+Chk(getd(.Points$[0]),.@q[3])+.@q[3]+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+.@q[3]+")^000000";
if (.@q[4]) for(set .@i,4; .@i<getarraysize(.@q); set .@i,.@i+2)
- mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1])+((.DisplayID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+.@q[.@i+1]+")^000000";
+ mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+.@q[.@i+1]+")^000000";
next;
- set @qe1, getiteminfo(.@q[0],5);
- set @qe2, getiteminfo(.@q[0],11);
- addtimer 1000, strnpcinfo(1)+"::OnEnd";
+ setarray @qe[1], getiteminfo(.@q[0],5), getiteminfo(.@q[0],11);
+ if (((@qe[1] & 1) || (@qe[1] & 256) || (@qe[1] & 512)) && @qe[2] > 0)
+ set .@preview,1;
+ addtimer 1000, strnpcinfo(0)+"::OnEnd";
while(1) {
- switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((((@qe1&1) || (@qe1&256) || (@qe1&512)) && @qe2 > 0 && !@qe6)?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
+ switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[6])?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
case 1:
- if (@qe0) {
+ if (@qe[0]) {
mes "[Quest Shop]";
mes "You're missing one or more quest requirements.";
close;
@@ -102,74 +137,82 @@ OnBuyItem:
specialeffect2 699;
close;
case 2:
- set @qe3, getlook(LOOK_HEAD_BOTTOM);
- set @qe4, getlook(LOOK_HEAD_TOP);
- set @qe5, getlook(LOOK_HEAD_MID);
- set @qe6,1;
- if (@qe1&1) changelook LOOK_HEAD_BOTTOM, @qe2;
- if (@qe1&256) changelook LOOK_HEAD_TOP, @qe2;
- if (@qe1&512) changelook LOOK_HEAD_MID, @qe2;
+ setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), 1;
+ if (@qe[1] & 1) changelook LOOK_HEAD_BOTTOM, @qe[2];
+ if (@qe[1] & 256) changelook LOOK_HEAD_TOP, @qe[2];
+ if (@qe[1] & 512) changelook LOOK_HEAD_MID, @qe[2];
break;
case 3:
close;
}
}
+
OnEnd:
- if (@qe6) {
- changelook LOOK_HEAD_BOTTOM, @qe3;
- changelook LOOK_HEAD_TOP, @qe4;
- changelook LOOK_HEAD_MID, @qe5;
+ if (@qe[6]) {
+ changelook LOOK_HEAD_BOTTOM, @qe[3];
+ changelook LOOK_HEAD_TOP, @qe[4];
+ changelook LOOK_HEAD_MID, @qe[5];
}
- for(set .@i,0; .@i<7; set .@i,.@i+1)
- setd "@qe"+.@i,0;
+ deletearray @qe[0],7;
end;
-OnInit:
- freeloop(1);
-// --------------------- Config ---------------------
-// Custom points, if needed: "<variable>","<name to display>"
- setarray .Points$[0],"#CASHPOINTS","Cash Points";
-
- set .Announce,1; // Announce quest completion? (1: yes / 0: no)
- set .ShowSlot,1; // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
- set .DisplayID,0; // Show item IDs? (1: yes / 0: no)
- set .ShowZeny,0; // Show Zeny cost, if any? (1: yes / 0: no)
-
-// Shop categories, if needed: "<Shop 1>","<Shop 2>"{,...};
-// Duplicate dummy data for any additional shops (bottom of script).
-// If no categories, use the second line instead (remove //).
-
- setarray .Shops$[1],"Headgears","Weapons","Other";
- // set .Shops$,"n/a";
-// Add(<shop number>,<reward ID>,<reward amount>,<Zeny cost>,<point cost>,
-// <required item ID>,<required item amount>{,...});
-// Shop number corresponds with order above (default is 1).
-// Note: Do NOT use a reward item more than once!
+function Add {
+ if (getitemname(getarg(1)) == "null") {
+ debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
+ return;
+ }
+ for(set .@n,5; .@n<127; set .@n,.@n+2) {
+ if (!getarg(.@n,0)) break;
+ if (getitemname(getarg(.@n)) == "null") {
+ debugmes "Quest requirement #"+getarg(.@n)+" invalid (skipped).";
+ return;
+ }
+ }
+ for(set .@i,2; .@i<.@n; set .@i,.@i+1)
+ set getd(".q_"+getarg(1)+"["+(.@i-2)+"]"), getarg(.@i);
+ npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
+ return;
+}
- Add(1,5022,1,0,0,7086,1,969,10,999,40,1003,50,984,2);
- Add(1,5032,1,0,0,1059,250,2221,1,2227,1,7063,600);
- Add(1,5027,1,0,0,2252,1,1036,400,7001,50,4052,1);
- Add(1,5045,1,0,0,2252,1,1054,450,943,1200);
+function Chk {
+ if (getarg(0) < getarg(1)) {
+ set @qe[0],1;
+ return "^FF0000";
+ }
+ else return "^00FF00";
+}
- Add(2,1224,1,0,0,7297,30,969,10,999,50,714,10);
- Add(2,1225,1,0,0,7292,30,969,10,999,50,714,10);
+function Slot {
+ set .@s$,getitemname(getarg(0));
+ switch(.ShowSlot) {
+ case 1: if (!getitemslots(getarg(0))) return .@s$;
+ case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
+ default: return .@s$;
+ }
+}
- Add(3,531,1,3,0,512,1,713,1);
- Add(3,532,1,3,0,513,1,713,1);
- Add(3,533,1,3,0,514,1,713,1);
- Add(3,534,1,3,0,515,1,713,1);
+function A_An {
+ setarray .@A$[0],"a","e","i","o","u";
+ set .@B$, "_"+getarg(0);
+ for(set .@i,0; .@i<5; set .@i,.@i+1)
+ if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);
+ return "a "+getarg(0);
+}
+}
-// --------------------------------------------------
- freeloop(0);
- set .menu$,"";
- for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
- set .menu$, .menu$+.Shops$[.@i]+":";
- npcshopdelitem "qshop"+.@i,909;
- }
+function script qshop {
+ deletearray @i[0],getarraysize(@i);
+ for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
+ set @i[.@i],getarg(.@i);
+ doevent "quest_shop::OnMenu";
end;
}
-// -------- Dummy data (duplicate as needed) --------
+
+// Dummy shop data -- copy as needed.
+//============================================================
- shop qshop1 -1,909:-1
- shop qshop2 -1,909:-1
- shop qshop3 -1,909:-1
+- shop qshop4 -1,909:-1
+- shop qshop5 -1,909:-1 \ No newline at end of file