Recommended Posts

Siemka, ostatnio edytowałem sobie plik od sourcebans'a sbpp_main i notatke po dostaniu bana. Aktualnie wygląda tak:

Spoiler

WdIr9Ts.jpg

Problem tkwi w czasie bana :/ Na razie zrobiłem tak, bo nie mam pojęcia już jak sformatować czas do konkretnej daty czyli: dzien-miesiąc-rok - godziny-minuty

 

Kod Aktualny:

KickClient(client, "<font color='#ffb426'>%s</font> - Zostałeś Zbanowany!\nPowód Bana: %s\nCzas Bana: %d Minut\n\nOdwołania składamy na forum!", WebsiteAddress, Reason, g_BanTime[client]);

A tak jak wspomniałem chciałbym ten czas sformatować do konkretnej daty zakończenia tylko już nie wiem jak :/

char enddate[32];
FormatTime(enddate, sizeof(enddate), "%d-%m-%Y %H:%M", NIE WIEM CO TU JUZ WPISAC ZEBY BYLO DOBRZE);

Różne rzeczy tam wpisywałem lecz zawsze kończyło się to tym, że po daniu bana na 1 minute była data zakończenia 01.01.1970 - 01:01

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dalej nie wiem jak to zrobić :/

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Musisz pobrać z bazy danych kolumnę "ends". Wtedy formatujesz ją za pomocą funkcji, którą wysłałeś:

 

char enddate[32];
FormatTime(enddate, sizeof(enddate), "%d-%m-%Y %H:%M", kolumna_ends);

 

 

I będziesz mógł wtedy spokojnie wyświetlić datę końca bana:

KickClient(client, "Ban kończy się: %s", enddate);

 

 

albo:

 

float godziny = float(kolumna_ends - GetTime()) / 3600.0;

KickClient(client, "Ban kończy się za: %1.2f godzin", godziny);

 

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja i tak zawsze coś źle zrobie: 

 error 130: cannot coerce functions to values
public kolumna_ends() 
{
	decl String:Query[256];
	FormatEx(Query, sizeof(Query), "SELECT bid FROM %s_bans WHERE (length = '0' OR ends > UNIX_TIMESTAMP())", DatabasePrefix);
}

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dalej nie mam pojęcia jak to ogarnąć żeby nie było erroru :/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dobra mniej wiecej ogarnalem tylko teraz zamiast pokazywac sie data zakonczenia pokazuje sie data rozpoczecia :/

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
char buffer[256];
	Format(buffer, sizeof(buffer), "SELECT * FROM %s_bans WHERE (ends > UNIX_TIMESTAMP())", DatabasePrefix);
	FormatTime(buffer, sizeof(buffer), "%d-%m-%Y %H:%M");

	// Kick player
	if (GetClientUserId(client) == UserId)
		KickClient(client, "<font color='#ffb426'>%s</font> - Zostałeś Zbanowany!\nPowód Bana: %s\nKoniec Bana: %s\n\nOdwołania składamy na forum!", WebsiteAddress, Reason, buffer);

zrobiłem tak i pokazuje się data rozpoczęcia bana a nie zakończenia :/

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
g_BanTime[client]

Rozumiem to jest czas bana w minutach?

 

W takim wypadku, zamieniasz na sekundy dodajesz do aktualnej daty w UNIXTIME i formatujesz:

char BanEnd[64];
FormatTime(BanEnd, sizeof(BanEnd), "%d-%m-%Y %H:%M", (GetTime() + g_BanTime * 60));

/* ... */

KickClient(client, "<font color='#ffb426'>%s</font> - Zostałeś Zbanowany!\nPowód Bana: %s\nKoniec Bana: %s\n\nOdwołania składamy na forum!", WebsiteAddress, Reason, BanEnd);


 

  • Like 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zamiast

FormatTime(BanEnd, sizeof(BanEnd), "%d-%m-%Y %H:%M", (GetTime() + g_BanTime * 60));

to

FormatTime(BanEnd, sizeof(BanEnd), "%d-%m-%Y %H:%M", (GetTime() + g_BanTime[client] + time * 60));

 

Chcemy pokazać koniec bana, a nie jego początek

  • Thanks 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)
15 godzin temu, Qesik napisał:

FormatTime(BanEnd, sizeof(BanEnd), "%d-%m-%Y %H:%M", (GetTime() + g_BanTime[client] + time * 60));

Trzeba było tak odrazu ja robiłem w ten sposób:

 

FormatTime(BanEnd, sizeof(BanEnd), "%d-%m-%Y %H:%M", g_BanTime[client] + time * 60));

 

i godzina sie zmieniala ale rok był 1970 :D Brakowało tego GetTime()

 

Temat do zamkniecia. Pomoc zostala udzielona :D

Edytowano przez sdasdas

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)
9 godzin temu, karakantoziomal napisał:

@sdasdas podrzuciłbyś może swój plik sbpp_main.sp? 

No nie wiem nie wiem :)

 

Edytowano przez sdasdas
  • Thanks 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No wlasnie nie doczytalem, że sbpp main, a nie wiem czy podesle bo jednak jest to coś co wyróżnia się i tylko niewiele osób ma tak to zodyfikowane, bo nie każdy potrafi :) Ja miałem problem z dobrym formatem czasu, który jest podany wyżej w postach.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!

Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.

