26.09.2016, 17:00
Tou tendo um problema com o sistema de zumbis que fiz para o meu gamemode, ainda estou aprendendo sobre as funзхes do FCNPC e no momento sу tive problema com este sistema aqui:
Resumindo, o sistema ele faz uma checagem se o jogador estiver num raio de 15.0 da posiзao do Zumbi e se estiver o NPC irб atй a coordenada do jogador, se o jogador estiver num raio 1.0 ele o ataca.
Funciona perfeitamente, sempre que estou jogando sozinho os zumbis me atacam, mas quando hб mais de 1 jogador ele fica encarando o jogador mas nгo faz nada, o interessante й que se eu bem proximo desse jogador ele ataca, mas se o jogador ficar afastado de outro jogador o zumbi nгo faz nada.
Dei uma estudada nas funзхes do tуpico do FCNPC, mas realmente Nгo sei arrumar =/
Aqui estб o todo o script dos zumbis
OBS: Sу nгo coloquei a Array ZumbiSpawns pois tinha muitas coordenadas de locais onde os zumbis nascem
Resumindo, o sistema ele faz uma checagem se o jogador estiver num raio de 15.0 da posiзao do Zumbi e se estiver o NPC irб atй a coordenada do jogador, se o jogador estiver num raio 1.0 ele o ataca.
Funciona perfeitamente, sempre que estou jogando sozinho os zumbis me atacam, mas quando hб mais de 1 jogador ele fica encarando o jogador mas nгo faz nada, o interessante й que se eu bem proximo desse jogador ele ataca, mas se o jogador ficar afastado de outro jogador o zumbi nгo faz nada.
Dei uma estudada nas funзхes do tуpico do FCNPC, mas realmente Nгo sei arrumar =/
Aqui estб o todo o script dos zumbis
PHP код:
// # Callbacks e Stocks #
stock CriarZumbis()
{
new str[30];
for(new i = 0; i < MAX_ZUMBIS; i++)
{
format(str, sizeof(str), "Zombie_%i", i);
FCNPC_Create(str);
}
return 1;
}
public RespawnZumbis()
{
for(new i = 0; i < MAX_ZUMBIS; i++)
{
if(FCNPC_IsDead(i))
{
FCNPC_Respawn(i);
}
}
print("| INFO |: Os Zumbis foram respawnados.");
return 1;
}
public FCNPC_OnDeath(npcid, killerid, weaponid)
{
if(killerid != INVALID_PLAYER_ID && IsPlayerConnected(killerid))
{
pInfo[killerid][pZombieKills]++;
GameTextForPlayer(killerid, "~w~(Zombie Kill)~n~+5 EXP", 2500, 3);
AddEXP(killerid, 5);
}
return 1;
}
public FCNPC_OnCreate(npcid)
{
new rand = random(sizeof(ZumbiSpawns));
FCNPC_Spawn(npcid, 162, ZumbiSpawns[rand][0],ZumbiSpawns[rand][1], ZumbiSpawns[rand][2]);
FCNPC_SetInvulnerable(npcid, false);
return 1;
}
public FCNPC_OnSpawn(npcid)
{
SetPlayerAttachedObject(npcid, 0, 2908, 2, 0.0800, 0.0690, 0.0000, 180.0000, 0.0999, 88.9000, 1.2860, 1.1280, 1.1540, 0xFFFFFFFF, 0xFFFFFFFF);
SetPlayerAttachedObject(npcid, 1, 2907, 1, 0.1060, 0.0359, 0.0259, -88.9999, 0.9000, 88.6999, 1.0000, 0.6489, 1.1440, 0xFFFFFFFF, 0xFFFFFFFF);
return 1;
}
public FCNPC_OnUpdate(npcid)
{
foreach(new i : Player)
{
if(!IsPlayerNPC(i) && IsPlayerConnected(i))
{
new Float:zP[3], Float:pP[3];
GetPlayerPos(npcid, zP[0], zP[1], zP[2]); // pega coordenada do Zumbi
GetPlayerPos(i, pP[0], pP[1], pP[2]); // Pega Coordenada do Player
if(IsPlayerInRangeOfPoint(i, 15.0, zP[0], zP[1], zP[2])) FCNPC_GoTo(npcid, pP[0], pP[1], pP[2], MOVE_TYPE_RUN, 0.5, false, 0.0, true); // se o jogador estiver no raio de 15.0 da posiзгo do zumbi, o npc irб caminhar atй a posiзгo do jogador
if(IsPlayerInRangeOfPoint(i, 1.0, zP[0], zP[1], zP[2])) // Se o jogador estiver a 1.0 da posiзao do zumbi
{
FCNPC_Stop(npcid); // Para o FCNPC_GoTo
FCNPC_MeleeAttack(npcid, -1, true); // Ataque, velocidade -1, true = ataque especial
}
else FCNPC_StopAttack(npcid); // Caso ele jб nгo esteja proximo do jogador ele para o Ataque
}
}
return 1;
}
