· 9 years ago · Dec 18, 2016, 01:34 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 SetTagNumberForPlayer(playerid);
200 return 1;
201}
202
203// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
204
205public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
206{
207 if(dialogid == DIALOG_MODIFIER)
208 {
209 if(response)
210 {
211 switch(listitem)
212 {
213 case 0: ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_INPUT, "Message", "Enter the text's tag (19 characters max.)", "Ok", "Cancel");
214 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");
215 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");
216 case 3: ReloadTag(CurrentTag[playerid]), EditDynamicObject(playerid, p_Tag[CurrentTag[playerid]][tID]);
217 case 4: ReloadTag(CurrentTag[playerid]), Editing[playerid] = false;
218 default: printf("Debug ~ Error DIALOG_MODIFIER (Playerid:%i)", playerid);
219 }
220 }
221 else if(!Editing[playerid])
222 CancelTag(playerid);
223 else
224 return 1;
225 }
226
227 if(dialogid == DIALOG_TEXT)
228 {
229 if(response)
230 {
231 if(strlen(inputtext) > 19)
232 return SCM(playerid, RED, "[Error] {ffffff}The text can not be highter than 19 characters.");
233
234 format(p_Tag[CurrentTag[playerid]][tText], 20, inputtext);
235 if(!Editing[playerid])
236 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");
237 else
238 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", "");
239
240 }
241 else if(!Editing[playerid])
242 CancelTag(playerid);
243 else
244 return 1;
245 }
246
247 if(dialogid == DIALOG_POLICE)
248 {
249 if(response)
250 {
251 switch(listitem)
252 {
253 case 0: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Arial");
254 case 1: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Comic Sans MS");
255 case 2: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Microsoft Sans Serif");
256 case 3: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Adobe Devanagari");
257 case 4: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Brush Script Std");
258 case 5: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "GrilledCheese BTN Toasted");
259 default : format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Arial");
260 }
261 if(!Editing[playerid])
262 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");
263 else
264 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", "");
265 }
266 else if(!Editing[playerid])
267 CancelTag(playerid);
268 else
269 return 1;
270 }
271
272 if(dialogid == DIALOG_COLOR)
273 {
274 if(response)
275 {
276 p_Tag[CurrentTag[playerid]][tColor] = listitem;
277
278 if(!Editing[playerid])
279 {
280 new string[110];
281 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]));
282 ShowPlayerDialog(playerid, DIALOG_FIN, DIALOG_STYLE_MSGBOX, "Recap", string, "Ok", "Cancel");
283 }
284 else
285 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", "");
286 }
287
288 else if(!Editing[playerid])
289 CancelTag(playerid);
290 else
291 return 1;
292 }
293
294 if(dialogid == DIALOG_FIN)
295 {
296 if(response)
297 {
298 new Float:x,
299 Float:y,
300 Float:z;
301
302 GetPlayerPos(playerid, x, y, z);
303 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)));
304 Editing[playerid] = true;
305 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);
306 EditDynamicObject(playerid, p_Tag[CurrentTag[playerid]][tID]);
307 return 1;
308 }
309
310 else if(!Editing[playerid])
311 CancelTag(playerid);
312 else
313 return 1;
314 }
315 return 1;
316}
317
318// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
319
320public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
321{
322 if(Editing[playerid] && response == EDIT_RESPONSE_FINAL)
323 {
324 p_Tag[CurrentTag[playerid]][tPosX] = x;
325 p_Tag[CurrentTag[playerid]][tPosY] = y;
326 p_Tag[CurrentTag[playerid]][tPosZ] = z;
327 p_Tag[CurrentTag[playerid]][tRX] = rx;
328 p_Tag[CurrentTag[playerid]][tRY] = ry;
329 p_Tag[CurrentTag[playerid]][tRZ] = rz;
330 Editing[playerid] = false;
331 DestroyDynamicObject(p_Tag[CurrentTag[playerid]][tID]);
332 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)));
333 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);
334
335 if(!p_Tag[CurrentTag[playerid]][tExist])
336 {
337 new query[400],
338 name[MAX_PLAYER_NAME];
339 GetPlayerName(playerid, name, sizeof(name));
340 mysql_format(MySQL, query, sizeof(query), "INSERT INTO `Tag` (`Owner`, `Text`) VALUES ('%s', '%s')", name, p_Tag[CurrentTag[playerid]][tText]);
341 p_Tag[CurrentTag[playerid]][tExist] = true;
342 format(p_Tag[CurrentTag[playerid]][tOwner], MAX_PLAYER_NAME, "%s", name);
343 mysql_tquery(MySQL, query, "OnTagCreated", "i", CurrentTag[playerid]);
344 PlayerTag[playerid]++;
345 }
346 else
347 SaveTag(CurrentTag[playerid]);
348 }
349}
350
351PUBLIC:OnTagCreated(tagid)
352{
353 p_Tag[tagid][tSQLIB] = cache_insert_id();
354 SaveTag(tagid);
355}
356
357// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
358
359#define IsHolding(%0) \
360 ((newkeys & (%0)) == (%0))
361
362public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
363{
364 if(IsHolding(KEY_FIRE))
365 {
366 TimeHold[playerid] = gettime();
367 IsHolding[playerid] = true;
368 }
369 else if(IsHolding[playerid] && (gettime() - TimeHold[playerid]) >= TIME_SPRAY && GetPlayerWeapon(playerid) == 41)
370 {
371 IsHolding[playerid] = false;
372 if((CurrentTag[playerid] = GetNearestTag(playerid)) != INVALID_TAG_ID)
373 {
374 Editing[playerid] = true;
375 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", "");
376 return 1;
377 }
378 else
379 {
380 CurrentTag[playerid] = GetFreeTagSlot();
381 if(PlayerTag[playerid] >= MAX_TAG_PER_PLAYER)
382 return SCM(playerid, RED, "[Error] {ffffff}You have reached the tag limit.");
383 if(TagNumber+1 < MAX_TAG)
384 ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_INPUT, "Message", "Enter the text's tag", "Ok", "Cancel");
385 else
386 return CurrentTag[playerid] = 0, SCM(playerid, RED, "The number of tag has reached the limit. You can not create a new one.");
387 return 1;
388 }
389 }
390 else
391 {
392 TimeHold[playerid] = 0;
393 IsHolding[playerid] = false;
394 }
395 return 1;
396}
397
398// ================================================================================================================================================================================================================================================
399
400CMD:edittag(playerid, params[])
401{
402 if(!IsPlayerAdmin(playerid))
403 return 0;
404
405 if(sscanf(params, "i", CurrentTag[playerid]))
406 return SCM(playerid, LBLUE, "/edittag [TagID]");
407 if(!p_Tag[CurrentTag[playerid]][tExist])
408 return SCM(playerid, RED, "[Error] {ffffff}Wrong tag id.");
409 Editing[playerid] = true;
410
411 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", "");
412 return 1;
413}
414
415CMD:deltag(playerid, params[])
416{
417 if(!IsPlayerAdmin(playerid))
418 return 0;
419
420 new tagid;
421
422 if(sscanf(params, "i", tagid))
423 return SCM(playerid, LBLUE, "/deltag [TagID]");
424
425 if(!p_Tag[tagid][tExist])
426 return SCM(playerid, RED, "[Error] {ffffff}Wrong tag id.");
427 new
428 name[MAX_PLAYER_NAME];
429
430 DestroyDynamicObject(p_Tag[tagid][tID]);
431
432 for(new i; i < MAX_PLAYERS; i++)
433 {
434 if(!IsPlayerConnected(i))
435 continue;
436 GetPlayerName(i, name, sizeof(name));
437 if(!strcmp(p_Tag[tagid][tOwner], name))
438 {
439 PlayerTag[i]--;
440 break;
441 }
442 }
443 new query[45];
444 mysql_format(MySQL, query, sizeof(query), "DELETE FROM `Tag` WHERE `SQLIB` = '%d'", p_Tag[tagid][tSQLIB]);
445 mysql_query(MySQL, query, false);
446 CurrentTag[playerid] = tagid;
447 CancelTag(playerid);
448 SCM(playerid, -1, "Tag deleted");
449 return 1;
450}
451
452// ================================================================================================================================================================================================================================================
453
454ReloadTag(tagid)
455{
456 if(!p_Tag[tagid][tExist])
457 return printf("[Error] Tag ID %i doesn't exist.", tagid);
458
459 DestroyDynamicObject(p_Tag[tagid][tID]);
460 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]);
461 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);
462 return 1;
463}
464
465SetTagNumberForPlayer(playerid)
466{
467 new Name[MAX_PLAYER_NAME];
468 GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
469 for(new i; i < TagNumber; i++)
470 {
471 if(!p_Tag[i][tExist])
472 continue;
473
474 if(!strcmp(p_Tag[i][tOwner], Name))
475 PlayerTag[playerid]++;
476 }
477 return 1;
478}
479
480GetNearestTag(playerid, Float:range = 3.0)
481{
482 new Float:distance = 999.0,
483 tag = INVALID_TAG_ID,
484 Float:a;
485
486 for(new i; i <= TagNumber; i++)
487 {
488 if(!p_Tag[i][tExist])
489 continue;
490 a = GetPlayerDistanceFromPoint(playerid, p_Tag[i][tPosX], p_Tag[i][tPosY], p_Tag[i][tPosZ]);
491 if(a > distance && a < range || a > range)
492 continue;
493 else
494 distance = a, tag = i;
495 }
496 return tag;
497}
498
499GetFreeTagSlot()
500{
501 for(new i=1; i < MAX_TAG; i++)
502 {
503 if(!p_Tag[i][tExist])
504 return i;
505 }
506 return INVALID_TAG_ID;
507}
508
509SaveTag(tagid)
510{
511 new query[400 + EOS];
512 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'");
513 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]);
514 mysql_query(MySQL, query);
515 return 1;
516}
517
518CancelTag(playerid)
519{
520 p_Tag[CurrentTag[playerid]][tID] = 0;
521 p_Tag[CurrentTag[playerid]][tSQLIB] = 0;
522 p_Tag[CurrentTag[playerid]][tColor] = -1;
523 p_Tag[CurrentTag[playerid]][tPosX] = 0.0;
524 p_Tag[CurrentTag[playerid]][tPosY] = 0.0;
525 p_Tag[CurrentTag[playerid]][tPosZ] = 0.0;
526 p_Tag[CurrentTag[playerid]][tRX] = 0.0;
527 p_Tag[CurrentTag[playerid]][tRY] = 0.0;
528 p_Tag[CurrentTag[playerid]][tRZ] = 0.0;
529 p_Tag[CurrentTag[playerid]][tVW] = 0;
530 p_Tag[CurrentTag[playerid]][tInterior] = 0;
531 p_Tag[CurrentTag[playerid]][tExist] = false;
532 Editing[playerid] = false;
533 format(p_Tag[CurrentTag[playerid]][tText], 20, "%s", EOS);
534 format(p_Tag[CurrentTag[playerid]][tOwner], 24, "%s", EOS);
535 format(p_Tag[CurrentTag[playerid]][tPolice], 30, "%s", EOS);
536}
537
538GetxColorByID(colorid)
539{
540 switch(colorid)
541 {
542 case 0: return 0xFFFF0000;
543 case 1: return 0xFF99CCFF;
544 case 2: return 0xFF008000;
545 case 3: return 0xFF9E3E3E;
546 case 4: return 0xFFFF6600;
547 }
548 return 1;
549}
550
551GetColorByID(colorid)
552{
553 static colorstr[50] = WHITE_U"Unknown";
554 switch(colorid)
555 {
556 case 0:
557 {
558 format(colorstr, sizeof(colorstr), RED_U"Red");
559 return colorstr;
560 }
561 case 1:
562 {
563 format(colorstr, sizeof(colorstr), BLUE_U"Blue");
564 return colorstr;
565 }
566 case 2:
567 {
568 format(colorstr, sizeof(colorstr), GREEN_U"Green");
569 return colorstr;
570 }
571 case 3:
572 {
573 format(colorstr, sizeof(colorstr), BROWN_U"Brown");
574 return colorstr;
575 }
576 case 4:
577 {
578 format(colorstr, sizeof(colorstr), ORANGE_U"Orange");
579 return colorstr;
580 }
581 }
582 return colorstr;
583}