public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
 {
     byte[] tmp = new byte[4];
     mstream.Read(tmp, 0, 4);
     SpellId = BitConverter.ToInt32(tmp, 0);
     return(true);
 }
示例#2
0
        /// <summary>
        /// Returns default XFer value for specified monster
        /// </summary>
        public void InitForMonsterName(string monsterID)
        {
            ThingDb.Thing tt           = ThingDb.Things[monsterID];
            bool          isShopkeeper = tt.Subclass[(int)ThingDb.Thing.SubclassBitIndex.SHOPKEEPER];
            bool          isFemaleNPC  = tt.Subclass[(int)ThingDb.Thing.SubclassBitIndex.FEMALE_NPC];
            bool          isWoundNPC   = tt.Subclass[(int)ThingDb.Thing.SubclassBitIndex.WOUNDED_NPC];
            bool          isFriendly   = isShopkeeper || isFemaleNPC || isWoundNPC || (tt.Name == "AirshipCaptain");

            InitDefault();
            if (!isFriendly)
            {
                Aggressiveness = 0.83F;
            }
            if (isShopkeeper)
            {
                ShopkeeperInfo.ShopkeeperGreetingText = "";
                ShopkeeperInfo.ShopItems = new MonsterXfer.ShopItemInfo[0];
            }
            if (isFemaleNPC)
            {
                for (int i = 0; i < 6; i++)
                {
                    MaidenBodyColors[i] = Color.FromArgb(0xD2, 0xAE, 0x79);
                }
            }
            WoundedNPCVoiceSet = monsterID;
            if (MonsterDb.MonsterDict.ContainsKey(monsterID))
            {
                MonsterDb.MonsterInfo info = MonsterDb.MonsterDict[monsterID];
                //StatusFlags = gui.StatusCheckList.GetFlagsFromString(info.Status);
                Health       = (short)info.Health;
                RetreatRatio = info.RetreatRatio;
                ResumeRatio  = info.ResumeRatio;
            }
        }
示例#3
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);

            // 4 enchantments
            for (int i = 0; i < 4; i++)
            {
                Enchantments[i] = br.ReadString();
            }
            if (ParsingRule > 41)
            {
                if (ParsingRule >= 42)
                {
                    Durability = br.ReadInt16();
                }
                if (ParsingRule == 61)
                {
                    br.ReadByte();
                }
                if (ParsingRule >= 62)
                {
                    Unknown = br.ReadInt32();
                }
            }
            return(true);
        }
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryWriter bw = new NoxBinaryWriter(mstream, CryptApi.NoxCryptFormat.NONE);

            bw.Write(NumOfColors);
            bw.Write(LightIntensity);
            bw.Write(LightRadius);
            bw.Write(UnknownVal);
            bw.Write(Unknown2);
            bw.Write(Unknown3);
            bw.Write(Unknown4);
            bw.Write(Unknown5);
            bw.Write(Unknown6);
            for (int i = 0; i < 16; i++)
            {
                bw.WriteColor(ChangeColors[i]);
            }
            for (int i = 0; i < 16; i++)
            {
                bw.Write(ChangeIntensity[i]);
            }
            for (int i = 0; i < 16; i++)
            {
                bw.Write(ChangeRadius[i]);
            }
            bw.Write(ColorChangeIndex);
            bw.Write(IntensityChangeIndex);
            bw.Write(RadiusChangeIndex);
            bw.Write(ObjExtentID);
            bw.Write(Unknown13);
            bw.Write(Unknown14);
            bw.Write(Unknown15);
            bw.Write(IsAntiLight);
        }
示例#5
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryWriter bw = new NoxBinaryWriter(mstream, CryptApi.NoxCryptFormat.NONE);

            bw.Write((uint)RewardType);
            bw.Write(Unknown1);
            bw.Write((short)Spells.Count);
            foreach (string spell in Spells)
            {
                bw.Write(spell);
            }
            bw.Write((short)Abilities.Count);
            foreach (string ability in Abilities)
            {
                bw.Write(ability);
            }
            bw.Write((short)Monsters.Count);
            foreach (string scroll in Monsters)
            {
                bw.Write(scroll);
            }
            bw.Write(Unknown2);
            bw.Write(Unknown3);
            bw.Write(Unknown4);
            bw.Write(Unknown5);
            bw.Write(Unknown6);
            bw.Write(ActivateChance);
            bw.Write(RareOrSpecial);
        }
示例#6
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryWriter bw = new NoxBinaryWriter(mstream, CryptApi.NoxCryptFormat.NONE);

            for (int i = 0; i < 4; i++)
            {
                bw.Write(Enchantments[i]);
            }
            if (thing.HasClassFlag(ThingDb.Thing.ClassFlags.WAND) && !thing.Subclass[(int)ThingDb.Thing.SubclassBitIndex.STAFF])
            {
                bw.Write(WandChargesCurrent);
                bw.Write(WandChargesLimit);
                float recalculated = (float)(WandChargesCurrent / WandChargesLimit) * 100f;
                bw.Write((int)recalculated);
            }
            bw.Write(Durability);
            if (ParsingRule == 63)
            {
                bw.Write((byte)0);
            }
            if (ParsingRule >= 64)
            {
                bw.Write(Unknown);
            }
        }
示例#7
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            BinaryWriter bw = new BinaryWriter(mstream);

            bw.Write(ManaPool);
            bw.Write(Unused);
        }
示例#8
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);

            AbilityName = br.ReadString();
            return(true);
        }
示例#9
0
        void ItemsListBoxSelectedIndexChanged(object sender, EventArgs e)
        {
            object selected = itemsListBox.SelectedItem;

            if (selected != null)
            {
                MonsterXfer.ShopItemInfo item = (MonsterXfer.ShopItemInfo)selected;
                objectID.Text  = item.Name;
                objCount.Value = item.Count;
                DisableTextboxes();

                if (ThingDb.Things.ContainsKey(item.Name))
                {
                    ThingDb.Thing tt = ThingDb.Things[item.Name];
                    // FieldGuide/SpellBook/etc
                    if (tt.HasClassFlag(ThingDb.Thing.ClassFlags.INFO_BOOK))
                    {
                        spellID.Text    = item.SpellID;
                        spellID.Enabled = true;
                    }
                    // броня/оружие
                    if (tt.Init == "ModifierInit")
                    {
                        enchant1.Text    = item.Ench1;
                        enchant2.Text    = item.Ench2;
                        enchant3.Text    = item.Ench3;
                        enchant4.Text    = item.Ench4;
                        enchant1.Enabled = true;
                        enchant2.Enabled = true;
                        enchant3.Enabled = true;
                        enchant4.Enabled = true;
                    }
                }
            }
        }
示例#10
0
        public int Compare(Map.Object a, Map.Object b)
        {
            ThingDb.Thing tt1 = ThingDb.Things[a.Name];
            ThingDb.Thing tt2 = ThingDb.Things[b.Name];
            int           y   = (int)((a.Location.Y + tt1.Z) - (b.Location.Y + tt2.Z));

            return(y);
        }
示例#11
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            BinaryWriter bw = new BinaryWriter(mstream);

            bw.Write((int)Direction);
            bw.Write((int)LockType);
            bw.Write((int)Direction);
        }
示例#12
0
 public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
 {
     byte[] result = new byte[AbilityName.Length + 1];
     result[0] = (byte)AbilityName.Length;
     byte[] str = Encoding.ASCII.GetBytes(AbilityName);
     Array.Copy(str, 0, result, 1, str.Length);
     mstream.Write(result, 0, result.Length);
 }
示例#13
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            BinaryWriter bw = new BinaryWriter(mstream);

            bw.Write(BasePosRadian);
            bw.Write(RotateSpeed);
            bw.Write(CurrentPosRadian);
        }
示例#14
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            BinaryReader rdr = new BinaryReader(mstream);

            rdr.ReadInt32();             // current direction
            LockType  = (DOORS_LOCK)rdr.ReadInt32();
            Direction = (DOORS_DIR)rdr.ReadInt32();
            return(true);
        }
示例#15
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryWriter bw = new NoxBinaryWriter(mstream, CryptApi.NoxCryptFormat.NONE);

            for (int i = 0; i < 4; i++)
            {
                bw.Write(Enchantments[i]);
            }
        }
示例#16
0
 private void OutputFormData()
 {
     Xfer.DirectionId        = (byte)Array.IndexOf(MonsterXfer.NOX_DIRECT_NAMES, (string)directionSelector.SelectedItem);
     Xfer.ActionRoamPathFlag = byte.Parse(wpFlagBox.Text, NumberStyles.HexNumber);
     Xfer.HealthMultiplier   = float.Parse(healthMultiplier.Text, numberFormat);
     Xfer.StatusFlags        = statusFlagsList.GetCheckedFlags();
     Xfer.RetreatRatio       = float.Parse(retreatHpC.Text, numberFormat);
     Xfer.ResumeRatio        = float.Parse(resumeHpC.Text, numberFormat);
     Xfer.SightRange         = float.Parse(sightRange.Text, numberFormat);
     Xfer.Aggressiveness     = float.Parse(aggressiveness.Text, numberFormat);
     if (defaultAction.SelectedIndex >= 0)
     {
         Xfer.DefaultAction = defaultAction.SelectedIndex;
     }
     Xfer.KnownSpells.Clear();
     foreach (MonsterXfer.SpellEntry se in customSpellSet.Items)
     {
         Xfer.KnownSpells.Add(se);
     }
     Xfer.ReactionCastingDelayMin  = (ushort)delayReactionMin.Value;
     Xfer.ReactionCastingDelayMax  = (ushort)delayReactionMax.Value;
     Xfer.BuffCastingDelayMin      = (ushort)delayBuffMin.Value;
     Xfer.BuffCastingDelayMax      = (ushort)delayBuffMax.Value;
     Xfer.OffensiveCastingDelayMin = (ushort)delayOffensiveMin.Value;
     Xfer.OffensiveCastingDelayMax = (ushort)delayOffensiveMax.Value;
     Xfer.DebuffCastingDelayMin    = (ushort)delayOffensive2Min.Value;
     Xfer.DebuffCastingDelayMax    = (ushort)delayOffensive2Max.Value;
     Xfer.BlinkCastingDelayMin     = (ushort)delayEscapeMin.Value;
     Xfer.BlinkCastingDelayMax     = (ushort)delayEscapeMax.Value;
     Xfer.LockPathDistance         = float.Parse(pathLockDist.Text, numberFormat);
     Xfer.SpellPowerLevel          = (int)spellPower.Value;
     Xfer.AimSkillLevel            = float.Parse(aimAccuracy.Text, numberFormat);
     Xfer.Immortal = immortal.Checked;
     Xfer.Health   = short.Parse(health.Text);
     Xfer.SetDefaultResumeRatio   = defaultResumeR.Checked;
     Xfer.SetDefaultRetreatRatio  = defaultRetreatR.Checked;
     Xfer.SetDefaultMonsterStatus = defaultSF.Checked;
     Xfer.LearnDefaultSpells      = learnDefaultSpells.Checked;
     Xfer.PoisonLevel             = (byte)poisonPower.Value;
     if (Xfer.MaidenBodyColors != null)
     {
         for (int i = 0; i < 6; i++)
         {
             Xfer.MaidenBodyColors[i] = maidenColorSelectors[i].BackColor;
         }
     }
     ThingDb.Thing tt = ThingDb.Things[obj.Name];
     if (tt.Subclass[(int)ThingDb.Thing.SubclassBitIndex.FEMALE_NPC])
     {
         Xfer.MaidenVoiceSet = npcSoundSet.Text;
     }
     if (tt.Subclass[(int)ThingDb.Thing.SubclassBitIndex.WOUNDED_NPC])
     {
         Xfer.WoundedNPCVoiceSet = npcSoundSet.Text;
     }
 }
示例#17
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            Text = "";
            BinaryReader br  = new BinaryReader(mstream);
            int          len = br.ReadInt32();

            Text = Encoding.UTF8.GetString(br.ReadBytes(len));
            Text = Text.TrimEnd('\0');
            return(true);
        }
示例#18
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryWriter bw = new NoxBinaryWriter(mstream, CryptApi.NoxCryptFormat.NONE);

            bw.Write(MapName.Length + 1);
            bw.Write(Encoding.ASCII.GetBytes(MapName));
            bw.Write((byte)0);              // null terminator
            bw.Write(ExitX);
            bw.Write(ExitY);
        }
示例#19
0
        private void nameBox_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            objPs = ((ThingDb.Thing)ThingDb.Things[nameBox.Text]);

            if (nameBox.Text != obj.Name)
            {
                obj.Name = nameBox.Text;
                obj.NewDefaultExtraData();
            }
            xtraBox.Checked = (obj.Terminator > 0);
        }
