예제 #1
0
        public static NPCInst CreateDummyInst(NPCDef npcDef, string name, Types.Vec3f spawnPosition, Random random)
        {
            random = random ?? new Random();

            int guild      = random.Next(0, 2);
            int armorType  = random.Next(0, 4);
            int meleeType  = random.Next(0, 4);
            int rangedType = random.Next(0, 2);

            NPCInst npcInst = null;

            npcInst = new NPCInst(npcDef);
            npcInst.SetObjName(name);
            npcInst.BaseInst.SetNeedsClientGuide(true);

            ItemInst      armor = null, weapon = null, rangeWeapon = null, ammo = null;
            int           ammoAmount;
            ScriptOverlay overlay       = null;
            bool          overlayExists = false;

            armor = new ItemInst(ItemDef.Get <ItemDef>(ArmorCodes[random.Next(0, ArmorCodes.Count)]));

            // melee weapon
            if (random.Next(0, 2) == 0)
            {
                // 1H-weapon
                weapon        = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_1H[random.Next(0, WeaponCodes_1H.Count)]));
                overlayExists = npcInst.ModelDef.TryGetOverlay("1HST2", out overlay);
            }
            else
            {
                // 2H-weapon
                weapon        = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_2H[random.Next(0, WeaponCodes_2H.Count)]));
                overlayExists = npcInst.ModelDef.TryGetOverlay("2HST1", out overlay);
            }

            // ranged weapon
            if (random.Next(0, 2) == 0)
            {
                // bow
                rangeWeapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_Bow[random.Next(0, WeaponCodes_Bow.Count)]));
                ammo        = new ItemInst(ItemDef.Get <ItemDef>(AmmoCodes_Bow[random.Next(0, AmmoCodes_Bow.Count)]));
            }
            else
            {
                // crossbow
                rangeWeapon = new ItemInst(ItemDef.Get <ItemDef>(WeaponCodes_Crossbow[random.Next(0, WeaponCodes_Crossbow.Count)]));
                ammo        = new ItemInst(ItemDef.Get <ItemDef>(AmmoCodes_Crossbow[random.Next(0, AmmoCodes_Crossbow.Count)]));
            }

            ammoAmount = random.Next(10, 500 + 1);
            ammo.BaseInst.SetAmount(ammoAmount);

            npcInst.Inventory.AddItem(weapon);
            npcInst.EffectHandler.TryEquipItem(weapon); // 1 = DrawnWeapon

            npcInst.Inventory.AddItem(rangeWeapon);
            npcInst.EffectHandler.TryEquipItem(rangeWeapon);

            npcInst.Inventory.AddItem(ammo);
            npcInst.EffectHandler.TryEquipItem(ammo);

            npcInst.Inventory.AddItem(armor);
            npcInst.EffectHandler.TryEquipItem(armor);

            if (overlayExists)
            {
                npcInst.ModelInst.ApplyOverlay(overlay);
            }

            npcInst.Spawn(WorldSystem.WorldInst.List[0], spawnPosition, Types.Angles.Null);

            return(npcInst);
        }
예제 #2
0
        void AddBowAnis(ModelDef model)
        {
            var ov1 = new ScriptOverlay("BowT1", "Humans_BowT1"); model.AddOverlay(ov1);
            var ov2 = new ScriptOverlay("BowT2", "Humans_BowT2"); model.AddOverlay(ov2);

            ScriptAniJob aniJob1 = new ScriptAniJob("drawbow_part0", "t_Run_2_bow");

            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 5)
            {
                { SpecialFrame.Draw, 5 }
            });
            aniJob1.AddOverlayAni(new ScriptAni(0, 5)
            {
                { SpecialFrame.Draw, 5 }
            }, ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 5)
            {
                { SpecialFrame.Draw, 5 }
            }, ov2);

            ScriptAniJob aniJob2 = new ScriptAniJob("drawbow_part1", "s_bow");

            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni(0, 1));
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob1.NextAni = aniJob2;

            ScriptAniJob aniJob3 = new ScriptAniJob("drawbow_part2", "t_bow_2_bowRun");

            model.AddAniJob(aniJob3);
            aniJob3.SetDefaultAni(new ScriptAni(0, 12));
            aniJob3.AddOverlayAni(new ScriptAni(0, 10), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 8), ov2);
            aniJob2.NextAni = aniJob3;

            ScriptAniJob aniJob = new ScriptAniJob("drawbow_running", "t_Move_2_BowMove", new ScriptAni(0, 19));

            aniJob.Layer = 2;
            aniJob.DefaultAni.SetSpecialFrame(SpecialFrame.Draw, 7);
            model.AddAniJob(aniJob);

            aniJob1 = new ScriptAniJob("undrawbow_part0", "t_BowRun_2_Bow");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 12)
            {
                { SpecialFrame.Draw, 12 }
            });
            aniJob1.AddOverlayAni(new ScriptAni(0, 10)
            {
                { SpecialFrame.Draw, 10 }
            }, ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 8)
            {
                { SpecialFrame.Draw, 8 }
            }, ov2);

            aniJob2 = new ScriptAniJob("undrawbow_part1", "s_Bow");
            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni(0, 1));
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob1.NextAni = aniJob2;

            aniJob3 = new ScriptAniJob("undrawbow_part2", "t_bow_2_Run");
            model.AddAniJob(aniJob3);
            aniJob3.SetDefaultAni(new ScriptAni(0, 5));
            aniJob3.AddOverlayAni(new ScriptAni(0, 5), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 5), ov2);
            aniJob2.NextAni = aniJob3;

            aniJob       = new ScriptAniJob("undrawbow_running", "t_BowMove_2_Move", new ScriptAni(0, 19));
            aniJob.Layer = 2;
            aniJob.DefaultAni.SetSpecialFrame(SpecialFrame.Draw, 12);
            model.AddAniJob(aniJob);

            aniJob1 = new ScriptAniJob("aim_bow", "t_bowwalk_2_bowaim");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 11));
            aniJob1.AddOverlayAni(new ScriptAni(0, 11), ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 11), ov2);

            aniJob2 = new ScriptAniJob("aiming_bow", "s_BowAim");
            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni());
            aniJob2.AddOverlayAni(new ScriptAni(), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(), ov2);
            aniJob1.NextAni = aniJob2;

            // fixme: add s_bowshoot too?
            aniJob1 = new ScriptAniJob("reload_bow", "t_BowReload");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 28));
            aniJob1.AddOverlayAni(new ScriptAni(0, 26), ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 22), ov2);
            aniJob1.NextAni = aniJob2;

            aniJob1 = new ScriptAniJob("unaim_bow", "t_BowAim_2_Bowwalk");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 11));
            aniJob1.AddOverlayAni(new ScriptAni(0, 11), ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 11), ov2);
        }
예제 #3
0
        void AddXBowAnis(ModelDef model)
        {
            var ov1 = new ScriptOverlay("XBowT1", "Humans_CBowT1"); model.AddOverlay(ov1);
            var ov2 = new ScriptOverlay("XBowT2", "Humans_CBowT2"); model.AddOverlay(ov2);

            ScriptAniJob aniJob1 = new ScriptAniJob("drawXbow_part0", "t_Run_2_Cbow");

            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 4)
            {
                { SpecialFrame.Draw, 4 }
            });
            aniJob1.AddOverlayAni(new ScriptAni(0, 4)
            {
                { SpecialFrame.Draw, 4 }
            }, ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 4)
            {
                { SpecialFrame.Draw, 4 }
            }, ov2);

            ScriptAniJob aniJob2 = new ScriptAniJob("drawXbow_part1", "s_Cbow");

            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni(0, 1));
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob1.NextAni = aniJob2;

            ScriptAniJob aniJob3 = new ScriptAniJob("drawXbow_part2", "t_Cbow_2_CbowRun");

            model.AddAniJob(aniJob3);
            aniJob3.SetDefaultAni(new ScriptAni(0, 33));
            aniJob3.AddOverlayAni(new ScriptAni(0, 29), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 25), ov2);
            aniJob2.NextAni = aniJob3;

            ScriptAniJob aniJob = new ScriptAniJob("drawXbow_running", "t_Move_2_CBowMove", new ScriptAni(0, 39));

            aniJob.Layer = 2;
            aniJob.DefaultAni.SetSpecialFrame(SpecialFrame.Draw, 7);
            model.AddAniJob(aniJob);

            aniJob1 = new ScriptAniJob("undrawXbow_part0", "t_CBowRun_2_CBow");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 33)
            {
                { SpecialFrame.Draw, 33 }
            });
            aniJob1.AddOverlayAni(new ScriptAni(0, 29)
            {
                { SpecialFrame.Draw, 29 }
            }, ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 25)
            {
                { SpecialFrame.Draw, 25 }
            }, ov2);

            aniJob2 = new ScriptAniJob("undrawXbow_part1", "s_CBow");
            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni(0, 1));
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob1.NextAni = aniJob2;

            aniJob3 = new ScriptAniJob("undrawXbow_part2", "t_Cbow_2_Run");
            model.AddAniJob(aniJob3);
            aniJob3.SetDefaultAni(new ScriptAni(0, 4));
            aniJob3.AddOverlayAni(new ScriptAni(0, 4), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 4), ov2);
            aniJob2.NextAni = aniJob3;

            aniJob       = new ScriptAniJob("undrawXbow_running", "t_CBowMove_2_Move", new ScriptAni(0, 39));
            aniJob.Layer = 2;
            aniJob.DefaultAni.SetSpecialFrame(SpecialFrame.Draw, 32);
            model.AddAniJob(aniJob);

            aniJob1 = new ScriptAniJob("aim_xbow", "t_cbowwalk_2_cbowaim");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 5));
            aniJob1.AddOverlayAni(new ScriptAni(0, 6), ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 6), ov2);

            aniJob2 = new ScriptAniJob("aiming_xbow", "s_CBowAim");
            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni());
            aniJob2.AddOverlayAni(new ScriptAni(), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(), ov2);
            aniJob1.NextAni = aniJob2;

            // fixme: add s_bowshoot too?
            aniJob1 = new ScriptAniJob("reload_xbow", "t_CBowReload");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 32));
            aniJob1.AddOverlayAni(new ScriptAni(0, 29), ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 23), ov2);
            aniJob1.NextAni = aniJob2;

            aniJob1 = new ScriptAniJob("unaim_xbow", "t_CBowAim_2_CBowwalk");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 6));
            aniJob1.AddOverlayAni(new ScriptAni(0, 6), ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 6), ov2);
        }
예제 #4
0
        void Add2hAnis(ModelDef model)
        {
            var ov1 = new ScriptOverlay("2HST1", "Humans_2hST1"); model.AddOverlay(ov1);
            var ov2 = new ScriptOverlay("2HST2", "Humans_2hST2"); model.AddOverlay(ov2);

            // Draw 2h
            ScriptAniJob aniJob1 = new ScriptAniJob("draw2h_part0", "t_Run_2_2h");

            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 4)
            {
                { SpecialFrame.Draw, 4 }
            });
            aniJob1.AddOverlayAni(new ScriptAni(0, 4)
            {
                { SpecialFrame.Draw, 4 }
            }, ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 3)
            {
                { SpecialFrame.Draw, 3 }
            }, ov2);

            ScriptAniJob aniJob2 = new ScriptAniJob("draw2h_part1", "s_2h");

            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni(0, 1));
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob1.NextAni = aniJob2;

            ScriptAniJob aniJob3 = new ScriptAniJob("draw2h_part2", "t_2h_2_2hRun");

            model.AddAniJob(aniJob3);
            aniJob3.SetDefaultAni(new ScriptAni(0, 15));
            aniJob3.AddOverlayAni(new ScriptAni(0, 15), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 10), ov2);
            aniJob2.NextAni = aniJob3;

            // Draw 2h running
            ScriptAniJob aniJob = new ScriptAniJob("draw2h_running", "t_Move_2_2hMove", new ScriptAni(0, 24));

            aniJob.Layer = 2;
            aniJob.DefaultAni.SetSpecialFrame(SpecialFrame.Draw, 6);
            model.AddAniJob(aniJob);

            // Undraw 2h
            aniJob1 = new ScriptAniJob("undraw2h_part0", "t_2hRun_2_2h");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 15)
            {
                { SpecialFrame.Draw, 15 }
            });
            aniJob1.AddOverlayAni(new ScriptAni(0, 15)
            {
                { SpecialFrame.Draw, 15 }
            }, ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 10)
            {
                { SpecialFrame.Draw, 10 }
            }, ov2);

            aniJob2 = new ScriptAniJob("undraw2h_part1", "s_2h");
            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni(0, 1));
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob1.NextAni = aniJob2;

            aniJob3 = new ScriptAniJob("undraw2h_part2", "t_2h_2_Run");
            model.AddAniJob(aniJob3);
            aniJob3.SetDefaultAni(new ScriptAni(0, 4));
            aniJob3.AddOverlayAni(new ScriptAni(0, 4), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 3), ov2);
            aniJob2.NextAni = aniJob3;

            // Undraw 2h running
            aniJob       = new ScriptAniJob("undraw2h_running", "t_2hMove_2_Move", new ScriptAni(0, 24));
            aniJob.Layer = 2;
            aniJob.DefaultAni.SetSpecialFrame(SpecialFrame.Draw, 18);
            model.AddAniJob(aniJob);

            // Fwd attack 1
            ScriptAniJob job = new ScriptAniJob("2hattack_fwd0", "s_2hattack");

            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 26)
            {
                { SpecialFrame.Hit, 8 }, { SpecialFrame.Combo, 14 }
            });
            job.AddOverlayAni(new ScriptAni(0, 35)
            {
                { SpecialFrame.Hit, 6 }, { SpecialFrame.Combo, 16 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(0, 34)
            {
                { SpecialFrame.Hit, 5 }, { SpecialFrame.Combo, 13 }
            }, ov2);

            // fwd combo 2
            job = new ScriptAniJob("2hattack_fwd1", "s_2hattack");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(31, 50)
            {
                { SpecialFrame.Hit, 6 }
            });
            job.AddOverlayAni(new ScriptAni(40, 75)
            {
                { SpecialFrame.Hit, 6 }, { SpecialFrame.Combo, 16 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(39, 75)
            {
                { SpecialFrame.Hit, 4 }, { SpecialFrame.Combo, 12 }
            }, ov2);

            // fwd combo 3
            job = new ScriptAniJob("2hattack_fwd2", "s_2hattack");
            model.AddAniJob(job);
            job.AddOverlayAni(new ScriptAni(80, 114)
            {
                { SpecialFrame.Hit, 6 }, { SpecialFrame.Combo, 16 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(79, 118)
            {
                { SpecialFrame.Hit, 9 }, { SpecialFrame.Combo, 17 }
            }, ov2);

            // fwd combo 4
            job = new ScriptAniJob("2hattack_fwd3", "s_2hattack");
            model.AddAniJob(job);
            job.AddOverlayAni(new ScriptAni(124, 146)
            {
                { SpecialFrame.Hit, 12 }
            }, ov2);

            // left attack
            job = new ScriptAniJob("2hattack_left", "t_2hAttackL");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 36)
            {
                { SpecialFrame.Hit, 6 }, { SpecialFrame.Combo, 18 }
            });
            job.AddOverlayAni(new ScriptAni(0, 28)
            {
                { SpecialFrame.Hit, 5 }, { SpecialFrame.Combo, 14 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(0, 26)
            {
                { SpecialFrame.Hit, 5 }, { SpecialFrame.Combo, 14 }
            }, ov2);

            // right attack
            job = new ScriptAniJob("2hattack_right", "t_2hAttackR");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 36)
            {
                { SpecialFrame.Hit, 6 }, { SpecialFrame.Combo, 18 }
            });
            job.AddOverlayAni(new ScriptAni(0, 29)
            {
                { SpecialFrame.Hit, 5 }, { SpecialFrame.Combo, 14 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(0, 26)
            {
                { SpecialFrame.Hit, 5 }, { SpecialFrame.Combo, 14 }
            }, ov2);

            // run attack
            job       = new ScriptAniJob("2hattack_run", "t_2hAttackMove");
            job.Layer = 2;
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 23)
            {
                { SpecialFrame.Hit, 12 }
            });

            // parades
            job = new ScriptAniJob("2h_parade0", "t_2hParade_0");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 15));

            job = new ScriptAniJob("2h_parade1", "t_2hParade_0_A2");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 15));

            job = new ScriptAniJob("2h_parade2", "t_2hParade_0_A3");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 15));

            // dodge
            job = new ScriptAniJob("2h_dodge", "t_2hParadeJumpB");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 24));
        }
예제 #5
0
        void Add1HAnis(ModelDef model)
        {
            var ov1 = new ScriptOverlay("1HST1", "Humans_1hST1"); model.AddOverlay(ov1);
            var ov2 = new ScriptOverlay("1HST2", "Humans_1hST2"); model.AddOverlay(ov2);

            // Draw 1h
            ScriptAniJob aniJob1 = new ScriptAniJob("draw1h_part0", "t_Run_2_1h");

            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 2)
            {
                { SpecialFrame.Draw, 2 }
            });
            aniJob1.AddOverlayAni(new ScriptAni(0, 3)
            {
                { SpecialFrame.Draw, 3 }
            }, ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 1)
            {
                { SpecialFrame.Draw, 1 }
            }, ov2);

            ScriptAniJob aniJob2 = new ScriptAniJob("draw1h_part1", "s_1h");

            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni(0, 1));
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob1.NextAni = aniJob2;

            ScriptAniJob aniJob3 = new ScriptAniJob("draw1h_part2", "t_1h_2_1hRun");

            model.AddAniJob(aniJob3);
            aniJob3.SetDefaultAni(new ScriptAni(0, 12));
            aniJob3.AddOverlayAni(new ScriptAni(0, 6), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 8), ov2);
            aniJob2.NextAni = aniJob3;

            // Draw 1h running
            ScriptAniJob aniJob = new ScriptAniJob("draw1h_running", "t_Move_2_1hMove", new ScriptAni(0, 24));

            aniJob.Layer = 2;
            aniJob.DefaultAni.SetSpecialFrame(SpecialFrame.Draw, 6);
            model.AddAniJob(aniJob);

            // Undraw 1h
            aniJob1 = new ScriptAniJob("undraw1h_part0", "t_1hRun_2_1h");
            model.AddAniJob(aniJob1);
            aniJob1.SetDefaultAni(new ScriptAni(0, 12)
            {
                { SpecialFrame.Draw, 12 }
            });
            aniJob1.AddOverlayAni(new ScriptAni(0, 6)
            {
                { SpecialFrame.Draw, 6 }
            }, ov1);
            aniJob1.AddOverlayAni(new ScriptAni(0, 8)
            {
                { SpecialFrame.Draw, 8 }
            }, ov2);

            aniJob2 = new ScriptAniJob("undraw1h_part1", "s_1h");
            model.AddAniJob(aniJob2);
            aniJob2.SetDefaultAni(new ScriptAni(0, 1));
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob1.NextAni = aniJob2;

            aniJob3 = new ScriptAniJob("undraw1h_part2", "t_1h_2_Run");
            model.AddAniJob(aniJob3);
            aniJob3.SetDefaultAni(new ScriptAni(0, 2));
            aniJob3.AddOverlayAni(new ScriptAni(0, 3), ov1);
            aniJob2.AddOverlayAni(new ScriptAni(0, 1), ov2);
            aniJob2.NextAni = aniJob3;

            // Undraw 1h running
            aniJob       = new ScriptAniJob("undraw1h_running", "t_1hMove_2_Move", new ScriptAni(0, 24));
            aniJob.Layer = 2;
            aniJob.DefaultAni.SetSpecialFrame(SpecialFrame.Draw, 18);
            model.AddAniJob(aniJob);

            // Fwd attack 1
            ScriptAniJob job = new ScriptAniJob("1hattack_fwd0", "s_1hattack");

            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 23)
            {
                { SpecialFrame.Hit, 6 }, { SpecialFrame.Combo, 15 }
            });
            job.AddOverlayAni(new ScriptAni(0, 33)
            {
                { SpecialFrame.Hit, 4 }, { SpecialFrame.Combo, 14 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(0, 29)
            {
                { SpecialFrame.Hit, 4 }, { SpecialFrame.Combo, 10 }
            }, ov2);

            // fwd combo 2
            job = new ScriptAniJob("1hattack_fwd1", "s_1hattack");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(26, 40)
            {
                { SpecialFrame.Hit, 7 }
            });
            job.AddOverlayAni(new ScriptAni(33, 68)
            {
                { SpecialFrame.Hit, 4 }, { SpecialFrame.Combo, 15 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(33, 60)
            {
                { SpecialFrame.Hit, 3 }, { SpecialFrame.Combo, 9 }
            }, ov2);

            // fwd combo 3
            job = new ScriptAniJob("1hattack_fwd2", "s_1hattack");
            model.AddAniJob(job);
            job.AddOverlayAni(new ScriptAni(68, 103)
            {
                { SpecialFrame.Hit, 6 }, { SpecialFrame.Combo, 17 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(65, 92)
            {
                { SpecialFrame.Hit, 8 }, { SpecialFrame.Combo, 13 }
            }, ov2);

            // fwd combo 4
            job = new ScriptAniJob("1hattack_fwd3", "s_1hattack");
            model.AddAniJob(job);
            job.AddOverlayAni(new ScriptAni(103, 120)
            {
                { SpecialFrame.Hit, 7 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(97, 113)
            {
                { SpecialFrame.Hit, 10 }
            }, ov2);

            // left attack
            job = new ScriptAniJob("1hattack_left", "t_1HAttackL");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 30)
            {
                { SpecialFrame.Hit, 5 }, { SpecialFrame.Combo, 15 }
            });
            job.AddOverlayAni(new ScriptAni(0, 24)
            {
                { SpecialFrame.Hit, 4 }, { SpecialFrame.Combo, 10 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(0, 20)
            {
                { SpecialFrame.Hit, 3 }, { SpecialFrame.Combo, 8 }
            }, ov2);

            // right attack
            job = new ScriptAniJob("1hattack_right", "t_1HAttackR");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 30)
            {
                { SpecialFrame.Hit, 5 }, { SpecialFrame.Combo, 15 }
            });
            job.AddOverlayAni(new ScriptAni(0, 24)
            {
                { SpecialFrame.Hit, 4 }, { SpecialFrame.Combo, 10 }
            }, ov1);
            job.AddOverlayAni(new ScriptAni(0, 20)
            {
                { SpecialFrame.Hit, 3 }, { SpecialFrame.Combo, 8 }
            }, ov2);

            // run attack
            job       = new ScriptAniJob("1hattack_run", "t_1HAttackMove");
            job.Layer = 2;
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 29)
            {
                { SpecialFrame.Hit, 16 }
            });

            // parades
            job = new ScriptAniJob("1h_parade0", "t_1HParade_0");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 15));

            job = new ScriptAniJob("1h_parade1", "t_1HParade_0_A2");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 15));

            job = new ScriptAniJob("1h_parade2", "t_1HParade_0_A3");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 15));

            // dodge
            job = new ScriptAniJob("1h_dodge", "t_1HParadeJumpB");
            model.AddAniJob(job);
            job.SetDefaultAni(new ScriptAni(0, 14));
        }
