Advertisement
Dayrion

Tag script v1.0

Dec 18th, 2016
872
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 20.58 KB | None | 0 0
  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.  
  73. enum _: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.  
  86. enum 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.  
  105. new 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.  
  115. public 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.  
  143. public 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.  
  158. PUBLIC: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.  
  197. public OnPlayerConnect(playerid)
  198. {      
  199.     IsHolding[playerid] = false;
  200.     TimeHold[playerid] = 0;
  201.     SetTagNumberForPlayer(playerid);
  202.     return 1;
  203. }
  204.  
  205. // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  206.  
  207. public 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.  
  322. public 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.  
  353. PUBLIC: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.  
  364. public 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.  
  402. CMD: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.  
  417. CMD: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.  
  456. ReloadTag(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.  
  467. SetTagNumberForPlayer(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.  
  482. GetNearestTag(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.  
  501. GetFreeTagSlot()
  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.  
  511. SaveTag(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.  
  520. CancelTag(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.  
  540. GetxColorByID(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.  
  553. GetColorByID(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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement