using CommonAI.data;
using CommonAI.Data;
using CommonAI.Zone;
using CommonAI.Zone.Helper;
using CommonAI.Zone.Instance;
using CommonAI.Zone.ZoneEditor;
using CommonLang;
using System;
using XmdsCommonServer.Plugin;
using XmdsCommonServer.Plugin.Scene;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
using XmdsCommonSkill.Plugin.FunctionEvent;
namespace XmdsCommonZone.Zones
{
[XmdsExtensionZone(91002)]
public class Zone91002 : XmdsServerScene
{
private InstanceUnit.BuffState mFightBuff;
public static int CheckIntervalMS = 5000;
public static int StartFightBuffDelayMS = 60000;
public enum FightBuffStatus
{
InVaild,
CountDown,
Vaild,
}
private FightBuffStatus mFightBuffState = FightBuffStatus.InVaild;
public Zone91002(TemplateManager templates, InstanceZoneListener listener, SceneData data, GSCreateAreaData gsData, string bindGameSrvId)
: base(templates, listener, data, gsData, bindGameSrvId)
{
OnUnitDead += Zone91002_OnUnitDead;
OnUnitAdded += Zone91002_OnUnitAdded;
OnUnitRebirth += Zone91002_OnUnitRebirth;
OnUnitRemoved += Zone91002_OnUnitRemoved;
}
protected override void Disposing()
{
base.Disposing();
OnUnitDead -= Zone91002_OnUnitDead;
OnUnitAdded -= Zone91002_OnUnitAdded;
OnUnitRebirth -= Zone91002_OnUnitRebirth;
OnUnitRemoved -= Zone91002_OnUnitRemoved;
}
private void FightBuff_Tick(TimeTaskMS task)
{
if(mFightBuff != null && mFightBuff.IsEnd())
{
//转移战神buff
AddFightBuffToRandom((p) =>{ return p != mFightBuff.Owner && !p.IsDead(); });
}
else if(mFightBuff == null && AllPlayersCount > 1)
{
AddFightBuffToRandom();
}
}
private void StartFightBuff_Tick(TimeTaskMS task)
{
mFightBuffState = FightBuffStatus.Vaild;
AddFightBuffToRandom();
AddTimePeriodicMS(CheckIntervalMS, FightBuff_Tick);
}
private void Zone91002_OnUnitRemoved(InstanceZone zone, InstanceUnit obj)
{
}
///
/// 给玩家上无敌buff,无敌是多么的寂寞
/// 无敌buff:当玩家刚进入该场景或者死亡复活后,给予一个无敌的buff,
/// 该buff除了无敌效果以外,在buff存在期间,拥有buff的玩家无法使用任何技能;
///
///
private void AddInvincibleBuffTo(InstancePlayer player)
{
BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10010.EventID, player.Virtual, player.Virtual);
}
///
/// -- 战神buff:开战1分钟后,通过战斗事件随机指定一名玩家获得战神buff,该buff会给玩家增加攻击、生命、防御。
/// 持续时间结束或者携带buff的玩家死亡后,该buff会随机转移给另一位玩家,并且持续时间重置;
///
///
private void AddFightBuffTo(InstancePlayer player)
{
BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10002.EventID, player.Virtual, player.Virtual);
}
private void AddFightBuffToRandom(Predicate select = null)
{
if(select == null)
{
select = new Predicate(p => { return true; });
}
var player = selectRandomUnit(select);
if(player != null)
{
AddFightBuffTo(player);
}
else
{
mFightBuff = null;
}
}
private void Zone91002_OnUnitRebirth(InstanceZone zone, InstanceUnit obj)
{
if (obj.IsPlayer)
{
AddInvincibleBuffTo(obj as InstancePlayer);
}
}
private void Zone91002_OnUnitAdded(InstanceZone zone, InstanceUnit obj)
{
if (obj.IsPlayer)
{
if (mFightBuffState == FightBuffStatus.InVaild)
{
mFightBuffState = FightBuffStatus.CountDown;
AddTimeDelayMS(StartFightBuffDelayMS, StartFightBuff_Tick);
}
//else if(mFightBuffState == FightBuffStatus.Vaild && mFightBuff == null)
//{
// AddFightBuffToRandom();
//}
//监听战神buff
obj.OnGotBuff += Obj_OnGotBuff;
AddInvincibleBuffTo(obj as InstancePlayer);
}
}
private void Obj_OnGotBuff(InstanceUnit obj, InstanceUnit.BuffState buff)
{
//if(buff.ID == XmdsBattleFunctionEvent_10002.Buff_ID)
//{
// mFightBuff = buff;
//}
}
private void Zone91002_OnUnitDead(InstanceZone zone, InstanceUnit obj, InstanceUnit attacker)
{
}
}
}