CreateDynamicActor - Fehlermeldung

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
  • Hallo Brotfische,


    Wie schon oben erwähnt bekomme ich einen Fehler Code beim erstellen von DynamicActors.


    Fehlercode:

    C
    warning 202: number of arguments does not match definition


    OnGameModeInit:

    C
    CreateDynamicActor(299,1201.5687,-901.2305,42.8438,308.4897,-1,-1,"Mike");

    CreateDynamicActor:


    Ich hoffe es kann mir jemand helfen :)


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • Ich hab den Code mal rekonstruiert und konnte keinen Fehler feststellen, ich würde bei deiner Funktion nur Zeile 16
    mit dieser format(s_DynamicActors[i][e_iActorName], MAX_PLAYER_NAME, actorname); austauschen


    Das beugt diesen Fehler vor error 047: array sizes do not match, or destination array is too small und ist wesentlich sauberer.


    Ich vermute mal, das der Fehler wo anders liegt

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich habe jetzt mal ein Test gemacht:
    Wenn ich den letzten Parameter bei CreateDynamicActor frei lasse, wird dem Actor ja automatisch der Name "UNKNOWN_ACTOR_NAME" zugewiesen.

    C
    CreateDynamicActor(299,1201.5687,-901.2305,42.8438,308.4897,-1,-1);//Letzter Parameter nicht angegeben


    Das bedeutet diesem Actor wird der Name "UNKNOWN_ACTOR_NAME" zugwiesen. So sagt der Compailer, keine Fehler.
    Schreibe ich es jetzt so:


    C
    CreateDynamicActor(299,1201.5687,-901.2305,42.8438,308.4897,-1,-1,"Mike");//Mit Parameter

    Möchte ich ja dem Actor den Name "Mike" zuweisen, leider entsteht dadurch ein Warningcode:

    C
    warning 202: number of arguments does not match definition


    Leider verstehe ich den Fehler nicht, und hoffe es kann mir jemand helfen :)
    Hier noch der stock CreateDynamicActor (Edit wie es @BlackAce geschrieben hatte)
    stock:

    MfG :thumbup:


    //Edit:
    Fehler besteht weiterhin. Brauche dringend Hilfe.


    Mit freundlichen Grüßen
    German_ScripterHD

    Einmal editiert, zuletzt von German_ScripterHD ()


  • Mit freundlichen Grüßen
    German_ScripterHD

  • Nutzt du einen anderen Compiler, oder einen anderen Editor?
    Mit dem Standard-Pawno+Compiler geht es bei mir ohne Probleme.


    Am Code sollte es daher nicht liegen.
    Probiere es bitte mal in einem leeren Filterscript auch so.



    #include <a_samp>


    #define MAX_DYNAMIC_ACTORS 10
    #define INVALID_ACTOR_ID -1
    #define ACTOR_STREAM_TICK_RATE 100


    enum e_DynamicActors
    {
    e_iSlotUsed,
    e_iActorModel,
    Float:e_fActorX,
    Float:e_fActorY,
    Float:e_fActorZ,
    Float:e_fActorA,
    e_iActorVirtual,
    e_iActorInterior,
    e_iActorTimer,
    e_iActorID,
    e_iActorName[128]
    };
    static s_DynamicActors[MAX_DYNAMIC_ACTORS][e_DynamicActors];



    public OnFilterScriptInit()
    {
    CreateDynamicActor(299,1201.5687,-901.2305,42.8438,308.4897,-1,-1);//Letzter Parameter nicht angegeben
    CreateDynamicActor(299,1201.5687,-901.2305,42.8438,308.4897,-1,-1,"Mike");//Mit Parameter
    return 1;
    }




    stock CreateDynamicActor(modelid, Float:x, Float:y, Float:z, Float:angle, worldid = -1, interiorid = -1, const actorname[] = "UNKNOWN_ACTOR_NAME")
    {
    for (new i = 0; i < MAX_DYNAMIC_ACTORS; i ++)
    {
    if (!s_DynamicActors[i][e_iSlotUsed])
    {
    s_DynamicActors[i][e_iSlotUsed] = 1;
    s_DynamicActors[i][e_iActorModel] = modelid;
    s_DynamicActors[i][e_fActorX] = x;
    s_DynamicActors[i][e_fActorY] = y;
    s_DynamicActors[i][e_fActorZ] = z;
    s_DynamicActors[i][e_fActorA] = angle;
    s_DynamicActors[i][e_iActorVirtual] = worldid;
    s_DynamicActors[i][e_iActorInterior] = interiorid;
    s_DynamicActors[i][e_iActorID] = INVALID_ACTOR_ID;
    format(s_DynamicActors[i][e_iActorName], MAX_PLAYER_NAME, actorname);
    s_DynamicActors[i][e_iActorTimer] = SetTimerEx("OnActorStreamUpdate", ACTOR_STREAM_TICK_RATE, true, "i", i);
    return i;
    }
    }
    return INVALID_ACTOR_ID;
    }

  • Nein ich nutze den normalen Compailer sowie das Standart Programm.


    //Edit:
    Jetzt habe ich ein neues Problem:


    Ich habe gerade zwei Funktionen hinzugefügt die leider nicht funktionieren:


    Fehler besteht weiterhin...


    Mit freundlichen Grüßen
    German_ScripterHD

    2 Mal editiert, zuletzt von German_ScripterHD ()

  • Das Label ist aber InGame nicht zu stehen.

    Lass dir die Position mal per Print ausgeben, und schaue ob das passt. Lasse dir dann ansonsten mal die Label-ID ausgeben, ob da eine generiert wird, oder ob das Label gar nicht erstellt wird.


    Zum Problem 2:
    Versuche
    SCMEx(playerid,-1,"[BOT] %s: Hallo %s.",GetDynamicActorName(i),_GetPlayerName(playerid));
    zu:
    SCMEx(playerid,-1,"[BOT] %s: Hallo %s.",s_DynamicActors[i][e_iActorName],_GetPlayerName(playerid));
    zu ändern. Geht das?

  • Lass dir die Position mal per Print ausgeben, und schaue ob das passt. Lasse dir dann ansonsten mal die Label-ID ausgeben, ob da eine generiert wird, oder ob das Label gar nicht erstellt wird.

    Dadurch ich mir das printen lassen habe, konnte ich den Fehler selbst beheben.


    Nun zu dem anden:

    C
    SCMEx(playerid,-1,"[BOT] %s: Hallo %s.",s_DynamicActors[i][e_iActorName],_GetPlayerName(playerid));




    So kann ich das leider nicht benutzen, da es sich bei dem DynamicActor System um ein Include handelt, schreibe ich das wie folgt in das Hauptscript, so gibt er mir die Fehlermeldung "undefind Symbol s_DynamicActors[i][e_iActorName]". Seit dem ich das mit dem TextLabel gefixxt habe, wird mir nicht mehr folgendes angezeigt:


    C
    [17:49:01] [BOT] Pnload/get/?i=O 8pornR2NOwzbAfAXYNFNa 36CF3YFf0cXvSmV2c4D1 C8yHLgH CWgRUHFMs1414480475PBF1414480475HbIdKJFLhNfhTBzYQDD : Hallo German_ScripterHD.

    sondern:


    bei Actor Mike:


    C
    [17:49:01] [BOT] M: Hallo German_ScripterHD.

    bei Actor Sarah:



    C
    [17:49:01] [BOT] S: Hallo German_ScripterHD.

    usw. (also es wird immer nur der erste Buchstabe des Actornames angezeigt.)


    hier nochmal der stock:




    C
    stock GetDynamicActorName(actorid)
    {
    	if (IsValidDynamicActor(actorid)){
    		return s_DynamicActors[actorid][e_iActorName];
    	}
    	return 1;
    }

    //Edit: Fehler selbst behoben. Trotzdem Danke an alle


    Mit freundlichen Grüßen
    German_ScripterHD

    Einmal editiert, zuletzt von German_ScripterHD () aus folgendem Grund: Rechtschreibfehler verbessert. Selber gelöst.

  • Sei doch so nett und poste die beiden Lösungswege, damit User die in der Zukunft das selbe Problem haben, hier nachschauen können

    Das Problem mit dem 3D Text war eigentlich ganz simpel, einfach streamer in das Include includiert und fertig.
    Bei der Funktion "GetActorName", habe ich einfach den name mit der SA:MP Funktion "format" formatiert und dann den string ausgeben lassen.
    Das war allle :)


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD