| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- /*
- seif_cursor by Seif - A SA-MP 0.2.2 cursor
- */
- /*x---------------------------------Important-------------------------------------x*/
- //**INCLUDES**//
- #include <a_samp>
- //**PRAGMAS**//
- //**MISC**//
- /*x---------------------------------Defining-------------------------------------x*/
- //**KEYS**//
- #define CURSOR_UP KEY_UP
- #define CURSOR_DOWN KEY_DOWN
- #define CURSOR_RIGHT KEY_RIGHT
- #define CURSOR_LEFT KEY_LEFT
- #define CURSOR_BOOST KEY_SPRINT
- #define CURSOR_CLICK KEY_FIRE
- #define CURSOR_TOGGLE KEY_WALK+KEY_SPRINT // ON FOOT: walk + sprint to be able to toggle on/off cursor usage
- #define CURSOR_TOGGLE_V KEY_FIRE+320 // WHEN INSIDE VEHICLES: fire + look behind to be able to toggle on/off cursor usage
- #define DEFAULT_SPEED 5
- #define DEFAULT_SPEED2 10
- #define ENABLE_SPEEDCOMMAND_ADJUST // If uncommented, it will enable players to adjust cursor's speeds with a command
- #define MAX_BOXES 50
- //**VARIABLES**//
- new Text:Cursorpt1[MAX_PLAYERS];
- new Text:Cursorpt2[MAX_PLAYERS];
- new Text:Cursorpt3[MAX_PLAYERS];
- new Text:Cursorpt4[MAX_PLAYERS];
- new Text:CursorBox[MAX_BOXES];
- new Float:CursorX[MAX_PLAYERS];
- new Float:CursorY[MAX_PLAYERS];
- new Float:cursorposx[MAX_PLAYERS];
- new Float:cursorposy[MAX_PLAYERS];
- new Float:BoxX[MAX_BOXES];
- new Float:BoxY[MAX_BOXES];
- new Float:BoxX2[MAX_BOXES];
- new CursorSpeed[MAX_PLAYERS];
- new Cursorx2Speed[MAX_PLAYERS];
- new cursortime[MAX_PLAYERS];
- new bool:CursorMode[MAX_PLAYERS];
- new boxes;
- // **FORWARDS** //
- forward CreateCursor();
- forward UpdateCursor(playerid, Float:x, Float:y);
- forward GetCursorPos(playerid, &Float:x, &Float:y);
- forward IsHoldingKey(playerid);
- forward ShowCursorForPlayer(playerid);
- forward HideCursorForPlayer(playerid);
- forward KillCursor();
- forward Cursor_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
- forward Cursor_OnPlayerCommandText(playerid, cmdtext[]);
- forward Cursor_OnPlayerConnect(playerid);
- forward OnPlayerClickCursor(playerid, Float:x, Float:y);
- forward CursorActivity(playerid);
- forward CursorToPoint(playerid, Float:radius, Float:x, Float:y);
- forward CursorClick(playerid);
- /*x---------------------------------CallBacks-------------------------------------x*/
- public ShowCursorForPlayer(playerid)
- {
- TextDrawShowForPlayer(playerid, Cursorpt1[playerid]);
- TextDrawShowForPlayer(playerid, Cursorpt2[playerid]);
- TextDrawShowForPlayer(playerid, Cursorpt3[playerid]);
- TextDrawShowForPlayer(playerid, Cursorpt4[playerid]);
- }
- public HideCursorForPlayer(playerid)
- {
- TextDrawHideForPlayer(playerid, Cursorpt1[playerid]);
- TextDrawHideForPlayer(playerid, Cursorpt2[playerid]);
- TextDrawHideForPlayer(playerid, Cursorpt3[playerid]);
- TextDrawHideForPlayer(playerid, Cursorpt4[playerid]);
- }
- public Cursor_OnPlayerConnect(playerid)
- {
- for(new i = 0; i < MAX_BOXES; i++)
- {
- TextDrawShowForPlayer(playerid, CursorBox[i]);
- }
- HideCursorForPlayer(playerid);
- CursorMode[playerid] = false;
- CursorSpeed[playerid] = DEFAULT_SPEED;
- Cursorx2Speed[playerid] = DEFAULT_SPEED2;
- return 1;
- }
- public KillCursor()
- {
- for(new i = 0; i < GetMaxPlayers(); i++)
- {
- TextDrawDestroy(Cursorpt1[i]);
- TextDrawDestroy(Cursorpt2[i]);
- TextDrawDestroy(Cursorpt3[i]);
- TextDrawDestroy(Cursorpt4[i]);
- }
- /*if (playerid == INVALID_PLAYER_ID)
- {
- for(new i = 0; i < MAX_PLAYERS; i++)
- {
- TextDrawDestroy(Cursorpt1[i]);
- TextDrawDestroy(Cursorpt2[i]);
- TextDrawDestroy(Cursorpt3[i]);
- TextDrawDestroy(Cursorpt4[i]);
- }
- }
- else
- {
- TextDrawDestroy(Cursorpt1[playerid]);
- TextDrawDestroy(Cursorpt2[playerid]);
- TextDrawDestroy(Cursorpt3[playerid]);
- TextDrawDestroy(Cursorpt4[playerid]);
- }*/
- }
- public Cursor_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if (newkeys == CURSOR_TOGGLE || newkeys == CURSOR_TOGGLE_V)
- {
- if (CursorMode[playerid] == false)
- {
- ShowCursorForPlayer(playerid);
- TogglePlayerControllable(playerid, false);
- cursortime[playerid] = SetTimerEx("IsHoldingKey",100,1,"d",playerid);
- CursorMode[playerid] = true;
- }
- else
- {
- HideCursorForPlayer(playerid);
- TogglePlayerControllable(playerid, true);
- KillTimer(cursortime[playerid]);
- CursorMode[playerid] = false;
- }
- }
- if (newkeys == CURSOR_CLICK)
- {
- if (CursorMode[playerid] == true)
- {
- if (!IsPlayerInAnyVehicle(playerid)) ClearAnimations(playerid);
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- TextDrawColor(Cursorpt1[playerid], 0xE60000FF);
- TextDrawColor(Cursorpt2[playerid], 0xE60000FF);
- TextDrawColor(Cursorpt3[playerid], 0xE60000FF);
- TextDrawColor(Cursorpt4[playerid], 0xE60000FF);
- ShowCursorForPlayer(playerid);
- OnPlayerClickCursor(playerid, x, y);
- SetTimerEx("CursorClick",300,0,"d",playerid);
- }
- }
- }
- public CreateCursor()
- {
- for(new p; p < GetMaxPlayers(); p++)
- {
- CursorX[p] = 222.000000;
- CursorY[p] = 278.000000;
- Cursorpt1[p] = TextDrawCreate(222.000000,278.000000,"l");
- Cursorpt2[p] = TextDrawCreate(223.000000,279.000000,\"\");
- Cursorpt3[p] = TextDrawCreate(223.000000,285.000000,"-");
- Cursorpt4[p] = TextDrawCreate(227.000000,290.000000,\"\");
- TextDrawAlignment(Cursorpt1[p],0);
- TextDrawAlignment(Cursorpt2[p],0);
- TextDrawAlignment(Cursorpt3[p],0);
- TextDrawAlignment(Cursorpt4[p],0);
- TextDrawBackgroundColor(Cursorpt1[p],0x000000ff);
- TextDrawBackgroundColor(Cursorpt2[p],0x000000ff);
- TextDrawBackgroundColor(Cursorpt3[p],0x000000ff);
- TextDrawBackgroundColor(Cursorpt4[p],0x000000ff);
- TextDrawFont(Cursorpt1[p],1);
- TextDrawLetterSize(Cursorpt1[p],0.199999,1.600000);
- TextDrawFont(Cursorpt2[p],2);
- TextDrawLetterSize(Cursorpt2[p],0.499998,1.300000);
- TextDrawFont(Cursorpt4[p],2);
- TextDrawLetterSize(Cursorpt4[p],0.199998,0.599999);
- TextDrawColor(Cursorpt1[p],0xffffffff);
- TextDrawColor(Cursorpt2[p],0xffffffff);
- TextDrawFont(Cursorpt3[p],0);
- TextDrawLetterSize(Cursorpt3[p],0.699999,1.100000);
- TextDrawColor(Cursorpt3[p],0xffffffff);
- TextDrawColor(Cursorpt4[p],0xffffffff);
- TextDrawSetOutline(Cursorpt1[p],1);
- TextDrawSetOutline(Cursorpt2[p],1);
- TextDrawSetOutline(Cursorpt3[p],1);
- TextDrawSetOutline(Cursorpt4[p],1);
- TextDrawSetProportional(Cursorpt1[p],1);
- TextDrawSetProportional(Cursorpt2[p],1);
- TextDrawSetProportional(Cursorpt3[p],1);
- TextDrawSetProportional(Cursorpt4[p],1);
- TextDrawSetShadow(Cursorpt1[p],1);
- TextDrawSetShadow(Cursorpt2[p],1);
- TextDrawSetShadow(Cursorpt3[p],1);
- TextDrawSetShadow(Cursorpt4[p],1);
- CursorSpeed[p] = DEFAULT_SPEED;
- Cursorx2Speed[p] = DEFAULT_SPEED2;
- CursorMode[p] = false;
- }
- }
- public UpdateCursor(playerid, Float:x,Float:y)
- {
- new i = playerid;
- TextDrawDestroy(Cursorpt1[i]);
- TextDrawDestroy(Cursorpt2[i]);
- TextDrawDestroy(Cursorpt3[i]);
- TextDrawDestroy(Cursorpt4[i]);
- Cursorpt1[i] = TextDrawCreate(x,y,"l");
- Cursorpt2[i] = TextDrawCreate(x+1,y+1,\"\");
- Cursorpt3[i] = TextDrawCreate(x+1,y+7,"-");
- Cursorpt4[i] = TextDrawCreate(x+5,y+12,\"\");
- TextDrawAlignment(Cursorpt1[i],0);
- TextDrawAlignment(Cursorpt2[i],0);
- TextDrawAlignment(Cursorpt3[i],0);
- TextDrawAlignment(Cursorpt4[i],0);
- TextDrawBackgroundColor(Cursorpt1[i],0x000000ff);
- TextDrawBackgroundColor(Cursorpt2[i],0x000000ff);
- TextDrawBackgroundColor(Cursorpt3[i],0x000000ff);
- TextDrawBackgroundColor(Cursorpt4[i],0x000000ff);
- TextDrawFont(Cursorpt1[i],1);
- TextDrawLetterSize(Cursorpt1[i],0.199999,1.600000);
- TextDrawFont(Cursorpt2[i],2);
- TextDrawLetterSize(Cursorpt2[i],0.499998,1.300000);
- TextDrawFont(Cursorpt3[i],0);
- TextDrawLetterSize(Cursorpt3[i],0.699999,1.100000);
- TextDrawFont(Cursorpt4[i],2);
- TextDrawLetterSize(Cursorpt4[i],0.199998,0.599999);
- TextDrawColor(Cursorpt1[i],0xffffffff);
- TextDrawColor(Cursorpt2[i],0xffffffff);
- TextDrawColor(Cursorpt3[i],0xffffffff);
- TextDrawColor(Cursorpt4[i],0xffffffff);
- TextDrawSetOutline(Cursorpt1[i],1);
- TextDrawSetOutline(Cursorpt2[i],1);
- TextDrawSetOutline(Cursorpt3[i],1);
- TextDrawSetOutline(Cursorpt4[i],1);
- TextDrawSetProportional(Cursorpt1[i],1);
- TextDrawSetProportional(Cursorpt2[i],1);
- TextDrawSetProportional(Cursorpt3[i],1);
- TextDrawSetProportional(Cursorpt4[i],1);
- TextDrawSetShadow(Cursorpt1[i],1);
- TextDrawSetShadow(Cursorpt2[i],1);
- TextDrawSetShadow(Cursorpt3[i],1);
- TextDrawSetShadow(Cursorpt4[i],1);
- ShowCursorForPlayer(playerid);
- CursorX[i] = x;
- CursorY[i] = y;
- }
- public GetCursorPos(playerid, &Float:x, &Float:y)
- {
- x = CursorX[playerid];
- y = CursorY[playerid];
- }
- public IsHoldingKey(playerid)
- {
- new keys, updown, leftright;
- GetPlayerKeys(playerid, keys, updown, leftright);
-
- if (updown == CURSOR_UP)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- UpdateCursor(playerid, x,y-CursorSpeed[playerid]);
- }
- else if (updown == CURSOR_DOWN)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- UpdateCursor(playerid, x,y+CursorSpeed[playerid]);
- }
- if (leftright == CURSOR_RIGHT)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- UpdateCursor(playerid, x+CursorSpeed[playerid],y);
- }
- else if (leftright == CURSOR_LEFT)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- UpdateCursor(playerid, x-CursorSpeed[playerid],y);
- }
-
- if (updown == CURSOR_UP && keys & CURSOR_BOOST)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- UpdateCursor(playerid, x,y-Cursorx2Speed[playerid]);
- }
- else if (updown == CURSOR_DOWN && keys & CURSOR_BOOST)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- UpdateCursor(playerid, x,y+Cursorx2Speed[playerid]);
- }
- if (leftright == CURSOR_RIGHT && keys & CURSOR_BOOST)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- UpdateCursor(playerid, x+Cursorx2Speed[playerid],y);
- }
- else if (leftright == CURSOR_LEFT && keys & CURSOR_BOOST)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- UpdateCursor(playerid, x-Cursorx2Speed[playerid],y);
- }
- }
- public Cursor_OnPlayerCommandText(playerid, cmdtext[])
- {
- #if defined ENABLE_SPEEDCOMMAND_ADJUST
- new entry[20],ccmd[20], idx;
- ccmd = cursor_strtok(cmdtext,idx);
- if (!strcmp(ccmd, "/cursorspeed", true))
- {
- entry = cursor_strtok(cmdtext, idx);
- if (!strlen(entry)) return 1;
- new speed = strval(entry);
- CursorSpeed[playerid] = speed;
- new frm[128];
- format(frm, sizeof(frm), "Cursor speed set to: %d. (default:%d)", speed, DEFAULT_SPEED);
- SendClientMessage(playerid, 0xF97804FF, frm);
- return 1;
- }
- if (!strcmp(ccmd, "/cursorspeed2", true))
- {
- entry = cursor_strtok(cmdtext, idx);
- if (!strlen(entry)) return 1;
- new speed = strval(entry);
- Cursorx2Speed[playerid] = speed;
- new frm[128];
- format(frm, sizeof(frm), "Cursor x2 speed set to: %d. (default:%d)", speed, DEFAULT_SPEED2);
- SendClientMessage(playerid, 0xF97804FF, frm);
- return 1;
- }
- #endif
- return 0;
- }
- public CursorActivity(playerid)
- {
- new Float:x,Float:y;
- GetCursorPos(playerid,x,y);
- if (cursorposx[playerid] == x && cursorposy[playerid] == y)
- {
- HideCursorForPlayer(playerid);
- SetTimerEx("CursorActivity",3000,0,"d",playerid);
- }
- else
- {
- cursorposx[playerid] = x;
- cursorposy[playerid] = y;
- ShowCursorForPlayer(playerid);
- SetTimerEx("CursorActivity",3000,0,"d",playerid);
- }
- }
- public CursorToPoint(playerid, Float:radius, Float:x, Float:y)
- {
- new Float:cx, Float:cy;
- new Float:ox, Float:oy;
- GetCursorPos(playerid, ox, oy);
- cx = (ox -x);
- cy = (oy -y);
- if (((cx < radius) && (cx > -radius)) && ((cy < radius) && (cy > -radius))) return 1;
- return 0;
- }
- forward CursorInBox(playerid, boxid);
- public CursorInBox(playerid, boxid)
- {
- new Float:x, Float:y;
- new Float:X, Float:Y;
- GetCursorPos(playerid, x, y);
- GetBoxPos(boxid, X, Y);
- if ((x >= X && x <= BoxX2[boxid]) && (y >= Y && y <= Y+5)) return 1;
- return 0;
- }
- public CursorClick(playerid)
- {
- new Float:X,Float:Y;
- GetCursorPos(playerid, X, Y);
- UpdateCursor(playerid, X,Y);
- }
- forward GetBoxPos(boxid, &Float:x, &Float:y);
- public GetBoxPos(boxid, &Float:x, &Float:y)
- {
- x = BoxX[boxid];
- y = BoxY[boxid];
- }
- forward AddButton(Float:x, Float:y, color, name[]);
- public AddButton(Float:x, Float:y, color, name[])
- {
- new times = 10;
- boxes++;
- CursorBox[boxes] = TextDrawCreate(x, y, name);
- TextDrawUseBox(CursorBox[boxes],1);
- TextDrawBoxColor(CursorBox[boxes],color);
- TextDrawTextSize(CursorBox[boxes],x+(strlen(name)*times),0.000000);
- TextDrawAlignment(CursorBox[boxes],0);
- TextDrawBackgroundColor(CursorBox[boxes],0x000000ff);
- TextDrawFont(CursorBox[boxes],1);
- TextDrawLetterSize(CursorBox[boxes],0.500000,0.750000);
- TextDrawColor(CursorBox[boxes],0xffffffff);
- TextDrawSetOutline(CursorBox[boxes],1);
- TextDrawSetProportional(CursorBox[boxes],1);
- TextDrawSetShadow(CursorBox[boxes],1);
- BoxX[boxes] = x-1.0;
- BoxY[boxes] = y-3.0;
- BoxX2[boxes] = BoxX[boxes]+(strlen(name)*times);
- TextDrawShowForAll(CursorBox[boxes]);
- return boxes;
- }
- forward DeleteButtons();
- public DeleteButtons()
- {
- for(new b = 1; b < MAX_BOXES; b++) TextDrawDestroy(CursorBox[b]);
- }
- stock cursor_strtok(const string[], &index)
- {
- new length = strlen(string);
- while ((index < length) && (string[index] <= ' '))
- {
- index++;
- }
- new offset = index;
- new result[20];
- while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
- {
- result[index - offset] = string[index];
- index++;
- }
- result[index - offset] = EOS;
- return result;
- }
- /*public OnPlayerClickCursor(playerid, Float:x, Float:y)
- {
- return 1;
- }*/
|