sizeof умеет определять размер многомерных массивов, но он не дружит с enum.
DeimoS: Я именно это и хотел написать... :D Ну да ладно
Вид для печати
Прописывал. Пытался даже просто передать передать значение в обычную переменную, выводит (в той же функции) бред.
PHP код:
new chars[3][MAX_PLAYERS]; //глобальная переменная
PHP код:
enum CHAR_INFO {
...
cName,
...
};
new Char[MAX_PLAYERS][CHAR_INFO];
- - - Добавлено - - -PHP код:
Char[playerid][cName] = chars[i][playerid]
chars[i][playerid] передает верные значения, с ней все хорошо.
Эмм, а ничего, что cName ты не как массив создаёшь? О_о
PHP код:
enum CHAR_INFO {
...
cName[MAX_PLAYER_NAME],
...
};
new Char[MAX_PLAYERS][CHAR_INFO];
PHP код:
format(Char[playerid][cName], MAX_PLAYER_NAME, chars[i][playerid]);
Всем доброго времени суток. Возникла проблема с макросом DCMD.
Есть команда на strtok:
И есть та же самая команда, которую я пытаюсь адаптировать под DCMD:
Все компилируется без ошибок и вроде даже работает... но вариант на DCMD почему-то присваивает color1 (params[1]) и color2 (params[2]) значения из vehmod (params[0]). Получается как-то так - создаю транспорт с моделью 411, получаю Infernus с цветами 11 и 1. Создаю с моделью 451, получаю Turismo с цветами 51 и 1. И так с любыми моделями и заданными цветами. Более того, не работают даже чужие примеры из мануалов. Подскажите, пожалуйста, в чем может быть проблема? Что я упустил?
Параметры нужно обрабатывать через sscanf
PHP код:
dcmd_veh(playerid, params[])
{
if (!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "Ошибка: Недостаточно прав доступа.");
if (GetPlayerState(playerid) == 0 || GetPlayerState(playerid) == 7 || GetPlayerState(playerid) == 9) return SendClientMessage(playerid, COLOR_RED, "Ошибка: Вы должны быть заспавлены.");
new vehmod,
color1,
color2;
if(sscanf(params, "iI(-1)I(-1)", vehmod, color1, color2)) return SendClientMessage(playerid, COLOR_YELLOW, "Использование: /veh [id транспорта] [цвет 1] [цвет 2].");
if (vehmod < 400 || vehmod > 611) { SendClientMessage(playerid, COLOR_RED, "Ошибка: Неверный ID транспорта. Используйте значение от 400 до 611."); return 1; }
if (color1 == -1 || color2 == -1) { color1 = random(255); color2 = random(255); }
if ((color1 < 0 || color1 > 255) || (color2 < 0 || color2 > 255)) { SendClientMessage(playerid, COLOR_RED, "Ошибка: Неверный цвет транспорта. Используйте значение от 0 до 255."); return 1; }
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X,Y,Z);
new vehid = CreateVehicle(vehmod, X, Y+5, Z, 0.0, color1, color2, -1);
LinkVehicleToInterior(vehid, GetPlayerInterior(playerid));
PutPlayerInVehicle(playerid, vehid, 0);
gVehCount[gCreatedVeh] = vehid;
gCreatedVeh ++;
new message1[MAX_CHAT_MESSAGE];
format(message1, sizeof(message1), "Транспорт создан: ID %d Порядковый номер %d. %d %d", vehmod, vehid, color1, color2);
SendClientMessage(playerid, COLOR_YELLOW, message1);
new message2[MAX_CHAT_MESSAGE];
format(message2, sizeof(message2), "Администратор %s создал транспорт: ID %d Порядковый номер %d.", GetName(playerid), vehmod, vehid);
SendClientMessageToAll(COLOR_RED, message2);
return 1;
}
Без sscanf, как в этом гайде, не получится?
Где-то на этом форуме видел, где рассказывалось о способе нумерации диалогов с помощью enum, можете дать ссылку, кто помнит? Гугл подвёл