Morph1 Geplaatst: 21 januari 2011 Rapport Geplaatst: 21 januari 2011 (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 . 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: 21 januari 2011 door Morph1 Reageren
Big Boss Geplaatst: 21 januari 2011 Rapport Geplaatst: 21 januari 2011 Zet dat hele stukje dan eens onder OnPlayerSpawn. Reageren
Morph1 Geplaatst: 22 januari 2011 Auteur Rapport Geplaatst: 22 januari 2011 (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 weet iemand nog een special action (of een applyanimation) zodat mijn NPC een beetje beweegt, en dus niet dood lijkt. Bewerkt: 22 januari 2011 door Morph1 Reageren
Morph1 Geplaatst: 23 januari 2011 Auteur Rapport Geplaatst: 23 januari 2011 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. Reageren
killer37 Geplaatst: 23 januari 2011 Rapport Geplaatst: 23 januari 2011 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; } } Reageren
Megadreams Geplaatst: 23 januari 2011 Rapport Geplaatst: 23 januari 2011 (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: 23 januari 2011 door Megadreams Reageren
Morph1 Geplaatst: 23 januari 2011 Auteur Rapport Geplaatst: 23 januari 2011 (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: 23 januari 2011 door Morph1 Reageren
Megadreams Geplaatst: 23 januari 2011 Rapport Geplaatst: 23 januari 2011 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. Reageren
Big Boss Geplaatst: 23 januari 2011 Rapport Geplaatst: 23 januari 2011 Als je sscanf gebruikt kan het daarmee ook; stock GetPlayerID(const name[]) { new id; sscanf(name, "u", id); return id; } Reageren
Morph1 Geplaatst: 24 januari 2011 Auteur Rapport Geplaatst: 24 januari 2011 (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: 24 januari 2011 door Morph1 Reageren
Recommended Posts
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.