mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-22 13:37:22 +00:00
fix: add Nexus Tower missing scripts (#1349)
add final missing scripts for nt also fix the turnin for the breadcrumb missions not showing the completion window. Fix another missing script Add another script fix include guards Fix dirt clouds not appearing on mission accept
This commit is contained in:
parent
c07c909a57
commit
c1e8546d48
@ -269,6 +269,7 @@ set(INCLUDED_DIRECTORIES
|
|||||||
"dScripts/ai/GENERAL"
|
"dScripts/ai/GENERAL"
|
||||||
"dScripts/ai/GF"
|
"dScripts/ai/GF"
|
||||||
"dScripts/ai/MINIGAME"
|
"dScripts/ai/MINIGAME"
|
||||||
|
"dScripts/ai/MINIGAME/Objects"
|
||||||
"dScripts/ai/NP"
|
"dScripts/ai/NP"
|
||||||
"dScripts/ai/NS"
|
"dScripts/ai/NS"
|
||||||
"dScripts/ai/PETS"
|
"dScripts/ai/PETS"
|
||||||
|
@ -47,10 +47,6 @@ std::vector<LWOMAPID> EntityManager::m_GhostingExcludedZones = {
|
|||||||
|
|
||||||
// Configure some exceptions for ghosting, nessesary for some special objects.
|
// Configure some exceptions for ghosting, nessesary for some special objects.
|
||||||
std::vector<LOT> EntityManager::m_GhostingExcludedLOTs = {
|
std::vector<LOT> EntityManager::m_GhostingExcludedLOTs = {
|
||||||
// NT - Pipes
|
|
||||||
9524,
|
|
||||||
12408,
|
|
||||||
|
|
||||||
// AG - Footrace
|
// AG - Footrace
|
||||||
4967
|
4967
|
||||||
};
|
};
|
||||||
|
@ -621,3 +621,12 @@ bool MissionComponent::HasCollectible(int32_t collectibleID) {
|
|||||||
bool MissionComponent::HasMission(uint32_t missionId) {
|
bool MissionComponent::HasMission(uint32_t missionId) {
|
||||||
return GetMission(missionId) != nullptr;
|
return GetMission(missionId) != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MissionComponent::ResetMission(const int32_t missionId) {
|
||||||
|
auto* mission = GetMission(missionId);
|
||||||
|
|
||||||
|
if (!mission) return;
|
||||||
|
|
||||||
|
m_Missions.erase(missionId);
|
||||||
|
GameMessages::SendResetMissions(m_Parent, m_Parent->GetSystemAddress(), missionId);
|
||||||
|
}
|
||||||
|
@ -170,6 +170,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool HasMission(uint32_t missionId);
|
bool HasMission(uint32_t missionId);
|
||||||
|
|
||||||
|
void ResetMission(const int32_t missionId);
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* All the missions owned by this entity, mapped by mission ID
|
* All the missions owned by this entity, mapped by mission ID
|
||||||
|
@ -29,11 +29,11 @@ uint32_t OfferedMission::GetMissionId() const {
|
|||||||
return this->missionId;
|
return this->missionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OfferedMission::GetOfferMission() const {
|
bool OfferedMission::GetOffersMission() const {
|
||||||
return this->offersMission;
|
return this->offersMission;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OfferedMission::GetAcceptMission() const {
|
bool OfferedMission::GetAcceptsMission() const {
|
||||||
return this->acceptsMission;
|
return this->acceptsMission;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +203,10 @@ void MissionOfferComponent::OfferMissions(Entity* entity, const uint32_t specifi
|
|||||||
const auto selected = canAcceptPool[GeneralUtils::GenerateRandomNumber<int>(0, canAcceptPool.size() - 1)];
|
const auto selected = canAcceptPool[GeneralUtils::GenerateRandomNumber<int>(0, canAcceptPool.size() - 1)];
|
||||||
|
|
||||||
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), selected, m_Parent->GetObjectID());
|
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), selected, m_Parent->GetObjectID());
|
||||||
} else if (std::find(offered.begin(), offered.end(), missionId) == offered.end() && offeredMission->GetOfferMission()) {
|
} else if (
|
||||||
|
std::find(offered.begin(), offered.end(), missionId) == offered.end()
|
||||||
|
&&
|
||||||
|
(offeredMission->GetOffersMission() || offeredMission->GetAcceptsMission())) {
|
||||||
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), missionId, m_Parent->GetObjectID());
|
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), missionId, m_Parent->GetObjectID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,13 +30,13 @@ struct OfferedMission {
|
|||||||
* Returns if this mission is offered by the entity
|
* Returns if this mission is offered by the entity
|
||||||
* @return true if this mission is offered by the entity, false otherwise
|
* @return true if this mission is offered by the entity, false otherwise
|
||||||
*/
|
*/
|
||||||
bool GetOfferMission() const;
|
bool GetOffersMission() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns if this mission may be accepted by the entity (currently unused)
|
* Returns if this mission may be accepted by the entity (currently unused)
|
||||||
* @return true if this mission may be accepted by the entity, false otherwise
|
* @return true if this mission may be accepted by the entity, false otherwise
|
||||||
*/
|
*/
|
||||||
bool GetAcceptMission() const;
|
bool GetAcceptsMission() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -345,6 +345,19 @@ void GameMessages::SendStartPathing(Entity* entity) {
|
|||||||
SEND_PACKET_BROADCAST;
|
SEND_PACKET_BROADCAST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameMessages::SendResetMissions(Entity* entity, const SystemAddress& sysAddr, const int32_t missionid) {
|
||||||
|
CBITSTREAM;
|
||||||
|
CMSGHEADER;
|
||||||
|
|
||||||
|
bitStream.Write(entity->GetObjectID());
|
||||||
|
bitStream.Write(eGameMessageType::RESET_MISSIONS);
|
||||||
|
|
||||||
|
bitStream.Write(missionid != -1);
|
||||||
|
if (missionid != -1) bitStream.Write(missionid);
|
||||||
|
|
||||||
|
SEND_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
void GameMessages::SendPlatformResync(Entity* entity, const SystemAddress& sysAddr, bool bStopAtDesiredWaypoint,
|
void GameMessages::SendPlatformResync(Entity* entity, const SystemAddress& sysAddr, bool bStopAtDesiredWaypoint,
|
||||||
int iIndex, int iDesiredWaypointIndex, int nextIndex,
|
int iIndex, int iDesiredWaypointIndex, int nextIndex,
|
||||||
eMovementPlatformState movementState) {
|
eMovementPlatformState movementState) {
|
||||||
|
@ -74,6 +74,7 @@ namespace GameMessages {
|
|||||||
int iIndex = 0, int iDesiredWaypointIndex = 1, int nextIndex = 1,
|
int iIndex = 0, int iDesiredWaypointIndex = 1, int nextIndex = 1,
|
||||||
eMovementPlatformState movementState = eMovementPlatformState::Moving);
|
eMovementPlatformState movementState = eMovementPlatformState::Moving);
|
||||||
|
|
||||||
|
void SendResetMissions(Entity* entity, const SystemAddress& sysAddr, const int32_t missionid = -1);
|
||||||
void SendRestoreToPostLoadStats(Entity* entity, const SystemAddress& sysAddr);
|
void SendRestoreToPostLoadStats(Entity* entity, const SystemAddress& sysAddr);
|
||||||
void SendServerDoneLoadingAllObjects(Entity* entity, const SystemAddress& sysAddr);
|
void SendServerDoneLoadingAllObjects(Entity* entity, const SystemAddress& sysAddr);
|
||||||
void SendGMLevelBroadcast(const LWOOBJID& objectID, eGameMasterLevel level);
|
void SendGMLevelBroadcast(const LWOOBJID& objectID, eGameMasterLevel level);
|
||||||
|
@ -349,6 +349,17 @@ void SlashCommandHandler::HandleChatCommand(const std::u16string& command, Entit
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chatCommand == "resetmission") {
|
||||||
|
uint32_t missionId;
|
||||||
|
if (!GeneralUtils::TryParse(args[0], missionId)) {
|
||||||
|
ChatPackets::SendSystemMessage(sysAddr, u"Invalid mission ID.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto* missionComponent = entity->GetComponent<MissionComponent>();
|
||||||
|
if (!missionComponent) return;
|
||||||
|
missionComponent->ResetMission(missionId);
|
||||||
|
}
|
||||||
|
|
||||||
if (user->GetMaxGMLevel() == eGameMasterLevel::CIVILIAN || entity->GetGMLevel() >= eGameMasterLevel::CIVILIAN) {
|
if (user->GetMaxGMLevel() == eGameMasterLevel::CIVILIAN || entity->GetGMLevel() >= eGameMasterLevel::CIVILIAN) {
|
||||||
if (chatCommand == "die") {
|
if (chatCommand == "die") {
|
||||||
entity->Smash(entity->GetObjectID());
|
entity->Smash(entity->GetObjectID());
|
||||||
|
@ -223,7 +223,7 @@ void AuthPackets::SendLoginResponse(dServer* server, const SystemAddress& sysAdd
|
|||||||
server->Send(&packet, sysAddr, false);
|
server->Send(&packet, sysAddr, false);
|
||||||
|
|
||||||
//Inform the master server that we've created a session for this user:
|
//Inform the master server that we've created a session for this user:
|
||||||
{
|
if (responseCode == eLoginResponse::SUCCESS) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, eMasterMessageType::SET_SESSION_KEY);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::MASTER, eMasterMessageType::SET_SESSION_KEY);
|
||||||
bitStream.Write(sessionKey);
|
bitStream.Write(sessionKey);
|
||||||
|
@ -3,6 +3,7 @@ set(DSCRIPTS_SOURCES_02_SERVER_MAP_GENERAL
|
|||||||
"BaseInteractDropLootServer.cpp"
|
"BaseInteractDropLootServer.cpp"
|
||||||
"Binoculars.cpp"
|
"Binoculars.cpp"
|
||||||
"ExplodingAsset.cpp"
|
"ExplodingAsset.cpp"
|
||||||
|
"FrictionVolumeServer.cpp"
|
||||||
"ForceVolumeServer.cpp"
|
"ForceVolumeServer.cpp"
|
||||||
"GrowingFlower.cpp"
|
"GrowingFlower.cpp"
|
||||||
"ImaginationBackpackHealServer.cpp"
|
"ImaginationBackpackHealServer.cpp"
|
||||||
@ -17,6 +18,8 @@ set(DSCRIPTS_SOURCES_02_SERVER_MAP_GENERAL
|
|||||||
"StoryBoxInteractServer.cpp"
|
"StoryBoxInteractServer.cpp"
|
||||||
"TokenConsoleServer.cpp"
|
"TokenConsoleServer.cpp"
|
||||||
"TouchMissionUpdateServer.cpp"
|
"TouchMissionUpdateServer.cpp"
|
||||||
|
"VisToggleNotifierServer.cpp"
|
||||||
|
"NTNaomiDirtServer.cpp"
|
||||||
"WishingWellServer.cpp")
|
"WishingWellServer.cpp")
|
||||||
|
|
||||||
add_subdirectory(Ninjago)
|
add_subdirectory(Ninjago)
|
||||||
|
19
dScripts/02_server/Map/General/FrictionVolumeServer.cpp
Normal file
19
dScripts/02_server/Map/General/FrictionVolumeServer.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include "FrictionVolumeServer.h"
|
||||||
|
#include "PhantomPhysicsComponent.h"
|
||||||
|
#include "ePhysicsEffectType.h"
|
||||||
|
#include "Game.h"
|
||||||
|
#include "EntityManager.h"
|
||||||
|
|
||||||
|
void FrictionVolumeServer::OnStartup(Entity* self) {
|
||||||
|
auto frictionAmount = self->GetVar<float>(u"FrictionAmt");
|
||||||
|
if (frictionAmount == 0.0f) frictionAmount = DefaultFrictionAmount;
|
||||||
|
|
||||||
|
auto* phantomPhysicsComponent = self->GetComponent<PhantomPhysicsComponent>();
|
||||||
|
if (!phantomPhysicsComponent) return;
|
||||||
|
|
||||||
|
phantomPhysicsComponent->SetEffectType(ePhysicsEffectType::FRICTION);
|
||||||
|
phantomPhysicsComponent->SetDirectionalMultiplier(frictionAmount);
|
||||||
|
phantomPhysicsComponent->SetPhysicsEffectActive(true);
|
||||||
|
|
||||||
|
Game::entityManager->SerializeEntity(self);
|
||||||
|
}
|
13
dScripts/02_server/Map/General/FrictionVolumeServer.h
Normal file
13
dScripts/02_server/Map/General/FrictionVolumeServer.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#ifndef __FRICTIONVOLUMESERVER__H__
|
||||||
|
#define __FRICTIONVOLUMESERVER__H__
|
||||||
|
|
||||||
|
#include "CppScripts.h"
|
||||||
|
|
||||||
|
class FrictionVolumeServer : public CppScripts::Script {
|
||||||
|
public:
|
||||||
|
void OnStartup(Entity* self) override;
|
||||||
|
private:
|
||||||
|
const float DefaultFrictionAmount = 1.5f;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //!__FRICTIONVOLUMESERVER__H__
|
14
dScripts/02_server/Map/General/NTNaomiDirtServer.cpp
Normal file
14
dScripts/02_server/Map/General/NTNaomiDirtServer.cpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include "NTNaomiDirtServer.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
std::map<int32_t, std::string> VisibilityMissionTable = {
|
||||||
|
{1253, std::string("Dirt_Clouds_Sent")},
|
||||||
|
{1276, std::string("Dirt_Clouds_Assem")},
|
||||||
|
{1277, std::string("Dirt_Clouds_Para")},
|
||||||
|
{1283, std::string("Dirt_Clouds_Halls")}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
void NTNaomiDirtServer::OnStartup(Entity* self) {
|
||||||
|
SetGameVariables(VisibilityMissionTable);
|
||||||
|
}
|
11
dScripts/02_server/Map/General/NTNaomiDirtServer.h
Normal file
11
dScripts/02_server/Map/General/NTNaomiDirtServer.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef __NTNAOMIDIRTSERVER__H__
|
||||||
|
#define __NTNAOMIDIRTSERVER__H__
|
||||||
|
|
||||||
|
#include "VisToggleNotifierServer.h"
|
||||||
|
|
||||||
|
class NTNaomiDirtServer : public VisToggleNotifierServer {
|
||||||
|
public:
|
||||||
|
void OnStartup(Entity* self) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //!__NTNAOMIDIRTSERVER__H__
|
23
dScripts/02_server/Map/General/VisToggleNotifierServer.cpp
Normal file
23
dScripts/02_server/Map/General/VisToggleNotifierServer.cpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#include "VisToggleNotifierServer.h"
|
||||||
|
#include "eMissionState.h"
|
||||||
|
#include "Game.h"
|
||||||
|
#include "dZoneManager.h"
|
||||||
|
|
||||||
|
void VisToggleNotifierServer::OnMissionDialogueOK(Entity* self, Entity* target, int missionId, eMissionState missionState) {
|
||||||
|
auto itr = m_GameVariables.find(missionId);
|
||||||
|
if (itr != m_GameVariables.end()) {
|
||||||
|
bool visible = true;
|
||||||
|
if (missionState == eMissionState::READY_TO_COMPLETE || missionState == eMissionState::COMPLETE_READY_TO_COMPLETE) {
|
||||||
|
visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto spawners = Game::zoneManager->GetSpawnersByName(itr->second);
|
||||||
|
if (spawners.empty()) return;
|
||||||
|
for (const auto spawner : spawners) {
|
||||||
|
auto spawnedObjIds = spawner->GetSpawnedObjectIDs();
|
||||||
|
for (const auto& objId : spawnedObjIds) {
|
||||||
|
GameMessages::SendNotifyClientObject(objId, u"SetVisibility", visible);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
dScripts/02_server/Map/General/VisToggleNotifierServer.h
Normal file
15
dScripts/02_server/Map/General/VisToggleNotifierServer.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#ifndef __VISTOGGLENOTIFIERSERVER__H__
|
||||||
|
#define __VISTOGGLENOTIFIERSERVER__H__
|
||||||
|
|
||||||
|
#include "CppScripts.h"
|
||||||
|
|
||||||
|
class VisToggleNotifierServer : public CppScripts::Script {
|
||||||
|
public:
|
||||||
|
void OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) override;
|
||||||
|
protected:
|
||||||
|
void SetGameVariables(std::map<int32_t, std::string>& gameVariables) { m_GameVariables = gameVariables; }
|
||||||
|
private:
|
||||||
|
std::map<int32_t, std::string> m_GameVariables;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //!__VISTOGGLENOTIFIERSERVER__H__
|
@ -18,9 +18,12 @@ set(DSCRIPTS_SOURCES_02_SERVER_MAP_NT
|
|||||||
"NtXRayServer.cpp"
|
"NtXRayServer.cpp"
|
||||||
"NtSleepingGuard.cpp"
|
"NtSleepingGuard.cpp"
|
||||||
"NtImagimeterVisibility.cpp"
|
"NtImagimeterVisibility.cpp"
|
||||||
|
"NTPipeVisibilityServer.cpp"
|
||||||
"NtSentinelWalkwayServer.cpp"
|
"NtSentinelWalkwayServer.cpp"
|
||||||
"NtDarkitectRevealServer.cpp"
|
"NtDarkitectRevealServer.cpp"
|
||||||
"NtParadoxTeleServer.cpp"
|
"NtParadoxTeleServer.cpp"
|
||||||
"NtVentureSpeedPadServer.cpp"
|
"NtVentureSpeedPadServer.cpp"
|
||||||
"NtVentureCannonServer.cpp"
|
"NtVentureCannonServer.cpp"
|
||||||
|
"NtBcSubmitServer.cpp"
|
||||||
|
"NtNaomiBreadcrumbServer.cpp"
|
||||||
PARENT_SCOPE)
|
PARENT_SCOPE)
|
||||||
|
15
dScripts/02_server/Map/NT/NTPipeVisibilityServer.cpp
Normal file
15
dScripts/02_server/Map/NT/NTPipeVisibilityServer.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "NTPipeVisibilityServer.h"
|
||||||
|
#include "Entity.h"
|
||||||
|
#include "Character.h"
|
||||||
|
|
||||||
|
void NTPipeVisibilityServer::OnRebuildComplete(Entity* self, Entity* target) {
|
||||||
|
const auto flag = self->GetVar<int32_t>(u"flag");
|
||||||
|
if (flag == 0) return;
|
||||||
|
|
||||||
|
auto* character = target->GetCharacter();
|
||||||
|
if (!character) return;
|
||||||
|
|
||||||
|
character->SetPlayerFlag(flag, true);
|
||||||
|
|
||||||
|
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"PipeBuilt");
|
||||||
|
}
|
11
dScripts/02_server/Map/NT/NTPipeVisibilityServer.h
Normal file
11
dScripts/02_server/Map/NT/NTPipeVisibilityServer.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef __NTPIPEVISIBILITYSERVER__H__
|
||||||
|
#define __NTPIPEVISIBILITYSERVER__H__
|
||||||
|
|
||||||
|
#include "CppScripts.h"
|
||||||
|
|
||||||
|
class NTPipeVisibilityServer : public CppScripts::Script {
|
||||||
|
public:
|
||||||
|
void OnRebuildComplete(Entity* self, Entity* target) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //!__NTPIPEVISIBILITYSERVER__H__
|
34
dScripts/02_server/Map/NT/NtBcSubmitServer.cpp
Normal file
34
dScripts/02_server/Map/NT/NtBcSubmitServer.cpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#include "NtBcSubmitServer.h"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include "Entity.h"
|
||||||
|
#include "MissionComponent.h"
|
||||||
|
|
||||||
|
// https://explorer.lu/missions/
|
||||||
|
// Key is the main mission, value is the breadcrumb mission to reset upon Mission Dialogue Ok.
|
||||||
|
// To see the actual missions, just append the number to the end of the URL.
|
||||||
|
namespace {
|
||||||
|
std::map<uint32_t, uint32_t> ResetMissionsTable = {
|
||||||
|
{999, 1335},
|
||||||
|
{1002, 1355},
|
||||||
|
{1006, 1349},
|
||||||
|
{1009, 1348},
|
||||||
|
{1379, 1335},
|
||||||
|
{1380, 1355},
|
||||||
|
{1378, 1349},
|
||||||
|
{1377, 1348},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void NtBcSubmitServer::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
|
||||||
|
auto* missionComponent = target->GetComponent<MissionComponent>();
|
||||||
|
if (!missionComponent) return;
|
||||||
|
|
||||||
|
auto it = ResetMissionsTable.find(missionID);
|
||||||
|
if (it == ResetMissionsTable.end()) return;
|
||||||
|
|
||||||
|
const auto missionToReset = it->second;
|
||||||
|
missionComponent->ResetMission(missionToReset);
|
||||||
|
}
|
11
dScripts/02_server/Map/NT/NtBcSubmitServer.h
Normal file
11
dScripts/02_server/Map/NT/NtBcSubmitServer.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef __NTBCSUBMITSERVER__H__
|
||||||
|
#define __NTBCSUBMITSERVER__H__
|
||||||
|
|
||||||
|
#include "CppScripts.h"
|
||||||
|
|
||||||
|
class NtBcSubmitServer : public virtual CppScripts::Script {
|
||||||
|
public:
|
||||||
|
void OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //!__NTBCSUBMITSERVER__H__
|
@ -37,4 +37,5 @@ void NtDukeServer::OnMissionDialogueOK(Entity* self, Entity* target, int mission
|
|||||||
inventoryComponent->RemoveItem(m_SwordLot, lotCount);
|
inventoryComponent->RemoveItem(m_SwordLot, lotCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NtBcSubmitServer::OnMissionDialogueOK(self, target, missionID, missionState);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "NtFactionSpyServer.h"
|
#include "NtFactionSpyServer.h"
|
||||||
|
#include "NtBcSubmitServer.h"
|
||||||
|
|
||||||
class NtDukeServer : public NtFactionSpyServer {
|
class NtDukeServer : public NtFactionSpyServer, public NtBcSubmitServer {
|
||||||
void SetVariables(Entity* self) override;
|
void SetVariables(Entity* self) override;
|
||||||
void OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) override;
|
void OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) override;
|
||||||
const uint32_t m_SwordMissionID = 1448;
|
const uint32_t m_SwordMissionID = 1448;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "NtFactionSpyServer.h"
|
#include "NtFactionSpyServer.h"
|
||||||
|
#include "NtBcSubmitServer.h"
|
||||||
|
|
||||||
class NtHaelServer : public NtFactionSpyServer {
|
class NtHaelServer : public NtFactionSpyServer, public NtBcSubmitServer {
|
||||||
void SetVariables(Entity* self) override;
|
void SetVariables(Entity* self) override;
|
||||||
};
|
};
|
||||||
|
43
dScripts/02_server/Map/NT/NtNaomiBreadcrumbServer.cpp
Normal file
43
dScripts/02_server/Map/NT/NtNaomiBreadcrumbServer.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#include "NtNaomiBreadcrumbServer.h"
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include "eMissionState.h"
|
||||||
|
#include "MissionComponent.h"
|
||||||
|
|
||||||
|
// https://explorer.lu/missions/
|
||||||
|
// Key is the main mission, value is the breadcrumb mission to reset upon Mission Dialogue Ok.
|
||||||
|
// To see the actual missions, just append the number to the end of the URL.
|
||||||
|
namespace {
|
||||||
|
std::map<int32_t, std::vector<int32_t>> CompleteBcMissionTable = {
|
||||||
|
{1377, {1378, 1379, 1380, 1349, 1335, 1355}},
|
||||||
|
{1378, {1377, 1379, 1380, 1348, 1335, 1355}},
|
||||||
|
{1379, {1377, 1378, 1380, 1348, 1349, 1355}},
|
||||||
|
{1380, {1377, 1378, 1379, 1348, 1349, 1335}},
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<int32_t, int32_t> MatchingBCTable = {
|
||||||
|
{1377, 1348},
|
||||||
|
{1378, 1349},
|
||||||
|
{1379, 1335},
|
||||||
|
{1380, 1355}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void NtNaomiBreadcrumbServer::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
|
||||||
|
auto* missionComponent = target->GetComponent<MissionComponent>();
|
||||||
|
if (!missionComponent) return;
|
||||||
|
|
||||||
|
auto itr = MatchingBCTable.find(missionID);
|
||||||
|
if (itr == MatchingBCTable.end()) return;
|
||||||
|
|
||||||
|
missionComponent->AcceptMission(itr->second);
|
||||||
|
|
||||||
|
auto it = CompleteBcMissionTable.find(missionID);
|
||||||
|
if (it == CompleteBcMissionTable.end()) return;
|
||||||
|
|
||||||
|
if (missionState == eMissionState::AVAILABLE || missionState == eMissionState::COMPLETE_AVAILABLE) {
|
||||||
|
for (const auto& bcMission : it->second) {
|
||||||
|
missionComponent->ResetMission(bcMission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
dScripts/02_server/Map/NT/NtNaomiBreadcrumbServer.h
Normal file
11
dScripts/02_server/Map/NT/NtNaomiBreadcrumbServer.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef __NTNAOMIBREADCRUMBSERVER__H__
|
||||||
|
#define __NTNAOMIBREADCRUMBSERVER__H__
|
||||||
|
|
||||||
|
#include "CppScripts.h"
|
||||||
|
|
||||||
|
class NtNaomiBreadcrumbServer : public CppScripts::Script {
|
||||||
|
public:
|
||||||
|
void OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //!__NTNAOMIBREADCRUMBSERVER__H__
|
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "NtFactionSpyServer.h"
|
#include "NtFactionSpyServer.h"
|
||||||
|
#include "NtBcSubmitServer.h"
|
||||||
|
|
||||||
class NtOverbuildServer : public NtFactionSpyServer {
|
class NtOverbuildServer : public NtFactionSpyServer, public NtBcSubmitServer {
|
||||||
void SetVariables(Entity* self) override;
|
void SetVariables(Entity* self) override;
|
||||||
const std::u16string m_OtherEntitiesGroupVariable = u"SpyConvo2Group";
|
const std::u16string m_OtherEntitiesGroupVariable = u"SpyConvo2Group";
|
||||||
};
|
};
|
||||||
|
@ -11,4 +11,5 @@ void NtVandaServer::OnMissionDialogueOK(Entity* self, Entity* target, int missio
|
|||||||
inventoryComponent->RemoveItem(alienPartLot, 1);
|
inventoryComponent->RemoveItem(alienPartLot, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NtBcSubmitServer::OnMissionDialogueOK(self, target, missionID, missionState);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "CppScripts.h"
|
#include "CppScripts.h"
|
||||||
|
#include "NtBcSubmitServer.h"
|
||||||
|
|
||||||
class NtVandaServer : public CppScripts::Script {
|
class NtVandaServer : public NtBcSubmitServer {
|
||||||
void OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) override;
|
void OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) override;
|
||||||
const uint32_t m_AlienPartMissionID = 1183;
|
const uint32_t m_AlienPartMissionID = 1183;
|
||||||
const std::vector<LOT> m_AlienPartLots = { 12479, 12480, 12481 };
|
const std::vector<LOT> m_AlienPartLots = { 12479, 12480, 12481 };
|
||||||
|
@ -209,6 +209,11 @@
|
|||||||
#include "NtXRayServer.h"
|
#include "NtXRayServer.h"
|
||||||
#include "NtSleepingGuard.h"
|
#include "NtSleepingGuard.h"
|
||||||
#include "NtImagimeterVisibility.h"
|
#include "NtImagimeterVisibility.h"
|
||||||
|
#include "FrictionVolumeServer.h"
|
||||||
|
#include "NTPipeVisibilityServer.h"
|
||||||
|
#include "NTNaomiDirtServer.h"
|
||||||
|
#include "MinigameBlueMark.h"
|
||||||
|
#include "NtNaomiBreadcrumbServer.h"
|
||||||
|
|
||||||
// DLU Scripts
|
// DLU Scripts
|
||||||
#include "DLUVanityNPC.h"
|
#include "DLUVanityNPC.h"
|
||||||
@ -311,6 +316,7 @@
|
|||||||
#include "WildNinjaStudent.h"
|
#include "WildNinjaStudent.h"
|
||||||
#include "WildNinjaSensei.h"
|
#include "WildNinjaSensei.h"
|
||||||
#include "WildNinjaBricks.h"
|
#include "WildNinjaBricks.h"
|
||||||
|
#include "VisToggleNotifierServer.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
InvalidScript* invalidToReturn = new InvalidScript();
|
InvalidScript* invalidToReturn = new InvalidScript();
|
||||||
@ -694,19 +700,30 @@ CppScripts::Script* CppScripts::GetScript(Entity* parent, const std::string& scr
|
|||||||
script = new NtDukeServer();
|
script = new NtDukeServer();
|
||||||
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_HAEL_SERVER.lua")
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_HAEL_SERVER.lua")
|
||||||
script = new NtHaelServer();
|
script = new NtHaelServer();
|
||||||
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_FACTION_SPY_SERVER.lua")
|
||||||
|
script = new NtFactionSpyServer();
|
||||||
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_OVERBUILD_SERVER.lua")
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_OVERBUILD_SERVER.lua")
|
||||||
script = new NtOverbuildServer();
|
script = new NtOverbuildServer();
|
||||||
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_VANDA_SERVER.lua")
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_VANDA_SERVER.lua")
|
||||||
script = new NtVandaServer();
|
script = new NtVandaServer();
|
||||||
else if (scriptName == "scripts\\02_server\\Map\\General\\L_FORCE_VOLUME_SERVER.lua")
|
else if (scriptName == "scripts\\02_server\\Map\\General\\L_FORCE_VOLUME_SERVER.lua")
|
||||||
script = new ForceVolumeServer();
|
script = new ForceVolumeServer();
|
||||||
|
else if (scriptName == "scripts\\02_server\\Map\\General\\L_FRICTION_VOLUME_SERVER.lua")
|
||||||
|
script = new FrictionVolumeServer();
|
||||||
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_XRAY_SERVER.lua")
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_XRAY_SERVER.lua")
|
||||||
script = new NtXRayServer();
|
script = new NtXRayServer();
|
||||||
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_SLEEPING_GUARD.lua")
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_SLEEPING_GUARD.lua")
|
||||||
script = new NtSleepingGuard();
|
script = new NtSleepingGuard();
|
||||||
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_IMAGIMETER_VISIBILITY_SERVER.lua") {
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_IMAGIMETER_VISIBILITY_SERVER.lua")
|
||||||
script = new NTImagimeterVisibility();
|
script = new NTImagimeterVisibility();
|
||||||
}
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_PIPE_VISIBILITY_SERVER.lua")
|
||||||
|
script = new NTPipeVisibilityServer();
|
||||||
|
else if (scriptName == "scripts\\ai\\MINIGAME\\Objects\\MINIGAME_BLUE_MARK.lua")
|
||||||
|
script = new MinigameBlueMark();
|
||||||
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_NAOMI_BREADCRUMB_SERVER.lua")
|
||||||
|
script = new NtNaomiBreadcrumbServer();
|
||||||
|
else if (scriptName == "scripts\\02_server\\Map\\NT\\L_NT_NAOMI_DIRT_SERVER.lua")
|
||||||
|
script = new NTNaomiDirtServer();
|
||||||
|
|
||||||
//AM:
|
//AM:
|
||||||
else if (scriptName == "scripts\\02_server\\Map\\AM\\L_AM_CONSOLE_TELEPORT_SERVER.lua")
|
else if (scriptName == "scripts\\02_server\\Map\\AM\\L_AM_CONSOLE_TELEPORT_SERVER.lua")
|
||||||
|
@ -12,7 +12,7 @@ struct SpyData {
|
|||||||
uint32_t missionID;
|
uint32_t missionID;
|
||||||
};
|
};
|
||||||
|
|
||||||
class NtFactionSpyServer : public CppScripts::Script {
|
class NtFactionSpyServer : public virtual CppScripts::Script {
|
||||||
void OnStartup(Entity* self) override;
|
void OnStartup(Entity* self) override;
|
||||||
void OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status) override;
|
void OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status) override;
|
||||||
void OnCinematicUpdate(Entity* self, Entity* sender, eCinematicEvent event, const std::u16string& pathName, float_t pathTime, float_t totalTime, int32_t waypoint) override;
|
void OnCinematicUpdate(Entity* self, Entity* sender, eCinematicEvent event, const std::u16string& pathName, float_t pathTime, float_t totalTime, int32_t waypoint) override;
|
||||||
|
@ -6,4 +6,10 @@ foreach(file ${DSCRIPTS_SOURCES_AI_MINIGAME_SG_GF})
|
|||||||
set(DSCRIPTS_SOURCES_AI_MINIGAME ${DSCRIPTS_SOURCES_AI_MINIGAME} "SG_GF/${file}")
|
set(DSCRIPTS_SOURCES_AI_MINIGAME ${DSCRIPTS_SOURCES_AI_MINIGAME} "SG_GF/${file}")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
add_subdirectory(Objects)
|
||||||
|
|
||||||
|
foreach(file ${DSCRIPTS_SOURCES_AI_MINIGAME_OBJECTS})
|
||||||
|
set(DSCRIPTS_SOURCES_AI_MINIGAME ${DSCRIPTS_SOURCES_AI_MINIGAME} "Objects/${file}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
set(DSCRIPTS_SOURCES_AI_MINIGAME ${DSCRIPTS_SOURCES_AI_MINIGAME} PARENT_SCOPE)
|
set(DSCRIPTS_SOURCES_AI_MINIGAME ${DSCRIPTS_SOURCES_AI_MINIGAME} PARENT_SCOPE)
|
||||||
|
4
dScripts/ai/MINIGAME/Objects/CMakeLists.txt
Normal file
4
dScripts/ai/MINIGAME/Objects/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
SET(DSCRIPTS_SOURCES_AI_MINIGAME_OBJECTS
|
||||||
|
"MinigameBlueMark.cpp"
|
||||||
|
PARENT_SCOPE
|
||||||
|
)
|
7
dScripts/ai/MINIGAME/Objects/MinigameBlueMark.cpp
Normal file
7
dScripts/ai/MINIGAME/Objects/MinigameBlueMark.cpp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include "MinigameBlueMark.h"
|
||||||
|
#include "Game.h"
|
||||||
|
#include "dZoneManager.h"
|
||||||
|
|
||||||
|
void MinigameBlueMark::OnStartup(Entity* self) {
|
||||||
|
Game::zoneManager->GetZoneControlObject()->NotifyObject(self, "Blue_Mark");
|
||||||
|
}
|
6
dScripts/ai/MINIGAME/Objects/MinigameBlueMark.h
Normal file
6
dScripts/ai/MINIGAME/Objects/MinigameBlueMark.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "CppScripts.h"
|
||||||
|
|
||||||
|
class MinigameBlueMark : public CppScripts::Script {
|
||||||
|
public:
|
||||||
|
void OnStartup(Entity* self) override;
|
||||||
|
};
|
@ -205,6 +205,15 @@ void Spawner::Update(const float deltaTime) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<LWOOBJID> Spawner::GetSpawnedObjectIDs() const {
|
||||||
|
std::vector<LWOOBJID> ids;
|
||||||
|
ids.reserve(m_Entities.size());
|
||||||
|
for (const auto& [objId, spawnerNode] : m_Entities) {
|
||||||
|
ids.push_back(objId);
|
||||||
|
}
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
void Spawner::NotifyOfEntityDeath(const LWOOBJID& objectID) {
|
void Spawner::NotifyOfEntityDeath(const LWOOBJID& objectID) {
|
||||||
for (std::function<void()> cb : m_SpawnedEntityDieCallbacks) {
|
for (std::function<void()> cb : m_SpawnedEntityDieCallbacks) {
|
||||||
cb();
|
cb();
|
||||||
|
@ -66,6 +66,7 @@ public:
|
|||||||
void SetRespawnTime(float time);
|
void SetRespawnTime(float time);
|
||||||
void SetNumToMaintain(int32_t value);
|
void SetNumToMaintain(int32_t value);
|
||||||
bool GetIsSpawnSmashGroup() const { return m_SpawnSmashFoundGroup; };
|
bool GetIsSpawnSmashGroup() const { return m_SpawnSmashFoundGroup; };
|
||||||
|
std::vector<LWOOBJID> GetSpawnedObjectIDs() const;
|
||||||
|
|
||||||
SpawnerInfo m_Info;
|
SpawnerInfo m_Info;
|
||||||
bool m_Active = true;
|
bool m_Active = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user