[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
  • @[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

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

    Einmal editiert, zuletzt von [GeD]Max ()



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

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


  • 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 ?
    }

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

  • Weil du auch hier (das sage ich dir jetzt schon zum dritten mal) das Setzen der Position über ein Callback machen musst, wie du es beim Login und bei dem ganzen anderen Zeug auch machst.


    OnPlayerSpawn:
    mysql_function_query... "CheckPlayerSpawn" ...


    Und dann als public:
    public CheckPlayerSpawn(playerid)
    {
    //hier die Position setzen.
    }



    Das ist immer das gleiche Prinzip. mysql_function_query => in ein public springen => Code dort ausführen, weil erst dort der Cache zur Verfügung steht.
    Du hast sonst die Meldung im Log, dass kein aktiver Cache vorhanden ist.


  • 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? :)

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

  • 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 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?

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

  • Wenn du das so machen willst, dann brauchst du keine Datenbankabfrage, weil du das ja schon beim Login erledigt hast. Dann kannst du es einfach so machen:
    if(SpielerInfo[playerid][Eingeloggt] == 1)
    {
    SetPlayerPos(playerid, SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z]);
    }
    else
    {
    SetPlayerPos(playerid,1386.0745,-1897.0491,13.8029);
    }


    Das spart dir die Abfrage, und somit auch Ressourcen.



  • okay danke.. aber ich habe eine Frage:


    Was bedeutet genau SetPVarint oder GetPVarint?

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

  • Mit SetPVarInt kannst du dem Spieler einen Integer setzten. GetPVarInt dient dazu, einen Integer abzufragen. ;)


    Alles klar danke dir... Jetzt möchte ich gern ein RegisterDatum in die Datenbank eintragen, jedoch wie macht man dass genau ? Könnt ihr mich ein Beispiel geben ? (ich weiß dass es irgendwas mit getdata zutuen hat)

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

  • Das ganze realisierst du mit SetPVarString. http://wiki.sa-mp.com/wiki/SetPVarString


    Hmm, okay, aber kann ich auch mit SpielerInfo[playerid][eingeloggt] abfragen ob der jenige Spieler schon einen Account hat?


    //EDIT 2: Warum geht mein /o chat nicht ? Also obwohl der O-CHAT Aktiviert ist , können keine spieler drin schreiben.



    ocmd:o(playerid,params[])
    {
    if(SpielerInfo[playerid][ochatstatus] == 1)
    {
    new name[MAX_PLAYER_NAME],string[144];
    GetPlayerName(playerid,name,sizeof(name));
    if(!params[0]) return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /o [Text]");
    format(string,sizeof(string),"[O-CHAT] %s %s: %s ",GetPlayerAdminRankName(playerid),name ,params);
    SendClientMessageToAll(ochatfarbe, string);
    }
    else if(SpielerInfo[playerid][ochatstatus] == 0)
    {
    if(SpielerInfo[playerid][Alevel] >= 1)
    {
    new name[MAX_PLAYER_NAME],string[144];
    GetPlayerName(playerid,name,sizeof(name));
    if(!params[0]) return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /o [Text]");
    format(string,sizeof(string),"[O-CHAT] %s %s: %s ",GetPlayerAdminRankName(playerid),name ,params);
    SendClientMessageToAll(ochatfarbe, string);
    }
    }
    return 1;
    }


    ocmd:ochat(playerid,params[])
    {
    if(SpielerInfo[playerid][ochatstatus] == 1)
    {
    new string[256],aname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,aname,sizeof(aname));
    format(string,sizeof(string),"[O-CHAT] {FFFFFF}%s %s hat den O-Chat deaktiviert!",GetPlayerAdminRankName(playerid),aname);
    SendClientMessageToAll(Rot,string);
    SpielerInfo[playerid][ochatstatus] = 0;


    }
    else if(SpielerInfo[playerid][ochatstatus] == 0)
    {
    new string[256],aname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,aname,sizeof(aname));
    format(string,sizeof(string),"[O-CHAT] {FFFFFF}%s %s hat den O-Chat Aktiviert!",GetPlayerAdminRankName(playerid),aname);
    SendClientMessageToAll(Rot,string);
    SpielerInfo[playerid][ochatstatus] = 1;
    }
    return 1;
    }

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

    Einmal editiert, zuletzt von [GeD]Max ()

  • @[GeD]Max:
    Schreib das ganze mal so:
    new bool:ochatstatus;//Oben Global, und aus dem Spieler-Enum "ochatstatus" entfernen!


    ocmd:ochat(playerid,params[])
    {
    new string[144],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    if(ochatstatus == true)
    {
    format(string,sizeof string,"[O-CHAT] {FFFFFF}%s %s hat den O-Chat deaktiviert!",GetPlayerAdminRankName(playerid),name);
    ochatstatus = false;
    SendClientMessageToAll(ochatfarbe,string);
    return 1;
    }
    else
    {
    format(string,sizeof string,"[O-CHAT] {FFFFFF}%s %s hat den O-Chat Aktiviert!",GetPlayerAdminRankName(playerid),name);
    ochatstatus = true;
    SendClientMessageToAll(ochatfarbe,string);
    }
    return 1;
    }


    ocmd:o(playerid,params[])
    {
    if(ochatstatus == true)
    {
    new name[MAX_PLAYER_NAME],string[144];
    GetPlayerName(playerid,name,sizeof(name));
    if(!params[0]) return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /o [Text]");
    format(string,sizeof(string),"[O-CHAT] %s %s: %s ",GetPlayerAdminRankName(playerid),name ,params);
    SendClientMessageToAll(ochatfarbe, string);
    }
    else if(ochatstatus == false)
    {
    if(SpielerInfo[playerid][Alevel] >= 1)
    {
    new name[MAX_PLAYER_NAME],string[144];
    GetPlayerName(playerid,name,sizeof(name));
    if(!params[0]) return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /o [Text]");
    format(string,sizeof(string),"[O-CHAT] %s %s: %s ",GetPlayerAdminRankName(playerid),name ,params);
    SendClientMessageToAll(ochatfarbe, string);
    }
    }
    return 1;
    }
    Du hast die Variable immer für den Spieler umgestellt, der den O-Chat auch aktiviert bzw. deaktiviert hat. :)