|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
Вывод текста плагина через DATA файл
|
|
Molka | Дата: Четверг, 26.11.2009, 13:25:24 | Сообщение # 1 |
Подполковник
Группа: Пользователи
Сообщений: 120
Статус: Не в сети
| Наверно по названию темы, трудно догадаться чего мне надо... Во общем, есть у меня несколько плагинов которые выводят информацию прямиком из плагина, а мне нужно что бы вывод текста шёл из текстового файла (папка data/lang), как бы добавить мультиязычность в плагин, что бы он мог использовать несколько языков. Объясните пожалуйста как такое реализовать. В качестве примера, можно попробовать lastround2, Code #include <amxmodx>
#pragma semicolon 1 // force ; usage, just 'cause new g_scTitle[] = "Last Round"; new g_scVersion[] = "1.0"; new g_scAuthor[] = "bAnTAi"; new bool:g_lastround = false; new bool:g_changemap = false; new Float:g_timelimit = 0.0; new Float:g_maxspeed;
#define INITIATE_LAST_ROUND_TASK 545454 #define CHANGE_MAP_TASK 545455 #define DISABLE_PLAYERS_TASK 545456
public evRoundStart() { if (!get_cvar_num("lastround")) return PLUGIN_CONTINUE;
// Wanted this in init but never got a value if (g_timelimit == 0.0) g_timelimit = get_cvar_float("mp_timelimit");
if (g_lastround) { new Float:roundtime = get_cvar_float("mp_roundtime"); new Float:c4timer = get_cvar_float("mp_c4timer")/60; // Extend the maps time one round + c4timer + some buffer set_cvar_float("mp_timelimit", g_timelimit + roundtime + c4timer + 0.5); new text[256]; format(text, 255, "This is the final round"); doTypesay(text, 5, 210, 0, 0);
g_changemap = true; g_lastround = false; } else if (g_changemap) { new nextmap[32]; get_cvar_string("amx_nextmap", nextmap, 31); new text[256]; format(text, 255, "Thank you for playing. Now switching to %s!", nextmap); doTypesay(text, 5, 210, 0, 0);
g_maxspeed = get_cvar_float("sv_maxspeed"); set_cvar_float("sv_maxspeed", 0.0);
set_task(0.1, "disablePlayers", DISABLE_PLAYERS_TASK, "", 0, "a", 3); set_task(6.0, "changeMap", CHANGE_MAP_TASK); }
return PLUGIN_CONTINUE; }
public initiateLastRound() { if (!get_cvar_num("lastround")) return PLUGIN_CONTINUE;
remove_task(INITIATE_LAST_ROUND_TASK);
new text[256]; format(text, 255, "The final round is coming up"); doTypesay(text, 5, 210, 0, 0);
new Float:roundtime = get_cvar_float("mp_roundtime"); new Float:c4timer = get_cvar_float("mp_c4timer")/60;
// (2* roundtime since it is possible that the even occurs at the beginning of a round) set_cvar_float("mp_timelimit", g_timelimit + (2.0*roundtime) + (2.0*c4timer));
g_lastround = true;
return PLUGIN_CONTINUE; }
public disablePlayers() { new players[32], num; get_players(players, num, "c"); for(new i=0;i<num; i++) { client_cmd(players[i],"drop"); } }
public changeMap() { remove_task(CHANGE_MAP_TASK);
new nextmap[32]; get_cvar_string("amx_nextmap", nextmap, 31); server_cmd("changelevel %s", nextmap); }
doTypesay(string[], duration, r, g, b) { set_hudmessage(r, g, b, 0.05, 0.45, 0, 6.0, float(duration) , 0.5, 0.15, 4); show_hudmessage(0, string); } public plugin_init() { register_plugin(g_scTitle, g_scVersion, g_scAuthor);
register_cvar("lastround", "1"); register_logevent("evRoundStart", 2, "0=World triggered", "1=Round_Start");
// Chose 90 seconds not to clash with other events set_task(90.0, "initiateLastRound", INITIATE_LAST_ROUND_TASK, "", 0, "d");
return PLUGIN_CONTINUE; }
public plugin_end() { set_cvar_float("mp_timelimit", g_timelimit); set_cvar_float("sv_maxspeed", g_maxspeed);
remove_task(DISABLE_PLAYERS_TASK);
return PLUGIN_CONTINUE; }
Совершенный человек все ищет в себе, ничтожный — в других...
|
|
| |
tavot | Дата: Пятница, 27.11.2009, 10:50:44 | Сообщение # 2 |
Генерал-майор
Группа: Пользователи
Сообщений: 256
Статус: Не в сети
| Molka, Не проще посомтреть готовый плагин антифлуд? Code #include <amxmodx>
new Float:g_Flooding[33] = {0.0, ...} new g_Flood[33] = {0, ...}
new amx_flood_time;
public plugin_init() { register_plugin("Anti Flood", AMXX_VERSION_STR, "AMXX Dev Team") register_dictionary("antiflood.txt") // Словарь register_clcmd("say", "chkFlood") register_clcmd("say_team", "chkFlood") amx_flood_time=register_cvar("amx_flood_time", "0.75") }
public chkFlood(id) { new Float:maxChat = get_pcvar_float(amx_flood_time)
if (maxChat) { new Float:nexTime = get_gametime() if (g_Flooding[id] > nexTime) { if (g_Flood[id] >= 3) { client_print(id, print_notify, "** %L **", id, "STOP_FLOOD") // На сколько я понимаю %L - обозначает что это берется из языкового файла ,а STOP_FLOOD - что берем из файла. g_Flooding[id] = nexTime + maxChat + 3.0 return PLUGIN_HANDLED } g_Flood[id]++ } else if (g_Flood[id]) { g_Flood[id]-- } g_Flooding[id] = nexTime + maxChat }
return PLUGIN_CONTINUE } В словаре: [en] STOP_FLOOD = Stop flooding the server! Соответственно будет отображатсья ** Stop flooding the server! ** Где ** - из самого плагина, а текст из языкового файла. Поправьте меня если я в чем то заблуждаюсь!
|
|
| |
Molka | Дата: Пятница, 27.11.2009, 14:36:44 | Сообщение # 3 |
Подполковник
Группа: Пользователи
Сообщений: 120
Статус: Не в сети
| tavot, а регистрировать словарь где в моём примере, Code register_dictionary("antiflood.txt") Code public plugin_end() { set_cvar_float("mp_timelimit", g_timelimit); set_cvar_float("sv_maxspeed", g_maxspeed);
remove_task(DISABLE_PLAYERS_TASK);
return PLUGIN_CONTINUE; } Здесь ? верно ? Эта конец кода, разница есть где ? в начале или в конце ? Quote (tavot) а STOP_FLOOD - что берем из файла А если у меня фраза, к примеру "Карта сменится на nextmap (переменная) через xx (переменная)... как будет выглядет lang: mapch=Карта сменится на herez=через client_print(id, print_notify, "%L Не не понимаю, куда %L втыкать...
Совершенный человек все ищет в себе, ничтожный — в других...
|
|
| |
tavot | Дата: Пятница, 27.11.2009, 15:35:17 | Сообщение # 4 |
Генерал-майор
Группа: Пользователи
Сообщений: 256
Статус: Не в сети
| Molka, словарь регишь в plugin_init client_print(id, print_notify, " %L %S %D ", id, "MAPCH", nextmap, "HEREZ" , xx) Попробуй так Толкьо у тебя должны быть эти две переменные naextmap и xx Я сам не юзал это дело, но как то смотрел и вроде разбирался.... Так же в словаре можно писать вида [en] STOP_FLOOD = Stop flooding the server! %S Где в функции %S - будет username Вобщем поксперементируй. Там варантов мало. В стандартных амхх плагинах много разных примеров.
|
|
| |
Molka | Дата: Пятница, 27.11.2009, 18:43:21 | Сообщение # 5 |
Подполковник
Группа: Пользователи
Сообщений: 120
Статус: Не в сети
| Не не получается... Code #include <amxmodx>
#pragma semicolon 1 // force ; usage, just 'cause new g_scTitle[] = "Last Round"; new g_scVersion[] = "1.0"; new g_scAuthor[] = "bAnTAi"; new bool:g_lastround = false; new bool:g_changemap = false; new Float:g_timelimit = 0.0; new Float:g_maxspeed;
#define INITIATE_LAST_ROUND_TASK 545454 #define CHANGE_MAP_TASK 545455 #define DISABLE_PLAYERS_TASK 545456
public evRoundStart() { if (!get_cvar_num("lastround")) return PLUGIN_CONTINUE;
// Wanted this in init but never got a value if (g_timelimit == 0.0) g_timelimit = get_cvar_float("mp_timelimit");
if (g_lastround) { new Float:roundtime = get_cvar_float("mp_roundtime"); new Float:c4timer = get_cvar_float("mp_c4timer")/60; // Extend the maps time one round + c4timer + some buffer set_cvar_float("mp_timelimit", g_timelimit + roundtime + c4timer + 0.5); new text[256]; format(text, 255, "%L", "FINAL_ROUND"); doTypesay(text, 5, 210, 0, 0);
g_changemap = true; g_lastround = false; } else if (g_changemap) { new nextmap[32]; get_cvar_string("amx_nextmap", nextmap, 31); new text[256]; format(text, 255, "Thank you for playing. Now switching to %s!", nextmap); doTypesay(text, 5, 210, 0, 0);
g_maxspeed = get_cvar_float("sv_maxspeed"); set_cvar_float("sv_maxspeed", 0.0);
set_task(0.1, "disablePlayers", DISABLE_PLAYERS_TASK, "", 0, "a", 3); set_task(6.0, "changeMap", CHANGE_MAP_TASK); }
return PLUGIN_CONTINUE; }
public initiateLastRound() { if (!get_cvar_num("lastround")) return PLUGIN_CONTINUE;
remove_task(INITIATE_LAST_ROUND_TASK);
new text[256]; format(text, 255, "The final round is coming up"); doTypesay(text, 5, 210, 0, 0);
new Float:roundtime = get_cvar_float("mp_roundtime"); new Float:c4timer = get_cvar_float("mp_c4timer")/60;
// (2* roundtime since it is possible that the even occurs at the beginning of a round) set_cvar_float("mp_timelimit", g_timelimit + (2.0*roundtime) + (2.0*c4timer));
g_lastround = true;
return PLUGIN_CONTINUE; }
public disablePlayers() { new players[32], num; get_players(players, num, "c"); for(new i=0;i<num; i++) { client_cmd(players[i],"drop"); } }
public changeMap() { remove_task(CHANGE_MAP_TASK);
new nextmap[32]; get_cvar_string("amx_nextmap", nextmap, 31); server_cmd("changelevel %s", nextmap); }
doTypesay(string[], duration, r, g, b) { set_hudmessage(r, g, b, 0.05, 0.45, 0, 6.0, float(duration) , 0.5, 0.15, 4); show_hudmessage(0, string); } public plugin_init() { register_plugin(g_scTitle, g_scVersion, g_scAuthor);
register_cvar("lastround", "1"); register_logevent("evRoundStart", 2, "0=World triggered", "1=Round_Start");
// Chose 90 seconds not to clash with other events set_task(90.0, "initiateLastRound", INITIATE_LAST_ROUND_TASK, "", 0, "d");
return PLUGIN_CONTINUE; }
public plugin_end() { set_cvar_float("mp_timelimit", g_timelimit); set_cvar_float("sv_maxspeed", g_maxspeed);
remove_task(DISABLE_PLAYERS_TASK);
return PLUGIN_CONTINUE; } В консоле сервера, просит дебуг и ругается на аргументы: Quote L 11/27/2009 - 18:41:52: String formatted incorrectly - parameter 4 (total 4) L 11/27/2009 - 18:41:52: [AMXX] Run time error 25 (plugin "lastround2.amxx") - debug not enabled! L 11/27/2009 - 18:41:52: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes). Вот код, на который наверняка ругается.... Code format(text, 255, "%L", "FINAL_ROUND"); doTypesay(text, 5, 210, 0, 0); P.S> Словарь зарегистрирован...
Совершенный человек все ищет в себе, ничтожный — в других...
Сообщение отредактировал Molka - Пятница, 27.11.2009, 18:46:19 |
|
| |
tavot | Дата: Суббота, 28.11.2009, 15:11:34 | Сообщение # 6 |
Генерал-майор
Группа: Пользователи
Сообщений: 256
Статус: Не в сети
| L 11/27/2009 - 18:41:52: String formatted incorrectly - parameter 4 (total 4) Сначала рзаберись с простым client_print .... format(text, 255, "%L", "FINAL_ROUND"); doTypesay(text, 5, 210, 0, 0); - это дело без языкового файла работало?
|
|
| |
Molka | Дата: Воскресенье, 29.11.2009, 04:38:40 | Сообщение # 7 |
Подполковник
Группа: Пользователи
Сообщений: 120
Статус: Не в сети
| Quote (tavot) Сначала рзаберись с простым client_print .... Долго... смысл один и тот же. Quote format(text, 255, "This is the final round"); doTypesay(text, 5, 210, 0, 0); Вот так работало. Добавлено (29.11.2009, 04:38:40) --------------------------------------------- help
Совершенный человек все ищет в себе, ничтожный — в других...
|
|
| |
a_aqua | Дата: Воскресенье, 29.11.2009, 18:41:46 | Сообщение # 8 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Не в сети
| Lang: Quote 1_TEST = privet %s, nextmap: %s Plugin: Quote format(text, 255, "%L", LANG_SERVER, "FINAL_ROUND", nickname, nextmap);
|
|
| |
Molka | Дата: Воскресенье, 29.11.2009, 19:09:46 | Сообщение # 9 |
Подполковник
Группа: Пользователи
Сообщений: 120
Статус: Не в сети
| Спасибо, а с lastround2 как надо...
Совершенный человек все ищет в себе, ничтожный — в других...
|
|
| |
a_aqua | Дата: Воскресенье, 29.11.2009, 21:48:11 | Сообщение # 10 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Не в сети
| А что там такого?
|
|
| |
Molka | Дата: Воскресенье, 29.11.2009, 22:35:30 | Сообщение # 11 |
Подполковник
Группа: Пользователи
Сообщений: 120
Статус: Не в сети
| Quote format(text, 255, "%L", "FINAL_ROUND"); doTypesay(text, 5, 210, 0, 0); Пишет, L 11/27/2009 - 18:41:52: String formatted incorrectly - parameter 4 (total 4) L 11/27/2009 - 18:41:52: [AMXX] Run time error 25 (plugin "lastround2.amxx") - debug not enabled! L 11/27/2009 - 18:41:52: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
Совершенный человек все ищет в себе, ничтожный — в других...
|
|
| |
PomanoB | Дата: Воскресенье, 29.11.2009, 22:49:56 | Сообщение # 12 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Code format(text, 255, "%L", LANG_SERVER, "FINAL_ROUND");
http://romanov4400.mybrute.com
|
|
| |
a_aqua | Дата: Понедельник, 30.11.2009, 08:30:30 | Сообщение # 13 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Не в сети
| Quote (PomanoB) format(text, 255, "%L", LANG_SERVER, "FINAL_ROUND"); Чорт, ошибки из-за LANG_SERVER все-таки появляются? :\
|
|
| |
Molka | Дата: Понедельник, 30.11.2009, 11:44:57 | Сообщение # 14 |
Подполковник
Группа: Пользователи
Сообщений: 120
Статус: Не в сети
| PomanoB, a_aqua, спасибо. Всё получилось, но язык выводится серверный (тот который установлен в vault - server_language), а мне необходимо что бы выводил тот который на клиенте. К примеру как в amxmodxmenu, установлен русский - русское меню, английский - английский...
Совершенный человек все ищет в себе, ничтожный — в других...
|
|
| |
PomanoB | Дата: Понедельник, 30.11.2009, 17:51:24 | Сообщение # 15 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Вместо LANG_SERVER пиши id игрока которому будет сообщение
http://romanov4400.mybrute.com
|
|
| |
| AMX Mod X Russian Community © 2006-2024 | |
|
| |