hch
2026-03-20 c8aea6cbef51b3dd41b4d911bc7e6bf89a6e2e2d
Main/System/Guild/GuildBaseWin.cs
@@ -1,7 +1,9 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using DG.Tweening;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
@@ -19,8 +21,9 @@
    [SerializeField] Text guildMemberCountText;
    [SerializeField] Button rankBtn;
    [SerializeField] Button storeBtn;
    [SerializeField] RichText talkInfoText;
    [SerializeField] Button talkBtn;
    [SerializeField] Button talkBtn1;
    [SerializeField] Button requestBtn;
@@ -45,7 +48,7 @@
        requestBtn.AddListener(() =>
        {
            // UIManager.Instance.OpenWindow<GuildRequestWin>();
            UIManager.Instance.OpenWindow<GuildApplyListWin>();
        });
        guildHawkerBtn.AddListener(OpenHawker);
@@ -54,7 +57,13 @@
            StoreModel.Instance.selectStoreFuncType = StoreFunc.Guild;
            UIManager.Instance.OpenWindow<StoreBaseWin>();
        });
        rankBtn.AddListener(() =>
        {
            UIManager.Instance.OpenWindow<GuildRankWin>();
        });
        InitHawker();
        talkBtn.AddListener(OnClickTalkButton);
        talkBtn1.AddListener(OnClickTalkButton);
    }
@@ -62,9 +71,11 @@
    {
        if (PlayerDatas.Instance.fairyData.fairy == null)
            return;
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent;
        ChatManager.Instance.OnUpdateTalkEvent += OnUpdateTalkEvent;
        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo;
        Display();
    }
@@ -72,13 +83,27 @@
    {
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
        GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent;
        ChatManager.Instance.OnUpdateTalkEvent -= OnUpdateTalkEvent;
        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
    }
    void OnRefreshFairyInfo()
    {
        ShowGuildInfo();
    }
    private void OnUpdateTalkEvent(ChatChannel channel, TalkData data, bool isSendBullet)
    {
        if (channel != ChatChannel.Guild)
            return;
        ShowTalkInfo();
    }
    void Display()
    {
        ShowGuildInfo();
        ShowHawkerTime();
        ShowTalkInfo();
    }
    void OnSecondEvent()
@@ -88,6 +113,7 @@
    void ShowGuildInfo()
    {
        requestBtn.SetActive(PlayerDatas.Instance.fairyData.HasFairy && PlayerDatas.Instance.fairyData.IsCanFunc(LimitFunc.CanCall));
        emblemCell.Display(PlayerDatas.Instance.fairyData.fairy.EmblemID, PlayerDatas.Instance.fairyData.fairy.EmblemWord, 0.8f);
        guildNameText.text = PlayerDatas.Instance.fairyData.fairy.FamilyName;
        var config = FamilyConfig.Get(PlayerDatas.Instance.fairyData.fairy.FamilyLV);
@@ -123,7 +149,7 @@
            if (modelPlay)
                HawkerMove(true);
        }
    }
@@ -137,7 +163,7 @@
        {
            hawkerRect.localPosition = pos2.localPosition;
        }
        hawkerModel.PlayAnimation("idle", true);
        // hawkerModel.PlayAnimation("zoulu", true);
    }
    //isShow true走出来,false走出去
@@ -150,7 +176,7 @@
        FuncNPCManager.Instance.isHawkerShowNow = isShow;
        hawkerModel.PlayAnimation("zoulu", true);
        FuncNPCManager.Instance.isHawkerStandBy = false;
        hawkerModel.transform.localScale = new Vector3(isShow ? hawkerModel.transform.localScale.x : -hawkerModel.transform.localScale.x, hawkerModel.transform.localScale.y, hawkerModel.transform.localScale.z);
        hawkerModel.transform.localScale = new Vector3(isShow ? Math.Abs(hawkerModel.transform.localScale.x) : -Math.Abs(hawkerModel.transform.localScale.x), hawkerModel.transform.localScale.y, hawkerModel.transform.localScale.z);
        hawkerRect.DOLocalMove(isShow ? pos1.localPosition : pos2.localPosition, 1f).onComplete = () =>
        {
            hawkerModel.PlayAnimation("idle", true);
@@ -158,8 +184,8 @@
            FuncNPCManager.Instance.isHawkerStandBy = isShow;
        };
    }
    //NPC对话相关
@@ -189,4 +215,76 @@
        var npc = funcNPCs[index].GetModel();
        npc.PlayAnimation("idle", true);
    }
    public void OnClickTalkButton()
    {
        ChatManager.Instance.nowChatTab = ChatChannel.Guild;
        ChatManager.Instance.nowChatChannel = ChatChannel.Guild;
        UIManager.Instance.OpenWindow<ChatWin>();
    }
    public string GetGuildChatAreaContent(TalkData talkData)
    {
        int type = ChatManager.Instance.GetTalkDataType(talkData);
        if (type == 0)
        {
            return Language.Get("L1100", Language.Get("Chat13"), talkData.Content);
        }
        else if (type == 1)
        {
            return Language.Get("L1100", Language.Get("Chat13"), talkData.Content);
        }
        else
        {
            return Language.Get("L1100", talkData.Name, talkData.Content);
        }
    }
    public Color32 GetGuildChatAreaColor(TalkData talkData)
    {
        int type = ChatManager.Instance.GetTalkDataType(talkData);
        if (type == 2)
        {
            return ChatManager.Instance.areaMyColor;
        }
        else
        {
            return ChatManager.Instance.areaOtherColor;
        }
    }
    List<TalkData> showTalkDatas = new List<TalkData>();
    void ShowTalkInfo()
    {
        if (!ChatManager.Instance.TryGetTalkData(ChatChannel.Guild, out List<TalkData> datas) || datas.IsNullOrEmpty())
        {
            talkInfoText.text = string.Empty;
            return;
        }
        showTalkDatas.Clear();
        // 从后向前遍历,找到最后两条玩家消息(过滤掉系统消息和日期消息)
        int count = 0;
        for (int i = datas.Count - 1; i >= 0 && count < 2; i--)
        {
            TalkData data = datas[i];
            // 只保留玩家消息:非系统消息且非日期消息
            if (!data.isSystem && !data.isDate)
            {
                showTalkDatas.Insert(0, data); // 插入到列表开头以保持时间顺序
                count++;
            }
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < showTalkDatas.Count; i++)
        {
            TalkData data = showTalkDatas[i];
            stringBuilder.Append(UIHelper.AppendColor(GetGuildChatAreaColor(data), GetGuildChatAreaContent(data)));
            stringBuilder.AppendLine();
        }
        talkInfoText.text = stringBuilder.ToString();
    }
}