Jump to content

npc doet niet wat ik wil :S


Recommended Posts

Geplaatst: (bewerkt)

hallo,

tjah, weer geen tut maar een raar probleem. ik wilde voor mijn RP gedeelte in mijn server een npc neerzetten die fietsen verkoopt :puh:. dus moet ik eerst gewoon een NPC hebben staan. nu heb ik dit stukje code bij OnGameModeInit

ConnectNPC("Jake", "bikedealer");

ja het kleine scriptje van deze npc heet bikedealer

verder dus bij OnPlayerConnect :

	if(IsPlayerNPC(playerid))
{
	        new npcname[MAX_PLAYER_NAME];
		GetPlayerName(playerid, npcname, sizeof(npcname)); //De naam aanvragen
		if(!strcmp(npcname, "Jake", true))
	{
		SetPlayerSkin(playerid, 28);
		label[playerid] = Create3DTextLabel("Jake", BLAUW, 0,0,0,0,0,0);
		Attach3DTextLabelToPlayer(label[playerid], playerid, 0,0,0.7);
		return 1;
	}
}

de NPC spawnt wel maar alleen gewoon als een CJ poppetje zonder textlabel.

volgens mij heb ik simpelweg iets over het hoofd gezien alleen weet ik niet wat.

weet iemand mischien waarom dit niet werkt

alvast bedankt.

-M

Bewerkt: door Morph1
Geplaatst: (bewerkt)
volgens mij heb ik simpelweg iets over het hoofd gezien alleen weet ik niet wat.

XD

als jij er toch niet was Big Boss :bier:

weet iemand nog een special action (of een applyanimation) zodat mijn NPC een beetje beweegt, en dus niet dood lijkt.

Bewerkt: door Morph1
Geplaatst:

haha, ik heb weer een probleem, ik ben erachter gekomen dat als je 1 npc heb dat hij altijd het spelerid 0 heeft. ik probeerde het even met boost en kick en hij kreeg inderdaad zijn geld en punten en hij werdt gekickt XD. dus had ik dit uitgedacht :

onplayerspawn:

	if(IsPlayerNPC(playerid))
{
		new npcname[MAX_PLAYER_NAME];
		GetPlayerName(playerid, npcname, sizeof(npcname)); //De naam aanvragen
		if(!strcmp(npcname, "Jake", true))
	{
		SetPlayerSkin(playerid, 28);
	 	label[playerid] = Create3DTextLabel("Jake [bikeDealer]", 0x0000FFAA, 30.0,40.0,50.0, 40.0,0);
	 	Attach3DTextLabelToPlayer(label[playerid], playerid, 0,0,0.2);
	 	ApplyAnimation(playerid, "ON_LOOKERS", "wave_loop", 4.0, 1, 0, 0, 0, 0);
		return 1;
	}
}

hier zwaait de NPC nu dus. dus ik dacht als hij nu ziet dat je in de buurt komt kruist hij zijn armen en gaat hij stil staan :

	if(IsPlayerInRangeOfPoint(playerid, 11.0, 1508.4408,-1663.0276,13.5469))
{
    ApplyAnimation(0, "COP_AMBIENT", "Coplook_loop", 4.0, 0, 1, 1, 1, -1);
}

dit staat uiteraard bij OnPlayerUpdate.

nu is het probleem dat de server de NPC ook als een speler ziet. dus houdt hij continu zijn armen gekruisd, is het mogelijk om de server te laten zien dat het geen echte speler is maar dat het wel zo blijft werken.

Geplaatst:

Heb niet zoveel verstand van NPC's, maar miss werkt het als je het zo doet:

if(IsPlayerInRangeOfPoint(playerid, 11.0, 1508.4408,-1663.0276,13.5469))
{
   if(!IsPlayerNPC(playerid))
   {
       ApplyAnimation(0, "COP_AMBIENT", "Coplook_loop", 4.0, 0, 1, 1, 1, -1);
   }
   else if(IsPlayerNPC(playerid))
   {
       return 1;
   }
}

Geplaatst: (bewerkt)

Enkel ID 0 gebruiken is een slecht idee. Als de npc om de 1 of andere reden uit de server gaat en bv er weer in komt (mogelijk in restart)? Dan kan hij een andere spelerid aannemen en dan werkt het natuurlijk niet meer.

Bewerkt: door Megadreams
Geplaatst: (bewerkt)

maar hoe wil je dan de NPC aanduiden bij de Playerid?

edit: TY killer37, eerst had ik mijn point maar op een plek voor de npc gezet maar als ik er toen inliep krijg hij alleen maar spastische trekjes als hij zijn armen moest kruisen, nu gebeurt het wel goed, verder heb ik er nog een stukje aan toegevoegd dat als ik uit het gebied gaat dat hij dan weer begint te zwaaien,

en @ megadreams, ik ga morgen wel even die connectNPC aan een variable toewijzen, kijken of dat dan werkt.

Bewerkt: door Morph1
Geplaatst:

ConnectNPC returned niets. Maar je kan ook kijken of de speler een NPC is en op de naam om dit te bereiken. Via de naam haal je dan weer de ID op.

Je kan hiervoor deze fnctie gebruiken (die ik uit de Useful Functions include heb gehaald):

stock GetPlayerID(const playername[], partofname=0) //By Jan "DracoBlue" Schütze (edited by Gabriel "Larcius" Cordes)
{
new i;
new playername1[MAX_STRING];
for (i=0;i<MAX_PLAYERS;i++)
{
	if (IsPlayerConnected(i))
	{
		GetPlayerName(i,playername1,sizeof(playername1));
		if (strcmp(playername1,playername,true)==0)
		{
			return i;
		}
	}
}
new correctsigns_userid=-1;
new tmpuname[MAX_STRING];
new hasmultiple=-1;
if(partofname)
{
	for (i=0;i<MAX_PLAYERS;i++)
	{
		if (IsPlayerConnected(i))
		{
			GetPlayerName(i,tmpuname,sizeof(tmpuname));
			if (strfind(tmpuname,partofname,true)==0)
			{
				hasmultiple++;
				correctsigns_userid=i;
			}
			if (hasmultiple>0)
			{
				return -2;
			}
		}
	}
}
return correctsigns_userid;
}

const playername[]: Hier moet je de naam van de speler inzetten die je dus opgehaald hebt.

partofname=0: Is de naam een stuk van een naam (1) of is het de hele naam (0). In dit geval dus 0.

Geplaatst:

Als je sscanf gebruikt kan het daarmee ook;

stock GetPlayerID(const name[])
{
   new
       id;

   sscanf(name, "u", id);
   return id;
}

Geplaatst: (bewerkt)

Als je sscanf gebruikt kan het daarmee ook;

stock GetPlayerID(const name[])
{
   new
       id;

   sscanf(name, "u", id);
   return id;
}

lol ik heb totaal geen ervaring met stock, ja ik gebruik scanff, dus als ik dan deze code onderaan neerzet en dan in plaats van die "0" kan ik dan "id" neerzetten.

dat is wat ik er uit begrijp. maar tevens is dat onmogelijk omdat hij vervolgens dan gewoon de spelerid van de speler die in dat gebied loopt pakt. dus als ik dit onderaan zet, welke naam/variable moet ik dan gebruiken op de plek van "playerid"?

Bewerkt: door Morph1

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...