Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="texturePool"></param>
        /// <param name="mobInstance"></param>
        /// <param name="device"></param>
        /// <param name="usedProps"></param>
        /// <returns></returns>
        public static MobItem CreateMobFromProperty(TexturePool texturePool, MobInstance mobInstance, GraphicsDevice device, ref List <WzObject> usedProps)
        {
            MobInfo mobInfo = (MobInfo)mobInstance.BaseInfo;
            WzImage source  = mobInfo.LinkedWzImage;

            List <IDXObject> frames = new List <IDXObject>(); // All frames "stand", "speak" "blink" "hair", "angry", "wink" etc

            foreach (WzImageProperty childProperty in source.WzProperties)
            {
                if (childProperty is WzSubProperty mobStateProperty) // issue with 867119250, Eluna map mobs
                {
                    switch (mobStateProperty.Name)
                    {
                    case "info":     // info/speak/0 WzStringProperty
                    {
                        break;
                    }

                    default:
                    {
                        frames.AddRange(LoadFrames(texturePool, mobStateProperty, mobInstance.X, mobInstance.Y, device, ref usedProps));
                        break;
                    }
                    }
                }
            }
            return(new MobItem(mobInstance, frames));
        }
Пример #2
0
Файл: Mob.cs Проект: roaet/LD28
    public void LoadInfo(Event eventController, MobInfo info)
    {
        m_info            = info;
        m_eventController = eventController;
        Sprite[] textures = Resources.LoadAll <Sprite>("images/mobs");
        string   sprite   = m_info.sprite;

        foreach (Sprite s in textures)
        {
            if (s.name == sprite)
            {
                m_sprite.sprite = s;
                break;
            }
        }
        m_sprite.color = info.color;
        m_health       = m_totalHealth = info.health;
        m_hasHealth    = info.hasHealth;
        if (!m_hasHealth)
        {
            m_health = m_totalHealth = 1;
            healthBarBG.renderer.enabled = false;
            healthBarFG.renderer.enabled = false;
        }
    }
Пример #3
0
    private static bool _LoadDataBase(string tablePath, ref Dictionary <int, MobInfo> Info)
    {
        Info.Clear();
        TextAsset datas = Resources.Load <TextAsset>(tablePath);

        if (datas != null)
        {
            string[] lines = datas.text.Split('\n');
            for (int i = 1; i < lines.Length - 1; i++)
            {
                string[] mobInfo = lines[i].Split(',');
                MobInfo  data    = new MobInfo();
                data.SetID(int.Parse(mobInfo[0]));
                data.SetHP(float.Parse(mobInfo[1]));
                data.SetProbeLength(float.Parse(mobInfo[2]));
                data.SetSight(float.Parse(mobInfo[3]));
                data.SetRadius(float.Parse(mobInfo[4]));
                data.SetVisionLength(float.Parse(mobInfo[5]));
                data.SetAttackRange(float.Parse(mobInfo[6]));
                data.SetAttackDamage(float.Parse(mobInfo[7]));
                data.SetMoney(float.Parse(mobInfo[8]));
                data.SetExp(float.Parse(mobInfo[9]));
                Info.Add(data.m_ID, data);
            }
            return(true);
        }
        return(false);
    }
Пример #4
0
 public override void CheckCondition(MobInfo data)
 {
     if (m_fCurrentTime > m_fIdleTime)
     {
         data.m_FSMSystem.PerformTransition(eFSMTransition.Go_WanderIdle);
     }
 }
