Advertisement
jst96

Dynamic Sign System

Nov 17th, 2016
985
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 19.78 KB | None | 0 0
  1. // Filterscript Name: jSign (justice Sign)
  2. // Filterscript Version: 1.0
  3. // justice96 - https://justice96.adma.id.au
  4.  
  5. #include <a_samp>
  6. #include <a_mysql>
  7. #include <sscanf2>
  8. #include <streamer>
  9. #include <easyDialog>
  10. #include <YSI\y_iterate>
  11. #include <izcmd>
  12.  
  13. #define jsHOST      "localhost"
  14. #define jsUSER      "root"
  15. #define jsDATABASE  "lol"
  16. #define jsPASSWORD  ""
  17.  
  18. #define COLOR_GREY  0xAFAFAFFF
  19.  
  20. #define MAX_SIGNS 50
  21. #define MAX_SIGN_TEXT 128
  22. #define MAX_FONT_TEXT 28
  23.  
  24. #define SendErrorMessage(%0,%1) \
  25.     SendClientMessage(%0, COLOR_GREY, "ERROR: {ffffff}"%1)
  26.  
  27. #define SendSyntaxMessage(%0,%1) \
  28.     SendClientMessage(%0, COLOR_GREY, "USAGE: {ffffff}"%1)
  29.  
  30. #define IsNull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
  31. #define forex(%0,%1) for(new %0 = 0; %0 < %1; %0++)
  32. #define function%0(%1) \
  33.         forward%0(%1); public%0(%1)
  34.  
  35. enum j_sign
  36. {
  37.     ORM:ORM_ID,
  38.     ID,
  39.     Model,
  40.     Text[MAX_SIGN_TEXT],
  41.     FontText[MAX_FONT_TEXT],
  42.     FontColor,
  43.     BackColor,
  44.     FontSize,
  45.     MaterialSize,
  46.     Float:Pos[6]
  47. };
  48. new jSign[MAX_SIGNS][j_sign];
  49. new SignID[MAX_SIGNS];
  50. new Iterator:Signs<MAX_SIGNS>;
  51.  
  52. new
  53.     Sign_Connection = -1,
  54.     EditSign[MAX_PLAYERS] = {-1, ...};
  55.  
  56. new const MatSizes_List[][] =
  57. {
  58.     {OBJECT_MATERIAL_SIZE_32x32, "32x32" },
  59.     {OBJECT_MATERIAL_SIZE_64x32, "64x32" },
  60.     {OBJECT_MATERIAL_SIZE_64x64, "64x64" },
  61.     {OBJECT_MATERIAL_SIZE_128x32, "128x32" },
  62.     {OBJECT_MATERIAL_SIZE_128x64, "128x64" },
  63.     {OBJECT_MATERIAL_SIZE_128x128, "128x128" },
  64.     {OBJECT_MATERIAL_SIZE_256x32, "256x32" },
  65.     {OBJECT_MATERIAL_SIZE_256x64, "256x64" },
  66.     {OBJECT_MATERIAL_SIZE_256x128 ,"256x128" },
  67.     {OBJECT_MATERIAL_SIZE_256x256 ,"256x256" },
  68.     {OBJECT_MATERIAL_SIZE_512x64, "512x64" },
  69.     {OBJECT_MATERIAL_SIZE_512x128, "512x128" },
  70.     {OBJECT_MATERIAL_SIZE_512x256, "512x256" },
  71.     {OBJECT_MATERIAL_SIZE_512x512, "512x512" }
  72. };
  73.  
  74. new const ColorList[][] =
  75. {
  76.     {0xFFFF0000, "{ff0000}Red"}, // red
  77.     {0xFF04B404, "{04b404}Green"}, // green
  78.     {0xFF0000FF, "{0000ff}Blue"}, // blue
  79.     {0xFFFFFF00, "{ffff00}Yellow"}, // yellow
  80.     {0xFFFF8000, "{ff8000}Orange"},// orange
  81.     {0xFF000000, "{000000}Black"},// black
  82.     {0xFFFFFFFF, "{ffffff}White"}, // white
  83.     {0xFFA4A4A4, "{a4a4a4}Grey"} // grey
  84. };
  85.  
  86. public OnFilterScriptInit()
  87. {
  88.     Sign_Connection = mysql_connect(jsHOST, jsUSER, jsDATABASE, jsPASSWORD);
  89.     if(mysql_errno())
  90.         printf("[DEBUG] Could not connect to the server. (ERROR: #%d)", mysql_errno());
  91.     else
  92.         print("[DEBUG] Successfully connected to the server!");
  93.  
  94.     mysql_pquery(Sign_Connection, "SELECT * FROM `jsigns` ORDER BY `signid` ASC","Sign_Load","");
  95.  
  96.     mysql_tquery(Sign_Connection, "CREATE TABLE IF NOT EXISTS `jsigns` ( \
  97.       `signid` int(10) NOT NULL, \
  98.       `model` int(10) NOT NULL, \
  99.       `text` varchar(128) NOT NULL, \
  100.       `fonttext` varchar(28) NOT NULL, \
  101.       `fontsize` int(10) NOT NULL, \
  102.       `fontcolor` int(10) NOT NULL, \
  103.       `backcolor` int(10) NOT NULL, \
  104.       `matsize` int(10) NOT NULL, \
  105.       `x` float NOT NULL, \
  106.       `y` float NOT NULL, \
  107.       `z` float NOT NULL, \
  108.       `rx` float NOT NULL, \
  109.       `ry` float NOT NULL, \
  110.       `rz` float NOT NULL \
  111.     ) ENGINE=InnoDB DEFAULT CHARSET=latin1;");
  112.  
  113.     mysql_tquery(Sign_Connection, "ALTER TABLE `jsigns` \
  114.     ADD PRIMARY KEY (`signid`);");
  115.  
  116.     return 1;
  117. }
  118.  
  119. public OnFilterScriptExit()
  120. {
  121.     foreach(new i : Signs)
  122.     {
  123.         orm_update(jSign[i][ORM_ID]);
  124.         orm_destroy(jSign[i][ORM_ID]);
  125.     }
  126.     return 1;
  127. }
  128.  
  129. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  130. {
  131.     new signid = EditSign[playerid];
  132.     if(response == EDIT_RESPONSE_FINAL)
  133.     {
  134.         if(signid != -1)
  135.         {
  136.             jSign[signid][Pos][0] = x;
  137.             jSign[signid][Pos][1] = y;
  138.             jSign[signid][Pos][2] = z;
  139.             jSign[signid][Pos][3] = rx;
  140.             jSign[signid][Pos][4] = ry;
  141.             jSign[signid][Pos][5] = rz;
  142.             orm_update(jSign[signid][ORM_ID]);
  143.  
  144.             Sync_Sign(EditSign[playerid],true);
  145.         }
  146.     }
  147.     if(response == EDIT_RESPONSE_FINAL || response == EDIT_RESPONSE_CANCEL)
  148.     {
  149.         if(signid != -1)
  150.         {
  151.             Sync_Sign(EditSign[playerid],true);
  152.             EditSign[playerid] = -1;
  153.         }
  154.     }
  155.     return 1;
  156. }
  157.  
  158. Dialog:ListMaterial_Size(playerid, response, listitem, inputtext[])
  159. {
  160.     if(response)
  161.     {
  162.         new id = GetPVarInt(playerid, "jst96"), notice[128];
  163.  
  164.         jSign[id][MaterialSize] = MatSizes_List[listitem][0];
  165.         orm_update(jSign[id][ORM_ID]);
  166.        
  167.         format(notice,sizeof(notice),"SIGN: Sign id %d has changed the material size to %s", id, MatSizes_List[listitem][1]);
  168.         SendClientMessage(playerid, -1, notice);
  169.  
  170.         Sync_Sign(id,true);
  171.     }
  172.     return 1;
  173. }
  174.  
  175. Dialog:ListColor_Font(playerid, response, listitem, inputtext[])
  176. {
  177.     if(response)
  178.     {
  179.         new id = GetPVarInt(playerid, "jst96"), notice[128];
  180.  
  181.         jSign[id][FontColor] = ColorList[listitem][0];
  182.         orm_update(jSign[id][ORM_ID]);
  183.        
  184.         format(notice,sizeof(notice),"SIGN: Sign id %d has changed the font color to %s", id, ColorList[listitem][1]);
  185.         SendClientMessage(playerid, -1, notice);
  186.  
  187.         Sync_Sign(id,true);
  188.     }
  189.     return 1;
  190. }
  191.  
  192. Dialog:ListColor_Back(playerid, response, listitem, inputtext[])
  193. {
  194.     if(response)
  195.     {
  196.         new id = GetPVarInt(playerid, "jst96"), notice[128];
  197.  
  198.         jSign[id][BackColor] = ColorList[listitem][0];
  199.         orm_update(jSign[id][ORM_ID]);
  200.        
  201.         format(notice,sizeof(notice),"SIGN: Sign id %d has changed the background color to %s", id, ColorList[listitem][1]);
  202.         SendClientMessage(playerid, -1, notice);
  203.  
  204.         Sync_Sign(id,true);
  205.     }
  206.     return 1;
  207. }
  208.  
  209. function Sign_Load()
  210. {
  211.     new rows = cache_get_row_count(Sign_Connection);
  212.     if(rows != 0)
  213.     {
  214.         forex(row,rows)
  215.         {
  216.             new id = cache_get_row_int(row,0,Sign_Connection);
  217.             new ORM:ormid = jSign[id][ORM_ID] = orm_create("jsigns",Sign_Connection);
  218.             orm_addvar_int(ormid,jSign[id][ID],"signid");
  219.             orm_addvar_int(ormid,jSign[id][Model],"model");
  220.             orm_addvar_string(ormid,jSign[id][Text],MAX_SIGN_TEXT,"text");
  221.             orm_addvar_string(ormid,jSign[id][FontText],MAX_FONT_TEXT,"fonttext");
  222.             orm_addvar_int(ormid,jSign[id][FontSize],"fontsize");
  223.             orm_addvar_int(ormid,jSign[id][FontColor],"fontcolor");
  224.             orm_addvar_int(ormid,jSign[id][BackColor],"backcolor");
  225.             orm_addvar_int(ormid,jSign[id][MaterialSize],"matsize");
  226.             orm_addvar_float(ormid,jSign[id][Pos][0],"x");
  227.             orm_addvar_float(ormid,jSign[id][Pos][1],"y");
  228.             orm_addvar_float(ormid,jSign[id][Pos][2],"z");
  229.             orm_addvar_float(ormid,jSign[id][Pos][3],"rx");
  230.             orm_addvar_float(ormid,jSign[id][Pos][4],"ry");
  231.             orm_addvar_float(ormid,jSign[id][Pos][5],"rz");
  232.             orm_apply_cache(ormid,row);
  233.             orm_setkey(ormid,"signid");
  234.  
  235.             Sync_Sign(id);
  236.             Iter_Add(Signs,id);
  237.         }
  238.     }
  239.     printf("[DEBUG] %d signs loaded!",rows);
  240.     return 1;
  241. }
  242.  
  243. function Sign_Create(playerid,i)
  244. {
  245.     SignID[i] = CreateDynamicObject(jSign[i][Model], jSign[i][Pos][0], jSign[i][Pos][1], jSign[i][Pos][2], jSign[i][Pos][3], jSign[i][Pos][4], jSign[i][Pos][5]);
  246.  
  247.     SetDynamicObjectMaterial(SignID[i], 1, 18646, "matcolours", "grey-80-percent", 0);
  248.     SetDynamicObjectMaterialText(SignID[i], 0, jSign[i][Text], jSign[i][MaterialSize], jSign[i][FontText], jSign[i][FontSize], 1, jSign[i][FontColor], jSign[i][BackColor], 1);
  249.  
  250.     Iter_Add(Signs,i);
  251.     if(playerid != INVALID_PLAYER_ID)
  252.     {
  253.         new string[128];
  254.         format(string,sizeof(string),"SIGN: Created with id %d",i);
  255.         SendClientMessage(playerid, -1, string);
  256.  
  257.         EditDynamicObject(playerid, SignID[i]);
  258.         EditSign[playerid] = i;
  259.     }
  260.     return 1;
  261. }
  262.  
  263. stock FixText(text[]) // Pottus
  264. {
  265.     new len = strlen(text);
  266.     if(len > 1)
  267.     {
  268.         for(new i = 0; i < len; i++)
  269.         {
  270.             if(text[i] == 92)
  271.             {
  272.                 if(text[i+1] == 'n')
  273.                 {
  274.                     text[i] = '\n';
  275.                     for(new j = i+1; j < len; j++) text[j] = text[j+1], text[j+1] = 0;
  276.                     continue;
  277.                 }
  278.             }
  279.         }
  280.     }
  281.     return 1;
  282. }
  283.  
  284. stock ColouredText(text[]) // RyDeR
  285. {
  286.     new
  287.         pos = -1,
  288.         string[(128 + 16)]
  289.     ;
  290.     strmid(string, text, 0, 128, (sizeof(string) - 16));
  291.  
  292.     while((pos = strfind(string, "#", true, (pos + 1))) != -1)
  293.     {
  294.         new
  295.             i = (pos + 1),
  296.             hexCount
  297.         ;
  298.         for( ; ((string[i] != 0) && (hexCount < 6)); ++i, ++hexCount)
  299.         {
  300.             if(!(('a' <= string[i] <= 'f') || ('A' <= string[i] <= 'F') || ('0' <= string[i] <= '9')))
  301.             {
  302.                 break;
  303.             }
  304.         }
  305.         if((hexCount == 6) && !(hexCount < 6))
  306.         {
  307.             string[pos] = '{';
  308.             strins(string, "}", i);
  309.         }
  310.     }
  311.     return string;
  312. }
  313.  
  314. stock Sync_Sign(id, bool:IsDestroy = false)
  315. {
  316.     if(IsDestroy)
  317.     {
  318.         if(IsValidDynamicObject(SignID[id]))
  319.             DestroyDynamicObject(SignID[id]);
  320.     }
  321.     SignID[id] = CreateDynamicObject(jSign[id][Model], jSign[id][Pos][0], jSign[id][Pos][1], jSign[id][Pos][2], jSign[id][Pos][3], jSign[id][Pos][4], jSign[id][Pos][5]);
  322.     SetDynamicObjectMaterial(SignID[id], 1, 18646, "matcolours", "grey-80-percent", 0);
  323.     SetDynamicObjectMaterialText(SignID[id], 0, jSign[id][Text], jSign[id][MaterialSize], jSign[id][FontText], jSign[id][FontSize], 1, jSign[id][FontColor], jSign[id][BackColor], 1);
  324.     return 1;
  325. }
  326.  
  327. stock GetPlayerNearestSign(playerid)
  328. {
  329.     foreach(new id : Signs)
  330.     {
  331.         if(IsPlayerInRangeOfPoint(playerid, 3.0, jSign[id][Pos][0], jSign[id][Pos][1], jSign[id][Pos][2])) return id;
  332.     }
  333.     return -1;
  334. }
  335.  
  336. SSCANF:signmenu(string[])
  337. {
  338.     if(!strcmp(string,"create",true)) return 1;
  339.     else if(!strcmp(string,"make",true)) return 1;
  340.     else if(!strcmp(string,"spawn",true)) return 1;
  341.  
  342.     else if(!strcmp(string,"delete",true)) return 2;
  343.     else if(!strcmp(string,"destroy",true)) return 2;
  344.     else if(!strcmp(string,"remove",true)) return 2;
  345.  
  346.     else if(!strcmp(string,"model",true)) return 3;
  347.     else if(!strcmp(string,"setmodel",true)) return 3;
  348.  
  349.     else if(!strcmp(string,"move",true)) return 4;
  350.     else if(!strcmp(string,"setmove",true)) return 4;
  351.  
  352.     else if(!strcmp(string,"text",true)) return 5;
  353.     else if(!strcmp(string,"settext",true)) return 5;
  354.  
  355.     else if(!strcmp(string,"fontcolor",true)) return 6;
  356.     else if(!strcmp(string,"fontcolour",true)) return 6;
  357.     else if(!strcmp(string,"changefontcolor",true)) return 6;
  358.  
  359.     else if(!strcmp(string,"backgroundcolor",true)) return 7;
  360.     else if(!strcmp(string,"backgroundcolour",true)) return 7;
  361.     else if(!strcmp(string,"changebackgroundcolour",true)) return 7;
  362.  
  363.     else if(!strcmp(string,"refresh",true)) return 8;
  364.  
  365.     else if(!strcmp(string,"fontsize",true)) return 9;
  366.     else if(!strcmp(string,"setsize",true)) return 9;
  367.  
  368.     else if(!strcmp(string,"materialsize",true)) return 10;
  369.     else if(!strcmp(string,"setmaterial",true)) return 10;
  370.  
  371.     else if(!strcmp(string,"font",true)) return 11;
  372.     else if(!strcmp(string,"changefont",true)) return 11;
  373.     else if(!strcmp(string,"setfont",true)) return 11;
  374.  
  375.     else if(!strcmp(string,"near",true)) return 12;
  376.     return 0;
  377. }
  378.  
  379. CMD:sign(playerid, params[])
  380. {
  381.     new action,string[512];
  382.     if(!IsPlayerAdmin(playerid)) return SendErrorMessage(playerid, "You are not an Admin (RCON)");
  383.     if(sscanf(params,"k<signmenu>S()[128]",action,string)) return SendSyntaxMessage(playerid,"/sign [create/delete/model/move/text/fontcolor/backgroundcolor/refresh/fontsize/materialsize/font/near]");
  384.     else
  385.     {
  386.         switch(action)
  387.         {
  388.             case 1:
  389.             {
  390.                 new name[MAX_SIGN_TEXT], Float:x, Float:y, Float:z, Float:angle;
  391.                 GetPlayerPos(playerid, x, y, z);
  392.                 GetPlayerFacingAngle(playerid, angle);
  393.                 x += 5.0 * floatsin(-angle, degrees);
  394.                 y += 5.0 * floatcos(-angle, degrees);
  395.  
  396.                 if(sscanf(string, "s["#MAX_SIGN_TEXT"]", name)) return SendSyntaxMessage(playerid, "/sign create [text]");
  397.                 if(strlen(name) > MAX_SIGN_TEXT) return SendErrorMessage(playerid, "Text too long!");
  398.  
  399.                 new id = Iter_Free(Signs);
  400.                 if(id == -1) return SendErrorMessage(playerid, "No free sign slot available!");
  401.  
  402.                 jSign[id][ID] = id;
  403.                 jSign[id][Model] = 3926;
  404.  
  405.                 FixText(name);
  406.                 format(jSign[id][Text], MAX_SIGN_TEXT, "%s", ColouredText(name));
  407.  
  408.                 format(jSign[id][FontText], MAX_FONT_TEXT, "Arial");
  409.  
  410.                 jSign[id][Pos][0] = x;
  411.                 jSign[id][Pos][1] = y;
  412.                 jSign[id][Pos][2] = z;
  413.  
  414.                 jSign[id][FontColor] = 0xFFFFFFFF;
  415.                 jSign[id][BackColor] = 0xFF000000;
  416.                 jSign[id][FontSize] = 30;
  417.                 jSign[id][MaterialSize] = 130;
  418.  
  419.                 new ORM:ormid = jSign[id][ORM_ID] = orm_create("jsigns",Sign_Connection);
  420.                 orm_addvar_int(ormid,jSign[id][ID],"signid");
  421.                 orm_addvar_int(ormid,jSign[id][Model],"model");
  422.                 orm_addvar_string(ormid,jSign[id][Text],MAX_SIGN_TEXT,"text");
  423.                 orm_addvar_string(ormid,jSign[id][FontText],MAX_FONT_TEXT,"fonttext");
  424.                 orm_addvar_int(ormid,jSign[id][FontSize],"fontsize");
  425.                 orm_addvar_int(ormid,jSign[id][FontColor],"fontcolor");
  426.                 orm_addvar_int(ormid,jSign[id][BackColor],"backcolor");
  427.                 orm_addvar_int(ormid,jSign[id][MaterialSize],"matsize");
  428.                 orm_addvar_float(ormid,jSign[id][Pos][0],"x");
  429.                 orm_addvar_float(ormid,jSign[id][Pos][1],"y");
  430.                 orm_addvar_float(ormid,jSign[id][Pos][2],"z");
  431.                 orm_addvar_float(ormid,jSign[id][Pos][3],"rx");
  432.                 orm_addvar_float(ormid,jSign[id][Pos][4],"ry");
  433.                 orm_addvar_float(ormid,jSign[id][Pos][5],"rz");
  434.                 orm_insert(ormid,"Sign_Create","dd",playerid,id);
  435.                 orm_setkey(ormid,"signid");
  436.             }
  437.             case 2:
  438.             {
  439.                 if(IsNull(string)) return SendSyntaxMessage(playerid,"/sign delete [signid]");
  440.                 new signid = strval(string);
  441.                 if(Iter_Contains(Signs,signid))
  442.                 {
  443.                     format(string,sizeof(string),"SIGN: Sign id %d has been deleted!",signid);
  444.                     SendClientMessage(playerid,-1,string);
  445.  
  446.                     DestroyDynamicObject(SignID[signid]);
  447.                     orm_delete(jSign[signid][ORM_ID],true);
  448.                     Iter_Remove(Signs,signid);
  449.                 }
  450.                 else SendErrorMessage(playerid,"Invalid signid!");
  451.             }
  452.             case 3:
  453.             {
  454.                 new signid, modelid;
  455.                 if(sscanf(string, "dd", signid, modelid)) return SendSyntaxMessage(playerid, "/sign model [signid] [modelid]");
  456.                 if(Iter_Contains(Signs,signid))
  457.                 {
  458.                     jSign[signid][Model] = modelid;
  459.                     orm_update(jSign[signid][ORM_ID]);
  460.                
  461.                     format(string,sizeof(string),"SIGN: Sign id %d has changed the model id to %d", signid, modelid);
  462.                     SendClientMessage(playerid, -1, string);
  463.                     Sync_Sign(signid,true);
  464.                 }
  465.                 else SendErrorMessage(playerid,"Invalid signid!");
  466.             }
  467.             case 4:
  468.             {
  469.                 if(IsNull(string)) return SendSyntaxMessage(playerid,"/sign move [signid]");
  470.                 new signid = strval(string);
  471.                 if(Iter_Contains(Signs,signid))
  472.                 {
  473.                     EditSign[playerid] = signid;
  474.                     EditDynamicObject(playerid, SignID[signid]);
  475.                     SendClientMessage(playerid, -1, "INFO: Move the cursor to moving the object!");
  476.                 }
  477.                 else SendErrorMessage(playerid,"Invalid signid!");
  478.             }
  479.             case 5:
  480.             {
  481.                 new signid,name[MAX_SIGN_TEXT];
  482.                 if(sscanf(string,"ds["#MAX_SIGN_TEXT"]",signid,name)) return SendSyntaxMessage(playerid,"/sign text [signid] [text]");
  483.                 if(strlen(name) > MAX_SIGN_TEXT) return SendErrorMessage(playerid, "Text too long!");
  484.                 if(Iter_Contains(Signs,signid))
  485.                 {
  486.                     FixText(name);
  487.                     format(jSign[signid][Text], MAX_SIGN_TEXT, "%s", ColouredText(name));
  488.                     orm_update(jSign[signid][ORM_ID]);
  489.                     Sync_Sign(signid,true);
  490.  
  491.                     format(string,sizeof(string),"SIGN: Sign id %d has renamed to the text %s", signid, jSign[signid][Text]);
  492.                     SendClientMessage(playerid, -1, string);
  493.                 }
  494.                 else SendErrorMessage(playerid,"Invalid signid!");
  495.             }
  496.             case 6:
  497.             {
  498.                 if(IsNull(string)) return SendSyntaxMessage(playerid,"/sign fontcolor [signid]");
  499.                 new signid = strval(string);
  500.                 if(Iter_Contains(Signs,signid))
  501.                 {
  502.                     SetPVarInt(playerid, "jst96", signid);
  503.                     for(new i = 0, j = sizeof(ColorList); i < j; i++)
  504.                     {
  505.                         format(string,sizeof(string),"%s%s\n", string, ColorList[i][1]);
  506.                     }
  507.                     Dialog_Show(playerid, ListColor_Font, DIALOG_STYLE_LIST, "Color List", string, "Change", "Cancel");
  508.                 }
  509.                 else SendErrorMessage(playerid,"Invalid signid!");
  510.             }
  511.             case 7:
  512.             {
  513.                 if(IsNull(string)) return SendSyntaxMessage(playerid,"/sign backgroundcolor [signid]");
  514.                 new signid = strval(string);
  515.                 if(Iter_Contains(Signs,signid))
  516.                 {
  517.                     SetPVarInt(playerid, "jst96", signid);
  518.                     for(new i = 0, j = sizeof(ColorList); i < j; i++)
  519.                     {
  520.                         format(string,sizeof(string),"%s%s\n", string, ColorList[i][1]);
  521.                     }
  522.                     Dialog_Show(playerid, ListColor_Back, DIALOG_STYLE_LIST, "Color List", string, "Change", "Cancel");
  523.                 }
  524.                 else SendErrorMessage(playerid,"Invalid signid!");
  525.             }
  526.             case 8:
  527.             {
  528.                 if(IsNull(string)) return SendSyntaxMessage(playerid,"/sign refresh [signid]");
  529.                 new signid = strval(string);
  530.                 if(Iter_Contains(Signs,signid))
  531.                 {
  532.                     Sync_Sign(signid,true);
  533.                     format(string,sizeof(string),"SIGN: Sign id %d has been synced!",signid);
  534.                     SendClientMessage(playerid, -1, string);
  535.                 }
  536.                 else SendErrorMessage(playerid,"Invalid signid!");
  537.             }
  538.             case 9:
  539.             {
  540.                 new signid, size;
  541.                 if(sscanf(string, "dd", signid, size)) return SendSyntaxMessage(playerid, "/sign fontsize [signid] [size]");
  542.                 if(size < 0 && size > 200) return SendErrorMessage(playerid, "Size limit 0 - 200!");
  543.                 if(Iter_Contains(Signs,signid))
  544.                 {
  545.                     jSign[signid][FontSize] = size;
  546.                     orm_update(jSign[signid][ORM_ID]);
  547.                     Sync_Sign(signid,true);
  548.  
  549.                     format(string,sizeof(string),"SIGN: Sign id %d has changed the fontsize to %d",signid,size);
  550.                     SendClientMessage(playerid, -1, string);
  551.                 }
  552.                 else SendErrorMessage(playerid,"Invalid signid!");
  553.             }
  554.             case 10:
  555.             {
  556.                 if(IsNull(string)) return SendSyntaxMessage(playerid,"/sign materialsize [signid]");
  557.                 new signid = strval(string);
  558.                 if(Iter_Contains(Signs,signid))
  559.                 {
  560.                     SetPVarInt(playerid, "jst96", signid);
  561.                     for(new i = 0, j = sizeof(MatSizes_List); i < j; i++)
  562.                     {
  563.                         format(string,sizeof(string),"%s%s\n", string, MatSizes_List[i][1]);
  564.                     }
  565.                     Dialog_Show(playerid, ListMaterial_Size, DIALOG_STYLE_LIST, "Material Size List", string, "Change", "Cancel");
  566.                 }
  567.                 else SendErrorMessage(playerid,"Invalid signid!");
  568.             }
  569.             case 11:
  570.             {
  571.                 new signid, type[MAX_FONT_TEXT];
  572.                 if(sscanf(string, "ds["#MAX_FONT_TEXT"]", signid, type)) return SendSyntaxMessage(playerid, "/sign font [signid] [fonttype]");
  573.                 if(Iter_Contains(Signs,signid))
  574.                 {
  575.                     format(jSign[signid][FontText], MAX_FONT_TEXT, "%s", type);
  576.                     orm_update(jSign[signid][ORM_ID]);
  577.  
  578.                     format(string,sizeof(string),"SIGN: Sign id %d has changed the font text to %s", signid, type);
  579.                     SendClientMessage(playerid, -1, string);
  580.  
  581.                     Sync_Sign(signid,true);
  582.                 }
  583.                 else SendErrorMessage(playerid,"Invalid signid!");
  584.             }
  585.             case 12:
  586.             {
  587.                 new signid = GetPlayerNearestSign(playerid);
  588.                 if(signid == -1) return SendErrorMessage(playerid,"You are not near any signs!");
  589.                 {
  590.                     format(string, sizeof(string), "You are near sign with id %d", signid);
  591.                     SendClientMessage(playerid, -1, string);
  592.                 }
  593.             }
  594.             default: SendSyntaxMessage(playerid,"/sign [create/delete/model/move/text/fontcolor/backgroundcolor/refresh/fontsize/materialsize/font/near]");
  595.         }
  596.     }
  597.     return CMD_SUCCESS;
  598. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement