Corrected Taekwon Mission mob generator (#3509)

* Fixes #3499.
* Corrected the way target monsters are generated for Taekwon Mission.
* Requires: The mob ID is in the range [MOBID_PORING, MOBID_GREEN_IGUANA], the mob must have below 30,000 HP, the mob must give Base EXP, the mob must be CLASS_NORMAL.
* Added a new mob group: MOBG_Taekwon_Mission
* Removed hard coded checks.
* Created constants for random monster group flags.
Thanks to @mrjnumber1, @Lemongrass3110, and @cydh!
This commit is contained in:
Aleos 2018-09-25 13:32:11 -04:00 committed by GitHub
parent 8fc790339d
commit 7040057a9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 396 additions and 34 deletions

View File

@ -0,0 +1,4 @@
// Taekwon Mission Summonable Monsters Database
//
// Structure of Database:
// MobRandomGroupID,MobID,DummyName,Rate

350
db/mob_mission.txt Normal file
View File

@ -0,0 +1,350 @@
// Taekwon Mission Summonable Monsters Database
//
// Structure of Database:
// MobRandomGroupID,MobID,DummyName,Rate
MOBG_Taekwon_Mission,0,Scorpion,1001
MOBG_Taekwon_Mission,1001,Scorpion,1
MOBG_Taekwon_Mission,1002,Poring,1
MOBG_Taekwon_Mission,1004,Hornet,1
MOBG_Taekwon_Mission,1005,Familiar,1
MOBG_Taekwon_Mission,1007,Fabre,1
MOBG_Taekwon_Mission,1008,Pupa,1
MOBG_Taekwon_Mission,1009,Condor,1
MOBG_Taekwon_Mission,1010,Willow,1
MOBG_Taekwon_Mission,1011,Chonchon,1
MOBG_Taekwon_Mission,1012,Roda Frog,1
MOBG_Taekwon_Mission,1013,Wolf,1
MOBG_Taekwon_Mission,1014,Spore,1
MOBG_Taekwon_Mission,1015,Zombie,1
MOBG_Taekwon_Mission,1016,Archer Skeleton,1
MOBG_Taekwon_Mission,1018,Creamy,1
MOBG_Taekwon_Mission,1019,Peco Peco,1
MOBG_Taekwon_Mission,1020,Mandragora,1
MOBG_Taekwon_Mission,1023,Orc Warrior,1
MOBG_Taekwon_Mission,1024,Wormtail,1
MOBG_Taekwon_Mission,1025,Snake,1
MOBG_Taekwon_Mission,1026,Munak,1
MOBG_Taekwon_Mission,1028,Soldier Skeleton,1
MOBG_Taekwon_Mission,1029,Isis,1
MOBG_Taekwon_Mission,1030,Anacondaq,1
MOBG_Taekwon_Mission,1031,Poporing,1
MOBG_Taekwon_Mission,1032,Verit,1
MOBG_Taekwon_Mission,1033,Elder Willow,1
MOBG_Taekwon_Mission,1034,Thara Frog,1
MOBG_Taekwon_Mission,1035,Hunter Fly,1
MOBG_Taekwon_Mission,1036,Ghoul,1
MOBG_Taekwon_Mission,1037,Side Winder,1
MOBG_Taekwon_Mission,1040,Golem,1
MOBG_Taekwon_Mission,1041,Mummy,1
MOBG_Taekwon_Mission,1042,Steel Chonchon,1
MOBG_Taekwon_Mission,1044,Obeaune,1
MOBG_Taekwon_Mission,1045,Marc,1
MOBG_Taekwon_Mission,1047,Peco Peco Egg,1
MOBG_Taekwon_Mission,1048,Thief Bug Egg,1
MOBG_Taekwon_Mission,1049,Picky,1
MOBG_Taekwon_Mission,1050,Picky,1
MOBG_Taekwon_Mission,1051,Thief Bug,1
MOBG_Taekwon_Mission,1052,Rocker,1
MOBG_Taekwon_Mission,1053,Thief Bug Female,1
MOBG_Taekwon_Mission,1054,Thief Bug Male,1
MOBG_Taekwon_Mission,1055,Muka,1
MOBG_Taekwon_Mission,1056,Smokie,1
MOBG_Taekwon_Mission,1057,Yoyo,1
MOBG_Taekwon_Mission,1058,Metaller,1
MOBG_Taekwon_Mission,1060,Bigfoot,1
MOBG_Taekwon_Mission,1061,Nightmare,1
MOBG_Taekwon_Mission,1062,Santa Poring,1
MOBG_Taekwon_Mission,1063,Lunatic,1
MOBG_Taekwon_Mission,1064,Megalodon,1
MOBG_Taekwon_Mission,1065,Strouf,1
MOBG_Taekwon_Mission,1066,Vadon,1
MOBG_Taekwon_Mission,1067,Cornutus,1
MOBG_Taekwon_Mission,1068,Hydra,1
MOBG_Taekwon_Mission,1069,Swordfish,1
MOBG_Taekwon_Mission,1070,Kukre,1
MOBG_Taekwon_Mission,1071,Pirate Skeleton,1
MOBG_Taekwon_Mission,1072,Kaho,1
MOBG_Taekwon_Mission,1073,Crab,1
MOBG_Taekwon_Mission,1074,Shellfish,1
MOBG_Taekwon_Mission,1076,Skeleton,1
MOBG_Taekwon_Mission,1077,Poison Spore,1
MOBG_Taekwon_Mission,1088,Vocal,1
MOBG_Taekwon_Mission,1089,Toad,1
MOBG_Taekwon_Mission,1090,Mastering,1
MOBG_Taekwon_Mission,1091,Dragon Fly,1
MOBG_Taekwon_Mission,1092,Vagabond Wolf,1
MOBG_Taekwon_Mission,1093,Eclipse,1
MOBG_Taekwon_Mission,1094,Ambernite,1
MOBG_Taekwon_Mission,1095,Andre,1
MOBG_Taekwon_Mission,1096,Angeling,1
MOBG_Taekwon_Mission,1097,Ant Egg,1
MOBG_Taekwon_Mission,1098,Anubis,1
MOBG_Taekwon_Mission,1099,Argiope,1
MOBG_Taekwon_Mission,1100,Argos,1
MOBG_Taekwon_Mission,1101,Baphomet Jr.,1
MOBG_Taekwon_Mission,1102,Bathory,1
MOBG_Taekwon_Mission,1103,Caramel,1
MOBG_Taekwon_Mission,1104,Coco,1
MOBG_Taekwon_Mission,1105,Deniro,1
MOBG_Taekwon_Mission,1106,Desert Wolf,1
MOBG_Taekwon_Mission,1107,Desert Wolf Baby,1
MOBG_Taekwon_Mission,1108,Deviace,1
MOBG_Taekwon_Mission,1109,Deviruchi,1
MOBG_Taekwon_Mission,1110,Dokebi,1
MOBG_Taekwon_Mission,1111,Drainliar,1
MOBG_Taekwon_Mission,1113,Drops,1
MOBG_Taekwon_Mission,1114,Dustiness,1
MOBG_Taekwon_Mission,1116,Eggyra,1
MOBG_Taekwon_Mission,1117,Evil Druid,1
MOBG_Taekwon_Mission,1118,Flora,1
MOBG_Taekwon_Mission,1119,Frilldora,1
MOBG_Taekwon_Mission,1120,Ghostring,1
MOBG_Taekwon_Mission,1121,Giearth,1
MOBG_Taekwon_Mission,1122,Goblin,1
MOBG_Taekwon_Mission,1123,Goblin,1
MOBG_Taekwon_Mission,1124,Goblin,1
MOBG_Taekwon_Mission,1125,Goblin,1
MOBG_Taekwon_Mission,1126,Goblin,1
MOBG_Taekwon_Mission,1127,Hode,1
MOBG_Taekwon_Mission,1128,Horn,1
MOBG_Taekwon_Mission,1129,Horong,1
MOBG_Taekwon_Mission,1130,Jakk,1
MOBG_Taekwon_Mission,1131,Joker,1
MOBG_Taekwon_Mission,1132,Khalitzburg,1
MOBG_Taekwon_Mission,1133,Kobold,1
MOBG_Taekwon_Mission,1134,Kobold,1
MOBG_Taekwon_Mission,1135,Kobold,1
MOBG_Taekwon_Mission,1138,Magnolia,1
MOBG_Taekwon_Mission,1139,Mantis,1
MOBG_Taekwon_Mission,1140,Marduk,1
MOBG_Taekwon_Mission,1141,Marina,1
MOBG_Taekwon_Mission,1142,Marine Sphere,1
MOBG_Taekwon_Mission,1143,Marionette,1
MOBG_Taekwon_Mission,1144,Marse,1
MOBG_Taekwon_Mission,1145,Martin,1
MOBG_Taekwon_Mission,1146,Matyr,1
MOBG_Taekwon_Mission,1148,Medusa,1
MOBG_Taekwon_Mission,1149,Minorous,1
MOBG_Taekwon_Mission,1151,Myst,1
MOBG_Taekwon_Mission,1152,Orc Skeleton,1
MOBG_Taekwon_Mission,1153,Orc Zombie,1
MOBG_Taekwon_Mission,1154,Pasana,1
MOBG_Taekwon_Mission,1155,Petite,1
MOBG_Taekwon_Mission,1156,Petite,1
MOBG_Taekwon_Mission,1158,Phen,1
MOBG_Taekwon_Mission,1160,Piere,1
MOBG_Taekwon_Mission,1161,Plankton,1
MOBG_Taekwon_Mission,1162,Rafflesia,1
MOBG_Taekwon_Mission,1163,Raydric,1
MOBG_Taekwon_Mission,1164,Requiem,1
MOBG_Taekwon_Mission,1165,Sandman,1
MOBG_Taekwon_Mission,1166,Savage,1
MOBG_Taekwon_Mission,1167,Savage Babe,1
MOBG_Taekwon_Mission,1169,Skeleton Worker,1
MOBG_Taekwon_Mission,1170,Sohee,1
MOBG_Taekwon_Mission,1174,Stainer,1
MOBG_Taekwon_Mission,1175,Tarou,1
MOBG_Taekwon_Mission,1176,Vitata,1
MOBG_Taekwon_Mission,1177,Zenorc,1
MOBG_Taekwon_Mission,1178,Zerom,1
MOBG_Taekwon_Mission,1179,Whisper,1
MOBG_Taekwon_Mission,1180,Nine Tail,1
MOBG_Taekwon_Mission,1183,Chonchon,1
MOBG_Taekwon_Mission,1184,Fabre,1
MOBG_Taekwon_Mission,1185,Whisper,1
MOBG_Taekwon_Mission,1186,Giant Whisper,1
MOBG_Taekwon_Mission,1188,Bongun,1
MOBG_Taekwon_Mission,1189,Orc Archer,1
MOBG_Taekwon_Mission,1191,Mimic,1
MOBG_Taekwon_Mission,1192,Wraith,1
MOBG_Taekwon_Mission,1193,Alarm,1
MOBG_Taekwon_Mission,1194,Arclouse,1
MOBG_Taekwon_Mission,1195,Rideword,1
MOBG_Taekwon_Mission,1196,Skeleton Prisoner,1
MOBG_Taekwon_Mission,1197,Zombie Prisoner,1
MOBG_Taekwon_Mission,1198,Dark Priest,1
MOBG_Taekwon_Mission,1199,Punk,1
MOBG_Taekwon_Mission,1201,Rybio,1
MOBG_Taekwon_Mission,1202,Phendark,1
MOBG_Taekwon_Mission,1206,Anolian,1
MOBG_Taekwon_Mission,1207,Sting,1
MOBG_Taekwon_Mission,1208,Wander Man,1
MOBG_Taekwon_Mission,1209,Cramp,1
MOBG_Taekwon_Mission,1211,Brilight,1
MOBG_Taekwon_Mission,1212,Iron Fist,1
MOBG_Taekwon_Mission,1213,High Orc,1
MOBG_Taekwon_Mission,1214,Choco,1
MOBG_Taekwon_Mission,1215,Stem Worm,1
MOBG_Taekwon_Mission,1216,Penomena,1
MOBG_Taekwon_Mission,1219,Knight of Abyss,1
MOBG_Taekwon_Mission,1248,Cruiser,1
MOBG_Taekwon_Mission,1249,Myst Case,1
MOBG_Taekwon_Mission,1250,Chepet,1
MOBG_Taekwon_Mission,1253,Gargoyle,1
MOBG_Taekwon_Mission,1254,Raggler,1
MOBG_Taekwon_Mission,1255,Neraid,1
MOBG_Taekwon_Mission,1256,Pest,1
MOBG_Taekwon_Mission,1257,Injustice,1
MOBG_Taekwon_Mission,1258,Goblin Archer,1
MOBG_Taekwon_Mission,1260,Dark Frame,1
MOBG_Taekwon_Mission,1261,Wild Rose,1
MOBG_Taekwon_Mission,1263,Wind Ghost,1
MOBG_Taekwon_Mission,1264,Merman,1
MOBG_Taekwon_Mission,1265,Cookie,1
MOBG_Taekwon_Mission,1266,Aster,1
MOBG_Taekwon_Mission,1267,Carat,1
MOBG_Taekwon_Mission,1269,Clock,1
MOBG_Taekwon_Mission,1270,Clock Tower Manager,1
MOBG_Taekwon_Mission,1271,Alligator,1
MOBG_Taekwon_Mission,1273,Orc Lady,1
MOBG_Taekwon_Mission,1274,Megalith,1
MOBG_Taekwon_Mission,1275,Alice,1
MOBG_Taekwon_Mission,1276,Raydric Archer,1
MOBG_Taekwon_Mission,1277,Greatest General,1
MOBG_Taekwon_Mission,1278,Stalactic Golem,1
MOBG_Taekwon_Mission,1279,Tri Joint,1
MOBG_Taekwon_Mission,1280,Steam Goblin,1
MOBG_Taekwon_Mission,1281,Sage Worm,1
MOBG_Taekwon_Mission,1282,Kobold Archer,1
MOBG_Taekwon_Mission,1283,Chimera,1
MOBG_Taekwon_Mission,1285,Archer Guardian,1
MOBG_Taekwon_Mission,1287,Soldier Guardian,1
MOBG_Taekwon_Mission,1290,Skeleton General,1
MOBG_Taekwon_Mission,1291,Wraith Dead,1
MOBG_Taekwon_Mission,1292,Mini Demon,1
MOBG_Taekwon_Mission,1293,Creamy Fear,1
MOBG_Taekwon_Mission,1294,Killer Mantis,1
MOBG_Taekwon_Mission,1295,Owl Baron,1
MOBG_Taekwon_Mission,1296,Kobold Leader,1
MOBG_Taekwon_Mission,1297,Ancient Mummy,1
MOBG_Taekwon_Mission,1298,Zombie Master,1
MOBG_Taekwon_Mission,1299,Goblin Leader,1
MOBG_Taekwon_Mission,1300,Caterpillar,1
MOBG_Taekwon_Mission,1301,Am Mut,1
MOBG_Taekwon_Mission,1302,Dark Illusion,1
MOBG_Taekwon_Mission,1303,Giant Hornet,1
MOBG_Taekwon_Mission,1304,Giant Spider,1
MOBG_Taekwon_Mission,1305,Ancient Worm,1
MOBG_Taekwon_Mission,1306,Leib Olmai,1
MOBG_Taekwon_Mission,1307,Cat o' Nine Tails,1
MOBG_Taekwon_Mission,1308,Panzer Goblin,1
MOBG_Taekwon_Mission,1309,Gajomart,1
MOBG_Taekwon_Mission,1310,Majoruros,1
MOBG_Taekwon_Mission,1311,Gullinbursti,1
MOBG_Taekwon_Mission,1313,Mobster,1
MOBG_Taekwon_Mission,1314,Permeter,1
MOBG_Taekwon_Mission,1315,Assaulter,1
MOBG_Taekwon_Mission,1316,Solider,1
MOBG_Taekwon_Mission,1317,Fur Seal,1
MOBG_Taekwon_Mission,1318,Heater,1
MOBG_Taekwon_Mission,1319,Freezer,1
MOBG_Taekwon_Mission,1320,Owl Duke,1
MOBG_Taekwon_Mission,1321,Dragon Tail,1
MOBG_Taekwon_Mission,1322,Spring Rabbit,1
MOBG_Taekwon_Mission,1323,Sea Otter,1
MOBG_Taekwon_Mission,1365,Apocalypse,1
MOBG_Taekwon_Mission,1366,Lava Golem,1
MOBG_Taekwon_Mission,1367,Blazer,1
MOBG_Taekwon_Mission,1368,Geographer,1
MOBG_Taekwon_Mission,1369,Grand Peco,1
MOBG_Taekwon_Mission,1370,Succubus,1
MOBG_Taekwon_Mission,1371,Fake Angel,1
MOBG_Taekwon_Mission,1372,Goat,1
MOBG_Taekwon_Mission,1374,Incubus,1
MOBG_Taekwon_Mission,1375,The Paper,1
MOBG_Taekwon_Mission,1376,Harpy,1
MOBG_Taekwon_Mission,1377,Elder,1
MOBG_Taekwon_Mission,1378,Demon Pungus,1
MOBG_Taekwon_Mission,1379,Nightmare Terror,1
MOBG_Taekwon_Mission,1380,Driller,1
MOBG_Taekwon_Mission,1381,Grizzly,1
MOBG_Taekwon_Mission,1382,Diabolic,1
MOBG_Taekwon_Mission,1383,Explosion,1
MOBG_Taekwon_Mission,1384,Deleter,1
MOBG_Taekwon_Mission,1385,Deleter,1
MOBG_Taekwon_Mission,1386,Sleeper,1
MOBG_Taekwon_Mission,1387,Gig,1
MOBG_Taekwon_Mission,1388,Archangeling,1
MOBG_Taekwon_Mission,1390,Violy,1
MOBG_Taekwon_Mission,1391,Galapago,1
MOBG_Taekwon_Mission,1392,Rotar Zairo,1
MOBG_Taekwon_Mission,1400,Karakasa,1
MOBG_Taekwon_Mission,1401,Shinobi,1
MOBG_Taekwon_Mission,1402,Poison Toad,1
MOBG_Taekwon_Mission,1403,Antique Firelock,1
MOBG_Taekwon_Mission,1404,Miyabi Ningyo,1
MOBG_Taekwon_Mission,1405,Tengu,1
MOBG_Taekwon_Mission,1406,Kapha,1
MOBG_Taekwon_Mission,1408,Bloody Butterfly,1
MOBG_Taekwon_Mission,1409,Rice Cake Boy,1
MOBG_Taekwon_Mission,1410,Live Peach Tree,1
MOBG_Taekwon_Mission,1412,Evil Cloud Hermit,1
MOBG_Taekwon_Mission,1413,Wild Ginseng,1
MOBG_Taekwon_Mission,1415,Baby Leopard,1
MOBG_Taekwon_Mission,1416,Wicked Nymph,1
MOBG_Taekwon_Mission,1417,Zipper Bear,1
MOBG_Taekwon_Mission,1493,Dryad,1
MOBG_Taekwon_Mission,1494,Beetle King,1
MOBG_Taekwon_Mission,1495,Stone Shooter,1
MOBG_Taekwon_Mission,1497,Wooden Golem,1
MOBG_Taekwon_Mission,1498,Wootan Shooter,1
MOBG_Taekwon_Mission,1499,Wootan Fighter,1
MOBG_Taekwon_Mission,1500,Parasite,1
MOBG_Taekwon_Mission,1503,Gibbet,1
MOBG_Taekwon_Mission,1504,Dullahan,1
MOBG_Taekwon_Mission,1505,Loli Ruri,1
MOBG_Taekwon_Mission,1506,Disguise,1
MOBG_Taekwon_Mission,1507,Bloody Murderer,1
MOBG_Taekwon_Mission,1508,Quve,1
MOBG_Taekwon_Mission,1509,Lude,1
MOBG_Taekwon_Mission,1510,Hylozoist,1
MOBG_Taekwon_Mission,1512,Hyegun,1
MOBG_Taekwon_Mission,1513,Civil Servant,1
MOBG_Taekwon_Mission,1514,Dancing Dragon,1
MOBG_Taekwon_Mission,1515,Garm Baby,1
MOBG_Taekwon_Mission,1516,Increase Soil,1
MOBG_Taekwon_Mission,1517,Li Me Mang Ryang,1
MOBG_Taekwon_Mission,1519,Chung E,1
MOBG_Taekwon_Mission,1520,Boiled Rice,1
MOBG_Taekwon_Mission,1582,Deviling,1
MOBG_Taekwon_Mission,1584,Tamruan,1
MOBG_Taekwon_Mission,1585,Mime Monkey,1
MOBG_Taekwon_Mission,1586,Leaf Cat,1
MOBG_Taekwon_Mission,1587,Kraben,1
MOBG_Taekwon_Mission,1588,Christmas Orc,1
MOBG_Taekwon_Mission,1609,Dancing Dragon,1
MOBG_Taekwon_Mission,1613,Metaling,1
MOBG_Taekwon_Mission,1614,Mineral,1
MOBG_Taekwon_Mission,1615,Obsidian,1
MOBG_Taekwon_Mission,1616,Pitman,1
MOBG_Taekwon_Mission,1617,Waste Stove,1
MOBG_Taekwon_Mission,1618,Ungoliant,1
MOBG_Taekwon_Mission,1619,Porcellio,1
MOBG_Taekwon_Mission,1620,Noxious,1
MOBG_Taekwon_Mission,1621,Venomous,1
MOBG_Taekwon_Mission,1622,Teddy Bear,1
MOBG_Taekwon_Mission,1625,Porcellio,1
MOBG_Taekwon_Mission,1626,Hellion Revenant,1
MOBG_Taekwon_Mission,1627,Anopheles,1
MOBG_Taekwon_Mission,1628,Mole,1
MOBG_Taekwon_Mission,1629,Hill Wind,1
MOBG_Taekwon_Mission,1631,Chung E,1
MOBG_Taekwon_Mission,1632,Gremlin,1
MOBG_Taekwon_Mission,1633,Beholder,1
MOBG_Taekwon_Mission,1664,Photon Cannon,1
MOBG_Taekwon_Mission,1665,Photon Cannon,1
MOBG_Taekwon_Mission,1666,Photon Cannon,1
MOBG_Taekwon_Mission,1667,Photon Cannon,1
MOBG_Taekwon_Mission,1668,Archdam,1
MOBG_Taekwon_Mission,1670,Dimik,1
MOBG_Taekwon_Mission,1671,Dimik,1
MOBG_Taekwon_Mission,1672,Dimik,1
MOBG_Taekwon_Mission,1673,Dimik,1
MOBG_Taekwon_Mission,1676,Venatu,1
MOBG_Taekwon_Mission,1677,Venatu,1
MOBG_Taekwon_Mission,1678,Venatu,1
MOBG_Taekwon_Mission,1679,Venatu,1
MOBG_Taekwon_Mission,1680,Hill Wind,1
MOBG_Taekwon_Mission,1686,Orc Baby,1
MOBG_Taekwon_Mission,1687,Green Iguana,1

View File

@ -346,6 +346,7 @@
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_drop.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_drop.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_item_ratio.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_item_ratio.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_poring.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_poring.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_mission.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_mission.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_pouch.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_pouch.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_race2_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_race2_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\mob_random_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\mob_random_db.txt')" />

View File

@ -482,27 +482,19 @@ struct mob_data* mob_spawn_dataset(struct spawn_data *data)
/*==========================================
* Fetches a random mob_id [Skotlex]
* type: Where to fetch from:
* 0: dead branch list
* 1: poring list
* 2: bloody branch list
* flag:
* &1 : Apply the summon success chance found in the list (otherwise get any monster from the db)
* &2 : Apply a monster check level.
* &4 : Selected monster should not be a boss type (except those from MOBG_Bloody_Dead_Branch)
* &8 : Selected monster must have normal spawn.
* &16: Selected monster should not be a plant type
* type: Where to fetch from (see enum e_random_monster)
* flag: Type of checks to apply (see enum e_random_monster_flags)
* lv: Mob level to check against
*------------------------------------------*/
int mob_get_random_id(int type, int flag, int lv)
int mob_get_random_id(int type, enum e_random_monster_flags flag, int lv)
{
struct mob_db *mob;
int i = 0, mob_id = 0, rand = 0;
struct s_randomsummon_group *msummon = (struct s_randomsummon_group *)idb_get(mob_summon_db, type);
struct s_randomsummon_entry *entry = nullptr;
if (type == MOBG_Bloody_Dead_Branch)
flag &= ~4;
if (type == MOBG_Bloody_Dead_Branch && flag&RMF_MOB_NOT_BOSS)
flag = static_cast<e_random_monster_flags>(flag&~RMF_MOB_NOT_BOSS);
if (!msummon) {
ShowError("mob_get_random_id: Invalid type (%d) of random monster.\n", type);
@ -521,11 +513,11 @@ int mob_get_random_id(int type, int flag, int lv)
} while ((rand == 0 || // Skip default first
mob == nullptr ||
mob_is_clone(mob_id) ||
(flag&0x01 && (entry->rate < 1000000 && entry->rate <= rnd() % 1000000)) ||
(flag&0x02 && lv < mob->lv) ||
(flag&0x04 && status_has_mode(&mob->status,MD_STATUS_IMMUNE) ) ||
(flag&0x08 && !mob_has_spawn(mob_id)) ||
(flag&0x10 && status_has_mode(&mob->status,MD_IGNOREMELEE|MD_IGNOREMAGIC|MD_IGNORERANGED|MD_IGNOREMISC) )
(flag&RMF_DB_RATE && (entry->rate < 1000000 && entry->rate <= rnd() % 1000000)) ||
(flag&RMF_CHECK_MOB_LV && lv < mob->lv) ||
(flag&RMF_MOB_NOT_BOSS && status_has_mode(&mob->status,MD_STATUS_IMMUNE) ) ||
(flag&RMF_MOB_NOT_SPAWN && !mob_has_spawn(mob_id)) ||
(flag&RMF_MOB_NOT_PLANT && status_has_mode(&mob->status,MD_IGNOREMELEE|MD_IGNOREMAGIC|MD_IGNORERANGED|MD_IGNOREMISC) )
) && (i++) < MAX_MOB_DB && msummon->count > 1);
if (i >= MAX_MOB_DB && &msummon->list[0]) {
@ -678,7 +670,7 @@ int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const
for (count = 0; count < amount; count++)
{
int c = (mob_id >= 0) ? mob_id : mob_get_random_id(-mob_id - 1, (battle_config.random_monster_checklv) ? 3 : 1, lv);
int c = (mob_id >= 0) ? mob_id : mob_get_random_id(-mob_id - 1, (battle_config.random_monster_checklv) ? static_cast<e_random_monster_flags>(RMF_DB_RATE|RMF_CHECK_MOB_LV) : RMF_DB_RATE, lv);
md = mob_once_spawn_sub((sd) ? &sd->bl : NULL, m, x, y, mobname, c, event, size, ai);
if (!md)
@ -843,7 +835,7 @@ int mob_spawn_guardian(const char* mapname, int16 x, int16 y, const char* mobnam
data.m = m;
data.num = 1;
if(mob_id<=0) {
mob_id = mob_get_random_id(-mob_id-1, 1, 99);
mob_id = mob_get_random_id(-mob_id-1, RMF_DB_RATE, 0);
if (!mob_id) return 0;
}
@ -945,7 +937,7 @@ int mob_spawn_bg(const char* mapname, int16 x, int16 y, const char* mobname, int
data.num = 1;
if( mob_id <= 0 )
{
mob_id = mob_get_random_id(-mob_id-1,1,99);
mob_id = mob_get_random_id(-mob_id-1, RMF_DB_RATE, 0);
if( !mob_id ) return 0;
}
@ -2969,7 +2961,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
(battle_config.taekwon_mission_mobname == 1 && mission_mdb && status_get_race2(&md->bl) == RC2_GOBLIN && mission_mdb->race2 == RC2_GOBLIN) ||
(battle_config.taekwon_mission_mobname == 2 && mob_is_samename(md, sd->mission_mobid)))
{ //TK_MISSION [Skotlex]
if (++(sd->mission_count) >= 100 && (temp = mob_get_random_id(MOBG_Branch_Of_Dead_Tree, 0xE, sd->status.base_level)))
if (++(sd->mission_count) >= 100 && (temp = mob_get_random_id(MOBG_Branch_Of_Dead_Tree, static_cast<e_random_monster_flags>(RMF_CHECK_MOB_LV|RMF_MOB_NOT_BOSS|RMF_MOB_NOT_SPAWN), sd->status.base_level)))
{
pc_addfame(sd, battle_config.fame_taekwon_mission);
sd->mission_mobid = temp;
@ -5280,6 +5272,7 @@ static void mob_load(void)
sv_readdb(dbsubpath2, "mob_poring.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
sv_readdb(dbsubpath2, "mob_boss.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
sv_readdb(dbsubpath1, "mob_pouch.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
sv_readdb(dbsubpath1, "mob_mission.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
sv_readdb(dbsubpath1, "mob_classchange.txt", ',', 4, 4, -1, &mob_readdb_group, silent);
sv_readdb(dbsubpath2, "mob_drop.txt", ',', 3, 5, -1, &mob_readdb_drop, silent);

View File

@ -101,13 +101,25 @@ enum size {
SZ_MAX
};
/// Used hardcoded Random Monster group in src
enum e_Random_Monster {
MOBG_Branch_Of_Dead_Tree = 0,
MOBG_Poring_Box = 1,
MOBG_Bloody_Dead_Branch = 2,
MOBG_Red_Pouch_Of_Surprise = 3,
MOBG_ClassChange = 4,
/// Random Monster Groups
enum e_random_monster : uint16 {
MOBG_Branch_Of_Dead_Tree = 0,
MOBG_Poring_Box,
MOBG_Bloody_Dead_Branch,
MOBG_Red_Pouch_Of_Surprise,
MOBG_ClassChange,
MOBG_Taekwon_Mission,
};
/// Random Monster Group Flags
enum e_random_monster_flags {
RMF_NONE = 0x00, ///< Apply no flags
RMF_DB_RATE = 0x01, ///< Apply the summon success chance found in the list (otherwise get any monster from the db)
RMF_CHECK_MOB_LV = 0x02, ///< Apply a monster level check
RMF_MOB_NOT_BOSS = 0x04, ///< Selected monster should not be a Boss type (except those from MOBG_Bloody_Dead_Branch)
RMF_MOB_NOT_SPAWN = 0x08, ///< Selected monster must have normal spawn
RMF_MOB_NOT_PLANT = 0x10, ///< Selected monster should not be a Plant type
RMF_ALL = 0xFF, ///< Apply all flags
};
struct mob_skill {
@ -336,7 +348,7 @@ TIMER_FUNC(mob_timer_delete);
int mob_deleteslave(struct mob_data *md);
int mob_random_class (int *value, size_t count);
int mob_get_random_id(int type, int flag, int lv);
int mob_get_random_id(int type, enum e_random_monster_flags flag, int lv);
int mob_class_change(struct mob_data *md,int mob_id);
int mob_warpslave(struct block_list *bl, int range);
int mob_linksearch(struct block_list *bl,va_list ap);

View File

@ -4416,6 +4416,7 @@
export_constant(MOBG_Bloody_Dead_Branch);
export_constant(MOBG_Red_Pouch_Of_Surprise);
export_constant(MOBG_ClassChange);
export_constant(MOBG_Taekwon_Mission);
/* Item Random Option Group */
export_constant(RDMOPTG_None);

View File

@ -2188,7 +2188,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
dstmd && !status_has_mode(tstatus,MD_STATUS_IMMUNE) &&
(rnd()%10000 < sd->bonus.classchange))
{
int class_ = mob_get_random_id(MOBG_Branch_Of_Dead_Tree, 1, 0);
int class_ = mob_get_random_id(MOBG_Branch_Of_Dead_Tree, RMF_DB_RATE, 0);
if (class_ != 0 && mobdb_checkid(class_))
mob_class_change(dstmd,class_);
}
@ -6504,7 +6504,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
break;
}
class_ = (skill_id == SA_MONOCELL ? MOBID_PORING : mob_get_random_id(MOBG_ClassChange, 1, 0));
class_ = (skill_id == SA_MONOCELL ? MOBID_PORING : mob_get_random_id(MOBG_ClassChange, RMF_DB_RATE, 0));
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
mob_class_change(dstmd,class_);
if( tsc && status_has_mode(&dstmd->status,MD_STATUS_IMMUNE) ) {
@ -6894,13 +6894,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case TK_MISSION:
if (sd) {
int id;
if (sd->mission_mobid && (sd->mission_count || rnd()%100)) { //Cannot change target when already have one
clif_mission_info(sd, sd->mission_mobid, sd->mission_count);
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
break;
}
id = mob_get_random_id(MOBG_Branch_Of_Dead_Tree,0xF, sd->status.base_level);
int id = mob_get_random_id(MOBG_Taekwon_Mission, RMF_NONE, 0);
if (!id) {
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
break;