Implementing: Beastlords/Channelers

EQ2Emulator Development forum.

Moderator: Team Members

Post Reply
User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Implementing: Beastlords/Channelers

Post by John Adams » Wed Aug 07, 2013 3:56 pm

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.
You do not have the required permissions to view the files attached to this post.
Last edited by John Adams on Thu Apr 17, 2014 4:18 pm, edited 2 times in total.
Reason: Renamed topic

User avatar
xinux
Team Member
Posts: 680
Joined: Wed Mar 10, 2010 11:10 am
Location: Destroyer of Servers

Re: Implementing: Beastlords

Post by xinux » Wed Aug 07, 2013 5:21 pm

Mine is almost 18 i need to finish getting him to 20 since the savagery bar doesn't even show up till then.
EQ II - Build=1360 (Orig) - Build=1360 (DoF) - Build=2654 (KoS) - Build=3375 (Classic) - Build=3554 (EoF)
EQ II - Build=4412 (RoK) - Build=5122 (TSO) - Build=6118 (SF) - Build=7628 (DoV) - Build=8295 (Aod)

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Implementing: Beastlords

Post by John Adams » Sun Aug 18, 2013 12:30 pm

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

User avatar
xinux
Team Member
Posts: 680
Joined: Wed Mar 10, 2010 11:10 am
Location: Destroyer of Servers

Re: Implementing: Beastlords

Post by xinux » Sun Aug 18, 2013 1:04 pm

Image

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>
EQ II - Build=1360 (Orig) - Build=1360 (DoF) - Build=2654 (KoS) - Build=3375 (Classic) - Build=3554 (EoF)
EQ II - Build=4412 (RoK) - Build=5122 (TSO) - Build=6118 (SF) - Build=7628 (DoV) - Build=8295 (Aod)

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Implementing: Beastlords

Post by John Adams » Mon Nov 25, 2013 9:50 am

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

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: Implementing: Beastlords

Post by Jabantiz » Sat Mar 15, 2014 1:16 am

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.
Last edited by Jabantiz on Sun Mar 16, 2014 2:51 pm, edited 1 time in total.

User avatar
thefoof
Retired
Posts: 630
Joined: Wed Nov 07, 2012 7:36 pm
Location: Florida

Re: Implementing: Beastlords

Post by thefoof » Sat Mar 15, 2014 2:14 am

Thanks for the info, will look into it

User avatar
thefoof
Retired
Posts: 630
Joined: Wed Nov 07, 2012 7:36 pm
Location: Florida

Re: Implementing: Beastlords

Post by thefoof » Sat Mar 15, 2014 5:45 am

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?

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: Implementing: Beastlords

Post by Jabantiz » Sat Mar 15, 2014 2:01 pm

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.

User avatar
thefoof
Retired
Posts: 630
Joined: Wed Nov 07, 2012 7:36 pm
Location: Florida

Re: Implementing: Beastlords

Post by thefoof » Sat Mar 15, 2014 6:54 pm

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

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: Implementing: Beastlords

Post by Jabantiz » Mon Mar 31, 2014 6:00 pm

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.

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: Implementing: Beastlords

Post by Jabantiz » Thu Apr 17, 2014 12:32 pm

Added support for spells to use savagery and dissonance

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: Implementing: Beastlords/Channelers

Post by Jabantiz » Thu Apr 17, 2014 5:46 pm

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?

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Implementing: Beastlords/Channelers

Post by John Adams » Sat Apr 19, 2014 2:05 am

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 ;)

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest