[Hilfe] Tutorial/Einweisung nicht für alle sondern nur für playerid

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
  • Guten Tag,
    ich habe ein kleines Problemchen und hoffe auf eure Hilfe.
    Ich wollte mir ein kleines Einweisungsscript schreiben was wenn in der Db tutorial auf 0 steht eine Einweisung startet.
    Alles lief soweit.. nunja, solange ich alleine auf dem server bin.


    Als ich das Script dann auf meinem Server geladen habe, der im internet zu erreichen ist stellte ich fest, das wenn ein User eine Einweisung bekommt, gleich alle mit die Einweisung erhalten. Ob Tutorial = 1 oder 0 spielt da keine rolle.
    Jetz möchte ich euch bitten mir zu verraten, wie ich das Tutorial nur den anzeigen kann, die es wirklich benötigen.
    Ich danke euch im vorraus.



    new tuttimeplayer[MAX_PLAYERS];
    new TutTime =1;


    forward tutorial(playerid);


    public OnPlayerSpawn(playerid)
    {
    if(mysql_GetInt("spieler", "tutorial", "name", PlayerName[playerid]) == 0){
    tuttimeplayer[playerid] = SetTimer("tutorial", 1000, 1);
    SendClientMessage(playerid, COLOR_GREEN, "[SYSTEM] Du bist neu, weshalb gleich die Einweisung startet!");
    TogglePlayerControllable(playerid,0);
    }
    return 1;
    }


    //______________________________________________________________________________
    // TUTORIAL
    //______________________________________________________________________________
    public tutorial(playerid){
    new Text:Tutorial1[MAX_PLAYERS];
    TutTime++;
    if(IsPlayerConnected(playerid)){
    PlayerPlaySound(playerid, 1185, 0.0, 0.0, 0.0);
    if(TutTime > 1 && TutTime < 12)
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerCameraPos(playerid,1172.1597,-948.0257,50.7859);
    SetPlayerCameraLookAt(playerid,1196.3212,-922.4346,43.0588);
    SetPlayerPos(playerid, 1172.1597,-948.0257,50.7859);
    TextDrawSetString(Tutorial1[playerid], "~g~| asdasd |~w~~n~asdasdasdasdasd");
    TextDrawShowForPlayer(playerid, Tutorial1[playerid]);
    }
    if(TutTime > 12)
    {
    SetPlayerInterior(playerid, 0);
    PlayerPlaySound(playerid, 1186, 0.0, 0.0, 0.0);
    TextDrawDestroy(Tutorial1[playerid]);
    TogglePlayerControllable(playerid,1);
    mysql_SetInt("spieler", "tutorial", 1, "name", PlayerName[playerid]);
    SetSpawnInfo(playerid, 0, 0, 1280.6090,-1350.3611, 13.3708, 90.8447, 0, 0, 0, 0, 0, 0 );
    SpawnPlayer(playerid);
    KillTimer(tuttimeplayer[playerid]);
    }
    Tutorial1[playerid] = TextDrawCreate(179.000000,124.000000,"000");
    } else {
    KillTimer(tuttimeplayer[playerid]);
    }
    return 1;
    }

  • Danke für deine schnelle Hilfestellung.
    Jedoch ist das anscheinend nicht die Lösung meines Problems.
    Hier der neue Code:



    new tuttimeplayer[MAX_PLAYERS];
    new TutTime[MAX_PLAYERS] =1;


    forward tutorial(playerid);


    public OnPlayerSpawn(playerid)
    {
    if(mysql_GetInt("spieler", "tutorial", "name", PlayerName[playerid]) == 0){
    tuttimeplayer[playerid] = SetTimer("tutorial", 1000, 1);
    SendClientMessage(playerid, COLOR_GREEN, "[SYSTEM] Du bist neu, weshalb gleich die Einweisung startet!");
    TogglePlayerControllable(playerid,0);
    }
    return 1;
    }


    public tutorial(playerid){
    new Text:Tutorial1[MAX_PLAYERS];
    TutTime[playerid]++;
    printf("Sekunden: %d",TutTime[playerid]);
    if(IsPlayerConnected(playerid)){
    PlayerPlaySound(playerid, 1185, 0.0, 0.0, 0.0);
    if(TutTime[playerid] > 1 && TutTime[playerid] < 12)
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerCameraPos(playerid,1172.1597,-948.0257,50.7859);
    SetPlayerCameraLookAt(playerid,1196.3212,-922.4346,43.0588);
    SetPlayerPos(playerid, 1172.1597,-948.0257,50.7859);
    TextDrawSetString(Tutorial1[playerid], "~g~| asd |~w~~n~asdasdasd");
    TextDrawShowForPlayer(playerid, Tutorial1[playerid]);
    }
    if(TutTime[playerid] > 12)
    {
    SetPlayerInterior(playerid, 0);
    PlayerPlaySound(playerid, 1186, 0.0, 0.0, 0.0);
    TextDrawDestroy(Tutorial1[playerid]);
    TogglePlayerControllable(playerid,1);
    mysql_SetInt("spieler", "tutorial", 1, "name", PlayerName[playerid]);
    SetSpawnInfo(playerid, 0, 0, 1280.6090,-1350.3611, 13.3708, 90.8447, 0, 0, 0, 0, 0, 0 );
    SpawnPlayer(playerid);
    KillTimer(tuttimeplayer[playerid]);
    }
    Tutorial1[playerid] = TextDrawCreate(179.000000,124.000000,"000");
    } else {
    KillTimer(tuttimeplayer[playerid]);
    }
    return 1;
    }

  • Ich danke für deine Antwort.
    Jedoch würde ich dich bitten mir das genauer zu erklären.
    Ich scripte noch nicht lange und habe mir die Funktion SetTimerEx gerade im Wiki angeschaut.


    Muss das so realisiert werden?
    tuttimeplayer[playerid] = SetTimerEx("tutorial", 1000, false, "i", TutTimer[playerid], playerid);


    und wenn ja, wie muss ich das dann im weiteren verlauf standhalten? Was muss ich dann im public tutorial machen?
    (Wieso überhaupt übergeben? ich habe doch die playerid mit TutTimer[playerid] definiert.. oder nicht ?)



    Lg
    Radanua

  • Kann mir denn keiner helfen ?
    Wär mir sehr wichtig.



    Lg
    Radanua

  • tuttimeplayer[playerid] = SetTimerEx("tutorial",1000,0,"i",playerid);
    //Edit: Code eingedrückt

  • Hab dir alle Fehler kommentiert mit //... Siehe Anhang ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Ich möchts mal so ausdrükcken.. bist ein Schatz :love:


    ne spaß. aber.. super arbeit ! ich danke dir.. werde das nun sofort testen.. :)


    Lg
    Radanua




    // EDIT:
    Läuft alles nun soweit super.. bis auf eine sache.. :/.. wenn das script nun in den nächsten IF wechselt.. ändert sich zwar die camera pos.. jedoch beib das Textdraw das gleiche.. :/..
    Habe jetzt schon einige ideen durch... aber keines brachte was sinnvolles..


    public tutorial(playerid)
    {
    TutTime[playerid]++;
    printf("Sekunden: %d",TutTime[playerid]);
    PlayerPlaySound(playerid, 1185, 0.0, 0.0, 0.0);
    if(IsPlayerConnected(playerid)){
    if(TutTime[playerid] > 2 && TutTime[playerid] < 12)
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerCameraPos(playerid,1172.1597,-948.0257,50.7859);
    SetPlayerCameraLookAt(playerid,1196.3212,-922.4346,43.0588);
    SetPlayerPos(playerid, 1172.1597,-948.0257,50.7859);
    TextDrawSetString(Tutorial1[playerid], "asdasdasdasdasd");
    TextDrawShowForPlayer(playerid, Tutorial1[playerid]);
    }
    if(TutTime[playerid] > 12 && TutTime[playerid] < 21)
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerCameraPos(playerid, 2247.0215,-1655.0173,17.2856);
    SetPlayerCameraLookAt(playerid, 2244.6536,-1663.9304,15.4766);
    SetPlayerPos(playerid, 2256.3555,-1646.6377,15.4959);
    TextDrawSetString(Tutorial1[playerid], "asdasdasdasdadasd");
    TextDrawShowForPlayer(playerid, Tutorial1[playerid]);
    }
    if(TutTime[playerid] > 85)
    {
    SetPlayerInterior(playerid, 0);
    PlayerPlaySound(playerid, 1186, 0.0, 0.0, 0.0);
    TextDrawDestroy(Tutorial1[playerid]);
    TogglePlayerControllable(playerid,1);
    mysql_SetInt("spieler", "tutorial", 1, "name", PlayerName[playerid]);
    SetSpawnInfo(playerid, 0, 0, 1280.6090,-1350.3611, 13.3708, 90.8447, 0, 0, 0, 0, 0, 0 );
    SpawnPlayer(playerid);
    KillTimer(tuttimeplayer[playerid]);
    }
    Tutorial1[playerid] = TextDrawCreate(179.000000,124.000000,"000");
    TextDrawUseBox(Tutorial1[playerid],1);
    TextDrawBoxColor(Tutorial1[playerid],0x00000066);
    TextDrawTextSize(Tutorial1[playerid],480.000000,0.000000);
    TextDrawAlignment(Tutorial1[playerid],0);
    TextDrawBackgroundColor(Tutorial1[playerid],0x000000ff);
    TextDrawFont(Tutorial1[playerid],1);
    TextDrawLetterSize(Tutorial1[playerid],0.399999,1.000000);
    TextDrawColor(Tutorial1[playerid],0xffffffff);
    TextDrawSetOutline(Tutorial1[playerid],1);
    TextDrawSetProportional(Tutorial1[playerid],1);
    TextDrawSetShadow(Tutorial1[playerid],1);
    } else {
    KillTimer(tuttimeplayer[playerid]);
    }
    return 1;
    }



    Kurze Anmerkung warum IsPlayerConnected dort benutzt wird:
    -> Sollte sich der User während des Tutorials ausloggen läuft der Timer jedoch weiter. Das verhindere ich damit.



    Lg
    Radanua

    Einmal editiert, zuletzt von Radanua ()

  • Mensch.. :(.. jetzt bin ik so weit..


    TextDrawHideForPlayer


    funt ebenso wenig.. :/.. dann kommt zwar das nächste textdraw.. aber das alte ist noch im hintergrund leicht zu erkennen... :(
    Muss das so sein ?



    Lg
    Radanua

  • Bitte tu mir den gefallen und beachte nächstes mal meine Kommentare... Du hast den Fehler gemacht, welchen Ich dir vorhin vermeiden wollte! Wenn du in einem Timer ein Textdraw Erstellen lässt, dann wird es klarerweise immer neu erstellt und führt zu Anzeige Bugs, schaue dir nun also diese Datei im Anhang genau an und halte dich auch daran, oK? Danke

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Astreine sache !
    Habe deine Comments alle gelesen nun.. wow.. sollte echt mal genauer lesen.. :)


    Ich danke dir VIELMALS für deine hilfe :)
    Endlich hab ichs so wie ich das haben will :)


    DANKE !