hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2026.03.04. 23:45



Jelenlévő felhasználók

Jelenleg 323 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 322 vendég

A legtöbb felhasználó (2883 fő) 2025.07.30. 16:00-kor tartózkodott itt.

Regisztrált felhasználók: Google [Bot]az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása Hozzászólás a témához  [39359 hozzászólás ]  OldalElőző139323933393439353936
Szerző Üzenet
 Hozzászólás témája:
HozzászólásElküldve:Tegnap, 18:54 
Offline
Nagyúr
Avatar

Csatlakozott:2019.08.20. 18:19
Hozzászólások:514
Megköszönt másnak: 252 alkalommal
Megköszönték neki: 46 alkalommal
Sziasztok.
Mennyire jó megoldás egy nagyobb rendszert külön pluginokra szétbontani?

Arra gondolok, hogy egy fő plugin (core), ami kezeli az alap rendszert és az adatokat, és a funkciók külön pluginokban vannak megvalósítva (pl. raktár, ládanyitás, piac stb.), amelyek a fő pluginhoz kapcsolódnak.

Tehát nem egyetlen nagy pluginban lenne minden, hanem több különálló plugin dolgozna együtt a core-on keresztül (akár include fájlokkal vagy natív függvényekkel).

Mennyire jó vagy rossz megközelítés ez AMXX alatt? Teljesítmény, karbantarthatóság vagy stabilitás szempontjából mire érdemes figyelni?

Ez az egész egy nagy rendszer lenne, nyilván sql használattal.

és ha minden plugin saját SQL táblával dolgozik, az mennyire terheli meg az SQL szervert?

Okozhat-e teljesítményproblémát az, hogy több plugin külön-külön kezel adatbázis kapcsolatot és lekérdezéseket futtat?


Érdemesebb lenne egy közös kapcsolatot használni a core pluginon keresztül, vagy ez nem jelent számottevő különbséget?
Tapasztalatokra és véleményekre lennék kíváncsi.

_________________
► Spoiler mutatása


A hozzászólást 2 alkalommal szerkesztették, utoljára 8mTNNe 2026.03.04. 20:40-kor.

Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája:
HozzászólásElküldve:Tegnap, 23:25 
Offline
Tiszteletbeli
Avatar

Csatlakozott:2011.09.18. 13:01
Hozzászólások:4277
Megköszönt másnak: 55 alkalommal
Megköszönték neki: 519 alkalommal
Ha csak nem tervezel valami komolyabbat es csak egyedul csinalod akkor igazan nem eri meg. Nem fogsz se teljesitmeny javulast latni se romlast(vagy csak minimalis elteres) ugyan azt fogod csinalni attol fuggetlenul hogy egy pluginba(core-ba) van a mysql tobbsege ugyan ugy tobbi plugin hasznalni fogja azt.

Viszont ha letisztult dolgot akarsz es adsz hozza ujdonsagokat folyamatosan akkor talan megeri hogy nemkell ugyan azt 2x megirnod. Ergo nem kell ismeteld a dolgokat.

De ha mar core plugint akarnek akkor inkabb hanyagolnam mysql-t es mennek vagy Web API fele. (Van tobb modul ami alkalmas erre)

De ez kerdesek es pofonok.
Ha ugy akarod ugy csinalod ha nem nem.

_________________
Idk. Csak ugy funbooo.
Kép

Ők köszönték meg DeteCT0R nek ezt a hozzászólást: 8mTNNe (Ma, 09:29)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája:
HozzászólásElküldve:Tegnap, 23:29 
Offline
Jómunkásember
Avatar

Csatlakozott:2016.02.10. 12:46
Hozzászólások:429
Megköszönt másnak: 65 alkalommal
Megköszönték neki: 158 alkalommal
Szerintem csináld színesebbre legközelebb az üzenetet, az nagyobb teljesítményt ad.

De +1 arra amit DeteCT0R írt.

