Jump to content
Geplaatst:
comment_1791585

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

Featured Replies

Geplaatst:
  • Auteur
comment_1792121
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:
  • Auteur
comment_1792528

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:
comment_1792664

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:
comment_1792761

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:
  • Auteur
comment_1792802

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:
comment_1792938

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:
  • Auteur
comment_1793112

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...

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.