Beiträge von Jeffry

    Leon_Dachser:
    Das mit dem fehlenden return 1 stimmt nicht ganz.


    Mache es so:


    stock SMessage(playerid,farbe,text[],Float:umkreis)
    {
    new Float:xm, Float:ym, Float:zm;
    if(GetPlayerPos(playerid,xm,ym,zm))
    {
    for(new i=0;i<sizeof(Eingeloggt);i++) //Hier war das Problem, dass "Eingeloggt" als Array gesprengt worden ist.
    {
    if(Eingeloggt[i] == 1 && !IsPlayerNPC(i) && (i==playerid || IsPlayerInRangeOfPoint(i,umkreis,xm,ym,zm)))
    {
    SendClientMessage(i,farbe,text);
    }
    }
    }
    return 0;
    }

    Ahh, dann war es die elende Verbindung. Hoffentlich wird das eplus Netz und das von O2 bald zusammengelegt. X(


    Gibst du es ihm noch irgendwo?


    Ändere mal den Wert von 1000 zu 500. Bekommst du dann 1500 oder 1000?
    Wenn ersteres, dann gibst du dem Spieler noch irgendwo 1000, wenn letzteres, dann hast du vielleicht einen Hook in der GivePlayerMoney Funktion.

    Dann schalte mal den MySQL Debug Modus an und poste was im Log steht wenn du dich anmeldest und wenn du dich registriert hast.


    Hast du den Code mit der Registrierung gerade hinzugefügt oben, oder war der da schon immer? Wenn der da schon immer war dann hat mein Handy Browser den nicht angezeigt. :S

    Das select Query wird immer noch nicht ausgeführt. Wenn du sagst, dass die Funktion aber aufgerufen wird, dann muss eigentlich auch das Query ausgeführt werden. Tut es das nicht, hast du entweder nicht den Code gepostet, den du tatsächlich im Server hast (speicherst du es vielleicht auf einem Backup die ganze Zeit?) oder was anderes ist falsch.


    Hast du zufällig im Compiler eine Meldung mit ganz vielen Zahlen?

    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.

    @lcp9: Dieser Code wird auf keinen Fall funktionieren, wenn du ihn unter einen Timer setzt wirst du entweder unregelmäßige Schübe haben, eine exponentielle Beschleunigung (je nach Aufrufrate), oder wenn du ihn ein mal aufrufst, dann nur einen Schub.

    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.

    Ich glaube du hast mich nicht ganz verstanden. ^^
    Du sollst den Befehl im GameMode mit dem hier ersetzen:


    SetPlayerVirtualWorld(playerid, 7);
    SendClientMessage(playerid, -1, "World 7.");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    printf("World(%d) = %d | %d != %d", i, GetPlayerVirtualWorld(i), i, playerid);
    if(GetPlayerVirtualWorld(i) == 7 && i != playerid)
    {
    printf("Verstecke Marker bei ID %d von ID %d", i, playerid);
    SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    printf("Verstecke Marker bei ID %d von ID %d", playerid, i);
    SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i) & 0xFFFFFF00));
    }
    }
    return 1;


    Da es im leeren GameMode geht muss es auch in dem normalen GameMode gehen. Wenn es geht, liegt es an deinem Befehl, wenn es auch nicht geht, liegt es an etwas außerhalb des Befehls.
    Du spawnst zwar nicht, aber darum geht es ja nicht, sondern erstmal um festzustellen, an was es liegt.

    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.

    Deshalb ging meine Vermutung zu OnPlayerUpdate hin.
    Du kannst ja mal versuchen deinen Befehl im GameMode auf den im leeren GameMode zu reduzieren (Befehl im GameMode = /bf aus leerem GameMode), klappt es dann? Klar, du wirst nicht mehr gespawnt, aber wenn es dann klappt, wenn ihr euch zwar sehen könnt, aber nicht mehr auf dem Radar seid, dann liegt es an etwas im Befehl. Seht ihr euch auf dem Radar trotzdem noch, dann liegt es an etwas außerhalb des Befehls.

    public OnPlayerText(playerid,text[])
    {
    print("OnPlayerText gestartet");
    new string[256];
    print("1");
    if(SpielerInfo[playerid][Istreport]!=0)
    {
    print("2");
    format(string,256,""Desing"[Report]:{FFFFFF} (%d)%s sagt: %s",playerid,GetName(playerid),text),SendClientMessage(SpielerInfo[playerid][Istreport],WHITE,string);
    SendClientMessage(playerid,WHITE,string);
    return 0;
    }
    print("3");
    if(Eingeloggt[playerid]==0)return 1;
    print("4");
    if(SpielerInfo[playerid][Mute]!=-1)
    {
    print("5");
    SendClientMessage(playerid,RED,"Du bist gemutet!");
    return 0;
    }
    print("6");
    if(CheckBadWords(playerid,text) == 1)
    {
    print("7");
    return 0;
    }
    print("8");
    SetPVarInt(playerid,"TextSpamCount",GetPVarInt(playerid,"TextSpamCount")+1);
    print("9");
    if(GetPVarInt(playerid,"TextSpamCount")==5 && SpielerInfo[playerid][Mute]==-1 && !IsPlayerNPC(playerid))
    {
    print("10");
    format(string,256,"System: (%d)%s wurde 2 Minuten vom System gemutet. Grund: Spam",playerid,GetName(playerid));
    SendClientMessageToAll(RED,string);
    SpielerInfo[playerid][Mute]=2;
    SetPVarInt(playerid,"TextSpamCount",0);
    return 0;
    }

    print("11");
    format(string,256,"(%d)%s sagt: %s",playerid,GetName(playerid),text);
    print("12");
    SMessage(playerid,WHITE,string,20);
    print("13");
    SetPlayerChatBubble(playerid,text,0xFF0000FF,25,10000);


    print("14");
    if(anty(text))
    {
    print("15");
    format(string,256,"( Verdacht auf Abwerben (Normaler Chat):(%d)%s sagt: %s )",playerid,GetName(playerid),text);
    SendAdminMessage(RED,string);
    }
    print("OnPlayerText ausgefürhrt.");
    return 0;
    }


    Das nennt sich Debugging.
    Lass es mal so laufen. Dann poste was im Server Log steht, und poste, was du eingegeben hast.
    Beschreibe dann, was eigentlich passieren sollte.

    public OnFilterScriptInit()
    {
    print("OnFilterScriptInit aufgerufen");
    LoadGZ();
    print("LoadGZ ausgeführt");
    M_Init();
    GFPunkte_o = TextDrawCreate(19, 326, "Punkte (Owner): ");
    TextDrawFont(GFPunkte_o , 3);
    TextDrawLetterSize(GFPunkte_o , 0.3, 2.1);
    TextDrawColor(GFPunkte_o , Blau);
    TextDrawSetOutline(GFPunkte_o , 0);
    TextDrawSetProportional(GFPunkte_o , 1);
    TextDrawSetShadow(GFPunkte_o , 1);
    GFPunkte_a = TextDrawCreate(19, 346, "Punkte (angreifer): ");
    TextDrawFont(GFPunkte_a , 3);
    TextDrawLetterSize(GFPunkte_a , 0.3, 2.1);
    TextDrawColor(GFPunkte_a , Rot);
    TextDrawSetOutline(GFPunkte_a , 0);
    TextDrawSetProportional(GFPunkte_a , 1);
    TextDrawSetShadow(GFPunkte_a , 1);
    GFZeit = TextDrawCreate(19, 306, "Zeit: ");
    TextDrawFont(GFZeit , 3);
    TextDrawLetterSize(GFZeit , 0.3, 2.1);
    TextDrawColor(GFZeit , HGruen);
    TextDrawSetOutline(GFZeit , 0);
    TextDrawSetProportional(GFZeit , 1);
    TextDrawSetShadow(GFZeit , 1);
    for(new i = 0; i<MAX_FRAKTIONEN; i++)ImGF[i] = 0;
    return 1;
    }


    Jetzt sollten die beiden prints kommen und die GangZones geladen werden.

    Dann hast du entweder einen Timer irgendwo in deinem Code laufen, der den Spieler wieder sichtbar setzt, oder du setzt ihn direkt beim betreten der Welt 7 wieder sichtbar.
    Nutzt du die SetPlayerMarkerForPlayer Funktion irgendwo im Code (checke auch die Filterscripts)?

    Nein, das würde ja nur eine GangZone laden.
    Schau mal ob die Funktion LoadGZ(); überhaupt aufgerufen wird. Wenn das nicht der Fall ist, dann solltest du dein OnFilterScriptInit überprüfen.


    Setze dazu einen Print als erste Zeile in LoadGZ();, kommt der Print im Server Log, dann wird die Funktion aufgerufen, wenn nicht dann nicht.

    public OnPlayerText(playerid,text[])
    {
    new string[256];
    if(SpielerInfo[playerid][Istreport]!=0)
    {
    format(string,256,""Desing"[Report]:{FFFFFF} (%d)%s sagt: %s",playerid,GetName(playerid),text),SendClientMessage(SpielerInfo[playerid][Istreport],WHITE,string);
    SendClientMessage(playerid,WHITE,string);
    return 0;
    }
    if(Eingeloggt[playerid]==0)return 1;
    if(SpielerInfo[playerid][Mute]!=-1)
    {
    SendClientMessage(playerid,RED,"Du bist gemutet!");
    return 0;
    }
    if(CheckBadWords(playerid,text) == 1)
    {
    return 0;
    }
    SetPVarInt(playerid,"TextSpamCount",GetPVarInt(playerid,"TextSpamCount")+1);
    if(GetPVarInt(playerid,"TextSpamCount")==5 && SpielerInfo[playerid][Mute]==-1 && !IsPlayerNPC(playerid))
    {
    format(string,256,"System: (%d)%s wurde 2 Minuten vom System gemutet. Grund: Spam",playerid,GetName(playerid));
    SendClientMessageToAll(RED,string);
    SpielerInfo[playerid][Mute]=2;
    SetPVarInt(playerid,"TextSpamCount",0);
    return 0;
    }

    format(string,256,"(%d)%s sagt: %s",playerid,GetName(playerid),text);
    SMessage(playerid,WHITE,string,20);
    SetPlayerChatBubble(playerid,text,0xFF0000FF,25,10000);


    if(anty(text))
    {
    format(string,256,"( Verdacht auf Abwerben (Normaler Chat):(%d)%s sagt: %s )",playerid,GetName(playerid),text);
    SendAdminMessage(RED,string);
    }
    return 0;
    }


    Wie sieht es so aus?