| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- using Server.MirEnvir;
- using S = ServerPackets;
- namespace Server.MirDatabase
- {
- public class MagicInfo
- {
- protected static Envir Envir
- {
- get { return Envir.Main; }
- }
- public string Name;
- public Spell Spell;
- public byte BaseCost, LevelCost, Icon;
- public byte Level1, Level2, Level3;
- public ushort Need1, Need2, Need3;
- public uint DelayBase = 1800, DelayReduction;
- public ushort PowerBase, PowerBonus;
- public ushort MPowerBase, MPowerBonus;
- public float MultiplierBase = 1.0f, MultiplierBonus;
- public byte Range = 9;
- public override string ToString()
- {
- return Name;
- }
- public MagicInfo()
- {
- }
- public MagicInfo (BinaryReader reader, int version = int.MaxValue, int Customversion = int.MaxValue)
- {
- Name = reader.ReadString();
- Spell = (Spell)reader.ReadByte();
- BaseCost = reader.ReadByte();
- LevelCost = reader.ReadByte();
- Icon = reader.ReadByte();
- Level1 = reader.ReadByte();
- Level2 = reader.ReadByte();
- Level3 = reader.ReadByte();
- Need1 = reader.ReadUInt16();
- Need2 = reader.ReadUInt16();
- Need3 = reader.ReadUInt16();
- DelayBase = reader.ReadUInt32();
- DelayReduction = reader.ReadUInt32();
- PowerBase = reader.ReadUInt16();
- PowerBonus = reader.ReadUInt16();
- MPowerBase = reader.ReadUInt16();
- MPowerBonus = reader.ReadUInt16();
- if (version > 66)
- Range = reader.ReadByte();
- if (version > 70)
- {
- MultiplierBase = reader.ReadSingle();
- MultiplierBonus = reader.ReadSingle();
- }
- }
- public void Save(BinaryWriter writer)
- {
- writer.Write(Name);
- writer.Write((byte)Spell);
- writer.Write(BaseCost);
- writer.Write(LevelCost);
- writer.Write(Icon);
- writer.Write(Level1);
- writer.Write(Level2);
- writer.Write(Level3);
- writer.Write(Need1);
- writer.Write(Need2);
- writer.Write(Need3);
- writer.Write(DelayBase);
- writer.Write(DelayReduction);
- writer.Write(PowerBase);
- writer.Write(PowerBonus);
- writer.Write(MPowerBase);
- writer.Write(MPowerBonus);
- writer.Write(Range);
- writer.Write(MultiplierBase);
- writer.Write(MultiplierBonus);
- }
- }
- public class UserMagic
- {
- protected static Envir Envir
- {
- get { return Envir.Main; }
- }
- public Spell Spell;
- public MagicInfo Info;
- public byte Level, Key;
- public ushort Experience;
- public bool IsTempSpell;
- public long CastTime;
- private MagicInfo GetMagicInfo(Spell spell)
- {
- for (int i = 0; i < Envir.MagicInfoList.Count; i++)
- {
- MagicInfo info = Envir.MagicInfoList[i];
- if (info.Spell != spell) continue;
- return info;
- }
- return null;
- }
- public UserMagic(Spell spell)
- {
- Spell = spell;
-
- Info = GetMagicInfo(Spell);
- }
- public UserMagic(BinaryReader reader, int version, int customVersion)
- {
- Spell = (Spell) reader.ReadByte();
- Info = GetMagicInfo(Spell);
- Level = reader.ReadByte();
- Key = reader.ReadByte();
- Experience = reader.ReadUInt16();
- if (version < 15) return;
- IsTempSpell = reader.ReadBoolean();
- if (version < 65) return;
- CastTime = reader.ReadInt64();
- }
- public void Save(BinaryWriter writer)
- {
- writer.Write((byte) Spell);
- writer.Write(Level);
- writer.Write(Key);
- writer.Write(Experience);
- writer.Write(IsTempSpell);
- writer.Write(CastTime);
- }
- public Packet GetInfo(bool hero)
- {
- return new S.NewMagic
- {
- Magic = CreateClientMagic(),
- Hero = hero
- };
- }
- public ClientMagic CreateClientMagic()
- {
- return new ClientMagic
- {
- Name = Info.Name,
- Spell = Spell,
- BaseCost = Info.BaseCost,
- LevelCost = Info.LevelCost,
- Icon = Info.Icon,
- Level1 = Info.Level1,
- Level2 = Info.Level2,
- Level3 = Info.Level3,
- Need1 = Info.Need1,
- Need2 = Info.Need2,
- Need3 = Info.Need3,
- Level = Level,
- Key = Key,
- Experience = Experience,
- IsTempSpell = IsTempSpell,
- Delay = GetDelay(),
- Range = Info.Range,
- CastTime = CastTime - Envir.Time
- };
- }
- public int GetDamage(int DamageBase)
- {
- return (int)((DamageBase + GetPower()) * GetMultiplier());
- }
- public float GetMultiplier()
- {
- return (Info.MultiplierBase + (Level * Info.MultiplierBonus));
- }
- public int GetPower()
- {
- return (int)Math.Round((MPower() / 4F) * (Level + 1) + DefPower());
- }
- public int MPower()
- {
- if (Info.MPowerBonus > 0)
- {
- return Envir.Random.Next(Info.MPowerBase, Info.MPowerBonus + Info.MPowerBase);
- }
- else
- return Info.MPowerBase;
- }
- public int DefPower()
- {
- if (Info.PowerBonus > 0)
- {
- return Envir.Random.Next(Info.PowerBase, Info.PowerBonus + Info.PowerBase);
- }
- else
- return Info.PowerBase;
- }
- public int GetPower(int power)
- {
- return (int)Math.Round(power / 4F * (Level + 1) + DefPower());
- }
- public long GetDelay()
- {
- return Info.DelayBase - (Level * Info.DelayReduction);
- }
- }
- }
|