[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
  • Okay.
    Zeig mir mal die Zeile format(agc, sizeof agc, ...
    und die Funktion GetPoint.


    format(agc, sizeof agc, "Dieses Fahrzeug steht zum Verkauf.\nName: %s\nPreis: %s", Kaufliste[typ][Name], GetPoint(Kaufliste[typ][Preis]));
    stock GetPoint(Betrag)
    {
    new string[20],string2[50];
    format(string, sizeof(string), "%d", Betrag);
    if(strlen(string) <= 3){format(string2, sizeof(string2), "%s", string);}
    else if(strlen(string) == 4)
    {
    new anstring[2],
    zwstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[1]);
    format(string2, sizeof(string2), "%s.%s", anstring,zwstring);
    }
    else if(strlen(string) == 5)
    {
    new anstring[3],
    zwstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[2]);
    format(string2, sizeof(string2), "%s.%s", anstring,zwstring);
    }
    else if(strlen(string) == 6)
    {
    new anstring[4],
    zwstring[5];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[3]);
    format(string2, sizeof(string2), "%s.%s", anstring,zwstring);
    }
    else if(strlen(string) == 7)
    {
    new anstring[2],
    zwstring[4],
    enstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[1]);
    format(enstring, sizeof(enstring), "%s", string[4]);
    format(string2, sizeof(string2), "%s.%s.%s", anstring,zwstring,enstring);
    }
    else if(strlen(string) == 8)
    {
    new anstring[3],
    zwstring[4],
    enstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[2]);
    format(enstring, sizeof(enstring), "%s", string[5]);
    format(string2, sizeof(string2), "%s.%s.%s", anstring,zwstring,enstring);
    }
    else if(strlen(string) == 9)
    {
    new anstring[4],
    zwstring[4],
    enstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring, sizeof(zwstring), "%s", string[3]);
    format(enstring, sizeof(enstring), "%s", string[6]);
    format(string2, sizeof(string2), "%s.%s.%s", anstring,zwstring,enstring);
    }
    else if(strlen(string) == 10)
    {
    new anstring[2],
    zwstring1[4],
    zwstring2[4],
    enstring[4];
    format(anstring, sizeof(anstring), "%s", string);
    format(zwstring1, sizeof(zwstring1), "%s", string[1]);
    format(zwstring2, sizeof(zwstring2), "%s", string[4]);
    format(enstring, sizeof(enstring), "%s", string[7]);
    format(string2, sizeof(string2), "%s.%s.%s.%s", anstring,zwstring1,zwstring2,enstring);
    }
    else {format(string2, sizeof(string2), "%s", string);}
    return string2;
    }

  • Ich habe da ein Problem, undzwar :


    Wenn man sich neu registriert hat bekommt man 25.000$, wenn man nun in ein Interrior geht verdoppelt sich der Betrag.
    Das passiert auch, wenn man ein Relogg macht.


    Ich weis nicht woran das genau liegt, aber kann das der Grund dafür sein ?



    public GivePlayerMoneyEx(playerid,money){
    ACNewMoney[playerid] = ACNewMoney[playerid] + money;
    return GivePlayerMoney(playerid,ACNewMoney[playerid]);
    }


    public SetPlayerMoneyEx(playerid,money){
    ACNewMoney[playerid] = money;
    ResetPlayerMoney(playerid);
    return GivePlayerMoney(playerid,ACNewMoney[playerid]);
    }


    Mfg Saphire

  • Saphire:
    Gehen wir mal die Funktion durch:


    Beispiel:
    ACNewMoney = 5000$
    money = 5000$
    ACNewMoney[playerid] = ACNewMoney[playerid] + money;


    //ACNewMoney[playerid] ist somit nun 10.000$.
    return GivePlayerMoney(playerid,ACNewMoney[playerid]); //Hier erhält er nun ACNewMoney[playerid], was, wie wir festgestellt haben, nun 10.000$ ist und nicht die 5000$, die er erhalten soll.


    Das Geld hat sich somit verdoppelt.
    Du musst dem Spieler nur money geben.

  • Dome_:
    Zeig mal dein Enum für diese Kaufliste Variable.


    enum ahModell
    {
    Name[128],
    Autohaus,
    Modelid,
    Carid,
    Preis,
    Reparatur,
    Float:pos_x,
    Float:pos_y,
    Float:pos_z,
    Float:z_angle,
    };


    new Kaufliste[45][ahModell] =
    {
    /////////////////////////////Intercars//////////////////////////////////
    {"Tampa",0,549,-1,6600,100,766.3573,-1378.6475,13.3541,269.4215}, //intercars
    {"Bobcat",0,422,-1,8600,100,766.2212,-1373.8983,13.5806,269.0165},
    {"Burrito",0,482,-1,12000,640,766.4193,-1368.8649,13.6737,266.4977},
    {"Nebula",0,516,-1,12500,150,766.1318,-1364.1688,13.3903,269.4459},
    {"Phoenix",0,603,-1,13500,250,766.2344,-1359.5094,13.4226,268.1375},
    {"Savanna",0,567,-1,13000,150,783.5147,-1367.2809,13.4088,92.8256},
    {"Slamvan",0,535,-1,30000,300,783.8260,-1356.5822,13.3273,90.1728},
    {"Voodoo",0,412,-1,25500,250,782.9839,-1335.4767,13.4323,88.8266},
    {"Tornado",0,576,-1,15000,175,783.2136,-1377.6055,13.2309,88.6873},
    {"Broadway",0,575,-1,9000,200,783.5681,-1372.7090,13.2070,94.9154},
    {"Balde",0,536,-1,150,15000,783.5160,-1361.8856,13.3241,89.2535},
    {"Remington",0,534,-1,12000,650,783.4966,-1351.3638,13.2953,88.0422},
    {"Buccaneer",0,518,-1,55000,1500,783.2993,-1346.0609,13.2515,79.4080},
    {"Esperanto",0,419,-1,8000,700,783.4002,-1340.4026,13.4123,91.5259},
    {"Hustler",0,545,-1,12500,300,771.0963,-1333.1886,13.2466,179.9259},
    {"Blista",0,496,-1,4500,350,766.1276,-1333.2665,13.2896,179.4678},
    {"Comet",0,480,-1,18000,80,761.2780,-1333.2695,13.3010,176.7838},
    {"Elegy",0,562,-1,20000,80,756.5835,-1333.0814,13.1270,182.4252},
    {"Huntley",0,579,-1,100000,1000,751.5070,-1334.0564,13.5520,182.1816},
    {"Mesa",0,500,-1,8000,250,746.6382,-1333.4875,13.6658,179.9870},
    {"Moonbeam",0,418,-1,15000,245,741.8511,-1333.5743,13.6650,180.3323},//intercars ende 21
    /////////////////////////////////Grottis//////////////////////////////////////
    {"Buffalo",1,402,-1,155000,350,558.8314,-1289.5635,17.0566,359.8489}, //Grottis
    {"Bullet",1,541,-1,180000,450,537.7307,-1289.6569,16.8788,359.9076},
    {"Cheetah",1,415,-1,185000,360,548.5411,-1289.2894,17.0168,6.7969},
    {"Banshee",1,429,-1,23000,150,563.1986,-1289.0668,16.9284,2.2992},
    {"Infernus",1,411,-1,50000,120,553.5667,-1289.6110,16.9802,4.0815},
    {"Turismo",1,451,-1,300000,680,542.7256,-1289.3339,16.9663,3.7311},
    {"Jester",1,559,-1,260000,150,532.2188,-1290.0289,16.9184,8.3362},
    {"Sultan",1,560,-1,27500,100,527.2485,-1290.7981,16.8880,1.5522},//Grottis Ende 8
    //////////////////////////////////2RadShop////////////////////////////////////
    {"Wayfarer",1,586,-1,11000,300,2117.6641,-1135.7371,24.7074,244.4122},
    {"BF-400",1,581,-1,12500,350,2117.6621,-1133.0946,24.7906,263.1818},
    {"NRG-500",1,522,-1,60000,450,2117.3479,-1130.3920,24.7793,255.9238},
    {"BMX",1,481,-1,1500,260,2118.0095,-1127.1219,24.7798,253.3480},
    {"Sanchez",0,468,-1,20000,75,2137.8049,-1139.0826,25.1447,104.7127},
    {"Freeway",0,463,-1,12000,100,2137.4783,-1136.2334,25.2795,105.0719},
    {"FRC-900",2,521,-1,15000,150,2117.8870,-1123.9498,24.8825,269.8976},
    {"PCJ-600",2,461,-1,10000,2002136.4927,-1127.3752,25.1272,102.8394},
    {"Faggio",2,462,-1,500000,200,2137.6379,-1131.5999,25.2480,108.6290},//9
    ////////////////////////////////Flugplatz///////////////////////////////////
    {"Maverick",2,487,-1,650000,200,1888.9150,-2624.0420,13.6997,0.2435},
    {"Dodo",2,593,-1,150000,200,1822.2716,-2625.2224,14.0106,359.9549},
    {"Shamal",2,519,-1,1200000,250,1754.4678,-2625.8228,14.4726,354.9949},//3
    ///////////////////////////////Gold/Traktoren/////////////////////////////
    {"Flatbed",4,455,-1,150000,250,-589.8594,-1078.3411,23.1886,241.0025},
    {"Willard",4,529,-1,25000,250,585.7016,-1072.6453,22.9929,235.4666},
    {"Traktore",4,531,-1,50000,150,-582.1254,-1066.7961,23.3816,235.8263},
    {"DFT-300",4,578,-1,120000,300,-563.4022,-1039.2424,24.7588,237.1086}//4
    };

  • return ShowPlayerDialog(playerid,Crap,DIALOG_STYLE_LIST,"Test",""Rot_"Crap","Auswählen","Abbrechen");


    //'Rot_' ist so definiert:
    #define Rot_ {FF0000}
    Wie kann ich Dialoge farbig machen?
    Wie ich es oben gepostet habe, geht es leider nicht ;)


    Kann man das überhaupt mit einer definition machen, oder muss man es immer so nutzen: '{FARBCODE}'?

  • Kann mir da echt keiner helfen ? :D

  • Hab einen kleinen Fehler im Chat wenn ich diesen Command benutze:


    CMD:kick( playerid, params[])
    {
    new string[144], pID;
    if(GetPVarInt(playerid,"Level")<2) return SendClientMessage(playerid, -1, "Du musst ein "COLOR_BLUE"Administrator Level 2 {FFFFFF}sein, um diese Funktion nutzen zu können.");
    if(sscanf( params, "us[64]", pID, string)) return SendClientMessage(playerid, -1, ""COLOR_GREY"Verwendung: /kick <Name/ID> <Grund>");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, -1, ""COLOR_GREY"Dieser Spieler ist nicht online.");


    format(string, sizeof string, "%s ( %s | ID: %i ) hat %s ( %s | ID: %i ) gekickt, Grund: %s",pName(playerid),GetPlayerLevelName(playerid),playerid,pName(pID),GetPlayerLevelName(pID),pID,string);
    SendClientMessageToAll(-1, string);
    SetTimerEx("KickPlayer", 1000, false, "i", pID);
    return 1;
    }
    Variablen schreibt übrigens jeder Programmierer am Anfang klein.


    Und nutzt doch bitte http://www.tinypic.com und nicht diese beknackte pic-upload Seite, die voll mit Werbung ist. :thumbup:

  • Aber nun kommt inGame immer die Zeile "Verwendung: [ ... ]" und es passiert sonst nichts :huh:


    Nicht sscanf nutzen, das ist Müll. Meine Meinung.


    CMD:kick( playerid, params[])
    {
    new string[144], pID, tmp[256], tmp2[256], idx;
    tmp = strtok(params, idx); tmp2 = strtok(params, idx);
    if(!strlen(tmp2)) return SendClientMessage(playerid, -1, ""COLOR_GREY"Verwendung: /kick <Name/ID> <Grund>");
    if(GetPVarInt(playerid,"Level")<2) return SendClientMessage(playerid, -1, "Du musst ein "COLOR_BLUE"Administrator Level 2 {FFFFFF}sein, um diese Funktion nutzen zu können.");
    if(!IsNumeric(tmp)) pID = ReturnPlayerID(tmp);
    else pID = strval(tmp);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, -1, ""COLOR_GREY"Dieser Spieler ist nicht online.");


    format(string, sizeof string, "%s ( %s | ID: %i ) hat %s ( %s | ID: %i ) gekickt, Grund: %s",pName(playerid),GetPlayerLevelName(playerid),playerid,pName(pID),GetPlayerLevelName(pID),pID,params[strlen(tmp)+1]);
    SendClientMessageToAll(-1, string);
    SetTimerEx("KickPlayer", 1000, false, "i", pID);
    return 1;
    }
    strtok und solche Funktionen können viel flexibler eingesetzt werden und ich hatte damit noch nie unerklärliche Probleme.


    Falls dir die Funktionen fehlen:

    Spoiler anzeigen
    //Aus der dutils.inc
    stock strtok(const string[], &index,seperator=' ')
    {
    new length = strlen(string);
    new offset = index;
    new result[256];
    while ((index < length) && (string[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }

    Spoiler anzeigen
    result[index - offset] = EOS;
    if ((index < length) && (string[index] == seperator))
    {
    index++;
    }
    return result;
    }

    Spoiler anzeigen
    stock ReturnPlayerID(PlayerName[]) //©Jeffry
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(!strcmp(pName(i),PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(strfind(pName(i),PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }

    Spoiler anzeigen
    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }

  • Hey,
    habe eine Animation gemacht, wo der Spieler nachlädt, um die Nachladezeit ein wenig zu erhöhen.
    Jedoch, wenn ich jetzt z.B. nach vorne gehe, und dann nachladen muss, dann geht der Spieler wegen der Animation automatisch weiter.
    Kann man das irgendwie ändern, dass der Spieler dann normal stehen bleibt, wenn er sich gerade bewegt und er nachladen muss?


    Hier noch mal in nem Video:

    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.

  • Wo liegt in diesen Zeilen:


    new string[50];
    SetPVarInt(playerid,"Bankkonto",GetPVarInt(playerid,"Bankkonto",=+geld)); //errorzeile
    format(string,sizeof(string),"Bankangestellte: Die %s$ wurden erfolgreich auf ihr Konto gebucht.",geld);
    SendClientMessage(playerid,COLOR_BLAU,string);
    return 1;


    dieser error:


    Zitat

    error 029: invalid expression, assumed zero


    Bin gerade zu doof den Fehler zu finden :(

  • new string[50];
    SetPVarInt(playerid,"Bankkonto",GetPVarInt(playerid,"Bankkonto")+geld);
    return format(string,50,"Bankangestelle: Die %s€ wurden erfolgreich auf ihr Konto gebucht!",geld),SendClientMessage(playerid,COLOR_BLAU,string);


    So müsste es funktionieren.

  • new string[50];
    SetPVarInt(playerid,"Bankkonto",GetPVarInt(playerid,"Bankkonto")+geld);
    return format(string,50,"Bankangestelle: Die %s€ wurden erfolgreich auf ihr Konto gebucht!",geld),SendClientMessage(playerid,COLOR_BLAU,string);


    1. 50 Zeichen werden da nicht reichen
    2. Geld ist kein String
    new string[80];
    SetPVarInt(playerid,"Bankkonto",GetPVarInt(playerid,"Bankkonto")+geld);
    return format(string,50,"Bankangestelle: Die %d€ wurden erfolgreich auf ihr Konto gebucht!",geld),SendClientMessage(playerid,COLOR_BLAU,string);

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen