среда, 11 января 2012 г.

Как стягивать полотенце...


Одно время я просто пользовалась таким макросом:

/э стягивает полотенце с %t.

Где /э - это переход в чат эмоций, "стягивает полотенце с " - это слова, которые прописываются в вышеназванном чате, а "%t" - это выделенная цель. Если у вас не выделена ни одна цель, то в чате появится нечто вроде "Маггия стягивает полотенце с <неизвестно>."

Несовершенство этого макроса в том, что он не учитывает склонение имён собственных. То есть, если вы хотите совершить действие с игроком, ник которого склоняется, получится сообщение с ошибкой, например "Маггия стягивает полотенце с Штука" (Штука доволен будет :)) Но тут уже вам решать, устраивает вас такой макрос, или нет.

Если вдруг вас не устраивает макрос, можно попробовать воспользоваться скриптом, любезно предоставленным мне Кантиссой (Спасибо Антон =*):


/script local name = UnitName("target") if (name) then genitive, dative, accusative, instrumental, prepositional = DeclineName(name, UnitSex("target"), 1) 
SendChatMessage("стягивает полотенце с "..genitive, "EMOTE", nil) end

Где прописав "script local name" мы оперируем с Именами. 

"UnitName" = чьё имя будет нами истязаться в разнообразных макросах :) "target" - не всякое имя, а только имя нашей цели.
"genitive, dative, accusative, instrumental, prepositional" -падежи. Для тех, кто не помнит/не знает, что это вообще такое, таблица:
__________________________________________

0 - именительный номинатив (nominative) кто? что?
1 - родительный генитив (genitive) кого? чего?
2 - дательный датив (dative) кому? чему?
3 - винительный аккузатив (accusative) кого? что?
4 - творительный аблатив (instrumentative) кем? чем?
5 - предложный препозитив (preposition) о ком? о чём?

___________________________________________

DeclineName(name, UnitSex("target"), 1) - цифра 1 в конце этой фразы означает родительный падеж. Если в вашем макросе должен учитываться другой падеж, измените цифру, на нужную вам.

Внутри SendChatMessage можете ставить любое своё предложение, хвала вашим бурным всплескам креатива. Не забывайте о пробелах!

"EMOTE" - в какой чат вы хотите отправить ваше сообщение? Выбирайте сами.


Примерный макрос каста иннервейта на цель:
/script local name = UnitName("target") if (name) then genitive, dative, accusative, instrumental, prepositional = DeclineName (name, UnitSex("target"), 1)
"sendchatmessage("Кидаю Озарение на ".. Accusative .."!!!", "yell", nil, name)".
Будет виден в чате /yell, то есть /крик. Ну и не забудьте добавить в макрос /cast Озарение


Как-то так, по просьбам трудящихся и Совы. Ваша Няша и Элементаль.

8 комментариев:

  1. Спасибо, Няша! Реально не хватало падежей. Вот теперь-то я развернусь...)

    ОтветитьУдалить
  2. "Ярлыки: для нубов, как снять полотенце, макросы"
    спасибо , почувствовал себя нубом :) не знал о таком применении падежей в макросах

    Кстати, у тебя в макросе 235 символов. И если оставить макрос как есть, то при перезаходе в игру возможны проблемы с этим и остальными макросами из-за длины.
    Тем кто будет использовать, предлагаю оптимизировать. Нужно убрать лишние символы, удалить проблелы и использовать сокращения где это возможно.
    Например, вместо /script написать /run
    а вместо переменной "name" - "n"

    ОтветитьУдалить
  3. Раньше были такие проблемы, но Панда научил, что создавать макросы нужно в основном не общие, а для каждого персонажа в отдельности, там проблемы быть не должно. По поводу символов - можно сократить сообщение, которое выкрикиваете вы, ну и использовать твои варианты сокращений)) Тоже прикольно. На офф форуме видела отличное сокращение:
    /run local t="target" if UnitName(t) then SendChatMessage("Воскрешаю "..select(1,DeclineName(UnitName(t),UnitSex(t),1)).."!","EMOTE") end

    ОтветитьУдалить
  4. А для нубов ярлык стоит для того, чтобы кое-кого научить стягивать полотенце первым предложенным вариантом.

    ОтветитьУдалить
  5. Я проще напишу - Горазд стягивает полотенце с Маггии. ;)

    ОтветитьУдалить
  6. Алексей :)) Вы меня в краску вгоняете :) Оранжевую)

    ОтветитьУдалить