Fix entirely guild member removal:

- Add target menu "Remove from guild" button
- Proper confirm modal with translations
- Fix confirm modal when deleting user from Guilds section of Friends List
- Fix leader removal from Guild section of Friends list
This commit is contained in:
SuntrustDev
2026-02-16 01:25:14 +01:00
parent 205ae5fb4b
commit d351a79aae
19 changed files with 94 additions and 9 deletions

View File

@@ -113,7 +113,7 @@ class MessengerItem(ui.Window):
grp.RenderBar(x + 16, y, self.GetWidth() - 16, self.GetHeight())
class MessengerMemberItem(MessengerItem):
STATE_OFFLINE = 0
STATE_ONLINE = 1
@@ -126,6 +126,10 @@ class MessengerMemberItem(MessengerItem):
self.state = self.STATE_OFFLINE
self.Offline()
@property
def RemoveMessage(self):
return localeInfo.MESSENGER_DO_YOU_DELETE
def GetStepWidth(self):
return 15
@@ -245,6 +249,10 @@ class MessengerGuildItem(MessengerMemberItem):
def OnWarp(self):
net.SendGuildUseSkillPacket(155, self.key)
@property
def RemoveMessage(self):
return localeInfo.GUILD_REMOVE_MEMBER_QUESTION
def CanRemove(self):
for i in range(guild.ENEMY_GUILD_SLOT_MAX_COUNT):
@@ -252,7 +260,9 @@ class MessengerGuildItem(MessengerMemberItem):
return False
if guild.MainPlayerHasAuthority(guild.AUTH_REMOVE_MEMBER):
if guild.IsMemberByName(self.name):
guildMasterName = guild.GetGuildMasterName()
isTargetGuildMaster = guildMasterName == self.name
if guild.IsMemberByName(self.name) and not isTargetGuildMaster:
return True
return False
@@ -529,7 +539,7 @@ class MessengerWindow(ui.ScriptWindow):
if self.selectedItem:
if self.selectedItem.CanRemove():
self.questionDialog = uiCommon.QuestionDialog()
self.questionDialog.SetText(localeInfo.MESSENGER_DO_YOU_DELETE)
self.questionDialog.SetText(self.selectedItem.RemoveMessage)
self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnRemove))
self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
self.questionDialog.Open()

View File

@@ -9,6 +9,7 @@ import chr
import nonplayer
import localeInfo
import constInfo
import uiCommon
class TargetBoard(ui.ThinBoard):
@@ -23,6 +24,7 @@ class TargetBoard(ui.ThinBoard):
localeInfo.TARGET_BUTTON_LEAVE_PARTY,
localeInfo.TARGET_BUTTON_EXCLUDE,
localeInfo.TARGET_BUTTON_INVITE_GUILD,
localeInfo.TARGET_BUTTON_REMOVE_GUILD,
localeInfo.TARGET_BUTTON_DISMOUNT,
localeInfo.TARGET_BUTTON_EXIT_OBSERVER,
localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT,
@@ -109,6 +111,7 @@ class TargetBoard(ui.ThinBoard):
self.buttonDict[localeInfo.TARGET_BUTTON_EXCLUDE].SetEvent(ui.__mem_func__(self.OnPartyRemove))
self.buttonDict[localeInfo.TARGET_BUTTON_INVITE_GUILD].SAFE_SetEvent(self.__OnGuildAddMember)
self.buttonDict[localeInfo.TARGET_BUTTON_REMOVE_GUILD].SAFE_SetEvent(self.__OnGuildRemoveMember)
self.buttonDict[localeInfo.TARGET_BUTTON_DISMOUNT].SAFE_SetEvent(self.__OnDismount)
self.buttonDict[localeInfo.TARGET_BUTTON_EXIT_OBSERVER].SAFE_SetEvent(self.__OnExitObserver)
self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT].SAFE_SetEvent(self.__OnViewEquipment)
@@ -347,6 +350,22 @@ class TargetBoard(ui.ThinBoard):
def __OnGuildAddMember(self):
net.SendGuildAddMemberPacket(self.vid)
def __OnGuildRemoveMember(self):
self.questionDialog = uiCommon.QuestionDialog()
self.questionDialog.SetText(localeInfo.GUILD_REMOVE_MEMBER_QUESTION)
self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__OnGuildRemoveMemberAccept))
self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__OnGuildRemoveMemberClose))
self.questionDialog.Open()
def __OnGuildRemoveMemberAccept(self):
net.SendGuildRemoveMemberPacket(self.nameString)
self.__OnGuildRemoveMemberClose()
def __OnGuildRemoveMemberClose(self):
self.questionDialog.Close()
self.questionDialog = None
return True
def __OnDismount(self):
net.SendChatPacket("/unmount")
@@ -393,10 +412,32 @@ class TargetBoard(ui.ThinBoard):
self.ShowDefaultButton()
if guild.MainPlayerHasAuthority(guild.AUTH_ADD_MEMBER):
if not guild.IsMemberByName(self.nameString):
if 0 == chr.GetGuildID(self.vid):
self.__ShowButton(localeInfo.TARGET_BUTTON_INVITE_GUILD)
def isGuildMaster(name):
guildMasterName = guild.GetGuildMasterName()
return guildMasterName == name
def isGuildMember(name, vid):
return guild.IsMemberByName(name) and chr.GetGuildID(vid) != 0
def isNotGuildMember(name, vid):
return not guild.IsMemberByName(name) and chr.GetGuildID(vid) == 0
guildAuthorityButtons = {
guild.AUTH_ADD_MEMBER: {
"text": localeInfo.TARGET_BUTTON_INVITE_GUILD,
"condition": lambda: isNotGuildMember(self.nameString, self.vid),
},
guild.AUTH_REMOVE_MEMBER: {
"text": localeInfo.TARGET_BUTTON_REMOVE_GUILD,
"condition": lambda: isGuildMember(self.nameString, self.vid) and not isGuildMaster(self.nameString),
},
}
for guildAuthority, guildButton in guildAuthorityButtons.items():
hasAuthority = guild.MainPlayerHasAuthority(guildAuthority)
satisfiesCondition = guildButton["condition"]()
if hasAuthority and satisfiesCondition:
self.__ShowButton(guildButton["text"])
if not messenger.IsFriendByName(self.nameString):
self.__ShowButton(localeInfo.TARGET_BUTTON_FRIEND)