Ezzel a kóddal meg lehet akadályozni, hogy az NPC-k az elso ID-ket foglalják le, így leghátulra rak minden npc-t.
#define MAX_LASTNPC 1 //MAX 100 NPC
forward KickTime();
forward NPCLoadUpdate();
new maxplcheck;
Ezzel állítsuk be hogy hány NPC-t rakunk be a szerverbe, a maxplcheck meg a maxplayers-et ellenorzi, amit a server.cfg-be írtunk.
A 100 azért a maximum, mert több veszélyes lehet.
public NPCLoadUpdate()
{
ConnectNPC...
return 1;
}
public OnFilterScriptInit()
{
SlotNPC();
return 1;
}
Az NPCLoadUpdateba kell megadni azokat az NPC-ket amiket a szerverre akarunk küldeni.
stock SlotNPC()
{
maxplcheck = GetServerVarAsInt(\"maxplayers\");
for(new i = 0; i <= maxplcheck-1-MAX_LASTNPC; i++)
{
new str[64];
format(str,sizeof(str),\"xyz%d,i);
ConnectNPC(str,\"npcidle\");
}
SetTimer(\"NPCLoadUpdate\",1000,0);
SetTimer(\"KickTime\",2000,0);
return 1;
}
public KickTime()
{
maxplcheck = GetServerVarAsInt(\"maxplayers\");
for(new i = 0; i <= maxplcheck-1-MAX_LASTNPC; i++)
{
Kick(i);
}
}
A SlotNPC függvény arra van, hogy felküldjön a szerverre xy darab npc-t és utána egy timerrel külön felküldi a sajátjainkat.
A második timer meg a maxplayersbol kivonja a megadott npc-ink számát, így csak a slot tölto botokat kickeli ki.
Hátránya: hogy kicsit induláskor belaggolhat a szerver mikor küld fel NPC-t és kickeli ki oket.
Szerk:Formattal van mostmár megoldva a sok NPC név
Én így oldanám meg:
e_ConnectNPC(const name[], const script[],destid)
{
new ename[24;
for( new i = 0; i < destid-1; i++)
{
if(IsPlayerConnected(i)) continue;
format(ename,24,\"_[_[%d]_]_\",i);
ConnectNPC(ename,script);
SetPlayerPos(i,0,0,GetPos(i,3)+54545*4545454545);
}
ConnectNPC(name,script);
for( new i = 0; i < destid-1; i++) if(IsPlayerNPC(i))
{
format(ename,24,\"_[_[%d]_]_\",i);
if(!strcmp(GET_PLAYER_NAME(i),ename,true)) Kick(i);
}
return 1;
}
GET_PLAYER_NAME és GetPos függvényem szükséges!
Epsilon