mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-10-31 04:32:06 +00:00 
			
		
		
		
	fix: live accurate player flag missions and flag debugging (#1894)
* feat: Add component ID to root component object * fix: live accurate player flag missions and flag debugging Tested that the client reflects the correct server progression after a test map and manually setting a flag off. tested that session flags correctly pick up on progression updates * banana
This commit is contained in:
		| @@ -682,6 +682,9 @@ private: | ||||
| 	 * NOTE: quick as there's no DB lookups | ||||
| 	 */ | ||||
| 	void DoQuickXMLDataParse(); | ||||
| public: | ||||
| 	const decltype(m_PlayerFlags)& GetPlayerFlags() const { return m_PlayerFlags; } | ||||
| 	const decltype(m_SessionFlags)& GetSessionFlags() const { return m_SessionFlags; } | ||||
| }; | ||||
|  | ||||
| #endif // CHARACTER_H | ||||
|   | ||||
| @@ -84,6 +84,30 @@ bool CharacterComponent::OnGetObjectReportInfo(GameMessages::GameMsg& msg) { | ||||
| 	cmptType.PushDebug<AMFIntValue>("Current Activity Type") = GeneralUtils::ToUnderlying(m_CurrentActivity); | ||||
| 	cmptType.PushDebug<AMFDoubleValue>("Property Clone ID") = m_Character->GetPropertyCloneID(); | ||||
|  | ||||
| 	auto& flagCmptType = reportInfo.info->PushDebug("Player Flag"); | ||||
| 	auto& allFlags = flagCmptType.PushDebug("All flags"); | ||||
|  | ||||
| 	for (const auto& [id, flagChunk] : m_Character->GetPlayerFlags()) { | ||||
| 		const auto base = id * 64; | ||||
| 		auto flagChunkCopy = flagChunk; | ||||
| 		for (int i = 0; i < 64; i++) { | ||||
| 			if (static_cast<bool>(flagChunkCopy & 1)) { | ||||
| 				const int32_t flagId = base + i; | ||||
| 				std::stringstream stream; | ||||
| 				stream << "Flag: " << flagId; | ||||
| 				allFlags.PushDebug<AMFStringValue>(stream.str()) = ""; | ||||
| 			} | ||||
| 			flagChunkCopy >>= 1; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	auto& sessionFlags = flagCmptType.PushDebug("Session Only Flags"); | ||||
| 	for (const auto flagId : m_Character->GetSessionFlags()) { | ||||
| 		std::stringstream stream; | ||||
| 		stream << "Flag: " << flagId; | ||||
| 		sessionFlags.PushDebug(stream.str()); | ||||
| 	} | ||||
|  | ||||
| 	return true; | ||||
| } | ||||
|  | ||||
| @@ -859,7 +883,7 @@ void CharacterComponent::SendToZone(LWOMAPID zoneId, LWOCLONEID cloneId) const { | ||||
| 			character->SetZoneID(zoneID); | ||||
| 			character->SetZoneInstance(zoneInstance); | ||||
| 			character->SetZoneClone(zoneClone); | ||||
| 			 | ||||
|  | ||||
| 			characterComponent->SetLastRocketConfig(u""); | ||||
| 			characterComponent->AddVisitedLevel(LWOZONEID(zoneID, LWOINSTANCEID_INVALID, zoneClone)); | ||||
|  | ||||
|   | ||||
| @@ -32,7 +32,7 @@ | ||||
| #include "StringifiedEnum.h" | ||||
|  | ||||
| namespace { | ||||
| 	std::set<uint32_t> g_TestedMissions = {773, 774, 775, 776, 777}; // TODO Figure out why these missions are broken sometimes | ||||
| 	std::set<uint32_t> g_TestedMissions = { 773, 774, 775, 776, 777 }; // TODO Figure out why these missions are broken sometimes | ||||
| } | ||||
|  | ||||
| Mission::Mission(MissionComponent* missionComponent, const uint32_t missionId) { | ||||
| @@ -87,6 +87,7 @@ void Mission::LoadFromXmlDone(const tinyxml2::XMLElement& element) { | ||||
| } | ||||
|  | ||||
| void Mission::LoadFromXmlCur(const tinyxml2::XMLElement& element) { | ||||
| 	const auto* const character = GetCharacter(); | ||||
| 	// Start custom XML | ||||
| 	if (element.Attribute("state") != nullptr) { | ||||
| 		m_State = static_cast<eMissionState>(std::stoul(element.Attribute("state"))); | ||||
| @@ -126,6 +127,12 @@ void Mission::LoadFromXmlCur(const tinyxml2::XMLElement& element) { | ||||
| 			} | ||||
|  | ||||
| 			curTask->SetUnique(uniques); | ||||
| 		} else if (type == eMissionTaskType::PLAYER_FLAG) { | ||||
| 			int32_t progress = 0; // Update the progress to not include session flags which are unset between logins | ||||
| 			for (const auto flag : curTask->GetAllTargets()) { | ||||
| 				if (character->GetPlayerFlag(flag)) progress++; | ||||
| 			} | ||||
| 			curTask->SetProgress(progress, false); | ||||
| 		} | ||||
|  | ||||
| 		index++; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David Markowitz
					David Markowitz