· 9 years ago · Dec 18, 2016, 01:48 PM
1/*
2 -------------------------------------------
3 * Tag Filterscript made by Dayrion
4
5 * Inclued required :
6 - a_samp by SA:MP teams
7 - sscanf by Y_Less
8 - streamer by Incognito
9 - a_mysql by BlueG
10 - zcmd by Zeex
11 or
12 - izcmd by Yashas
13
14 - /edittag [Tagid]
15 » Allows you edit any tag even if you are not in range
16 - /deltag [Tagid]
17 » Delete a tag
18 -------------------------------------------
19*/
20
21#include <a_samp>
22#include <sscanf>
23#include <streamer>
24#include <a_mysql>
25
26#tryinclude <zcmd>
27#if !defined CMD
28 #tryinclude <izcmd>
29 #if !defined CMD
30 #error "izcmd or zcmd can not be included."
31 #endif
32#endif
33
34#define RED_U "{FF0000}"
35#define WHITE_U "{FFFFFF}"
36#define BLUE_U "{66A3FF}"
37#define LBLUE_U "{99D6FF}"
38#define GREEN_U "{39AC39}"
39#define BROWN_U "{9E3E3E}"
40#define ORANGE_U "{ffc34d}"
41#define SAUMON_U "{FF4D4D}"
42#define RED 0xFF0000FF
43#define WHITE 0xFFFFFFFF
44#define BLUE 0x99CCFFFF
45#define LBLUE 0x99D6FFFF
46#define GREEN 0x008000FF
47#define BROWN 0x9E3E3EFF
48#define SAUMON 0xFF4D4DFF
49#define ORANGE 0xff6600FF
50#define GOLD 0xFFBB33FF
51
52#define SCM SendClientMessage
53#define PUBLIC:%0(%1) forward %0(%1); public %0(%1)
54#define MYSQL_HOST "localhost"
55#define MYSQL_USER "root"
56#define MYSQL_DATABASE "myserver"
57#define MYSQL_PASSWORD ""
58
59#define OBJECT_WALL 19362
60#define MAX_TAG 50 // total
61#define INVALID_TAG_ID MAX_TAG+1*4
62#define MAX_TAG_PER_PLAYER 1
63#define TIME_SPRAY 2 // seconds
64
65#define MAX_POLICE_LENGTH 30 // characters - If you change this, change the lengh of 'Police' line 108
66#define MAX_TEXT_LENGTH 20 // characters - If you change this, change the lengh of 'Text' line 107
67#define FONT_SIZE 14
68#define BOLD_TEXT false
69#define TEXT_ALIGNEMENT 1 // 0 : left | 1 : center | 2 : right
70
71// ================================================================================================================================================================================================================================================
72
73enum _:Dialog
74{
75 DIALOG_MODIFIER = 52,
76 DIALOG_TEXT,
77 DIALOG_MENU_CREER,
78 DIALOG_MENU_MODIFIER,
79 DIALOG_POLICE,
80 DIALOG_COLOR,
81 DIALOG_FIN
82};
83
84static MySQL:MySQL;
85
86enum e_Tag
87{
88 tID,
89 tSQLIB,
90 tOwner[MAX_PLAYER_NAME],
91 tText[MAX_TEXT_LENGTH + EOS],
92 tPolice[MAX_POLICE_LENGTH + EOS],
93 tColor,
94 Float:tPosX,
95 Float:tPosY,
96 Float:tPosZ,
97 Float:tRX,
98 Float:tRY,
99 Float:tRZ,
100 tVW,
101 tInterior,
102 bool:tExist
103};
104
105new p_Tag[MAX_TAG][e_Tag],
106 bool:Editing[MAX_PLAYERS],
107 TimeHold[MAX_PLAYERS],
108 bool:IsHolding[MAX_PLAYERS],
109 TagNumber,
110 CurrentTag[MAX_PLAYERS],
111 PlayerTag[MAX_PLAYERS];
112
113// ================================================================================================================================================================================================================================================
114
115public OnFilterScriptInit()
116{
117 print("\n--------------------------------------");
118 print(" [Initialization] Tag script by Dayrion");
119 print("--------------------------------------\n");
120
121 new MySQLOpt: option_id = mysql_init_options();
122
123 mysql_set_option(option_id, AUTO_RECONNECT, true);
124
125 MySQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
126
127 if(MySQL == MYSQL_INVALID_HANDLE || mysql_errno(MySQL) != 0)
128 {
129 print("[FS] Cannont connect to MySQL");
130 SendRconCommand("unloadfs tag");
131 return 1;
132 }
133
134 new query[590];
135 format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `Tag` (`SQLIB` INTEGER PRIMARY KEY AUTO_INCREMENT, `ID` INT NOT NULL DEFAULT '0', `Owner` VARCHAR(25) NOT NULL DEFAULT '', `Text` VARCHAR(21) NOT NULL DEFAULT '', `x` FLOAT NOT NULL DEFAULT '0.0', `y` FLOAT NOT NULL DEFAULT '0.0', `z` FLOAT NOT NULL DEFAULT '0.0', `rX` FLOAT NOT NULL DEFAULT '0.0'");
136 strcat(query, ", `rY` FLOAT NOT NULL DEFAULT '0.0', `rZ` FLOAT NOT NULL DEFAULT '0.0', `Police` VARCHAR(31) NOT NULL DEFAULT '', `VirtualWorld` INT NOT NULL DEFAULT '0', `Interior` INT NOT NULL DEFAULT '0', `Exist` INT NOT NULL DEFAULT '0', `Color` INT NOT NULL DEFAULT '0')");
137 mysql_query(MySQL, query);
138 mysql_pquery(MySQL, "SELECT * FROM Tag", "OnTagLoading", "");
139
140 return 1;
141}
142
143public OnFilterScriptExit()
144{
145 for(new i, j = MAX_TAG; i < j; i++)
146 {
147 DestroyDynamicObject(p_Tag[i][tID]);
148 if(p_Tag[i][tExist])
149 SaveTag(i);
150 }
151 mysql_close();
152 print("\n--------------------------------------");
153 print(" [Closing] Tag script unloaded");
154 print("--------------------------------------\n");
155 return 1;
156}
157
158PUBLIC:OnTagLoading()
159{
160 for(new i, tagid = 1, j = cache_num_rows(); i != j; i++, tagid++)
161 {
162 cache_get_value_int(i, "SQLIB", p_Tag[tagid][tSQLIB]);
163 cache_get_value(i, "Owner", p_Tag[tagid][tOwner], MAX_PLAYER_NAME);
164 cache_get_value(i, "Text", p_Tag[tagid][tText], MAX_TEXT_LENGTH);
165 cache_get_value_float(i, "x", p_Tag[tagid][tPosX]);
166 cache_get_value_float(i, "y", p_Tag[tagid][tPosY]);
167 cache_get_value_float(i, "z", p_Tag[tagid][tPosZ]);
168 cache_get_value_float(i, "rX", p_Tag[tagid][tRX]);
169 cache_get_value_float(i, "rY", p_Tag[tagid][tRY]);
170 cache_get_value_float(i, "rZ", p_Tag[tagid][tRZ]);
171 cache_get_value(i, "Police", p_Tag[tagid][tPolice], MAX_POLICE_LENGTH);
172 cache_get_value_int(i, "VirtualWorld", p_Tag[tagid][tVW]);
173 cache_get_value_int(i, "Color", p_Tag[tagid][tColor]);
174 cache_get_value_int(i, "Interior", p_Tag[tagid][tInterior]);
175 cache_get_value_int(i, "Exist", bool:p_Tag[tagid][tExist]);
176
177 p_Tag[tagid][tID] = CreateDynamicObject(OBJECT_WALL, p_Tag[tagid][tPosX], p_Tag[tagid][tPosY], p_Tag[tagid][tPosZ], p_Tag[tagid][tRX], p_Tag[tagid][tRY], p_Tag[tagid][tRZ], p_Tag[tagid][tVW], p_Tag[tagid][tInterior]);
178 SetDynamicObjectMaterialText(p_Tag[tagid][tID], 0, p_Tag[tagid][tText], OBJECT_MATERIAL_SIZE_128x64, p_Tag[tagid][tPolice], FONT_SIZE, BOLD_TEXT, GetxColorByID(p_Tag[tagid][tColor]), _, TEXT_ALIGNEMENT);
179 printf("» Tag ID %i loaded.", tagid);
180 TagNumber++;
181 }
182
183 for(new i, j = MAX_PLAYERS; i < j; i++)
184 {
185 if(!IsPlayerConnected(i))
186 continue;
187
188 IsHolding[i] = false;
189 TimeHold[i] = 0;
190 SetTagNumberForPlayer(i);
191 }
192 printf("\n[Initialization] Loading ended. %i tag loaded.", TagNumber);
193}
194
195// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
196
197public OnPlayerConnect(playerid)
198{
199 IsHolding[playerid] = false;
200 TimeHold[playerid] = 0;
201 SetTagNumberForPlayer(playerid);
202 return 1;
203}
204
205// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
206
207public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
208{
209 if(dialogid == DIALOG_MODIFIER)
210 {
211 if(response)
212 {
213 switch(listitem)
214 {
215 case 0: ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_INPUT, "Message", "Enter the text's tag (19 characters max.)", "Ok", "Cancel");
216 case 1: ShowPlayerDialog(playerid, DIALOG_POLICE, DIALOG_STYLE_LIST, "Choose the font", "» Arial\n» Comic Sans MS\n» Microsoft Sans Serif\n» Adobe Devanagari\n» Brush Script Std\n» GrilledCheese BTN Toasted", "Choose", "Cancel");
217 case 2: ShowPlayerDialog(playerid, DIALOG_COLOR, DIALOG_STYLE_LIST, "Choose the color", RED_U"» Red\n"BLUE_U"» Blue\n"GREEN_U"» Green\n"BROWN_U"» Brown\n"ORANGE_U"» Orange", "Choose", "Cancel");
218 case 3: ReloadTag(CurrentTag[playerid]), EditDynamicObject(playerid, p_Tag[CurrentTag[playerid]][tID]);
219 case 4: ReloadTag(CurrentTag[playerid]), Editing[playerid] = false;
220 default: printf("Debug ~ Error DIALOG_MODIFIER (Playerid:%i)", playerid);
221 }
222 }
223 else if(!Editing[playerid])
224 CancelTag(playerid);
225 else
226 return 1;
227 }
228
229 if(dialogid == DIALOG_TEXT)
230 {
231 if(response)
232 {
233 if(strlen(inputtext) > 19)
234 return SCM(playerid, RED, "[Error] {ffffff}The text can not be highter than 19 characters.");
235
236 format(p_Tag[CurrentTag[playerid]][tText], 20, inputtext);
237 if(!Editing[playerid])
238 ShowPlayerDialog(playerid, DIALOG_POLICE, DIALOG_STYLE_LIST, "Choose the font", "» Arial\n» Comic Sans MS\n» Microsoft Sans Serif\n» Adobe Devanagari\n» Brush Script Std\n» GrilledCheese BTN Toasted", "Choose", "Cancel");
239 else
240 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Edit your tag", "- Enter the tag's text\n- Choose the font\n- Choose the color\n- Position\n- Confirm", "Ok", "");
241
242 }
243 else if(!Editing[playerid])
244 CancelTag(playerid);
245 else
246 return 1;
247 }
248
249 if(dialogid == DIALOG_POLICE)
250 {
251 if(response)
252 {
253 switch(listitem)
254 {
255 case 0: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Arial");
256 case 1: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Comic Sans MS");
257 case 2: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Microsoft Sans Serif");
258 case 3: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Adobe Devanagari");
259 case 4: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Brush Script Std");
260 case 5: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "GrilledCheese BTN Toasted");
261 default : format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Arial");
262 }
263 if(!Editing[playerid])
264 ShowPlayerDialog(playerid, DIALOG_COLOR, DIALOG_STYLE_LIST, "Choose the color", RED_U"» Red\n"BLUE_U"» Blue\n"GREEN_U"» Green\n"BROWN_U"» Brown\n"ORANGE_U"» Orange", "Choose", "Cancel");
265 else
266 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Edit your tag", "- Enter the tag's text\n- Choose the font\n- Choose the color\n- Position\n- Confirm", "Ok", "");
267 }
268 else if(!Editing[playerid])
269 CancelTag(playerid);
270 else
271 return 1;
272 }
273
274 if(dialogid == DIALOG_COLOR)
275 {
276 if(response)
277 {
278 p_Tag[CurrentTag[playerid]][tColor] = listitem;
279
280 if(!Editing[playerid])
281 {
282 new string[110];
283 format(string, sizeof(string), "- [ID] %i | [Text] \"%s\" | [Police] \"%s\" | Color: %s", p_Tag[CurrentTag[playerid]][tID], p_Tag[CurrentTag[playerid]][tText], p_Tag[CurrentTag[playerid]][tPolice], GetColorByID(p_Tag[CurrentTag[playerid]][tColor]));
284 ShowPlayerDialog(playerid, DIALOG_FIN, DIALOG_STYLE_MSGBOX, "Recap", string, "Ok", "Cancel");
285 }
286 else
287 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Edit your tag", "- Enter the tag's text\n- Choose the font\n- Choose the color\n- Position\n- Confirm", "Ok", "");
288 }
289
290 else if(!Editing[playerid])
291 CancelTag(playerid);
292 else
293 return 1;
294 }
295
296 if(dialogid == DIALOG_FIN)
297 {
298 if(response)
299 {
300 new Float:x,
301 Float:y,
302 Float:z;
303
304 GetPlayerPos(playerid, x, y, z);
305 p_Tag[CurrentTag[playerid]][tID] = CreateDynamicObject(OBJECT_WALL, x+1.0, y+1.0, z, 0.0, 0.0, 0.0, (p_Tag[CurrentTag[playerid]][tVW] = GetPlayerVirtualWorld(playerid)), (p_Tag[CurrentTag[playerid]][tInterior] = GetPlayerInterior(playerid)));
306 Editing[playerid] = true;
307 SetDynamicObjectMaterialText(p_Tag[CurrentTag[playerid]][tID], 0, p_Tag[CurrentTag[playerid]][tText], OBJECT_MATERIAL_SIZE_128x64, p_Tag[CurrentTag[playerid]][tPolice], FONT_SIZE, BOLD_TEXT, GetxColorByID(p_Tag[CurrentTag[playerid]][tColor]), _, TEXT_ALIGNEMENT);
308 EditDynamicObject(playerid, p_Tag[CurrentTag[playerid]][tID]);
309 return 1;
310 }
311
312 else if(!Editing[playerid])
313 CancelTag(playerid);
314 else
315 return 1;
316 }
317 return 1;
318}
319
320// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
321
322public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
323{
324 if(Editing[playerid] && response == EDIT_RESPONSE_FINAL)
325 {
326 p_Tag[CurrentTag[playerid]][tPosX] = x;
327 p_Tag[CurrentTag[playerid]][tPosY] = y;
328 p_Tag[CurrentTag[playerid]][tPosZ] = z;
329 p_Tag[CurrentTag[playerid]][tRX] = rx;
330 p_Tag[CurrentTag[playerid]][tRY] = ry;
331 p_Tag[CurrentTag[playerid]][tRZ] = rz;
332 Editing[playerid] = false;
333 DestroyDynamicObject(p_Tag[CurrentTag[playerid]][tID]);
334 p_Tag[CurrentTag[playerid]][tID] = CreateDynamicObject(OBJECT_WALL, x, y, z, rx, ry, rz, (p_Tag[CurrentTag[playerid]][tVW] = GetPlayerVirtualWorld(playerid)), (p_Tag[CurrentTag[playerid]][tInterior] = GetPlayerInterior(playerid)));
335 SetDynamicObjectMaterialText(p_Tag[CurrentTag[playerid]][tID], 0, p_Tag[CurrentTag[playerid]][tText], OBJECT_MATERIAL_SIZE_128x64, p_Tag[CurrentTag[playerid]][tPolice], FONT_SIZE, BOLD_TEXT, GetxColorByID(p_Tag[CurrentTag[playerid]][tColor]), _, TEXT_ALIGNEMENT);
336
337 if(!p_Tag[CurrentTag[playerid]][tExist])
338 {
339 new query[400],
340 name[MAX_PLAYER_NAME];
341 GetPlayerName(playerid, name, sizeof(name));
342 mysql_format(MySQL, query, sizeof(query), "INSERT INTO `Tag` (`Owner`, `Text`) VALUES ('%s', '%s')", name, p_Tag[CurrentTag[playerid]][tText]);
343 p_Tag[CurrentTag[playerid]][tExist] = true;
344 format(p_Tag[CurrentTag[playerid]][tOwner], MAX_PLAYER_NAME, "%s", name);
345 mysql_tquery(MySQL, query, "OnTagCreated", "i", CurrentTag[playerid]);
346 PlayerTag[playerid]++;
347 }
348 else
349 SaveTag(CurrentTag[playerid]);
350 }
351}
352
353PUBLIC:OnTagCreated(tagid)
354{
355 p_Tag[tagid][tSQLIB] = cache_insert_id();
356 SaveTag(tagid);
357}
358
359// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
360
361#define IsHolding(%0) \
362 ((newkeys & (%0)) == (%0))
363
364public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
365{
366 if(IsHolding(KEY_FIRE))
367 {
368 TimeHold[playerid] = gettime();
369 IsHolding[playerid] = true;
370 }
371 else if(IsHolding[playerid] && (gettime() - TimeHold[playerid]) >= TIME_SPRAY && GetPlayerWeapon(playerid) == 41)
372 {
373 IsHolding[playerid] = false;
374 if((CurrentTag[playerid] = GetNearestTag(playerid)) != INVALID_TAG_ID)
375 {
376 Editing[playerid] = true;
377 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Edit your tag", "- Enter the tag's text\n- Choose the font\n- Choose the color\n- Position\n- Confirm", "Ok", "");
378 return 1;
379 }
380 else
381 {
382 CurrentTag[playerid] = GetFreeTagSlot();
383 if(PlayerTag[playerid] >= MAX_TAG_PER_PLAYER)
384 return SCM(playerid, RED, "[Error] {ffffff}You have reached the tag limit.");
385 if(TagNumber+1 < MAX_TAG)
386 ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_INPUT, "Message", "Enter the text's tag", "Ok", "Cancel");
387 else
388 return CurrentTag[playerid] = 0, SCM(playerid, RED, "The number of tag has reached the limit. You can not create a new one.");
389 return 1;
390 }
391 }
392 else
393 {
394 TimeHold[playerid] = 0;
395 IsHolding[playerid] = false;
396 }
397 return 1;
398}
399
400// ================================================================================================================================================================================================================================================
401
402CMD:edittag(playerid, params[])
403{
404 if(!IsPlayerAdmin(playerid))
405 return 0;
406
407 if(sscanf(params, "i", CurrentTag[playerid]))
408 return SCM(playerid, LBLUE, "/edittag [TagID]");
409 if(!p_Tag[CurrentTag[playerid]][tExist])
410 return SCM(playerid, RED, "[Error] {ffffff}Wrong tag id.");
411 Editing[playerid] = true;
412
413 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Edit your tag", "- Enter the tag's text\n- Choose the font\n- Choose the color\n- Position\n- Confirm", "Ok", "");
414 return 1;
415}
416
417CMD:deltag(playerid, params[])
418{
419 if(!IsPlayerAdmin(playerid))
420 return 0;
421
422 new tagid;
423
424 if(sscanf(params, "i", tagid))
425 return SCM(playerid, LBLUE, "/deltag [TagID]");
426
427 if(!p_Tag[tagid][tExist])
428 return SCM(playerid, RED, "[Error] {ffffff}Wrong tag id.");
429 new
430 name[MAX_PLAYER_NAME];
431
432 DestroyDynamicObject(p_Tag[tagid][tID]);
433
434 for(new i; i < MAX_PLAYERS; i++)
435 {
436 if(!IsPlayerConnected(i))
437 continue;
438 GetPlayerName(i, name, sizeof(name));
439 if(!strcmp(p_Tag[tagid][tOwner], name))
440 {
441 PlayerTag[i]--;
442 break;
443 }
444 }
445 new query[45];
446 mysql_format(MySQL, query, sizeof(query), "DELETE FROM `Tag` WHERE `SQLIB` = '%d'", p_Tag[tagid][tSQLIB]);
447 mysql_query(MySQL, query, false);
448 CurrentTag[playerid] = tagid;
449 CancelTag(playerid);
450 SCM(playerid, -1, "Tag deleted");
451 return 1;
452}
453
454// ================================================================================================================================================================================================================================================
455
456ReloadTag(tagid)
457{
458 if(!p_Tag[tagid][tExist])
459 return printf("[Error] Tag ID %i doesn't exist.", tagid);
460
461 DestroyDynamicObject(p_Tag[tagid][tID]);
462 p_Tag[tagid][tID] = CreateDynamicObject(OBJECT_WALL, p_Tag[tagid][tPosX], p_Tag[tagid][tPosY], p_Tag[tagid][tPosZ], p_Tag[tagid][tRX], p_Tag[tagid][tRY], p_Tag[tagid][tRZ], p_Tag[tagid][tVW], p_Tag[tagid][tInterior]);
463 SetDynamicObjectMaterialText(p_Tag[tagid][tID], 0, p_Tag[tagid][tText], OBJECT_MATERIAL_SIZE_128x64, p_Tag[tagid][tPolice], FONT_SIZE, BOLD_TEXT, GetxColorByID(p_Tag[tagid][tColor]), _, TEXT_ALIGNEMENT);
464 return 1;
465}
466
467SetTagNumberForPlayer(playerid)
468{
469 new Name[MAX_PLAYER_NAME];
470 GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
471 for(new i; i < TagNumber; i++)
472 {
473 if(!p_Tag[i][tExist])
474 continue;
475
476 if(!strcmp(p_Tag[i][tOwner], Name))
477 PlayerTag[playerid]++;
478 }
479 return 1;
480}
481
482GetNearestTag(playerid, Float:range = 5.0)
483{
484 new Float:distance = 999.0,
485 tag = INVALID_TAG_ID,
486 Float:a;
487
488 for(new i; i <= TagNumber; i++)
489 {
490 if(!p_Tag[i][tExist])
491 continue;
492 a = GetPlayerDistanceFromPoint(playerid, p_Tag[i][tPosX], p_Tag[i][tPosY], p_Tag[i][tPosZ]);
493 if(a > distance && a < range || a > range)
494 continue;
495 else
496 distance = a, tag = i;
497 }
498 return tag;
499}
500
501GetFreeTagSlot()
502{
503 for(new i=1; i < MAX_TAG; i++)
504 {
505 if(!p_Tag[i][tExist])
506 return i;
507 }
508 return INVALID_TAG_ID;
509}
510
511SaveTag(tagid)
512{
513 new query[400 + EOS];
514 strcat(query, "UPDATE `Tag` SET `Owner` = '%s', `Text` = '%s', `Color` = '%d', `x` = '%f', `y` = '%f', `z` = '%f', `rX` = '%f', `rY` = '%f',`rZ` = '%f', `VirtualWorld` = '%d', `Interior` = '%d', `Exist` = '%d', `ID` = '%d', `Police` = '%s' WHERE `SQLIB` = '%d'");
515 mysql_format(MySQL, query, sizeof(query), query, p_Tag[tagid][tOwner], p_Tag[tagid][tText], p_Tag[tagid][tColor], p_Tag[tagid][tPosX], p_Tag[tagid][tPosY], p_Tag[tagid][tPosZ], p_Tag[tagid][tRX], p_Tag[tagid][tRY], p_Tag[tagid][tRZ], p_Tag[tagid][tVW], p_Tag[tagid][tInterior], _:p_Tag[tagid][tExist], p_Tag[tagid][tID], p_Tag[tagid][tPolice], p_Tag[tagid][tSQLIB]);
516 mysql_query(MySQL, query);
517 return 1;
518}
519
520CancelTag(playerid)
521{
522 p_Tag[CurrentTag[playerid]][tID] = 0;
523 p_Tag[CurrentTag[playerid]][tSQLIB] = 0;
524 p_Tag[CurrentTag[playerid]][tColor] = -1;
525 p_Tag[CurrentTag[playerid]][tPosX] = 0.0;
526 p_Tag[CurrentTag[playerid]][tPosY] = 0.0;
527 p_Tag[CurrentTag[playerid]][tPosZ] = 0.0;
528 p_Tag[CurrentTag[playerid]][tRX] = 0.0;
529 p_Tag[CurrentTag[playerid]][tRY] = 0.0;
530 p_Tag[CurrentTag[playerid]][tRZ] = 0.0;
531 p_Tag[CurrentTag[playerid]][tVW] = 0;
532 p_Tag[CurrentTag[playerid]][tInterior] = 0;
533 p_Tag[CurrentTag[playerid]][tExist] = false;
534 Editing[playerid] = false;
535 format(p_Tag[CurrentTag[playerid]][tText], 20, "%s", EOS);
536 format(p_Tag[CurrentTag[playerid]][tOwner], 24, "%s", EOS);
537 format(p_Tag[CurrentTag[playerid]][tPolice], 30, "%s", EOS);
538}
539
540GetxColorByID(colorid)
541{
542 switch(colorid)
543 {
544 case 0: return 0xFFFF0000;
545 case 1: return 0xFF99CCFF;
546 case 2: return 0xFF008000;
547 case 3: return 0xFF9E3E3E;
548 case 4: return 0xFFFF6600;
549 }
550 return 1;
551}
552
553GetColorByID(colorid)
554{
555 static colorstr[50] = WHITE_U"Unknown";
556 switch(colorid)
557 {
558 case 0:
559 {
560 format(colorstr, sizeof(colorstr), RED_U"Red");
561 return colorstr;
562 }
563 case 1:
564 {
565 format(colorstr, sizeof(colorstr), BLUE_U"Blue");
566 return colorstr;
567 }
568 case 2:
569 {
570 format(colorstr, sizeof(colorstr), GREEN_U"Green");
571 return colorstr;
572 }
573 case 3:
574 {
575 format(colorstr, sizeof(colorstr), BROWN_U"Brown");
576 return colorstr;
577 }
578 case 4:
579 {
580 format(colorstr, sizeof(colorstr), ORANGE_U"Orange");
581 return colorstr;
582 }
583 }
584 return colorstr;
585}