[1114] | 1 | using System;
|
---|
| 2 | using System.Xml;
|
---|
| 3 | using Oni.Metadata;
|
---|
| 4 |
|
---|
| 5 | namespace Oni.Objects
|
---|
| 6 | {
|
---|
| 7 | internal class Character : ObjectBase
|
---|
| 8 | {
|
---|
| 9 | public CharacterFlags Flags;
|
---|
| 10 |
|
---|
| 11 | public string ClassName;
|
---|
| 12 | public string Name;
|
---|
| 13 | public string WeaponClassName;
|
---|
| 14 |
|
---|
| 15 | public string OnSpawn;
|
---|
| 16 | public string OnDeath;
|
---|
| 17 | public string OnSeenEnemy;
|
---|
| 18 | public string OnAlarmed;
|
---|
| 19 | public string OnHurt;
|
---|
| 20 | public string OnDefeated;
|
---|
| 21 | public string OnOutOfAmmo;
|
---|
| 22 | public string OnNoPath;
|
---|
| 23 |
|
---|
| 24 | public int AdditionalHealth;
|
---|
| 25 | public CharacterJobType Job;
|
---|
| 26 | public int PatrolPathId;
|
---|
| 27 | public int CombatId;
|
---|
| 28 | public int MeleeId;
|
---|
| 29 | public int NeutralId;
|
---|
| 30 |
|
---|
| 31 | public int MaxAmmoUsed;
|
---|
| 32 | public int MaxAmmoDropped;
|
---|
| 33 | public int MaxCellsUsed;
|
---|
| 34 | public int MaxCellsDropped;
|
---|
| 35 | public int MaxHyposUsed;
|
---|
| 36 | public int MaxHyposDropped;
|
---|
| 37 | public int MaxShieldsUsed;
|
---|
| 38 | public int MaxShieldsDropped;
|
---|
| 39 | public int MaxCloakUsed;
|
---|
| 40 | public int MaxCloakDropped;
|
---|
| 41 |
|
---|
| 42 | public CharacterTeam Team;
|
---|
| 43 | public int AmmoPercent;
|
---|
| 44 | public CharacterAlertStatus InitialAlertLevel;
|
---|
| 45 | public CharacterAlertStatus MinimalAlertLevel;
|
---|
| 46 | public CharacterAlertStatus JobStartingAlertLevel;
|
---|
| 47 | public CharacterAlertStatus InvestigatingAlertLevel;
|
---|
| 48 | public int AlarmGroups;
|
---|
| 49 |
|
---|
| 50 | public CharacterPursuitMode PursuitStrongUnseen;
|
---|
| 51 | public CharacterPursuitMode PursuitWeakUnseen;
|
---|
| 52 | public CharacterPursuitMode PursuitStrongSeen;
|
---|
| 53 | public CharacterPursuitMode PursuitWeakSeen;
|
---|
| 54 | public CharacterPursuitLostBehavior PursuitLost;
|
---|
| 55 |
|
---|
| 56 | public Character()
|
---|
| 57 | {
|
---|
| 58 | TypeId = ObjectType.Character;
|
---|
| 59 | }
|
---|
| 60 |
|
---|
| 61 | protected override void WriteOsd(BinaryWriter writer)
|
---|
| 62 | {
|
---|
| 63 | writer.Write((int)Flags);
|
---|
| 64 |
|
---|
| 65 | writer.Write(ClassName, 64);
|
---|
| 66 | writer.Write(Name, 32);
|
---|
| 67 | writer.Write(WeaponClassName, 64);
|
---|
| 68 |
|
---|
| 69 | writer.Write(OnSpawn, 32);
|
---|
| 70 | writer.Write(OnDeath, 32);
|
---|
| 71 | writer.Write(OnSeenEnemy, 32);
|
---|
| 72 | writer.Write(OnAlarmed, 32);
|
---|
| 73 | writer.Write(OnHurt, 32);
|
---|
| 74 | writer.Write(OnDefeated, 32);
|
---|
| 75 | writer.Write(OnOutOfAmmo, 32);
|
---|
| 76 | writer.Write(OnNoPath, 32);
|
---|
| 77 |
|
---|
| 78 | writer.Write(AdditionalHealth);
|
---|
| 79 | writer.Write((int)Job);
|
---|
| 80 |
|
---|
| 81 | writer.WriteInt16(PatrolPathId);
|
---|
| 82 | writer.WriteInt16(CombatId);
|
---|
| 83 | writer.WriteInt16(MeleeId);
|
---|
| 84 | writer.WriteInt16(NeutralId);
|
---|
| 85 |
|
---|
| 86 | writer.WriteInt16(MaxAmmoUsed);
|
---|
| 87 | writer.WriteInt16(MaxAmmoDropped);
|
---|
| 88 | writer.WriteInt16(MaxCellsUsed);
|
---|
| 89 | writer.WriteInt16(MaxCellsDropped);
|
---|
| 90 | writer.WriteInt16(MaxHyposUsed);
|
---|
| 91 | writer.WriteInt16(MaxHyposDropped);
|
---|
| 92 | writer.WriteInt16(MaxShieldsUsed);
|
---|
| 93 | writer.WriteInt16(MaxShieldsDropped);
|
---|
| 94 | writer.WriteInt16(MaxCloakUsed);
|
---|
| 95 | writer.WriteInt16(MaxCloakDropped);
|
---|
| 96 |
|
---|
| 97 | writer.Skip(4);
|
---|
| 98 |
|
---|
| 99 | writer.Write((int)Team);
|
---|
| 100 | writer.Write(AmmoPercent);
|
---|
| 101 |
|
---|
| 102 | writer.Write((int)InitialAlertLevel);
|
---|
| 103 | writer.Write((int)MinimalAlertLevel);
|
---|
| 104 | writer.Write((int)JobStartingAlertLevel);
|
---|
| 105 | writer.Write((int)InvestigatingAlertLevel);
|
---|
| 106 |
|
---|
| 107 | writer.Write(AlarmGroups);
|
---|
| 108 |
|
---|
| 109 | writer.Write((int)PursuitStrongUnseen);
|
---|
| 110 | writer.Write((int)PursuitWeakUnseen);
|
---|
| 111 | writer.Write((int)PursuitStrongSeen);
|
---|
| 112 | writer.Write((int)PursuitWeakSeen);
|
---|
| 113 | writer.Write((int)PursuitLost);
|
---|
| 114 | }
|
---|
| 115 |
|
---|
| 116 | protected override void ReadOsd(BinaryReader reader)
|
---|
| 117 | {
|
---|
| 118 | Flags = (CharacterFlags)reader.ReadInt32();
|
---|
| 119 |
|
---|
| 120 | ClassName = reader.ReadString(64);
|
---|
| 121 | Name = reader.ReadString(32);
|
---|
| 122 | WeaponClassName = reader.ReadString(64);
|
---|
| 123 |
|
---|
| 124 | OnSpawn = reader.ReadString(32);
|
---|
| 125 | OnDeath = reader.ReadString(32);
|
---|
| 126 | OnSeenEnemy = reader.ReadString(32);
|
---|
| 127 | OnAlarmed = reader.ReadString(32);
|
---|
| 128 | OnHurt = reader.ReadString(32);
|
---|
| 129 | OnDefeated = reader.ReadString(32);
|
---|
| 130 | OnOutOfAmmo = reader.ReadString(32);
|
---|
| 131 | OnNoPath = reader.ReadString(32);
|
---|
| 132 |
|
---|
| 133 | AdditionalHealth = reader.ReadInt32();
|
---|
| 134 | Job = (CharacterJobType)reader.ReadInt32();
|
---|
| 135 |
|
---|
| 136 | PatrolPathId = reader.ReadInt16();
|
---|
| 137 | CombatId = reader.ReadInt16();
|
---|
| 138 | MeleeId = reader.ReadInt16();
|
---|
| 139 | NeutralId = reader.ReadInt16();
|
---|
| 140 |
|
---|
| 141 | MaxAmmoUsed = reader.ReadInt16();
|
---|
| 142 | MaxAmmoDropped = reader.ReadInt16();
|
---|
| 143 | MaxCellsUsed = reader.ReadInt16();
|
---|
| 144 | MaxCellsDropped = reader.ReadInt16();
|
---|
| 145 | MaxHyposUsed = reader.ReadInt16();
|
---|
| 146 | MaxHyposDropped = reader.ReadInt16();
|
---|
| 147 | MaxShieldsUsed = reader.ReadInt16();
|
---|
| 148 | MaxShieldsDropped = reader.ReadInt16();
|
---|
| 149 | MaxCloakUsed = reader.ReadInt16();
|
---|
| 150 | MaxCloakDropped = reader.ReadInt16();
|
---|
| 151 |
|
---|
| 152 | reader.Skip(4);
|
---|
| 153 |
|
---|
| 154 | Team = (CharacterTeam)reader.ReadInt32();
|
---|
| 155 | AmmoPercent = reader.ReadInt32();
|
---|
| 156 |
|
---|
| 157 | InitialAlertLevel = (CharacterAlertStatus)reader.ReadInt32();
|
---|
| 158 | MinimalAlertLevel = (CharacterAlertStatus)reader.ReadInt32();
|
---|
| 159 | JobStartingAlertLevel = (CharacterAlertStatus)reader.ReadInt32();
|
---|
| 160 | InvestigatingAlertLevel = (CharacterAlertStatus)reader.ReadInt32();
|
---|
| 161 |
|
---|
| 162 | AlarmGroups = reader.ReadInt32();
|
---|
| 163 |
|
---|
| 164 | PursuitStrongUnseen = (CharacterPursuitMode)reader.ReadInt32();
|
---|
| 165 | PursuitWeakUnseen = (CharacterPursuitMode)reader.ReadInt32();
|
---|
| 166 | PursuitStrongSeen = (CharacterPursuitMode)reader.ReadInt32();
|
---|
| 167 | PursuitWeakSeen = (CharacterPursuitMode)reader.ReadInt32();
|
---|
| 168 | PursuitLost = (CharacterPursuitLostBehavior)reader.ReadInt32();
|
---|
| 169 | }
|
---|
| 170 |
|
---|
| 171 | protected override void WriteOsd(XmlWriter xml)
|
---|
| 172 | {
|
---|
| 173 | throw new NotImplementedException();
|
---|
| 174 | }
|
---|
| 175 |
|
---|
| 176 | protected override void ReadOsd(XmlReader xml, ObjectLoadContext context)
|
---|
| 177 | {
|
---|
| 178 | Flags = xml.ReadElementContentAsEnum<CharacterFlags>("Flags");
|
---|
| 179 | ClassName = xml.ReadElementContentAsString("Class", "");
|
---|
| 180 | Name = xml.ReadElementContentAsString("Name", "");
|
---|
| 181 | WeaponClassName = xml.ReadElementContentAsString("Weapon", "");
|
---|
| 182 |
|
---|
| 183 | xml.ReadStartElement("Scripts");
|
---|
| 184 | OnSpawn = xml.ReadElementContentAsString("Spawn", "");
|
---|
| 185 | OnDeath = xml.ReadElementContentAsString("Die", "");
|
---|
| 186 | OnSeenEnemy = xml.ReadElementContentAsString("Combat", "");
|
---|
| 187 | OnAlarmed = xml.ReadElementContentAsString("Alarm", "");
|
---|
| 188 | OnHurt = xml.ReadElementContentAsString("Hurt", "");
|
---|
| 189 | OnDefeated = xml.ReadElementContentAsString("Defeated", "");
|
---|
| 190 | OnOutOfAmmo = xml.ReadElementContentAsString("OutOfAmmo", "");
|
---|
| 191 | OnNoPath = xml.ReadElementContentAsString("NoPath", "");
|
---|
| 192 | xml.ReadEndElement();
|
---|
| 193 |
|
---|
| 194 | AdditionalHealth = xml.ReadElementContentAsInt("AdditionalHealth", "");
|
---|
| 195 |
|
---|
| 196 | xml.ReadStartElement("Job");
|
---|
| 197 | Job = xml.ReadElementContentAsEnum<CharacterJobType>("Type");
|
---|
| 198 | PatrolPathId = xml.ReadElementContentAsInt("PatrolPathId", "");
|
---|
| 199 | xml.ReadEndElement();
|
---|
| 200 |
|
---|
| 201 | xml.ReadStartElement("Behaviors");
|
---|
| 202 | CombatId = xml.ReadElementContentAsInt("CombatId", "");
|
---|
| 203 | MeleeId = xml.ReadElementContentAsInt("MeleeId", "");
|
---|
| 204 | NeutralId = xml.ReadElementContentAsInt("NeutralId", "");
|
---|
| 205 | xml.ReadEndElement();
|
---|
| 206 |
|
---|
| 207 | xml.ReadStartElement("Inventory");
|
---|
| 208 | xml.ReadStartElement("Ammo");
|
---|
| 209 | MaxAmmoUsed = xml.ReadElementContentAsInt("Use", "");
|
---|
| 210 | MaxAmmoDropped = xml.ReadElementContentAsInt("Drop", "");
|
---|
| 211 | xml.ReadEndElement();
|
---|
| 212 | xml.ReadStartElement("EnergyCell");
|
---|
| 213 | MaxCellsUsed = xml.ReadElementContentAsInt("Use", "");
|
---|
| 214 | MaxCellsDropped = xml.ReadElementContentAsInt("Drop", "");
|
---|
| 215 | xml.ReadEndElement();
|
---|
| 216 | xml.ReadStartElement("Hypo");
|
---|
| 217 | MaxHyposUsed = xml.ReadElementContentAsInt("Use", "");
|
---|
| 218 | MaxHyposDropped = xml.ReadElementContentAsInt("Drop", "");
|
---|
| 219 | xml.ReadEndElement();
|
---|
| 220 | xml.ReadStartElement("Shield");
|
---|
| 221 | MaxShieldsUsed = xml.ReadElementContentAsInt("Use", "");
|
---|
| 222 | MaxShieldsDropped = xml.ReadElementContentAsInt("Drop", "");
|
---|
| 223 | xml.ReadEndElement();
|
---|
| 224 | xml.ReadStartElement("Invisibility");
|
---|
| 225 | MaxCloakUsed = xml.ReadElementContentAsInt("Use", "");
|
---|
| 226 | MaxCloakDropped = xml.ReadElementContentAsInt("Drop", "");
|
---|
| 227 | xml.ReadEndElement();
|
---|
| 228 | xml.ReadEndElement();
|
---|
| 229 |
|
---|
| 230 | Team = xml.ReadElementContentAsEnum<CharacterTeam>("Team");
|
---|
| 231 | AmmoPercent = xml.ReadElementContentAsInt("AmmoPercentage", "");
|
---|
| 232 |
|
---|
| 233 | xml.ReadStartElement("Alert");
|
---|
| 234 | InitialAlertLevel = xml.ReadElementContentAsEnum<CharacterAlertStatus>("Initial");
|
---|
| 235 | MinimalAlertLevel = xml.ReadElementContentAsEnum<CharacterAlertStatus>("Minimal");
|
---|
| 236 | JobStartingAlertLevel = xml.ReadElementContentAsEnum<CharacterAlertStatus>("JobStart");
|
---|
| 237 | InvestigatingAlertLevel = xml.ReadElementContentAsEnum<CharacterAlertStatus>("Investigate");
|
---|
| 238 | xml.ReadEndElement();
|
---|
| 239 |
|
---|
| 240 | AlarmGroups = xml.ReadElementContentAsInt("AlarmGroups", "");
|
---|
| 241 |
|
---|
| 242 | xml.ReadStartElement("Pursuit");
|
---|
| 243 | PursuitStrongUnseen = xml.ReadElementContentAsEnum<CharacterPursuitMode>("StrongUnseen");
|
---|
| 244 | PursuitWeakUnseen = xml.ReadElementContentAsEnum<CharacterPursuitMode>("WeakUnseen");
|
---|
| 245 | PursuitStrongSeen = xml.ReadElementContentAsEnum<CharacterPursuitMode>("StrongSeen");
|
---|
| 246 | PursuitWeakSeen = xml.ReadElementContentAsEnum<CharacterPursuitMode>("WeakSeen");
|
---|
| 247 | PursuitLost = xml.ReadElementContentAsEnum<CharacterPursuitLostBehavior>("Lost");
|
---|
| 248 | xml.ReadEndElement();
|
---|
| 249 | }
|
---|
| 250 | }
|
---|
| 251 | }
|
---|