/// <summary>
        /// Assisting method that changes the weapon's capabillities.
        /// </summary>
        /// <remarks>
        /// When changing the weapons information don't forget update the battle status.
        /// If the battlestatus of the actor is not updated there will be synchronisation
        /// issues.
        /// </remarks>
        /// <param name="job">Job of the new change</param>
        /// <param name="suffix">Suffix after the change</param>
        /// <param name="selectedWeapon">Weapon where to apply the change</param>
        /// <returns>True if changing succeeds</returns>
        public bool ChangeWeapon(byte job, ushort suffix, Weapon selectedWeapon)
        {
            switch ((JobType)job)
            {
                case JobType.Enchanter:
                    selectedWeapon._type = (ushort)WeaponType.Swordstick;
                    selectedWeapon._augeskill = 150029;
                    selectedWeapon._weapontype = (byte)WeaponType.Swordstick;
                    break;

                case JobType.Swordsman:
                    selectedWeapon._type = (ushort)WeaponType.LongSword;
                    selectedWeapon._augeskill = 150015;
                    selectedWeapon._weapontype = (byte)WeaponType.LongSword;
                    break;

                case JobType.Thief:
                    selectedWeapon._type = (ushort)WeaponType.ShortSword;
                    selectedWeapon._augeskill = 150001;
                    selectedWeapon._weapontype = (byte)WeaponType.ShortSword;
                    break;

                case JobType.Recruit:
                    selectedWeapon._type = (ushort)WeaponType.Damptflinte;
                    selectedWeapon._augeskill = 150043;
                    selectedWeapon._weapontype = (byte)WeaponType.Damptflinte;
                    break;

                case JobType.Clown:
                    selectedWeapon._type = (ushort)WeaponType.ShortSword;
                    selectedWeapon._augeskill = 150001;
                    selectedWeapon._weapontype = (byte)WeaponType.ShortSword;
                    break;

                case JobType.Novice:
                    selectedWeapon._type = (ushort)WeaponType.ShortSword;
                    selectedWeapon._augeskill = 150001;
                    selectedWeapon._weapontype = (byte)WeaponType.ShortSword;
                    break;
            }

            //Restructure weapon
            selectedWeapon._durabillity = (selectedWeapon._durabillity > selectedWeapon.Info.max_durabillity) ? (ushort)selectedWeapon.Info.max_durabillity : selectedWeapon._durabillity;
            selectedWeapon.Slots = new uint[selectedWeapon.Slots.Length];
            selectedWeapon._suffix = suffix;
            Singleton.Weapons.TryGetWeaponInfo(selectedWeapon._type, selectedWeapon._weaponlevel, out selectedWeapon.Info);
            return true;
        }
Exemple #2
0
 public static void Serialize(Weapon weapon, byte[] buffer, int offset)
 {
     try
     {
         Encoding.Unicode.GetBytes(weapon._weaponname, 0, Math.Min(11, weapon._weaponname.Length), buffer, offset);
         //----------
         buffer[offset + 24] = weapon._weaponlevel;
         Array.Copy(BitConverter.GetBytes(weapon._experience), 0, buffer, offset + 25, 4);
         buffer[offset + 29] = weapon._weapontype;
         //-----------
         Array.Copy(BitConverter.GetBytes(weapon._durabillity), 0, buffer, offset + 30, 2);
         Array.Copy(BitConverter.GetBytes(weapon._suffix), 0, buffer, offset + 32, 2);
         //-----------
         Array.Copy(BitConverter.GetBytes(weapon._augeskill), 0, buffer, offset + 34, 4);
         Array.Copy(BitConverter.GetBytes(weapon._fusion), 0, buffer, offset + 38, 4);
         //------------
         Array.Copy(BitConverter.GetBytes(weapon.Slots[0]), 0, buffer, offset + 42, 4);
         Array.Copy(BitConverter.GetBytes(weapon.Slots[1]), 0, buffer, offset + 46, 4);
         Array.Copy(BitConverter.GetBytes(weapon.Slots[2]), 0, buffer, offset + 50, 4);
         Array.Copy(BitConverter.GetBytes(weapon.Slots[3]), 0, buffer, offset + 54, 4);
         //------------
         Array.Copy(BitConverter.GetBytes(weapon.Slots[4]), 0, buffer, offset + 58, 4);
         Array.Copy(BitConverter.GetBytes(weapon.Slots[5]), 0, buffer, offset + 62, 4);
         Array.Copy(BitConverter.GetBytes(weapon.Slots[6]), 0, buffer, offset + 66, 4);
         Array.Copy(BitConverter.GetBytes(weapon.Slots[7]), 0, buffer, offset + 70, 4);
         buffer[offset + 74] = weapon._active;
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }
Exemple #3
0
        public static Weapon Deserialize(byte[] buffer, int offset)
        {
            Weapon weapon = new Weapon();
            weapon._weaponname = UnicodeEncoding.Unicode.GetString(buffer, offset, 24);
            //-----------
            weapon._weaponlevel = buffer[offset + 24];
            weapon._experience = BitConverter.ToUInt32(buffer, offset + 25);
            weapon._weapontype = buffer[offset + 29];
            //-----------
            weapon._durabillity = BitConverter.ToUInt16(buffer, offset + 30);
            weapon._suffix = BitConverter.ToUInt16(buffer, offset + 32);
            //-----------
            weapon._augeskill = BitConverter.ToUInt32(buffer, offset + 34);
            weapon._fusion = BitConverter.ToUInt32(buffer, offset + 38);
            //-----------
            weapon.Slots[0] = BitConverter.ToUInt32(buffer, offset + 42);
            weapon.Slots[1] = BitConverter.ToUInt32(buffer, offset + 46);
            weapon.Slots[2] = BitConverter.ToUInt32(buffer, offset + 50);
            weapon.Slots[3] = BitConverter.ToUInt32(buffer, offset + 54);
            //-----------
            weapon.Slots[4] = BitConverter.ToUInt32(buffer, offset + 58);
            weapon.Slots[5] = BitConverter.ToUInt32(buffer, offset + 62);
            weapon.Slots[6] = BitConverter.ToUInt32(buffer, offset + 66);
            weapon.Slots[7] = BitConverter.ToUInt32(buffer, offset + 70);
            weapon._active = buffer[offset + 74];

            if (Singleton.Weapons.TryGetWeaponInfo(weapon._weapontype, weapon._weaponlevel, out weapon.Info))
                return weapon;
            else
                return null;
        }
 public void AddWeapon(Weapon weapon)
 {
     if (weapon != null && i <= 300)
         Weapon.Serialize(weapon, this.data, i);
     i += 75;
 }