NPC's spawnen mit CJ Skin

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey Leute,


    bevor jetzt gleich wieder auf die SuFu gewiesen wird:

    ,,Ja ich habe schon mal nach anderen ähnlichen Beiträgen gesucht.
    Diese haben mir jedoch nicht weitergeholfen."


    Mein Problem ist (wie im Titel bereits genannte), dass alle NPC's spawnen (deren
    Scripte auch ausgeführt werden) jedoch der Skin nicht gesetzt wird und diese dann
    dementsprechend den CJ Skin haben.


    Einige sagen, es liege daran, dass man crashdetect benutzen muss, andere sagen dass
    dieser "Bug" mehrere andere Ursachen hat.


    Meine Frage ist nun:


    Was genau kann ich da tun bzw. habt ihr Erfahrung damit?


    Hier einmal die Codes:


    Connecten der Bots (OnGameModeInit)

    Code
    ConnectNPC("Flakschutze","Flakschutze")




    Skin Setzung (OnPlayerSpawn)

    Code
    new npc = GetFreeNPCID();
    		if(!strcmp(PName[playerid],"Flakschutze",true))
    		{
    	        NPCID[npc] = playerid;
    	        SetPlayerSkin(playerid,287);
    		}


    Stock (GetFreeNPCID)

    Code
    stock GetFreeNPCID()
    {
    	for(new i=0; i<MAX_NPC; i++)
    	{
    	    if(NPCID[i] != 0) continue;
    	    return i;
    	}
    	return -1;
    }


    Wenn ihr eine Antwort habt, wäre das super wenn ihr diese mit mir teilen könntet! :)


    Gruß

    Meine Werke

  • Dann mache es bitte mal so und poste dann, was im Server Log steht, wenn der NPC spawnt:

    C
    public OnPlayerSpawn(playerid)
    {
    	printf("OnPlayerSpawn");
    	if(IsPlayerNPC(playerid))
    	{
    		printf("Setze Skin für NPC %d", playerid);
    		SetPlayerSkin(playerid,287);
    	}
    	//...
  • Dann mache es bitte mal so und poste dann, was im Server Log steht, wenn der NPC spawnt:

    C
    public OnPlayerSpawn(playerid)
    {
    	printf("OnPlayerSpawn");
    	if(IsPlayerNPC(playerid))
    	{
    		printf("Setze Skin für NPC %d", playerid);
    		SetPlayerSkin(playerid,287);
    	}
    	//...

    Soweit wird das auch in der Log ausgegeben:


    Code
    [16:12:37] OnPlayerSpawn
    [16:12:37] Setze Skin für NPC 36

    Also irgendwie scheint die Function (SetPlayerSkin) für die Bots nicht zu funktionoerne?! X(

    Meine Werke

  • Dann versuche es so:

    C
    public OnPlayerSpawn(playerid)
    {
    	printf("OnPlayerSpawn");
    	if(IsPlayerNPC(playerid))
    	{
    		printf("Setze Skin für NPC %d", playerid);
    		SetPlayerSkin(playerid,287);
    		SetTimerEx("SetNPCSkin", 2000, 0, "dd", playerid, 287);
    	}
    	//...


    Und das hier ganz unten im Gamemode:

    C
    forward SetNPCSkin(playerid, skin);
    public SetNPCSkin(playerid, skin)
    {
    	printf("Setze Skin für NPC %d (%d)", playerid, skin);
    	return SetPlayerSkin(playerid,skin);
    }
  • Dann versuche es so:

    C
    public OnPlayerSpawn(playerid)
    {
    	printf("OnPlayerSpawn");
    	if(IsPlayerNPC(playerid))
    	{
    		printf("Setze Skin für NPC %d", playerid);
    		SetPlayerSkin(playerid,287);
    		SetTimerEx("SetNPCSkin", 2000, 0, "dd", playerid, 287);
    	}
    	//...

    Und das hier ganz unten im Gamemode:

    C
    forward SetNPCSkin(playerid, skin);
    public SetNPCSkin(playerid, skin)
    {
    	printf("Setze Skin für NPC %d (%d)", playerid, skin);
    	return SetPlayerSkin(playerid,skin);
    }

    Jetzt werden die Skins gesetzt! :)


    Lag dies vielleicht, dass der Skin quasi gesetzt wurde, bevor der NPC tatsächlich gespawnt wurde? ?(


    Und funktioniert dies auch, wenn ich trotzdem die Namens-Abfrage mache?

    Meine Werke

  • Ok, gut!

    Lag dies vielleicht, dass der Skin quasi gesetzt wurde, bevor der NPC tatsächlich gespawnt wurde?

    Das weiß ich nicht genau, bzw. das kann ich nur raten. Ich gehe davon aus, dass du irgendwo drunter nochmal einen Skin setzt, zu dem was aus den Spielerstatistiken geladen wird (oder ähnliches). Der NPC hat dies nicht und bekommt Skin 0. Daher der Versuch es mit einem Timer zu umgehen.
    Du kannst natürlich versuchen diese Stelle ausfindig zu machen, die das Problem verursacht, wenn du willst.



    Und funktioniert dies auch, wenn ich trotzdem die Namens-Abfrage mache?

    Das sollte klappen, sofern die Namensabfrage korrekt ist. Versuche es mal.