Zamieniłem. Sam zapis działa teraz prawidłowo, tylko nadal nie wiem jak mam odczytywać to co już, np. stworzyłem za pomocą edytora graficznego bazy danych.
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
Mister Silenzo
Rejestracja: 12.09.2013Aktualnie: Nieaktywny
Poza forum Ostatnio: 12.02.2021 05:00





Statystyki
- Grupa: Użytkownik
- Całość postów: 83
- Odwiedzin: 3 380
- Tytuł: Zaawansowany
- Wiek: Wiek nie został ustalony
- Urodziny: Data urodzin nie została podana
-
Płeć
Mężczyzna
-
Lokalizacja
BD
Kontakt
39
Życzliwy
Narzędzia użytkownika
Ostatnio byli
Moje posty
W temacie: [MySQL] Odczytywanie wartości z tabel.
06.03.2014 19:47
W temacie: [MySQL] Odczytywanie wartości z tabel.
06.03.2014 14:36
Dobra, przeczytałem to jeszcze raz i dokładnie, teraz moje kolejne pytanie.
Odczytać wartość z tabeli i danego wiersza mogę zrobić tylko po wywołaniu komendy SQL (w przypadku mojej bazy) "SELECT 'nick', 'punkty' FROM 'konta' WHERE 'nick'='%s';" i teraz żeby odczytać ilość punktów z tablicy muszę zrobić to w publicu, który jest wywoływany przez SQL_ThreadQuery
?
@EDIT
Skleciłem coś takiego:
Odczytać wartość z tabeli i danego wiersza mogę zrobić tylko po wywołaniu komendy SQL (w przypadku mojej bazy) "SELECT 'nick', 'punkty' FROM 'konta' WHERE 'nick'='%s';" i teraz żeby odczytać ilość punktów z tablicy muszę zrobić to w publicu, który jest wywoływany przez SQL_ThreadQuery

@EDIT
Skleciłem coś takiego:
#include <amxmodx> #include <sqlx> new const HOST[] = "127.0.0.1"; new const USER[] = "root"; new const PASSWORD[] = ""; new const DB[] = "cstrike_db"; new Handle:mysql; public plugin_init() { register_plugin("TEST", "AUTORSKA", "MISTER SILENZO"); mysql = SQL_MakeDbTuple(HOST, USER, PASSWORD, DB); new errcode, error[64]; SQL_Connect(mysql, errcode, error, sizeof(error)); if(errcode == 0) server_print("Polaczenie z baza nawiazane! Baza danych: %s!", DB); else { new string[128]; formatex(string, sizeof(string), "Wystapil blad! Kod bledu %i o tresci %s!", errcode, error); server_print(string); set_fail_state(string); } register_concmd("amx_save", "save_user"); } public save_user(id) { new cQuery[256], name[32], punkty; get_user_name(id, name, 31); punkty = 50; formatex(cQuery, sizeof(cQuery), "INSERT INTO `konta` (`nick`, `punkty`) VALUES ('%s', %i);", name, punkty); SQL_ThreadQuery(mysql, "SaveH_", cQuery); } public SaveH_(FailState, Handle:Query, Errorcode, Error[], Data[], DataSize) { if(Errorcode) log_amx("Blad w zapytaniu: %s [SaveData] %i", Error, Errorcode); if(FailState == TQUERY_CONNECT_FAILED) { log_amx("Nie mozna podlaczyc sie do bazy danych."); return PLUGIN_CONTINUE; } else if(FailState == TQUERY_QUERY_FAILED) { log_amx("Zapytanie anulowane [SaveData]"); return PLUGIN_CONTINUE } log_amx("Zapis Udany! [SaveData]"); return PLUGIN_CONTINUE }Jest jednak jeden problem, w logach wyskakuje takie coś:
L 03/06/2014 - 14:56:05: [amx_ip.amxx] Blad w zapytaniu: 127.0.0.1 [SaveData] 1440 L 03/06/2014 - 14:56:05: [amx_ip.amxx] Zapis Udany! [SaveData]I pomimo tego zapis się udaje, czy ktoś może mi wytłumaczyć czym jest spowodowany ten bug?
W temacie: [ROZWIĄZANE] Sprawdzenie poprawności pluginu, szybko :P
04.03.2014 21:59
#include <amxmodx> #include <fun> #include <colorchat> public plugin_init() { register_plugin("2 Fragi", "Autorska", "Mister Silenzo"); register_event("DeathMsg", "EventDeath", "a"); // Wydarzenie odpowiedzialne za wyłapywanie zabójstw } public EventDeath() { new kid = read_data(1); // Numer ID osoby, która zabiła new vid = read_data(2); // Numer ID osoby, która ZOSTAŁA zabita new hs = read_data(3); // Zwraca 1 jeżeli zabójstwo było przez headshot, lub 0 gdy było strzałem/kosą w ciało // read_data() służy do odczytywania parametrów wydarzenia, jeżeli użyłem złego słowa do opisania tej funkcji i jej funkcji to proszę o poprawienie mnie xd if(kid == vid || kid == 0) return; // Jeżeli OFIARĄ jest ZABÓJCA (czyt. samobójstwo) lub ZABÓJCA jest zerem (KID jest równe 0 gdy spada się z wysokości, lub admin używa SLAY ;-;) new name[2][32]; // Tablica dwuwymiarowa o dwóch polach z indeksami od 0 do 31 (Jeżeli źle wytłumaczyłem to proszę o poprawienie mnie ;/) if(get_user_weapon(kid) == CSW_KNIFE) { // Jeżeli bronią ZABÓJCY jest NÓŻ get_user_name(kid, name[0], 31); // Pobierz nick ZABÓJCY do pierwszego pola tablicy. get_user_name(vid, name[1], 31); // Pobierz nick OFIARY do drugiego pola tablicy. ColorChat(kid, RED, "^1Zdobywasz dodatkowego fraga za zabicie ^4%s^1 z ^4NOZA^1!", name[1]); // Wyświetl ZABÓJCY informację o dodaniu fraga for(new i = 0; i < get_maxplayers(); i++) { /* Tutaj spotykamy się ze słowem kluczowym "for", które definiuje pętlę. W pętli tworzymy nową zmienną "new i" i przypisujemy jej wartość zero "new i = 0;". Warunek obrotu pętli, czyli "i < get_maxplayers();", co ma się stać po obrocie pętli, czyli "i++".*/ if(!is_user_connected(i) || is_user_bot(i) || is_user_hltv(i) || i == kid) continue; /* I jest numerem ID gracza w tej pętli, więc jeżeli gracz z pętli jest zabójcą, jest niepołączony, jest botem lub hltv to go pomijamy :P Pomijamy zabójcę w pętli, ponieważ dla niego wiadomość została wyświetlona wcześniej, więc nie ma potrzeby pokazywać mu po raz kolejny tego samego, prawda? :P*/ ColorChat(i, RED, "^4%s ^1zdobywa dodatkowego fraga za zabicie ^4%s ^1NOZEM!", name[0], name[1]); } set_user_frags(kid, get_user_frags(kid) + 1); // Dodajemy do obecnej ilości fragów ZABÓJCY jednego fraga. return; // Przerywa dalsze działanie kodu, gdyż gdyby zabójstwo nożem odbyło by się poprzez HS gracz dostał by dwa dodatkowe fragi zamiast jednego. } // Tutaj robimy to samo co powyżej z tą różnicą, że funkcja nie rozpoczyna się od sprawdzenia czy gracz ma nóż, lecz czy zabójstwo odbyło się poprzez HS. if(hs == 1) { get_user_name(kid, name[0], 31); get_user_name(vid, name[1], 31); ColorChat(kid, RED, "^1Zdobywasz dodatkowego fraga za zabicie ^4%s HEADSHOTEM^1!", name[1]); for(new i = 0; i < get_maxplayers(); i++) { if(!is_user_connected(i) || is_user_bot(i) || is_user_hltv(i) || i == kid) continue; ColorChat(i, RED, "^4%s ^1zdobywa dodatkowego fraga za zabicie ^4%s ^1HEADSHOTEM!", name[0], name[1]); } set_user_frags(kid, get_user_frags(kid) + 1); return; } /* Mam nadzieję, że nauczyłeś się czegokolwiek XD Jeżeli czegoś nie wiesz to zapraszam na PW, bądź pisz w temacie, chętnie "pouczę" podstaw, gdyż jak na razie sam znam tylko podstawy :P */ }Proszę, oto kompletny kod z komentarzami, miłej lektury (o ile chcesz się czegoś nauczyć


W temacie: [ROZWIĄZANE] Sprawdzenie poprawności pluginu, szybko :P
04.03.2014 21:13
Nie musiałeś używać Hamsandwitcha Wystarczy zwykły DeathMsg, pewnie nie rozumiesz o co chodzi, więc tutaj masz "wydarzenia" w czasie rozgrywki http://amxx.pl/topic/1680-eventy/. DeathMsg jest eventem odpowiedzialnym za śmierć gracza, event przekazuje identyfikator zabijającego i zabitego oraz info o zabójstwie, a mianowicie czy odbyło się przez HS czy nie. Moje pytanie, z jakich broni ma dodawać ten jeden kill?
W temacie: temat: problem z frakcjami by cypis
04.03.2014 16:13
Zmieniałeś cokolwiek w silniku? Jeżeli nie to mogę ci poprawnie zmodyfikować czysty silnik i go podesłać.
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Posty: Mister Silenzo
- Regulamin