[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
  • Ich hatte Dir damals den Ratschlag gegeben, dass Du Dich ein bisschen mit einem Problem befassen sollst. Du bist jetzt seit ca. einem Jahr am programmieren und stellst immer noch Fragen eines Anfängers und das kommt genau wegen SOLCHEN Fragen. Ich habe nichts gegen Fragen und ich helfe gerne aber wenn Du permanent nur Beispielcodes haben willst und selbst einfach nichts auf die Reihe bekommst, wird es langsam einfach nur abartig lächerlich. Das ist eine Frage, die habe ich nach in meiner ersten Woche als Programmierer im Bereich SA:MP bereits gelöst und Du bist immer noch nach paar Monaten nicht in der Lage sowas zu lösen.


    Ich sags nochmal: Wenn Du weiter nichts versuchst und Dir permanent hier Codes senden lässt, brauchst Du garnicht erst weitermachen weil Dein Server von 1000 anderen Leuten programmiert wurde aber nicht durch Dich.

  • Du siehst die Zeit des Beitrags.


    Ich habe schon lange etwas gemacht.
    Kannst du aber mal gucken ob es geht?
    forward Neuladen(playerid);


    public OnPlayerConnect(playerid)
    {
    SetTimer("Neuladen",600000,1);
    new query[256], plrIP[16];
    mysql_escape_string(NamePlayer(playerid), NamePlayer(playerid));
    format(query, sizeof(query), "SELECT * FROM accounts WHERE Name='%s'", NamePlayer(playerid));
    mysql_tquery(mysqlHandle, query, "UserCheck", "i", playerid);
    GetPlayerIp(playerid, plrIP, sizeof(plrIP));
    format(query, sizeof(query), "UPDATE accounts SET IP = '%d' WHERE Name='%s'", plrIP,NamePlayer(playerid));
    mysql_tquery(mysqlHandle, query, "", "");
    return 1;
    }


    public Neuladen(playerid)
    {
    print("Accounts aktualisiert");
    SpielerNeuladen(playerid);
    return 1;
    }


    stock SpielerNeuladen(playerid)
    {
    new query[50];
    format(query, sizeof(query), "UPDATE accounts SET Geld='%i',Level='%i',Adminlevel='%i',IP='%i' WHERE Name='%s'", GetPlayerMoney(playerid), GetPlayerScore(playerid), SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pIP], NamePlayer(playerid));
    mysql_tquery(mysqlHandle, query);
    }

  • Beitrag von The Sensei ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Habs kurz überflogen. Ich mache das so:

    • 10 Minuten Timer
    • Timer wird aufgerufen und geht durch alle Spieler durch und ruft SaveAccount(playerid) auf
    • SaveAccount(playerid) => Speichert den Spieler ab
    • Beim Disconnect wird SaveAccount(playerid) manuell aufgerufen.
  • Was genau hast du denn vor, nachdem es gespeicher worden ist? Wird der HEX Wert in einem String verwendet (also muss er genau in dem Format ausgegeben werden), oder willst du es zum Beispiel für SetPlayerColor verwenden?


    Wenn du es als String haben willst, dann kannst du es mit "%x" formatieren (format) und als VARCHAR in der Tabelle speichern. Und wenn du es nur für eine Anweisung wie SetPlayerColor (o.ä.) speichern willst, dann reicht es, wenn du es wie eine Ganzzahl (Integer) behandelst, sprich du speicherst den HEX Wert einfach als Integer ("%d" bzw. "%i") und in der Datenbank als INT, und liest ihn so auch aus. Es ist bei solchen Funktionen (SetPlayerColor) egal, ob du beispielsweise "-1" oder "0xFFFFFFFF" verwendest, da beides das Gleiche ist.


    Er wird für SetPlayerColor() und für eine Gangzone verwendet.
    Das Problem ist aber, dass der Wert im Dezimalsystem aber die Größe eines Integers sprengt.


    0xFFFC00FF => 4294705407

    Zitat

    Warning: #1264 Out of range value for column 'color' at row 1

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hey,
    wie kann ich Checkpoints erstellen, welche beim betreten verschwinden und auf der minimap überall zu sehen sind?


    Bis jetzt habe ich es so:
    CreateDynamicCP(1480.8396,-1770.6718,18.7958,5.0);
    Dieser ist nicht aufsammelbar und auch erst ab einer gewissen nähe auf der Karte sichtbar.
    Grüße
    Dean

  • OnPlayerEnterDynamicPickup()


    Er hat einen Checkpoint erstellt, kein Pickup. ;)


    DeaN Hunter:
    Du musst den Checkpoint so erstellen:
    cp1=CreateDynamicCP(1480.8396,-1770.6718,18.7958,5.0,-1,-1,-1,10000.0);
    und global, unter den Includes:
    new cp1;
    Dann siehst du ihn von überall. Hast du aber mehrere Checkpoints, dann zeigt es dir nur den dir am nächsten Checkpoint an, da SA-MP pro Spieler nur einen Checkpoint anzeigen kann. Wenn du diese auf der Karte markieren willst, dann nimm dafür Map Icons.


    Löschen kannst du einen Checkpoint beim betreten in:
    OnPlayerEnterDynamicCP
    if(checkpointid == cp1) DestroyDynamicCP(checkpointid);

  • Hey,


    ich komme nicht weiter mit dem /UNBAN befehl... bei diesem Befehl passiert nichts, ich gebe zwar den namen ein aber nichts passiert... warum?



    ocmd:unban(playerid,params[])
    {
    if(SpielerInfo[playerid][pAlevel] >= 1)
    {
    new pID,string[256],aname[MAX_PLAYERS],unbanname[MAX_PLAYER_NAME],query[256];
    GetPlayerName(playerid,aname,sizeof(aname));
    if(sscanf(params,"s[24]",unbanname)) return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /UnBan [Name]");
    if(mysql_CheckTBanAccount(pID) == 1)
    {
    format(query,sizeof(query),"DELETE FROM SpielerTimeBanned WHERE `Name`='%s'",unbanname);
    mysql_query(query);
    format(string,sizeof(string),"[A-INFO]{FFFFFF} Der Timeban von %s wurde von %s vollständig gelöscht(TimeBan-Entfernt)!",unbanname,aname);
    SendAdminMessage(0xFF0000FF,string);
    }
    else if(SpielerInfo[pID][pBanned] == 1)
    {
    format(query, sizeof(query), "INSERT INTO `user` (`Banned`) VALUES (0)",SpielerInfo[pID][pBanned]);
    mysql_query(query);
    format(string,sizeof(string),"[A-INFO]{FFFFFF} %s hat den Ban von %s vollständig gelöscht!(Ban-Entfernt)",unbanname,aname);
    SendAdminMessage(0xFF0000FF,string);
    }
    else if(SpielerInfo[pID][pBanned] == 0 || mysql_CheckTBanAccount(pID) == 0)
    {
    SendClientMessage(playerid,0xFF0000FF,"[FEHLER] {FFFFFF}Dieser Spieler wurde nicht gebannt!");
    }
    }
    return 1;
    }

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • new pID,/* .. */ // Nur pID zu erstellen reicht nicht
    //
    if(sscanf(params,"s[24]",unbanname)) return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /UnBan [Name]");
    if(mysql_CheckTBanAccount(pID) == 1) // <- pID gibt es nicht "gültig"
    // ...
    else if(SpielerInfo[pID][pBanned] == 1) // <- pID gibt es nicht "gültig". Wie soll ein gesperrter Spieler überhaupt auf dem Server sein,damit du pBanned checken kannst?
    // ...
    else if(SpielerInfo[pID][pBanned] == 0 || mysql_CheckTBanAccount(pID) == 0)// <- pID gibt es nicht "gültig". Wie soll ein gesperrter Spieler überhaupt auf dem Server sein,damit du pBanned checken kannst?
    Nur pID zu deklarieren bringt dir ja schließlich nichts. Wenn du bei /UNBAN den Namen angibst ( String ), kannst du schlecht eine ID benutzen um darüber zu entbannen.
    Du müsstest mysql_CheckTBanAccount als Alternative auch mit String / Namen erstellen und anwenden.


  • Erstmal danke für die Hilfe :love:


    Habe es nun wie folgt, beim betreten wird der Checkpoint allerdings nicht zerstört und die Nachricht kommt auch nicht:
    case DIALOG_NAVI:
    {
    new cp1, checkpointid;
    if(listitem==0)
    {
    //Stadthalle
    cp1=CreateDynamicCP(1480.8396,-1770.6718,18.7958,5.0,-1,-1,-1,10000.0);
    if(checkpointid == cp1)
    {
    DestroyDynamicCP(checkpointid);
    SendClientMessage(playerid, COLOR_RED, "Du hast den Checkpoint erreicht");
    return 1;
    }
    }
    if(listitem==1)
    {
    //LSPD
    }
    if(listitem==2)
    {
    //Medic
    }
    SendClientMessage(playerid, COLOR_GREY, "Die Position wird dir auf der Karte angezeigt.");
    return 1;
    }
    case TransportAutoDialog:

  • Danke geht nun,


    aber jetzt komme ich nicht mit dem "GetTeam" Befehl weiter, dieser Befehl soll ein bestimmten Team zu sich porten.. es passiert einfach garnichts:



    ocmd:getteam(playerid,params[])
    {
    if(SpielerInfo[playerid][pAlevel] >= 5)
    {
    new TeamID,Float:ax,Float:ay,Float:az,Float:afacing, string[289],astring[289],aname[MAX_PLAYERS];
    GetPlayerName(playerid,aname,sizeof(aname));
    if(sscanf(params,"i",TeamID))return SendClientMessage(playerid, 0xFF0000FF,"[FEHLER]{FFFFFF} /GetTeam [TeamID]");
    if(TeamID < 1 ||TeamID > 3)return SendClientMessage(playerid,0xFF0000FF,"[FEHLER] {FFFFFF}Es gibt nur 3 Teams!(1.Army 2.Terroristen 3.Hitman)");
    GetPlayerPos(playerid, ax, ay, az);
    GetPlayerFacingAngle(playerid, afacing);
    if(TeamID == 1) //ARMY
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(gTeam[i] == 1)
    {
    SendClientMessage(i,-1,"Du bist als Army teleportiert wurden");
    SetPlayerPos(i, ax, ay, az);
    SetPlayerFacingAngle(i, afacing);
    format(string,sizeof(string),"[INFO]{FF8900} %s {FFFFFF}hat das Team {FF8900}US Army {FFFFFF}geportet!",aname);
    SendClientMessageToAll(0xFF0000FF,string);
    format(astring,sizeof(astring),"[A-INFO] [%d]%s(LvL: %s) hat '{FFFFFF}/GETTEAM{FF0000}' ausgeführt!",playerid,aname,GetAlevel(playerid));
    SendAdminMessage(0xFF0000FF,astring);
    }
    }
    }
    }
    else if(TeamID == 2) //Terror
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(gTeam[i] == 2)
    {
    SendClientMessage(i,-1,"Du bist als Terror teleportiert wurden");
    SetPlayerPos(i, ax, ay, az);
    SetPlayerFacingAngle(i, afacing);
    format(string,sizeof(string),"[INFO]{FF8900} %s {FFFFFF}hat das Team {FF8900}Terroristen {FFFFFF}geportet!",aname);
    SendClientMessageToAll(0xFF0000FF,string);
    format(astring,sizeof(astring),"[A-INFO] [%d]%s(LvL: %s) hat '{FFFFFF}/GETTEAM{FF0000}' ausgeführt!",playerid,aname,GetAlevel(playerid));
    SendAdminMessage(0xFF0000FF,astring);
    }
    }
    }
    }
    //..[i][/i]

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

    Einmal editiert, zuletzt von [GeD]Max ()

  • hallo com ich arbeite gerade an mein toten system und wiederbeleben system aber weiß gerade nicht weiter


    /wb||/wiederbeleben



    unswa sieht es bisher so aus
    und ich weiß nicht wie ich bei dem /wiederbeleben befehl abfragen soll ob er bei der stelle des toten spielers ist


    //Oben
    new TotenKopf[MAX_PLAYERS];
    new Text3D:TotenName[MAX_PLAYERS];


    //OnPlayerDisconnect
    DestroyPickup(TotenKopf[playerid]);
    Delete3DTextLabel(TotenName[playerid]);



    public OnPlayerDeath(playerid, killerid, reason)
    {
    sInfo[playerid][PTot] = 1;
    new Float:px,Float:py,Float:pz,pv,pi,string[80];
    GetPlayerPos(playerid, px,py,pz);
    GetPlayerVirtualWorld(playerid,pv);
    GetPlayerInterior(playerid,pi);
    TotenKopf[playerid] = CreatePickup(1254,1,px,py,pz);
    format(string,sizeof(string),"Leichen Name\nvon %s",getPlayerName(playerid));
    TotenName[playerid] = Create3DTextLabel(string,GRAU,px,py,pz,10,pi,pv);
    format(string, sizeof(string),"Der Spieler %s ID %i ist soeben gestorben!",getPlayerName(playerid),playerid);
    SendOndutyMedicMessage(GELB,string);
    return 1;
    }



    ocmd:tote(playerid)
    {
    if(!isPlayerInFrakt(playerid,3)) return SendClientMessage(playerid,ROT,"Du bist Kein Notarzt!");
    if(sInfo[playerid][mduty] == 1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(sInfo[i][PTot] == 1)
    {
    new string[200];
    SendClientMessage(playerid,ROT,".:Tote Spieler:.");
    format(string,sizeof(string),"%s || ID %i",getPlayerName(playerid),playerid);
    SendClientMessage(playerid,GELB,string);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Es gibtr zu Zeit keine Toten User");
    return 1;
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist nicht als Notarzt Onduty!");
    return 1;
    }
    return 1;
    }


    ocmd@2:wb,wiederbeleben(playerid,params[])
    {
    if(!isPlayerInFrakt(playerid,3)) return SendClientMessage(playerid,ROT,"Du bist Kein Notarzt!");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(playerid,//hier weiß ich nicht wie ich abfragen soll ob er an der stelle vom toten ist oder nicht)
    {


    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist bei keinem Toten Spieler");
    return 1;
    }
    }
    }
    return 1;
    }


    ocmd:awb(playerid,params[])
    {
    new pID,string[128];
    if(!isAdmin(playerid,1337)) return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    if(sInfo[playerid][adminduty] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht Aduty!");
    if(sscanf(params, "u", pID)) return SendClientMessage(playerid, ROT, "/awd [ID]");
    format(string,sizeof(string),"Du hast %s dich mit Hilfe von Adminrechten wiederbelebt!",getPlayerName(pID));
    printf("%s hat den Spieler %s mit Hilfe von Adminrechten wiederbelebt)",getPlayerName(playerid),getPlayerName(pID));
    SendClientMessage(playerid,ROT,string);
    format(string,sizeof(string),"%s %s hat dich mit Hilfe von Adminrechten wiederbelebt!",arang(playerid),getPlayerName(playerid));
    SendClientMessage(pID,GELB,string);
    sInfo[pID][PTot] = 0;
    SpawnPlayer(pID);
    DestroyPickup(TotenKopf[playerid]);
    Delete3DTextLabel(TotenName[playerid]);
    return 1;
    }



    //OnPlayerSpawn
    if(sInfo[playerid][PTot] == 1)
    {
    SendClientMessage(playerid,GELB,"Du bist gestorben!");
    SetPlayerVirtualWorld(playerid,89);
    SetPlayerPos(playerid,816.6987,-1103.0229,25.7914);
    }