| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- #include <YSI_Coding\y_hooks>
- #define MAX_GRAFFITIS 180
- #define MAX_GRAFFITI_TEXT 40
- #define MAX_GRAFFITI_FONT 32
- static Float:GraffitiX[MAX_GRAFFITIS];
- static Float:GraffitiY[MAX_GRAFFITIS];
- static Float:GraffitiZ[MAX_GRAFFITIS];
- static Float:GraffitiRX[MAX_GRAFFITIS];
- static Float:GraffitiRY[MAX_GRAFFITIS];
- static Float:GraffitiRZ[MAX_GRAFFITIS];
- static GraffitiObject[MAX_GRAFFITIS];
- static GraffitiText[MAX_GRAFFITIS][MAX_GRAFFITI_TEXT];
- static GraffitiFont[MAX_GRAFFITIS][MAX_GRAFFITI_FONT];
- static GraffitiSize[MAX_GRAFFITIS];
- static GraffitiColor[MAX_GRAFFITIS];
- static Iterator:Graffiti<MAX_GRAFFITIS>;
- static const s_arrGraffitiColors[][] =
- {
- "{FFFFCC}FFFFCC", "{FFFF99}FFFF99", "{FFFF66}FFFF66", "{FFFF33}FFFF33", "{FFFF00}FFFF00", "{CCCC00}CCCC00",
- "{FF9900}FF9900", "{FF9933}FF9933", "{CC9966}CC9966", "{CC6600}CC6600", "{996633}996633", "{663300}663300",
- "{FF6633}FF6633", "{CC3300}CC3300", "{FF3300}FF3300", "{FF0000}FF0000", "{CC0000}CC0000", "{990000}990000",
- "{FFCCCC}FFCCCC", "{FF9999}FF9999", "{FF6666}FF6666", "{FF3333}FF3333", "{FF0033}FF0033", "{CC0033}CC0033",
- "{FF6699}FF6699", "{FF3366}FF3366", "{FF0066}FF0066", "{CC3366}CC3366", "{996666}996666", "{663333}663333",
- "{FF99CC}FF99CC", "{FF3399}FF3399", "{FF0099}FF0099", "{CC0066}CC0066", "{993366}993366", "{660033}660033",
- "{CC99FF}CC99FF", "{9933CC}9933CC", "{9933FF}9933FF", "{9900FF}9900FF", "{660099}660099", "{663366}663366",
- "{9966CC}9966CC", "{9966FF}9966FF", "{6600CC}6600CC", "{6633CC}6633CC", "{663399}663399", "{330033}330033",
- "{CCCCFF}CCCCFF", "{9999FF}9999FF", "{6633FF}6633FF", "{6600FF}6600FF", "{330099}330099", "{330066}330066",
- "{6699FF}6699FF", "{3366FF}3366FF", "{0000FF}0000FF", "{0000CC}0000CC", "{0033CC}0033CC", "{000033}000033",
- "{0066FF}0066FF", "{0066CC}0066CC", "{3366CC}3366CC", "{0033FF}0033FF", "{003399}003399", "{003366}003366",
- "{99CCFF}99CCFF", "{3399FF}3399FF", "{0099FF}0099FF", "{6699CC}6699CC", "{336699}336699", "{006699}006699",
- "{99CCCC}99CCCC", "{66CCCC}66CCCC", "{339999}339999", "{669999}669999", "{006666}006666", "{336666}336666",
- "{99FFCC}99FFCC", "{66FFCC}66FFCC", "{33FFCC}33FFCC", "{00FFCC}00FFCC", "{33CCCC}33CCCC", "{009999}009999",
- "{CCFFCC}CCFFCC", "{99CC99}99CC99", "{66CC66}66CC66", "{669966}669966", "{336633}336633", "{003300}003300",
- "{33FF33}33FF33", "{00FF33}00FF33", "{00FF00}00FF00", "{00CC00}00CC00", "{33CC33}33CC33", "{00CC33}00CC33",
- "{66FF00}66FF00", "{66FF33}66FF33", "{33FF00}33FF00", "{33CC00}33CC00", "{339900}339900", "{009900}009900",
- "{CCFF99}CCFF99", "{99FF66}99FF66", "{66CC00}66CC00", "{66CC33}66CC33", "{669933}669933", "{336600}336600",
- "{99FF00}99FF00", "{99FF33}99FF33", "{99CC66}99CC66", "{99CC00}99CC00", "{99CC33}99CC33", "{669900}669900",
- "{FFFFFF}FFFFFF", "{CCCCCC}CCCCCC", "{999999}999999", "{666666}666666", "{333333}333333", "{000000}000000"
- };
- static const s_arrGraffitiColorText[][] =
- {
- "{FFFFCC}", "{FFFF99}", "{FFFF66}", "{FFFF33}", "{FFFF00}", "{CCCC00}",
- "{FF9900}", "{FF9933}", "{CC9966}", "{CC6600}", "{996633}", "{663300}",
- "{FF6633}", "{CC3300}", "{FF3300}", "{FF0000}", "{CC0000}", "{990000}",
- "{FFCCCC}", "{FF9999}", "{FF6666}", "{FF3333}", "{FF0033}", "{CC0033}",
- "{FF6699}", "{FF3366}", "{FF0066}", "{CC3366}", "{996666}", "{663333}",
- "{FF99CC}", "{FF3399}", "{FF0099}", "{CC0066}", "{993366}", "{660033}",
- "{CC99FF}", "{9933CC}", "{9933FF}", "{9900FF}", "{660099}", "{663366}",
- "{9966CC}", "{9966FF}", "{6600CC}", "{6633CC}", "{663399}", "{330033}",
- "{CCCCFF}", "{9999FF}", "{6633FF}", "{6600FF}", "{330099}", "{330066}",
- "{6699FF}", "{3366FF}", "{0000FF}", "{0000CC}", "{0033CC}", "{000033}",
- "{0066FF}", "{0066CC}", "{3366CC}", "{0033FF}", "{003399}", "{003366}",
- "{99CCFF}", "{3399FF}", "{0099FF}", "{6699CC}", "{336699}", "{006699}",
- "{99CCCC}", "{66CCCC}", "{339999}", "{669999}", "{006666}", "{336666}",
- "{99FFCC}", "{66FFCC}", "{33FFCC}", "{00FFCC}", "{33CCCC}", "{009999}",
- "{CCFFCC}", "{99CC99}", "{66CC66}", "{669966}", "{336633}", "{003300}",
- "{33FF33}", "{00FF33}", "{00FF00}", "{00CC00}", "{33CC33}", "{00CC33}",
- "{66FF00}", "{66FF33}", "{33FF00}", "{33CC00}", "{339900}", "{009900}",
- "{CCFF99}", "{99FF66}", "{66CC00}", "{66CC33}", "{669933}", "{336600}",
- "{99FF00}", "{99FF33}", "{99CC66}", "{99CC00}", "{99CC33}", "{669900}",
- "{FFFFFF}", "{CCCCCC}", "{999999}", "{666666}", "{333333}", "{000000}"
- };
- timer UpdateGraffiti[1000](playerid, grafid, letter)
- {
- if(!IsPlayerInRangeOfPoint(playerid, 10.0, GraffitiX[grafid], GraffitiY[grafid], GraffitiZ[grafid]))
- {
- Iter_Remove(Graffiti, grafid);
- DestroyDynamicObject(GraffitiObject[grafid]);
- return true;
- }
- if(!IsPlayerInRangeOfPoint(playerid, 4.0, GraffitiX[grafid], GraffitiY[grafid], GraffitiZ[grafid]))
- {
- defer UpdateGraffiti(playerid, grafid, letter);
- return true;
- }
- if(!IsPlayerFacingPoint(playerid, GraffitiX[grafid], GraffitiY[grafid], 20))
- {
- defer UpdateGraffiti(playerid, grafid, letter);
- return true;
- }
- if(GetPlayerWeapon(playerid) != 41)
- {
- defer UpdateGraffiti(playerid, grafid, letter);
- return true;
- }
- switch(GetPlayerAnimationIndex(playerid))
- {
- case 640, 1158..1164, 1167:
- {
- new keys, updown, leftright;
- GetPlayerKeys(playerid, keys, updown, leftright);
- if(keys != 4 && keys != 132)
- {
- defer UpdateGraffiti(playerid, grafid, letter);
- return true;
- }
- new graf[40];
- strmid(graf, GraffitiText[grafid], 0, letter);
- SetDynamicObjectMaterialText(GraffitiObject[grafid], 0, graf, OBJECT_MATERIAL_SIZE_256x128, GraffitiFont[grafid], GraffitiSize[grafid], 0, 0xFFFFFFFF, 0, 1);
- if(strlen(graf) != strlen(GraffitiText[grafid])) defer UpdateGraffiti(playerid, grafid, letter + 1);
- else Debug(playerid, "Your graffiti is finished. ID: %d, Graffiti count: %d.", grafid, Iter_Count(Graffiti));
- }
- default: defer UpdateGraffiti(playerid, grafid, letter);
- }
- return true;
- }
- hook OnPlayerEditDynamicObj(playerid, STREAMER_TAG_OBJECT:objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
- {
- new grafid = GetPVarInt(playerid, "EditingGraffitiID");
- if(objectid == GraffitiObject[grafid])
- {
- if(response == EDIT_RESPONSE_FINAL)
- {
- GraffitiX[grafid] = x;
- GraffitiY[grafid] = y;
- GraffitiZ[grafid] = z;
- GraffitiRX[grafid] = rx;
- GraffitiRY[grafid] = ry;
- GraffitiRZ[grafid] = rz;
- SetDynamicObjectMaterialText(objectid, 0, " ", OBJECT_MATERIAL_SIZE_256x128, GraffitiFont[grafid], GraffitiSize[grafid], 0, 0xFFFFFFFF, 0, 1);
- Debug(playerid, "Please start spraying.");
- defer UpdateGraffiti(playerid, grafid, 9);
- }
- else if(response == EDIT_RESPONSE_CANCEL)
- {
- Iter_Remove(Graffiti, grafid);
- DestroyDynamicObject(objectid);
- }
- }
- }
- Graffiti_Create(playerid, step)
- {
- switch(step)
- {
- case 1: // Color
- {
- inline _response(response, listitem, string:inputtext[])
- {
- #pragma unused inputtext
- if(!response) return 0;
- SetPVarInt(playerid, "GraffitiColor", listitem);
- Graffiti_Create(playerid, 2);
- }
- new string[1924];
- for(new i; i < sizeof(s_arrGraffitiColors); i++)
- {
- strcat(string, va_return("%s\n", s_arrGraffitiColors[i]));
- }
- Dialog_ShowCallback(playerid, using inline _response, DIALOG_STYLE_LIST, "Graffiti Color", string, "Next", "Close");
- }
- case 2: // Size
- {
- inline _response(response, listitem, string:inputtext[])
- {
- #pragma unused listitem
- if(!response) return Graffiti_Create(playerid, 1);
- new size = strval(inputtext);
- if(!(5 <= size <= 50))
- {
- SendErrorMessage(playerid, "The graffiti size must be between 5 and 50.");
- return Graffiti_Create(playerid, 2);
- }
- SetPVarInt(playerid, "GraffitiSize", size);
- Graffiti_Create(playerid, 3);
- }
- Dialog_ShowCallback(playerid, using inline _response, DIALOG_STYLE_INPUT, "Graffiti Size", "{b3b3b3}Choose the graffiti size.\n\n{eeeeee}Must be between 5 and 50.", "Next", "Back");
- }
- case 3: // Text
- {
- inline _response(response, listitem, string:inputtext[])
- {
- #pragma unused listitem
- if(!response) return Graffiti_Create(playerid, 2);
- new length = strlen(inputtext);
- if(!(0 < length < MAX_GRAFFITI_TEXT))
- {
- SendErrorMessageF(playerid, "The graffiti text must be between 0 and %d characters", MAX_GRAFFITI_TEXT - 1);
- return Graffiti_Create(playerid, 2);
- }
- new id = Iter_Free(Graffiti);
- if(id == INVALID_ITERATOR_SLOT) return SendErrorMessage(playerid, "The maximum number of graffiti on the server has been reached.");
- new Float:x, Float:y, Float:z, Float:a;
- GetPlayerPos(playerid, x, y, z);
- GetPlayerFacingAngle(playerid, a);
- format(GraffitiFont[id], MAX_GRAFFITI_FONT, "Arial");
- format(GraffitiText[id], MAX_GRAFFITI_TEXT, inputtext);
- strins(GraffitiText[id], s_arrGraffitiColorText[GetPVarInt(playerid, "GraffitiColor")], 0);
- GraffitiObject[id] = CreateDynamicObject(19482, x, y, z, 0.0, 0.0, 270.0 + a, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid));
- GraffitiSize[id] = GetPVarInt(playerid, "GraffitiSize") * 5;
- GraffitiColor[id] = GetPVarInt(playerid, "GraffitiColor");
- ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0, 1);
- SetPVarInt(playerid, "EditingGraffitiID", id);
- SetDynamicObjectMaterialText(GraffitiObject[id], 0, GraffitiText[id], OBJECT_MATERIAL_SIZE_256x128, GraffitiFont[id], GraffitiSize[id], 0, 0xFFFFFFFF, 0, 1);
- EditDynamicObject(playerid, GraffitiObject[id]);
- Iter_Add(Graffiti, id);
- }
- Dialog_ShowCallback(playerid, using inline _response, DIALOG_STYLE_INPUT, "Graffiti Text", "{b3b3b3}Input the graffiti text.", "Submit", "Back");
- }
- }
- return 1;
- }
- CMD:graffiti(playerid, params[])
- {
- if(IsPlayerWounded(playerid)) return SendErrorMessage(playerid, "You can't do this while wounded.");
- if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendErrorMessage(playerid, "You need to be onfoot in order to do this.");
- if(GetPlayerWeapon(playerid) != 41) return SendErrorMessage(playerid, "You need a spraycan in order to do this.");
- Graffiti_Create(playerid, 1);
- ApplyAnimation(playerid, "GRAFFITI", "spraycan_fire", 4.1, 1, 1, 1, 0, 0, 1);
- return 1;
- }
- CMD:deletegraffiti(playerid, params[])
- {
- new grafid;
- if(sscanf(params, "i", grafid)) return SendSyntaxMessage(playerid, "/deletegraffiti (id)");
- if(!Iter_Contains(Graffiti, grafid)) return SendErrorMessage(playerid, "That graffiti ID is not valid.");
- return 1;
- }
|