From 6da12f840490b958f7e770a4ce699ec38828e97d Mon Sep 17 00:00:00 2001 From: euphyy Date: Thu, 20 Dec 2012 02:18:26 +0000 Subject: * 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 --- conf/atcommand_athena.conf | 1 + db/re/item_combo_db.txt | 16 +-- doc/atcommands.txt | 4 +- doc/item_bonus.txt | 5 +- npc/custom/quests/quest_shop.txt | 253 +++++++++++++++++++++++---------------- npc/re/jobs/3-1/ranger.txt | 5 +- src/map/atcommand.c | 1 - 7 files changed, 166 insertions(+), 119 deletions(-) diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 84acdcf23..5a0a5b289 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -55,6 +55,7 @@ aliases: { kill: ["die"] guildstorage: ["gstorage"] accinfo: ["accountinfo"] + itemreset: ["clearinventory"] } /* Commands help file */ diff --git a/db/re/item_combo_db.txt b/db/re/item_combo_db.txt index 431f97f15..e3fa00492 100644 --- a/db/re/item_combo_db.txt +++ b/db/re/item_combo_db.txt @@ -49,14 +49,14 @@ 1776:18114,{ bonus bLongAtkRate,20; } 2001:2677,{ bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; } 2001:2711,{ bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; } -2007:2467:2859:15025,{ bonus2 bSubEle,Ele_Earth,-50; } -2008:2468:2860:15026,{ bonus2 bSubEle,Ele_Wind,-50; } -2009:2469:2861:15027,{ bonus2 bSubEle,Ele_Water,-50; } -2010:2470:2862:15028,{ bonus2 bSubEle,Ele_Fire,-50; } -2011:2467:2859:15025,{ bonus2 bSubEle,Ele_Earth,-50; } -2012:2468:2860:15026,{ bonus2 bSubEle,Ele_Wind,-50; } -2013:2469:2861:15027,{ bonus2 bSubEle,Ele_Water,-50; } -2014:2470:2862:15028,{ bonus2 bSubEle,Ele_Fire,-50; } +2007:2467:2859:15025,{ bonus2 bMagicAtkEle,Ele_Wind,40; bonus2 bMagicAtkEle,Ele_Earth,-30; bonus2 bSubEle,Ele_Earth,-50; } +2008:2468:2860:15026,{ bonus2 bMagicAtkEle,Ele_Water,40; bonus2 bMagicAtkEle,Ele_Wind,-30; bonus2 bSubEle,Ele_Wind,-50; } +2009:2469:2861:15027,{ bonus2 bMagicAtkEle,Ele_Fire,40; bonus2 bMagicAtkEle,Ele_Water,-30; bonus2 bSubEle,Ele_Water,-50; } +2010:2470:2862:15028,{ bonus2 bMagicAtkEle,Ele_Earth,40; bonus2 bMagicAtkEle,Ele_Fire,-30; bonus2 bSubEle,Ele_Fire,-50; } +2011:2467:2859:15025,{ bonus2 bMagicAtkEle,Ele_Wind,60; bonus2 bMagicAtkEle,Ele_Earth,-60; bSubEle,Ele_Earth,-50; } +2012:2468:2860:15026,{ bonus2 bMagicAtkEle,Ele_Water,60; bonus2 bMagicAtkEle,Ele_Wind,-60; bonus2 bSubEle,Ele_Wind,-50; } +2013:2469:2861:15027,{ bonus2 bMagicAtkEle,Ele_Fire,60; bonus2 bMagicAtkEle,Ele_Water,-60; bonus2 bSubEle,Ele_Water,-50; } +2014:2470:2862:15028,{ bonus2 bMagicAtkEle,Ele_Earth,60; bonus2 bMagicAtkEle,Ele_Fire,-60; bonus2 bSubEle,Ele_Fire,-50; } 2109:2717:2239,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; } 2114:2353:5122,{ bonus bStr,2; bonus bDef,5; bonus bMdef,5; if(BaseClass==Job_Swordman) bonus bDef,6; } 2115:2353:5124,{ bonus bDef,2-getequiprefinerycnt(EQI_HAND_L)-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getequiprefinerycnt(EQI_HAND_L)+getequiprefinerycnt(EQI_HEAD_TOP); } diff --git a/doc/atcommands.txt b/doc/atcommands.txt index 4d233e27f..28bedfa1b 100644 --- a/doc/atcommands.txt +++ b/doc/atcommands.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= rAthena Dev Team //===== Current Version: ===================================== -//= 20121127 +//= 20121219 //===== Description: ========================================= //= List of available atcommands and their functions. //============================================================ @@ -685,7 +685,7 @@ Deletes all items in storage (or guild storage). @clearcart -Deletes all items in cart, but it will not remove the cart. +Deletes all items in cart, but does not remove the cart. --------------------------------------- diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 612530141..490f3bc24 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= rAthena Dev Team //===== Current Version: ===================================== -//= 20110124 +//= 20121219 //===== Description: ========================================= //= List of script instructions used in item bonuses, //= mainly bonus/bonus2/bonus3/bonus4/bonus5 arguments. @@ -132,6 +132,9 @@ bonus2 bMagicAddEle,n,x; +x% magical damage against element n bonus2 bSubEle,n,x; x% Damage reduction against element n. n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead +bonus2 bMagicAtkEle,n,x; Increases damage of n element magic by x%. + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, + 6=Holy, 7=Dark, 8=Spirit, 9=Undead bonus2 bAddDamageClass,n,x; +x% extra physical damage against monsters of class n Against players, n is their job id bonus2 bAddMagicDamageClass,n,x; +x% extra magical damage against monsters of class n 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"{,{,{,...}}}; +//============================================================ +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],"",""; +// ----------------------------------------------------------- + + setarray .Points$[0],"#CASHPOINTS","Cash Points"; + +// ----------------------------------------------------------- +// Shop IDs -- to add shops, copy dummy data at bottom of file. +// setarray .Shops$[1],"",""{,...}; +// ----------------------------------------------------------- + + setarray .Shops$[1],"Headgears","Weapons","Other"; + +// ----------------------------------------------------------- +// Quest items -- do NOT use a reward item more than once! +// Add(,,, +// ,, +// ,{,...}); +// ----------------------------------------------------------- + + 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 "+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: "","" - 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: "",""{,...}; -// 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 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