hch
5 天以前 e3ffaf333f0cf198af908fe8e69619aa77b9903c
287 【公会】BOSS讨伐
3个文件已修改
177 ■■■■■ 已修改文件
Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA504_tagSCFamilyTaofaAtkRet.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossManager.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBossWin.cs 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA504_tagSCFamilyTaofaAtkRet.cs
@@ -1,11 +1,12 @@
using UnityEngine;
using System.Collections;
using UnityEngine;
using System.Collections;
// A5 04 公会讨伐攻击结果 #tagSCFamilyTaofaAtkRet
public class DTCA504_tagSCFamilyTaofaAtkRet : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA504_tagSCFamilyTaofaAtkRet vNetData = vNetPack as HA504_tagSCFamilyTaofaAtkRet;
        GuildBossManager.Instance.UpdateAtkResult(vNetData);
    }
}
Main/System/Guild/GuildBossManager.cs
@@ -24,6 +24,10 @@
    public long m_BoxHurt;    // 今日伤害
    public long m_BoxHurtHis;    // 历史伤害
    //攻击数据
    public HA504_tagSCFamilyTaofaAtkRet atkResult;
    public event Action AtkResultEvent;
    //配置
    public int initSuperHitRate;
    public int[] bzAddAttrs;
@@ -33,7 +37,7 @@
    public int[][] atkItemList;
    public int maxAngerValue;
    public int[] bxCumulativeDamageList;
    public long[] bxCumulativeDamageList;
    public int bxDailyMax;  //个人每日产出上限
    public int bxDailyAwardMax; //个人每日领取奖励上限
    public int addAtkCntItemID = 17; //增加讨伐次数道具ID
@@ -61,7 +65,7 @@
        // 数值2:每日个人贡献宝箱数上限,最后一档可循环,上限控制
        // 数值3:每日个人领取宝箱奖励个数上限
        config = FuncConfigConfig.Get("FamilyTaofaBox");
        bxCumulativeDamageList = JsonMapper.ToObject<int[]>(config.Numerical1);
        bxCumulativeDamageList = JsonMapper.ToObject<long[]>(config.Numerical1);
        bxDailyMax = int.Parse(config.Numerical2);
        bxDailyAwardMax = int.Parse(config.Numerical3);
    }
@@ -129,6 +133,12 @@
        BossHurtEvent?.Invoke();
    }
    public void UpdateAtkResult(HA504_tagSCFamilyTaofaAtkRet netPack)
    {
        atkResult = netPack;
        AtkResultEvent?.Invoke();
    }
    public int GetHasAtkCnt()
    {
@@ -170,8 +180,13 @@
        }
        //判断是否新的公会数据
        if (vNetData.FamilyActionList.Length == 1 && vNetData.FamilyActionList[0].Value1 == 1)
        for (int i = 0; i < vNetData.Count; i++)
        {
            var playerID = (int)vNetData.FamilyActionList[i].Value1;
            if (playerID != 1)
            {
                continue;
            }
            if (bossActions.ContainsKey(1) && bossActions[1].Time != vNetData.FamilyActionList[0].Time)
            {
                bossActions.Clear();
@@ -179,6 +194,7 @@
            }
        }
        for (int i = 0; i < vNetData.Count; i++)
        {
            bossActions[(int)vNetData.FamilyActionList[i].Value1] = vNetData.FamilyActionList[i];
Main/System/Guild/GuildBossWin.cs
@@ -36,7 +36,7 @@
    [SerializeField] Button atkBtn;
    [SerializeField] Image angerAtk; //怒气攻击
    [SerializeField] Transform normalAtk; //普通攻击
    [SerializeField] UIEffectPlayer atkEffect;  //普通攻击特效 0次不显示
    [SerializeField] UIEffectPlayer atkEffect;  //普通攻击特效 0次不显示 按钮用
    [SerializeField] Text normalAtkCntText; //普通攻击次数
    [SerializeField] Text atkCDText; //攻击cd
    [SerializeField] Transform addTimesRect;
@@ -55,6 +55,15 @@
    [SerializeField] Transform attackArea3;
    [SerializeField] GuildBossOtherPlayer otherPlayer;  //创建多个用
    [SerializeField] GuildBossOtherPlayerAttack otherPlayerAttack;  //创建多个用
    //自己的攻击
    [SerializeField] UIEffectPlayer hurtEffect;
    [SerializeField] UIEffectPlayer hurtAngerEffect;
    [SerializeField] Text[] hurtValues;
    [SerializeField] Text[] awardValues;
    [SerializeField] Image[] awardIcons;
    [SerializeField] Transform pos1;
    [SerializeField] Transform pos2;
    [SerializeField] Transform fakeRedBZ;
    [SerializeField] Transform fakeRedAward;
@@ -79,15 +88,21 @@
        {
            UIManager.Instance.OpenWindow<GuildBossAwardWin>();
        });
        bossModel.Create(GuildBossManager.Instance.bossSkinID, 1, motionName: "chuxian");
        heroModel.Create(PhantasmPavilionManager.Instance.GetMyModelSkinID(), 1.5f);
    }
    protected override void OnPreOpen()
    {
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
        GuildBossManager.Instance.BossHurtEvent += BossHurtEvent;
        GuildBossManager.Instance.AtkResultEvent += AtkResultEvent;
        Display();
        InitAttack();
    }
    protected override void OnPreClose()
