View difference between Paste ID: GSa7cXQN and ECwv6DEG
SHOW: | | - or go back to the newest paste.
1-
// fadeTest Script por Stewie`
1+
#include <a_samp>
2-
/* Comandos:
2+
3-
* 	/fadein [tempo]
3+
forward Fader_PlayerProcess(playerid);
4-
* 	/fadeout [tempo]
4+
stock fadeIn(playerid, ms, color = 0x000000FF);
5-
*/
5+
stock fadeOut(playerid, ms, color = 0x000000FF);
6-
6+
7-
#define FILTERSCRIPT
7+
static const
8-
#include <a_samp>
8+
	MAX_TRANSPARENCY = 0xFF,
9-
#include <fader>
9+
	TIMER_FRAME = 50;
10-
#include <zcmd>
10+
	
11-
11+
enum {
12-
public OnFilterScriptInit() {
12+
	FADE_IN = 1,
13-
	print("* fadeTest Script por Stewie` carregado.");
13+
	FADE_OUT
14-
	return 1;
14+
}
15-
}
15+
16-
16+
enum E_PLAYER_FADE_INFO {
17-
CMD:fadein(playerid, params[]) {
17+
	PlayerText:fadeText,
18-
	new time;
18+
	fadeCurrentAlpha,
19-
	if(!strlen(params)) {
19+
	
20-
	    SendClientMessage(playerid, -1, "CMD: /fadein [time]");
20+
	fadeTotalFrames,
21-
	    return 1;
21+
	fadeTransparencyPerFrame,
22-
	}
22+
	fadeColor,
23-
	time = strval(params);
23+
	
24-
	fadeIn(playerid, time, 0x000000FF);
24+
	fadeTimer,
25-
	return 1;
25+
	fadeType
26-
}
26+
}
27-
27+
static gPlayerFadeInfo[MAX_PLAYERS][E_PLAYER_FADE_INFO];
28-
CMD:fadeout(playerid, params[]) {
28+
29-
	new time;
29+
#define CAP_MAX(%0) ((%0 > MAX_TRANSPARENCY) ? (MAX_TRANSPARENCY) : %0)
30-
	if(!strlen(params)) {
30+
#define CAP_MIN(%0) ((%0 < 0) ? (0) : %0)
31-
	    SendClientMessage(playerid, -1, "CMD: /fadeout [time]");
31+
32-
	    return 1;
32+
/* Natives:
33-
	}
33+
*	native fadeIn(playerid, ms, color = 0x000000FF);
34-
	time = strval(params);
34+
*	native fadeOut(playerid, ms, color = 0x000000FF);
35-
	fadeOut(playerid, time, 0x000000FF);
35+
*
36-
	return 1;
36+
* 	por Stewie`
37-
}
37+
*/
38
39
stock fadeIn(playerid, ms, color = 0x000000FF) {
40
	if(!IsPlayerConnected(playerid)) 
41
		return 0;
42
		
43
	// pegar a transparência atual da textdraw
44
	new alpha = gPlayerFadeInfo[playerid][fadeCurrentAlpha];
45
	// no caso da textdraw tiver a transparência cheia, ou mais do que o permitido, o nosso trabalho está feito
46
	if((MAX_TRANSPARENCY - alpha) <= 0) {
47
		gPlayerFadeInfo[playerid][fadeCurrentAlpha] = MAX_TRANSPARENCY;
48
		gPlayerFadeInfo[playerid][fadeType] = 0;
49
50
		PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | alpha);
51
		PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
52
		return 1;
53
	}
54
	// configurar o tipo de fade que estamos aplicando
55
	gPlayerFadeInfo[playerid][fadeType] = FADE_IN;
56
	
57
	// mover um byte para a direita para 'apagar' a transparência
58
	// e '>>' para não voltar para o começo os primeiros bits
59
	gPlayerFadeInfo[playerid][fadeColor] = color >> 8;
60
61
	// a quantidade de frames que o PlayerProcess irá processar
62
	// você pode perceber que a duração é dividida pelos frames por processamento e, se existe restante, é adicinado mais um processamento
63
	gPlayerFadeInfo[playerid][fadeTotalFrames] = ((ms / TIMER_FRAME) + _:((ms % TIMER_FRAME) > 0));
64
	// o tanto de transparência que será adicionado por cada processamento
65
	// no fim, deve ser checado a quantidade de transarência que a textdraw possui
66
	// a transparência que será adicionada até o final é dividida pela quantidade de frames que serão rodados
67
	gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] =  (MAX_TRANSPARENCY - alpha) / gPlayerFadeInfo[playerid][fadeTotalFrames];
68
	
69
	if(gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] <= 0) {
70
		gPlayerFadeInfo[playerid][fadeType] = 0;
71
		return 1;
72
	}
73
	
74
	PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | alpha);
75
	PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
76
	// se não existir o timer, criá-lo!
77
	if(!gPlayerFadeInfo[playerid][fadeTimer]) {
78
		gPlayerFadeInfo[playerid][fadeTimer] = SetTimerEx("Fader_PlayerProcess", TIMER_FRAME, 1, "i", playerid);
79
	}
80
	return 1;
81
}
82
83
stock fadeOut(playerid, ms, color = 0x000000FF) {
84
	if(!IsPlayerConnected(playerid)) 
85
		return 0;
86
		
87
	// pegar a transparência atual da textdraw
88
	new alpha = gPlayerFadeInfo[playerid][fadeCurrentAlpha];
89
	// no caso da textdraw não tiver nenhuma transparênca, sair
90
	if(alpha <= 0) {
91
		gPlayerFadeInfo[playerid][fadeCurrentAlpha] = MAX_TRANSPARENCY;
92
		gPlayerFadeInfo[playerid][fadeType] = 0;
93
94
		PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | alpha);
95
		PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
96
		return 1;
97
	}
98
	// configurar o tipo de fade que estamos aplicando
99
	gPlayerFadeInfo[playerid][fadeType] = FADE_OUT;
100
	
101
	// mover um byte para a direita para 'apagar' a transparência
102
	// e '>>' para não voltar para o começo os primeiros bits
103
	gPlayerFadeInfo[playerid][fadeColor] = color >> 8;
104
105
	// a quantidade de frames que o PlayerProcess irá processar
106
	// você pode perceber que a duração é dividida pelos frames por processamento e, se existe restante, é adicinado mais um processamento
107
	gPlayerFadeInfo[playerid][fadeTotalFrames] = ((ms / TIMER_FRAME) + _:((ms % TIMER_FRAME) > 0));
108
	// o tanto de transparência que será subtraída por cada processamento
109
	// no fim, deve ser checado a quantidade de transarência que a textdraw possui
110
	// a transparência que será subtraída até o final é dividida pela quantidade de frames que serão rodados
111
	gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] =  (alpha) / gPlayerFadeInfo[playerid][fadeTotalFrames];
112
	
113
	if(gPlayerFadeInfo[playerid][fadeTransparencyPerFrame] <= 0) {
114
		gPlayerFadeInfo[playerid][fadeType] = 0;
115
		return 1;
116
	}
117
	
118
	PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | alpha);
119
	PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
120
	// se não existir o timer, criá-lo!
121
	if(!gPlayerFadeInfo[playerid][fadeTimer]) {
122
		gPlayerFadeInfo[playerid][fadeTimer] = SetTimerEx("Fader_PlayerProcess", TIMER_FRAME, 1, "i", playerid);
123
	}
124
	return 1;
125
}
126
127
public Fader_PlayerProcess(playerid) {
128
	// se o fade foi desligado para o player, mas o timer ainda está ativo
129
	if(gPlayerFadeInfo[playerid][fadeType] == 0) {
130
		// se o timer existe
131
		if(gPlayerFadeInfo[playerid][fadeTimer] > 0) {
132
			KillTimer(gPlayerFadeInfo[playerid][fadeTimer]);
133
			gPlayerFadeInfo[playerid][fadeTimer] = 0;
134
135
			PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
136
			PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
137
		}
138
	}
139
	
140
	switch(gPlayerFadeInfo[playerid][fadeType]) {
141
		case FADE_IN: {
142
			gPlayerFadeInfo[playerid][fadeCurrentAlpha] += gPlayerFadeInfo[playerid][fadeTransparencyPerFrame];
143
			gPlayerFadeInfo[playerid][fadeCurrentAlpha] = CAP_MAX(gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
144
			
145
			PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
146
			PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
147
			
148
			if(gPlayerFadeInfo[playerid][fadeCurrentAlpha] == MAX_TRANSPARENCY) {
149
				gPlayerFadeInfo[playerid][fadeType] = 0;
150
				KillTimer(gPlayerFadeInfo[playerid][fadeTimer]);
151
				gPlayerFadeInfo[playerid][fadeTimer] = 0;
152
			}
153
		}
154
		case FADE_OUT: {
155
			gPlayerFadeInfo[playerid][fadeCurrentAlpha] -= gPlayerFadeInfo[playerid][fadeTransparencyPerFrame];
156
			gPlayerFadeInfo[playerid][fadeCurrentAlpha] = CAP_MIN(gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
157
			
158
			PlayerTextDrawBoxColor(playerid, gPlayerFadeInfo[playerid][fadeText], (gPlayerFadeInfo[playerid][fadeColor] << 8) | gPlayerFadeInfo[playerid][fadeCurrentAlpha]);
159
			PlayerTextDrawShow(playerid, gPlayerFadeInfo[playerid][fadeText]);
160
			
161
			if(gPlayerFadeInfo[playerid][fadeCurrentAlpha] == 0) {
162
				gPlayerFadeInfo[playerid][fadeType] = 0;
163
				KillTimer(gPlayerFadeInfo[playerid][fadeTimer]);
164
				gPlayerFadeInfo[playerid][fadeTimer] = 0;
165
			}
166
		}
167
	}
168
	return 1;
169
}
170
171
public OnPlayerConnect(playerid) {
172
	new tmp[E_PLAYER_FADE_INFO];
173
	gPlayerFadeInfo[playerid] = tmp;
174
175
	new PlayerText:text = CreatePlayerTextDraw(playerid, -20.0, -20.0, "_");
176
	gPlayerFadeInfo[playerid][fadeText] = text;
177
	// detalhes
178
	PlayerTextDrawUseBox(playerid, text, 1);
179
	PlayerTextDrawBoxColor(playerid, text, 0xFFFFFF00);
180
	PlayerTextDrawLetterSize(playerid, text, 680.0, 500.0);
181
	PlayerTextDrawTextSize(playerid, text, 680.0, 500.0);
182
    return 1;
183
}
184
185
public OnPlayerDisconnect(playerid,reason) {
186
	gPlayerFadeInfo[playerid][fadeTimer] = 0;
187
    return 1;
188
}
189
190
#if defined _ALS_OnPlayerConnect
191
    #undef OnPlayerConnect
192
#else
193
    #define _ALS_OnPlayerConnect
194
#endif
195
#define OnPlayerConnect FD_OnPlayerConnect
196
forward FD_OnPlayerConnect(playerid);
197
198
#if defined _ALS_OnPlayerDisconnect
199
    #undef OnPlayerDisconnect
200
#else
201
    #define _ALS_OnPlayerDisconnect
202
#endif
203
#define OnPlayerDisconnect FD_OnPlayerDisconnect
204
forward FD_OnPlayerDisconnect(playerid,reason);