Offline |
|
|
Csatlakozott:2016.03.02. 21:12 Hozzászólások:138 Megköszönt másnak: 20 alkalommal Megköszönték neki: 6 alkalommal
|
Nexd írta: Szia, én inkább így közelíteném meg: (A "szekcionev" részt nyílván cseréld le 1 olyanra ami szerepel a databases.cfg fájlodban) Persze kell rajta módosítani, mert nem tudom, hogy mit is akarsz csinálni PONTOSAN #include <sourcemod> Database db; public void OnConfigsExecuted() { char _error[255]; db = SQL_Connect("szekcionev", true, _error, sizeof(_error)); //Azért OnConfigsExecuted() forward mert általában 1 convarra szoktam rakni azt, hogy melyik szekcióhoz csatlakozik a plugin, ha akarod átrakhatod OnPluginStart()-ra is, vagy ahova gondolod } public void OnClientPostAdminCheck(int client) { char szSteamId[20]; GetClientAuthId(client, AuthId_Steam2, szSteamId, sizeof(szSteamId)); char Query[128]; Format(Query, sizeof(Query), "SELECT `war` FROM `sqlwar` WHERE `sqlwar`.`steamid` = '%s';", szSteamId); SQL_TQuery(db, LogClientWar, Query, client); //Az SQL_Query és az SQL_TQuery között az a különbség, hogy a TQuery nem instant történik meg hanem 1 picit később (elenyésző) és 1 külön callbackban kell feldolgozni a kapott adatot, viszont egymás után következnek a dolgok, így nem lesz belőle semmilyen probléma } public void LogClientWar(Handle owner, Handle hndl, const char[] error, int client) { if(!IsValidClient(client)) return; //Ha már nincs fent(vagy bot, esetleg GoTV) akkor nem csinálunk semmit int war; char warszoveg[10]; //Nemtudom milyen adat szóval lehet nem lesz jó a méret while(SQL_FetchRow(hndl)) { war = SQL_FetchInt(hndl, 0); //Ha minden igaz 1 szám adatról van szó ftwar[client] = true; PlayerWar[client] = war; } IntToString(war, warszoveg, sizeof(warszoveg)); //Átalakítjuk a számot szöveggé, bár egyenlőre nem tudom miért. Logba a számokat is betudod illeszteni %i paraméterként LogToFile("addons/sourcemod/logs/warningplayers.cfg", "____LOGOL_____"); //Ennek nemigazán értem a jelentőségét, és a warszoveg-el sem kezdesz semmit hiába alakítottuk szöveggé, tehát ezen módosítanod kell } public void SQLHibaKereso(Handle owner, Handle hndl, const char[] error, any data) { if(!StrEqual(error, NULL_STRING)) LogError(error); } static stock bool IsValidClient(int client) //Nem kötelező, csak én így szoktam ellenőrizni, így nem lesz invalid client index, stb hiba { if(client <= 0) return false; if(client > MaxClients) return false; if(!IsClientConnected(client)) return false; if(IsFakeClient(client)) return false; if(IsClientSourceTV(client)) return false; return IsClientInGame(client); }
Azt említetted, hogy szám adatot vársz, és azt akarod átalakítani szövegre (Amit egyenlőre nem értek, hogy miért) SQL_FetchString(queryH, 0, war, sizeof(war)); //ezzel csak szöveget tudsz lekérni, ehelyett a(z) int a = SQL_FetchInt(queryH, 0); //lenne a helyes
GetClientAuthString() helyett pedig mindig GetClientAuthId()-t használj Legközelebb részletezhetnéd azt is, hogy mi nem sikerült pontosan mert a LogToFile részt szerintem be sem fejezted, az is lehet hogy nem fordul le a kód(nem néztem) Nem tudom milyen gyakran írsz kódokat de ha eléggé akkor inkább szokj át a Transitional Syntaxra ( https://wiki.alliedmods.net/SourcePawn_Transitional_Syntax) mert sokkal átláthatóbb, és jobb is. Az egész wiki oldalt is frissítették az újra ha esetleg gondod lenne vele ( https://wiki.alliedmods.net/Introduction_to_SourceMod_Plugins) Persze az alap pluginokra ne "jó példa"ként tekints. Pl: new String:query[150]; helyett char query[150]; new Handle:queryH helyett Handle queryH; if(queryH != INVALID_HANDLE) {} helyett if(queryH != null) {} public OnClientAuthorized(client) helyett public void OnClientAuthorized(int client)
Nagyon Szépen köszönöm, ez nagyon nagy segitség, főelg hogy így el is magyaráztad! Jele pillanatban valamennyire sikerült, amit csináltam, de viszont ha lesz időm és átnémen, és nagy valószinüleg át variálom az enyémet! Ment a Pacsi EDIT: Sőt, ide be irom az egész forráskódot, mivel már kezdem feladni vele a harcot, mert nagyon nagyon nem értem már, hogy mi rossz benne, (de szerintem MINDEN IS), néha több 100,1000,10000 pontot is fel küld a 'war' Részre, ls fogalmam sincs hogy mi lehet már a problémája az egész dolognak... Ha esetleg valakinek van ideje, illetve idegzete hogy segítsen benne, nagyon hálás lennék!!! /* Plugin Template generated by Pawn Studio */ #include <sourcemod> new String:Error[100]; new Handle:DB = INVALID_HANDLE; new String:PlayerWar[32]; new bool:ftwar[32]; public Plugin:myinfo = { name = "New Plugin", author = "oreosshake", description = "<- Description ->", version = "1.0", url = "<- URL ->" } public OnPluginStart() { DB = SQL_Connect("BanSystem", true, Error, sizeof(Error)); if(DB == INVALID_HANDLE) { PrintToServer("Nem Tud csatlakozni a MySQL-hez: %s", Error); CloseHandle(DB); } else { PrintToServer("Sikeresen Csatlakozott a MySQL Szerverhez!"); } RegAdminCmd("sm_sqlwar", commandwarp, ADMFLAG_BAN, "[SM] Használata: sm_sqlwar <célpont>"); RegAdminCmd("sqlwar", commandwarp, ADMFLAG_BAN, "[SM] Használata: !sqlwar <célpont>"); RegAdminCmd("sm_sqlunwar", commandunwarp, ADMFLAG_UNBAN, "[SM] Használata: sm_sqlunwar <célpont>"); } public Action:commandunwarp(client, args) { if(args < 1) { ReplyToCommand(client, "[SM] Kerlek ird be a Célpontot!"); return Plugin_Handled; } new String:arg1[32]; GetCmdArg(1, arg1, sizeof(arg1)); new Target = FindTarget(client, arg1); if(Target == -1) { ReplyToCommand(client, "[SM] Nincs ilyen jatekékos!"); return Plugin_Handled; } new String:name[32], String:steamid[32], String:adminname[32]; GetClientName(Target, name, 32); GetClientName(client, adminname, 32); GetClientAuthString(Target, steamid, 32); new String:query[200]; Format(query, sizeof(query), "DELETE FROM sqlwar WHERE steamid='%s'", steamid); new Handle:queryH = SQL_Query(DB, query); PrintToChatAll("\x03[Premium.*] \x0C%s -nek \x05Törölve lettek a \x0CFigyelmeztetései \x08%s által.", name, adminname); } public Action:commandwarp(client, args) { if(args < 1) { ReplyToCommand(client, "[SM] Kerlek ird be a Célpontot!"); return Plugin_Handled; } new String:arg1[32]; GetCmdArg(1, arg1, sizeof(arg1)); new Target = FindTarget(client, arg1); if(Target == -1) { ReplyToCommand(client, "[SM] Nincs ilyen jatekékos!"); return Plugin_Handled; } new String:name[32], String:steamid[32], String:adminname[32]; GetClientName(Target, name, 32); GetClientName(client, adminname, 32); GetClientAuthString(Target, steamid, 32); PlayerWar[Target] += 1; new String:query[300]; if(ftwar[Target] == true) { Format(query, 300, "UPDATE sqlwar SET name = '%s', war = '%i', admin = '%s' WHERE steamid = '%s'", name, PlayerWar[Target], adminname, steamid); LogToFile("addons/sourcemod/logs/warningplayers.cfg", "UPDATE MEGTORTÉNT. |%s| |WAR: %i|", name, PlayerWar[Target]); } else if(ftwar[Target] == false) { Format(query, 300, "INSERT INTO sqlwar (name, steamid, war, admin) VALUES ('%s', '%s','%i', '%s')", name, steamid, PlayerWar[Target], adminname); LogToFile("addons/sourcemod/logs/warningplayers.cfg", "UPDATE MEGTORTÉNT. |%s| |WAR: %i|", name, PlayerWar[Target]); } new Handle:queryH = SQL_Query(DB, query); if(DB != INVALID_HANDLE) { ReplyToCommand(client, "[SM] A Kliens sikeresen figyelmeztetve lett! Neve: %s, SteamID: %s", name, steamid); PrintToChat(client, "[SM] A Kliens sikeresen figyelmeztetve lett! Neve: %s, SteamID: %s", name, steamid); LogToFile("addons/sourcemod/logs/warningplayers.cfg", "%s figyelmeztetést kapott, ADMIN: %s, Figy.Érték: %i", name, adminname, PlayerWar[Target]); if(PlayerWar[Target] == 1) { BanClient(Target, 10, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |10 perc pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |10 perc pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|10 Perces Ban * 1-es Figyelmeztetés|>", name, adminname); } else if(PlayerWar[Target] == 2) { BanClient(Target, 30, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |30 erc pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |30 perc pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|30 Perces Ban * 2-es Figyelmeztetés|>", name, adminname); } else if(PlayerWar[Target] == 3) { BanClient(Target, 60, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |1 óra pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |1 óra pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|60 Perces Ban * 3-es Figyelmeztetés|>", name, adminname); } else if(PlayerWar[Target] == 4) { BanClient(Target, 120, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |2 óra pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |2 óra pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|120 Perces Ban * 4-es Figyelmeztetés|>", name, adminname); } else if(PlayerWar[Target] == 5) { BanClient(Target, 300, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |5 óra pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |5 óra pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|300 Perces Ban * 5-es Figyelmeztetés|>", name, adminname); } else if(PlayerWar[Target] == 6) { BanClient(Target, 1440, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |1 nap pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |1 nap pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|1440 Perces Ban * 6-es Figyelmeztetés|>", name, adminname); } else if(PlayerWar[Target] == 7) { BanClient(Target, 4320, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |3 nap pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |3 nap pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|4320 Perces Ban * 7-es Figyelmeztetés|>", name, adminname); } else if(PlayerWar[Target] == 8) { BanClient(Target, 10080, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |1 hét pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |1 hét pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|10080 Perces Ban * 8-es Figyelmeztetés|>", name, adminname); } else if(PlayerWar[Target] >= 9) { BanClient(Target, 20160, BANFLAG_AUTO, "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |2 hét pihenőt kaptál|", "Megsértetted a szabályzatot, figyelmeztetésben részesültél, ezért |2 hét pihenőt kaptál|"); PrintToChatAll("\x03[Premium.*] \x0C%s \x07Figyelmeztetve lett \x0C%s által \x04<|20160 Perces Ban * Legmagasabb Figyelmeztetés|>", name, adminname); } } else { SQL_GetError(DB, Error, sizeof(Error)); ReplyToCommand(client, "[SM] Nem sikerult figyelmeztetni MySql hiba: %s", Error); } return Plugin_Handled; } public void OnClientAuthorized(int client) { new String:steamid[32]; GetClientAuthString(client, steamid, 32); new String:query[150]; Format(query, sizeof(query), "SELECT war FROM sqlwar WHERE steamid='%s'", steamid); new Handle:queryH = SQL_Query(DB, query); if(DB != INVALID_HANDLE) { if(SQL_FetchRow(queryH)) { PlayerWar[client] = SQL_FetchInt(queryH, 0); ftwar[client] = true; } } else { SQL_GetError(DB, Error, sizeof(Error)); PrintToServer("[SM] Nem sikerult ellenorizni a klienst! MySql hiba: %s", Error); } }
|
|