[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
  • Hay, warum wird die letzte posi nicht in meine Datenbank eingetragen?



    new query[256],Float:x,Float:y,Float:z;
    GetPlayerPos(playerid, x,y,z);
    format(query,sizeof(query),"UPDATE user SET p_x='%f',p_y='%f',p_z='%f' WHERE id='%i'",SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z],SpielerInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");

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

  • format(query,sizeof(query),"UPDATE user SET p_x='%f',p_y='%f',p_z='%f' WHERE id='%i'",x, y, z ,SpielerInfo[playerid][db_id]);


    danke,
    aber jetzt wird der Spieler nicht mehr an der letzten Posi gespawnt?



    SpielerInfo[playerid][p_x] = cache_get_field_content_float(0,"p_x",dbhandle);
    SpielerInfo[playerid][p_y] = cache_get_field_content_float(0,"p_y",dbhandle);
    SpielerInfo[playerid][p_z] = cache_get_field_content_float(0,"p_z",dbhandle);
    SetPlayerPos(playerid, SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z]);

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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • alles klar danke es geht nun, aber


    jetzt kommen wir zu den Tank system.. BUG: Der Motor geht nicht mehr richtig an, immer wenn ich numpade 4 drücke(Motor an/aus) wird immer bei den Prozents -1 hinzugefügt. hier der Code:



    //unter public OnPlayerStateChange(playerid, newstate, oldstate)
    new vModel=GetVehicleModel(vID);
    for(new i=0; i<sizeof(autosOhneMotor); i++)
    {
    if(autosOhneMotor[i]!=vModel)continue;
    //Motor an/ausschalten
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    SetVehicleParamsEx(vID, 1, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    }


    //Mein Timer
    public autotankanzeige(playerid)
    {
    new string[128];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!IsPlayerInAnyVehicle(i))continue;
    new vID = GetPlayerVehicleID(i);
    format(string, sizeof(string), "Tankinhalt: %i%%", tank[vID]);
    PlayerTextDrawSetString(i,Textdraw18[i] ,string);
    }

    tanktimer++;
    if(tanktimer == 1)
    {
    tanktimer = 0;
    //Tanks reduzieren
    for(new i=1; i<sizeof(tank); i++)
    {
    if(!hatAutoMotor(i))continue;
    if(!isMotorOn(i))continue;
    tank[i]--;
    if(tank[i]>0)continue;
    stopMotor(i);
    }
    }
    return 1;
    }


    //Unter OnGameModeInIT
    //Tank system
    for(new i=0; i<sizeof(tank); i++)
    {
    tank[i]=100;
    }


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

  • -1 wird hinzugefügt? Heißt 1 wird abgezogen, oder was?
    Poste bitte den Code mit dem du den Motor startest, wenn es da passiert.


    Wenn nur eins abgezogen wird, kannst du ja auch einfach einen Prozentpunkt für das Fahrzeug hinzufügen, wenn der Motor gestartet wird.

  • t


    hier



    ocmd:motor(playerid,params[])
    {
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return 1;
    new string[128], vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective;
    vID = GetPlayerVehicleID(playerid);
    //Motor an/ausschalten
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    if(tmp_engine == 1)
    {
    tmp_engine = 0;
    format(string, sizeof(string), "Motor: ~r~Aus");
    }
    else
    {
    tmp_engine = 1;
    format(string, sizeof(string), "Motor: ~g~An");
    }
    SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    PlayerTextDrawSetString(playerid,Textdraw15[playerid] ,string);
    return 1;
    }


    //EDIT: Ja es wird immer -1 abgezogen wenn ich Numpade 4 drücke... auch wenn es sogar unter 0 ist wird immer -1 , -2 , -3 und so weiter...

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

    3 Mal editiert, zuletzt von [GeD]Max ()

  • Nein, nicht den Befehl, den Code den du unter "Numpad 4" stehen hast, um den Motor zu starten.
    Wenn du den Befehl eingibst klappt es doch, oder?


    also es geht beides nicht. selbst über Numpade 4 sowohl auch über /motor...


    Hier nochmal eine Erklärung:


    Wenn man in einen Auto einsteigt und dann /motor oder Numepade 4 drückt, wird SOFORT von 100 % auf 0 % der Tankinhalt gerechnet! Und dann wenn ich noch versuche den Motor zu starten wird immer von 0 immer -1 gerechnet . also -1 -2 -3 -4 -5 .....


    Hier nochmal der ganze Code:



    forward autotankanzeige(playerid);
    //OnGameModeInit
    SetTimerEx("autotankanzeige",1,true,"i",playerid);
    //Irgendwo im Skript
    new tanktimer = 0;
    public autotankanzeige(playerid)
    {
    new string[128];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!IsPlayerInAnyVehicle(i))continue;
    new vID = GetPlayerVehicleID(i);
    format(string, sizeof(string), "Tankinhalt: %i%%", tank[vID]);
    PlayerTextDrawSetString(i,Textdraw18[i] ,string);
    }

    tanktimer++;
    if(tanktimer == 1)
    {
    tanktimer = 0;
    //Tanks reduzieren
    for(new i=1; i<sizeof(tank); i++)
    {
    if(!hatAutoMotor(i))continue;
    if(!isMotorOn(i))continue;
    tank[i]--;
    if(tank[i]>0)continue;
    stopMotor(i);
    }
    }
    return 1;
    }


    //unter OnPlayerKeyStateChange
    if(newkeys & KEY_ANALOG_LEFT)
    {
    //Motor AN
    ocmd_motor(playerid, "");
    return 1;
    }
    if(newkeys & KEY_ANALOG_LEFT)
    {
    //Motor AUS
    ocmd_motor(playerid, "");
    return 1;
    }


    //und der Befehl:
    ocmd:motor(playerid,params[])
    {
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return 1;
    new string[128], vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective;
    vID = GetPlayerVehicleID(playerid);
    //Motor an/ausschalten
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    if(tmp_engine == 1)
    {
    tmp_engine = 0;
    format(string, sizeof(string), "Motor: ~r~Aus");
    }
    else
    {
    tmp_engine = 1;
    format(string, sizeof(string), "Motor: ~g~An");
    }
    SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    PlayerTextDrawSetString(playerid,Textdraw15[playerid] ,string);
    return 1;
    }

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


  • danke! Es geht nun, aber wenn ich aufn Motorrad steige, muss ich 3 Sekunden oder so warten , bis überhaupt da eine Zahl angezeigt wird.

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

  • Dann brauchst du 2 Timer.


    Im ersten Timer (Mit zB Intervall 1000) kommt die Anzeige hinein. Vielleicht hast du schon einen für die Geschwindkeit.


    Im zweiten Timer kommt dann der Abzug vom Benzin hinein und den Intervall setzt du so, wie schnell der Tank leer werden soll zB alle 10sekunden -1.


    lg