8Ahnenerbe8
Участник
- Сообщения
- 113
- Реакции
- 30
Я про это и говорю, что в уроке ошибка@8Ahnenerbe8, так нельзя делать. компилятор не даст такое скомпилить
sizeof до компиляции получает размер
тут же размер будет известен только после вызова функции
Я про это и говорю, что в уроке ошибка@8Ahnenerbe8, так нельзя делать. компилятор не даст такое скомпилить
"MyPhrase" // Имя фразы
{
"en" "Моя фраза" // Перевод фразы для языка с кодом en
"ru" "My Phrase" // Перевод фразы для языка с кодом ru
}
-->
"MyPhrase" // Имя фразы
{
"en" "My Phrase" // Перевод фразы для языка с кодом en
"ru" "Моя фраза" // Перевод фразы для языка с кодом ru
}
#pragma semicolon 1
#include <sourcemod>
#pragma newdecls required
public void OnPluginStart() {
HookEvent("player_death", Event_PlayerDeath);
LoadTranslations("tes.phrases");
}
public void Event_PlayerDeath(Event event, const char[] sEvName, bool bDontBroadcast) {
int iUserID = event.GetInt("userid");
int iAttackerUserID = event.GetInt("attacker");
char szWeapon[34];
event.GetString("weapon", szWeapon, sizeof(szWeapon));
int bHS = event.GetBool("headshot");
char szBufer[128];
FormatEx(szBufer, sizeof(szBufer), "%t", "test", iUserID, iAttackerUserID, szWeapon, bHS);
PrintToServer(szBufer);
}
"Phrases"
{
"test"
{
"#format" "{1:i},{2:i},{3:i},{4:i}"
"ru" "умер: {1}, убил: {2}, оружие: {3}, убийство в голову: {4}"
"en" "userid: {1}, attacker: {2}, weapon: {3}, headshot: {4}"
}
}
L 03/09/2019 - 22:32:06: [SM] Blaming: test.smx
L 03/09/2019 - 22:32:06: [SM] Call stack trace:
L 03/09/2019 - 22:32:06: [SM] [0] FormatEx
L 03/09/2019 - 22:32:06: [SM] [1] Line 17, E:\Deathmatch\csgo\addons\sourcemod\scripting\test.sp::Event_PlayerDeath
"#format" "{1:i},{2:i},{3:s},{4:i}"Выводит ошибку..
Код:
C-подобный:#pragma semicolon 1 #include <sourcemod> #pragma newdecls required public void OnPluginStart() { HookEvent("player_death", Event_PlayerDeath); LoadTranslations("tes.phrases"); } public void Event_PlayerDeath(Event event, const char[] sEvName, bool bDontBroadcast) { int iUserID = event.GetInt("userid"); int iAttackerUserID = event.GetInt("attacker"); char szWeapon[34]; event.GetString("weapon", szWeapon, sizeof(szWeapon)); int bHS = event.GetBool("headshot"); char szBufer[128]; FormatEx(szBufer, sizeof(szBufer), "%t", "test", iUserID, iAttackerUserID, szWeapon, bHS); PrintToServer(szBufer); }
tes.phrases.txt
C-подобный:"Phrases" { "test" { "#format" "{1:i},{2:i},{3:i},{4:i}" "ru" "умер: {1}, убил: {2}, оружие: {3}, убийство в голову: {4}" "en" "userid: {1}, attacker: {2}, weapon: {3}, headshot: {4}" } }
Вывод в консоль:
Помогите пожалуйста...C-подобный:L 03/09/2019 - 22:32:06: [SM] Blaming: test.smx L 03/09/2019 - 22:32:06: [SM] Call stack trace: L 03/09/2019 - 22:32:06: [SM] [0] FormatEx L 03/09/2019 - 22:32:06: [SM] [1] Line 17, E:\Deathmatch\csgo\addons\sourcemod\scripting\test.sp::Event_PlayerDeath
не помогло..."#format" "{1:i},{2:i},{3:s},{4:i}"
Не совсем понимаю чего ты добиваешься, но..Выводит ошибку..
Код:
C-подобный:#pragma semicolon 1 #include <sourcemod> #pragma newdecls required public void OnPluginStart() { HookEvent("player_death", Event_PlayerDeath); LoadTranslations("tes.phrases"); } public void Event_PlayerDeath(Event event, const char[] sEvName, bool bDontBroadcast) { int iUserID = event.GetInt("userid"); int iAttackerUserID = event.GetInt("attacker"); char szWeapon[34]; event.GetString("weapon", szWeapon, sizeof(szWeapon)); int bHS = event.GetBool("headshot"); char szBufer[128]; FormatEx(szBufer, sizeof(szBufer), "%t", "test", iUserID, iAttackerUserID, szWeapon, bHS); PrintToServer(szBufer); }
tes.phrases.txt
C-подобный:"Phrases" { "test" { "#format" "{1:i},{2:i},{3:i},{4:i}" "ru" "умер: {1}, убил: {2}, оружие: {3}, убийство в голову: {4}" "en" "userid: {1}, attacker: {2}, weapon: {3}, headshot: {4}" } }
Вывод в консоль:
Помогите пожалуйста...C-подобный:L 03/09/2019 - 22:32:06: [SM] Blaming: test.smx L 03/09/2019 - 22:32:06: [SM] Call stack trace: L 03/09/2019 - 22:32:06: [SM] [0] FormatEx L 03/09/2019 - 22:32:06: [SM] [1] Line 17, E:\Deathmatch\csgo\addons\sourcemod\scripting\test.sp::Event_PlayerDeath
#pragma semicolon 1
#pragma newdecls required
public void OnPluginStart()
{
HookEvent("player_death", Event_PlayerDeath);
LoadTranslations("tes.phrases");
}
public void Event_PlayerDeath(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
char szWeapon[34];
hEvent.GetString("weapon", szWeapon, sizeof(szWeapon));
PrintToChatAll("%t", "Info", hEvent.GetInt("userid"), hEvent.GetInt("attacker"), szWeapon, hEvent.GetBool("headshot") ? "Yes":"No");
}
"Phrases"
{
"Info"
{
"#format" "{1:i},{2:i},{3:s},{4:t}"
"ru" "Умер: {1}, убил: {2}, оружие: {3}, убийство в голову: {4}"
"en" "userid: {1}, attacker: {2}, weapon: {3}, headshot: {4}"
}
"Yes"
{
"ru" "да"
"en" "yes"
}
"No"
{
"ru" "нет"
"en" "no"
}
}
#pragma semicolon 1
#pragma newdecls required
public void OnPluginStart()
{
HookEvent("player_death", Event_PlayerDeath);
LoadTranslations("tes.phrases");
}
public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
static bool hs;
static int victim, attacker;
static char wpn[34], buffer[128];
victim = event.GetInt("userid");
attacker = event.GetInt("attacker");
event.GetString("weapon", wpn, sizeof(wpn));
hs = event.GetBool("headshot");
SetGlobalTransTarget(LANG_SERVER);
FormatEx(buffer, sizeof(buffer), "%t", "test", victim, attacker, wpn, hs ? 'V' : 'X');
PrintToServer(buffer);
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
"Phrases"
{
"test"
{
"#format" "{1:i},{2:i},{3:s},{4:c}"
"en" "userid: {1}, attacker: {2}, weapon: {3}, headshot: {4}"
"ru" "умер: {1}, убил: {2}, оружие: {3}, убийство в голову: {4}"
}
}
Спасибо, помогло.Не совсем понимаю чего ты добиваешься, но..
Посмотреть вложение 39905
Ты же вовсе не выбираешь себе "цель" для перевода.
И аргументы в файле перевода у тебя неверно указаны.
Код:
PHP:#pragma semicolon 1 #pragma newdecls required public void OnPluginStart() { HookEvent("player_death", Event_PlayerDeath); LoadTranslations("tes.phrases"); } public void Event_PlayerDeath(Event hEvent, const char[] sEvName, bool bDontBroadcast) { char szWeapon[34]; hEvent.GetString("weapon", szWeapon, sizeof(szWeapon)); PrintToChatAll("%t", "Info", hEvent.GetInt("userid"), hEvent.GetInt("attacker"), szWeapon, hEvent.GetBool("headshot") ? "Yes":"No"); }
Перевод:
C-подобный:"Phrases" { "Info" { "#format" "{1:i},{2:i},{3:s},{4:t}" "ru" "Умер: {1}, убил: {2}, оружие: {3}, убийство в голову: {4}" "en" "userid: {1}, attacker: {2}, weapon: {3}, headshot: {4}" } "Yes" { "ru" "да" "en" "yes" } "No" { "ru" "нет" "en" "no" } }
Функция у которой аргумент (фраза) по счету является 5, не смогла найти данную фразу в файле переводов.Что означают ошибки (arg 1,2,3,4,5,6) и так далее?
C-подобный:Exception reported: Language phrase "Перевод 1" not found (arg 5)
Есть какие то ограничения для заглавия меню? Всё читает, а его нет.Функция у которой аргумент (фраза) по счету является 5, не смогла найти данную фразу в файле переводов.
case TopMenuAction_DisplayTitle:
Format(buffer, maxlength, "%T", "TeamSwitch when");
Когда ты используешь "%T", то после фразы ты обязан не забыть указать индекс клиента, которому она адресована. В данном случае, ты как раз-таки и забыл это сделать, вот он и ругается. "%T" - лучше всего использовать для пунктов меню и тп.Есть какие то ограничения для заглавия меню? Всё читает, а его нет.
C-подобный:case TopMenuAction_DisplayTitle: Format(buffer, maxlength, "%T", "TeamSwitch when");Сообщения автоматически склеены:
И вроде честор говорил, что лучше использовать "%T", вместо "%t" ?
PrintToServer("%08b", 5);00000101Число - 4b т.к.:SetGlobalTransTarget(attacker);
FormatEx(Msg, sizeof(Msg), "%t", "TKSlayed");
SetGlobalTransTarget(victim);
FormatEx(sMsgLog, sizeof(sMsgLog), "%t", "TKSlayed Logs", attacker);
можно поподробней?) какая цель, что нужно сделать с жертвой, а то раза 3 прочитал не понял что вы хотите.Подскажите пожалуйста
У меня двое, атакер и жертва
С сообщением атакеру понятно
C-подобный:SetGlobalTransTarget(attacker); FormatEx(Msg, sizeof(Msg), "%t", "TKSlayed");
А вот сообщение для всех как? Ставить жертву?
C-подобный:SetGlobalTransTarget(victim); FormatEx(sMsgLog, sizeof(sMsgLog), "%t", "TKSlayed Logs", attacker);
Ничего, сообщение будет адресовано всем игрокам. Вот кого писать в SetGlobalTransTarget вопросможно поподробней?) какая цель, что нужно сделать с жертвой, а то раза 3 прочитал не понял что вы хотите.
Если вы собираетесь использовать одну из функций PrintToChat, PrintToChatAll, PrintCenterText, PrintCenterTextAll, PrintHintText, PrintHintTextToAll, то SetGlobalTransTarget прописывать не нужно, она там уже есть.Ничего, сообщение будет адресовано всем игрокам. Вот кого писать в SetGlobalTransTarget вопрос