Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

удалить кавычку

Статус пользователя Legenda
сообщение 4.9.2014, 15:58
Сообщение #1


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

remove_quotes почему-то удаляет две кавычки
а если в тексте только одна кавычка - не работает...
из-за этого различные баги в плагинах бывают...
аля название сервера с amxbans меняется на "

тест

Код:

new test1[4] = "^"a^"";
remove_quotes(test1);
client_print(id,print_console,"%s",test1);
new test2[4] = "^"b";
remove_quotes(test2);
client_print(id,print_console,"%s",test2);


результат
Код
a
"b



src amx

Код:

static cell AMX_NATIVE_CALL remove_quotes(AMX *amx, cell *params) /* 1 param */
{
cell *text = get_amxaddr(amx, params[1]);

if (*text == '\"')
{
register cell *temp = text;
int len = 0;

while (*temp++)
++len; // get length

cell *src = text;

if (src[len-1] == '\r')
src[--len] = 0;

if (src[--len] == '\"')
{
src[len] = 0;
temp = src + 1;
while ((*src++ = *temp++));

return 1;
}
}

return 0;
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя admir
сообщение 4.9.2014, 17:19
Сообщение #2
Стаж: 13 лет

Сообщений: 192
Благодарностей: 31
Полезность: 138

Код:
native containi(const source[],const string[]);

находишь символ, получаешь его позицию, удаляешь.
можешь еще попробовать
Код:
native replace(text[], len, const what[], const with[]);

если совсем ленивый
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя nsgenn
сообщение 4.9.2014, 17:20
Сообщение #3


Стаж: 13 лет

Сообщений: 885
Благодарностей: 561
Полезность: 667

replace_all
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 5.9.2014, 16:19
Сообщение #4
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Legenda,
Код
new test1[4] = "^"a^"";
remove_quotes(test1);
client_print(id,print_console,"%s",test1);
new test2[4] = "^"b";
remove_quotes(test2);
client_print(id,print_console,"%s",test2);


присмотритесь....
для test1 у вас идет текст "a"
а для test2 текст "b

^" - это для того, если вы хотите напечатать символ " при том, чтоб его игнорировал компилятор.

Используйте один из двух вариантов

Упрощенный:
Код
new test2[4] = "b";


Сложней но надежней...
Код
new test2[4] = "^"b^"";


надежность, подразумевает в следующем, если вы например будете бинтить, то можно bind alt say /a (могут быть ошибки и т.д.), скорей всего ошибка и есть... А если написать bind "alt" "say /a" будет более правильней и без ошибок....

так-же и в вашем случае... можно напечатать просто b.... но правильней будет "b"

В вашем случае, лучший всего вариант будет:

Код
new test1[4] = "^"a^"";
new test2[4] = "^"b^"";

client_print(id, print_console, "%s", test1);
client_print(id, print_console, "%s", test2);


Отредактировал: Orty_Hart, - 5.9.2014, 16:24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 5.9.2014, 16:57
Сообщение #5


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Вы видимо все ни чего не поняли.
Просто сообщил о найденном баге в amxmodx из-за которого могут много проблемы и тестовый код привел.


remove_quotes почему-то удаляет две кавычки
а если в тексте только одна кавычка - не работает...

remove_quotes используется в большой кол-во плагинов, которые обрабатывают как-то текст
это например все плагины работающие с чатом
из-за того, что remove_quotes не удаляет одинарную кавычку - возникают баги, например название сервера меняется на " с amxbans

на этом всё...
тему можно закрыть...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 5.9.2014, 17:05
Сообщение #6
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Legenda, думаю, это не баг, а фича. Натива предназначена для обработки аргументов команд, для удаления концевых кавычек. Там они всегда парные. А еще могут быть частью аргумента, и удалять их будет неправильно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 5.9.2014, 17:14
Сообщение #7


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(Safety1st @ 5.9.2014, 19:05) *
Legenda, думаю, это не баг, а фича. Натива предназначена для обработки аргументов команд, для удаления концевых кавычек. Там они всегда парные. А еще могут быть частью аргумента, и удалять их будет неправильно.

может быть, в таком случаи во многих плагина авторы допустили ошибку, используя эту функцию
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 5.9.2014, 18:07
Сообщение #8


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

я вообще не понимаю зачем amxbans hostname меняет


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 5.9.2014, 18:23
Сообщение #9
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Legenda,
автор, я дал вам решение.... что вас не устраивает?
и если вы пишете сами плагины... то советую самому написать себе систему банов.... так можно ну оооочень сильно упростить себе коды и убрать лишнюю нагрузку... (написать можно на примере AmxAdmin, подключает адинов с БД)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 17.9.2014, 3:19
Сообщение #10
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(Safety1st @ 5.9.2014, 19:05) *
Legenda, думаю, это не баг, а фича. Натива предназначена для обработки аргументов команд, для удаления концевых кавычек. Там они всегда парные. А еще могут быть частью аргумента, и удалять их будет неправильно.

Немного исследовал этот вопрос. Не нашёл ни одного применения нативе remove_quotes() shok.gif read_argv() кавычки с аргумента снимает, parse() - тоже... Увидел только, что кавычки есть после read_args() на строку, отправленную в чат через Y/U (она всегда в кавычки оборачивается, т.е. 1 аргумент).

Вот в дефолтном 'Admin Chat' читают сразу все параметры команды через read_args(), а потом тут же делают remove_quotes() ; если первый и последний параметры при этом идут в кавычках - получится LOL: по концам строки кавычки удалятся, а в 'середине' останутся...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 17.9.2014, 10:03
Сообщение #11


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

хм..
открыл плагин hideslah какой-то
есть remove_quotes
ловит say и удаляет кавычки, если символ первый == / - блокирует

решит протестировать
если использовать messagemode или messagemode2
получается одно
а если использовать say - совершенно другое...

хз как там кавычки ставятся
при этом можно использовать
say "1gnqognqopgnqg"
say 1gnqognqopgnqg
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: