Воскресенье, 19.05.2024, 11:50
Приветствую Вас SPECTATOR | RSS

Home | Registration | LogIn

[ New messages · Users · Rules · Find · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: Faki, Odissey  
Форум » Общий форум - The general forum » Tremulous tips & tricks » Бинды на переименование (...для тех, кто "да переименуйте меня, ёп..." =))
Бинды на переименование
detDate: Понедельник, 19.01.2009, 13:13 | Message # 16
Барикада
Group: Пользователи
Posts: 24
Reputation: 1
Status: Оффлайн (offline)
Ув леди и джентельмены. ))
В начале у меня и было два конфига под алиенов и людей забинденых на F11 и F12.
И в каждом у меня все все что я знал было расписано.

Но я хотел узнать что таков вообще мультибинды и как их использовать. И что ж такое vstr и как использовать "временные" бинды (если такие вообще есть).
Я понял что можно на одну кнопку, допустим "1" забиндить сразу продажу существующего оружия и покупку райфл одновременно.

А как то еще можно ли их использовать?




Edited by det - Понедельник, 19.01.2009, 13:15
 
CATAHADate: Понедельник, 19.01.2009, 20:01 | Message # 17
САТАНА
Group: Администраторы
Posts: 218
Reputation: 11
Status: Оффлайн (offline)
наизвращаться можно как угодно. у меня допустим при нажатии клавиши "релоад" выдается соответствующий текст в чат команды. а через vstr используется обычно когда не получается через точку с запятой все команды пропихнуть. Вообще берем список команд кваки/тремы и все что можем придумать - так и можно использовать. =)
Ты конкретно спрашивай что хочешь реализовать =)


[Negative+Rejected+Refused!]
 
detDate: Вторник, 20.01.2009, 14:38 | Message # 18
Барикада
Group: Пользователи
Posts: 24
Reputation: 1
Status: Оффлайн (offline)
Раз конкретно так конкретно)
Я хочу понять работу например следующих строк:
Code

1 bind p "vstr pingpong"
2 set ping "echo ping; set pingpong vstr pong"
3 set pong "echo pong; set pingpong vstr ping"
4 vstr pong

В начале я решил что во второй строчке присваиваются значения для третьей, в третьей соответственно - наоборот.
Верно?

В первой строке идет бинд для переменной vstr значение pingpong
2 - указываем переменной ping значение вывести на экран слово ping и задать set хрен знает что. | я не понял это значит остальное.
3 - то же самое
4 что значит vstr pong? это что то вроде закрытия скрипта?


 
NightRainDate: Суббота, 31.01.2009, 04:39 | Message # 19
Адв Бази
Group: Модераторы
Posts: 22
Reputation: 2
Status: Оффлайн (offline)
Доброго времени суток клановцам j4f и участникам форума!

Quote (det)
Я хочу понять работу например следующих строк...

Ну что ж, я хоть и сам новичок в треме, но рискну попытаться объяснить (чуть что - знающие, надеюсь, подправят). smile Заранее sorry за "многа букаффф" (пытаюсь объяснить "на пальцах")...

Начну с "лирики"...
Раз уж вы, det, программировали, то вам, наверное, известно, что в некоторых языках (как правило скриптовых) существуют специальные префиксы (и/или постфиксы) для того, чтобы интерпретатор мог отличить переменную от другой лексемы. Для примера можно взять виндошный cmd.exe. Создание переменной там почти такое же как и создание оной в консоли q3 или tremulous. Итак, запускаем cmd.exe и потихоньку начинаем "шаманить":

Code
set myVar="test"

Отлично, переменная создана. Теперь попробуем распечатать её значение:
Code
echo myVar

В ответ командный интерпретатор послушно выведет нам "myVar", а не "test", что явно не соответствует изначальному замыслу. Ага, точно: мы кое-что забыли! Поправляем:
Code
echo %myVar%

Вот теперь порядок, вывели на экран значение переменной myVar.

То же самое, уверяю, произойдёт в консоли в треме. Интерпретатор команд не может отличить переменную от других лексем, ему нужно вспомогательное слово "vstr". Поэтому, "echo myVar" выведет на экран просто текст "myVar", а "echo vstr myVar" попытается вывести на экран СОДЕРЖИМОЕ переменной myVar, если таковая создана предварительно через /set myVar="XXX".

Таким образом, встречая в скриптах совокупность

Code
vstr<пробел>ИМЯ_ПЕРЕМЕННОЙ

просто мысленно заменяйте это сочетание на значение этой переменной.

Добавлено (31.01.2009, 04:39)
---------------------------------------------
Теперь от лирики можно приступить к разбору скрипта:

Code
1 bind p "vstr pingpong"   
2 set ping "echo ping; set pingpong vstr pong"   
3 set pong "echo pong; set pingpong vstr ping"   
4 vstr pong

1-ая строчка "байндит" клавишу "p" на переменную pingpong. Т.е. всякий раз при нажатии "p" будет выполняться командный текст, содержащийся в этой переменной (в строчке может быть несколько команд, тогда они разделяются символом ";"). Самой переменной ещё пока нет.
2-ая и 3-я создают соотв-нно переменные ping и pong.
А теперь давайте сразу обратимся к 4-ой строчке, так м.б. проще раскручивать. "vstr pong" означает выполнение того, что содержится в переменной pong, т.е. полностью эквивалентно тому, если бы вы набрали в консоли:

Code
echo pong; set pingpong vstr ping

... и нажали enter.
Что здесь происходит? Не забываем: мы ещё в 4-ой строчке. Вначале на экран выводится сообщение "pong", а затем создаётся переменная pingpong. В неё заносится значение переменной ping, т.е. такой вот текст: "echo ping; set pingpong vstr pong". Просто заносится значение-текст и после этого ничего не выполняется.

Спустя некоторое время вы таки решили нажать клавишу "р", и это эквивалентно тому, как если бы вы набрали и выполнили в консоли "echo ping; set pingpong vstr pong", т.е. по нажатию клавиши "p" вы вывели на экран уже другое сообщение ("ping") и присвоили переменной pingpong иное значение, а именно: "echo pong; set pingpong vstr ping" (при следующем нажатии клавиши "p" именно эта строчка и выполнится командным интерпретатором).

Подводя итоги, можно заметить нехитрую закономерность работы этого скриптика: при каждом нажатии "р" печатается текущее хранимое сообщение "ping" или "pong" и переменной pingpong поочерёдно присваивается то значение переменной ping, то значение переменной pong.

P.S. Det, поэкспериментируйте в консоли трема (посоздавайте переменные, поприсваивайте те или иные значения, повыводите на экран), многое должно стать понятнее...

Edited by NightRain - Суббота, 31.01.2009, 04:44
 
CATAHADate: Суббота, 31.01.2009, 12:11 | Message # 20
САТАНА
Group: Администраторы
Posts: 218
Reputation: 11
Status: Оффлайн (offline)
Маленькая поправочка. В общем смысл, конечно, не особо меняется, но все же.
На самом деле vstr не "выводит" содержимое переменной, а рассматривает какую-то текстовку как последовательность команд.
допустим если у нас есть переменная:
set "echo 3+5";
если мы будем выводить ее значение на экран то получим
echo 3+5
а вот если мы обработаем значение переменной как список команд, то получим выполнение кода:
"вывести на экран результат суммирования трех и пяти" =)


[Negative+Rejected+Refused!]
 
NightRainDate: Воскресенье, 01.02.2009, 04:00 | Message # 21
Адв Бази
Group: Модераторы
Posts: 22
Reputation: 2
Status: Оффлайн (offline)
Согласен с поправкой.

Перечитал сегодня свой пост и понял: я только ввожу людей в заблуждение (sorry Det, если уже пришлось потратить своё время, пытаясь меня понять). Изначально выбранная аналогия с переменными/значениями не совсем верная. Движок q3 различает понятия команд и переменных (параметров), поэтому я только вношу лишнюю неразбериху. Гораздо корректнее (как это делают в большинстве квейковских faq-ов) говорить в контексте термина "алиас" и ассоциированных с ним набором команд. Так что решил я подкорректировать свои "измышлизмы" и ниже выкладываю исправленную версию. Т.к. я уже не могу редактировать своё вышесозданное сообщение, то просьба к админам: плиз, снесите в небытие мой субботний пост от 04:39, чтобы глаза не мозолил.

Добавлено (01.02.2009, 04:00)
---------------------------------------------
Итак, исправленный пост:

Quote (det)
Я хочу понять работу например следующих строк...

Начну с "лирики"...
Раз уж вы, det, программировали, то вам, наверное, известно, что в некоторых языках (как правило скриптовых) существуют специальные префиксы (и/или постфиксы) для того, чтобы интерпретатор мог отличить переменную от другой лексемы. Для примера можно взять виндошный cmd.exe. Создание переменной там почти такое же как и создание оной в консоли q3 или tremulous. Итак, запускаем cmd.exe и потихоньку начинаем "шаманить":

Code
set myVar="test"

Отлично, переменная создана. Теперь попробуем распечатать её значение:
Code
echo myVar

В ответ командный интерпретатор послушно выведет нам "myVar", а не "test", что явно не соответствует изначальному замыслу. Ага, точно: мы кое-что забыли! Поправляем:
Code
echo %myVar%

Вот теперь порядок, вывели на экран значение переменной myVar.

Похожая ситуация в консоли в треме. Требуется специальное ключевое слово "vstr" для того, чтобы отличить алиас от обычных команд или просто лексем. Например, вы создаёте алиас "ping" (можно сразу прямо в консоли):

Code
set ping "echo Hi server!!!"

А теперь наберите в консоли "ping" и нажмите ввод. Появится сообщение, вроде: "usage: ping [server]", т.е. вызвалась встроенная команда ping, а не ваш алиас. Но если вы наберёте "vstr ping", то выполнится заданная алиасом команда echo и вы увидите сообщение "Hi server!!!".

Таким образом, встречая в скриптах совокупность

Code
vstr<пробел>ИМЯ_АЛИАСА

просто мысленно заменяйте это сочетание на последовательность команд, заданных для этого алиаса (обычно командой set или seta).

Кстати, если ваше имя алиаса не совпадает с именем команды или переменной, то можно посмотреть его текущее "значение" (т.е. набор ассоциированных с алиасом команд) просто набрав имя алиаса в консоли и нажав enter. Либо ещё проще: наберите несколько первых символов имени вашего алиаса и нажмите tab.

Добавлено (01.02.2009, 04:00)
---------------------------------------------
Теперь от лирики можно перейти к разбору скрипта:

Code
1 bind p "vstr pingpong"     
2 set ping "echo ping; set pingpong vstr pong"     
3 set pong "echo pong; set pingpong vstr ping"     
4 vstr pong

1-ая строчка "байндит" клавишу "p" на алиас pingpong (в нашем случае его значение будет динамически изменяться). Т.е. всякий раз при нажатии "p" будет выполняться командный текст, заданный для этого алиаса (в строчке может быть несколько команд, тогда они разделяются символом ";"). Самого алиаса ещё пока нет.
2-ая и 3-я создают соотв-нно алиасы ping и pong.
А теперь давайте сразу обратимся к 4-ой строчке, так м.б. проще раскручивать, хотя на деле, запуская команду /exec для вашего мини-скриптика, выполнение будет идти последовательно от 1-ой к 4-ой строчке. "vstr pong" означает выполнение того, что задано для алиаса pong, т.е. полностью эквивалентно тому, если бы вы набрали в консоли:

Code
echo pong; set pingpong vstr ping

... и нажали enter.
Что здесь происходит? Не забываем: мы ещё в 4-ой строчке. Вначале на экран выводится сообщение "pong", а затем создаётся алиас pingpong. В него заносится последовательность команд, заданная для алиаса ping, а именно: "echo ping; set pingpong vstr pong". Т.е. просто ассоциируется набор команд и ничего не выполняется.

Спустя некоторое время вы таки решили нажать клавишу "р", и это эквивалентно тому, как если бы вы набрали и выполнили в консоли "echo ping; set pingpong vstr pong", т.е. по нажатию клавиши "p" вы вывели на экран уже другое сообщение ("ping") и присвоили алиасу pingpong иное значение (иную последовательность команд), а именно: "echo pong; set pingpong vstr ping" (при следующем нажатии клавиши "p" именно эти команды и выполнятся командным интерпретатором).

Подводя итоги, можно заметить нехитрую закономерность работы этого скриптика: при каждом нажатии "р" печатается текущее хранимое сообщение "ping" или "pong" и алиасу pingpong поочерёдно присваивается то значение алиаса ping, то значение алиаса pong.

Edited by NightRain - Воскресенье, 01.02.2009, 03:57
 
[Monkey]Date: Среда, 18.02.2009, 14:57 | Message # 22
Адв Бази
Group: Модераторы
Posts: 131
Reputation: 7
Status: Оффлайн (offline)
хэлп, плз ^^
как сделать, что бы 3 разных имени 1ой кнопкой менялись? ^^
Например:
нажал на I - [Monkey]
нажел еще раз на I - ^1[^7Mo^3N^7key^1]
нажал еще раз - "имя какое-нибудь" =)


Извините за ошибки, если они имеются в данном сообщении.
 
OdisseyDate: Четверг, 19.02.2009, 00:27 | Message # 23
хитрый дретч
Group: Администраторы
Posts: 337
Reputation: 17
Status: Оффлайн (offline)
Ну сделать за тебя не сделаю, а кое что подскажу, тебе останеться только под себя изменить.
Глянуть можно вот здесь - про шифтер.
Если уж совсем не получитсья, то распишу подробно.


Нет смысла идти, если главное не упасть. А Башлачев.
 
