· 6 years ago · Oct 13, 2019, 09:06 PM
1// TDEditor.pwn by Gammix
2#define FILTERSCRIPT
3
4#include <a_samp>
5#include <zcmd>
6#include <dialogs>
7#include <easydialog>
8#include <timestamptodate>
9#include <dini2>
10#include <sscanf2>
11#include <sqlitei>
12
13// Editor info.
14#define VERSION "v1.3.4"
15#define DATE "30 April, 2018"
16//
17
18#define PATH_PROJECT_FILES "TDEditor/Projects/"
19#define PATH_EXPORT_FILES "TDEditor/Exports/"
20#define PATH_RECORD_FILE "TDEditor/Records.txt"
21#define PATH_OBJECTS_FILE "TDEditor/ObjectModels.db"
22
23#define MAX_PROJECTS 32
24#define MAX_PROJECT_NAME 64
25
26#define MAX_GROUPS 32
27#define MAX_GROUP_NAME 32
28#define MAX_GROUP_TEXTDRAWS 64
29#define MAX_GROUP_TEXTDRAW_TEXT 256
30
31#define MAX_GROUP_TEXTDRAW_PREVIEW_CHARS 16
32
33#define MESSAGE_COLOR (0xfffd91ff)
34
35#define COL_WHITE "{ffffff}"
36#define COL_GREEN "{93ffbc}"
37#define COL_RED "{ff7f7f}"
38#define COL_ORANGE "{ffa172}"
39#define COL_BLUE "{96ceff}"
40#define COL_YELLOW "{f1ff96}"
41#define COL_GREY "{c4c4c4}"
42
43enum {
44 EDITING_NONE,
45 EDITING_POS,
46 EDITING_LETTER_SIZE,
47 EDITING_TEXT_SIZE,
48 EDITING_SHADOW_SIZE,
49 EDITING_OUTLINE_SIZE,
50 EDITING_PREVIEW_ROT,
51 EDITING_BACKGROUND_COLOR,
52 EDITING_TEXTDRAW_COLOR,
53 EDITING_BOX_COLOR,
54 EDITING_GROUP_POS
55};
56
57enum {
58 COLOR_ELEMENT_TEXTDRAW,
59 COLOR_ELEMENT_BOX,
60 COLOR_ELEMENT_BACKGROUND
61};
62
63enum E_GROUP {
64 E_GROUP_NAME[MAX_GROUP_NAME],
65 E_GROUP_TEXTDRAWS_COUNT,
66 bool:E_GROUP_VISIBLE
67};
68
69enum E_TEXTDRAW {
70 E_TEXTDRAW_SQLID,
71 Text:E_TEXTDRAW_ID,
72 E_TEXTDRAW_TEXT[MAX_GROUP_TEXTDRAW_TEXT],
73 Float:E_TEXTDRAW_X,
74 Float:E_TEXTDRAW_Y,
75 Float:E_TEXTDRAW_LETTERSIZE_X,
76 Float:E_TEXTDRAW_LETTERSIZE_Y,
77 Float:E_TEXTDRAW_TEXTSIZE_X,
78 Float:E_TEXTDRAW_TEXTSIZE_Y,
79 E_TEXTDRAW_ALIGNMENT,
80 E_TEXTDRAW_COLOR,
81 bool:E_TEXTDRAW_USE_BOX,
82 E_TEXTDRAW_BOX_COLOR,
83 E_TEXTDRAW_SHADOW,
84 E_TEXTDRAW_OUTLINE,
85 E_TEXTDRAW_BACKGROUND_COLOR,
86 E_TEXTDRAW_FONT,
87 bool:E_TEXTDRAW_PROPORTIONAL,
88 bool:E_TEXTDRAW_SELECTABLE,
89 E_TEXTDRAW_PREVIEW_MODEL,
90 Float:E_TEXTDRAW_PREVIEW_ROT_X,
91 Float:E_TEXTDRAW_PREVIEW_ROT_Y,
92 Float:E_TEXTDRAW_PREVIEW_ROT_Z,
93 Float:E_TEXTDRAW_PREVIEW_ROT_ZOOM,
94 E_TEXTDRAW_PREVIEW_VEH_COLOR1,
95 E_TEXTDRAW_PREVIEW_VEH_COLOR2,
96 bool:E_TEXTDRAW_TYPE_PLAYER
97};
98
99enum E_COLOR {
100 E_COLOR_NAME[32],
101 E_COLOR_CODE
102};
103
104new const COLORS[][E_COLOR] = {
105 {"Античный белый", 0xFAEBD7FF},
106 {"Аква", 0x00FFFFFF},
107 {"Аквамарин", 0x7FFFD4FF},
108 {"Лазурный", 0xF0FFFFFF},
109 {"Бежевый", 0xF5F5DCFF},
110 {"Белый миндаль", 0xFFE4C4FF},
111 {"Чёрный", 0x000000FF},
112 {"Бланшированный миндаль", 0xFFEBCDFF},
113 {"Синий", 0x0000FFFF},
114 {"Сине-фиолетовый", 0x8A2BE2FF},
115 {"Коричневый", 0xA52A2AFF},
116 {"Дерево", 0xDEB887FF},
117 {"Серовато-синий", 0x5F9EA0FF},
118 {"Шартрёз", 0x7FFF00FF},
119 {"Шоколадный", 0xD2691EFF},
120 {"Коралловый", 0xFF7F50FF},
121 {"Васильковый", 0x6495EDFF},
122 {"Светло-жёлтый", 0xFFF8DCFF},
123 {"Малиновый", 0xDC143CFF},
124 {"Голубой", 0x00FFFFFF},
125 {"Тёмно-синий", 0x00008BFF},
126 {"Тёмно-голубой", 0x008B8BFF},
127 {"Тёмный золотистый", 0xB8860BFF},
128 {"Тёмно-серый", 0xA9A9A9FF},
129 {"Тёмно-зелёный", 0x006400FF},
130 {"Тёмный хаки", 0xBDB76BFF},
131 {"Тёмно-пурпурный", 0x8B008BFF},
132 {"Тёмный оливковый зеленый", 0x556B2FFF},
133 {"Тёмно-оранжевый", 0xFF8C00FF},
134 {"Тёмная орхидея", 0x9932CCFF},
135 {"Тёмно-красный", 0x8B0000FF},
136 {"Тёмный розово-оранжевый", 0xE9967AFF},
137 {"Тёмная морская волна", 0x8FBC8FFF},
138 {"Сланцевый тёмно-синий", 0x483D8BFF},
139 {"Сланцевый тёмно-серый", 0x2F4F4FFF},
140 {"Тёмно-бирюзовый", 0x00CED1FF},
141 {"Тёмно-фиолетовый",0x9400D3FF},
142 {"Тёмно-розовый", 0xFF1493FF},
143 {"Лазурно-голубой", 0x00BFFFFF},
144 {"Тускло-серый", 0x696969FF},
145 {"Ярко-лазурный", 0x1E90FFFF},
146 {"Кирпичный", 0xB22222FF},
147 {"Цветочный белый", 0xFFFAF0FF},
148 {"Лесной зелёный", 0x228B22FF},
149 {"Фуксия", 0xFF00FFFF},
150 {"Бледно-серый", 0xDCDCDCFF},
151 {"Призрачный белый",0xF8F8FFFF},
152 {"Золотой", 0xFFD700FF},
153 {"Золотистый", 0xDAA520FF},
154 {"Серый", 0x808080FF},
155 {"Зелёный", 0x008000FF},
156 {"Жёлто-зеленый", 0xADFF2FFF},
157 {"Нектарный", 0xF0FFF0FF},
158 {"Ярко-розовый", 0xFF69B4FF},
159 {"Индийский красный ", 0xCD5C5CFF},
160 {"Индиго", 0x4B0082FF},
161 {"Слоновая кость", 0xFFFFF0FF},
162 {"Хаки", 0xF0E68CFF},
163 {"Лавандовый", 0xE6E6FAFF},
164 {"Светло-лавандовый", 0xFFF0F5FF},
165 {"Зелёный газон", 0x7CFC00FF},
166 {"Светлый лимонный",0xFFFACDFF},
167 {"Светло-синий", 0xADD8E6FF},
168 {"Светло-коралловый", 0xF08080FF},
169 {"Светло-голубой", 0xE0FFFFFF},
170 {"Светлый жёлто-золотистый", 0xFAFAD2FF},
171 {"Светло-серый", 0xD3D3D3FF},
172 {"Светло-зелёный", 0x90EE90FF},
173 {"Светло-розовый", 0xFFB6C1FF},
174 {"Светлый розово-оранжевый", 0xFFA07AFF},
175 {"Светлая морская волна", 0x20B2AAFF},
176 {"Бледно-лазурный", 0x87CEFAFF},
177 {"Сланцевый светло-серый", 0x778899FF},
178 {"Стальной светло-синий", 0xB0C4DEFF},
179 {"Светло-жёлтый", 0xFFFFE0FF},
180 {"Лаймовый", 0x00FF00FF},
181 {"Лаймово-зелёный", 0x32CD32FF},
182 {"Бельё", 0xFAF0E6FF},
183 {"Маджента", 0xFF00FFFF},
184 {"Каштановый", 0x800000FF},
185 {"Тёмный аквамарин",0x66CDAAFF},
186 {"Тёмно-синий", 0x0000CDFF},
187 {"Тёмная орхидея", 0xBA55D3FF},
188 {"Тёмно-фиолетовый",0x9370DBFF},
189 {"Тёмная морская волна", 0x3CB371FF},
190 {"Сланцевый тёмно-синий", 0x7B68EEFF},
191 {"Тёмный весенний зелёный", 0x00FA9AFF},
192 {"Тёмно-бирюзовый", 0x48D1CCFF},
193 {"Красно-фиолетовый", 0xC71585FF},
194 {"Полуночный синий",0x191970FF},
195 {"Кремовый", 0xF5FFFAFF},
196 {"Бледно-розовый", 0xFFE4E1FF},
197 {"Бело-оранжевый", 0xFFE4B5FF},
198 {"Оранжево-белый", 0xFFDEADFF},
199 {"Тёмно-синий", 0x000080FF},
200 {"Бледно-жёлтый", 0xFDF5E6FF},
201 {"Оливковый", 0x808000FF},
202 {"Серый оливковый", 0x6B8E23FF},
203 {"Оранжевый", 0xFFA500FF},
204 {"Оранжево-красный",0xFF4500FF},
205 {"Орхидея", 0xDA70D6FF},
206 {"Бледно-золотистый", 0xEEE8AAFF},
207 {"Бледно-зелёный", 0x98FB98FF},
208 {"Бледная бирюза", 0xAFEEEEFF},
209 {"Бледно-фиолетовый красный", 0xDB7093FF},
210 {"Папайя", 0xFFEFD5FF},
211 {"Персиковый", 0xFFDAB9FF},
212 {"Светло-коричневый", 0xCD853FFF},
213 {"Розовый", 0xFFC0CBFF},
214 {"Сливовый", 0xDDA0DDFF},
215 {"Бледно-синий", 0xB0E0E6FF},
216 {"Пурпурный", 0x800080FF},
217 {"Тёмно-пурпурный", 0x663399FF},
218 {"Красный", 0xFF0000FF},
219 {"Розово-коричневый", 0xBC8F8FFF},
220 {"Королевский синий", 0x4169E1FF},
221 {"Тёмно-коричневый", 0x8B4513FF},
222 {"Розово-оранжевый",0xFA8072FF},
223 {"Песчано-коричневый", 0xF4A460FF},
224 {"Морская волна", 0x2E8B57FF},
225 {"Морская ракушка", 0xFFF5EEFF},
226 {"Охра", 0xA0522DFF},
227 {"Серебряный", 0xC0C0C0FF},
228 {"Голубое небо", 0x87CEEBFF},
229 {"Сланцевый синий", 0x6A5ACDFF},
230 {"Сланцевый серый", 0x708090FF},
231 {"Снежный", 0xFFFAFAFF},
232 {"Весенний зелёный",0x00FF7FFF},
233 {"Стальной синий", 0x4682B4FF},
234 {"Бледно-коричневый", 0xD2B48CFF},
235 {"Сине-зелёный", 0x008080FF},
236 {"Чертополох", 0xD8BFD8FF},
237 {"Томатный", 0xFF6347FF},
238 {"Бирюзовый", 0x40E0D0FF},
239 {"Фиолетовый", 0xEE82EEFF},
240 {"Пшеничный", 0xF5DEB3FF},
241 {"Белый", 0xFFFFFFFF},
242 {"Белый дым", 0xF5F5F5FF},
243 {"Жёлтый", 0xFFFF00FF},
244 {"Жёлто-зелёный", 0x9ACD32FF}
245};
246
247new projectName[MAX_PROJECT_NAME];
248new DB:projectDB;
249new bool:showTextDrawCmds;
250
251new playerEditing[MAX_PLAYERS];
252new playerEditingTimer[MAX_PLAYERS];
253new PlayerText:playerEditingTextDraw[MAX_PLAYERS];
254new playerCurrentGroup[MAX_PLAYERS];
255new playerCurrentTextDraw[MAX_PLAYERS];
256
257new groupData[MAX_GROUPS][E_GROUP];
258new groupTextDrawData[MAX_GROUPS][MAX_GROUP_TEXTDRAWS][E_TEXTDRAW];
259new groupsCount;
260
261ReturnDate(timestamp) {
262 new year, month, day, unused;
263 TimestampToDate(timestamp, year, month, day, unused, unused, unused, 0);
264 #pragma unused unused
265
266 static const MONTH_NAMES[][] = {
267 "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"
268 };
269
270 new date[32];
271 if (month < 1 || month > sizeof (MONTH_NAMES)) {
272 format(date, sizeof (date), "%i/%i/%i", day, month, year);
273 }
274 else {
275 format(date, sizeof (date), "%i %s, %i", day, MONTH_NAMES[(month - 1)], year);
276 }
277 return date;
278}
279
280ResetGroupData(groupid) {
281 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
282 TextDrawDestroy(groupTextDrawData[groupid][i][E_TEXTDRAW_ID]);
283 groupTextDrawData[groupid][i][E_TEXTDRAW_ID] = Text:INVALID_TEXT_DRAW;
284 }
285
286 groupData[groupid][E_GROUP_NAME][0] = EOS;
287 groupData[groupid][E_GROUP_TEXTDRAWS_COUNT] = 0;
288 groupData[groupid][E_GROUP_VISIBLE] = true;
289}
290
291CreateGroupTextDraw(groupid, textdrawid) {
292 #define this(%0) \
293 groupTextDrawData[groupid][textdrawid][%0]
294
295 if (this(E_TEXTDRAW_ID) != Text:INVALID_TEXT_DRAW) {
296 TextDrawDestroy(this(E_TEXTDRAW_ID));
297 }
298 this(E_TEXTDRAW_ID) = TextDrawCreate(this(E_TEXTDRAW_X), this(E_TEXTDRAW_Y), this(E_TEXTDRAW_TEXT));
299
300 TextDrawLetterSize(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_LETTERSIZE_X), this(E_TEXTDRAW_LETTERSIZE_Y));
301 TextDrawTextSize(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_TEXTSIZE_X), this(E_TEXTDRAW_TEXTSIZE_Y));
302 TextDrawAlignment(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_ALIGNMENT));
303 TextDrawColor(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_COLOR));
304 TextDrawUseBox(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_USE_BOX));
305 TextDrawBoxColor(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_BOX_COLOR));
306 TextDrawSetShadow(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_SHADOW));
307 TextDrawSetOutline(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_OUTLINE));
308 TextDrawBackgroundColor(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_BACKGROUND_COLOR));
309 TextDrawFont(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_FONT));
310 TextDrawSetProportional(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_PROPORTIONAL));
311 TextDrawSetSelectable(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_SELECTABLE));
312 TextDrawSetPreviewModel(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_PREVIEW_MODEL));
313 TextDrawSetPreviewRot(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_PREVIEW_ROT_X), this(E_TEXTDRAW_PREVIEW_ROT_Y), this(E_TEXTDRAW_PREVIEW_ROT_Z), this(E_TEXTDRAW_PREVIEW_ROT_ZOOM));
314 TextDrawSetPreviewVehCol(this(E_TEXTDRAW_ID), this(E_TEXTDRAW_PREVIEW_VEH_COLOR1), this(E_TEXTDRAW_PREVIEW_VEH_COLOR2));
315
316 if (groupData[groupid][E_GROUP_VISIBLE]) {
317 TextDrawShowForAll(this(E_TEXTDRAW_ID));
318 }
319
320 #undef this
321}
322
323RGBA(red, green, blue, alpha) {
324 return ((red * 16777216) + (green * 65536) + (blue * 256) + alpha);
325}
326
327HexToInt(string[]) {
328 new cur = 1;
329 new res = 0;
330 for (new i = strlen(string); i > 0; i--) {
331 if (string[i - 1] < 58) {
332 res = res + cur * (string[i - 1] - 48);
333 }
334 else {
335 res = res + cur * (string[i - 1] - 65 + 10);
336 }
337
338 cur = cur * 16;
339 }
340 return res;
341}
342
343forward ShowPlayerGroupDialog(playerid, groupid);
344public ShowPlayerGroupDialog(playerid, groupid) {
345 static string[512 + (MAX_GROUP_TEXTDRAWS * (MAX_GROUP_TEXTDRAW_TEXT + 32))];
346 string = ""COL_GREEN"Создать новый текстдрав\t"COL_GREY"Добавление текстдрава в группу (максимальное количество текстдравов в группе: "#MAX_GROUP_TEXTDRAWS")\n\
347 "COL_YELLOW"Изменить позицию группы\t"COL_GREY"Одновременно изменяет позицию всех текстдравов в группе\n";
348
349 if (groupData[groupid][E_GROUP_VISIBLE]) {
350 strcat(string, ""COL_YELLOW"Изменить видимость группы\t"COL_GREY"Текущая: "COL_GREEN"ВКЛ\n");
351 }
352 else {
353 strcat(string, ""COL_YELLOW"Изменить видимость группы\t"COL_GREY"Текущая: "COL_RED"ВЫКЛ\n");
354 }
355
356 strcat(string, ""COL_YELLOW"Изменить название группы\t"COL_GREY"Текущее: '"COL_GREEN"");
357 strcat(string, groupData[groupid][E_GROUP_NAME]);
358 strcat(string, ""COL_GREY"'\n");
359
360 strcat(string, ""COL_ORANGE"Скопировать группу\t"COL_GREY"Скопировать свойства группы в новую пустую группу\n\
361 "COL_RED"Удалить группу\t"COL_GREY"Удалить группу со всеми текстдравами в ней\n");
362
363 new previewChars[MAX_GROUP_TEXTDRAW_PREVIEW_CHARS + 4];
364 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
365 strmid(previewChars, groupTextDrawData[groupid][i][E_TEXTDRAW_TEXT], 0, MAX_GROUP_TEXTDRAW_PREVIEW_CHARS);
366 if (strlen(groupTextDrawData[groupid][i][E_TEXTDRAW_TEXT]) > MAX_GROUP_TEXTDRAW_PREVIEW_CHARS) {
367 strcat(previewChars, "...");
368 }
369
370 switch (groupTextDrawData[groupid][i][E_TEXTDRAW_FONT]) {
371 case 0, 1, 2, 3: {
372 format(string, sizeof (string), "%sТекст #%i: '%s'\n", string, i, previewChars);
373 }
374
375 case 4: {
376 format(string, sizeof (string), "%sТекст #%i: '%s' (Спрайт)\n", string, i, previewChars);
377 }
378
379 case 5: {
380 format(string, sizeof (string), "%sТекст #%i: '%s' (Превью модель)\n", string, i, previewChars);
381 }
382 }
383 }
384
385 playerCurrentGroup[playerid] = groupid;
386 return Dialog_Show(playerid, GROUP_MENU, DIALOG_STYLE_TABLIST, "TDEditor: Меню группы", string, "Выбрать", "Назад");
387}
388
389forward ShowPlayerTextDrawDialog(playerid, textdrawid);
390public ShowPlayerTextDrawDialog(playerid, textdrawid) {
391 new groupid = playerCurrentGroup[playerid];
392
393 static string[1024];
394 string = "Свойство\tЗначение\n";
395
396 new previewChars[MAX_GROUP_TEXTDRAW_PREVIEW_CHARS + 4];
397 strmid(previewChars, groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT], 0, MAX_GROUP_TEXTDRAW_PREVIEW_CHARS);
398 if (strlen(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT]) > MAX_GROUP_TEXTDRAW_PREVIEW_CHARS) {
399 strcat(previewChars, "...");
400 }
401
402 format(string, sizeof (string),
403 "%s\
404 Текст и позиция\t'%s'\n",
405 string,
406 previewChars,
407 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y]);
408
409 switch (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_FONT]) {
410 case 0, 1, 2, 3: {
411 format(string, sizeof (string), "%sШрифт\t"COL_GREY"%i (Текст)\n", string, groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_FONT]);
412 }
413
414 case 4: {
415 strcat(string, "Шрифт\t"COL_GREY"4 (Спрайт)\n");
416 }
417
418 case 5: {
419 strcat(string, "Шрифт\t"COL_GREY"5 (Превью модель)\n");
420 }
421
422 default: {
423 strcat(string, "Шрифт\t"COL_GREY"Неизвестно\n");
424 }
425 }
426
427 switch (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ALIGNMENT]) {
428 case 1: {
429 strcat(string, "Выравнивание\t"COL_GREY"1 (По левому краю)\n");
430 }
431
432 case 2: {
433 strcat(string, "Выравнивание\t"COL_GREY"2 (По центру)\n");
434 }
435
436 case 3: {
437 strcat(string, "Выравнивание\t"COL_GREY"3 (По правому краю)\n");
438 }
439
440 default: {
441 strcat(string, "Выравнивание\t"COL_GREY"Неизвестно\n");
442 }
443 }
444
445 if (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PROPORTIONAL]) {
446 strcat(string, "Пропорциональность\t"COL_GREEN"ВКЛ\n");
447 }
448 else {
449 strcat(string, "Пропорциональность\t"COL_RED"ВЫКЛ\n");
450 }
451
452 format(string, sizeof (string),
453 "%s\
454 Тень\t"COL_GREY"Размер: %i\n\
455 Обводка\t"COL_GREY"Размер: %i\n\
456 Обводка/Цвет тени\t{%06x}Предпросмотр\n",
457 string,
458 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SHADOW],
459 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_OUTLINE],
460 (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR] >>> 8));
461
462 format(string, sizeof (string),
463 "%s\
464 Размер текста\t"COL_GREY"%0.4f, %0.4f\n\
465 Цвет текста/текстдрава\t{%06x}Предпросмотр\n",
466 string,
467 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y],
468 (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR] >>> 8));
469
470 if (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_USE_BOX]) {
471 strcat(string, "Использовать box\t"COL_GREEN"ВКЛ\n");
472 }
473 else {
474 strcat(string, "Использовать box\t"COL_RED"ВЫКЛ\n");
475 }
476
477 format(string, sizeof (string),
478 "%s\
479 Размер Box'а\t"COL_GREY"%0.4f, %0.4f\n\
480 Цвет Box'а\t{%06x}Предпросмотр\n",
481 string,
482 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y],
483 (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR] >>> 8));
484
485 if (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SELECTABLE]) {
486 strcat(string, "Кликабельность\t"COL_GREEN"ВКЛ\n");
487 }
488 else {
489 strcat(string, "Кликабельность\t"COL_RED"ВЫКЛ\n");
490 }
491
492 strcat(string, "Опции превью модели\n");
493
494 if (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TYPE_PLAYER]) {
495 strcat(string, "Тип текстдрава\t"COL_BLUE"ПЕРСОНАЛЬНЫЙ\n");
496 }
497 else {
498 strcat(string, "Тип текстдрава\t"COL_YELLOW"ГЛОБАЛЬНЫЙ\n");
499 }
500
501 strcat(string,
502 ""COL_ORANGE"Скопировать текстдрав\n\
503 "COL_RED"Удалить текстдрав\n");
504
505 playerCurrentTextDraw[playerid] = textdrawid;
506 return Dialog_Show(playerid, TEXTDRAW_MENU, DIALOG_STYLE_TABLIST_HEADERS, "TDEditor: Меню текстдрава", string, "Выбрать", "Назад");
507}
508
509ExportProject(const filename[]) {
510 new File:h = fopen(filename, io_write);
511 if (!h) {
512 return 0;
513 }
514
515 new string[1024];
516 new globalTextdrawsCount;
517 new playerTextdrawsCount;
518 new bool:isThereAnyGlobalTextDraws;
519 new bool:isThereAnyPlayerTextDraws;
520 new pos;
521 new len;
522 new varname[41];
523 new idx;
524
525 fwrite(h, "// Текстдрав(ы) создан(ы) при помощи Gammix's TextDraw editor\r\n");
526 fwrite(h, "#include <a_samp>\r\n\r\n");
527
528 fwrite(h, "// объявление переменной в начале скрипта\r\n");
529 for (new i; i < groupsCount; i++) {
530 format(string, sizeof (string), "/*\r\n** группа текстдравов: \"%s\"\r\n*/\r\n", groupData[i][E_GROUP_NAME]);
531 fwrite(h, string);
532
533 globalTextdrawsCount = 0;
534 playerTextdrawsCount = 0;
535 for (new x; x < groupData[i][E_GROUP_TEXTDRAWS_COUNT]; x++) {
536
537 len = strlen(groupTextDrawData[i][x][E_TEXTDRAW_TEXT]);
538 while ((pos = strfind(groupTextDrawData[i][x][E_TEXTDRAW_TEXT], "\"")) != -1) {
539 strdel(groupTextDrawData[i][x][E_TEXTDRAW_TEXT], pos, (pos + 1));
540 strins(groupTextDrawData[i][x][E_TEXTDRAW_TEXT], "''", pos, len);
541 }
542
543 if (groupTextDrawData[i][x][E_TEXTDRAW_TYPE_PLAYER]) {
544 playerTextdrawsCount++;
545
546 isThereAnyPlayerTextDraws = true;
547 }
548 else {
549 globalTextdrawsCount++;
550
551 isThereAnyGlobalTextDraws = true;
552 }
553 }
554
555 if (globalTextdrawsCount == 1) {
556 format(string, sizeof (string), "new Text:%sTD;\r\n", groupData[i][E_GROUP_NAME]);
557 fwrite(h, string);
558 }
559 else if (globalTextdrawsCount > 1) {
560 format(string, sizeof (string), "new Text:%sTD[%i];\r\n", groupData[i][E_GROUP_NAME], globalTextdrawsCount);
561 fwrite(h, string);
562 }
563
564 if (playerTextdrawsCount == 1) {
565 format(string, sizeof (string), "new PlayerText:%sPTD[MAX_PLAYERS];\r\n", groupData[i][E_GROUP_NAME]);
566 fwrite(h, string);
567 }
568 else if (playerTextdrawsCount > 1) {
569 format(string, sizeof (string), "new PlayerText:%sPTD[MAX_PLAYERS][%i];\r\n", groupData[i][E_GROUP_NAME], playerTextdrawsCount);
570 fwrite(h, string);
571 }
572 }
573
574 fwrite(h, "\r\n");
575
576 if (isThereAnyGlobalTextDraws) {
577 fwrite(h, "// создание глобального(ых) текстдрава(ов) предпочтительнее в \"OnGameModeInit\"\r\n");
578 fwrite(h, "public OnGameModeInit() {\r\n");
579
580 for (new i; i < groupsCount; i++) {
581 globalTextdrawsCount = 0;
582 for (new x; x < groupData[i][E_GROUP_TEXTDRAWS_COUNT]; x++) {
583 if (!groupTextDrawData[i][x][E_TEXTDRAW_TYPE_PLAYER]) {
584 globalTextdrawsCount++;
585 }
586 }
587
588 if (globalTextdrawsCount == 0) {
589 continue;
590 }
591
592 format(string, sizeof (string), "\t/*\r\n\t** группа текстдравов: \"%s\"\r\n\t*/\r\n", groupData[i][E_GROUP_NAME]);
593 fwrite(h, string);
594
595 idx = 0;
596 for (new x; x < groupData[i][E_GROUP_TEXTDRAWS_COUNT]; x++) {
597 if (groupTextDrawData[i][x][E_TEXTDRAW_TYPE_PLAYER]) {
598 continue;
599 }
600
601 if (globalTextdrawsCount == 1) {
602 format(varname, sizeof (varname), "%sTD", groupData[i][E_GROUP_NAME]);
603 }
604 else {
605 format(varname, sizeof (varname), "%sTD[%i]", groupData[i][E_GROUP_NAME], idx++);
606 }
607
608 format(string, sizeof (string), "\t%s = TextDrawCreate(%0.4f, %0.4f, \"%s\");\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_X], groupTextDrawData[i][x][E_TEXTDRAW_Y], groupTextDrawData[i][x][E_TEXTDRAW_TEXT]);
609 fwrite(h, string);
610
611 format(string, sizeof (string), "\tTextDrawFont(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_FONT]);
612 fwrite(h, string);
613
614 format(string, sizeof (string), "\tTextDrawLetterSize(%s, %0.4f, %0.4f);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[i][x][E_TEXTDRAW_LETTERSIZE_Y]);
615 fwrite(h, string);
616
617 if (groupTextDrawData[i][x][E_TEXTDRAW_ALIGNMENT] != 1) {
618 format(string, sizeof (string), "\tTextDrawAlignment(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_ALIGNMENT]);
619 fwrite(h, string);
620 }
621
622 format(string, sizeof (string), "\tTextDrawColor(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_COLOR]);
623 fwrite(h, string);
624
625 format(string, sizeof (string), "\tTextDrawSetShadow(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_SHADOW]);
626 fwrite(h, string);
627
628 format(string, sizeof (string), "\tTextDrawSetOutline(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_OUTLINE]);
629 fwrite(h, string);
630
631 format(string, sizeof (string), "\tTextDrawBackgroundColor(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_BACKGROUND_COLOR]);
632 fwrite(h, string);
633
634 format(string, sizeof (string), "\tTextDrawSetProportional(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_PROPORTIONAL]);
635 fwrite(h, string);
636
637 if (groupTextDrawData[i][x][E_TEXTDRAW_USE_BOX]) {
638 format(string, sizeof (string), "\tTextDrawUseBox(%s, 1);\r\n", varname);
639 fwrite(h, string);
640 format(string, sizeof (string), "\tTextDrawBoxColor(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_BOX_COLOR]);
641 fwrite(h, string);
642 }
643
644 format(string, sizeof (string), "\tTextDrawTextSize(%s, %0.4f, %0.4f);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[i][x][E_TEXTDRAW_TEXTSIZE_Y]);
645 fwrite(h, string);
646
647 if (groupTextDrawData[i][x][E_TEXTDRAW_FONT] == 5) {
648 format(string, sizeof (string), "\tTextDrawSetPreviewModel(%s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_MODEL]);
649 fwrite(h, string);
650 format(string, sizeof (string), "\tTextDrawSetPreviewRot(%s, %0.4f, %0.4f, %0.4f, %0.4f);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
651 fwrite(h, string);
652 }
653
654 if (groupTextDrawData[i][x][E_TEXTDRAW_SELECTABLE]) {
655 format(string, sizeof (string), "\tTextDrawSetSelectable(%s, 1);\r\n", varname);
656 fwrite(h, string);
657 }
658
659 fwrite(h, "\r\n");
660 }
661 }
662
663 fwrite(h, "\treturn 1;\r\n");
664 fwrite(h, "}\r\n\r\n");
665 }
666
667 if (isThereAnyPlayerTextDraws) {
668 fwrite(h, "// создание персональных текстдрава(ов) предпочтительнее в \"OnPlayerConnect\"\r\n");
669 fwrite(h, "public OnPlayerConnect(playerid) {\r\n");
670
671 for (new i; i < groupsCount; i++) {
672 playerTextdrawsCount = 0;
673 for (new x; x < groupData[i][E_GROUP_TEXTDRAWS_COUNT]; x++) {
674 if (groupTextDrawData[i][x][E_TEXTDRAW_TYPE_PLAYER]) {
675 playerTextdrawsCount++;
676 }
677 }
678
679 if (playerTextdrawsCount == 0) {
680 continue;
681 }
682
683 format(string, sizeof (string), "\t/*\r\n\t** персональная группа текстдравов: \"%s\"\r\n\t*/\r\n", groupData[i][E_GROUP_NAME]);
684 fwrite(h, string);
685
686 idx = 0;
687 for (new x; x < groupData[i][E_GROUP_TEXTDRAWS_COUNT]; x++) {
688 if (!groupTextDrawData[i][x][E_TEXTDRAW_TYPE_PLAYER]) {
689 continue;
690 }
691
692 if (playerTextdrawsCount == 1) {
693 format(varname, sizeof (varname), "%sPTD[playerid]", groupData[i][E_GROUP_NAME]);
694 }
695 else {
696 format(varname, sizeof (varname), "%sPTD[playerid][%i]", groupData[i][E_GROUP_NAME], idx++);
697 }
698
699 format(string, sizeof (string), "\t%s = CreatePlayerTextDraw(playerid, %0.4f, %0.4f, \"%s\");\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_X], groupTextDrawData[i][x][E_TEXTDRAW_Y], groupTextDrawData[i][x][E_TEXTDRAW_TEXT]);
700 fwrite(h, string);
701
702 format(string, sizeof (string), "\tPlayerTextDrawFont(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_FONT]);
703 fwrite(h, string);
704
705 format(string, sizeof (string), "\tPlayerTextDrawLetterSize(playerid, %s, %0.4f, %0.4f);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[i][x][E_TEXTDRAW_LETTERSIZE_Y]);
706 fwrite(h, string);
707
708 if (groupTextDrawData[i][x][E_TEXTDRAW_ALIGNMENT] != 1) {
709 format(string, sizeof (string), "\tPlayerTextDrawAlignment(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_ALIGNMENT]);
710 fwrite(h, string);
711 }
712
713 format(string, sizeof (string), "\tPlayerTextDrawColor(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_COLOR]);
714 fwrite(h, string);
715
716 format(string, sizeof (string), "\tPlayerTextDrawSetShadow(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_SHADOW]);
717 fwrite(h, string);
718
719 format(string, sizeof (string), "\tPlayerTextDrawSetOutline(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_OUTLINE]);
720 fwrite(h, string);
721
722 format(string, sizeof (string), "\tPlayerTextDrawBackgroundColor(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_BACKGROUND_COLOR]);
723 fwrite(h, string);
724
725 format(string, sizeof (string), "\tPlayerTextDrawSetProportional(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_PROPORTIONAL]);
726 fwrite(h, string);
727
728 if (groupTextDrawData[i][x][E_TEXTDRAW_USE_BOX]) {
729 format(string, sizeof (string), "\tPlayerTextDrawUseBox(playerid, %s, 1);\r\n", varname);
730 fwrite(h, string);
731 format(string, sizeof (string), "\tPlayerTextDrawBoxColor(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_BOX_COLOR]);
732 fwrite(h, string);
733 }
734
735 format(string, sizeof (string), "\tPlayerTextDrawTextSize(playerid, %s, %0.4f, %0.4f);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[i][x][E_TEXTDRAW_TEXTSIZE_Y]);
736 fwrite(h, string);
737
738 if (groupTextDrawData[i][x][E_TEXTDRAW_FONT] == 5) {
739 format(string, sizeof (string), "\tPlayerTextDrawSetPreviewModel(playerid, %s, %i);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_MODEL]);
740 fwrite(h, string);
741 format(string, sizeof (string), "\tPlayerTextDrawSetPreviewRot(playerid, %s, %0.4f, %0.4f, %0.4f, %0.4f);\r\n", varname, groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[i][x][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
742 fwrite(h, string);
743 }
744
745 if (groupTextDrawData[i][x][E_TEXTDRAW_SELECTABLE]) {
746 format(string, sizeof (string), "\tPlayerTextDrawSetSelectable(playerid, %s, 1);\r\n", varname);
747 fwrite(h, string);
748 }
749
750 fwrite(h, "\r\n");
751 }
752 }
753
754 fwrite(h, "\treturn 1;\r\n");
755 fwrite(h, "}\r\n\r\n");
756 }
757
758 fclose(h);
759 return 1;
760}
761
762SaveProjectGroupTextDraw(groupid, textdrawid) {
763 new string[1024];
764 string = "UPDATE %s SET \
765 text = '%q', \
766 x = '%f', y = '%f', \
767 letter_x = '%f', letter_y = '%f', \
768 text_x = '%f', text_y = '%f', \
769 alignment = '%i', \
770 color = '%i', \
771 usebox = '%i', \
772 box_color = '%i', \
773 shadow = '%i', \
774 outline = '%i', \
775 background_color = '%i', \
776 font = '%i', \
777 proportional = '%i', \
778 selectable = '%i', \
779 preview_model = '%i', \
780 rot_x = '%f', rot_y = '%f', rot_z = '%f', rot_zoom = '%f', \
781 veh_color1 = '%i', veh_color2 = '%i', \
782 type_player = '%i' \
783 WHERE id = '%i'";
784 format(string, sizeof (string), string,
785 groupData[groupid][E_GROUP_NAME],
786 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT],
787 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y],
788 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y],
789 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y],
790 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ALIGNMENT],
791 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR],
792 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_USE_BOX],
793 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR],
794 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SHADOW],
795 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_OUTLINE],
796 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR],
797 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_FONT],
798 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PROPORTIONAL],
799 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SELECTABLE],
800 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_MODEL],
801 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM],
802 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_VEH_COLOR1], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_VEH_COLOR2],
803 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TYPE_PLAYER],
804 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SQLID]);
805 db_query(projectDB, string);
806}
807
808SaveProjectGroup(groupid) {
809 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
810 SaveProjectGroupTextDraw(groupid, i);
811 }
812
813 new string[256] = "UPDATE GROUP_SETTINGS SET visibility = %i WHERE groupname = '%s'";
814 format(string, sizeof (string), string, groupData[groupid][E_GROUP_VISIBLE], groupData[groupid][E_GROUP_NAME]);
815 db_query(projectDB, string);
816}
817
818SaveProject() {
819 for (new i; i < groupsCount; i++) {
820 SaveProjectGroup(i);
821 }
822}
823
824public OnFilterScriptInit() {
825 printf("\n==========================================\n");
826
827 if (!fexist(PATH_PROJECT_FILES)) {
828 printf("[TDEditor.pwn] - Ошибка: Путь \"%s\" не существует. Ваши проекты не будут сохранены/загружены.", PATH_PROJECT_FILES);
829 }
830
831 if (!fexist(PATH_EXPORT_FILES)) {
832 printf("[TDEditor.pwn] - Ошибка: Путь \"%s\" не существует. Ваши проекты не будут экспортированы.", PATH_EXPORT_FILES);
833 }
834
835 if (!fexist(PATH_RECORD_FILE)) {
836 new File:h = fopen(PATH_RECORD_FILE, io_write);
837 if (!h) {
838 printf("[TDEditor.pwn] - Ошибка: Путь \"%s\" не существует. Список ваших проектов не будет сохранять/загружать названия проектов в качестве истории.", PATH_RECORD_FILE);
839 }
840 else {
841 fclose(h);
842 }
843 }
844
845 if (!fexist(PATH_OBJECTS_FILE)) {
846 printf("[TDEditor.pwn] - Предупреждение: Путь \"%s\" не существует. Вы не можете искать модели объектов в Опции превью моделей; доступны только modelids.", PATH_OBJECTS_FILE);
847 }
848
849 printf("[TDEditor.pwn] - Loaded "#VERSION" (updated: "#DATE") - By Gammix");
850
851 printf("\n==========================================\n");
852
853 projectDB = DB:0;
854 showTextDrawCmds = true;
855
856 for (new i; i < MAX_GROUPS; i++) {
857 for (new x; x < MAX_GROUP_TEXTDRAWS; x++) {
858 groupTextDrawData[i][x][E_TEXTDRAW_ID] = Text:INVALID_TEXT_DRAW;
859 }
860
861 ResetGroupData(i);
862 }
863 groupsCount = 0;
864
865 for (new i; i < MAX_PLAYERS; i++) {
866 playerEditing[i] = EDITING_NONE;
867 playerEditingTimer[i] = -1;
868 }
869 return 1;
870}
871
872public OnFilterScriptExit() {
873 if (projectDB) {
874 SaveProject();
875 db_close(projectDB);
876 projectDB = DB:0;
877 }
878
879 for (new i; i < groupsCount; i++) {
880 ResetGroupData(i);
881 }
882 groupsCount = 0;
883
884 for (new i; i < MAX_PLAYERS; i++) {
885 playerEditing[i] = EDITING_NONE;
886 playerEditingTimer[i] = -1;
887 }
888 return 1;
889}
890
891public OnPlayerConnect(playerid) {
892 playerEditingTextDraw[playerid] = CreatePlayerTextDraw(playerid, 7.0, 170.0, "-");
893 PlayerTextDrawBackgroundColor(playerid, playerEditingTextDraw[playerid], 255);
894 PlayerTextDrawFont(playerid, playerEditingTextDraw[playerid], 2);
895 PlayerTextDrawLetterSize(playerid, playerEditingTextDraw[playerid], 0.2, 1.0);
896 PlayerTextDrawColor(playerid, playerEditingTextDraw[playerid], -1);
897 PlayerTextDrawSetOutline(playerid, playerEditingTextDraw[playerid], 1);
898 PlayerTextDrawSetProportional(playerid, playerEditingTextDraw[playerid], 1);
899 PlayerTextDrawSetShadow(playerid, playerEditingTextDraw[playerid], 0);
900
901 for (new a = 0; a < groupsCount; a++) {
902 if (!groupData[a][E_GROUP_VISIBLE]) {
903 continue;
904 }
905
906 for (new b = 0; b < groupData[a][E_GROUP_TEXTDRAWS_COUNT]; b++) {
907 TextDrawShowForPlayer(playerid, groupTextDrawData[a][b][E_TEXTDRAW_ID]);
908 }
909 }
910 return 1;
911}
912
913public OnPlayerDisconnect(playerid, reason) {
914 playerEditing[playerid] = EDITING_NONE;
915 KillTimer(playerEditingTimer[playerid]);
916 playerEditingTimer[playerid] = -1;
917
918 if (projectDB) {
919 SaveProjectGroup(playerCurrentGroup[playerid]);
920 }
921 return 1;
922}
923
924public OnPlayerSpawn(playerid) {
925 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Используйте \"/text\", чтобы открыть меню TextDraw Editor'а.");
926 return 1;
927}
928
929forward OnPlayerTimerUpdate(playerid);
930public OnPlayerTimerUpdate(playerid) {
931 if (playerEditing[playerid] != EDITING_NONE) {
932 new groupid = playerCurrentGroup[playerid];
933 new textdrawid = playerCurrentTextDraw[playerid];
934
935 new keys, updown, leftright;
936 GetPlayerKeys(playerid, keys, updown, leftright);
937
938 if (updown < 0) {
939 switch (playerEditing[playerid]) {
940 case EDITING_GROUP_POS: {
941 if (keys == KEY_SPRINT) {
942 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
943 groupTextDrawData[groupid][i][E_TEXTDRAW_Y] -= 10.0;
944 CreateGroupTextDraw(groupid, i);
945 }
946 }
947 else {
948 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
949 groupTextDrawData[groupid][i][E_TEXTDRAW_Y] -= 0.5;
950 CreateGroupTextDraw(groupid, i);
951 }
952 }
953 }
954
955 case EDITING_POS: {
956 if (keys == KEY_SPRINT) {
957 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y] -= 10.0;
958 }
959 else {
960 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y] -= 0.5;
961 }
962 CreateGroupTextDraw(groupid, textdrawid);
963 }
964
965 case EDITING_LETTER_SIZE: {
966 if (keys == KEY_SPRINT) {
967 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y] -= 1.0;
968 }
969 else {
970 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y] -= 0.1;
971 }
972
973 TextDrawLetterSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y]);
974 if (groupData[groupid][E_GROUP_VISIBLE]) {
975 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
976 }
977 }
978
979 case EDITING_TEXT_SIZE: {
980 if (keys == KEY_SPRINT) {
981 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y] -= 10.0;
982 }
983 else {
984 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y] -= 0.5;
985 }
986
987 TextDrawTextSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y]);
988 if (groupData[groupid][E_GROUP_VISIBLE]) {
989 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
990 }
991 }
992
993 case EDITING_SHADOW_SIZE: {
994 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SHADOW] += 1;
995
996 TextDrawSetShadow(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SHADOW]);
997 if (groupData[groupid][E_GROUP_VISIBLE]) {
998 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
999 }
1000 }
1001
1002 case EDITING_OUTLINE_SIZE: {
1003 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_OUTLINE] += 1;
1004
1005 TextDrawSetOutline(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_OUTLINE]);
1006 if (groupData[groupid][E_GROUP_VISIBLE]) {
1007 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1008 }
1009 }
1010
1011 case EDITING_PREVIEW_ROT: {
1012 if (keys == KEY_SPRINT) {
1013 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y] += 5.0;
1014 }
1015 else {
1016 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y] += 1.0;
1017 }
1018
1019 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
1020 if (groupData[groupid][E_GROUP_VISIBLE]) {
1021 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1022 }
1023 }
1024 }
1025 }
1026 else if (updown > 0) {
1027 switch (playerEditing[playerid]) {
1028 case EDITING_GROUP_POS: {
1029 if (keys == KEY_SPRINT) {
1030 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
1031 groupTextDrawData[groupid][i][E_TEXTDRAW_Y] += 10.0;
1032 CreateGroupTextDraw(groupid, i);
1033 }
1034 }
1035 else {
1036 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
1037 groupTextDrawData[groupid][i][E_TEXTDRAW_Y] += 0.5;
1038 CreateGroupTextDraw(groupid, i);
1039 }
1040 }
1041 }
1042
1043 case EDITING_POS: {
1044 if (keys == KEY_SPRINT) {
1045 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y] += 10.0;
1046 }
1047 else {
1048 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y] += 0.5;
1049 }
1050 CreateGroupTextDraw(groupid, textdrawid);
1051 }
1052
1053 case EDITING_LETTER_SIZE: {
1054 if (keys == KEY_SPRINT) {
1055 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y] += 1.0;
1056 }
1057 else {
1058 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y] += 0.1;
1059 }
1060
1061 TextDrawLetterSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y]);
1062 if (groupData[groupid][E_GROUP_VISIBLE]) {
1063 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1064 }
1065 }
1066
1067 case EDITING_TEXT_SIZE: {
1068 if (keys == KEY_SPRINT) {
1069 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y] += 10.0;
1070 }
1071 else {
1072 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y] += 0.5;
1073 }
1074
1075 TextDrawTextSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y]);
1076 if (groupData[groupid][E_GROUP_VISIBLE]) {
1077 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1078 }
1079 }
1080
1081 case EDITING_SHADOW_SIZE: {
1082 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SHADOW] -= 1;
1083
1084 TextDrawSetShadow(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SHADOW]);
1085 if (groupData[groupid][E_GROUP_VISIBLE]) {
1086 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1087 }
1088 }
1089
1090 case EDITING_OUTLINE_SIZE: {
1091 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_OUTLINE] -= 1;
1092
1093 TextDrawSetOutline(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_OUTLINE]);
1094 if (groupData[groupid][E_GROUP_VISIBLE]) {
1095 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1096 }
1097 }
1098
1099 case EDITING_PREVIEW_ROT: {
1100 if (keys == KEY_SPRINT) {
1101 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y] -= 5.0;
1102 }
1103 else {
1104 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y] -= 1.0;
1105 }
1106
1107 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
1108 if (groupData[groupid][E_GROUP_VISIBLE]) {
1109 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1110 }
1111 }
1112 }
1113 }
1114
1115 if (leftright < 0) {
1116 switch (playerEditing[playerid]) {
1117 case EDITING_GROUP_POS: {
1118 if (keys == KEY_SPRINT) {
1119 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
1120 groupTextDrawData[groupid][i][E_TEXTDRAW_X] -= 10.0;
1121 CreateGroupTextDraw(groupid, i);
1122 }
1123 }
1124 else {
1125 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
1126 groupTextDrawData[groupid][i][E_TEXTDRAW_X] -= 0.5;
1127 CreateGroupTextDraw(groupid, i);
1128 }
1129 }
1130 }
1131
1132 case EDITING_POS: {
1133 if (keys == KEY_SPRINT) {
1134 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X] -= 10.0;
1135 }
1136 else {
1137 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X] -= 0.5;
1138 }
1139 CreateGroupTextDraw(groupid, textdrawid);
1140 }
1141
1142 case EDITING_LETTER_SIZE: {
1143 if (keys == KEY_SPRINT) {
1144 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X] -= 0.05;
1145 }
1146 else {
1147 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X] -= 0.01;
1148 }
1149
1150 TextDrawLetterSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y]);
1151 if (groupData[groupid][E_GROUP_VISIBLE]) {
1152 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1153 }
1154 }
1155
1156 case EDITING_TEXT_SIZE: {
1157 if (keys == KEY_SPRINT) {
1158 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X] -= 10.0;
1159 }
1160 else {
1161 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X] -= 0.5;
1162 }
1163
1164 TextDrawTextSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y]);
1165 if (groupData[groupid][E_GROUP_VISIBLE]) {
1166 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1167 }
1168 }
1169
1170 case EDITING_PREVIEW_ROT: {
1171 if (keys == KEY_SPRINT) {
1172 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X] -= 5.0;
1173 }
1174 else {
1175 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X] -= 1.0;
1176 }
1177
1178 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
1179 if (groupData[groupid][E_GROUP_VISIBLE]) {
1180 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1181 }
1182 }
1183 }
1184 }
1185 else if (leftright > 0) {
1186 switch (playerEditing[playerid]) {
1187 case EDITING_GROUP_POS: {
1188 if (keys == KEY_SPRINT) {
1189 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
1190 groupTextDrawData[groupid][i][E_TEXTDRAW_X] += 10.0;
1191 CreateGroupTextDraw(groupid, i);
1192 }
1193 }
1194 else {
1195 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
1196 groupTextDrawData[groupid][i][E_TEXTDRAW_X] += 0.5;
1197 CreateGroupTextDraw(groupid, i);
1198 }
1199 }
1200 }
1201
1202 case EDITING_POS: {
1203 if (keys == KEY_SPRINT) {
1204 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X] += 10.0;
1205 }
1206 else {
1207 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X] += 0.5;
1208 }
1209 CreateGroupTextDraw(groupid, textdrawid);
1210 }
1211
1212 case EDITING_LETTER_SIZE: {
1213 if (keys == KEY_SPRINT) {
1214 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X] += 0.05;
1215 }
1216 else {
1217 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X] += 0.01;
1218 }
1219
1220 TextDrawLetterSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y]);
1221 if (groupData[groupid][E_GROUP_VISIBLE]) {
1222 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1223 }
1224 }
1225
1226 case EDITING_TEXT_SIZE: {
1227 if (keys == KEY_SPRINT) {
1228 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X] += 10.0;
1229 }
1230 else {
1231 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X] += 0.5;
1232 }
1233
1234 TextDrawTextSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y]);
1235 if (groupData[groupid][E_GROUP_VISIBLE]) {
1236 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1237 }
1238 }
1239
1240 case EDITING_PREVIEW_ROT: {
1241 if (keys == KEY_SPRINT) {
1242 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X] += 5.0;
1243 }
1244 else {
1245 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X] += 1.0;
1246 }
1247
1248 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
1249 if (groupData[groupid][E_GROUP_VISIBLE]) {
1250 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1251 }
1252 }
1253 }
1254 }
1255
1256 if (showTextDrawCmds) {
1257 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1258 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid],
1259 "~w~КОМАНДЫ РЕДАКТОРА: (/show)~n~\
1260 ~w~/position~n~\
1261 ~y~/x: ~b~~h~~h~?~n~\
1262 ~y~/y: ~b~~h~~h~?");
1263 return 1;
1264 }
1265
1266 new previewChars[MAX_GROUP_TEXTDRAW_PREVIEW_CHARS + 4];
1267 strmid(previewChars, groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT], 0, MAX_GROUP_TEXTDRAW_PREVIEW_CHARS);
1268 if (strlen(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT]) > MAX_GROUP_TEXTDRAW_PREVIEW_CHARS) {
1269 strcat(previewChars, "...");
1270 }
1271
1272 new string[1024];
1273 switch (playerEditing[playerid]) {
1274 case EDITING_POS, EDITING_GROUP_POS: {
1275 string = "~w~КОМАНДЫ РЕДАКТОРА: (/show)~n~\
1276 ~w~/string: \"%s\"~n~\
1277 ~r~~h~~h~/position~n~\
1278 ~r~~h~~h~/x: ~h~%0.4f~n~\
1279 ~r~~h~~h~/y: ~h~%0.4f~n~\
1280 ~w~/lettersize~n~\
1281 ~w~/lx: %0.4f~n~\
1282 ~w~/ly: %0.4f~n~\
1283 ~w~/textsize~n~\
1284 ~w~/tx: %0.4f~n~\
1285 ~w~/ty: %0.4f~n~\
1286 ~w~/rotation~n~\
1287 ~w~/rx: %0.4f~n~\
1288 ~w~/ry: %0.4f~n~\
1289 ~w~/rz: %0.4f~n~\
1290 ~w~/zoom: %0.4f~n~\
1291 ~w~/shadow: %i~n~\
1292 ~w~/outline: %i";
1293 }
1294
1295 case EDITING_LETTER_SIZE: {
1296 string = "~w~КОМАНДЫ РЕДАКТОРА: (/show)~n~\
1297 ~w~/string: \"%s\"~n~\
1298 ~w~/position~n~\
1299 ~w~/x: %0.4f~n~\
1300 ~w~/y: %0.4f~n~\
1301 ~r~~h~~h~/lettersize~n~\
1302 ~r~~h~~h~/lx: ~h~%0.4f~n~\
1303 ~r~~h~~h~/ly: ~h~%0.4f~n~\
1304 ~w~/textsize~n~\
1305 ~w~/tx: %0.4f~n~\
1306 ~w~/ty: %0.4f~n~\
1307 ~w~/rotation~n~\
1308 ~w~/rx: %0.4f~n~\
1309 ~w~/ry: %0.4f~n~\
1310 ~w~/rz: %0.4f~n~\
1311 ~w~/zoom: %0.4f~n~\
1312 ~w~/shadow: %i~n~\
1313 ~w~/outline: %i";
1314 }
1315
1316 case EDITING_TEXT_SIZE: {
1317 string = "~w~КОМАНДЫ РЕДАКТОРА: (/show)~n~\
1318 ~w~/string: \"%s\"~n~\
1319 ~w~/position~n~\
1320 ~w~/x: %0.4f~n~\
1321 ~w~/y: %0.4f~n~\
1322 ~w~/lettersize~n~\
1323 ~w~/lx: %0.4f~n~\
1324 ~w~/ly: %0.4f~n~\
1325 ~r~~h~~h~/textsize~n~\
1326 ~r~~h~~h~/tx: ~h~%0.4f~n~\
1327 ~r~~h~~h~/ty: ~h~%0.4f~n~\
1328 ~w~/rotation~n~\
1329 ~w~/rx: %0.4f~n~\
1330 ~w~/ry: %0.4f~n~\
1331 ~w~/rz: %0.4f~n~\
1332 ~w~/zoom: %0.4f~n~\
1333 ~w~/shadow: %i~n~\
1334 ~w~/outline: %i";
1335 }
1336
1337 case EDITING_PREVIEW_ROT: {
1338 string = "~w~КОМАНДЫ РЕДАКТОРА: (/show)~n~\
1339 ~w~/string: \"%s\"~n~\
1340 ~w~/position~n~\
1341 ~w~/x: %0.4f~n~\
1342 ~w~/y: %0.4f~n~\
1343 ~w~/lettersize~n~\
1344 ~w~/lx: %0.4f~n~\
1345 ~w~/ly: %0.4f~n~\
1346 ~w~/textsize~n~\
1347 ~w~/tx: %0.4f~n~\
1348 ~w~/ty: %0.4f~n~\
1349 ~r~~h~~h~/rotation~n~\
1350 ~r~~h~~h~/rx: ~h~%0.4f~n~\
1351 ~r~~h~~h~/ry: ~h~%0.4f~n~\
1352 ~r~~h~~h~/rz: ~h~%0.4f~n~\
1353 ~r~~h~~h~/zoom: ~h~%0.4f~n~\
1354 ~w~/shadow: %i~n~\
1355 ~w~/outline: %i";
1356 }
1357
1358 case EDITING_SHADOW_SIZE: {
1359 string = "~w~КОМАНДЫ РЕДАКТОРА: (/show)~n~\
1360 ~w~/string: \"%s\"~n~\
1361 ~w~/position~n~\
1362 ~w~/x: %0.4f~n~\
1363 ~w~/y: %0.4f~n~\
1364 ~w~/lettersize~n~\
1365 ~w~/lx: %0.4f~n~\
1366 ~w~/ly: %0.4f~n~\
1367 ~w~/textsize~n~\
1368 ~w~/tx: %0.4f~n~\
1369 ~w~/ty: %0.4f~n~\
1370 ~w~/rotation~n~\
1371 ~w~/rx: %0.4f~n~\
1372 ~w~/ry: %0.4f~n~\
1373 ~w~/rz: %0.4f~n~\
1374 ~w~/zoom: %0.4f~n~\
1375 ~r~~h~~h~/shadow: ~h~%i~n~\
1376 ~w~/outline: %i";
1377 }
1378
1379 case EDITING_OUTLINE_SIZE: {
1380 string = "~w~КОМАНДЫ РЕДАКТОРА: (/show)~n~\
1381 ~w~/string: \"%s\"~n~\
1382 ~w~/position~n~\
1383 ~w~/x: %0.4f~n~\
1384 ~w~/y: %0.4f~n~\
1385 ~w~/lettersize~n~\
1386 ~w~/lx: %0.4f~n~\
1387 ~w~/ly: %0.4f~n~\
1388 ~w~/textsize~n~\
1389 ~w~/tx: %0.4f~n~\
1390 ~w~/ty: %0.4f~n~\
1391 ~w~/rotation~n~\
1392 ~w~/rx: %0.4f~n~\
1393 ~w~/ry: %0.4f~n~\
1394 ~w~/rz: %0.4f~n~\
1395 ~w~/zoom: %0.4f~n~\
1396 ~w~/shadow: %i~n~\
1397 ~r~~h~~h~/outline: ~h~%i";
1398 }
1399 }
1400
1401 format(string, sizeof (string), string,
1402 previewChars,
1403 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y],
1404 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y],
1405 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y],
1406 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM],
1407 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SHADOW],
1408 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_OUTLINE]);
1409
1410 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid], string);
1411 }
1412 }
1413 return 1;
1414}
1415
1416public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
1417 if (playerEditing[playerid] != EDITING_NONE) {
1418 if (newkeys == KEY_SECONDARY_ATTACK) {
1419 PlayerTextDrawHide(playerid, playerEditingTextDraw[playerid]);
1420
1421 TogglePlayerControllable(playerid, true);
1422
1423 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1424 SetTimerEx("ShowPlayerGroupDialog", 150, false, "ii", playerid, playerCurrentGroup[playerid]);
1425 }
1426 else {
1427 SetTimerEx("ShowPlayerTextDrawDialog", 150, false, "ii", playerid, playerCurrentTextDraw[playerid]);
1428 }
1429
1430 playerEditing[playerid] = EDITING_NONE;
1431 KillTimer(playerEditingTimer[playerid]);
1432 playerEditingTimer[playerid] = -1;
1433 }
1434 }
1435 return 1;
1436}
1437
1438CMD:x(playerid, params[]) {
1439 if (playerEditing[playerid] == EDITING_NONE) {
1440 return 1;
1441 }
1442
1443 new Float:value;
1444 if (sscanf(params, "f", value)) {
1445 SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /x [значение]");
1446 return SendClientMessage(playerid, MESSAGE_COLOR, "Эта команда увеличит значение по X у всех текстдравов при использовании в режиме редактирования группы.");
1447 }
1448
1449 new groupid = playerCurrentGroup[playerid];
1450 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1451 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
1452 groupTextDrawData[groupid][i][E_TEXTDRAW_X] += value;
1453 CreateGroupTextDraw(groupid, i);
1454 }
1455 return 1;
1456 }
1457
1458 new textdrawid = playerCurrentTextDraw[playerid];
1459 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X] = value;
1460 CreateGroupTextDraw(groupid, textdrawid);
1461 return 1;
1462}
1463
1464CMD:y(playerid, params[]) {
1465 if (playerEditing[playerid] == EDITING_NONE) {
1466 return 1;
1467 }
1468
1469 new Float:value;
1470 if (sscanf(params, "f", value)) {
1471 SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /y [значение]");
1472 return SendClientMessage(playerid, MESSAGE_COLOR, "Эта команда увеличит значение по Y у всех текстдравов при использовании в режиме редактирования группы.");
1473 }
1474
1475 new groupid = playerCurrentGroup[playerid];
1476 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1477 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
1478 groupTextDrawData[groupid][i][E_TEXTDRAW_Y] += value;
1479 CreateGroupTextDraw(groupid, i);
1480 }
1481 return 1;
1482 }
1483
1484 new textdrawid = playerCurrentTextDraw[playerid];
1485 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y] = value;
1486 CreateGroupTextDraw(groupid, textdrawid);
1487 return 1;
1488}
1489
1490CMD:lx(playerid, params[]) {
1491 if (playerEditing[playerid] == EDITING_NONE) {
1492 return 1;
1493 }
1494
1495 new Float:value;
1496 if (sscanf(params, "f", value)) {
1497 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /lx [значение]");
1498 }
1499
1500 new groupid = playerCurrentGroup[playerid];
1501 new textdrawid = playerCurrentTextDraw[playerid];
1502
1503 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X] = value;
1504 TextDrawLetterSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y]);
1505 if (groupData[groupid][E_GROUP_VISIBLE]) {
1506 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1507 }
1508 return 1;
1509}
1510
1511CMD:ly(playerid, params[]) {
1512 if (playerEditing[playerid] == EDITING_NONE) {
1513 return 1;
1514 }
1515
1516 new Float:value;
1517 if (sscanf(params, "f", value)) {
1518 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /ly [значение]");
1519 }
1520
1521 new groupid = playerCurrentGroup[playerid];
1522 new textdrawid = playerCurrentTextDraw[playerid];
1523
1524 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y] = value;
1525 TextDrawLetterSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y]);
1526 if (groupData[groupid][E_GROUP_VISIBLE]) {
1527 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1528 }
1529 return 1;
1530}
1531
1532CMD:tx(playerid, params[]) {
1533 if (playerEditing[playerid] == EDITING_NONE) {
1534 return 1;
1535 }
1536
1537 new Float:value;
1538 if (sscanf(params, "f", value)) {
1539 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /tx [значение]");
1540 }
1541
1542 new groupid = playerCurrentGroup[playerid];
1543 new textdrawid = playerCurrentTextDraw[playerid];
1544
1545 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X] = value;
1546 TextDrawTextSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y]);
1547 if (groupData[groupid][E_GROUP_VISIBLE]) {
1548 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1549 }
1550 return 1;
1551}
1552
1553CMD:ty(playerid, params[]) {
1554 if (playerEditing[playerid] == EDITING_NONE) {
1555 return 1;
1556 }
1557
1558 new Float:value;
1559 if (sscanf(params, "f", value)) {
1560 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /ty [значение]");
1561 }
1562
1563 new groupid = playerCurrentGroup[playerid];
1564 new textdrawid = playerCurrentTextDraw[playerid];
1565
1566 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y] = value;
1567 TextDrawTextSize(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y]);
1568 if (groupData[groupid][E_GROUP_VISIBLE]) {
1569 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1570 }
1571 return 1;
1572}
1573
1574CMD:rx(playerid, params[]) {
1575 if (playerEditing[playerid] == EDITING_NONE) {
1576 return 1;
1577 }
1578
1579 new Float:value;
1580 if (sscanf(params, "f", value)) {
1581 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /rx [значение]");
1582 }
1583
1584 new groupid = playerCurrentGroup[playerid];
1585 new textdrawid = playerCurrentTextDraw[playerid];
1586
1587 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X] = value;
1588 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
1589 if (groupData[groupid][E_GROUP_VISIBLE]) {
1590 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1591 }
1592 return 1;
1593}
1594
1595CMD:ry(playerid, params[]) {
1596 if (playerEditing[playerid] == EDITING_NONE) {
1597 return 1;
1598 }
1599
1600 new Float:value;
1601 if (sscanf(params, "f", value)) {
1602 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /ry [значение]");
1603 }
1604
1605 new groupid = playerCurrentGroup[playerid];
1606 new textdrawid = playerCurrentTextDraw[playerid];
1607
1608 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y] = value;
1609 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
1610 if (groupData[groupid][E_GROUP_VISIBLE]) {
1611 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1612 }
1613 return 1;
1614}
1615
1616CMD:rz(playerid, params[]) {
1617 if (playerEditing[playerid] == EDITING_NONE) {
1618 return 1;
1619 }
1620
1621 new Float:value;
1622 if (sscanf(params, "f", value)) {
1623 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /rz [значение]");
1624 }
1625
1626 new groupid = playerCurrentGroup[playerid];
1627 new textdrawid = playerCurrentTextDraw[playerid];
1628
1629 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z] = value;
1630 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
1631 if (groupData[groupid][E_GROUP_VISIBLE]) {
1632 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1633 }
1634 return 1;
1635}
1636
1637CMD:zoom(playerid, params[]) {
1638 if (playerEditing[playerid] == EDITING_NONE) {
1639 return 1;
1640 }
1641
1642 new Float:value;
1643 if (sscanf(params, "f", value)) {
1644 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /zoom [значение]");
1645 }
1646
1647 new groupid = playerCurrentGroup[playerid];
1648 new textdrawid = playerCurrentTextDraw[playerid];
1649
1650 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM] = value;
1651 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
1652 if (groupData[groupid][E_GROUP_VISIBLE]) {
1653 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1654 }
1655 return 1;
1656}
1657
1658CMD:position(playerid, params[]) {
1659 if (playerEditing[playerid] == EDITING_NONE) {
1660 return 1;
1661 }
1662
1663 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1664 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Вы уже находитесь в режиме редактирования позиции.");
1665 }
1666
1667 playerEditing[playerid] = EDITING_POS;
1668 return 1;
1669}
1670
1671CMD:lettersize(playerid, params[]) {
1672 if (playerEditing[playerid] == EDITING_NONE) {
1673 return 1;
1674 }
1675
1676 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1677 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Вы не можете использовать эту команду в режиме редактирования позиции группы.");
1678 }
1679
1680 playerEditing[playerid] = EDITING_LETTER_SIZE;
1681 return 1;
1682}
1683
1684CMD:textsize(playerid, params[]) {
1685 if (playerEditing[playerid] == EDITING_NONE) {
1686 return 1;
1687 }
1688
1689 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1690 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Вы не можете использовать эту команду в режиме редактирования позиции группы.");
1691 }
1692
1693 playerEditing[playerid] = EDITING_TEXT_SIZE;
1694 return 1;
1695}
1696
1697CMD:rotation(playerid, params[]) {
1698 if (playerEditing[playerid] == EDITING_NONE) {
1699 return 1;
1700 }
1701
1702 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1703 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Вы не можете использовать эту команду в режиме редактирования позиции группы.");
1704 }
1705
1706 playerEditing[playerid] = EDITING_PREVIEW_ROT;
1707 return 1;
1708}
1709
1710CMD:shadow(playerid, params[]) {
1711 if (playerEditing[playerid] == EDITING_NONE) {
1712 return 1;
1713 }
1714
1715 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1716 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Вы не можете использовать эту команду в режиме редактирования позиции группы.");
1717 }
1718
1719 playerEditing[playerid] = EDITING_SHADOW_SIZE;
1720 return 1;
1721}
1722
1723CMD:outline(playerid, params[]) {
1724 if (playerEditing[playerid] == EDITING_NONE) {
1725 return 1;
1726 }
1727
1728 if (playerEditing[playerid] == EDITING_GROUP_POS) {
1729 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Вы не можете использовать эту команду в режиме редактирования позиции группы.");
1730 }
1731
1732 playerEditing[playerid] = EDITING_OUTLINE_SIZE;
1733 return 1;
1734}
1735
1736CMD:string(playerid, params[]) {
1737 if (playerEditing[playerid] == EDITING_NONE) {
1738 return 1;
1739 }
1740
1741 new string[MAX_GROUP_TEXTDRAW_TEXT];
1742 if (sscanf(params, "s["#MAX_GROUP_TEXTDRAW_TEXT"]", string)) {
1743 return SendClientMessage(playerid, MESSAGE_COLOR, "Используйте: /string [текст]");
1744 }
1745
1746 new groupid = playerCurrentGroup[playerid];
1747 new textdrawid = playerCurrentTextDraw[playerid];
1748
1749 format(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT], MAX_GROUP_TEXTDRAW_TEXT, string);
1750
1751 TextDrawSetString(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], string);
1752 if (groupData[groupid][E_GROUP_VISIBLE]) {
1753 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
1754 }
1755 return 1;
1756}
1757
1758CMD:show(playerid) {
1759 if (playerEditing[playerid] == EDITING_NONE) {
1760 return 1;
1761 }
1762
1763 if (showTextDrawCmds) {
1764 PlayerTextDrawHide(playerid, playerEditingTextDraw[playerid]);
1765 }
1766 else {
1767 PlayerTextDrawShow(playerid, playerEditingTextDraw[playerid]);
1768 }
1769 showTextDrawCmds = !showTextDrawCmds;
1770 return 1;
1771}
1772
1773CMD:text(playerid) {
1774 if (playerEditing[playerid] != EDITING_NONE) {
1775 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Вы не можете открывать меню редактора во время редактирования.");
1776 }
1777
1778 if (!projectDB) {
1779 return Dialog_Show(playerid, MAIN_MENU, DIALOG_STYLE_TABLIST, "TDEditor: Главное меню",
1780 ""COL_GREEN"Новый проект\t"COL_GREY"Создать пустой GUI проект\n\
1781 "COL_YELLOW"Открыть проект\t"COL_GREY"Загрузка проекта из папки scriptfiles (Plug'n'Play)\n\
1782 "COL_YELLOW"Удалить проект\t"COL_GREY"Удаление проекта из папки scriptfiles",
1783 "Выбрать", "Закрыть");
1784 }
1785
1786 static string[512 + (MAX_GROUPS * (MAX_GROUP_NAME + 32))];
1787 string = ""COL_GREEN"Создать новую группу\t"COL_GREY"Добавить пустую группу, в которую позже можно добавить текстдравы (макс. кол-во групп: "#MAX_GROUPS")\n\
1788 "COL_YELLOW"Экспортировать проект\t"COL_GREY"Вы можете экспортировать весь проект в .pwn файл или же экспортировать отдельные группы\n\
1789 "COL_RED"Закрыть проект\t"COL_GREY"Закрыть текущий проект и вернуться в главное меню\n";
1790
1791 for (new i; i < groupsCount; i++) {
1792 format(string, sizeof (string), "%sГруппа #%i: '%s'\t"COL_GREY"%i текстдрав(ов)\n", string, i, groupData[i][E_GROUP_NAME], groupData[i][E_GROUP_TEXTDRAWS_COUNT]);
1793 }
1794
1795 Dialog_Show(playerid, EDITOR_MENU, DIALOG_STYLE_TABLIST, "TDEditor: Меню редактора", string, "Выбрать", "Закрыть");
1796 return 1;
1797}
1798
1799Dialog:MAIN_MENU(playerid, response, listitem, inputtext[]) {
1800 if (!response) {
1801 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Редактор закрыт.");
1802 }
1803
1804 switch (listitem) {
1805 case 0: {
1806 Dialog_Show(playerid, NEW_PROJECT, DIALOG_STYLE_INPUT, "TDEditor: Новый проект", ""COL_WHITE"Введите "COL_GREEN"НАЗВАНИЕ ПРОЕКТА"COL_WHITE" ниже для его создания.\n\n"COL_GREY"Проект будет сохранён как \".db\" файл. Каждый проект имеет\n"COL_GREY"собственный файл базы данных, которым легко управлять и даже делиться!", "Создать", "Назад");
1807 }
1808
1809 case 1, 2: {
1810 if (dini_NumKeys(PATH_RECORD_FILE) == 0) {
1811 dini_Timeout(PATH_RECORD_FILE);
1812
1813 if (listitem == 1) {
1814 return Dialog_Show(playerid, LOAD_PROJECT, DIALOG_STYLE_TABLIST_HEADERS, "TDEditor: Открыть проект", "Файл\tДата создания\n"COL_RED"null\t"COL_RED"null", "Открыть", "Назад");
1815 }
1816 else {
1817 return Dialog_Show(playerid, DELETE_PROJECT, DIALOG_STYLE_TABLIST_HEADERS, "TDEditor: Удалить проект", "Файл\tДата создания\n"COL_RED"null\t"COL_RED"null", "Удалить", "Назад");
1818 }
1819 }
1820
1821 new count;
1822 static string[MAX_PROJECTS * (MAX_PROJECT_NAME + 16 + 2)];
1823 new field[DINI_MAX_FIELD_NAME];
1824
1825 string = "Файл\tДата создания\n";
1826 for (new i, j = dini_NumKeys(PATH_RECORD_FILE); i < j; i++) {
1827 if (++count == MAX_PROJECTS) {
1828 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Максимальный предел проектов установлен на "#MAX_PROJECTS" и он достигнут.");
1829 SendClientMessage(playerid, MESSAGE_COLOR, "Может быть больше проектов, которые не указаны в диалоговом окне.");
1830 break;
1831 }
1832
1833 field = dini_GetKeyName(PATH_RECORD_FILE, i);
1834 format(string, sizeof (string), "%s%s\t%s\n", string, field, dini_Get(PATH_RECORD_FILE, field));
1835 }
1836
1837 dini_Timeout(PATH_RECORD_FILE);
1838
1839 if (count == 0) {
1840 if (listitem == 1) {
1841 return Dialog_Show(playerid, LOAD_PROJECT, DIALOG_STYLE_TABLIST_HEADERS, "TDEditor: Открыть проект", "Файл\tДата создания\n"COL_RED"null\t"COL_RED"null", "Открыть", "Назад");
1842 }
1843 else {
1844 return Dialog_Show(playerid, DELETE_PROJECT, DIALOG_STYLE_TABLIST_HEADERS, "TDEditor: Удалить проект", "Файл\tДата создания\n"COL_RED"null\t"COL_RED"null", "Удалить", "Назад");
1845 }
1846 }
1847
1848 if (listitem == 1) {
1849 return Dialog_Show(playerid, LOAD_PROJECT, DIALOG_STYLE_TABLIST_HEADERS, "TDEditor: Открыть проект", string, "Открыть", "Назад");
1850 }
1851 else {
1852 return Dialog_Show(playerid, DELETE_PROJECT, DIALOG_STYLE_TABLIST_HEADERS, "TDEditor: Удалить проект", string, "Удалить", "Назад");
1853 }
1854 }
1855 }
1856 return 1;
1857}
1858
1859Dialog:NEW_PROJECT(playerid, response, listitem, inputtext[]) {
1860 if (!response) {
1861 return cmd_text(playerid);
1862 }
1863
1864 new name[MAX_PROJECT_NAME + 3];
1865 if (sscanf(inputtext, "s["#MAX_PROJECT_NAME"]", name)) {
1866 return Dialog_Show(playerid, NEW_PROJECT, DIALOG_STYLE_INPUT, "TDEditor: Новый проект", ""COL_WHITE"Введите "COL_GREEN"НАЗВАНИЕ ПРОЕКТА"COL_WHITE" ниже для его создания.\n\n"COL_GREY"Проект будет сохранён как \".db\" файл. Каждый проект имеет\n"COL_GREY"собственный файл базы данных, которым легко управлять и даже делиться!\n\n"COL_RED"Ошибка: "COL_GREY"Название проекта не может быть пустым или пробелами.", "Создать", "Назад");
1867 }
1868
1869 new pos = strfind(name, ".db", true);
1870 if (pos == -1) {
1871 strcat(name, ".db");
1872 }
1873
1874 if (dini_Isset(PATH_RECORD_FILE, name) || fexist(name)) {
1875 dini_Timeout(PATH_RECORD_FILE);
1876 return Dialog_Show(playerid, NEW_PROJECT, DIALOG_STYLE_INPUT, "TDEditor: Новый проект", ""COL_WHITE"Введите "COL_GREEN"НАЗВАНИЕ ПРОЕКТА"COL_WHITE" ниже для его создания.\n\n"COL_GREY"Проект будет сохранён как \".db\" файл. Каждый проект имеет\n"COL_GREY"собственный файл базы данных, которым легко управлять и даже делиться!\n\n"COL_RED"Ошибка: "COL_GREY"Такой проект уже существует. Введите что-то другое, или вы можете продолжить свою работу, загрузив этот проект!", "Создать", "Назад");
1877 }
1878
1879 if (!strcmp(inputtext, "null", true)) {
1880 dini_Timeout(PATH_RECORD_FILE);
1881 return Dialog_Show(playerid, NEW_PROJECT, DIALOG_STYLE_INPUT, "TDEditor: Новый проект", ""COL_WHITE"Введите "COL_GREEN"НАЗВАНИЕ ПРОЕКТА"COL_WHITE" ниже для его создания.\n\n"COL_GREY"Проект будет сохранён как \".db\" файл. Каждый проект имеет\n"COL_GREY"собственный файл базы данных, которым легко управлять и даже делиться!\n\n"COL_RED"Ошибка: "COL_GREY"Название проекта не может быть \"null\"!", "Создать", "Назад");
1882 }
1883
1884 format(projectName, MAX_PROJECT_NAME, name);
1885 pos = strfind(projectName, ".db", true);
1886 if (pos != -1) {
1887 strdel(projectName, pos, (pos + strlen(".db")));
1888 }
1889
1890 new string[150] = PATH_PROJECT_FILES;
1891 strcat(string, name);
1892 projectDB = db_open(string);
1893 if (!projectDB) {
1894 return Dialog_Show(playerid, NEW_PROJECT, DIALOG_STYLE_INPUT, "TDEditor: Новый проект", ""COL_WHITE"Введите "COL_GREEN"НАЗВАНИЕ ПРОЕКТА"COL_WHITE" ниже для его создания.\n\n"COL_GREY"Проект будет сохранён как \".db\" файл. Каждый проект имеет\n"COL_GREY"собственный файл базы данных, которым легко управлять и даже делиться!\n\n"COL_RED"Ошибка: "COL_GREY"Что-то пошло не так! Повторите попытку или проверьте название своего проекта на недопустимые символы!", "Создать", "Назад");
1895 }
1896 db_query(projectDB, "PRAGMA synchronous = NORMAL");
1897 db_query(projectDB, "PRAGMA journal_mode = WAL");
1898 db_query(projectDB, "CREATE TABLE IF NOT EXISTS `GROUP_SETTINGS` (`groupname` VARCHAR("#MAX_GROUP_NAME"), `visibility` INTEGER)");
1899
1900 format(string, sizeof (string), "TDEditor: Новый проект \"%s\" создан. Начните редактирование!", name);
1901 SendClientMessage(playerid, MESSAGE_COLOR, string);
1902
1903 if (!dini_Set(PATH_RECORD_FILE, name, ReturnDate(gettime()))) {
1904 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Не удалось открыть файл списка проектов, потому проект может не появиться в диалоге открытия, но бд проекта в порядке!");
1905 }
1906
1907 dini_Timeout(PATH_RECORD_FILE);
1908
1909 return cmd_text(playerid);
1910}
1911
1912Dialog:LOAD_PROJECT(playerid, response, listitem, inputtext[]) {
1913 if (!response) {
1914 return cmd_text(playerid);
1915 }
1916
1917 if (!strcmp(inputtext, "null", true)) {
1918 return dialog_MAIN_MENU(playerid, 1, 1, "\1");
1919 }
1920
1921 new string[512] = PATH_PROJECT_FILES;
1922 strcat(string, inputtext);
1923 projectDB = db_open(string);
1924 if (!projectDB) {
1925 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Не удалось загрузить файл проекта. Попробуйте снова!");
1926 return dialog_MAIN_MENU(playerid, 1, 1, "\1");
1927 }
1928 db_query(projectDB, "PRAGMA synchronous = NORMAL");
1929 db_query(projectDB, "PRAGMA journal_mode = WAL");
1930 db_query(projectDB, "CREATE TABLE IF NOT EXISTS `GROUP_SETTINGS` (`groupname` VARCHAR("#MAX_GROUP_NAME"), `visibility` INTEGER)");
1931
1932 format(projectName, MAX_PROJECT_NAME, inputtext);
1933 new pos = strfind(projectName, ".db", true);
1934 strdel(projectName, pos, (pos + strlen(".db")));
1935
1936 new DBResult:result = db_query(projectDB, "SELECT name FROM sqlite_master WHERE type = 'table'");
1937 if (db_num_rows(result) > 0) {
1938 new DBResult:result2;
1939 new textdrawid;
1940 new groupname[MAX_GROUP_NAME];
1941
1942 do {
1943 db_get_field(result, 0, groupname, MAX_GROUP_NAME);
1944 if (!strcmp("GROUP_SETTINGS", groupname, true)) {
1945 continue;
1946 }
1947
1948 if (groupsCount == MAX_GROUPS) {
1949 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Загружены только первые \""#MAX_GROUPS"\" групп.");
1950 SendClientMessage(playerid, MESSAGE_COLOR, "Если в вашей бд их больше, вам необходимо изменить лимит в скрипте (MAX_GROUPS) и перекомпилировать его.");
1951 break;
1952 }
1953
1954 groupData[groupsCount][E_GROUP_NAME] = groupname;
1955
1956 format(string, sizeof (string), "SELECT `visibility` FROM `GROUP_SETTINGS` WHERE `groupname` = '%s' LIMIT 1", groupData[groupsCount][E_GROUP_NAME]);
1957 result2 = db_query(projectDB, string);
1958 if (result2) {
1959 if (db_num_rows(result2) == 1) {
1960 groupData[groupsCount][E_GROUP_VISIBLE] = bool:db_get_field_int(result2, 0);
1961 }
1962 else {
1963 groupData[groupsCount][E_GROUP_VISIBLE] = true;
1964
1965 format(string, sizeof (string), "INSERT INTO `GROUP_SETTINGS` (`groupname`, `visibility`) VALUES ('%s', '1')", groupData[groupsCount][E_GROUP_NAME]);
1966 db_query(projectDB, string);
1967 }
1968
1969 db_free_result(result2);
1970 }
1971 else {
1972 groupData[groupsCount][E_GROUP_VISIBLE] = true;
1973
1974 format(string, sizeof (string), "INSERT INTO `GROUP_SETTINGS` (`groupname`, `visibility`) VALUES ('%s', '1')", groupData[groupsCount][E_GROUP_NAME]);
1975 db_query(projectDB, string);
1976 }
1977
1978 groupData[groupsCount][E_GROUP_TEXTDRAWS_COUNT] = 0;
1979
1980 format(string, sizeof (string), "SELECT * FROM %s", groupData[groupsCount][E_GROUP_NAME]);
1981 result2 = db_query(projectDB, string);
1982 if (result2) {
1983 if (db_num_rows(result2) > 0) {
1984 do {
1985 if (groupData[groupsCount][E_GROUP_TEXTDRAWS_COUNT] == MAX_GROUP_TEXTDRAWS) {
1986 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Только первые \""#MAX_GROUP_TEXTDRAWS"\" текстдравов были загружены из группы.");
1987 SendClientMessage(playerid, MESSAGE_COLOR, "Если в вашей бд их больше, вам необходимо изменить лимит в скрипте (MAX_GROUP_TEXTDRAWS) и перекомпилировать его.");
1988 break;
1989 }
1990
1991 textdrawid = groupData[groupsCount][E_GROUP_TEXTDRAWS_COUNT]++;
1992
1993 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_SQLID] = db_get_field_assoc_int(result2, "id");
1994 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_ID] = Text:INVALID_TEXT_DRAW;
1995 db_get_field_assoc(result2, "text", groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_TEXT], MAX_GROUP_TEXTDRAW_TEXT);
1996 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_X] = db_get_field_assoc_float(result2, "x");
1997 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_Y] = db_get_field_assoc_float(result2, "y");
1998 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_LETTERSIZE_X] = db_get_field_assoc_float(result2, "letter_x");
1999 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_LETTERSIZE_Y] = db_get_field_assoc_float(result2, "letter_y");
2000 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_TEXTSIZE_X] = db_get_field_assoc_float(result2, "text_x");
2001 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_TEXTSIZE_Y] = db_get_field_assoc_float(result2, "text_y");
2002 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_ALIGNMENT] = db_get_field_assoc_int(result2, "alignment");
2003 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_COLOR] = db_get_field_assoc_int(result2, "color");
2004 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_USE_BOX] = bool:db_get_field_assoc_int(result2, "usebox");
2005 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_BOX_COLOR] = db_get_field_assoc_int(result2, "box_color");
2006 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_SHADOW] = db_get_field_assoc_int(result2, "shadow");
2007 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_OUTLINE] = db_get_field_assoc_int(result2, "outline");
2008 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR] = db_get_field_assoc_int(result2, "background_color");
2009 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_FONT] = db_get_field_assoc_int(result2, "font");
2010 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_PROPORTIONAL] = bool:db_get_field_assoc_int(result2, "proportional");
2011 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_SELECTABLE] = bool:db_get_field_assoc_int(result2, "selectable");
2012 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_PREVIEW_MODEL] = db_get_field_assoc_int(result2, "preview_model");
2013 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X] = db_get_field_assoc_float(result2, "rot_x");
2014 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y] = db_get_field_assoc_float(result2, "rot_y");
2015 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z] = db_get_field_assoc_float(result2, "rot_z");
2016 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM] = db_get_field_assoc_float(result2, "rot_zoom");
2017 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_PREVIEW_VEH_COLOR1] = db_get_field_assoc_int(result2, "veh_color1");
2018 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_PREVIEW_VEH_COLOR2] = db_get_field_assoc_int(result2, "veh_color2");
2019 groupTextDrawData[groupsCount][textdrawid][E_TEXTDRAW_TYPE_PLAYER] = bool:db_get_field_assoc_int(result2, "type_player");
2020
2021 CreateGroupTextDraw(groupsCount, textdrawid);
2022 }
2023 while (db_next_row(result2));
2024 }
2025 db_free_result(result2);
2026 }
2027
2028 groupsCount++;
2029 }
2030 while (db_next_row(result));
2031 db_free_result(result);
2032 }
2033
2034 format(string, sizeof (string), "TDEditor: Проект \"%s\" загружен. Начните редактирование!", inputtext);
2035 SendClientMessage(playerid, MESSAGE_COLOR, string);
2036
2037 return cmd_text(playerid);
2038}
2039
2040Dialog:DELETE_PROJECT(playerid, response, listitem, inputtext[]) {
2041 if (!response) {
2042 return cmd_text(playerid);
2043 }
2044
2045 if (!strcmp(inputtext, "null", true)) {
2046 return dialog_MAIN_MENU(playerid, 1, 1, "\1");
2047 }
2048
2049 format(projectName, MAX_PROJECT_NAME, inputtext);
2050
2051 new string[512];
2052 format(string, sizeof (string), ""COL_WHITE"Вы уверены, что хотите удалить этот "COL_ORANGE"ПРОЕКТ"COL_WHITE"?\n\n"COL_RED"Название проекта:\t"COL_GREY"%s\n\n"COL_GREY"Примечание: Удаление проекта полностью удалит его из папки scriptfiles. Восстановить будет нельзя!", inputtext);
2053 return Dialog_Show(playerid, CONFIRM_DELETE_PROJECT, DIALOG_STYLE_MSGBOX, "TDEditor: Подтверждение удаления проекта", string, "Да", "Нет");
2054}
2055
2056Dialog:CONFIRM_DELETE_PROJECT(playerid, response, listitem, inputtext[]) {
2057 if (!response) {
2058 return dialog_MAIN_MENU(playerid, 1, 2, "\1");
2059 }
2060
2061 db_close(projectDB);
2062 fremove(projectName);
2063
2064 if (!dini_Unset(PATH_RECORD_FILE, projectName)) {
2065 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Не удалось открыть файл списка проектов, потому проект до сих пор может быть в диалоге открытия/удаления, но бд проекта удалена!");
2066 }
2067 dini_Timeout(PATH_RECORD_FILE);
2068
2069 new string[150];
2070 format(string, sizeof (string), "TDEditor: Проект \"%s\" удалён.", projectName);
2071 SendClientMessage(playerid, MESSAGE_COLOR, string);
2072
2073 return dialog_MAIN_MENU(playerid, 1, 2, "\1");
2074}
2075
2076Dialog:EDITOR_MENU(playerid, response, listitem, inputtext[]) {
2077 if (!response) {
2078 return SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Редактор закрыт.");
2079 }
2080
2081 switch (listitem) {
2082 case 0: {
2083 if (groupsCount == MAX_GROUPS) {
2084 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Нельзя добавить более \""#MAX_GROUPS"\" групп.");
2085 SendClientMessage(playerid, MESSAGE_COLOR, "Измените лимит в скрипте (MAX_GROUPS) и перекомпилируйте, чтобы иметь возможность добавить больше.");
2086 return cmd_text(playerid);
2087 }
2088
2089 static string[512];
2090 string = COL_WHITE"Введите "COL_GREEN"НАЗВАНИЕ ГРУППЫ"COL_WHITE" текстдравов ниже для её создания.\n\n"COL_GREY"Что такое группа текстдравов?\n";
2091 strcat(string, COL_GREY"Группа текстдравов - это несколько объединённых текстдравов для выполнения каких-либо задач; например, группа с названием\n");
2092 strcat(string, "'кнопка' и текстдравами, сделанными в виде кнопки в ней. Далее вы сможете дублировать группу, перемещать все текстдравы в ней и т.д.");
2093
2094 return Dialog_Show(playerid, NEW_GROUP, DIALOG_STYLE_INPUT, "TDEditor: Создание новой группы", string, "Создать", "Назад");
2095 }
2096
2097 case 1: {
2098 new name[MAX_PROJECT_NAME * 2] = PATH_EXPORT_FILES;
2099 strcat(name, projectName);
2100 strcat(name, ".pwn");
2101
2102 if (!ExportProject(name)) {
2103 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Не удалось создать файл проекта. Попробуйте еще раз!");
2104 return dialog_EDITOR_MENU(playerid, 1, 1, "\1");
2105 }
2106
2107 new string[150];
2108 format(string, sizeof (string), "TDEditor: Проект \"%s\" был экспортирован в файл \"%s\".", projectName, name);
2109 SendClientMessage(playerid, MESSAGE_COLOR, string);
2110
2111 return cmd_text(playerid);
2112 }
2113
2114 case 2: {
2115 OnFilterScriptExit();
2116 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Проект сохранён и закрыт.");
2117 return cmd_text(playerid);
2118 }
2119
2120 default: {
2121 return ShowPlayerGroupDialog(playerid, (listitem - 3));
2122 }
2123 }
2124
2125 return 1;
2126}
2127
2128Dialog:NEW_GROUP(playerid, response, listitem, inputtext[]) {
2129 if (!response) {
2130 return cmd_text(playerid);
2131 }
2132
2133 new name[MAX_GROUP_NAME];
2134 if (sscanf(inputtext, "s["#MAX_GROUP_NAME"]", name)) {
2135 static string[512];
2136 string = COL_WHITE"Введите "COL_GREEN"НАЗВАНИЕ ГРУППЫ"COL_WHITE" текстдравов ниже для её создания.\n\n"COL_GREY"Что такое группа текстдравов?\n";
2137 strcat(string, COL_GREY"Группа текстдравов - это несколько объединённых текстдравов для выполнения каких-либо задач; например, группа с названием\n");
2138 strcat(string, "'кнопка' и текстдравами, сделанными в виде кнопки в ней. Далее вы сможете дублировать группу, перемещать все текстдравы в ней и т.д.\n\n");
2139 strcat(string, COL_RED"Ошибка: "COL_GREY"Название группы не может быть пустым или пробелами.");
2140
2141 return Dialog_Show(playerid, NEW_GROUP, DIALOG_STYLE_INPUT, "TDEditor: Создание новой группы", string, "Создать", "Назад");
2142 }
2143
2144 format(groupData[groupsCount][E_GROUP_NAME], MAX_GROUP_NAME, name);
2145 groupData[groupsCount][E_GROUP_TEXTDRAWS_COUNT] = 0;
2146 groupData[groupsCount][E_GROUP_VISIBLE] = true;
2147
2148 new string[1024] = "CREATE TABLE IF NOT EXISTS ";
2149 strcat(string, name);
2150 strcat(string, " (`id` INTEGER PRIMARY KEY, \
2151 `text` VARCHAR("#MAX_GROUP_TEXTDRAW_TEXT"), \
2152 `x` FLOAT, \
2153 `y` FLOAT, \
2154 `letter_x` FLOAT, \
2155 `letter_y` FLOAT, \
2156 `text_x` FLOAT, \
2157 `text_y` FLOAT, \
2158 `alignment` INTEGER, \
2159 `color` INTEGER, \
2160 `usebox` INTEGER, \
2161 `box_color` INTEGER, \
2162 `shadow` INTEGER, ");
2163 strcat(string, "`outline` INTEGER, \
2164 `background_color` INTEGER, \
2165 `font` INTEGER, \
2166 `proportional` INTEGER, \
2167 `selectable` INTEGER, \
2168 `preview_model` INTEGER, \
2169 `rot_x` FLOAT, \
2170 `rot_y` FLOAT, \
2171 `rot_z` FLOAT, \
2172 `rot_zoom` FLOAT, \
2173 `veh_color1` INTEGER, \
2174 `veh_color2` INTEGER, \
2175 `type_player` INTEGER)");
2176 db_query(projectDB, string);
2177
2178 string = "INSERT INTO `GROUP_SETTINGS` (`groupname`, `visibility`) VALUES ('";
2179 strcat(string, name);
2180 strcat(string, "', '1')");
2181 db_query(projectDB, string);
2182
2183 groupsCount++;
2184
2185 format(string, sizeof (string), "TDEditor: Добавлена новая группа текстдравов: %s [Группа #%i].", name, (groupsCount - 1));
2186 SendClientMessage(playerid, MESSAGE_COLOR, string);
2187
2188 return cmd_text(playerid);
2189}
2190
2191Dialog:GROUP_MENU(playerid, response, listitem, inputtext[]) {
2192 if (!response) {
2193 SaveProjectGroup(playerCurrentGroup[playerid]);
2194 return cmd_text(playerid);
2195 }
2196
2197 new groupid = playerCurrentGroup[playerid];
2198
2199 switch (listitem) {
2200 case 0: {
2201 if (groupData[groupid][E_GROUP_TEXTDRAWS_COUNT] == MAX_GROUP_TEXTDRAWS) {
2202 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Нельзя добавить более \""#MAX_GROUP_TEXTDRAWS"\" текстдравов в группу.");
2203 SendClientMessage(playerid, MESSAGE_COLOR, "Измените лимит в скрипте (MAX_GROUP_TEXTDRAWS) и перекомпилируйте, чтобы иметь возможность добавить больше.");
2204 return ShowPlayerGroupDialog(playerid, groupid);
2205 }
2206
2207 new textdrawid = groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]++;
2208
2209 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID] = Text:INVALID_TEXT_DRAW;
2210 format(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT], MAX_GROUP_TEXTDRAW_TEXT, "Новый Текстдрав");
2211 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_X] = 250.0;
2212 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_Y] = 10.0;
2213 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_X] = 0.5;
2214 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_LETTERSIZE_Y] = 1.0;
2215 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_X] = 0.0;
2216 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXTSIZE_Y] = 0.0;
2217 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ALIGNMENT] = 1;
2218 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR] = 0xFFFFFFFF;
2219 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_USE_BOX] = false;
2220 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR] = 0x000000FF;
2221 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SHADOW] = 0;
2222 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_OUTLINE] = 0;
2223 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR] = 0x000000FF;
2224 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_FONT] = 1;
2225 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PROPORTIONAL] = true;
2226 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SELECTABLE] = false;
2227 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_MODEL] = 0;
2228 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X] = 0.0;
2229 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y] = 0.0;
2230 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z] = 0.0;
2231 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM] = 1.0;
2232 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_VEH_COLOR1] = -1;
2233 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_VEH_COLOR2] = -1;
2234 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TYPE_PLAYER] = false;
2235
2236 CreateGroupTextDraw(groupid, textdrawid);
2237
2238 new string[1024] = "INSERT INTO ";
2239 strcat(string, groupData[groupid][E_GROUP_NAME]);
2240 strcat(string, "(text, x, y, letter_x, letter_y, text_x, text_y, alignment, color, usebox, box_color, shadow, outline, background_color, font, proportional, selectable, preview_model, rot_x, rot_y, rot_z, rot_zoom, veh_color1, veh_color2, type_player)");
2241 strcat(string, "VALUES ('New TextDraw', '250.0', '10.0', '0.5', '1.0', '0.0', '0.0', '1', '-1', '0', '0xFF', '0', '0', '0xFF', '1', '1', '0', '0', '0.0', '0.0', '0.0', '1.0', '-1', '-1', '0')");
2242 db_query(projectDB, string);
2243
2244 format(string, sizeof (string), "SELECT id FROM %s ORDER BY id DESC LIMIT 1", groupData[groupid][E_GROUP_NAME]);
2245 new DBResult:result = db_query(projectDB, string);
2246 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SQLID] = db_get_field_int(result, 0);
2247 db_free_result(result);
2248
2249 format(string, sizeof (string), "TDEditor: Добавлен новый текстдрав: Текст #%i [Группа: %s].", textdrawid, groupData[groupid][E_GROUP_NAME]);
2250 SendClientMessage(playerid, MESSAGE_COLOR, string);
2251
2252 return ShowPlayerGroupDialog(playerid, groupid);
2253 }
2254
2255 case 1: {
2256 if (groupData[groupid][E_GROUP_TEXTDRAWS_COUNT] == 0) {
2257 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: В группе нет текстдравов!");
2258 return ShowPlayerGroupDialog(playerid, groupid);
2259 }
2260
2261 playerEditing[playerid] = EDITING_GROUP_POS;
2262 playerEditingTimer[playerid] = SetTimerEx("OnPlayerTimerUpdate", 200, true, "i", playerid);
2263 if (showTextDrawCmds) {
2264 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid], "~w~Подождите...");
2265 PlayerTextDrawShow(playerid, playerEditingTextDraw[playerid]);
2266 }
2267
2268 TogglePlayerControllable(playerid, false);
2269 }
2270
2271 case 2: {
2272 if (groupData[groupid][E_GROUP_VISIBLE]) {
2273 groupData[groupid][E_GROUP_VISIBLE] = false;
2274 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
2275 TextDrawHideForAll(groupTextDrawData[groupid][i][E_TEXTDRAW_ID]);
2276 }
2277
2278 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Видимость группы текстдравов выключена.");
2279 }
2280 else {
2281 groupData[groupid][E_GROUP_VISIBLE] = true;
2282 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
2283 TextDrawShowForAll(groupTextDrawData[groupid][i][E_TEXTDRAW_ID]);
2284 }
2285
2286 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Видимость группы текстдравов включена.");
2287 }
2288
2289 return ShowPlayerGroupDialog(playerid, groupid);
2290 }
2291
2292 case 3: {
2293 new string[512];
2294 format(string, sizeof (string), ""COL_WHITE"Введите новое "COL_GREEN"НАЗВАНИЕ ГРУППЫ"COL_WHITE" текстдравов, которое вам нужно!\n\n"COL_YELLOW"Текущее название:\t"COL_WHITE"%s", groupData[groupid][E_GROUP_NAME]);
2295 return Dialog_Show(playerid, CHANGE_GROUP_NAME, DIALOG_STYLE_INPUT, "TDEditor: Изменить название группы", string, "Изменить", "Назад");
2296 }
2297
2298 case 4: {
2299 if (groupsCount == MAX_GROUPS) {
2300 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Вы не можете добавить более \""#MAX_GROUPS"\" групп.");
2301 SendClientMessage(playerid, MESSAGE_COLOR, "Измените лимит в скрипте (MAX_GROUPS) и перекомпилируйте, чтобы иметь возможность добавить больше.");
2302 return ShowPlayerGroupDialog(playerid, groupid);
2303 }
2304
2305 groupData[groupsCount] = groupData[groupid];
2306
2307 new bool:nameExist;
2308 new newName[MAX_GROUP_NAME];
2309 new groupName[MAX_GROUP_NAME];
2310 strmid(groupName, groupData[groupid][E_GROUP_NAME], 0, (MAX_GROUP_NAME - 3));
2311
2312 for (new x = 1; ; x++) {
2313 format(newName, MAX_GROUP_NAME, "%s_%i", groupName, x);
2314 nameExist = false;
2315
2316 for (new i; i < groupsCount; i++) {
2317 if (!strcmp(groupData[i][E_GROUP_NAME], newName, true)) {
2318 nameExist = true;
2319 break;
2320 }
2321 }
2322
2323 if (!nameExist) {
2324 break;
2325 }
2326 }
2327
2328 format(groupData[groupsCount][E_GROUP_NAME], MAX_GROUP_NAME, newName);
2329
2330 new string[1024] = "CREATE TABLE IF NOT EXISTS ";
2331 strcat(string, groupData[groupsCount][E_GROUP_NAME]);
2332 strcat(string, " (`id` INTEGER PRIMARY KEY, \
2333 `text` VARCHAR("#MAX_GROUP_TEXTDRAW_TEXT"), \
2334 `x` FLOAT, \
2335 `y` FLOAT, \
2336 `letter_x` FLOAT, \
2337 `letter_y` FLOAT, \
2338 `text_x` FLOAT, \
2339 `text_y` FLOAT, \
2340 `alignment` INTEGER, \
2341 `color` INTEGER, \
2342 `usebox` INTEGER, \
2343 `box_color` INTEGER, \
2344 `shadow` INTEGER, ");
2345 strcat(string, "`outline` INTEGER, \
2346 `background_color` INTEGER, \
2347 `font` INTEGER, \
2348 `proportional` INTEGER, \
2349 `selectable` INTEGER, \
2350 `preview_model` INTEGER, \
2351 `rot_x` FLOAT, \
2352 `rot_y` FLOAT, \
2353 `rot_z` FLOAT, \
2354 `rot_zoom` FLOAT, \
2355 `veh_color1` INTEGER, \
2356 `veh_color2` INTEGER, \
2357 `type_player` INTEGER)");
2358 db_query(projectDB, string);
2359
2360 new DBResult:result;
2361 for (new i; i < groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]; i++) {
2362 for (new x; E_TEXTDRAW:x < E_TEXTDRAW; x++) {
2363 if (E_TEXTDRAW:x == E_TEXTDRAW_ID || E_TEXTDRAW:x == E_TEXTDRAW_SQLID) {
2364 continue;
2365 }
2366
2367 groupTextDrawData[groupsCount][i][E_TEXTDRAW:x] = groupTextDrawData[groupid][i][E_TEXTDRAW:x];
2368 }
2369
2370 string = "INSERT INTO ";
2371 strcat(string, groupData[groupsCount][E_GROUP_NAME]);
2372 strcat(string, "(text, x, y, letter_x, letter_y, text_x, text_y, alignment, color, usebox, box_color, shadow, outline, background_color, font, proportional, selectable, preview_model, rot_x, rot_y, rot_z, rot_zoom, veh_color1, veh_color2, type_player)");
2373 strcat(string, "VALUES ('%q', '%f', '%f', '%f', '%f', '%f', '%f', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%f', '%f', '%f', '%f', '%i', '%i', '%i')");
2374 format(string, sizeof (string), string,
2375 groupTextDrawData[groupsCount][i][E_TEXTDRAW_TEXT],
2376 groupTextDrawData[groupsCount][i][E_TEXTDRAW_X], groupTextDrawData[groupsCount][i][E_TEXTDRAW_Y],
2377 groupTextDrawData[groupsCount][i][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupsCount][i][E_TEXTDRAW_LETTERSIZE_Y],
2378 groupTextDrawData[groupsCount][i][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupsCount][i][E_TEXTDRAW_TEXTSIZE_Y],
2379 groupTextDrawData[groupsCount][i][E_TEXTDRAW_ALIGNMENT],
2380 groupTextDrawData[groupsCount][i][E_TEXTDRAW_COLOR],
2381 groupTextDrawData[groupsCount][i][E_TEXTDRAW_USE_BOX],
2382 groupTextDrawData[groupsCount][i][E_TEXTDRAW_BOX_COLOR],
2383 groupTextDrawData[groupsCount][i][E_TEXTDRAW_SHADOW],
2384 groupTextDrawData[groupsCount][i][E_TEXTDRAW_OUTLINE],
2385 groupTextDrawData[groupsCount][i][E_TEXTDRAW_BACKGROUND_COLOR],
2386 groupTextDrawData[groupsCount][i][E_TEXTDRAW_FONT],
2387 groupTextDrawData[groupsCount][i][E_TEXTDRAW_PROPORTIONAL],
2388 groupTextDrawData[groupsCount][i][E_TEXTDRAW_SELECTABLE],
2389 groupTextDrawData[groupsCount][i][E_TEXTDRAW_PREVIEW_MODEL],
2390 groupTextDrawData[groupsCount][i][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupsCount][i][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupsCount][i][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupsCount][i][E_TEXTDRAW_PREVIEW_ROT_ZOOM],
2391 groupTextDrawData[groupsCount][i][E_TEXTDRAW_PREVIEW_VEH_COLOR1], groupTextDrawData[groupsCount][i][E_TEXTDRAW_PREVIEW_VEH_COLOR2],
2392 groupTextDrawData[groupsCount][i][E_TEXTDRAW_TYPE_PLAYER]);
2393 db_query(projectDB, string);
2394
2395 format(string, sizeof (string), "SELECT id FROM %s ORDER BY id DESC LIMIT 1", groupData[groupsCount][E_GROUP_NAME]);
2396 result = db_query(projectDB, string);
2397 groupTextDrawData[groupsCount][i][E_TEXTDRAW_SQLID] = db_get_field_int(result, 0);
2398 db_free_result(result);
2399
2400 groupTextDrawData[groupsCount][i][E_TEXTDRAW_ID] = Text:INVALID_TEXT_DRAW;
2401 CreateGroupTextDraw(groupsCount, i);
2402 }
2403 groupsCount++;
2404
2405
2406 format(string, sizeof (string), "TDEditor: Группа '%s' скопирована в '%s_1'.", groupData[groupid][E_GROUP_NAME], groupData[groupid][E_GROUP_NAME]);
2407 SendClientMessage(playerid, MESSAGE_COLOR, string);
2408 return cmd_text(playerid);
2409 }
2410
2411 case 5: {
2412 new string[512];
2413 format(string, sizeof (string), ""COL_WHITE"Вы уверены, что хотите удалить эту "COL_ORANGE"ГРУППУ ТЕКСТДРАВОВ"COL_WHITE"?\n\n"COL_RED"Название группы:\t"COL_GREY"%s\n"COL_RED"Текстдравы:\t"COL_GREY"%i штук\n\n"COL_GREY"Примечание: Удаление группы полностью удалит текстдравы в ней из папки scriptfiles. Восстановить будет нельзя!", groupData[groupid][E_GROUP_NAME], groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]);
2414 return Dialog_Show(playerid, CONFIRM_DELETE_GROUP, DIALOG_STYLE_MSGBOX, "TDEditor: Подтверждение удаления группы", string, "Да", "Нет");
2415 }
2416
2417 default: {
2418 return ShowPlayerTextDrawDialog(playerid, (listitem - 6));
2419 }
2420 }
2421 return 1;
2422}
2423
2424Dialog:CONFIRM_DELETE_GROUP(playerid, response, listitem, inputtext[]) {
2425 if (!response) {
2426 return ShowPlayerGroupDialog(playerid, playerCurrentGroup[playerid]);
2427 }
2428
2429 new groupid = playerCurrentGroup[playerid];
2430
2431 new string[150];
2432 format(string, sizeof (string), "DROP TABLE %s", groupData[groupid][E_GROUP_NAME]);
2433 db_query(projectDB, string);
2434
2435 format(string, sizeof (string), "TDEditor: Группа \"%s\" удалена.", groupData[groupid][E_GROUP_NAME]);
2436
2437 ResetGroupData(groupid);
2438
2439 for (new i = groupid; i < (groupsCount - 1); i++) {
2440 for (new x; x < groupData[i + 1][E_GROUP_TEXTDRAWS_COUNT]; x++) {
2441 groupTextDrawData[i][x] = groupTextDrawData[i + 1][x];
2442 }
2443 groupData[i] = groupData[i + 1];
2444 }
2445 groupsCount--;
2446
2447 SendClientMessage(playerid, MESSAGE_COLOR, string);
2448 return cmd_text(playerid);
2449}
2450
2451Dialog:CHANGE_GROUP_NAME(playerid, response, listitem, inputtext[]) {
2452 if (response) {
2453 new name[MAX_GROUP_NAME];
2454 if (sscanf(inputtext, "s["#MAX_GROUP_NAME"]", name)) {
2455 new string[512];
2456 format(string, sizeof (string), ""COL_WHITE"Введите новое "COL_GREEN"НАЗВАНИЕ ГРУППЫ"COL_WHITE" текстдравов, которое вам нужно!\n\n"COL_YELLOW"Текущее название:\t"COL_WHITE"%s\n\n"COL_RED"Ошибка: "COL_GREY"Название группы не может быть пустым или пробелами.", groupData[playerCurrentGroup[playerid]][E_GROUP_NAME]);
2457 return Dialog_Show(playerid, CHANGE_GROUP_NAME, DIALOG_STYLE_INPUT, "TDEditor: Изменить название группы", string, "Изменить", "Назад");
2458 }
2459
2460 for (new i; i < groupsCount; i++) {
2461 if (!strcmp(name, groupData[i][E_GROUP_NAME], true)) {
2462 new string[512];
2463 format(string, sizeof (string), ""COL_WHITE"Введите новое "COL_GREEN"НАЗВАНИЕ ГРУППЫ"COL_WHITE" текстдравов, которое вам нужно!\n\n"COL_YELLOW"Текущее название:\t"COL_WHITE"%s\n\n"COL_RED"Ошибка: "COL_GREY"Такая группа уже существует, выберите уникальное название.", groupData[playerCurrentGroup[playerid]][E_GROUP_NAME]);
2464 return Dialog_Show(playerid, CHANGE_GROUP_NAME, DIALOG_STYLE_INPUT, "TDEditor: Изменить название группы", string, "Изменить", "Назад");
2465 }
2466 }
2467
2468 new groupid = playerCurrentGroup[playerid];
2469
2470 new string[150];
2471 format(string, sizeof (string), "ALTER TABLE %s RENAME TO %s", groupData[groupid][E_GROUP_NAME], name);
2472 db_query(projectDB, string);
2473
2474 format(string, sizeof (string), "TDEditor: Название группы изменено с \"%s\" на \"%s\".", groupData[groupid][E_GROUP_NAME], name);
2475 SendClientMessage(playerid, MESSAGE_COLOR, string);
2476
2477 format(groupData[groupid][E_GROUP_NAME], MAX_GROUP_NAME, name);
2478 }
2479
2480 return ShowPlayerGroupDialog(playerid, playerCurrentGroup[playerid]);
2481}
2482
2483Dialog:TEXTDRAW_MENU(playerid, response, listitem, inputtext[]) {
2484 if (!response) {
2485 SaveProjectGroupTextDraw(playerCurrentGroup[playerid], playerCurrentTextDraw[playerid]);
2486 return ShowPlayerGroupDialog(playerid, playerCurrentGroup[playerid]);
2487 }
2488
2489 new groupid = playerCurrentGroup[playerid];
2490 new textdrawid = playerCurrentTextDraw[playerid];
2491
2492 switch (listitem) {
2493 case 0: {
2494 return Dialog_Show(playerid, CHANGE_TEXT_OR_POSITION, DIALOG_STYLE_LIST, "TDEditor: Изменить текст/позицию", "Изменить текст\nИзменить позицию", "Выбрать", "Назад");
2495 }
2496
2497 case 1: {
2498 return Dialog_Show(playerid, CHANGE_FONT, DIALOG_STYLE_LIST, "TDEditor: Изменить шрифт", "Шрифт 0\nШрифт 1\nШрифт 2\nШрифт 3\nШрифт 4 (Спрайт)\nШрифт 5 (Превью модель)", "Выбрать", "Назад");
2499 }
2500
2501 case 2: {
2502 return Dialog_Show(playerid, CHANGE_ALIGNMENT, DIALOG_STYLE_LIST, "TDEditor: Изменить выравнивание", "Выравнивание 1 (По левому краю)\nВыравнивание 2 (По центру)\nВыравнивание 3 (По правому краю)", "Выбрать", "Назад");
2503 }
2504
2505 case 3: {
2506 new string[150];
2507
2508 if (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PROPORTIONAL]) {
2509 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PROPORTIONAL] = false;
2510
2511 format(string, sizeof (string), "TDEditor: Пропорциональность текстдрава #%i выключена.", textdrawid);
2512 }
2513 else {
2514 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PROPORTIONAL] = true;
2515
2516 format(string, sizeof (string), "TDEditor: Пропорциональность текстдрава #%i включена.", textdrawid);
2517 }
2518
2519 TextDrawSetProportional(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PROPORTIONAL]);
2520 if (groupData[groupid][E_GROUP_VISIBLE]) {
2521 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
2522 }
2523
2524 SendClientMessage(playerid, MESSAGE_COLOR, string);
2525
2526 return ShowPlayerTextDrawDialog(playerid, textdrawid);
2527 }
2528
2529 case 4: {
2530 playerEditing[playerid] = EDITING_SHADOW_SIZE;
2531 playerEditingTimer[playerid] = SetTimerEx("OnPlayerTimerUpdate", 200, true, "i", playerid);
2532 if (showTextDrawCmds) {
2533 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid], "~w~Подождите...");
2534 PlayerTextDrawShow(playerid, playerEditingTextDraw[playerid]);
2535 }
2536
2537 TogglePlayerControllable(playerid, false);
2538 }
2539
2540 case 5: {
2541 playerEditing[playerid] = EDITING_OUTLINE_SIZE;
2542 playerEditingTimer[playerid] = SetTimerEx("OnPlayerTimerUpdate", 200, true, "i", playerid);
2543 if (showTextDrawCmds) {
2544 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid], "~w~Подождите...");
2545 PlayerTextDrawShow(playerid, playerEditingTextDraw[playerid]);
2546 }
2547
2548 TogglePlayerControllable(playerid, false);
2549 }
2550
2551 case 6: {
2552 playerEditing[playerid] = EDITING_BACKGROUND_COLOR;
2553 Dialog_Show(playerid, CHANGE_COLOR, DIALOG_STYLE_LIST, "TDEditor: Изменить цвет обводки/тени", "Ввести свой HEX цвет\nВвести свой RGBA цвет\nСписок цветов TDEditor'а", "Выбрать", "Назад");
2554 }
2555
2556 case 7: {
2557 playerEditing[playerid] = EDITING_LETTER_SIZE;
2558 playerEditingTimer[playerid] = SetTimerEx("OnPlayerTimerUpdate", 200, true, "i", playerid);
2559 if (showTextDrawCmds) {
2560 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid], "~w~Подождите...");
2561 PlayerTextDrawShow(playerid, playerEditingTextDraw[playerid]);
2562 }
2563
2564 TogglePlayerControllable(playerid, false);
2565 }
2566
2567 case 8: {
2568 playerEditing[playerid] = EDITING_TEXTDRAW_COLOR;
2569 Dialog_Show(playerid, CHANGE_COLOR, DIALOG_STYLE_LIST, "TDEditor: Изменить цвет текстдрава", "Ввести свой HEX цвет\nВвести свой RGBA цвет\nСписок цветов TDEditor'а", "Выбрать", "Назад");
2570 }
2571
2572 case 9: {
2573 new string[150];
2574
2575 if (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_USE_BOX]) {
2576 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_USE_BOX] = false;
2577
2578 format(string, sizeof (string), "TDEditor: Использование Box'а для текстдрава #%i выключено.", textdrawid);
2579 }
2580 else {
2581 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_USE_BOX] = true;
2582
2583 format(string, sizeof (string), "TDEditor: Использование Box'а для текстдрава #%i включено.", textdrawid);
2584 }
2585
2586 TextDrawUseBox(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_USE_BOX]);
2587 if (groupData[groupid][E_GROUP_VISIBLE]) {
2588 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
2589 }
2590
2591 SendClientMessage(playerid, MESSAGE_COLOR, string);
2592
2593 return ShowPlayerTextDrawDialog(playerid, textdrawid);
2594 }
2595
2596 case 10: {
2597 playerEditing[playerid] = EDITING_TEXT_SIZE;
2598 playerEditingTimer[playerid] = SetTimerEx("OnPlayerTimerUpdate", 200, true, "i", playerid);
2599 if (showTextDrawCmds) {
2600 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid], "~w~Подождите...");
2601 PlayerTextDrawShow(playerid, playerEditingTextDraw[playerid]);
2602 }
2603
2604 TogglePlayerControllable(playerid, false);
2605 }
2606
2607 case 11: {
2608 playerEditing[playerid] = EDITING_BOX_COLOR;
2609 Dialog_Show(playerid, CHANGE_COLOR, DIALOG_STYLE_LIST, "TDEditor: Изменить цвет box'а", "Ввести свой HEX цвет\nВвести свой RGBA цвет\nСписок цветов TDEditor'а", "Выбрать", "Назад");
2610 }
2611
2612 case 12: {
2613 new string[150];
2614
2615 if (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SELECTABLE]) {
2616 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SELECTABLE] = false;
2617
2618 format(string, sizeof (string), "TDEditor: Кликабельность текстдрава #%i выключена.", textdrawid);
2619 }
2620 else {
2621 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SELECTABLE] = true;
2622
2623 format(string, sizeof (string), "TDEditor: Кликабельность текстдрава #%i включена.", textdrawid);
2624 }
2625
2626 TextDrawSetSelectable(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SELECTABLE]);
2627 if (groupData[groupid][E_GROUP_VISIBLE]) {
2628 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
2629 }
2630
2631 SendClientMessage(playerid, MESSAGE_COLOR, string);
2632
2633 return ShowPlayerTextDrawDialog(playerid, textdrawid);
2634 }
2635
2636 case 13: {
2637 Dialog_Show(playerid, PREVIEW_MODEL_OPTIONS, DIALOG_STYLE_LIST, "TDEditor: Опции превью модели", "ID модели\nИзменить вращение с клавиатуры (только X, Y)\nВвести вращение (X, Y, Z, Масштаб)", "Выбрать", "Назад");
2638 }
2639
2640 case 14: {
2641 new string[150];
2642
2643 if (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TYPE_PLAYER]) {
2644 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TYPE_PLAYER] = false;
2645
2646 format(string, sizeof (string), "TDEditor: Тип текстдрава #%i изменён на ГЛОБАЛЬНЫЙ ('Text:').", textdrawid);
2647 }
2648 else {
2649 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TYPE_PLAYER] = true;
2650
2651 format(string, sizeof (string), "TDEditor: Тип текстдрава #%i изменён на ПЕРСОНАЛЬНЫЙ ('PlayerText:').", textdrawid);
2652 }
2653
2654 if (groupData[groupid][E_GROUP_VISIBLE]) {
2655 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
2656 }
2657
2658 SendClientMessage(playerid, MESSAGE_COLOR, string);
2659
2660 return ShowPlayerTextDrawDialog(playerid, textdrawid);
2661 }
2662
2663 case 15: {
2664 if (groupData[groupid][E_GROUP_TEXTDRAWS_COUNT] == MAX_GROUP_TEXTDRAWS) {
2665 SendClientMessage(playerid, MESSAGE_COLOR, "TDEditor: Нельзя добавить более \""#MAX_GROUP_TEXTDRAWS"\" текстдравов в группу.");
2666 SendClientMessage(playerid, MESSAGE_COLOR, "Измените лимит в скрипте (MAX_GROUP_TEXTDRAWS) и перекомпилируйте, чтобы иметь возможность добавить больше.");
2667 return ShowPlayerTextDrawDialog(playerid, textdrawid);
2668 }
2669
2670 new newTextdrawid = groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]++;
2671 for (new i; E_TEXTDRAW:i < E_TEXTDRAW; i++) {
2672 if (E_TEXTDRAW:i == E_TEXTDRAW_ID || E_TEXTDRAW:i == E_TEXTDRAW_SQLID) {
2673 continue;
2674 }
2675
2676 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW:i] = groupTextDrawData[groupid][textdrawid][E_TEXTDRAW:i];
2677 }
2678
2679 new string[1024] = "INSERT INTO ";
2680 strcat(string, groupData[groupid][E_GROUP_NAME]);
2681 strcat(string, "(text, x, y, letter_x, letter_y, text_x, text_y, alignment, color, usebox, box_color, shadow, outline, background_color, font, proportional, selectable, preview_model, rot_x, rot_y, rot_z, rot_zoom, veh_color1, veh_color2, type_player)");
2682 strcat(string, "VALUES ('%q', '%f', '%f', '%f', '%f', '%f', '%f', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%f', '%f', '%f', '%f', '%i', '%i', '%i')");
2683 format(string, sizeof (string), string,
2684 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_TEXT],
2685 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_X], groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_Y],
2686 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_LETTERSIZE_X], groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_LETTERSIZE_Y],
2687 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_TEXTSIZE_X], groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_TEXTSIZE_Y],
2688 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_ALIGNMENT],
2689 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_COLOR],
2690 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_USE_BOX],
2691 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_BOX_COLOR],
2692 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_SHADOW],
2693 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_OUTLINE],
2694 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_BACKGROUND_COLOR],
2695 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_FONT],
2696 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_PROPORTIONAL],
2697 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_SELECTABLE],
2698 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_PREVIEW_MODEL],
2699 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM],
2700 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_PREVIEW_VEH_COLOR1], groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_PREVIEW_VEH_COLOR2],
2701 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_TYPE_PLAYER]);
2702 db_query(projectDB, string);
2703
2704 format(string, sizeof (string), "SELECT id FROM %s ORDER BY id DESC LIMIT 1", groupData[groupid][E_GROUP_NAME]);
2705 new DBResult:result = db_query(projectDB, string);
2706 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_SQLID] = db_get_field_int(result, 0);
2707 db_free_result(result);
2708
2709 groupTextDrawData[groupid][newTextdrawid][E_TEXTDRAW_ID] = Text:INVALID_TEXT_DRAW;
2710 CreateGroupTextDraw(groupid, newTextdrawid);
2711
2712 format(string, sizeof (string), "TDEditor: Текстдрав скопирован: Текст #%i [Группа: %s].", newTextdrawid, groupData[groupid][E_GROUP_NAME]);
2713 SendClientMessage(playerid, MESSAGE_COLOR, string);
2714
2715 return ShowPlayerGroupDialog(playerid, groupid);
2716 }
2717
2718 case 16: {
2719 new previewChars[MAX_GROUP_TEXTDRAW_PREVIEW_CHARS + 4];
2720 strmid(previewChars, groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT], 0, MAX_GROUP_TEXTDRAW_PREVIEW_CHARS);
2721 if (strlen(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT]) > MAX_GROUP_TEXTDRAW_PREVIEW_CHARS) {
2722 strcat(previewChars, "...");
2723 }
2724
2725 new fontName[16];
2726 switch (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_FONT]) {
2727 case 0, 1, 2, 3: {
2728 fontName = "Текст";
2729 }
2730
2731 case 4: {
2732 fontName = "Спрайт";
2733 }
2734
2735 case 5: {
2736 fontName = "Превью модель";
2737 }
2738 }
2739
2740 new string[256];
2741 format(string, sizeof (string), ""COL_WHITE"Вы уверены, что хотите удалить "COL_ORANGE"ТЕКСТДРАВ: #%i"COL_WHITE"?\n\n"COL_RED"Текст текстдрава:\t"COL_WHITE"'%s'\n"COL_RED"Шрифт текстдрава:\t"COL_WHITE"%i (%s)", textdrawid, previewChars, groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_FONT], fontName);
2742 return Dialog_Show(playerid, CONFIRM_DELETE_TEXTDRAW, DIALOG_STYLE_MSGBOX, "TDEditor: Подтверждение удаления группы", string, "Да", "Нет");
2743 }
2744 }
2745 return 1;
2746}
2747
2748Dialog:CHANGE_TEXT_OR_POSITION(playerid, response, listitem, inputtext[]) {
2749 if (!response) {
2750 return ShowPlayerTextDrawDialog(playerid, playerCurrentTextDraw[playerid]);
2751 }
2752
2753 switch (listitem) {
2754 case 0: {
2755 new groupid = playerCurrentGroup[playerid];
2756 new textdrawid = playerCurrentTextDraw[playerid];
2757
2758 new previewChars[MAX_GROUP_TEXTDRAW_PREVIEW_CHARS + 4];
2759 strmid(previewChars, groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT], 0, MAX_GROUP_TEXTDRAW_PREVIEW_CHARS);
2760 if (strlen(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT]) > MAX_GROUP_TEXTDRAW_PREVIEW_CHARS) {
2761 strcat(previewChars, "...");
2762 }
2763
2764 new string[256];
2765 format(string, sizeof(string), ""COL_WHITE"Введите строку в качестве "COL_GREEN"ТЕКСТА"COL_WHITE" текстдрава.\n\n"COL_YELLOW"Текущий текст: "COL_WHITE"'%s'", previewChars);
2766 Dialog_Show(playerid, CHANGE_TEXT, DIALOG_STYLE_INPUT, "TDEditor: Изменить текст", string, "Ок", "Назад");
2767 }
2768
2769 case 1: {
2770 playerEditing[playerid] = EDITING_POS;
2771 playerEditingTimer[playerid] = SetTimerEx("OnPlayerTimerUpdate", 200, true, "i", playerid);
2772 if (showTextDrawCmds) {
2773 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid], "~w~Подождите...");
2774 PlayerTextDrawShow(playerid, playerEditingTextDraw[playerid]);
2775 }
2776
2777 TogglePlayerControllable(playerid, false);
2778 }
2779 }
2780 return 1;
2781}
2782
2783Dialog:CHANGE_TEXT(playerid, response, listitem, inputtext[]) {
2784 if (!response) {
2785 return dialog_TEXTDRAW_MENU(playerid, 1, 0, "\1");
2786 }
2787
2788 new groupid = playerCurrentGroup[playerid];
2789 new textdrawid = playerCurrentTextDraw[playerid];
2790
2791 new previewChars[MAX_GROUP_TEXTDRAW_PREVIEW_CHARS + 4];
2792 strmid(previewChars, groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT], 0, MAX_GROUP_TEXTDRAW_PREVIEW_CHARS);
2793 if (strlen(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT]) > MAX_GROUP_TEXTDRAW_PREVIEW_CHARS) {
2794 strcat(previewChars, "...");
2795 }
2796
2797 new text[MAX_GROUP_TEXTDRAW_TEXT];
2798 if (sscanf(inputtext, "s["#MAX_GROUP_TEXTDRAW_TEXT"]", text)) {
2799 new string[256];
2800 format(string, sizeof(string), ""COL_WHITE"Введите строку в качестве "COL_GREEN"ТЕКСТА"COL_WHITE" текстдрава.\n\n"COL_YELLOW"Текущий текст: "COL_WHITE"'%s'\n\n"COL_RED"Ошибка: "COL_GREY"Текст не введён.", previewChars);
2801 return Dialog_Show(playerid, CHANGE_TEXT, DIALOG_STYLE_INPUT, "TDEditor: Изменить текст", string, "Ок", "Назад");
2802 }
2803
2804 format(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_TEXT], MAX_GROUP_TEXTDRAW_TEXT, text);
2805 TextDrawSetString(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], text);
2806 if (groupData[groupid][E_GROUP_VISIBLE]) {
2807 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
2808 }
2809
2810 return dialog_TEXTDRAW_MENU(playerid, 1, 0, "\1");
2811}
2812
2813Dialog:CHANGE_FONT(playerid, response, listitem, inputtext[]) {
2814 if (!response) {
2815 return ShowPlayerTextDrawDialog(playerid, playerCurrentTextDraw[playerid]);
2816 }
2817
2818 new groupid = playerCurrentGroup[playerid];
2819 new textdrawid = playerCurrentTextDraw[playerid];
2820
2821 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_FONT] = listitem;
2822 TextDrawFont(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], listitem);
2823 if (groupData[groupid][E_GROUP_VISIBLE]) {
2824 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
2825 }
2826
2827 new string[150];
2828 format(string, sizeof (string), "TDEditor: Шрифт текстдрава #%i изменён на '%i'.", textdrawid, listitem);
2829 SendClientMessage(playerid, MESSAGE_COLOR, string);
2830
2831 return ShowPlayerTextDrawDialog(playerid, textdrawid);
2832}
2833
2834Dialog:CHANGE_ALIGNMENT(playerid, response, listitem, inputtext[]) {
2835 if (!response) {
2836 return ShowPlayerTextDrawDialog(playerid, playerCurrentTextDraw[playerid]);
2837 }
2838
2839 new groupid = playerCurrentGroup[playerid];
2840 new textdrawid = playerCurrentTextDraw[playerid];
2841
2842 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ALIGNMENT] = (listitem + 1);
2843 TextDrawAlignment(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], (listitem + 1));
2844 if (groupData[groupid][E_GROUP_VISIBLE]) {
2845 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
2846 }
2847
2848 new string[150];
2849 format(string, sizeof (string), "TDEditor: Выравнивание текстдрава #%i изменено на '%i'.", textdrawid, (listitem + 1));
2850 SendClientMessage(playerid, MESSAGE_COLOR, string);
2851
2852 return ShowPlayerTextDrawDialog(playerid, textdrawid);
2853}
2854
2855Dialog:CONFIRM_DELETE_TEXTDRAW(playerid, response, listitem, inputtext[]) {
2856 if (!response) {
2857 return ShowPlayerTextDrawDialog(playerid, playerCurrentTextDraw[playerid]);
2858 }
2859
2860 new groupid = playerCurrentGroup[playerid];
2861 new textdrawid = playerCurrentTextDraw[playerid];
2862
2863 new string[150];
2864 format(string, sizeof (string), "DELETE FROM %s WHERE id = %i", groupData[groupid][E_GROUP_NAME], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_SQLID]);
2865 db_query(projectDB, string);
2866
2867 TextDrawDestroy(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
2868 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID] = Text:INVALID_TEXT_DRAW;
2869
2870 format(string, sizeof (string), "TDEditor: Текстдрав #%i удалён.", textdrawid);
2871
2872 for (new i = textdrawid; i < (groupData[groupid][E_GROUP_TEXTDRAWS_COUNT] - 1); i++) {
2873 groupTextDrawData[groupid][i] = groupTextDrawData[groupid][i + 1];
2874 }
2875 groupData[groupid][E_GROUP_TEXTDRAWS_COUNT]--;
2876
2877 SendClientMessage(playerid, MESSAGE_COLOR, string);
2878 return ShowPlayerGroupDialog(playerid, playerCurrentGroup[playerid]);
2879}
2880
2881Dialog:CHANGE_COLOR(playerid, response, listitem, inputtext[]) {
2882 if (!response) {
2883 playerEditing[playerid] = EDITING_NONE;
2884 return ShowPlayerTextDrawDialog(playerid, playerCurrentTextDraw[playerid]);
2885 }
2886
2887 switch (listitem) {
2888 case 0: {
2889 return Dialog_Show(playerid, CUSTOM_HEX_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой HEX цвет", ""COL_WHITE"Вставьте код цвета "COL_GREEN"HEXA-DECIMAL"COL_WHITE" ниже.\n\n"COL_WHITE"(например: '0xFFFFFFF' - это белый)", "Ок", "Назад");
2890 }
2891
2892 case 1: {
2893 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_RED"КРАСНОГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
2894 }
2895
2896 default: {
2897 static string[sizeof (COLORS) * ((32 * 2) + 1)];
2898 string[0] = EOS;
2899 for (new i; i < sizeof (COLORS); i++) {
2900 format(string, sizeof (string), "%s{%06x}%s\n", string, (COLORS[i][E_COLOR_CODE] >>> 8), COLORS[i][E_COLOR_NAME]);
2901 }
2902 return Dialog_Show(playerid, COLOR_MENU, DIALOG_STYLE_LIST, "TDEditor: Меню цветов", string, "Выбрать", "Назад");
2903 }
2904 }
2905 return 1;
2906}
2907
2908Dialog:CUSTOM_HEX_COLOR(playerid, response, listitem, inputtext[]) {
2909 if (!response) {
2910 switch (playerEditing[playerid]) {
2911 case EDITING_BACKGROUND_COLOR: {
2912 return dialog_TEXTDRAW_MENU(playerid, 1, 6, "\1");
2913 }
2914
2915 case EDITING_TEXTDRAW_COLOR: {
2916 return dialog_TEXTDRAW_MENU(playerid, 1, 8, "\1");
2917 }
2918
2919 case EDITING_BOX_COLOR: {
2920 return dialog_TEXTDRAW_MENU(playerid, 1, 11, "\1");
2921 }
2922 }
2923 }
2924
2925 new red[3], green[3], blue[3], alpha[3];
2926
2927 if (inputtext[0] == '0' && inputtext[1] == 'x') { // He's using 0xFFFFFF format
2928 if (strlen(inputtext) != 8 && strlen(inputtext) != 10) {
2929 return Dialog_Show(playerid, CUSTOM_HEX_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой HEX цвет", ""COL_WHITE"Вставьте код цвета "COL_GREEN"HEXA-DECIMAL"COL_WHITE" ниже.\n\n"COL_WHITE"(например: '0xFFFFFFF' - это белый)\n\n"COL_RED"Ошибка: "COL_GREY"Введён неверный hexa-decimal код цвета.", "Ок", "Назад");
2930 }
2931
2932 format(red, sizeof (red), "%c%c", inputtext[2], inputtext[3]);
2933 format(green, sizeof (green), "%c%c", inputtext[4], inputtext[5]);
2934 format(blue, sizeof (blue), "%c%c", inputtext[6], inputtext[7]);
2935
2936 if (inputtext[8] != '\0') {
2937 format(alpha, sizeof (alpha), "%c%c", inputtext[8], inputtext[9]);
2938 }
2939 else {
2940 alpha = "FF";
2941 }
2942 }
2943 else if (inputtext[0] == '#') { // He's using #FFFFFF format
2944 if (strlen(inputtext) != 7 && strlen(inputtext) != 9) {
2945 return Dialog_Show(playerid, CUSTOM_HEX_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой HEX цвет", ""COL_WHITE"Вставьте код цвета "COL_GREEN"HEXA-DECIMAL"COL_WHITE" ниже.\n\n"COL_WHITE"(например: '0xFFFFFFF' - это белый)\n\n"COL_RED"Ошибка: "COL_GREY"Введён неверный hexa-decimal код цвета.", "Ок", "Назад");
2946 }
2947
2948 format(red, sizeof (red), "%c%c", inputtext[1], inputtext[2]);
2949 format(green, sizeof (green), "%c%c", inputtext[3], inputtext[4]);
2950 format(blue, sizeof (blue), "%c%c", inputtext[5], inputtext[6]);
2951
2952 if (inputtext[7] != '\0') {
2953 format(alpha, sizeof (alpha), "%c%c", inputtext[7], inputtext[8]);
2954 }
2955 else {
2956 alpha = "FF";
2957 }
2958 }
2959 else { // He's using FFFFFF format
2960 if (strlen(inputtext) != 6 && strlen(inputtext) != 8) {
2961 return Dialog_Show(playerid, CUSTOM_HEX_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой HEX цвет", ""COL_WHITE"Вставьте код цвета "COL_GREEN"HEXA-DECIMAL"COL_WHITE" ниже.\n\n"COL_WHITE"(например: '0xFFFFFFF' - это белый)\n\n"COL_RED"Ошибка: "COL_GREY"Введён неверный hexa-decimal код цвета.", "Ок", "Назад");
2962 }
2963
2964 format(red, sizeof (red), "%c%c", inputtext[0], inputtext[1]);
2965 format(green, sizeof (green), "%c%c", inputtext[2], inputtext[3]);
2966 format(blue, sizeof (blue), "%c%c", inputtext[4], inputtext[5]);
2967
2968 if (inputtext[7] != '\0') {
2969 format(alpha, sizeof (alpha), "%c%c", inputtext[6], inputtext[7]);
2970 }
2971 else {
2972 alpha = "FF";
2973 }
2974 }
2975
2976 new groupid = playerCurrentGroup[playerid];
2977 new textdrawid = playerCurrentTextDraw[playerid];
2978
2979 new string[150];
2980 switch (playerEditing[playerid]) {
2981 case EDITING_TEXTDRAW_COLOR: {
2982 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR] = RGBA(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
2983 TextDrawColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR]);
2984
2985 format(string, sizeof (string), "TDEditor: Цвет текстдрава #%i изменён на {%06x}Предпросмотр цвета", textdrawid, (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR] >>> 8));
2986 }
2987
2988 case EDITING_BOX_COLOR: {
2989 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR] = RGBA(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
2990 TextDrawBoxColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR]);
2991
2992 format(string, sizeof (string), "TDEditor: Цвет box'а текстдрава #%i изменён на {%06x}Предпросмотр цвета", textdrawid, (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR] >>> 8));
2993 }
2994
2995 case EDITING_BACKGROUND_COLOR: {
2996 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR] = RGBA(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
2997 TextDrawBackgroundColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR]);
2998
2999 format(string, sizeof (string), "TDEditor: Цвет обводки/тени текстдрава #%i изменён на {%06x}Предпросмотр цвета", textdrawid, (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR] >>> 8));
3000 }
3001 }
3002
3003 if (groupData[groupid][E_GROUP_VISIBLE]) {
3004 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
3005 }
3006
3007 playerEditing[playerid] = EDITING_NONE;
3008 SendClientMessage(playerid, MESSAGE_COLOR, string);
3009
3010 return ShowPlayerTextDrawDialog(playerid, textdrawid);
3011}
3012
3013Dialog:CUSTOM_RGBA_COLOR(playerid, response, listitem, inputtext[]) {
3014 if (!response) {
3015 switch (GetPVarInt(playerid, "ColorElement")) {
3016 case 0: {
3017 DeletePVar(playerid, "ColorElement");
3018 DeletePVar(playerid, "ColorElement_R");
3019 DeletePVar(playerid, "ColorElement_G");
3020 DeletePVar(playerid, "ColorElement_B");
3021 DeletePVar(playerid, "ColorElement_A");
3022
3023 switch (playerEditing[playerid]) {
3024 case EDITING_BACKGROUND_COLOR: {
3025 return dialog_TEXTDRAW_MENU(playerid, 1, 6, "\1");
3026 }
3027
3028 case EDITING_TEXTDRAW_COLOR: {
3029 return dialog_TEXTDRAW_MENU(playerid, 1, 8, "\1");
3030 }
3031
3032 case EDITING_BOX_COLOR: {
3033 return dialog_TEXTDRAW_MENU(playerid, 1, 11, "\1");
3034 }
3035 }
3036 }
3037
3038 case 1: {
3039 SetPVarInt(playerid, "ColorElement", 0);
3040 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_RED"КРАСНОГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3041 }
3042
3043 case 2: {
3044 SetPVarInt(playerid, "ColorElement", 1);
3045 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_GREEN"ЗЕЛЁНОГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3046 }
3047
3048 case 3: {
3049 SetPVarInt(playerid, "ColorElement", 2);
3050 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_BLUE"СИНЕГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3051 }
3052 }
3053 }
3054
3055 new val;
3056 if (!sscanf(inputtext, "i", val)) {
3057 if (val >= 0 && val <= 255) {
3058 switch (GetPVarInt(playerid, "ColorElement")) {
3059 case 0: {
3060 SetPVarInt(playerid, "ColorElement", 1);
3061 SetPVarInt(playerid, "ColorElement_R", val);
3062 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_GREEN"ЗЕЛЁНОГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3063 }
3064
3065 case 1: {
3066 SetPVarInt(playerid, "ColorElement", 2);
3067 SetPVarInt(playerid, "ColorElement_G", val);
3068 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_BLUE"СИНЕГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3069 }
3070
3071 case 2: {
3072 SetPVarInt(playerid, "ColorElement", 3);
3073 SetPVarInt(playerid, "ColorElement_B", val);
3074 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_GREY"ПРОЗРАЧНОСТИ"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3075 }
3076
3077 case 3: {
3078 new groupid = playerCurrentGroup[playerid];
3079 new textdrawid = playerCurrentTextDraw[playerid];
3080
3081 new string[150];
3082 switch (playerEditing[playerid]) {
3083 case EDITING_TEXTDRAW_COLOR: {
3084 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR] = RGBA(GetPVarInt(playerid, "ColorElement_R"), GetPVarInt(playerid, "ColorElement_G"), GetPVarInt(playerid, "ColorElement_B"), val);
3085 TextDrawColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR]);
3086
3087 format(string, sizeof (string), "TDEditor: Цвет текстдрава #%i изменён на {%06x}Предпросмотр цвета", textdrawid, (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR] >>> 8));
3088 }
3089
3090 case EDITING_BOX_COLOR: {
3091 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR] = RGBA(GetPVarInt(playerid, "ColorElement_R"), GetPVarInt(playerid, "ColorElement_G"), GetPVarInt(playerid, "ColorElement_B"), val);
3092 TextDrawBoxColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR]);
3093
3094 format(string, sizeof (string), "TDEditor: Цвет box'а текстдрава #%i изменён на {%06x}Предпросмотр цвета", textdrawid, (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR] >>> 8));
3095 }
3096
3097 case EDITING_BACKGROUND_COLOR: {
3098 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR] = RGBA(GetPVarInt(playerid, "ColorElement_R"), GetPVarInt(playerid, "ColorElement_G"), GetPVarInt(playerid, "ColorElement_B"), val);
3099 TextDrawBackgroundColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR]);
3100
3101 format(string, sizeof (string), "TDEditor: Цвет обводки/тени текстдрава #%i изменён на {%06x}Предпросмотр цвета", textdrawid, (groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR] >>> 8));
3102 }
3103 }
3104
3105 DeletePVar(playerid, "ColorElement");
3106 DeletePVar(playerid, "ColorElement_R");
3107 DeletePVar(playerid, "ColorElement_G");
3108 DeletePVar(playerid, "ColorElement_B");
3109 DeletePVar(playerid, "ColorElement_A");
3110
3111 if (groupData[groupid][E_GROUP_VISIBLE]) {
3112 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
3113 }
3114
3115 playerEditing[playerid] = EDITING_NONE;
3116 SendClientMessage(playerid, MESSAGE_COLOR, string);
3117
3118 return ShowPlayerTextDrawDialog(playerid, textdrawid);
3119 }
3120 }
3121 }
3122 }
3123
3124 switch (GetPVarInt(playerid, "ColorElement")) {
3125 case 0: {
3126 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_RED"КРАСНОГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3127 }
3128
3129 case 1: {
3130 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_GREEN"ЗЕЛЁНОГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3131 }
3132
3133 case 2: {
3134 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_BLUE"СИНЕГО"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3135 }
3136
3137 case 3: {
3138 return Dialog_Show(playerid, CUSTOM_RGBA_COLOR, DIALOG_STYLE_INPUT, "TDEditor: Ввести свой RGBA цвет", ""COL_WHITE"Введите значение элемента цвета для "COL_GREY"ПРОЗРАЧНОСТИ"COL_WHITE" ниже.\n\n"COL_WHITE"Максимальное значение цветового компонента может быть 255.", "Далее", "Назад");
3139 }
3140 }
3141 return 1;
3142}
3143
3144Dialog:COLOR_MENU(playerid, response, listitem, inputtext[]) {
3145 if (!response) {
3146 switch (playerEditing[playerid]) {
3147 case EDITING_BACKGROUND_COLOR: {
3148 return dialog_TEXTDRAW_MENU(playerid, 1, 6, "\1");
3149 }
3150
3151 case EDITING_TEXTDRAW_COLOR: {
3152 return dialog_TEXTDRAW_MENU(playerid, 1, 8, "\1");
3153 }
3154
3155 case EDITING_BOX_COLOR: {
3156 return dialog_TEXTDRAW_MENU(playerid, 1, 11, "\1");
3157 }
3158 }
3159 }
3160
3161 new groupid = playerCurrentGroup[playerid];
3162 new textdrawid = playerCurrentTextDraw[playerid];
3163
3164 new string[150];
3165 switch (playerEditing[playerid]) {
3166 case EDITING_TEXTDRAW_COLOR: {
3167 TextDrawColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], COLORS[listitem][E_COLOR_CODE]);
3168 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_COLOR] = COLORS[listitem][E_COLOR_CODE];
3169
3170 format(string, sizeof (string), "TDEditor: Цвет текстдрава #%i изменён на {%06x}%s", textdrawid, (COLORS[listitem][E_COLOR_CODE] >>> 8), COLORS[listitem][E_COLOR_NAME]);
3171 }
3172
3173 case EDITING_BOX_COLOR: {
3174 TextDrawBoxColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], COLORS[listitem][E_COLOR_CODE]);
3175 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BOX_COLOR] = COLORS[listitem][E_COLOR_CODE];
3176
3177 format(string, sizeof (string), "TDEditor: Цвет box'а текстдрава #%i изменён на {%06x}%s", textdrawid, (COLORS[listitem][E_COLOR_CODE] >>> 8), COLORS[listitem][E_COLOR_NAME]);
3178 }
3179
3180 case EDITING_BACKGROUND_COLOR: {
3181 TextDrawBackgroundColor(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], COLORS[listitem][E_COLOR_CODE]);
3182 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_BACKGROUND_COLOR] = COLORS[listitem][E_COLOR_CODE];
3183
3184 format(string, sizeof (string), "TDEditor: Цвет обводки/тени текстдрава #%i изменён на {%06x}%s", textdrawid, (COLORS[listitem][E_COLOR_CODE] >>> 8), COLORS[listitem][E_COLOR_NAME]);
3185 }
3186 }
3187
3188 if (groupData[groupid][E_GROUP_VISIBLE]) {
3189 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
3190 }
3191
3192 playerEditing[playerid] = EDITING_NONE;
3193 SendClientMessage(playerid, MESSAGE_COLOR, string);
3194
3195 return ShowPlayerTextDrawDialog(playerid, textdrawid);
3196}
3197
3198Dialog:PREVIEW_MODEL_OPTIONS(playerid, response, listitem, inputtext[]) {
3199 if (!response) {
3200 return ShowPlayerTextDrawDialog(playerid, playerCurrentTextDraw[playerid]);
3201 }
3202
3203 switch (listitem) {
3204 case 0: {
3205 Dialog_Show(playerid, SEARCH_PREVIEW_MODEL, DIALOG_STYLE_INPUT, "TDEditor: Изменить превью модель", ""COL_WHITE"Введите точный "COL_GREEN"ID МОДЕЛИ"COL_WHITE", или "COL_GREEN"НАЗВАНИЕ ОБЪЕКТА"COL_WHITE", или какую-то подсказку, чтобы мы смогли найти все связаные модели объектов и дать вам список!", "Поиск", "Назад");
3206 }
3207
3208 case 1: {
3209 playerEditing[playerid] = EDITING_PREVIEW_ROT;
3210 playerEditingTimer[playerid] = SetTimerEx("OnPlayerTimerUpdate", 200, true, "i", playerid);
3211 if (showTextDrawCmds) {
3212 PlayerTextDrawSetString(playerid, playerEditingTextDraw[playerid], "~w~Подождите...");
3213 PlayerTextDrawShow(playerid, playerEditingTextDraw[playerid]);
3214 }
3215
3216 TogglePlayerControllable(playerid, false);
3217 }
3218
3219 case 2: {
3220 new groupid = playerCurrentGroup[playerid];
3221 new textdrawid = playerCurrentTextDraw[playerid];
3222
3223 new string[256];
3224 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ X"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-X: "COL_WHITE"%0.2f", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X]);
3225 Dialog_Show(playerid, INPUT_ROTATION, DIALOG_STYLE_INPUT, "TDEditor: Ввод X, Y, Z, Масштаба вручную", string, "Далее", "Назад");
3226
3227 SetPVarInt(playerid, "RotationType", 0);
3228 }
3229 }
3230 return 1;
3231}
3232
3233Dialog:SEARCH_PREVIEW_MODEL(playerid, response, listitem, inputtext[]) {
3234 if (!response) {
3235 return dialog_TEXTDRAW_MENU(playerid, 1, 13, "\1");
3236 }
3237
3238 new name[32];
3239 if (sscanf(inputtext, "s[32]", name)) {
3240 return Dialog_Show(playerid, SEARCH_PREVIEW_MODEL, DIALOG_STYLE_INPUT, "TDEditor: Поиск по модели", ""COL_WHITE"Введите точный "COL_GREEN"ID МОДЕЛИ"COL_WHITE", или "COL_GREEN"НАЗВАНИЕ ОБЪЕКТА"COL_WHITE", или какую-то подсказку, чтобы мы смогли найти все связаные модели объектов и дать вам список!\n\n"COL_RED"Ошибка: "COL_GREY"Название модели не введено.", "Поиск", "Назад");
3241 }
3242
3243 if (!sscanf(name, "{i}")) {
3244 new modelid = strval(name);
3245 if (modelid < 0 || modelid >= 44764) {
3246 return Dialog_Show(playerid, SEARCH_PREVIEW_MODEL, DIALOG_STYLE_INPUT, "TDEditor: Поиск по модели", ""COL_WHITE"Введите точный "COL_GREEN"ID МОДЕЛИ"COL_WHITE", или "COL_GREEN"НАЗВАНИЕ ОБЪЕКТА"COL_WHITE", или какую-то подсказку, чтобы мы смогли найти все связаные модели объектов и дать вам список!\n\n"COL_RED"Ошибка: "COL_GREY"Недопустимый ID модели, должен находиться в диапазоне от 0 до 44764.", "Поиск", "Назад");
3247 }
3248
3249 return dialog_CHOOSE_PREVIEW_MODEL(playerid, 1, 0, name);
3250 }
3251 else {
3252 new DB:db = db_open(PATH_OBJECTS_FILE);
3253 if (!db) {
3254 return Dialog_Show(playerid, SEARCH_PREVIEW_MODEL, DIALOG_STYLE_INPUT, "TDEditor: Поиск по модели", ""COL_WHITE"Введите точный "COL_GREEN"ID МОДЕЛИ"COL_WHITE", или "COL_GREEN"НАЗВАНИЕ ОБЪЕКТА"COL_WHITE", или какую-то подсказку, чтобы мы смогли найти все связаные модели объектов и дать вам список!\n\n"COL_RED"Ошибка: "COL_GREY"Файл бд \"allbuildings.db\" не найден в scriptfiles.", "Поиск", "Назад");
3255 }
3256
3257 #define MAX_SEARCH_ITEMS 100
3258
3259 new string[256];
3260 format(string, sizeof (string), "SELECT * FROM models WHERE name LIKE '%s%q%s' LIMIT %i", "%", name, "%", MAX_SEARCH_ITEMS);
3261 new DBResult:result = db_query(db, string);
3262 if (!result) {
3263 db_close(db);
3264 return Dialog_Show(playerid, SEARCH_PREVIEW_MODEL, DIALOG_STYLE_INPUT, "TDEditor: Поиск по модели", ""COL_WHITE"Введите точный "COL_GREEN"ID МОДЕЛИ"COL_WHITE", или "COL_GREEN"НАЗВАНИЕ ОБЪЕКТА"COL_WHITE", или какую-то подсказку, чтобы мы смогли найти все связаные модели объектов и дать вам список!\n\n"COL_RED"Ошибка: "COL_GREY"При выполнении запроса что-то пошло не так, попробуйте еще раз.", "Поиск", "Назад");
3265 }
3266
3267 if (db_num_rows(result) == 0) {
3268 db_free_result(result);
3269 db_close(db);
3270 return Dialog_Show(playerid, SEARCH_PREVIEW_MODEL, DIALOG_STYLE_INPUT, "TDEditor: Поиск по модели", ""COL_WHITE"Введите точный "COL_GREEN"ID МОДЕЛИ"COL_WHITE", или "COL_GREEN"НАЗВАНИЕ ОБЪЕКТА"COL_WHITE", или какую-то подсказку, чтобы мы смогли найти все связаные модели объектов и дать вам список!\n\n"COL_RED"Ошибка: "COL_GREY"Результаты не найдены, попробуйте другое название.", "Поиск", "Назад");
3271 }
3272
3273 new count;
3274 static info[MAX_SEARCH_ITEMS * (45 + 16)];
3275
3276 info[0] = EOS;
3277
3278 do {
3279 if (count++ == 100) {
3280 break;
3281 }
3282
3283 db_get_field(result, 1, name, sizeof (name));
3284 format(info, sizeof (info), "%s%i\t%s\n", info, db_get_field_int(result, 0), name);
3285 }
3286 while (db_next_row(result));
3287
3288 db_free_result(result);
3289 db_close(db);
3290
3291 return Dialog_Show(playerid, CHOOSE_PREVIEW_MODEL, DIALOG_STYLE_PREVIEW_MODEL, "TDEditor: Поиск по модели", info, "Ок", "Назад");
3292 }
3293}
3294
3295Dialog:CHOOSE_PREVIEW_MODEL(playerid, response, listitem, inputtext[]) {
3296 if (!response) {
3297 return dialog_PREVIEW_MODEL_OPTIONS(playerid, 1, 0, "\1");
3298 }
3299
3300 new modelid = strval(inputtext);
3301
3302 new groupid = playerCurrentGroup[playerid];
3303 new textdrawid = playerCurrentTextDraw[playerid];
3304
3305 TextDrawSetPreviewModel(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], modelid);
3306 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_MODEL] = modelid;
3307 if (groupData[groupid][E_GROUP_VISIBLE]) {
3308 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
3309 }
3310
3311 new string[150];
3312 format(string, sizeof (string), "TDEditor: Превью модель текстдрава #%i изменена на \"%i\"", textdrawid, modelid);
3313 SendClientMessage(playerid, MESSAGE_COLOR, string);
3314 return dialog_TEXTDRAW_MENU(playerid, 1, 13, "\1");
3315}
3316
3317Dialog:INPUT_ROTATION(playerid, response, listitem, inputtext[]) {
3318 new groupid = playerCurrentGroup[playerid];
3319 new textdrawid = playerCurrentTextDraw[playerid];
3320
3321 if (!response) {
3322 new string[256];
3323 switch (GetPVarInt(playerid, "RotationType")) {
3324 case 0: {
3325 DeletePVar(playerid, "RotationType");
3326
3327 return dialog_TEXTDRAW_MENU(playerid, 1, 13, "\1");
3328 }
3329
3330 case 1: {
3331 SetPVarInt(playerid, "RotationType", 0);
3332
3333 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ X"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-X: "COL_WHITE"%0.2f", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X]);
3334 }
3335
3336 case 2: {
3337 SetPVarInt(playerid, "RotationType", 1);
3338
3339 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ Y"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-Y: "COL_WHITE"%0.2f", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y]);
3340 }
3341
3342 case 3: {
3343 SetPVarInt(playerid, "RotationType", 2);
3344
3345 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ Z"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-Z: "COL_WHITE"%0.2f", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z]);
3346 }
3347 }
3348
3349 return Dialog_Show(playerid, INPUT_ROTATION, DIALOG_STYLE_INPUT, "TDEditor: Ввод X, Y, Z, Масштаба вручную", string, "Далее", "Назад");
3350 }
3351
3352 new Float:val = -1.0;
3353 if (sscanf(inputtext, "f", val) || ((GetPVarInt(playerid, "RotationType") == 3) ? (val < 0.0 || val > 100.0) : (val < -360.0 || val > 360.0))) {
3354 new string[256];
3355 switch (GetPVarInt(playerid, "RotationType")) {
3356 case 0: {
3357 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ X"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-X: "COL_WHITE"%0.2f\n\n"COL_RED"Ошибка: "COL_GREY"Значение не введено или выходит за пределы (должно быть в промежутке '-360' - '360')", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X]);
3358 }
3359
3360 case 1: {
3361 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ Y"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-Y: "COL_WHITE"%0.2f\n\n"COL_RED"Ошибка: "COL_GREY"Значение не введено или выходит за пределы (должно быть в промежутке '-360' - '360')", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y]);
3362 }
3363
3364 case 2: {
3365 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ Z"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-Z: "COL_WHITE"%0.2f\n\n"COL_RED"Ошибка: "COL_GREY"Значение не введено или выходит за пределы (должно быть в промежутке '-360' - '360')", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z]);
3366 }
3367
3368 case 3: {
3369 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"МАСШТАБА"COL_WHITE" превью модели.\n\n"COL_YELLOW"Текущий масштаб: "COL_WHITE"%0.2f\n\n"COL_RED"Ошибка: "COL_GREY"Значение не введено или выходит за пределы (должно быть в промежутке '0' - '100')", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
3370 return Dialog_Show(playerid, INPUT_ROTATION, DIALOG_STYLE_INPUT, "TDEditor: Ввод X, Y, Z, Масштаба вручную", string, "Ок", "Назад");
3371 }
3372 }
3373 return Dialog_Show(playerid, INPUT_ROTATION, DIALOG_STYLE_INPUT, "TDEditor: Ввод X, Y, Z, Масштаба вручную", string, "Далее", "Назад");
3374 }
3375
3376 new string[256];
3377 switch (GetPVarInt(playerid, "RotationType")) {
3378 case 0: {
3379 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X] = val;
3380 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
3381 if (groupData[groupid][E_GROUP_VISIBLE]) {
3382 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
3383 }
3384
3385 SetPVarInt(playerid, "RotationType", 1);
3386
3387 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ Y"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-Y: "COL_WHITE"%0.2f", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y]);
3388 }
3389
3390 case 1: {
3391 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y] = val;
3392 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
3393 if (groupData[groupid][E_GROUP_VISIBLE]) {
3394 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
3395 }
3396
3397 SetPVarInt(playerid, "RotationType", 2);
3398
3399 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"КООРДИНАТЫ Z"COL_WHITE" вращения превью модели.\n\n"COL_YELLOW"Текущая Rot-Z: "COL_WHITE"%0.2f", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z]);
3400 }
3401
3402 case 2: {
3403 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z] = val;
3404 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
3405 if (groupData[groupid][E_GROUP_VISIBLE]) {
3406 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
3407 }
3408
3409 SetPVarInt(playerid, "RotationType", 3);
3410
3411 format(string, sizeof(string), ""COL_WHITE"Введите дробное значение для "COL_GREEN"МАСШТАБА"COL_WHITE" превью модели.\n\n"COL_YELLOW"Текущий масштаб: "COL_WHITE"%0.2f", groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
3412 return Dialog_Show(playerid, INPUT_ROTATION, DIALOG_STYLE_INPUT, "TDEditor: Ввод X, Y, Z, Масштаба вручную", string, "Ок", "Назад");
3413 }
3414
3415 case 3: {
3416 groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM] = val;
3417 TextDrawSetPreviewRot(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_X], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Y], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_Z], groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_PREVIEW_ROT_ZOOM]);
3418 if (groupData[groupid][E_GROUP_VISIBLE]) {
3419 TextDrawShowForAll(groupTextDrawData[groupid][textdrawid][E_TEXTDRAW_ID]);
3420 }
3421
3422 DeletePVar(playerid, "RotationType");
3423
3424 return dialog_TEXTDRAW_MENU(playerid, 1, 13, "\1");
3425 }
3426 }
3427
3428 return Dialog_Show(playerid, INPUT_ROTATION, DIALOG_STYLE_INPUT, "TDEditor: Ввод X, Y, Z, Масштаба вручную", string, "Далее", "Назад");
3429}