mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-10-30 20:22:04 +00:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/main' into windows-clang-fixes
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -95,6 +95,7 @@ ipch/ | ||||
|  | ||||
| # Exceptions: | ||||
| CMakeSettings.json | ||||
| CMakeUserPresets.json | ||||
| *.vcxproj | ||||
| *.filters | ||||
| *.cmake | ||||
|   | ||||
| @@ -83,6 +83,7 @@ | ||||
| #include "ItemComponent.h" | ||||
| #include "GhostComponent.h" | ||||
| #include "AchievementVendorComponent.h" | ||||
| #include "VanityUtilities.h" | ||||
|  | ||||
| // Table includes | ||||
| #include "CDComponentsRegistryTable.h" | ||||
| @@ -1271,6 +1272,7 @@ void Entity::Update(const float deltaTime) { | ||||
| 			auto timerName = timer.GetName(); | ||||
| 			m_Timers.erase(m_Timers.begin() + timerPosition); | ||||
| 			GetScript()->OnTimerDone(this, timerName); | ||||
| 			VanityUtilities::OnTimerDone(this, timerName); | ||||
|  | ||||
| 			TriggerEvent(eTriggerEventType::TIMER_DONE, this); | ||||
| 		} else { | ||||
| @@ -1334,6 +1336,7 @@ void Entity::OnCollisionProximity(LWOOBJID otherEntity, const std::string& proxN | ||||
| 	if (!other) return; | ||||
|  | ||||
| 	GetScript()->OnProximityUpdate(this, other, proxName, status); | ||||
| 	VanityUtilities::OnProximityUpdate(this, other, proxName, status); | ||||
|  | ||||
| 	RocketLaunchpadControlComponent* rocketComp = GetComponent<RocketLaunchpadControlComponent>(); | ||||
| 	if (!rocketComp) return; | ||||
|   | ||||
| @@ -38,7 +38,7 @@ void ProximityMonitorComponent::SetProximityRadius(dpEntity* entity, const std:: | ||||
| 	m_ProximitiesData.insert(std::make_pair(name, entity)); | ||||
| } | ||||
|  | ||||
| const std::unordered_set<LWOOBJID>& ProximityMonitorComponent::GetProximityObjects(const std::string& name) { | ||||
| const std::unordered_set<LWOOBJID>& ProximityMonitorComponent::GetProximityObjects(const std::string& name) const { | ||||
| 	const auto iter = m_ProximitiesData.find(name); | ||||
|  | ||||
| 	if (iter == m_ProximitiesData.cend()) { | ||||
|   | ||||
| @@ -46,7 +46,7 @@ public: | ||||
| 	 * @param name the proximity name to retrieve physics objects for | ||||
| 	 * @return a set of physics entity object IDs for this name | ||||
| 	 */ | ||||
| 	const std::unordered_set<LWOOBJID>& GetProximityObjects(const std::string& name); | ||||
| 	const std::unordered_set<LWOOBJID>& GetProximityObjects(const std::string& name) const; | ||||
|  | ||||
| 	/** | ||||
| 	 * Checks if the passed object is in proximity of the named proximity sensor | ||||
|   | ||||
| @@ -403,26 +403,39 @@ void SetupNPCTalk(Entity* npc) { | ||||
| 	npc->SetProximityRadius(20.0f, "talk"); | ||||
| } | ||||
|  | ||||
| void NPCTalk(Entity* npc) { | ||||
| 	auto* proximityMonitorComponent = npc->GetComponent<ProximityMonitorComponent>(); | ||||
| void VanityUtilities::OnProximityUpdate(Entity* entity, Entity* other, const std::string& proxName, const std::string& name) { | ||||
| 	if (proxName != "talk") return; | ||||
| 	const auto* const proximityMonitorComponent = entity->GetComponent<ProximityMonitorComponent>(); | ||||
| 	if (!proximityMonitorComponent) return; | ||||
|  | ||||
| 	if (!proximityMonitorComponent->GetProximityObjects("talk").empty()) { | ||||
| 	if (name == "ENTER" && !entity->HasTimer("talk")) { | ||||
| 		NPCTalk(entity); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void VanityUtilities::OnTimerDone(Entity* npc, const std::string& name) { | ||||
| 	if (name == "talk") { | ||||
| 		const auto* const proximityMonitorComponent = npc->GetComponent<ProximityMonitorComponent>(); | ||||
| 		if (!proximityMonitorComponent || proximityMonitorComponent->GetProximityObjects("talk").empty()) return; | ||||
|  | ||||
| 		NPCTalk(npc); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void NPCTalk(Entity* npc) { | ||||
| 	const auto& chats = npc->GetVar<std::vector<std::string>>(u"chats"); | ||||
|  | ||||
| 		if (chats.empty()) { | ||||
| 			return; | ||||
| 		} | ||||
| 	if (chats.empty()) return; | ||||
|  | ||||
| 	const auto& selected | ||||
| 		= chats[GeneralUtils::GenerateRandomNumber<int32_t>(0, static_cast<int32_t>(chats.size() - 1))]; | ||||
|  | ||||
| 	GameMessages::SendNotifyClientZoneObject( | ||||
| 		npc->GetObjectID(), u"sendToclient_bubble", 0, 0, npc->GetObjectID(), selected, UNASSIGNED_SYSTEM_ADDRESS); | ||||
| 	} | ||||
|  | ||||
| 	Game::entityManager->SerializeEntity(npc); | ||||
|  | ||||
| 	const float nextTime = GeneralUtils::GenerateRandomNumber<float>(15, 60); | ||||
|  | ||||
| 	npc->AddCallbackTimer(nextTime, [npc]() { NPCTalk(npc); }); | ||||
| 	npc->AddTimer("talk", nextTime); | ||||
| } | ||||
|   | ||||
| @@ -31,4 +31,8 @@ namespace VanityUtilities { | ||||
| 	std::string ParseMarkdown( | ||||
| 		const std::string& file | ||||
| 	); | ||||
|  | ||||
| 	void OnProximityUpdate(Entity* entity, Entity* other, const std::string& proxName, const std::string& name); | ||||
|  | ||||
| 	void OnTimerDone(Entity* entity, const std::string& name); | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jadebenn
					jadebenn