示例#20
0
        public override void SetObject(Map.Object obj)
        {
            this.obj = obj;
            ThingDb.Thing tt = ThingDb.Things[obj.Name];
            // читаем Xfer
            xfer = obj.GetExtraData <ElevatorXfer>();
            List <Map.Object> objects = new List <Map.Object>();

            // убираем этот элеватор из списков
            listElevators.Remove(obj);
            listElevShafts.Remove(obj);
            // для шахт выводим список подьемников
            if (tt.HasClassFlag(ThingDb.Thing.ClassFlags.ELEVATOR_SHAFT))
            {
                objects = listElevators;
                isShaft = true;
            }
            // для подьемников список шахт
            else if (tt.HasClassFlag(ThingDb.Thing.ClassFlags.ELEVATOR))
            {
                objects = listElevShafts;
                isShaft = false;
            }

            elevatorList.Items.Clear();
            string name;

            foreach (Map.Object e in objects)
            {
                name = e.ToString();
                if (e.Scr_Name.Length > 0)
                {
                    name = '"' + e.ScrNameShort + '"';
                }

                elevatorList.Items.Add(name);
            }
            // показываем куда подключен
            if (xfer.ExtentLink > 0)
            {
                checkIsLinked.Checked = true;
                int index = 0;
                foreach (Map.Object o in objects)
                {
                    if (o.Extent == xfer.ExtentLink)
                    {
                        elevatorList.SelectedIndex = index;
                        break;
                    }

                    index++;
                }
            }
        }
示例#21
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);

            // 4 enchantments
            for (int i = 0; i < 4; i++)
            {
                Enchantments[i] = br.ReadString();
            }
            return(true);
        }
示例#22
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);

            if (ParsingRule < 41)
            {
                return(false);                              // unlikely
            }
            SpellName = br.ReadString();
            return(true);
        }
示例#23
0
 public void DefaultsFor(ThingDb.Thing thing)
 {
     // Durability
     //Durability = (short) thing.Health;
     // Handle magic staves
     if (thing.HasClassFlag(ThingDb.Thing.ClassFlags.WAND) && !thing.Subclass[(int)ThingDb.Thing.SubclassBitIndex.STAFF])
     {
         WandChargesCurrent = thing.WandCharges;
         WandChargesLimit   = thing.WandCharges;
     }
 }
示例#24
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            BinaryReader rdr = new BinaryReader(mstream);

            if (ParsingRule >= 0x3D)
            {
                ManaPool = rdr.ReadInt32();
                Unused   = rdr.ReadByte();
            }
            return(true);
        }
示例#25
0
        public override void SetObject(Map.Object obj)
        {
            this.obj = obj;
            ThingDb.Thing tt = ThingDb.Things[obj.Name];
            WeaponXfer    weapon; ArmorXfer armor; AmmoXfer ammo; TeamXfer team;

            switch (tt.Xfer)
            {
            case "WeaponXfer":
                weapon             = obj.GetExtraData <WeaponXfer>();
                enchantment1.Text  = weapon.Enchantments[0];
                enchantment2.Text  = weapon.Enchantments[1];
                enchantment3.Text  = weapon.Enchantments[2];
                enchantment4.Text  = weapon.Enchantments[3];
                durability.Enabled = true; durability.Value = weapon.Durability;
                if (tt.HasClassFlag(ThingDb.Thing.ClassFlags.WAND) && !tt.Subclass[(int)ThingDb.Thing.SubclassBitIndex.STAFF])
                {
                    ammoMin.Enabled = true; ammoMax.Enabled = true;
                    ammoMin.Value   = weapon.WandChargesCurrent;
                    ammoMax.Value   = weapon.WandChargesLimit;
                }
                break;

            case "ArmorXfer":
                armor              = obj.GetExtraData <ArmorXfer>();
                enchantment1.Text  = armor.Enchantments[0];
                enchantment2.Text  = armor.Enchantments[1];
                enchantment3.Text  = armor.Enchantments[2];
                enchantment4.Text  = armor.Enchantments[3];
                durability.Enabled = true; durability.Value = armor.Durability;
                break;

            case "AmmoXfer":
                ammo = obj.GetExtraData <AmmoXfer>();
                enchantment1.Text = ammo.Enchantments[0];
                enchantment2.Text = ammo.Enchantments[1];
                enchantment3.Text = ammo.Enchantments[2];
                enchantment4.Text = ammo.Enchantments[3];
                ammoMin.Enabled   = true; ammoMax.Enabled = true;
                ammoMin.Value     = ammo.AmmoCurrent; ammoMax.Value = ammo.AmmoLimit;
                break;

            case "TeamXfer":
                team = obj.GetExtraData <TeamXfer>();
                enchantment1.Text = team.Enchantments[0];
                enchantment2.Text = team.Enchantments[1];
                enchantment3.Text = team.Enchantments[2];
                enchantment4.Text = team.Enchantments[3];
                break;
            }
            pausePreview = false;
        }
示例#26
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryWriter bw = new NoxBinaryWriter(mstream, CryptApi.NoxCryptFormat.NONE);

            bw.Write(Angle);
            bw.Write(TargX);
            bw.Write(TargY);
            bw.Write((byte)Spells.Count);
            foreach (string s in Spells)
            {
                bw.Write(s);
            }
        }
示例#27
0
        public override void WriteToStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            BinaryWriter bw = new BinaryWriter(mstream);

            bw.Write(MovingSpeed);
            bw.Write(WaypointID);
            bw.Write(MovedObjExtent);
            bw.Write(MoveType);
            bw.Write(WaypointStartID);
            bw.Write(WaypointEndID);
            bw.Write(MoverAcceleration);
            bw.Write(MoverSpeed);
        }
示例#28
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);

            Unknown2       = br.ReadBytes(6);
            LightRadius    = br.ReadInt32();
            NumOfColors    = br.ReadInt32(); //
            LightIntensity = br.ReadByte();; //gradient amount 32 00
            UnknownVal     = br.ReadBytes(21);
            // Unknown5 = br.ReadInt32(); //
            // Unknown6 = br.ReadInt16(); //
            ChangeIntensity = br.ReadInt16(); // Color change speed 15
            Color1          = br.ReadColor();
            Color2          = br.ReadColor();

            /*
             * R1 = br.ReadByte();
             * G1 = br.ReadByte(); // Flags2?
             * B1 = br.ReadByte(); // Some flag
             * R2 = br.ReadByte();
             * G2 = br.ReadByte(); // Flags2?
             * B2 = br.ReadByte(); // Some flag
             */


            Unknown3   = br.ReadBytes(74);
            PulseSpeed = br.ReadByte();
            Unknown4   = br.ReadBytes(18);

            /*
             * //ChangeColors = new Color[16];18
             * //for (int i = 0; i < 16; i++) ChangeColors[i] = br.ReadColor();
             * //  Unknown3 = new byte[16];
             * //for (int i = 0; i < 16; i++) ChangeIntensity[i] = br.ReadByte();
             * ChangeRadius = new byte[16];
             * for (int i = 0; i < 16; i++) ChangeRadius[i] = br.ReadByte();
             * ColorChangeIndex = br.ReadInt16();
             * IntensityChangeIndex = br.ReadInt16();
             * RadiusChangeIndex = br.ReadInt16();
             * ObjExtentID = br.ReadInt32();
             * Unknown13 = br.ReadInt16(); // some flags
             * Unknown14 = br.ReadInt16();
             * Unknown15 = br.ReadByte();
             * // Probably type of light (0 = emitter, 1 = absorber?)
             * if (ParsingRule >= 42)
             *  IsAntiLight = br.ReadInt32();
             * else
             *  IsAntiLight = br.ReadByte();
             */
            return(true);
        }
示例#29
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            BinaryReader br = new BinaryReader(mstream);

            int nameLen = br.ReadInt32();

            MapName = Encoding.ASCII.GetString(br.ReadBytes(nameLen)).TrimEnd('\0');
            if (ParsingRule >= 31)
            {
                ExitX = br.ReadSingle();
                ExitY = br.ReadSingle();
            }
            return(true);
        }
示例#30
0
        public override void WriteToStream(Stream baseStream, short ParsingRule, ThingDb.Thing thing)
        {
            BinaryWriter bw = new BinaryWriter(baseStream);

            bw.Write(ExtentLink);
            if (thing.HasClassFlag(ThingDb.Thing.ClassFlags.ELEVATOR))
            {
                bw.Write(Height);
                if (ParsingRule >= 0x3D)
                {
                    bw.Write(Status);
                }
            }
        }