diff options
author | euphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-12-20 02:18:26 +0000 |
---|---|---|
committer | euphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-12-20 02:18:26 +0000 |
commit | 6da12f840490b958f7e770a4ce699ec38828e97d (patch) | |
tree | 102f4f7e9f3600fc82859d7ec361742e696865e6 /npc/custom/quests | |
parent | 300f20998ac8012373024b3a3d7d88b80de7e040 (diff) | |
download | hercules-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.txt | 253 |
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 |