Files
Endfield-Data/LuaScripts/Common/Utils/FriendUtils.lua
2026-01-31 21:42:01 +07:00

720 lines
29 KiB
Lua

local FriendUtils = {}
local checkInputValid = function(str)
return true, 'normal'
end
FriendUtils.FriendShowCharsCount = 4
FriendUtils.FriendDictIndex = 0
FriendUtils.BlackListDictIndex = 1
FriendUtils.FriendRequestDictIndex = 2
FriendUtils.StrangerDictIndex = 3
FriendUtils.NewFriendSearchDictIndex = 4
FriendUtils.ReportGroupType = {
BusinessCard = 1,
FriendList = 2,
Blueprint = 3,
SocialBuilding = 4,
}
FriendUtils.FRIEND_CELL_HEAD_FUNC = {
BUSINESS_CARD = function(id)
return {
text = Language.LUA_FRIEND_TIP_SHOW_BUSINESS_CARD,
action = function()
Notify(MessageConst.ON_OPEN_BUSINESS_CARD_PREVIEW, { roleId = id, isPhase = false })
end
}
end,
BUSINESS_CARD_PHASE = function(id)
return {
text = Language.LUA_FRIEND_TIP_SHOW_BUSINESS_CARD,
action = function()
Notify(MessageConst.ON_OPEN_BUSINESS_CARD_PREVIEW, { roleId = id })
end
}
end,
REMOVE_FRIEND = function(id)
return {
text = Language.LUA_FRIEND_TIP_REMOVE_FRIEND,
action = function()
local nameStr = ""
local info = GameInstance.player.friendSystem.friendInfoDic[id]
if info.remakeName and not string.isEmpty(info.remakeName) then
nameStr = string.format(Language.LUA_FRIEND_REMAKE_NAME, info.remakeName, info.name, info.shortId)
else
nameStr = string.format(Language.LUA_FRIEND_NAME, info.name, info.shortId)
end
Notify(MessageConst.SHOW_POP_UP, {
content = Language.LUA_FRIEND_TIP_REMOVE_FRIEND_CONTENT,
subContent = nameStr,
onConfirm = function()
Notify(MessageConst.FRIEND_CHAT_PLAYER_DELETE_LIST_CELL)
GameInstance.player.friendSystem:FriendDelete(id)
end
})
end
}
end,
REMARK_MODIFY = function(id)
local inputName = GameInstance.player.friendSystem.friendInfoDic[id].remakeName
local arg = {
content = Language.LUA_FRIEND_TIP_REMARK_MODIFY_CONTENT,
input = true,
subContent = Language.LUA_FRIEND_TIP_REMARK_MODIFY_SUB_CONTENT,
inputPlaceholder = inputName,
characterLimit = 15,
checkInputValid = checkInputValid,
onConfirm = function(changedName)
GameInstance.player.friendSystem:RemarkManeModify(id, changedName)
end
}
arg.inputPlaceholder = Language.LUA_FRIEND_TIP_REMARK_MODIFY_CONTENT
if not string.isEmpty(inputName) then
arg.inputName = inputName
end
return {
text = Language.LUA_FRIEND_TIP_REMARK_MODIFY,
action = function()
Notify(MessageConst.SHOW_POP_UP, arg)
end
}
end,
ADD_BLACK_LIST = function(id)
local nameStr = ""
local success, info = GameInstance.player.friendSystem:TryGetFriendInfo(id)
if info.remakeName and not string.isEmpty(info.remakeName) then
nameStr = string.format(Language.LUA_FRIEND_REMAKE_NAME, info.remakeName, info.name, info.shortId)
else
nameStr = string.format(Language.LUA_FRIEND_NAME, info.name, info.shortId)
end
return {
text = Language.LUA_FRIEND_TIP_ADD_BLACK_LIST,
action = function()
Notify(MessageConst.SHOW_POP_UP, {
content = Language.LUA_FRIEND_TIP_ADD_BLACK_LIST_CONTENT,
subContent = nameStr,
onConfirm = function()
Notify(MessageConst.FRIEND_CHAT_PLAYER_DELETE_LIST_CELL)
GameInstance.player.friendSystem:BlackListAdd(id)
end
})
end
}
end,
REPORT = function(id)
return {
text = Language.LUA_FRIEND_TIP_REPORT,
action = function()
UIManager:Open(PanelId.ReportPlayer, { roleId = id, reportType = FriendUtils.ReportGroupType.FriendList })
end
}
end,
REPORT_BUSINESS_CARD = function(id)
return {
text = Language.LUA_FRIEND_TIP_REPORT,
action = function()
UIManager:Open(PanelId.ReportPlayer, { roleId = id, reportType = FriendUtils.ReportGroupType.BusinessCard })
end
}
end,
CHAR_INFO = function(callBack)
return {
text = Language.LUA_FRIEND_TIP_CHAR_INFO,
action = function()
callBack()
end
}
end,
CHAT = function(id)
return {
text = Language.LUA_FRIEND_TIP_CHAT,
action = function()
if FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem.isPSNOnly and not GameInstance.player.friendSystem:IsPsnFriend(id) then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_TIP_PSN_CHAT)
return
end
if GameInstance.player.friendSystem.isCommunicationRestricted then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_TIP_PARENTAL_CONTROL_CHAT)
return
end
FriendUtils.FRIEND_CELL_INIT_FUNC.onMessageClick(id)
end
}
end,
VISIT_SHIP = function(id)
return {
text = Language.LUA_FRIEND_TIP_VISIT_SHIP,
action = function()
FriendUtils.FRIEND_CELL_INIT_FUNC.onShipClick(id)
end
}
end,
ROLE_ID = function(id)
return {
text = "Role ID: " .. id,
action = function()
Unity.GUIUtility.systemCopyBuffer = id
Notify(MessageConst.SHOW_TOAST, "Role ID copied to clipboard " .. id)
end
}
end,
SWITCH_AVATAR = function(id)
return {
text = Language.LUA_FRIEND_TIP_SWITCH_AVATAR,
action = function()
UIManager:Open(PanelId.FriendHeadSelectedPopUp)
end
}
end,
SIGNATURE_MODIFY = function(id)
return {
text = Language.LUA_SIGNATURE_MODIFY,
action = function()
Notify(MessageConst.SHOW_POP_UP, {
content = Language.LUA_SIGNATURE_MODIFY_CONTENT,
inputMore = true,
subContent = Language.LUA_FRIEND_TIP_SIGNATURE_MODIFY_SUB_CONTENT,
inputName = GameInstance.player.friendSystem.SelfInfo.signature,
characterLimit = 40,
checkInputValid = checkInputValid,
onConfirm = function(changedSignature)
GameInstance.player.friendSystem:SignatureModify(changedSignature)
end
})
end
}
end,
BUSINESS_CARD_TOPIC_MODIFY = function(id)
return {
text = Language.LUA_FRIEND_TIP_BUSINESS_CARD_THEME,
action = function()
UIManager:Open(PanelId.FriendThemeChange)
end
}
end,
PSN_INFO = function(id)
return {
text = Language.LUA_FRIEND_TIP_PSN_INFO,
action = function()
local success, friendInfo = GameInstance.player.friendSystem:TryGetFriendInfo(id)
if success and friendInfo.psnData and not string.isEmpty(friendInfo.psnData.AccountId) then
FriendUtils.FRIEND_CELL_INIT_FUNC.onPsnInfoClick(friendInfo.psnData.AccountId)
else
logger.error("FriendUtils.FRIEND_CELL_HEAD_FUNC.PSN_INFO: No PSN data for roleId: " .. id)
end
end
}
end,
}
FriendUtils.CELL_HEIGHT = 60
FriendUtils.FRIEND_CELL_INIT_FUNC = {
onFriendPlayerClick = function(rectTransform, id, charInfoCallBack, shipBtnShow)
local args = {
transform = rectTransform,
cellHeight = FriendUtils.CELL_HEIGHT,
}
if DeviceInfo.inputType == DeviceInfo.InputType.Controller then
args.actions = {}
if not GameInstance.player.spaceship.isViewingFriend then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.CHAT(id))
end
if DeviceInfo.inputType == DeviceInfo.InputType.Controller and GameInstance.player.friendSystem:GetCharInfoByRoleId(id).Count > 0 then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.CHAR_INFO(charInfoCallBack))
end
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.BUSINESS_CARD_PHASE(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REMARK_MODIFY(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REMOVE_FRIEND(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.ADD_BLACK_LIST(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REPORT(id))
if shipBtnShow then
table.insert(args.actions, 1, FriendUtils.FRIEND_CELL_HEAD_FUNC.VISIT_SHIP(id))
end
else
args.actions = {
[1] = FriendUtils.FRIEND_CELL_HEAD_FUNC.BUSINESS_CARD_PHASE(id),
[2] = FriendUtils.FRIEND_CELL_HEAD_FUNC.REMARK_MODIFY(id),
[3] = FriendUtils.FRIEND_CELL_HEAD_FUNC.REMOVE_FRIEND(id),
[4] = FriendUtils.FRIEND_CELL_HEAD_FUNC.ADD_BLACK_LIST(id),
[5] = FriendUtils.FRIEND_CELL_HEAD_FUNC.REPORT(id),
}
end
if FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem:IsPsnFriend(id) then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.PSN_INFO(id))
end
if BEYOND_DEBUG then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.ROLE_ID(id))
end
Notify(MessageConst.SHOW_NAVI_TARGET_ACTION_MENU, args)
end,
onStrangerPlayerClick = function(rectTransform, id, charInfoCallBack)
local args = {
transform = rectTransform,
cellHeight = 60,
actions = {}
}
if DeviceInfo.inputType == DeviceInfo.InputType.Controller and GameInstance.player.friendSystem:GetCharInfoByRoleId(id).Count > 0 then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.CHAR_INFO(charInfoCallBack))
end
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.BUSINESS_CARD_PHASE(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.ADD_BLACK_LIST(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REPORT(id))
if FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem:IsPsnFriend(id) then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.PSN_INFO(id))
end
Notify(MessageConst.SHOW_NAVI_TARGET_ACTION_MENU, args)
end,
onBusinessCardFriendPlayerClick = function(rectTransform, id)
local args = {
transform = rectTransform,
cellHeight = 60,
actions = {}
}
local isFriend = GameInstance.player.friendSystem.friendInfoDic:ContainsKey(id) and not (FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem.isPSNOnly and not GameInstance.player.friendSystem:IsPsnFriend(id))
if isFriend then
if not GameInstance.player.spaceship.isViewingFriend then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.CHAT(id))
end
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REMARK_MODIFY(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REMOVE_FRIEND(id))
end
if not GameInstance.player.friendSystem:PlayerInBlackList(id) then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.ADD_BLACK_LIST(id))
end
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REPORT_BUSINESS_CARD(id))
if GameInstance.player.friendSystem.isCommunicationRestricted then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_TIP_PARENTAL_CONTROL_CHAT)
return
end
if FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem:IsPsnFriend(id) then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.PSN_INFO(id))
end
Notify(MessageConst.SHOW_NAVI_TARGET_ACTION_MENU, args)
end,
onBusinessCardStrangerPlayerClick = function(rectTransform, id)
local args = {
transform = rectTransform,
cellHeight = 60,
actions = {}
}
if not GameInstance.player.friendSystem:PlayerInBlackList(id) then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.ADD_BLACK_LIST(id))
end
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REPORT_BUSINESS_CARD(id))
if FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem:IsPsnFriend(id) then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.PSN_INFO(id))
end
Notify(MessageConst.SHOW_NAVI_TARGET_ACTION_MENU, args)
end,
onCommonFriendPlayerClick = function(rectTransform, id)
local args = {
transform = rectTransform,
cellHeight = 60,
actions = {}
}
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.BUSINESS_CARD_PHASE(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REMARK_MODIFY(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REMOVE_FRIEND(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.ADD_BLACK_LIST(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REPORT(id))
if FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem:IsPsnFriend(id) then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.PSN_INFO(id))
end
Notify(MessageConst.SHOW_NAVI_TARGET_ACTION_MENU, args)
end,
onCommonStrangerPlayerClick = function(rectTransform, id)
local args = {
transform = rectTransform,
cellHeight = 60,
actions = {}
}
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.BUSINESS_CARD_PHASE(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.ADD_BLACK_LIST(id))
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.REPORT(id))
if FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem:IsPsnFriend(id) then
table.insert(args.actions, FriendUtils.FRIEND_CELL_HEAD_FUNC.PSN_INFO(id))
end
Notify(MessageConst.SHOW_NAVI_TARGET_ACTION_MENU, args)
end,
onSelfClick = function(rectTransform, id)
local actions = {}
if GameInstance.player.friendSystem.isCommunicationRestricted then
actions = {
[1] = FriendUtils.FRIEND_CELL_HEAD_FUNC.SWITCH_AVATAR(id),
[2] = FriendUtils.FRIEND_CELL_HEAD_FUNC.BUSINESS_CARD_TOPIC_MODIFY(id),
}
else
actions = {
[1] = FriendUtils.FRIEND_CELL_HEAD_FUNC.SWITCH_AVATAR(id),
[2] = FriendUtils.FRIEND_CELL_HEAD_FUNC.SIGNATURE_MODIFY(id),
[3] = FriendUtils.FRIEND_CELL_HEAD_FUNC.BUSINESS_CARD_TOPIC_MODIFY(id),
}
end
local args = {
transform = rectTransform,
cellHeight = 60,
actions = actions
}
Notify(MessageConst.SHOW_NAVI_TARGET_ACTION_MENU, args)
end,
onMessageClick = function(id)
if not GameInstance.player.friendChatSystem:IsChatCreated(id) then
GameInstance.player.friendChatSystem.luaCreateChatCallback = function()
PhaseManager:GoToPhase(PhaseId.SNS, { roleId = id })
end
Notify(MessageConst.FRIEND_CHAT_PLAYER_ADD_LIST_CELL)
GameInstance.player.friendChatSystem:CreateChat(id)
else
PhaseManager:GoToPhase(PhaseId.SNS, { roleId = id })
end
end,
onShipClick = function(id)
GameInstance.player.friendSystem:SendFriendVisitSpaceShip(id)
end,
onChatClick = function(id)
if not GameInstance.player.friendChatSystem:IsChatCreated(id) then
GameInstance.player.friendChatSystem.luaCreateChatCallback = function()
PhaseManager:GoToPhase(PhaseId.SNS, { roleId = id })
end
Notify(MessageConst.FRIEND_CHAT_PLAYER_ADD_LIST_CELL)
GameInstance.player.friendChatSystem:CreateChat(id)
else
PhaseManager:GoToPhase(PhaseId.SNS, { roleId = id })
end
end,
onSpaceshipVisitorClick = function(id)
Notify(MessageConst.ON_CLICK_SPACESHIP_VISITOR_FRIEND, { id })
end,
onAcceptClick = function(id)
GameInstance.player.friendSystem:AcceptRequest(id)
end,
onNotAcceptClick = function(id)
GameInstance.player.friendSystem:RejectRequest(id)
end,
onAddClick = function(id, nodeId)
if GameInstance.player.friendSystem:PlayerInBlackList(id) then
local errorMsg = Tables.errorCodeTable:GetValue(1065)
Notify(MessageConst.SHOW_TOAST, errorMsg.text)
return
end
local stack = PhaseManager:GetPhaseStack()
local phaseId = ""
for i = 0, stack:Count() - 1 do
local item = stack:Get(stack:TopIndex() - i)
if item.phaseId ~= PhaseId.FriendBusinessCardPreview then
phaseId = PhaseManager:GetPhaseName(item.phaseId)
break
end
end
local panelId = ""
if phaseId == "Friend" then
panelId = UIManager:IsOpen(PanelId.SearchNewFriendList) and "SearchNewFriendList" or "StrangerList"
end
GameInstance.player.friendSystem:AddFriend(id, phaseId , panelId, tostring(nodeId))
end,
onRemoveClick = function(id)
GameInstance.player.friendSystem:BlackListDelete(id)
end,
onPsnInfoClick = function(id)
CS.Beyond.PS5Main.ShowUserProfileDialog(id)
end
}
FriendUtils.FRIEND_CELL_INIT_CONFIG = {
Friend = {
stateName = "Normal",
onPlayerClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onFriendPlayerClick,
onMessageClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onMessageClick,
onShipClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onShipClick,
onChatClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onChatClick,
onPsnInfoClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onPsnInfoClick,
infoDicIndex = FriendUtils.FriendDictIndex,
maxLen = Tables.globalConst.friendListPageMaxLen,
sortOptions = {
{
name = Language.LUA_FRIEND_LAST_DATE_TIME,
keys = { "isCurrentShip", "searchSort", "lastDateTime", "adventureLevel", "addFriendTime", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_WORLD_LEVEL,
keys = { "isCurrentShip", "searchSort", "adventureLevel", "lastDateTime", "addFriendTime", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_ADD_FRIEND_TIME,
keys = { "isCurrentShip", "searchSort", "addFriendTime", "lastDateTime", "adventureLevel", "helpFlag", "roleId" },
}
},
},
Black = {
stateName = "BlackList",
onRemoveClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onRemoveClick,
onPsnInfoClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onPsnInfoClick,
infoDicIndex = FriendUtils.BlackListDictIndex,
maxLen = Tables.globalConst.friendBlackListMaxLen,
sortOptions = {
{
name = Language.LUA_FRIEND_LAST_DATE_TIME,
keys = { "isCurrentShip", "searchSort", "lastDateTime", "adventureLevel", "addFriendTime", "helpFlag", "roleId" },
},
},
},
FriendRequest = {
stateName = "FriendRequest",
onPlayerClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onStrangerPlayerClick,
onAcceptClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onAcceptClick,
onNotAcceptClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onNotAcceptClick,
infoDicIndex = FriendUtils.FriendRequestDictIndex,
maxLen = Tables.globalConst.friendRequestListPageMaxLen,
sortOptions = {
{
name = Language.LUA_FRIEND_REQUEST_TIME,
keys = { "isCurrentShip", "searchSort", "addFriendTime", "adventureLevel", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_WORLD_LEVEL,
keys = { "isCurrentShip", "searchSort", "adventureLevel", "addFriendTime", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_LAST_DATE_TIME,
keys = { "isCurrentShip", "searchSort", "adventureLevel", "addFriendTime", "helpFlag", "roleId" },
},
}
},
Stranger = {
stateName = "Stranger",
onPlayerClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onStrangerPlayerClick,
onAddClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onAddClick,
infoDicIndex = FriendUtils.StrangerDictIndex,
maxLen = Tables.globalConst.friendRecommendMaxLen,
sortOptions = {
{
name = Language.LUA_FRIEND_LAST_DATE_TIME,
keys = { "isCurrentShip", "searchSort", "lastDateTime", "adventureLevel", "addFriendTime", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_WORLD_LEVEL,
keys = { "isCurrentShip", "searchSort", "adventureLevel", "lastDateTime", "addFriendTime", "helpFlag", "roleId" },
},
}
},
NewFriendSearch = {
stateName = "Stranger",
onPlayerClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onStrangerPlayerClick,
onAddClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onAddClick,
infoDicIndex = FriendUtils.NewFriendSearchDictIndex,
maxLen = Tables.globalConst.friendSearchListPageMaxLen,
sortOptions = {
{
name = Language.LUA_FRIEND_LAST_DATE_TIME,
keys = { "isCurrentShip", "searchSort", "lastDateTime", "adventureLevel", "addFriendTime", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_WORLD_LEVEL,
keys = { "isCurrentShip", "searchSort", "adventureLevel", "lastDateTime", "addFriendTime", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_ADD_FRIEND_TIME,
keys = { "isCurrentShip", "searchSort", "addFriendTime", "lastDateTime", "adventureLevel", "helpFlag", "roleId" },
}
},
},
Share = {
stateName = "share",
onPlayerClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onFriendPlayerClick,
onMessageClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onMessageClick,
onShipClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onShipClick,
onChatClick = FriendUtils.FRIEND_CELL_INIT_FUNC.onChatClick,
infoDicIndex = FriendUtils.FriendDictIndex,
maxLen = Tables.globalConst.friendListPageMaxLen,
sortOptions = {
{
name = Language.LUA_FRIEND_LAST_DATE_TIME,
keys = { "isCurrentShip", "searchSort", "lastDateTime", "adventureLevel", "addFriendTime", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_WORLD_LEVEL,
keys = { "isCurrentShip", "searchSort", "adventureLevel", "lastDateTime", "addFriendTime", "helpFlag", "roleId" },
},
{
name = Language.LUA_FRIEND_ADD_FRIEND_TIME,
keys = { "isCurrentShip", "searchSort", "addFriendTime", "lastDateTime", "adventureLevel", "helpFlag", "roleId" },
}
},
},
}
function FriendUtils.friendInfo2SortInfo(csFriendInfo, searchSort)
return {
roleId = csFriendInfo.roleId,
name = csFriendInfo.name,
lastDateTime = csFriendInfo.lastDateTime,
addFriendTime = csFriendInfo.addOrRequestTime,
adventureLevel = csFriendInfo.adventureLevel,
searchSort = searchSort,
accountId = csFriendInfo.psnData ~= nil and csFriendInfo.psnData.AccountId or "",
helpFlag = csFriendInfo.helpFlag:GetHashCode(),
isCurrentShip = csFriendInfo.roleId == GameInstance.player.spaceship:GetFriendRoleInfo().roleId and 1 or 0,
}
end
function FriendUtils.getFriendInfoByRoleId(roleId, searchKey, ignoreRichFont)
local success, playerInfo = GameInstance.player.friendSystem:TryGetFriendInfo(roleId)
local nameStr = ""
local avatarPath = ""
local avatarFramePath = ""
local psName = ""
if success then
psName = playerInfo.psName
if playerInfo.remakeName and not string.isEmpty(playerInfo.remakeName) then
if not ignoreRichFont then
nameStr = string.format(Language.LUA_FRIEND_REMAKE_NAME, playerInfo.remakeName, playerInfo.name, playerInfo.shortId)
else
nameStr = string.format(Language.LUA_FRIEND_REMAKE_NAME_NO_RICH_TEXT, playerInfo.remakeName, playerInfo.name, playerInfo.shortId)
end
else
nameStr = string.format(Language.LUA_FRIEND_NAME, playerInfo.name, playerInfo.shortId)
end
if searchKey and not string.isEmpty(searchKey) then
local rep = string.format(Language.LUA_FRIEND_NAME_SEARCH, searchKey)
nameStr = string.gsub(nameStr, searchKey, rep)
end
if playerInfo.userAvatarId and playerInfo.userAvatarFrameId then
local succ, avatarPathInfo = Tables.UserAvatarTable:TryGetValue(playerInfo.userAvatarId)
if succ then
avatarPath = avatarPathInfo.icon
end
avatarFramePath = Tables.userAvatarTableFrame:GetValue(playerInfo.userAvatarFrameId).icon
end
end
return nameStr, avatarPath, avatarFramePath, psName
end
function FriendUtils.openFriendCharInfo(roleId, charTemplateId, templateIdList)
local phaseFriend = require_ex("Phase/Friend/PhaseFriend")
phaseFriend.PhaseFriend.s_mainFriendCharTemplateId = charTemplateId
GameInstance.player.friendSystem:FriendCharQuery(roleId, templateIdList)
end
function FriendUtils.getFriendCellInitConfigByRoleId(roleId)
local RoleType = CS.Beyond.Gameplay.RoleType
local roleType = GameInstance.player.friendSystem:GetRoleTypeByRoleId(roleId)
if roleType == RoleType.Friend then
return FriendUtils.FRIEND_CELL_INIT_CONFIG.Friend
elseif roleType == RoleType.BlackList then
return FriendUtils.FRIEND_CELL_INIT_CONFIG.Black
elseif roleType == RoleType.Stranger then
return FriendUtils.FRIEND_CELL_INIT_CONFIG.Stranger
end
end
function FriendUtils.isPsnPlatform()
return CS.UnityEngine.Application.platform == CS.UnityEngine.RuntimePlatform.PS5
end
function FriendUtils.canShareBuilding()
if GameInstance.player.friendSystem.isCommunicationRestricted then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_TIP_PARENTAL_CONTROL_CHAT)
return false
end
if GameInstance.player.friendChatSystem.isSocialBuildingShareCountLimited then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_SOCIAL_BUILDING_SHARE_COUNT_LIMITED)
return false
end
return true
end
function FriendUtils.simpleIgnoreCaseReplace(input, pattern, sLanguage)
local utf8Chars = {}
for char in input:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
table.insert(utf8Chars, char)
end
local utf8Pattern = {}
for char in pattern:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
table.insert(utf8Pattern, char)
end
local lowerInput = string.lower(input)
local lowerPattern = string.lower(pattern)
local lowerUtf8Chars = {}
for char in lowerInput:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
table.insert(lowerUtf8Chars, char)
end
local lowerUtf8Pattern = {}
for char in lowerPattern:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
table.insert(lowerUtf8Pattern, char)
end
local result = ""
local i = 1
while i <= #utf8Chars do
local match = true
for j = 1, #utf8Pattern do
if i + j - 1 > #lowerUtf8Chars or lowerUtf8Chars[i + j - 1] ~= lowerUtf8Pattern[j] then
match = false
break
end
end
if match then
for j = 1, #utf8Pattern do
local original = utf8Chars[i + j - 1]
result = result .. string.format(sLanguage, original)
end
i = i + #utf8Pattern
else
result = result .. utf8Chars[i]
i = i + 1
end
end
return result
end
_G.FriendUtils = FriendUtils
return FriendUtils