Я знаю, я видел это, но там другой вариант, более к классическому стилю.
Я знаю, я видел это, но там другой вариант, более к классическому стилю.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
pawnoholic (17.06.2018)
Пришло время снова попробовать.
Код:
#define Player. OO_TYPE(PLAYER,Player) enum E_PLAYER_Vehicle { Float:E_PLAYER_Vehicle_x, Float:E_PLAYER_Vehicle_y, Float:E_PLAYER_Vehicle_z, Float:E_PLAYER_Vehicle_a }; new Player@Vehicle[MAX_PLAYERS][E_PLAYER_Vehicle]; main() { Player.Vehicle[0].x = 10.0; }
Результат:
(error) must be lvalue (non-constant) (error) invalid expression, assumed zero (warning) expression has no effect
Я думаю проблема скорее в отсутствии макросов для @vb: и @va:
Я их нашел, но не думаю что подходят к этому варианту, либо Y-Less забыл про них, либо они не нужны и я что то не так делаю.
#define OO_TYPE(%6,%7)%0[%1] (_:@vb:@va:%6:%7@%0[%1] #define @va:%6:%7@%0[%1][@%2] %7%0[%1])[E_%6_%0_%2] #define @vb:@va:%6:%7@%0[%1][%2][@%3] %7%0[%1])[%2][E_%6_%0_%3]
Последний раз редактировалось pawnoholic; 20.06.2018 в 00:53.
Скинь весь код, что у тебя получился (и макросы, и то, как ты пытаешься их использовать)
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
// by Y-Less #define OO_TYPE(%6,%7)%0[%1]%2. (_:@vb:@va:%6:%7@%0[%1]%2[E_%6_%0:@vw:@vx:@vy:@vz:@vs:$E_%6_%0_] #define @va:%6:%7@%0[%1][@%2] %7%0[%1])[E_%6_%0_%2] #define @vb:@va:%6:%7@%0[%1][%2][@%3] %7%0[%1])[%2][E_%6_%0_%3] // First move the ] out as far as required. #define @vw:%9$%0]%1[ @vv:@vu:@vt:@vr:@vq$%0%1][ #define @vx:%9$%0]%1; @vv:@vu:@vt:@vr:@vq$%0%1]; #define @vy:%9$%0]%1) @vv:@vu:@vt:@vr:@vq$%0%1]) #define @vz:%9$%0]%1, @vv:@vu:@vt:@vr:@vq$%0%1], #define @vs:%9$%0]%1: @vv:@vu:@vt:@vr:@vq$%0%1]: // Second, move it in again to constrain the contents. We don't need to scan // for `[` again since it was the first one looked for above and so can't // possibly be within the square brackets. This is good, because scanning for // `[` from within `[]` is problematic. #define @vv:%9$%0;%1] %9$%0];%1 #define @vu:%9$%0)%1] %9$%0])%1 #define @vt:%9$%0,%1] %9$%0],%1 #define @vr:%9$%0:%1] %9$%0]:%1 #define @vq$ #define Player. OO_TYPE(PLAYER,Player) enum E_PLAYER_Vehicle { Float:E_PLAYER_Vehicle_x, Float:E_PLAYER_Vehicle_y, Float:E_PLAYER_Vehicle_z, Float:E_PLAYER_Vehicle_a }; new PlayerVehicle[MAX_PLAYERS][E_PLAYER_Vehicle]; { Player.Vehicle[playerid].x = 0.0; Player.Vehicle[playerid].y = 0.0; Player.Vehicle[playerid].z = 0.0; Player.Vehicle[playerid].a = 0.0; return 1; }
1) Массив должен быть назван так: Player@Vehicle.
2) Данный парсер не рассчитан на какие-либо операции, поскольку нет таковых условий, поэтому знак равно, да и в общем-то любые знаки записываются в квадратные скобки.
Вот результат работы препроцессора:
enum E_PLAYER_Vehicle { Float:E_PLAYER_Vehicle_x, Float:E_PLAYER_Vehicle_y, Float:E_PLAYER_Vehicle_z, Float:E_PLAYER_Vehicle_a }; new Player@Vehicle[MAX_PLAYERS][E_PLAYER_Vehicle]; { (_:@vb:@va:PLAYER:Player@Vehicle[playerid][E_PLAYER_Vehicle:@vw:@vv:@vu:@vt:@vr:E_PLAYER_Vehicle_x = 0.0]; (_:@vb:@va:PLAYER:Player@Vehicle[playerid][E_PLAYER_Vehicle:@vw:@vv:@vu:@vt:@vr:E_PLAYER_Vehicle_y = 0.0]; (_:@vb:@va:PLAYER:Player@Vehicle[playerid][E_PLAYER_Vehicle:@vw:@vv:@vu:@vt:@vr:E_PLAYER_Vehicle_z = 0.0]; (_:@vb:@va:PLAYER:Player@Vehicle[playerid][E_PLAYER_Vehicle:@vw:@vv:@vu:@vt:@vr:E_PLAYER_Vehicle_a = 0.0]; return 1; }
pawnoholic (20.06.2018)
Уже очень много времени не могу понять по какому принципу пишутся препроцессорные парсеры, подскажите как можно реализовать вот такой вызов этого макроса:
SendClientMessage(playerid, COLOR(RED, 500), "Добро пожаловать!"); // Не возможно поставить пробел между аргументами SendClientMessage(playerid, COLOR(RED), "Добро пожаловать!"); // Вызов функции без второго аргумента, который по умолчанию заменяется на COLOR@RED@500
Код:
#define COLOR@RED@100<%1,%2> (%1FFCDD2%2) #define COLOR@RED@200<%1,%2> (%1EF9A9A%2) #define COLOR@RED@300<%1,%2> (%1E57373%2) #define COLOR@RED@400<%1,%2> (%1EF5350%2) #define COLOR@RED@500<%1,%2> (%1F44336%2) #define COLOR@RED@600<%1,%2> (%1E53935%2) #define COLOR@RED@700<%1,%2> (%1D32F2F%2) #define COLOR@RED@800<%1,%2> (%1C62828%2) #define COLOR@RED@900<%1,%2> (%1B71C1C%2) #define COLOR(%0,%1) (COLOR@%0@%1<0x,AA>)
Делаем две проверки на символ ','
#define COLOR@RED@100<%1,%2> (%1FFCDD2%2) #define COLOR@RED@200<%1,%2> (%1EF9A9A%2) #define COLOR@RED@300<%1,%2> (%1E57373%2) #define COLOR@RED@400<%1,%2> (%1EF5350%2) #define COLOR@RED@500<%1,%2> (%1F44336%2) #define COLOR@RED@600<%1,%2> (%1E53935%2) #define COLOR@RED@700<%1,%2> (%1D32F2F%2) #define COLOR@RED@800<%1,%2> (%1C62828%2) #define COLOR@RED@900<%1,%2> (%1B71C1C%2) #define COLOR(%1) (_:clr@aM:clr@aN:$%1) #define clr@aM:%8$%0,%1) clr@rS:COLOR@%0@%1<0x,AA>) #define clr@aN:%8$%0) clr@rS:COLOR@%0@100<0x,AA>) // 100 - default value. #define clr@rS:%1\32;%0) clr@rS:%1%0) COLOR(RED, 800)
pawnoholic (16.07.2018)
undefined symbol "@COLOR@RED"
invalid expression, assumed zero
array must be indexed (variable "-unknown-")
too many error messages on one line
Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)