예제 #6
0
        public static void ParseMDS(FileInfo fileInfo, bool isOverlay = false)
        {
            if (isOverlay)
            {
                return;
            }

            try
            {
                if (fileInfo == null)
                {
                    Logger.LogError("AniParser: FileInfo is null!");
                    return;
                }

                if (!fileInfo.Exists)
                {
                    Logger.LogError("AniParser: {0} does not exist!", fileInfo.FullName);
                    return;
                }

                if (string.Compare(fileInfo.Extension, ".mds", true) != 0)
                {
                    Logger.LogError("AniParser: {0} is no MDS file!", fileInfo.FullName);
                    return;
                }

                string name = Path.GetFileNameWithoutExtension(fileInfo.Name);

                int newAnis = 0;
                int newJobs = 0;

                ModelDef modelDef = new ModelDef(name, fileInfo.Name);
                modelDef.SetAniCatalog(new Visuals.AniCatalogs.NPCCatalog());
                ScriptOverlay overlay = null;

                using (StreamReader sr = new StreamReader(fileInfo.OpenRead()))
                {
                    string line = null;
                    try
                    {
                        while ((line = sr.ReadLine()) != null)
                        {
                            string[] strs = line.Split(seperators, StringSplitOptions.RemoveEmptyEntries);
                            if (strs.Length < 9)
                            {
                                continue;
                            }

                            string type = strs[0].Trim(seperators);
                            if (string.Compare(type, "ani", true) == 0)
                            {
                                ReadAni(modelDef, overlay, strs, ref newAnis, ref newJobs);
                            }
                            else if (string.Compare(type, "aniAlias", true) == 0)
                            {
                                ReadAniAlias(modelDef, overlay, strs, ref newAnis, ref newJobs);
                            }
                        }

                        modelDef.Create();
                    }
                    catch (Exception e)
                    {
                        File.WriteAllText("lastline.txt", line == null ? "" : line);
                        Logger.Log(e);
                    }
                }

                if (isOverlay)
                {
                    Logger.Log("AniParser: Overlay '{0}': {1} jobs and {2} anis parsed.", overlay.CodeName, newJobs, newAnis);
                }
                else
                {
                    Logger.Log("AniParser: ModelDef '{0}': {1} jobs and {2} anis parsed.", modelDef.CodeName, newJobs, newAnis);
                }
            }
            catch (Exception e)
            {
                Logger.Log("AniParser: {0} excepted!", fileInfo.FullName);
                Logger.Log(e);
            }
        }
