Вывод фраз в файл перевода

★Сириус★

Участник
Сообщения
743
Реакции
197
Ребят покажите на примере вот этого плагина:
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <zombiereloaded>

#define PLUGIN_NAME 	"ZR Repeat Kill Detector"
#define PLUGIN_VERSION 	"1.0.2"

new Handle:g_hRespawnDelay = INVALID_HANDLE;
new Float:g_fDeathTime[MAXPLAYERS+1];
new bool:g_bBlockRespawn = false;
 
public Plugin:myinfo =
{
	name = PLUGIN_NAME,
	author = "GoD-Tony",
	description = "Disables respawning on maps with repeat killers",
	version = PLUGIN_VERSION,
	url = "http://www.sourcemod.net/"
};

public OnAllPluginsLoaded()
{
	if ((g_hRespawnDelay = FindConVar("zr_respawn_delay")) == INVALID_HANDLE)
		SetFailState("Failed to find zr_respawn_delay cvar.");
	
	CreateConVar("zr_repeatkill_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);
	HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
	HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post);
}

public OnClientDisconnect(client)
{
	g_fDeathTime[client] = 0.0;
}

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	g_bBlockRespawn = false;
}

public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	if (g_bBlockRespawn)
		return;
		
	decl String:weapon[32];
	GetEventString(event, "weapon", weapon, sizeof(weapon));
	
	new victim = GetClientOfUserId(GetEventInt(event, "userid"));
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	
	if (victim && !attacker && StrEqual(weapon, "trigger_hurt"))
	{
		new Float:fGameTime = GetGameTime();
		
		if (fGameTime - g_fDeathTime[victim] - GetConVarFloat(g_hRespawnDelay) < 5.0)
		{
			PrintToChatAll("\x04[ZR]\x01 Repeat killer detected. Disabling respawn for this round.");
			g_bBlockRespawn = true;
		}
		
		g_fDeathTime[victim] = fGameTime;
	}
}

public Action:ZR_OnClientRespawn(&client, &ZR_RespawnCondition:condition)
{
	if (g_bBlockRespawn)
		return Plugin_Handled;
	
	return Plugin_Continue;
}
как фразу Repeat killer detected. Disabling respawn for this round
вывести в файл переводов *.phrases.txt
просто многие пишут так плагины, что только на одном языке получается, а просить уже устал чтобы переделывали, вот и хочу понять, как правильно изменить плагин, чтобы фразы считывались из файла переводов на разные языки
 

uJIb9

Game4net.ru
Сообщения
149
Реакции
14
Ребят покажите на примере вот этого плагина:
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <zombiereloaded>

#define PLUGIN_NAME 	"ZR Repeat Kill Detector"
#define PLUGIN_VERSION 	"1.0.2"

new Handle:g_hRespawnDelay = INVALID_HANDLE;
new Float:g_fDeathTime[MAXPLAYERS+1];
new bool:g_bBlockRespawn = false;
 
public Plugin:myinfo =
{
	name = PLUGIN_NAME,
	author = "GoD-Tony",
	description = "Disables respawning on maps with repeat killers",
	version = PLUGIN_VERSION,
	url = "http://www.sourcemod.net/"
};

public OnAllPluginsLoaded()
{
	if ((g_hRespawnDelay = FindConVar("zr_respawn_delay")) == INVALID_HANDLE)
		SetFailState("Failed to find zr_respawn_delay cvar.");
	
	CreateConVar("zr_repeatkill_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);
	HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
	HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post);
}

public OnClientDisconnect(client)
{
	g_fDeathTime[client] = 0.0;
}

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	g_bBlockRespawn = false;
}

public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	if (g_bBlockRespawn)
		return;
		
	decl String:weapon[32];
	GetEventString(event, "weapon", weapon, sizeof(weapon));
	
	new victim = GetClientOfUserId(GetEventInt(event, "userid"));
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	
	if (victim && !attacker && StrEqual(weapon, "trigger_hurt"))
	{
		new Float:fGameTime = GetGameTime();
		
		if (fGameTime - g_fDeathTime[victim] - GetConVarFloat(g_hRespawnDelay) < 5.0)
		{
			PrintToChatAll("\x04[ZR]\x01 Repeat killer detected. Disabling respawn for this round.");
			g_bBlockRespawn = true;
		}
		
		g_fDeathTime[victim] = fGameTime;
	}
}

public Action:ZR_OnClientRespawn(&client, &ZR_RespawnCondition:condition)
{
	if (g_bBlockRespawn)
		return Plugin_Handled;
	
	return Plugin_Continue;
}
как фразу Repeat killer detected. Disabling respawn for this round
вывести в файл переводов *.phrases.txt
просто многие пишут так плагины, что только на одном языке получается, а просить уже устал чтобы переделывали, вот и хочу понять, как правильно изменить плагин, чтобы фразы считывались из файла переводов на разные языки

В исходниках похожих плагинов смотри, в которых внедрён перевод и экспериментируй.
 

vanbka9

Участник
Сообщения
14
Реакции
13
В плагине
PHP:
public OnPluginStart()
{
	LoadTranslations("perevod.phrases");
	RegConsoleCmd("sm_test", Command_Test);
}

public Action:Command_Test(client, args)
{
	PrintToChat(client, "NameBlockTranslate");
	return Plugin_Handled;
}
Название файла перевода "perevod.phrases.txt"
В нем пишешь:
PHP:
"Phrases"
{
	"NameBlockTranslate"
	{
		"en"		"test"
		"ru"		"тест"
	}
}
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
добавляешь
PHP:
public OnPluginStart()
{
	LoadTranslations("zr_kill.phrases");
}

