[HELP]NPC
#1

I downloaded 1 Filterscripts zombie NPC on the internet, but when I put it into GameMode, it stood still and do nothing
please help me,
sorry for my bad english
This is the code take a look and help me :http://pastebin.com/f2cbu656
Код:
#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;
}

//================================================================================//
Reply
#2

Help
Reply
#3

What's the problem of it? and where the line(s) problem?
Reply
#4

it stood still and do nothing

Why don't you ask there? Because it is looking messy.
Reply
#5

Quote:
Originally Posted by ajam112
Посмотреть сообщение
What's the problem of it? and where the line(s) problem?
when I joined it to the server, where they spawn they just stand still and do nothing
a few pictures
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)