예제 #7
0
 static void ReadAniAlias(ModelDef modelDef, ScriptOverlay overlay, string[] strs, ref int newAnis, ref int newJobs)
 {
     //newJobs++;
     //newAnis++;
 }
예제 #8
0
        static void ReadAni(ModelDef modelDef, ScriptOverlay overlay, string[] strs, ref int newAnis, ref int newJobs)
        {
            string aniName = ExtractString(strs[1]);

            int layer;

            if (!int.TryParse(strs[2], out layer))
            {
                return;
            }

            string nextAni = ExtractString(strs[3]);

            int startFrame;

            if (!int.TryParse(strs[9], out startFrame))
            {
                return;
            }

            int endFrame;

            if (!int.TryParse(strs[10], out endFrame) || endFrame < 0)
            {
                return;
            }

            float fps = 25;

            if (strs.Length > 11)
            {
                float.TryParse(strs[11].Substring("FPS:".Length), out fps);
            }

            ScriptAniJob aniJob;

            if (!modelDef.TryGetAniJob(aniName, out aniJob))
            {
                aniJob = new ScriptAniJob(aniName, aniName);
                if (!modelDef.Catalog.ContainsPropertyForJob(aniJob))
                {
                    return;
                }

                modelDef.AddAniJob(aniJob);
                newJobs++;
            }
            aniJob.Layer = layer;

            ScriptAni ani = new ScriptAni(startFrame, endFrame);

            ani.FPS = fps;
            if (overlay == null)
            {
                aniJob.SetDefaultAni(ani);
            }
            else
            {
                aniJob.AddOverlayAni(ani, overlay);
            }
            newAnis++;
        }