Skip to content

Commit

Permalink
#2141 Fixed DOTI: Galakrond's Fall mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
Wotuu committed Nov 21, 2023
1 parent ac6877a commit b0a3199
Show file tree
Hide file tree
Showing 23 changed files with 488 additions and 3,516 deletions.
52 changes: 27 additions & 25 deletions app/Service/MDT/MDTMappingImportService.php
Original file line number Diff line number Diff line change
Expand Up @@ -170,21 +170,23 @@ private function importNpcs(MappingVersion $newMappingVersion, MDTDungeon $mdtDu

try {
if ($newlyCreated ? $npc->save() : $npc->update()) {
if ($newlyCreated) {
// For new NPCs go back and create enemy forces for all historical mapping versions
$npc->createNpcEnemyForcesForExistingMappingVersions($mdtNpc->getCount());

$this->log->importNpcsSaveNewNpc($npc->id);
} else {
// Create new enemy forces for this NPC for this new mapping version
NpcEnemyForces::create([
'mapping_version_id' => $newMappingVersion->id,
'npc_id' => $npc->id,
'enemy_forces' => $mdtNpc->getCount(),
'enemy_forces_teeming' => null,
]);

$this->log->importNpcsUpdateExistingNpc($npc->id);
if ($mdtNpc->getCount() > 0) {
if ($newlyCreated) {
// For new NPCs go back and create enemy forces for all historical mapping versions
$npc->createNpcEnemyForcesForExistingMappingVersions($mdtNpc->getCount());

$this->log->importNpcsSaveNewNpc($npc->id);
} else {
// Create new enemy forces for this NPC for this new mapping version
NpcEnemyForces::create([
'mapping_version_id' => $newMappingVersion->id,
'npc_id' => $npc->id,
'enemy_forces' => $mdtNpc->getCount(),
'enemy_forces_teeming' => null,
]);

$this->log->importNpcsUpdateExistingNpc($npc->id);
}
}

// If shrouded (zul'gamux) update the mapping version to account for that
Expand Down Expand Up @@ -261,7 +263,7 @@ private function importEnemies(
// We ignore MDT's position - we want to keep agency in the location we place enemies still
// since we value VERY MUCH the enemy location being accurate to where they are in-game
if (!$forceImport) {
$fields = array_merge($fields, ['lat', 'lng']);
$fields = array_merge($fields, ['floor_id', 'lat', 'lng']);
}

$updatedFields = [];
Expand Down Expand Up @@ -313,13 +315,13 @@ private function importEnemyPacks(MappingVersion $newMappingVersion, MDTDungeon
->get();

// Conserve the enemy_pack_id
$enemiesWithGroups = $mdtDungeon->getClonesAsEnemies($newMappingVersion, $dungeon->floors()->active()->get());
$enemyPacks = $enemiesWithGroups->groupBy('enemy_pack_id');
$mdtEnemiesWithGroups = $mdtDungeon->getClonesAsEnemies($newMappingVersion, $dungeon->floors()->active()->get());
$mdtEnemyPacks = $mdtEnemiesWithGroups->groupBy('enemy_pack_id');

// Save enemy packs
foreach ($enemyPacks as $groupIndex => $enemiesWithGroupsByEnemyPack) {
/** @var $enemiesWithGroupsByEnemyPack Collection|Enemy[] */
$enemiesWithGroupsByEnemyPack = $enemiesWithGroupsByEnemyPack
foreach ($mdtEnemyPacks as $groupIndex => $mdtEnemiesWithGroupsByEnemyPack) {
/** @var $mdtEnemiesWithGroupsByEnemyPack Collection|Enemy[] */
$mdtEnemiesWithGroupsByEnemyPack = $mdtEnemiesWithGroupsByEnemyPack
->filter(function (Enemy $enemy) {
return $enemy->teeming === null;
})
Expand All @@ -334,7 +336,7 @@ private function importEnemyPacks(MappingVersion $newMappingVersion, MDTDungeon
// We do not re-import the lat/lng from MDT - we allow ourselves to adjust the lat/lng, so we must
// fetch the adjusted lat/lng by matching enemies with what we actually saved
// 1. Get a list of unique keys which we must look for in the real enemy list
$enemiesWithGroupsByEnemyPackUniqueIds = $enemiesWithGroupsByEnemyPack->map(function (Enemy $enemy) {
$enemiesWithGroupsByEnemyPackUniqueIds = $mdtEnemiesWithGroupsByEnemyPack->map(function (Enemy $enemy) {
return $enemy->getUniqueKey();
});
// 2. Find the enemies that were saved in the database by key
Expand All @@ -344,7 +346,7 @@ private function importEnemyPacks(MappingVersion $newMappingVersion, MDTDungeon

$enemyPack = EnemyPack::create([
'mapping_version_id' => $newMappingVersion->id,
'floor_id' => $enemiesWithGroupsByEnemyPack->first()->floor_id,
'floor_id' => $boundingBoxEnemies->first()->floor_id,
'group' => $groupIndex,
'teeming' => null,
'faction' => Faction::FACTION_ANY,
Expand All @@ -355,13 +357,13 @@ private function importEnemyPacks(MappingVersion $newMappingVersion, MDTDungeon
if ($enemyPack === null) {
throw new Exception('Unable to save enemy pack!');
}
$this->log->importEnemyPacksSaveNewEnemyPackOK($enemyPack->id, $enemiesWithGroupsByEnemyPack->count());
$this->log->importEnemyPacksSaveNewEnemyPackOK($enemyPack->id, $mdtEnemiesWithGroupsByEnemyPack->count());

try {
$this->log->importEnemyPacksCoupleEnemyToPackStart($enemyPack->id);
// logger()->channel('stderr')->info(sprintf('- Enemy Pack %d OK (%d enemies)', $enemyPack->id, $enemiesWithGroupsByEnemyPack->count()));

foreach ($enemiesWithGroupsByEnemyPack as $enemyWithGroup) {
foreach ($mdtEnemiesWithGroupsByEnemyPack as $enemyWithGroup) {
// In the list of enemies that we saved to the database, find the enemy that still had the group intact.
// Write the saved enemy's enemy pack back to the database
$savedEnemy = $this->findSavedEnemyFromCloneEnemy($savedEnemies, $enemyWithGroup->npc_id, $enemyWithGroup->mdt_id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,8 @@
"lng": 244.25
},
{
"id": 1003,
"mapping_version_id": 276,
"floor_id": 253,
"source_floor_id": null,
"target_floor_id": 254,
"direction": null,
"lat": -198,
"lng": 244.25
},
{
"id": 1071,
"mapping_version_id": 282,
"id": 1131,
"mapping_version_id": 287,
"floor_id": 253,
"source_floor_id": null,
"target_floor_id": 254,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1311,9 +1311,9 @@
"kill_priority": null
},
{
"id": 43833,
"mapping_version_id": 276,
"enemy_pack_id": 8376,
"id": 45003,
"mapping_version_id": 287,
"enemy_pack_id": 8686,
"enemy_patrol_id": null,
"npc_id": 205408,
"floor_id": 253,
Expand All @@ -1334,9 +1334,9 @@
"kill_priority": null
},
{
"id": 43834,
"mapping_version_id": 276,
"enemy_pack_id": 8376,
"id": 45004,
"mapping_version_id": 287,
"enemy_pack_id": 8686,
"enemy_patrol_id": null,
"npc_id": 205408,
"floor_id": 253,
Expand All @@ -1357,9 +1357,9 @@
"kill_priority": null
},
{
"id": 43835,
"mapping_version_id": 276,
"enemy_pack_id": 8377,
"id": 45005,
"mapping_version_id": 287,
"enemy_pack_id": 8687,
"enemy_patrol_id": null,
"npc_id": 205408,
"floor_id": 253,
Expand All @@ -1380,9 +1380,9 @@
"kill_priority": null
},
{
"id": 43836,
"mapping_version_id": 276,
"enemy_pack_id": 8377,
"id": 45006,
"mapping_version_id": 287,
"enemy_pack_id": 8687,
"enemy_patrol_id": null,
"npc_id": 205408,
"floor_id": 253,
Expand All @@ -1403,9 +1403,9 @@
"kill_priority": null
},
{
"id": 43837,
"mapping_version_id": 276,
"enemy_pack_id": 8378,
"id": 45007,
"mapping_version_id": 287,
"enemy_pack_id": 8688,
"enemy_patrol_id": null,
"npc_id": 205408,
"floor_id": 253,
Expand All @@ -1426,9 +1426,9 @@
"kill_priority": null
},
{
"id": 43838,
"mapping_version_id": 276,
"enemy_pack_id": 8378,
"id": 45008,
"mapping_version_id": 287,
"enemy_pack_id": 8688,
"enemy_patrol_id": null,
"npc_id": 205408,
"floor_id": 253,
Expand All @@ -1449,9 +1449,9 @@
"kill_priority": null
},
{
"id": 43839,
"mapping_version_id": 276,
"enemy_pack_id": 8379,
"id": 45009,
"mapping_version_id": 287,
"enemy_pack_id": 8689,
"enemy_patrol_id": null,
"npc_id": 205408,
"floor_id": 253,
Expand All @@ -1472,9 +1472,9 @@
"kill_priority": null
},
{
"id": 43840,
"mapping_version_id": 276,
"enemy_pack_id": 8379,
"id": 45010,
"mapping_version_id": 287,
"enemy_pack_id": 8689,
"enemy_patrol_id": null,
"npc_id": 205408,
"floor_id": 253,
Expand All @@ -1495,9 +1495,9 @@
"kill_priority": null
},
{
"id": 43845,
"mapping_version_id": 276,
"enemy_pack_id": 8376,
"id": 45015,
"mapping_version_id": 287,
"enemy_pack_id": 8686,
"enemy_patrol_id": null,
"npc_id": 205384,
"floor_id": 253,
Expand All @@ -1518,9 +1518,9 @@
"kill_priority": null
},
{
"id": 43846,
"mapping_version_id": 276,
"enemy_pack_id": 8377,
"id": 45016,
"mapping_version_id": 287,
"enemy_pack_id": 8687,
"enemy_patrol_id": null,
"npc_id": 205384,
"floor_id": 253,
Expand All @@ -1541,9 +1541,9 @@
"kill_priority": null
},
{
"id": 43847,
"mapping_version_id": 276,
"enemy_pack_id": 8377,
"id": 45017,
"mapping_version_id": 287,
"enemy_pack_id": 8687,
"enemy_patrol_id": null,
"npc_id": 205384,
"floor_id": 253,
Expand All @@ -1564,9 +1564,9 @@
"kill_priority": null
},
{
"id": 43848,
"mapping_version_id": 276,
"enemy_pack_id": 8378,
"id": 45018,
"mapping_version_id": 287,
"enemy_pack_id": 8688,
"enemy_patrol_id": null,
"npc_id": 205384,
"floor_id": 253,
Expand All @@ -1587,9 +1587,9 @@
"kill_priority": null
},
{
"id": 43849,
"mapping_version_id": 276,
"enemy_pack_id": 8378,
"id": 45019,
"mapping_version_id": 287,
"enemy_pack_id": 8688,
"enemy_patrol_id": null,
"npc_id": 205384,
"floor_id": 253,
Expand All @@ -1610,9 +1610,9 @@
"kill_priority": null
},
{
"id": 43850,
"mapping_version_id": 276,
"enemy_pack_id": 8379,
"id": 45020,
"mapping_version_id": 287,
"enemy_pack_id": 8689,
"enemy_patrol_id": null,
"npc_id": 205384,
"floor_id": 253,
Expand All @@ -1633,9 +1633,9 @@
"kill_priority": null
},
{
"id": 43853,
"mapping_version_id": 276,
"enemy_pack_id": 8384,
"id": 45023,
"mapping_version_id": 287,
"enemy_pack_id": 8694,
"enemy_patrol_id": null,
"npc_id": 205435,
"floor_id": 253,
Expand All @@ -1656,9 +1656,9 @@
"kill_priority": null
},
{
"id": 43854,
"mapping_version_id": 276,
"enemy_pack_id": 8384,
"id": 45024,
"mapping_version_id": 287,
"enemy_pack_id": 8694,
"enemy_patrol_id": null,
"npc_id": 205435,
"floor_id": 253,
Expand All @@ -1679,9 +1679,9 @@
"kill_priority": null
},
{
"id": 43855,
"mapping_version_id": 276,
"enemy_pack_id": 8379,
"id": 45025,
"mapping_version_id": 287,
"enemy_pack_id": 8689,
"enemy_patrol_id": null,
"npc_id": 205435,
"floor_id": 253,
Expand All @@ -1702,9 +1702,9 @@
"kill_priority": null
},
{
"id": 43856,
"mapping_version_id": 276,
"enemy_pack_id": 8379,
"id": 45026,
"mapping_version_id": 287,
"enemy_pack_id": 8689,
"enemy_patrol_id": null,
"npc_id": 205435,
"floor_id": 253,
Expand All @@ -1725,9 +1725,9 @@
"kill_priority": null
},
{
"id": 43860,
"mapping_version_id": 276,
"enemy_pack_id": 8385,
"id": 45030,
"mapping_version_id": 287,
"enemy_pack_id": 8695,
"enemy_patrol_id": null,
"npc_id": 198995,
"floor_id": 253,
Expand Down
Loading

0 comments on commit b0a3199

Please sign in to comment.