hlmod.hu
https://hlmod.hu/

Model precache SQL-ből
https://hlmod.hu/viewtopic.php?f=9&t=29526
Oldal: 1 / 2

Szerző:  AltaiR [ 2018.11.14. 21:10 ]
Hozzászólás témája:  Model precache SQL-ből

Sziasztok!

Elkezdtem írogatni egy plugint és megakadtam. A lényeg hogy adatbázisban tárolok szinte mindent, a modelek elérésu utját is és a plugin_precache() rész előtt szeretném lekérni őket. És itt a probléma, hibát ír:
Kód:
L 11/14/2018 - 21:05:43: [MySQL] Invalid info tuple handle: 0
L 11/14/2018 - 21:05:43: [AMXX] Displaying debug trace (plugin "fegyverskin_sql.amxx")
L 11/14/2018 - 21:05:43: [AMXX] Run time error 10: native error (native "SQL_ThreadQuery")
L 11/14/2018 - 21:05:43: [AMXX]    [0] fegyverskin_sql.sma::sql_precache (line 320)
L 11/14/2018 - 21:05:43: [AMXX]    [1] fegyverskin_sql.sma::plugin_precache (line 359)


Viszont ha nem a precache részben kérem le az adatokat, hanem később, gond nélül le tud kérni mindent hiba nélkül. Azért bemásolom, hogy lássátok:

Kód:
public sql_precache() 
{
   static Query[10048];
 
   formatex(Query, charsmax(Query), "SELECT * FROM fs_skins ORDER BY tipus, skinnev");
   SQL_ThreadQuery(g_SqlTuple, "SqlQueryPrecache", Query);
}
public SqlQueryPrecache(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
   if(FailState == TQUERY_CONNECT_FAILED)
   {
      set_fail_state("[SQL-ERROR] Nem sikerült csatlakozni az adatbázishoz.");
      return;
   }
   else if(FailState == TQUERY_QUERY_FAILED)
   {
      set_fail_state("[SQL-ERROR] Hiba a lekérdezésben");
      return;
   }
   
   if(Errcode)
   {
      log_amx("[SQL-ERROR] %s",Error);
      return;
   }
 
   osszskin = SQL_NumRows(Query);
 
   for (new i = 1; i <= SQL_NumRows(Query); i++)
   {
      skininfo[i][fegyoid] = SQL_ReadResult(Query, 0);
      SQL_ReadResult(Query, 1, skininfo[i][fegyonev], 199);
      skininfo[i][fegyotipus] = SQL_ReadResult(Query, 2);
      skininfo[i][fegyoar] = SQL_ReadResult(Query, 3);
      SQL_ReadResult(Query, 4, skininfo[i][fegyoelerut], 199);
      
      skinmenny[skininfo[i][fegyotipus]] = skinmenny[skininfo[i][fegyotipus]] + 1;
      
      SQL_NextRow(Query);
   }
}

public plugin_precache()
{
   sql_precache();
   for (new i = 1; i <= osszskin; i++)
   {   
      log_amx("PRECACHED: %s", skininfo[i][fegyoelerut]);
      precache_model(skininfo[i][fegyoelerut]);
   }
}


A kérdés az lenne, hogy itt az-e a probléma, hogy a prechache részben nem lehet sql-es dolgokat csinálni és azért nem jó? Ha rosszul gondolom, akkor valaki legyen szíves világosítson fel.
Előre is köszönöm a válaszokat :)

Szerző:  terminator100 [ 2018.11.15. 00:46 ]
Hozzászólás témája:  Re: Model precache SQL-ből

Hali!

Szerintem azért nem jó, mert 2 cucc van a: precache_model(skininfo[i][fegyoelerut]); -nál...

ide úgy kellene át add az infót, hogy csak az elérése, legyen ott... én legalábbis így gondolom. Bár igaz én most sourcemod-ban dolgozok, de ott nekem is volt hasonló problémám...
Azóta amióta precache_model parancsom csak 1 infót kap, azóta tökéletesen jó., mert ott nem teljesen így van, hanem ott így: PrecacheModel én megoldottam, hogy mindenkinek az éppen aktuális skinje legyen a precachemodel paranccsal pl:PrecacheModel(model);
és a model már itt az elérési úttal együtt van... pl: models/szerveremneve/sapka/santaclaus.mdl
Oda úgy kell prechachelni.
De ez csak az én ötletem, én megoldásom, remélem tudtam segíteni.
Bár nem 1 a két játék, de majdnemhogy ua.-z ha megnézed a két parancs között a alsóvonal, meg a két szó kezdőbetűje a különbség, bár lehet kisbetűvel is menne, azt nem próbáltam. Szerintem nálad is ez a gond, ezt abból gondolom, mert nekem is ua. a hiba üzi volt kb, csak invalid query handle: 0-t írt :D Szóval 1 próbát megér úgy gondolom! :)

Szerző:  JohanCorn [ 2018.11.15. 09:28 ]
Hozzászólás témája:  Re: Model precache SQL-ből

JohanCorn írta:
norbee.16 írta:
Az ilyen privát üzeneteket hanyagoljátok...

1. Nem értek a scripteléshez, max minimális átírás vagy javítás.
2. Nem privát üzenet dolog egy random emberrel. Ha egy jó ismerősnek külditek oké, de ezzel legyetek szívesek nem zargatni senkit ha csak nincs megbeszélve.
3. Van nekem is szerverem, nem is egy. Mellé egy közösség amivel van bőven dolgom. Ha lenne hozzá értésem sem biztos más dolgát helyezném az első helyre a sajátom helyett. Akkor a saját tevékenységem mikor haladna előre?

Nem lecseszés csak felhívás. Ha valaki akar segíteni az fog is, de nem hiszem, hogy privátban, hanem téma formába ami értelmesen van megfogalmazva és minden kellő dolog mellékelve van. Ha pedig nagyon titkos mód és privát akkor érdemesebb a fejlesztőnél jelezni és javíttatni vele.(Ezt már csak azért is írtam le mert manapság kevesen csatolják a már amúgyis publikus módot. Esetlegesen 1-2 minimális dolog van benne változtatva, ha pedig az ügyes téma nyitó változtatta akkor meg is tudja oldani a problémát.) :P

Idézet:
Szia!

Egy egyszerű kérdésem lenne. Vagy egy adatbázis ahova felvittem fegyverekhez tartozó modelek elérési utját. Szeretném a plugin_precache() előtt lekérni az adatokat, errort ír. A lekérdezéssel nincs baj. Tehát lehetséges egyáltalán a precache előtt lekérdezni a dolgokat?

Így próbálkoztam:
Kód:
public plugin_precache() 
{
   sql_precache();
   for (new i = 1; i <= osszskin; i++)
   {   
      precache_model(skininfo[i][fegyoelerut]);
   }
}


Köszönöm előre is :)


A kérdésre válaszolva ezen a módon szerintem nem lehetséges, mert amikor lefut a precache, akkor intéz egy SQL kérést aminek a Thread részében vissza érkező részen kellene feldolgozni a kapott információt. Érdekes felvetés viszont. Ez a saját véleményem. Ha valaki tud jobbat és már így téma lett, akkor hallgatom. :)

Szerző:  AltaiR [ 2018.11.15. 20:31 ]
Hozzászólás témája:  Re: Model precache SQL-ből

JohanCorn írta:

A kérdésre válaszolva ezen a módon szerintem nem lehetséges, mert amikor lefut a precache, akkor intéz egy SQL kérést aminek a Thread részében vissza érkező részen kellene feldolgozni a kapott információt. Érdekes felvetés viszont. Ez a saját véleményem. Ha valaki tud jobbat és már így téma lett, akkor hallgatom. :)


Értem. Próbáltam már, hogy a Thread rész lefutása után hívom meg a precache-t de nem jött be. Amint kiválasztottam a adott skint a szerver lefagyott, mert nem lett "precachelve" a skin. Más fajta sql kezelés nem létezik? Hátha működne.

Szerző:  regener [ 2018.11.15. 21:01 ]
Hozzászólás témája:  Re: Model precache SQL-ből

Mutass egy példát erre ha már naplóztatod:
Kód:
log_amx("PRECACHED: %s", skininfo[i][fegyoelerut]);


Illetve egy valós példát hogy az SQL-ben hogyan szerepel az elérés.

Szerző:  AltaiR [ 2018.11.15. 21:12 ]
Hozzászólás témája:  Re: Model precache SQL-ből

regener írta:
Mutass egy példát erre ha már naplóztatod:
Kód:
log_amx("PRECACHED: %s", skininfo[i][fegyoelerut]);


Illetve egy valós példát hogy az SQL-ben hogyan szerepel az elérés.


log_amx("[SQL-Precache]: %s skin betoltve (%s)", skininfo[i][fegyonev], skininfo[i][fegyoelerut]);

L 11/15/2018 - 21:09:43: [fegyverskin_sql.amxx] [SQL-Precache]: Karambit | Damaszkuszi skin betoltve (models/csgo_skins/Karambit/damaszkuszi.mdl)
L 11/15/2018 - 21:09:43: [fegyverskin_sql.amxx] [SQL-Precache]: Karambit | Doppler skin betoltve (models/csgo_skins/Karambit/doppler.mdl)
L 11/15/2018 - 21:09:43: [fegyverskin_sql.amxx] [SQL-Precache]: Karambit | Edzett skin betoltve (models/csgo_skins/Karambit/edzett.mdl)
L 11/15/2018 - 21:09:43: [fegyverskin_sql.amxx] [SQL-Precache]: Karambit | Karmazsin skin betoltve (models/csgo_skins/Karambit/karmazsin.mdl)

Kép

