Page 1 of 1
Implementing: Beastlords/Channelers
Posted: Wed Aug 07, 2013 3:56 pm
by John Adams
Not sure if anyone has a Beastie yet (Xinux? You seem to have every class at 90

) but I was going through UI Options today and saw these bits
SavageryUI.jpg
The top part is the Savagery "Level" %, and depending where you put the mouse the mouseover looks a little different.
The hotbar looking thing is the Beastlord UI.
Combo-Weakness.jpg
And this thing is a Combo (weakness) Window (?) Looks beastie...
Just more stuff to consider. Xinux, did you collect your beastlord leveling up? If not, I might try one out this week/end.
Re: Implementing: Beastlords
Posted: Wed Aug 07, 2013 5:21 pm
by xinux
Mine is almost 18 i need to finish getting him to 20 since the savagery bar doesn't even show up till then.
Re: Implementing: Beastlords
Posted: Sun Aug 18, 2013 12:30 pm
by John Adams
All,
I have renamed this topic to Implementing: Beastlords and figure it will be a good place to drop information about this class. After reading up on beasties for hours last night, the system that supports them seems rather complex - when comparing to a simple bash-n-dash fighter. There are many UI pieces, as the ones listed above, plus Warder tabs in the players Character UI (which I cannot even see "Warders" in my 1199 client)
Couple of links I found:
Xinus has a Beastlord at 20 now, and says he's collecting data and building structs to support the UIs.
I am not suggesting we drop everything and implement beastlords... but at least consider it and share info here so when we do, it might be less of a guessing game.
Thanks
Re: Implementing: Beastlords
Posted: Sun Aug 18, 2013 1:04 pm
by xinux
The bar is filled using OP_EqHearHealCmd.
The following spell will add 20 savagery to the bar i'm pretty sure the character struct comes into play also
Code: Select all
-- OP_ClientCmdMsg::OP_EqHearHealCmd --
8/18/2013 11:52:00
69.174.200.47 -> 192.168.1.101
0000: 00 3A 26 00 00 00 FF A0 02 78 37 86 06 78 37 86 .:&......x7..x7.
0010: 06 0E 00 00 00 00 00 00 00 0F 00 46 6C 75 72 72 ...........Flurr
0020: 79 20 6F 66 20 43 6C 61 77 73 10 01 y of Claws..
Yup character sheet comes into play. I had to trim the character sheet.
Code: Select all
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 43 61 6C 6C 6F 75 73 20 ........Callous
46 65 72 6F 63 69 74 79 00 00 00 00 00 00 00 00 Ferocity........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 78 37 86 06 00 97 02 D2 60 05 00 00 ....x7......`...
00 8C FC 3D 01 01 00 00 00 40 41 22 B7 BF 92 00 ...=.....@A"....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
New opcode 580
OP_Weakness
This buff allows you to cast spells like Flurry of Claws but it only lasts 5 seconds and it is a proc from your warder.
Code: Select all
-- OP_Unknown_580 --
8/18/2013 11:45:36
69.174.200.47 -> 192.168.1.101
0000: 00 09 04 E0 00 FF 44 02 08 00 77 65 61 6B 6E 65 ......D...weakne
0010: 73 73 00 00 00 00 ss....
Struct
Code: Select all
<Struct Name="WS_Weakness" ClientVersion="1" OpcodeName="OP_Weakness">
<Data ElementName="weakness" Type="EQ2_16Bit_String" />
<Data ElementName="duration" Type="float" Size="1" />
</Struct>
OP_PetOptionsResponse ** you need to send this packet before the warders tab will appear
Code: Select all
<Struct Name="WS_PetOptionsResponse" ClientVersion="1" OpcodeName="OP_PetOptionsResponse">
<Data ElementName="current_race" Type="EQ2_16Bit_String" Size="1" />
<Data ElementName="current_race2" Type="EQ2_16Bit_String" Size="1" />
<Data ElementName="spawn_id" Type="int32" />
<Data ElementName="num_pets" Type="int32" />
<Data ElementName="pets_array" Type="Array" ArraySizeVariable="num_pets">
<Data ElementName="tab_name" Type="EQ2_16Bit_String" Size="1" />
<Data ElementName="tab_race" Type="EQ2_16Bit_String" Size="1" />
<Data ElementName="tab_desc" Type="EQ2_16Bit_String" Size="1" />
<Data ElementName="level" Type="float" />
<Data ElementName="unknown2" Type="float" />
<Data ElementName="progress_bar" Type="float" />
<Data ElementName="rank" Type="EQ2_16Bit_String" Size="1" />
<Data ElementName="spell_id" Type="int32" />
<Data ElementName="unique_id" Type="int32" />
<Data ElementName="tier" Type="int8" />
<Data ElementName="unknown4" Type="int8" Size="3" />
<Data ElementName="spell_icon" Type="int16" />
<Data ElementName="unknown5" Type="int16" />
<Data ElementName="icon_type" Type="int16" />
<Data ElementName="unknown6" Type="int16" />
<Data ElementName="num_spells" Type="int32" />
<Data ElementName="spells_array" Type="Array" ArraySizeVariable="num_spells">
<Data ElementName="spell_id" Type="int32" />
<Data ElementName="unique_id" Type="int32" />
<Data ElementName="tier" Type="int8" />
<Data ElementName="unknown4" Type="int8" Size="3" />
<Data ElementName="spell_icon" Type="int16" />
<Data ElementName="unknown5" Type="int16" />
<Data ElementName="icon_type" Type="int16" />
<Data ElementName="unknown6" Type="int16" />
</Data>
</Data>
</Struct>
OP_SavageBarInitMsg
Code: Select all
<Struct Name="WS_SavageBar" ClientVersion="1" OpcodeName="OP_SavageBarInitMsg">
<Data ElementName="spell_id" Type="int32" />
<Data ElementName="bar" Type="int8" Size="1" />
<Data ElementName="unknown" Type="int8" Size="3" />
<Data ElementName="slot" Type="int8" Size="1" />
</Struct>
Re: Implementing: Beastlords
Posted: Mon Nov 25, 2013 9:50 am
by John Adams
Touching base on Beasties again, since now there is yet ANOTHER new class... I'd like to put it on the slate to at least start investigating how these classes work, so we don't end up years down the line without Beastlords or Channelers.
Aside from Xinux above, has anyone looked into their code/structs/opcodes?
I added this system to
[ProjMan], if anyone can think of additional detail. I also slated it initially for 0.7.3 (2014) unless we're overwhelmed with tasks already... not that anyone is actually following a plan here :p
Re: Implementing: Beastlords
Posted: Sat Mar 15, 2014 1:16 am
by Jabantiz
Info mainly for foof, for channelers spells need the following 2 elements set in WS_UpdateSpellBook
<Data ElementName="unknown5" Type="int8" Size="20" /> the 11th element
<Data ElementName="unknown6" Type="int8" Size="3" /> the second element
following code in Player::GetSpellBookUpdatePacket() will set it
Code: Select all
packet->setSubstructArrayDataByName("spells", "unknown5", 3, 10, ptr); // bitmask for slots 1 = slot 1, 2 = slot 2, 4 = slot 3, 8 = slot 4, 16 = slot 5, 32 = slot 6, 64 = slot 7, 128 = slot 8
packet->setSubstructArrayDataByName("spells", "unknown6", 6, 1, ptr); // 6 = channeler
need to send a OP_SavageBarInitMsg with a spell in your spell book, bar = 5, and slot = whatever (0 = slot 1)
I assume these are the same elements and process for the beastlord but in my tests I couldn't get it to work, also in OP_SavageBarInitMsg bar = 2 for advantages, I assume 3 = primal but haven't tested.
I would check the logs but the only beastlord log I have is from 1180 and I don't have and can't find the opcodes so anal isn't working on it.
Re: Implementing: Beastlords
Posted: Sat Mar 15, 2014 2:14 am
by thefoof
Thanks for the info, will look into it
Re: Implementing: Beastlords
Posted: Sat Mar 15, 2014 5:45 am
by thefoof
General questions for anyone who has played a beastlord:
1. I've read that the weakness proc triggers about every 5 seconds base and there's AA to increase it, is that about right?
2. Also reading that the base duration for the buff is 5 seconds, true?
3. Does the weakness proc give you an actual buff, debuff the mob or does it just give you the blue paw popup?
4. When weakness procs does it allow you to use an advantage ability on any target or specifically the one your warder found a weakness on?
Re: Implementing: Beastlords
Posted: Sat Mar 15, 2014 2:01 pm
by Jabantiz
Figured out beastlord bar, only need to set a the first element in unknown6, unknown5 is not needed, for advantages use this code
Code: Select all
packet->setSubstructArrayDataByName("spells", "unknown6", 32, 0, ptr);
for primal
Code: Select all
packet->setSubstructArrayDataByName("spells", "unknown6", 64, 0, ptr);
Again need to send the OP_SavageBarInit with a spell in your book bar = 2 for advantages and bar = 3 for primal (I verified they are correct) and slot = 0-3 for advantages or slot = 0-5 for primal.
We will need to have a new db field for if the spell can go on one of these 3 bars and a field for slots in the case of the channeler bar.
Re: Implementing: Beastlords
Posted: Sat Mar 15, 2014 6:54 pm
by thefoof
Jabantiz wrote:Figured out beastlord bar, only need to set a the first element in unknown6, unknown5 is not needed, for advantages use this code
Code: Select all
packet->setSubstructArrayDataByName("spells", "unknown6", 32, 0, ptr);
for primal
Code: Select all
packet->setSubstructArrayDataByName("spells", "unknown6", 64, 0, ptr);
Again need to send the OP_SavageBarInit with a spell in your book bar = 2 for advantages and bar = 3 for primal (I verified they are correct) and slot = 0-3 for advantages or slot = 0-5 for primal.
We will need to have a new db field for if the spell can go on one of these 3 bars and a field for slots in the case of the channeler bar.
Awesome
Re: Implementing: Beastlords
Posted: Mon Mar 31, 2014 6:00 pm
by Jabantiz
Added support in the spell book packet for Beastlord and Channeler spells. 2 new fields in the spell table, `savage_bar` determines the bar it can go in, 1 = advantages, 2 = primal, 3 = channeler, `savage_bar_slot` is only used on channelers and it is the bitmask for the slots it can go in.
Re: Implementing: Beastlords
Posted: Thu Apr 17, 2014 12:32 pm
by Jabantiz
Added support for spells to use savagery and dissonance
Re: Implementing: Beastlords/Channelers
Posted: Thu Apr 17, 2014 5:46 pm
by Jabantiz
We need to send a special packet to have the savage/dissonance spells put on the savage bar so should we create a new `character_` table to save them or try and put them into `character_skillbar`? As The savage bar is different from the skill bars I tend to favor a new table, thoughts?
Re: Implementing: Beastlords/Channelers
Posted: Sat Apr 19, 2014 2:05 am
by John Adams
Yeah, agree. It's a different "hotbar" mechanism, go easy and give it another table. If it starts looking redundant, you know we can always change it
