This repository was archived by the owner on Mar 5, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathAFkill.inc
More file actions
274 lines (234 loc) · 6.35 KB
/
AFkill.inc
File metadata and controls
274 lines (234 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
/*
Anti fake kill by Rogue 2018/3/25
----
Last Updated April 5th.
-=-=-=-=-=-=-
Callbacks:
----------
OnPlayerFakeKill(playerid, spoofedid, spoofedreason, faketype);
-------------
playerid = the cheater who did a fake kill action
spoofedid = the player alleged to have killed the cheater
spoofedreason = the weapon used in the process (spoofed by the cheater)
faketype 1 = normal fake kill (one time)
faketype 2 = spammed fake kill (must kick or ban instantly)
-=-=-=-=-=--=-=-=
*/
#if !defined FILTERSCRIPT
#if defined _rAntiFakeKill_Included
#endinput
#endif
#define _rAntiFakeKill_Included
#define FKI_MAX_ERROR_WARNS 3
#include <a_samp>
#if defined OnPlayerFakeKill
forward OnPlayerFakeKill(playerid, spoofedid, spoofedreason, faketype);
#endif
#if defined FKI_OnPlayerDisconnect
forward FKI_OnPlayerDisconnect(playerid, reason);
#endif
#if defined FKI_OnPlayerTakeDamage
forward FKI_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
#endif
#if defined FKI_OnPlayerGiveDamage
forward FKI_OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart);
#endif
#if defined FKI_OnPlayerWeaponShot
forward FKI_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
#endif
#if defined FKI_OnPlayerDeath
forward FKI_OnPlayerDeath(playerid, killerid, reason);
#endif
#if defined FKI_OnPlayerSpawn
forward FKI_OnPlayerSpawn(playerid);
#endif
enum FKI_PLAYER_DATA
{
bool:FkiDmgChk,
bool:FkiSpwnChk,
bool:FkiJustDied,
FkiWTicks,
FkiDeTimer
}
static
FKI_Player[MAX_PLAYERS][FKI_PLAYER_DATA];
forward FKI_RJDead(playerid);
public FKI_RJDead(playerid) return FKI_Player[playerid][FkiJustDied] = false;
public OnPlayerDisconnect(playerid, reason)
{
FKI_Player[playerid][FkiSpwnChk]= false;
FKI_Player[playerid][FkiDmgChk] = false;
FKI_Player[playerid][FkiWTicks] = 0;
#if defined FKI_OnPlayerDisconnect
return FKI_OnPlayerDisconnect(playerid, reason);
#else
return 1;
#endif
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(!FKI_Player[playerid][FkiSpwnChk] || FKI_Player[playerid][FkiJustDied])
{
CallLocalFunction("OnPlayerFakeKill", "iiii", playerid, killerid, reason, 2);
return 0;
}
if(!FKI_Player[playerid][FkiDmgChk] && killerid != INVALID_PLAYER_ID && IsPlayerConnected(killerid))
{
if(!IsKillFalse(reason))
{
#if defined FKI_OnPlayerDeath
return FKI_OnPlayerDeath(playerid, killerid, reason);
#else
return 1;
#endif
}
if(GetPlayerState(killerid) == 2 && !FKI_IsAPlane(GetPlayerVehicleID(playerid)))
{
static Float:TPX, Float:TPY, Float:TPZ;
GetPlayerPos(killerid, TPX, TPY, TPZ);
if(!IsPlayerInRangeOfPoint(playerid, 5.0, TPX, TPY, TPZ))
{
CallLocalFunction("OnPlayerFakeKill", "iiii", playerid, killerid, reason, 1);
return 0;
}
}
else if(!FKI_IsWeaponValid(reason) || reason == 0)
{
FKI_Player[playerid][FkiWTicks]++;
if(FKI_Player[playerid][FkiWTicks] == FKI_MAX_ERROR_WARNS)
{
FKI_Player[playerid][FkiWTicks] = 0;
CallLocalFunction("OnPlayerFakeKill", "iiii", playerid, killerid, reason, 1);
}
}
else CallLocalFunction("OnPlayerFakeKill", "iiii", playerid, killerid, reason, 1);
}
KillTimer(FKI_Player[playerid][FkiDeTimer]);
FKI_Player[playerid][FkiDeTimer] = SetTimerEx("FKI_RJDead", 5000, false, "i", playerid);
FKI_Player[playerid][FkiJustDied] = true;
FKI_Player[playerid][FkiSpwnChk] = false;
FKI_Player[playerid][FkiDmgChk] = false;
#if defined FKI_OnPlayerDeath
return FKI_OnPlayerDeath(playerid, killerid, reason);
#else
return 1;
#endif
}
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
{
if(damagedid != INVALID_PLAYER_ID && IsPlayerConnected(damagedid))
{
FKI_Player[damagedid][FkiDmgChk] = true;
}
#if defined FKI_OnPlayerGiveDamage
return FKI_OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart);
#else
return 1;
#endif
}
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID && IsPlayerConnected(issuerid))
{
FKI_Player[playerid][FkiDmgChk] = true;
}
#if defined FKI_OnPlayerTakeDamage
return FKI_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
#else
return 1;
#endif
}
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
switch(hittype)
{
case BULLET_HIT_TYPE_PLAYER:
{
FKI_Player[hitid][FkiDmgChk] = true;
}
case BULLET_HIT_TYPE_VEHICLE:
{
#if defined foreach
foreach(new i: Player)
{
if(GetPlayerVehicleID(i) == hitid) FKI_Player[i][FkiDmgChk] = true;
}
#else
for(new i, j = GetPlayerPoolSize(); i <= j; i++)
{
if(GetPlayerVehicleID(i) == hitid) FKI_Player[i][FkiDmgChk] = true;
}
#endif
}
}
#if defined FKI_OnPlayerWeaponShot
return FKI_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
#else
return 1;
#endif
}
public OnPlayerSpawn(playerid)
{
FKI_Player[playerid][FkiSpwnChk] = true;
#if defined FKI_OnPlayerSpawn
return FKI_OnPlayerSpawn(playerid);
#else
return 1;
#endif
}
static FKI_IsWeaponValid(Weapon)
return ( 0 <= Weapon <= 18 || 22 <= Weapon <= 46 );
static FKI_IsAPlane(vehicleid)
{
switch(GetVehicleModel(vehicleid))
{
case 592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513, 464: return 1;
case 548, 425, 417, 487, 488, 497, 563, 447, 469, 465, 501: return 1;
}
return 0;
}
static IsKillFalse(killid)
{
switch(killid)
{
case 54, 255, 53, 51, 47: return 1;
}
return 0;
}
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn FKI_OnPlayerSpawn
#if defined _ALS_OnPlayerDeath
#undef OnPlayerDeath
#else
#define _ALS_OnPlayerDeath
#endif
#define OnPlayerDeath FKI_OnPlayerDeath
#if defined _ALS_OnPlayerTakeDamage
#undef OnPlayerTakeDamage
#else
#define _ALS_OnPlayerTakeDamage
#endif
#define OnPlayerTakeDamage FKI_OnPlayerTakeDamage
#if defined _ALS_OnPlayerGiveDamage
#undef OnPlayerGiveDamage
#else
#define _ALS_OnPlayerGiveDamage
#endif
#define OnPlayerGiveDamage FKI_OnPlayerGiveDamage
#if defined _ALS_OnPlayerWeaponShot
#undef OnPlayerWeaponShot
#else
#define _ALS_OnPlayerWeaponShot
#endif
#define OnPlayerWeaponShot FKI_OnPlayerWeaponShot
#if defined _ALS_OnPlayerDisconnect
#undef OnPlayerDisconnect
#else
#define _ALS_OnPlayerDisconnect
#endif
#define OnPlayerDisconnect FKI_OnPlayerDisconnect
#endif