@@ -95,7 +110,14 @@
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
        GuildBossManager.Instance.BossHurtEvent -= BossHurtEvent;
        GuildBossManager.Instance.AtkResultEvent -= AtkResultEvent;
    }
    protected override void NextFrameAfterOpen()
    {
        SoundPlayer.Instance.PlayUIAudio(28);
    }
    void Display()
@@ -108,8 +130,7 @@
        nameText.text = PlayerDatas.Instance.baseData.PlayerName;
        BossHurtEvent();
        bossModel.Create(GuildBossManager.Instance.bossSkinID);
        heroModel.Create(PhantasmPavilionManager.Instance.GetMyModelSkinID());
    }
    //战力变化
@@ -304,11 +325,11 @@
            curLayer = (int)bossAction.Value3;
        }
        if (curLayer >= GuildBossManager.Instance.bzMaxLevel)
        {
            SysNotifyMgr.Instance.ShowTip("GuildBoss2");
            return;
        }
        // if (curLayer >= GuildBossManager.Instance.bzMaxLevel)
        // {
        //     SysNotifyMgr.Instance.ShowTip("GuildBoss2");
        //     return;
        // }
        if (GuildBossManager.Instance.m_BuZhenState == 1)
        {
            SysNotifyMgr.Instance.ShowTip("GuildBoss1");
@@ -371,4 +392,115 @@
        ShowDynamicUI();
    }
    void AtkResultEvent()
    {
        //1. 玩家从pos1 移动到pos2
        //2. 播放攻击动作 - 显示对应类型特效
        //3. 延迟100毫秒飘血物品
        heroModel.onComplete = null;
        heroModel.PlayAnimation("run");
        heroModel.transform.localPosition = pos1.localPosition;
        heroModel.transform.DOLocalMove(pos2.localPosition, 0.3f).OnComplete(() =>
        {
            ShowDmg().Forget();
        });
    }
    async UniTask ShowDmg()
    {
        heroModel.onComplete = () =>
        {
            heroModel.transform.localPosition = pos1.localPosition;
        };
        heroModel.PlayAnimation("attack");
        if (GuildBossManager.Instance.atkResult.AtkType == 0)
        {
            hurtEffect.Play();
        }
        else
        {
            hurtAngerEffect.Play();
        }
        bossModel.PlayAnimation("hit");
        bossModel.onComplete = () =>
        {
            bossModel.PlayAnimation("idle", true);
            bossModel.onComplete = null;
        };
        for (int i = 0; i < hurtValues.Length; i++)
        {
            if (i < GuildBossManager.Instance.atkResult.HurtCount)
            {
                int index = i;
                hurtValues[i].SetActive(true);
                var tween = hurtValues[i].GetComponent<PositionTween>();
                tween.SetStartState();
                tween.Play(() =>
                {
                    hurtValues[index].SetActive(false);
                });
                var hurtData = GuildBossManager.Instance.atkResult.HurtList[i];
                BattleDmg dmg = new BattleDmg()
                {
                    damage = hurtData.HurtValue + hurtData.HurtValueEx * Constants.ExpPointValue,
                    attackType = hurtData.IsSuper == 1 ? (int)DamageType.CritDamage : 2
                };
                hurtValues[i].text = BattleUtility.DisplayDamageNum(dmg);
                await UniTask.Delay(100);
            }
            else
            {
                hurtValues[i].SetActive(false);
            }
        }
        for (int i = 0; i < awardValues.Length; i++)
        {
            if (i < GuildBossManager.Instance.atkResult.ItemCount)
            {
                var itemData = GuildBossManager.Instance.atkResult.ItemList[i];
                awardValues[i].SetActive(true);
                var tween = hurtValues[i].GetComponent<PositionTween>();
                tween.SetStartState();
                int index = i;
                tween.Play(() =>
                {
                    awardValues[index].SetActive(false);
                });
                awardValues[i].text = itemData.Count.ToString();
                awardIcons[i].SetItemSprite((int)itemData.ItemID);
                await UniTask.Delay(100);
            }
            else
            {
                awardValues[i].SetActive(false);
            }
        }
    }
    void InitAttack()
    {
        for (int i = 0; i < hurtValues.Length; i++)
        {
            hurtValues[i].SetActive(false);
        }
        for (int i = 0; i < awardValues.Length; i++)
        {
            awardValues[i].SetActive(false);
        }
        heroModel.transform.localPosition = pos1.localPosition;
        bossModel.onComplete = () =>
        {
            bossModel.PlayAnimation("idle", true);
            bossModel.onComplete = null;
        };
        bossModel.PlayAnimation("chuxian");
    }
}