· 9 years ago · Nov 18, 2016, 12:30 AM
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 "dm"
15#define jsDATABASE "gta_jgdm"
16#define jsPASSWORD "CjQMMnev9vhFUJzdRXyhYjjZ8dABjtgP"
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
35enum 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};
48new jSign[MAX_SIGNS][j_sign];
49new SignID[MAX_SIGNS];
50new Iterator:Signs<MAX_SIGNS>;
51
52new
53 Sign_Connection = -1,
54 EditSign[MAX_PLAYERS] = {-1, ...};
55
56new 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
74new 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
86public 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
119public 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
129public 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
158Dialog:ListMaterial_Size(playerid, response, listitem, inputtext[])
159{
160 if(response)
161 {
162 new id = GetPVarInt(playerid, "s_Sign"), 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
175Dialog:ListColor_Font(playerid, response, listitem, inputtext[])
176{
177 if(response)
178 {
179 new id = GetPVarInt(playerid, "s_Sign"), 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
192Dialog:ListColor_Back(playerid, response, listitem, inputtext[])
193{
194 if(response)
195 {
196 new id = GetPVarInt(playerid, "s_Sign"), 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
209function 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
243function 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
263stock 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
284stock 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
314stock 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
327stock 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
336SSCANF: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
379CMD: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, "s_Sign", 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, "s_Sign", 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, "s_Sign", 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}