Szerző:  regener [ 2018.11.15. 23:00 ]
Hozzászólás témája:  Re: Model precache SQL-ből

Próbáld ki így:
  1. public sql_precache()
  2. {
  3.    static Query[10048];
  4.  
  5.    formatex(Query, charsmax(Query), "SELECT * FROM fs_skins ORDER BY tipus, skinnev");
  6.    SQL_ThreadQuery(g_SqlTuple, "SqlQueryPrecache", Query);
  7. }
  8. public SqlQueryPrecache(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
  9. {
  10.    if(FailState == TQUERY_CONNECT_FAILED)
  11.    {
  12.       set_fail_state("[SQL-ERROR] Nem sikerült csatlakozni az adatbázishoz.");
  13.       return;
  14.    }
  15.    else if(FailState == TQUERY_QUERY_FAILED)
  16.    {
  17.       set_fail_state("[SQL-ERROR] Hiba a lekérdezésben");
  18.       return;
  19.    }
  20.    
  21.    if(Errcode)
  22.    {
  23.       log_amx("[SQL-ERROR] %s",Error);
  24.       return;
  25.    }
  26.  
  27.    osszskin = SQL_NumRows(Query);
  28.  
  29.    for (new i = 1; i <= osszskin; i++)
  30.    {
  31.       skininfo[i][fegyoid] = SQL_ReadResult(Query, 0);
  32.       SQL_ReadResult(Query, 1, skininfo[i][fegyonev], 199);
  33.       skininfo[i][fegyotipus] = SQL_ReadResult(Query, 2);
  34.       skininfo[i][fegyoar] = SQL_ReadResult(Query, 3);
  35.       SQL_ReadResult(Query, 4, skininfo[i][fegyoelerut], 199);
  36.  
  37.       log_amx("[SQL-Precache]: %s skin betoltve (%s)", skininfo[i][fegyonev], skininfo[i][fegyoelerut]);
  38.       precache_model(skininfo[i][fegyoelerut]);
  39.  
  40.       skinmenny[skininfo[i][fegyotipus]] = skinmenny[skininfo[i][fegyotipus]] + 1;
  41.      
  42.       SQL_NextRow(Query);
  43.    }
  44. }
  45.  
  46. public plugin_precache()
  47. {
  48.    sql_precache();
  49. }


Bármelyik skin alkalmazásakor kifagy vagy csak adottaknál?

Szerző:  JohanCorn [ 2018.11.16. 09:25 ]
Hozzászólás témája:  Re: Model precache SQL-ből

Továbbra is tartom magam a leírtakhoz. Ezt így nem tudod kezelni, mert a válasz később érkezik ás a precache részben már adatokkal kell szolgálnod. Ha jól gondolom, a precache_ model, sound, etc. funkciók viszont csak a plugin_precache ág alatt érvényesülnek.

Cáfoljatok meg, ha tévedek. Viszont ha igazam van és nem fog menni elméletileg tudok rá egy ún. másik lekérést. A különbség annyi, hogy a parancssor indításakor még az adott blokkban kap visszatérési értéket, így nem kell különbontani thread részre. Hogy miért nem ezt használják az emberek? Mert ha nem érkezik edőben válasz konkrétan befagy a szerver addig ameddig nem kap választ, vagy nem timeoutol.

Szerző:  regener [ 2018.11.16. 15:25 ]
Hozzászólás témája:  Re: Model precache SQL-ből

JohanCorn írta:
Továbbra is tartom magam a leírtakhoz. Ezt így nem tudod kezelni, mert a válasz később érkezik ás a precache részben már adatokkal kell szolgálnod. Ha jól gondolom, a precache_ model, sound, etc. funkciók viszont csak a plugin_precache ág alatt érvényesülnek.

Cáfoljatok meg, ha tévedek. Viszont ha igazam van és nem fog menni elméletileg tudok rá egy ún. másik lekérést. A különbség annyi, hogy a parancssor indításakor még az adott blokkban kap visszatérési értéket, így nem kell különbontani thread részre. Hogy miért nem ezt használják az emberek? Mert ha nem érkezik edőben válasz konkrétan befagy a szerver addig ameddig nem kap választ, vagy nem timeoutol.

Éppen ezért írtam át a fentire a kódot, így lekérésenként rögtön precachel (elméletben :D).

Szerző:  JohanCorn [ 2018.11.16. 16:26 ]
Hozzászólás témája:  Re: Model precache SQL-ből

Nem így értettem. :D Amit írtál az a szokásos mindehol mindeki ezt használja már. Azonban egy 2005-ös forrásban láttam ettől eltérőt. Ott a kérés és annak fogadása egy blokkban volt ha szükséges előkeresem. De ennél már külön van szedve. Lehet, hogy erre a célra az sem felel meg. De egynlőre ez mind egy is. Várom erre a te páldádra való reagálását a felhasználónak. Kíváncsi vagyok, hogy működött-e.

Oldal: 1 / 2 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/