[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

  • Zeig mal wo & wie du es speicherst..


    Was genau meinst du mit wo? Ich speicher es mit DINI im Scriptfiles ordner,

    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Level",Spieler[playerid][Level]);
    dini_IntSet(Spielerdatei,"Tode",Spieler[playerid][Tode]);
    dini_IntSet(Spielerdatei,"Morde",Spieler[playerid][Morde]);
    dini_IntSet(Spielerdatei,"Schein",Spieler[playerid][Schein]);

  • @[GsL]Giulio: Du verwendest ein "enum" für den Spieler und gleichzeitig "PVars" ? ..
    Entscheide dich für eins..
    Falls du nicht PVars benutzen willst, muss der Schein so gegeben werden:

    Spieler[playerid][Schein] = 1;


    Falls du aber PVars benutzen willst, musst du es so speichern:
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Level",GetPVarInt(playerid,"Level"));
    dini_IntSet(Spielerdatei,"Tode",GetPVarInt(playerid,"Tode"));
    dini_IntSet(Spielerdatei,"Morde",GetPVarInt(playerid,"Morde"));
    dini_IntSet(Spielerdatei,"Schein",GetPVarInt(playerid,"Schein"));

  • //Edit: Und wo soll ich die Objekte ertfernen lassen? ( damit das Game nicht crasht oder aufhängt )


    1. Welche Objekte ?


    2. Kannst du das nochmal genau erläutern was du machen möchtest. Die Daten in den files rausfiltern. SQLite ist auch eine Möglichkeit.


    3. Ich meinte das nicht so
    GetVehicleVelocity gibt die Bewegungsgeschwindigkeit in X-Richtung , Y-RIchtung und Z-Richtung an.


    Wenn der Spieler den Berg runterfährt haben wir bei der Z-RIchtung einen negativen Wert. Damit kannst du detecten ob der Spielern den Berg runterfährt.
    MapAndreas habe ich dir nur empfohlen um die Geschwindigkeit nicht so extrem zu erhöhen, falls das Fahrzeug schanzen sollte. Das ist jedoch deine Sache ob du das möchtest oder nicht, jedoch wird ja dein Fahrzeug gedrosselt daher sollte das nicht das Problem sein.

  • 1. Welche Objekte ?


    Generell Objekte, die ich erstellt habe..



    2. Kannst du das nochmal genau erläutern was du machen möchtest. Die Daten in den files rausfiltern. SQLite ist auch eine Möglichkeit.


    Ich möchte damit aus den Spielerdateien Informationen heraussuchen, damit das auch mit Offline-Spielern geht.. Möchte es gerne ohne SQLite oder MySQL machen..
    Beispiel aus MySQL:

    mysql_format(mycon, query, sizeof(query), "SELECT COUNT(*) AS `count` FROM `User` WHERE `Name` = '%e' AND `Passwort` = '%e'",User[playerid][Username],inputtext);

    Sowas ähnliches möchte ich damit machen.. Ist das möglich, und wenn ja, wie soll ich weiter vorgehen?



    Zum 3. Punkt: Aber wieso klappt denn meine Funktion nicht?
    Das mit der Geschwindigkeit usw ( das die zu hoch ist ), das werde ich dann später alles noch ändern..

  • @ErikSon



    1. Mir fehlt der Zusammenhang, klar wenn du Objekte löschen möchtest kannst du DestroyObject nutzen oder beim streamer Plugin DestroyDynamicObject oder
    alle im umkreis des Spielers Streamer_DestroyAllVisibleItems(playerid, type, serverwide = 1) oder auf dme Server Streamer_DestroyAllItems(type, serverwide = 1).
    Bei bestimmten Objekten brauchst du die Objectid, welche du temporär zwischenspeichern musst in einer variable jedoch glaub ich nicht das dich diese Antwort weiter gebracht hat.


    2. Ja es ist schon möglich, du hast den richtigen Ansatz


    stock Where(func[]){
    new dir:dHandle = dir_open("./scriptfiles/Accounts/");
    new item[40], type, datei[20], readstr[200],count;
    while(dir_list(dHandle, item, type))
    {
    if(type == FM_FILE)
    {
    format(datei,20,"/Accounts/%s",item);
    new File:file = f_open(datei);
    while(f_read(file, readstr){
    if(strfind(func,readstr,false) != -1) ++count;
    }
    }
    }
    dir_close(dHandle);
    return count;
    }


    damit könntest du das ganze zählen lassen, falls du die Ergebnisse möchtest konntest du die in einem extra verzeichniss zwischenspeichern und nur die id zurückgeben
    von dem file worüber man dieses nochmal extra auslesen muss, oder mann nutzt ein dynamisches Array.


    3. Woher soll ich wissen ob der Code richtig ist, ich würde es generel nicht so machen aber nun gut, ich gebe dir nur lösungsvorschläge was du daraus machst ist deine Sache ^^-

  • Wie mache ich bei z.B. einem Tutorial eine "Wartezeit"?
    So dass die Kamera halt 7 Sekunden z.B. die Stadthalle anguckt.
    Ist bestimmt ganz simple, komme aber nicht drauf.


    Das Tutorial:
    stock Tutorial(playerid)
    {
    ClearChatForPlayer(playerid);
    TFreeze(playerid);
    SetTimerEx("TStadthalle",7500,false,"i",playerid);
    SetTimerEx("TBank",7500,false,"i",playerid);
    SetTimerEx("THospital",7500,false,"i",playerid);
    SetTimerEx("TVinewood",7500,false,"i",playerid);
    SetTimerEx("TAngelsteg",7500,false,"i",playerid);
    ClearChatForPlayer(playerid);
    SpawnPlayerEx(playerid);
    return 1;
    }


    Eine Funktion davon:
    forward TStadthalle(playerid);
    public TStadthalle(playerid)
    {
    SetPlayerCameraPos(playerid, 1481.6932,-1639.0188,68.3361);
    SetPlayerCameraLookAt(playerid, 1481.2965,-1772.2197,18.9270);
    SendClientMessage(playerid,Gelb," ..::Stadthalle::.. ");
    SendClientMessage(playerid,Weiß,"Dies ist die Stadthalle von **.");
    SendClientMessage(playerid,Weiß,"Hier kannst du dir einen Personalausweiß beantragen und einen Job anzunehmen oder zu kündigen.");
    SendClientMessage(playerid,Gelb," ..::::::::::::::.. ");
    ClearLines(playerid,50);
    return 1;
    }

  • Auf Anfrage in PN:


    Wenn ich dich richtig verstanden habe, dann meinst du es so?


    stock Tutorial(playerid)
    {
    ClearChatForPlayer(playerid);
    TFreeze(playerid);
    TStadthalle(playerid);
    SetTimerEx("TBank",7500,false,"i",playerid);
    SetTimerEx("THospital",15000,false,"i",playerid);
    SetTimerEx("TVinewood",22500,false,"i",playerid);
    SetTimerEx("TAngelsteg",30000,false,"i",playerid);
    ClearChatForPlayer(playerid);
    SpawnPlayerEx(playerid);
    return 1;
    }


    Alternativ könntest du auch bei jedem public den nächsten Timer für 7500ms starten, das bleibt dir überlassen.

  • Hm, klappt nicht. Bei mir switched es einfach durch ohne zu warten.


    stock Tutorial(playerid)
    {
    ClearChatForPlayer(playerid);
    TFreeze(playerid);
    TStadthalle(playerid);
    SetTimerEx("TBank",7500,false,"i",playerid);
    SetTimerEx("THospital",15000,false,"i",playerid);
    SetTimerEx("TVinewood",22500,false,"i",playerid);
    SetTimerEx("TAngelsteg",30000,false,"i",playerid);
    ClearChatForPlayer(playerid);
    SpawnPlayerEx(playerid);
    return 1;
    }


    forward TStadthalle(playerid);
    public TStadthalle(playerid)
    {
    SetPlayerCameraPos(playerid, 1481.6932,-1639.0188,68.3361);
    SetPlayerCameraLookAt(playerid, 1481.2965,-1772.2197,18.9270);
    SendClientMessage(playerid,Gelb," ..::Stadthalle::.. ");
    SendClientMessage(playerid,Weiß,"Dies ist die Stadthalle von **.");
    SendClientMessage(playerid,Weiß,"Hier kannst du dir einen Personalausweiß beantragen und einen Job anzunehmen oder zu kündigen.");
    SendClientMessage(playerid,Gelb," ..::::::::::::::.. ");
    ClearLines(playerid,50);
    return 1;
    }


    forward THospital(playerid);
    public THospital(playerid)
    {
    SetPlayerCameraPos(playerid, 1223.9183,-1321.6509,26.4473);
    SetPlayerCameraLookAt(playerid,1172.5776,-1323.3997,15.4187);
    SendClientMessage(playerid,Gelb," ..::Krankenhaus::.. ");
    SendClientMessage(playerid,Weiß,"Dies ist das Krankenhaus.");
    SendClientMessage(playerid,Weiß,"Du kommst nur in das Krankenhaus wenn du einen tragischen Unfall hattest und dringend in die Notaufnahme musstest.");
    SendClientMessage(playerid,Weiß,"Bist du im Krankenhaus angekommen musst du dich für 3Minuten ausruhen, danach kannst du wieder weiter spielen.");
    SendClientMessage(playerid,Gelb," ..:::::::::::::::.. ");
    ClearLines(playerid,50);
    return 1;
    }

  • Warum bekomme ich diese Errors ?

    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : error 012: invalid function call, not a valid address
    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : warning 215: expression has no effect
    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : error 001: expected token: ";", but found ")"
    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : error 029: invalid expression, assumed zero
    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : fatal error 107: too many error messages on one line


    Die Zeile von den Errors :



    return SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Driveby!", name(killerid)),Kicks(killerid);

  • Findet einer den Fehler?



    public OnPlayerText(playerid, text[]) //Wenn der Spieler eine Nachricht sendet, wird dieser Public aufgerufen ;)
    {
    for(new i = 0; i < MAX_PLAYERS; i++){
    if(IsPlayerConnected(i)) {
    new Float:X, Float:Y, Float:Z, n[MAX_PLAYER_NAME], str[128];
    GetPlayerName(playerid, n, sizeof(n));
    GetPlayerPos(playerid, X, Y, Z);
    format(str, sizeof(str), "%s sagt: %s", n, text);
    if(IsPlayerInRangeOfPoint(i, 20.0, X, Y, Z)) {
    SendClientMessage(i, 0xFFFFFFFF, str);
    }
    }
    }
    return 0;
    }


    Es kommt nichts in den Chat, ich bekomme aber auch keine Error

  • Jeffry


    Immer noch Errors :

    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : error 012: invalid function call, not a valid address
    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : warning 215: expression has no effect
    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : error 001: expected token: ";", but found ")"
    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : error 029: invalid expression, assumed zero
    C:\Users\AhmedOso\Desktop\Aimen Sachen vom PC\Server\gamemodes\MOR.pwn(6286) : fatal error 107: too many error messages on one line



    so schaut das alles aus :

    if(GetPlayerState(killerid) == PLAYER_STATE_DRIVER)
    {
    new vehicleid,vehiclemodel;
    vehicleid = GetPlayerVehicleID(killerid);
    vehiclemodel = GetVehicleModel(vehicleid);
    if(IsPlayerInAnyVehicle(playerid)) { return true; }
    if(vehiclemodel == 425) { return true; } // Hunter
    if(vehiclemodel == 432) { return true; } // Rhino
    if(vehiclemodel == 447) { return true; } // Seasparrow
    if(vehiclemodel == 476) { return true; } // Rustler
    if(vehiclemodel == 520) { return true; } // Hydra
    return SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Driveby!", name(killerid),Kicks(killerid));
    }

  • #e
    Hier hast du noch ein Fehler, du hast nur ein "%s" aber nutzt laut Komma zwei.
    return SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Driveby!", name(killerid),Kicks(killerid));//Kicks(killerid) währe falsch

  • Einmal so :



    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));


    und einmal :

    stock Kicks(playerid)return SetTimerEx("Kicke",50,false,"i",playerid);


    Ich gehe stark davon aus das es nicht an der Zeile liegt, denn nur dort bekomm ich den Error.


    Schau hier mal (Das ist auch im Script) :

    if(GetPlayerInterior(playerid) == 0)return SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Tuning-Hack!",NAME(playerid)),Kicks(playerid);


    Bei der Zeile bekomm ich keine Errors.


    Mfg Saphire


    Jeffry



  • Problem besteht immer noch


    //Edit:


    Und wenn ich


    GivePlayerMoney(playerid, 10000);
    benutzen will, sagt er mir, dass es zu wenig / viele Argumente sind

    Einmal editiert, zuletzt von datgame ()

  • Hm, klappt nicht. Bei mir switched es einfach durch ohne zu warten.


    In diesem Fall, vielleicht hilft dir dieses Makro: [ MAKRO ] Sleep Funktion


    Es kommt nichts in den Chat, ich bekomme aber auch keine Error


    Schreib das mal so:


    public OnPlayerText(playerid, text[])
    {
    new Float:p[3],n[MAX_PLAYER_NAME],str[144];
    GetPlayerName(playerid, n, sizeof(n)),GetPlayerPos(playerid, p[0], p[1], p[2]);
    format(str, sizeof(str), "%s sagt: %s", n, text);
    for(new i; i < MAX_PLAYERS; i++){
    if(!IsPlayerConnected(i) || !IsPlayerInRangeOfPoint(i, 25.0, p[0], p[1], p[2])) continue;
    SendClientMessage(i, 0xFFFFFFFF, str);
    }
    return 0;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

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