mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-10-31 12:41:55 +00:00 
			
		
		
		
	Add FlagComponent and msg handlers
This commit is contained in:
		| @@ -47,6 +47,7 @@ namespace { | ||||
| 	std::map<MessageType::Game, MessageCreator> g_MessageHandlers = { | ||||
| 		{ REQUEST_SERVER_OBJECT_INFO, []() { return std::make_unique<RequestServerObjectInfo>(); } }, | ||||
| 		{ SHOOTING_GALLERY_FIRE, []() { return std::make_unique<ShootingGalleryFire>(); } }, | ||||
| 		{ SET_FLAG, []() { return std::make_unique<SetFlag>(); } }, | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| @@ -123,11 +124,6 @@ void GameMessageHandler::HandleMessage(RakNet::BitStream& inStream, const System | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	case MessageType::Game::SET_FLAG: { | ||||
| 		GameMessages::HandleSetFlag(inStream, entity); | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	case MessageType::Game::HAS_BEEN_COLLECTED: { | ||||
| 		GameMessages::HandleHasBeenCollected(inStream, entity); | ||||
| 		break; | ||||
| @@ -215,13 +211,17 @@ void GameMessageHandler::HandleMessage(RakNet::BitStream& inStream, const System | ||||
| 		// After we've done our thing, tell the client they're ready | ||||
| 		GameMessages::SendPlayerReady(Game::zoneManager->GetZoneControlObject(), sysAddr); | ||||
|  | ||||
| 		if (Game::config->GetValue("allow_players_to_skip_cinematics") != "1" | ||||
| 			|| !entity->GetCharacter() | ||||
| 			|| !entity->GetCharacter()->GetPlayerFlag(ePlayerFlag::DLU_SKIP_CINEMATICS)) return; | ||||
| 		entity->AddCallbackTimer(0.5f, [entity, sysAddr]() { | ||||
| 			if (!entity) return; | ||||
| 			GameMessages::SendEndCinematic(entity->GetObjectID(), u"", sysAddr); | ||||
| 			}); | ||||
| 		GameMessages::GetFlag getFlag{}; | ||||
| 		getFlag.target = entity->GetObjectID(); | ||||
| 		getFlag.iFlagId = ePlayerFlag::DLU_SKIP_CINEMATICS; | ||||
| 		SEND_ENTITY_MSG(getFlag); | ||||
|  | ||||
| 		if (Game::config->GetValue("allow_players_to_skip_cinematics") == "1" && getFlag.bFlag) { | ||||
| 			entity->AddCallbackTimer(0.5f, [entity, sysAddr]() { | ||||
| 				if (!entity) return; | ||||
| 				GameMessages::SendEndCinematic(entity->GetObjectID(), u"", sysAddr); | ||||
| 				}); | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -5076,23 +5076,6 @@ void GameMessages::HandleModularBuildConvertModel(RakNet::BitStream& inStream, E | ||||
| 	item->SetCount(item->GetCount() - 1, false, false, true, eLootSourceType::QUICKBUILD); | ||||
| } | ||||
|  | ||||
| void GameMessages::HandleSetFlag(RakNet::BitStream& inStream, Entity* entity) { | ||||
| 	bool bFlag{}; | ||||
| 	int32_t iFlagID{}; | ||||
|  | ||||
| 	inStream.Read(bFlag); | ||||
| 	inStream.Read(iFlagID); | ||||
|  | ||||
| 	auto character = entity->GetCharacter(); | ||||
| 	if (character) character->SetPlayerFlag(iFlagID, bFlag); | ||||
|  | ||||
| 	// This is always set the first time a player loads into a world from character select | ||||
| 	// and is used to know when to refresh the players inventory items so they show up. | ||||
| 	if (iFlagID == ePlayerFlag::IS_NEWS_SCREEN_VISIBLE && bFlag) { | ||||
| 		entity->SetVar<bool>(u"dlu_first_time_load", true); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void GameMessages::HandleRespondToMission(RakNet::BitStream& inStream, Entity* entity) { | ||||
| 	int missionID{}; | ||||
| 	LWOOBJID playerID{}; | ||||
| @@ -5157,13 +5140,17 @@ void GameMessages::HandleMissionDialogOK(RakNet::BitStream& inStream, Entity* en | ||||
| 		missionComponent->CompleteMission(missionID); | ||||
| 	} | ||||
|  | ||||
| 	if (Game::config->GetValue("allow_players_to_skip_cinematics") != "1" | ||||
| 		|| !player->GetCharacter() | ||||
| 		|| !player->GetCharacter()->GetPlayerFlag(ePlayerFlag::DLU_SKIP_CINEMATICS)) return; | ||||
| 	player->AddCallbackTimer(0.5f, [player]() { | ||||
| 		if (!player) return; | ||||
| 		GameMessages::SendEndCinematic(player->GetObjectID(), u"", player->GetSystemAddress()); | ||||
| 		}); | ||||
| 	GameMessages::GetFlag getFlag{}; | ||||
| 	getFlag.target = entity->GetObjectID(); | ||||
| 	getFlag.iFlagId = ePlayerFlag::DLU_SKIP_CINEMATICS; | ||||
| 	SEND_ENTITY_MSG(getFlag); | ||||
|  | ||||
| 	if (Game::config->GetValue("allow_players_to_skip_cinematics") == "1" && getFlag.bFlag) { | ||||
| 		player->AddCallbackTimer(0.5f, [player]() { | ||||
| 			if (!player) return; | ||||
| 			GameMessages::SendEndCinematic(player->GetObjectID(), u"", player->GetSystemAddress()); | ||||
| 			}); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void GameMessages::HandleRequestLinkedMission(RakNet::BitStream& inStream, Entity* entity) { | ||||
| @@ -6443,4 +6430,14 @@ namespace GameMessages { | ||||
| 		auto* handlingEntity = Game::entityManager->GetEntity(targetForReport); | ||||
| 		if (handlingEntity) handlingEntity->HandleMsg(*this); | ||||
| 	} | ||||
|  | ||||
| 	bool SetFlag::Deserialize(RakNet::BitStream& bitStream) { | ||||
| 		if (!bitStream.Read(bFlag)) return false; | ||||
| 		if (!bitStream.Read(iFlagId)) return false; | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	void SetFlag::Handle(Entity& entity, const SystemAddress& sysAddr) { | ||||
| 		entity.HandleMsg(*this); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -634,7 +634,6 @@ namespace GameMessages { | ||||
| 	void HandleRequestUse(RakNet::BitStream& inStream, Entity* entity, const SystemAddress& sysAddr); | ||||
| 	void HandlePlayEmote(RakNet::BitStream& inStream, Entity* entity); | ||||
| 	void HandleModularBuildConvertModel(RakNet::BitStream& inStream, Entity* entity, const SystemAddress& sysAddr); | ||||
| 	void HandleSetFlag(RakNet::BitStream& inStream, Entity* entity); | ||||
| 	void HandleRespondToMission(RakNet::BitStream& inStream, Entity* entity); | ||||
| 	void HandleMissionDialogOK(RakNet::BitStream& inStream, Entity* entity); | ||||
| 	void HandleRequestLinkedMission(RakNet::BitStream& inStream, Entity* entity); | ||||
| @@ -782,6 +781,30 @@ namespace GameMessages { | ||||
| 		bool Deserialize(RakNet::BitStream& bitStream) override; | ||||
| 		void Handle(Entity& entity, const SystemAddress& sysAddr) override; | ||||
| 	}; | ||||
|  | ||||
| 	struct SetFlag : public GameMsg { | ||||
| 		SetFlag() : GameMsg(MessageType::Game::SET_FLAG) {} | ||||
| 		bool Deserialize(RakNet::BitStream& bitStream) override; | ||||
| 		void Handle(Entity& entity, const SystemAddress& sysAddr) override; | ||||
|  | ||||
| 		uint32_t iFlagId{}; | ||||
| 		bool bFlag{}; | ||||
| 	}; | ||||
|  | ||||
| 	struct GetFlag : public GameMsg { | ||||
| 		GetFlag() : GameMsg(MessageType::Game::GET_FLAG) {} | ||||
|  | ||||
| 		uint32_t iFlagId{}; | ||||
| 		bool bFlag{}; | ||||
| 	}; | ||||
|  | ||||
| 	struct ClearSessionFlags : public GameMsg { | ||||
| 		ClearSessionFlags() : GameMsg(MessageType::Game::CLEAR_SESSION_FLAGS) {} | ||||
| 	}; | ||||
|  | ||||
| 	struct SetRetroactiveFlags : public GameMsg { | ||||
| 		SetRetroactiveFlags() : GameMsg(MessageType::Game::SET_RETROACTIVE_FLAGS) {} | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| #endif // GAMEMESSAGES_H | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David Markowitz
					David Markowitz