[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Erste Frage: Ist es möglich die Funktion auszuschalten das man nicht mehr Sprinten kann?

    Nur bedingt, schaue dir mal diesen Code als Beispiel an: http://forum.sa-mp.com/showpost.php?p=381304&postcount=11




    Zweite Frage: Wie ist es möglich, das im Textdraw oder Dialog ein Text erscheint als wird er gerade Geschrieben?

    Du musst den Text per Timer aktualisieren.






    wie kann man überprüfen, ob der Spieler sich bewegt? Egal ob er W,A,S,D drückt, oder Sprint, etc...

    Das würde ich über die Geschwindigkeit und die Animation (GetPlayerAnimationIndex) prüfen.

  • @Jeffry Mit der ersten Frage meinte ich eigentlich, das man dauerhaft Sprinten kann, ohne das man Pause machen muss. :D
    Habe mich doof Ausgedrückt.


    Hast du da vielleicht ein kleinen Codeschnippel für mich wegen dem Dialog und den Text setzen.
    Verstehe da nicht ganz, wie ich dies richtig umsetzen soll.


    MfG.

  • Hi, speichere aktuell alle Spieler Daten nur per OnPlayerDisconnect, was ziemlich ungünstig ist wenn mal der Server abstürzt.


    Meine Frage:


    Was wäre die beste Methode von jedem Spieler die Daten zu speichern?


    Alle aufeinmal - per Timer?
    Für jeden Spieler einzeln - per Timer?
    Gibt's noch andere Methoden?


    Falls ich es per Timer machen soll, was würdet ihr für eine Zeit empfehlen?


    @Y3tti


    Du kannst die Ausdauer wiederherstellen indem du den Spieler einmal spawnst und dann ggf. zu seiner alten Position setzt.



    CMD:ausdauer(playerid)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SpawnPlayer(playerid);
    SetPlayerPos(playerid, x, y, z);
    SendClientMessage(playerid, -1, "Ausdauer wiederhergestellt");
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Mit der ersten Frage meinte ich eigentlich, das man dauerhaft Sprinten kann, ohne das man Pause machen muss.

    Dazu wäre mir nichts außer Mods bekannt.
    Edit: Ja, per Respawn würde es bedingt gehen, das sieht aber wahrscheinlich nicht so schön aus.
    Das würde ich dann eventuell per Befehl machen, sprich sowas wie /luft.



    Hast du da vielleicht ein kleinen Codeschnippel für mich wegen dem Dialog und den Text setzen.

    Kann ich dir heute Abend geben, wenn ich zu Hause bin.



    Für jeden Spieler einzeln - per Timer?

    Das.
    Zwischen 1 und 5 Minuten ist angebracht.


  • CMD:find(playerid, params[])
    {
    if(!IsLoggedIn(playerid))return 1;
    if(!(Spieler[playerid][pJob] == 2))return SendClientMessage(playerid, COLOR_GREY, "** Du bist kein Detektiv.");
    new pID, string[128], Float:pos[3], ort[36];
    if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_GREY, "Befehl: /find [Spieler]");
    if(pID == playerid)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selber suchen.");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_GREY, ERROR_OFFLINE);
    if(IsPlayerNPC(pID))return 1;
    if(!(Spieler[pID][pLoggedIn]))return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist nicht online.");
    GetPlayer2DZone(pID, ort, 36);
    if(pDetektivAbkling[playerid] > 0)
    {
    format(string, sizeof(string), "Mit deinem Skilllevel kannst du diesen Befehl nur alle %d Sekunden verwenden.", pDetektivAbkling[playerid]);
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;
    }
    if(GetPlayerInterior(pID) > 0)
    {
    GetPlayerPos(pID, pos[0], pos[1], pos[2]);
    SetPlayerCheckpointEx(playerid, pos[0], pos[1], pos[2], 3.0, CP_FIND, INVALID_CHECKPOINT_TYPE);
    format(string, sizeof(string), "Der Spieler befindet sich in Gebäudekomplex %d.%d", GetPlayerInterior(pID), GetPlayerVirtualWorld(pID));
    SendClientMessage(playerid, COLOR_GREEN, string);
    GivePlayerDeteSkill(playerid, 5);
    switch(Spieler[playerid][pDetektivSkill])
    {
    case 1: pDetektivAbkling[playerid] = 120;
    case 2: pDetektivAbkling[playerid] = 90;
    case 3: pDetektivAbkling[playerid] = 60;
    case 4: pDetektivAbkling[playerid] = 30;
    case 5: pDetektivAbkling[playerid] = 5;
    }
    }
    else if(GetPlayerInterior(pID) == 0)
    {
    GetPlayerPos(pID, pos[0], pos[1], pos[2]);
    SetPlayerCheckpointEx(playerid, pos[0], pos[1], pos[2], 3.0, CP_FIND, INVALID_CHECKPOINT_TYPE);
    format(string, sizeof(string), "Der Spieler befindet sich in %s", ort);
    SendClientMessage(playerid, COLOR_GREEN, string);
    GivePlayerDeteSkill(playerid, 5);
    switch(Spieler[playerid][pDetektivSkill])
    {
    case 1: pDetektivAbkling[playerid] = 120;
    case 2: pDetektivAbkling[playerid] = 90;
    case 3: pDetektivAbkling[playerid] = 60;
    case 4: pDetektivAbkling[playerid] = 30;
    case 5: pDetektivAbkling[playerid] = 5;
    }
    }
    return 1;
    }



    Hey ich habe eine frage wie mache ich für den Job Detektiv /showpos also das X möchte Y die pose von Z ziegen wie mach ich das

  • Habe es nun so aber es kommt jetze ( wenn ich kein Haus habe )Der Spieler hat bereits ein Haus.


    Code
    HatEinHaus(playerid)
    {
    	for(new i = 0; i < MAX_HOUSE; i++)
    	{
    	    if(hInfo[i][h_ID] == 0) continue;
    	    if(!strcmp(hInfo[i][h_besitzer], getPlayerName(playerid), true, 3)) return 1;
    	}
    	return 0;
    }

    Brauche immernoch Hilfe


  • AddPlayerClass(230,1392.0396,-1866.5282,13.3828,106.4665,0,0,0,0,0,0); // No DM 1
    AddPlayerClass(230,1558.8539,-1727.6683,13.3828,259.6646,0,0,0,0,0,0); // No DM 2



    Ich habe eine Frage ich wollte eine No DM Zone machen für die Stadthalle.
    Welche posen muss ich dafür nehmen das es rot auf der map angezeigt wird.


    Wen der Spieler in dem Bereich ist wen er geschalten wird kommt die Nachricht:


    *No-DM Zone* Du wurdest von %s in Commerce angegriffen (z.b 1 Schaden.)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • if(x > 1392.0396 && x < 1558.8539 && y > -1866.5282 && y < -1727.6683 && z > 0 && z < 100){ //In Zone //Beachte, -1866 ist KLEINER als -1727}

    Unter was soll man das einfügen wen man Fragen darf.


    So wen ich jetzt mache



    format(string, sizeof(string),"*No-DM Zone* Du wurdest von %s in Commerce angegriffen (z.b 1 Schaden.)", GetName(playerid));
    SendClientMessage(playerid, COLOR_ANNOUNCE, string);


    Wie lass ich



    if(x > 1392.0396 && x < 1558.8539 && y > -1866.5282 && y < -1727.6683 && z > 0 && z < 100)
    {
    format(string, sizeof(string),"*No-DM Zone* Du wurdest von %s in Commerce angegriffen (z.b 1 Schaden.)", GetName(playerid));
    SendClientMessage(playerid, COLOR_ANNOUNCE, string);
    }



    Wie lasse ich den schaden auslesen?

  • Unter was soll man das einfügen wen man Fragen darf.

    http://wiki.sa-mp.com/wiki/OnPlayerTakeDamage



    Wie lasse ich den schaden auslesen?

    Der Parameter "amount" in OnPlayerTakeDamage gibt dir den Schaden mit.



    ==========================================

    Hast du da vielleicht ein kleinen Codeschnippel für mich wegen dem Dialog und den Text setzen.

    Hätte ich auch gern



    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Code dazu:


  • public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
    {
    if(Spieler[issuerid][pHitsound] == 1)
    {
    PlayerPlaySound(issuerid, 17802, 0.0, 0.0, 0.0);
    }
    if(x > 1392.0396 && x < 1558.8539 && y > -1866.5282 && y < -1727.6683 && z > 0 && z < 100)
    {
    format(string, sizeof(string),"*No-DM Zone* Du wurdest von %s in Commerce angegriffen (%.0f Schaden.)", GetName(playerid), amount);
    SendClientMessage(playerid, COLOR_ANNOUNCE, string);
    }
    return 1;
    }



    so?

  • so?

    So:
    public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
    {
    if(issuerid != INVALID_PLAYER_ID)
    {
    if(Spieler[issuerid][pHitsound] == 1)
    {
    PlayerPlaySound(issuerid, 17802, 0.0, 0.0, 0.0);
    }
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(x > 1392.0396 && x < 1558.8539 && y > -1866.5282 && y < -1727.6683 && z > 0 && z < 100)
    {
    format(string, sizeof(string),"*No-DM Zone* Du wurdest von %s in Commerce angegriffen (%.0f Schaden.)", GetName(playerid), amount);
    SendClientMessage(playerid, COLOR_ANNOUNCE, string);
    }
    }
    return 1;
    }

  • Ja, das hab ich bereits rausgefunden.



    so aber jetzt hab ich ein Problem jetzt ist das viel zu groß... obwohl es eigentlich nur um die Stadthalle geht...



    Commerce = GangZoneCreate(1392.0396,1558.8539,-1866.5282,-1727.6683);




    AddPlayerClass(230,1392.0396,-1866.5282,13.3828,106.4665,0,0,0,0,0,0); // No DM 1 Ecke 1
    AddPlayerClass(230,1558.8539,-1727.6683,13.3828,259.6646,0,0,0,0,0,0); // No DM 2 Ecke 2