PDA

Просмотр полной версии : [Вопрос] По enum



nikvlad
15.05.2017, 20:51
Возможно ли записывать массивы в enum? (Возможно неверно высказался...)



Пример:

pInfo[playerid][Test][0] = "Test1";
pInfo[playerid][Test][1] = "Test2";
pInfo[playerid][Test][2] = "Test3";
pInfo[playerid][Test][3] = "Test4";

SooBad
15.05.2017, 20:59
Только одномерные.

enum SomeName
{
array1[size]
}
new TestArray[sub][SomeName];

nikvlad
15.05.2017, 21:00
Только одномерные.

enum SomeName
{
array1[size]
}
new TestArray[sub][SomeName];

а костыли есть какие-нибудь?

SooBad
15.05.2017, 21:01
а костыли есть какие-нибудь?

О каких костылях может идти речь при затрагивании структур языка?
Как вы себе представляете двумерный массив помещенный в одномерный?

nikvlad
15.05.2017, 21:04
О каких костылях может идти речь при затрагивании структур языка?

ну а как можно выкрутиться из этой ситуации? мне, допустим, нужно 100 слов хранить, мне под каждое новый массив создавать?

SooBad
15.05.2017, 21:07
static const words[][] =
{
"1 слово",
"2 слово",
"3 слово",
...
};

nikvlad
15.05.2017, 21:23
static const words[][] =
{
"1 слово",
"2 слово",
"3 слово",
...
}

для каждого игрока

SooBad
15.05.2017, 21:27
для каждого игрока

А трёхмерный массив чем не устраивает?

DeimoS
15.05.2017, 21:33
Для чего нужно эти слова хранить? Подробнее о задумке

nikvlad
16.05.2017, 20:41
Для чего нужно эти слова хранить? Подробнее о задумке

У меня есть телефонная книга, которая в БД хранит в формате x|y|z|g|f|v и т.д. 100 слов с именами тех, кто записан в эту книгу.

Мне нужно прогрузить данные слова, причем, у каждого человека может быть все по-разному

Mr.Forest
16.05.2017, 21:32
У меня есть телефонная книга, которая в БД хранит в формате x|y|z|g|f|v и т.д. 100 слов с именами тех, кто записан в эту книгу.

Мне нужно прогрузить данные слова, причем, у каждого человека может быть все по-разному

Я бы место того чтобы отводить каждому игроку двухмерных массив с большим кол-во ячеек, вынес все это в отдельную таблицу в БД

DeimoS
17.05.2017, 03:43
У меня есть телефонная книга, которая в БД хранит в формате x|y|z|g|f|v и т.д. 100 слов с именами тех, кто записан в эту книгу.

Мне нужно прогрузить данные слова, причем, у каждого человека может быть все по-разному

Соглашусь с оратором выше. Эти данные совсем не обязательно хранить на сервере постоянно. Создай отдельную таблицу со структурой

row_id | owner_id | subscriber_id
Где
row_id - Столбец с идентификатором строки (его мы вообще не трогаем. Устанавливаем параметр AUTO_INCREMENT и забываем о нём. Он нужен для правильного функционирования таблицы)
owner_id - ID аккаунта владельца телефонной книги
subscriber_id - ID аккаунта игрока, которого добавил владелец в свою телефонную книгу

Это и позволит удобно работать с данными, покойно удаляя/извлекая данные о любой записи в эту самую книгу, и позволит хранить неограниченное число номеров в этой самой книге (всё будет ограничиваться лишь размерами массива, куда будут выгружаться данные и ограничениями функции, с помощью которой данные отображаются игроку: если диалог - 4096 символов)



http://i.imgur.com/moGLofk.png
ссылка (http://i.imgur.com/moGLofk.png)


http://i.imgur.com/YkO4L1v.png
ссылка (http://i.imgur.com/YkO4L1v.png)

У аккаунта с ID 1 добавлены все оставшиеся аккаунты в телефонную книгу.
Аккаунту с ID 2 - 3 из 5
ID 3 - 2
ID 5 - 1





Собственно, вывод значений можно произвести таким запросом:

SELECT a.player_name AS name, a.phone_number AS number FROM accounts AS a, phone_book AS p WHERE p.owner_id = ID_АККАУНТА AND a.id = p.subscriber_id
/*
В результате запроса имена игроков, добавленных в телефонную книгу можно получить под меткой "name"
А их номера - "number"
То бишь:
new subscriber_name[MAX_PLAYER_NAME],
subscriber_number;
cache_get_value_name(0, "name", subscriber_name, MAX_PLAYER_NAME);// Ник
cache_get_value_name_int(0, "number", subscriber_number);// Номер телефона

Соответственно, данные из таблицы можно грузить прямо при вводе команды показа телефонной книги
и сразу показывать в диалоге, не сохраняя в глобальных массивах или где-либо ещё.
*/

http://i.imgur.com/8rERVZY.png
ссылка (http://i.imgur.com/8rERVZY.png)


Ну а редактирование, добавление и удаление, думаю, и сам знаешь как делать.

nikvlad
17.05.2017, 15:51
Соглашусь с оратором выше. Эти данные совсем не обязательно хранить на сервере постоянно. Создай отдельную таблицу со структурой

row_id | owner_id | subscriber_id
Где
row_id - Столбец с идентификатором строки (его мы вообще не трогаем. Устанавливаем параметр AUTO_INCREMENT и забываем о нём. Он нужен для правильного функционирования таблицы)
owner_id - ID аккаунта владельца телефонной книги
subscriber_id - ID аккаунта игрока, которого добавил владелец в свою телефонную книгу

Это и позволит удобно работать с данными, покойно удаляя/извлекая данные о любой записи в эту самую книгу, и позволит хранить неограниченное число номеров в этой самой книге (всё будет ограничиваться лишь размерами массива, куда будут выгружаться данные и ограничениями функции, с помощью которой данные отображаются игроку: если диалог - 4096 символов)



http://i.imgur.com/moGLofk.png
ссылка (http://i.imgur.com/moGLofk.png)


http://i.imgur.com/YkO4L1v.png
ссылка (http://i.imgur.com/YkO4L1v.png)

У аккаунта с ID 1 добавлены все оставшиеся аккаунты в телефонную книгу.
Аккаунту с ID 2 - 3 из 5
ID 3 - 2
ID 5 - 1





Собственно, вывод значений можно произвести таким запросом:

SELECT a.player_name AS name, a.phone_number AS number FROM accounts AS a, phone_book AS p WHERE p.owner_id = ID_АККАУНТА AND a.id = p.subscriber_id
/*
В результате запроса имена игроков, добавленных в телефонную книгу можно получить под меткой "name"
А их номера - "number"
То бишь:
new subscriber_name[MAX_PLAYER_NAME],
subscriber_number;
cache_get_value_name(0, "name", subscriber_name, MAX_PLAYER_NAME);// Ник
cache_get_value_name_int(0, "number", subscriber_number);// Номер телефона

Соответственно, данные из таблицы можно грузить прямо при вводе команды показа телефонной книги
и сразу показывать в диалоге, не сохраняя в глобальных массивах или где-либо ещё.
*/

http://i.imgur.com/8rERVZY.png
ссылка (http://i.imgur.com/8rERVZY.png)


Ну а редактирование, добавление и удаление, думаю, и сам знаешь как делать.

Дело в том, что в книге игрок сам устанавливает имя контакта.

vovandolg
17.05.2017, 16:29
начало какое с инклудами...
//

//My Visual Enum 'P'layer
new
pLolka[MAX_PLAYERS],
pKek[MAX_PLAYERS][100],
pCheburek[MAX_PLAYERS];

//My Visual Enum 'M'ap
new
mName[MAX_MAPS],
mInfo[MAX_MAPS][145],
mStatus[MAX_MAPS][MAX_PLAYERS];

//

вот тут тоже код какой то...


Почему так не кто не делает? зачем эти понты с enum:dirol:

VVWVV
17.05.2017, 17:18
начало какое с инклудами...
//

//My Visual Enum 'P'layer
new
pLolka[MAX_PLAYERS],
pKek[MAX_PLAYERS][100],
pCheburek[MAX_PLAYERS];

//My Visual Enum 'M'ap
new
mName[MAX_MAPS],
mInfo[MAX_MAPS][145],
mStatus[MAX_MAPS][MAX_PLAYERS];

//

вот тут тоже код какой то...


Почему так не кто не делает? зачем эти понты с enum:dirol:

Потому что это напоминает венгерскую нотацию (https://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%BD%D0%B3%D0%B5%D1%80%D1%81%D0%BA%D0%B0%D1%8F_%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F).

DeimoS
17.05.2017, 20:10
Дело в том, что в книге игрок сам устанавливает имя контакта.

Ну так какие проблемы? :) Вместо subscriber_id добавь subscriber_name и записывай туда имя контакта