diff options
-rw-r--r-- | conf/char/char-server.conf | 1 | ||||
-rw-r--r-- | conf/map/battle/client.conf | 8 | ||||
-rw-r--r-- | conf/map/battle/drops.conf | 9 | ||||
-rw-r--r-- | conf/map/battle/items.conf | 3 | ||||
-rw-r--r-- | conf/messages.conf | 9 | ||||
-rw-r--r-- | db/constants.conf | 3 | ||||
-rw-r--r-- | db/pre-re/item_db.conf | 29 | ||||
-rw-r--r-- | db/re/exp.txt | 4 | ||||
-rw-r--r-- | db/re/item_db.conf | 29 | ||||
-rw-r--r-- | doc/constants.md | 35 | ||||
-rw-r--r-- | doc/item_db.txt | 3 | ||||
-rw-r--r-- | doc/script_commands.txt | 94 | ||||
-rw-r--r-- | npc/quests/quests_ein.txt | 2720 | ||||
-rw-r--r-- | sql-files/item_db.sql | 12 | ||||
-rw-r--r-- | sql-files/item_db_re.sql | 12 | ||||
-rw-r--r-- | src/common/mmo.h | 3 | ||||
-rw-r--r-- | src/map/atcommand.c | 73 | ||||
-rw-r--r-- | src/map/battle.c | 4 | ||||
-rw-r--r-- | src/map/battle.h | 4 | ||||
-rw-r--r-- | src/map/channel.c | 10 | ||||
-rw-r--r-- | src/map/channel.h | 3 | ||||
-rw-r--r-- | src/map/clif.c | 40 | ||||
-rw-r--r-- | src/map/itemdb.c | 3 | ||||
-rw-r--r-- | src/map/itemdb.h | 16 | ||||
-rw-r--r-- | src/map/map.h | 1 | ||||
-rw-r--r-- | src/map/mob.c | 29 | ||||
-rw-r--r-- | src/map/packets.h | 1324 | ||||
-rw-r--r-- | src/map/pc.c | 53 | ||||
-rw-r--r-- | src/map/script.c | 145 | ||||
-rw-r--r-- | src/map/status.c | 101 | ||||
-rw-r--r-- | src/map/status.h | 4 | ||||
-rwxr-xr-x | tools/configconverter.pl | 1 |
32 files changed, 2445 insertions, 2340 deletions
diff --git a/conf/char/char-server.conf b/conf/char/char-server.conf index c512f1fb7..47506e324 100644 --- a/conf/char/char-server.conf +++ b/conf/char/char-server.conf @@ -50,6 +50,7 @@ char_configuration: { // Server Communication username and password. userid: "s1" passwd: "p1" + // Login Server IP // The character server connects to the login server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on diff --git a/conf/map/battle/client.conf b/conf/map/battle/client.conf index c3409b578..32f1324be 100644 --- a/conf/map/battle/client.conf +++ b/conf/map/battle/client.conf @@ -126,6 +126,14 @@ summer_ignorepalette: false // Set this to true if your cloth palettes pack doesn't has Hanbok palettes (or has less than the other jobs) hanbok_ignorepalette: false +// Do not display cloth colors for the Oktoberfest costume? +// Set this to true if your cloth palettes pack doesn't has Oktoberfest palettes (or has less than the other jobs) +oktoberfest_ignorepalette: false + +// Do not display cloth colors for the Summer 2 costume? +// Set this to true if your cloth palettes pack doesn't has Summer 2 palettes (or has less than the other jobs) +summer2_ignorepalette: false + // Show Hercules version to users when the login? display_version: false diff --git a/conf/map/battle/drops.conf b/conf/map/battle/drops.conf index 547a4ae4e..4dbbf8fd5 100644 --- a/conf/map/battle/drops.conf +++ b/conf/map/battle/drops.conf @@ -146,12 +146,3 @@ drops_by_luk2: 0 // 1: Only marine spheres drop items. // 2: All alchemist summons drop items. alchemist_summon_reward: 1 - -// Make broadcast ** Player1 won Pupa's Pupa Card (chance 0.01%) *** -// This can be set to any value between 0~10000. -// Note: It also announces STEAL skill usage with rare items -// 0 = don't show announces at all -// 1 = show announces for 0.01% drop chance items -// 333 = show announces for 3.33% or lower drop chance items -// 10000 = show announces for all items -rare_drop_announce: 0 diff --git a/conf/map/battle/items.conf b/conf/map/battle/items.conf index c7aa99245..f7ffd3f32 100644 --- a/conf/map/battle/items.conf +++ b/conf/map/battle/items.conf @@ -86,9 +86,6 @@ item_check: false // On officials this is 0, but it's set to 100ms as a measure against bots/macros. item_use_interval: 100 -// How much time must pass between cash food uses? Default: 60000 (1 min) -cashfood_use_interval: 60000 - // Required level of bNoMagicDamage before Status Changes are blocked (Golden Thief Bug card). // For example, if left at 50. An item can give bNoMagicDamage,40; // which reduces magic damage by 40%, but does not blocks status changes. diff --git a/conf/messages.conf b/conf/messages.conf index 3af1d450e..abf1f5042 100644 --- a/conf/messages.conf +++ b/conf/messages.conf @@ -60,7 +60,7 @@ 32: PvP: On. 33: GvG: Off. 34: GvG: On. -//35 FREE +35: This job has no alternate body styles. 36: Appearance changed. 37: An invalid number was specified. 38: Invalid location number, or name. @@ -469,12 +469,7 @@ 538: Hack on trade: character '%s' (account: %d) try to trade more items that he has. 539: This player has %d of a kind of item (id: %d), and tried to trade %d of them. 540: This player has been definitively blocked. -// Rare Items Drop/Steal announce -541: '%s' got %s's %s (chance: %0.02f%%) -//541: %.0s%.0sSomeone got %s -542: '%s' stole %s's %s (chance: %0.02f%%) -//542: %.0s%.0sSomeone stole %s -//543-545 FREE +//541-545 FREE // @showmobs 546: Please enter a mob name/id (usage: @showmobs <mob name/id>) 547: Invalid mob name %s! diff --git a/db/constants.conf b/db/constants.conf index d108e0976..dd280612c 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -1394,6 +1394,9 @@ constants_db: { SC_TUNAPARTY: 649 SC_SHRIMP: 650 SC_FRESHSHRIMP: 651 + + // Summer 2 Costume + SC_DRESS_UP: 652 comment__: "Emotes" e_gasp: 0 diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf index cfa7cb7d1..b17e57252 100644 --- a/db/pre-re/item_db.conf +++ b/db/pre-re/item_db.conf @@ -70,7 +70,7 @@ item_db: ( Taekwon: true/false (boolean, defaults to false) Star_Gladiator: true/false (boolean, defaults to false) Soul_Linker: true/false (boolean, defaults to false) - Gunslinger: true/false (boolean, defaults to false) + Gunslinger: true/false (boolean, defaults to false) Ninja: true/false (boolean, defaults to false) Gangsi: true/false (boolean, defaults to false) Death_Knight: true/false (boolean, defaults to false) @@ -93,6 +93,7 @@ item_db: ( BuyingStore: true/false (boolean, defaults to false) Delay: Delay to use item (int, defaults to 0) KeepAfterUse: true/false (boolean, defaults to false) + DropAnnounce: true/false (boolean, defaults to false) Trade: { (defaults to no restrictions) override: GroupID (int, defaults to 100) nodrop: true/false (boolean, defaults to false) @@ -63262,6 +63263,7 @@ item_db: ( Name: "Episode 13.1 Poporing Key" Type: 3 Weight: 10 + DropAnnounce: true }, { Id: 7783 @@ -63269,6 +63271,7 @@ item_db: ( Name: "Episode 13.2 Poring Key" Type: 3 Weight: 10 + DropAnnounce: true }, { Id: 7784 @@ -69799,8 +69802,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_STR,1800000,10; - percentheal 20,10; + sc_start(SC_FOOD_STR_CASH, 1800000, 10); + percentheal(20, 10); "> }, { @@ -69820,8 +69823,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_AGI,1800000,10; - percentheal 15,5; + sc_start(SC_FOOD_AGI_CASH, 1800000, 10); + percentheal(15, 5); "> }, { @@ -69841,8 +69844,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_INT,1800000,10; - percentheal 10,20; + sc_start(SC_FOOD_INT_CASH, 1800000, 10); + percentheal(10, 20); "> }, { @@ -69862,8 +69865,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_DEX,1800000,10; - percentheal 10,10; + sc_start(SC_FOOD_DEX_CASH, 1800000, 10); + percentheal(10, 10); "> }, { @@ -69883,8 +69886,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_LUK,1800000,10; - percentheal 14,8; + sc_start(SC_FOOD_LUK_CASH, 1800000, 10); + percentheal(14, 8); "> }, { @@ -69904,8 +69907,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_VIT,1800000,10; - percentheal 25,0; + sc_start(SC_FOOD_VIT_CASH, 1800000, 10); + percentheal(25, 0); "> }, { diff --git a/db/re/exp.txt b/db/re/exp.txt index b26bc7809..790542419 100644 --- a/db/re/exp.txt +++ b/db/re/exp.txt @@ -32,10 +32,10 @@ 10,4001,1,4,11,20,31,44,100,166,226,295,374 //Job - Adv First Classes -50,4002:4003:4004:4005:4006:4007,1,150,340,550,760,990,1250,1600,1980,2340,2740,3140,3950,4510,5210,5950,7000,8150,9130,10220,11480,12780,14090,15560,16980,18620,20280,21780,24510,27000,29000,31000,36000,39000,41000,45000,49000,51900,55000,59450,64630,70030,74940,79800,84630,89610,95170,100420,107250,112070,118120,120482,122891,125348,127854,130411,133019,135679,138392,141159,143982,146861,149798,152793,155848,158964,162143,165385,168692,172065,175506,179016,182596,186247,189971,193770,197645,201597,205628,209740,213934,218212,222576,227027,231567,236198,240921,245739,250653,255666,260779,265994,271313,276739,282273,287918,293676,299549,305539,311649,317881,324238,330722,337336,344082,350963,357982,365141,372443,379891,387488,395237,403141,411203,419427,427815,436371,445098,453999,463078,472339,481785,491420,501248,511272,521497,531926,542564,553415,564483,575772,587287,599032,611012,623232,635696,648409,661377,674604,688096,701857,715894,730211,744815,759711,774905,790403,806211,822335,838781,855556,872667,890120,907922,926080,944601,963493,982762,1002417,1022465,1042914,1063772,1085047,1106747,1128881,1151458,1174487,1197976,1221935,1246373,1271300,1296725,1322659,1349112,1376094,1403615,1431687,1460320,1489526,1519316,1549702,1580696,1612309,1644555,1677446,1710994,1745213,1780117,1815719,1852033,1889073,1926854,1965391,2004698,2044791,2085686,2127399,2169946,2213344,2257610,2302762,2348817,2395793,2443708,2492582,2542433,2593281,2645146,2698048,2752008,2807048,2863188,2920451,2978859,3038436,3099204,3161188,3224411,3288899,3354676,3421769,3490204,3560008,3631208,3703832,3777908,3853466,3930535,4009145,4089327,4171113,4254535,4339625,4426417,4514945,4605243,4697347,4791293,4887118,4984860,5084557,5186248,5289972,5395771,5503686,5613759,5726034,5840554,5957364,6076511,6198041,6322001,6448440,6577408,6708956,6843134 +50,4002:4003:4004:4005:4006:4007,1,50,100,200,350,550,800,1100,1450,1850,2300,2800,3350,3950,4600,5300,6050,6850,7700,8600,9550,10550,11600,12700,13850,15050,16300,17600,18950,20350,21800,23300,24850,26450,28100,29800,31550,33350,35200,37100,39050,41050,43100,45200,47350,49550,51800,54100,56450,58850,61300,120482,122891,125348,127854,130411,133019,135679,138392,141159,143982,146861,149798,152793,155848,158964,162143,165385,168692,172065,175506,179016,182596,186247,189971,193770,197645,201597,205628,209740,213934,218212,222576,227027,231567,236198,240921,245739,250653,255666,260779,265994,271313,276739,282273,287918,293676,299549,305539,311649,317881,324238,330722,337336,344082,350963,357982,365141,372443,379891,387488,395237,403141,411203,419427,427815,436371,445098,453999,463078,472339,481785,491420,501248,511272,521497,531926,542564,553415,564483,575772,587287,599032,611012,623232,635696,648409,661377,674604,688096,701857,715894,730211,744815,759711,774905,790403,806211,822335,838781,855556,872667,890120,907922,926080,944601,963493,982762,1002417,1022465,1042914,1063772,1085047,1106747,1128881,1151458,1174487,1197976,1221935,1246373,1271300,1296725,1322659,1349112,1376094,1403615,1431687,1460320,1489526,1519316,1549702,1580696,1612309,1644555,1677446,1710994,1745213,1780117,1815719,1852033,1889073,1926854,1965391,2004698,2044791,2085686,2127399,2169946,2213344,2257610,2302762,2348817,2395793,2443708,2492582,2542433,2593281,2645146,2698048,2752008,2807048,2863188,2920451,2978859,3038436,3099204,3161188,3224411,3288899,3354676,3421769,3490204,3560008,3631208,3703832,3777908,3853466,3930535,4009145,4089327,4171113,4254535,4339625,4426417,4514945,4605243,4697347,4791293,4887118,4984860,5084557,5186248,5289972,5395771,5503686,5613759,5726034,5840554,5957364,6076511,6198041,6322001,6448440,6577408,6708956,6843134 //Job - Adv Second Classes -70,4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,1,2400,3800,6200,10400,15200,22900,27100,30000,32500,35700,41300,45000,45800,47600,50300,58700,63900,67100,70300,73500,90600,96200,102700,110200,121400,144700,152900,163100,173300,183500,213500,224700,236000,247200,260700,299800,324800,343600,362300,374800,474400,497000,512100,542200,564800,644300,678200,712100,754500,796900,949300,988100,1026800,1065600,1104300,1334800,1391400,1425300,1470600,1515800,2003800,2032800,2119900,2236100,2323200,3025300,3433300,3776600,4436900,6758400,6893567,7031438,7172066,7315507,7461817,7611053,7763273,7918538,8076908,8238446,8403214,8571278,8742703,8917556,9095906,9277823,9463379,9652646,9845698,10042611,10243463,10448332,10657298,10870443,11087851,11309607,11535798,11766513,12001843,12241879,12486716,12736450,12991178,13251001,13516020,13786340,14062066,14343307,14630172,14922775,15221230,15525654,15836166,16152889,16475946,16805464,17141572,17484403,17834091,18190773,18554587,18925679,19304193,19690275,20084081,20485761,20895474,21313383,21739651,22174444,22617932,23070290,23531695,24002329,24482374,24972021,25471459,25980888,26500505,27030513,27571121,28122541,28684990,29258689,29843861,30440736,31049550,31670540,32303950,32950028,33609027,34281207,34966831,35666167,36379490,37107077,37849216,38606199,39378323,40165889,40969204,41788587,42624358,43476846,44346384,45233310,46137977,47060734,48001949,48961986,49941222,50940047,51958847,52998023,54057983,55139142,56241925,57366761,58514094,59684376,60878062,62095624,63337535,64604285,65896368,67214294,68558580,69929746,71328337,72754901,74210000,75694198,77208082,78752240,80327283,81933824,83572498,85243944,86948821,88687798,90461554,92270781,94116197,95998522,97918488,99876855,101874391,103911877,105990115,108109912,110272108,112477552,114727100,117021643,119362070,121749311,124184295,126667979,129201333,131785360,134421064,137109474,139851658,142648694,145501659,148411694,151379927,154407515,157495667,160645574,163858476,167135646,170478357,173887915,177365675,180912990,184531248,188221869,191986305,195826026,199742548,203737391,207812135,211968366,216207731,220531878,224942505,229441357,234030182,238710775,243484978,248354670,253321760,258388190,263555950 +70,4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,1,2400,3800,6200,10400,15200,22900,27100,30000,32500,35700,41300,45000,45800,47600,50300,58700,63900,67100,70300,73500,90600,96200,102700,110200,121400,144700,152900,163100,173300,183500,213500,224700,236000,247200,260700,299800,324800,343600,362300,374800,474400,497000,512100,542200,564800,644300,678200,712100,754500,796900,873100,911900,950600,989400,1028100,1143300,1199900,1233800,1279100,1324300,1486900,1515900,1603000,1719200,1806300,2040300,2244300,2415900,2746000,3326000,6893567,7031438,7172066,7315507,7461817,7611053,7763273,7918538,8076908,8238446,8403214,8571278,8742703,8917556,9095906,9277823,9463379,9652646,9845698,10042611,10243463,10448332,10657298,10870443,11087851,11309607,11535798,11766513,12001843,12241879,12486716,12736450,12991178,13251001,13516020,13786340,14062066,14343307,14630172,14922775,15221230,15525654,15836166,16152889,16475946,16805464,17141572,17484403,17834091,18190773,18554587,18925679,19304193,19690275,20084081,20485761,20895474,21313383,21739651,22174444,22617932,23070290,23531695,24002329,24482374,24972021,25471459,25980888,26500505,27030513,27571121,28122541,28684990,29258689,29843861,30440736,31049550,31670540,32303950,32950028,33609027,34281207,34966831,35666167,36379490,37107077,37849216,38606199,39378323,40165889,40969204,41788587,42624358,43476846,44346384,45233310,46137977,47060734,48001949,48961986,49941222,50940047,51958847,52998023,54057983,55139142,56241925,57366761,58514094,59684376,60878062,62095624,63337535,64604285,65896368,67214294,68558580,69929746,71328337,72754901,74210000,75694198,77208082,78752240,80327283,81933824,83572498,85243944,86948821,88687798,90461554,92270781,94116197,95998522,97918488,99876855,101874391,103911877,105990115,108109912,110272108,112477552,114727100,117021643,119362070,121749311,124184295,126667979,129201333,131785360,134421064,137109474,139851658,142648694,145501659,148411694,151379927,154407515,157495667,160645574,163858476,167135646,170478357,173887915,177365675,180912990,184531248,188221869,191986305,195826026,199742548,203737391,207812135,211968366,216207731,220531878,224942505,229441357,234030182,238710775,243484978,248354670,253321760,258388190,263555950 //Job - 3rd Jobs, Baby 3rds, Expanded Super Novice 60,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112,1,106000,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,131668000,145518000,160753000,177511000,195944000,216220000,238523000,263056000,290042000,319726000,,134178935,135520724,136875925,138244677,139627117,141023389,142433624,143857966,145296546,146749508,148216997,149699160,151196158,152708120,154235207,155777550,157335326,158908679,160497757,162102736,163723761,165360996,167014600,168684736,170371581,172075298,173796047,175534006,177289338,179062235,180852860,182661390,184488004,186332878,188196207,190078168,191978955,193898747,195837737,197796119,199774071,201771802,203789524,205827413,207885680,209964534,212064171,214184815,216326662,218489920,220674817,222881562,225110381,227361485,229635100,231931452,234250768,236593273,238959210,241348805,243762285,246199908,248661900,251148520,253659994,256196597,258758555,261346143,263959602,266599193,269265189,271957833,274677399,277424179,280198431,283000413,285830417,288688733,291575620,294491369,297436270,300410615,303414727,306448864,309513349,312608474,315734561,318891902,322080819,325301637,328554645,331840199,335158590,338510174,341895274,345314213,348767346,352255030,355777587,359335372,362928710,366557987,370223560,373925783,377665046,381441702,385256109,389108653,392999722,396929705,400898989,404907961,408957043,413046622,417177086,421348854,425562348,429817955,434116127,438457285,442841848,447270270,451742970,456260401,460823015,465431233,470085539,474786386,479534259,484329610,489172891,494064620,499005249,503995295,509035244,514125579,519266818,524459479,529704077,535001099,540351093,545754609,551212165,556724276,562291525,567914429,573593570,579329530,585122825,590974038,596883750,602852608,608881128,614969957,621119677,627330870,633604182,639940195,646339620,652803038,659331031,665924311,672583524,679309381,686102463,692963482,699893083,706891979,713960880,721100498,728311477,735594595,742950563,750380090,757883889,765462735,773117339,780848477,788656925,796543457,804508915,812554009,820679516,828886275,837175126,845546847,854002276,862542318,871167751,879879413,888678209,897564981,906540633,915606005 diff --git a/db/re/item_db.conf b/db/re/item_db.conf index d1f416b08..514337801 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -70,7 +70,7 @@ item_db: ( Taekwon: true/false (boolean, defaults to false) Star_Gladiator: true/false (boolean, defaults to false) Soul_Linker: true/false (boolean, defaults to false) - Gunslinger: true/false (boolean, defaults to false) + Gunslinger: true/false (boolean, defaults to false) Ninja: true/false (boolean, defaults to false) Gangsi: true/false (boolean, defaults to false) Death_Knight: true/false (boolean, defaults to false) @@ -93,6 +93,7 @@ item_db: ( BuyingStore: true/false (boolean, defaults to false) Delay: Delay to use item (int, defaults to 0) KeepAfterUse: true/false (boolean, defaults to false) + DropAnnounce: true/false (boolean, defaults to false) Trade: { (defaults to no restrictions) override: GroupID (int, defaults to 100) nodrop: true/false (boolean, defaults to false) @@ -80968,12 +80969,14 @@ item_db: ( AegisName: "Gold_Key77" Name: "Episode 13.1 Poporing Key" Weight: 10 + DropAnnounce: true }, { Id: 7783 AegisName: "Silver_Key77" Name: "Episode 13.2 Poring Key" Weight: 10 + DropAnnounce: true }, { Id: 7784 @@ -87601,8 +87604,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_STR,1800000,10; - percentheal 20,10; + sc_start(SC_FOOD_STR_CASH, 1800000, 10); + percentheal(20, 10); "> }, { @@ -87622,8 +87625,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_AGI,1800000,10; - percentheal 15,5; + sc_start(SC_FOOD_AGI_CASH, 1800000, 10); + percentheal(15, 5); "> }, { @@ -87643,8 +87646,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_INT,1800000,10; - percentheal 10,20; + sc_start(SC_FOOD_INT_CASH, 1800000, 10); + percentheal(10, 20); "> }, { @@ -87664,8 +87667,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_DEX,1800000,10; - percentheal 10,10; + sc_start(SC_FOOD_DEX_CASH, 1800000, 10); + percentheal(10, 10); "> }, { @@ -87685,8 +87688,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_LUK,1800000,10; - percentheal 14,8; + sc_start(SC_FOOD_LUK_CASH, 1800000, 10); + percentheal(14, 8); "> }, { @@ -87706,8 +87709,8 @@ item_db: ( nogstorage: true } Script: <" - sc_start SC_FOOD_VIT,1800000,10; - percentheal 25,0; + sc_start(SC_FOOD_VIT_CASH, 1800000, 10); + percentheal(25, 0); "> }, { diff --git a/doc/constants.md b/doc/constants.md index 22521a60c..0ecb527dc 100644 --- a/doc/constants.md +++ b/doc/constants.md @@ -1316,6 +1316,7 @@ - `SC_TUNAPARTY`: 649 - `SC_SHRIMP`: 650 - `SC_FRESHSHRIMP`: 651 +- `SC_DRESS_UP`: 652 ### Emotes @@ -3797,6 +3798,7 @@ - `MAX_CART`: 100 - `MAX_INVENTORY`: 100 - `MAX_ZENY`: 2147483647 +- `MAX_BANK_ZENY`: 2147483647 - `MAX_BG_MEMBERS`: 30 - `MAX_CHAT_USERS`: 20 - `MAX_REFINE`: 20 @@ -3827,11 +3829,12 @@ - `Option_Dragon5`: 67108864 - `Option_Hanbok`: 134217728 - `Option_Oktoberfest`: 268435456 +- `Option_Summer2`: 536870912 ### status option compounds - `Option_Dragon`: 126353408 -- `Option_Costume`: 402984960 +- `Option_Costume`: 939855872 ### send_target @@ -3945,6 +3948,35 @@ - `BL_CHAR`: 539 - `BL_ALL`: 4095 +### Player permissions + +- `PERM_TRADE`: 1 +- `PERM_PARTY`: 2 +- `PERM_ALL_SKILL`: 4 +- `PERM_USE_ALL_EQUIPMENT`: 8 +- `PERM_SKILL_UNCONDITIONAL`: 16 +- `PERM_JOIN_ALL_CHAT`: 32 +- `PERM_NO_CHAT_KICK`: 64 +- `PERM_HIDE_SESSION`: 128 +- `PERM_RECEIVE_HACK_INFO`: 512 +- `PERM_WARP_ANYWHERE`: 1024 +- `PERM_VIEW_HPMETER`: 2048 +- `PERM_VIEW_EQUIPMENT`: 4096 +- `PERM_USE_CHECK`: 8192 +- `PERM_USE_CHANGEMAPTYPE`: 16384 +- `PERM_USE_ALL_COMMANDS`: 32768 +- `PERM_RECEIVE_REQUESTS`: 65536 +- `PERM_SHOW_BOSS`: 131072 +- `PERM_DISABLE_PVM`: 262144 +- `PERM_DISABLE_PVP`: 524288 +- `PERM_DISABLE_CMD_DEAD`: 1048576 +- `PERM_HCHSYS_ADMIN`: 2097152 +- `PERM_TRADE_BOUND`: 4194304 +- `PERM_DISABLE_PICK_UP`: 8388608 +- `PERM_DISABLE_STORE`: 16777216 +- `PERM_DISABLE_EXP`: 33554432 +- `PERM_DISABLE_SKILL_USAGE`: 67108864 + ### Renewal - `RENEWAL`: 1 @@ -3974,6 +4006,7 @@ - `SkillPoint`: [param] - `Class`: [param] - `Zeny`: [param] +- `BankVault`: [param] - `Sex`: [param] - `NextBaseExp`: [param] - `NextJobExp`: [param] diff --git a/doc/item_db.txt b/doc/item_db.txt index 6ffc8a52b..86e397636 100644 --- a/doc/item_db.txt +++ b/doc/item_db.txt @@ -71,6 +71,7 @@ item_db: ( BuyingStore: true/false (boolean, defaults to false) Delay: Delay to use item (int, defaults to 0) KeepAfterUse: true/false (boolean, defaults to false) + DropAnnounce: true/false (boolean, defaults to false) Trade: { (defaults to no restrictions) override: GroupID (int, defaults to 100) nodrop: true/false (boolean, defaults to false) @@ -290,6 +291,8 @@ ForceSerial: Whether the item will be given new unique id or not. When the item BuyingStore: Whether the item can be sold via buyingstore, one must also edit data\buyingstoreitemlist.txt for client to accept item. +DropAnnounce: Enables global announcement of the selected item when dropped by monster. + Delay: Delay for an item to be used again. Value is in milliseconds. There is a max concurrent number of entries modifiable in src/map/itemdb.h as MAX_ITEMDELAYS. diff --git a/doc/script_commands.txt b/doc/script_commands.txt index b68ac5c64..0ba350ad1 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -540,7 +540,8 @@ allows you to replace lots of numbered arguments for many commands with easier to read text. The special variables most commonly used are all permanent character-based variables: -Zeny - Amount of Zeny. +Zeny - Amount of Zeny in the inventory. +BankVault - Amount of Zeny in the bank. Hp - Current amount of hit points. MaxHp - Maximum amount of hit points. Sp - Current spell points. @@ -707,7 +708,8 @@ MAX_STORAGE - Maximum storage items MAX_GUILD_STORAGE - Maximum guild storage items MAX_CART - Maximum cart items MAX_INVENTORY - Maximum inventory items -MAX_ZENY - Maximum Zeny +MAX_ZENY - Maximum Zeny in the inventory +MAX_BANK_ZENY - Maximum Zeny in the bank MAX_BG_MEMBERS - Maximum BattleGround members MAX_CHAT_USERS - Maximum Chat users MAX_REFINE - Maximum Refine level @@ -4290,8 +4292,9 @@ if <color> field is left out. *showscript("<message>"{, <GID>}) -Makes attached player or GID says a message like shouting a skill name, the message -will be seen to everyone around but not in chat window. +Makes the attached player or GID, display a message similiar to a chat, +this will be seen by everyone near the invoking character but will not +be displayed in the chat window. --------------------------------------- @@ -7447,6 +7450,27 @@ no RID is attached), false will be returned. In case of success, true is returned. --------------------------------------- + +*addchannelhandler("<#channel>", "<NPC::OnEvent>") + +This command will trigger the specified event every time a player +talks in the specified channel, with said player as attached rid. +It assigns the message to @channelmes$ + +OnChannelMessage: + channelmes("#chan", "Echo: " + @channelmes$); + end; + +OnInit: + addchannelhandler("#chan", "NPC::OnChannelMessage"); + +--------------------------------------- + +*removechannelhandler("<#channel>", "<NPC::OnEvent>") + +Removes a channel handler added by addchannelhandler() + +--------------------------------------- *rand(<number>{, <number>}) This function returns a number ... @@ -7763,6 +7787,68 @@ scripts-atcommands this way. --------------------------------------- +*can_use_command("<command>"{, <account id>}) + +Checks if the attached or specified player can use the specified +atcommand and returns true or false accordingly. + +--------------------------------------- + +*has_permission(<permission>{, <account id>}) +*has_permission("<permission>"{, <account id>}) + +Check if the attached or specified player has the specified permission +and returns true or false accordingly. See doc/permissions.txt for +details about permissions. + +Valid <permission> are: + + PERM_TRADE + PERM_PARTY + PERM_ALL_SKILL + PERM_USE_ALL_EQUIPMENT + PERM_SKILL_UNCONDITIONAL + PERM_JOIN_ALL_CHAT + PERM_NO_CHAT_KICK + PERM_HIDE_SESSION + PERM_WHO_DISPLAY_AID + PERM_RECEIVE_HACK_INFO + PERM_WARP_ANYWHERE + PERM_VIEW_HPMETER + PERM_VIEW_EQUIPMENT + PERM_USE_CHECK + PERM_USE_CHANGEMAPTYPE + PERM_USE_ALL_COMMANDS + PERM_RECEIVE_REQUESTS + PERM_SHOW_BOSS + PERM_DISABLE_PVM + PERM_DISABLE_PVP + PERM_DISABLE_CMD_DEAD + PERM_HCHSYS_ADMIN + PERM_TRADE_BOUND + PERM_DISABLE_PICK_UP + PERM_DISABLE_STORE + PERM_DISABLE_EXP + PERM_DISABLE_SKILL_USAGE + +Example: + + if (has_permission(PERM_WARP_ANYWHERE)) { + //do something + } + +It is also possible to pass a string for plugin permissions: + + if (has_permission("show_version")) { + //do something + } + +** Passing a string is slower than passing a constant because + the engine has to loop through the array to find the permission. + In most cases you should use the PERM_ constants. + +--------------------------------------- + *unitskilluseid(<GID>, <skill id>, <skill lvl>{, <target id>}) *unitskilluseid(<GID>, "<skill name>", <skill lvl>{, <target id>}) *unitskillusepos(<GID>, <skill id>, <skill lvl>, <x>, <y>) diff --git a/npc/quests/quests_ein.txt b/npc/quests/quests_ein.txt index f7d702277..f5b2e14a6 100644 --- a/npc/quests/quests_ein.txt +++ b/npc/quests/quests_ein.txt @@ -474,20 +474,479 @@ einbech,97,167,5 script Cavitar 4_M_EINOLD,{ //== Uwe Kleine :: ein_anoz ================================ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ + function F_AboutEinbroch { + mes "[Uwe]"; + mes "Einbroch was originally"; + mes "built to support Einbech's"; + mes "mining efforts. Because it's"; + mes "small and crowded with people,"; + mes "there's no room to build the ore refining factories over there."; + next; + mes "[Uwe]"; + mes "Since Einbroch used to be"; + mes "an empty lot, it was perfect"; + mes "for building factories. That's"; + mes "what my grandfather told me a"; + mes "long time ago. Anyway, Einbroch quickly grew into a major city."; + next; + mes "[Uwe]"; + mes "Now people think that this"; + mes "city was never planned to be"; + mes "just an extension of Einbech."; + mes "See that rampart over there?"; + mes "It doesn't connect to Einbech at all! No protection for them..."; + next; + mes "[Uwe]"; + mes "It's like the government"; + mes "lost all interest in Einbech."; + mes "Even the miners there have"; + mes "been moving here to work in "; + mes "the factories. But more people hasn't made this city more lively."; + next; + mes "[Uwe]"; + mes "Einbroch may look modern"; + mes "and exciting now, but soon"; + mes "you'll see that there's no sign"; + mes "of warmth or life. So... Just don't live here in your old age."; + next; + .@choice2$ = "I won't. Thanks for the advice."; + if (BaseClass == Job_Blacksmith) + .@choice2$ = "But I like the city life~"; + switch (select("Then why are you here?", .@choice2$)) { + case 1: + if (BaseClass == Job_Blacksmith) { + mes "[Uwe]"; + mes "Well, sugar honey,"; + mes "I've been waiting for"; + mes "someone. But... It looks"; + mes "like that person won't be"; + mes "coming back anyway."; + next; + mes "[Uwe]"; + mes "Oooh, but let's not talk"; + mes "about that. Next time you"; + mes "drop by, we'll talk about"; + mes "something more fun, 'kay?"; + close; + } + mes "[Uwe]"; + mes "Well, I have some"; + mes "precious memories of"; + mes "this place. Once, there was"; + mes "a man who lived here who"; + mes "was just like a father to me."; + next; + mes "[Uwe]"; + mes "Oh, but I'm sure that"; + mes "you don't want to hear"; + mes "about that. Next time you"; + mes "drop by, we'll talk about"; + mes "something more fun, 'kay?"; + mes "Buhbye for now, cutie~"; + close; + case 2: + if (BaseClass != Job_Blacksmith) { + mes "[Uwe]"; + mes "Oh, that is such"; + mes "a good decision,"; + mes "sugar honey! Oh, you"; + mes "cutie adventurers are"; + mes "so precious, so lovable."; + mes "^333333*Tee hee hee~*^000000"; + next; + mes "[Uwe]"; + mes "Well, that was"; + mes "a fun talk. Come"; + mes "back and visit, 'kay?"; + mes "I'll miss you until"; + mes "the next time~"; + close; + } + mes "[Uwe]"; + mes "Big cities can be nice,"; + mes "but you never get to enjoy"; + mes "the sensation of stepping"; + mes "barefoot through the grass,"; + mes "or the magnificent sight of"; + mes "the shining stars at night."; + next; + mes "[Uwe]"; + mes "And the people who live"; + mes "in the cities can be so"; + mes "uptight! I've known more"; + mes "than a few who look down"; + mes "on people from smaller towns."; + next; + mes "[Uwe]"; + mes "It's sad to see some"; + mes "people will always be"; + mes "that ignorant. I... I just"; + mes "can't believe those people"; + mes "can be sooo close minded!"; + next; + mes "[Uwe]"; + mes "Oh...!"; + mes "I'm sorry, I guess"; + mes "I went a little overboard."; + mes "^666666*Titter*^000000 Next time you drop"; + mes "by, we'll talk about something"; + mes "more fun, 'kay? Buhbye~"; + close; + } + } + + function F_ForgeWeapon { + mes "[Uwe]"; + mes "Well..."; + mes "I actually just"; + mes "do smithing work"; + mes "to create my own"; + mes "cooking tools."; + next; + mes "[Uwe]"; + mes "Oh, I understand"; + mes "that somebody needs"; + mes "to fight the monsters,"; + mes "but I'm the wrong person"; + mes "to ask for forging weapons."; + mes "I... am a strict pacifist~"; + next; + mes "[Uwe]"; + mes "Just go look"; + mes "around for a little"; + mes "bit, I'm sure you'll"; + mes "find a Blacksmith"; + mes "who's willing to forge"; + mes "you a good weapon~"; + close; + } + + function F_Cancel { + mes "[Uwe]"; + mes "Oh...?"; + mes "Well, feel"; + mes "free to visit"; + mes "me whenever"; + mes "you want, 'kay?"; + close; + } + + function F_RandCloseMsg { + switch (rand(1, 3)) { + case 1: + mes "...Ho ho~"; + close; + case 2: + mes "...*Tee Hee~*"; + close; + case 3: + mes "...Behbie~"; + close; + } + } + + function F_Ingredients { + mes "[Uwe]"; + mes "Now for beginners,"; + mes "learning to select"; + mes "and use ingredients"; + mes "is one of the most"; + mes "important fundamentals."; + next; + mes "[Uwe]"; + mes "Cooking is like forging"; + mes "since specific ingredients"; + mes "are needed to make specialty"; + mes "items or dishes. You can't just"; + mes "skip them if you really need"; + mes "them, right? Right!"; + next; + mes "[Uwe]"; + mes "Once you make up your"; + mes "mind to do something,"; + mes "focus on finishing it, 'kay?"; + mes "Never cut corners and always"; + mes "dedicate yourself to make the"; + mes "very best finished product~"; + if (ein_cook == 7 && BaseClass == Job_Blacksmith) + ein_cook += 10; + next; + mes "[Uwe]"; + mes "Well, that was"; + mes "a fun talk. Come"; + mes "back and visit, 'kay?"; + mes "I'll miss you until"; + mes "the next time~"; + F_RandCloseMsg(); + } + + function F_Cooking { + mes "[Uwe]"; + mes "Mm...?"; + mes "Did you just"; + mes "say that you"; + mes "want to learn"; + mes "the art of cooking?"; + next; + mes "[Uwe]"; + mes "I'm sorry, but I can't"; + mes "really give culinary"; + mes "lessons. But I will"; + mes "give good advice for"; + mes "hopeful beginners."; + next; + mes "[Uwe]"; + mes "Now..."; + mes "For your tuition"; + mes "I'll need-- Gosh,"; + mes "there's just so many"; + mes "things. Get some paper,"; + mes "and a pen for this list..."; + next; + ein_cook += 100; + mes "[Uwe]"; + mes "Just kidding!"; + mes "^333333*Titter~*^000000 I don't need"; + mes "much to make some"; + mes "cooking utensils. Bring"; + mes "6 ^0000FFLarge Jellopy^000000. That's it!"; + next; + mes "[Uwe]"; + mes "In return, I will give you"; + mes "1 Coal and some useful"; + mes "cooking advice for novices."; + mes "I give this advice for free to"; + mes "my smithing colleages, though..."; + next; + mes "[Uwe]"; + mes "Why ^EEA9B8don't^000000 you"; + mes "become a Blacksmith?"; + mes "I'm much more confident"; + mes "in that field. ^333333*Tee hee~*^000000"; + next; + mes "[Uwe]"; + mes "Well, I'll be"; + mes "waiting right"; + mes "here until you"; + mes "come back."; + F_RandCloseMsg(); + } + + function F_Heart { + mes "[Uwe]"; + mes "Ah, heart. Just like forging,"; + mes "you need passion and desire"; + mes "to create something special."; + mes "Every smith and cook knows that"; + mes "you can do anything if you have"; + mes "the will and the commitment."; + next; + mes "[Uwe]"; + mes "Well, that's all"; + mes "I really have to"; + mes "say about that. But"; + mes "come back and chat"; + mes "whenever you please."; + F_RandCloseMsg(); + } + + function F_Skills { + mes "[Uwe]"; + mes "When you're beginning to learn"; + mes "skills, you can't let yourself be discouraged! Practice makes"; + mes "perfect, you know? But never"; + mes "use your lack of skills as an"; + mes "excuse if you happen to fail..."; + next; + mes "[Uwe]"; + mes "Effort is also an essential"; + mes "in forging and cooking! Now,"; + mes "on the other hand, if you put"; + mes "in all the effort but didn't learn any of the skills, you'll still get nowhere fast, right? Right!"; + next; + mes "[Uwe]"; + mes "The key is to always"; + mes "give 100% effort and work"; + mes "on improving your skills."; + mes "Before you know it, you'll"; + mes "be a respected master!"; + next; + mes "[Uwe]"; + mes "Well, that was"; + mes "a fun talk. Come"; + mes "back and visit, 'kay?"; + mes "I'll miss you until"; + mes "the next time~"; + F_RandCloseMsg(); + } + + function F_Tools { + mes "[Uwe]"; + mes "Cooking is a little"; + mes "easier if you have"; + mes "nicer tools to use,"; + mes "but that's it. Tools by"; + mes "themselves can't make"; + mes "just anybody a master."; + next; + mes "[Uwe]"; + mes "In the end, the best"; + mes "tools are the ones you're"; + mes "most comfortable with using."; + mes "In fact, I still use the old knife I used back when I was just"; + mes "a little novice chef~"; + next; + mes "[Uwe]"; + mes "Oh, while we're on"; + mes "the subject of tools,"; + mes "I just received some"; + mes "new hammers today."; + mes "Would you like a couple?"; + next; + if (checkweight(Spawn, 50) == 0) { + mes "[Uwe]"; + mes "Mmmm...?"; + mes "You're holding too many"; + mes "things. I can't give you any"; + mes "hammers if you don't have"; + mes "room. Hurry, put your extra"; + mes "stuff in your Kafra Storage~"; + close; + } + ein_cook += 10; + getitem Golden_Hammer, 1; + getitem Iron_Hammer, 1; + next; + mes "[Uwe]"; + mes "Well, I hope"; + mes "you like them~"; + F_RandCloseMsg(); + } + + function F_ToolsWithoutReward { + mes "[Uwe]"; + mes "Cooking is a little"; + mes "easier if you have"; + mes "nicer tools to use,"; + mes "but that's it. Tools by"; + mes "themselves can't make"; + mes "just anybody a master."; + next; + mes "[Uwe]"; + mes "In the end, the best"; + mes "tools are the ones you're"; + mes "most comfortable with using."; + mes "In fact, I still use the old knife I used back when I was just"; + mes "a little novice chef~"; + next; + mes "[Uwe]"; + mes "Well, that was"; + mes "a fun talk. Come"; + mes "back and visit, 'kay?"; + mes "I'll miss you until"; + mes "the next time~"; + F_RandCloseMsg(); + } + + function F_OverWeight { + mes "[Uwe]"; + mes "Oh, I was going to give"; + mes "you a little something,"; + mes "but you've carrying too"; + mes "many things. Why don't"; + mes "you put some of it away"; + mes "in your Kafra Storage?"; + close; + } + + function F_LargeJellopyForCoal { + if (countitem(Large_Jellopy) > 5) { + if (checkweight(Spawn, 199) == 0) + F_OverWeight(); + mes "[Uwe]"; + mes "Thank you ^EEA9B8so^000000 much!"; + mes "Here's the Coal I promised~"; + mes "Oh, and take these Mini Furnaces. They were just lying around, so you know, I thought, well, why don't you take them? *Tee hee hee~*"; + delitem Large_Jellopy, 6; + ein_cook = 219; + getitem Coal, 1; + getitem Portable_Furnace, 10; + next; + mes "[Uwe]"; + mes "I hope you enjoy!"; + mes "Personally, I think the"; + mes "best part of smithing"; + mes "is standing over the flaming"; + mes "heat and getting all ^EEA9B8hot and"; + mes "sweaty^000000. Ooh, how exciting~!"; + close; + } else if (countitem(Large_Jellopy) > 0) { + mes "[Uwe]"; + mes "Ooh, you're missing"; + mes "some. I guess you can"; + mes "still give them to me, but"; + mes "you'd get less of a reward"; + if (Sex == SEX_MALE) { + mes "...you ^EEA9B8naughty boy^000000."; + } else { + mes "...you ^EEA9B8naughty girl^000000."; + } + next; + .@choice = select("Give him all.", "Cancel."); + if (.@choice == 1) { + mes "[Uwe]"; + mes "Just kidding~"; + mes "Don't be so nervous, I don't really need those anymore. But since I know you're hard working, I'll throw in a little something extra..."; + next; + mes "[Uwe]"; + mesf("I usually give you cutie %ss 10 Mini Furnaces, but you can have ^EEA9B811^000000." /* TODO: HULD Plural Table for jobname() */ + "There's the little something extra I was talking about.", jobname(Class)); + } else { + mes "[Uwe]"; + mes "Well... Then... Anyway,"; + mes "Congratulation to becoming"; + mesf("a %s!!", jobname(Class)); + mes "This is my present for it."; + if (Sex == SEX_MALE) { + mes "...you ^EEA9B8naughty boy^000000."; + } else { + mes "...you ^EEA9B8naughty girl^000000."; + } + } + if (checkweight(Knife, 1) == 0 || + checkweight(Spawn, (.@choice == 1 ? 220 : 200)) == 0) + F_OverWeight(); + ein_cook = 219; + getitem Portable_Furnace, (.@choice == 1 ? 11 : 10); + next; + mes "[Uwe]"; + mes "I know it's not very extravagant, but these will come in handy next time you're smithing. So make the best use of them, 'kay?"; + close; + } else { + mes "[Uwe]"; + mes "^666666You didn't bring"; + mes "any Large Jellopy...?^000000."; + ein_cook = 219; + next; + mes "[Uwe]"; + mes "It's fine! It's not like I feel ^EEA9B8betrayed^000000 or anything, but I don't need them anymore! Since we're both in the business of smithing, I just hope that you remember to follow through on your favors, 'kay? Buhbye~"; + close; + } + } + EinUwe = 0; if (BaseClass == Job_Blacksmith) { if (ein_cook > 999) { - .@ccc = ein_cook-1000; - if (.@ccc > 199) { + if (ein_cook > 1199) { mes "[Uwe]"; mes "Oh hello hello~"; mes "It's been a long"; mes "time since we've talked,"; mes "you cutie adventurer~"; next; - switch(select("So... You're a chef.", "Yes, I tried my best.")) { + switch (select("So... You're a chef.", "Yes, I tried my best.")) { case 1: - mes "["+ strcharinfo(PC_NAME) +"]"; + mesf("[%s]", strcharinfo(PC_NAME)); mes "So..."; mes "You're a chef."; next; @@ -505,18 +964,10 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ next; break; } - if (checkweight(Spawn,200) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } + if (checkweight(Spawn, 200) == 0) + F_OverWeight(); ein_cook = 219; - getitem Portable_Furnace,10; + getitem Portable_Furnace, 10; mes "[Uwe]"; mes "I had these lying"; mes "around, so why don't"; @@ -529,13 +980,8 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "Alright then~"; mes "Hope you enjoy"; mes "your Mini Furances"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } - } - else if (.@ccc > 99) { + F_RandCloseMsg(); + } else if (ein_cook > 1099) { //6 Large Jellopy for Coal Part mes "[Uwe]"; mes "Oh hello hello~"; mes "It's been a long"; @@ -550,155 +996,12 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "Did you already forget"; mes "the 6 Large Jellopy?"; next; - switch(select("There you go.", "I want to quit.", "Can I do it later?")) { + switch (select("There you go.", "I want to quit.", "Can I do it later?")) { case 1: - if (countitem(Large_Jellopy) > 5) { - if (checkweight(Spawn,199) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } - mes "[Uwe]"; - mes "Thank you ^EEA9B8so^000000 much!"; - mes "Here's the Coal I promised~"; - mes "Oh, and take these Mini Furnaces. They were just lying around, so you know, I thought, well, why don't you take them? *Tee hee hee~*"; - delitem Large_Jellopy,6; - ein_cook = 219; - getitem Coal,1; - getitem Portable_Furnace,10; - next; - mes "[Uwe]"; - mes "I hope you enjoy!"; - mes "Personally, I think the"; - mes "best part of smithing"; - mes "is standing over the flaming"; - mes "heat and getting all ^EEA9B8hot and"; - mes "sweaty^000000. Ooh, how exciting~!"; - close; - } - else if (countitem(Large_Jellopy) > 0) { - mes "[Uwe]"; - mes "Ooh, you're missing"; - mes "some. I guess you can"; - mes "still give them to me, but"; - mes "you'd get less of a reward"; - if (Sex == SEX_MALE) { - mes "...you ^EEA9B8naughty boy^000000."; - } - else { - mes "...you ^EEA9B8naughty girl^000000."; - } - switch(select("Give him all.", "Cancel.")) { - case 1: - if (checkweight(Knife,1) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } - mes "[Uwe]"; - mes "Just kidding~"; - mes "Don't be so nervous, I don't really need those anymore. But since I know you're hard working, I'll throw in a little something extra..."; - next; - if (checkweight(Spawn,220) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } - mes "[Uwe]"; - if (Class == Job_Whitesmith) { - mes "I usually give you cutie MasterSmiths 10 Mini Furnaces, but you can have ^EEA9B811^000000. There's the little something extra I was talking about."; - } - else { - mes "I usually give you cutie Blacksmiths 10 Mini Furnaces, but you can have ^EEA9B811^000000. There's the little something extra I was talking about."; - } - ein_cook = 219; - getitem Portable_Furnace,11; - next; - mes "[Uwe]"; - mes "I know it's not very extravagant, but these will come in handy next time you're smithing. So make the best use of them, 'kay?"; - close; - case 2: - if (checkweight(Knife,1) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } - mes "[Uwe]"; - mes "Well... Then... Anyway,"; - mes "Congratulation to became"; - if (Class == Job_Whitesmith) { - mes "a Master Smith!!"; - } - else { - mes "a Black Smith!!"; - } - mes "This is my present for it."; - if (Sex == SEX_MALE) { - mes "...you ^EEA9B8naughty boy^000000."; - } - else { - mes "...you ^EEA9B8naughty girl^000000."; - } - break; - } - if (checkweight(Spawn,100) == 0) { - next; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } - ein_cook = 219; - getitem Portable_Furnace,5; - next; - mes "[Uwe]"; - mes "I know it's not very extravagant, but these will come in handy next time you're smithing. So make the best use of them, 'kay?"; - close; - } - else { - mes "[Uwe]"; - mes "^666666You didn't bring"; - mes "any Large Jellopy...?^000000."; - ein_cook = 219; - next; - mes "[Uwe]"; - mes "It's fine! It's not like I feel ^EEA9B8betrayed^000000 or anything, but I don't need them anymore! Since we're both in the business of smithing, I just hope that you remember to follow through on your favors, 'kay? Buhbye~"; - close; - } + F_LargeJellopyForCoal(); case 2: - if (checkweight(Spawn,200) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } + if (checkweight(Spawn, 200) == 0) + F_OverWeight(); mes "[Uwe]"; mes "Quit...?"; mes "Oh well, at least you're honest. But let me give you a little something, since we're both fellow smiths."; @@ -710,12 +1013,11 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "been very, very bad."; if (Sex == SEX_MALE) { mes "...You ^EEA9B8naughty boy^000000."; - } - else { + } else { mes "...You ^EEA9B8naughty girl^000000."; } ein_cook = 219; - getitem Portable_Furnace,10; + getitem Portable_Furnace, 10; next; mes "[Uwe]"; mes "I know it's not very extravagant, but these will come in handy next time you're smithing. So make the best use of them, 'kay?"; @@ -724,144 +1026,26 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "[Uwe]"; mes "Oooh, you came back later than I thought, so I don't need really need them anymore. Then again, just holding onto them doesn't sound right either..."; next; - switch(select("Here you go~", "I want to quit.")) { + switch (select("Here you go~", "I want to quit.")) { case 1: - if (checkweight(Spawn,199) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } - if (countitem(Large_Jellopy) > 5) { - mes "[Uwe]"; - mes "Thank you ^EEA9B8so^000000 much!"; - mes "Here's the Coal I promised~"; - mes "Oh, and take these Mini Furnaces. They were just lying around, so you know, I thought, well, why don't you take them? *Tee hee hee~*"; - delitem Large_Jellopy,6; - ein_cook = 219; - getitem Coal,1; - getitem Portable_Furnace,10; - close; - } - else if (countitem(Large_Jellopy) > 0) { - mes "[Uwe]"; - mes "Ooh, you're missing"; - mes "some. I guess you can"; - mes "still give them to me, but"; - mes "you'd get less of a reward"; - if (Sex == SEX_MALE) { - mes "...You ^EEA9B8naughty boy^000000."; - } - else { - mes "...You ^EEA9B8naughty girl^000000."; - } - switch(select("Give them all.", "Cancel.")) { - case 1: - if (checkweight(Spawn,220) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } - mes "[Uwe]"; - mes "Just kidding~"; - mes "Don't be so nervous, I don't really need those anymore. But since I know you're hard working, I'll throw in a little something extra..."; - next; - mes "[Uwe]"; - if (Class == Job_Whitesmith) { - mes "I usually give you cutie MasterSmiths 10 Mini Furnaces, but you can have ^EEA9B811^000000. There's the little something extra I was talking about."; - } - else { - mes "I usually give you cutie Blacksmiths 10 Mini Furnaces, but you can have ^EEA9B811^000000. There's the little something extra I was talking about."; - } - ein_cook = 219; - getitem Portable_Furnace,11; - next; - mes "[Uwe]"; - mes "I know it's not very extravagant, but these will come in handy next time you're smithing. So make the best use of them, 'kay?"; - close; - case 2: - if (checkweight(Spawn,200) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } - mes "[Uwe]"; - mes "Okay."; - mes "Anyway~!"; - mes "When you do get all"; - mes "that Large Jellopy,"; - mes "just come back to me."; - if (Sex == SEX_MALE) { - mes "...you ^EEA9B8naughty boy^000000."; - } - else { - mes "...you ^EEA9B8naughty girl^000000."; - } - ein_cook = 219; - getitem Portable_Furnace,10; - next; - mes "[Uwe]"; - mes "This Portable Furnace is not expensive"; - mes "but very important item for smiths, right?"; - mes "Use it!"; - mes "And visit me someday again. Huhuhu.."; - close; - } - } - else { - mes "[Uwe]"; - mes "^666666You didn't bring"; - mes "any Large Jellopy...?^000000."; - ein_cook = 219; - next; - mes "[Uwe]"; - mes "It's fine! It's not like I feel ^EEA9B8betrayed^000000 or anything, but I don't need them anymore! Since we're both in the business of smithing, I just hope that you remember to follow through on your favors, 'kay? Buhbye~"; - close; - } + F_LargeJellopyForCoal(); case 2: - if (checkweight(Spawn,200) == 0) { - mes "[Uwe]"; - mes "Oh, I was going to give"; - mes "you a little something,"; - mes "but you've carrying too"; - mes "many things. Why don't"; - mes "you put some of it away"; - mes "in your Kafra Storage?"; - close; - } + if (checkweight(Spawn, 200) == 0) + F_OverWeight(); mes "[Uwe]"; mes "Well... Then... Anyway,"; - mes "Congratulation to became"; - if (Class == Job_Whitesmith) { - mes "a Master Smith!!"; - mes "This is my present for it. Huhuhu."; - } - else { - mes "a Black Smith!!"; + mes "Congratulation to becoming"; + mesf("a %s!!", jobname(Class)); mes "This is my present for it. Huhuhu."; + if (Class != Job_Whitesmith) { if (Sex == SEX_MALE) { mes "...You ^EEA9B8naughty boy^000000."; - } - else { + } else { mes "...You ^EEA9B8naughty girl^000000."; } } ein_cook = 219; - getitem Portable_Furnace,10; + getitem Portable_Furnace, 10; next; mes "[Uwe]"; mes "I know it's not very extravagant, but these will come in handy next time you're smithing. So make the best use of them, 'kay?"; @@ -875,7 +1059,7 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "Cooking is such a joy~!"; mes "The scents, the flavors, the sensation of sheer ^EEA9B8satiation^000000..."; next; - switch(select("Um, isn't this a forge?", "Ignore him.")) { + switch (select("Um, isn't this a forge?", "Ignore him.")) { case 1: mes "[Uwe]"; mes "Is this a forge?"; @@ -898,12 +1082,11 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "important factor in cooking,"; if (Sex == SEX_MALE) { mes "you ^EEA9B8naughty little man^000000?"; - } - else { + } else { mes "you ^EEA9B8naughty, naughty girl^000000?"; } next; - switch(select("Heart.", "Ingredients.", "Skills.", "Tools.")) { + switch (select("Heart.", "Ingredients.", "Skills.", "Tools.")) { case 1: mes "[Uwe]"; mes "..."; @@ -935,7 +1118,7 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "so please have one, 'kay?"; mes "Welcome to Einbroch, cutie~"; ein_cook = 1; - getitem Emveretarcon,1; + getitem Emveretarcon, 1; break; case 2: mes "[Uwe]"; @@ -959,7 +1142,7 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "Steel. Why don't you have 2 of"; mes "them as my little way of saying, ''Welcome to Einbroch, cutie~!''"; ein_cook = 3; - getitem Iron,2; + getitem Iron, 2; break; case 3: mes "[Uwe]"; @@ -996,7 +1179,7 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "so please have one, 'kay?"; mes "Welcome to Einbroch, cutie~"; ein_cook = 5; - getitem Emveretarcon,1; + getitem Emveretarcon, 1; break; case 4: mes "[Uwe]"; @@ -1025,7 +1208,7 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "my way of saying ''Welcome"; mes "to Einbroch, sugar honey~''"; ein_cook = 7; - getitem Iron_Hammer,1; + getitem Iron_Hammer, 1; break; } next; @@ -1035,11 +1218,7 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "come and see me"; mes "anytime, alright?"; mes "So don't be shy"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_RandCloseMsg(); case 2: mes "[Uwe]"; mes "Hmmm...?"; @@ -1049,438 +1228,62 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "and people to see. Ah well~"; close; } - } - else if (ein_cook < 10) { + } else if (ein_cook < 10) { mes "[Uwe]"; mes "Oh! Hello again,"; mes "you cutie adventurer."; mes "So tell me, what brings"; - mes "you here, "+strcharinfo(PC_NAME)+"?"; + mesf("you here, %s?", strcharinfo(PC_NAME)); next; - switch(select("Ask about Cooking.", "Ask about Einbroch.", "Cancel.")) { + switch (select("Ask about Cooking.", "Ask about Einbroch.", "Cancel.")) { case 1: + if (ein_cook % 2 == 0) + close; //Yes, there's really nothing defined for this in the Aegis Script + mes "[Uwe]"; + mes "Ooh, cooking!"; + mes "So what did you"; + mes "want to ask me...?"; + next; if (ein_cook == 1) { - mes "[Uwe]"; - mes "Ooh, cooking!"; - mes "So what did you"; - mes "want to ask me...?"; - next; - switch(select("Ingredients", "Skills", "Tools", "Cancel")) { + switch (select("Ingredients", "Skills", "Tools", "Cancel")) { case 1: - mes "[Uwe]"; - mes "Now for beginners,"; - mes "learning to select"; - mes "and use ingredients"; - mes "is one of the most"; - mes "important fundamentals."; - next; - mes "[Uwe]"; - mes "Cooking is like forging"; - mes "since specific ingredients"; - mes "are needed to make specialty"; - mes "items or dishes. You can't just"; - mes "skip them if you really need"; - mes "them, right? Right!"; - next; - mes "[Uwe]"; - mes "Once you make up your"; - mes "mind to do something,"; - mes "focus on finishing it, 'kay?"; - mes "Never cut corners and always"; - mes "dedicate yourself to make the"; - mes "very best finished product~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Ingredients(); case 2: - mes "[Uwe]"; - mes "When you're beginning to learn"; - mes "skills, you can't let yourself be discouraged! Practice makes"; - mes "perfect, you know? But never"; - mes "use your lack of skills as an"; - mes "excuse if you happen to fail..."; - next; - mes "[Uwe]"; - mes "Effort is also an essential"; - mes "in forging and cooking! Now,"; - mes "on the other hand, if you put"; - mes "in all the effort but didn't learn any of the skills, you'll still get nowhere fast, right? Right!"; - next; - mes "[Uwe]"; - mes "The key is to always"; - mes "give 100% effort and work"; - mes "on improving your skills."; - mes "Before you know it, you'll"; - mes "be a respected master!"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "Hohohohoho."; close; - case 2: mes "Umhohohoho.*"; close; - case 3: mes "Umho."; close; - } + F_Skills(); case 3: - mes "[Uwe]"; - mes "Cooking is a little"; - mes "easier if you have"; - mes "nicer tools to use,"; - mes "but that's it. Tools by"; - mes "themselves can't make"; - mes "just anybody a master."; - next; - mes "[Uwe]"; - mes "In the end, the best"; - mes "tools are the ones you're"; - mes "most comfortable with using."; - mes "In fact, I still use the old knife I used back when I was just"; - mes "a little novice chef~"; - next; - mes "[Uwe]"; - mes "Oh, while we're on"; - mes "the subject of tools,"; - mes "I just received some"; - mes "new hammers today."; - mes "Would you like a couple?"; - next; - if (checkweight(Spawn,50) == 0) { - mes "[Uwe]"; - mes "Mmmm...?"; - mes "You're holding too many"; - mes "things. I can't give you any"; - mes "hammers if you don't have"; - mes "room. Hurry, put your extra"; - mes "stuff in your Kafra Storage~"; - close; - } - ein_cook = 11; - getitem Golden_Hammer,1; - getitem Iron_Hammer,1; - mes "[Uwe]"; - mes "Well, I hope"; - mes "you like them~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Tools(); case 4: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } - } - else if (ein_cook == 3) { - mes "[Uwe]"; - mes "Ooh, cooking!"; - mes "So what did you"; - mes "want to ask me...?"; - next; - switch(select("Heart", "Skills", "Tools", "Cancel.")) { + } else if (ein_cook == 3) { + switch (select("Heart", "Skills", "Tools", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Ah, heart. Just like forging,"; - mes "you need passion and desire"; - mes "to create something special."; - mes "Every smith and cook knows that"; - mes "you can do anything if you have"; - mes "the will and the commitment."; - next; - mes "[Uwe]"; - mes "Well, that's all"; - mes "I really have to"; - mes "say about that. But"; - mes "come back and chat"; - mes "whenever you please."; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Heart(); case 2: - mes "[Uwe]"; - mes "When you're beginning to learn"; - mes "skills, you can't let yourself be discouraged! Practice makes"; - mes "perfect, you know? But never"; - mes "use your lack of skills as an"; - mes "excuse if you happen to fail..."; - next; - mes "[Uwe]"; - mes "Effort is also an essential"; - mes "in forging and cooking! Now,"; - mes "on the other hand, if you put"; - mes "in all the effort but didn't learn any of the skills, you'll still get nowhere fast, right? Right!"; - next; - mes "[Uwe]"; - mes "The key is to always"; - mes "give 100% effort and work"; - mes "on improving your skills."; - mes "Before you know it, you'll"; - mes "be a respected master!"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "Hohohohoho."; close; - case 2: mes "Umhohohoho.*"; close; - case 3: mes "Umho."; close; - } + F_Skills(); case 3: - mes "[Uwe]"; - mes "Cooking is a little"; - mes "easier if you have"; - mes "nicer tools to use,"; - mes "but that's it. Tools by"; - mes "themselves can't make"; - mes "just anybody a master."; - next; - mes "[Uwe]"; - mes "In the end, the best"; - mes "tools are the ones you're"; - mes "most comfortable with using."; - mes "In fact, I still use the old knife I used back when I was just"; - mes "a little novice chef~"; - next; - mes "[Uwe]"; - mes "Oh, while we're on"; - mes "the subject of tools,"; - mes "I just received some"; - mes "new hammers today."; - mes "Would you like a couple?"; - next; - if (checkweight(Spawn,50) == 0) { - mes "[Uwe]"; - mes "Mmmm...?"; - mes "You're holding too many"; - mes "things. I can't give you any"; - mes "hammers if you don't have"; - mes "room. Hurry, put your extra"; - mes "stuff in your Kafra Storage~"; - close; - } - ein_cook = 13; - getitem Golden_Hammer,1; - getitem Iron_Hammer,1; - mes "[Uwe]"; - mes "Well, I hope"; - mes "you like them~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Tools(); case 4: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } - } - else if (ein_cook == 5) { - mes "[Uwe]"; - mes "Ooh, cooking!"; - mes "So what did you"; - mes "want to ask me...?"; - next; - switch(select("Heart", "Ingredients", "Tools", "Cancel")) { + } else if (ein_cook == 5) { + switch (select("Heart", "Ingredients", "Tools", "Cancel")) { case 1: - mes "[Uwe]"; - mes "Ah, heart. Just like forging,"; - mes "you need passion and desire"; - mes "to create something special."; - mes "Every smith and cook knows that"; - mes "you can do anything if you have"; - mes "the will and the commitment."; - next; - mes "[Uwe]"; - mes "Well, that's all"; - mes "I really have to"; - mes "say about that. But"; - mes "come back and chat"; - mes "whenever you please."; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Heart(); case 2: - mes "[Uwe]"; - mes "Now for beginners,"; - mes "learning to select"; - mes "and use ingredients"; - mes "is one of the most"; - mes "important fundamentals."; - next; - mes "[Uwe]"; - mes "Cooking is like forging"; - mes "since specific ingredients"; - mes "are needed to make specialty"; - mes "items or dishes. You can't just"; - mes "skip them if you really need"; - mes "them, right? Right!"; - next; - mes "[Uwe]"; - mes "Once you make up your"; - mes "mind to do something,"; - mes "focus on finishing it, 'kay?"; - mes "Never cut corners and always"; - mes "dedicate yourself to make the"; - mes "very best finished product~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Ingredients(); case 3: - mes "[Uwe]"; - mes "Cooking is a little"; - mes "easier if you have"; - mes "nicer tools to use,"; - mes "but that's it. Tools by"; - mes "themselves can't make"; - mes "just anybody a master."; - next; - mes "[Uwe]"; - mes "In the end, the best"; - mes "tools are the ones you're"; - mes "most comfortable with using."; - mes "In fact, I still use the old knife I used back when I was just"; - mes "a little novice chef~"; - next; - mes "[Uwe]"; - mes "Oh, while we're on"; - mes "the subject of tools,"; - mes "I just received some"; - mes "new hammers today."; - mes "Would you like a couple?"; - next; - if (checkweight(Spawn,50) == 0) { - mes "[Uwe]"; - mes "Mmmm...?"; - mes "You're holding too many"; - mes "things. I can't give you any"; - mes "hammers if you don't have"; - mes "room. Hurry, put your extra"; - mes "stuff in your Kafra Storage~"; - close; - } - ein_cook = 15; - getitem Golden_Hammer,1; - getitem Iron_Hammer,1; - next; - mes "[Uwe]"; - mes "Well, I hope"; - mes "you like them~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Tools(); case 4: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } - } - else if (ein_cook == 7) { - mes "[Uwe]"; - mes "Ooh, cooking!"; - mes "So what did you"; - mes "want to ask me...?"; - next; - switch(select("Heart", "Ingredients", "Skills", "Cancel.")) { + } else if (ein_cook == 7) { + switch (select("Heart", "Ingredients", "Skills", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Ah, heart. Just like forging,"; - mes "you need passion and desire"; - mes "to create something special."; - mes "Every smith and cook knows that"; - mes "you can do anything if you have"; - mes "the will and the commitment."; - next; - mes "[Uwe]"; - mes "Well, that's all"; - mes "I really have to"; - mes "say about that. But"; - mes "come back and chat"; - mes "whenever you please."; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Heart(); case 2: - mes "[Uwe]"; - mes "Now for beginners,"; - mes "learning to select"; - mes "and use ingredients"; - mes "is one of the most"; - mes "important fundamentals."; - next; - mes "[Uwe]"; - mes "Cooking is like forging"; - mes "since specific ingredients"; - mes "are needed to make specialty"; - mes "items or dishes. You can't just"; - mes "skip them if you really need"; - mes "them, right? Right!"; - next; - mes "[Uwe]"; - mes "Once you make up your"; - mes "mind to do something,"; - mes "focus on finishing it, 'kay?"; - mes "Never cut corners and always"; - mes "dedicate yourself to make the"; - mes "very best finished product~"; - ein_cook = 17; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } - case 3: + F_Ingredients(); + case 3: //Yes, the part is suddenly different here in the Aegis Script as well. mes "[Uwe]"; mes "'I couldn't do it cuz"; mes "I'm not skillful with it.'"; @@ -1518,458 +1321,56 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "[Uwe]"; mes "Well, I hope"; mes "you like them~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_RandCloseMsg(); case 4: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } - } - else if (ein_cook == 9) { - mes "[Uwe]"; - mes "Ooh, cooking!"; - mes "So what did you"; - mes "want to ask me...?"; - next; - switch(select("Heart", "Ingredients", "Skills", "Tools", "Cancel.")) { + } else if (ein_cook == 9) { + switch (select("Heart", "Ingredients", "Skills", "Tools", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Ah, heart. Just like forging,"; - mes "you need passion and desire"; - mes "to create something special."; - mes "Every smith and cook knows that"; - mes "you can do anything if you have"; - mes "the will and the commitment."; - next; - mes "[Uwe]"; - mes "Well, that's all"; - mes "I really have to"; - mes "say about that. But"; - mes "come back and chat"; - mes "whenever you please."; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Heart(); case 2: - mes "[Uwe]"; - mes "Now for beginners,"; - mes "learning to select"; - mes "and use ingredients"; - mes "is one of the most"; - mes "important fundamentals."; - next; - mes "[Uwe]"; - mes "Cooking is like forging"; - mes "since specific ingredients"; - mes "are needed to make specialty"; - mes "items or dishes. You can't just"; - mes "skip them if you really need"; - mes "them, right? Right!"; - next; - mes "[Uwe]"; - mes "Once you make up your"; - mes "mind to do something,"; - mes "focus on finishing it, 'kay?"; - mes "Never cut corners and always"; - mes "dedicate yourself to make the"; - mes "very best finished product~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Ingredients(); case 3: - mes "[Uwe]"; - mes "When you're beginning to learn"; - mes "skills, you can't let yourself be discouraged! Practice makes"; - mes "perfect, you know? But never"; - mes "use your lack of skills as an"; - mes "excuse if you happen to fail..."; - next; - mes "[Uwe]"; - mes "Effort is also an essential"; - mes "in forging and cooking! Now,"; - mes "on the other hand, if you put"; - mes "in all the effort but didn't learn any of the skills, you'll still get nowhere fast, right? Right!"; - next; - mes "[Uwe]"; - mes "The key is to always"; - mes "give 100% effort and work"; - mes "on improving your skills."; - mes "Before you know it, you'll"; - mes "be a respected master!"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "Hohohohoho."; close; - case 2: mes "Umhohohoho.*"; close; - case 3: mes "Umho."; close; - } + F_Skills(); case 4: - mes "[Uwe]"; - mes "Cooking is a little"; - mes "easier if you have"; - mes "nicer tools to use,"; - mes "but that's it. Tools by"; - mes "themselves can't make"; - mes "just anybody a master."; - next; - mes "[Uwe]"; - mes "In the end, the best"; - mes "tools are the ones you're"; - mes "most comfortable with using."; - mes "In fact, I still use the old knife I used back when I was just"; - mes "a little novice chef~"; - next; - mes "[Uwe]"; - mes "Oh, while we're on"; - mes "the subject of tools,"; - mes "I just received some"; - mes "new hammers today."; - mes "Would you like a couple?"; - next; - if (checkweight(Spawn,50) == 0) { - mes "[Uwe]"; - mes "Mmmm...?"; - mes "You're holding too many"; - mes "things. I can't give you any"; - mes "hammers if you don't have"; - mes "room. Hurry, put your extra"; - mes "stuff in your Kafra Storage~"; - close; - } - ein_cook = 19; - getitem Golden_Hammer,1; - getitem Iron_Hammer,1; - next; - mes "[Uwe]"; - mes "Well, I hope"; - mes "you like them~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Tools(); case 5: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } } case 2: - mes "[Uwe]"; - mes "Einbroch was originally"; - mes "built to support Einbech's"; - mes "mining efforts. Because it's"; - mes "small and crowded with people,"; - mes "there's no room to build the ore refining factories over there."; - next; - mes "[Uwe]"; - mes "Since Einbroch used to be"; - mes "an empty lot, it was perfect"; - mes "for building factories. That's"; - mes "what my grandfather told me a"; - mes "long time ago. Anyway, Einbroch quickly grew into a major city."; - next; - mes "[Uwe]"; - mes "Now people think that this"; - mes "city was never planned to be"; - mes "just an extension of Einbech."; - mes "See that rampart over there?"; - mes "It doesn't connect to Einbech at all! No protection for them..."; - next; - mes "[Uwe]"; - mes "It's like the government"; - mes "lost all interest in Einbech."; - mes "Even the miners there have"; - mes "been moving here to work in "; - mes "the factories. But more people hasn't made this city more lively."; - next; - mes "[Uwe]"; - mes "Einbroch may look modern"; - mes "and exciting now, but soon"; - mes "you'll see that there's no sign"; - mes "of warmth or life. So... Just don't live here in your old age."; - next; - switch(select("Then why are you here?", "But I like the city life~")) { - case 1: - mes "[Uwe]"; - mes "Well, sugar honey,"; - mes "I've been waiting for"; - mes "someone. But... It looks"; - mes "like that person won't be"; - mes "coming back anyway."; - next; - mes "[Uwe]"; - mes "Oooh, but let's not talk"; - mes "about that. Next time you"; - mes "drop by, we'll talk about"; - mes "something more fun, 'kay?"; - close; - case 2: - mes "[Uwe]"; - mes "Big cities can be nice,"; - mes "but you never get to enjoy"; - mes "the sensation of stepping"; - mes "barefoot through the grass,"; - mes "or the magnificent sight of"; - mes "the shining stars at night."; - next; - mes "[Uwe]"; - mes "And the people who live"; - mes "in the cities can be so"; - mes "uptight! I've known more"; - mes "than a few who look down"; - mes "on people from smaller towns."; - next; - mes "[Uwe]"; - mes "It's sad to see some"; - mes "people will always be"; - mes "that ignorant. I... I just"; - mes "can't believe those people"; - mes "can be sooo close minded!"; - next; - mes "[Uwe]"; - mes "Oh...!"; - mes "I'm sorry, I guess"; - mes "I went a little overboard."; - mes "^666666*Titter*^000000 Next time you drop"; - mes "by, we'll talk about something"; - mes "more fun, 'kay? Buhbye~"; - close; - } + F_AboutEinbroch(); case 3: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } - } - else if ((ein_cook < 20) || (ein_cook == 219)) { + } else if (ein_cook < 20 || ein_cook == 219) { mes "[Uwe]"; mes "Oh, welcome back."; mes "So how's the weapon"; mes "forging coming along?"; next; - switch(select("Talk about Cooking", "Talk about Einbroch", "Talk about Cooking Utensils", "Cancel")) { + switch (select("Talk about Cooking", "Talk about Einbroch", "Talk about Cooking Utensils", "Cancel")) { case 1: mes "[Uwe]"; mes "Ooh, cooking!"; mes "So what did you"; mes "want to ask me...?"; next; - switch(select("Heart", "Ingredients", "Skills", "Tools", "Cancel.")) { + switch (select("Heart", "Ingredients", "Skills", "Tools", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Ah, heart. Just like forging,"; - mes "you need passion and desire"; - mes "to create something special."; - mes "Every smith and cook knows that"; - mes "you can do anything if you have"; - mes "the will and the commitment."; - next; - mes "[Uwe]"; - mes "Well, that's all"; - mes "I really have to"; - mes "say about that. But"; - mes "come back and chat"; - mes "whenever you please."; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Heart(); case 2: - mes "[Uwe]"; - mes "Now for beginners,"; - mes "learning to select"; - mes "and use ingredients"; - mes "is one of the most"; - mes "important fundamentals."; - next; - mes "[Uwe]"; - mes "Cooking is like forging"; - mes "since specific ingredients"; - mes "are needed to make specialty"; - mes "items or dishes. You can't just"; - mes "skip them if you really need"; - mes "them, right? Right!"; - next; - mes "[Uwe]"; - mes "Once you make up your"; - mes "mind to do something,"; - mes "focus on finishing it, 'kay?"; - mes "Never cut corners and always"; - mes "dedicate yourself to make the"; - mes "very best finished product~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Ingredients(); case 3: - mes "[Uwe]"; - mes "When you're beginning to learn"; - mes "skills, you can't let yourself be discouraged! Practice makes"; - mes "perfect, you know? But never"; - mes "use your lack of skills as an"; - mes "excuse if you happen to fail..."; - next; - mes "[Uwe]"; - mes "Effort is also an essential"; - mes "in forging and cooking! Now,"; - mes "on the other hand, if you put"; - mes "in all the effort but didn't learn any of the skills, you'll still get nowhere fast, right? Right!"; - next; - mes "[Uwe]"; - mes "The key is to always"; - mes "give 100% effort and work"; - mes "on improving your skills."; - mes "Before you know it, you'll"; - mes "be a respected master!"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Skills(); case 4: - mes "[Uwe]"; - mes "Cooking is a little"; - mes "easier if you have"; - mes "nicer tools to use,"; - mes "but that's it. Tools by"; - mes "themselves can't make"; - mes "just anybody a master."; - next; - mes "[Uwe]"; - mes "In the end, the best"; - mes "tools are the ones you're"; - mes "most comfortable with using."; - mes "In fact, I still use the old knife I used back when I was just"; - mes "a little novice chef~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_ToolsWithoutReward(); case 5: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } case 2: - mes "[Uwe]"; - mes "Einbroch was originally"; - mes "built to support Einbech's"; - mes "mining efforts. Because it's"; - mes "small and crowded with people,"; - mes "there's no room to build the ore refining factories over there."; - next; - mes "[Uwe]"; - mes "Since Einbroch used to be"; - mes "an empty lot, it was perfect"; - mes "for building factories. That's"; - mes "what my grandfather told me a"; - mes "long time ago. Anyway, Einbroch quickly grew into a major city."; - next; - mes "[Uwe]"; - mes "Now people think that this"; - mes "city was never planned to be"; - mes "just an extension of Einbech."; - mes "See that rampart over there?"; - mes "It doesn't connect to Einbech at all! No protection for them..."; - next; - mes "[Uwe]"; - mes "It's like the government"; - mes "lost all interest in Einbech."; - mes "Even the miners there have"; - mes "been moving here to work in "; - mes "the factories. But more people hasn't made this city more lively."; - next; - mes "[Uwe]"; - mes "Einbroch may look modern"; - mes "and exciting now, but soon"; - mes "you'll see that there's no sign"; - mes "of warmth or life. So... Just don't live here in your old age."; - next; - switch(select("Then why are you here?", "But I like the city life~")) { - case 1: - mes "[Uwe]"; - mes "Well, sugar honey,"; - mes "I've been waiting for someone. But... It looks like that person won't be coming back anyway."; - next; - mes "[Uwe]"; - mes "Oooh, but let's not talk about that. Next time you drop by, we'll talk about something more fun, 'kay? Buhbye~"; - close; - case 2: - mes "[Uwe]"; - mes "Well, big cities are nice, but you never get to enjoy the sensation of stepping barefoot through the grass, or the clear sight of the stars at night."; - next; - mes "[Uwe]"; - mes "And the people who live in cities can be so uptight! I've known more than a few who look down on people who live in smaller towns."; - next; - mes "[Uwe]"; - mes "It's sad to see some people will always be that ignorant. I... I just can't believe people can be sooo close minded!"; - next; - mes "[Uwe]"; - mes "Oh...!"; - mes "I'm sorry, I guess I went a little overboard. ^666666*Titter*^000000 Next time you drop by, we'll talk about something more fun, 'kay? Buhbye~"; - close; - } + F_AboutEinbroch(); case 3: mes "[Uwe]"; mes "Cooking utensils?"; @@ -1995,19 +1396,18 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "30 ^0000FFJubilee^000000 and 4 ^0000FFLarge Jellopy^000000."; mes "Then, I'll trade you 1 Coal for all of those. How does it sound?"; next; - switch(select("Sure.", "No, thanks.")) { + switch (select("Sure.", "No, thanks.")) { case 1: - if ((countitem(Jubilee) > 29) && (countitem(Large_Jellopy) > 3)) { - delitem Jubilee,30; - delitem Large_Jellopy,4; - getitem Coal,1; + if (countitem(Jubilee) > 29 && countitem(Large_Jellopy) > 3) { + delitem Jubilee, 30; + delitem Large_Jellopy, 4; + getitem Coal, 1; mes "[Uwe]"; mes "Hooray!"; mes "Thank you"; mes "^EEA9B8soooo^000000 much!"; close; - } - else { + } else { mes "[Uwe]"; mes "Hmmm...?"; mes "You don't have"; @@ -2031,22 +1431,15 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ close; } case 4: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } - } - else if (ein_cook > 299) { + } else if (ein_cook > 299) { if (Class == Job_Whitesmith) { mes "[Uwe]"; mes "Oooh...!"; mes "Congratulations!"; mes "You finally became"; - mes "a cutie MasterSmith!"; + mesf("a cutie %s!", jobname(Class)); next; mes "[Uwe]"; mes "Mmmm..."; @@ -2057,14 +1450,13 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "cookies I just baked~"; next; ein_cook = 9; - getitem Well_Baked_Cookie,5; + getitem Well_Baked_Cookie, 5; mes "[Uwe]"; mes "Okay, enjoy!"; mes "I hope you have"; mes "a good time smithing!"; close; - } - else { + } else { mes "[Uwe]"; mes "Hmmm?"; mes "Oh, it's you~"; @@ -2082,40 +1474,24 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ close; } } - } - else { - .@aaa = ein_cook % 2; - if (.@aaa == 1) { - .@bbb = ein_cook; - if (.@bbb > 99) { - .@bbb -= 100; - if (.@bbb > 99) { - .@bbb -= 100; - if (.@bbb > 99) { - .@ccc = 3; - } - else { - .@ccc = 2; - } - } - else { - .@ccc = 1; - } - } - else { - .@ccc = 0; - } - if (.@ccc < 3) { + } else { + if (ein_cook % 2 == 1) { + if (ein_cook >= 300) { + mes "[Uwe]"; + mes "Ah, hello again,"; + mes "cutie adventurer."; + mes "How can I help you?"; + next; + } else { mes "[Uwe]"; mes "Hm...?"; mes "I never forget a face,"; mes "but somehow I feel like"; mes "we've met somewhere before..."; next; - if (.@ccc == 0) { + if (ein_cook < 100) { ein_cook += 300; - } - else if (.@ccc == 2) { + } else if (ein_cook < 300) { ein_cook += 100; } mes "[Uwe]"; @@ -2129,442 +1505,66 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "What brings to"; if (Sex == SEX_MALE) { mes "me, you ^EEA9B8naughty boy^000000?"; - } - else { + } else { mes "me, you ^EEA9B8naughty girl^000000?"; } next; } - else if (.@ccc == 3) { - mes "[Uwe]"; - mes "Ah, hello again,"; - mes "cutie adventurer."; - mes "How can I help you?"; - next; - } - switch(select("Ask about Einbroch.", "Ask about Cooking.", "Cancel.")) { + switch (select("Ask about Einbroch.", "Ask about Cooking.", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Einbroch was originally"; - mes "built to support Einbech's"; - mes "mining efforts. Because it's"; - mes "small and crowded with people,"; - mes "there's no room to build the ore refining factories over there."; - next; - mes "[Uwe]"; - mes "Since Einbroch used to be"; - mes "an empty lot, it was perfect"; - mes "for building factories. That's"; - mes "what my grandfather told me a"; - mes "long time ago. Anyway, Einbroch quickly grew into a major city."; - next; - mes "[Uwe]"; - mes "Now people think that this"; - mes "city was never planned to be"; - mes "just an extension of Einbech."; - mes "See that rampart over there?"; - mes "It doesn't connect to Einbech at all! No protection for them..."; - next; - mes "[Uwe]"; - mes "It's like the government"; - mes "lost all interest in Einbech."; - mes "Even the miners there have"; - mes "been moving here to work in "; - mes "the factories. But more people hasn't made this city more lively."; - next; - mes "[Uwe]"; - mes "Einbroch may look modern"; - mes "and exciting now, but soon"; - mes "you'll see that there's no sign"; - mes "of warmth or life. So... Just don't live here in your old age."; - next; - switch(select("Then why are you here?", "I won't. Thanks for the advice.")) { - case 1: - mes "[Uwe]"; - mes "Well, I have some"; - mes "precious memories of"; - mes "this place. Once, there was"; - mes "a man who lived here who"; - mes "was just like a father to me."; - next; - mes "[Uwe]"; - mes "Oh, but I'm sure that"; - mes "you don't want to hear"; - mes "about that. Next time you"; - mes "drop by, we'll talk about"; - mes "something more fun, 'kay?"; - mes "Buhbye for now, cutie~"; - close; - case 2: - mes "[Uwe]"; - mes "Oh, that is such"; - mes "a good decision,"; - mes "sugar honey! Oh, you"; - mes "cutie adventurers are"; - mes "so precious, so lovable."; - mes "^333333*Tee hee hee~*^000000"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - close; - } + F_AboutEinbroch(); case 2: mes "[Uwe]"; mes "Ooh, cooking!"; mes "So what did you"; mes "want to ask me...?"; next; - switch(select("Heart", "Ingredients", "Skills", "Tools", "Cancel.")) { + switch (select("Heart", "Ingredients", "Skills", "Tools", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Ah, heart. Just like forging,"; - mes "you need passion and desire"; - mes "to create something special."; - mes "Every smith and cook knows that"; - mes "you can do anything if you have"; - mes "the will and the commitment."; - next; - mes "[Uwe]"; - mes "Well, that's all"; - mes "I really have to"; - mes "say about that. But"; - mes "come back and chat"; - mes "whenever you please."; - break; + F_Heart(); case 2: - mes "[Uwe]"; - mes "Now for beginners,"; - mes "learning to select"; - mes "and use ingredients"; - mes "is one of the most"; - mes "important fundamentals."; - next; - mes "[Uwe]"; - mes "Cooking is like forging"; - mes "since specific ingredients"; - mes "are needed to make specialty"; - mes "items or dishes. You can't just"; - mes "skip them if you really need"; - mes "them, right? Right!"; - next; - mes "[Uwe]"; - mes "Once you make up your"; - mes "mind to do something,"; - mes "focus on finishing it, 'kay?"; - mes "Never cut corners and always"; - mes "dedicate yourself to make the"; - mes "very best finished product~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - break; + F_Ingredients(); case 3: - mes "[Uwe]"; - mes "When you're beginning to learn"; - mes "skills, you can't let yourself be discouraged! Practice makes"; - mes "perfect, you know? But never"; - mes "use your lack of skills as an"; - mes "excuse if you happen to fail..."; - next; - mes "[Uwe]"; - mes "Effort is also an essential"; - mes "in forging and cooking! Now,"; - mes "on the other hand, if you put"; - mes "in all the effort but didn't learn any of the skills, you'll still get nowhere fast, right? Right!"; - next; - mes "[Uwe]"; - mes "The key is to always"; - mes "give 100% effort and work"; - mes "on improving your skills."; - mes "Before you know it, you'll"; - mes "be a respected master!"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - break; + F_Skills(); case 4: - mes "[Uwe]"; - mes "Cooking is a little"; - mes "easier if you have"; - mes "nicer tools to use,"; - mes "but that's it. Tools by"; - mes "themselves can't make"; - mes "just anybody a master."; - next; - mes "[Uwe]"; - mes "In the end, the best"; - mes "tools are the ones you're"; - mes "most comfortable with using."; - mes "In fact, I still use the old knife I used back when I was just"; - mes "a little novice chef~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - break; + F_ToolsWithoutReward(); case 5: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; - } - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; break; - case 2: mes "...*Tee Hee~*"; break; - case 3: mes "...Behbie~"; + F_Cancel(); } - close; - case 3: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; + F_Cancel(); } } if (ein_cook > 999) { - .@eee = ein_cook-1000; - if (.@eee > 199) { + if (ein_cook > 1199) { mes "[Uwe]"; mes "Ah, hello again,"; mes "cutie adventurer."; mes "How can I help you?"; next; - switch(select("Talk about Einbroch.", "Ask him to forge a Weapon.", "Talk about Cooking.", "Cancel.")) { + switch (select("Talk about Einbroch.", "Ask him to forge a Weapon.", "Talk about Cooking.", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Einbroch was originally"; - mes "built to support Einbech's"; - mes "mining efforts. Because it's"; - mes "small and crowded with people,"; - mes "there's no room to build the ore refining factories over there."; - next; - mes "[Uwe]"; - mes "Since Einbroch used to be"; - mes "an empty lot, it was perfect"; - mes "for building factories. That's"; - mes "what my grandfather told me a"; - mes "long time ago. Anyway, Einbroch quickly grew into a major city."; - next; - mes "[Uwe]"; - mes "Now people think that this"; - mes "city was never planned to be"; - mes "just an extension of Einbech."; - mes "See that rampart over there?"; - mes "It doesn't connect to Einbech at all! No protection for them..."; - next; - mes "[Uwe]"; - mes "It's like the government"; - mes "lost all interest in Einbech."; - mes "Even the miners there have"; - mes "been moving here to work in "; - mes "the factories. But more people hasn't made this city more lively."; - next; - mes "[Uwe]"; - mes "Einbroch may look modern"; - mes "and exciting now, but soon"; - mes "you'll see that there's no sign"; - mes "of warmth or life. So... Just don't live here in your old age."; - next; - switch(select("Then why are you here?", "I won't. Thanks for the advice.")) { - case 1: - mes "[Uwe]"; - mes "Well, I have some"; - mes "precious memories of"; - mes "this place. Once, there was"; - mes "a man who lived here who"; - mes "was just like a father to me."; - next; - mes "[Uwe]"; - mes "Oh, but I'm sure that"; - mes "you don't want to hear"; - mes "about that. Next time you"; - mes "drop by, we'll talk about"; - mes "something more fun, 'kay?"; - mes "Buhbye for now, cutie~"; - close; - case 2: - mes "[Uwe]"; - mes "Oh, that is such"; - mes "a good decision,"; - mes "sugar honey! Oh, you"; - mes "cutie adventurers are"; - mes "so precious, so lovable."; - mes "^333333*Tee hee hee~*^000000"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - close; - } + F_AboutEinbroch(); case 2: - mes "[Uwe]"; - mes "Well..."; - mes "I actually just"; - mes "do smithing work"; - mes "to create my own"; - mes "cooking tools."; - next; - mes "[Uwe]"; - mes "Oh, I understand"; - mes "that somebody needs"; - mes "to fight the monsters,"; - mes "but I'm the wrong person"; - mes "to ask for forging weapons."; - mes "I... am a strict pacifist~"; - next; - mes "[Uwe]"; - mes "Just go look"; - mes "around for a little"; - mes "bit, I'm sure you'll"; - mes "find a Blacksmith"; - mes "who's willing to forge"; - mes "you a good weapon~"; - close; + F_ForgeWeapon(); case 3: mes "[Uwe]"; mes "Ooh, cooking!"; mes "So what did you"; mes "want to ask me...?"; next; - switch(select("Heart", "Ingredients", "Skills", "Tools", "Cancel.")) { + switch (select("Heart", "Ingredients", "Skills", "Tools", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Ah, heart. Just like forging,"; - mes "you need passion and desire"; - mes "to create something special."; - mes "Every smith and cook knows that"; - mes "you can do anything if you have"; - mes "the will and the commitment."; - next; - mes "[Uwe]"; - mes "Well, that's all"; - mes "I really have to"; - mes "say about that. But"; - mes "come back and chat"; - mes "whenever you please."; - break; + F_Heart(); case 2: - mes "[Uwe]"; - mes "Now for beginners,"; - mes "learning to select"; - mes "and use ingredients"; - mes "is one of the most"; - mes "important fundamentals."; - next; - mes "[Uwe]"; - mes "Cooking is like forging"; - mes "since specific ingredients"; - mes "are needed to make specialty"; - mes "items or dishes. You can't just"; - mes "skip them if you really need"; - mes "them, right? Right!"; - next; - mes "[Uwe]"; - mes "Once you make up your"; - mes "mind to do something,"; - mes "focus on finishing it, 'kay?"; - mes "Never cut corners and always"; - mes "dedicate yourself to make the"; - mes "very best finished product~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - break; + F_Ingredients(); case 3: - mes "[Uwe]"; - mes "When you're beginning to learn"; - mes "skills, you can't let yourself be discouraged! Practice makes"; - mes "perfect, you know? But never"; - mes "use your lack of skills as an"; - mes "excuse if you happen to fail..."; - next; - mes "[Uwe]"; - mes "Effort is also an essential"; - mes "in forging and cooking! Now,"; - mes "on the other hand, if you put"; - mes "in all the effort but didn't learn any of the skills, you'll still get nowhere fast, right? Right!"; - next; - mes "[Uwe]"; - mes "The key is to always"; - mes "give 100% effort and work"; - mes "on improving your skills."; - mes "Before you know it, you'll"; - mes "be a respected master!"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - break; + F_Skills(); case 4: - mes "[Uwe]"; - mes "Cooking is a little"; - mes "easier if you have"; - mes "nicer tools to use,"; - mes "but that's it. Tools by"; - mes "themselves can't make"; - mes "just anybody a master."; - next; - mes "[Uwe]"; - mes "In the end, the best"; - mes "tools are the ones you're"; - mes "most comfortable with using."; - mes "In fact, I still use the old knife I used back when I was just"; - mes "a little novice chef~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - break; + F_ToolsWithoutReward(); case 5: - mes "[Uwe]"; - mes "Oh...?"; - mes "Well, feel"; - mes "free to visit"; - mes "me whenever"; - mes "you want, 'kay?"; - close; - } - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; + F_Cancel(); } - case 4: mes "[Uwe]"; mes "Alright then,"; @@ -2573,8 +1573,7 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "Hohohohoho~"; close; } - } - else if (.@eee > 99) { + } else if (ein_cook > 1099) { mes "[Uwe]"; mes "Oh hello hello~"; mes "It's been a long"; @@ -2589,118 +1588,27 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "Did you already forget"; mes "the 6 Large Jellopy?"; next; - switch(select("Talk about Einbroch.", "Ask him to forge a Weapon.", "Give him the Materials.", "Cancel.")) { + switch (select("Talk about Einbroch.", "Ask him to forge a Weapon.", "Give him the Materials.", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Einbroch was originally"; - mes "built to support Einbech's"; - mes "mining efforts. Because it's"; - mes "small and crowded with people,"; - mes "there's no room to build the ore refining factories over there."; - next; - mes "[Uwe]"; - mes "Since Einbroch used to be"; - mes "an empty lot, it was perfect"; - mes "for building factories. That's"; - mes "what my grandfather told me a"; - mes "long time ago. Anyway, Einbroch quickly grew into a major city."; - next; - mes "[Uwe]"; - mes "Now people think that this"; - mes "city was never planned to be"; - mes "just an extension of Einbech."; - mes "See that rampart over there?"; - mes "It doesn't connect to Einbech at all! No protection for them..."; - next; - mes "[Uwe]"; - mes "It's like the government"; - mes "lost all interest in Einbech."; - mes "Even the miners there have"; - mes "been moving here to work in "; - mes "the factories. But more people hasn't made this city more lively."; - next; - mes "[Uwe]"; - mes "Einbroch may look modern"; - mes "and exciting now, but soon"; - mes "you'll see that there's no sign"; - mes "of warmth or life. So... Just don't live here in your old age."; - next; - switch(select("Then why are you here?", "I won't. Thanks for the advice.")) { - case 1: - mes "[Uwe]"; - mes "Well, I have some"; - mes "precious memories of"; - mes "this place. Once, there was"; - mes "a man who lived here who"; - mes "was just like a father to me."; - next; - mes "[Uwe]"; - mes "Oh, but I'm sure that"; - mes "you don't want to hear"; - mes "about that. Next time you"; - mes "drop by, we'll talk about"; - mes "something more fun, 'kay?"; - mes "Buhbye for now, cutie~"; - close; - case 2: - mes "[Uwe]"; - mes "Oh, that is such"; - mes "a good decision,"; - mes "sugar honey! Oh, you"; - mes "cutie adventurers are"; - mes "so precious, so lovable."; - mes "^333333*Tee hee hee~*^000000"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - close; - } + F_AboutEinbroch(); case 2: - mes "[Uwe]"; - mes "Well..."; - mes "I actually just"; - mes "do smithing work"; - mes "to create my own"; - mes "cooking tools."; - next; - mes "[Uwe]"; - mes "Oh, I understand"; - mes "that somebody needs"; - mes "to fight the monsters,"; - mes "but I'm the wrong person"; - mes "to ask for forging weapons."; - mes "I... am a strict pacifist~"; - next; - mes "[Uwe]"; - mes "Just go look"; - mes "around for a little"; - mes "bit, I'm sure you'll"; - mes "find a Blacksmith"; - mes "who's willing to forge"; - mes "you a good weapon~"; - close; + F_ForgeWeapon(); case 3: if (countitem(Large_Jellopy) > 5) { mes "[Uwe]"; mes "Thank you ^EEA9B8so^000000 much!"; mes "Here's the Coal I promised~"; - delitem Large_Jellopy,6; + delitem Large_Jellopy, 6; ein_cook += 100; - getitem Coal,1; + getitem Coal, 1; next; - } - else { + } else { mes "[Uwe]"; mes "Huh...?"; if (countitem(Large_Jellopy) == 0) { mes "You brought"; mes "none at all...?"; - } - else { + } else { mes "This isn't enough"; mes "Large Jellopy...!"; } @@ -2715,121 +1623,15 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "honey. Now what would you like"; mes "to hear more about? Hmm...?"; next; - switch(select("Heart", "Materials", "Skills", "Tools", "Cancel.")) { + switch (select("Heart", "Materials", "Skills", "Tools", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Ah, heart. Just like forging,"; - mes "you need passion and desire"; - mes "to create something special."; - mes "Every smith and cook knows that"; - mes "you can do anything if you have"; - mes "the will and the commitment."; - next; - mes "[Uwe]"; - mes "Well, that's all"; - mes "I really have to"; - mes "say about that. But"; - mes "come back and chat"; - mes "whenever you please."; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Heart(); case 2: - mes "[Uwe]"; - mes "Now for beginners,"; - mes "learning to select"; - mes "and use ingredients"; - mes "is one of the most"; - mes "important fundamentals."; - next; - mes "[Uwe]"; - mes "Cooking is like forging"; - mes "since specific ingredients"; - mes "are needed to make specialty"; - mes "items or dishes. You can't just"; - mes "skip them if you really need"; - mes "them, right? Right!"; - next; - mes "[Uwe]"; - mes "Once you make up your"; - mes "mind to do something,"; - mes "focus on finishing it, 'kay?"; - mes "Never cut corners and always"; - mes "dedicate yourself to make the"; - mes "very best finished product~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Ingredients(); case 3: - mes "[Uwe]"; - mes "When you're beginning to learn"; - mes "skills, you can't let yourself be discouraged! Practice makes"; - mes "perfect, you know? But never"; - mes "use your lack of skills as an"; - mes "excuse if you happen to fail..."; - next; - mes "[Uwe]"; - mes "Effort is also an essential"; - mes "in forging and cooking! Now,"; - mes "on the other hand, if you put"; - mes "in all the effort but didn't learn any of the skills, you'll still get nowhere fast, right? Right!"; - next; - mes "[Uwe]"; - mes "The key is to always"; - mes "give 100% effort and work"; - mes "on improving your skills."; - mes "Before you know it, you'll"; - mes "be a respected master!"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "Hohohohoho."; close; - case 2: mes "Umhohohoho.*"; close; - case 3: mes "Umho."; close; - } + F_Skills(); case 4: - mes "[Uwe]"; - mes "Cooking is a little"; - mes "easier if you have"; - mes "nicer tools to use,"; - mes "but that's it. Tools by"; - mes "themselves can't make"; - mes "just anybody a master."; - next; - mes "[Uwe]"; - mes "In the end, the best"; - mes "tools are the ones you're"; - mes "most comfortable with using."; - mes "In fact, I still use the old knife I used back when I was just"; - mes "a little novice chef~"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_ToolsWithoutReward(); case 5: mes "[Uwe]"; mes "Alright then,"; @@ -2847,160 +1649,18 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "Hohohohoho~"; close; } - } - else { + } else { mes "[Uwe]"; mes "Hello, cutie~"; mes "How can I help you?"; next; - switch(select("Talk about Einbroch.", "Ask him to forge a Weapon.", "Master, I want to learn cooking.", "Cancel.")) { + switch (select("Talk about Einbroch.", "Ask him to forge a Weapon.", "Master, I want to learn cooking.", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Einbroch was originally"; - mes "built to support Einbech's"; - mes "mining efforts. Because it's"; - mes "small and crowded with people,"; - mes "there's no room to build the ore refining factories over there."; - next; - mes "[Uwe]"; - mes "Since Einbroch used to be"; - mes "an empty lot, it was perfect"; - mes "for building factories. That's"; - mes "what my grandfather told me a"; - mes "long time ago. Anyway, Einbroch quickly grew into a major city."; - next; - mes "[Uwe]"; - mes "Now people think that this"; - mes "city was never planned to be"; - mes "just an extension of Einbech."; - mes "See that rampart over there?"; - mes "It doesn't connect to Einbech at all! No protection for them..."; - next; - mes "[Uwe]"; - mes "It's like the government"; - mes "lost all interest in Einbech."; - mes "Even the miners there have"; - mes "been moving here to work in "; - mes "the factories. But more people hasn't made this city more lively."; - next; - mes "[Uwe]"; - mes "Einbroch may look modern"; - mes "and exciting now, but soon"; - mes "you'll see that there's no sign"; - mes "of warmth or life. So... Just don't live here in your old age."; - next; - switch(select("Then why are you here?", "I won't. Thanks for the advice.")) { - case 1: - mes "[Uwe]"; - mes "Well, I have some"; - mes "precious memories of"; - mes "this place. Once, there was"; - mes "a man who lived here who"; - mes "was just like a father to me."; - next; - mes "[Uwe]"; - mes "Oh, but I'm sure that"; - mes "you don't want to hear"; - mes "about that. Next time you"; - mes "drop by, we'll talk about"; - mes "something more fun, 'kay?"; - mes "Buhbye for now, cutie~"; - close; - case 2: - mes "[Uwe]"; - mes "Oh, that is such"; - mes "a good decision,"; - mes "sugar honey! Oh, you"; - mes "cutie adventurers are"; - mes "so precious, so lovable."; - mes "^333333*Tee hee hee~*^000000"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - close; - } + F_AboutEinbroch(); case 2: - mes "[Uwe]"; - mes "Well..."; - mes "I actually just"; - mes "do smithing work"; - mes "to create my own"; - mes "cooking tools."; - next; - mes "[Uwe]"; - mes "Oh, I understand"; - mes "that somebody needs"; - mes "to fight the monsters,"; - mes "but I'm the wrong person"; - mes "to ask for forging weapons."; - mes "I... am a strict pacifist~"; - next; - mes "[Uwe]"; - mes "Just go look"; - mes "around for a little"; - mes "bit, I'm sure you'll"; - mes "find a Blacksmith"; - mes "who's willing to forge"; - mes "you a good weapon~"; - close; + F_ForgeWeapon(); case 3: - mes "[Uwe]"; - mes "Mm...?"; - mes "Did you just"; - mes "say that you"; - mes "want to learn"; - mes "the art of cooking?"; - next; - mes "[Uwe]"; - mes "I'm sorry, but I can't"; - mes "really give culinary"; - mes "lessons. But I will"; - mes "give good advice for"; - mes "hopeful beginners."; - next; - mes "[Uwe]"; - mes "Now..."; - mes "For your tuition"; - mes "I'll need-- Gosh,"; - mes "there's just so many"; - mes "things. Get some paper,"; - mes "and a pen for this list..."; - next; - ein_cook += 100; - mes "[Uwe]"; - mes "Just kidding!"; - mes "^333333*Titter~*^000000 I don't need"; - mes "much to make some"; - mes "cooking utensils. Bring"; - mes "6 ^0000FFLarge Jellopy^000000. That's it!"; - next; - mes "[Uwe]"; - mes "In return, I will give you"; - mes "1 Coal and some useful"; - mes "cooking advice for novices."; - mes "I give this advice for free to"; - mes "my smithing colleages, though..."; - next; - mes "[Uwe]"; - mes "Why ^EEA9B8don't^000000 you"; - mes "become a Blacksmith?"; - mes "I'm much more confident"; - mes "in that field. ^333333*Tee hee~*^000000"; - next; - mes "[Uwe]"; - mes "Well, I'll be"; - mes "waiting right"; - mes "here until you"; - mes "come back."; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Cooking(); case 4: mes "[Uwe]"; mes "Take care,"; @@ -3009,13 +1669,12 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ close; } } - } - else if (ein_cook == 0) { + } else if (ein_cook == 0) { mes "[Uwe]"; mes "Cooking is such a joy~!"; mes "The scents, the flavors, the sensation of sheer ^EEA9B8satiation^000000..."; next; - switch(select("Um, isn't this a forge?", "Ignore him.")) { + switch (select("Um, isn't this a forge?", "Ignore him.")) { case 1: mes "[Uwe]"; ein_cook = 1000; @@ -3037,159 +1696,17 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{ mes "adooooooooorable"; if (Sex == SEX_MALE) { mes "hunk of a man?"; - } - else { + } else { mes "womanly woman?"; } next; - switch(select("Talk about Einbroch.", "Ask him to forge a Weapon.", "Master, I want to learn cooking.", "Cancel.")) { + switch (select("Talk about Einbroch.", "Ask him to forge a Weapon.", "Master, I want to learn cooking.", "Cancel.")) { case 1: - mes "[Uwe]"; - mes "Einbroch was originally"; - mes "built to support Einbech's"; - mes "mining efforts. Because it's"; - mes "small and crowded with people,"; - mes "there's no room to build the ore refining factories over there."; - next; - mes "[Uwe]"; - mes "Since Einbroch used to be"; - mes "an empty lot, it was perfect"; - mes "for building factories. That's"; - mes "what my grandfather told me a"; - mes "long time ago. Anyway, Einbroch quickly grew into a major city."; - next; - mes "[Uwe]"; - mes "Now people think that this"; - mes "city was never planned to be"; - mes "just an extension of Einbech."; - mes "See that rampart over there?"; - mes "It doesn't connect to Einbech at all! No protection for them..."; - next; - mes "[Uwe]"; - mes "It's like the government"; - mes "lost all interest in Einbech."; - mes "Even the miners there have"; - mes "been moving here to work in "; - mes "the factories. But more people hasn't made this city more lively."; - next; - mes "[Uwe]"; - mes "Einbroch may look modern"; - mes "and exciting now, but soon"; - mes "you'll see that there's no sign"; - mes "of warmth or life. So... Just don't live here in your old age."; - next; - switch(select("Then why are you here?", "I won't. Thanks for the advice.")) { - case 1: - mes "[Uwe]"; - mes "Well, I have some"; - mes "precious memories of"; - mes "this place. Once, there was"; - mes "a man who lived here who"; - mes "was just like a father to me."; - next; - mes "[Uwe]"; - mes "Oh, but I'm sure that"; - mes "you don't want to hear"; - mes "about that. Next time you"; - mes "drop by, we'll talk about"; - mes "something more fun, 'kay?"; - mes "Buhbye for now, cutie~"; - close; - case 2: - mes "[Uwe]"; - mes "Oh, that is such"; - mes "a good decision,"; - mes "sugar honey! Oh, you"; - mes "cutie adventurers are"; - mes "so precious, so lovable."; - mes "^333333*Tee hee hee~*^000000"; - next; - mes "[Uwe]"; - mes "Well, that was"; - mes "a fun talk. Come"; - mes "back and visit, 'kay?"; - mes "I'll miss you until"; - mes "the next time~"; - close; - } + F_AboutEinbroch(); case 2: - mes "[Uwe]"; - mes "Well..."; - mes "I actually just"; - mes "do smithing work"; - mes "to create my own"; - mes "cooking tools."; - next; - mes "[Uwe]"; - mes "Oh, I understand"; - mes "that somebody needs"; - mes "to fight the monsters,"; - mes "but I'm the wrong person"; - mes "to ask for forging weapons."; - mes "I... am a strict pacifist~"; - next; - mes "[Uwe]"; - mes "Just go look"; - mes "around for a little"; - mes "bit, I'm sure you'll"; - mes "find a Blacksmith"; - mes "who's willing to forge"; - mes "you a good weapon~"; - close; + F_ForgeWeapon(); case 3: - mes "[Uwe]"; - mes "Mm...?"; - mes "Did you just"; - mes "say that you"; - mes "want to learn"; - mes "the art of cooking?"; - next; - mes "[Uwe]"; - mes "I'm sorry, but I can't"; - mes "really give culinary"; - mes "lessons. But I will"; - mes "give good advice for"; - mes "hopeful beginners."; - next; - mes "[Uwe]"; - mes "Now..."; - mes "For your tuition"; - mes "I'll need-- Gosh,"; - mes "there's just so many"; - mes "things. Get some paper,"; - mes "and a pen for this list..."; - next; - ein_cook += 100; - mes "[Uwe]"; - mes "Just kidding!"; - mes "^333333*Titter~*^000000 I don't need"; - mes "much to make some"; - mes "cooking utensils. Bring"; - mes "6 ^0000FFLarge Jellopy^000000. That's it!"; - next; - mes "[Uwe]"; - mes "In return, I will give you"; - mes "1 Coal and some useful"; - mes "cooking advice for novices."; - mes "I give this advice for free to"; - mes "my smithing colleages, though..."; - next; - mes "[Uwe]"; - mes "Why ^EEA9B8don't^000000 you"; - mes "become a Blacksmith?"; - mes "I'm much more confident"; - mes "in that field. ^333333*Tee hee~*^000000"; - next; - mes "[Uwe]"; - mes "Well, I'll be"; - mes "waiting right"; - mes "here until you"; - mes "come back."; - switch(rand(1,3)) { - case 1: mes "...Ho ho~"; close; - case 2: mes "...*Tee Hee~*"; close; - case 3: mes "...Behbie~"; close; - } + F_Cooking(); case 4: mes "[Uwe]"; mes "Take care,"; @@ -3216,7 +1733,7 @@ einbroch,1,1,0 script Einbroch Smog Alert FAKE_NPC,{ OnEnable: $@AlrdEinPoll = 1; - mapannounce "einbroch","This is a state of emercency! Harmful smog is reaching high levels of saturation. Residents of Einbroch must find shelter immediately.",bc_map; + mapannounce "einbroch","This is a state of emergency! Harmful smog is reaching high levels of saturation. Residents of Einbroch must find shelter immediately.",bc_map; enablenpc "Einbroch Smog Alert"; hideonnpc "Centzu#ein"; hideonnpc "Khowropher#ein"; @@ -3576,7 +2093,7 @@ ein_in01,67,242,3 script Zelmeto 4_M_REPAIR,{ mes "[Zelmeto]"; mes "^333333*Whew*^000000"; mes "I haven't given that much"; - mes "inspriration in a while, but"; + mes "inspiration in a while, but"; mes "your help was well worth it."; mes "I'm going to start the repairs, but once again, I'd like to thank you."; close; @@ -3616,7 +2133,7 @@ ein_in01,67,242,3 script Zelmeto 4_M_REPAIR,{ mes "^333333*Sigh*^000000"; mes "My proposal was rejected"; mes "by our superintendant. But"; - mes "maintainance and repairs"; + mes "maintenance and repairs"; mes "are crucial for peak operating"; mes "efficiency and worker safety!"; next; @@ -3791,7 +2308,7 @@ ein_in01,67,242,3 script Zelmeto 4_M_REPAIR,{ mes "[Zelmeto]"; mes "Now, the pipe I want"; mes "you to inspect is located"; - mes "near those large caultrons"; + mes "near those large cauldrons"; mes "of molten metal. You should"; mes "be able to find it pretty easily."; next; @@ -4260,7 +2777,7 @@ einbech,165,105,7 script Buender Hikeman#ein 4_M_EINOLD,{ case 1: mes "[Buender Hikeman]"; mes "How dare you..."; - mes "How dare you treat "; + mes "How dare you treat me"; mes "after destroying all the"; mes "happiness in my life!"; next; @@ -4741,7 +3258,6 @@ ein_in01,231,163,7 script Sick Old Man#ein 4_M_DIEMAN,{ close; } else if (Shinokas_Quest == 2) { - einbech = 0; mes "[Sick Old Man]"; mes "...!"; next; @@ -4787,7 +3303,7 @@ ein_in01,231,163,7 script Sick Old Man#ein 4_M_DIEMAN,{ mes "^3355FFIt doesn't seem"; mes "like this old man"; mes "is telling the truth...^000000"; - einbech = 0; + .@einbech = 0; next; } else { @@ -4924,7 +3440,7 @@ ein_in01,231,163,7 script Sick Old Man#ein 4_M_DIEMAN,{ next; mes "[Shinokas]"; mes "After I destroyed the tunnel,"; - mes "they targeted me and I ended"; + mes "they targeted me and I ended up"; mes "spending the rest of my life being pursued and running from place to place. What the hell was that ^3131FFore^000000 and why was it so important?"; next; mes "[Shinokas]"; @@ -7131,7 +5647,7 @@ ein_in01,191,102,5 script Kaijeta#ein 4_F_EINOLD,{ mes "[Kaijeta]"; mes "I can't bear to see the"; mes "petty hatred between our"; - mes "two towns stop my son from"; + mes "two towns stopping my son from"; mes "seeing the woman he loves..."; changequest 8081,8082; close; diff --git a/sql-files/item_db.sql b/sql-files/item_db.sql index 4ff49624c..113176fdb 100644 --- a/sql-files/item_db.sql +++ b/sql-files/item_db.sql @@ -4543,12 +4543,12 @@ REPLACE INTO `item_db` VALUES ('12198','Lucky_Rice_Cake','Lucky Rice Cake','2',' REPLACE INTO `item_db` VALUES ('12199','Rice_Scroll','Scroll of Magic','2','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('12200','Event_Cake','X-mas Cake','11','20','10','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemskill PR_MAGNIFICAT,3;','',''); REPLACE INTO `item_db` VALUES ('12201','Red_Box_C','Commonplace Red Box','2','20','10','200','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('12202','Str_Dish10_','Steamed Tongue','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_STR,1800000,10; percentheal 20,10;','',''); -REPLACE INTO `item_db` VALUES ('12203','Agi_Dish10_','Steamed Scorpion','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_AGI,1800000,10; percentheal 15,5;','',''); -REPLACE INTO `item_db` VALUES ('12204','Int_Dish10_','Dragon Breath Cocktail','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_INT,1800000,10; percentheal 10,20;','',''); -REPLACE INTO `item_db` VALUES ('12205','Dex_Dish10_','Hwergelmir\'s Tonic','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_DEX,1800000,10; percentheal 10,10;','',''); -REPLACE INTO `item_db` VALUES ('12206','Luk_Dish10_','Cooked Nine Tail\'s Tails','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_LUK,1800000,10; percentheal 14,8;','',''); -REPLACE INTO `item_db` VALUES ('12207','Vit_Dish10_','Stew Of Immortality','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_VIT,1800000,10; percentheal 25,0;','',''); +REPLACE INTO `item_db` VALUES ('12202','Str_Dish10_','Steamed Tongue','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_STR_CASH, 1800000, 10); percentheal(20, 10);','',''); +REPLACE INTO `item_db` VALUES ('12203','Agi_Dish10_','Steamed Scorpion','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_AGI_CASH, 1800000, 10); percentheal(15, 5);','',''); +REPLACE INTO `item_db` VALUES ('12204','Int_Dish10_','Dragon Breath Cocktail','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_INT_CASH, 1800000, 10); percentheal(10, 20);','',''); +REPLACE INTO `item_db` VALUES ('12205','Dex_Dish10_','Hwergelmir\'s Tonic','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_DEX_CASH, 1800000, 10); percentheal(10, 10);','',''); +REPLACE INTO `item_db` VALUES ('12206','Luk_Dish10_','Cooked Nine Tail\'s Tails','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_LUK_CASH, 1800000, 10); percentheal(14, 8);','',''); +REPLACE INTO `item_db` VALUES ('12207','Vit_Dish10_','Stew Of Immortality','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_VIT_CASH, 1800000, 10); percentheal(25, 0);','',''); REPLACE INTO `item_db` VALUES ('12208','Battle_Manual','Battle Manual','2','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_PLUSEXP,1800000,50;','',''); REPLACE INTO `item_db` VALUES ('12209','Insurance','Life Insurance','2','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_DEATHPENALTY,1800000,0;','',''); REPLACE INTO `item_db` VALUES ('12210','Bubble_Gum','Bubble Gum','2','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_RECEIVEITEM,1800000,200;','',''); diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql index 2cf498356..f6ca7678f 100644 --- a/sql-files/item_db_re.sql +++ b/sql-files/item_db_re.sql @@ -5981,12 +5981,12 @@ REPLACE INTO `item_db` VALUES ('12198','Lucky_Rice_Cake','Lucky Rice Cake','2',' REPLACE INTO `item_db` VALUES ('12199','Rice_Scroll','Scroll of Magic','2','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','',''); REPLACE INTO `item_db` VALUES ('12200','Event_Cake','X-mas Cake','11','20','10','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemskill PR_MAGNIFICAT,3;','',''); REPLACE INTO `item_db` VALUES ('12201','Red_Box_C','Commonplace Red Box','2','20','10','200','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','',''); -REPLACE INTO `item_db` VALUES ('12202','Str_Dish10_','Steamed Tongue','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_STR,1800000,10; percentheal 20,10;','',''); -REPLACE INTO `item_db` VALUES ('12203','Agi_Dish10_','Steamed Scorpion','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_AGI,1800000,10; percentheal 15,5;','',''); -REPLACE INTO `item_db` VALUES ('12204','Int_Dish10_','Dragon Breath Cocktail','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_INT,1800000,10; percentheal 10,20;','',''); -REPLACE INTO `item_db` VALUES ('12205','Dex_Dish10_','Hwergelmir\'s Tonic','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_DEX,1800000,10; percentheal 10,10;','',''); -REPLACE INTO `item_db` VALUES ('12206','Luk_Dish10_','Cooked Nine Tail\'s Tails','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_LUK,1800000,10; percentheal 14,8;','',''); -REPLACE INTO `item_db` VALUES ('12207','Vit_Dish10_','Stew Of Immortality','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_VIT,1800000,10; percentheal 25,0;','',''); +REPLACE INTO `item_db` VALUES ('12202','Str_Dish10_','Steamed Tongue','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_STR_CASH, 1800000, 10); percentheal(20, 10);','',''); +REPLACE INTO `item_db` VALUES ('12203','Agi_Dish10_','Steamed Scorpion','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_AGI_CASH, 1800000, 10); percentheal(15, 5);','',''); +REPLACE INTO `item_db` VALUES ('12204','Int_Dish10_','Dragon Breath Cocktail','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_INT_CASH, 1800000, 10); percentheal(10, 20);','',''); +REPLACE INTO `item_db` VALUES ('12205','Dex_Dish10_','Hwergelmir\'s Tonic','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_DEX_CASH, 1800000, 10); percentheal(10, 10);','',''); +REPLACE INTO `item_db` VALUES ('12206','Luk_Dish10_','Cooked Nine Tail\'s Tails','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_LUK_CASH, 1800000, 10); percentheal(14, 8);','',''); +REPLACE INTO `item_db` VALUES ('12207','Vit_Dish10_','Stew Of Immortality','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start(SC_FOOD_VIT_CASH, 1800000, 10); percentheal(25, 0);','',''); REPLACE INTO `item_db` VALUES ('12208','Battle_Manual','Battle Manual','2','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_PLUSEXP,1800000,50;','',''); REPLACE INTO `item_db` VALUES ('12209','Insurance','Life Insurance','2','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_DEATHPENALTY,1800000,0;','',''); REPLACE INTO `item_db` VALUES ('12210','Bubble_Gum','Bubble Gum','2','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_RECEIVEITEM,1800000,200;','',''); diff --git a/src/common/mmo.h b/src/common/mmo.h index 204e70dd1..276e0eb08 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -437,6 +437,7 @@ enum { OPTION_DRAGON5 = 0x04000000, OPTION_HANBOK = 0x08000000, OPTION_OKTOBERFEST = 0x10000000, + OPTION_SUMMER2 = 0x20000000, #ifndef NEW_CARTS OPTION_CART1 = 0x00000008, OPTION_CART2 = 0x00000080, @@ -448,7 +449,7 @@ enum { #endif // compound constants OPTION_DRAGON = OPTION_DRAGON1|OPTION_DRAGON2|OPTION_DRAGON3|OPTION_DRAGON4|OPTION_DRAGON5, - OPTION_COSTUME = OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK|OPTION_OKTOBERFEST, + OPTION_COSTUME = OPTION_WEDDING | OPTION_XMAS | OPTION_SUMMER | OPTION_HANBOK | OPTION_OKTOBERFEST | OPTION_SUMMER2, }; struct s_skill { diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 4c3d114a5..4d3a82ee2 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -1714,7 +1714,21 @@ ACMD(bodystyle) memset(atcmd_output, '\0', sizeof(atcmd_output)); - if (!*message || sscanf(message, "%d", &body_style) < 1) { + if ((sd->job & MAPID_THIRDMASK) != MAPID_GUILLOTINE_CROSS + && (sd->job & MAPID_THIRDMASK) != MAPID_GENETIC + && (sd->job & MAPID_THIRDMASK) != MAPID_MECHANIC + && (sd->job & MAPID_THIRDMASK) != MAPID_ROYAL_GUARD + && (sd->job & MAPID_THIRDMASK) != MAPID_ARCH_BISHOP + && (sd->job & MAPID_THIRDMASK) != MAPID_RANGER + && (sd->job & MAPID_THIRDMASK) != MAPID_WARLOCK + && (sd->job & MAPID_THIRDMASK) != MAPID_SHADOW_CHASER + && (sd->job & MAPID_THIRDMASK) != MAPID_MINSTRELWANDERER + ) { + clif->message(fd, msg_fd(fd, 35)); // This job has no alternate body styles. + return false; + } + + if (*message == '\0' || sscanf(message, "%d", &body_style) < 1) { sprintf(atcmd_output, "Please, enter a body style (usage: @bodystyle <body ID: %d-%d>).", MIN_BODY_STYLE, MAX_BODY_STYLE); clif->message(fd, atcmd_output); return false; @@ -1722,9 +1736,9 @@ ACMD(bodystyle) if (body_style >= MIN_BODY_STYLE && body_style <= MAX_BODY_STYLE) { pc->changelook(sd, LOOK_BODY2, body_style); - clif->message(fd, msg_txt(36)); // Appearence changed. + clif->message(fd, msg_fd(fd, 36)); // Appearence changed. } else { - clif->message(fd, msg_txt(37)); // An invalid number was specified. + clif->message(fd, msg_fd(fd, 37)); // An invalid number was specified. return false; } @@ -9263,7 +9277,12 @@ ACMD(searchstore){ searchstore->open(sd, 99, val); return true; } -ACMD(costume){ + +/*========================================== +* @costume +*------------------------------------------*/ +ACMD(costume) +{ const char* names[] = { "Wedding", "Xmas", @@ -9272,6 +9291,9 @@ ACMD(costume){ #if PACKETVER >= 20131218 "Oktoberfest", #endif +#if PACKETVER >= 20141022 + "Summer2", +#endif }; const int name2id[] = { SC_WEDDING, @@ -9281,41 +9303,47 @@ ACMD(costume){ #if PACKETVER >= 20131218 SC_OKTOBERFEST, #endif +#if PACKETVER >= 20141022 + SC_DRESS_UP, +#endif }; unsigned short k = 0, len = ARRAYLENGTH(names); if (!*message) { - for( k = 0; k < len; k++ ) { - if( sd->sc.data[name2id[k]] ) { - safesnprintf(atcmd_output, sizeof(atcmd_output),msg_fd(fd,1473),names[k]);//Costume '%s' removed. - clif->message(sd->fd,atcmd_output); - status_change_end(&sd->bl,name2id[k],INVALID_TIMER); + for (k = 0; k < len; k++) { + if (sd->sc.data[name2id[k]]) { + safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1473), names[k]); // Costume '%s' removed. + clif->message(sd->fd, atcmd_output); + status_change_end(&sd->bl, name2id[k], INVALID_TIMER); return true; } } - clif->message(sd->fd,msg_fd(fd,1472)); - for( k = 0; k < len; k++ ) { - safesnprintf(atcmd_output, sizeof(atcmd_output),msg_fd(fd,1471),names[k]);//-- %s - clif->message(sd->fd,atcmd_output); + + clif->message(sd->fd, msg_fd(fd, 1472)); // - Available Costumes + + for (k = 0; k < len; k++) { + safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1471), names[k]); //-- %s + clif->message(sd->fd, atcmd_output); } return false; } - for( k = 0; k < len; k++ ) { - if( sd->sc.data[name2id[k]] ) { - safesnprintf(atcmd_output, sizeof(atcmd_output),msg_fd(fd,1470),names[k]);// You're already with a '%s' costume, type '@costume' to remove it. - clif->message(sd->fd,atcmd_output); + for (k = 0; k < len; k++) { + if (sd->sc.data[name2id[k]]) { + safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1470), names[k]); // You're already with a '%s' costume, type '@costume' to remove it. + clif->message(sd->fd, atcmd_output); return false; } } - for( k = 0; k < len; k++ ) { - if( strcmpi(message,names[k]) == 0 ) + for (k = 0; k < len; k++) { + if (strcmpi(message,names[k]) == 0) break; } - if( k == len ) { - safesnprintf(atcmd_output, sizeof(atcmd_output),msg_fd(fd,1469),message);// '%s' is not a known costume - clif->message(sd->fd,atcmd_output); + + if (k == len) { + safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1469), message); // '%s' is not a known costume + clif->message(sd->fd, atcmd_output); return false; } @@ -9323,6 +9351,7 @@ ACMD(costume){ return true; } + /* for debugging purposes (so users can easily provide us with debug info) */ /* should be trashed as soon as its no longer necessary */ ACMD(skdebug) diff --git a/src/map/battle.c b/src/map/battle.c index 69dd36fc3..57a74bba4 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -7036,12 +7036,13 @@ static const struct battle_data { { "combo_delay_rate", &battle_config.combo_delay_rate, 100, 0, INT_MAX, }, { "item_check", &battle_config.item_check, 0, 0, 0xF, }, { "item_use_interval", &battle_config.item_use_interval, 100, 0, INT_MAX, }, - { "cashfood_use_interval", &battle_config.cashfood_use_interval, 60000, 0, INT_MAX, }, { "wedding_modifydisplay", &battle_config.wedding_modifydisplay, 0, 0, 1, }, { "wedding_ignorepalette", &battle_config.wedding_ignorepalette, 0, 0, 1, }, { "xmas_ignorepalette", &battle_config.xmas_ignorepalette, 0, 0, 1, }, { "summer_ignorepalette", &battle_config.summer_ignorepalette, 0, 0, 1, }, { "hanbok_ignorepalette", &battle_config.hanbok_ignorepalette, 0, 0, 1, }, + { "oktoberfest_ignorepalette", &battle_config.oktoberfest_ignorepalette, 0, 0, 1, }, + { "summer2_ignorepalette", &battle_config.summer2_ignorepalette, 0, 0, 1, }, { "natural_healhp_interval", &battle_config.natural_healhp_interval, 6000, NATURAL_HEAL_INTERVAL, INT_MAX, }, { "natural_healsp_interval", &battle_config.natural_healsp_interval, 8000, NATURAL_HEAL_INTERVAL, INT_MAX, }, { "natural_heal_skill_interval", &battle_config.natural_heal_skill_interval, 10000, NATURAL_HEAL_INTERVAL, INT_MAX, }, @@ -7210,7 +7211,6 @@ static const struct battle_data { { "mob_npc_event_type", &battle_config.mob_npc_event_type, 1, 0, 1, }, { "character_size", &battle_config.character_size, 1|2, 0, 1|2, }, { "retaliate_to_master", &battle_config.retaliate_to_master, 1, 0, 1, }, - { "rare_drop_announce", &battle_config.rare_drop_announce, 0, 0, 10000, }, { "duel_allow_pvp", &battle_config.duel_allow_pvp, 0, 0, 1, }, { "duel_allow_gvg", &battle_config.duel_allow_gvg, 0, 0, 1, }, { "duel_allow_teleport", &battle_config.duel_allow_teleport, 0, 0, 1, }, diff --git a/src/map/battle.h b/src/map/battle.h index d582f3c92..a73c6dc44 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -240,12 +240,13 @@ struct Battle_Config { int combo_delay_rate; int item_check; int item_use_interval; //[Skotlex] - int cashfood_use_interval; int wedding_modifydisplay; int wedding_ignorepalette; //[Skotlex] int xmas_ignorepalette; // [Valaris] int summer_ignorepalette; // [Zephyrus] int hanbok_ignorepalette; + int oktoberfest_ignorepalette; + int summer2_ignorepalette; int natural_healhp_interval; int natural_healsp_interval; int natural_heal_skill_interval; @@ -407,7 +408,6 @@ struct Battle_Config { int mob_npc_event_type; //Determines on who the npc_event is executed. [Skotlex] int character_size; // if riders have size=2, and baby class riders size=1 [Lupus] - int rare_drop_announce; // chance <= to show rare drops global announces int retaliate_to_master; //Whether when a mob is attacked by another mob, it will retaliate versus the mob or the mob's master. [Skotlex] diff --git a/src/map/channel.c b/src/map/channel.c index ee8242b23..9ec415883 100644 --- a/src/map/channel.c +++ b/src/map/channel.c @@ -26,6 +26,7 @@ #include "map/instance.h" #include "map/irc-bot.h" #include "map/map.h" +#include "map/npc.h" #include "map/pc.h" #include "common/cbasetypes.h" #include "common/conf.h" @@ -278,12 +279,21 @@ void channel_send(struct channel_data *chan, struct map_session_data *sd, const clif->messagecolor_self(sd->fd, COLOR_RED, msg_sd(sd,1455)); return; } else if (sd) { + int i; + safesnprintf(message, 150, "[ #%s ] %s : %s", chan->name, sd->status.name, msg); clif->channel_msg(chan,sd,message); if (chan->type == HCS_TYPE_IRC) ircbot->relay(sd->status.name,msg); if (chan->msg_delay != 0) sd->hchsysch_tick = timer->gettick(); + + for (i = 0; i < MAX_EVENTQUEUE; i++) { + if (chan->handlers[i][0] != '\0') { + pc->setregstr(sd, script->add_str("@channelmes$"), msg); + npc->event(sd, chan->handlers[i], 0); + } + } } else { safesnprintf(message, 150, "[ #%s ] %s", chan->name, msg); clif->channel_msg2(chan, message); diff --git a/src/map/channel.h b/src/map/channel.h index e8696fd90..4ac3c6037 100644 --- a/src/map/channel.h +++ b/src/map/channel.h @@ -23,6 +23,8 @@ #include "common/hercules.h" #include "common/mmo.h" +#include "map/map.h" // EVENT_NAME_LENGTH, MAX_EVENTQUEUE + /** * Declarations **/ @@ -85,6 +87,7 @@ struct channel_data { unsigned char color; struct DBMap *users; struct DBMap *banned; + char handlers[MAX_EVENTQUEUE][EVENT_NAME_LENGTH]; unsigned int options; unsigned int owner; enum channel_types type; diff --git a/src/map/clif.c b/src/map/clif.c index d31cc70e9..524378439 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -3194,31 +3194,31 @@ void clif_changelook(struct block_list *bl,int type,int val) vd->shield = val; break; case LOOK_BASE: - if( !sd ) break; + if (sd == NULL) + break; - if ( val == INVISIBLE_CLASS ) /* nothing to change look */ + if (val == INVISIBLE_CLASS) /* nothing to change look */ return; - if( sd->sc.option&OPTION_COSTUME ) + if (sd->sc.option & OPTION_COSTUME) vd->weapon = vd->shield = 0; - if( !vd->cloth_color ) + if (!vd->cloth_color) break; - if (sd->sc.option&OPTION_WEDDING && battle_config.wedding_ignorepalette) + if ((sd->sc.option & OPTION_WEDDING) != 0 && battle_config.wedding_ignorepalette == true) + vd->cloth_color = 0; + if ((sd->sc.option & OPTION_XMAS) != 0 && battle_config.xmas_ignorepalette == true) vd->cloth_color = 0; - if (sd->sc.option&OPTION_XMAS && battle_config.xmas_ignorepalette) + if ((sd->sc.option & OPTION_SUMMER) != 0 && battle_config.summer_ignorepalette == true) vd->cloth_color = 0; - if (sd->sc.option&OPTION_SUMMER && battle_config.summer_ignorepalette) + if ((sd->sc.option & OPTION_HANBOK) != 0 && battle_config.hanbok_ignorepalette == true) vd->cloth_color = 0; - if (sd->sc.option&OPTION_HANBOK && battle_config.hanbok_ignorepalette) + if ((sd->sc.option & OPTION_OKTOBERFEST) != 0 && battle_config.oktoberfest_ignorepalette == true) vd->cloth_color = 0; - if (sd->sc.option&OPTION_OKTOBERFEST /* TODO: config? */) + if ((sd->sc.option & OPTION_SUMMER2) != 0 && battle_config.summer2_ignorepalette == true) vd->cloth_color = 0; - if (vd->body_style && ( - sd->sc.option&OPTION_WEDDING || sd->sc.option&OPTION_XMAS || - sd->sc.option&OPTION_SUMMER || sd->sc.option&OPTION_HANBOK || - sd->sc.option&OPTION_OKTOBERFEST)) + if (vd->body_style != 0 && (sd->sc.option & OPTION_COSTUME) != 0) vd->body_style = 0; break; case LOOK_HAIR: @@ -3237,16 +3237,18 @@ void clif_changelook(struct block_list *bl,int type,int val) vd->hair_color = val; break; case LOOK_CLOTHES_COLOR: - if( val && sd ) { - if( sd->sc.option&OPTION_WEDDING && battle_config.wedding_ignorepalette ) + if (val && sd != NULL) { + if ((sd->sc.option & OPTION_WEDDING) != 0 && battle_config.wedding_ignorepalette == true) + val = 0; + if ((sd->sc.option & OPTION_XMAS) != 0 && battle_config.xmas_ignorepalette == true) val = 0; - if( sd->sc.option&OPTION_XMAS && battle_config.xmas_ignorepalette ) + if ((sd->sc.option & OPTION_SUMMER) != 0 && battle_config.summer_ignorepalette == true) val = 0; - if( sd->sc.option&OPTION_SUMMER && battle_config.summer_ignorepalette ) + if ((sd->sc.option & OPTION_HANBOK) != 0 && battle_config.hanbok_ignorepalette == true) val = 0; - if( sd->sc.option&OPTION_HANBOK && battle_config.hanbok_ignorepalette ) + if ((sd->sc.option & OPTION_OKTOBERFEST) != 0 && battle_config.oktoberfest_ignorepalette == true) val = 0; - if( sd->sc.option&OPTION_OKTOBERFEST /* TODO: config? */ ) + if ((sd->sc.option & OPTION_SUMMER2) != 0 && battle_config.summer2_ignorepalette == true) val = 0; } vd->cloth_color = val; diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 8b374c2bf..9a43bae14 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -2073,6 +2073,9 @@ int itemdb_readdb_libconfig_sub(struct config_setting_t *it, int n, const char * if ((t = libconfig->setting_get_member(it, "KeepAfterUse"))) id.flag.keepafteruse = libconfig->setting_get_bool(t) ? 1 : 0; + if ((t = libconfig->setting_get_member(it, "DropAnnounce"))) + id.flag.drop_announce = libconfig->setting_get_bool(t) ? 1 : 0; + if (itemdb->lookup_const(it, "Delay", &i32) && i32 >= 0) id.delay = i32; diff --git a/src/map/itemdb.h b/src/map/itemdb.h index 138a783ae..35cd154cb 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -111,8 +111,6 @@ enum item_itemid { ITEMID_FRAGMENT_OF_CRYSTAL = 7321, ITEMID_SKULL_ = 7420, ITEMID_TOKEN_OF_SIEGFRIED = 7621, - ITEMID_GOLD_KEY77 = 7782, - ITEMID_SILVER_KEY77 = 7783, ITEMID_SPECIAL_ALLOY_TRAP = 7940, ITEMID_CATNIP_FRUIT = 11602, ITEMID_RED_POUCH_OF_SURPRISE = 12024, @@ -268,18 +266,6 @@ enum mercenary_scroll_item_list { }; /** - * Cash Food - */ -enum cash_food_item_list { - ITEMID_STR_DISH10_ = 12202, - ITEMID_AGI_DISH10_, // 12203 - ITEMID_INT_DISH10_, // 12204 - ITEMID_DEX_DISH10_, // 12205 - ITEMID_LUK_DISH10_, // 12206 - ITEMID_VIT_DISH10_, // 12207 -}; - -/** * Geneticist */ enum geneticist_item_list { @@ -510,6 +496,7 @@ struct item_data { unsigned keepafteruse : 1; unsigned force_serial : 1; unsigned no_options: 1; // < disallows use of item options on the item. (non-equippable items are automatically flagged) [Smokexyz] + unsigned drop_announce : 1; // Official Drop Announce [Jedzkie] } flag; struct {// item stacking limitation unsigned short amount; @@ -557,7 +544,6 @@ struct item_data { #define itemdb_is_spellbook(n) ((n) >= ITEMID_MAGIC_BOOK_FB && (n) <= ITEMID_MAGIC_BOOK_DL) #define itemdb_is_poison(n) ((n) >= ITEMID_POISON_PARALYSIS && (n) <= ITEMID_POISON_FATIGUE) #define itemid_isgemstone(n) ((n) >= ITEMID_YELLOW_GEMSTONE && (n) <= ITEMID_BLUE_GEMSTONE) -#define itemdb_iscashfood(n) ((n) >= ITEMID_STR_DISH10_ && (n) <= ITEMID_VIT_DISH10_) #define itemdb_is_GNbomb(n) ((n) >= ITEMID_APPLE_BOMB && (n) <= ITEMID_VERY_HARD_LUMP) #define itemdb_is_GNthrowable(n) ((n) >= ITEMID_MYSTERIOUS_POWDER && (n) <= ITEMID_BLACK_THING_TO_THROW) #define itemid_is_pilebunker(n) ((n) == ITEMID_PILEBUNCKER || (n) == ITEMID_PILEBUNCKER_P || (n) == ITEMID_PILEBUNCKER_S || (n) == ITEMID_PILEBUNCKER_T) diff --git a/src/map/map.h b/src/map/map.h index 8c5372093..d4284b3f7 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -553,6 +553,7 @@ enum status_point_types { //we better clean up this enum and change it name [Hem SP_MOD_EXP=125, SP_MOD_DROP=126, SP_MOD_DEATH=127, + SP_BANKVAULT=128, // Mercenaries SP_MERCFLEE=165, SP_MERCKILLS=189, SP_MERCFAITH=190, diff --git a/src/map/mob.c b/src/map/mob.c index 74d25b805..52705cf4d 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2151,6 +2151,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { struct map_session_data *sd = BL_CAST(BL_PC, src); struct map_session_data *tmpsd[DAMAGELOG_SIZE] = { NULL }; struct map_session_data *mvp_sd = sd, *second_sd = NULL, *third_sd = NULL; + struct item_data *id = NULL; struct { struct party_data *p; @@ -2439,23 +2440,13 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { ditem = mob->setdropitem(md->db->dropitem[i].nameid, 1, it); - //A Rare Drop Global Announce by Lupus - if( mvp_sd && drop_rate <= battle_config.rare_drop_announce ) { - char message[128]; - sprintf (message, msg_txt(541), mvp_sd->status.name, md->name, it->jname, (float)drop_rate/100); - //MSG: "'%s' won %s's %s (chance: %0.02f%%)" - intif->broadcast(message, (int)strlen(message)+1, BC_DEFAULT); + // Official Drop Announce [Jedzkie] + if (mvp_sd != NULL) { + if ((id = itemdb->search(it->nameid)) != NULL && id->flag.drop_announce) { + clif->item_drop_announce(mvp_sd, it->nameid, md->name); + } } - /* heres the thing we got the feature set up however we're still discussing how to best define the ids, - * so while we discuss, for a small period of time, the list is hardcoded (yes officially only those 2 use it, - * thus why we're unsure on how to best place the setting) */ - /* temp, will not be hardcoded for long thudu. */ - // TODO: This should be a field in the item db. - if (mvp_sd != NULL - && (it->nameid == ITEMID_GOLD_KEY77 || it->nameid == ITEMID_SILVER_KEY77)) /* for when not hardcoded: add a check on mvp bonus drop as well */ - clif->item_drop_announce(mvp_sd, it->nameid, md->name); - // Announce first, or else ditem will be freed. [Lance] // By popular demand, use base drop rate for autoloot code. [Skotlex] mob->item_drop(md, dlist, ditem, 0, md->db->dropitem[i].p, homkillonly); @@ -2592,14 +2583,6 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { clif->mvp_item(mvp_sd, item.nameid); log_mvp[0] = item.nameid; - //A Rare MVP Drop Global Announce by Lupus - if (rate <= battle_config.rare_drop_announce) { - char message[128]; - sprintf(message, msg_txt(541), mvp_sd->status.name, md->name, data->jname, rate/100.); - //MSG: "'%s' won %s's %s (chance: %0.02f%%)" - intif->broadcast(message, (int)strlen(message)+1, BC_DEFAULT); - } - if((temp = pc->additem(mvp_sd,&item,1,LOG_TYPE_PICKDROP_PLAYER)) != 0) { clif->additem(mvp_sd,0,0,temp); map->addflooritem(&md->bl, &item, 1, mvp_sd->bl.m, mvp_sd->bl.x, mvp_sd->bl.y, mvp_sd->status.char_id, (second_sd?second_sd->status.char_id : 0), (third_sd ? third_sd->status.char_id : 0), 1); diff --git a/src/map/packets.h b/src/map/packets.h index cc2312356..d1875f2f0 100644 --- a/src/map/packets.h +++ b/src/map/packets.h @@ -4564,6 +4564,1229 @@ packet(0x96e,-1,clif->ackmergeitems); packet(0x0967,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK #endif +// 2016-01-27aRagexeRE +#if PACKETVER >= 20160127 +// new packets + packet(0x0a4d,-1); +// changed packet sizes +#endif + +// 2016-01-27bRagexeRE +#if PACKETVER == 20160127 +// shuffle packets + packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x085e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0922,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x095a,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0961,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-02-03aRagexeRE +#if PACKETVER == 20160203 +// shuffle packets + packet(0x0202,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0361,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0436,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0437,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x07e4,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0811,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0835,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x086c,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0872,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0873,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x088c,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0918,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x093e,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0940,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0947,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0954,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x095a,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x095d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-02-17cRagexeRE +#if PACKETVER == 20160217 +// shuffle packets + packet(0x0202,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x023b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0362,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0365,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x0864,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0870,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0873,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x087a,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0888,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x088d,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x088f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0899,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x08a0,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x08a9,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x08ac,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x08ad,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x091d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0920,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0926,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x092e,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x093b,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x093e,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0941,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x094a,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x094f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x095e,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0966,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0967,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0969,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE +#endif + +// 2016-03-02bRagexeRE +#if PACKETVER == 20160302 +// shuffle packets + packet(0x022d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0367,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0802,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0819,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x085b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0864,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0865,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0867,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0868,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0873,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x0875,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x087a,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x087d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0883,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x08a6,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x08a9,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x091a,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0927,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x092d,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x092f,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0945,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x094e,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0950,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0957,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x095a,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0960,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0961,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0967,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0968,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT +#endif + +// 2016-03-02bRagexeRE +#if PACKETVER >= 20160302 +// new packets + packet(0x0a4e,4); + packet(0x0a4f,-1,clif->pDull/*,XXX*/); + packet(0x0a50,6); + packet(0x0a51,34); +// changed packet sizes +#endif + +// 2016-03-09aRagexeRE +#if PACKETVER == 20160309 +// shuffle packets + packet(0x023b,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0281,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0361,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0364,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0819,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0838,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x083c,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x085a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x085f,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0866,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x086a,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0873,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x087c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x087e,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x089b,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x089d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x08a7,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x091d,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0920,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0922,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0929,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x092a,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x092e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0932,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x094f,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0956,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x095e,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x096a,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP +#endif + +// 2016-03-16aRagexeRE +#if PACKETVER >= 20160316 +// new packets + packet(0x0a52,20,clif->pDull/*,XXX*/); + packet(0x0a53,10); + packet(0x0a54,-1); + packet(0x0a55,2); + packet(0x0a56,6,clif->pDull/*,XXX*/); + packet(0x0a57,6); + packet(0x0a58,8); + packet(0x0a59,-1); + packet(0x0a5a,2,clif->pDull/*,XXX*/); + packet(0x0a5b,7); + packet(0x0a5c,18,clif->pDull/*,XXX*/); + packet(0x0a5d,6); +// changed packet sizes +#endif + +// 2016-03-23aRagexeRE +#if PACKETVER >= 20160323 +// new packets + packet(0x0a68,3); + packet(0x0a69,6); + packet(0x0a6a,12); + packet(0x0a6b,-1); +// changed packet sizes +#endif + +// 2016-03-30aRagexeRE +#if PACKETVER == 20160330 +// shuffle packets + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0365,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0867,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x086d,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x0878,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x087f,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0889,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x088b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x088d,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0918,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0925,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x092a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x092c,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0930,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0939,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x093b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-03-30aRagexeRE +#if PACKETVER >= 20160330 +// new packets + packet(0x0a6c,7,clif->pDull/*,XXX*/); + packet(0x0a6d,-1); + packet(0x0a6e,-1); + packet(0x0a6f,-1); +// changed packet sizes +#endif + +// 2016-04-20aRagexeRE +#if PACKETVER == 20160420 +// shuffle packets + packet(0x022d,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x02c4,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x035f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0864,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x0870,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0872,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0874,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0884,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0888,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x088b,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x08a5,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x092f,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0935,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x094e,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x095c,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-04-27aRagexeRE +#if PACKETVER >= 20160427 +// new packets +// changed packet sizes + packet(0x0a50,4); +#endif + +// 2016-05-04aRagexeRE +#if PACKETVER >= 20160504 +// new packets + packet(0x0a70,2,clif->pDull/*,XXX*/); + packet(0x0a71,-1); + packet(0x0a72,61); +// changed packet sizes +#endif + +// 2016-05-11aRagexeRE +#if PACKETVER == 20160511 +// shuffle packets + packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x085e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0894,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x089b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0918,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0920,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0940,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-05-11aRagexeRE +#if PACKETVER >= 20160511 +// new packets + packet(0x0a73,6); + packet(0x0a74,8); +// changed packet sizes +#endif + +// 2016-05-18aRagexeRE +#if PACKETVER >= 20160518 +// new packets + packet(0x0a76,80); +// changed packet sizes + packet(0x0a73,2); +#endif + +// 2016-05-25aRagexeRE +#if PACKETVER == 20160525 +// shuffle packets + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x085a,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x085e,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0867,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x086a,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0899,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x089c,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x091d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x092c,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0937,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0945,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x094a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x094e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0951,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0956,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-05-25aRagexeRE +#if PACKETVER >= 20160525 +// new packets + packet(0x0a77,15); + packet(0x0a78,15); +// changed packet sizes +#endif + +// 2016-06-01aRagexeRE +#if PACKETVER >= 20160601 +// new packets + packet(0x0a79,-1); + packet(0x0a7b,-1); + packet(0x0a7c,-1); + packet(0x0a7d,-1); +// changed packet sizes +#endif + +// 2016-06-08aRagexeRE +#if PACKETVER == 20160608 +// shuffle packets + packet(0x022d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x02c4,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x035f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0436,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0437,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x07ec,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0802,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x085c,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0885,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0889,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0899,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x089b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x08a6,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x093b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x094d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0958,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x095b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0969,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-06-15aRagexeRE +#if PACKETVER == 20160615 +// shuffle packets + packet(0x0281,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0363,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0364,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0369,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x083c,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0866,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0870,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x087d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x087e,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x087f,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0884,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0887,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0888,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x088a,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x088d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0891,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0898,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x092f,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x093e,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0947,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0948,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x094a,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x094b,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0954,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0957,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0958,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x095c,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x095e,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0961,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK +#endif + +// 2016-06-15aRagexeRE +#if PACKETVER >= 20160615 +// new packets + packet(0x0a7e,4); + packet(0x0a7f,-1); + packet(0x0a80,2); + packet(0x0a81,3); +// changed packet sizes +#endif + +// 2016-06-22aRagexeRE +#if PACKETVER >= 20160622 +// new packets + packet(0x0a82,46); + packet(0x0a83,46); + packet(0x0a84,94); + packet(0x0a85,82); + packet(0x0a86,-1); + packet(0x0a87,4); + packet(0x0a88,2); +// changed packet sizes +#endif + +// 2016-06-29aRagexeRE +#if PACKETVER >= 20160629 +// new packets + packet(0x0a89,32); + packet(0x0a8a,6); + packet(0x0a8b,2); + packet(0x0a8c,2); + packet(0x0a8d,-1); +// changed packet sizes + packet(0x0a80,6); +#endif + +// 2016-06-30aRagexeRE +#if PACKETVER == 20160630 +// shuffle packets + packet(0x0202,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x022d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x035f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0363,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0368,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x085c,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x085e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0860,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0861,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0863,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0867,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x086b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0881,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0885,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x088e,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0893,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x091e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0922,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0925,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0926,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x093e,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0946,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0948,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x094a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0957,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x095a,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0968,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0969,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x096a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE +#endif + +// 2016-07-06cRagexeRE +#if PACKETVER == 20160706 +// shuffle packets + packet(0x0362,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0436,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x085f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0860,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0869,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x086b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0884,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0886,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0889,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0892,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0899,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x08a4,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x08a5,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x08a8,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0918,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x091b,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0924,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0926,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0927,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0929,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x092d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0939,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x093d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0944,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0945,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x094c,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0952,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0957,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x0958,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP +#endif + +// 2016-07-06cRagexeRE +#if PACKETVER >= 20160706 +// new packets + packet(0x0a81,3); +// changed packet sizes + packet(0x0a7e,-1); + packet(0x0a89,57); +#endif + +// 2016-07-13bRagexeRE +#if PACKETVER == 20160713 +// shuffle packets + packet(0x022d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0363,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0364,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0838,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x0860,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0865,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0869,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0875,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0877,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x087b,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0883,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x088d,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0892,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x089a,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x089f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x08a2,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x08a4,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x091c,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x091d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0921,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0922,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x092c,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0931,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0939,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0944,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0945,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0947,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0957,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x095b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD +#endif + +// 2016-07-13aRagexeRE +#if PACKETVER >= 20160713 +// new packets +// changed packet sizes + packet(0x0a87,-1); +#endif + +// 2016-07-20aRagexeRE +#if PACKETVER == 20160720 +// shuffle packets + packet(0x0362,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0363,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0365,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x07e4,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0819,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0838,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x085b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x086a,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x086d,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x087f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0883,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0887,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0897,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x089a,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x089c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x089e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x08a0,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x08aa,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0917,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x091c,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x092a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x093b,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x093e,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0946,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x094d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0953,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x095b,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0960,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0969,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ +#endif + +// 2016-07-20aRagexeRE +#if PACKETVER >= 20160720 +// new packets + packet(0x0a8e,2); + packet(0x0a8f,2); + packet(0x0a90,3); +// changed packet sizes +#endif + +// 2016-07-27aRagexeRE +#if PACKETVER >= 20160727 +// new packets + packet(0x0a91,-1); + packet(0x0a92,-1); + packet(0x0a93,3); +// changed packet sizes +#endif + +// 2016-07-27bRagexeRE +#if PACKETVER == 20160727 +// shuffle packets + packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x023b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0362,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0363,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0436,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0438,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x07ec,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0866,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0868,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0869,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x0874,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0877,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0883,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0887,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x088e,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0891,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x089f,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x08a2,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x08a4,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x08a7,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x092e,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0936,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0941,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0946,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0949,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0951,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x095f,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0966,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0969,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES +#endif + +// 2016-08-03bRagexeRE +#if PACKETVER >= 20160803 +// new packets + packet(0x0a94,2); +// changed packet sizes + packet(0x0a81,4); +#endif + +// 2016-08-31bRagexeRE +#if PACKETVER == 20160831 +// shuffle packets + packet(0x022d,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0366,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x07ec,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0835,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0865,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x086d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0870,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0874,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0876,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0878,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x087c,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x08a8,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x08a9,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0917,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x091b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x092c,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x092e,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x0938,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x093a,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0946,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x094a,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x094f,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0950,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0954,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0957,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x095e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0960,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x0964,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0967,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL +#endif + +// 2016-09-07aRagexeRE +#if PACKETVER == 20160907 +// shuffle packets + packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x091c,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-09-07aRagexeRE +#if PACKETVER >= 20160907 +// new packets + packet(0x0a95,4); +// changed packet sizes +#endif + +// 2016-09-21bRagexeRE +#if PACKETVER == 20160921 +// shuffle packets + packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x094a,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-09-21bRagexeRE +#if PACKETVER >= 20160921 +// new packets + packet(0x0a96,51); +// changed packet sizes + packet(0x0a37,59); // ZC_ITEM_PICKUP_ACK_V7 +#endif + +// 2016-09-28cRagexeRE +#if PACKETVER >= 20160928 +// new packets + packet(0x0a97,8); + packet(0x0a98,12); + packet(0x0a99,8); + packet(0x0a9a,10); + packet(0x0a9b,-1); + packet(0x0a9c,2); + packet(0x0a9d,4); + packet(0x0a9e,2); + packet(0x0a9f,2); +// changed packet sizes +#endif + +// 2016-10-05aRagexeRE +#if PACKETVER >= 20161005 +// new packets + packet(0x0aa0,2,clif->pDull/*,XXX*/); + packet(0x0aa1,4); + packet(0x0aa2,-1); + packet(0x0aa3,7); + packet(0x0aa4,2); +// changed packet sizes +#endif + +// 2016-10-12aRagexeRE +#if PACKETVER == 20161012 +// shuffle packets + packet(0x023b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0364,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0365,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0369,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x07ec,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0819,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x085b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x085e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0863,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0868,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x086d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0872,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x0875,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0880,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0893,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x08a0,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x092d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0936,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0937,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0939,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0943,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0944,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x094f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0951,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x095c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0962,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0966,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0967,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD +#endif + +// 2016-10-26bRagexeRE +#if PACKETVER == 20161026 +// shuffle packets + packet(0x0363,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0438,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0802,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x085a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x085f,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0861,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0862,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x086a,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x086c,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x086e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x087a,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x087c,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x087f,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0886,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0891,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0894,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0898,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x091a,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x091b,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x0926,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x092c,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x092e,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x092f,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0930,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x094b,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0953,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x095c,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x095e,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0962,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION +#endif + +// 2016-10-26bRagexeRE +#if PACKETVER >= 20161026 +// new packets + packet(0x0aa5,-1); + packet(0x0aa6,36); +// changed packet sizes +#endif + +// 2016-11-09bRagexeRE +#if PACKETVER == 20161109 +// shuffle packets + packet(0x02c4,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0361,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0362,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0365,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0366,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x085d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x085e,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0865,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x086a,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x086d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0870,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0876,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x087a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0881,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x088e,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0891,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x0898,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x089a,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x089d,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x089f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x08a7,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x08ad,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0927,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0937,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x093c,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x093f,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0954,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0956,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION +#endif + +// 2016-11-30aRagexeRE +#if PACKETVER >= 20161130 +// new packets + packet(0x0aa7,6); + packet(0x0aa8,5); + packet(0x0aa9,-1); + packet(0x0aaa,-1); + packet(0x0aab,-1); +// changed packet sizes +#endif + +// 2016-12-07eRagexeRE +#if PACKETVER == 20161207 +// shuffle packets + packet(0x023b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0361,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0867,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0868,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0875,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x087e,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0886,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x08a1,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x08a2,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x08ad,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0918,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x091d,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0943,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x095d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0965,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-12-07cRagexeRE +#if PACKETVER >= 20161207 +// new packets + packet(0x0aac,67); +// changed packet sizes +#endif + +// 2016-12-14bRagexeRE +#if PACKETVER == 20161214 +// shuffle packets + packet(0x022d,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0281,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x02c4,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0364,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0436,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x085a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x0862,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x086d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0887,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0895,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0899,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x08a6,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x092e,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x093d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2016-12-21aRagexeRE +#if PACKETVER == 20161221 +// shuffle packets + packet(0x035f,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0366,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0438,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0817,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x085b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0866,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0876,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x0881,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x0884,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0885,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x088c,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0890,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0899,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x089a,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x089b,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x08aa,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x091e,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0926,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0928,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x092c,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x092e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0930,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0943,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0946,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x094b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x095a,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0964,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0965,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION +#endif + +// 2016-12-21aRagexeRE +#if PACKETVER >= 20161221 +// new packets + packet(0x0aad,47); + packet(0x0aae,2); + packet(0x0aaf,6); + packet(0x0ab0,6); + packet(0x0ab1,10); +// changed packet sizes +#endif + +// 2016-12-28aRagexeRE +#if PACKETVER >= 20161228 +// new packets +// changed packet sizes + packet(0x0ab1,14); +#endif + +// 2017-01-04bRagexeRE +#if PACKETVER >= 20170104 +// new packets + packet(0x0ab2,7); + packet(0x0ab3,15); +// changed packet sizes +#endif + +// 2017-01-11aRagexeRE +#if PACKETVER >= 20170111 +// new packets + packet(0x0ab4,4); + packet(0x0ab5,2); + packet(0x0ab6,6); + packet(0x0ab7,4); + packet(0x0ab8,2); + packet(0x0ab9,39); +// changed packet sizes +#endif + +// 2017-01-18aRagexeRE +#if PACKETVER >= 20170118 +// new packets + packet(0x0aba,2); + packet(0x0abb,2); +// changed packet sizes + packet(0x0aad,51); + packet(0x0ab3,19); +#endif + +// 2017-02-01aRagexeRE +#if PACKETVER >= 20170201 +// new packets + packet(0x0abc,-1); +// changed packet sizes +#endif + +// 2017-02-15aRagexeRE +#if PACKETVER >= 20170215 +// new packets + packet(0x0abd,10); +// changed packet sizes +#endif + +// 2017-02-22aRagexeRE +#if PACKETVER >= 20170222 +// new packets + packet(0x0abe,116); + packet(0x0abf,114); +// changed packet sizes +#endif + +// 2017-02-28aRagexeRE +#if PACKETVER >= 20170228 +// new packets + packet(0x0ac0,26); + packet(0x0ac1,26); + packet(0x0ac2,-1); + packet(0x0ac3,2); + packet(0x0ac4,-1); + packet(0x0ac5,156,clif->pDull/*,XXX*/); + packet(0x0ac6,156); + packet(0x0ac7,156); +// changed packet sizes + packet(0x0abe,-1); + packet(0x0abf,-1); +#endif + +// 2017-03-08bRagexeRE +#if PACKETVER >= 20170308 +// new packets + packet(0x0ac8,2); + packet(0x0ac9,-1); +// changed packet sizes +#endif + +// 2017-03-22aRagexeRE +#if PACKETVER >= 20170322 +// new packets + packet(0x0aca,3); +// changed packet sizes +#endif + +// 2017-03-29cRagexeRE +#if PACKETVER >= 20170329 +// new packets +// changed packet sizes + packet(0x0aac,69); +#endif + +// 2017-04-05bRagexeRE +#if PACKETVER >= 20170405 +// new packets + packet(0x0acb,12); + packet(0x0acc,18); +// changed packet sizes +#endif + +// 2017-04-19bRagexeRE +#if PACKETVER >= 20170419 +// new packets + packet(0x0acd,23); +// changed packet sizes + packet(0x0a99,4); +#endif + /* PacketKeys: http://herc.ws/board/topic/1105-hercules-wpe-free-june-14th-patch/ */ #if PACKETVER >= 20110817 packetKeys(0x053D5CED,0x3DED6DED,0x6DED6DED); /* Thanks to Shakto */ @@ -4917,6 +6140,107 @@ packet(0x96e,-1,clif->ackmergeitems); packetKeys(0x347D68D0,0x2C705320,0x7B4A199D); /* 4144 */ #endif +#if PACKETVER == 20160127 + packetKeys(0x6B1E7146,0x612C47E6,0x274E56EE); /* 4144 */ +#endif + +#if PACKETVER == 20160203 + packetKeys(0x3E1411AF,0x6C744497,0x7CFA1BDE); /* 4144 */ +#endif + +#if PACKETVER == 20160217 + packetKeys(0x25895A8E,0x09421C19,0x763A2D7A); /* 4144 */ +#endif + +#if PACKETVER == 20160302 + packetKeys(0x7B4441B9,0x5BBC63AF,0x45DA0E71); /* 4144 */ +#endif + +#if PACKETVER == 20160309 + packetKeys(0x21587520,0x353A7706,0x1B722B25); /* 4144 */ +#endif + +#if PACKETVER == 20160330 + packetKeys(0x02050940,0x545336FF,0x7E7D4902); /* 4144 */ +#endif + +#if PACKETVER == 20160420 + packetKeys(0x67D2163A,0x3068215B,0x4835474D); /* 4144 */ +#endif + +#if PACKETVER == 20160511 + packetKeys(0x3C666FE2,0x27E84E3E,0x53E11BA5); /* 4144 */ +#endif + +#if PACKETVER == 20160525 + packetKeys(0x485C45B6,0x47DC6192,0x76B34A36); /* 4144 */ +#endif + +#if PACKETVER == 20160608 + packetKeys(0x11D74609,0x77C43E8A,0x44290F53); /* 4144 */ +#endif + +#if PACKETVER == 20160615 + packetKeys(0x062C5C26,0x6CF47E82,0x4DD53480); /* 4144 */ +#endif + +#if PACKETVER == 20160630 + packetKeys(0x0DF31CCC,0x54281606,0x5C4C6855); /* 4144 */ +#endif + +#if PACKETVER == 20160706 + packetKeys(0x33A766D0,0x743F04F8,0x0FA0276C); /* 4144 */ +#endif + +#if PACKETVER == 20160713 + packetKeys(0x714F2495,0x7DDC6F32,0x3FD8533D); /* 4144 */ +#endif + +#if PACKETVER == 20160720 + packetKeys(0x4F8A19C0,0x2D8E085C,0x37BB67D6); /* 4144 */ +#endif + +#if PACKETVER == 20160727 + packetKeys(0x3C6952AB,0x26E4077F,0x37E25DF7); /* 4144 */ +#endif + +#if PACKETVER == 20160831 + packetKeys(0x564E13B0,0x7F680549,0x382D273B); /* 4144 */ +#endif + +#if PACKETVER == 20160907 + packetKeys(0x32E5237D,0x57BD4DBD,0x5DBD5DBD); /* 4144 */ +#endif + +#if PACKETVER == 20160921 + packetKeys(0x11CD15CD,0x15CD15CD,0x15CD15CD); /* 4144 */ +#endif + +#if PACKETVER == 20161012 + packetKeys(0x5E2311F2,0x14FD012C,0x76EB64F6); /* 4144 */ +#endif + +#if PACKETVER == 20161026 + packetKeys(0x2CB86AE6,0x7D12660E,0x1B004DEB); /* 4144 */ +#endif + +#if PACKETVER == 20161109 + packetKeys(0x0A5277C0,0x2DB17506,0x0E8F26DA); /* 4144 */ +#endif + +#if PACKETVER == 20161207 + packetKeys(0x52D267AA,0x4FE42156,0x1292153E); /* 4144 */ +#endif + +#if PACKETVER == 20161214 + packetKeys(0x4DDE217B,0x07863AE0,0x5B591656); /* 4144 */ +#endif + +#if PACKETVER == 20161221 + packetKeys(0x69CB4F56,0x793C165E,0x673A2354); /* 4144 */ +#endif + + #if defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3) packetKeys(OBFUSCATIONKEY1,OBFUSCATIONKEY2,OBFUSCATIONKEY3); #endif diff --git a/src/map/pc.c b/src/map/pc.c index 854913c28..2303a83ca 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4907,25 +4907,6 @@ int pc_isUseitem(struct map_session_data *sd,int n) if( map->list[sd->bl.m].flag.nobranch || map_flag_gvg2(sd->bl.m) ) return 0; break; - case ITEMID_BUBBLE_GUM: - case ITEMID_COMP_BUBBLE_GUM: - if( sd->sc.data[SC_CASH_RECEIVEITEM] ) - return 0; - break; - case ITEMID_BATTLE_MANUAL: - case ITEMID_COMP_BATTLE_MANUAL: - case ITEMID_THICK_MANUAL50: - case ITEMID_NOBLE_NAMEPLATE: - case ITEMID_BATTLE_MANUAL25: - case ITEMID_BATTLE_MANUAL100: - case ITEMID_BATTLE_MANUAL_X3: - if( sd->sc.data[SC_CASH_PLUSEXP] ) - return 0; - break; - case ITEMID_JOB_MANUAL50: - if( sd->sc.data[SC_CASH_PLUSONLYJOBEXP] ) - return 0; - break; // Mercenary Items case ITEMID_MERCENARY_RED_POTION: @@ -5043,7 +5024,7 @@ int pc_useitem(struct map_session_data *sd,int n) { #if PACKETVER >= 20110309 clif->msgtable(sd, MSG_NPC_WORK_IN_PROGRESS); #else - clif->messagecolor_self(fd, COLOR_WHITE, msg_fd(fd, 48)); + clif->messagecolor_self(sd->fd, COLOR_WHITE, msg_sd(sd, 48)); #endif return 0; } @@ -5079,10 +5060,8 @@ int pc_useitem(struct map_session_data *sd,int n) { )) return 0; - //Prevent mass item usage. [Skotlex] - if( DIFF_TICK(sd->canuseitem_tick, tick) > 0 || - (itemdb_iscashfood(nameid) && DIFF_TICK(sd->canusecashfood_tick, tick) > 0) - ) + // Prevent mass item usage. [Skotlex] + if (DIFF_TICK(sd->canuseitem_tick, tick) > 0) return 0; /* Items with delayed consume are not meant to work while in mounts except reins of mount(12622) */ @@ -5175,10 +5154,8 @@ int pc_useitem(struct map_session_data *sd,int n) { script->potion_flag = 3; //Even more effective potions. } - //Update item use time. + // Update item use time. sd->canuseitem_tick = tick + battle_config.item_use_interval; - if( itemdb_iscashfood(nameid) ) - sd->canusecashfood_tick = tick + battle_config.cashfood_use_interval; script->run_use_script(sd, sd->inventory_data[n], npc->fake_nd->bl.id); script->potion_flag = 0; @@ -5495,13 +5472,6 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, uint16 skil //Logs items, Stolen from mobs [Lupus] logs->pick_mob(md, LOG_TYPE_STEAL, -1, &tmp_item, data); - //A Rare Steal Global Announce by Lupus - if(md->db->dropitem[i].p<=battle_config.rare_drop_announce) { - char message[128]; - sprintf (message, msg_txt(542), sd->status.name, md->db->jname, data->jname, (float)md->db->dropitem[i].p / 100); - //MSG: "'%s' stole %s's %s (chance: %0.02f%%)" - intif->broadcast(message, (int)strlen(message)+1, BC_DEFAULT); - } return 1; } @@ -8145,6 +8115,7 @@ int pc_readparam(const struct map_session_data *sd, int type) case SP_SKILLPOINT: val = sd->status.skill_point; break; case SP_STATUSPOINT: val = sd->status.status_point; break; case SP_ZENY: val = sd->status.zeny; break; + case SP_BANKVAULT: val = sd->status.bank_vault; break; case SP_BASELEVEL: val = sd->status.base_level; break; case SP_JOBLEVEL: val = sd->status.job_level; break; case SP_CLASS: val = sd->status.class; break; @@ -8289,6 +8260,7 @@ int pc_readparam(const struct map_session_data *sd, int type) *------------------------------------------*/ int pc_setparam(struct map_session_data *sd,int type,int val) { + int delta; nullpo_ret(sd); switch(type){ @@ -8339,6 +8311,19 @@ int pc_setparam(struct map_session_data *sd,int type,int val) logs->zeny(sd, LOG_TYPE_SCRIPT, sd, -(sd->status.zeny - cap_value(val, 0, MAX_ZENY))); sd->status.zeny = cap_value(val, 0, MAX_ZENY); break; + case SP_BANKVAULT: + val = cap_value(val, 0, MAX_BANK_ZENY); + delta = (val - sd->status.bank_vault); + sd->status.bank_vault = val; + if (map->save_settings & 256) { + chrif->save(sd, 0); // send to char server + } + if (delta > 0) { + clif->bank_deposit(sd, BDA_SUCCESS); + } else if (delta < 0) { + clif->bank_withdraw(sd, BWA_SUCCESS); + } + return 1; // the vault uses a different packet case SP_BASEEXP: if(pc->nextbaseexp(sd) > 0) { sd->status.base_exp = val; diff --git a/src/map/script.c b/src/map/script.c index 7f3b3f9a2..75f747fb6 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -2384,6 +2384,7 @@ void script_load_parameters(void) {"SkillPoint", SP_SKILLPOINT}, {"Class", SP_CLASS}, {"Zeny", SP_ZENY}, + {"BankVault", SP_BANKVAULT}, {"Sex", SP_SEX}, {"NextBaseExp", SP_NEXTBASEEXP}, {"NextJobExp", SP_NEXTJOBEXP}, @@ -21632,6 +21633,67 @@ BUILDIN(useatcmd) return true; } +BUILDIN(has_permission) +{ + struct map_session_data *sd; + enum e_pc_permission perm; + + if (script_hasdata(st, 3)) { + sd = map->id2sd(script_getnum(st, 3)); + } else { + sd = script->rid2sd(st); + } + + if (sd == NULL) { + script_pushint(st, 0); + return false; + } + + if (script_isstringtype(st, 2)) { + // to check for plugin permissions + int i = 0, j = -1; + const char *name = script_getstr(st, 2); + for (; i < pcg->permission_count; ++i) { + if (strcmp(pcg->permissions[i].name, name) == 0) { + j = i; + break; + } + } + if (j < 0) { + ShowError("script:has_permission: unknown permission: %s\n", name); + script_pushint(st, 0); + return false; + } + script_pushint(st, pc_has_permission(sd, pcg->permissions[j].permission)); + return true; + } + + // to ckeck for built-in permission + perm = script_getnum(st, 2); + script_pushint(st, pc_has_permission(sd, perm)); + return true; +} + +BUILDIN(can_use_command) +{ + struct map_session_data *sd; + const char *cmd = script_getstr(st, 2); + + if (script_hasdata(st, 3)) { + sd = map->id2sd(script_getnum(st, 3)); + } else { + sd = script->rid2sd(st); + } + + if (sd == NULL) { + script_pushint(st, 0); + return false; + } + + script_pushint(st, pc->can_use_command(sd, cmd)); + return true; +} + /* getrandgroupitem <container_item_id>,<quantity> */ BUILDIN(getrandgroupitem) { @@ -22871,6 +22933,55 @@ BUILDIN(channelmes) return true; } +BUILDIN(addchannelhandler) +{ + int i; + const char *channelname = script_getstr(st, 2); + const char *eventname = script_getstr(st, 3); + struct channel_data *chan = channel->search(channelname, NULL); + + if (!chan) { + script_pushint(st, 0); + return true; + } + + ARR_FIND(0, MAX_EVENTQUEUE, i, chan->handlers[i][0] == '\0'); + + if (i < MAX_EVENTQUEUE) { + safestrncpy(chan->handlers[i], eventname, EVENT_NAME_LENGTH); //Event enqueued. + script_pushint(st, 1); + return true; + } + + ShowWarning("script:addchannelhandler: too many handlers for channel %s.\n", channelname); + script_pushint(st, 0); + return true; +} + +BUILDIN(removechannelhandler) +{ + int i; + const char *channelname = script_getstr(st, 2); + const char *eventname = script_getstr(st, 3); + struct channel_data *chan = channel->search(channelname, NULL); + + if (!chan) { + script_pushint(st, 0); + return true; + } + + for (i = 0; i < MAX_EVENTQUEUE; i++) { + if (strcmp(chan->handlers[i], eventname) == 0) { + chan->handlers[i][0] = '\0'; + script_pushint(st, 1); + return true; + } + } + + script_pushint(st, 0); + return true; +} + /** By Cydh Display script message showscript "<message>"{,<GID>}; @@ -23606,6 +23717,8 @@ void script_parse_builtin(void) { BUILDIN_DEF(bindatcmd, "ss???"), BUILDIN_DEF(unbindatcmd, "s"), BUILDIN_DEF(useatcmd, "s"), + BUILDIN_DEF(has_permission, "v?"), + BUILDIN_DEF(can_use_command, "s?"), /** * Item bound [Xantara] [Akinari] [Mhalicot/Hercules] @@ -23665,6 +23778,8 @@ void script_parse_builtin(void) { BUILDIN_DEF(navigateto, "s??????"), BUILDIN_DEF(channelmes, "ss"), + BUILDIN_DEF(addchannelhandler, "ss"), + BUILDIN_DEF(removechannelhandler, "ss"), BUILDIN_DEF(showscript, "s?"), BUILDIN_DEF(mergeitem,""), BUILDIN_DEF(_,"s"), @@ -23711,6 +23826,7 @@ void script_hardcoded_constants(void) script->set_constant("MAX_CART",MAX_INVENTORY,false, false); script->set_constant("MAX_INVENTORY",MAX_INVENTORY,false, false); script->set_constant("MAX_ZENY",MAX_ZENY,false, false); + script->set_constant("MAX_BANK_ZENY", MAX_BANK_ZENY, false, false); script->set_constant("MAX_BG_MEMBERS",MAX_BG_MEMBERS,false, false); script->set_constant("MAX_CHAT_USERS",MAX_CHAT_USERS,false, false); script->set_constant("MAX_REFINE",MAX_REFINE,false, false); @@ -23740,6 +23856,7 @@ void script_hardcoded_constants(void) script->set_constant("Option_Dragon5",OPTION_DRAGON5,false, false); script->set_constant("Option_Hanbok",OPTION_HANBOK,false, false); script->set_constant("Option_Oktoberfest",OPTION_OKTOBERFEST,false, false); + script->set_constant("Option_Summer2", OPTION_SUMMER2, false, false); script->constdb_comment("status option compounds"); script->set_constant("Option_Dragon",OPTION_DRAGON,false, false); @@ -23850,6 +23967,34 @@ void script_hardcoded_constants(void) script->set_constant("BL_CHAR",BL_CHAR,false, false); script->set_constant("BL_ALL",BL_ALL,false, false); + script->constdb_comment("Player permissions"); + script->set_constant("PERM_TRADE", PC_PERM_TRADE, false, false); + script->set_constant("PERM_PARTY", PC_PERM_PARTY, false, false); + script->set_constant("PERM_ALL_SKILL", PC_PERM_ALL_SKILL, false, false); + script->set_constant("PERM_USE_ALL_EQUIPMENT", PC_PERM_USE_ALL_EQUIPMENT, false, false); + script->set_constant("PERM_SKILL_UNCONDITIONAL", PC_PERM_SKILL_UNCONDITIONAL, false, false); + script->set_constant("PERM_JOIN_ALL_CHAT", PC_PERM_JOIN_ALL_CHAT, false, false); + script->set_constant("PERM_NO_CHAT_KICK", PC_PERM_NO_CHAT_KICK, false, false); + script->set_constant("PERM_HIDE_SESSION", PC_PERM_HIDE_SESSION, false, false); + script->set_constant("PERM_RECEIVE_HACK_INFO", PC_PERM_RECEIVE_HACK_INFO, false, false); + script->set_constant("PERM_WARP_ANYWHERE", PC_PERM_WARP_ANYWHERE, false, false); + script->set_constant("PERM_VIEW_HPMETER", PC_PERM_VIEW_HPMETER, false, false); + script->set_constant("PERM_VIEW_EQUIPMENT", PC_PERM_VIEW_EQUIPMENT, false, false); + script->set_constant("PERM_USE_CHECK", PC_PERM_USE_CHECK, false, false); + script->set_constant("PERM_USE_CHANGEMAPTYPE", PC_PERM_USE_CHANGEMAPTYPE, false, false); + script->set_constant("PERM_USE_ALL_COMMANDS", PC_PERM_USE_ALL_COMMANDS, false, false); + script->set_constant("PERM_RECEIVE_REQUESTS", PC_PERM_RECEIVE_REQUESTS, false, false); + script->set_constant("PERM_SHOW_BOSS", PC_PERM_SHOW_BOSS, false, false); + script->set_constant("PERM_DISABLE_PVM", PC_PERM_DISABLE_PVM, false, false); + script->set_constant("PERM_DISABLE_PVP", PC_PERM_DISABLE_PVP, false, false); + script->set_constant("PERM_DISABLE_CMD_DEAD", PC_PERM_DISABLE_CMD_DEAD, false, false); + script->set_constant("PERM_HCHSYS_ADMIN", PC_PERM_HCHSYS_ADMIN, false, false); + script->set_constant("PERM_TRADE_BOUND", PC_PERM_TRADE_BOUND, false, false); + script->set_constant("PERM_DISABLE_PICK_UP", PC_PERM_DISABLE_PICK_UP, false, false); + script->set_constant("PERM_DISABLE_STORE", PC_PERM_DISABLE_STORE, false, false); + script->set_constant("PERM_DISABLE_EXP", PC_PERM_DISABLE_EXP, false, false); + script->set_constant("PERM_DISABLE_SKILL_USAGE", PC_PERM_DISABLE_SKILL_USAGE, false, false); + script->constdb_comment("Renewal"); #ifdef RENEWAL script->set_constant("RENEWAL", 1, false, false); diff --git a/src/map/status.c b/src/map/status.c index d8fb9a350..c3e5a3f40 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1000,6 +1000,7 @@ void initChangeTables(void) status->dbs->IconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM; // Costumes + status->dbs->IconChangeTable[SC_DRESS_UP] = SI_DRESS_UP; status->dbs->IconChangeTable[SC_MOONSTAR] = SI_MOONSTAR; status->dbs->IconChangeTable[SC_SUPER_STAR] = SI_SUPER_STAR; status->dbs->IconChangeTable[SC_STRANGELIGHTS] = SI_STRANGELIGHTS; @@ -1178,6 +1179,7 @@ void initChangeTables(void) status->dbs->ChangeFlagTable[SC_MVPCARD_ORCLORD] |= SCB_ALL; // Costumes + status->dbs->ChangeFlagTable[SC_DRESS_UP] |= SCB_NONE; status->dbs->ChangeFlagTable[SC_MOONSTAR] |= SCB_NONE; status->dbs->ChangeFlagTable[SC_SUPER_STAR] |= SCB_NONE; status->dbs->ChangeFlagTable[SC_STRANGELIGHTS] |= SCB_NONE; @@ -6873,23 +6875,20 @@ void status_set_viewdata(struct block_list *bl, int class_) sd->vd.sex = sd->status.sex; if (sd->vd.cloth_color) { - if (sd->sc.option&OPTION_WEDDING && battle_config.wedding_ignorepalette) - sd->vd.cloth_color = 0; - if (sd->sc.option&OPTION_XMAS && battle_config.xmas_ignorepalette) - sd->vd.cloth_color = 0; - if (sd->sc.option&OPTION_SUMMER && battle_config.summer_ignorepalette) - sd->vd.cloth_color = 0; - if (sd->sc.option&OPTION_HANBOK && battle_config.hanbok_ignorepalette) - sd->vd.cloth_color = 0; - if (sd->sc.option&OPTION_OKTOBERFEST /* TODO: config? */) + if ((sd->sc.option & OPTION_WEDDING) != 0 && battle_config.wedding_ignorepalette == true) + sd->vd.cloth_color = 0; + if ((sd->sc.option & OPTION_XMAS) != 0 && battle_config.xmas_ignorepalette == true) + sd->vd.cloth_color = 0; + if ((sd->sc.option & OPTION_SUMMER) != 0 && battle_config.summer_ignorepalette == true) + sd->vd.cloth_color = 0; + if ((sd->sc.option & OPTION_HANBOK) != 0 && battle_config.hanbok_ignorepalette == true) + sd->vd.cloth_color = 0; + if ((sd->sc.option & OPTION_OKTOBERFEST) != 0 && battle_config.oktoberfest_ignorepalette == true) + sd->vd.cloth_color = 0; + if ((sd->sc.option & OPTION_SUMMER2) != 0 && battle_config.summer2_ignorepalette == true) sd->vd.cloth_color = 0; } - if (sd->vd.body_style - && (sd->sc.option&OPTION_WEDDING - || sd->sc.option&OPTION_XMAS - || sd->sc.option&OPTION_SUMMER - || sd->sc.option&OPTION_HANBOK - || sd->sc.option&OPTION_OKTOBERFEST)) + if (sd->vd.body_style != 0 && (sd->sc.option & OPTION_COSTUME) != 0) sd->vd.body_style = 0; } else if (vd != NULL) { memcpy(&sd->vd, vd, sizeof(struct view_data)); @@ -7767,30 +7766,6 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t if (sc->data[SC_FOOD_LUK_CASH] && sc->data[SC_FOOD_LUK_CASH]->val1 > val1) return 0; break; - case SC_FOOD_STR_CASH: - if (sc->data[SC_FOOD_STR] && sc->data[SC_FOOD_STR]->val1 > val1) - return 0; - break; - case SC_FOOD_AGI_CASH: - if (sc->data[SC_FOOD_AGI] && sc->data[SC_FOOD_AGI]->val1 > val1) - return 0; - break; - case SC_FOOD_VIT_CASH: - if (sc->data[SC_FOOD_VIT] && sc->data[SC_FOOD_VIT]->val1 > val1) - return 0; - break; - case SC_FOOD_INT_CASH: - if (sc->data[SC_FOOD_INT] && sc->data[SC_FOOD_INT]->val1 > val1) - return 0; - break; - case SC_FOOD_DEX_CASH: - if (sc->data[SC_FOOD_DEX] && sc->data[SC_FOOD_DEX]->val1 > val1) - return 0; - break; - case SC_FOOD_LUK_CASH: - if (sc->data[SC_FOOD_LUK] && sc->data[SC_FOOD_LUK]->val1 > val1) - return 0; - break; case SC_CAMOUFLAGE: if( sd && pc->checkskill(sd, RA_CAMOUFLAGE) < 3 && !skill->check_camouflage(bl,NULL) ) return 0; @@ -8009,40 +7984,46 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t status_change_end(bl, SC_INC_AGI, INVALID_TIMER); break; case SC_FOOD_STR: - status_change_end(bl, SC_FOOD_STR_CASH, INVALID_TIMER); + status_change_end(bl, SC_FOOD_STR, INVALID_TIMER); break; case SC_FOOD_AGI: - status_change_end(bl, SC_FOOD_AGI_CASH, INVALID_TIMER); + status_change_end(bl, SC_FOOD_AGI, INVALID_TIMER); break; case SC_FOOD_VIT: - status_change_end(bl, SC_FOOD_VIT_CASH, INVALID_TIMER); + status_change_end(bl, SC_FOOD_VIT, INVALID_TIMER); break; case SC_FOOD_INT: - status_change_end(bl, SC_FOOD_INT_CASH, INVALID_TIMER); + status_change_end(bl, SC_FOOD_INT, INVALID_TIMER); break; case SC_FOOD_DEX: - status_change_end(bl, SC_FOOD_DEX_CASH, INVALID_TIMER); + status_change_end(bl, SC_FOOD_DEX, INVALID_TIMER); break; case SC_FOOD_LUK: - status_change_end(bl, SC_FOOD_LUK_CASH, INVALID_TIMER); + status_change_end(bl, SC_FOOD_LUK, INVALID_TIMER); break; case SC_FOOD_STR_CASH: status_change_end(bl, SC_FOOD_STR, INVALID_TIMER); + status_change_end(bl, SC_FOOD_STR_CASH, INVALID_TIMER); break; case SC_FOOD_AGI_CASH: status_change_end(bl, SC_FOOD_AGI, INVALID_TIMER); + status_change_end(bl, SC_FOOD_AGI_CASH, INVALID_TIMER); break; case SC_FOOD_VIT_CASH: status_change_end(bl, SC_FOOD_VIT, INVALID_TIMER); + status_change_end(bl, SC_FOOD_VIT_CASH, INVALID_TIMER); break; case SC_FOOD_INT_CASH: status_change_end(bl, SC_FOOD_INT, INVALID_TIMER); + status_change_end(bl, SC_FOOD_INT_CASH, INVALID_TIMER); break; case SC_FOOD_DEX_CASH: status_change_end(bl, SC_FOOD_DEX, INVALID_TIMER); + status_change_end(bl, SC_FOOD_DEX_CASH, INVALID_TIMER); break; case SC_FOOD_LUK_CASH: status_change_end(bl, SC_FOOD_LUK, INVALID_TIMER); + status_change_end(bl, SC_FOOD_LUK_CASH, INVALID_TIMER); break; case SC_GM_BATTLE: status_change_end(bl, SC_GM_BATTLE2, INVALID_TIMER); @@ -8493,8 +8474,10 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_SUMMER: case SC_HANBOK: case SC_OKTOBERFEST: - if (!vd) return 0; - //Store previous values as they could be removed. + case SC_DRESS_UP: + if (vd == NULL) + return 0; + // Store previous values as they could be removed. unit->stop_attack(bl); break; case SC_NOCHAT: @@ -9889,19 +9872,21 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t return 0; } } - } else { //Special considerations when loading SC data. - switch( type ) { + } else { // Special considerations when loading SC data. + switch (type) { case SC_WEDDING: case SC_XMAS: case SC_SUMMER: case SC_HANBOK: case SC_OKTOBERFEST: - if( !vd ) break; + case SC_DRESS_UP: + if (vd == NULL) + break; clif->changelook(bl, LOOK_BASE, vd->class); - clif->changelook(bl,LOOK_WEAPON,0); - clif->changelook(bl,LOOK_SHIELD,0); - clif->changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color); - clif->changelook(bl,LOOK_BODY2,0); + clif->changelook(bl, LOOK_WEAPON, 0); + clif->changelook(bl, LOOK_SHIELD, 0); + clif->changelook(bl, LOOK_CLOTHES_COLOR, vd->cloth_color); + clif->changelook(bl, LOOK_BODY2, 0); break; case SC_KAAHI: val4 = INVALID_TIMER; @@ -10284,6 +10269,10 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t sc->option |= OPTION_OKTOBERFEST; opt_flag |= 0x4; break; + case SC_DRESS_UP: + sc->option |= OPTION_SUMMER2; + opt_flag |= 0x4; + break; case SC__FEINTBOMB_MASTER: sc->option |= OPTION_INVISIBLE; opt_flag |= 0x4; @@ -11092,6 +11081,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const sc->option &= ~OPTION_OKTOBERFEST; opt_flag |= 0x4; break; + case SC_DRESS_UP: + sc->option &= ~OPTION_SUMMER2; + opt_flag |= 0x4; + break; case SC__FEINTBOMB_MASTER: sc->option &= ~OPTION_INVISIBLE; opt_flag |= 0x4; diff --git a/src/map/status.h b/src/map/status.h index 06e7e07b8..1496429a8 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -840,6 +840,8 @@ typedef enum sc_type { SC_TUNAPARTY, SC_SHRIMP, // 650 SC_FRESHSHRIMP, + + SC_DRESS_UP, #ifndef SC_MAX SC_MAX, //Automatically updated max, used in for's to check we are within bounds. #endif @@ -1722,7 +1724,7 @@ enum si_type { //SI_SUMMEREVENT04 = 853, //SI_SUMMEREVENT05 = 854, //SI_MINIGAME_ROULETTE_BONUS_ITEM = 855, - //SI_DRESS_UP = 856, + SI_DRESS_UP = 856, SI_MAPLE_FALLS = 857, //SI_ALL_NIFLHEIM_RECALL = 858, //SI_ = 859, diff --git a/tools/configconverter.pl b/tools/configconverter.pl index 4fafd1f64..dc511aaef 100755 --- a/tools/configconverter.pl +++ b/tools/configconverter.pl @@ -677,7 +677,6 @@ my @defaults = ( drops_by_luk => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 0}, drops_by_luk2 => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 0}, alchemist_summon_reward => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, - rare_drop_announce => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 0}, base_exp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 100}, job_exp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 100}, multi_level_up => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "exp:", default => "false"}, |