[Monkey]Date: Четверг, 19.02.2009, 14:40 | Message # 24
Адв Бази
Group: Модераторы
Posts: 131
Reputation: 7
Status: Оффлайн (offline)
неа... вот пытался, пытался... не понял ничего(((
распиши, плиз


Извините за ошибки, если они имеются в данном сообщении.
 
DredDate: Четверг, 19.02.2009, 16:55 | Message # 25
Адв Мара
Group: Пользователи
Posts: 69
Reputation: 3
Status: Оффлайн (offline)
Quote (|Monkey|)
неа... вот пытался, пытался... не понял ничего(((
распиши, плиз

вольный текст для "особо одаренных" =) не в обиду будет сказано.... от балды, по-этому специально очепятки, которые не влияют на общее исполнение, т.е. оно и так будет работать.

Code
1 bind I "vstr riname"       
2 set monkey "name [Monkey] ; set riname vstr manki"       
3 set manki "name ^1[^7Mo^3N^7key^1] ; set riname vstr monkey"       
4 vstr monkey


Edited by Dred - Четверг, 19.02.2009, 16:56
 
[Monkey]Date: Четверг, 19.02.2009, 20:21 | Message # 26
Адв Бази
Group: Модераторы
Posts: 131
Reputation: 7
Status: Оффлайн (offline)
вот не работает и все тут =\

Извините за ошибки, если они имеются в данном сообщении.
 
NightRainDate: Четверг, 19.02.2009, 20:56 | Message # 27
Адв Бази
Group: Модераторы
Posts: 22
Reputation: 2
Status: Оффлайн (offline)
Quote
вот не работает и все тут =\

Мммм... А что конкретно делалось? Подробное описание? А то просто "не работает" или "вааще ничего не работает" - мало полезной инфы несёт. К примеру, у меня вышеприведённый Dred-ом скриптик отработал "на ура".

Но раз уж Monkey хотел 3 имени, то может так будет проще понять:

Code
bind i "vstr usenextname"         
set name1 "name [Monkey] ; set usenextname vstr name2"         
set name2 "name ^1[^7Mo^3N^7key^1] ; set usenextname vstr name3"         
set name3 "name [M.O.N.K.E.Y] ; set usenextname vstr name1"         

vstr name1

Всё это счастье я запихнул в созданный мною же самим файл "rename.cfg" и положил в папочку "base" трема. Перед игрой в консоли набираем "\exec rename.cfg".
Вот -> здесь можно посмотреть результат работы. smile

Правда, маленькое замечание. Не стоит забывать, что кол-во переименований за единицу времени может регулироваться сервером. Если вы сами создаёте сервер, то можно сбросить в ноль две переменные: g_maxNameChanges, g_minNameChangePeriod. Это позволит до посинения жмякать на клавишу "i" и наслаждаться работой скриптика.

Edited by NightRain - Четверг, 19.02.2009, 21:01
 
CATAHADate: Пятница, 20.02.2009, 02:01 | Message # 28
САТАНА
Group: Администраторы
Posts: 218
Reputation: 11
Status: Оффлайн (offline)
А вообще вы забываете об одной простой вещи... Во-первых лимит на переименования, а во-вторых таймлимит между переименованиями. И то и другое на разных серверах частенько стоит, даже на самых старых. Так что проще всего биндить имена на разные кнопки все же )

[Negative+Rejected+Refused!]
 
[Monkey]Date: Пятница, 20.02.2009, 14:06 | Message # 29
Адв Бази
Group: Модераторы
Posts: 131
Reputation: 7
Status: Оффлайн (offline)
Quote (NightRain)
Но раз уж Monkey хотел 3 имени, то может так будет проще понять:
Code
bind i "vstr usenextname"           
set name1 "name [Monkey] ; set usenextname vstr name2"           
set name2 "name ^1[^7Mo^3N^7key^1] ; set usenextname vstr name3"           
set name3 "name [M.O.N.K.E.Y] ; set usenextname vstr name1"           

vstr name1

УРААА! СПАСИБО! =)
теперь все работает, хотя сначала....... в общем я сделал все как было написано, но не работало, работало почему-то только отдельно "vstr name1", "vstr name2" и "vstr name3". потом я вписал "bind i "vstr usenextname"" и только после этого заработало. быть может и тогда у меня не работало из-за это?


Извините за ошибки, если они имеются в данном сообщении.
 
NightRainDate: Пятница, 20.02.2009, 19:33 | Message # 30
Адв Бази
Group: Модераторы
Posts: 22
Reputation: 2
Status: Оффлайн (offline)
Quote (CATAHA)
Так что проще всего биндить имена на разные кнопки все же )

Mаленько недопонял: как байнд на разные кнопки может повлиять на лимиты на переименования?
 
Форум » Общий форум - The general forum » Tremulous tips & tricks » Бинды на переименование (...для тех, кто "да переименуйте меня, ёп..." =))
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: