Untitled

 avatar
unknown
plain_text
a month ago
2.7 kB
3
Indexable
#pragma once



void Player::sendVariant(const std::vector<std::string>& strings = {}, const std::vector<int>& integers = {}, const std::vector<float>& floats = {}, const std::vector<std::pair<float, float>>& float_pairs = {}, 
    const std::vector<std::tuple<float, float, float>>& float_triples = {}, int delay = 0, int NetID = -1)
{
	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& a : strings)
	{
		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;
	}
		for (const auto& a : integers)
		{
		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;
	}
		for (const auto& a : floats)
		{
		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;
	}
		for (const auto& pairk : float_pairs) {
		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, &pairk.first, 4);
		memcpy(data + len + 6, &pairk.second, 4);
		len = len + 2 + 8;
		index++;
		packet_data[60] = index;
	}
	for (const auto& pairj : float_triples) {
		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, &std::get<0>(pairj), 4);
		memcpy(data + len + 6, &std::get<1>(pairj), 4);
		memcpy(data + len + 10, &std::get<2>(pairj), 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, delete[] data;
}
Leave a Comment