Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
PbIC9TuHa » 18 май 2018, 08:43
стоит задача находить в определенном файле, СТИМ игрока (или его NickName) и возвращать true
формат файла прост, но в нем куча записей:
"STEAM1" "MODEL" "DATA" "и др и тд"
STEAM2" "MODEL" "DATA" "и др"
"STEAM3" "MODEL" "DATA" "и др"
не подскажите как осуществить поиск ?
вообще не нашел описание поиска в мануалах по работе с файлами .
есть варианты попроще нежели считывать построчно/поблочно и выверять совпадения ?
-
PbIC9TuHa
-
- Сообщения: 37
- Зарегистрирован: 12 дек 2016, 09:49
- Благодарил (а): 10 раз.
- Поблагодарили: 2 раз.
- Опыт программирования: Меньше недели
- Языки программирования: php
-
Subb98 » 18 май 2018, 08:53
Раньше было возможно только парсить файл построчно. Сейчас в AMXX добавили новые нативы для работы с файлами, возможно, есть функция, которая за один раз считывает весь файл в ассоциативный массив, например. Можно попробовать поискать подобную функцию в инклудах / в api:
Вы должны зарегистрироваться, чтобы видеть ссылки.Добавлено спустя 1 минуту 48 секунд:Например, появились функции для работы
Вы должны зарегистрироваться, чтобы видеть ссылки.. Можно воспользоваться ими, как вариант.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
PbIC9TuHa » 18 май 2018, 09:03
Json -это хорошо , но у меня обычный INI файл .
еще раз повторю задачку :
- подключился игрок
- проверили наличие его стима в определенном файле
- если нет - false
- если есть - true
в файле может быть 20 - 50 строк
в строке несколько блоков
1 блок строки и есть СТИМ игрока .
может циклом пробежаться ? и не заморачиваться особо ?
и как это отразится на нагрузке сервера ?
-
PbIC9TuHa
-
- Сообщения: 37
- Зарегистрирован: 12 дек 2016, 09:49
- Благодарил (а): 10 раз.
- Поблагодарили: 2 раз.
- Опыт программирования: Меньше недели
- Языки программирования: php
-
Vaqtincha » 18 май 2018, 09:07
PbIC9TuHa, юзай трие массив.
админгандонсоси
-
Vaqtincha
-
- Сообщения: 277
- Зарегистрирован: 28 мар 2018, 15:05
- Забанен
- Благодарил (а): 8 раз.
- Поблагодарили: 53 раз.
Subb98 » 18 май 2018, 09:11
PbIC9TuHa, для чего повторять задачу? От того, что вы 1000 раз повторите слово "халва", слаще в горле не станет. Я вам предложил варианты, дальше вы уже можете выбрать оптимальный для вас.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
PbIC9TuHa » 18 май 2018, 15:25
Vaqtincha писал(а):PbIC9TuHa, юзай трие массив.
сенькю - так и сделал
как обычно все оказалось до безобразия просто
за основу взял пример ранее описанный тут же на форуме :
- Код: Выделить всё
static Trie:g_t_messages
public plugin_init()
{
register_clcmd("say","say_hook")
new i_file=fopen("addons/amxmodx/configs/test.ini","rt")
if(!i_file)
return PLUGIN_CONTINUE
g_t_messages=TrieCreate()
new s_buffer[256],s_message[128],s_reason[128]
while(!feof(i_file))
{
fgets(i_file,s_buffer,255)
trim(s_buffer)
if(!s_buffer[0]||s_buffer[0]==';'||(s_buffer[0]=='/'&&s_buffer[1]=='/'))
continue
parse(s_buffer,s_message,127,s_reason,127)
TrieSetString(g_t_messages,s_message,s_reason)
}
fclose(i_file)
return PLUGIN_CONTINUE
}
public say_hook(i_player)
{
new i_argc=read_argc()
new s_buffer[128],s_message[128]
for(new a=1;a<i_argc;a++)
{
read_argv(a,s_buffer,127)
format(s_message,127,"%s %s",s_message,s_buffer)
}
format(s_message,127,s_message[1])
if(TrieKeyExists(g_t_messages,s_message))
{
new s_banreason[128]
TrieGetString(g_t_messages,s_message,s_banreason,127)
server_cmd("kick #%d Using %s!",s_banreason)
}
}
Только в моем случае я не читаю ЧАт - а просто подсовываю STEAM
-
PbIC9TuHa
-
- Сообщения: 37
- Зарегистрирован: 12 дек 2016, 09:49
- Благодарил (а): 10 раз.
- Поблагодарили: 2 раз.
- Опыт программирования: Меньше недели
- Языки программирования: php
-
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot], Google [Bot], Majestic-12 [Bot] и гости: 14