Forum > Miscellaneous
[QUESTION] New expansion id
(1/2) > >>
davidfaca:
Hi, i've been trying to implement a new expansion ID in 3.3.5a.
Until now I've implemented it correctly on the server and it startsup correctly, if I use an account marked as expansion 2 i can even log in.
The problem is, when i try to log in with an account marked as expansion 3 I just receive a message saying that I have an account flagged as lich king but i have no lich king data installed.
After some research I've seen that this is the standard message after LK for when an account expansion and client expansion mismatch, but i haven't found any clue about how to solve this.
Can anyone give a clue about that?
Thanks.
schlumpf:
Without further investigation, I guess it is either in LUA (less likely) or hardcoded in the client (more likely). Try searching for the error given in the GlueXML files.
davidfaca:
The error seems to be called in accountlogin.lua
GlueDialog_Show("CLIENT_ACCOUNT_MISMATCH", CLIENT_ACCOUNT_MISMATCH_LK);
which is part of this function:
--- Code: ---function AccountLogin_OnEvent(event, arg1, arg2, arg3) if ( event == "SHOW_SERVER_ALERT" ) then ServerAlertText:SetText(arg1); ServerAlertFrame:Show(); elseif ( event == "SHOW_SURVEY_NOTIFICATION" ) then AccountLogin_ShowSurveyNotification(); elseif ( event == "CLIENT_ACCOUNT_MISMATCH" ) then local accountExpansionLevel = arg1; local installationExpansionLevel = arg2; if ( accountExpansionLevel == 1 ) then GlueDialog_Show("CLIENT_ACCOUNT_MISMATCH", CLIENT_ACCOUNT_MISMATCH_BC); else GlueDialog_Show("CLIENT_ACCOUNT_MISMATCH", CLIENT_ACCOUNT_MISMATCH_LK); end elseif ( event == "CLIENT_TRIAL" ) then GlueDialog_Show("CLIENT_TRIAL"); elseif ( event == "SCANDLL_ERROR" ) then GlueDialog:Hide(); ScanDLLContinueAnyway(); AccountLoginUI:Show(); elseif ( event == "SCANDLL_FINISHED" ) then if ( arg1 == "OK" ) then GlueDialog:Hide(); AccountLoginUI:Show(); else AccountLogin.hackURL = _G["SCANDLL_URL_"..arg1]; AccountLogin.hackName = arg2; AccountLogin.hackType = arg1; local formatString = _G["SCANDLL_MESSAGE_"..arg1]; if ( arg3 == 1 ) then formatString = _G["SCANDLL_MESSAGE_HACKNOCONTINUE"]; end local msg = format(formatString, AccountLogin.hackName, AccountLogin.hackURL); if ( arg3 == 1 ) then GlueDialog_Show("SCANDLL_HACKFOUND_NOCONTINUE", msg); else GlueDialog_Show("SCANDLL_HACKFOUND", msg); end PlaySoundFile("Sound\Creature\MobileAlertBot\MobileAlertBotIntruderAlert01.wav"); end end end --- End code ---
But i can't find exactly how this is called.
schlumpf:
CLIENT_ACCOUNT_MISMATCH is pushed by the executable. You can't modify that. Your goal thus needs to be to prevent event. To do that, you need to find out, where it is pushed, thus reverse engineering. There are two methods: GetAccountExpansionLevel and GetExpansionLevel. They can be different. Also there is a CVar "accounttype", which has one of the hardcoded values CL, BC, LK, CT,
CLIENT_ACCOUNT_MISMATCH is 27. And I can't find it right now. Even after I have searched for at least half an hour now.
You will run into client limitations for sure, by the way. For example CalendarDefaultGuildFilter has a MAX_LEVELS_FOR_EXPANSIONS array with fixed length. ClientConnection has a hardcoded value MAX_EXPANSIONS, with playerExpansionLevel<NUM_EXPANSIONS asserted.
Expansion level in CGServerInfo is sent by the server.
To allow me finding out more: When does CLIENT_ACCOUNT_MISMATCH happen?
davidfaca:
Thanks for the reply, the thing is that i've been searching for that but i haven't found anything in the lua files other than in accountlogin.lua but i'm not experienced enough in lua to assure that.
Navigation
[0] Message Index
[#] Next page
|