потом в строке вывода:
PHP:
 PrintToChatAll("\x04[ZR]\x01 Repeat killer detected. Disabling respawn for this round.");

заменяешь на

PHP:
 PrintToChatAll("\x04[ZR]\x01 %t", "Repeat killer detected");

а в файле перевода zr_kill.phrases.txt

пишешь

PHP:
"Phrases"
{
	"Repeat killer detected"
	{
		"en"			"Repeat killer detected. Disabling respawn for this round."
	}
}

а урок вот хороший http://world-source.ru/forum/100-2361-1
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
R1KO, Не %T а %t, в твоём уроке, там так написано))

vanbka9, не верно
PHP:
 PrintToChat(client, "NameBlockTranslate");
верно
PHP:
PrintToChat(client, "%t", "NameBlockTranslate");
 
Последнее редактирование:

★Сириус★

Участник
Сообщения
743
Реакции
197
добавляешь
PHP:
public OnPluginStart()
{
	LoadTranslations("zr_kill.phrases");
}

потом в строке вывода:
PHP:
 PrintToChatAll("\x04[ZR]\x01 Repeat killer detected. Disabling respawn for this round.");

заменяешь на

PHP:
 PrintToChatAll("\x04[ZR]\x01 %t", "Repeat killer detected");

а в файле перевода zr_kill.phrases.txt

пишешь

PHP:
"Phrases"
{
	"Repeat killer detected"
	{
		"en"			"Repeat killer detected. Disabling respawn for this round."
	}
}

а урок вот хороший http://world-source.ru/forum/100-2361-1
классно, все получиось с фразами для вывода в чат.

научите теперь если не сложно мультиязычность делать с менюшкой.
Вот например блок из плагина
PHP:
public Action:DOMenu(clientId,args)
{
    new Handle:menu = CreateMenu(DIDMenuHandler);
    SetMenuTitle(menu, "Статистика активных");
    AddMenuItem(menu, "option1", "Моя статистика");
    AddMenuItem(menu, "option2", "Статистика общего времени");
    AddMenuItem(menu, "option3", "Статистика наблюдателей");
    AddMenuItem(menu, "option4", "Статистика террористов ");
    AddMenuItem(menu, "option5", "Статистика спецназа");
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, clientId, MENU_TIME_FOREVER);
    
    
    return Plugin_Handled;
}
В нем название меню, и выбор по кнопкам, подскажите. как правильно здесь прописать, чтобы запихать эти фразы в *.phrases.txt
 

NagarD

Участник
Сообщения
411
Реакции
184
★Сириус★, смешной что-ли, там на примере и показано! Оффтоп
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #12
скажите, в чем разница между Format и PrintToChat. И что лучше использовать.
 

★Сириус★

Участник
Сообщения
743
Реакции
197
Да и на примерах далеко не заедешь
мне и не надо далеко ехать, просто пример хочу увидеть на то что выложил

Добавлено через 1 минуту
Вот R1KO выложил пример мультиязычности чата, все очень понятно.
А теперь все хочется увидеть на менюшке.
Нужно будет что-то глобальнее, пойду уже по этим вашим сайтам гулять.
пока помоему элементарное спрашиваю
 
Последнее редактирование:

SenatoR

Участник
Сообщения
773
Реакции
344
классно, все получиось с фразами для вывода в чат.

научите теперь если не сложно мультиязычность делать с менюшкой.
Вот например блок из плагина
PHP:
public Action:DOMenu(clientId,args)
{
    new Handle:menu = CreateMenu(DIDMenuHandler);
    SetMenuTitle(menu, "Статистика активных");
    AddMenuItem(menu, "option1", "Моя статистика");
    AddMenuItem(menu, "option2", "Статистика общего времени");
    AddMenuItem(menu, "option3", "Статистика наблюдателей");
    AddMenuItem(menu, "option4", "Статистика террористов ");
    AddMenuItem(menu, "option5", "Статистика спецназа");
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, clientId, MENU_TIME_FOREVER);
    
    
    return Plugin_Handled;
}
В нем название меню, и выбор по кнопкам, подскажите. как правильно здесь прописать, чтобы запихать эти фразы в *.phrases.txt
PHP:
Menu(client)
{
	decl String:buffer[256];
	new Handle:menu = CreateMenu(MenuHandle);
	Format(buffer, sizeof(buffer), "%T", "perevod1", client);
	AddMenuItem(menu, "option1", buffer);
	Format(buffer, sizeof(buffer), "%T", "perevod2", client);
	AddMenuItem(menu, "option2", buffer);
	DisplayMenu(menu, client, 30);
}
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
скажите, в чем разница между Format и PrintToChat. И что лучше использовать.

Фактически PrintToChat тоже форматирующая функция, как и Format. Разница в том, куда выводить результат форматирования - PrintToChat выводит в чат (и как вы об этом догадались? :D), а Format - в переменную. Т.е. для вывода чат особого смысла от Format нет (за исключением редких случаев, или за исключением SayText2). А если же нужно использовать/выводить там, где нельзя сразу прописать параметры, то там Format. Простейший пример - вывод через SayText2 - в параметрах посылаемого "сообщения" указывается только строка. Предварительно эта строка формируется с помощью Format.
Если проводить аналогию с Си, PrintToChat=printf, Format=sprintf
 
Сверху Снизу