Ők köszönték meg Dooz nek ezt a hozzászólást: JohanCorn (Ma, 11:07)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája:
HozzászólásElküldve:Ma, 09:30 
Offline
Nagyúr
Avatar

Csatlakozott:2019.08.20. 18:19
Hozzászólások:514
Megköszönt másnak: 252 alkalommal
Megköszönték neki: 46 alkalommal
Dooz írta:
Szerintem csináld színesebbre legközelebb az üzenetet, az nagyobb teljesítményt ad.

De +1 arra amit DeteCT0R írt.


Próbáltam :geek:

_________________
► Spoiler mutatása


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája:
HozzászólásElküldve:Ma, 20:37 
Offline
Nagyúr
Avatar

Csatlakozott:2019.08.20. 18:19
Hozzászólások:514
Megköszönt másnak: 252 alkalommal
Megköszönték neki: 46 alkalommal
DeteCT0R írta:
Ha csak nem tervezel valami komolyabbat es csak egyedul csinalod akkor igazan nem eri meg. Nem fogsz se teljesitmeny javulast latni se romlast(vagy csak minimalis elteres) ugyan azt fogod csinalni attol fuggetlenul hogy egy pluginba(core-ba) van a mysql tobbsege ugyan ugy tobbi plugin hasznalni fogja azt.

Viszont ha letisztult dolgot akarsz es adsz hozza ujdonsagokat folyamatosan akkor talan megeri hogy nemkell ugyan azt 2x megirnod. Ergo nem kell ismeteld a dolgokat.

De ha mar core plugint akarnek akkor inkabb hanyagolnam mysql-t es mennek vagy Web API fele. (Van tobb modul ami alkalmas erre)

De ez kerdesek es pofonok.
Ha ugy akarod ugy csinalod ha nem nem.


A core a fő motor, ahhoz csatlakozik minden egyes plugin -> Navit-ek, és minimális SQL. (egy helyen van az adat és a mentés.)
s ez folyamatosan bővítés alatt, ls fejlesztés alatt áll.

Talán idővel túl sok lesz a plugin a szerveren, ami akár összeomláshoz is vezethet. Még minden tesztelés és folyamatos fejlesztés alatt áll.

Sajátosságát tekintve szerintem idővel egy komoly rendszer lesz, de még rengeteg idő szükséges hozzá. Nyilván soha nem lesz mindenki számára tökéletes rendszer. Számomra ez egy gondolat volt, amit elkezdtem megvalósítani, és tovább fogom bővíteni (ha majd lesz rá időm és energiám, miután visszaálltam dolgozni).

Idővel minden ki fog kerülni GitHubra, de ez még nem mostanában lesz, mivel a rendszer még sehol sem tart. Jelenleg körülbelül az alaprendszer 40%-a működik.

Fejlesztési szempontból kerül majd fel a GitHubra.

ki tudja mi vár még az 1.6 ra :?:

  1. mrk_core.sma
  2. mrk_skins.sma
  3. mrk_crates.sma
  4. mrk_drop.sma
  5. mrk_missions.sma
  6. mrk_market.sma
  7. mrk_shop.sma
  8. mrk_premium.sma
  9. mrk_settings.sma
  10. mrk_hud.sma
  11. mrk_chat.sma
  12. mrk_info.sma
  13. mrk_html.sma
  14. mrk_web.sma
  15. mrk_system.sma
  16. mrk_allsql.sma

_________________
► Spoiler mutatása


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája:
HozzászólásElküldve:Ma, 21:11 
Offline
Újonc

Csatlakozott:2022.02.12. 19:19
Hozzászólások:3
Megköszönt másnak: 11 alkalommal
Én ezt így csinálnám!

van egy mrk_core.amxx, ami: kezeli az SQL kapcsolatot (egy helyen),
regisztrálja a LANG fájlt,
ad nativokat a többi mrk_*.amxx pluginnek (pl. pont lekérés, mentés, stb.).

a többi plugin (skins, crates, missions, market, shop, stb.) nem nyit saját SQL kapcsolatot, hanem a core‑on keresztül dolgozik
minden szöveg (chat, HUD, menük, hibák) LANG fájlban van, nem a kódba.


Így:

átláthatóbb,
könnyebb bővíteni,
nem duplikálod a kódot,
az SQL is egy helyen van, nem 10 külön kapcsolat.


Alább egy minta, hogyan nézhet ki ez a gyakorlatban.

Lang: mrk_system.txt
  1. [hu]
  2. MRK_WELCOME = Üdv a MRK rendszerben!
  3. MRK_OPEN_MENU = Megnyitottad a MRK főmenüt.
  4. MRK_NO_PERMISSION = Ehhez a funkcióhoz nincs jogosultságod.
  5. MRK_MISSION_NEW = Új küldetés érhető el számodra!
  6. MRK_MARKET_INFO = A piacon új ajánlatok jelentek meg.
  7. MRK_SHOP_BOUGHT = Sikeresen megvásároltad: %s
  8. MRK_ERROR = Hiba történt, próbáld újra később.
  9. MRK_POINTS_INFO = Jelenlegi pontjaid: %d


mrk_core.sma (Core, SQL, Lang, Nativok)

  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <sqlx>
  4.  
  5. #define PLUGIN_NAME    "MRK Core"
  6. #define PLUGIN_VERSION "1.0"
  7. #define PLUGIN_AUTHOR  "Unknown"
  8.  
  9. // SQL adatok – ide írd a sajátod
  10. new const SQL_HOST[] = "localhost";
  11. new const SQL_USER[] = "user";
  12. new const SQL_PASS[] = "pass";
  13. new const SQL_DB[]   = "mrk_db";
  14.  
  15. new Handle:g_SqlTuple;
  16. new Handle:g_Sql;
  17.  
  18. // egyszerű példa: játékos pontok tárolása memóriában (SQL szinkronnal)
  19. new g_iPoints[33];
  20.  
  21. public plugin_init()
  22. {
  23.     register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
  24.  
  25.     // Lang fájl
  26.     register_dictionary("mrk_system.txt");
  27.  
  28.     // Parancs a főmenüre
  29.     register_clcmd("say /mrk", "cmdOpenMenu");
  30.  
  31.     // Nativok a moduloknak
  32.     register_native("mrk_get_points", "native_get_points");
  33.     register_native("mrk_set_points", "native_set_points");
  34.     register_native("mrk_add_points", "native_add_points");
  35. }
  36.  
  37. public plugin_cfg()
  38. {
  39.     // SQL tuple létrehozása
  40.     g_SqlTuple = SQL_MakeDbTuple(SQL_HOST, SQL_USER, SQL_PASS, SQL_DB);
  41.  
  42.     // Kapcsolódás
  43.     new szError[128], iError;
  44.     g_Sql = SQL_Connect(g_SqlTuple, iError, szError, charsmax(szError));
  45.  
  46.     if (g_Sql == Empty_Handle)
  47.     {
  48.         log_amx("[MRK] SQL connect hiba: %s", szError);
  49.     }
  50.     else
  51.     {
  52.         log_amx("[MRK] SQL kapcsolat létrejött.");
  53.         sql_create_tables();
  54.     }
  55. }
  56.  
  57. public plugin_end()
  58. {
  59.     if (g_Sql != Empty_Handle)
  60.     {
  61.         SQL_FreeHandle(g_Sql);
  62.     }
  63.     if (g_SqlTuple != Empty_Handle)
  64.     {
  65.         SQL_FreeHandle(g_SqlTuple);
  66.     }
  67. }
  68.  
  69. sql_create_tables()
  70. {
  71.     if (g_Sql == Empty_Handle)
  72.         return;
  73.  
  74.     new Handle:hQuery;
  75.     hQuery = SQL_PrepareQuery(g_Sql,
  76.         "CREATE TABLE IF NOT EXISTS mrk_players ( \
  77.            steamid VARCHAR(32) PRIMARY KEY, \
  78.            points INT DEFAULT 0 \
  79.        )"
  80.     );
  81.  
  82.     if (!SQL_Execute(hQuery))
  83.     {
  84.         new szError[128], iError;
  85.         iError = SQL_QueryError(hQuery, szError, charsmax(szError));
  86.         log_amx("[MRK] SQL tabla hiba (%d): %s", iError, szError);
  87.     }
  88.  
  89.     SQL_FreeHandle(hQuery);
  90. }
  91.  
  92. public client_authorized(id)
  93. {
  94.     load_player_data(id);
  95. }
  96.  
  97. public client_disconnect(id)
  98. {
  99.     save_player_data(id);
  100. }
  101.  
  102. load_player_data(id)
  103. {
  104.     if (g_Sql == Empty_Handle || !is_user_connected(id))
  105.         return;
  106.  
  107.     new szAuth[32];
  108.     get_user_authid(id, szAuth, charsmax(szAuth));
  109.  
  110.     new Handle:hQuery;
  111.     hQuery = SQL_PrepareQuery(g_Sql,
  112.         "SELECT points FROM mrk_players WHERE steamid = '%s'",
  113.         szAuth
  114.     );
  115.  
  116.     if (!SQL_Execute(hQuery))
  117.     {
  118.         new szError[128], iError;
  119.         iError = SQL_QueryError(hQuery, szError, charsmax(szError));
  120.         log_amx("[MRK] SQL select hiba (%d): %s", iError, szError);
  121.         SQL_FreeHandle(hQuery);
  122.         return;
  123.     }
  124.  
  125.     if (SQL_NumResults(hQuery) > 0)
  126.     {
  127.         g_iPoints[id] = SQL_ReadResult(hQuery, 0);
  128.     }
  129.     else
  130.     {
  131.         // nincs rekord, létrehozzuk
  132.         g_iPoints[id] = 0;
  133.         SQL_FreeHandle(hQuery);
  134.  
  135.         hQuery = SQL_PrepareQuery(g_Sql,
  136.             "INSERT INTO mrk_players (steamid, points) VALUES ('%s', %d)",
  137.             szAuth, g_iPoints[id]
  138.         );
  139.         SQL_Execute(hQuery);
  140.     }
  141.  
  142.     SQL_FreeHandle(hQuery);
  143. }
  144.  
  145. save_player_data(id)
  146. {
  147.     if (g_Sql == Empty_Handle)
  148.         return;
  149.  
  150.     new szAuth[32];
  151.     get_user_authid(id, szAuth, charsmax(szAuth));
  152.  
  153.     new Handle:hQuery;
  154.     hQuery = SQL_PrepareQuery(g_Sql,
  155.         "UPDATE mrk_players SET points = %d WHERE steamid = '%s'",
  156.         g_iPoints[id], szAuth
  157.     );
  158.  
  159.     if (!SQL_Execute(hQuery))
  160.     {
  161.         new szError[128], iError;
  162.         iError = SQL_QueryError(hQuery, szError, charsmax(szError));
  163.         log_amx("[MRK] SQL update hiba (%d): %s", iError, szError);
  164.     }
  165.  
  166.     SQL_FreeHandle(hQuery);
  167. }
  168.  
  169. public cmdOpenMenu(id)
  170. {
  171.     if (!is_user_connected(id))
  172.         return PLUGIN_HANDLED;
  173.  
  174.     client_print(id, print_chat, "%L", id, "MRK_OPEN_MENU");
  175.     show_main_menu(id);
  176.  
  177.     return PLUGIN_HANDLED;
  178. }
  179.  
  180. show_main_menu(id)
  181. {
  182.     new menu = menu_create("MRK Főmenü", "menu_handler");
  183.  
  184.     menu_additem(menu, "Küldetések", "1");
  185.     menu_additem(menu, "Piac", "2");
  186.     menu_additem(menu, "Pontjaim", "3");
  187.  
  188.     menu_display(id, menu);
  189. }
  190.  
  191. public menu_handler(id, menu, item)
  192. {
  193.     if (item == MENU_EXIT)
  194.     {
  195.         menu_destroy(menu);
  196.         return PLUGIN_HANDLED;
  197.     }
  198.  
  199.     new szData[6], szName[64], iAccess, iCallback;
  200.     menu_item_getinfo(menu, item, iAccess, szData, charsmax(szData), szName, charsmax(szName), iCallback);
  201.  
  202.     new key = str_to_num(szData);
  203.  
  204.     switch (key)
  205.     {
  206.         case 1:
  207.         {
  208.             // itt hívhatod a missions plugint, vagy csak parancsot
  209.             client_cmd(id, "say /mission");
  210.         }
  211.         case 2:
  212.         {
  213.             client_cmd(id, "say /market");
  214.         }
  215.         case 3:
  216.         {
  217.             client_print(id, print_chat, "%L", id, "MRK_POINTS_INFO", g_iPoints[id]);
  218.         }
  219.     }
  220.  
  221.     menu_destroy(menu);
  222.     return PLUGIN_HANDLED;
  223. }
  224.  
  225. // ===== Nativok modul pluginoknak =====
  226.  
  227. public native_get_points(plugin, params)
  228. {
  229.     new id = get_param(1);
  230.     if (id < 1 || id > 32)
  231.         return 0;
  232.  
  233.     return g_iPoints[id];
  234. }
  235.  
  236. public native_set_points(plugin, params)
  237. {
  238.     new id = get_param(1);
  239.     new value = get_param(2);
  240.  
  241.     if (id < 1 || id > 32)
  242.         return 0;
  243.  
  244.     g_iPoints[id] = value;
  245.     return 1;
  246. }
  247.  
  248. public native_add_points(plugin, params)
  249. {
  250.     new id = get_param(1);
  251.     new value = get_param(2);
  252.  
  253.     if (id < 1 || id > 32)
  254.         return 0;
  255.  
  256.     g_iPoints[id] += value;
  257.     return g_iPoints[id];
  258. }


mrk_mission.sma (Modul, Core, Nativ , Lang)

  1. #include <amxmodx>
  2.  
  3. native mrk_get_points(id);
  4. native mrk_add_points(id, value);
  5.  
  6. public plugin_init()
  7. {
  8.     register_plugin("MRK Missions", "1.0", "8mTNNe");
  9.     register_clcmd("say /mission", "cmdMission");
  10. }
  11.  
  12. public cmdMission(id)
  13. {
  14.     if (!is_user_connected(id))
  15.         return PLUGIN_HANDLED;
  16.  
  17.     // Példa: adunk neki 10 pontot, és kiírjuk
  18.     new newPoints = mrk_add_points(id, 10);
  19.  
  20.     client_print(id, print_chat, "%L", id, "MRK_MISSION_NEW");
  21.     client_print(id, print_chat, "%L", id, "MRK_POINTS_INFO", newPoints);
  22.  
  23.     return PLUGIN_HANDLED;
  24. }


mrk_market.sma Másik modul, ugyan azt a coret-t használja
  1. #include <amxmodx>
  2.  
  3. native mrk_get_points(id);
  4. native mrk_set_points(id, value);
  5.  
  6. public plugin_init()
  7. {
  8.     register_plugin("MRK Market", "1.0", "8mTNNe");
  9.     register_clcmd("say /market", "cmdMarket");
  10. }
  11.  
  12. public cmdMarket(id)
  13. {
  14.     if (!is_user_connected(id))
  15.         return PLUGIN_HANDLED;
  16.  
  17.     new points = mrk_get_points(id);
  18.  
  19.     if (points < 50)
  20.     {
  21.         client_print(id, print_chat, "%L", id, "MRK_NO_PERMISSION");
  22.         return PLUGIN_HANDLED;
  23.     }
  24.  
  25.     // levonunk 50 pontot
  26.     mrk_set_points(id, points - 50);
  27.  
  28.     client_print(id, print_chat, "%L", id, "MRK_MARKET_INFO");
  29.     client_print(id, print_chat, "%L", id, "MRK_POINTS_INFO", mrk_get_points(id));
  30.  
  31.     return PLUGIN_HANDLED;
  32. }


A Core kezeli a SQL-t, Langot, Nativokat a modulok nem nyitnak saját SQL kapcsolatot csak a Core-t hívják így mindeg a Lang fájlba

_________________
****


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája:
HozzászólásElküldve:Ma, 21:30 
Offline
Fanatikus
Avatar

Csatlakozott:2020.05.14. 11:32
Hozzászólások:165
Megköszönt másnak: 14 alkalommal
Megköszönték neki: 65 alkalommal
Valamiért kezdem azt érezni, hogy Cyborg és Csabika nem is igazi account, hanem az egyik llm csinálta mindkettőt egy társadalmi kísérlet gyanánt.

--

Csatlakozom a többiek válaszához. Teljesítmény szempontjából lényegtelen. Viszont személy szerint eddig az összes modomat szétszedtem, ha az adott komponens már pl. 500 soros kellett hogy legyen.

Az SQL-t 1 pluginba kezeltem mindegyiknél. Még csak a handle-t sem kellett átadnom (minden esetben), mert natívokkal oldottam meg:


Csatolmányok:
zm_sql_core.sma [8.84KiB]
Letöltve 1 alkalommal.

_________________
Zombie Mutation

Kép
Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája:
HozzászólásElküldve:Ma, 21:36 
Offline
Jómunkásember
Avatar

