using System; using System.Collections.Generic; using System.Linq; using System.Text; using CommonAI.Zone; using CommonAI.Zone.ZoneEditor; using XmdsCommonServer.Plugin.Scene; using CommonAI.Data; using CommonAI.Zone.Instance; namespace XmdsCommonZone.Zones { /** 场景控制类 */ [XmdsExtensionZone(12201)] public class Zone12201 : XmdsServerScene { private static readonly int S_MONSTER_ID = 1220101; //挂机怪id private static readonly int S_FOLLOWER_ID = 320009; //鲜花id // 总量信息 private int mMonsterMax = 0; private int mFollowerMax = 0; private int mTotalCount = 0; //当前信息 private int mCurMonsters = 0; private int mCurFollowers = 0; public Zone12201(TemplateManager templates, InstanceZoneListener listener, SceneData data, GSCreateAreaData gsData, string bindGameSrvId) : base(templates, listener, data, gsData, bindGameSrvId) { } protected override void baseInit(CommonAI.Zone.ZoneEditor.SceneData data, GSCreateAreaData gsData) { if(gsData == null) { Log.Error("Zone12201场景游戏服数据为空!"); return; } this.mTotalCount = gsData.value1; this.mFollowerMax = gsData.value2; this.mMonsterMax = Math.Max(0, gsData.value1 - gsData.value2); OnTryAddUnit += OnTryAddUnitHandler; OnTryAddItem += OnTryAddItemHandler; OnUnitRemoved += OnUnitRemovedHandler; OnItemRemoved += OnItemRemoveHandler; } private bool OnTryAddUnitHandler(UnitInfo info) { // 锁定上限小怪id写死。 if(info.UType != UnitInfo.UnitType.TYPE_MONSTER || info.ID != S_MONSTER_ID) { return true; } if(this.mCurMonsters >= this.mMonsterMax) { return false; } this.mCurMonsters++; //System.Console.WriteLine("怪物:" + this.mCurMonsters + " / " + this.mMonsterMax); return true; } private bool OnTryAddItemHandler(ItemTemplate info) { //挂机地图鲜花,写死 if(info.ID != S_FOLLOWER_ID) { return true; } if(this.mCurFollowers >= this.mFollowerMax) { return false; } this.mCurFollowers++; //System.Console.WriteLine("鲜花数量:" + this.mCurFollowers + " / " + this.mFollowerMax); return true; } public void OnUnitRemovedHandler(InstanceZone zone, InstanceUnit obj) { if (obj.IsMonster && obj.Info.ID == S_MONSTER_ID) { this.mCurMonsters--; //System.Console.WriteLine("--怪物:" + this.mCurMonsters + " / " + this.mMonsterMax); if (this.mCurMonsters < 0) { Log.Error("OnUnitRemovedHandler monster num is error: " + this.mCurMonsters + ", " + this.mMonsterMax + ", " + this.mFollowerMax + ", " + this.mTotalCount); this.mCurMonsters = 0; } } } public void OnItemRemoveHandler(InstanceZone zone, InstanceItem obj) { if (obj.Info.ID != S_FOLLOWER_ID) { return ; } this.mCurFollowers--; //System.Console.WriteLine("--鲜花数量:" + this.mCurFollowers + " / " + this.mFollowerMax); if (this.mCurFollowers < 0) { Log.Error("OnItemRemoveHandler item num is error: " + this.mCurFollowers + ", " + this.mMonsterMax + ", " + this.mFollowerMax + ", " + this.mTotalCount); this.mCurFollowers = 0; } } /**游戏服场景标识通知*/ public override void GSZoneFlagNotifyMsg(int value1) { this.mFollowerMax = Math.Max(this.mFollowerMax, value1); this.mMonsterMax = Math.Max(0, this.mTotalCount - this.mFollowerMax); //System.Console.WriteLine("--------notify:" + this.mFollowerMax + " -------- " + this.mMonsterMax); } } }