Untitled

 avatar
unknown
plain_text
25 days ago
3.2 kB
1
Indexable
void Player::sendVariant(int delay, int NetID, std::vector<std::any> var)
{
	int index = 0, len = 61;
	BYTE* packet_data = new BYTE[61];

	int MessageType = 0x4, PacketType = 0x1, CharState = 0x8;
	memset(packet_data, 0, 61);
	memcpy(packet_data, &MessageType, 4);
	memcpy(packet_data + 4, &PacketType, 4);
	memcpy(packet_data + 8, &NetID, 4);
	memcpy(packet_data + 16, &CharState, 4);
	memcpy(packet_data + 24, &delay, 4);

	for (const auto& element : var)
	{
		if (element.type() == typeid(std::string))
		{
			std::string a = std::any_cast<std::string>(element);
			BYTE* data = new BYTE[len + 2 + a.length() + 4];
			memcpy(data, packet_data, len);
			delete[] packet_data;
			packet_data = data;
			data[len] = index;
			data[len + 1] = 0x2;
			int str_len = (int)a.length();
			memcpy(data + len + 2, &str_len, 4);
			memcpy(data + len + 6, a.data(), str_len);
			len = len + 2 + (int)a.length() + 4;
			index++;
			packet_data[60] = index;
		}
		else if (element.type() == typeid(int))
		{
			int a = std::any_cast<int>(element);
			BYTE* data = new BYTE[len + 2 + 4];
			memcpy(data, packet_data, len);
			delete[] packet_data;
			packet_data = data;
			data[len] = index;
			data[len + 1] = 0x9;
			memcpy(data + len + 2, &a, 4);
			len = len + 2 + 4;
			index++;
			packet_data[60] = index;
		}
		else if (element.type() == typeid(float))
		{
			float a = std::any_cast<float>(element);
			BYTE* data = new BYTE[len + 2 + 4];
			memcpy(data, packet_data, len);
			delete[] packet_data;
			packet_data = data;
			data[len] = index;
			data[len + 1] = 0x1;
			memcpy(data + len + 2, &a, 4);
			len = len + 2 + 4;
			index++;
			packet_data[60] = index;
		}
		else if (element.type() == typeid(std::pair<float, float>))
		{
			float a = std::any_cast<std::pair<float, float>>(element).first;
			float b = std::any_cast<std::pair<float, float>>(element).first;
			BYTE* data = new BYTE[len + 2 + 8];
			memcpy(data, packet_data, len);
			delete[] packet_data;
			packet_data = data;
			data[len] = index;
			data[len + 1] = 0x3;
			memcpy(data + len + 2, &a, 4);
			memcpy(data + len + 6, &b, 4);
			len = len + 2 + 8;
			index++;
			packet_data[60] = index;
		}
		else if (element.type() == typeid(std::tuple<float, float, float>))
		{
			float a = std::get<0>(std::any_cast<std::tuple<float, float, float>>(element));
			float b = std::get<1>(std::any_cast<std::tuple<float, float, float>>(element));
			float c = std::get<2>(std::any_cast<std::tuple<float, float, float>>(element));
			BYTE* data = new BYTE[len + 2 + 12];
			memcpy(data, packet_data, len);
			delete[] packet_data;
			packet_data = data;
			data[len] = index;
			data[len + 1] = 0x4;
			memcpy(data + len + 2, &a, 4);
			memcpy(data + len + 6, &b, 4);
			memcpy(data + len + 10, &c, 4);
			len = len + 2 + 12;
			index++;
			packet_data[60] = index;
		}
	}
	ENetPacket* packet = enet_packet_create(packet_data, len, 1);
	enet_peer_send(this->m_peer, 0, packet);
	delete[] packet_data;
}

void Player::OnConsoleMessage(std::string text)
{
    sendVariant(0, -1, { "OnConsoleMessage", text });
}
Leave a Comment