Merge branch 'academie' of https://github.com/rathena/rathena into academie

This commit is contained in:
lighta 2015-11-17 22:19:38 -05:00
commit 8703eacfe4
23 changed files with 15100 additions and 148 deletions

View File

@ -109,7 +109,8 @@ save_log: yes
// Starting point for new characters
// Format: <map_name>,<x>,<y>
start_point: new_1-1,53,111
start_point: iz_int,97,90
start_point_pre: new_1-1,53,111
// Starting items for new characters
// Max number of items is MAX_STARTITEM in char.c (default 32)

View File

@ -6856,8 +6856,8 @@
12842,Platinum_Treasure_Box,Platinum Treasure Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,50,,,{},{},{}
12843,Pearl_Treasure_Box,Pearl Treasure Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,60,,,{},{},{}
12844,Diamond_Treasure_Box,Diamond Treasure Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,70,,,{},{},{}
12845,WOB_Amatsu,WOB Amatsu,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12846,Unripe_Apple2,Unripe Apple2,2,10,,50,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12845,Amatsu_Butterfly_Wing,Amatsu_Butterfly_Wing,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12846,Little_Unripe_Apple,Little_Unripe_Apple,2,10,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 2398; },{},{}
12847,Old_Equipment_Box,Old Equipment Box,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12848,Falcon_Flute,Falcon Flute,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ if(getskilllv("HT_FALCON")) { if(checkoption(Option_Wug)||checkoption(Option_Wugrider)) end; setfalcon (!checkfalcon()); } },{},{}
12849,Combination_Kit,Combination Kit,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}

View File

@ -778,7 +778,7 @@
1722,EVENT_JAKK,Jakk,Jakk,99,10310,0,93,90,1,115,182,8,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000
1723,A_SHECIL,Shecil Damon,Cecil Damon,82,30000,0,0,0,14,600,900,40,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1724,A_POTON_CANON,Photon Cannon,Photon Cannon,66,8000,0,0,0,9,1000,1300,16,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1725,R_PORING,Poring,Poring,1,50,0,0,0,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x83,150,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1725,R_PORING,Poring,Poring,1,50,0,0,0,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x81,150,1872,672,480,0,0,0,0,0,0,0,7049,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1726,R_LUNATIC,Lunatic,Lunatic,3,60,0,0,0,1,9,12,0,20,1,3,3,10,8,60,10,12,0,2,60,0x83,150,1456,456,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1727,R_SAVAGE_BABE,Savage Babe,Savage Babe,7,182,0,0,0,1,20,25,0,0,1,7,14,5,12,35,10,12,0,2,22,0x83,150,1624,624,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1728,R_DESERT_WOLF_B,Desert Wolf Baby,Baby Desert Wolf,14,140,1,0,0,1,33,41,13,0,10,12,8,5,28,7,10,12,0,2,23,0x83,150,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

View File

@ -119,6 +119,18 @@
1227,0,0,0,0,0,0,0,2364,6522,3000,0,0,0,0,0,0,"Getting back Professor Worm's memory"
1228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Getting back Professor Worm's memory"
// Academy 14.2
1229,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Swordsman training"
1230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Swordsman training"
1233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Swordsman training"
1234,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Swordsman training"
1235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Swordsman training"
1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Swordsman training"
1237,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Shop guide"
1238,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Shop guide"
1239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Shop guide"
1240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Shop guide"
2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job Change to Blacksmith"
2001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job Change to Blacksmith"
2002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job Change to Blacksmith"
@ -333,8 +345,17 @@
2291,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Mummy Hunting - Cooldown"
2292,0,2360,20,0,0,0,0,0,0,0,0,0,0,0,0,0,"Mummy Hunting (Nightmare)"
// Academy 14.2
2293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Adventurer's Companion"
2294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Adventurer's Companion"
2295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Adventurer's Companion"
2296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Adventurer's Companion"
2297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Adventurer's Companion"
2298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Adventurer's Companion"
2299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rapid Completion Experience"
// New Novice Ground
2299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Training Center: Talk to Lisa"
// 2299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Training Center: Talk to Lisa"
2300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Training Center: Talk to General Reindeer"
2301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Training Center: Leave the boat"
2302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Training Center: Formation"
@ -637,6 +658,29 @@
4265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Bookshelf use"
4266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"????? ??"
4267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"????? ??"
// Academy 14.2
4268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja trainer"
4269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Registration at the Academy"
4270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training - stat explanation"
4271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-explanation about the skills"
4272,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training- conversation about the skills"
4273,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training- explanation about the weapons"
4274,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninjas training- explanation about job change"
4275,0,1113,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-Exercise1"
4276,0,1002,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-Exercise2"
4277,0,1052,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-Actual battle2"
4278,0,1024,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-Actual battle1"
4279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-test"
4280,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-test"
4281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Beginner's training-Ninja"
4282,0,1113,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-exercise1"
4283,0,1002,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-exercise2"
4284,0,1052,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-actual battle2"
4285,0,1024,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-actual battle1"
4286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-test"
4287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ninja training-test"
//4303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//4304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//4305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
@ -771,6 +815,21 @@
5145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Prototype-(3)"
5146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Battle test"
// Academy 14.2
5147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Gunslinger basic training(1)"
5148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Gunslinger basic training(2)"
5149,0,1004,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"<Battle training request form A>"
5150,0,1012,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"<Battle training request form B>"
5151,0,1167,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"<Battle training request form C>"
5152,0,1052,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"<Battle training request form D>"
5153,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Refining tutorial (1)"
5154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Refining tutorial (2)"
5155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Refining tutorial (3)"
5156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Refining tutorial (4)"
5157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Enchant tutorial (1)"
5158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Entchant tutorial (2)"
5159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Enchant tutorial (3)"
// 2012 Headgear Quests
5161,86400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Low Level collection request[Stand by]"
5162,0,1164,100,0,0,0,0,0,0,0,0,0,0,0,0,0,"Low Level collection request"
@ -1282,6 +1341,32 @@
7452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Find the chief of staff!"
7453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The last of the chief of staff"
// Academy 14.2
7471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"First time talking after being born"
7472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"First step towards a new world"
7473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Cool drink"
7474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Searching for treasure"
7475,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Discovered the Airship"
7476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Discovered the Arena"
7477,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Bridge to Prontera"
7478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Basic Medical Botany"
7479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Friend or Foe?"
7480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Regarding Thief job"
7481,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vicente's class"
7482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Vercassel's class"
7483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Use the Thief Manual"
7484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Shop owner! Order to steal!"
7485,0,1725,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Assassin! Use Envenom"
7486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"With Lumin"
7487,30,1725,4,0,0,0,0,0,0,0,0,0,0,0,0,0,"30 second duel"
7488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Trio set of Fire Elements"
7489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Silent liquidation plan"
7490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Mushroom soup calling memories"
7491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Get away to Paradise!"
7492,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Invincible pumpkin knight"
7493,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Battle of 17 vs. 1"
7494,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Cleanup of the mushroom farm"
//7619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//7622,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
@ -1668,6 +1753,15 @@
9260,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Survey investigation notes"
9262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Mystery Robbery Incident 16"
// Academy 14.2
9264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job change to Mage"
9265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job change to Mage"
9266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Job change to Mage"
9267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The way to be a strong Mage - 1"
9268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The way to be a strong Mage - 2"
9269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The way to be a strong Mage - 3"
9270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The way to be a strong Mage - 4"
//9327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//9328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//9329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
@ -2040,6 +2134,9 @@
11244,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Soft Jelly"
11245,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Soft Jelly"
// Academy 14.2
11255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Otter Ssamsun"
11284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Nurse at Port Malaya-1"
11285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Nurse at Port Malaya-2"
11286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Nurse at Port Malaya-3"
@ -2096,6 +2193,19 @@
11336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dreaming boy"
11337,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dreaming boy"
// Academy 14.2
11338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Conversation with Subino"
11339,0,1002,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"The most delicious on earth"
11340,0,1063,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Carrots are delicious!"
11341,0,1007,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rolling Fabre's clothing"
11342,0,1004,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Antidote Material~"
11343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Conversation with Alice"
11344,0,1008,5,0,0,0,0,0,0,0,0,0,0,0,0,0,"Barrier!!"
11345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Conversation with Alice"
11346,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Acolyte_damped creatures(LV.13)"
11347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Acolyte_soft bone(LV.18)"
11348,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Acolyte_Solid bone(LV.23)"
//11366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
11378,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Trick or treat" // Halloween Event 2013
@ -2392,6 +2502,21 @@
12300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Revisiting Etran"
12301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Two remaining friends"
// Academy 14.2
12302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Salim Hamid"
12303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Applicant for trader"
12304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Introduction to merchantology"
12305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"About the capability figure"
12306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Experience of disounts"
12307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Way to the Merchant"
12308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Removal of Worm Tails"
12309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Removal of Boa"
12310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Removal of Spore"
12311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Removal of Pirate Skeletons"
12312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Supplementary to the theory lesson"
12313,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"About stats"
12314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"About skills"
// Old Glast Heim
12317,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Fake Keyblade"
12318,0,2475,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Upper Cats: annoying guy"
@ -2493,6 +2618,14 @@
13099,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Fragments and Rusty Screw"
13100,3600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Fragments and Rusty Screw - Wait"
// Academy 14.2
13101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The way of Taekwon"
13102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Spinning kick"
13103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Breaking Willows"
13104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Breaking Spores"
13105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Breaking Zombies"
13106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Breaking Skeletons"
// eden 121-130
13107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Thanatos Tower Search"
13108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rachel holy ground Search"
@ -2580,6 +2713,32 @@
14140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To Wuhari"
14141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ingredients for research"
// Academy 14.2
14142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To the Archer's town!"
14143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Application for the Archer's job change"
14144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Retest - Stats"
14145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Archer Skills"
14146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Hunting training"
14147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Retest - Skills"
14148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To the next step"
14149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Listening to the 2nd job change"
14150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"To the next step"
14151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Hunting training - Spoa"
14152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Hunting training - Creamy"
14153,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Hunting training - Skeleton"
14154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Fragrant herb mix"
14155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Crunchy salad"
14156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Anything shabushabu"
14157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Baked golden apple"
14158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Presentation of the Archer manual"
14159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Met with the PR staff"
14160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Met with the PR staff"
14161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Test of stats"
14162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Test of skills"
14163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Caught Spores"
14164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Caught Creamy"
14165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Caught Skeletons"
//14254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//14255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//14256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
@ -2617,6 +2776,11 @@
//14289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//14290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//14291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
// Academy 14.2
15000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Experiencing abnormal statuses"
15001,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Hold your breath"
//15025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//15026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
//15027,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""

