Контакты/сообщить об ошибке Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Действия с Файлами и Папками
Действия с Файлами и Папками
_wS_ Дата: Суббота, 14.01.2012, 03:05:22 | Сообщение # 1
Действия с Файлами и Папками

bool:FileExists("путь"); - поиск файла.
Путь указывайте после папки cstrike (не указывая её), например, cfg/server.cfg, sound/xz.mp3 и т.п.

Code
if (FileExists("cfg/server.cfg"))
{
     // файл найден
}
else
{
     // Нет
}

bool:DirExists("путь"); - поиск папки
bool:DeleteFile("путь"); - удалить файл (вернет true, если удален)
bool:RemoveDir("путь"); - удалить папку
FileSize("путь"); - возвращает размер файла в байтах

Вот так можно получить список файлов в cstrike/cfg:

Code
#include <sourcemod>      

public OnPluginStart()
{
     new Handle:dir = OpenDirectory("cfg/");
     if (dir != INVALID_HANDLE)
     {
         decl String:Name[100];
         new x = 0, FileType:type;
         while (ReadDirEntry(dir, Name, 100, type))
         {
             if (type == FileType_File) PrintToServer("%d. %s", ++x, Name);
         }
         CloseHandle(dir);
     }
     else PrintToServer("Не удалось открыть директорию");
}

FileType_Unknown - неизвестный тип файла
FileType_Directory - папка
FileType_File - файл

bool:RenameFile(const String:newpath[], const String:oldpath[]);
Перемещает файл "oldpath" в "newpath" - можно даже изменить ему имя. Вернёт true, в случае успеха.

Пример:

Code
// Переместит OldName.txt в папку cstrike/ с новым именем "NewName.txt"
RenameFile("NewName.txt", "cfg/OldName.txt");
 
Santa8725 Дата: Понедельник, 09.07.2012, 09:38:07 | Сообщение # 2
Сообщений: 10
Репутация: 0 [ +/- ]
А как проверить имеется ли запись в файле у клиента?
Ну или введена ли команда setinfo "" ""


Сообщение отредактировал Santa8725 - Понедельник, 09.07.2012, 09:38:39
 
_wS_ Дата: Понедельник, 09.07.2012, 09:40:20 | Сообщение # 3
Это уже зависит от типа записи (удобно использовать keyvalues). Можно и SQLite, MYSQL.
А, у самого клиента? Хм, так нельзя, можно только узнавать значения переменных.

На счет setinfo:

Code
public OnClientPutInServer(client)
{
      decl String:info[45]; info[0] = '\0'; GetClientInfo(client, "xz", info, 45);
      PrintToChat(client, "setinfo xz = \"%s\"", info);
}
 
Santa8725 Дата: Понедельник, 09.07.2012, 09:54:53 | Сообщение # 4
Сообщений: 10
Репутация: 0 [ +/- ]
Quote (_wS_)
Это уже зависит от типа записи (удобно использовать keyvalues). Можно и SQLite, MYSQL.
А, у самого клиента? Хм, так нельзя, можно только узнавать значения переменных.

На счет setinfo:

public OnClientPutInServer(client)
{
      decl String:info[45]; info[0] = '\0'; GetClientInfo(client, "xz", info, 45);
      PrintToChat(client, "setinfo xz = \"%s\"", info);
}

Спасибо, а можно по подробнее с setinfo)
Как например проверить, прописано ли setinfo "_pw" "12345" в консоле у клиента
То есть код (в данном случае 12345) будет постоянно одинаоквым
 
_wS_ Дата: Понедельник, 09.07.2012, 10:11:29 | Сообщение # 5
Code
#include <sourcemod>

public OnClientPutInServer(client)  
{  
     decl String:info[45]; info[0] = '\0'; GetClientInfo(client, "_pw", info, 45);
     if (!StrEqual(info, "12345"))
     {
         // пароль не совпал
     }
     else
     {
         // совпал
     }
}
 
Santa8725 Дата: Вторник, 10.07.2012, 10:00:14 | Сообщение # 6
Сообщений: 10
Репутация: 0 [ +/- ]
Еще раз спасибо)

Добавлено (10.07.2012, 10:00:14)
---------------------------------------------
А как изменить текст в файле?

 
«Ba[r]oN» Дата: Вторник, 13.11.2012, 10:05:45 | Сообщение # 7
Сообщений: 3
Репутация: 0 [ +/- ]
Quote (Santa8725)
А как изменить текст в файле?

дописать в файл строку можно так pank

new Handle:hFile = OpenFile(путь/фаил, "at");
WriteFileLine(hFile,"текс");
 
GreenBytes Дата: Воскресенье, 05.01.2020, 11:08:46 | Сообщение # 8
Сообщений: 19
Репутация: 0 [ +/- ]
Добрый день, не подскажите как прочитать файл по строке ?
 
_wS_ Дата: Воскресенье, 05.01.2020, 11:19:20 | Сообщение # 9
Код
new Handle:hFile = OpenFile("cfg/server.cfg", "rt");
if (hFile != INVALID_HANDLE)
{
    decl String:s[512];
    while (!IsEndOfFile(hFile) && ReadFileLine(hFile, s, sizeof(s)))
    {
        PrintToServer(s);
    }
    CloseHandle(hFile);
}
 
GreenBytes Дата: Воскресенье, 05.01.2020, 11:47:57 | Сообщение # 10
Сообщений: 19
Репутация: 0 [ +/- ]
_wS_, как убрать \r\n ?
Т.к оно тоже записывается и получается что отступает на след. строку.
 
_wS_ Дата: Воскресенье, 05.01.2020, 11:54:33 | Сообщение # 11
Может TrimString(s)
 
GreenBytes Дата: Воскресенье, 05.01.2020, 12:02:48 | Сообщение # 12
Сообщений: 19
Репутация: 0 [ +/- ]
_wS_, выводит кракозябры, в справке написано UTF-8
 
_wS_ Дата: Воскресенье, 05.01.2020, 12:06:20 | Сообщение # 13
Не знаю, у меня и utf-8 и utf-8 без bom вывело правильно.
 
GreenBytes Дата: Воскресенье, 05.01.2020, 12:33:43 | Сообщение # 14
Сообщений: 19
Репутация: 0 [ +/- ]
_wS_, я понял в чем причина была.
Теперь еще вопросик, файл читается построчно, в файле записаны расположения файлов для добавления в таблицу загрузки.
как прочитать расширение .mdl к примеру, чтоб автоматически его кешировать на сервере.
 
_wS_ Дата: Воскресенье, 05.01.2020, 13:09:31 | Сообщение # 15
addons\sourcemod\scripting\include\string.inc
StrContains, FindCharInString и др.
 
Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Действия с Файлами и Папками
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: