Beiträge von robbi2304

    Hallo liebe Leute,


    ich suche heute jemanden der mir ein PayDay System Scripten kann. Das ganze soll eigentlich soweit ganz Simple sein.
    Die PayDay Zeit soll auf 60 Min schlagen. Das ganze soll in der Datenbank gespeichert werden.



    Mit Level 1 benötigt man 8 Respektpunkte und für jedes weitere Level 4 Respektpunkte mehr. Außer man hat einen Premium Account. Dann soll der Spieler 2 Respektpunkte pro PayDay erhalten.
    Ich möchte die Jobs ebenfalls in einer Tabelle speichern so das dass Geld erst zum PayDay aufs Konto kommt.


    Ich denke das es nicht schwierig ist das zu schreiben und biete daher 10€ PaySafe Card an.

    Setze die Spalte "id" in der Datenbank auf "AUTO_INCREMENT", nachdem du alle Einträge gelöscht hast.Eventuell löst das auch das zweite Problem direkt, da die ID dann nicht mehr 0 ist.

    Die möglichkeit bietet mir PHPMyAdmin leider nicht in den Standard Werten an.
    Allerdings hast du recht das es an der ID 0 liegt.


    Durch die Änderung der id in phpmyadmin kann ich das haus auch kaufen


    saveHaus(id)
    {
    new query[128];
    format(query, sizeof(query), "UPDATE haus SET besitzer='%s', h_preis='%i' WHERE id='%i'", hInfo[id][h_besitzer], hInfo[id][h_preis], hInfo[id][h_id]);
    mysql_function_query(handle, query, false, "", "");
    return 1;
    }



    updateHaus(id)
    {
    printf("update: %d", id);
    new string[128];
    if(hInfo[id][h_pickup] != -1)
    {
    DestroyPickup(hInfo[id][h_pickup]);
    }
    if(hInfo[id][h_text] != Text3D:-1)
    {
    Delete3DTextLabel(hInfo[id][h_text]);
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    printf("hat keinen Besitzer");
    hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,128, "Zum Verkauf\nKosten: %i$\n/hauskaufen %i", hInfo[id][h_preis]);
    hInfo[id][h_text] = Create3DTextLabel(string, 0xFFFFFFFF, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    printf("hat Besitzer");
    hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,128, "Dieses Haus gehört: %s", hInfo[id][h_besitzer]);



    hInfo[id][h_text]=Create3DTextLabel(string, 0xFFFFFFFF, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    return 1;
    }


    Das erstellen eines Hauses funktioniert. Allerdings nur mit der ID 0 wie ich gerade getestet habe. Da fehlt mir dann scheinbar noch die Abfrage welches die nächste ID wäre die frei ist.


    Das kaufen des Hauses funktioniert ebenfalls nicht. Es sei denn ich schreibe das Haus direkt ohne InGame Befehl in die Datenbank.

    Genau das ist mir gerade auch aufgefallen. Nun Savet er das Haus auch.
    Nun funktioniert allerdings der /hauskaufen befehl nicht. Trage ich es Manuell in die Datenbank ein funktionierts.



    Code
    public OnHausCreated(id)
    {
    	hInfo[id][h_id]=cache_insert_id(handle);
    }


    ocmd:hauskaufen(playerid, params[])
    {
    if(hatPlayerHaus(playerid))return
    SendClientMessage(playerid, COLOR_RED, "Du hast bereits ein Haus.");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(!IsPlayerInRangeOfPoint(playerid, 5,
    hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]))continue;
    if(!strlen(hInfo[i][h_besitzer]))
    {
    if(GetPlayerMoney(playerid)<hInfo[i][h_preis])return
    SendClientMessage(playerid, COLOR_RED, "Du hast nicht genügend Geld.");
    GivePlayerMoney(playerid, -hInfo[i][h_preis]);
    strmid(hInfo[i][h_besitzer], getPlayerName(playerid), 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
    updateHaus(i);
    saveHaus(i);
    return 1;
    }
    return SendClientMessage(playerid, COLOR_RED,
    "Das Haus steht nicht zum Verkauf.");
    }
    return 1;
    }

    So nun habe ich noch ein Problem mit dem createhaus befehl.



    ocmd:createhaus(playerid, params[])
    {
    if(!isAdmin(playerid, 3))return
    SendClientMessage(playerid, COLOR_RED, "Dein Adminrang ist zu niedrig.");
    new Float:xc, Float:yc, Float:zc;
    GetPlayerPos(playerid, xc, yc, zc);



    new id=getFreeHausID();
    hInfo[id][h_x]=xc;
    hInfo[id][h_y]=yc;
    hInfo[id][h_z]=zc;
    hInfo[id][ih_x]=0.0;
    hInfo[id][ih_y]=0.0;
    hInfo[id][ih_z]=0.0;
    hInfo[id][h_interior]=0;
    strmid(hInfo[id][h_besitzer], "", 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
    hInfo[id][h_preis]=1;
    updateHaus(id);
    //In Datenbank abspeichern
    new query[256];
    format(query, sizeof(query),
    "INSERT INTO haus (h_x, h_y, h_z, ih_x, ih_y, ih_z, h_interior, h_preis) VALUES ('%f', '%f', '%f', '0.0', '0.0', '0.0', '0', '1')",
    xc, yc, zc);
    mysql_function_query(handle, query, true, "OnHausCreated", "i", id);
    return 1;
    }



    Alle Prints werden Ordnungsgemäß ausgeführt.


    MySQL Log gibt folgendes aus



    Code
    [18:46:06] [WARNING] CMySQLResult::GetRowDataByName - field not found ("id")
    [18:46:06] [ERROR] cache_get_field_content_int - invalid datatype
    [18:46:06] [WARNING] CMySQLResult::GetRowDataByName - field not found ("id")
    [18:46:06] [ERROR] cache_get_field_content_int - invalid datatype

    Feld id soll nicht vorhanden sein. Ist aber vorhanden.


    Habe ich mal wieder iwo einen Fehler gemacht und den nicht gesehen ?

    Zeig uns mal den Code, mit dem du dem Spieler das Geld abziehst, wenn er z.B. etwas kauft.


    ocmd:hauskaufen(playerid, params[])
    {
    if(hatPlayerHaus(playerid))return SendClientMessage(playerid, COLOR_RED, "Du hast bereits ein Haus.");
    print("[MySQL] 1");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    print("[MySQL] 2");
    if(!IsPlayerInRangeOfPoint(playerid, 5,
    hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]))continue;
    print("[MySQL] 3");
    if(!strlen(hInfo[i][h_besitzer]))
    {
    if(GetPlayerMoney(playerid)<hInfo[i][h_preis])return
    SendClientMessage(playerid, COLOR_RED, "Du hast nicht genügend Geld.");
    print("[MySQL] 4");
    GivePlayerMoney(playerid, -hInfo[i][h_preis]);
    strmid(hInfo[i][h_besitzer], getPlayerName(playerid), 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
    updateHaus(i);
    saveHaus(i);
    return 1;
    }
    return SendClientMessage(playerid, COLOR_RED,
    "Das Haus steht nicht zum Verkauf.");
    }
    return 1;
    }

    Du gibst in dem Fall aber nur dem Killer 10$, dem Totem wird aber nichts abgezogen.Machs mal so:


    Vielen dank für deine Info. Ich denke das umstellen ist das kleinere Problem. Ich würde zunächst erstmal gern den Spieler speichern können und das vollständig. Aber wiegesagt danke für den Hinweis :D

    Im Query steht:
    money = '150010',

    Das ist leider der Wert mit dem ich Connected bin. Kaufe ich dann etwas für 150.000$ z.b zieht er das zunächst InGame ab, speichert dies aber nicht in die Datenbank.


    Deswegen wundert mich das ganze auch weil ich es einfach nicht gespeichert kriege.


    Die MySQL Zeile heißt auch

    Code
    money


    yep

    Poste bitte einen Code, mit dem Geld gegeben wird, welches nicht gespeichert wird.

    Ich weiß nicht was du genau meinst, aber ich versuche mal das zu verstehen.
    Ich gebe dir hier mal den OnPlayerDeath



    public OnPlayerDeath(playerid, killerid, reason)
    {
    //Beispielcode
    if(killerid != INVALID_PLAYER_ID)
    {
    PlayerInfo[killerid][pKills]++;
    GivePlayerMoney(killerid, 10);
    PlayerInfo[killerid][pMoney] += 10;
    if(PlayerInfo[killerid][pKills] > 3)
    {
    PlayerInfo[killerid][pLevel] = 1;
    }
    }
    PlayerInfo[playerid][pDeaths]++;
    return 1;
    }


    Hier soll dem Toten 10$ abgezogen werden und dem Mörder 10$ gutgeschrieben werden. Funktioniert wird aber nicht gespeichert in der Datenbank

    Poste bitte einen Code, mit dem Geld gegeben wird, welches nicht gespeichert wird.

    Ich weiß nicht was du genau meinst, aber ich versuche mal das zu verstehen.
    Ich gebe dir hier mal den OnPlayerDeath




    public OnPlayerDeath(playerid, killerid, reason)
    {
    //Beispielcode
    if(killerid != INVALID_PLAYER_ID)
    {
    PlayerInfo[killerid][pKills]++;
    GivePlayerMoney(killerid, 10);
    PlayerInfo[killerid][pMoney] += 10;
    if(PlayerInfo[killerid][pKills] > 3)
    {
    PlayerInfo[killerid][pLevel] = 1;
    }
    }
    PlayerInfo[playerid][pDeaths]++;
    return 1;
    }


    Hier soll dem Toten 10$ abgezogen werden und dem Mörder 10$ gutgeschrieben werden. Funktioniert wird aber nicht gespeichert in der Datenbank

    Ja klar



    public OnUserLogin(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    if(cache_get_row_count() == 0)
    {
    //Der Spieler hat ein falsches Passwort eingegeben
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    //Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
    //Wir lesen nun die erste Zeile des Caches aus (ID 0)
    PlayerInfo[playerid][p_id] = cache_get_field_content_int(0, "id", handle);
    PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", handle);
    PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0, "money", handle);
    PlayerInfo[playerid][pKills] = cache_get_field_content_int(0, "kills", handle);
    PlayerInfo[playerid][pDeaths] = cache_get_field_content_int(0, "deaths", handle);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    PlayerInfo[playerid][admin_level] = cache_get_field_content_int(0, "admin_level", handle);
    loadPlayerCars(playerid);
    SpawnPlayer(playerid);
    }
    return 1;
    }

    Leider nichts verwendbares.



    Code
    [16:20:46] UPDATE users SET level = '0', money = '150010', kills = '1', deaths = '6', admin_level = '3' WHERE id = '2'
    
    
    [16:20:46] [part] Nick has left the server (0:1)

    Hinzu muss ich sagen das nur das Geld nicht Richtig gespeichert wird alles andere schon

    Nein leider gehts auch damit nicht.


    public OnPlayerDisconnect(playerid, reason)
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', admin_level = '%d' WHERE id = '%d'",PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][admin_level], PlayerInfo[playerid][p_id]);
    mysql_pquery(handle, query);
    print("Gespeichert");
    return 1;
    }
    @Jeffry

    Warum speichert mein OnPlayerDisconnect nicht beim Disconnecten ?



    public OnPlayerDisconnect(playerid, reason)
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);
    print("Gespeichert");
    return 1;
    }


    Der Print gibt aus den Befehl beendet zu haben.

    Hallo,


    ich bin gerade dabei ein Vollständiges Selfmade zu schreiben. Da meine Erfahrungen noch nicht so ausgeklügelt sind, Frage ich mal wieder euch.


    Ich habe leider das Problem das jeder User in die vor eingestellten SAMP Interiors eintreten kann wie er will. Wie entferne ich diese ?

    Ich bin gerade nicht zuhause um den Befehl hier zu schreiben zum Verkaufen.


    Das ist einfach nur eine abgeänderter Code von hauskaufen.


    Auch wenn ich das Haus kaufe updatet er nicht den pickup bzw löscht nicht den verkaufspickup. Es kommt nur ein neuer hinzu.


    Nach dem relogg wird alles richtig angezeigt


    Push 21.07