mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-10-31 04:32:06 +00:00 
			
		
		
		
	Add FlagComponent and msg handlers
This commit is contained in:
		| @@ -1,9 +1,8 @@ | ||||
| #include "AgCagedBricksServer.h" | ||||
|  | ||||
| #include "InventoryComponent.h" | ||||
| #include "GameMessages.h" | ||||
| #include "Character.h" | ||||
| #include "EntityManager.h" | ||||
| #include "eReplicaComponentType.h" | ||||
| #include "ePlayerFlag.h" | ||||
|  | ||||
| void AgCagedBricksServer::OnUse(Entity* self, Entity* user) { | ||||
| @@ -14,14 +13,14 @@ void AgCagedBricksServer::OnUse(Entity* self, Entity* user) { | ||||
| 	} | ||||
|  | ||||
| 	//Set the flag & mission status: | ||||
| 	auto character = user->GetCharacter(); | ||||
|  | ||||
| 	if (!character) return; | ||||
|  | ||||
| 	character->SetPlayerFlag(ePlayerFlag::CAGED_SPIDER, true); | ||||
| 	GameMessages::SetFlag setFlag{}; | ||||
| 	setFlag.target = user->GetObjectID(); | ||||
| 	setFlag.iFlagId = ePlayerFlag::CAGED_SPIDER; | ||||
| 	setFlag.bFlag = true; | ||||
| 	SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 	//Remove the maelstrom cube: | ||||
| 	auto inv = static_cast<InventoryComponent*>(user->GetComponent(eReplicaComponentType::INVENTORY)); | ||||
| 	auto* inv = user->GetComponent<InventoryComponent>(); | ||||
|  | ||||
| 	if (inv) { | ||||
| 		inv->RemoveItem(14553, 1); | ||||
|   | ||||
| @@ -1,9 +1,8 @@ | ||||
| #include "RemoveRentalGear.h" | ||||
|  | ||||
| #include "InventoryComponent.h" | ||||
| #include "Item.h" | ||||
| #include "eMissionState.h" | ||||
| #include "Character.h" | ||||
| #include "eReplicaComponentType.h" | ||||
| #include "ePlayerFlag.h" | ||||
|  | ||||
| /* | ||||
| @@ -23,7 +22,7 @@ void RemoveRentalGear::OnMissionDialogueOK(Entity* self, Entity* target, int mis | ||||
| 	if (missionID != defaultMission && missionID != 313) return; | ||||
|  | ||||
| 	if (missionState == eMissionState::COMPLETE || missionState == eMissionState::READY_TO_COMPLETE) { | ||||
| 		auto inv = static_cast<InventoryComponent*>(target->GetComponent(eReplicaComponentType::INVENTORY)); | ||||
| 		auto* inv = target->GetComponent<InventoryComponent>(); | ||||
| 		if (!inv) return; | ||||
|  | ||||
| 		//remove the inventory items | ||||
| @@ -36,7 +35,10 @@ void RemoveRentalGear::OnMissionDialogueOK(Entity* self, Entity* target, int mis | ||||
| 		} | ||||
|  | ||||
| 		//reset the equipment flag | ||||
| 		auto character = target->GetCharacter(); | ||||
| 		if (character) character->SetPlayerFlag(ePlayerFlag::EQUPPED_TRIAL_FACTION_GEAR, false); | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = target->GetObjectID(); | ||||
| 		setFlag.iFlagId = ePlayerFlag::EQUPPED_TRIAL_FACTION_GEAR; | ||||
| 		setFlag.bFlag = false; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -2,7 +2,6 @@ | ||||
| #include "SkillComponent.h" | ||||
| #include "EntityManager.h" | ||||
| #include "EntityInfo.h" | ||||
| #include "Character.h" | ||||
|  | ||||
| void AmBlueX::OnUse(Entity* self, Entity* user) { | ||||
| 	auto* skillComponent = user->GetComponent<SkillComponent>(); | ||||
| @@ -16,10 +15,11 @@ void AmBlueX::OnSkillEventFired(Entity* self, Entity* caster, const std::string& | ||||
| 		self->SetNetworkVar<bool>(m_XUsedVariable, true); | ||||
| 		self->SetNetworkVar<bool>(m_StartEffectVariable, true); | ||||
|  | ||||
| 		auto* character = caster->GetCharacter(); | ||||
| 		if (character != nullptr) { | ||||
| 			character->SetPlayerFlag(self->GetVar<int32_t>(m_FlagVariable), true); | ||||
| 		} | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = caster->GetObjectID(); | ||||
| 		setFlag.iFlagId = self->GetVar<int32_t>(m_FlagVariable); | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 		EntityInfo info{}; | ||||
| 		info.lot = m_FXObject; | ||||
|   | ||||
| @@ -1,15 +1,26 @@ | ||||
| #include "Binoculars.h" | ||||
| #include "Character.h" | ||||
|  | ||||
| #include "GameMessages.h" | ||||
| #include "Game.h" | ||||
| #include "dServer.h" | ||||
| #include "dZoneManager.h" | ||||
|  | ||||
| void Binoculars::OnUse(Entity* self, Entity* user) { | ||||
| 	const auto number = self->GetVarAsString(u"number"); | ||||
|  | ||||
| 	int32_t flag = std::stoi(std::to_string(Game::server->GetZoneID()).substr(0, 2) + number); | ||||
| 	if (user->GetCharacter()->GetPlayerFlag(flag) == false) { | ||||
| 		user->GetCharacter()->SetPlayerFlag(flag, true); | ||||
| 	int32_t flag = std::stoi(std::to_string(Game::zoneManager->GetZoneID().GetMapID()).substr(0, 2) + number); | ||||
|  | ||||
| 	GameMessages::GetFlag getFlag{}; | ||||
| 	getFlag.target = user->GetObjectID(); | ||||
| 	getFlag.iFlagId = flag; | ||||
| 	SEND_ENTITY_MSG(getFlag); | ||||
|  | ||||
| 	if (!getFlag.bFlag) { | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = user->GetObjectID(); | ||||
| 		setFlag.iFlagId = flag; | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 		GameMessages::SendFireEventClientSide(self->GetObjectID(), user->GetSystemAddress(), u"achieve", LWOOBJID_EMPTY, 0, -1, LWOOBJID_EMPTY); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| #include "NjRailActivatorsServer.h" | ||||
| #include "QuickBuildComponent.h" | ||||
| #include "Character.h" | ||||
|  | ||||
| void NjRailActivatorsServer::OnUse(Entity* self, Entity* user) { | ||||
| 	const auto flag = self->GetVar<int32_t>(u"RailFlagNum"); | ||||
| @@ -8,9 +7,10 @@ void NjRailActivatorsServer::OnUse(Entity* self, Entity* user) { | ||||
|  | ||||
| 	// Only allow use if this is not a quick build or the quick build is built | ||||
| 	if (quickBuildComponent == nullptr || quickBuildComponent->GetState() == eQuickBuildState::COMPLETED) { | ||||
| 		auto* character = user->GetCharacter(); | ||||
| 		if (character != nullptr) { | ||||
| 			character->SetPlayerFlag(flag, true); | ||||
| 		} | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = user->GetObjectID(); | ||||
| 		setFlag.iFlagId = flag; | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,10 +1,9 @@ | ||||
| #include "dZoneManager.h" | ||||
| #include "PetDigServer.h" | ||||
|  | ||||
| #include "dZoneManager.h" | ||||
| #include "MissionComponent.h" | ||||
| #include "EntityManager.h" | ||||
| #include "Character.h" | ||||
| #include "PetComponent.h" | ||||
| #include "User.h" | ||||
| #include "eMissionState.h" | ||||
|  | ||||
| std::vector<LWOOBJID> PetDigServer::treasures{}; | ||||
| @@ -110,7 +109,6 @@ void PetDigServer::HandleXBuildDig(const Entity* self, Entity* owner, Entity* pe | ||||
| 	if (!playerEntity || !playerEntity->GetCharacter()) | ||||
| 		return; | ||||
|  | ||||
| 	auto* player = playerEntity->GetCharacter(); | ||||
| 	const auto groupID = self->GetVar<std::u16string>(u"groupID"); | ||||
| 	int32_t playerFlag = 0; | ||||
|  | ||||
| @@ -123,15 +121,22 @@ void PetDigServer::HandleXBuildDig(const Entity* self, Entity* owner, Entity* pe | ||||
| 		playerFlag = 63; | ||||
| 	} | ||||
|  | ||||
| 	GameMessages::GetFlag getFlag{}; | ||||
| 	getFlag.target = playerEntity->GetObjectID(); | ||||
| 	getFlag.iFlagId = playerFlag; | ||||
| 	SEND_ENTITY_MSG(getFlag); | ||||
| 	// If the player doesn't have the flag yet | ||||
| 	if (playerFlag != 0 && !player->GetPlayerFlag(playerFlag)) { | ||||
| 	if (playerFlag != 0 && SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 		auto* petComponent = pet->GetComponent<PetComponent>(); | ||||
| 		if (petComponent != nullptr) { | ||||
| 			// TODO: Pet state = 9 ?? | ||||
| 		} | ||||
|  | ||||
| 		// Shows the flag object to the player | ||||
| 		player->SetPlayerFlag(playerFlag, true); | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = playerEntity->GetObjectID(); | ||||
| 		setFlag.iFlagId = playerFlag; | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
| 	} | ||||
|  | ||||
| 	auto* xObject = Game::entityManager->GetEntity(self->GetVar<LWOOBJID>(u"X")); | ||||
| @@ -173,12 +178,17 @@ void PetDigServer::ProgressPetDigMissions(const Entity* owner, const Entity* che | ||||
| 		if (excavatorMissionState == eMissionState::ACTIVE) { | ||||
| 			if (chest->HasVar(u"PetDig")) { | ||||
| 				int32_t playerFlag = 1260 + chest->GetVarAs<int32_t>(u"PetDig"); | ||||
| 				Character* player = owner->GetCharacter(); | ||||
|  | ||||
| 				GameMessages::GetFlag getFlag{}; | ||||
| 				getFlag.target = owner->GetObjectID(); | ||||
| 				getFlag.iFlagId = playerFlag; | ||||
| 				// check if player flag is set | ||||
| 				if (!player->GetPlayerFlag(playerFlag)) { | ||||
| 				if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 					missionComponent->ForceProgress(505, 767, 1); | ||||
| 					player->SetPlayerFlag(playerFlag, 1); | ||||
| 					GameMessages::SetFlag setFlag{}; | ||||
| 					setFlag.target = owner->GetObjectID(); | ||||
| 					setFlag.iFlagId = playerFlag; | ||||
| 					setFlag.bFlag = true; | ||||
| 					SEND_ENTITY_MSG(setFlag); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| #include "StoryBoxInteractServer.h" | ||||
| #include "Character.h" | ||||
| #include "GameMessages.h" | ||||
| #include "dServer.h" | ||||
| #include "dZoneManager.h" | ||||
| #include "Amf3.h" | ||||
| #include "Entity.h" | ||||
|  | ||||
| @@ -36,11 +36,19 @@ void StoryBoxInteractServer::OnUse(Entity* self, Entity* user) { | ||||
| 		if(!storyValue) return; | ||||
| 		int32_t boxFlag = self->GetVar<int32_t>(u"altFlagID"); | ||||
| 		if (boxFlag <= 0) { | ||||
| 			boxFlag = (10000 + Game::server->GetZoneID() + storyValue.value()); | ||||
| 			boxFlag = (10000 + Game::zoneManager->GetZoneID().GetMapID() + storyValue.value()); | ||||
| 		} | ||||
|  | ||||
| 		if (user->GetCharacter()->GetPlayerFlag(boxFlag) == false) { | ||||
| 			user->GetCharacter()->SetPlayerFlag(boxFlag, true); | ||||
| 		GameMessages::GetFlag getFlag{}; | ||||
| 		getFlag.target = user->GetObjectID(); | ||||
| 		getFlag.iFlagId = boxFlag; | ||||
| 		if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 			GameMessages::SetFlag setFlag{}; | ||||
| 			setFlag.target = user->GetObjectID(); | ||||
| 			setFlag.iFlagId = boxFlag; | ||||
| 			setFlag.bFlag = true; | ||||
| 			SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 			GameMessages::SendFireEventClientSide(self->GetObjectID(), user->GetSystemAddress(), u"achieve", LWOOBJID_EMPTY, 0, -1, LWOOBJID_EMPTY); | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -1,15 +1,14 @@ | ||||
| #include "TokenConsoleServer.h" | ||||
|  | ||||
| #include "InventoryComponent.h" | ||||
| #include "GameMessages.h" | ||||
| #include "Character.h" | ||||
| #include "eReplicaComponentType.h" | ||||
| #include "eTerminateType.h" | ||||
| #include "ePlayerFlag.h" | ||||
|  | ||||
| //2021-05-03 - max - added script, omitted some parts related to inheritance in lua which we don't need | ||||
|  | ||||
| void TokenConsoleServer::OnUse(Entity* self, Entity* user) { | ||||
| 	auto* inv = static_cast<InventoryComponent*>(user->GetComponent(eReplicaComponentType::INVENTORY)); | ||||
| 	auto* inv = user->GetComponent<InventoryComponent>(); | ||||
|  | ||||
| 	//make sure the user has the required amount of infected bricks | ||||
| 	if (inv && inv->GetLotCount(6194) >= bricksToTake) { | ||||
| @@ -22,17 +21,18 @@ void TokenConsoleServer::OnUse(Entity* self, Entity* user) { | ||||
| 		} | ||||
|  | ||||
| 		//figure out which faction the player belongs to: | ||||
| 		auto character = user->GetCharacter(); | ||||
| 		if (!character) return; | ||||
| 		// At this point the player has to be in a faction. | ||||
|  | ||||
| 		GameMessages::GetFlag getFlag{}; | ||||
| 		getFlag.target = user->GetObjectID(); | ||||
| 		LOT tokenLOT = 0; | ||||
| 		if (character->GetPlayerFlag(ePlayerFlag::VENTURE_FACTION)) //venture | ||||
| 		if (getFlag.iFlagId = ePlayerFlag::VENTURE_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //venture | ||||
| 			tokenLOT = 8321; | ||||
| 		else if (character->GetPlayerFlag(ePlayerFlag::ASSEMBLY_FACTION)) //assembly | ||||
| 		else if (getFlag.iFlagId = ePlayerFlag::ASSEMBLY_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //assembly | ||||
| 			tokenLOT = 8318; | ||||
| 		else if (character->GetPlayerFlag(ePlayerFlag::PARADOX_FACTION)) //paradox | ||||
| 		else if (getFlag.iFlagId = ePlayerFlag::PARADOX_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //paradox | ||||
| 			tokenLOT = 8320; | ||||
| 		else if (character->GetPlayerFlag(ePlayerFlag::SENTINEL_FACTION)) //sentinel | ||||
| 		else if (getFlag.iFlagId = ePlayerFlag::SENTINEL_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //sentinel | ||||
| 			tokenLOT = 8319; | ||||
| 		inv->AddItem(tokenLOT, tokensToGive, eLootSourceType::NONE); | ||||
| 	} | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| #include "NsTokenConsoleServer.h" | ||||
| #include "InventoryComponent.h" | ||||
| #include "GameMessages.h" | ||||
| #include "Character.h" | ||||
| #include "MissionComponent.h" | ||||
| #include "QuickBuildComponent.h" | ||||
| #include "eTerminateType.h" | ||||
| @@ -24,9 +23,8 @@ void NsTokenConsoleServer::OnUse(Entity* self, Entity* user) { | ||||
|  | ||||
| 	auto* inventoryComponent = user->GetComponent<InventoryComponent>(); | ||||
| 	auto* missionComponent = user->GetComponent<MissionComponent>(); | ||||
| 	auto* character = user->GetCharacter(); | ||||
|  | ||||
| 	if (inventoryComponent == nullptr || missionComponent == nullptr || character == nullptr) { | ||||
| 	if (inventoryComponent == nullptr || missionComponent == nullptr) { | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| @@ -42,15 +40,18 @@ void NsTokenConsoleServer::OnUse(Entity* self, Entity* user) { | ||||
| 		GameMessages::SendPlayNDAudioEmitter(self, user->GetSystemAddress(), useSound); | ||||
| 	} | ||||
|  | ||||
| 	GameMessages::GetFlag getFlag{}; | ||||
| 	getFlag.target = user->GetObjectID(); | ||||
|  | ||||
| 	// Player must be in faction to interact with this entity. | ||||
| 	LOT tokenLOT = 0; | ||||
| 	if (character->GetPlayerFlag(ePlayerFlag::VENTURE_FACTION)) //venture | ||||
| 	if (getFlag.iFlagId = ePlayerFlag::VENTURE_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //venture | ||||
| 		tokenLOT = 8321; | ||||
| 	else if (character->GetPlayerFlag(ePlayerFlag::ASSEMBLY_FACTION)) //assembly | ||||
| 	else if (getFlag.iFlagId = ePlayerFlag::ASSEMBLY_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //assembly | ||||
| 		tokenLOT = 8318; | ||||
| 	else if (character->GetPlayerFlag(ePlayerFlag::PARADOX_FACTION)) //paradox | ||||
| 	else if (getFlag.iFlagId = ePlayerFlag::PARADOX_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //paradox | ||||
| 		tokenLOT = 8320; | ||||
| 	else if (character->GetPlayerFlag(ePlayerFlag::SENTINEL_FACTION)) //sentinel | ||||
| 	else if (getFlag.iFlagId = ePlayerFlag::SENTINEL_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //sentinel | ||||
| 		tokenLOT = 8319; | ||||
|  | ||||
| 	inventoryComponent->AddItem(tokenLOT, 5, eLootSourceType::NONE); | ||||
|   | ||||
| @@ -1,15 +1,15 @@ | ||||
| #include "NTPipeVisibilityServer.h" | ||||
|  | ||||
| #include "Entity.h" | ||||
| #include "Character.h" | ||||
|  | ||||
| void NTPipeVisibilityServer::OnQuickBuildComplete(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::SetFlag setFlag{}; | ||||
| 	setFlag.target = target->GetObjectID(); | ||||
| 	setFlag.iFlagId = flag; | ||||
| 	setFlag.bFlag = true; | ||||
| 	SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 	GameMessages::SendNotifyClientObject(self->GetObjectID(), u"PipeBuilt"); | ||||
| } | ||||
|   | ||||
| @@ -1,12 +1,14 @@ | ||||
| #include "NtImagimeterVisibility.h" | ||||
| #include "GameMessages.h" | ||||
| #include "Entity.h" | ||||
| #include "Character.h" | ||||
| #include "ePlayerFlag.h" | ||||
|  | ||||
| void NTImagimeterVisibility::OnQuickBuildComplete(Entity* self, Entity* target) { | ||||
| 	auto* character = target->GetCharacter(); | ||||
| 	if (character) character->SetPlayerFlag(ePlayerFlag::NT_PLINTH_REBUILD, true); | ||||
| 	GameMessages::SetFlag setFlag{}; | ||||
| 	setFlag.target = target->GetObjectID(); | ||||
| 	setFlag.iFlagId = ePlayerFlag::NT_PLINTH_REBUILD; | ||||
| 	setFlag.bFlag = true; | ||||
| 	SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 	GameMessages::SendNotifyClientObject(self->GetObjectID(), u"PlinthBuilt", 0, 0, LWOOBJID_EMPTY, "", target->GetSystemAddress()); | ||||
| } | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| #include "NtParadoxPanelServer.h" | ||||
|  | ||||
| #include "GameMessages.h" | ||||
| #include "MissionComponent.h" | ||||
| #include "EntityManager.h" | ||||
| #include "Character.h" | ||||
| #include "eMissionState.h" | ||||
| #include "RenderComponent.h" | ||||
| #include "eTerminateType.h" | ||||
| @@ -32,8 +32,11 @@ void NtParadoxPanelServer::OnUse(Entity* self, Entity* user) { | ||||
| 			} | ||||
|  | ||||
| 			const auto flag = self->GetVar<int32_t>(u"flag"); | ||||
|  | ||||
| 			player->GetCharacter()->SetPlayerFlag(flag, true); | ||||
| 			GameMessages::SetFlag setFlag{}; | ||||
| 			setFlag.target = playerID; | ||||
| 			setFlag.iFlagId = flag; | ||||
| 			setFlag.bFlag = true; | ||||
| 			SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 			RenderComponent::PlayAnimation(player, u"rebuild-celebrate"); | ||||
|  | ||||
|   | ||||
| @@ -292,34 +292,45 @@ void ZoneAgProperty::BaseTimerDone(Entity* self, const std::string& timerName) { | ||||
| void ZoneAgProperty::OnZonePropertyRented(Entity* self, Entity* player) { | ||||
| 	BaseZonePropertyRented(self, player); | ||||
|  | ||||
| 	auto* character = player->GetCharacter(); | ||||
| 	if (character == nullptr) | ||||
| 		return; | ||||
|  | ||||
| 	character->SetPlayerFlag(108, true); | ||||
| 	GameMessages::SetFlag setFlag{}; | ||||
| 	setFlag.target = player->GetObjectID(); | ||||
| 	setFlag.iFlagId = 108; | ||||
| 	setFlag.bFlag = true; | ||||
| 	SEND_ENTITY_MSG(setFlag); | ||||
| } | ||||
|  | ||||
| void ZoneAgProperty::OnZonePropertyModelPlaced(Entity* self, Entity* player) { | ||||
| 	auto* character = player->GetCharacter(); | ||||
| 	auto* missionComponent = player->GetComponent<MissionComponent>(); | ||||
| 	if (!missionComponent) return; | ||||
|  | ||||
| 	if (!character->GetPlayerFlag(101)) { | ||||
| 	GameMessages::GetFlag getFlag{}; | ||||
| 	getFlag.target = player->GetObjectID(); | ||||
|  | ||||
| 	GameMessages::SetFlag setFlag{}; | ||||
| 	setFlag.target = player->GetObjectID(); | ||||
| 	setFlag.bFlag = true; | ||||
|  | ||||
| 	if (getFlag.iFlagId = 101, SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 		BaseZonePropertyModelPlaced(self, player); | ||||
| 		character->SetPlayerFlag(101, true); | ||||
| 		setFlag.iFlagId = 101; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
| 		if (missionComponent->GetMissionState(871) == eMissionState::ACTIVE) { | ||||
| 			self->SetNetworkVar<std::u16string>(u"Tooltip", u"AnotherModel"); | ||||
| 		} | ||||
|  | ||||
| 	} else if (!character->GetPlayerFlag(102)) { | ||||
| 		character->SetPlayerFlag(102, true); | ||||
| 	} else if (getFlag.iFlagId = 102, SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 		setFlag.iFlagId = 102; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
| 		if (missionComponent->GetMissionState(871) == eMissionState::ACTIVE) { | ||||
| 			self->SetNetworkVar<std::u16string>(u"Tooltip", u"TwoMoreModels"); | ||||
| 		} | ||||
|  | ||||
| 	} else if (!character->GetPlayerFlag(103)) { | ||||
| 		character->SetPlayerFlag(103, true); | ||||
| 	} else if (!character->GetPlayerFlag(104)) { | ||||
| 		character->SetPlayerFlag(104, true); | ||||
| 	} else if (getFlag.iFlagId = 103, SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 		setFlag.iFlagId = 103; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
| 	} else if (getFlag.iFlagId = 104, SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 		setFlag.iFlagId = 104; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
| 		self->SetNetworkVar<std::u16string>(u"Tooltip", u"TwoMoreModelsOff"); | ||||
| 	} else if (self->GetVar<std::string>(u"tutorial") == "place_model") { | ||||
| 		self->SetVar<std::string>(u"tutorial", ""); | ||||
| @@ -328,20 +339,34 @@ void ZoneAgProperty::OnZonePropertyModelPlaced(Entity* self, Entity* player) { | ||||
| } | ||||
|  | ||||
| void ZoneAgProperty::OnZonePropertyModelPickedUp(Entity* self, Entity* player) { | ||||
| 	auto* character = player->GetCharacter(); | ||||
| 	auto* missionComponent = player->GetComponent<MissionComponent>(); | ||||
| 	if (!missionComponent) return; | ||||
|  | ||||
| 	if (!character->GetPlayerFlag(109)) { | ||||
| 		character->SetPlayerFlag(109, true); | ||||
| 		if (missionComponent->GetMissionState(891) == eMissionState::ACTIVE && !character->GetPlayerFlag(110)) { | ||||
| 	GameMessages::GetFlag getFlag{}; | ||||
| 	getFlag.target = player->GetObjectID(); | ||||
| 	getFlag.iFlagId = 109; | ||||
|  | ||||
| 	if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = player->GetObjectID(); | ||||
| 		setFlag.iFlagId = 109; | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 		getFlag.iFlagId = 110; | ||||
| 		getFlag.bFlag = false; | ||||
| 		if (missionComponent->GetMissionState(891) == eMissionState::ACTIVE && SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 			self->SetNetworkVar<std::u16string>(u"Tooltip", u"Rotate"); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void ZoneAgProperty::OnZonePropertyModelRemoved(Entity* self, Entity* player) { | ||||
| 	auto* character = player->GetCharacter(); | ||||
| 	character->SetPlayerFlag(111, true); | ||||
| 	GameMessages::SetFlag setFlag{}; | ||||
| 	setFlag.target = player->GetObjectID(); | ||||
| 	setFlag.iFlagId = 111; | ||||
| 	setFlag.bFlag = true; | ||||
| 	SEND_ENTITY_MSG(setFlag); | ||||
| } | ||||
|  | ||||
| void ZoneAgProperty::OnZonePropertyModelRemovedWhileEquipped(Entity* self, Entity* player) { | ||||
| @@ -349,11 +374,18 @@ void ZoneAgProperty::OnZonePropertyModelRemovedWhileEquipped(Entity* self, Entit | ||||
| } | ||||
|  | ||||
| void ZoneAgProperty::OnZonePropertyModelRotated(Entity* self, Entity* player) { | ||||
| 	auto* character = player->GetCharacter(); | ||||
| 	auto* missionComponent = player->GetComponent<MissionComponent>(); | ||||
| 	if (!missionComponent) return; | ||||
| 	GameMessages::GetFlag getFlag{}; | ||||
| 	getFlag.target = player->GetObjectID(); | ||||
| 	getFlag.iFlagId = 110; | ||||
|  | ||||
| 	if (!character->GetPlayerFlag(110)) { | ||||
| 		character->SetPlayerFlag(110, true); | ||||
| 	if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = player->GetObjectID(); | ||||
| 		setFlag.iFlagId = 110; | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 		if (missionComponent->GetMissionState(891) == eMissionState::ACTIVE) { | ||||
| 			self->SetNetworkVar<std::u16string>(u"Tooltip", u"PlaceModel"); | ||||
| @@ -413,7 +445,12 @@ void ZoneAgProperty::BaseOnFireEventServerSide(Entity* self, Entity* sender, std | ||||
| 		if (player == nullptr) | ||||
| 			return; | ||||
|  | ||||
| 		player->GetCharacter()->SetPlayerFlag(self->GetVar<int32_t>(defeatedProperyFlag), true); | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = player->GetObjectID(); | ||||
| 		setFlag.iFlagId = self->GetVar<int32_t>(defeatedProperyFlag); | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 		GameMessages::SendNotifyClientObject(self->GetObjectID(), u"PlayCinematic", 0, 0, | ||||
| 			LWOOBJID_EMPTY, destroyedCinematic, UNASSIGNED_SYSTEM_ADDRESS); | ||||
|  | ||||
|   | ||||
| @@ -1,21 +1,21 @@ | ||||
| #include "VeEpsilonServer.h" | ||||
| #include "Character.h" | ||||
|  | ||||
| #include "EntityManager.h" | ||||
| #include "GameMessages.h" | ||||
| #include "eMissionState.h" | ||||
| #include "Entity.h" | ||||
|  | ||||
| void VeEpsilonServer::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) { | ||||
| 	auto* character = target->GetCharacter(); | ||||
| 	if (character == nullptr) | ||||
| 		return; | ||||
|  | ||||
| 	// Resets the player flags that track which consoles they've used | ||||
| 	if ((missionID == m_ConsoleMissionID || missionID == m_ConsoleRepeatMissionID) | ||||
| 		&& (missionState == eMissionState::AVAILABLE || missionState == eMissionState::COMPLETE_AVAILABLE)) { | ||||
|  | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = target->GetObjectID(); | ||||
| 		for (auto i = 0; i < 10; i++) { | ||||
| 			character->SetPlayerFlag(m_ConsoleBaseFlag + i, false); | ||||
| 			setFlag.iFlagId = m_ConsoleBaseFlag + i; | ||||
| 			setFlag.bFlag = false; | ||||
| 			SEND_ENTITY_MSG(setFlag); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| #include "VeMissionConsole.h" | ||||
|  | ||||
| #include "InventoryComponent.h" | ||||
| #include "Character.h" | ||||
| #include "GameMessages.h" | ||||
| #include "Loot.h" | ||||
| #include "eTerminateType.h" | ||||
| @@ -17,10 +17,11 @@ void VeMissionConsole::OnUse(Entity* self, Entity* user) { | ||||
| 	const auto flagNumber = self->GetVar<std::u16string>(m_NumberVariable); | ||||
| 	const int32_t flag = std::stoi("101" + GeneralUtils::UTF16ToWTF8(flagNumber)); | ||||
|  | ||||
| 	auto* character = user->GetCharacter(); | ||||
| 	if (character != nullptr) { | ||||
| 		character->SetPlayerFlag(flag, true); | ||||
| 	} | ||||
| 	GameMessages::SetFlag setFlag{}; | ||||
| 	setFlag.target = user->GetObjectID(); | ||||
| 	setFlag.iFlagId = flag; | ||||
| 	setFlag.bFlag = true; | ||||
| 	SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 	GameMessages::SendNotifyClientObject(self->GetObjectID(), u""); | ||||
| 	GameMessages::SendTerminateInteraction(user->GetObjectID(), eTerminateType::FROM_INTERACTION, self->GetObjectID()); | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| #include "CavePrisonCage.h" | ||||
|  | ||||
| #include "EntityManager.h" | ||||
| #include "QuickBuildComponent.h" | ||||
| #include "GameMessages.h" | ||||
| #include "Character.h" | ||||
| #include "dZoneManager.h" | ||||
| #include "RenderComponent.h" | ||||
|  | ||||
| @@ -161,10 +161,14 @@ void CavePrisonCage::OnTimerDone(Entity* self, std::string timerName) { | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		// Set the flag on the builder character | ||||
| 		const auto flagNum = 2020 + self->GetVarAs<int32_t>(u"myNumber"); | ||||
|  | ||||
| 		// Set the flag on the builder character | ||||
| 		builder->GetCharacter()->SetPlayerFlag(flagNum, true); | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = builder->GetObjectID(); | ||||
| 		setFlag.iFlagId = flagNum; | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 		// Setup a timer named 'VillagerEscape' to be triggered in 5 seconds | ||||
| 		self->AddTimer("VillagerEscape", 5.0f); | ||||
|   | ||||
| @@ -1,16 +1,15 @@ | ||||
| #include "NjDragonEmblemChestServer.h" | ||||
| #include "Character.h" | ||||
| #include "EntityInfo.h" | ||||
| #include "Loot.h" | ||||
| #include "Entity.h" | ||||
| #include "DestroyableComponent.h" | ||||
| #include "ePlayerFlag.h" | ||||
|  | ||||
| void NjDragonEmblemChestServer::OnUse(Entity* self, Entity* user) { | ||||
| 	auto* character = user->GetCharacter(); | ||||
| 	if (character != nullptr) { | ||||
| 		character->SetPlayerFlag(ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST, false); | ||||
| 	} | ||||
| 	GameMessages::SetFlag setFlag{}; | ||||
| 	setFlag.target = user->GetObjectID(); | ||||
| 	setFlag.iFlagId = ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST; | ||||
| 	setFlag.bFlag = false; | ||||
| 	SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 	auto* destroyable = self->GetComponent<DestroyableComponent>(); | ||||
| 	if (destroyable != nullptr) { | ||||
|   | ||||
| @@ -1,17 +1,19 @@ | ||||
| #include "NjGarmadonCelebration.h" | ||||
| #include "Character.h" | ||||
|  | ||||
| #include "GameMessages.h" | ||||
| #include "ePlayerFlag.h" | ||||
|  | ||||
| void NjGarmadonCelebration::OnCollisionPhantom(Entity* self, Entity* target) { | ||||
| 	auto* character = target->GetCharacter(); | ||||
| 	GameMessages::GetFlag getFlag{}; | ||||
| 	getFlag.target = target->GetObjectID(); | ||||
| 	getFlag.iFlagId = ePlayerFlag::NJ_GARMADON_CINEMATIC_SEEN; | ||||
|  | ||||
| 	if (character == nullptr) { | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	if (!character->GetPlayerFlag(ePlayerFlag::NJ_GARMADON_CINEMATIC_SEEN)) { | ||||
| 		character->SetPlayerFlag(ePlayerFlag::NJ_GARMADON_CINEMATIC_SEEN, true); | ||||
| 	if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) { | ||||
| 		GameMessages::SetFlag setFlag{}; | ||||
| 		setFlag.target = target->GetObjectID(); | ||||
| 		setFlag.iFlagId = ePlayerFlag::NJ_GARMADON_CINEMATIC_SEEN; | ||||
| 		setFlag.bFlag = true; | ||||
| 		SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 		GameMessages::SendStartCelebrationEffect(target, target->GetSystemAddress(), GarmadonCelebrationID); | ||||
| 	} | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| #include "NjNPCMissionSpinjitzuServer.h" | ||||
| #include "Character.h" | ||||
| #include "EntityManager.h" | ||||
|  | ||||
| #include "eMissionState.h" | ||||
|  | ||||
| void NjNPCMissionSpinjitzuServer::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) { | ||||
| @@ -12,13 +11,11 @@ void NjNPCMissionSpinjitzuServer::OnMissionDialogueOK(Entity* self, Entity* targ | ||||
|  | ||||
| 		// Wait for an animation to complete and flag that the player has learned spinjitzu | ||||
| 		self->AddCallbackTimer(5.0f, [targetID, element]() { | ||||
| 			auto* target = Game::entityManager->GetEntity(targetID); | ||||
| 			if (target != nullptr) { | ||||
| 				auto* character = target->GetCharacter(); | ||||
| 				if (character != nullptr) { | ||||
| 					character->SetPlayerFlag(ElementFlags.at(element), true); | ||||
| 				} | ||||
| 			} | ||||
| 			GameMessages::SetFlag setFlag{}; | ||||
| 			setFlag.target = targetID; | ||||
| 			setFlag.iFlagId = ElementFlags.at(element); | ||||
| 			setFlag.bFlag = true; | ||||
| 			SEND_ENTITY_MSG(setFlag); | ||||
| 			}); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| #include "NjWuNPC.h" | ||||
| #include "MissionComponent.h" | ||||
| #include "Character.h" | ||||
| #include "EntityManager.h" | ||||
| #include "GameMessages.h" | ||||
| #include "eMissionState.h" | ||||
| @@ -10,10 +9,8 @@ void NjWuNPC::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, e | ||||
|  | ||||
| 	// The Dragon statue daily mission | ||||
| 	if (missionID == m_MainDragonMissionID) { | ||||
| 		auto* character = target->GetCharacter(); | ||||
| 		auto* missionComponent = target->GetComponent<MissionComponent>(); | ||||
| 		if (character == nullptr || missionComponent == nullptr) | ||||
| 			return; | ||||
| 		if (!missionComponent) return; | ||||
|  | ||||
| 		switch (missionState) { | ||||
| 		case eMissionState::AVAILABLE: | ||||
| @@ -24,8 +21,11 @@ void NjWuNPC::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, e | ||||
| 				missionComponent->RemoveMission(subMissionID); | ||||
| 				missionComponent->AcceptMission(subMissionID); | ||||
| 			} | ||||
|  | ||||
| 			character->SetPlayerFlag(ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST, false); | ||||
| 			GameMessages::SetFlag setFlag{}; | ||||
| 			setFlag.target = target->GetObjectID(); | ||||
| 			setFlag.iFlagId = ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST; | ||||
| 			setFlag.bFlag = false; | ||||
| 			SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 			// Hide the chest | ||||
| 			for (auto* chest : Game::entityManager->GetEntitiesInGroup(m_DragonChestGroup)) { | ||||
| @@ -38,7 +38,11 @@ void NjWuNPC::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, e | ||||
| 		case eMissionState::READY_TO_COMPLETE: | ||||
| 		case eMissionState::COMPLETE_READY_TO_COMPLETE: | ||||
| 		{ | ||||
| 			character->SetPlayerFlag(ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST, true); | ||||
| 			GameMessages::SetFlag setFlag{}; | ||||
| 			setFlag.target = target->GetObjectID(); | ||||
| 			setFlag.iFlagId = ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST; | ||||
| 			setFlag.bFlag = true; | ||||
| 			SEND_ENTITY_MSG(setFlag); | ||||
|  | ||||
| 			// Show the chest | ||||
| 			for (auto* chest : Game::entityManager->GetEntitiesInGroup(m_DragonChestGroup)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David Markowitz
					David Markowitz