Zaloguj się


  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

  • Podobna zawartość

    • Przez szogun
      Witjacie
      Posiadam pierwszy raz w życiu owy problem z sourcebansem po dodaniu serwera do niego.
       
      Pierwszy problem że czysty serwer z mm i sm oraz wgrany sourcebansem nie dodał się automatycznie.
      Drugi problem występuje po dodaniu serwera w sourcebansie ręcznie, w zakładce serwer sypie błędem
      Error: the XML response that was returned from the server is invalid. Received: 0/15]]>]]>de_dust2$('mapimg_3').setProperty('src', 'images/maps/de_dust2.jpg').setProperty('alt', 'de_dust2').setProperty('title', 'de_dust2');$('sinfo_3').setStyle('display', 'none');$('noplayer_3').setStyle('display', 'block');$('serverwindow_3').setStyle('height', '64px');  
    • Przez IgorSus
      Witam.
      Mam problem z SourceBans (serwer na silniku SourceMod CS:GO) jest on taki że jak dodaje serwer do SB to jest napisane takie coś Screen.
      Prosiłbym o pomoc
      EDIT 1: Wszystkie dane są wprowadzone poprawnie
    • Przez Wojciech Krupa
      witam nwm o co chodzi 
      Ktoś coś pomoże ?
    • Przez Darknes
      Potrzebuje zmodyfikować lekko plugin tak aby nie gryzł się z sourcebansem.
      Problem polega na tym że gdy dodam rezerwacje slota do pliku, ustawia on flagę ADMFLAG_RESERVATION w momencie gdy korzystam z sourcebansa osoba, która ma nadane prawa przez niego zostają nadpisane i w efekcie końcowym dana osoba posiada tylko flagę ADMFLAG_RESERVATION
       
      #pragma semicolon 1 #include <sourcemod> #include <adt_array> Handle sm_admin_slots; Handle Arr_SteamIDs = INVALID_HANDLE; Handle fSteamIDList = INVALID_HANDLE; char steamIDlist[PLATFORM_MAX_PATH]; public Plugin myinfo = { name = "Client limiter", author = "Wilk", description = "Don't allow clients to connect if the server is full (supporting reserved slots)", version = "0.6.1", url = "http://hejk.pl" }; public OnPluginStart() { sm_admin_slots = CreateConVar("sm_admin_slots", "0", "number of reserved slots", FCVAR_NOTIFY, true, 0.0); BuildPath(Path_SM, steamIDlist, sizeof(steamIDlist), "configs/admin_slots_v2.txt"); LoadSteamIDList(); } public OnClientPostAdminCheck(client) { //Temporary flags for non-admin users found in the admin_slots_v2.txt file char auth[32]; GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)); if (FindStringInArray(Arr_SteamIDs, auth) != -1) { SetUserFlagBits(client, ADMFLAG_RESERVATION); } //Reserved slots mechanism int limit = GetMaxHumanPlayers(); if (GetClientCount(false) > (limit - GetConVarInt(sm_admin_slots))) { if (hasReservedSlotAccess(GetUserFlagBits(client))) { char playername[50]; GetClientName(client, playername, 49); LogMessage("player %s connected to a reserved slot", playername); if (GetClientCount(false) > limit) { CreateTimer(0.1, OnTimedKickForReject, GetClientUserId(client)); } } else { CreateTimer(0.1, OnTimedKickForReject, GetClientUserId(client)); } } } public Action OnTimedKickForReject(Handle timer, any userid) { int client = GetClientOfUserId(userid); if (!client || !IsClientInGame(client)) { return Plugin_Handled; } char sPlayername[50], sPlayerid[50]; GetClientName(client, sPlayername, 49); GetClientAuthId(client, AuthId_Steam2, sPlayerid, 49); int iClientsingame = GetClientCount(false); int iLimit = GetMaxHumanPlayers(); LogMessage("kicking rejected player %s<%s> - [%d/%d] players", sPlayername, sPlayerid, iClientsingame, iLimit); KickClient(client, "Serwer jest pelny. Zakup rezerwacje slota na "); return Plugin_Handled; } // return true if this user is allowed to connect to a reserved slot bool hasReservedSlotAccess(const userFlags) { // admin flag based if (userFlags & ADMFLAG_ROOT || userFlags & ADMFLAG_RESERVATION) { return true; } else { return false; } } LoadSteamIDList() { if (FileExists(steamIDlist, false)) { fSteamIDList = OpenFile(steamIDlist, "rt"); } else { fSteamIDList = OpenFile(steamIDlist, "at+"); LogMessage("Created a config file at the file path: %s", steamIDlist); } if (fSteamIDList == INVALID_HANDLE) LogMessage("Error - unable to load or create file: %s", steamIDlist); Arr_SteamIDs = CreateArray(256); char sReadBuffer[256]; int len; while (!IsEndOfFile(fSteamIDList) && ReadFileLine(fSteamIDList, sReadBuffer, sizeof(sReadBuffer))) { if(sReadBuffer[0] == '/' || IsCharSpace(sReadBuffer[0])) continue; ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\n", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\r", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\t", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), " ", ""); // Support for comments on end of line len = strlen(sReadBuffer); for(new i; i < len; i++) { if(sReadBuffer[i] == ' ' || sReadBuffer[i] == '/') { sReadBuffer[i] = '\0'; break; } } //LogMessage("Pushing %s to Arr_SteamIDs", sReadBuffer); PushArrayString(Arr_SteamIDs, sReadBuffer); } //LogMessage("Reached EOF on %s", steamIDlist); CloseHandle(fSteamIDList); }