Пример #5
0
        private static void AnswerOnNpcQuestion(ZoneCharacter character, byte answer)
        {
            NPC     npc = (character.Question.Object as NPC);
            MobInfo mob = DataProvider.Instance.GetMobInfo(npc.ID);
            string  NpcFunction;

            DataProvider.Instance.ShineNpcTable.TryGetValue(mob.Name + "\t" + npc.Map.MapInfo.ShortName + "\t" + npc.Position.X + "\t" + npc.Position.Y, out NpcFunction);
            if (NpcFunction != null)
            {
                switch (answer)
                {
                case 0: break;

                case 1:
                    if (NpcFunction.Split('\t')[1] == "1" && NpcFunction.Split('\t')[2] == "Merchant" && NpcFunction.Split('\t')[3] == "SoulStone")
                    {
                        SendSellHPSP(character);
                    }
                    else if (NpcFunction.Split('\t')[1] == "1" && NpcFunction.Split('\t')[2] == "Merchant" && NpcFunction.Split('\t')[3] == "Item")
                    {
                        SendSellItems(character, mob.Name);
                    }
                    break;

                default:
                    Log.WriteLine(LogLevel.Warn, "Invalid gate question response.");
                    break;
                }
            }
            else
            {
                Log.WriteLine(LogLevel.Error, "NpcHandler :: Can not find NpcAction for {0} on M: {1}", mob.Name, npc.Map.MapInfo.FullName);
            }
        }
Пример #6
0
        public static void SearchPlayer(MobInfo data)
        {
            data.m_Player = null;
            List <Player> pList = InGamePlayerManager.Instance.Players;

            if (pList != null && pList.Count > 0)
            {
                float minDist = float.MaxValue;
                for (int i = 0; i < pList.Count; i++)
                {
                    float sqrDist = (pList[i].transform.position - data.m_Go.transform.position).sqrMagnitude;
                    if (pList[i].IsDead)
                    {
                        continue;
                    }

                    if (sqrDist < minDist)
                    {
                        minDist       = sqrDist;
                        data.m_Player = pList[i];
                    }
                }
            }
            return;
        }
Пример #7
0
    public override void CheckCondition(MobInfo data)
    {
        if (m_fCurrentTime > m_fIdleTime && SteeringBehaviours.CreatRandomTarget(data) == true)
        {
            data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Wander);
        }
        if (data.m_Player != null && data.m_Player.IsDead == false)
        {
            float Dist = (data.m_Player.transform.position - data.m_Go.transform.position).magnitude;

            if (Dist < data.m_fPatrolVisionLength)
            {
                data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Flee);
            }
            AnimatorStateInfo info = data.m_AnimationController.Animator.GetCurrentAnimatorStateInfo(0);
            if (info.IsName("WanderIdle"))
            {
                data.m_FSMSystem.PerformTransition(eFSMTransition.Go_ChaseToRemoteAttack);
                if (info.normalizedTime > m_AnimatorLeaveTime)
                {
                    data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Chase);
                }
            }
        }
    }
Пример #8
0
    public override void CheckCondition(MobInfo data)
    {
        if (Vector3.Distance(data.m_vTarget, data.m_Go.transform.position) < 0.1f)
        {
            data.m_FSMSystem.PerformTransition(eFSMTransition.Go_NoPlayerWanderIdle);
        }

        if (data.m_Player != null && data.m_Player.IsDead == false)
        {
            AnimatorStateInfo info = data.m_AnimationController.Animator.GetCurrentAnimatorStateInfo(0);
            if (info.IsName("WanderIdle2"))
            {
                if (info.normalizedTime > m_AnimatorLeaveTime)
                {
                    if ((data.m_Player.transform.position - data.m_Go.transform.position).magnitude > data.m_fAttackRange)
                    {
                        data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Chase);
                    }
                    else
                    {
                        data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Dodge);
                    }
                }
            }
        }
    }
