szogun Napisano 8 Sierpnia 2019 Hejka, pomagając wczoraj w jednym z wątków zauważyłem że w kodzie pluginu dodaje mi coś cyfrę -1 pod ilością kredytów #pragma semicolon 1 #include <sourcemod> #include <cstrike> #include <sdktools> #include <clientprefs> #include <store> public Plugin myinfo = { name = "HUDv2", author = "xSLOW", description = "Server Hud", version = "1.4" }; enum { RED = 0, GREEN, BLUE } ConVar g_cvarMessage1; ConVar g_cvarMessage2; ConVar g_cvarMessage3; ConVar g_cvarSlots; ConVar g_cvarHUDColors; Handle g_hHUDv2Cookie; bool g_bIsHudEnabled[MAXPLAYERS + 1]; int g_iHUDColors[3]; public void OnPluginStart() { g_hHUDv2Cookie = RegClientCookie("HudCookie_V2", "HudCookie_V2", CookieAccess_Protected); g_cvarMessage1 = CreateConVar("sm_hud_message1", "Forum: OneFrag.pl", "Top-Left first message", FCVAR_NOTIFY); g_cvarMessage2 = CreateConVar("sm_hud_message2", "TS3: OneFrag.pl", "Top-Left second message", FCVAR_NOTIFY); g_cvarMessage3 = CreateConVar("sm_hud_message3", "Wpisz /sklepsms aby kupic Vipa", "Top-Mid third message", FCVAR_NOTIFY); g_cvarSlots = CreateConVar("sm_hud_slots", "13", "Number of server's slots", FCVAR_NOTIFY); g_cvarHUDColors = CreateConVar("sm_hud_rgb", "230,57,0", "RGB of the text. You can get more colors from https://www.hexcolortool.com/", FCVAR_NOTIFY); AutoExecConfig(true, "HUDv2"); UpdateHUDColor(); g_cvarHUDColors.AddChangeHook(cvarChanged_HUDColor); RegConsoleCmd("hud", Command_hud); } public void OnClientPutInServer(int client) { g_bIsHudEnabled[client] = true; char buffer[64]; GetClientCookie(client, g_hHUDv2Cookie, buffer, sizeof(buffer)); if(StrEqual(buffer,"0")) g_bIsHudEnabled[client] = false; CreateTimer(1.0, CreditsTimer, GetClientUserId(client), TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE); } public void cvarChanged_HUDColor(ConVar convar, const char[] oldValue, const char[] newValue) { UpdateHUDColor(); } public Action Command_hud(int client, int args) { if(g_bIsHudEnabled[client]) { PrintToChat(client, " ★ \x02HUD pomyslnie wylaczony"); g_bIsHudEnabled[client] = false; SetClientCookie(client, g_hHUDv2Cookie, "0"); } else { PrintToChat(client, " ★ \x04HUD pomyslnie wlaczony"); g_bIsHudEnabled[client] = true; SetClientCookie(client, g_hHUDv2Cookie, "1"); } } public Action CreditsTimer(Handle timer, any userid) { int client = GetClientOfUserId(userid); int credits = Store_GetClientCredits(client); int clientCount = 0, iTimeleft; char sTime[64], szTime[30], iMessage1[32], iMessage2[32], iMessage3[32], MapTimeLeft[128]; for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && !IsFakeClient(i)) ++clientCount; } g_cvarMessage1.GetString(iMessage1, sizeof(iMessage1)); g_cvarMessage2.GetString(iMessage2, sizeof(iMessage2)); g_cvarMessage3.GetString(iMessage3, sizeof(iMessage3)); GetMapTimeLeft(iTimeleft); FormatTime(szTime, sizeof(szTime), "%H:%M:%S", GetTime()); FormatTime(sTime, sizeof(sTime), "%M:%S", iTimeleft); for(int i = 1; i <= MaxClients; i++) { if(g_bIsHudEnabled[i] && IsValidClient(i)) { char iBuffer[1024]; if(!(iTimeleft > 0)) Format(MapTimeLeft,sizeof(MapTimeLeft), "Last Round"); else Format(MapTimeLeft,sizeof(MapTimeLeft), "%s", sTime); Format(iBuffer, sizeof(iBuffer),"%s\n%s\nGraczy: %d/%d\nPozostalo: %s\nGodzina: %s\nKredyty: %i",iMessage1, iMessage2, clientCount, g_cvarSlots.IntValue, MapTimeLeft, szTime, credits); SetHudTextParams(0.0, 0.0, 0.9, g_iHUDColors[RED], g_iHUDColors[GREEN], g_iHUDColors[BLUE], 255, 0, 0.0, 0.0, 0.0); ShowHudText(i, -1, iBuffer); SetHudTextParams(-1.0, 0.075, 0.9, g_iHUDColors[RED], g_iHUDColors[GREEN], g_iHUDColors[BLUE], 255, 0, 0.0, 0.0, 0.0); ShowHudText(i, -1, iMessage3); } } } stock bool IsValidClient(client, bool nobots = true) { if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) { return false; } return IsClientInGame(client); } void UpdateHUDColor() { char buffer[16]; g_cvarHUDColors.GetString(buffer, sizeof(buffer)); char buffer2[3][4]; ExplodeString(buffer, ",", buffer2, sizeof(buffer2), sizeof(buffer2[])); for (int i = 0; i < 3; i++) { g_iHUDColors[i] = StringToInt(buffer2[i]); } } Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde Napisano 8 Sierpnia 2019 Jak dla mnie wszystko spoko, screen problemu w grze? Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
szogun Napisano 8 Sierpnia 2019 (edytowane) No już dodaje, jest to ułamek sekundy kiedy można ją wychwycić, następnie tą liczbę przysłania ilość kredytów Edytowane 8 Sierpnia 2019 przez szogun Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde 1 Napisano 8 Sierpnia 2019 Okej, więc chodzi o to, że masz timer ustawiony na TIMER_REPEAT. I nie wyłączasz go nigdzie. To oznacza, że jeśli na serwerze będzie jedna osoba, wyjdzie, przyjdzie następna, wyjdzie, przyjdzie następna to w sumie będzie miała 3 HUDy na raz się jej wyświetlające. Więc raz przed wczytaniem danych może jej się wyświetlić -1, a po wczytaniu wyświetli się prawidłowo. Albo kasuj HUD po wyjściu gracza, albo ustaw HUD dla każdego w OnPluginStart Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
szogun Napisano 17 Sierpnia 2019 hmm... przybliżysz mi koncepcje usuwania tego hudu bo jak mówiłeś, gracz posiada powielony hud np. pod liczbą kredytów widzi kogoś innego liczbę Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde 1 Napisano 9 Października 2019 No to jeszcze raz @szogun: W OnClientPutInServer masz CreateTimer, który dla tego klienta który właśnie wszedł, włącza HUD, który wyświetla się co 1 sekundę. Ten timer jest z flagą TIMER_REPEAT. Aby go usunąć, musisz najpierw przetrzymywać Handle, uchwyt, zwracany z funkcji CreateTimer, który będzie inny dla każdego gracza. W funkcji w której gracz wychodzi z serwera, musisz usunąć ten timer poprzez Handle. Na pewno będzie tutaj użyteczny mój poradnik: Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde Napisano 10 Października 2019 Wiadomość wygenerowana automatycznie Temat został zamknięty. Powodem jest całkowite rozwiązanie problemu zawartego w temacie. Jeśli się z tym nie zgadzasz, zaraportuj ten post z prośbą o ponowne otwarcie i kontynuację dyskusji. Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach