1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-29 07:37:45 +00:00

Working towards getting bnpcs back in the game

This commit is contained in:
Mordred 2018-09-09 23:56:22 +02:00
parent d221758355
commit 0d767e4986
50 changed files with 901 additions and 1552 deletions

File diff suppressed because it is too large Load diff

244
sql/bnpctemplate.sql Normal file
View file

@ -0,0 +1,244 @@
--
-- Table structure for table `bnpctemplate`
--
DROP TABLE IF EXISTS `bnpctemplate`;
CREATE TABLE `bnpctemplate` (
`Id` int(10) NOT NULL,
`Name` varchar(32) NOT NULL,
`bNPCBaseId` int(10) DEFAULT NULL,
`bNPCNameId` int(10) NOT NULL,
`mainWeaponModel` int(20) DEFAULT NULL,
`secWeaponModel` int(10) DEFAULT NULL,
`aggressionMode` int(3) DEFAULT NULL,
`enemyType` int(3) DEFAULT NULL,
`pose` int(3) DEFAULT NULL,
`modelChara` int(5) DEFAULT NULL,
`displayFlags` int(10) DEFAULT NULL,
`Look` binary(26) DEFAULT NULL,
`Models` binary(40) DEFAULT NULL,
PRIMARY KEY (`Id`),
KEY `Name` (`Name`),
KEY `bNPCBaseId` (`bNPCBaseId`),
KEY `bNPCNameId` (`bNPCNameId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER TABLE `bnpctemplate`
ADD PRIMARY KEY (`Id`),
ADD UNIQUE KEY `bNPCBaseId_2` (`bNPCBaseId`,`bNPCNameId`),
ADD KEY `Name` (`Name`),
ADD KEY `bNPCBaseId` (`bNPCBaseId`),
ADD KEY `bNPCNameId` (`bNPCNameId`);
INSERT INTO `bnpctemplate` (`Id`, `Name`, `bNPCBaseId`, `bNPCNameId`, `mainWeaponModel`, `secWeaponModel`, `aggressionMode`, `enemyType`, `pose`, `modelChara`, `displayFlags`, `Look`, `Models`) VALUES
(4, 'beecloud_57', 57, 395, 0, 0, 1, 4, 4, 60, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(3, 'littleladybug_49', 49, 49, 0, 0, 1, 4, 4, 57, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(5, 'watersprite_59', 59, 56, 0, 0, 1, 4, 4, 385, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(6, 'tinymandragora_118', 118, 405, 0, 0, 1, 4, 4, 297, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(7, 'wildjackal_138', 138, 399, 0, 0, 2, 4, 4, 160, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(8, 'woundedaurochs_323', 323, 358, 0, 0, 2, 4, 4, 138, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(9, 'megalocrab_326', 326, 561, 0, 0, 1, 4, 4, 148, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(10, 'lostlamb_338', 338, 392, 0, 0, 1, 4, 4, 287, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(11, 'pukhatchling_341', 341, 401, 0, 0, 1, 4, 4, 130, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(12, 'bogy_342', 342, 404, 0, 0, 1, 4, 4, 264, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(13, 'wharfrat_347', 347, 417, 0, 0, 1, 4, 4, 24, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(14, 'groundedpirate_348', 348, 421, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0100013201050601623b32000001013b83010102004b004b0001, 0x170032000a000512000001000a000100080059000000000000000000000000000000000000000000),
(15, 'groundedraider_349', 349, 418, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100013201040c01300305000001010304040302004b00320001, 0x170032000a000512000001000a000100080059000000000000000000000000000000000000000000),
(16, 'CaptainPetyrPigeontoe_350', 350, 419, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100014b010304016b3b2b000001023b83000200006400320001, 0x170032000a000512000001000a000100080059000000000000000000000000000000000000000000),
(17, 'pugil_383', 383, 640, 0, 0, 1, 4, 4, 356, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(18, 'wespe_385', 385, 641, 0, 0, 1, 4, 4, 359, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(19, 'goblingambler_769', 769, 3099, 2147483647, 0, 1, 4, 4, 6, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000100010001000000000000000000000000000000000000000000000000000000000000000000),
(20, 'strikingdummy_901', 901, 541, 0, 0, 1, 4, 0, 480, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(21, 'mosslessgoobbue_1447', 1447, 354, 0, 0, 1, 4, 4, 198, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(22, 'SkogsFru_3184', 3184, 2928, 0, 0, 1, 4, 0, 57, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(23, 'galago_5', 5, 408, 0, 0, 1, 4, 4, 31, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(24, 'nestingbuzzard_12', 12, 299, 0, 0, 1, 4, 4, 39, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(25, 'cavebat_38', 38, 364, 0, 0, 1, 4, 4, 98, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(26, 'windsprite_133', 133, 115, 0, 0, 1, 4, 4, 383, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(27, 'lightningsprite_135', 135, 117, 0, 0, 1, 4, 4, 384, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(28, 'Morabymole_205', 205, 409, 0, 0, 1, 4, 4, 282, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(29, 'firefly_306', 306, 129, 0, 0, 1, 4, 4, 78, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(30, 'rivertoad_313', 313, 349, 0, 0, 1, 4, 4, 126, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(31, 'aurelia_324', 324, 563, 0, 0, 1, 4, 4, 279, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(32, 'wilddodo_339', 339, 393, 0, 0, 1, 4, 4, 173, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(33, 'packrat_351', 351, 1101, 0, 0, 2, 4, 4, 26, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(34, 'koboldpotman_751', 751, 378, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000100010001000000000000000000000000000000000000000000000000000000000000000000),
(35, 'kobolddustman_752', 752, 368, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000200010002000000000000000000000000000000000000000000000000000000000000000000),
(36, 'koboldsupplicant_754', 754, 372, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000300010003000000000000000000000000000000000000000000000000000000000000000000),
(37, 'Qiqirneggdigger_771', 771, 350, 0, 0, 2, 4, 4, 14, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000010001000000000000000000000000000000000000000000000000000000000000000000),
(38, 'Cepheus_855', 855, 1058, 0, 0, 2, 4, 4, 279, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(39, 'Barbastelle_3185', 3185, 2929, 0, 0, 1, 4, 0, 98, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(40, 'grassraptor_2', 2, 411, 0, 0, 2, 4, 4, 96, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(41, 'gigantoad_26', 26, 26, 0, 0, 2, 4, 4, 126, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(42, '2ndCohorthoplomachus_55', 55, 1821, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0100013201020401110505000000030580040101001900320000, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(43, '2ndCohortlaquearius_61', 61, 1822, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100013201010201aa9206000000029202000302003200320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(44, '2ndCohorteques_62', 62, 1823, 2147483647, 0, 2, 4, 4, 0, 0, 0x02000132030203013c9236000000019201050300003201320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(45, '2ndCohortsecutor_63', 63, 1824, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0100013201010701984706000000024701020302003200320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(46, '2ndCohortsignifer_64', 64, 1825, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100013201050301113b27000000043b850103000032004b0007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(47, 'junglecoeurl_117', 117, 352, 0, 0, 2, 4, 4, 65, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(48, 'dungmidgeswarm_136', 136, 396, 0, 0, 1, 4, 4, 58, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(49, 'giantpelican_178', 178, 366, 0, 0, 2, 4, 4, 154, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(50, '2ndCohortvanguard_201', 201, 1826, 0, 0, 2, 4, 4, 214, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(51, 'Bloodshorebell_312', 312, 361, 0, 0, 2, 4, 4, 280, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(52, 'apkallu_314', 314, 341, 0, 0, 1, 4, 4, 190, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(53, 'goobbue_320', 320, 353, 0, 0, 1, 4, 4, 198, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(54, 'mildewedgoobbue_321', 321, 355, 0, 0, 2, 4, 4, 198, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(55, 'largebuffalo_322', 322, 1313, 0, 0, 2, 4, 4, 138, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(56, 'snipper_325', 325, 560, 0, 0, 2, 4, 4, 149, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(57, 'koboldpatrolman_328', 328, 379, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000100010001000000000000000000000000000000000000000000000000000000000000000000),
(58, 'koboldpitman_329', 329, 369, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000200010002000000000000000000000000000000000000000000000000000000000000000000),
(59, 'koboldmissionary_331', 331, 373, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000300010003000000000000000000000000000000000000000000000000000000000000000000),
(60, 'corkbulb_384', 384, 684, 0, 0, 1, 4, 4, 358, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(61, 'colibri_386', 386, 639, 0, 0, 2, 4, 4, 360, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(62, 'BloodyMary_3186', 3186, 2930, 0, 0, 1, 4, 0, 190, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(63, 'arborbuzzard_12', 12, 13, 0, 0, 2, 4, 4, 39, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(64, 'deadmansmoan_20', 20, 1854, 2147483647, 0, 2, 4, 4, 17, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000010001000000000000000000000000000000000000000000000000000000000000000000),
(65, 'roseling_22', 22, 400, 0, 0, 1, 4, 4, 48, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(66, 'duskbat_38', 38, 363, 0, 0, 1, 4, 4, 98, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(67, 'plasmoid_46', 46, 46, 0, 0, 1, 4, 4, 80, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(68, 'axolotl_139', 139, 1831, 0, 0, 2, 4, 4, 151, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(69, 'Rothlytpelican_181', 181, 1181, 0, 0, 2, 4, 4, 157, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(70, 'sewermole_205', 205, 410, 0, 0, 1, 4, 4, 282, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(71, 'hedgemole_206', 206, 403, 0, 0, 1, 4, 4, 283, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(72, 'seawasp_312', 312, 360, 0, 0, 2, 4, 4, 280, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(73, 'fatdodo_340', 340, 394, 0, 0, 1, 4, 4, 174, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(74, 'pukhatchling_341', 341, 402, 0, 0, 1, 4, 4, 130, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(75, 'Rhotanobuccaneer_348', 348, 420, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0100013201050601623b32000001013b83010102004b004b0001, 0x170032000a000512000001000a000100080059000000000000000000000000000000000000000000),
(76, 'Rhotanobuccaneer_349', 349, 420, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100013201040c01300305000001010304040302004b00320001, 0x170032000a000512000001000a000100080059000000000000000000000000000000000000000000),
(77, 'preyingmantis_396', 396, 1852, 0, 0, 2, 4, 4, 376, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(78, 'killermantis_397', 397, 644, 0, 0, 2, 4, 4, 374, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(79, 'lammergeyer_403', 403, 1853, 0, 0, 2, 4, 4, 41, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(80, 'shelfscaleSahagin_765', 765, 386, 2147483647, 0, 2, 4, 4, 9, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000010001000000000000000000000000000000000000000000000000000000000000000000),
(81, 'shelfclawSahagin_766', 766, 384, 0, 0, 2, 4, 4, 9, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000010001000000000000000000000000000000000000000000000000000000000000000000),
(82, 'Sapsashelfspine_767', 767, 1829, 2147483647, 2147483647, 2, 4, 4, 9, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000020001000000000000000000000000000000000000000000000000000000000000000000),
(83, 'shoaltoothSahagin_768', 768, 2526, 2147483647, 0, 2, 4, 4, 9, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000020002000000000000000000000000000000000000000000000000000000000000000000),
(84, 'goblinhunter_769', 769, 225, 2147483647, 0, 1, 4, 4, 6, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000100010001000000000000000000000000000000000000000000000000000000000000000000),
(85, 'shelfscaleReaver_773', 773, 347, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x05000132090101011a0101000001000100000000003200321045, 0x170066000a000f0019000f0010005100190027000000000000000000000000000000000000000000),
(86, 'shelfclawReaver_774', 774, 345, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0500013209020901ab15040000010115830300020064004b1045, 0x1700660008000d000800480008003f00080064000000000000000000000000000000000000000000),
(87, 'shelfeyeReaver_776', 776, 559, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0500013209010c01149203000001029202020202006400321445, 0x170066000a000f0019000f0010005100190027000000000000000000000000000000000000000000),
(88, 'Sapsaelbst_2832', 2832, 2527, 0, 0, 2, 4, 4, 182, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(89, 'whelkballista_2835', 2835, 2530, 0, 0, 1, 4, 2, 679, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(90, 'freshwhelkballista_2836', 2836, 2531, 0, 0, 1, 4, 2, 679, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(91, 'reinforcedwhelkballista_2837', 2837, 2532, 0, 0, 2, 4, 2, 679, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(92, 'DarkHelmet_3187', 3187, 2931, 0, 0, 1, 4, 0, 722, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000100010001000000000000000000000000000000000000000000000000000000000000000000),
(93, 'coeurlpup_28', 28, 28, 0, 0, 2, 4, 4, 69, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(94, 'bumblebeetle_36', 36, 296, 0, 0, 1, 4, 4, 56, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(95, 'salamander_139', 139, 391, 0, 0, 2, 4, 4, 151, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(96, 'forestyarzon_159', 159, 381, 0, 0, 2, 4, 4, 76, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(97, 'wildwolf_303', 303, 1180, 0, 0, 2, 4, 4, 159, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(98, 'koboldpickman_329', 329, 370, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000200010002000000000000000000000000000000000000000000000000000000000000000000),
(99, 'koboldsidesman_330', 330, 376, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000400010004000000000000000000000000000000000000000000000000000000000000000000),
(100, 'MamoolJabreeder_343', 343, 414, 2147483647, 2147483647, 2, 4, 4, 10, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000010001000000000000000000000000000000000000000000000000000000000000000000),
(101, 'MamoolJaexecutioner_344', 344, 413, 2147483647, 0, 2, 4, 4, 10, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000010001000000000000000000000000000000000000000000000000000000000000000000),
(102, 'MamoolJainfiltrator_345', 345, 416, 2147483647, 0, 2, 4, 4, 10, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000010001000000000000000000000000000000000000000000000000000000000000000000),
(103, 'MamoolJasophist_346', 346, 415, 2147483647, 0, 2, 4, 4, 10, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000020001000000000000000000000000000000000000000000000000000000000000000000),
(104, 'stoneshell_382', 382, 638, 0, 0, 1, 4, 4, 355, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(105, 'mudpugil_383', 383, 642, 0, 0, 1, 4, 4, 356, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(106, 'uragnite_389', 389, 643, 0, 0, 1, 4, 4, 364, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(107, 'Myradrosh_3188', 3188, 2932, 0, 0, 1, 4, 0, 360, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(108, '3rdCohorthoplomachus_55', 55, 53, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0100013201020401110505000000030580040101001900320000, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(109, '3rdCohortlaquearius_61', 61, 58, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100013201010201aa9206000000029202000302003200320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(110, '3rdCohorteques_62', 62, 59, 2147483647, 0, 2, 4, 4, 0, 0, 0x02000132030203013c9236000000019201050300003201320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(111, '3rdCohortsecutor_63', 63, 60, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0100013201010701984706000000024701020302003200320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(112, '3rdCohortsignifer_64', 64, 61, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100013201050301113b27000000043b850103000032004b0007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(113, 'earthsprite_131', 131, 113, 0, 0, 1, 4, 4, 386, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(114, 'basilisk_173', 173, 304, 0, 0, 2, 4, 4, 135, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(115, 'ahriman_183', 183, 242, 0, 0, 2, 4, 4, 168, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(116, 'quartzdoblyn_188', 188, 275, 0, 0, 1, 4, 4, 177, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(117, 'magitekvanguard_200', 200, 269, 0, 0, 2, 4, 4, 213, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(118, 'grenade_327', 327, 270, 0, 0, 2, 4, 4, 101, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(119, 'FlameSergeantDalvag_3183', 3183, 2927, 0, 0, 1, 4, 0, 717, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000040001000000000000000000000000000000000000000000000000000000000000000000),
(120, 'antelopestag_4', 4, 4, 0, 0, 1, 4, 4, 62, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(121, 'ked_8', 8, 8, 0, 0, 2, 4, 4, 54, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(122, 'midlandcondor_13', 13, 566, 0, 0, 2, 4, 4, 40, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(123, 'wildhog_16', 16, 15, 0, 0, 2, 4, 4, 45, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(124, 'kedtrap_23', 23, 23, 0, 0, 2, 4, 4, 49, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(125, 'treant_24', 24, 24, 0, 0, 2, 4, 4, 104, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(126, 'adamantoise_34', 34, 34, 0, 0, 1, 4, 4, 94, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(127, 'hoverflyswarm_41', 41, 168, 0, 0, 1, 4, 4, 59, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(128, 'will-o-the-wisp_45', 45, 45, 0, 0, 1, 4, 4, 79, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(129, 'goblinthug_52', 52, 50, 2147483647, 0, 2, 4, 4, 6, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000100010001000000000000000000000000000000000000000000000000000000000000000000),
(130, 'Coeurlclawpoacher_79', 79, 140, 2147483647, 0, 2, 4, 4, 0, 0, 0x0401013208030201150c05000000000c00000000003201000000, 0x130010000900260009007c0009004d000900b2000000000000000000000000000000000000000000),
(131, 'Coeurlclawhunter_81', 81, 139, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x04010132080301014a0c1e000000000c00000000003201000000, 0x130010000900260009007c0009004d000900b2000000000000000000000000000000000000000000),
(132, 'Redbellylookout_84', 84, 52, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x02000132040102013a8a06000000028a02000302003201320000, 0x0900d200090010000900670009004a000900a0000000000000000000000000000000000000000000),
(133, 'Redbellylarcener_86', 86, 172, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0200013204010701224e06000000024e01020302003201320000, 0x0900d200090010000900670009004a000900a0000000000000000000000000000000000000000000),
(134, 'Redbellysharpeye_87', 87, 83, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0200013204030401282605000000022685010102003201320000, 0x0900d200090010000900670009004a000900a0000000000000000000000000000000000000000000),
(135, 'lesserkalong_130', 130, 112, 0, 0, 1, 4, 4, 99, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(136, 'deepvoiddeathmouse_143', 143, 170, 0, 0, 1, 4, 4, 27, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(137, 'riveryarzon_159', 159, 226, 0, 0, 2, 4, 4, 76, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(138, 'bigmouthorobon_302', 302, 235, 0, 0, 1, 4, 4, 270, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(139, 'stroper_304', 304, 238, 0, 0, 2, 4, 4, 145, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(140, 'revenant_305', 305, 236, 0, 0, 2, 4, 4, 265, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(141, 'Coeurlclawcutter_311', 311, 169, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x040101320801060189241e000000032403040301003201320000, 0x130010000900260009007c0009004d000900b2000000000000000000000000000000000000000000),
(142, 'nix_27', 27, 27, 0, 0, 2, 4, 4, 127, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(143, '5thCohorthoplomachus_55', 55, 1809, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0100013201020401110505000000030580040101001900320000, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(144, '5thCohortlaquearius_61', 61, 1810, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100013201010201aa9206000000029202000302003200320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(145, '5thCohorteques_62', 62, 1811, 2147483647, 0, 2, 4, 4, 0, 0, 0x02000132030203013c9236000000019201050300003201320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(146, '5thCohortsecutor_63', 63, 1812, 2147483647, 2147483647, 2, 4, 4, 0, 0, 0x0100013201010701984706000000024701020302003200320007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(147, '5thCohortsignifer_64', 64, 1813, 2147483647, 0, 2, 4, 4, 0, 0, 0x0100013201050301113b27000000043b850103000032004b0007, 0x0d009300220037000d004000070061000a009e000000000000000000000000000000000000000000),
(148, 'mudpuppy_139', 139, 645, 0, 0, 2, 4, 4, 151, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(149, 'morbol_140', 140, 237, 0, 0, 2, 4, 4, 145, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(150, '5thCohortvanguard_201', 201, 1814, 0, 0, 2, 4, 4, 214, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(151, 'hippogryph_645', 645, 789, 0, 0, 2, 4, 4, 134, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(152, 'hapalit_647', 647, 793, 0, 0, 2, 4, 4, 188, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(153, 'gigasshramana_727', 727, 647, 2147483647, 0, 2, 10, 4, 13, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000070001000000000000000000000000000000000000000000000000000000000000000000),
(154, 'gigasbonze_728', 728, 646, 2147483647, 0, 2, 10, 4, 13, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000070001000000000000000000000000000000000000000000000000000000000000000000),
(155, 'gigassozu_729', 729, 648, 2147483647, 0, 2, 10, 4, 13, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000070001000000000000000000000000000000000000000000000000000000000000000000),
(156, 'lakecobra_777', 777, 1851, 0, 0, 2, 4, 4, 235, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(157, 'LeechKing_3191', 3191, 2935, 0, 0, 1, 4, 0, 600, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(158, 'blackbat_1037', 1037, 38, 0, 0, 3, 4, 2, 98, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(159, 'caveaurelia_1038', 1038, 1210, 0, 0, 3, 4, 2, 279, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(160, 'foper_7439', 7439, 5674, 0, 0, 2, 4, 4, 1906, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(161, 'spinner_7442', 7442, 5677, 0, 0, 2, 4, 4, 1542, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(162, 'velociraptor_2', 2, 412, 0, 0, 2, 4, 4, 96, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(163, 'ringtail_6', 6, 407, 0, 0, 1, 4, 4, 32, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(164, 'highlandcondor_13', 13, 398, 0, 0, 2, 4, 4, 40, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(165, 'basaltgolem_30', 30, 365, 0, 0, 2, 4, 4, 81, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(166, 'pteroc_65', 65, 62, 0, 0, 1, 4, 4, 131, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(167, 'coeurl_117', 117, 106, 0, 0, 2, 4, 4, 65, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(168, 'syntheticdoblyn_189', 189, 1836, 0, 0, 2, 4, 4, 178, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(169, 'UGhamaroroundsman_755', 755, 1832, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000100010001000000000000000000000000000000000000000000000000000000000000000000),
(170, 'UGhamaroquarryman_756', 756, 1833, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000200010002000000000000000000000000000000000000000000000000000000000000000000),
(171, 'elitebedesman_757', 757, 2521, 2147483647, 0, 2, 8, 2, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000400010004000000000000000000000000000000000000000000000000000000000000000000),
(172, 'koboldpriest_758', 758, 371, 2147483647, 0, 2, 8, 4, 5, 0, 0x0000000000000000000000000000000000000000000000000000, 0x01000300010003000000000000000000000000000000000000000000000000000000000000000000),
(173, 'youngcoeurl_2269', 2269, 2192, 0, 0, 2, 4, 4, 65, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(174, 'bombincubator_2833', 2833, 2528, 0, 0, 1, 4, 2, 678, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(175, 'prototypebombincubator_2834', 2834, 2529, 0, 0, 1, 4, 2, 678, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(176, 'UGhamarogolem_2838', 2838, 2522, 0, 0, 2, 4, 4, 81, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(177, 'Vuokho_3189', 3189, 2933, 0, 0, 1, 4, 0, 39, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(178, 'strikingdummy_8016', 8016, 541, 0, 0, 1, 4, 0, 480, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(179, 'cocoon_6358', 6358, 6275, 0, 0, 1, 4, 0, 480, 262152, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(180, 'Shinryu_6531', 6531, 5640, 0, 0, 3, 4, 0, 1893, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(181, 'tail_6930', 6930, 5789, 0, 0, 3, 4, 0, 1926, 262187, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(182, 'cocoon_6931', 6931, 6275, 0, 0, 3, 4, 0, 2007, 262187, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(183, 'ginryu_6932', 6932, 6272, 0, 0, 3, 4, 0, 1891, 262187, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(184, '鎖_6933', 6933, 6279, 0, 0, 3, 4, 0, 2054, 262152, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(185, 'icicle_6934', 6934, 6278, 0, 0, 3, 4, 0, 764, 393224, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(186, 'eyeofthestorm_6935', 6935, 6277, 0, 0, 3, 4, 0, 1453, 262155, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(187, 'hakkinryu_7299', 7299, 6273, 0, 0, 3, 4, 0, 1985, 262187, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(188, 'massivecocoon_7302', 7302, 6276, 0, 0, 3, 4, 0, 2008, 262187, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(189, 'saitaisui_6358', 6358, 7206, 0, 0, 1, 4, 0, 480, 262152, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(190, 'Otengu_8662', 8662, 7200, 2147483647, 0, 3, 4, 0, 2187, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(191, 'tenguember_8663', 8663, 7201, 0, 0, 3, 4, 0, 2281, 262155, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(192, 'Daidarabotchi_8664', 8664, 7202, 0, 0, 3, 4, 0, 2217, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(193, 'QitianDasheng_8665', 8665, 7203, 0, 0, 3, 4, 0, 2211, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(194, 'shadowofthesage_8666', 8666, 7204, 0, 0, 3, 4, 0, 2211, 262187, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(195, 'saitaisui_8737', 8737, 7206, 2147483647, 0, 3, 4, 3, 2218, 8, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(196, 'geomantickiyofusa_8738', 8738, 7207, 2147483647, 0, 3, 4, 1, 1813, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(197, 'geomanticapa_8739', 8739, 7208, 0, 0, 3, 4, 3, 1867, 262147, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(198, 'torrent_8740', 8740, 7209, 0, 0, 3, 4, 3, 1202, 262147, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(199, 'geomanticdhara_8741', 8741, 7210, 0, 0, 3, 4, 3, 1819, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(200, 'geomanticanila_8742', 8742, 7211, 0, 0, 3, 4, 4, 1923, 262147, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(201, '_8743', 8743, 108, 0, 0, 1, 4, 0, 1453, 262152, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(202, 'riverunkiu_8744', 8744, 7212, 0, 0, 3, 4, 2, 1719, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(203, 'jinmenju_8745', 8745, 7213, 0, 0, 3, 4, 0, 1281, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(204, 'riverhikagiri_8746', 8746, 7214, 0, 0, 3, 4, 3, 572, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(205, 'riverray_8747', 8747, 7215, 0, 0, 3, 4, 0, 1346, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(206, 'riverscorpion_8748', 8748, 7216, 0, 0, 3, 4, 2, 1057, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(207, 'dragonhornbill_8749', 8749, 7217, 0, 0, 3, 4, 2, 1944, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(208, 'dragonbifang_8750', 8750, 7218, 0, 0, 3, 4, 2, 953, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(209, 'whitebaboon_8751', 8751, 7219, 0, 0, 3, 4, 2, 2270, 262144, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(210, 'dragonweasel_8752', 8752, 7220, 0, 0, 3, 4, 3, 1948, 0, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(211, 'servantofthesage_8754', 8754, 7205, 0, 0, 3, 4, 0, 2270, 262147, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000),
(212, 'saitaisui_8780', 8780, 7206, 2147483647, 0, 1, 4, 0, 2218, 12, 0x0000000000000000000000000000000000000000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000);

View file

@ -3,10 +3,10 @@
#include <MySqlConnector.h>
#include "Database/DbLoader.h"
#include "Database/CharaDbConnection.h"
#include "Database/ZoneDbConnection.h"
#include "Database/DbWorkerPool.h"
#include "Database/PreparedStatement.h"
extern Core::Db::DbWorkerPool< Core::Db::CharaDbConnection > g_charaDb;
extern Core::Db::DbWorkerPool< Core::Db::ZoneDbConnection > g_charaDb;
#endif

View file

@ -1,6 +1,6 @@
#include "DbLoader.h"
#include <mysqld_error.h>
#include "CharaDbConnection.h"
#include "ZoneDbConnection.h"
#include "DbWorkerPool.h"
#include "Logging/Logger.h"
#include "Framework.h"
@ -109,6 +109,6 @@ bool Core::Db::DbLoader::process( std::queue< Predicate >& queue )
template
Core::Db::DbLoader&
Core::Db::DbLoader::addDb< Core::Db::CharaDbConnection >( Core::Db::DbWorkerPool< Core::Db::CharaDbConnection >&,
Core::Db::DbLoader::addDb< Core::Db::ZoneDbConnection >( Core::Db::DbWorkerPool< Core::Db::ZoneDbConnection >&,
const ConnectionInfo& );

View file

@ -4,7 +4,7 @@
#include <MySqlConnector.h>
#include "StatementTask.h"
#include "Operation.h"
#include "CharaDbConnection.h"
#include "ZoneDbConnection.h"
#include <boost/make_shared.hpp>
#include "Framework.h"
@ -284,4 +284,4 @@ void DatabaseWorkerPool<T>::ExecuteOrAppend(SQLTransaction& trans, PreparedState
*/
template
class Core::Db::DbWorkerPool< Core::Db::CharaDbConnection >;
class Core::Db::DbWorkerPool< Core::Db::ZoneDbConnection >;

View file

@ -1,22 +1,22 @@
#include "CharaDbConnection.h"
#include "ZoneDbConnection.h"
#include <MySqlConnector.h>
Core::Db::CharaDbConnection::CharaDbConnection( ConnectionInfo& connInfo ) :
Core::Db::ZoneDbConnection::ZoneDbConnection( ConnectionInfo& connInfo ) :
DbConnection( connInfo )
{
}
Core::Db::CharaDbConnection::CharaDbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* q,
Core::Db::ZoneDbConnection::ZoneDbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* q,
ConnectionInfo& connInfo ) :
DbConnection( q, connInfo )
{
}
Core::Db::CharaDbConnection::~CharaDbConnection()
Core::Db::ZoneDbConnection::~ZoneDbConnection()
{
}
void Core::Db::CharaDbConnection::doPrepareStatements()
void Core::Db::ZoneDbConnection::doPrepareStatements()
{
if( !m_reconnecting )
m_stmts.resize( MAX_STATEMENTS );
@ -138,7 +138,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
"UPDATE charainfosearch SET SelectRegion = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_SEARCHINFO_UP_SEARCHCOMMENT,
"UPDATE charainfosearch SET SearchComment = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_SEARCHINFO_SEL, "SELECT * FROM charainfosearch WHERE CharacterId = ?;", CONNECTION_SYNC );
prepareStatement( CHARA_SEL_SEARCHINFO, "SELECT * FROM charainfosearch WHERE CharacterId = ?;", CONNECTION_SYNC );
/// QUEST INFO
prepareStatement( CHARA_QUEST_INS,
@ -154,7 +154,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
prepareStatement( CHARA_QUEST_DEL, "DELETE FROM charaquestnew WHERE CharacterId = ? AND QuestId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_QUEST_SEL, "SELECT * FROM charaquestnew WHERE CharacterId = ?;", CONNECTION_SYNC );
prepareStatement( CHARA_SEL_QUEST, "SELECT * FROM charaquestnew WHERE CharacterId = ?;", CONNECTION_SYNC );
/// CLASS INFO
prepareStatement( CHARA_CLASS_SEL, "SELECT ClassIdx, Exp, Lvl FROM characlass WHERE CharacterId = ?;",
@ -175,5 +175,13 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
"INSERT INTO charaglobalitem ( CharacterId, ItemId, catalogId, UPDATE_DATE ) VALUES ( ?, ?, ?, NOW() );",
CONNECTION_BOTH );
/// BNPC TEMPLATES
prepareStatement( ZONE_SEL_BNPCTEMPLATES,
"SELECT Id, Name, bNPCBaseId, bNPCNameId, mainWeaponModel, "
"secWeaponModel, aggressionMode, enemyType, pose, "
"modelChara, displayFlags, Look, Models "
"FROM bnpctemplate WHERE 1;",
CONNECTION_BOTH);
}

View file

@ -7,13 +7,12 @@ namespace Core {
namespace Db {
class DbConnectionInfo;
enum CharaDbStatements :
uint32_t
enum ZoneDbStatements : uint32_t
{
CHARA_SEL,
CHARA_SEL_MINIMAL,
CHARA_SEARCHINFO_SEL,
CHARA_QUEST_SEL,
CHARA_SEL_SEARCHINFO,
CHARA_SEL_QUEST,
CHARA_INS,
CHARA_UP,
CHARA_UP_NAME,
@ -75,20 +74,21 @@ enum CharaDbStatements :
CHARA_ITEMGLOBAL_INS,
ZONE_SEL_BNPCTEMPLATES,
MAX_STATEMENTS
};
class CharaDbConnection :
public DbConnection
class ZoneDbConnection : public DbConnection
{
public:
using Statements = CharaDbStatements;
using Statements = ZoneDbStatements;
CharaDbConnection( ConnectionInfo& connInfo );
ZoneDbConnection( ConnectionInfo& connInfo );
CharaDbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* q, ConnectionInfo& connInfo );
ZoneDbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* q, ConnectionInfo& connInfo );
~CharaDbConnection();
~ZoneDbConnection();
void doPrepareStatements() override;

View file

@ -31,7 +31,7 @@ PlayerMinimal::~PlayerMinimal( void )
void PlayerMinimal::load( uint32_t charId )
{
auto stmt = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_SEL_MINIMAL );
auto stmt = g_charaDb.getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_MINIMAL );
stmt->setUInt( 1, charId );
auto res = g_charaDb.query( stmt );
@ -63,7 +63,7 @@ void PlayerMinimal::load( uint32_t charId )
m_zoneId = res->getUInt8( "TerritoryId" );
// SELECT ClassIdx, Exp, Lvl
auto stmtClass = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_SEL_MINIMAL );
auto stmtClass = g_charaDb.getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_MINIMAL );
stmtClass->setInt( 1, m_id );
auto resClass = g_charaDb.query( stmt );
@ -230,14 +230,14 @@ void PlayerMinimal::saveAsNew()
// "Aetheryte, GMRank, UPDATE_DATE )
// CharacterId, ClassIdx, Exp, Lvl
auto stmtClass = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_CLASS_INS );
auto stmtClass = g_charaDb.getPreparedStatement( Db::ZoneDbStatements::CHARA_CLASS_INS );
stmtClass->setInt( 1, m_id );
stmtClass->setInt( 2, g_exdDataGen.get< Core::Data::ClassJob >( m_class )->expArrayIndex );
stmtClass->setInt( 3, 0 );
stmtClass->setInt( 4, 1 );
g_charaDb.directExecute( stmtClass );
auto stmt = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_INS );
auto stmt = g_charaDb.getPreparedStatement( Db::ZoneDbStatements::CHARA_INS );
stmt->setInt( 1, m_accountId );
stmt->setInt( 2, m_id );
stmt->setInt64( 3, m_contentId );
@ -273,7 +273,7 @@ void PlayerMinimal::saveAsNew()
stmt->setBinary( 33, orchestrion );
g_charaDb.directExecute( stmt );
auto stmtSearchInfo = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_SEARCHINFO_INS );
auto stmtSearchInfo = g_charaDb.getPreparedStatement( Db::ZoneDbStatements::CHARA_SEARCHINFO_INS );
stmtSearchInfo->setInt( 1, m_id );
g_charaDb.directExecute( stmtSearchInfo );

View file

@ -18,7 +18,7 @@
#include <Crypt/base64.h>
#include <Database/DbLoader.h>
#include <Database/CharaDbConnection.h>
#include <Database/ZoneDbConnection.h>
#include <Database/DbWorkerPool.h>
#include <Database/PreparedStatement.h>
@ -38,7 +38,7 @@
Core::Framework g_fw;
Core::Logger g_log;
Core::Db::DbWorkerPool< Core::Db::CharaDbConnection > g_charaDb;
Core::Db::DbWorkerPool< Core::Db::ZoneDbConnection > g_charaDb;
Core::Data::ExdDataGenerated g_exdDataGen;
Core::Network::SapphireAPI g_sapphireAPI;

View file

@ -2,7 +2,7 @@
#define _ACTION_H_
#include <Common.h>
#include "../Forwards.h"
#include "../ForwardsZone.h"
namespace Core {
namespace Action {

View file

@ -1,7 +1,7 @@
#ifndef _ACTIONCAST_H_
#define _ACTIONCAST_H_
#include "../Forwards.h"
#include "../ForwardsZone.h"
#include "Action.h"
namespace Core {

View file

@ -2,7 +2,7 @@
#define _ACTIONCOLLISION_H
#include <Common.h>
#include "Forwards.h"
#include "ForwardsZone.h"
namespace Core {
namespace Data {

View file

@ -16,6 +16,7 @@
#include "Chara.h"
#include "EventObject.h"
#include "Player.h"
#include "BNpc.h"
#include "ServerZone.h"
#include "Session.h"
@ -146,7 +147,7 @@ Core::Entity::PlayerPtr Core::Entity::Actor::getAsPlayer()
return boost::dynamic_pointer_cast< Entity::Player, Entity::Actor >( shared_from_this() );
}
/*! \return pointer to this instance as PlayerPtr */
/*! \return pointer to this instance as EventObjPtr */
Core::Entity::EventObjectPtr Core::Entity::Actor::getAsEventObj()
{
if( !isEventObj() )
@ -154,6 +155,14 @@ Core::Entity::EventObjectPtr Core::Entity::Actor::getAsEventObj()
return boost::dynamic_pointer_cast< Entity::EventObject, Entity::Actor >( shared_from_this() );
}
/*! \return pointer to this instance as BNpcPtr */
Core::Entity::BNpcPtr Core::Entity::Actor::getAsBNpc()
{
if( !isBattleNpc() )
return nullptr;
return boost::dynamic_pointer_cast< Entity::BNpc, Entity::Actor >( shared_from_this() );
}
/*!
Add a given actor to the fitting in range set according to type
but also to the global actor map

View file

@ -4,7 +4,7 @@
#include <Common.h>
#include <boost/enable_shared_from_this.hpp>
#include "Forwards.h"
#include "ForwardsZone.h"
#include <set>
#include <map>
#include <queue>
@ -17,8 +17,7 @@ namespace Entity {
\brief Base class for all actor/objects
*/
class Actor :
public boost::enable_shared_from_this< Actor >
class Actor : public boost::enable_shared_from_this< Actor >
{
protected:
@ -45,17 +44,11 @@ protected:
public:
explicit Actor( Common::ObjKind type );
virtual ~Actor()
{
};
virtual ~Actor() {};
virtual void spawn( PlayerPtr pTarget )
{
}
virtual void spawn( PlayerPtr pTarget ) {}
virtual void despawn( PlayerPtr pTarget )
{
}
virtual void despawn( PlayerPtr pTarget ) {}
uint32_t getId() const;
@ -127,6 +120,8 @@ public:
EventObjectPtr getAsEventObj();
BNpcPtr getAsBNpc();
ZonePtr getCurrentZone() const;
void setCurrentZone( ZonePtr currZone );

View file

@ -36,12 +36,15 @@ using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server;
using namespace Core::Network::ActorControl;
Core::Entity::BNpc::BNpc() :
Npc( ObjKind::BattleNpc )
Core::Entity::BNpc::BNpc() : Npc( ObjKind::BattleNpc )
{
}
Core::Entity::BNpc::~BNpc()
{
}
void Core::Entity::BNpc::spawn( PlayerPtr pTarget )
{
}

View file

@ -28,6 +28,8 @@ public:
virtual ~BNpc() override;
void spawn( PlayerPtr pTarget ) override;
private:
uint32_t m_bNpcBaseId;
uint32_t m_bNpcNameId;

View file

@ -1,10 +1,11 @@
#include "BNpcTemplate.h"
#include <string>
Core::Entity::BNpcTemplate::BNpcTemplate( uint32_t baseId, uint32_t nameId, uint64_t weaponMain, uint64_t weaponSub,
Core::Entity::BNpcTemplate::BNpcTemplate( uint32_t id, uint32_t baseId, uint32_t nameId, uint64_t weaponMain, uint64_t weaponSub,
uint8_t aggressionMode, uint8_t enemyType, uint8_t onlineStatus, uint8_t pose,
uint16_t modelChara, uint32_t displayFlags, uint32_t* modelEquip,
uint8_t* customize ) :
m_id( id ),
m_bNpcBaseId( baseId ),
m_bNpcNameId( nameId ),
m_weaponMain( weaponMain ),
@ -30,6 +31,16 @@ Core::Entity::BNpcTemplate::~BNpcTemplate()
}
uint32_t Core::Entity::BNpcTemplate::getId() const
{
return m_id;
}
void Core::Entity::BNpcTemplate::setId( uint32_t id )
{
m_id = id;
}
uint32_t Core::Entity::BNpcTemplate::getBNpcBaseId() const
{
return m_bNpcBaseId;

View file

@ -3,19 +3,6 @@
#include <stdint.h>
/*g_log.info( "|----> " + std::to_string( instance.bNPCBase ) +
" " + std::to_string( instance.mainWeaponModel ) +
", " + std::to_string( instance.secWeaponModel ) +
", " + std::to_string( instance.aggressionMode ) +
", " + std::to_string( instance.enemyType ) +
", " + std::to_string( instance.onlineStatus ) +
", " + std::to_string( instance.pose ) +
", " + std::to_string( instance.modelChara ) +
", " + std::to_string( instance.displayFlags ) +
", " + modelStr +
", " + cusStr +
", " + std::to_string( instance.gimmickId ) */
namespace Core {
namespace Entity {
@ -24,6 +11,7 @@ class BNpcTemplate
{
private:
uint32_t m_id;
uint32_t m_bNpcBaseId;
uint32_t m_bNpcNameId;
uint64_t m_weaponMain;
@ -38,17 +26,19 @@ private:
uint8_t m_customize[26];
public:
BNpcTemplate()
{
};
BNpcTemplate() {};
BNpcTemplate( uint32_t baseId, uint32_t nameId, uint64_t weaponMain, uint64_t weaponSub, uint8_t aggressionMode,
BNpcTemplate( uint32_t id, uint32_t baseId, uint32_t nameId, uint64_t weaponMain, uint64_t weaponSub, uint8_t aggressionMode,
uint8_t enemyType, uint8_t onlineStatus, uint8_t pose, uint16_t modelChara,
uint32_t displayFlags = 0,
uint32_t* modelEquip = nullptr, uint8_t* customize = nullptr );
virtual ~BNpcTemplate();
uint32_t getId() const;
void setId( uint32_t id );
uint32_t getBNpcBaseId() const;
void setBNpcBaseId( uint32_t bNpcBaseId );

View file

@ -209,25 +209,15 @@ public:
virtual void autoAttack( CharaPtr pTarget );
virtual void onDeath()
{
};
virtual void onDeath() {};
virtual void onDamageTaken( Chara& pSource )
{
};
virtual void onDamageTaken( Chara& pSource ) {};
virtual void onActionHostile( Chara& source )
{
};
virtual void onActionHostile( Chara& source ) {};
virtual void onActionFriendly( Chara& pSource )
{
};
virtual void onActionFriendly( Chara& pSource ) {};
virtual void onTick()
{
};
virtual void onTick() {};
virtual void changeTarget( uint64_t targetId );
@ -241,9 +231,7 @@ public:
virtual bool checkAction();
virtual void update( int64_t currTime )
{
};
virtual void update( int64_t currTime ) {};
Action::ActionPtr getCurrentAction() const;

View file

@ -5,8 +5,8 @@
namespace Core {
namespace Entity {
class EventObject :
public Actor
class EventObject : public Actor
{
public:
EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId, uint8_t initialState,

View file

@ -18,8 +18,7 @@ namespace Entity {
\brief Base class for all Npcs
*/
class Npc :
public Chara
class Npc : public Chara
{
public:

View file

@ -36,8 +36,7 @@ struct QueuedZoning
* Inheriting from Actor
*
*/
class Player :
public Chara
class Player : public Chara
{
public:
/*! Contructor */

View file

@ -397,7 +397,7 @@ uint32_t Core::Entity::Player::getCrystal( CrystalType type )
void Core::Entity::Player::writeInventory( InventoryType type )
{
auto pLog = g_fw.get< Logger >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto storage = m_storageMap[ type ];
@ -427,7 +427,7 @@ void Core::Entity::Player::writeInventory( InventoryType type )
void Core::Entity::Player::writeItem( Core::ItemPtr pItem ) const
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
pDb->execute( "UPDATE charaglobalitem SET stack = " + std::to_string( pItem->getStackSize() ) + " " +
// TODO: add other attributes
" WHERE itemId = " + std::to_string( pItem->getUId() ) );
@ -435,7 +435,7 @@ void Core::Entity::Player::writeItem( Core::ItemPtr pItem ) const
void Core::Entity::Player::deleteItemDb( Core::ItemPtr item ) const
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
pDb->execute( "UPDATE charaglobalitem SET IS_DELETE = 1 WHERE itemId = " + std::to_string( item->getUId() ) );
}
@ -449,7 +449,7 @@ bool Core::Entity::Player::isObtainable( uint32_t catalogId, uint8_t quantity )
Core::ItemPtr Core::Entity::Player::addItem( uint32_t catalogId, uint32_t quantity, bool isHq, bool silent )
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto itemInfo = pExdData->get< Core::Data::Item >( catalogId );

View file

@ -30,13 +30,13 @@ using namespace Core::Network::Packets::Server;
// load player from the db
bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pTeriMgr = g_fw.get< TerritoryMgr >();
auto pLog = g_fw.get< Logger >();
const std::string char_id_str = std::to_string( charId );
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_SEL );
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL );
stmt->setUInt( 1, charId );
auto res = pDb->query( stmt );
@ -244,8 +244,8 @@ bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
bool Core::Entity::Player::loadActiveQuests()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_QUEST_SEL );
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_QUEST );
stmt->setUInt( 1, m_id );
auto res = pDb->query( stmt );
@ -280,9 +280,9 @@ bool Core::Entity::Player::loadActiveQuests()
bool Core::Entity::Player::loadClassData()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
// ClassIdx, Exp, Lvl
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_CLASS_SEL );
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::CHARA_CLASS_SEL );
stmt->setUInt( 1, m_id );
auto res = pDb->query( stmt );
@ -301,8 +301,8 @@ bool Core::Entity::Player::loadClassData()
bool Core::Entity::Player::loadSearchInfo()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_SEARCHINFO_SEL );
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_SEARCHINFO );
stmt->setUInt( 1, m_id );
auto res = pDb->query( stmt );
@ -322,7 +322,7 @@ bool Core::Entity::Player::loadSearchInfo()
void Core::Entity::Player::updateSql()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
/*"Hp 1, Mp 2, Tp 3, Gp 4, Mode 5, Mount 6, InvincibleGM 7, Voice 8, "
"Customize 9, ModelMainWeapon 10, ModelSubWeapon 11, ModelSystemWeapon 12, "
"ModelEquip 13, EmoteModeType 14, Language 15, IsNewGame 16, IsNewAdventurer 17, "
@ -333,7 +333,7 @@ void Core::Entity::Player::updateSql()
"EquippedMannequin 44, ConfigFlags 45, QuestCompleteFlags 46, OpeningSequence 47, "
"QuestTracking 48, GrandCompany 49, GrandCompanyRank 50, Discovery 51, GMRank 52, Unlocks 53, "
"CFPenaltyUntil 54, Pose 55"*/
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_UP );
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::CHARA_UP );
stmt->setInt( 1, getHp() );
stmt->setInt( 2, getMp() );
@ -461,7 +461,7 @@ void Core::Entity::Player::updateSql()
void Core::Entity::Player::updateDbClass() const
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
uint8_t classJobIndex = pExdData->get< Core::Data::ClassJob >( static_cast<uint8_t>( getClass() ) )->expArrayIndex;
@ -476,7 +476,7 @@ void Core::Entity::Player::updateDbClass() const
void Core::Entity::Player::insertDbClass( const uint8_t classJobIndex ) const
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto stmtClass = pDb->getPreparedStatement( Db::CHARA_CLASS_INS );
stmtClass->setInt( 1, getId() );
stmtClass->setInt( 2, classJobIndex );
@ -487,7 +487,7 @@ void Core::Entity::Player::insertDbClass( const uint8_t classJobIndex ) const
void Core::Entity::Player::updateDbSearchInfo() const
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto stmtS = pDb->getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTCLASS );
stmtS->setInt( 1, m_searchSelectClass );
stmtS->setInt( 2, m_id );
@ -506,7 +506,7 @@ void Core::Entity::Player::updateDbSearchInfo() const
void Core::Entity::Player::updateDbAllQuests() const
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
for( int32_t i = 0; i < 30; i++ )
{
if( !m_activeQuests[ i ] )
@ -531,7 +531,7 @@ void Core::Entity::Player::updateDbAllQuests() const
void Core::Entity::Player::deleteQuest( uint16_t questId ) const
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto stmt = pDb->getPreparedStatement( Db::CHARA_QUEST_DEL );
stmt->setInt( 1, m_id );
stmt->setInt( 2, questId );
@ -540,7 +540,7 @@ void Core::Entity::Player::deleteQuest( uint16_t questId ) const
void Core::Entity::Player::insertQuest( uint16_t questId, uint8_t index, uint8_t seq ) const
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto stmt = pDb->getPreparedStatement( Db::CHARA_QUEST_INS );
stmt->setInt( 1, m_id );
stmt->setInt( 2, index );
@ -560,7 +560,7 @@ void Core::Entity::Player::insertQuest( uint16_t questId, uint8_t index, uint8_t
Core::ItemPtr Core::Entity::Player::createItem( uint32_t catalogId, uint32_t quantity )
{
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto itemInfo = pExdData->get< Core::Data::Item >( catalogId );
if( !itemInfo )
@ -590,7 +590,7 @@ Core::ItemPtr Core::Entity::Player::createItem( uint32_t catalogId, uint32_t qua
bool Core::Entity::Player::loadInventory()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
//////////////////////////////////////////////////////////////////////////////////////////////////////
// load active gearset
auto res = pDb->query( "SELECT storageId, container_0, container_1, container_2, container_3, "

View file

@ -1,7 +1,7 @@
#ifndef _CONTENTFINDER_H
#define _CONTENTFINDER_H
#include "../Forwards.h"
#include "../ForwardsZone.h"
#endif

View file

@ -3,7 +3,7 @@
#include <Common.h>
#include "Forwards.h"
#include "ForwardsZone.h"
namespace Core {

View file

@ -137,7 +137,7 @@ void Core::DebugCommandHandler::set( char* data, Entity::Player& player, boost::
{
auto pLog = g_fw.get< Logger >();
auto pTerriMgr = g_fw.get< TerritoryMgr >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
std::string subCommand = "";
std::string params = "";

View file

@ -5,7 +5,7 @@
#include <Common.h>
#include "DebugCommand.h"
#include "Forwards.h"
#include "ForwardsZone.h"
namespace Core {

View file

@ -3,7 +3,7 @@
#include <Common.h>
#include "Forwards.h"
#include "ForwardsZone.h"
namespace Core {
namespace Event {

View file

@ -1,7 +1,7 @@
#ifndef _EVENT_H
#define _EVENT_H
#include "Forwards.h"
#include "ForwardsZone.h"
namespace Core {
namespace Event {

View file

@ -18,75 +18,52 @@ typedef std::vector< x > x ## PtrList;
namespace Core {
TYPE_FORWARD( Cell );
TYPE_FORWARD( Zone );
TYPE_FORWARD( HousingZone );
TYPE_FORWARD( InstanceContent );
TYPE_FORWARD( Item );
TYPE_FORWARD( ItemContainer );
TYPE_FORWARD( Session );
TYPE_FORWARD( ZonePosition )
namespace StatusEffect {
TYPE_FORWARD( StatusEffect );
TYPE_FORWARD( StatusEffectContainer );
}
namespace Entity {
TYPE_FORWARD( Actor );
TYPE_FORWARD( Chara );
TYPE_FORWARD( Player );
TYPE_FORWARD( EventObject );
TYPE_FORWARD( BNpcTemplate );
TYPE_FORWARD( BNpc );
}
namespace Event {
TYPE_FORWARD( Director );
TYPE_FORWARD( EventHandler );
}
namespace Action {
TYPE_FORWARD( Action );
TYPE_FORWARD( ActionTeleport );
TYPE_FORWARD( ActionCast );
TYPE_FORWARD( ActionMount );
TYPE_FORWARD( EventAction );
TYPE_FORWARD( EventItemAction );
}
namespace Network {
TYPE_FORWARD( Hive );
TYPE_FORWARD( Acceptor );
TYPE_FORWARD( Connection );
TYPE_FORWARD( GameConnection );
TYPE_FORWARD( SessionConnection );
TYPE_FORWARD( CustomMsgClientConnection );
namespace Packets {
TYPE_FORWARD( GamePacket );
TYPE_FORWARD( FFXIVPacketBase );
}
}

View file

@ -40,7 +40,7 @@ uint8_t Core::ItemContainer::getEntryCount() const
void Core::ItemContainer::removeItem( uint8_t slotId )
{
auto pLog = g_fw.get< Logger >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
ItemMap::iterator it = m_itemMap.find( slotId );
if( it != m_itemMap.end() )

View file

@ -5,7 +5,7 @@
#include <Common.h>
#include "Forwards.h"
#include "ForwardsZone.h"
namespace Core {

View file

@ -120,7 +120,7 @@ bool Core::Items::Util::isOneHandedWeapon( Common::ItemUICategory weaponCategory
Core::ItemPtr Core::Items::Util::loadItem( uint64_t uId )
{
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
// load actual item
auto itemRes = pDb->query(
"SELECT catalogId, stack, flags FROM charaglobalitem WHERE itemId = " + std::to_string( uId ) + ";" );
@ -176,7 +176,7 @@ Core::Common::ContainerType Core::Items::Util::getContainerType( uint32_t contai
uint32_t Core::Items::Util::getNextUId()
{
uint32_t charId = 0;
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pQR = pDb->query( "SELECT MAX(ItemId) FROM charaglobalitem" );
if( !pQR->next() )

View file

@ -2,7 +2,7 @@
#define SAPPHIRE_ITEMUTIL_H
#include <Common.h>
#include "Forwards.h"
#include "ForwardsZone.h"
namespace Core {
namespace Items {

View file

@ -16,7 +16,7 @@ Core::LinkshellMgr::LinkshellMgr()
bool Core::LinkshellMgr::loadLinkshells()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto res = pDb->query( "SELECT LinkshellId, MasterCharacterId, CharacterIdList, "
"LinkshellName, LeaderIdList, InviteIdList "
"FROM infolinkshell "

View file

@ -7,7 +7,7 @@
//#include <Network/GamePacket.h>
#include <Util/LockedQueue.h>
#include "Forwards.h"
#include "ForwardsZone.h"
#define DECLARE_HANDLER( x ) void x( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )

View file

@ -308,7 +308,7 @@ void Core::Network::GameConnection::discoveryHandler( const Core::Network::Packe
const auto packet = ZoneChannelPacket< Client::FFXIVIpcDiscoveryHandler >( inPacket );
const auto& positionRef = packet.data().positionRef;
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pQR = pDb->query( "SELECT id, map_id, discover_id "
"FROM discoveryinfo "

View file

@ -0,0 +1,145 @@
#ifndef _PLAYERSPAWN_H
#define _PLAYERSPAWN_H
#include <Network/PacketDef/Zone/ServerZoneDef.h>
#include <Network/GamePacketNew.h>
#include <Util/Util.h>
#include "Actor/Player.h"
#include "Actor/BNpc.h"
#include "Forwards.h"
#include "Inventory/Item.h"
#include "StatusEffect/StatusEffect.h"
namespace Core {
namespace Network {
namespace Packets {
namespace Server {
/**
* @brief The packet sent to spawn a player.
*/
class NpcSpawnPacket : public ZoneChannelPacket< FFXIVIpcNpcSpawn >
{
public:
NpcSpawnPacket( Entity::BNpc& bnpc, Entity::Player& target ) :
ZoneChannelPacket< FFXIVIpcPlayerSpawn >( bnpc.getId(), target.getId() )
{
initialize( bnpc, target );
};
private:
void initialize( Entity::BNpc& bnpc, Entity::Player& target )
{
// todo: figure out unkown offsets
m_data.classJob = static_cast< uint8_t >( bnpc.getClass() );
//m_data.status = static_cast< uint8_t >( pPlayer->getStatus() );
m_data.hPCurr = bnpc.getHp();
m_data.mPCurr = bnpc.getMp();
m_data.tPCurr = bnpc.getTp();
m_data.hPMax = bnpc.getMaxHp();
m_data.mPMax = bnpc.getMaxMp();
//m_data.tPMax = 3000;
m_data.level = bnpc.getLevel();
m_data.pose = bnpc.getPose();
memcpy( m_data.look, bnpc.getLookArray(), sizeof( m_data.look ) );
//auto item = bnpc.getItemAt( Common::GearSet0, Common::GearSetSlot::MainHand );
//if( item )
// m_data.mainWeaponModel = item->getModelId1();
//m_data.secWeaponModel = player.getModelSubWeapon();
m_data.models[ 0 ] = bnpc.getModelForSlot( Common::GearSetSlot::Head );
m_data.models[ 1 ] = bnpc.getModelForSlot( Common::GearSetSlot::Body );
m_data.models[ 2 ] = bnpc.getModelForSlot( Common::GearSetSlot::Hands );
m_data.models[ 3 ] = bnpc.getModelForSlot( Common::GearSetSlot::Legs );
m_data.models[ 4 ] = bnpc.getModelForSlot( Common::GearSetSlot::Feet );
//strcpy( m_data.name, player.getName().c_str() );
m_data.pos.x = bnpc.getPos().x;
m_data.pos.y = bnpc.getPos().y;
m_data.pos.z = bnpc.getPos().z;
m_data.rotation = Math::Util::floatToUInt16Rot( bnpc.getRot() );
m_data.voice = bnpc.getVoiceId();
m_data.currentMount = bnpc.getCurrentMount();
m_data.onlineStatus = static_cast< uint8_t >( bnpc.getOnlineStatus() );
//m_data.u23 = 0x04;
//m_data.u24 = 256;
m_data.state = static_cast< uint8_t >( bnpc.getStatus() );
m_data.modelType = bnpc.getObjKind();
if( target.getId() == bnpc.getId() )
{
m_data.spawnIndex = 0x00;
}
else
{
m_data.spawnIndex = target.getSpawnIdForActorId( bnpc.getId() );
if( !target.isActorSpawnIdValid( m_data.spawnIndex ) )
return;
}
// 0x20 == spawn hidden to be displayed by the spawneffect control
m_data.displayFlags = bnpc.getStance();
if( bnpc.getZoningType() != Common::ZoneingType::None || bnpc.getGmInvis() == true )
{
m_data.displayFlags |= static_cast< uint16_t >( Common::DisplayFlags::Invisible );
}
if( bnpc.getEquipDisplayFlags() & Core::Common::EquipDisplayFlags::HideHead )
{
m_data.displayFlags |= static_cast< uint16_t >( Common::DisplayFlags::HideHead );
}
if( bnpc.getEquipDisplayFlags() & Core::Common::EquipDisplayFlags::HideWeapon )
{
m_data.displayFlags |= static_cast< uint16_t >( Common::DisplayFlags::HideWeapon );
}
if( bnpc.getEquipDisplayFlags() & Core::Common::EquipDisplayFlags::Visor )
{
m_data.displayFlags |= static_cast< uint16_t >( Common::DisplayFlags::Visor );
}
if( !( bnpc.getEquipDisplayFlags() & Core::Common::EquipDisplayFlags::HideLegacyMark ) )
{
m_data.look[ 0xC ] = m_data.look[ 0xC ] | 1 << 7;
}
m_data.currentMount = bnpc.getCurrentMount();
m_data.persistentEmote = bnpc.getPersistentEmote();
m_data.targetId = bnpc.getTargetId();
//m_data.type = 1;
//m_data.unknown_33 = 4;
//m_data.unknown_38 = 0x70;
//m_data.unknown_60 = 3;
//m_data.unknown_61 = 7;
uint64_t currentTimeMs = Core::Util::getTimeMs();
for( auto const& effect : bnpc.getStatusEffectMap() )
{
m_data.effect[ effect.first ].effect_id = effect.second->getId();
m_data.effect[ effect.first ].duration = static_cast< float >( effect.second->getDuration() -
( currentTimeMs -
effect.second->getStartTimeMs() ) ) / 1000;
m_data.effect[ effect.first ].sourceActorId = effect.second->getSrcActorId();
m_data.effect[ effect.first ].unknown1 = effect.second->getParam();
}
};
};
}
}
}
}
#endif /*_PlayerSpawn_H*/

View file

@ -17,8 +17,7 @@ namespace Server {
/**
* @brief The packet sent to spawn a player.
*/
class PlayerSpawnPacket :
public ZoneChannelPacket< FFXIVIpcPlayerSpawn >
class PlayerSpawnPacket : public ZoneChannelPacket< FFXIVIpcPlayerSpawn >
{
public:
PlayerSpawnPacket( Entity::Player& player, Entity::Player& target ) :
@ -31,7 +30,6 @@ private:
void initialize( Entity::Player& player, Entity::Player& target )
{
// todo: figure out unkown offsets
m_data.classJob = static_cast< uint8_t >( player.getClass() );
//m_data.status = static_cast< uint8_t >( pPlayer->getStatus() );
@ -132,8 +130,7 @@ private:
m_data.effect[ effect.first ].effect_id = effect.second->getId();
m_data.effect[ effect.first ].duration = static_cast< float >( effect.second->getDuration() -
( currentTimeMs -
effect.second->getStartTimeMs() ) ) /
1000;
effect.second->getStartTimeMs() ) ) / 1000;
m_data.effect[ effect.first ].sourceActorId = effect.second->getSrcActorId();
m_data.effect[ effect.first ].unknown1 = effect.second->getParam();
}

View file

@ -12,13 +12,11 @@
#include <Exd/ExdDataGenerated.h>
#include <Network/PacketContainer.h>
#include <Database/DbLoader.h>
#include <Database/CharaDbConnection.h>
#include <Database/DbWorkerPool.h>
#include <Database/PreparedStatement.h>
#include <Database/DatabaseDef.h>
#include <Util/Util.h>
#include "Actor/Player.h"
#include "Actor/BNpcTemplate.h"
#include "Network/GameConnection.h"
#include "Session.h"
@ -28,7 +26,7 @@
#include "Script/ScriptMgr.h"
#include "Linkshell/LinkshellMgr.h"
#include "Forwards.h"
#include "ForwardsZone.h"
#include <boost/make_shared.hpp>
#include <thread>
@ -58,7 +56,7 @@ bool Core::ServerZone::loadSettings( int32_t argc, char* argv[] )
auto pLog = g_fw.get< Core::Logger >();
auto pConfig = g_fw.get< Core::ConfigMgr >();
auto pExd = g_fw.get< Data::ExdDataGenerated >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
pLog->info( "Loading config " + m_configName );
@ -181,6 +179,8 @@ void Core::ServerZone::run( int32_t argc, char* argv[] )
pLog->info( "TerritoryMgr: Setting up zones" );
pTeriMgr->init();
loadBNpcTemplates();
std::vector< std::thread > thread_list;
thread_list.emplace_back( std::thread( std::bind( &Network::Hive::Run, hive.get() ) ) );
@ -212,7 +212,7 @@ void Core::ServerZone::mainLoop()
auto pLog = g_fw.get< Logger >();
auto pTeriMgr = g_fw.get< TerritoryMgr >();
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
while( isRunning() )
{
@ -224,8 +224,8 @@ void Core::ServerZone::mainLoop()
pScriptMgr->update();
lock_guard< std::mutex > lock( this->m_sessionMutex );
for( auto sessionIt : this->m_sessionMapById )
lock_guard< std::mutex > lock( m_sessionMutex );
for( auto sessionIt : m_sessionMapById )
{
auto session = sessionIt.second;
if( session && session->getPlayer() )
@ -246,8 +246,8 @@ void Core::ServerZone::mainLoop()
}
auto it = this->m_sessionMapById.begin();
for( ; it != this->m_sessionMapById.end(); )
auto it = m_sessionMapById.begin();
for( ; it != m_sessionMapById.end(); )
{
auto diff = std::difftime( currTime, it->second->getLastDataTime() );
@ -260,7 +260,7 @@ void Core::ServerZone::mainLoop()
// if( it->second.unique() )
{
pLog->info( "[" + std::to_string( it->second->getId() ) + "] Session removal" );
it = this->m_sessionMapById.erase( it );
it = m_sessionMapById.erase( it );
removeSession( pPlayer->getName() );
continue;
}
@ -274,7 +274,7 @@ void Core::ServerZone::mainLoop()
it->second->close();
// if( it->second.unique() )
{
it = this->m_sessionMapById.erase( it );
it = m_sessionMapById.erase( it );
removeSession( pPlayer->getName() );
}
}
@ -338,7 +338,7 @@ Core::SessionPtr Core::ServerZone::getSession( uint32_t id )
return nullptr;
}
Core::SessionPtr Core::ServerZone::getSession( std::string playerName )
Core::SessionPtr Core::ServerZone::getSession( const std::string& playerName )
{
//std::lock_guard<std::mutex> lock( m_sessionMutex );
@ -350,7 +350,7 @@ Core::SessionPtr Core::ServerZone::getSession( std::string playerName )
return nullptr;
}
void Core::ServerZone::removeSession( std::string playerName )
void Core::ServerZone::removeSession( const std::string& playerName )
{
m_sessionMapByName.erase( playerName );
}
@ -361,3 +361,66 @@ bool Core::ServerZone::isRunning() const
return m_bRunning;
}
void Core::ServerZone::loadBNpcTemplates()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pTeriMgr = g_fw.get< TerritoryMgr >();
auto pLog = g_fw.get< Logger >();
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::ZONE_SEL_BNPCTEMPLATES );
auto res = pDb->query( stmt );
while( res->next() )
{
//Id, Name, bNPCBaseId, bNPCNameId, mainWeaponModel,
//secWeaponModel, aggressionMode, enemyType, pose,
//modelChara, displayFlags, Look, Models
auto id = res->getUInt( 1 );
auto name = res->getString( 2 );
auto bNPCBaseId = res->getUInt( 3 );
auto bNPCNameId = res->getUInt( 4 );
auto mainWeaponModel = res->getUInt64( 5 );
auto secWeaponModel = res->getUInt64( 6 );
auto aggressionMode = res->getUInt8( 7 );
auto enemyType = res->getUInt8( 8 );
auto pose = res->getUInt8( 9 );
auto modelChara = res->getUInt( 10 );
auto displayFlags = res->getUInt( 11 );
auto look = res->getBlobVector( 12 );
auto models = res->getBlobVector( 13 );
auto bnpcTemplate = boost::make_shared< Entity::BNpcTemplate >(
id, bNPCBaseId, bNPCNameId, mainWeaponModel, secWeaponModel,
aggressionMode, enemyType, 0, pose, modelChara, displayFlags,
reinterpret_cast< uint32_t* >( &models[ 0 ] ),
reinterpret_cast< uint8_t* >( &look[ 0 ] ) );
m_bNpcTemplateMap[ name ] = bnpcTemplate;
}
pLog->debug( "BNpc Templates loaded: " + std::to_string( m_bNpcTemplateMap.size() ) );
}
Core::Entity::BNpcTemplatePtr Core::ServerZone::getBNpcTemplate( const std::string& key )
{
auto it = m_bNpcTemplateMap.find( key );
if( it == m_bNpcTemplateMap.end() )
return nullptr;
return it->second;
}
Core::Entity::BNpcTemplatePtr Core::ServerZone::getBNpcTemplate( uint32_t id )
{
for( auto entry : m_bNpcTemplateMap )
{
if( entry.second->getId() == id )
return entry.second;
}
return nullptr;
}

View file

@ -7,7 +7,9 @@
#include <mutex>
#include <map>
#include "Forwards.h"
#include "ForwardsZone.h"
#include "Actor/BNpcTemplate.h"
namespace Core {
@ -23,14 +25,10 @@ public:
bool createSession( uint32_t sessionId );
void removeSession( uint32_t sessionId );
void removeSession( std::string playerName );
bool loadSettings( int32_t argc, char* argv[] );
void removeSession( const std::string& playerName );
SessionPtr getSession( uint32_t id );
SessionPtr getSession( std::string playerName );
SessionPtr getSession( const std::string& playerName );
size_t getSessionCount() const;
@ -40,8 +38,13 @@ public:
void printBanner() const;
private:
bool loadSettings( int32_t argc, char* argv[] );
void loadBNpcTemplates();
Entity::BNpcTemplatePtr getBNpcTemplate( const std::string& key );
Entity::BNpcTemplatePtr getBNpcTemplate( uint32_t id );
private:
uint16_t m_port;
std::string m_ip;
int64_t m_lastDBPingTime;
@ -57,6 +60,8 @@ private:
std::map< uint32_t, uint32_t > m_zones;
std::map< std::string, Entity::BNpcTemplatePtr > m_bNpcTemplateMap;
};
}

View file

@ -4,7 +4,7 @@
#include <boost/enable_shared_from_this.hpp>
#include <boost/shared_ptr.hpp>
#include "Forwards.h"
#include "ForwardsZone.h"
namespace Core {

View file

@ -4,7 +4,7 @@
#include <stdint.h>
#include "Forwards.h"
#include "ForwardsZone.h"
#include <set>
namespace Core {

View file

@ -282,7 +282,7 @@ Core::ZonePtr Core::TerritoryMgr::getInstanceZonePtr( uint32_t instanceId ) cons
void Core::TerritoryMgr::loadTerritoryPositionMap()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pQR = pDb->query( "SELECT id, target_zone_id, pos_x, pos_y, pos_z, pos_o, radius FROM zonepositions;" );
while( pQR->next() )

View file

@ -1,7 +1,7 @@
#ifndef SAPPHIRE_TERRITORYMGR_H
#define SAPPHIRE_TERRITORYMGR_H
#include "Forwards.h"
#include "ForwardsZone.h"
#include <set>
#include <unordered_map>

View file

@ -21,6 +21,7 @@
#include "Session.h"
#include "Actor/Chara.h"
#include "Actor/Actor.h"
#include "Actor/BNpc.h"
#include "Actor/Player.h"
#include "Actor/EventObject.h"
@ -29,7 +30,7 @@
#include "Script/ScriptMgr.h"
#include "Session.h"
#include "Forwards.h"
#include "ForwardsZone.h"
#include "ServerZone.h"
#include "CellHandler.h"
#include "Zone.h"
@ -229,6 +230,14 @@ void Core::Zone::pushActor( Entity::ActorPtr pActor )
m_playerMap[ pPlayer->getId() ] = pPlayer;
updateCellActivity( cx, cy, 2 );
}
else if( pActor->isBattleNpc() )
{
auto pBNpc = pActor->getAsBNpc();
m_bNpcMap[ pBNpc->getId() ] = pBNpc;
updateCellActivity( cx, cy, 2 );
}
}
void Core::Zone::removeActor( Entity::ActorPtr pActor )
@ -258,6 +267,10 @@ void Core::Zone::removeActor( Entity::ActorPtr pActor )
onLeaveTerritory( *pActor->getAsPlayer() );
}
else if( pActor->isBattleNpc() )
{
m_bNpcMap.erase( pActor->getId() );
}
// remove from lists of other actors
pActor->removeFromInRange();
@ -634,7 +647,7 @@ void Core::Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell )
pCurAct->addInRangeActor( pActor );
// this is a hack to limit actor spawn in one packetset
if( count++ > 12 )
if( count++ > 10 )
break;
}
else if( !isInRange && isInRangeSet )

View file

@ -39,6 +39,7 @@ protected:
std::string m_internalName;
std::unordered_map< int32_t, Entity::PlayerPtr > m_playerMap;
std::unordered_map< int32_t, Entity::BNpcPtr > m_bNpcMap;
std::unordered_map< int32_t, Entity::EventObjectPtr > m_eventObjects;
SessionSet m_sessionSet;
@ -77,9 +78,7 @@ public:
virtual uint32_t getTerritoryId() const;
virtual void onBeforePlayerZoneIn( Entity::Player& player )
{
};
virtual void onBeforePlayerZoneIn( Entity::Player& player ) {};
virtual void onPlayerZoneIn( Entity::Player& player );
@ -87,17 +86,13 @@ public:
virtual void onInitDirector( Entity::Player& player );
virtual void onDirectorSync( Entity::Player& player )
{
};
virtual void onDirectorSync( Entity::Player& player ) {};
virtual void onLeaveTerritory( Entity::Player& player );
virtual void onUpdate( uint32_t currTime );
virtual void onRegisterEObj( Entity::EventObjectPtr object )
{
};
virtual void onRegisterEObj( Entity::EventObjectPtr object ) {};
virtual void onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 );

View file

@ -6,7 +6,7 @@
#include <Logging/Logger.h>
#include <Exd/ExdDataGenerated.h>
#include "Script/ScriptMgr.h"
#include <Database/CharaDbConnection.h>
#include <Database/ZoneDbConnection.h>
#include <Database/DbWorkerPool.h>
#include "Linkshell/LinkshellMgr.h"
#include "Zone/TerritoryMgr.h"
@ -24,7 +24,7 @@ bool setupFramework()
auto pLogger = boost::make_shared< Logger >();
auto pExdData = boost::make_shared< Data::ExdDataGenerated >();
auto pScript = boost::make_shared< Scripting::ScriptMgr >();
auto pDb = boost::make_shared< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pDb = boost::make_shared< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pLsMgr = boost::make_shared< LinkshellMgr >();
auto pTeriMgr = boost::make_shared< TerritoryMgr >();
auto pDebugCom = boost::make_shared< DebugCommandHandler >();
@ -37,7 +37,7 @@ bool setupFramework()
g_fw.set< Logger >( pLogger );
g_fw.set< Data::ExdDataGenerated >( pExdData );
g_fw.set< Scripting::ScriptMgr >( pScript );
g_fw.set< Db::DbWorkerPool< Db::CharaDbConnection > >( pDb );
g_fw.set< Db::DbWorkerPool< Db::ZoneDbConnection > >( pDb );
g_fw.set< LinkshellMgr >( pLsMgr );
g_fw.set< TerritoryMgr >( pTeriMgr );
g_fw.set< DebugCommandHandler >( pDebugCom );

View file

@ -16,6 +16,8 @@
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <boost/filesystem.hpp>
#include <boost/variant/detail/substitute.hpp>
#include <boost/format.hpp>
using namespace boost::system;
namespace filesys = boost::filesystem;
@ -117,6 +119,19 @@ struct FFXIVIpcNpcSpawn
uint32_t unk34;
};
std::string binaryToHexString( uint8_t* pBinData, uint16_t size )
{
std::string outStr;
for( uint32_t i = 0; i < size; i++ )
{
outStr += boost::str( boost::format( "%|02X|" ) % ( int32_t ) ( pBinData[ i ] & 0xFF ) );
}
return outStr;
}
std::vector< std::string > getAllFilesInDir( const std::string& dirPath,
const std::vector< std::string > dirSkipList = {} )
@ -175,7 +190,179 @@ std::vector< std::string > getAllFilesInDir( const std::string& dirPath,
}
int main()
std::string delChar( std::string &str, char del )
{
str.erase( std::remove( str.begin(), str.end(), del ), str.end() );
return str;
}
int dumpSpawns()
{
g_log.init();
g_log.info( "Setting up EXD data" );
if( !g_exdData.init( datLocation ) )
{
g_log.fatal( "Error setting up EXD data " );
return 0;
}
std::map< int, std::vector< FFXIVIpcNpcSpawn > > nameToPacketList;
std::map< int, std::vector< FFXIVIpcNpcSpawn > > zoneToPacketList;
auto listOfFiles = getAllFilesInDir( "G:\\programming\\sapphire\\github\\ffxivmon\\bin\\CapturedNpcs",
{ ".svn", "logs", "backup" } );
for( auto file : listOfFiles )
{
if( !filesys::is_directory( file ) )
{
auto pos = file.find_last_of( "\\" );
if( pos != std::string::npos )
{
auto pos = file.find_last_of( filesys::path::preferred_separator );
if( pos != std::string::npos )
{
auto str = file.substr( 0, pos );
pos = str.find_last_of( filesys::path::preferred_separator );
auto zone = str.substr( pos + 1 );
//g_log.info( zone );
FFXIVIpcNpcSpawn packet;
std::ifstream is;
is.open( file, std::ios::binary );
is.seekg( 0x20, std::ios::beg );
is.read( ( char* ) &packet, sizeof( FFXIVIpcNpcSpawn ) );
is.close();
if( packet.subtype != 2 &&
packet.subtype != 3 &&
packet.enemyType != 0 &&
packet.spawnerId == 0xE0000000 &&
packet.fateID == 0 &&
packet.directorId == 0 )
zoneToPacketList[ std::stoi( zone ) ].push_back( packet );
}
}
}
}
//std::ofstream out("output.txt");
int spawngroups = 0;
for( auto entry : zoneToPacketList )
{
//auto nameStruct = g_exdData.get< Core::Data::BNpcName >( entry.first );
auto teri1 = g_exdData.get< Core::Data::TerritoryType >( entry.first );
auto teriPlaceName = g_exdData.get< Core::Data::PlaceName >( teri1->placeName );
g_log.info( std::to_string( entry.first ) + " - " + teri1->name + " - " + teriPlaceName->name );
g_log.info( "Mob Count: " + std::to_string( entry.second.size() ) );
for( auto mob : entry.second )
{
nameToPacketList[ mob.bNPCBase ].push_back( mob );
auto nameStruct = g_exdData.get< Core::Data::BNpcName >( mob.bNPCName );
//g_log.info( nameStruct->singular + " " + std::to_string( packet.bNPCBase ) );
}
std::map< std::string, std::vector< FFXIVIpcNpcSpawn > > lvlToPacket;
for( auto mobName : nameToPacketList )
{
for( FFXIVIpcNpcSpawn instance : mobName.second )
{
lvlToPacket[ std::to_string( instance.level ) + "_" + std::to_string( instance.bNPCBase ) ].push_back( instance );
}
}
for( auto mobName : lvlToPacket )
{
auto nameStruct = g_exdData.get< Core::Data::BNpcName >( mobName.second.at(0).bNPCName );
g_log.info( "|--> " + nameStruct->singular + "(" + std::to_string( mobName.second.size() ) + ")" );
spawngroups++;
for( FFXIVIpcNpcSpawn instance : mobName.second )
{
std::string modelStr = "[";
for( auto modelEntry : instance.models )
{
modelStr += std::to_string( modelEntry ) + ", ";
}
modelStr += "]";
std::string cusStr = "[";
for( auto cusEntry : instance.look )
{
cusStr += std::to_string( cusEntry ) + ", ";
}
cusStr += "]";
modelStr = binaryToHexString( (uint8_t*)instance.models, 40 );
cusStr = binaryToHexString( (uint8_t*)instance.look, 26 );
std::string name = delChar( nameStruct->singular, ' ' );
name = delChar( name, '\'' );
g_log.info( "|----> " + name + "_" + std::to_string( instance.bNPCBase ) + " " +
std::to_string( instance.posX ) + ", " +
std::to_string( instance.posY ) + ", " +
std::to_string( instance.posZ ) + ", " +
std::to_string( instance.modelChara ) + ", " +
std::to_string( instance.gimmickId ) + ", " +
std::to_string( instance.level ) + ", " +
std::to_string( instance.hPMax ) );
//g_log.info( "|----> " + name + " - " + std::to_string( instance.bNPCBase ) + ", " + std::to_string( instance.gimmickId ) );
/*std::string output = "INSERT IGNORE INTO `bnpctemplate` ( `Name`, `bNPCBaseId`, `bNPCNameId`, `mainWeaponModel`, `secWeaponModel`, `aggressionMode`, `enemyType`, `pose`, `modelChara`, `displayFlags`, `Look`, `Models`) "
"VALUES ( \"" + name +"_" + std::to_string( instance.bNPCBase ) + "\", "
+ std::to_string( instance.bNPCBase ) + ", "
+ std::to_string( instance.bNPCName ) + ", "
+ std::to_string( instance.mainWeaponModel ) + ", "
+ std::to_string( instance.secWeaponModel ) + ", "
+ std::to_string( instance.aggressionMode ) + ", "
+ std::to_string( instance.enemyType ) + ", "
+ std::to_string( instance.pose ) + ", "
+ std::to_string( instance.modelChara ) + ", "
+ std::to_string( instance.displayFlags ) + ", "
+ "UNHEX( '" + cusStr + "'), "
+ "UNHEX( '" + modelStr + "') );\n";*/
//g_log.info( output );
//out << output;
}
}
nameToPacketList.clear();
}
g_log.info( "|--> Total SpawnGroups: " + std::to_string( spawngroups ) );
return 0;
}
int dumpTemplates()
{
g_log.init();
@ -258,6 +445,8 @@ int main()
}
std::ofstream out("output.txt");
for( auto entry : zoneToPacketList )
{
@ -269,7 +458,7 @@ int main()
for( auto mob : entry.second )
{
nameToPacketList[ mob.bNPCName ].push_back( mob );
nameToPacketList[ mob.bNPCBase ].push_back( mob );
auto nameStruct = g_exdData.get< Core::Data::BNpcName >( mob.bNPCName );
//g_log.info( nameStruct->singular + " " + std::to_string( packet.bNPCBase ) );
@ -279,10 +468,11 @@ int main()
for( auto mobName : nameToPacketList )
{
auto nameStruct = g_exdData.get< Core::Data::BNpcName >( mobName.first );
auto nameStruct = g_exdData.get< Core::Data::BNpcName >( mobName.second.at(0).bNPCName );
g_log.info( "|--> " + nameStruct->singular + "(" + std::to_string( mobName.second.size() ) + ")" );
for( FFXIVIpcNpcSpawn instance : mobName.second )
auto instance = mobName.second.at(0);
//for( FFXIVIpcNpcSpawn instance : mobName.second )
{
std::string modelStr = "[";
@ -305,18 +495,43 @@ int main()
cusStr += "]";
//g_log.info( "|----> " + std::to_string( instance.bNPCBase ) + " " + std::to_string( instance.posX ) + ", " + std::to_string( instance.posY ) + ", " + std::to_string( instance.posZ ) );
/*g_log.info( "|----> " + std::to_string( instance.bNPCBase ) +
" " + std::to_string( instance.mainWeaponModel ) +
", " + std::to_string( instance.secWeaponModel ) +
", " + std::to_string( instance.aggressionMode ) +
", " + std::to_string( instance.enemyType ) +
", " + std::to_string( instance.onlineStatus ) +
", " + std::to_string( instance.pose ) +
", " + std::to_string( instance.modelChara ) +
", " + std::to_string( instance.displayFlags ) + ", " + modelStr + ", " + cusStr + ", " + std::to_string( instance.gimmickId ) );*/
modelStr = binaryToHexString( (uint8_t*)instance.models, 40 );
g_log.info( "|----> " + std::to_string( instance.bNPCBase ) +
cusStr = binaryToHexString( (uint8_t*)instance.look, 26 );
//g_log.info( "|----> " + std::to_string( instance.bNPCBase ) + " " + std::to_string( instance.posX ) + ", " + std::to_string( instance.posY ) + ", " + std::to_string( instance.posZ ) );
// g_log.info( "|----> " + std::to_string( instance.bNPCBase ) +
// " " + std::to_string( instance.mainWeaponModel ) +
// ", " + std::to_string( instance.secWeaponModel ) +
// ", " + std::to_string( instance.aggressionMode ) +
// ", " + std::to_string( instance.enemyType ) +
// ", " + std::to_string( instance.onlineStatus ) +
// ", " + std::to_string( instance.pose ) +
// ", " + std::to_string( instance.modelChara ) +
// ", " + std::to_string( instance.displayFlags ) + ", " + modelStr + ", " + cusStr + ", " + std::to_string( instance.gimmickId ) );
std::string name = delChar( nameStruct->singular, ' ' );
name = delChar( name, '\'' );
std::string output = "INSERT IGNORE INTO `bnpctemplate` ( `Name`, `bNPCBaseId`, `bNPCNameId`, `mainWeaponModel`, `secWeaponModel`, `aggressionMode`, `enemyType`, `pose`, `modelChara`, `displayFlags`, `Look`, `Models`) "
"VALUES ( \"" + name +"_" + std::to_string( instance.bNPCBase ) + "\", "
+ std::to_string( instance.bNPCBase ) + ", "
+ std::to_string( instance.bNPCName ) + ", "
+ std::to_string( instance.mainWeaponModel ) + ", "
+ std::to_string( instance.secWeaponModel ) + ", "
+ std::to_string( instance.aggressionMode ) + ", "
+ std::to_string( instance.enemyType ) + ", "
+ std::to_string( instance.pose ) + ", "
+ std::to_string( instance.modelChara ) + ", "
+ std::to_string( instance.displayFlags ) + ", "
+ "UNHEX( '" + cusStr + "'), "
+ "UNHEX( '" + modelStr + "') );\n";
g_log.info( output );
out << output;
/* g_log.info( "|----> " + std::to_string( instance.bNPCBase ) +
" " + std::to_string( instance.u2ab ) +
", " + std::to_string( instance.u2b ) +
", " + std::to_string( instance.u3b ) +
@ -337,12 +552,13 @@ int main()
", " + std::to_string( instance.unk31 ) +
", " + std::to_string( instance.unk32 ) +
", " + std::to_string( instance.unk33 ) +
", " + std::to_string( instance.unk34 ) );
", " + std::to_string( instance.unk34 ) );*/
}
}
nameToPacketList.clear();
}
}
out.close();
/*g_log.info( "getting id list " );
auto idList = g_exdData.getTerritoryTypeIdList();
@ -356,3 +572,11 @@ int main()
return 0;
}
int main()
{
dumpSpawns();
return 0;
}