Csatlakozott:2019.11.03. 22:00
Hozzászólások:417
Megköszönt másnak: 40 alkalommal
Megköszönték neki: 33 alkalommal
DexoN írta:
Valamiért kezdem azt érezni, hogy Cyborg és Csabika nem is igazi account, hanem az egyik llm csinálta mindkettőt egy társadalmi kísérlet gyanánt.

--

Csatlakozom a többiek válaszához. Teljesítmény szempontjából lényegtelen. Viszont személy szerint eddig az összes modomat szétszedtem, ha az adott komponens már pl. 500 soros kellett hogy legyen.

Az SQL-t 1 pluginba kezeltem mindegyiknél. Még csak a handle-t sem kellett átadnom (minden esetben), mert natívokkal oldottam meg:


Már megint én vagyok a hunyó?

_________________
~ bigbrotherz.hu
~ BiG BrotherZ AWP


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája:
HozzászólásElküldve:Ma, 22:20 
Offline
Fanatikus
Avatar

Csatlakozott:2020.05.14. 11:32
Hozzászólások:165
Megköszönt másnak: 14 alkalommal
Megköszönték neki: 65 alkalommal
Voltam fent valamelyik nap. Tök jó.

Szerintem még egy hangeffekt feldobná (mondjuk amit az adott csapat hall csak - pl. a Half Life os "healelős" sfx), illetve ha a small medkit a nagyobb animációját használná, csak gyorsítva :-P

Haverokkal majd felnézünk ismét ha kész lesztek. :thumbsup:
kovakovi2000 írta:
https://www.youtube.com/watch?v=UqEVXENGiR0
Egyedi heal/medkit, a kezet is lehet lecserélem majd mert a texture amit csináltam rá nem tetszik.

_________________
Zombie Mutation

Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [39359 hozzászólás ]  OldalElőző139323933393439353936


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 38 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole