GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => A témát indította: Kurtis - 2009. december 06. - 17:46:22

Cím: NPC Utolsó IDkre
Írta: Kurtis - 2009. december 06. - 17:46:22
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
Cím: NPC Utolsó IDkre
Írta: Epsilon - 2009. december 06. - 18:44:41
É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
Cím: NPC Utolsó IDkre
Írta: BencEE - 2009. december 07. - 12:19:45
Jó lett.
Cím: NPC Utolsó IDkre
Írta: Maci_ - 2010. február 16. - 16:44:43
ez csak egy kiss dolog de mégis jól jön