Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[SQL] Nadpisywane ID?


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 sebuli

    Zaawansowany

  • Użytkownik

Reputacja: 3
Nowy

  • Postów:128
  • Lokalizacja:Bydgoszcz
Offline

Napisano 08.10.2011 17:36

public CheckData(id)
{
if(!gConnected) return

g_SqlTuple = SQL_MakeDbTuple("xxx","xxx","xxx","xxx")

AJDI[0] = id
new qCommand[512]
get_user_name(id, Nick[id], 31)
format(qCommand, 511, "SELECT `xx`, `xx` FROM `xx` WHERE `nick`='%s' ", Nick[id])
SQL_ThreadQuery(g_SqlTuple, "CheckHandler", qCommand)
}
public CheckHandler(FailState, Handle:Query, Errorcode, Error[], Data[], DataSize)
{
new id = AJDI[0]
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 [CheckData]")
return PLUGIN_CONTINUE
}

if(SQL_MoreResults(Query)) // A jednak coś znalazł ! Żeby nie robić kolejnej funkcji od razu odczytujemy.
{
xxx[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "xx")) // Ponieważ funkcja SQL_ReadResult wymaga ID pola, a my go nie mamy musimy posłużyć się funkcją SQL_FieldNameToNum.
xxx[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "xx"))
if(xxx[id] != 0)
set_task(0.1, "Dodaj", id)
}
return PLUGIN_CONTINUE
}


Mam problem z ID gracza, bo gdy wywołam CheckData(id) w Odrodzeniu, kiedy gracz się spawnuje, to wtedy w zmiennej AJDI[0] będzie szybko zmieniać się id w zależności ile jest graczy. Da się innym sposobem przesłać id gracza z CheckData do CheckHandler, niz przechowywanie w zmiennej globalnej? Mówię, jak tylko kilka razy się wywoła tą funkcje podrząd to kiszka i AJDI[0] będzie posiadać id osoby, która ostatnia wykonała funkcje CheckData(id)... Głupie to, nie da się inaczej?

Mój problem chyba rozwiązany:
SQL_ThreadQuery(g_SqlTuple, "CheckHandler", qCommand, Data, 1)
Takie coś powinno być a ja tego nie miałem. Teraz zmienie to AJDI na Data normalnie i powinno chulać, w CheckData(id) napiszę new Data[1] i Data[0] = id. Chyba będzie chodzić :P

Użytkownik sebuli edytował ten post 08.10.2011 19:02

  • +
  • -
  • 0

#2 dram

    Wszechwidzący

  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:277
  • Lokalizacja:xxxx
Offline

Napisano 26.10.2011 06:23

gościu sugerował bym tak:
CheckData(id)
new Data[1]
data[0] = id
SQL_ThreadQuery(g_SqlTuple, "CheckHandler", qCommand,Data,1)
A teraz odczyt w
public CheckHandler

public CheckHandler(FailState, Handle:Query, Errorcode, Error[], Data[], DataSize)
{
new id = Data[0]
//client_print(id,print_chat,"Zapytanie wykonane");

Wtedy zmienna AJDI nie będzie Ci już potrzebna i ją możesz wywalić.

Jak sobie poradziłeś to GIT, jeżeli nie to może komuś innemu się przyda.

Użytkownik dram edytował ten post 26.10.2011 06:24

  • +
  • -
  • 0
Co oferuje?

Pisanie pluginów amxx/modow itd
Skryptow php

Kontakt na PW LUB GG

#3 sebuli

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:128
  • Lokalizacja:Bydgoszcz
Offline

Napisano 28.10.2011 16:28

A jeszcze mam pytanko :D Czy jeżeli w danej funkcji public np. public Odrodzenie(id), jeśli dam w niej nową zmienną, to czy dla każdej osoby będzie ona nowa i unikalna, czy będzie się to nadpisywać w jakiś dziwny sposób?
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych