Участник
Пользователь
- Сообщения
- 775
- Реакции
- 293
- Помог
- 11 раз(а)
Komap, write_file(szFileDir, szBuffer, i_LineCount - 1); - работает, но как-то хардкорно Все, разобрался... огромное спасибо Javekson , который все разжевал Komap, ты прав. В случае, когда
Финальная рабочая версия. Возможно кому-то поможет координаты сохранять.
Огромная благодарность Komap, Javekson, Shadows Adi
29 Июн 2022
29 Июн 2022
read_file(szFileDir, i_LineCount++, szBuffer, charsmax(szBuffer), null)
счетчик в условии, результат будет на 1 больше и твой вариант write_file(szFileDir, szBuffer, i_LineCount - 1);
- самое оптимальное решение. Чтобы так не хардкорить, пихаем счетчик внутрь цикла и получаем нужный результат29 Июн 2022
Код:
#include <amxmodx>
#include <reapi>
#define PLUGIN "Saving coordinates"
#define VERSION "1.0"
#define AUTHOR "maFFyoZZyk"
#define MAX_COORDINATES 3
new const FOLDER_NAME[] = "spawns"; // Папка в которой хранятся файлы с настройками для карт (Название файла будет идентично)
new const FILE_FORMAT[] = "ini"; // Формат файлов
new g_iMenu;
new bool: g_bExists = false;
new Float: g_fOrigin[MAX_COORDINATES], Float: g_fAngles[MAX_COORDINATES];
new g_szFileName[MAX_PLAYERS*2], g_szMapName[MAX_PLAYERS];
public plugin_init ()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("nightvision", "SaveCoord", ADMIN_RCON, "Save coordinatesd"); // Сохраняем координаты.
}
public plugin_cfg()
{
get_log_path();
static szTitle[75], szKeyYes[75], szKeyNo[75], szKeyExit[75];
formatex(szTitle, charsmax(szTitle), "%L", LANG_PLAYER, "MENU_TITLE");
formatex(szKeyYes, charsmax(szKeyYes), "%L", LANG_PLAYER, "MENU_KEY_YES");
formatex(szKeyNo, charsmax(szKeyNo), "%L", LANG_PLAYER, "MENU_KEY_NO");
formatex(szKeyExit, charsmax(szKeyNo), "%L", LANG_PLAYER, "MENU_KEY_EXIT");
g_iMenu = menu_create(szTitle, "MenuHandler");
menu_additem(g_iMenu, szKeyYes);
menu_additem(g_iMenu, szKeyNo);
menu_setprop(g_iMenu, MPROP_EXITNAME, szKeyExit);
menu_setprop(g_iMenu, MPROP_EXIT, MEXIT_ALL);
rh_get_mapname(g_szMapName, charsmax(g_szMapName));
log_to_file(g_szFileName, "Мы на карте %s", g_szMapName);
new szPath[64], szLoadedConfig[96];
get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
formatex(szLoadedConfig, charsmax(szLoadedConfig), "%s/%s/%s.%s", szPath, FOLDER_NAME, FOLDER_NAME, FILE_FORMAT);
new szFilePointer = fopen(szLoadedConfig, "rt");
if(szFilePointer)
{
new szBuffer[128], szMapName[32];
new szArgPosX[8], szArgPosY[8], szArgPosZ[8];
new szArgAngX[8], szArgAngY[8], szArgAngZ[8];
while(!feof(szFilePointer))
{
fgets(szFilePointer, szBuffer, charsmax(szBuffer));
trim(szBuffer);
if(!(szBuffer[0]) || szBuffer[0] == ';' || szBuffer[0] == '#')
continue;
parse(szBuffer, szMapName, charsmax(szMapName),
szArgPosX, charsmax(szArgPosX), szArgPosY, charsmax(szArgPosY), szArgPosZ, charsmax(szArgPosZ),
szArgAngX, charsmax(szArgAngX), szArgAngY, charsmax(szArgAngY), szArgAngZ, charsmax(szArgAngZ)
);
if (contain(szBuffer, g_szMapName) != -1)
{
g_fOrigin[0] = str_to_float(szArgPosX);
g_fOrigin[1] = str_to_float(szArgPosY);
g_fOrigin[2] = str_to_float(szArgPosZ);
g_fAngles[0] = str_to_float(szArgAngX);// + 5.0;
g_fAngles[1] = str_to_float(szArgAngY);
g_fAngles[2] = str_to_float(szArgAngZ);
log_to_file(g_szFileName, "Считываем координаты на карте %s: X:%.1f | Y:%.1f | Z:%.1f", g_szMapName, g_fOrigin[0], g_fOrigin[1], g_fOrigin[2]);
log_to_file(g_szFileName, "Считываем углы точки на карте %s: X:%.1f | Y:%.1f | Z:%.1f", g_szMapName, g_fAngles[0], g_fAngles[1], g_fAngles[2]);
return;
}
else log_to_file(g_szFileName, "Точек для карты %s - не существует", g_szMapName);
}
fclose(szFilePointer);
}
}
public SaveCoord(id, level)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE;
if(~get_user_flags(id) & level)
{
client_print(id, print_notify, "* Недостаточно прав для использования этой команды!");
return PLUGIN_HANDLED;
}
new szFileDir[128], szBuffer[128];
new Float: fOrigin[MAX_COORDINATES], Float: fAngles[MAX_COORDINATES];
get_localinfo("amxx_configsdir", szFileDir, charsmax(szFileDir));
formatex(szFileDir, charsmax(szFileDir), "%s/%s/", szFileDir,FOLDER_NAME);
if(!dir_exists(szFileDir))
{
mkdir(szFileDir);
log_to_file(g_szFileName, "Каталог [%s] - отсутсвует. Создаю новый", FOLDER_NAME);
}
formatex(szFileDir, charsmax(szFileDir), "%s/%s.%s", szFileDir, FOLDER_NAME, FILE_FORMAT);
new szFilePointer = fopen(szFileDir, "rt");
if(!szFilePointer)
{
formatex(szBuffer, charsmax(szBuffer), "\
# File was created for %s.amxx^n\
# Autor %s | Version number %s^n\
# <Map Name> <Position X Y Z> <Angles X Y Z>^n\
^n",
PLUGIN, AUTHOR, VERSION
);
write_file(szFileDir, szBuffer);
log_to_file(g_szFileName, "Файл [%s.%s] - отсутсвует. Создаю новый", FOLDER_NAME, FILE_FORMAT);
}
else
{
new i_LineCount = 0, null;
while (read_file(szFileDir, i_LineCount, szBuffer, charsmax(szBuffer), null))
{
// fgets(szFilePointer, szBuffer, sizeof(szBuffer) - 1)
if(!szBuffer[0])
continue;
if (contain(szBuffer, g_szMapName) != -1)
{
log_to_file(g_szFileName, "Запись по карте [%s] - уже существует", g_szMapName);
if(g_bExists)
break;
if(!g_bExists)
{
menu_display(id, g_iMenu, 0);
log_to_file(g_szFileName, "Открываем меню для перезаписи координат, на карте [%s]", g_szMapName);
log_to_file(g_szFileName, "Номер строки [%d]", i_LineCount);
return PLUGIN_CONTINUE;
}
}
i_LineCount++;
}
get_entvar(id, var_origin, fOrigin);
get_entvar(id, var_angles, fAngles);
formatex(szBuffer, charsmax(szBuffer), "[%s] %.1f %.1f %.1f %.1f %.1f %.1f",
g_szMapName, fOrigin[0], fOrigin[1], fOrigin[2],
fAngles[0], fAngles[1], fAngles[2]
);
log_to_file(g_szFileName,
"Добавлена точка на карте [%s] с координатами X:%.1f | Y:%.1f | Z:%.1f",
g_szMapName, fOrigin[0], fOrigin[1], fOrigin[2]
);
log_to_file(g_szFileName,
"Добавлены углы точки на карте [%s] с координатами X:%.1f | Y:%.1f | Z:%.1f",
g_szMapName, fAngles[0], fAngles[1], fAngles[2]
);
if(g_bExists)
{
write_file(szFileDir, szBuffer, i_LineCount);
}
else write_file(szFileDir, szBuffer);
g_bExists = false;
}
return PLUGIN_CONTINUE;
}
public MenuHandler(id, menu, item)
{
if (item == MENU_EXIT) {
return PLUGIN_CONTINUE;
}
switch (item)
{
case 0:
{
g_bExists = true;
SaveCoord(id, ADMIN_RCON);
log_to_file(g_szFileName, "Администратор сделал перезапись координат");
}
case 1:
{
g_bExists = false;
log_to_file(g_szFileName, "В перезаписи координат отказано Администратором");
}
}
return PLUGIN_HANDLED;
}
public plugin_end() {
menu_destroy(g_iMenu);
}
get_log_path()
{
new logsDir[64], DirName[64];
get_localinfo("amxx_logs", logsDir, charsmax(logsDir));
formatex(DirName, charsmax(DirName), "/%s", PLUGIN);
add(logsDir, charsmax(logsDir), DirName);
if(!dir_exists(logsDir))
mkdir(logsDir);
new logDate[24];
get_time("%d%m%Y", logDate, charsmax(logDate));
formatex(g_szFileName, charsmax(g_szFileName), "%s/%s.log", logsDir, logDate);
}
Огромная благодарность Komap, Javekson, Shadows Adi
Последнее редактирование: