Vasto_Lorde 3 Napisano 30 Lipca 2019 Przed tłumaczeniem sprawdź czy plugin nie ma pliku *.phrases.txt odpowiadającego za tłumaczenie tekstów. Poradnik na temat tłumaczenia w pliku phrases.txt znajdziesz tutajHej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!. W przypadku, gdy plugin nie posiada tego pliku, a wyświetla graczowi jakieś informacje, będzie go trzeba przetłumaczyć. Można to zrobić na dwa sposoby. Pierwszy, którego tutaj nie omówię, to przerobienie pluginu tak, by korzystał z pliku phrases.txt. Drugi, to na sztywno zmienienie fraz wyświetlanych w innym języku na frazy w naszym języku. 1. Plugin Informacje o SerwerzeHej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!. Linia 24: CPrintToChat(client, "{darkred}Server name :{default} %s", sBuffer) Linia 37: CPrintToChat(client, "{darkred}Server IP: {default}%d.%d.%d.%d:%d", pieces[0], pieces[1], pieces[2], pieces[3], port) Linia 72: CPrintToChat(client, "{DarkRed}Timeleft:{default} %s", sBuffer) Interesują nas zaznaczone na kolorowo frazy zamieszczone w cytacie. Wynik końcowy będzie następujący: Linia 24: CPrintToChat(client, "{darkred}Nazwa serwera :{default} %s", sBuffer) Linia 37: CPrintToChat(client, "{darkred}IP serwera: {default}%d.%d.%d.%d:%d", pieces[0], pieces[1], pieces[2], pieces[3], port) Linia 72: CPrintToChat(client, "{DarkRed}Czas do końca mapy:{default} %s", sBuffer) Jak można zauważyć, zmieniły się tylko angielskie wyrazy. Specjalne znaki takie jak {darkred} czy %d zostawiamy w spokoju, są to informacje potrzebne pluginowi w jaki sposób ma wyświetlić wiadomość. Po zmianach plik zapisujemy kompilujemy i wrzucamy na serwer 2. Plugin Block sm pluginsHej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Linia 34: SetFailState("Failed to find offset for ClientPrintf"); Linia 133: PrintToConsole(client, "\t\tNo chance\n"); Linia 75: BuildPath(Path_SM, g_sLogs, sizeof(g_sLogs), "logs/sbp-%s.log", sDate); Linia 95: else if(StrContains(sBuffer, "To see more, type \"sm plugins") != -1) Robimy właściwie to samo, uważając na znaki specjalne \t. Natomiast w liniach 75 oraz 95 NIC nie tłumaczymy! Musimy uważać tłumacząc w ten sposób pluginy, gdyż niekiedy angielski tekst w cytatach nie wyświetla się użytkownikom a jego zmiana może spowodować zepsucie pluginu! Wynik końcowy: Linia 34: SetFailState("Nie znaleziono offsetu dla ClientPrintf"); Linia 133: PrintToConsole(client, "\t\tBrak szans\n"); Linia 75: BuildPath(Path_SM, g_sLogs, sizeof(g_sLogs), "logs/sbp-%s.log", sDate); Linia 95: else if(StrContains(sBuffer, "To see more, type \"sm plugins") != -1) Plik zapisujemy, kompilujemy i wrzucamy na serwer Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Shadow Napisano 1 Sierpnia 2019 a co jeśli mam plugin który nie piszę na czacie tylko w hudzie? Spoiler #pragma semicolon 1 #pragma newdecls required #include <sourcemod> #include <cstrike> #include <sdktools> #include <clientprefs> 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", "MESSAGE 1", "Top-Left first message", FCVAR_NOTIFY); g_cvarMessage2 = CreateConVar("sm_hud_message2", "MESSAGE 2", "Top-Left second message", FCVAR_NOTIFY); g_cvarMessage3 = CreateConVar("sm_hud_message3", "[ MESSAGE 3 ]", "Top-Mid third message", FCVAR_NOTIFY); g_cvarSlots = CreateConVar("sm_hud_slots", "32", "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/",Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! FCVAR_NOTIFY); AutoExecConfig(true, "HUDv2"); UpdateHUDColor(); g_cvarHUDColors.AddChangeHook(cvarChanged_HUDColor); CreateTimer(1.0, TIMER, _, TIMER_REPEAT); 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; } 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 is now off"); g_bIsHudEnabled[client] = false; SetClientCookie(client, g_hHUDv2Cookie, "0"); } else { PrintToChat(client, " ★ \x04HUD is now on"); g_bIsHudEnabled[client] = true; SetClientCookie(client, g_hHUDv2Cookie, "1"); } } public Action TIMER(Handle timer, any 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 && IsClientValid(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\nPlayers: %d/%d\nTimeleft: %s\nClock: %s",iMessage1, iMessage2, clientCount, g_cvarSlots.IntValue, MapTimeLeft, szTime); SetHudTextParams(0.0, 0.0, 1.02, 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, 1.02, g_iHUDColors[RED], g_iHUDColors[GREEN], g_iHUDColors[BLUE], 255, 0, 0.0, 0.0, 0.0); ShowHudText(i, -1, iMessage3); } } } bool IsClientValid(int client) { return (0 < client <= MaxClients) && IsClientInGame(client) && !IsFakeClient(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 = StringToInt(buffer2); } } jesli moglbys to wytlumacz a poprobuje sam cos w koncu porobic xD Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde 1 Napisano 1 Sierpnia 2019 Robisz dokładnie to samo co wytłumaczyłem wyżej tylko z linią: Format(iBuffer, sizeof(iBuffer),"%s\n%s\nPlayers: %d/%d\nTimeleft: %s\nClock: %s",iMessage1, iMessage2, clientCount, g_cvarSlots.IntValue, MapTimeLeft, szTime); Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Shadow Napisano 1 Sierpnia 2019 aaaaa myślałem, że tu coś innego robić czyli tak naprawde mam tylko to przetlumazcyc "%s\n%s\nPlayers: %d/%d\nTimeleft: %s\nClock Cytuj Przez Vasto_Lorde, 1 Sierpnia 2019 Tak ^^ Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Shadow Napisano 1 Sierpnia 2019 to dziękuję, można zamknąć ;) trzymaj repika i za pomoc i za poradnik ;D Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach