cressidagp

interfaceHandler

Dec 30th, 2024
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.18 KB | None | 0 0
  1.  
  2. -- local UNIT_FIELD_SUMMONEDBY = 0x0006 + 0x0008
  3.  
  4. ARCMERCS = {}
  5. DB = {}
  6.  
  7. --- getWeaponsFromDB
  8. ---   Gets from arcmercs database slot1, slot2, slot3 weapons when a stance its selected.
  9. ---
  10. --- Parameter(s)
  11. ---   display
  12. ---   stance
  13. ---   unit
  14. ---
  15. --- Return value
  16. ---   None.
  17. ---
  18. function getWeaponsFromDB( display, stance, unit )
  19.  
  20.     local w = WorldDBQuery("SELECT slot1, slot2, slot3 FROM arcmercs.weapons WHERE display = '"..display.."' AND stance = '"..stance.."'")
  21.    
  22.     unit:EquipWeapons( w:GetColumn( 0 ):GetULong(), w:GetColumn( 1 ):GetULong(), w:GetColumn( 2 ):GetULong() )
  23.  
  24. end
  25.  
  26. --- getDisplayOptions
  27. ---   Gets from database all displayId options for a class of mercenary.
  28. ---
  29. --- Parameter(s)
  30. ---   entry
  31. ---
  32. --- Return value
  33. ---   None.
  34. ---
  35. function getDisplayOptions( entry )
  36.    
  37.     DB["rowcount"] = 0
  38.  
  39.     local result = WorldDBQuery("SELECT groupId, optionName, optionId, display FROM arcmercs.gossip_display WHERE entry = '"..entry.."'")
  40.  
  41.     if result then
  42.  
  43.         local count = result:GetRowCount()
  44.  
  45.         DB["rowcount"] = count
  46.  
  47.         for i = 1, count do
  48.  
  49.             DB[ i ] = { result:GetColumn( 0 ):GetShort(), result:GetColumn( 1 ):GetString(), result:GetColumn( 2 ):GetShort(), result:GetColumn( 3 ):GetLong() }
  50.  
  51.             --print( DB[i][1], DB[i][2], DB[i][3] )
  52.  
  53.             result:NextRow()
  54.  
  55.         end
  56.  
  57.     end
  58.  
  59. end
  60.  
  61. function ARCMERCS.MercsOnHello( unit, event, plr )
  62.  
  63.     local value = unit:GetUInt64Value( 0x0006 + 0x0008 )
  64.  
  65.     if value == nil then
  66.  
  67.         unit:GossipCreateMenu( 1, plr, 0 )
  68.  
  69.         unit:GossipMenuAddItem( 6, "I see. I accept your offer.", 0, 0 )
  70.  
  71.         unit:GossipMenuAddItem( 0, "I do not need you now, Mercenary.", 1, 0 )
  72.  
  73.     else
  74.  
  75.         local plrGuid = tostring(plr:GetGUID())
  76.  
  77.         local ownerGuid = tostring(value)
  78.  
  79.         if ownerGuid == plrGuid then
  80.  
  81.             unit:GossipCreateMenu( 2, plr, 0 )
  82.  
  83.             unit:GossipMenuAddItem( 4, "Use a more balance fight style.", 2, 0 )
  84.  
  85.             unit:GossipMenuAddItem( 4, "Focus more on defense right now.", 3, 0 )
  86.  
  87.             unit:GossipMenuAddItem( 4, "Go into aggressive fight style for now.", 4, 0 )
  88.  
  89.             unit:GossipMenuAddItem( 9, "Attack my target.", 5, 0 )
  90.  
  91.             unit:GossipMenuAddItem( 2, "Move to my target.", 6, 0 )
  92.  
  93.             unit:GossipMenuAddItem( 3, "Show me your abilities.", 7, 0 )
  94.            
  95.             unit:GossipMenuAddItem( 2, "Follow front.", 8, 0 )
  96.            
  97.             unit:GossipMenuAddItem( 2, "Follow LF.", 9, 0 )
  98.            
  99.             unit:GossipMenuAddItem( 2, "Follow L.", 10, 0 )
  100.            
  101.             unit:GossipMenuAddItem( 2, "Follow LB.", 11, 0 )
  102.            
  103.             unit:GossipMenuAddItem( 2, "Follow back.", 12, 0 )
  104.            
  105.             unit:GossipMenuAddItem( 2, "Follow RB.", 13, 0 )
  106.            
  107.             unit:GossipMenuAddItem( 2, "Follow R.", 14, 0 )
  108.            
  109.             unit:GossipMenuAddItem( 2, "Follow RF.", 15, 0 )
  110.  
  111.             unit:GossipMenuAddItem( 8, "Customize.", 16, 0 )
  112.  
  113.         else
  114.  
  115.             unit:GossipCreateMenu( 3, plr, 0 )
  116.  
  117.         end
  118.  
  119.     end
  120.  
  121.     unit:GossipSendMenu( plr )
  122.  
  123. end
  124.  
  125. function ARCMERCS.MercsOnSelection( unit, event, plr, id, intid, code )
  126.  
  127.     if intid < 16 then
  128.  
  129.         if intid == 0 then
  130.  
  131.             if getMercCount( plr, 0 ) < 3 then
  132.  
  133.                 if plr:GetCoinage() > 10 then
  134.  
  135.                     unit:SendChatMessage( 12, 0, "Yes." )
  136.  
  137.                 end
  138.  
  139.             end
  140.  
  141.         end
  142.  
  143.         if intid == 1 then
  144.  
  145.             unit:SendChatMessage( 12, 0, "Fuck you." )
  146.  
  147.         end
  148.  
  149.         if intid == 2 then
  150.  
  151.             if not unit:HasAura( 2457 ) then
  152.            
  153.                 unit:SendChatMessage( 12, 0, "Very well I shall fight in a mixed style." )
  154.                
  155.                 unit:CastSpell( 2457 ) -- battle stance
  156.  
  157.                 if unit:HasAura( 71 ) then
  158.                
  159.                     unit:RemoveAura( 71 )
  160.                
  161.                 end
  162.                
  163.                 if unit:HasAura( 2458 ) then
  164.                
  165.                     unit:RemoveAura( 2458 )
  166.                
  167.                 end
  168.                
  169.             end
  170.                
  171.             WorldDBQuery("UPDATE arcmercs.mercenaries SET stance = '1' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  172.            
  173.             ARCMERCS[tostring(unit)].soldierStance = 1
  174.            
  175.             getWeaponsFromDB( unit:GetDisplay(), intid - 1, unit )
  176.            
  177.             unit:SetByteValue( 0x7A, 0, 1 )
  178.  
  179.         end
  180.  
  181.         if intid == 3 then
  182.  
  183.             if not unit:HasAura( 71 ) then
  184.            
  185.                 unit:SendChatMessage( 12, 0, "Well, Tank mode it is then." )
  186.            
  187.                 unit:CastSpell( 71 ) -- defensive stance
  188.  
  189.                 if unit:HasAura( 2457 ) then
  190.                
  191.                     unit:RemoveAura( 2457 )
  192.                
  193.                 end
  194.                
  195.                 if unit:HasAura( 2458 ) then
  196.                
  197.                     unit:RemoveAura( 2458 )
  198.                    
  199.                 end
  200.            
  201.             end
  202.            
  203.             WorldDBQuery("UPDATE arcmercs.mercenaries SET stance = '2' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  204.            
  205.             ARCMERCS[tostring(unit)].soldierStance = 2
  206.            
  207.             getWeaponsFromDB( unit:GetDisplay(), intid - 1, unit )
  208.            
  209.             unit:SetByteValue( 0x7A, 0, 1 )
  210.  
  211.         end
  212.  
  213.         if intid == 4 then
  214.        
  215.             if not unit:HasAura( 2458 ) then
  216.  
  217.                 unit:SendChatMessage( 12, 0, "Ok, I will be taking more damage, just so you know." )
  218.            
  219.                 unit:CastSpell( 2458 ) -- berserker stance
  220.  
  221.                 if unit:HasAura( 2457 ) then
  222.                
  223.                     unit:RemoveAura( 2457 )
  224.                    
  225.                 end
  226.                
  227.                 if unit:HasAura( 71 ) then
  228.                
  229.                     unit:RemoveAura( 71 )
  230.                    
  231.                 end
  232.            
  233.             end
  234.            
  235.             WorldDBQuery("UPDATE arcmercs.mercenaries SET stance = '3' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  236.            
  237.             ARCMERCS[tostring(unit)].soldierStance = 3
  238.            
  239.             getWeaponsFromDB( unit:GetDisplay(), intid - 1, unit )
  240.            
  241.             unit:SetByteValue( 0x7A, 0, 1 )
  242.  
  243.         end
  244.  
  245.         if intid == 5 then
  246.        
  247.             local target = plr:GetSelection()
  248.            
  249.             if target then -- TODO: add is friendly check (bugged?)
  250.            
  251.                 unit:AttackReaction( target, 1, 0 )
  252.  
  253.                 unit:SendChatMessage( 14, 0, "Charge!!!" )
  254.            
  255.             else
  256.            
  257.                 plr:SendBroadcastMessage( "Need to choose an enemy target first." )
  258.            
  259.             end
  260.  
  261.         end
  262.  
  263.         if intid == 6 then
  264.  
  265.             local target = plr:GetSelection()
  266.            
  267.             if target then
  268.            
  269.                 unit:SetUnitToFollow( nil, 0, 0 ) -- need to stop following or it will return before reach
  270.            
  271.                 unit:MoveTo( target:GetX(), target:GetY(), target:GetZ() )
  272.            
  273.                 unit:SendChatMessage( 12, 0, "As you wish." )
  274.            
  275.             else
  276.            
  277.                 plr:SendBroadcastMessage( "Need to choose a target first." )
  278.                
  279.             end
  280.  
  281.         end
  282.  
  283.         if intid == 7 then
  284.  
  285.             --showSpells( entry, fightStyle )
  286.  
  287.         end
  288.  
  289.         if intid == 8 then
  290.        
  291.             unit:SetUnitToFollow( plr, 2, 0 ) -- front (0)
  292.            
  293.             WorldDBQuery("UPDATE arcmercs.mercenaries SET angle = '0' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  294.  
  295.         end
  296.  
  297.         if intid == 9 then
  298.        
  299.             unit:SetUnitToFollow( plr, 2, 1.04 ) -- left front (60)
  300.            
  301.             WorldDBQuery("UPDATE arcmercs.mercenaries SET angle = '1.04' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  302.  
  303.         end
  304.        
  305.         if intid == 10 then
  306.        
  307.             unit:SetUnitToFollow( plr, 2, 1.57 ) -- Left (90)
  308.            
  309.             WorldDBQuery("UPDATE arcmercs.mercenaries SET angle = '1.57' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  310.  
  311.         end
  312.        
  313.         if intid == 11 then
  314.        
  315.             unit:SetUnitToFollow( plr, 2, 2.09 ) -- left back (120)
  316.            
  317.             WorldDBQuery("UPDATE arcmercs.mercenaries SET angle = '2.09' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  318.  
  319.         end
  320.        
  321.         if intid == 12 then
  322.        
  323.             unit:SetUnitToFollow( plr, 2, 3.14 ) -- Back (180)
  324.            
  325.             WorldDBQuery("UPDATE arcmercs.mercenaries SET angle = '3.14' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  326.  
  327.         end
  328.        
  329.         if intid == 13 then
  330.        
  331.             unit:SetUnitToFollow( plr, 2, 4.18 ) -- Right back (240)
  332.            
  333.             WorldDBQuery("UPDATE arcmercs.mercenaries SET angle = '4.18' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  334.  
  335.         end
  336.        
  337.         if intid == 14 then
  338.        
  339.             unit:SetUnitToFollow( plr, 2, 4.71 ) -- Right (270)
  340.            
  341.             WorldDBQuery("UPDATE arcmercs.mercenaries SET angle = '4.71' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  342.  
  343.         end
  344.        
  345.         if intid == 15 then
  346.        
  347.             unit:SetUnitToFollow( plr, 2, 5.23 ) -- Right (300)
  348.            
  349.             WorldDBQuery("UPDATE arcmercs.mercenaries SET angle = '5.23' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..tostring(unit:GetGUID()).."'")
  350.  
  351.         end
  352.  
  353.         plr:GossipComplete()
  354.    
  355.     end
  356.  
  357.     if intid == 16 then
  358.  
  359.         getDisplayOptions( unit:GetEntry() )
  360.        
  361.         unit:GossipCreateMenu( 4, plr, 0 )
  362.  
  363.         for i = 1, DB["rowcount"] do
  364.  
  365.             unit:GossipMenuAddItem( 8, DB[i][2], DB[i][3], 0 )
  366.            
  367.             --print(DB[i][2], DB[i][3], DB[i][4])
  368.  
  369.         end
  370.  
  371.         unit:GossipSendMenu( plr )
  372.  
  373.     end
  374.    
  375.     if intid >= 17 then
  376.    
  377.         local d = DB[intid-16][4]
  378.        
  379.         local m = tostring(unit:GetGUID())
  380.    
  381.         unit:SetModel( d )
  382.        
  383.         WorldDBQuery("UPDATE arcmercs.mercenaries SET display = '"..d.."' WHERE ownerGuid = '"..tostring(plr:GetGUID()).."' AND mercGuid = '"..m.."'")
  384.        
  385.         -- TODO: get stance
  386.        
  387.         getWeaponsFromDB( d, 1, unit )
  388.        
  389.         plr:GossipComplete()
  390.  
  391.     end
  392.  
  393.     --plr:GossipComplete()
  394.  
  395. end
  396.  
  397. -- Alliance:
  398. RegisterUnitGossipEvent( 43284, 1, ARCMERCS.MercsOnHello );
  399. RegisterUnitGossipEvent( 43284, 2, ARCMERCS.MercsOnSelection );
  400.  
  401. -- Horde:
  402. RegisterUnitGossipEvent( 43285, 1, ARCMERCS.MercsOnHello );
  403. RegisterUnitGossipEvent( 43285, 2, ARCMERCS.MercsOnSelection );
  404.  
Add Comment
Please, Sign In to add comment