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:
parent
d221758355
commit
0d767e4986
50 changed files with 901 additions and 1552 deletions
1318
sql/battlenpc.sql
1318
sql/battlenpc.sql
File diff suppressed because it is too large
Load diff
244
sql/bnpctemplate.sql
Normal file
244
sql/bnpctemplate.sql
Normal 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);
|
|
@ -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
|
||||
|
|
|
@ -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& );
|
||||
|
||||
|
|
|
@ -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 >;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#define _ACTION_H_
|
||||
|
||||
#include <Common.h>
|
||||
#include "../Forwards.h"
|
||||
#include "../ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
namespace Action {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef _ACTIONCAST_H_
|
||||
#define _ACTIONCAST_H_
|
||||
|
||||
#include "../Forwards.h"
|
||||
#include "../ForwardsZone.h"
|
||||
#include "Action.h"
|
||||
|
||||
namespace Core {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#define _ACTIONCOLLISION_H
|
||||
|
||||
#include <Common.h>
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
namespace Data {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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 )
|
||||
{
|
||||
|
||||
}
|
|
@ -28,6 +28,8 @@ public:
|
|||
|
||||
virtual ~BNpc() override;
|
||||
|
||||
void spawn( PlayerPtr pTarget ) override;
|
||||
|
||||
private:
|
||||
uint32_t m_bNpcBaseId;
|
||||
uint32_t m_bNpcNameId;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -18,8 +18,7 @@ namespace Entity {
|
|||
\brief Base class for all Npcs
|
||||
|
||||
*/
|
||||
class Npc :
|
||||
public Chara
|
||||
class Npc : public Chara
|
||||
{
|
||||
|
||||
public:
|
||||
|
|
|
@ -36,8 +36,7 @@ struct QueuedZoning
|
|||
* Inheriting from Actor
|
||||
*
|
||||
*/
|
||||
class Player :
|
||||
public Chara
|
||||
class Player : public Chara
|
||||
{
|
||||
public:
|
||||
/*! Contructor */
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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, "
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef _CONTENTFINDER_H
|
||||
#define _CONTENTFINDER_H
|
||||
|
||||
#include "../Forwards.h"
|
||||
#include "../ForwardsZone.h"
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include <Common.h>
|
||||
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
|
||||
|
|
|
@ -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 = "";
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include <Common.h>
|
||||
|
||||
#include "DebugCommand.h"
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include <Common.h>
|
||||
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
namespace Event {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef _EVENT_H
|
||||
#define _EVENT_H
|
||||
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
namespace Event {
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
|
@ -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() )
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#include <Common.h>
|
||||
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
|
||||
|
|
|
@ -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() )
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#define SAPPHIRE_ITEMUTIL_H
|
||||
|
||||
#include <Common.h>
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
namespace Items {
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 )
|
||||
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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*/
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include <boost/enable_shared_from_this.hpp>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Core {
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
#include <set>
|
||||
|
||||
namespace Core {
|
||||
|
|
|
@ -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() )
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef SAPPHIRE_TERRITORYMGR_H
|
||||
#define SAPPHIRE_TERRITORYMGR_H
|
||||
|
||||
#include "Forwards.h"
|
||||
#include "ForwardsZone.h"
|
||||
#include <set>
|
||||
#include <unordered_map>
|
||||
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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,44 +495,70 @@ 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 ) +
|
||||
" " + std::to_string( instance.u2ab ) +
|
||||
", " + std::to_string( instance.u2b ) +
|
||||
", " + std::to_string( instance.u3b ) +
|
||||
", " + std::to_string( instance.u3c ) +
|
||||
", " + std::to_string( instance.u4 ) +
|
||||
", " + std::to_string( instance.u6 ) +
|
||||
", " + std::to_string( instance.u7 ) +
|
||||
", " + std::to_string( instance.u14 ) +
|
||||
", " + std::to_string( instance.u15 ) +
|
||||
", " + std::to_string( instance.u18 ) +
|
||||
", " + std::to_string( instance.u19 ) +
|
||||
", " + std::to_string( instance.u25c ) +
|
||||
", " + std::to_string( instance.u26d ) +
|
||||
", " + std::to_string( instance.u27a ) +
|
||||
", " + std::to_string( instance.u29b ) +
|
||||
", " + std::to_string( instance.u30b ) +
|
||||
", " + std::to_string( instance.unk30 ) +
|
||||
", " + std::to_string( instance.unk31 ) +
|
||||
", " + std::to_string( instance.unk32 ) +
|
||||
", " + std::to_string( instance.unk33 ) +
|
||||
", " + std::to_string( instance.unk34 ) );
|
||||
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 ) +
|
||||
", " + std::to_string( instance.u3c ) +
|
||||
", " + std::to_string( instance.u4 ) +
|
||||
", " + std::to_string( instance.u6 ) +
|
||||
", " + std::to_string( instance.u7 ) +
|
||||
", " + std::to_string( instance.u14 ) +
|
||||
", " + std::to_string( instance.u15 ) +
|
||||
", " + std::to_string( instance.u18 ) +
|
||||
", " + std::to_string( instance.u19 ) +
|
||||
", " + std::to_string( instance.u25c ) +
|
||||
", " + std::to_string( instance.u26d ) +
|
||||
", " + std::to_string( instance.u27a ) +
|
||||
", " + std::to_string( instance.u29b ) +
|
||||
", " + std::to_string( instance.u30b ) +
|
||||
", " + std::to_string( instance.unk30 ) +
|
||||
", " + std::to_string( instance.unk31 ) +
|
||||
", " + std::to_string( instance.unk32 ) +
|
||||
", " + std::to_string( instance.unk33 ) +
|
||||
", " + 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue