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: 19.08.2025 22:48




Statystyki
- Grupa: Użytkownik
- Całość postów: 83
- Odwiedzin: 3 888
- 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


Dodatki SourceMod



Moja zawartość