1+
2+ /*
3+ native CreatePlayerCircleProgress(playerid, Float:pos_x, Float:pos_y, color = 0xFF0000FF, background_color = 0x000000FF, Float:size = 10.0, Float:thickness = 0.2);
4+ native UpdatePlayerCircleProgress(playerid, drawId, value);
5+ native DestroyPlayerCircleProgress(playerid, drawId);
6+ native DestroyPlayerCircleProgressAll(playerid);
7+ */
8+
9+ // Definers
10+ # define MAX_CIRCULOS_DRAW (50 )
11+
12+ enum CircleDraw_Enum {
13+ bool: CircleDraw_Valid,
14+
15+ // Config
16+ Float: CircleDraw_Position[2 ],
17+ Float: CircleDraw_Thickness,
18+ Float: CircleDraw_Size,
19+ CircleDraw_Color,
20+ CircleDraw_Background,
21+
22+ // Draws
23+ PlayerText: CircleDraw_Points[120 ]
24+ }
25+ new CircleDraw[MAX_PLAYERS][MAX_CIRCULOS_DRAW][CircleDraw_Enum];
26+
27+
28+ public OnPlayerDisconnect (playerid, reason) {
29+
30+ DestroyPlayerCircleProgressAll (playerid); // Invalid All [Not Required if you use Streamertextdraw :)]
31+
32+ new ret = 1 ;
33+ #if defined MainCircle_OnPlayerDisconnect
34+ ret = MainCircle_OnPlayerDisconnect (playerid, reason);
35+ #endif
36+ return ret;
37+ }
38+
39+ #if defined _ALS_OnPlayerDisconnect
40+ #undef OnPlayerDisconnect
41+ #else
42+ # define _ALS_OnPlayerDisconnect
43+ #endif
44+ # define OnPlayerDisconnect MainCircle_OnPlayerDisconnect
45+ #if defined MainCircle_OnPlayerDisconnect
46+ forward MainCircle_OnPlayerDisconnect (playerid, reason);
47+ #endif
48+
49+
50+
51+ /*
52+
53+ STOCKS
54+
55+ */
56+
57+ stock ctd (Float: angle, Float: distance, Float: sx, Float: sy, & Float: x, & Float: y) {
58+ x = sx + (distance * floatsin (- angle, degrees));
59+ y = sy + (distance * floatcos (angle, degrees));
60+ return true ;
61+ }
62+
63+ stock DestroyPlayerCircleProgressAll (playerid) {
64+
65+ for (new i = 0 ; i < MAX_CIRCULOS_DRAW; i++ )
66+ DestroyPlayerCircleProgress (playerid, i);
67+
68+ return true ;
69+ }
70+
71+ stock DestroyPlayerCircleProgress (playerid, drawId) {
72+
73+ if (drawId >= MAX_CIRCULOS_DRAW) return false ;
74+ if (CircleDraw[playerid][drawId][CircleDraw_Valid] == false ) return false ;
75+
76+ for (new i = 0 ; i < 120 ; i ++ ) {
77+ if (CircleDraw[playerid][drawId][CircleDraw_Points][i] == PlayerText: 0x FFFF ) continue ;
78+ PlayerTextDrawDestroy (playerid, CircleDraw[playerid][drawId][CircleDraw_Points][i]);
79+ CircleDraw[playerid][drawId][CircleDraw_Points][i] = PlayerText: INVALID_TEXT_DRAW;
80+ }
81+
82+ new dsadsa[CircleDraw_Enum];
83+ CircleDraw[playerid][drawId] = dsadsa;
84+ return true ;
85+ }
86+
87+ stock CreatePlayerCircleProgress (playerid, Float: pos_x, Float: pos_y, color = 0x FF0000FF , background_color = 0x 000000FF , Float: size = 10 .0 , Float: thickness = 0 .2 ) {
88+
89+ for (new i = 0 ; i < MAX_CIRCULOS_DRAW; i++ ) {
90+ if (CircleDraw[playerid][i][CircleDraw_Valid] == true ) continue ;
91+
92+ /* Config */
93+ CircleDraw[playerid][i][CircleDraw_Valid] = true ;
94+ CircleDraw[playerid][i][CircleDraw_Thickness] = thickness;
95+ CircleDraw[playerid][i][CircleDraw_Color] = color;
96+ CircleDraw[playerid][i][CircleDraw_Background] = background_color;
97+ CircleDraw[playerid][i][CircleDraw_Size] = size;
98+ CircleDraw[playerid][i][CircleDraw_Position][0 ] = pos_x;
99+ CircleDraw[playerid][i][CircleDraw_Position][1 ] = pos_y;
100+
101+ UpdatePlayerCircleProgress (playerid, i, 100 );
102+
103+ return i;
104+ }
105+ SendClientMessage (playerid, - 1 , " Error: Circle reached the limit" );
106+ return - 1 ;
107+ }
108+
109+ stock UpdatePlayerCircleProgress (playerid, drawId, value) {
110+
111+ new Float: x, Float: y, percent, count;
112+
113+ /* Prevent and Fix Values */
114+ value = value < 0 ? 0 : value;
115+ value = value > 100 ? 100 : value;
116+
117+ /* Color Fade? */
118+ percent = (120 * value) / 100 ;
119+
120+ /* Destroy to Update */
121+ for (new i = 0 ; i < 120 ; i ++ ) {
122+ if (CircleDraw[playerid][drawId][CircleDraw_Points][i] == PlayerText: 0x FFFF ) continue ;
123+ PlayerTextDrawDestroy (playerid, CircleDraw[playerid][drawId][CircleDraw_Points][i]);
124+ CircleDraw[playerid][drawId][CircleDraw_Points][i] = PlayerText: INVALID_TEXT_DRAW;
125+ }
126+
127+ /* Update and Create Points */
128+ for (new Float: v = 0 .0 ; v < 360 .0 ; v += 3 .0 ) {
129+ ctd (v + 180 .0 , CircleDraw[playerid][drawId][CircleDraw_Size], CircleDraw[playerid][drawId][CircleDraw_Position][0 ], CircleDraw[playerid][drawId][CircleDraw_Position][1 ], x, y);
130+
131+ CircleDraw[playerid][drawId][CircleDraw_Points][count] = CreatePlayerTextDraw (playerid, x, y, " ." );
132+ PlayerTextDrawAlignment (playerid, CircleDraw[playerid][drawId][CircleDraw_Points][count], 2 );
133+ PlayerTextDrawLetterSize (playerid, CircleDraw[playerid][drawId][CircleDraw_Points][count], CircleDraw[playerid][drawId][CircleDraw_Thickness], CircleDraw[playerid][drawId][CircleDraw_Thickness] * 3 .0 );
134+ PlayerTextDrawSetShadow (playerid, CircleDraw[playerid][drawId][CircleDraw_Points][count], 0 );
135+ PlayerTextDrawColor (playerid, CircleDraw[playerid][drawId][CircleDraw_Points][count], percent <= count ? (CircleDraw[playerid][drawId][CircleDraw_Background]) : (CircleDraw[playerid][drawId][CircleDraw_Color]));
136+ PlayerTextDrawShow (playerid, CircleDraw[playerid][drawId][CircleDraw_Points][count]);
137+ count++ ;
138+ }
139+ return true ;
140+ }
0 commit comments