I downloaded 1 Filterscripts zombie NPC on the internet, but when I put it into GameMode, it stood still and do nothing
Код:
#include <a_samp>
#include <foreach> // ******
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
static Zombie_Skin=134;
#define ZOMBIE_NAME "Zombie"
forward CheckCloserPlayers(playerid);
forward NewPos(playerid);
forward CheckHP(playerid);
forward KilledBy(playerid,killer);
forward KickZombie(playerid);
forward Firing(playerid);
forward Float:GetDistanceToPlayer(playerid,playerid2);
forward Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance);
forward Float:GetPlayerSpeed(playerid);
forward Float:GetXYInFrontOfVehicle(vehicleid, &Float:x, &Float:y, Float:distance);
new ZombieSkins[]={
1,
7,
9,
10,
45
};
enum ZombieEnum{
ZombieSpawned,
ZombieTarget,
ZombieRunning,
ZombieKilling,
NPTIMER,
Ztimers,
Float:LastZombieHealth,
Dying,
HPtimer
}
new Zombies[200][ZombieEnum];
new FiringTimer[200];
new FiringClick[200];
new ZombieKill[250];
new Caller;
new LastAdded = 0;
new WeaponDamage[] = {
1,
2,
4,
4,
5,
4,
4,
4,
6,
15,
-5,
-5,
-5,
-5,
-100,
4,
13,
2,
13,
0,
0,
0,
8,
9,
11,
15,
17,
15,
8,
9,
13,
13,
6,
45,
55,
40,
40,
27,
35,
0,
0,
0,
0,
0,
0,
0
};
new Float:WeaponRanges[] = {
1.0,
1.0,
1.2,
1.2,
1.1,
1.2,
1.2,
1.3,
1.2,
1.3,
0.5,
0.5,
0.5,
0.5,
0.5,
1.4,
12.0,
12.0,
12.0,
0.0,
0.0,
0.0,
28.0,
29.0,
30.0,
26.0,
25.0,
27.0,
28.0,
31.0,
35.0,
35.0,
26.0,
38.0,
65.0,
40.0,
40.0,
23.0,
37.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
};
main( )
{
print("\n=====================================");
print(" Zombie NPC ");
print("=====================================\n");
}
public OnFilterScriptInit()
{
for(new i =0; i<= MAX_PLAYERS;i++){
if(IsPlayerConnected(i) && !IsPlayerNPC(i)){
Itter_Add(Player,i);
FiringTimer[i] = SetTimerEx("Firing",250,1,"i",i);
ZombieKill[i] = -1;
}
if(IsPlayerConnected(i) && IsPlayerNPC(i)){
Itter_Add(Bot,i);
if(!strfind(PlayerName(i),ZOMBIE_NAME,true)){
SetupZombie(i);
}
}
}
new Float:h;
for(new v=0;v<MAX_VEHICLES;v++){
GetVehicleHealth(v,h);
}
print("\n=====================================");
print(" Zombie NPC ");
print("=====================================\n");
return 1;
}
//=======================================[ THOIGIAN ]=========================================//
public Firing(playerid){
new up_dw,lf_rg,o_keys,weapon;
new Float:x,Float:y,Float:z;
weapon = GetPlayerWeapon(playerid);
GetPlayerKeys(playerid,o_keys,up_dw,lf_rg);
if(o_keys == KEY_FIRE || o_keys == (KEY_FIRE+128) ){
if(!FiringClick[playerid] || Automatic(weapon))
{
FiringClick[playerid] = true;
GetPlayerPos(playerid,x,y,z);
foreach(Bot,b){
if(IsPlayerFacingPlayer(playerid,b,5.0)){
if(IsPlayerInRangeOfPoint(b,WeaponRanges[weapon],x,y,z)){
Zombies[b][LastZombieHealth] -= float(WeaponDamage[weapon]);
if(Zombies[b][LastZombieHealth] <= 0.0 && !Zombies[b][Dying]){
SendDeathMessage(playerid,b,weapon);
Zombies[b][Dying] = true;
}
}
}
}
}
}else{
FiringClick[playerid] = false;
}
}
public KickZombie(playerid){
Kick(playerid);
Zombies[playerid][Dying]=false;
KillTimer(Zombies[playerid][HPtimer]); Zombies[playerid][HPtimer] = false;
KillTimer(Zombies[playerid][Ztimers]); Zombies[playerid][Ztimers] = false;
if(Zombies[playerid][NPTIMER]){
KillTimer(Zombies[playerid][NPTIMER]);
Zombies[playerid][NPTIMER] = false;
}
}
public CheckHP(playerid){ //check mau zombie
new Float:x,Float:y,Float:z;
new cp = GetClosestPlayer(playerid);
if(IsPlayerInAnyVehicle(cp)){
new cpc = GetPlayerVehicleID(cp);
GetVehiclePos(cpc,x,y,z);
GetXYInFrontOfVehicle(cpc,x,y,1.5);
if(IsPlayerInRangeOfPoint(playerid,2.0,x,y,z) && GetPlayerSpeed(cp) > 10.0){
Zombies[playerid][LastZombieHealth] -= (GetPlayerSpeed(cp)*2);
}
}
if( Zombies[playerid][LastZombieHealth] <= 0.0 && Zombies[playerid][ZombieSpawned]){
ApplyAnimation(playerid,"Knife","KILL_Knife_Ped_Die",1,0,1,0,0,0);
SetTimerEx("KickZombie",1500,0,"i",playerid);
Zombies[playerid][Dying] = true;
}
}
public NewPos(playerid){ // Lam CHo ZOMBIE chay
if( Zombies[playerid][LastZombieHealth] > 0.0 ){
new Float:x,Float:y,Float:z;
new Float:ax,Float:ay,Float:az,Float:dif;
GetPlayerPos(Zombies[playerid][ZombieTarget],ax,ay,az);
GetPlayerPos(playerid,x,y,z);
if( az <= (z+3.0) && az >= (z-3.0)){
if(Zombies[playerid][ZombieRunning] == 1){
ApplyAnimation(playerid,"Muscular","MuscleRun",1,1,1,0,0,0);
GetXYInFrontOfPlayer(playerid,x,y,2.0);
}
else if(Zombies[playerid][ZombieRunning] == 2){
ApplyAnimation(playerid,"Muscular","MuscleSprint",1,1,1,0,0,0);
GetXYInFrontOfPlayer(playerid,x,y,2.8);
}
dif = az;
SetPlayerPos(playerid,x,y,dif);
}else{
if(Zombies[playerid][ZombieRunning]) Parar(playerid);
GetPlayerPos(playerid,x,y,z);
SetPlayerPosFindZ(playerid,x,y,z);
}
}
}
public CheckCloserPlayers(playerid){ // Phat Hien Am thanh Va duoi Theo Nguoi CHoi
if( Zombies[playerid][LastZombieHealth] > 0.0 ){
new cp = GetClosestPlayer(playerid);
new Float:MinDistance = 3.0;
if(IsPlayerInAnyVehicle(cp)){ MinDistance = 5.0; }
Zombies[playerid][ZombieTarget] = cp;
if(GetDistanceToPlayer(playerid,cp) <= 70.0 && GetDistanceToPlayer(playerid,cp) > 15.0){
IrParaPlayer(1,playerid,cp);
}else if(GetDistanceToPlayer(playerid,cp) <= 15.0 && GetDistanceToPlayer(playerid,cp) > MinDistance){
IrParaPlayer(0,playerid,cp);
}else if(GetDistanceToPlayer(playerid,cp) <= MinDistance){
Parar(playerid);
}
if(GetDistanceToPlayer(playerid,cp) <= MinDistance){
new Float:h;
if(IsPlayerInAnyVehicle(cp)){
new cpc = GetPlayerVehicleID(cp);
GetVehicleHealth(cpc,h);
if(GetDistanceToPlayer(playerid,cp) < MinDistance){
SetVehicleHealth(cpc,h-80.0);
ApplyAnimation(playerid,"Gangs","shake_carSH",1,1,1,0,0,0);
}
}else{
if(GetDistanceToPlayer(playerid,cp) > 1.5){
GetPlayerHealth(cp,h);
SetPlayerHealth(cp,h-5.0);
}else if(GetDistanceToPlayer(playerid,cp) <= 1.5){
if(Zombies[playerid][ZombieKilling] == -1){
if(!IsDying(cp)){
FinishHim(playerid,cp);
}
}
}
}
}
}
}
public KilledBy(playerid,killer){
if(Zombies[killer][ZombieKilling] == playerid){
ApplyAnimation(playerid,"Knife","KILL_Knife_Ped_Die",1,0,1,0,0,0);
TogglePlayerControllable(playerid,true);
SetPlayerHealth(playerid,0.0);
ClearAnimations(killer);
ZombieKill[playerid] = killer;
}
}
//=======================================[ CHUCNANG ]=========================================//
stock Automatic(weaponid){
switch(weaponid){
case 9,22,23,24,27,28,29,30,31,32,37,38: return true;
}
return false;
}
stock IsDying(playerid){ // XAC DINH,NEU 1 ZOMBIE giet 1 player
foreach(Bot,b){
if(Zombies[b][ZombieKilling] == playerid) return true;
}
return false;
}
stock SetupZombie(playerid){ // KICK HOAT ZOMBIE
new Float:px,Float:py,Float:pz;
Zombies[playerid][HPtimer] = SetTimerEx("CheckHP",100,1,"i",playerid);
Zombies[playerid][Ztimers] = SetTimerEx("CheckCloserPlayers",1000,1,"i",playerid);
GetPlayerPos(Caller,px,py,pz);
SetPlayerPos(playerid,px,py,pz);
Zombies[playerid][ZombieRunning] = false;
SendClientMessageToAll(COLOR_RED,"1 con Zombie dang nhap vao sever!");
new Zskin=1;
if(Zombie_Skin == 134){
new rd = random(sizeof(ZombieSkins));
if(IsValidSkin(ZombieSkins[rd])){
Zskin = ZombieSkins[rd];
}
}else if(Zombie_Skin == 230){
new rd = random(230);
if(IsValidSkin(rd)){
Zskin = rd;
}
}else if(IsValidSkin(Zombie_Skin)){
Zskin = Zombie_Skin;
}
SetPlayerSkin(playerid,Zskin);
Zombies[playerid][ZombieKilling] = -1;
Zombies[playerid][ZombieSpawned] = true;
Zombies[playerid][LastZombieHealth] = 100.0;
}
stock FinishHim(playerid,target){
Zombies[playerid][ZombieKilling] = target;
TogglePlayerControllable(target,false);
SetPlayerToFacePlayer(playerid,target);
SetPlayerToFacePlayer(target,playerid);
ApplyAnimation(target,"Knife","KILL_Knife_Ped_Damage",1,0,1,0,0,0);
ApplyAnimation(playerid,"Knife","KILL_Knife_Player",1,0,1,0,0,0);
SetTimerEx("KilledBy",1500,0,"ii",target,playerid);
}
stock Parar(playerid){ // LAM CHO CAC ZOM DUNG LAI
if(Zombies[playerid][ZombieRunning]){
if(Zombies[playerid][NPTIMER]){
KillTimer(Zombies[playerid][NPTIMER]);
Zombies[playerid][NPTIMER] = false;
}
Zombies[playerid][ZombieRunning] = false;
ClearAnimations(playerid);
}
}
stock IrParaPlayer(modo,playerid,paraid){ //LAM CHO ZOM DUOI THEO CAC NGUOI CHOI. Mode: 1- Run | 2- Sprint
SetPlayerToFacePlayer(playerid,paraid);
if(modo == 0 && Zombies[playerid][ZombieRunning] != 1) Caminhar(playerid);
else if(modo == 1 && Zombies[playerid][ZombieRunning] != 2) Correr(playerid);
}
stock Caminhar(playerid){ //CHAY VE PHIA TRuOC
Zombies[playerid][ZombieRunning] = 1;
Zombies[playerid][NPTIMER] = SetTimerEx("NewPos",400,1,"i",playerid);
}
stock Correr(playerid){
Zombies[playerid][ZombieRunning] = 2;
Zombies[playerid][NPTIMER] = SetTimerEx("NewPos",300,1,"i",playerid);
}
stock AlvoDeAlguem(alvoid){
foreach(Bot,b){
if(Zombies[b][ZombieTarget] == alvoid) return b;
}
return false;
}
stock KickZombies(){
foreach(Bot,b){
if(!strfind(PlayerName(b),ZOMBIE_NAME,true)){
SetTimerEx("KickZombie",1,0,"i",b);
}
}
}
stock SetPlayerToFacePlayer(playerid, targetid)
{
new
Float:pX,
Float:pY,
Float:pZ,
Float:X,
Float:Y,
Float:Z,
Float:ang;
if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetid)) return 0;
GetPlayerPos(targetid, X, Y, Z);
GetPlayerPos(playerid, pX, pY, pZ);
if( Y > pY ) ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
else if( Y < pY && X < pX ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 450.0);
else if( Y < pY ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
if(X > pX) ang = (floatabs(floatabs(ang) + 180.0));
else ang = (floatabs(ang) - 180.0);
SetPlayerFacingAngle(playerid, ang);
return 0;
}
stock PlayerName(playerid){
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,MAX_PLAYER_NAME);
return pname;
}
stock Float:GetDistanceToPlayer(playerid,playerid2) {
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
if (!IsPlayerConnected(playerid) || !IsPlayerConnected(playerid2)) {
return -1.00;
}
GetPlayerPos(playerid,x1,y1,z1);
GetPlayerPos(playerid2,x2,y2,z2);
return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}
stock GetClosestPlayer(p1){
new Float:dis,Float:dis2,playerid;
playerid = -1;
dis = 99999.99;
foreach(Player,x){
dis2 = GetDistanceToPlayer(p1,x);
if (dis2 < dis && dis2 != -1.00)
{
dis = dis2;
playerid = x;
}
}
printf("[%d]%s",playerid,PlayerName(playerid));
return playerid;
}
stock Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
{
new Float:a;
GetPlayerPos(playerid, x, y, a);
if (IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
else GetPlayerFacingAngle(playerid, a);
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
return a;
}
stock IsValidSkin(skinid)
{
#define MAX_BAD_SKINS 22
new badSkins[MAX_BAD_SKINS] =
{ 261,252,239,230,200,168,162,159,134 };
if (skinid < 0 || skinid > 299) return false;
for (new i = 0; i < MAX_BAD_SKINS; i++) { if (skinid == badSkins[i]) return false; }
#undef MAX_BAD_SKINS
return 1;
}
stock Float:GetPlayerSpeed(playerid)
{
new Float:vX, Float:vY, Float:vZ;
if (!IsPlayerInAnyVehicle(playerid))
{
GetPlayerVelocity(playerid, vX, vY, vZ);
}
else
{
GetVehicleVelocity(GetPlayerVehicleID(playerid), vX, vY, vZ);
}
return floatsqroot(vX*vX + vY*vY + vZ*vZ)*100;
}
stock Float:GetXYInFrontOfVehicle(vehicleid, &Float:x, &Float:y, Float:distance)
{
new Float:a;
GetVehiclePos(vehicleid, x, y, a);
GetVehicleZAngle(vehicleid, a);
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
return a;
}
stock IsPlayerFacingPlayer(playerid, playerid2, Float:dOffset)
{
new
Float:X,
Float:Y,
Float:Z,
Float:pX,
Float:pY,
Float:pZ,
Float:pA,
Float:ang;
if(!IsPlayerConnected(playerid)) return 0;
GetPlayerPos(playerid2, pX, pY, pZ);
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, pA);
if( Y > pY ) ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
else if( Y < pY && X < pX ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 450.0);
else if( Y < pY ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
if(AngleInRangeOfAngle(-ang, pA, dOffset)) return true;
return false;
}
stock AngleInRangeOfAngle(Float:a1, Float:a2, Float:range)
{
a1 -= a2;
if((a1 < range) && (a1 > -range)) return true;
return false;
}
//=======================================[ ||===|| ]=========================================//
public OnFilterScriptExit()
{
KickZombies();
return 1;
}
public OnPlayerConnect(playerid)
{
if(IsPlayerNPC(playerid))
{
SpawnPlayer(playerid);
}
else
{
FiringTimer[playerid] = SetTimerEx("Firing",250,1,"i",playerid);
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(!IsPlayerNPC(playerid)){
KillTimer(FiringTimer[playerid]);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid)){
if(!strfind(PlayerName(playerid),ZOMBIE_NAME,true)){
SetupZombie(playerid);
}
}
if(ZombieKill[playerid] != -1){
Zombies[ZombieKill[playerid]][ZombieKilling] = -1;
ZombieKill[playerid] = -1;
return 1;
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(ZombieKill[playerid] != -1){
SendDeathMessage(ZombieKill[playerid],playerid,reason);
return 1;
}
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/taozombie", true) == 0)
{
if(!IsPlayerAdmin(playerid)) return false;
Caller = playerid;
new newname[64];
format(newname,sizeof(newname),"%s_%d",ZOMBIE_NAME,LastAdded);
ConnectNPC(newname,"zombie");
LastAdded++;
return 1;
}
return 0;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
//================================================================================//
when I joined it to the server, where they spawn they just stand still and do nothing