/// <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; }
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); } }
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; }