Skip to content

Commit 0155675

Browse files
authored
Add files via upload
1 parent b025e3c commit 0155675

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed

Circulo.inc

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
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:0xFFFF) 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 = 0xFF0000FF, background_color = 0x000000FF, 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:0xFFFF) 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

Comments
 (0)