View File

@ -8198,6 +8198,37 @@ izlude,100,100,4 script Test 844,{
---------------------------------------
*setquestinfo_level <quest_id>,<min_level>,<max_level>;
Add level range criteria for quest info with quest id 'quest_id'.
This command must be used after 'questinfo'.
---------------------------------------
*setquestinfo_req <quest_id>,<req_quest_id>,<state>;
Add 'req_quest_id' as requirement for quest info with quest id 'quest_id'.
Value os 'state' are:
0: Player doesn't have 'req_quest_id'.
1: Player has 'req_quest_id'.
2: //! TODO
3: //! TODO
This command must be used after 'questinfo'.
---------------------------------------
*setquestinfo_job <quest_id>,<job_id>;
Add job criteria for quest info with quest id 'quest_id'.
The job criteria may more than one job_id.
This command must be used after 'questinfo'.
---------------------------------------
*setquest <ID>{,<char_id>};
Place quest of <ID> in the users quest log, the state of which is "active".

View File

@ -14,4 +14,5 @@ npc: npc/pre-re/jobs/1-1/thief.txt
npc: npc/pre-re/jobs/novice/novice.txt
// ------------------------ Skill Quests ------------------------
npc: npc/pre-re/quests/skills/swordman_skills.txt
npc: npc/pre-re/quests/skills/swordman_skills.txt
npc: npc/pre-re/quests/skills/novice_skills.txt

View File

@ -17,75 +17,75 @@
// Izlude
//============================================================
izlude,197,205,1 duplicate(Sailor_izlude) Sailor#izlude 100
izlude_a,197,205,1 duplicate(Sailor_izlude) Sailor#izlude_a 100
izlude_b,197,205,1 duplicate(Sailor_izlude) Sailor#izlude_b 100
izlude_c,197,205,1 duplicate(Sailor_izlude) Sailor#izlude_c 100
izlude_d,197,205,1 duplicate(Sailor_izlude) Sailor#izlude_d 100
izlude,197,205,1 duplicate(Sailor_izlude) Sailor#izlude 4W_SAILOR
izlude_a,197,205,1 duplicate(Sailor_izlude) Sailor#izlude_a 4W_SAILOR
izlude_b,197,205,1 duplicate(Sailor_izlude) Sailor#izlude_b 4W_SAILOR
izlude_c,197,205,1 duplicate(Sailor_izlude) Sailor#izlude_c 4W_SAILOR
izlude_d,197,205,1 duplicate(Sailor_izlude) Sailor#izlude_d 4W_SAILOR
izlude,71,92,2 duplicate(Bonne_izlude) Bonne#izlude 90
izlude_a,71,92,2 duplicate(Bonne_izlude) Bonne#izlude_a 90
izlude_b,71,92,2 duplicate(Bonne_izlude) Bonne#izlude_b 90
izlude_c,71,92,2 duplicate(Bonne_izlude) Bonne#izlude_c 90
izlude_d,71,92,2 duplicate(Bonne_izlude) Bonne#izlude_d 90
izlude,71,92,2 duplicate(Bonne_izlude) Bonne#izlude 4_F_01
izlude_a,71,92,2 duplicate(Bonne_izlude) Bonne#izlude_a 4_F_01
izlude_b,71,92,2 duplicate(Bonne_izlude) Bonne#izlude_b 4_F_01
izlude_c,71,92,2 duplicate(Bonne_izlude) Bonne#izlude_c 4_F_01
izlude_d,71,92,2 duplicate(Bonne_izlude) Bonne#izlude_d 4_F_01
izlude,172,215,4 duplicate(Charfri_izlude) Charfri#izlude 91
izlude_a,172,215,4 duplicate(Charfri_izlude) Charfri#izlude_a 91
izlude_b,172,215,4 duplicate(Charfri_izlude) Charfri#izlude_b 91
izlude_c,172,215,4 duplicate(Charfri_izlude) Charfri#izlude_c 91
izlude_d,172,215,4 duplicate(Charfri_izlude) Charfri#izlude_d 91
izlude,172,215,4 duplicate(Charfri_izlude) Charfri#izlude 4_F_02
izlude_a,172,215,4 duplicate(Charfri_izlude) Charfri#izlude_a 4_F_02
izlude_b,172,215,4 duplicate(Charfri_izlude) Charfri#izlude_b 4_F_02
izlude_c,172,215,4 duplicate(Charfri_izlude) Charfri#izlude_c 4_F_02
izlude_d,172,215,4 duplicate(Charfri_izlude) Charfri#izlude_d 4_F_02
izlude,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude 124
izlude_a,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude_a 124
izlude_b,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude_b 124
izlude_c,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude_c 124
izlude_d,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude_d 124
izlude,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude 4_F_TELEPORTER
izlude_a,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude_a 4_F_TELEPORTER
izlude_b,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude_b 4_F_TELEPORTER
izlude_c,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude_c 4_F_TELEPORTER
izlude_d,174,164,4 duplicate(Cuskoal_izlude) Cuskoal#izlude_d 4_F_TELEPORTER
izlude,85,103,4 duplicate(Dega_izlude) Dega#izlude 84
izlude_a,85,103,4 duplicate(Dega_izlude) Dega#izlude_a 84
izlude_b,85,103,4 duplicate(Dega_izlude) Dega#izlude_b 84
izlude_c,85,103,4 duplicate(Dega_izlude) Dega#izlude_c 84
izlude_d,85,103,4 duplicate(Dega_izlude) Dega#izlude_d 84
izlude,85,103,4 duplicate(Dega_izlude) Dega#izlude 4_M_02
izlude_a,85,103,4 duplicate(Dega_izlude) Dega#izlude_a 4_M_02
izlude_b,85,103,4 duplicate(Dega_izlude) Dega#izlude_b 4_M_02
izlude_c,85,103,4 duplicate(Dega_izlude) Dega#izlude_c 4_M_02
izlude_d,85,103,4 duplicate(Dega_izlude) Dega#izlude_d 4_M_02
izlude,140,186,4 duplicate(Kylick_izlude) Kylick#izlude 97
izlude_a,140,186,4 duplicate(Kylick_izlude) Kylick#izlude_a 97
izlude_b,140,186,4 duplicate(Kylick_izlude) Kylick#izlude_b 97
izlude_c,140,186,4 duplicate(Kylick_izlude) Kylick#izlude_c 97
izlude_d,140,186,4 duplicate(Kylick_izlude) Kylick#izlude_d 97
izlude,140,186,4 duplicate(Kylick_izlude) Kylick#izlude 4W_M_01
izlude_a,140,186,4 duplicate(Kylick_izlude) Kylick#izlude_a 4W_M_01
izlude_b,140,186,4 duplicate(Kylick_izlude) Kylick#izlude_b 4W_M_01
izlude_c,140,186,4 duplicate(Kylick_izlude) Kylick#izlude_c 4W_M_01
izlude_d,140,186,4 duplicate(Kylick_izlude) Kylick#izlude_d 4W_M_01
izlude,57,159,2 duplicate(Red_izlude) Red#izlude 85
izlude_a,57,159,2 duplicate(Red_izlude) Red#izlude_a 85
izlude_b,57,159,2 duplicate(Red_izlude) Red#izlude_b 85
izlude_c,57,159,2 duplicate(Red_izlude) Red#izlude_c 85
izlude_d,57,159,2 duplicate(Red_izlude) Red#izlude_d 85
izlude,57,159,2 duplicate(Red_izlude) Red#izlude 4_M_03
izlude_a,57,159,2 duplicate(Red_izlude) Red#izlude_a 4_M_03
izlude_b,57,159,2 duplicate(Red_izlude) Red#izlude_b 4_M_03
izlude_c,57,159,2 duplicate(Red_izlude) Red#izlude_c 4_M_03
izlude_d,57,159,2 duplicate(Red_izlude) Red#izlude_d 4_M_03
izlude,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude 98
izlude_a,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude_a 98
izlude_b,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude_b 98
izlude_c,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude_c 98
izlude_d,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude_d 98
izlude,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude 4W_M_02
izlude_a,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude_a 4W_M_02
izlude_b,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude_b 4W_M_02
izlude_c,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude_c 4W_M_02
izlude_d,55,159,2 duplicate(Cebalis_izlude) Cebalis#izlude_d 4W_M_02
izlude,165,156,2 duplicate(Soldier_izlude) Soldier#izlude 105
izlude_a,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_a 105
izlude_b,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_b 105
izlude_c,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_c 105
izlude_d,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_d 105
izlude,165,156,2 duplicate(Soldier_izlude) Soldier#izlude 8W_SOLDIER
izlude_a,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_a 8W_SOLDIER
izlude_b,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_b 8W_SOLDIER
izlude_c,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_c 8W_SOLDIER
izlude_d,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_d 8W_SOLDIER
- script ::Guard_izlude -1,{
mes "[Izlude Guard]";
mes "Welcome to Izlude.";
close;
}
prt_fild08,350,219,4 duplicate(Guard_izlude) Guard#izlude 105
prt_fild08a,350,219,4 duplicate(Guard_izlude) Guard#izlude_a 105
prt_fild08b,350,219,4 duplicate(Guard_izlude) Guard#izlude_b 105
prt_fild08c,350,219,4 duplicate(Guard_izlude) Guard#izlude_c 105
prt_fild08d,350,219,4 duplicate(Guard_izlude) Guard#izlude_d 105
prt_fild08,350,219,4 duplicate(Guard_izlude) Guard#izlude 8W_SOLDIER
prt_fild08a,350,219,4 duplicate(Guard_izlude) Guard#izlude_a 8W_SOLDIER
prt_fild08b,350,219,4 duplicate(Guard_izlude) Guard#izlude_b 8W_SOLDIER
prt_fild08c,350,219,4 duplicate(Guard_izlude) Guard#izlude_c 8W_SOLDIER
prt_fild08d,350,219,4 duplicate(Guard_izlude) Guard#izlude_d 8W_SOLDIER
// Channel Warper :: channel
//============================================================
function script F_IzludeChannel {
mes "[Izlude Copy Warper]";
mes "[Channel Warp Official]";
mes "Izlude is a verly lively place is it not?";
mes "I am here to help make Izlude feel more smooth!";
mes "I can send you to another copy of Izlude.";
@ -100,8 +100,177 @@ function script F_IzludeChannel {
}
close;
}
izlude,122,105,5 script Izlude Copy Warper 64,{ callfunc "F_IzludeChannel",":Go to copy 2:Go to copy 3:Go to copy 4:Go to copy 5"; }
izlude_a,122,105,5 script Izlude Copy Warper#_a 64,{ callfunc "F_IzludeChannel","Go to copy 1::Go to copy 3:Go to copy 4:Go to copy 5"; }
izlude_b,122,105,5 script Izlude Copy Warper#_b 64,{ callfunc "F_IzludeChannel","Go to copy 1:Go to copy 2::Go to copy 4:Go to copy 5"; }
izlude_c,122,105,5 script Izlude Copy Warper#_c 64,{ callfunc "F_IzludeChannel","Go to copy 1:Go to copy 2:Go to copy 3::Go to copy 5"; }
izlude_d,122,105,5 script Izlude Copy Warper#_d 64,{ callfunc "F_IzludeChannel","Go to copy 1:Go to copy 2:Go to copy 3:Go to copy 4:"; }
izlude,122,105,5 script Channel Warp Official 1_M_WIZARD,{ callfunc "F_IzludeChannel",":Go to copy 2:Go to copy 3:Go to copy 4:Go to copy 5"; }
izlude_a,122,105,5 script Channel Warp Official#_a 1_M_WIZARD,{ callfunc "F_IzludeChannel","Go to copy 1::Go to copy 3:Go to copy 4:Go to copy 5"; }
izlude_b,122,105,5 script Channel Warp Official#_b 1_M_WIZARD,{ callfunc "F_IzludeChannel","Go to copy 1:Go to copy 2::Go to copy 4:Go to copy 5"; }
izlude_c,122,105,5 script Channel Warp Official#_c 1_M_WIZARD,{ callfunc "F_IzludeChannel","Go to copy 1:Go to copy 2:Go to copy 3::Go to copy 5"; }
izlude_d,122,105,5 script Channel Warp Official#_d 1_M_WIZARD,{ callfunc "F_IzludeChannel","Go to copy 1:Go to copy 2:Go to copy 3:Go to copy 4:"; }
// Talking NPCs
//============================================================
izlude,143,205,7 script Talkative Kid#iz 4_F_KID2,{
end;
OnTimer64000:
npctalk "I used all my Novice Red Potions. What should I do?";
end;
OnTimer72000:
npctalk "Where is the shop?";
end;
OnTimer136000:
npctalk "Idiot! You do not know about the 'shortcut window'?";
end;
OnTimer144000:
npctalk "The items in your inventory can be dragged and put in the shortcut window.";
end;
OnTimer212000:
npctalk "I got so many beginner's items in the Academy!";
end;
OnTimer276000:
npctalk "They even gave me weapons and a shield!";
end;
OnTimer284000:
npctalk "Just press <Ctrl+~key> to open the map you have.";
end;
OnTimer344000:
npctalk "Then do you want to go Criatura Academy with me? I'm learning how to battle from Instructor Subino!";
end;
OnTimer348000:
npctalk "The Academy is in North side of Izlude. Let's go~!";
end;
OnTimer416000:
npctalk "It's a system to guide you to a destination.";
end;
OnTimer424000:
npctalk "In the basic menu, please click the [Navigation] button.";
end;
OnTimer492000:
npctalk "Whee, Ain't gonna use your brain? Please type /where in the chat window now!";
end;
OnTimer552000:
npctalk "In this case, you can push the <Enter> key.";
end;
OnTimer560000:
npctalk "We are just repeating the same dialog. HaHaha.";
end;
OnTimer565000:
OnInit:
initnpctimer;
end;
}
izlude_a,143,205,7 duplicate(Talkative Kid#iz) Talkative Kid#iza 4_F_KID2
izlude_b,143,205,7 duplicate(Talkative Kid#iz) Talkative Kid#izb 4_F_KID2
izlude_c,143,205,7 duplicate(Talkative Kid#iz) Talkative Kid#izc 4_F_KID2
izlude_d,143,205,7 duplicate(Talkative Kid#iz) Talkative Kid#izd 4_F_KID2
izlude,146,205,7 script Talkative Adventurer#iz 4_M_KID1,{
end;
OnTimer69000:
npctalk "You can buy potion from Merchants.";
end;
OnTimer77000:
npctalk "It's the Potion image in the mini map.";
end;
OnTimer131000:
npctalk "Is there any way to use items easily?";
end;
OnTimer141000:
npctalk "Shortcut window? The slots at the top of the screen? How can I use it?";
end;
OnTimer149000:
npctalk "For inventory, do you mean 'item' menu? Oh, it is!";
end;
OnTimer217000:
npctalk "I have a bunch of potions?";
end;
OnTimer281000:
npctalk "What?! I should go to the Academy now!";
end;
OnTimer279000:
npctalk "Where is Izlude? In the center?";
end;
OnTimer339000:
npctalk "I do not know what to do.";
end;
OnTimer349000:
npctalk "Oh yea? I want to know so many things~ I will go with you!";
end;
OnTimer411000:
npctalk "Navigation, What is that?";
end;
OnTimer421000:
npctalk "Oh-! Should I search for a Kafra Employee?";
end;
OnTimer487000:
npctalk "What is the town name?";
end;
OnTimer497000:
npctalk "I cannot see the part where I can write something in the chat window?";
end;
OnTimer557000:
npctalk "Oh you smarty...";
end;
OnTimer555000:
npctalk "A while ago, one Novice talked to me like hey 'Talkative Adventurer'?. HaHaha.";
end;
OnTimer565000:
OnInit:
initnpctimer;
end;
}
izlude_a,146,205,7 duplicate(Talkative Adventurer#iz) Talkative Adventurer#iza 4_M_KID1
izlude_b,146,205,7 duplicate(Talkative Adventurer#iz) Talkative Adventurer#izb 4_M_KID1
izlude_c,146,205,7 duplicate(Talkative Adventurer#iz) Talkative Adventurer#izc 4_M_KID1
izlude_d,146,205,7 duplicate(Talkative Adventurer#iz) Talkative Adventurer#izd 4_M_KID1
prt_fild08,338,217,7 script Resting Adventurer#iz 4_F_SITDOWN,{
end;
OnTimer60000:
npctalk "You know what? If you are sitting, HP and SP recovery is faster.";
end;
OnTimer65000:
npctalk "Sitting is possible if your basic job skill level is more than 3. Shortcut is pressing the <INSERT> key.";
OnInit:
initnpctimer;
end;
}
prt_fild08a,338,217,7 duplicate(Resting Adventurer#iz) Resting Adventurer#iza 4_F_SITDOWN
prt_fild08b,338,217,7 duplicate(Resting Adventurer#iz) Resting Adventurer#izb 4_F_SITDOWN
prt_fild08c,338,217,7 duplicate(Resting Adventurer#iz) Resting Adventurer#izc 4_F_SITDOWN
prt_fild08d,338,217,7 duplicate(Resting Adventurer#iz) Resting Adventurer#izd 4_F_SITDOWN

14175
npc/re/jobs/novice/academy.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -3,13 +3,12 @@
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.3
//===== Compatible With: =====================================
//= rAthena Project
//= 1.4
//===== Additional Comments: =================================
//= 1.1 Official kRO 10.1 spawns [Playtester]
//= 1.2 More accurate spawns [Playtester]
//= 1.3 Corrected MVP spawn variance. [L0ne_W0lf]
//= 1.4 Added 14.2 Novice Version as part of Academy update. [Kisuka]
//============================================================
//==================================================
@ -118,3 +117,64 @@ treasure02,100,85,0,0 monster Hydra 1068,1,300000,100000,1
treasure02,101,85,0,0 monster Hydra 1068,1,300000,100000,1
treasure02,0,0,0,0 monster Ghostring 1120,1,1980000,1200000,1
treasure02,101,151,8,8 boss_monster Drake 1112,1,7200000,600000,1
//==================================================
// treasure_n1 - Izlude Sunken Ship 1F
//==================================================
treasure_n1,0,0,0,0 monster Red Mushroom 1085,10,50000,0,0
treasure_n1,0,0,0,0 monster Black Mushroom 1084,10,50000,0,0
treasure_n1,160,54,13,13 monster Red Mushroom 1085,10,50000,0,0
treasure_n1,160,54,13,13 monster Black Mushroom 1084,10,50000,0,0
treasure_n1,160,54,13,13 monster Dead Plankton 2404,10,50000,0,0
treasure_n1,0,0,0,0 monster Red Plant 1078,5,50000,0,0
treasure_n1,0,0,0,0 monster Green Plant 1080,5,50000,0,0
treasure_n1,0,0,0,0 monster Yellow Plant 1081,5,50000,0,0
treasure_n1,0,0,0,0 monster Blue Plant 1079,5,50000,0,0
treasure_n1,0,0,0,0 monster White Plant 1082,5,50000,0,0
treasure_n1,0,0,0,0 monster Zombie 1015,1,100000,0,0
treasure_n1,0,0,0,0 monster Zombie 1015,1,100000,0,0
treasure_n1,68,47,9,9 monster Weak Skeleton 2405,4,8000,0,0
treasure_n1,106,42,9,9 monster Roda Frog 1012,3,60000,0,0
treasure_n1,32,37,9,9 monster Roda Frog 1012,6,60000,0,0
treasure_n1,69,112,9,9 monster Spore 1014,3,20000,0,0
treasure_n1,35,112,9,9 monster Spore 1014,3,20000,0,0
treasure_n1,35,112,9,9 monster Roda Frog 1012,3,20000,0,0
treasure_n1,111,111,9,9 monster Roda Frog 1012,3,60000,0,0
treasure_n1,111,111,9,9 monster Dead Plankton 2404,5,60000,0,0
treasure_n1,69,174,9,9 monster Dead Plankton 2404,7,120000,0,0
treasure_n1,82,155,9,9 monster Spore 1014,4,60000,0,0
treasure_n1,55,155,9,9 monster Spore 1014,2,60000,0,0
treasure_n1,22,160,0,0 monster Weak Skeleton 2405,3,8000,0,0
treasure_n1,163,155,13,13 monster Weak Skeleton 2405,5,8000,0,0
treasure_n1,163,155,13,13 monster Zombie 1015,1,8000,0,0
//==================================================
// treasure_n2 - Izlude Sunken Ship 2F
//==================================================
treasure_n2,0,0,0,0 monster Red Mushroom 1085,10,50000,0,0
treasure_n2,0,0,0,0 monster Black Mushroom 1084,10,50000,0,0
treasure_n2,150,40,13,13 monster Weak Soldier Skeleton 2406,3,50000,0,0
treasure_n2,150,40,13,13 monster Weak Skeleton 2405,5,50000,0,0
treasure_n2,0,0,0,0 monster Red Plant 1078,5,50000,0,0
treasure_n2,0,0,0,0 monster Green Plant 1080,5,50000,0,0
treasure_n2,0,0,0,0 monster Yellow Plant 1081,5,50000,0,0
treasure_n2,0,0,0,0 monster Blue Plant 1079,5,50000,0,0
treasure_n2,0,0,0,0 monster White Plant 1082,5,50000,0,0
treasure_n2,100,50,13,13 monster Weak Skeleton 2405,7,30000,0,0
treasure_n2,100,50,13,13 monster Dead Plankton 2404,5,30000,0,0
treasure_n2,50,40,13,13 monster Weak Soldier Skeleton 2406,3,50000,0,0
treasure_n2,50,40,13,13 monster Weak Skeleton 2405,5,50000,0,0
treasure_n2,40,75,5,3 monster Zombie 1015,2,60000,0,0
treasure_n2,40,75,5,5 monster Dead Plankton 2404,4,60000,0,0
treasure_n2,50,140,5,5 monster Weak Skeleton 2405,10,60000,0,0
treasure_n2,50,140,5,5 monster Weak Soldier Skeleton 2406,5,60000,0,0
treasure_n2,160,140,5,5 monster Weak Skeleton 2405,5,60000,0,0
treasure_n2,160,140,5,5 monster Weak Soldier Skeleton 2406,3,60000,0,0
treasure_n2,160,140,5,2 monster Zombie 1015,3,60000,0,0
treasure_n2,160,70,13,13 monster Weak Skeleton 2405,5,30000,0,0
treasure_n2,160,70,13,13 monster Dead Plankton 2404,7,30000,0,0
treasure_n2,155,40,9,9 monster Zombie 1015,3,120000,0,0
treasure_n2,100,85,13,13 monster Weak Soldier Skeleton 2406,2,50000,0,0
treasure_n2,100,160,13,13 monster Weak Soldier Skeleton 2406,5,120000,0,0
treasure_n2,100,160,13,13 monster Weak Skeleton 2405,7,200000,0,0
treasure_n2,100,160,13,13 monster Dead Plankton 2404,4,60000,0,0

View File

@ -4,8 +4,6 @@
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.6
//===== Compatible With: =====================================
//= rAthena Project
//===== Additional Comments: =================================
//= 1.2 fixed some map name typos [Lupus]
//= 1.3 Official kRO 10.1 spawns [Playtester]
@ -15,7 +13,7 @@
//============================================================
//==================================================
// prt_fild00 - Prontera Field
// prt_fild00 - Prontera Field
//==================================================
prt_fild00,0,0,0,0 monster Roda Frog 1012,130,5000,0,0
prt_fild00,0,0,0,0 monster Ambernite 1094,50,5000,0,0
@ -24,7 +22,7 @@ prt_fild00,227,212,0,0 monster Shining Plant 1083,1,1800000,900000,1
prt_fild00,285,138,10,10 monster Green Plant 1080,5,360000,180000,1
//==================================================
// prt_fild01 - Prontera Field
// prt_fild01 - Prontera Field
//==================================================
prt_fild01,0,0,0,0 monster Lunatic 1063,140,5000,0,0
prt_fild01,0,0,0,0 monster Poring 1002,30,5000,0,0
@ -33,7 +31,7 @@ prt_fild01,199,266,3,3 monster Green Plant 1080,3,360000,180000,1
prt_fild01,199,266,3,3 monster Blue Plant 1079,1,900000,450000,1
//==================================================
// prt_fild02 - Prontera Field
// prt_fild02 - Prontera Field
//==================================================
prt_fild02,0,0,0,0 monster Stainer 1174,140,5000,0,0
prt_fild02,0,0,0,0 monster Creamy 1018,30,5000,0,0
@ -43,7 +41,7 @@ prt_fild02,339,309,3,3 monster Shining Plant 1083,1,1800000,900000,1
prt_fild02,0,0,0,0 monster Shining Plant 1083,2,1800000,900000,1
//==================================================
// prt_fild03 - Prontera Field
// prt_fild03 - Prontera Field
//==================================================
prt_fild03,0,0,0,0 monster Yoyo 1057,100,5000,0,0
prt_fild03,0,0,0,0 monster Poporing 1031,30,5000,0,0
@ -56,7 +54,7 @@ prt_fild03,147,219,5,5 monster Green Plant 1080,5,360000,180000,1
prt_fild03,148,107,5,5 monster Green Plant 1080,5,360000,180000,1
//==================================================
// prt_fild04 - Prontera Field
// prt_fild04 - Prontera Field
//==================================================
prt_fild04,0,0,0,0 monster Ambernite 1094,80,5000,0,0
prt_fild04,0,0,0,0 monster Roda Frog 1012,20,5000,0,0
@ -64,7 +62,7 @@ prt_fild04,0,0,0,0 monster Vocal 1088,1,1800000,1200000,0
prt_fild04,350,114,10,10 monster Green Plant 1080,5,900000,450000,1
//==================================================
// prt_fild05 - Prontera Field
// prt_fild05 - Prontera Field
//==================================================
prt_fild05,0,0,0,0 monster Hornet 1004,140,5000,0,0
prt_fild05,0,0,0,0 monster Thief Bug Egg 1048,30,5000,0,0
@ -73,7 +71,7 @@ prt_fild05,208,37,10,10 monster Green Plant 1080,6,900000,450000,1
prt_fild05,208,37,10,10 monster Blue Plant 1079,1,900000,450000,1
//==================================================
// prt_fild06 - Prontera Field
// prt_fild06 - Prontera Field
//==================================================
prt_fild06,0,0,0,0 monster Fabre 1007,140,5000,0,0
prt_fild06,0,0,0,0 monster Poring 1002,30,5000,0,0
@ -81,7 +79,7 @@ prt_fild06,0,0,0,0 monster Lunatic 1063,30,5000,0,0
prt_fild06,222,30,40,10 monster Green Plant 1080,15,900000,450000,1
//==================================================
// prt_fild07 - Prontera Field
// prt_fild07 - Prontera Field
//==================================================
prt_fild07,0,0,0,0 monster Rocker 1052,150,5000,0,0
prt_fild07,0,0,0,0 monster Savage Babe 1167,50,5000,0,0
@ -89,37 +87,43 @@ prt_fild07,0,0,0,0 monster Vocal 1088,1,1800000,1200000,0
prt_fild07,225,110,5,5 monster Black Mushroom 1084,3,360000,180000,1
//==================================================
// prt_fild08 - Prontera Field
// prt_fild08 - Prontera Field
//==================================================
prt_fild08,0,0,0,0 monster Poring 1002,140,5000,0,0
prt_fild08,0,0,0,0 monster Lunatic 1063,40,5000,0,0
prt_fild08,0,0,0,0 monster Fabre 1007,40,5000,0,0
prt_fild08,0,0,0,0 monster Poring 1002,110,5000,0,0
prt_fild08,0,0,0,0 monster Lunatic 1063,100,5000,0,0
prt_fild08,0,0,0,0 monster Fabre 1007,100,5000,0,0
prt_fild08,0,0,0,0 monster Little Poring 2398,30,50000,0,0
//==================================================
// prt_fild08 - Duplicates
// prt_fild08 - Duplicates
//==================================================
prt_fild08a,0,0,0,0 monster Poring 1002,140,5000,0,0
prt_fild08b,0,0,0,0 monster Poring 1002,140,5000,0,0
prt_fild08c,0,0,0,0 monster Poring 1002,140,5000,0,0
prt_fild08d,0,0,0,0 monster Poring 1002,140,5000,0,0
prt_fild08a,0,0,0,0 monster Lunatic 1063,40,5000,0,0
prt_fild08b,0,0,0,0 monster Lunatic 1063,40,5000,0,0
prt_fild08c,0,0,0,0 monster Lunatic 1063,40,5000,0,0
prt_fild08d,0,0,0,0 monster Lunatic 1063,40,5000,0,0
prt_fild08a,0,0,0,0 monster Fabre 1007,40,5000,0,0
prt_fild08b,0,0,0,0 monster Fabre 1007,40,5000,0,0
prt_fild08c,0,0,0,0 monster Fabre 1007,40,5000,0,0
prt_fild08d,0,0,0,0 monster Fabre 1007,40,5000,0,0
prt_fild08a,0,0,0,0 monster Poring 1002,110,5000,0,0
prt_fild08a,0,0,0,0 monster Lunatic 1063,100,5000,0,0
prt_fild08a,0,0,0,0 monster Fabre 1007,100,5000,0,0
prt_fild08a,0,0,0,0 monster Little Poring 2398,30,50000,0,0
prt_fild08b,0,0,0,0 monster Poring 1002,110,5000,0,0
prt_fild08b,0,0,0,0 monster Lunatic 1063,100,5000,0,0
prt_fild08b,0,0,0,0 monster Fabre 1007,100,5000,0,0
prt_fild08b,0,0,0,0 monster Little Poring 2398,30,50000,0,0
prt_fild08c,0,0,0,0 monster Poring 1002,110,5000,0,0
prt_fild08c,0,0,0,0 monster Lunatic 1063,100,5000,0,0
prt_fild08c,0,0,0,0 monster Fabre 1007,100,5000,0,0
prt_fild08c,0,0,0,0 monster Little Poring 2398,30,50000,0,0
prt_fild08d,0,0,0,0 monster Poring 1002,110,5000,0,0
prt_fild08d,0,0,0,0 monster Lunatic 1063,100,5000,0,0
prt_fild08d,0,0,0,0 monster Fabre 1007,100,5000,0,0
prt_fild08d,0,0,0,0 monster Little Poring 2398,30,50000,0,0
//==================================================
// prt_fild09 - Prontera Field
// prt_fild09 - Prontera Field
//==================================================
prt_fild09,0,0,0,0 monster Magnolia 1138,140,5000,0,0
prt_fild09,0,0,0,0 monster Metaller 1058,60,5000,0,0
prt_fild09,237,115,5,5 monster Yellow Plant 1081,3,360000,180000,1
//==================================================
// prt_fild10 - Prontera Field
// prt_fild10 - Prontera Field
//==================================================
prt_fild10,0,0,0,0 monster Elder Willow 1033,140,5000,0,0
prt_fild10,0,0,0,0 monster Poporing 1031,20,5000,0,0

View File

@ -28,7 +28,8 @@ npc: npc/re/jobs/3-2/sorcerer.txt
npc: npc/re/jobs/3-2/sura.txt
npc: npc/re/jobs/3-2/wanderer.txt
// - Novice
npc: npc/re/jobs/novice/novice.txt
npc: npc/re/jobs/novice/academy.txt
// npc: npc/re/jobs/novice/novice.txt
npc: npc/re/jobs/novice/supernovice_ex.txt
// - Job Repairs
npc: npc/re/jobs/repair.txt

View File

@ -60,6 +60,21 @@ iz_ac01,78,25,0 warp #to_ac2f01 2,2,iz_ac02,104,27
iz_ac01,122,25,0 warp #to_ac2f02 2,2,iz_ac02,104,27
iz_ac02,94,27,0 warp #to_ac1f01 2,2,iz_ac01,78,28
iz_ac02,113,27,0 warp #to_ac1f02 2,2,iz_ac01,122,28
new_1-3,96,176,0 warp #to_ac01-2 1,1,iz_ac01,49,73
iz_int,96,73,0 script iz_int_iz WARPNPC,2,2,{
end;
OnTouch:
savepoint "izlude", 128, 98;
warp "izlude"+strnpcinfo(2)+"", 195, 209;
end;
}
iz_int01,96,73,0 duplicate(iz_int_iz) iz_int_iz#_a WARPNPC,2,2
iz_int02,96,73,0 duplicate(iz_int_iz) iz_int_iz#_b WARPNPC,2,2
iz_int03,96,73,0 duplicate(iz_int_iz) iz_int_iz#_c WARPNPC,2,2
iz_int04,96,73,0 duplicate(iz_int_iz) iz_int_iz#_d WARPNPC,2,2
//= Izlude Academy Duplicates ================================
izlude_a,125,257,0 warp #to_ac01_a 2,2,iz_ac01_a,99,29

View File

@ -60,7 +60,7 @@ npc: npc/quests/skills/knight_skills.txt
npc: npc/quests/skills/mage_skills.txt
npc: npc/quests/skills/merchant_skills.txt
npc: npc/quests/skills/monk_skills.txt
npc: npc/quests/skills/novice_skills.txt
// npc: npc/quests/skills/novice_skills.txt
npc: npc/quests/skills/priest_skills.txt
npc: npc/quests/skills/rogue_skills.txt
npc: npc/quests/skills/sage_skills.txt

View File

@ -6887,8 +6887,8 @@ REPLACE INTO `item_db_re` VALUES (12841,'Golden_Treasure_Box','Golden Treasure B
REPLACE INTO `item_db_re` VALUES (12842,'Platinum_Treasure_Box','Platinum Treasure Box',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'50',NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12843,'Pearl_Treasure_Box','Pearl Treasure Box',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'60',NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12844,'Diamond_Treasure_Box','Diamond Treasure Box',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'70',NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12845,'WOB_Amatsu','WOB Amatsu',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12846,'Unripe_Apple2','Unripe Apple2',2,10,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12845,'Amatsu_Butterfly_Wing','Amatsu_Butterfly_Wing',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12846,'Little_Unripe_Apple','Little_Unripe_Apple',2,10,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'pet 2398;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12847,'Old_Equipment_Box','Old Equipment Box',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12848,'Falcon_Flute','Falcon Flute',11,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'if(getskilllv("HT_FALCON")) { if(checkoption(Option_Wug)||checkoption(Option_Wugrider)) end; setfalcon (!checkfalcon()); }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12849,'Combination_Kit','Combination Kit',2,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

View File

@ -844,7 +844,7 @@ REPLACE INTO `mob_db_re` VALUES (1721,'DRAGON_EGG','Dragon Egg','Dragon Egg',119
REPLACE INTO `mob_db_re` VALUES (1722,'EVENT_JAKK','Jakk','Jakk',99,10310,0,93,90,1,115,182,8,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000);
REPLACE INTO `mob_db_re` VALUES (1723,'A_SHECIL','Shecil Damon','Cecil Damon',82,30000,0,0,0,14,600,900,40,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db_re` VALUES (1724,'A_POTON_CANON','Photon Cannon','Photon Cannon',66,8000,0,0,0,9,1000,1300,16,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db_re` VALUES (1725,'R_PORING','Poring','Poring',1,50,0,0,0,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x83,150,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db_re` VALUES (1725,'R_PORING','Poring','Poring',1,50,0,0,0,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x81,150,1872,672,480,0,0,0,0,0,0,0,7049,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db_re` VALUES (1726,'R_LUNATIC','Lunatic','Lunatic',3,60,0,0,0,1,9,12,0,20,1,3,3,10,8,60,10,12,0,2,60,0x83,150,1456,456,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db_re` VALUES (1727,'R_SAVAGE_BABE','Savage Babe','Savage Babe',7,182,0,0,0,1,20,25,0,0,1,7,14,5,12,35,10,12,0,2,22,0x83,150,1624,624,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db_re` VALUES (1728,'R_DESERT_WOLF_B','Desert Wolf Baby','Baby Desert Wolf',14,140,1,0,0,1,33,41,13,0,10,12,8,5,28,7,10,12,0,2,23,0x83,150,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

View File

@ -2634,9 +2634,16 @@ void char_set_defaults(){
charserv_config.log_inter = 1; // loggin inter or not [devil]
charserv_config.char_check_db =1;
#ifdef RENEWAL
charserv_config.start_point.map = mapindex_name2id("iz_int");
charserv_config.start_point.x = 97;
charserv_config.start_point.y = 90;
#else
charserv_config.start_point.map = mapindex_name2id("new_zone01"); //mapindex_name2id(MAP_DEFAULT);
charserv_config.start_point.x = 53; //MAP_DEFAULT_X
charserv_config.start_point.y = 111; //MAP_DEFAULT_Y
#endif
charserv_config.console = 0;
charserv_config.max_connect_user = -1;
charserv_config.gm_allow_group = -1;
@ -2740,7 +2747,11 @@ bool char_config_read(const char* cfgName, bool normal){
charserv_config.autosave_interval = DEFAULT_AUTOSAVE_INTERVAL;
} else if (strcmpi(w1, "save_log") == 0) {
charserv_config.save_log = config_switch(w2);
#ifdef RENEWAL
} else if (strcmpi(w1, "start_point") == 0) {
#else
} else if (strcmpi(w1, "start_point_pre") == 0) {
#endif
char map[MAP_NAME_LENGTH_EXT];
short x, y;
if (sscanf(w2, "%15[^,],%6hd,%6hd", map, &x, &y) < 3){

View File

@ -9759,7 +9759,6 @@ void clif_parse_WantToConnection(int fd, struct map_session_data* sd)
/// 007d
void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
{
int i;
bool guild_notice = false;
if(sd->bl.prev != NULL)
@ -10101,19 +10100,9 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
if(!battle_config.pc_invincible_time)
skill_unit_move(&sd->bl,gettick(),1);
// NPC Quest / Event Icon Check [Kisuka]
#if PACKETVER >= 20090218
for(i = 0; i < map[sd->bl.m].qi_count; i++) {
struct questinfo *qi = &map[sd->bl.m].qi_data[i];
if( quest_check(sd, qi->quest_id, HAVEQUEST) == -1 ) {// Check if quest is not started
if( qi->hasJob ) { // Check if quest is job-specific, check is user is said job class.
if( sd->class_ == qi->job )
clif_quest_show_event(sd, &qi->nd->bl, qi->icon, qi->color);
} else {
clif_quest_show_event(sd, &qi->nd->bl, qi->icon, qi->color);
}
}
}
pc_show_questinfo_reinit(sd);
pc_show_questinfo(sd);
#endif
}

View File

@ -2435,6 +2435,8 @@ static int map_instancemap_clean(struct block_list *bl, va_list ap)
return 1;
}
static void map_free_questinfo(int m);
/*==========================================
* Deleting an instance map
*------------------------------------------*/
@ -2456,8 +2458,7 @@ int map_delinstancemap(int m)
aFree(map[m].cell);
aFree(map[m].block);
aFree(map[m].block_mob);
if( map[m].qi_data )
aFree(map[m].qi_data);
map_free_questinfo(m);
mapindex_removemap( map[m].index );
map_removemapdb(&map[m]);
@ -3247,11 +3248,7 @@ void map_flags_init(void)
if( battle_config.pk_mode )
map[i].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris]
if( map[i].qi_data )
aFree(map[i].qi_data);
map[i].qi_data = NULL;
map[i].qi_count = 0;
map_free_questinfo(i);
}
}
@ -3884,35 +3881,105 @@ int log_sql_init(void)
return 0;
}
void map_add_questinfo(int m, struct questinfo *qi) {
struct questinfo *map_add_questinfo(int m, struct questinfo *qi) {
unsigned short i;
/* duplicate, override */
for(i = 0; i < map[m].qi_count; i++) {
if( map[m].qi_data[i].nd == qi->nd )
if( &map[m].qi_data[i] && map[m].qi_data[i].nd == qi->nd && map[m].qi_data[i].quest_id == qi->quest_id)
break;
}
if( i == map[m].qi_count )
RECREATE(map[m].qi_data, struct questinfo, ++map[m].qi_count);
else { // clear previous criteria on override
if (map[m].qi_data[i].jobid)
aFree(map[m].qi_data[i].jobid);
map[m].qi_data[i].jobid = NULL;
map[m].qi_data[i].jobid_count = 0;
if (map[m].qi_data[i].req)
aFree(map[m].qi_data[i].req);
map[m].qi_data[i].req = NULL;
map[m].qi_data[i].req_count = 0;
}
memcpy(&map[m].qi_data[i], qi, sizeof(struct questinfo));
return &map[m].qi_data[i];
}
bool map_remove_questinfo(int m, struct npc_data *nd) {
unsigned short i;
unsigned short i, c;
for(i = 0; i < map[m].qi_count; i++) {
struct questinfo *qi = &map[m].qi_data[i];
if( qi->nd == nd ) {
memset(&map[m].qi_data[i], 0, sizeof(struct questinfo));
if( i != --map[m].qi_count )
memmove(&map[m].qi_data[i],&map[m].qi_data[i+1],sizeof(struct questinfo)*(map[m].qi_count-i));
return true;
if (qi->jobid)
aFree(qi->jobid);
qi->jobid = NULL;
qi->jobid_count = 0;
if (qi->req)
aFree(qi->req);
qi->req = NULL;
qi->req_count = 0;
memset(&map[m].qi_data[i], 0, sizeof(map[m].qi_data[i]));
}
}
return false;
// Move next data to empty slot
for(i = 0, c = 0; i < map[m].qi_count; i++) {
struct questinfo *qi = &map[m].qi_data[i];
if (!qi || !qi->nd)
continue;
if (i != c) {
map[m].qi_data[c] = map[m].qi_data[i];
memset(&map[m].qi_data[i], 0, sizeof(map[m].qi_data[i]));
}
c++;
}
if (!(map[m].qi_count = c)) {
aFree(map[m].qi_data);
map[m].qi_data = NULL;
}
else
RECREATE(map[m].qi_data, struct questinfo, map[m].qi_count);
return true;
}
static void map_free_questinfo(int m) {
unsigned short i;
for(i = 0; i < map[m].qi_count; i++) {
if (map[m].qi_data[i].jobid)
aFree(map[m].qi_data[i].jobid);
map[m].qi_data[i].jobid = NULL;
map[m].qi_data[i].jobid_count = 0;
if (map[m].qi_data[i].req)
aFree(map[m].qi_data[i].req);
map[m].qi_data[i].req = NULL;
map[m].qi_data[i].req_count = 0;
}
aFree(map[m].qi_data);
map[m].qi_data = NULL;
map[m].qi_count = 0;
}
struct questinfo *map_has_questinfo(int m, struct npc_data *nd, int quest_id) {
unsigned short i;
for (i = 0; i < map[m].qi_count; i++) {
struct questinfo *qi = &map[m].qi_data[i];
if (qi->nd == nd && qi->quest_id == quest_id) {
return qi;
}
}
return NULL;
}
/**
@ -4111,13 +4178,13 @@ void do_final(void)
if(map[i].cell) aFree(map[i].cell);
if(map[i].block) aFree(map[i].block);
if(map[i].block_mob) aFree(map[i].block_mob);
if(map[i].qi_data) aFree(map[i].qi_data);
if(battle_config.dynamic_mobs) { //Dynamic mobs flag by [random]
if(map[i].mob_delete_timer != INVALID_TIMER)
delete_timer(map[i].mob_delete_timer, map_removemobs_timer);
for (j=0; j<MAX_MOB_LIST_PER_MAP; j++)
if (map[i].moblist[j]) aFree(map[i].moblist[j]);
}
map_free_questinfo(i);
#ifdef ADJUST_SKILL_DAMAGE
if (map[i].skill_damage.count)
map_skill_damage_free(&map[i]);

View File

@ -620,13 +620,22 @@ struct s_skill_damage {
struct eri *map_skill_damage_ers;
#endif
struct questinfo_req {
unsigned int quest_id;
unsigned state : 2; // 0: Doesn't have, 1: Inactive, 2: Active, 3: Complete //! TODO: CONFIRM ME!!
};
struct questinfo {
struct npc_data *nd;
unsigned short icon;
unsigned char color;
int quest_id;
bool hasJob;
unsigned short job;/* perhaps a mapid mask would be most flexible? */
unsigned short min_level,
max_level;
uint8 req_count;
uint8 jobid_count;
struct questinfo_req *req;
unsigned short *jobid;
};
struct map_data {
@ -880,8 +889,9 @@ struct mob_data * map_id2boss(int id);
// reload config file looking only for npcs
void map_reloadnpc(bool clear);
void map_add_questinfo(int m, struct questinfo *qi);
struct questinfo *map_add_questinfo(int m, struct questinfo *qi);
bool map_remove_questinfo(int m, struct npc_data *nd);
struct questinfo *map_has_questinfo(int m, struct npc_data *nd, int quest_id);
/// Bitfield of flags for the iterator.
enum e_mapitflags

View File

@ -30,6 +30,7 @@
#include "pet.h" // pet_unlocktarget()
#include "party.h" // party_search()
#include "storage.h"
#include "quest.h"
#include <stdlib.h>
#include <math.h>
@ -1200,6 +1201,9 @@ bool pc_authok(struct map_session_data *sd, uint32 login_id2, time_t expiration_
sd->vars_ok = false;
sd->vars_received = 0x0;
sd->qi_display = NULL;
sd->qi_count = 0;
//warp player
if ((i=pc_setpos(sd,sd->status.last_point.map, sd->status.last_point.x, sd->status.last_point.y, CLR_OUTSIGHT)) != 0) {
ShowError ("Last_point_map %s - id %d not found (error code %d)\n", mapindex_id2name(sd->status.last_point.map), sd->status.last_point.map, i);
@ -6257,6 +6261,9 @@ void pc_baselevelchanged(struct map_session_data *sd) {
pc_unequipitem(sd, sd->equip_index[i], 3);
}
}
#if PACKETVER >= 20090218
pc_show_questinfo(sd);
#endif
}
int pc_checkjoblevelup(struct map_session_data *sd)
@ -8251,6 +8258,10 @@ bool pc_jobchange(struct map_session_data *sd,int job, char upper)
pc_checkallowskill(sd);
pc_equiplookall(sd);
#if PACKETVER >= 20090218
pc_show_questinfo(sd);
#endif
//if you were previously famous, not anymore.
if (fame_flag) {
chrif_save(sd,0);
@ -11681,6 +11692,130 @@ void pc_validate_skill(struct map_session_data *sd) {
}
}
/**
* Toggle to remember if the questinfo is displayed yet or not.
* @param qi_display Display flag
* @param show If show is true and qi_display is 0, set qi_display to 1 and show the event bubble.
* If show is false and qi_display is 1, set qi_display to 0 and hide the event bubble.
**/
static void pc_show_questinfo_sub(struct map_session_data *sd, bool *qi_display, struct questinfo *qi, bool show) {
if (show) {
// Check if need to be displayed
if ((*qi_display) != 1) {
(*qi_display) = 1;
clif_quest_show_event(sd, &qi->nd->bl, qi->icon, qi->color);
}
}
else {
// Check if need to be hid
if ((*qi_display) != 0) {
(*qi_display) = 0;
#if PACKETVER >= 20120410
clif_quest_show_event(sd, &qi->nd->bl, 9999, 0);
#else
clif_quest_show_event(sd, &qi->nd->bl, 0, 0);
#endif
}
}
}
#if PACKETVER >= 20090218
/**
* Show available NPC Quest / Event Icon Check [Kisuka]
* @param sd Player
**/
void pc_show_questinfo(struct map_session_data *sd) {
struct questinfo *qi = NULL;
unsigned short i;
uint8 j, state = 0, mystate = 0;
bool failed = false;
nullpo_retv(sd);
if (sd->bl.m < 0 || sd->bl.m >= MAX_MAPINDEX)
return;
if (!map[sd->bl.m].qi_count || !map[sd->bl.m].qi_data)
return;
for(i = 0; i < map[sd->bl.m].qi_count; i++) {
qi = &map[sd->bl.m].qi_data[i];
if (!qi)
continue;
if (quest_check(sd, qi->quest_id, HAVEQUEST) != -1) { // Check if quest is not started
pc_show_questinfo_sub(sd, &sd->qi_display[i], qi, false);
continue;
}
// Level range checks
if (sd->status.base_level < qi->min_level || sd->status.base_level > qi->max_level) {
pc_show_questinfo_sub(sd, &sd->qi_display[i], qi, false);
continue;
}
// Quest requirements
if (qi->req_count) {
failed = false;
for (j = 0; j < qi->req_count; j++) {
//!TODO: Confirm all states means
// Currently only confirmed, if required quest is '0: doesn't have', and '1: have'
// Maybe something like, if (quest_check(sd, qi->req[j].quest_id, HAVEQUEST) + 1 != qi->req[j].state) ?
state = (qi->req[j].state > 0) ? 1 : 0;
mystate = (quest_check(sd, qi->req[j].quest_id, HAVEQUEST) == -1) ? 0 : 1;
if (mystate != state) {
failed = true;
break;
}
}
if (failed) {
pc_show_questinfo_sub(sd, &sd->qi_display[i], qi, false);
continue;
}
}
// Job requirements
if (qi->jobid_count) {
failed = true;
for (j = 0; j < qi->jobid_count; j++) {
if (pc_mapid2jobid(sd->class_,sd->status.sex) == qi->jobid[j]) {
pc_show_questinfo_sub(sd, &sd->qi_display[i], qi, true);
failed = false;
break;
}
}
if (!failed)
continue;
pc_show_questinfo_sub(sd, &sd->qi_display[i], qi, false);
}
else {
pc_show_questinfo_sub(sd, &sd->qi_display[i], qi, true);
}
}
}
/**
* Reinit the questinfo for player when changing map
* @param sd Player
**/
void pc_show_questinfo_reinit(struct map_session_data *sd) {
nullpo_retv(sd);
if (sd->qi_display) {
aFree(sd->qi_display);
sd->qi_display = NULL;
}
sd->qi_count = 0;
if (sd->bl.m < 0 || sd->bl.m >= MAX_MAPINDEX)
return;
if (!map[sd->bl.m].qi_count || !map[sd->bl.m].qi_data)
return;
CREATE(sd->qi_display, bool, (sd->qi_count = map[sd->bl.m].qi_count));
}
#endif
/*==========================================
* pc Init/Terminate
*------------------------------------------*/

View File

@ -557,6 +557,10 @@ struct map_session_data {
struct quest *quest_log; ///< Quest log entries (note: Q_COMPLETE quests follow the first <avail_quests>th enties
bool save_quest; ///< Whether the quest_log entries were modified and are waitin to be saved
/* ShowEvent Data Cache flags from map */
bool *qi_display;
unsigned short qi_count;
// temporary debug [flaviojs]
const char* debug_file;
int debug_line;
@ -1211,6 +1215,11 @@ int pc_autotrade_timer(int tid, unsigned int tick, int id, intptr_t data);
void pc_validate_skill(struct map_session_data *sd);
#if PACKETVER >= 20090218
void pc_show_questinfo(struct map_session_data *sd);
void pc_show_questinfo_reinit(struct map_session_data *sd);
#endif
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
int pc_level_penalty_mod(struct map_session_data *sd, int mob_level, uint32 mob_class, int type);
#endif

View File

@ -18597,7 +18597,16 @@ BUILDIN_FUNC(readbook)
/******************
Questlog script commands
*******************/
/**
* Add job criteria to questinfo
* @param qi Quest Info
* @param job
* @author [Cydh]
**/
static void buildin_questinfo_setjob(struct questinfo *qi, int job) {
RECREATE(qi->jobid, unsigned short, qi->jobid_count+1);
qi->jobid[qi->jobid_count++] = job;
}
/**
* questinfo <Quest ID>,<Icon>{,<Map Mark Color>{,<Job Class>}};
**/
@ -18605,7 +18614,7 @@ BUILDIN_FUNC(questinfo)
{
TBL_NPC* nd = map_id2nd(st->oid);
int quest_id, icon;
struct questinfo qi;
struct questinfo qi, *q2;
if( nd == NULL || nd->bl.m == -1 ) {
ShowError("buildin_questinfo: No NPC attached.\n");
@ -18639,7 +18648,14 @@ BUILDIN_FUNC(questinfo)
qi.color = (unsigned char)color;
}
qi.hasJob = false;
qi.min_level = 1;
qi.max_level = MAX_LEVEL;
q2 = map_add_questinfo(nd->bl.m, &qi);
q2->req = NULL;
q2->req_count = 0;
q2->jobid = NULL;
q2->jobid_count = 0;
if(script_hasdata(st, 5)) {
int job = script_getnum(st, 5);
@ -18647,13 +18663,10 @@ BUILDIN_FUNC(questinfo)
if (!pcdb_checkid(job))
ShowError("buildin_questinfo: Nonexistant Job Class.\n");
else {
qi.hasJob = true;
qi.job = (unsigned short)job;
buildin_questinfo_setjob(q2, job);
}
}
map_add_questinfo(nd->bl.m,&qi);
return SCRIPT_CMD_SUCCESS;
}
@ -18663,7 +18676,6 @@ BUILDIN_FUNC(questinfo)
BUILDIN_FUNC(setquest)
{
struct map_session_data *sd;
unsigned short i;
int quest_id;
quest_id = script_getnum(st, 2);
@ -18673,17 +18685,9 @@ BUILDIN_FUNC(setquest)
quest_add(sd, quest_id);
// If questinfo is set, remove quest bubble once quest is set.
for(i = 0; i < map[sd->bl.m].qi_count; i++) {
struct questinfo *qi = &map[sd->bl.m].qi_data[i];
if( qi->quest_id == quest_id ) {
#if PACKETVER >= 20120410
clif_quest_show_event(sd, &qi->nd->bl, 9999, 0);
#else
clif_quest_show_event(sd, &qi->nd->bl, 0, 0);
pc_show_questinfo(sd);
#endif
}
}
return SCRIPT_CMD_SUCCESS;
}
@ -18712,6 +18716,9 @@ BUILDIN_FUNC(completequest)
return SCRIPT_CMD_FAILURE;
quest_update_status(sd, script_getnum(st, 2), Q_COMPLETE);
#if PACKETVER >= 20120410
pc_show_questinfo(sd);
#endif
return SCRIPT_CMD_SUCCESS;
}
@ -18726,6 +18733,9 @@ BUILDIN_FUNC(changequest)
return SCRIPT_CMD_FAILURE;
quest_change(sd, script_getnum(st, 2),script_getnum(st, 3));
#if PACKETVER >= 20120410
pc_show_questinfo(sd);
#endif
return SCRIPT_CMD_SUCCESS;
}
@ -21170,6 +21180,97 @@ BUILDIN_FUNC(geteleminfo) {
return SCRIPT_CMD_SUCCESS;
}
/**
* Set the quest info of quest_id only showed on player in level range.
* setquestinfo_level <quest_id>,<min_level>,<max_level>
* @author [Cydh]
**/
BUILDIN_FUNC(setquestinfo_level) {
TBL_NPC* nd = map_id2nd(st->oid);
int quest_id = script_getnum(st, 2);
struct questinfo *qi = map_has_questinfo(nd->bl.m, nd, quest_id);
if (!qi) {
ShowError("buildin_setquestinfo_level: Quest with ID '%d' is not defined yet.\n", quest_id);
return SCRIPT_CMD_FAILURE;
}
qi->min_level = script_getnum(st, 3);
qi->max_level = script_getnum(st, 4);
if (!qi->max_level)
qi->max_level = MAX_LEVEL;
return SCRIPT_CMD_SUCCESS;
}
/**
* Set the quest info of quest_id only showed for player that has quest criteria
* setquestinfo_req <quest_id>,<quest_req_id>,<state>{,<quest_req_id>,<state>,...};
* @author [Cydh]
**/
BUILDIN_FUNC(setquestinfo_req) {
TBL_NPC* nd = map_id2nd(st->oid);
int quest_id = script_getnum(st, 2);
struct questinfo *qi = map_has_questinfo(nd->bl.m, nd, quest_id);
uint8 i = 0;
uint8 num = script_lastdata(st)+1;
if (!qi) {
ShowError("buildin_setquestinfo_req: Quest with ID '%d' is not defined yet.\n", quest_id);
return SCRIPT_CMD_FAILURE;
}
if (quest_search(quest_id) == &quest_dummy) {
ShowError("buildin_setquestinfo_req: Quest with ID '%d' is not found in Quest DB.\n", quest_id);
return SCRIPT_CMD_FAILURE;
}
if ((num+1)%2 != 0) {
ShowError("buildin_setquestinfo_req: Odd number of parameters(%d) - pairs of requirements are expected.\n", num);
return SCRIPT_CMD_FAILURE;
}
for (i = 3; i < num; i += 2) {
RECREATE(qi->req, struct questinfo_req, qi->req_count+1);
qi->req[qi->req_count].quest_id = script_getnum(st, i);
qi->req[qi->req_count].state = script_getnum(st, i+1);
qi->req_count++;
}
return SCRIPT_CMD_SUCCESS;
}
/**
* Set the quest info of quest_id only showed for player that has specified Job
* setquestinfo_job <quest_id>,<job>{,<job>...};
* @author [Cydh]
**/
BUILDIN_FUNC(setquestinfo_job) {
TBL_NPC* nd = map_id2nd(st->oid);
int quest_id = script_getnum(st, 2);
struct questinfo *qi = map_has_questinfo(nd->bl.m, nd, quest_id);
int job_id = 0;
uint8 i = 0;
uint8 num = script_lastdata(st)+1;
if (!qi) {
ShowError("buildin_setquestinfo_job: Quest with ID '%d' is not defined yet.\n", quest_id);
return SCRIPT_CMD_FAILURE;
}
for (i = 3; i < num; i++) {
job_id = script_getnum(st, i);
if (!pcdb_checkid(job_id)) {
ShowError("buildin_setquestinfo_job: Invalid job id '%d' in Quest with ID %d.\n", job_id, quest_id);
continue;
}
buildin_questinfo_setjob(qi, job_id);
}
return SCRIPT_CMD_SUCCESS;
}
#include "../custom/script.inc"
// declarations that were supposed to be exported from npc_chat.c
@ -21732,6 +21833,9 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(showscript,"s?"),
BUILDIN_DEF(ignoretimeout,"i?"),
BUILDIN_DEF(geteleminfo,"i?"),
BUILDIN_DEF(setquestinfo_level,"iii"),
BUILDIN_DEF(setquestinfo_req,"iii*"),
BUILDIN_DEF(setquestinfo_job,"ii*"),
#include "../custom/script_def.inc"

View File

@ -3194,6 +3194,12 @@ int unit_free(struct block_list *bl, clr_type clrtype)
sd->num_quests = sd->avail_quests = 0;
}
if (sd->qi_display) {
aFree(sd->qi_display);
sd->qi_display = NULL;
}
sd->qi_count = 0;
// Clearing...
if (sd->bonus_script.head)
pc_bonus_script_clear(sd, BSF_REM_ALL);