public void Objects_OnPrimitiveProperties(object sender, ObjectPropertiesUpdatedEventArgs e)
        {
            var prim      = e.Prim;
            var props     = e.Properties;
            var simulator = e.Simulator;

            if (ScriptHolder == null && prim.ParentID != 0 && prim.ParentID == client.Self.LocalID)
            {
                if ("ScriptHolder" == props.Name)
                {
                    Debug("!!!!!XOXOX!!! Found our ScriptHolder " + prim);
                    ScriptHolder         = prim;
                    ScriptHolderAttached = true;
                    ScriptHolderAttachWaiting.Set();
                }
            }
            CheckConnected(simulator);
            EnsureSimulator(simulator);
            NeverSelect(prim.LocalID, simulator);

            if (!MaintainPropertiesFromQueue)
            {
                Objects_OnObjectProperties11(simulator, prim, props);
            }
            else
            {
                PropertyQueue.Enqueue(() => Objects_OnObjectProperties11(simulator, prim, props));
            }
        }
        public override void Objects_OnObjectProperties(object sender, ObjectPropertiesEventArgs e)
        {
            var simulator = e.Simulator;
            var props     = e.Properties;

            //throw new InvalidOperationException("Objects_OnObjectProperties");
            CheckConnected(simulator);
            //NeverSelect(props.LocalID, simulator);
            PropertyQueue.Enqueue(delegate() { Objects_OnObjectProperties11(simulator, null, props); });
        }
        public override void Network_OnSimDisconnected(object sender, SimDisconnectedEventArgs e)
        {
            var simulator = e.Simulator;
            var reason    = e.Reason;

            base.Network_OnSimDisconnected(sender, e);
            RemoveSim(simulator);
            SimRegion.GetRegion(simulator).RemoveSim(simulator);
            LeaveSimulator(simulator);

            if (simulator == client.Network.CurrentSim)
            {
                PropertyQueue.AddFirst(() =>
                {
                    Debug("CLOSE for region " + simulator);
                    //client.Login();
                }
                                       );
            }
        }
Exemplo n.º 4
0
 void Update()
 {
     //第一个if就是当AI进入到近战范围内,开始从队列中取出技能来释放(释放节奏通过cd和weight控制)
     if (PropertyQueue.Count() != 0 && GetComplete() && CurrentSelfToTargetDis < SYAttackDistance)
     {
         skillCdAndWeightNew = GetOneSkillInPropertyList();
         if (skillCdAndWeightNew != null)
         {
             SkillOneAction = skillCdAndWeightNew.Skill;
             Debug.Log("........................................");
             TestSkill();
         }
     }
     //这个if控制带有特定触发条件的技能的触发
     if (isCanAssault && NowState == AIState.Run && (CurrentSelfToTargetDis < AssaultTriggerMaxDistance && CurrentSelfToTargetDis > AssaultTriggerMinDistance))
     {
         SkillOneAction = skill2Action;
         isCanAssault   = false;
         TestSkill();
     }
 }