[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
  • if(!strcmp(cmdtext, "/aconfig", true))
    {
    if(GetPVarInt(playerid,"SpielerAdmin") < MAX_ADMIN_LEVEL || !strcmp(GetName(playerid), "Maety_Chelios") || !strcmp(GetName(playerid), "Desonator")){
    SetPVarInt(playerid,"PlayerStep",1);
    return ShowPlayerDialogEx(playerid,ConfigDialog,DIALOG_STYLE_LIST,"Admin.config",ConfigMenuText,"Wählen","Zurück");
    }else{
    SendRightError(playerid,MAX_ADMIN_LEVEL);
    }
    }
    Da vorheriger Post fehlerhaft.
    AUs dem Kopf geschrieben, müsste so passen.

  • if(!strcmp(cmdtext, "/aconfig", true))
    {
    if(GetPVarInt(playerid,"SpielerAdmin") >= MAX_ADMIN_LEVEL || !strcmp(GetName(playerid), "Maety_Chelios") || !strcmp(GetName(playerid), "Desonator")){
    SetPVarInt(playerid,"PlayerStep",1);
    return ShowPlayerDialogEx(playerid,ConfigDialog,DIALOG_STYLE_LIST,"Admin.config",ConfigMenuText,"Wählen","Zurück");
    }else{
    SendRightError(playerid,MAX_ADMIN_LEVEL);
    }
    }


    So ist es richtig.

  • Damit wird die erste strcmp-Funktion geschlossen, und du kannst somit zur nächsten übergehen.
    Wenn du dort keine Klammer hättest, wäre so gesehen beide strcmp-Funktion zu einer, aber das ist ja dann falsch. :) Ich hoffe das kann man einigermaßen verstehen.

  • Wieso klappt das nicht? (Gemeinst ist die letzte Zeile, in der das Level dann auf den Spieler eingetragen wird)


    if(dialogid == DIALOG_ALEVEL)
    {
    if(!strlen(inputtext))
    {
    }
    else
    {
    new string[164];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(SelectedOne[playerid],name,sizeof(name));
    new namegeber[MAX_PLAYER_NAME];
    GetPlayerName(GeberName[playerid],namegeber,sizeof(namegeber));
    format(string,sizeof(string),"Spieler %s ist nun Level %s", name, inputtext);
    SendClientMessage(playerid,grün,string);
    format(gebertext,sizeof(string),"Admin %s hat Dein Level auf %s gesetzt.", namegeber, inputtext);
    SendClientMessage(SelectedOne[playerid],gelb,string);
    PlayerInfo[SelectedOne[playerid]][pLevel] = inputtext;
    }
    }

  • Wieso klappt das nicht? (Gemeinst ist die letzte Zeile, in der das Level dann auf den Spieler eingetragen wird)

    Mach mal noch
    SetPlayerScore(SelectedOne[playerid], inputtext);


    Hoffe es hilft dir.


    LG,
    SkoMe

  • Nutze strval. ;)
    if(dialogid == DIALOG_ALEVEL)
    {
    if(!strlen(inputtext))
    {

    }
    else
    {
    new string[164];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(SelectedOne[playerid],name,sizeof(name));
    new namegeber[MAX_PLAYER_NAME];
    GetPlayerName(GeberName[playerid],namegeber,sizeof(namegeber));
    format(string,sizeof(string),"Spieler %s ist nun Level %d", name, strval(inputtext));
    SendClientMessage(playerid,grün,string);
    format(gebertext,sizeof(string),"Admin %s hat Dein Level auf %d gesetzt.", namegeber, strval(inputtext));
    SendClientMessage(SelectedOne[playerid],gelb,string);
    PlayerInfo[SelectedOne[playerid]][pLevel] = strval(inputtext);
    }
    }


    @SkoMe: Das wird dir einen Argument type mismatch (Argument 2) geben, da inputtext ein Array ist.

  • Warum bekomme ich bei folgendem Code einen Warning:
    if(!strcmp(cmdtext, "aconfig", true))
    {
    new alog[256];
    if(GetPVarInt(playerid,"SpielerAdmin") >= MAX_ADMIN_LEVEL || !strcmp(GetName(playerid), "Maety_Chelios") || !strcmp(GetName(playerid), "Desonator")){
    SetPVarInt(playerid,"PlayerStep",1);
    return ShowPlayerDialogEx(playerid,ConfigDialog,DIALOG_STYLE_LIST,"Admin.config",ConfigMenuText,"Wählen","Zurück");
    format(alog,sizeof(alog),"[AC] => %s ", GetName(playerid));
    log("admin",alog);
    }else{
    SendRightError(playerid,MAX_ADMIN_LEVEL);
    }
    }
    if(!strcmp(cmdtext, "refuelpetrol", true))


    Code
    C:\Users\Administrator\Desktop\Ascension\gamemodes\gs-life.pwn(11057) : warning 225: unreachable code


    Zitat von Line 11057

    format(alog,sizeof(alog),"[AC] => %s ", GetName(playerid));


    Hier meine Log Funktion:
    //logsystem
    log(type[], entry[])
    {

    Hier meine Log Funktion:
    new timestamp = gettime(), query[500];
    format(query,sizeof(query),"INSERT INTO `logs`(`type`, `timestamp`, `entry`) VALUES ('%s', %i, '%s')", type, timestamp, entry);
    mysql_query(query);
    }

  • Warum habe ich folgende Errors:
    if(strcmp("/buygarage", cmd, true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    GetPlayerName(playerid, playername, sizeof(playername));
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    for(new g = 0; g < sizeof(GarageInfo); g++) //Hier
    {
    if(PlayerToPoint(2.0, playerid, GarageInfo[g][gEntrancex], GarageInfo[g][gEntrancey], GarageInfo[g][gEntrancez]) && GarageInfo[g][gOwned] == 0) //Hier
    {
    if(PlayerInfo[playerid][pLevel] < GarageInfo[g][gLevel])
    {
    format(string, sizeof(string), " Du musst Level %d sein um dieses Garage kaufen zu können!", GarageInfo[g][gLevel]);
    SendClientMessage(playerid, COLOR_ERRORTEXT, string);
    return 1;
    }
    if(PlayerInfo[playerid][pCash] > GarageInfo[g][gPreis])
    {
    GarageInfo[g][gOwned] = 1;
    GetPlayerName(playerid, sendername, sizeof(sendername));
    strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255);
    GivePlayerMoneys(playerid,-GarageInfo[g][gPreis]);
    StuffInfo[sSteuerkasse] += GarageInfo[g][gPreis];
    GarageInfo[g][gKasse] = 0;
    GameTextForPlayer(playerid, "~w~Willkommen in deiner Garage~n~Du kannst deine Garage jederzeit mit /exit verlassen", 5000, 3);
    Update3DTextGarage(g);
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, " Du hast nicht genug Geld um dir das Haus kaufen zu können !");
    return 1;
    }
    }
    }
    }
    return 1;
    }


    enum GarageInfo
    {
    Float:gEntrancex,
    Float:gEntrancey,
    Float:gEntrancez,
    Float:gExitx,
    Float:gExity,
    Float:gExitz,
    hOwner[MAX_PLAYER_NAME],
    hBeschreibung[128],
    gPreis,
    gInt,
    gLock,
    gLevel,
    };
    new GaragenInfo[MaxGarage][GarageInfo] =
    {
    {651.2974,-1513.7551,14.8516,175,1302.519897,-1.787510,1001.028259,"Staat","Große Garage", 250000,18,1,5,
    };
    C:\Users\Daniel\Desktop\irp.pwn(21746) : error 039: constant symbol has no size
    C:\Users\Daniel\Desktop\irp.pwn(21748) : error 028: invalid subscript (not an array or too many subscripts): "GarageInfo"
    C:\Users\Daniel\Desktop\irp.pwn(21748) : warning 215: expression has no effect
    C:\Users\Daniel\Desktop\irp.pwn(21748) : error 001: expected token: ";", but found "]"
    C:\Users\Daniel\Desktop\irp.pwn(21748) : error 029: invalid expression, assumed zero
    C:\Users\Daniel\Desktop\irp.pwn(21748) : fatal error 107: too many error messages on one line



    //edit Errors & Warning eingefügt.

  • GarageInfo[g][gOwned]
    muss
    GaragenInfo[g][gOwned]
    sein.


    Ebenso bei allen anderen Aufrufen dort.


    Auch hier:
    for(new g = 0; g < sizeof(GarageInfo); g++) //Hier
    zu:
    for(new g = 0; g < sizeof(GaragenInfo); g++) //Hier


    Ohne n = dein Enum (kannst du nicht aufrufen!).
    Mit n = Verwenden.


    Nächstes mal vielleicht weniger leicht verwechselbare Bezeichnungen nehmen. ;)

  • Kann man das original Cluckin Bell menü also da wo einem das tablett hingehalten wird auch in einem gemappten cb verwenden? Also gibts da ne Funktion oder kann mir da jemand einen Tipp geben wie ich das selber bastle?

  • Ralf:


    Also mit einer Funktion es hinsetzen geht nicht, da gibt es keine Methode.


    Allerdings kannst du (was jedoch ziemlich aufwändig ist) einen NPC erstellen, den du mit einem der kontrollierbaren NPC-Plugins erstellst. Dann erstellst du einen Checkpoint an dem Tresen und wenn dort jemand reinläuft, wird die Animation des Tablett-gebens abgespielt, und dem NPC ein Tablett an die Hand attached. Dann kannst du mit den SA-MP Menüs ein Menü erstellen, welches die gleichen Teile beinhaltet, wie das Standard-Menü des Cluckin-Bell. Nach Auswahl kannst du den Spieler dann die Essen-Animation abspielen lassen und das Tablett wieder zurückfahren lassen.


    Ob das alles so funktioniert wie beschrieben ist natürlich offen, das müsstest du testen und manche Teile ggf. anpassen.

  • Also gibts da ne Funktion oder kann mir da jemand einen Tipp geben wie ich das selber bastle?


    Also mit einer Funktion es hinsetzen geht nicht, da gibt es keine Methode.


    Doch die gibt es, sie heißt SetPlayerShopName.


    Damit kann man in einzelnen Gebäuden die Bots anzeigen lassen ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • Das funktioniert aber nicht auf selbstgemappten Objekten. Das funktioniert nur, wenn man sich in (z.B.) einen Cluckin-Bell teleportiert, der standardmäßig einen Checkpoint am Tresen hat. Wenn man sich aber dort hineinteleportiert wird (z.T.) der Checkpoint nicht angezeigt. Nutzt man dann die Funktion, dann wird der Checkpoint angezeigt.


    In X-beliebigen selbst-gemappten Objekten geht das aber nicht.