viewing paste Euphy's Quest Shop v1.4 [ | Athena
Posted on the
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
| //===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.4 [mod]
//= Item Preview is available without the quest completed.
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//============================================================
prontera,164,203,6 script Quest Shop 998,{
function Add; function Chk; function Slot; function A_An;
if(.Shops$ != "") set .@i,1;
else {
set .@menu$,"";
for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1)
set .@menu$, .@menu$+.Shops$[.@i]+":";
set .@i, select(.@menu$); }
dispbottom "Select one item at a time.";
callshop "qshop"+.@i,1;
npcshopattach "qshop"+.@i;
end;
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; }
function Chk {
if (getarg(0)<getarg(1)) { set @qf,1; return "^FF0000"; }
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),11)>0) return .@s$+" ["+getitemslots(getarg(0))+"]";
default: return .@s$; } }
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); }
OnBuyItem:
set .@q[0],@bought_nameid;
copyarray .@q[1],getd(".q_"+@bought_nameid+"[0]"),getarraysize(getd(".q_"+@bought_nameid+"[0]"));
if (!.@q[1]) { message strcharinfo(0),"An error has occurred."; end; }
mes "[Quest Shop]";
mes "Reward: ^0055FF"+((.@q[1]>1)?.@q[1]+"x ":"")+Slot(.@q[0])+"^000000";
mes "Requirements:";
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";
next;
if (.ItemPreview) {
set @qe1, getiteminfo(.@q[0],5); set @qe2, getiteminfo(.@q[0],11);
addtimer 1000, strnpcinfo(1)+"::OnExit"; }
while(1){
switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((((@qe1&1) || (@qe1&256) || (@qe1&512)) && @qe2>0 && !@qe6 && .ItemPreview)?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
case 1:
if (@qf) {
mes "[Quest Shop]";
mes "You're missing one or more quest requirements.";
set @qf,0;
close; }
if (!checkweight(.@q[0],.@q[1])) {
mes "[Quest Shop]";
mes "^FF0000You need "+(((.@q[1]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
close; }
if (.@q[2]) set Zeny, Zeny-.@q[2];
if (.@q[3]) setd .Points$[0], getd(.Points$[0])-.@q[3];
if (.@q[4]) for(set .@i,4; .@i<getarraysize(.@q); set .@i,.@i+2)
delitem .@q[.@i],.@q[.@i+1];
getitem .@q[0],.@q[1];
if (.Announce) announce strcharinfo(0)+" has created "+A_An(getitemname(.@q[0]))+"!",0;
specialeffect2 699;
close;
case 2:
set @qe3, getlook(3); set @qe4, getlook(4); set @qe5, getlook(5);
if (@qe1&1) atcommand "@changelook 3 "+@qe2;
if (@qe1&256) atcommand "@changelook 1 "+@qe2;
if (@qe1&512) atcommand "@changelook 2 "+@qe2;
set @qe6,1;
break;
case 3:
close; } }
OnExit:
if (@qe6) { atcommand "@changelook 3 "+@qe3; atcommand "@changelook 1 "+@qe4; atcommand "@changelook 2 "+@qe5; }
for(set .@i,1; .@i<7; set .@i,.@i+1) setd "@qe"+.@i,0;
end;
OnInit:
// --------------------- 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)
// Debug section, if you receive errors:
set .ItemPreview,1; // Item Preview: "npc_event: event not found" error (set to 0)
freeloop(1); // Free Loop: "undeclared function" (delete this line and the one under config)
// 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!
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); // Delete this if "freeloop" is disabled above.
for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1)
npcshopdelitem "qshop"+.@i,909;
end;
}
// -------- Dummy data (duplicate as needed) --------
- shop qshop1 -1,909:-1
- shop qshop2 -1,909:-1
- shop qshop3 -1,909:-1 |
Viewed 951 times, submitted by Guest.