• Страница 1 из 1
  • 1
Аддон с эмоциями
siv
Скаут
Всем привет.
Столкнулся с проблемой. Как сделать аддон, который проигрывал бы эмоции при нажатии на кнопки. А точнее, как реализовать воспроизведение какой-либо эмоции персонажем? Допустим /rofl.

Пробовал разные варианты с SendChatMessage(), но ничего не получалось. Потом, скачал аддон EmoteList (http://wowjp.net/forum/114-13673-1), там есть массив с элементами вида

Code
{ "ROFL", EMOTELIST_BUTTON_ROFL, EMOTELIST_SLASH_ROFL, EMOTELIST_TARGET_ROFL, EMOTELIST_NORMAL_ROFL, EMOTELIST_SUA, "1" }


Я попробовал использовать эти элементы в качестве параметра SendChatMessage()

Code
SendChatMessage(EMOTELIST_NORMAL_ROFL, "EMOTE")  
SendChatMessage(EMOTELIST_TARGET_ROFL, "EMOTE")


Но, получается тоже какая-то фигня. Надписи те, которые нужны, но перед ними мой ник. То есть надо убирать
Code
, "EMOTE"

Но тогда персонаж проговаривает эмоцию через /say.

Так все таки, как реализовать эмоцию?
Сообщение # 1 написано 24.06.2012 в 15:35
Nyll
Можно это сделать через

Code
SetAttribute


Или через

Code
DoEmote


Пример:

Code
/run DoEmote("dance", UnitName("target"))
Маме беркута привет!
Сообщение # 2 отредактировано Nyll - Воскресенье, 24.06.2012, 18:35
siv
Скаут
Спасибо)

Еще хочу спросить про иконку аддона на миникарте. В интернете я нарыл код xml файла и код lua файла:
Code

<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/">
  <Button name="MyMod_MinimapButton" parent="Minimap" enableMouse="true" movable="true" hidden="false">
   <Size>
    <AbsDimension x="33" y="33"/>
   </Size>
   <Anchors>
    <Anchor point="TOPLEFT"/>
   </Anchors>
   <Layers>
    <Layer level="BACKGROUND">
     <Texture name="MyMod_MinimapButton_Icon" file="Interface\Icons\INV_Misc_CelebrationCake_01">
      <Size>
       <AbsDimension x="21" y="21"/>
      </Size>
      <Anchors>
       <Anchor point="TOPLEFT">
        <Offset>
         <AbsDimension x="7" y="-6"/>
        </Offset>
       </Anchor>
      </Anchors>
     </Texture>
    </Layer>
    <Layer level="OVERLAY">
     <Texture file="Interface\Minimap\MiniMap-TrackingBorder">
      <Size>
       <AbsDimension x="56" y="56"/>
      </Size>
      <Anchors>
       <Anchor point="TOPLEFT"/>
      </Anchors>
     </Texture>
    </Layer>
   </Layers>
   <Frames>
    <Frame name="MyMod_MinimapButton_DraggingFrame" hidden="true">
     <Scripts>
      <OnUpdate>
       MyMod_MinimapButton_DraggingFrame_OnUpdate()
      </OnUpdate>
     </Scripts>
    </Frame>
   </Frames>
   <HighlightTexture alphaMode="ADD" file="Interface\Minimap\UI-Minimap-ZoomButton-Highlight"/>
   <Scripts>
    <OnLoad>
     this:RegisterForClicks("LeftButtonUp","RightButtonUp")
     this:RegisterForDrag("LeftButton","RightButton")
    </OnLoad>
    <OnDragStart>
     this:LockHighlight()
     MyMod_MinimapButton_DraggingFrame:Show()
    </OnDragStart>
    <OnDragStop>
     this:UnlockHighlight()
     MyMod_MinimapButton_DraggingFrame:Hide()
    </OnDragStop>
    <OnClick>
     MyMod_MinimapButton_OnClick() -- если кликнули по кнопке
    </OnClick>
   </Scripts>
  </Button>
</Ui>


Code

MyMod_Settings = { -- переменная, которая в *.toc файле записана в ## SavedVariables: MyMod_Settings
  MinimapPos = 45 -- позиция иконки в градусах
}

function MyMod_MinimapButton_Reposition() -- функция для рассчета позиции кнопки из градусов в координаты на миникарте
  MyMod_MinimapButton:SetPoint("TOPLEFT","Minimap","TOPLEFT",52-(80*cos(MyMod_Settings.MinimapPos)),(80*sin(MyMod_Settings.MinimapPos))-52)
end

function MyMod_MinimapButton_DraggingFrame_OnUpdate() -- вызывается из xml файла при передвижении кнопки курсором

  local xpos,ypos = GetCursorPosition()
  local xmin,ymin = Minimap:GetLeft(), Minimap:GetBottom()

  xpos = xmin-xpos/UIParent:GetScale()+70  
  ypos = ypos/UIParent:GetScale()-ymin-70

  MyMod_Settings.MinimapPos = math.deg(math.atan2(ypos,xpos))
  MyMod_MinimapButton_Reposition()
end

function MyMod_MinimapButton_OnClick() -- при нажатии на кнопку
     Main_frame()
end


Все работает, кнопка появляется, двигается и нажимается. Но, при каждой перезагрузке интерфейса она съезжает на одну и ту же позицию. За позицию отвечает переменная MyMod_Settings, которая сохраняется.

Получается проблема в загрузке этих координат. Говорят, нужно с эвентом VARIABLES_LOADED что-то сделать. Я попробовал вот так:

Code

events = CreateFrame("Frame") -- Делаем фрейм   
local frame = events -- Переводим название фреймы из events в frame   
frame:RegisterEvent("VARIABLES_LOADED");

frame:SetScript("OnEvent", MyMod_MinimapButton_Reposition());


Но ничего не работает. Как считать переменную из SavedVariables? И зачем нужно
Code

local frame = events -- Переводим название фреймы из events в frame   

?
Сообщение # 3 написано 25.06.2012 в 16:43
  • Страница 1 из 1
  • 1
Поиск: