В настоящее время я изменяю видеоигру, и у меня возникают проблемы с клиентами. Их 18 клиентов в игре. Каждый клиент в основном является номером. Итак, клиент 4 = 4 клиент 16 = 16 и т.д. Так что скажем, идет ли клиент в меню и нажимает на FlyMode. Номер ClientIndex сохранит номер в массиве. Вот мой класс клиентов.
class Client{
public:
void FlyMode(int Client) { *(int*)(GetEntity(Client) + 0xB4); };
};
Вместо того, чтобы иметь int Client как параметр, я хочу передать переменную, чтобы указать номер клиента. Я хочу, чтобы это можно было вызвать FlyMode. Client[ID].FlyMode();
Вместо Client[ID].FlyMode(ClientID);
Я также хочу попытаться избежать havint Client Clients[18];
Вы могли бы реализовать свою собственную оболочку коллекции над массивом и оператором перегрузки [] таким образом, чтобы он рассказывал вашим объектам, какой идентификатор имеет. Sth в соответствии с этим
class MyContainer
{
public:
Client & operator[](int i) { mClients[i].setId(i); return mClients[i]; }
private:
Client mClients[18];
}
Конечно, вы, вероятно, хотели бы реализовать его надлежащим образом (проверка диапазона?), Приведенный выше код просто для того, чтобы выразить идею.
У вас могут быть данные участника в Client
которые захватывают идентификатор клиента и используют его в FlyMode
.
class Client{
int ID_;
public:
Client(int ID) : ID_(ID) {}
void FlyMode() { *(int*)(GetEntity(this->ID_) + 0xB4); };
};
unordered_map
с ключом ID клиента и значением объектаClient
.