· 9 years ago · Dec 21, 2016, 02:10 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 BleuG
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 // secondes
64
65#define MAX_POLICE_LENGTH 30 // caractères
66#define MAX_TEXT_LENGTH 20 // caractères
67#define FONT_SIZE 14
68#define BOLD_TEXT false
69#define TEXT_ALIGNEMENT 1 // 0 : gauche | 1 : centré | 2 : droite
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
84//static 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
122 for(new i, j = MAX_PLAYERS; i < j; i++)
123 {
124 if(!IsPlayerConnected(i))
125 continue;
126
127 IsHolding[i] = false;
128 TimeHold[i] = 0;
129 SetTagNumberForPlayer(i);
130 }
131
132/*
133 new MySQLOpt: option_id = mysql_init_options();
134
135 mysql_set_option(option_id, AUTO_RECONNECT, true);
136
137 MySQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
138
139 if(MySQL == MYSQL_INVALID_HANDLE || mysql_errno(MySQL) != 0)
140 {
141 print("[FS] Cannont connect to MySQL");
142 SendRconCommand("unloadfs tag");
143 return 1;
144 }
145
146 new query[590];
147 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'");
148 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')");
149 mysql_query(MySQL, query);
150 mysql_pquery(MySQL, "SELECT * FROM Tag", "OnTagLoading", ""); */
151
152 return 1;
153}
154
155public OnFilterScriptExit()
156{
157 for(new i, j = MAX_TAG; i < j; i++)
158 {
159 DestroyDynamicObject(p_Tag[i][tID]);
160 if(p_Tag[i][tExist])
161 SaveTag(i);
162 }
163 print("\n--------------------------------------");
164 print(" [Closing] Tag script unloaded");
165 print("--------------------------------------\n");
166 return 1;
167}
168/*
169PUBLIC:OnTagLoading()
170{
171 for(new i, tagid = 1, j = cache_num_rows(); i != j; i++, tagid++)
172 {
173 cache_get_value_int(i, "SQLIB", p_Tag[tagid][tSQLIB]);
174 cache_get_value(i, "Owner", p_Tag[tagid][tOwner], MAX_PLAYER_NAME);
175 cache_get_value(i, "Text", p_Tag[tagid][tText], MAX_TEXT_LENGTH);
176 cache_get_value_float(i, "x", p_Tag[tagid][tPosX]);
177 cache_get_value_float(i, "y", p_Tag[tagid][tPosY]);
178 cache_get_value_float(i, "z", p_Tag[tagid][tPosZ]);
179 cache_get_value_float(i, "rX", p_Tag[tagid][tRX]);
180 cache_get_value_float(i, "rY", p_Tag[tagid][tRY]);
181 cache_get_value_float(i, "rZ", p_Tag[tagid][tRZ]);
182 cache_get_value(i, "Police", p_Tag[tagid][tPolice], MAX_POLICE_LENGTH);
183 cache_get_value_int(i, "VirtualWorld", p_Tag[tagid][tVW]);
184 cache_get_value_int(i, "Color", p_Tag[tagid][tColor]);
185 cache_get_value_int(i, "Interior", p_Tag[tagid][tInterior]);
186 cache_get_value_int(i, "Exist", bool:p_Tag[tagid][tExist]);
187
188 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]);
189 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);
190 printf("» Tag ID %i loaded.", tagid);
191 TagNumber++;
192 }
193
194 for(new i, j = MAX_PLAYERS; i < j; i++)
195 {
196 if(!IsPlayerConnected(i))
197 continue;
198
199 IsHolding[i] = false;
200 TimeHold[i] = 0;
201 SetTagNumberForPlayer(i);
202 }
203 printf("\n[Initialization] Loading ended. %i tag loaded.", TagNumber);
204}*/
205
206// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
207
208public OnPlayerConnect(playerid)
209{
210 IsHolding[playerid] = false;
211 TimeHold[playerid] = 0;
212 SetTagNumberForPlayer(playerid);
213 return 1;
214}
215
216// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
217
218public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
219{
220 if(dialogid == DIALOG_MODIFIER)
221 {
222 if(response)
223 {
224 switch(listitem)
225 {
226 case 0: ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_INPUT, "Message", "Entrez le texte du tag (19 caractères max.)", "Ok", "Annulez");
227 case 1: ShowPlayerDialog(playerid, DIALOG_POLICE, DIALOG_STYLE_LIST, "Choisissez la police", "» Arial\n» Comic Sans MS\n» Microsoft Sans Serif\n» Adobe Devanagari\n» Brush Script Std\n» GrilledCheese BTN Toasted", "Choisir", "Annulez");
228 case 2: ShowPlayerDialog(playerid, DIALOG_COLOR, DIALOG_STYLE_LIST, "Choisissez la couleur", RED_U"» Rouge\n"BLUE_U"» Bleu\n"GREEN_U"» Vert\n"BROWN_U"» Marron\n"ORANGE_U"» Orange", "Choisir", "Annulez");
229 case 3: ReloadTag(CurrentTag[playerid]), EditDynamicObject(playerid, p_Tag[CurrentTag[playerid]][tID]);
230 case 4: ReloadTag(CurrentTag[playerid]), Editing[playerid] = false;
231 default: printf("Debug ~ Erreur DIALOG_MODIFIER (Playerid:%i)", playerid);
232 }
233 }
234 else if(!Editing[playerid])
235 CancelTag(playerid);
236 else
237 return 1;
238 }
239
240 if(dialogid == DIALOG_TEXT)
241 {
242 if(response)
243 {
244 if(strlen(inputtext) > 19)
245 return SCM(playerid, RED, "[Erreur] {ffffff}Le texte ne peut pas faire plus de 19 carractères.");
246
247 format(p_Tag[CurrentTag[playerid]][tText], 20, inputtext);
248 if(!Editing[playerid])
249 ShowPlayerDialog(playerid, DIALOG_POLICE, DIALOG_STYLE_LIST, "Choisissez la police", "» Arial\n» Comic Sans MS\n» Microsoft Sans Serif\n» Adobe Devanagari\n» Brush Script Std\n» GrilledCheese BTN Toasted", "Choisir", "Annulez");
250 else
251 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Modifier votre tag", "- Entrez le texte du tag\n- Choisissez la police\n- Choisissez la couleur\n- Position\n- Confirm", "Ok", "");
252
253 }
254 else if(!Editing[playerid])
255 CancelTag(playerid);
256 else
257 return 1;
258 }
259
260 if(dialogid == DIALOG_POLICE)
261 {
262 if(response)
263 {
264 switch(listitem)
265 {
266 case 0: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Arial");
267 case 1: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Comic Sans MS");
268 case 2: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Microsoft Sans Serif");
269 case 3: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Adobe Devanagari");
270 case 4: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Brush Script Std");
271 case 5: format(p_Tag[CurrentTag[playerid]][tPolice], 30, "GrilledCheese BTN Toasted");
272 default : format(p_Tag[CurrentTag[playerid]][tPolice], 30, "Arial");
273 }
274 if(!Editing[playerid])
275 ShowPlayerDialog(playerid, DIALOG_COLOR, DIALOG_STYLE_LIST, "Choisissez la couleur", RED_U"» Rouge\n"BLUE_U"» Bleu\n"GREEN_U"» Vert\n"BROWN_U"» Marron\n"ORANGE_U"» Orange", "Choisir", "Annulez");
276 else
277 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Modifier votre tag", "- Entrez le texte du tag\n- Choisissez la police\n- Choisissez la couleur\n- Position\n- Confirm", "Ok", "");
278 }
279 else if(!Editing[playerid])
280 CancelTag(playerid);
281 else
282 return 1;
283 }
284
285 if(dialogid == DIALOG_COLOR)
286 {
287 if(response)
288 {
289 p_Tag[CurrentTag[playerid]][tColor] = listitem;
290
291 if(!Editing[playerid])
292 {
293 new string[110];
294 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]));
295 ShowPlayerDialog(playerid, DIALOG_FIN, DIALOG_STYLE_MSGBOX, "Recap", string, "Ok", "Annulez");
296 }
297 else
298 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Modifier votre tag", "- Entrez le texte du tag\n- Choisissez la police\n- Choisissez la couleur\n- Position\n- Confirm", "Ok", "");
299 }
300
301 else if(!Editing[playerid])
302 CancelTag(playerid);
303 else
304 return 1;
305 }
306
307 if(dialogid == DIALOG_FIN)
308 {
309 if(response)
310 {
311 new Float:x,
312 Float:y,
313 Float:z;
314
315 GetPlayerPos(playerid, x, y, z);
316 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)));
317 Editing[playerid] = true;
318 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);
319 EditDynamicObject(playerid, p_Tag[CurrentTag[playerid]][tID]);
320 return 1;
321 }
322
323 else if(!Editing[playerid])
324 CancelTag(playerid);
325 else
326 return 1;
327 }
328 return 1;
329}
330
331// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
332
333public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
334{
335 if(Editing[playerid] && response == EDIT_RESPONSE_FINAL)
336 {
337 p_Tag[CurrentTag[playerid]][tPosX] = x;
338 p_Tag[CurrentTag[playerid]][tPosY] = y;
339 p_Tag[CurrentTag[playerid]][tPosZ] = z;
340 p_Tag[CurrentTag[playerid]][tRX] = rx;
341 p_Tag[CurrentTag[playerid]][tRY] = ry;
342 p_Tag[CurrentTag[playerid]][tRZ] = rz;
343 Editing[playerid] = false;
344 DestroyDynamicObject(p_Tag[CurrentTag[playerid]][tID]);
345 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)));
346 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);
347
348 if(!p_Tag[CurrentTag[playerid]][tExist])
349 {
350 new query[400],
351 name[MAX_PLAYER_NAME];
352 GetPlayerName(playerid, name, sizeof(name));
353 //mysql_format(MySQL, query, sizeof(query), "INSERT INTO `Tag` (`Owner`, `Text`) VALUES ('%s', '%s')", name, p_Tag[CurrentTag[playerid]][tText]);
354 p_Tag[CurrentTag[playerid]][tExist] = true;
355 format(p_Tag[CurrentTag[playerid]][tOwner], MAX_PLAYER_NAME, "%s", name);
356 //mysql_tquery(MySQL, query, "OnTagCreated", "i", CurrentTag[playerid]);
357 PlayerTag[playerid]++;
358 TagNumber++;
359 }
360 else
361 SaveTag(CurrentTag[playerid]);
362 }
363}
364/*
365PUBLIC:OnTagCreated(tagid)
366{
367 p_Tag[tagid][tSQLIB] = cache_insert_id();
368 SaveTag(tagid);
369}
370*/
371// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
372
373#define IsHolding(%0) \
374 ((newkeys & (%0)) == (%0))
375
376public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
377{
378 if(IsHolding(KEY_FIRE))
379 {
380 TimeHold[playerid] = gettime();
381 IsHolding[playerid] = true;
382 }
383 else if(IsHolding[playerid] && (gettime() - TimeHold[playerid]) >= TIME_SPRAY && GetPlayerWeapon(playerid) == 41)
384 {
385 IsHolding[playerid] = false;
386 if((CurrentTag[playerid] = GetNearestTag(playerid)) != INVALID_TAG_ID)
387 {
388 Editing[playerid] = true;
389 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Modifier votre tag", "- Entrez le texte du tag\n- Choisissez la police\n- Choisissez la couleur\n- Position\n- Confirm", "Ok", "");
390 return 1;
391 }
392 else
393 {
394 CurrentTag[playerid] = GetFreeTagSlot();
395 if(PlayerTag[playerid] >= MAX_TAG_PER_PLAYER)
396 return SCM(playerid, RED, "[Erreur] {ffffff}Vous ne pouvez plus créer de tag (limite atteinte).");
397 if(TagNumber+1 < MAX_TAG)
398 ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_INPUT, "Message", "Enter the text's tag", "Ok", "Annulez");
399 else
400 return CurrentTag[playerid] = 0, SCM(playerid, RED, "Le nombre de tag sur le serveur a atteint sa limite.");
401 return 1;
402 }
403 }
404 else
405 {
406 TimeHold[playerid] = 0;
407 IsHolding[playerid] = false;
408 }
409 return 1;
410}
411
412// ================================================================================================================================================================================================================================================
413
414public OnPlayerSpawn(playerid)
415{
416 GivePlayerWeapon(playerid, 41, 99999);
417 return 1;
418}
419
420public OnPlayerCommandText(playerid, cmdtext[])
421{
422 if(!strcmp(cmdtext, "/edittag"))
423 {
424 if(!IsPlayerAdmin(playerid))
425 return 0;
426
427 if(sscanf(cmdtext, "i", CurrentTag[playerid]))
428 return SCM(playerid, LBLUE, "/edittag [TagID]");
429 if(!p_Tag[CurrentTag[playerid]][tExist])
430 return SCM(playerid, RED, "[Erreur] {ffffff}ID de tag incorrect.");
431 Editing[playerid] = true;
432
433 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Modifier votre tag", "- Entrez le cmdtexte du tag\n- Choisissez la police\n- Choisissez la couleur\n- Position\n- Confirm", "Ok", "");
434 return 1;
435 }
436
437 else if(!strcmp(cmdtext, "/deltag"))
438 {
439 if(!IsPlayerAdmin(playerid))
440 return 0;
441
442 new tagid;
443
444 if(sscanf(cmdtext, "i", tagid))
445 return SCM(playerid, LBLUE, "/deltag [TagID]");
446
447 if(!p_Tag[tagid][tExist])
448 return SCM(playerid, RED, "[Erreur] {ffffff}ID de tag incorrect.");
449 new
450 name[MAX_PLAYER_NAME];
451
452 DestroyDynamicObject(p_Tag[tagid][tID]);
453
454 for(new i; i < MAX_PLAYERS; i++)
455 {
456 if(!IsPlayerConnected(i))
457 continue;
458 GetPlayerName(i, name, sizeof(name));
459 if(!strcmp(p_Tag[tagid][tOwner], name))
460 {
461 PlayerTag[i]--;
462 break;
463 }
464 }
465 // new query[45];
466 // mysql_format(MySQL, query, sizeof(query), "DELETE FROM `Tag` WHERE `SQLIB` = '%d'", p_Tag[tagid][tSQLIB]);
467 // mysql_query(MySQL, query, false);
468 CurrentTag[playerid] = tagid;
469 CancelTag(playerid);
470 SCM(playerid, GREEN, "Tag supprimé.");
471 return 1;
472 }
473 return 1;
474}
475
476/*
477CMD:edittag(playerid, params[])
478{
479 if(!IsPlayerAdmin(playerid))
480 return 0;
481
482 if(sscanf(params, "i", CurrentTag[playerid]))
483 return SCM(playerid, LBLUE, "/edittag [TagID]");
484 if(!p_Tag[CurrentTag[playerid]][tExist])
485 return SCM(playerid, RED, "[Erreur] {ffffff}ID de tag incorrect.");
486 Editing[playerid] = true;
487
488 ShowPlayerDialog(playerid, DIALOG_MODIFIER, DIALOG_STYLE_LIST, "Modifier votre tag", "- Entrez le texte du tag\n- Choisissez la police\n- Choisissez la couleur\n- Position\n- Confirm", "Ok", "");
489 return 1;
490}
491
492CMD:deltag(playerid, params[])
493{
494 if(!IsPlayerAdmin(playerid))
495 return 0;
496
497 new tagid;
498
499 if(sscanf(params, "i", tagid))
500 return SCM(playerid, LBLUE, "/deltag [TagID]");
501
502 if(!p_Tag[tagid][tExist])
503 return SCM(playerid, RED, "[Erreur] {ffffff}ID de tag incorrect.");
504 new
505 name[MAX_PLAYER_NAME];
506
507 DestroyDynamicObject(p_Tag[tagid][tID]);
508
509 for(new i; i < MAX_PLAYERS; i++)
510 {
511 if(!IsPlayerConnected(i))
512 continue;
513 GetPlayerName(i, name, sizeof(name));
514 if(!strcmp(p_Tag[tagid][tOwner], name))
515 {
516 PlayerTag[i]--;
517 break;
518 }
519 }
520 // new query[45];
521 // mysql_format(MySQL, query, sizeof(query), "DELETE FROM `Tag` WHERE `SQLIB` = '%d'", p_Tag[tagid][tSQLIB]);
522 // mysql_query(MySQL, query, false);
523 CurrentTag[playerid] = tagid;
524 CancelTag(playerid);
525 SCM(playerid, GREEN, "Tag supprimé.");
526 return 1;
527}*/
528
529// ================================================================================================================================================================================================================================================
530
531ReloadTag(tagid)
532{
533 if(!p_Tag[tagid][tExist])
534 return printf("[Erreur] Tag ID %i doesn't exist.", tagid);
535
536 DestroyDynamicObject(p_Tag[tagid][tID]);
537 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]);
538 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);
539 return 1;
540}
541
542SetTagNumberForPlayer(playerid)
543{
544 new Name[MAX_PLAYER_NAME];
545 GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
546 for(new i; i < TagNumber; i++)
547 {
548 if(!p_Tag[i][tExist])
549 continue;
550
551 if(!strcmp(p_Tag[i][tOwner], Name))
552 PlayerTag[playerid]++;
553 }
554 return 1;
555}
556
557GetNearestTag(playerid, Float:range = 5.0)
558{
559 new Float:distance = 999.0,
560 tag = INVALID_TAG_ID,
561 Float:a;
562
563 for(new i; i <= TagNumber; i++)
564 {
565 if(!p_Tag[i][tExist])
566 continue;
567 a = GetPlayerDistanceFromPoint(playerid, p_Tag[i][tPosX], p_Tag[i][tPosY], p_Tag[i][tPosZ]);
568 if(a > distance && a < range || a > range)
569 continue;
570 else
571 distance = a, tag = i;
572 }
573 return tag;
574}
575
576GetFreeTagSlot()
577{
578 for(new i=1; i < MAX_TAG; i++)
579 {
580 if(!p_Tag[i][tExist])
581 return i;
582 }
583 return INVALID_TAG_ID;
584}
585
586SaveTag(tagid)
587{
588 return 1;
589 // new query[400 + EOS];
590 // 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'");
591 // 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]);
592 // mysql_query(MySQL, query);
593 // return 1;
594}
595
596CancelTag(playerid)
597{
598 p_Tag[CurrentTag[playerid]][tID] = 0;
599 p_Tag[CurrentTag[playerid]][tSQLIB] = 0;
600 p_Tag[CurrentTag[playerid]][tColor] = -1;
601 p_Tag[CurrentTag[playerid]][tPosX] = 0.0;
602 p_Tag[CurrentTag[playerid]][tPosY] = 0.0;
603 p_Tag[CurrentTag[playerid]][tPosZ] = 0.0;
604 p_Tag[CurrentTag[playerid]][tRX] = 0.0;
605 p_Tag[CurrentTag[playerid]][tRY] = 0.0;
606 p_Tag[CurrentTag[playerid]][tRZ] = 0.0;
607 p_Tag[CurrentTag[playerid]][tVW] = 0;
608 p_Tag[CurrentTag[playerid]][tInterior] = 0;
609 p_Tag[CurrentTag[playerid]][tExist] = false;
610 Editing[playerid] = false;
611 format(p_Tag[CurrentTag[playerid]][tText], 20, "%s", EOS);
612 format(p_Tag[CurrentTag[playerid]][tOwner], 24, "%s", EOS);
613 format(p_Tag[CurrentTag[playerid]][tPolice], 30, "%s", EOS);
614}
615
616GetxColorByID(colorid)
617{
618 switch(colorid)
619 {
620 case 0: return 0xFFFF0000;
621 case 1: return 0xFF99CCFF;
622 case 2: return 0xFF008000;
623 case 3: return 0xFF9E3E3E;
624 case 4: return 0xFFFF6600;
625 }
626 return 1;
627}
628
629GetColorByID(colorid)
630{
631 static colorstr[50] = WHITE_U"Unknown";
632 switch(colorid)
633 {
634 case 0:
635 {
636 format(colorstr, sizeof(colorstr), RED_U"Rouge");
637 return colorstr;
638 }
639 case 1:
640 {
641 format(colorstr, sizeof(colorstr), BLUE_U"Bleu");
642 return colorstr;
643 }
644 case 2:
645 {
646 format(colorstr, sizeof(colorstr), GREEN_U"Vert");
647 return colorstr;
648 }
649 case 3:
650 {
651 format(colorstr, sizeof(colorstr), BROWN_U"Marron");
652 return colorstr;
653 }
654 case 4:
655 {
656 format(colorstr, sizeof(colorstr), ORANGE_U"Orange");
657 return colorstr;
658 }
659 }
660 return colorstr;
661}