Beiträge von [KoSoVa]



    okay danke.. aber ich habe eine Frage:


    Was bedeutet genau SetPVarint oder GetPVarint?

    Eigentlich ergibt das ganze keinen Sinn so wie du das jetzt machst, du fragst ab ob der Spieler in der Datenbank ist, und dann setzt du die Position.


    Du hast doch sicher eine Variable ob der Spieler eingeloggt ist. Dann brauchst du das ganze Zeug gar nicht.


    Du fragst einfach bei OnPlayerSpawn ab, ob eingeloggt. Wenn ja, setzt du die Position zu x, y, z und wenn nein, dann zu der default Position.



    Eigentlich wollte ich das so machen:


    Spieler kommt online und das System checkt mit Cacche_num... ob der spieler registriert ist bzw. Ob der Spieler eine Datenbank hat, wenn ja soll er an der letzten stelle spawn, wenn nein soll er an den zivispawn spawn. Also checkPlayerspawn richtig odet nicht?


    Hmm , nagut... aber jetzt werde ich trz. am 0 Punkt gespawnt... :



    //OnPlayerSpawn:
    new query[128];
    format(query,sizeof(query),"SELECT p_x='%f', p_y='%f', p_z='%f' FROM user WHERE id='%i'",SpielerInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"CheckPlayerSpawn","i");


    //CheckPlayerSpawn
    public CheckPlayerSpawn(playerid)
    {
    if(cache_num_rows() != 0)
    {
    SetPlayerPos(playerid, SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z]);
    }
    else
    {
    SetPlayerPos(playerid,1386.0745,-1897.0491,13.8029);
    }
    return 1;
    }


    Ist es denn jetzt halbwegs richtig? Wenn nicht , könntest du mir evlt. ein Beispiel und eine genauere Erklärung geben? :)


    okay danke, geht jetzt! :)


    Aber -> warum geht mein Spawnsystem nicht?


    Obwohl in der Datenbank eine andere Posi steht , spawnt er immer an der gleichen stelle:



    //unter OnPlaySpawn...
    if(cache_num_rows() != 0) //ließt ab ob was in der Datenbank steht..
    {
    SetPlayerPos(playerid, SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z]); //Wenn ja soll er an der Posi von der Datenbanks pawn
    }
    else
    {
    SetPlayerPos(playerid,1386.0745,-1897.0491,13.8029);//Wenn nicht soll er hier spawn, aber er spawn hier immer... Warum ?
    }



    habe ich gemacht, aber wenn ich dann an die Objekte fahre, bekomme ich crash.

    @[GeD]Max:
    Benutze doch einen Streamer.
    Limits sind nicht umsonst da.
    http://forum.sa-mp.com/showthread.php?t=102865


    Ja aber da sind ja nur die Objekte bis 800 erhöht oder nicht? Und ich habe über 2300 Obejekte?



    Falls ich den Objekt Streamer bentuzen würde, muss ich dann alles von CreateObjekt in CreateDynamicObject machen?


    //EDIT: Es werden zwar jetzt alle maps geladen , ABER beim autohaus explodieren häuser weil ich da ein 1 Stock noch habe.. und die wände werden nicht vollständig geladen? Was tun


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

    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;
    }

    Hallo Leute!


    Ich habe wiedermal ein Problem >_> ... Und zwar: Seid dem ich und ein Freund von mir ein Nitrado Server gemitet haben, geht das Login/register System nicht mehr richtig... auch auf dem Testserver geht es nicht mehr richtig.


    Hier mein Problem: Wenn der Server Restartet wurde, dann kann sich maximal eine Person sich Regestrieten oder Einloggen. Und andere können es nicht mehr. Und auch wenn der jenige User sich Regestriert hat oder eingeloggt, wird zwar alles ausgelesen und so, aber wenn der Spieler dann reloggt , kann er sich auch nicht mehr Einloggen/Registrieren bzw. die Textdraws werden nicht angezeigt.


    Hier der Warning in der MySQL_Log:

    PHP
    [19:40:54] [WARNING] cache_get_row_count - no active cache
    [19:41:49] [WARNING] cache_get_row_count - no active cache


    Und hier bestimmte stellen aus dem Register/login system:




    //Hier einmal die GANZEN stocks//Publics:
    public OnPlayerRegister(playerid)
    {
    SpielerInfo[playerid][db_id] = cache_insert_id(dbhandle);
    return 1;
    }


    public OnPlayerSkinTextdraw(playerid)
    {
    if(cache_num_rows() != 0) SpielerInfo[playerid][Skin] = cache_get_field_content_int(0,"Skin",dbhandle);
    else SpielerInfo[playerid][Skin] = 0;
    PlayerTextDrawSetPreviewModel(playerid,Textdraw7[playerid], SpielerInfo[playerid][Skin]);
    return 1;
    }


    public OnPlayerDataLoaded2(playerid)
    {
    if(cache_num_rows() != 0)
    {
    SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Dieser Account ist Regestriert! Um hier spielen zu können, musst du dich Einloggen!");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrierung","Herzlichen Willkommen auf Incredible German Reallife!\nBitte gib nun dein Password ein, um auf dem Server Spielen zu können!","Register","Abbrechen");
    return 1;
    }
    }


    public OnPlayerDataLoaded(playerid)
    {
    if(cache_num_rows() == 0)
    {
    SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Dieser Account ist nicht Regestriert! Um hier spielen zu können, musst du dich Regestrieren!");
    return 1;
    }
    else //Falls doch
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login Vorgang","Herzlichen Willkommen zurück auf Incredible German Reallife!\nBitte gib nun dein Password ein!","Login","Abbrechen");
    return 1;
    }
    }


    public OnPasswordResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort richtig
    new aname[MAX_PLAYER_NAME],string[128];
    SpawnPlayer(playerid);
    SpielerInfo[playerid][eingeloggt] = 1;
    SpielerInfo[playerid][Level] = cache_get_field_content_int(0,"Level",dbhandle);//So liest man etwas aus der Datenbank!
    SetPlayerScore(playerid,SpielerInfo[playerid][Level]);
    SpielerInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    SpielerInfo[playerid][Alevel] = cache_get_field_content_int(0,"Alevel",dbhandle);
    SetPlayerMoney(playerid, cache_get_field_content_int(0,"Geldaufhand",dbhandle));
    SpielerInfo[playerid][Skin] = cache_get_field_content_int(0,"Skin",dbhandle);
    SetPlayerSkin(playerid, SpielerInfo[playerid][Skin]);
    SpielerInfo[playerid][Fraktion] = cache_get_field_content_int(0,"Fraktion",dbhandle);
    SpielerInfo[playerid][Kills] = cache_get_field_content_int(0,"Kills",dbhandle);
    SpielerInfo[playerid][Tode] = cache_get_field_content_int(0,"Tode",dbhandle);
    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);

    loadPlayerCars(playerid);

    GetPlayerName(playerid, aname, sizeof(aname));
    if(SpielerInfo[playerid][Alevel] >= 1)
    {
    format(string, sizeof(string), "[A-INFO]{FF9D00} %s {FFFFFF}hat sich erfolgreich als {FF9D00}%s {FFFFFF}eingeloggt!", aname, GetPlayerAdminRank(playerid));
    SendAdminMessage(Rot,string);
    return 1;
    }
    }
    else
    {
    //passwort Falsch
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das war das Falsche Passwort.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    }
    return 1;
    }


    SavePlayer(playerid)
    {
    if(SpielerInfo[playerid][eingeloggt] == 0)return 1;
    new query[128];
    format(query,sizeof(query),"UPDATE user SET Level='%i',Geldaufhand='%i',Fraktion='%i',Kills='%i',Tode='%i',Alevel='%i',Skin='%i',Health='%f' WHERE id='%i'",SpielerInfo[playerid][Level],GetPlayerMoney(playerid),SpielerInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    resetPlayer(playerid)
    {
    for(new i=0; i<sizeof(SpielerInfo[]); i++)
    {
    SpielerInfo[playerid][SpielerDaten:i]=0;
    }
    return 1;
    }


    //Hier mein OnPlayerClickTextDraw:
    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {
    if(_:clickedid != INVALID_TEXT_DRAW) //Sagt das wenn der Player ein falsches TD anklickt nichts passieren soll.
    {
    if(clickedid == Textdraw2) //Textdraw2 = Register
    {
    if(GetPVarInt(playerid,"eingeloggt") == 0)
    {
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s'",name);
    mysql_function_query(dbhandle,query,true,"OnPlayerDataLoaded2","i",playerid);
    }
    }
    else if(clickedid == Textdraw3)
    {
    if(GetPVarInt(playerid,"eingeloggt") == 0)
    {
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s'",name);
    mysql_function_query(dbhandle,query,true,"OnPlayerDataLoaded","i",playerid);
    }
    }
    }
    return 1;
    }


    //und hier die Dialogs:
    if(dialogid==DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);//Fragt ab ob das Passwort richtig ist
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort=MD5('%s')",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    //SpawnPlayer(playerid);

    }
    else
    {
    //keine Eingabe
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    }
    }
    else
    {
    return 1;
    }
    return 1;
    }
    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>=3)
    {
    //Registerfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s',MD5('%s')) ",name,passwort);
    mysql_function_query(dbhandle,query,false,"OnPlayerRegister","i",playerid);
    SpawnPlayer(playerid);
    }
    else
    {
    //Kleiner als 4 Zeichen
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrierung","Das angegebende Passwort war zu kurz! Bitte versuchs nochmal:","Register","Abbrechen");
    }


    }
    else
    {
    return 1;
    }
    return 1;
    }


    und zum Zweiten Problem:
    Wie mache ich dass wenn jetzt ein neuer User sich regestriet hat und an einer Bestimmten Stelle spawn soll(ich habe ein Spawnsystem also wenn man sich ausslogt, soll man da gespawnt werden.) Hier ist mein Code unter OnPlayerSpawn:



    if(cache_num_rows() != 0)
    {
    SetPlayerPos(playerid, SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z]);
    }
    else
    {
    SetPlayerPos(playerid,1386.0745,-1897.0491,13.8029);
    }


    Ich wäre über eure Hilfe sehr verbunden!

    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...

    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;
    }


    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]);

    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,"","");