Пример #9
0
 private void lifeListBox_SelectedValueChanged(object sender, EventArgs e)
 {
     lifePictureBox.Image = new Bitmap(1, 1);
     if (lifeListBox.SelectedItem == null)
     {
         return;
     }
     if (reactorRButton.Checked)
     {
         ReactorInfo info = Program.InfoManager.Reactors[(string)lifeListBox.SelectedItem];
         lifePictureBox.Image = info.Image;
         SetHeldInfo(info, ItemTypes.Reactors);
     }
     else if (npcRButton.Checked)
     {
         string  id   = ((string)lifeListBox.SelectedItem).Substring(0, ((string)lifeListBox.SelectedItem).IndexOf(" - "));
         NpcInfo info = WzInfoTools.GetNpcInfoById(id);
         lifePictureBox.Image = info.Image;
         SetHeldInfo(info, ItemTypes.NPCs);
     }
     else
     {
         string  id   = ((string)lifeListBox.SelectedItem).Substring(0, ((string)lifeListBox.SelectedItem).IndexOf(" - "));
         MobInfo info = WzInfoTools.GetMobInfoById(id);
         lifePictureBox.Image = info.Image;
         SetHeldInfo(info, ItemTypes.Mobs);
     }
 }
Пример #10
0
    public override void CheckCondition(MobInfo data)
    {
        if (m_fCurrentTime > m_fIdleTime && SteeringBehaviours.CreatRandomTarget(data) == true)
        {
            data.m_FSMSystem.PerformTransition(eFSMTransition.Go_NoPlayerWander);
        }

        if (data.m_Player != null && data.m_Player.IsDead == false)
        {
            AnimatorStateInfo info = data.m_AnimationController.Animator.GetCurrentAnimatorStateInfo(0);
            if (info.IsName("WanderIdle2"))
            {
                if (info.normalizedTime > m_AnimatorLeaveTime)
                {
                    if ((data.m_Player.transform.position - data.m_Go.transform.position).magnitude > data.m_fAttackRange)
                    {
                        data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Chase);
                    }
                    else
                    {
                        data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Dodge);
                    }
                }
            }
        }
    }
Пример #11
0
        private async void Init()
        {
            await MobInfo.Load(new Progress <int>());

            if (!isNewFile)
            {
                await QuestDialog.Load(new Progress <int>());

                foreach (DataRow row in QuestDialog.Rows)
                {
                    if (QuestStrings.ContainsKey(Convert.ToUInt16(row.ItemArray[0])))
                    {
                        continue;
                    }

                    QuestStrings.Add(Convert.ToUInt16(row.ItemArray[0]), row.ItemArray[1].ToString());
                }
            }

            foreach (DataRow row in MobInfo.Rows)
            {
                if (MobRows.ContainsKey(Convert.ToUInt16(row.ItemArray[0])))
                {
                    continue;
                }
                MobRows.Add(Convert.ToUInt16(row.ItemArray[0]), row.ItemArray);
            }
        }
    static public bool CollisionAvoided(MobInfo data)
    {
        Vector3    curPos = data.m_Go.transform.position;
        Vector3    tarDir = data.m_vTarget - curPos;
        float      length = data.m_fProbeLength;
        RaycastHit rh;

        if (Physics.Raycast(curPos, tarDir, out rh, length, 1 << LayerMask.NameToLayer("Terrain") | 1 << LayerMask.NameToLayer("Enemies")))
        {
            Debug.Log("Obsticle!!!!");
            float distance = tarDir.magnitude;
            float ratio    = distance / length;
            if (ratio > 1)
            {
                ratio = 1;
            }
            data.m_fMoveForce = ratio - 1;
            tarDir.Normalize();
            Vector3 vTempTurnForward = tarDir + rh.normal;
            vTempTurnForward.Normalize();
            data.m_fTempTurnForce = Vector3.Dot(vTempTurnForward, tarDir);
            return(true);
        }
        return(false);
    }
