Skocz do zawartości

Rekomendowane odpowiedzi

Napisano (edytowane)

Witam ponownie

Tym razem mam problem z kodem. A mianowicie piszę plugin z podłączeniem pod bazę danych mysql. Plugin ma nabijać kille i asysty. Do tego jest stworzona topka. Wszystko super, ale gdy jakiś gracz wejdzie na serwer nie dodaje go do bazy i nie nalicza mu kili i asyst. Plugin łączy się z bazą, bo jak dodałem jakiegoś "gracza" w bazie to wyświetlało go w topce.

To jest fragment, który powinien dodawać gracza do bazy.

Spoiler
public void OnClientPutInServer(int client) {
    kills[client] = 0;
    assists[client] = 0;

    if (IsFakeClient(client) || IsClientSourceTV(client))
        return;

    int sid = GetSteamAccountID(client);
    char buffer[1024];
    Format(buffer, sizeof(buffer), "SELECT `kills`,`assists` FROM `n_ranks` WHERE `steamid`=%d;", sid);
    DBResultSet query = SQL_Query(db, buffer);
    if (query == null) {
        char error[255];
        SQL_GetError(db, error, sizeof(error));
        PrintToServer("Nie udalo sie pobrac danych gracza %N. (error: %s)", client, error);
        return;
    }

    if (!SQL_GetRowCount(query)) {
        Format(buffer, sizeof(buffer), "INSERT INTO `n_ranks` VALUES(%d, `%N`, 0, 0);", sid, client);
        if (SQL_FastQuery(db, buffer)) {
            char error[255];
            SQL_GetError(db, error, sizeof(error));
            PrintToServer("Nie udalo sie dodac nowego gracza %N! (error: %s)", client, error);
        }
        return;
    }

    while (SQL_FetchRow(query)) {
        kills[client] = SQL_FetchInt(query, 0);
        assists[client] = SQL_FetchInt(query, 0);
    }
}

 

 Nie wiem czy tylko tu może leżeć błąd, ale jakby co to pisać, bo całego kodu tez nie chcę dawać.

 

@edit Tu jeszcze daje podłączenie do bazy i jak wygląda tabela.

public void OnMapStart() {
    char error[128];
    db = SQL_Connect("n_ranks", true, error, sizeof(error));
    if (db == INVALID_HANDLE) {
        LogError("Could not connect: %s", error);
        return;
    }

    char buffer[1024];
    Format(buffer, sizeof(buffer), "CREATE TABLE IF NOT EXISTS `n_ranks`(`steamid` INT NOT NULL PRIMARY KEY, `nick` VARCHAR(64), `points` INT NOT NULL, `kills` INT NOT NULL, `assists` INT NOT NULL);");
    if (!SQL_FastQuery(db, buffer)) {
        SQL_GetError(db, error, sizeof(error));
        PrintToServer("Nie udalo sie stworzyc tabeli. Error: %s", error);
    }
}

 

Edytowane przez Elite

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@KyOTV Też o tym pomyślałem, ale wydaje się wszystko dobrze. Nie wiem czy mam za słaby wzrok, ale nie wiem o co może chodzić

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Robisz tabelę, w której umieszczasz 5 kolumn: SteamID, nick, punkty, zabójstwa i asysty z dopiskiem NOT NULL.

Cytat
`steamid` INT NOT NULL PRIMARY KEY, `nick` VARCHAR(64), `points` INT NOT NULL, `kills` INT NOT NULL, `assists` INT NOT NULL
    

 

Twoje zapytanie do bazy danych podczas dodawania nowego użytkownika zawiera tylko 4 wartości. Powoduje to niezgodność, ponieważ na początku deklarujesz, że pole `assists` ma nie być puste, a nic do niego nie wprowadzasz

Cytat
Format(buffer, sizeof(buffer), "INSERT INTO `n_ranks` VALUES(%d, `%N`, 0, 0);", sid, client);

 

Innymi słowy zapomniałeś dodać jeszcze jednego zera do zapytania dodającego nowego gracza do tabeli 😉

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
27 minut temu, BinaR napisał:

Innymi słowy zapomniałeś dodać jeszcze jednego zera do zapytania dodającego nowego gracza do tabeli 😉

Niestety nadal nic :/. Nie wiem o co może chodzić.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Lubię to! 1
Napisano (edytowane)
W dniu 8.01.2021 o 16:43, Elite napisał:

 

 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Ukryj zawartość

if (!SQL_GetRowCount(query)) {
        Format(buffer, sizeof(buffer), "INSERT INTO `n_ranks` VALUES(%d, `%N`, 0, 0);", sid, client);
        if (SQL_FastQuery(db, buffer)) {
            char error[255];
            SQL_GetError(db, error, sizeof(error));
            PrintToServer("Nie udalo sie dodac nowego gracza %N! (error: %s)", client, error);
        }
        return;
    }

 

 


Masz tutaj taki łady debug... pokaż nam następnym razem co on tam wyświetla...
(i w ogóle jakieś error logi jeśli są)
W każdym bądź razie:
image.png.be27fe31233f18fdce120af346c2a67f.png
poczytaj na temat mysql i sprawdzaj swoje polecenia

INSERT INTO `n_ranks` (`steamid`, `nick`, `points`, `kills`, `assists`) VALUES ('%d', '%N', '0', '0', '0');

Też fajnie by było jakbyś zdefiniował wartości domyślne dla kolumn `points` `kill` i `assists`
wtedy polecenie takie wyglądało by tak:

INSERT INTO `n_ranks` (`steamid`, `nick`) VALUES('%d', '%N');

Jeszcze bardziej sponio by było gdyby tabela była w utf8mb4_unicode_ci

 

Spoiler

 

Nie wiem jak aktualizujesz nick gracza, ale ja zazwyczja robie tak, że l
najpierw wrzucam dane do tabeli i jeśli ten gracz jest już w bazie aktualizuje nick gracza za pomocą takiego polecenia:

INSERT INTO `n_ranks` (`steamid`, `nick`, `points`, `kills`, `assists`) VALUES ('%d', '%N', '0', '0', '0') ON DUPLICATE KEY UPDATE `nick` = '%N';

a potem dopiero pobieram dane na temat tego gracza za pomocą select.

 


 

Edytowane przez fejmek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@fejmek Dzięki, ale sprawdzę w piątek, bo mnie w domu nie ma. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@fejmek Ciągle nic ;/. Jak chcesz to na pw wyślę ci cały kod.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Można zamknąć pan fejmek pomógł serduszka dla niego ;D.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...