- ServUO Version
- Publish 57
- Ultima Expansion
- Endless Journey
I know the VIP access level is not really a thing anymore, which is exactly why I want to use it as a "reward" for certain players in the game so that they can have certain special perks. I can easily go into [props on a character and change the account AccessLevel to VIP, however that only changes it for that character, not the whole account. Interestingly, the Account List account information screen shows Player as the Access Level, but if you view the Client List, it shows VIP as the Access Level (if the player is on the char that you manually adjusted it for)
SO, what I've done is modified AdminGump.cs to add in a button for VIP when you click Change Access Level from the account information screen. I bumped the other buttons down and gave it a button ID of 5, 99 since it appeared that most other values were taken.
Now I just needed to figure out how to make the button actually DO something (this is my first time playing around with gumps). I believe that in the OnResponse method, there's a gigantic switch/case block with the code below. It appeared to me that the case values were the button ID index values perhaps? so I added my 99 index and added the code for newLevel=AccessLevel.VIP. However, this doesn't appear to do anything. After a restart, it compiled fine, but when you click the VIP button on the Change Access Level screen, it just makes the Admin gump disappear so my guess is something "bad" is happening.
Any and all help would be greatly appreciated! Thanks!
Well...I managed to figure it out!
In that second part, where case 20 (through case 24) all drop down into a subroutine, you need to scroll down to the end of that section where you get to case 36 (at least as of right now) that related to the //Clear login addresses comment. I added:
SO, what I've done is modified AdminGump.cs to add in a button for VIP when you click Change Access Level from the account information screen. I bumped the other buttons down and gave it a button ID of 5, 99 since it appeared that most other values were taken.
AdminGump.cs:
case AdminGumpPage.AccountDetails_ChangeAccess:
{
Account a = state as Account;
if (a == null)
break;
this.AddHtml(10, 125, 400, 20, this.Color(this.Center("Change Access Level"), LabelColor32), false, false);
this.AddLabel(20, 150, LabelHue, "Username:");
this.AddLabel(200, 150, LabelHue, a.Username);
this.AddLabel(20, 170, LabelHue, "Current Level:");
this.AddLabel(200, 170, LabelHue, FormatAccessLevel(a.AccessLevel));
this.AddButtonLabeled(20, 200, this.GetButtonID(5, 20), "Player");
this.AddButtonLabeled(20, 220, this.GetButtonID(5, 99), "VIP");
this.AddButtonLabeled(20, 240, this.GetButtonID(5, 21), "Counselor");
this.AddButtonLabeled(20, 260, this.GetButtonID(5, 22), "Game Master");
this.AddButtonLabeled(20, 280, this.GetButtonID(5, 23), "Seer");
if (from.AccessLevel > AccessLevel.Administrator)
{
this.AddButtonLabeled(20, 300, this.GetButtonID(5, 24), "Administrator");
if (from.AccessLevel > AccessLevel.Developer)
{
this.AddButtonLabeled(20, 320, this.GetButtonID(5, 33), "Developer");
if (from.AccessLevel >= AccessLevel.Owner)
this.AddButtonLabeled(20, 340, this.GetButtonID(5, 34), "Owner");
}
}
goto case AdminGumpPage.AccountDetails;
}
Now I just needed to figure out how to make the button actually DO something (this is my first time playing around with gumps). I believe that in the OnResponse method, there's a gigantic switch/case block with the code below. It appeared to me that the case values were the button ID index values perhaps? so I added my 99 index and added the code for newLevel=AccessLevel.VIP. However, this doesn't appear to do anything. After a restart, it compiled fine, but when you click the VIP button on the Change Access Level screen, it just makes the Admin gump disappear so my guess is something "bad" is happening.
AdminGump.cs:
case 20: // Change access level
case 21:
case 22:
case 23:
case 24:
{
Account a = this.m_State as Account;
if (a == null)
break;
AccessLevel newLevel;
switch ( index )
{
default:
case 20:
newLevel = AccessLevel.Player;
break;
case 21:
newLevel = AccessLevel.Counselor;
break;
case 22:
newLevel = AccessLevel.GameMaster;
break;
case 23:
newLevel = AccessLevel.Seer;
break;
case 24:
newLevel = AccessLevel.Administrator;
break;
case 33:
newLevel = AccessLevel.Developer;
break;
case 34:
newLevel = AccessLevel.Owner;
break;
case 99:
newLevel = AccessLevel.VIP;
break;
}
if (newLevel < from.AccessLevel || from.AccessLevel == AccessLevel.Owner)
{
a.AccessLevel = newLevel;
CommandLogging.WriteLine(from, "{0} {1} changing access level of account {2} to {3}", from.AccessLevel, CommandLogging.Format(from), a.Username, a.AccessLevel);
from.SendGump(new AdminGump(from, AdminGumpPage.AccountDetails_Information, 0, null, "The access level has been changed.", this.m_State));
}
break;
}
Any and all help would be greatly appreciated! Thanks!
Well...I managed to figure it out!
In that second part, where case 20 (through case 24) all drop down into a subroutine, you need to scroll down to the end of that section where you get to case 36 (at least as of right now) that related to the //Clear login addresses comment. I added:
AdminGump.cs:
case 36: // Clear login addresses
{
Account a = this.m_State as Account;
if (a == null)
break;
IPAddress[] ips = a.LoginIPs;
if (ips.Length == 0)
from.SendGump(new AdminGump(from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, "This account has not yet been accessed.", this.m_State));
else
from.SendGump(new WarningGump(1060635, 30720, String.Format("You are about to clear the address list for account {0} containing {1} {2}. Do you wish to continue?", a, ips.Length, (ips.Length == 1) ? "entry" : "entries"), 0xFFC000, 420, 280, new WarningGumpCallback(RemoveLoginIPs_Callback), a));
break;
}
case 99: //VIP
goto case 20;
default:
{
index -= 50;
Account a = this.m_State as Account;
if (a != null && index >= 0 && index < a.Length)
{
Mobile m = a[index];
if (m != null)
from.SendGump(new AdminGump(from, AdminGumpPage.ClientInfo, 0, null, null, m));
}
else
{
index -= 6;
if (this.m_List != null && index >= 0 && index < this.m_List.Count)
{
if (this.m_List[index] is Account)
from.SendGump(new AdminGump(from, AdminGumpPage.AccountDetails_Information, 0, null, null, this.m_List[index]));
else if (this.m_List[index] is DictionaryEntry)
from.SendGump(new AdminGump(from, AdminGumpPage.Accounts, 0, (ArrayList)(((DictionaryEntry)this.m_List[index]).Value), null, new ArrayList()));
}
}
break;
}
Last edited: