|
@@ -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
|