Not All AA Displayed
I'm attempting to create a PoP-era server. I've managed to get most of the core functionality working, so now I'm working on tailoring the content to be correct. I logged in to a test character and noticed that Luclin-era AAs are visible and available, but PoP-era AAs are not visible. This occurs in both the Titanium and SoF client.
Here's an example of an AA that should be displayed, but is not. This is the Ferocity AA (melee archetype AA): aa_abilities table: Code:
/truncated as requested Code:
/truncated as requested Edit: Oops. This was intended for general support, not Windows support. I was digging around for the answer and must have forgotten to swap forums. Edit2: Side note while talking about AA. Is the "BotAAExpansion" rule a reference to the raw expansion number (8=OoW) or bitmask (8=PoP)? |
Bump?
My World:ExpansionSettings value is 15 on all rulesets. I'm still scratching my head on this one. Edit: This happens on the Titanium, SoF, and UF clients with a max level character. |
Quote:
All enabled up to: Code:
Expansion Value All Expansions maybe this will help more http://wiki.eqemulator.org/p?Server_Rules&frm=Main |
Expansion Value:
Hot 10,118 CtoF 60,182 TDS 90,780 |
We revamped the AA system to be more inline with how live is. This means that the pop ranks were merged into other ranks. I'm guessing you see for example Innate Strength having 15 ranks instead of 5?
|
sorry to ask this in an unrelated thread, but if we are talking about world:expansionsettings and say we wanted to allow up to TDS
There's 3 different values listed in just this one thread...how do we decide which is right 1048576 2097151 90,780 ? |
The 1048576 is the bitmask value in ExpansionSettings for -just- the TDS expansion.
The 2097151 is the bitmask value for all expansions up to and including the TDS expansion. Not sure what the values Noport linked are for. |
Shaendare
I don't use numbers pulled out the air for World and Client Expansion Expansion Value: you can use what you posted if you want too Hot 10,118 CtoF 60,182 Recivied from client produced a string error 6,082 TDS 90,780 |
I'm still lost there. You're clearly talking about something other than World:ExpansionSettings in the rule_values table.
I have no doubt that it has something to do with the expansions, though, Opcode Ninja. |
Shaendare
I don't use numbers pulled out the air for World and Client Expansion CtoF Client produced a string error code 6,082 was change after fixed 60,182 Expansion Value TDS: you can use what you posted if you want too player_tables rule_values variables (5,'World:ExpansionSettings','90780','Expansion settings. Affects client features related to expansions.') ('Expansions','90780','Accessible expansions for each player','2010-09-06 15:03:51') |
Interesting, so either one will work? Maybe this has something to do with the "funny" thing about this setting people noticed some time ago, unless they were mistaken. I use the bitmask and it works so far and that's as much as I remember about it. It was a post from at least a couple/few years ago.
Only one way to find out. |
Quote:
Side note, if a mod wanted to chop up the text within code tags in the OP, that's fine with me to stop the left-to-right scrolling. I guess we have a time limit on being able to edit our own posts. |
Quote:
I think ima have to experiment a bit! |
I had UseClientBasedExpansionSettings disabled in ruletypes.h prior to compiling. I've since disabled it properly via an entry in the rule_values table (or should it be in the variables table instead?). I assume the setting was working when altered in ruletypes.h, since the AAs are being limited to SoL instead of the expansions of the client. I just figured I should do it properly so something doesn't screw up on a future git pull.
I've been digging around the code and I can't quite nail down where the expansion limit comes into play. I'll try upping the expansion limit a bit and see what happens when. |
Well, setting the ExpansionSettings variable to 31 (LoY and all prior) made PoP AA appear. Just to see what would happen, I set it to 16 (LoY only). It showed only PoP AA. I'm even more confused now.
Edit: 24 gave me SoL and PoP AA. It's almost like the bitmask values are being doubled. Edit2: Well, not doubled, but shifted. 1=Vanilla, 2=Kunark, 4=Velious, etc. If that's correct, then 24 was SoL/PoP and 23 should be Vanilla/Kunark/Velious/PoP (so no SoL AA should show). I'm trying that now... and 23 shows only PoP AA. I have no idea where this shift would have come from. Edit3: The only changes I had made to source was a hack for old-time race xp penalties in zone/exp.cpp, some default rules changes in common/ruletypes.h, and a hack to try to limit client types on the server (still not sure about this one). To be safe, I've hard reset back to HEAD and am recompiling. We'll see what happens on the new binaries in a few. Edit4: Recompiled. Same result. Thoughts? Edit5: Yes, I like edits, apparently. So AA is acting as if the expansion bitmask is shifted, but other things tied to ExpansionSettings aren't (such as Frogloks being allowed when set to 31). This is really confusing. |
I might have just found the issue (though I'm SUPER rusty with C++ and terrible with bitmasks in general). In zone/aa.cpp, on line 1421, there is the following code:
Code:
if(IsClient()) { Code:
if(!(CastToClient()->GetPP().expansions & (1 << (rank->expansion - 1)))) { I made this change and recompiled zone. The AA's showed up properly (SoL and PoP together) when using an ExpansionSettings value of 15. I changed it to 8, restarted the server, and only PoP AA showed up, as expected. Could a dev take a look and see if I'm correct here or let me know if I'm a complete idiot? |
After today's update to eqemu_update.pl, I tried updating my AA tables via the script and recompiling zone without the above modification. They again showed an expansion behind. I was hoping maybe my AA table having the old data was the problem, but apparently not.
Any thoughts on the above code modification being right or completely wrong? |
Guess there aren't a lot of people working on expansion limiting AAs after the revamp to chime in. :/
|
I'm definitely interested and would help if I could.
|
you might have to bush up on your c++ programing and work with eq_packet_structs
|
Quote:
|
So I took a look at this again today and I think I was right above, but for the wrong reason.
I looked into bit shifting a bit more and realized I was calculating it wrong above (though still coming up with kinda the right answer). I think my logic needs to look at what possibilities should evaluate true. I'm going to do a bit of rambling just to get thoughts down into the thread. Feel free to pick any of it apart. Earlier, AdrianD posted the expansion value chart: Code:
Expansion Value All Expansions Code:
SoL - 00000100 Code:
SoL - 00001000 Code:
if(!(CastToClient()->GetPP().expansions & (1 << (rank->expansion - 1)))) { |
I haven't been ignoring this one..my online time is limited and I've attempted twice to respond to it - without luck...
You can set bitmasks up to represent just about anything..but, looking specifically at the expansion value chart posted (re-posted) above: Kunark has a bit value of 1 and a bitmask of 1. A standard ordinal bitmask will usually exclude 0 from its rankings due to the fact that the lowest provable ranking value is 1 - there is no 0's column in bit representation. To convert an ordinal bit ranking to bit position, yes, a simple (1 << (ord_val - 1)) should be used. For cases of 0, you would simple prove it by checking (bool)ord_val == false or ord_val == 0. SIDENOTE: You can create a positive mask for validating greater than the ordinal ranking by using (~0 << ord_val). C++ doesn't implement bit rotations, so there is no chance of a wrap-around with a standard bit shift. In the case of Kunark, converting the 'value' to a bit position in the coded example does indeed produce 0x02 where the mask is 0x01. However, look at what is being considered: CanUseAlternateAdvancementRank Since the transformation reflects a greater than positional value, and there is a 'false' return methodology, you really don't want that condition to be true for an exclusionary check. There's a lot of systems that I'm not up-to-speed with - this being one of them. But, looking at what is defined and what is being checked, I think that particular code snippet is correct. That's not to say that there may not be issues elsewhere (these guys are pretty sharp and usually catch logic errors pretty quick.) |
Quote:
Quote:
Code:
0100 Quote:
|
[Still think I'm missing something here...]
Let me ask around on this one..it's very possible that we need to adjust some things. |
Quote:
Thanks for taking a look! |
All times are GMT -4. The time now is 09:37 AM. |
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.