Пример #13
0
        public void NodeActionComputeTest()
        {
            var game = new GameInstance(3);

            var ability   = new AbilityInfo(3, 1, 1, 0);
            var abilityId = game.AddAbilityWithInfo(ability);

            var abilities1 = new List <int>();
            var abilities2 = new List <int> {
                abilityId
            };

            var info1 = new MobInfo(TeamColor.Red, 5, 1, 0, abilities1);
            var info2 = new MobInfo(TeamColor.Blue, 5, 1, 1, abilities2);

            var m1 = game.AddMobWithInfo(info1);
            var m2 = game.AddMobWithInfo(info2);

            game.PlaceMob(m1, new AxialCoord(1, 1));
            game.PlaceMob(m2, new AxialCoord(-1, -1));

            game.PrepareEverything();

            Assert.IsTrue(game.CurrentMob.HasValue);
            Assert.AreEqual(m1, game.CurrentMob.Value);

            var firstNode = new UctNode(0, 0, UctAction.NullAction(), game);

            firstNode.PrecomputePossibleActions(true, true);

            Assert.AreEqual(3, firstNode.PossibleActions.Count);
        }
Пример #14
0
        public void StateDeepCopyTest()
        {
            var game = new GameInstance(3);

            var ability   = new AbilityInfo(3, 1, 1, 0);
            var abilityId = game.AddAbilityWithInfo(ability);

            var abilities1 = new List <int>();
            var abilities2 = new List <int> {
                abilityId
            };

            var info1 = new MobInfo(TeamColor.Red, 5, 1, 0, abilities1);
            var info2 = new MobInfo(TeamColor.Blue, 5, 1, 1, abilities2);

            var m1 = game.AddMobWithInfo(info1);
            var m2 = game.AddMobWithInfo(info2);

            game.PrepareEverything();

            var copy = game.CopyStateOnly();

            TestHelpers.GameInstancesEqual(game, copy);

            var copy2 = copy.CopyStateOnly();

            ActionEvaluator.F(copy2, UctAction.AbilityUseAction(abilityId, m1, m2));

            TestHelpers.GameInstancesEqual(game, copy);

            TestHelpers.MobManagersEqual(game.MobManager, copy2.MobManager);
            TestHelpers.MapsEqual(game.Map, copy2.Map);
        }
Пример #15
0
    public void UnloadMob(int ID, MobInfo data)
    {
        ObjectPool.m_Instance.UnLoadObjectToPool(ID, data.m_Go);
        switch (ID)
        {
        case 3100:
            AddTotalKill();
            m_FishCount--;
            break;

        case 3200:
            AddTotalKill();
            m_PatrolCount--;
            break;

        case 3300:
            AddTotalKill();
            m_FishVariantCount--;
            break;

        case 3400:
            AddTotalKill();
            m_TankCount--;
            break;
        }
    }
Пример #16
0
 public override void CheckCondition(MobInfo data)
 {
     if ((data.m_Player.transform.position - data.m_Go.transform.position).magnitude < data.m_fAttackRange * 2.0f)
     {
         data.m_FSMSystem.PerformTransition(eFSMTransition.Go_RemoteAttack);
     }
 }
Пример #17
0
 public override void DoBeforeLeave(MobInfo data)
 {
     data.navMeshAgent.speed *= 0.5f;
     data.m_AnimationController.SetAnimator(m_StateID, false);
     m_Animator.SetTrigger("endTrigger");
     GameObject.Destroy(sound.gameObject);
     ObjectPool.m_Instance.UnLoadObjectToPool(3210, GO);
 }
Пример #18
0
 public override void DoBeforeEnter(MobInfo data)
 {
     attackCount               = 0;
     effectCount               = 0;
     count                     = 0;
     m_AnimatorLeaveTime       = Random.Range(0.7f, 1.0f);
     data.navMeshAgent.enabled = false;
 }
Пример #19
0
    //#Spawn monster
    public void spawnMobFromClient(int mobId, int amount)
    {
        MobInfo mobInfo = new MobInfo();

        mobInfo.mobId  = mobId;
        mobInfo.amount = amount;
        con.Send(PacketTypes.MONSTER_SPAWN, mobInfo);
    }
Пример #20
0
 public override void DoBeforeLeave(MobInfo data)
 {
     m_fCurrentTime = 0;
     bulletIndex    = 0;
     bIsReady       = false;
     bCompleteFire  = false;
     data.m_MobAimLine.CloseAimLine();
 }
Пример #21
0
        private void LoadMobs()
        {
            try
            {
                MobsByID   = new Dictionary <ushort, MobInfo>();
                MobsByName = new Dictionary <string, MobInfo>();
                DataTable data_mobinfo       = null;
                DataTable data_MobInfoServer = null;
                using (DatabaseClient dbClient = Program.DatabaseManager.GetClient())
                {
                    data_mobinfo       = dbClient.ReadDataTable("SELECT  *FROM data_mobinfo");
                    data_MobInfoServer = dbClient.ReadDataTable("SELECT  *FROM data_MobInfoServer");
                }
                if (data_mobinfo != null)
                {
                    foreach (DataRow row in data_mobinfo.Rows)
                    {
                        MobInfo info = MobInfo.Load(row);
                        if (MobsByID.ContainsKey(info.ID) || MobsByName.ContainsKey(info.Name))
                        {
                            Log.WriteLine(LogLevel.Warn, "Duplicate mob ID found in MobInfo.shn: {0}.", info.ID);
                            continue;
                        }
                        MobsByID.Add(info.ID, info);

                        MobsByName.Add(info.Name, info);
                    }
                }
                MobData = new Dictionary <string, MobInfoServer>();
                if (data_MobInfoServer != null)
                {
                    foreach (DataRow row in data_MobInfoServer.Rows)
                    {
                        MobInfoServer info = MobInfoServer.Load(row);
                        if (MobData.ContainsKey(info.InxName))
                        {
                            Log.WriteLine(LogLevel.Warn, "Duplicate mob ID found in MobInfoServer.shn: {0}.", info.InxName);
                            continue;
                        }
                        //  Program.DatabaseManager.GetClient().ExecuteQuery("UPDATE Vendors SET NPCID='" + info.ID + "' WHERE NPCID='" + info.InxName + "'");
                        MobData.Add(info.InxName, info);
                    }

                    /* foreach (string mobs in MobsByName.Keys)//check mobdata this is for database devs
                     *   {
                     *           if(!MobData.ContainsKey(mobs))
                     *                   {
                     *                           Console.WriteLine(mobs);
                     *                   }
                     *   }*/
                }
                Log.WriteLine(LogLevel.Info, "Loaded {0} mobs.", MobsByID.Count);
            }
            catch (Exception ex)
            {
                Log.WriteLine(LogLevel.Exception, "Error loading MobInfo {0}", ex.Message);
            }
        }
Пример #22
0
    public override void Do(MobInfo data)
    {
        data.navMeshAgent.enabled = true;
        data.m_vTarget            = data.m_Player.transform.position;
        SteeringBehaviours.NavMove(data);
        Vector3 v = (SteeringBehaviours.GroupBehavior(data, 60, true) + SteeringBehaviours.GroupBehavior(data, 60, false)) * 2f * Time.deltaTime;

        data.m_Go.transform.position += v;
    }
    static public void NavMove(MobInfo data)
    {
        if (data.navMeshAgent.SetDestination(data.m_vTarget) == false)
        {
            data.m_FSMSystem.PerformGlobalTransition(eFSMTransition.Go_Dead);
        }

        data.navMeshAgent.SetDestination(data.m_vTarget);
    }
Пример #24
0
        public override float WeightMob(MobInfo info, SpawnChance chance)
        {
            if (info.Type == typeof(Bee) || info.Type == typeof(Explobee))
            {
                return(info.Chance * 2);
            }

            return(base.WeightMob(info, chance));
        }
Пример #25
0
    public override void CheckCondition(MobInfo data)
    {
        float Dist = (data.m_Player.transform.position - data.m_Go.transform.position).magnitude;

        if (Dist > data.m_fPatrolVisionLength * 1.5f || Physics.Linecast(data.m_Go.transform.position, data.m_Go.transform.position + data.m_Go.transform.forward * 2f, 1 << LayerMask.NameToLayer("Obstcale")))
        {
            data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Attack);
        }
    }
Пример #26
0
 public override void DoBeforeEnter(MobInfo data)
 {
     m_AnimatorLeaveTime       = Random.Range(0.7f, 1.0f);
     data.navMeshAgent.enabled = false;
     data.m_vTarget            = new Vector3(0, 0, 0);
     m_fCurrentTime            = 0.0f;
     m_fIdleTime = Random.Range(1.0f, 3.0f);
     data.m_AnimationController.SetAnimator(m_StateID, true);
 }
Пример #27
0
    public virtual void Copy(MobInfo mobInfo)
    {
        base.Copy(mobInfo);

        level = mobInfo.level;

        nPoint = mobInfo.nPoint;

        collisionRadius = mobInfo.collisionRadius;
    }
Пример #28
0
 public override void DoBeforeEnter(MobInfo data)
 {
     Count                     = 0;
     AttackCount               = 0;
     m_fCurrentTime            = 0;
     bIsReady                  = false;
     bFire                     = false;
     m_AnimatorLeaveTime       = Random.Range(0.7f, 1.0f);
     data.navMeshAgent.enabled = false;
 }
Пример #29
0
    public bool SetMobInfo(MobInfo mobInfo)
    {
        m_MobInfo = mobInfo;

        //	Change according to material
        if (m_pLinkActor != null)
        {
        }

        return(true);
    }
Пример #30
0
    public override void Do(MobInfo data)
    {
        vec    = data.m_Go.transform.forward;
        vec   += data.m_Go.transform.position;
        vec.y += 0.5f;
        GO.transform.position = vec;

        data.m_vTarget   = data.m_Go.transform.position + (data.m_Go.transform.position - data.m_Player.transform.position).normalized;
        data.m_vTarget.y = data.m_Go.transform.position.y;
        SteeringBehaviours.NavMove(data);
    }
Пример #31
0
 public MobManager(string loadSource)
 {
     m_mobs = new List<MobInfo>();
     TextAsset json = (TextAsset)Resources.Load(loadSource, typeof(TextAsset));
     if(!json) {
         Debug.LogError("Couldn't find: " + loadSource);
     }
     string content = json.text;
     Debug.Log ("Created mob manager");
     JSONNode cards = JSON.Parse(content);
     int mobCount = cards["mobCount"].AsInt;
     Debug.Log ("There are  " + mobCount + " mobs");
     for(int i = 0; i < mobCount; i++) {
         MobInfo mobInfo = new MobInfo(cards["mobs"][i]);
         m_mobs.Add(mobInfo);
     }
     Debug.Log("Loaded " + m_mobs.Count + " mobs");
 }
Пример #32
0
Файл: Mob.cs Проект: roaet/LD28
 public void LoadInfo(Event eventController, MobInfo info)
 {
     m_info = info;
     m_eventController = eventController;
     Sprite[] textures = Resources.LoadAll<Sprite>("images/mobs");
     string sprite = m_info.sprite;
     foreach(Sprite s in textures) {
         if(s.name == sprite) {
             m_sprite.sprite = s;
             break;
         }
     }
     m_sprite.color = info.color;
     m_health = m_totalHealth = info.health;
     m_hasHealth = info.hasHealth;
     if(!m_hasHealth) {
         m_health = m_totalHealth = 1;
         healthBarBG.renderer.enabled = false;
         healthBarFG.renderer.enabled = false;
     }
 }
Пример #33
0
 private Mob CreateMob(MobInfo info, Vector3 position)
 {
     if(m_info.mobs.Count <= 0 || m_info.isInn || m_info.isStore) return null;
     GameObject element = Instantiate(mobPrefab,
                                      position,
                                      Quaternion.identity) as GameObject;
     Mob mob = element.GetComponent<Mob>();
     mob.LoadInfo(this, info);
     return mob;
 }