diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 6677faa1..faa92875 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -10,6 +10,7 @@ using FFXIVClassic_Map_Server.packets.send.player; using FFXIVClassic_Map_Server.dataobjects; using FFXIVClassic_Map_Server.Actors; using FFXIVClassic_Map_Server.actors.chara.player; +using FFXIVClassic_Map_Server.actors.chara.ai; namespace FFXIVClassic_Map_Server { @@ -877,7 +878,11 @@ namespace FFXIVClassic_Map_Server query = @" SELECT statusId, - expireTime + duration, + magnitude, + tick, + tier, + extra FROM characters_statuseffect WHERE characterId = @charId"; cmd = new MySqlCommand(query, conn); @@ -887,8 +892,28 @@ namespace FFXIVClassic_Map_Server int count = 0; while (reader.Read()) { + var id = reader.GetUInt32(0); + var duration = reader.GetUInt32(1); + var magnitude = reader.GetUInt64(2); + var tick = reader.GetUInt32(3); + var tier = reader.GetByte(4); + var extra = reader.GetUInt64(5); + player.charaWork.status[count] = reader.GetUInt16(0); player.charaWork.statusShownTime[count] = reader.GetUInt32(1); + + var effect = Server.GetWorldManager().GetStatusEffect(id); + if (effect != null) + { + effect.SetDurationMs(duration); + effect.SetMagnitude(magnitude); + effect.SetTickMs(tick); + effect.SetTier(tier); + effect.SetExtra(extra); + + // dont wanna send ton of messages on login (i assume retail doesnt) + player.statusEffects.AddStatusEffect(effect, true); + } } } @@ -1734,6 +1759,46 @@ namespace FFXIVClassic_Map_Server } } } + + public static Dictionary LoadGlobalStatusEffectList() + { + var effects = new Dictionary(); + + using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) + { + try + { + conn.Open(); + + var query = @"SELECT id, name, flags, overwrite FROM status_effects;"; + + MySqlCommand cmd = new MySqlCommand(query, conn); + + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + var id = reader.GetUInt32(0); + var name = reader.GetString(1); + var flags = reader.GetUInt32(2); + var overwrite = reader.GetUInt32(3); + + var effect = new StatusEffect(id, name, flags, overwrite); + effects.Add(id, effect); + } + } + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + } + } + return effects; + } } } diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index d63428e0..0ebd9e8b 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -95,7 +95,8 @@ - + + diff --git a/FFXIVClassic Map Server/Server.cs b/FFXIVClassic Map Server/Server.cs index f0f988aa..9cd1550d 100644 --- a/FFXIVClassic Map Server/Server.cs +++ b/FFXIVClassic Map Server/Server.cs @@ -54,6 +54,7 @@ namespace FFXIVClassic_Map_Server mWorldManager.LoadActorClasses(); mWorldManager.LoadSpawnLocations(); mWorldManager.SpawnAllActors(); + mWorldManager.LoadStatusEffects(); mWorldManager.StartZoneThread(); IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(ConfigConstants.OPTIONS_BINDIP), int.Parse(ConfigConstants.OPTIONS_PORT)); diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index 76168d01..9bcabd6e 100644 --- a/FFXIVClassic Map Server/WorldManager.cs +++ b/FFXIVClassic Map Server/WorldManager.cs @@ -1123,6 +1123,17 @@ namespace FFXIVClassic_Map_Server return null; } + public void LoadStatusEffects() + { + effectList = Database.LoadGlobalStatusEffectList(); + } + + public StatusEffect GetStatusEffect(uint id) + { + StatusEffect effect; + + return effectList.TryGetValue(id, out effect) ? new StatusEffect(null, effect) : null; + } } } diff --git a/FFXIVClassic Map Server/actors/chara/Character.cs b/FFXIVClassic Map Server/actors/chara/Character.cs index 761d39c7..742bb153 100644 --- a/FFXIVClassic Map Server/actors/chara/Character.cs +++ b/FFXIVClassic Map Server/actors/chara/Character.cs @@ -7,6 +7,7 @@ using FFXIVClassic_Map_Server.packets.send.actor; using FFXIVClassic_Map_Server.utils; using FFXIVClassic_Map_Server.actors.chara.ai; using System; +using System.Collections.Generic; namespace FFXIVClassic_Map_Server.Actors { @@ -73,7 +74,7 @@ namespace FFXIVClassic_Map_Server.Actors public DateTime lastAiUpdate; public AIContainer aiContainer; - public StatusEffects statusEffects; + public StatusEffectContainer statusEffects; public CharacterTargetingAllegiance allegiance; @@ -83,7 +84,7 @@ namespace FFXIVClassic_Map_Server.Actors for (int i = 0; i < charaWork.statusShownTime.Length; i++) charaWork.statusShownTime[i] = 0xFFFFFFFF; - this.statusEffects = new StatusEffects(this); + this.statusEffects = new StatusEffectContainer(this); } public SubPacket CreateAppearancePacket() diff --git a/FFXIVClassic Map Server/actors/chara/ai/StatusEffects.cs b/FFXIVClassic Map Server/actors/chara/ai/StatusEffect.cs similarity index 79% rename from FFXIVClassic Map Server/actors/chara/ai/StatusEffects.cs rename to FFXIVClassic Map Server/actors/chara/ai/StatusEffect.cs index 33311cf8..47fffda9 100644 --- a/FFXIVClassic Map Server/actors/chara/ai/StatusEffects.cs +++ b/FFXIVClassic Map Server/actors/chara/ai/StatusEffect.cs @@ -1,11 +1,10 @@ -using System; +using FFXIVClassic_Map_Server.Actors; +using FFXIVClassic_Map_Server.lua; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using FFXIVClassic_Map_Server.Actors; -using FFXIVClassic_Map_Server.lua; -using FFXIVClassic_Map_Server.actors.area; namespace FFXIVClassic_Map_Server.actors.chara.ai { @@ -359,13 +358,13 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai private DateTime lastTick; // when did this effect last tick private uint durationMs; // how long should this effect last in ms private uint tickMs; // how often should this effect proc - private int magnitude; // a value specified by scripter which is guaranteed to be used by all effects + private UInt64 magnitude; // a value specified by scripter which is guaranteed to be used by all effects private byte tier; // same effect with higher tier overwrites this - private Dictionary variables; // list of variables which belong to this effect, to be set/retrieved with GetVariable(key), SetVariable(key, val) + private UInt64 extra; // optional value private StatusEffectFlags flags; // death/erase/dispel etc private StatusEffectOverwrite overwrite; // how to handle adding an effect with same id (see StatusEfectOverwrite) - public StatusEffect(Character owner, uint id, int magnitude, uint tickMs, uint durationMs, byte tier = 0) + public StatusEffect(Character owner, uint id, UInt64 magnitude, uint tickMs, uint durationMs, byte tier = 0) { this.owner = owner; this.id = (StatusEffectId)id; @@ -373,7 +372,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai this.tickMs = tickMs; this.durationMs = durationMs; this.tier = tier; - + // todo: use tick instead of now? this.startTime = DateTime.Now; this.lastTick = startTime; @@ -399,7 +398,15 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai this.name = effect.name; this.flags = effect.flags; this.overwrite = effect.overwrite; - this.variables = effect.variables; + this.extra = effect.extra; + } + + public StatusEffect(uint id, string name, uint flags, uint overwrite) + { + this.id = (StatusEffectId)id; + this.name = name; + this.flags = (StatusEffectFlags)flags; + this.overwrite = (StatusEffectOverwrite)overwrite; } // return true when duration has elapsed @@ -411,6 +418,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai // todo: call effect's onTick // todo: maybe keep a global lua object instead of creating a new one each time we wanna call a script lastTick = tick; + LuaEngine.CallLuaStatusEffectFunction(this.owner, this, "onTick", this.owner, this); } // todo: handle infinite duration effects? if (durationMs != 0 && startTime.Millisecond + durationMs >= tick.Millisecond) @@ -447,7 +455,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai return tickMs; } - public int GetMagnitude() + public UInt64 GetMagnitude() { return magnitude; } @@ -457,9 +465,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai return tier; } - public UInt64 GetVariable(string key) + public UInt64 GetExtra() { - return variables?[key] ?? 0; + return extra; } public uint GetFlags() @@ -482,6 +490,11 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai this.name = name; } + public void SetMagnitude(UInt64 magnitude) + { + this.magnitude = magnitude; + } + public void SetDurationMs(uint durationMs) { this.durationMs = durationMs; @@ -497,17 +510,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai this.tier = tier; } - public void SetVariable(string key, UInt64 val) + public void SetExtra(UInt64 val) { - if (variables != null) - { - variables[key] = val; - } - else - { - variables = new Dictionary(); - variables[key] = val; - } + this.extra = val; } public void SetFlags(uint flags) @@ -520,96 +525,4 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai this.overwrite = (StatusEffectOverwrite)overwrite; } } - - class StatusEffects - { - private Character owner; - private List effects; - - public StatusEffects(Character owner) - { - this.owner = owner; - this.effects = new List(); - } - - public void Update(DateTime tick) - { - // list of effects to remove - var removeEffects = new List(); - foreach (var effect in effects) - { - // effect's update function returns true if effect has completed - if (effect.Update(tick)) - removeEffects.Add(effect); - } - - // remove effects from this list - foreach (var effect in removeEffects) - effects.Remove(effect); - } - - public bool AddStatusEffect(StatusEffect effect) - { - // todo: check flags/overwritable and add effect to list - effects.Add(effect); - return true; - } - - public StatusEffect CopyEffect(StatusEffect effect) - { - var newEffect = new StatusEffect(this.owner, effect); - newEffect.SetOwner(this.owner); - - return AddStatusEffect(newEffect) ? newEffect : null; - } - - public bool RemoveStatusEffectsByFlags(uint flags) - { - // build list of effects to remove - var removeEffects = new List(); - foreach (var effect in effects) - if ((effect.GetFlags() & flags) > 0) - removeEffects.Add(effect); - - // remove effects from main list - foreach (var effect in removeEffects) - effects.Remove(effect); - - // removed an effect with one of these flags - return removeEffects.Count > 0; - } - - public StatusEffect GetStatusEffectById(uint id, uint tier = 0xFF) - { - foreach (var effect in effects) - { - if (effect.GetEffectId() == id && (tier != 0xFF ? effect.GetTier() == tier : true)) - return effect; - } - return null; - } - - public List GetStatusEffectsByFlag(uint flag) - { - var list = new List(); - foreach (var effect in effects) - { - if ((effect.GetFlags() & flag) > 0) - { - list.Add(effect); - } - } - return list; - } - - public bool HasStatusEffectsByFlag(uint flag) - { - foreach (var effect in effects) - { - if ((effect.GetFlags() & flag) > 0) - return true; - } - return false; - } - } } diff --git a/FFXIVClassic Map Server/actors/chara/ai/StatusEffectContainer.cs b/FFXIVClassic Map Server/actors/chara/ai/StatusEffectContainer.cs new file mode 100644 index 00000000..a5283557 --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/ai/StatusEffectContainer.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FFXIVClassic_Map_Server.Actors; +using FFXIVClassic_Map_Server.lua; +using FFXIVClassic_Map_Server.actors.area; +using FFXIVClassic_Map_Server.packets.send; +using FFXIVClassic_Map_Server.packets.send.actor; +using System.Collections.ObjectModel; + +namespace FFXIVClassic_Map_Server.actors.chara.ai +{ + class StatusEffectContainer + { + private Character owner; + private readonly Dictionary effects; + + public StatusEffectContainer(Character owner) + { + this.owner = owner; + this.effects = new Dictionary(20); + } + + public void Update(DateTime tick) + { + // list of effects to remove + var removeEffects = new List(); + foreach (var effect in effects.Values) + { + // effect's update function returns true if effect has completed + if (effect.Update(tick)) + removeEffects.Add(effect); + } + + // remove effects from this list + foreach (var effect in removeEffects) + { + RemoveStatusEffect(effect); + } + } + + public bool AddStatusEffect(StatusEffect newEffect, bool silent = false) + { + // todo: check flags/overwritable and add effect to list + var effect = GetStatusEffectById(newEffect.GetEffectId()); + bool canOverwrite = false; + if (effect != null) + { + var overwritable = effect.GetOverwritable(); + canOverwrite = (overwritable == (uint)StatusEffectOverwrite.Always) || + (overwritable == (uint)StatusEffectOverwrite.GreaterOnly && (effect.GetDurationMs() < newEffect.GetDurationMs() || effect.GetMagnitude() < newEffect.GetMagnitude())) || + (overwritable == (uint)StatusEffectOverwrite.GreaterOrEqualTo && (effect.GetDurationMs() == newEffect.GetDurationMs() || effect.GetMagnitude() == newEffect.GetMagnitude())); + } + + if (canOverwrite || effects.ContainsKey(effect.GetEffectId())) + { + if (!silent || (effect.GetFlags() & (uint)StatusEffectFlags.Silent) == 0) + { + // todo: send packet to client with effect added message + } + + if (canOverwrite) + effects.Remove(effect.GetEffectId()); + + effects.Add(newEffect.GetEffectId(), newEffect); + } + return true; + } + + public void RemoveStatusEffect(StatusEffect effect, bool silent = false) + { + if (effects.ContainsKey(effect.GetEffectId())) + { + // send packet to client with effect remove message + if (!silent || (effect.GetFlags() & (uint)StatusEffectFlags.Silent) == 0) + { + // todo: send packet to client with effect added message + } + + // function onLose(actor, effec) + LuaEngine.CallLuaStatusEffectFunction(this.owner, effect, "onLose", this.owner, effect); + effects.Remove(effect.GetEffectId()); + } + } + + public void RemoveStatusEffect(uint effectId, bool silent = false) + { + foreach (var effect in effects.Values) + { + if (effect.GetEffectId() == effectId) + { + RemoveStatusEffect(effect, silent); + break; + } + } + } + + public StatusEffect CopyEffect(StatusEffect effect) + { + var newEffect = new StatusEffect(this.owner, effect); + newEffect.SetOwner(this.owner); + + return AddStatusEffect(newEffect) ? newEffect : null; + } + + public bool RemoveStatusEffectsByFlags(uint flags, bool silent = false) + { + // build list of effects to remove + var removeEffects = new List(); + foreach (var effect in effects.Values) + if ((effect.GetFlags() & flags) != 0) + removeEffects.Add(effect); + + // remove effects from main list + foreach (var effect in removeEffects) + RemoveStatusEffect(effect, silent); + + // removed an effect with one of these flags + return removeEffects.Count > 0; + } + + public StatusEffect GetStatusEffectById(uint id, byte tier = 0xFF) + { + StatusEffect effect; + + if (effects.TryGetValue(id, out effect) && effect.GetEffectId() == id && (tier != 0xFF ? effect.GetTier() == tier : true)) + return effect; + + return null; + } + + public List GetStatusEffectsByFlag(uint flag) + { + var list = new List(); + foreach (var effect in effects.Values) + { + if ((effect.GetFlags() & flag) > 0) + { + list.Add(effect); + } + } + return list; + } + + public bool HasStatusEffectsByFlag(uint flag) + { + foreach (var effect in effects.Values) + { + if ((effect.GetFlags() & flag) > 0) + return true; + } + return false; + } + + public IEnumerable GetStatusEffects() + { + return effects.Values; + } + } +} diff --git a/FFXIVClassic Map Server/lua/LuaEngine.cs b/FFXIVClassic Map Server/lua/LuaEngine.cs index 364e34fe..c5780a9a 100644 --- a/FFXIVClassic Map Server/lua/LuaEngine.cs +++ b/FFXIVClassic Map Server/lua/LuaEngine.cs @@ -16,6 +16,7 @@ using FFXIVClassic_Map_Server.lua; using FFXIVClassic.Common; using FFXIVClassic_Map_Server.actors.area; using System.Threading; +using FFXIVClassic_Map_Server.actors.chara.ai; namespace FFXIVClassic_Map_Server.lua { @@ -163,6 +164,33 @@ namespace FFXIVClassic_Map_Server.lua } } + public static int CallLuaStatusEffectFunction(Character actor, StatusEffect effect, string functionName, params object[] args) + { + string path = $"./scripts/effects/{effect.GetName()}.lua"; + + if (File.Exists(path)) + { + var script = LoadGlobals(); + + try + { + script.DoFile(path); + } + catch (Exception e) + { + Program.Log.Error($"LuaEngine.CallLuaStatusEffectFunction [{functionName}] {e.Message}"); + } + DynValue res = new DynValue(); + + if (!script.Globals.Get(functionName).IsNil()) + { + res = script.Call(script.Globals.Get(functionName), args); + return (int)res.Number; + } + } + return -1; + } + private static string GetScriptPath(Actor target) { if (target is Player) diff --git a/sql/ROWENA_REPRESENT.sql b/sql/ROWENA_REPRESENT.sql deleted file mode 100644 index 8be55275..00000000 --- a/sql/ROWENA_REPRESENT.sql +++ /dev/null @@ -1,256 +0,0 @@ -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -51.815, 180.619, -219.092, 2.949); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -55.258, 180.632, -225.143, -0.339); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -50.962, 180.600, -219.705, -1.560); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -49.059, 182.598, -232.951, 1.725); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -46.647, 180.841, -206.811, -1.130); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -48.437, 182.657, -232.341, -1.872); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -35.259, 180.432, -202.416, 1.595); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -34.054, 181.220, -209.982, -2.964); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -34.181, 181.310, -210.453, -0.869); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -37.232, 180.981, -210.162, 1.123); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -45.052, 180.561, -208.960, 0.540); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -35.958, 187.043, -238.919, -1.739); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -45.027, 185.589, -233.032, -2.776); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -45.191, 180.545, -211.073, 1.047); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -41.839, 180.788, -203.745, 1.208); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -27.471, 189.425, -229.810, -1.493); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -30.015, 182.268, -215.627, -1.801); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -37.278, 180.328, -203.548, 0.891); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -25.359, 184.917, -238.162, 0.613); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -51.961, 182.669, -234.450, -0.998); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -128.105, 184.541, -533.988, 0.807); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -130.269, 184.040, -510.351, 0.061); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -144.985, 184.016, -521.671, -0.765); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -147.695, 184.070, -517.031, -0.543); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -144.281, 180.216, -533.635, 0.136); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -143.154, 184.139, -517.964, -2.344); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -142.716, 184.088, -520.741, 1.481); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -119.080, 184.631, -528.562, 1.423); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -148.644, 179.069, -533.730, 2.031); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -149.051, 183.824, -517.888, -2.356); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -130.194, 184.267, -537.727, -1.488); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -150.069, 183.334, -524.120, 2.324); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -123.840, 183.985, -514.057, 2.732); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -138.891, 184.280, -511.100, -2.066); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -132.335, 184.124, -505.627, -2.566); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -349.657, 180.094, -525.485, 0.053); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -351.220, 177.390, -532.227, 0.214); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -335.533, 171.846, -523.066, -0.438); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -340.280, 172.747, -505.801, -2.005); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -342.491, 173.192, -504.310, -1.133); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -333.951, 173.059, -533.402, -0.773); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -343.919, 175.908, -531.783, 2.299); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -331.746, 171.139, -524.924, 0.896); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -338.135, 173.048, -528.050, 2.701); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -343.874, 174.831, -518.442, -2.042); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -323.897, 169.116, -521.613, 0.981); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -334.262, 171.395, -523.972, -0.359); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -327.144, 168.373, -514.559, 0.860); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -336.846, 172.728, -529.265, 0.050); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -319.660, 173.481, -531.242, 2.455); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -442.804, 152.083, -429.737, -0.888); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -426.737, 151.588, -424.513, 3.086); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -432.421, 151.996, -430.175, -0.229); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -438.770, 151.212, -414.595, 1.846); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -419.900, 152.193, -429.819, -2.325); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -437.913, 151.055, -411.550, -1.189); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -438.235, 151.272, -408.654, -2.471); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -435.633, 151.556, -426.617, -2.437); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -430.027, 149.602, -407.874, 1.293); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -455.667, 151.731, -415.468, -2.646); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -431.413, 152.064, -433.174, 0.693); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -447.918, 152.546, -423.048, -1.329); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -440.547, 151.787, -436.825, -2.785); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -444.213, 151.538, -415.137, -1.609); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -424.736, 149.711, -415.613, 2.303); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -441.719, 151.749, -436.966, -1.026); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -441.150, 151.353, -414.789, 1.238); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -427.934, 152.150, -438.479, -1.692); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -429.796, 149.602, -406.646, 1.744); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -433.280, 151.686, -427.504, 0.154); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -425.145, 149.568, -414.679, 2.551); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -428.265, 150.276, -419.100, 1.039); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -446.926, 151.807, -436.332, -3.078); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -447.469, 152.254, -430.922, 1.155); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', -454.230, 152.107, -427.360, -2.917); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 58.424, 199.693, -517.062, 1.915); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 48.313, 200.178, -508.518, 0.036); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 50.545, 200.254, -529.017, 2.312); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 48.658, 200.189, -519.320, -1.314); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 64.324, 199.749, -517.833, 2.235); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 55.129, 199.780, -506.955, 1.257); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 76.185, 199.310, -520.894, -2.158); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 58.033, 200.338, -533.037, 1.152); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 65.360, 200.184, -527.590, 0.846); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 46.169, 200.823, -524.087, -0.804); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 76.160, 198.714, -512.279, -1.772); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 68.630, 199.678, -513.173, -0.473); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 57.265, 199.744, -519.230, 0.659); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 67.254, 199.631, -503.945, -0.397); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 66.052, 200.638, -535.457, -3.076); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 151.907, 184.368, -326.079, 1.237); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 181.594, 187.112, -325.688, 1.240); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 165.974, 202.732, -340.042, -3.063); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 151.753, 184.299, -327.450, -1.654); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 145.798, 184.322, -314.036, 0.750); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 148.005, 184.087, -329.938, 2.496); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 175.655, 199.528, -332.442, -2.414); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 154.197, 184.223, -324.292, -0.813); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 151.051, 184.241, -328.293, 0.189); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 147.998, 184.460, -311.680, -0.771); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 173.704, 201.774, -337.213, -0.660); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 164.086, 187.531, -305.860, 0.939); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 146.858, 184.296, -323.025, 1.370); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 164.722, 184.523, -327.337, -1.726); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 154.539, 184.072, -326.754, 0.811); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 551.123, 210.957, -36.728, -0.559); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 563.291, 215.093, -17.300, -0.715); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 564.056, 215.409, -13.195, 2.985); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 556.722, 215.387, -15.168, -1.469); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 547.881, 215.193, -14.040, 2.228); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 376.563, 152.256, 579.606, -2.950); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 365.111, 155.717, 565.898, -1.227); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 362.899, 155.296, 568.932, 2.954); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 360.542, 155.491, 591.302, 1.527); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 365.394, 156.706, 563.254, 1.529); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 164.705, 251.223, -732.774, -0.454); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 155.573, 216.474, -706.966, -2.826); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 155.336, 247.845, -736.530, 0.153); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 173.769, 251.517, -731.557, 0.953); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 177.668, 251.333, -731.369, 0.932); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 150.469, 217.063, -711.428, -1.784); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 162.739, 251.073, -732.499, 0.379); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 173.319, 217.838, -708.646, -2.103); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 144.026, 217.988, -716.312, -2.639); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 161.709, 249.166, -740.990, -2.235); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1453.985, 252.680, 166.699, -2.783); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1454.725, 250.005, 178.888, -2.412); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1459.453, 252.913, 164.088, 1.262); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1468.154, 248.525, 187.901, 1.857); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1478.252, 250.241, 171.380, -2.286); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1461.767, 252.866, 163.360, -1.307); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1445.722, 250.443, 178.308, -0.124); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1466.092, 252.506, 164.669, -0.526); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1460.682, 248.987, 197.160, 2.663); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1479.372, 248.319, 186.152, 0.754); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1452.300, 249.068, 262.464, -0.946); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1450.800, 281.838, 288.504, -1.294); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1464.961, 248.529, 259.990, -0.350); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1474.243, 284.198, 293.289, 2.637); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1461.642, 249.278, 264.569, 2.269); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1568.473, 258.522, -13.768, -0.997); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1581.627, 259.128, -17.487, 3.099); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1567.309, 262.827, -22.934, -1.505); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1575.104, 259.803, -16.234, 2.966); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1562.162, 258.125, -12.491, 0.485); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1772.433, 254.402, -104.536, -0.859); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1754.645, 255.331, -109.838, -0.934); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1768.744, 256.585, -132.678, -1.453); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1756.753, 256.684, -136.413, -0.111); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1771.116, 256.345, -116.352, -1.846); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1946.399, 254.702, -111.781, -0.055); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1977.239, 255.260, -117.397, -2.277); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1950.272, 256.429, -131.512, 0.679); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1964.179, 256.583, -130.491, -2.649); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1944.448, 255.101, -116.096, -0.189); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1964.483, 259.352, -311.448, 2.208); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1970.438, 257.365, -316.033, -2.570); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1958.459, 261.506, -308.444, 2.320); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1964.555, 259.564, -326.392, 0.996); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1966.644, 259.024, -306.065, -0.380); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1962.337, 260.680, -337.209, 0.910); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1962.389, 260.577, -329.641, -1.542); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1967.826, 259.229, -333.571, -2.522); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2070.376, 262.158, -304.994, 2.381); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2065.395, 261.901, -318.386, 3.027); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2080.905, 259.099, -330.156, -2.328); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2053.104, 263.688, -319.909, 0.376); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2063.338, 263.234, -335.737, 1.606); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2075.575, 258.388, -335.731, 0.721); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2057.123, 263.115, -327.222, -1.531); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2075.029, 261.064, -317.552, 2.863); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2059.156, 262.909, -324.858, 0.760); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2050.802, 263.747, -318.689, -2.668); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2075.920, 259.127, -332.534, 2.944); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2072.022, 261.406, -314.484, 1.337); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2067.684, 261.279, -329.047, -2.419); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2068.693, 261.745, -313.950, 2.360); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2055.184, 263.348, -324.904, 2.803); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2056.009, 262.037, -304.762, -1.895); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2074.526, 260.291, -326.663, 2.407); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2061.674, 262.399, -324.752, 2.636); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2078.649, 261.150, -316.012, -0.926); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 2057.222, 263.199, -313.516, 0.387); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1722.341, 267.503, -466.254, 0.697); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1720.876, 266.980, -454.151, -2.253); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1711.299, 258.700, -455.036, -1.089); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1724.539, 269.596, -460.793, -3.072); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1720.872, 271.335, -468.058, 2.763); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1718.351, 260.963, -488.817, 1.497); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1719.446, 267.220, -457.657, -2.427); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1718.388, 258.849, -462.079, -0.533); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1718.479, 258.623, -460.163, 1.366); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1721.433, 258.254, -458.634, -0.887); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1717.737, 267.228, -457.660, -0.279); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1713.242, 258.464, -455.313, -1.162); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1715.770, 258.610, -458.531, -1.721); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1722.592, 258.259, -459.282, 1.299); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1152.289, 280.519, -725.523, -2.597); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1153.358, 280.303, -730.961, 1.122); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1152.399, 280.171, -719.449, -2.628); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1158.675, 280.177, -719.468, 1.535); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1170.606, 281.299, -722.142, -1.494); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 913.805, 253.201, -236.688, 2.337); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 921.298, 254.859, -231.607, 2.281); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 930.007, 252.175, -232.243, -2.563); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 898.139, 255.765, -233.301, -2.099); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 931.988, 259.216, -216.015, -1.801); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 914.943, 259.993, -226.475, -0.413); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 901.102, 254.959, -235.151, -1.326); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 924.829, 253.048, -232.959, 2.431); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 925.738, 251.456, -235.936, -0.232); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 922.639, 252.464, -234.959, 1.249); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 926.735, 251.192, -236.177, -2.396); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 927.443, 252.007, -233.786, -0.041); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 915.696, 292.410, -209.551, 2.702); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 908.757, 310.556, -203.739, 0.509); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1159.328, 279.546, -411.322, -0.231); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1170.144, 277.214, -417.893, 2.330); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1157.426, 279.329, -436.867, 2.354); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1172.835, 277.852, -411.633, 2.789); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1160.717, 279.404, -429.706, 1.006); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1261.602, 290.060, -738.372, -0.231); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1257.488, 292.184, -725.553, 3.018); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1267.198, 293.989, -718.696, 2.228); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1275.534, 295.647, -729.613, -2.247); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1271.939, 296.228, -704.779, -1.246); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1346.271, 263.677, -711.127, -1.782); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1373.234, 266.510, -721.227, -0.973); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1360.456, 266.876, -732.650, 0.777); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1371.551, 271.464, -737.839, -0.278); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1366.940, 268.754, -728.317, 0.906); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1517.181, 280.373, -1023.900, 1.887); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1513.330, 290.518, -1038.305, -1.742); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1502.782, 279.908, -1023.595, 2.719); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1513.187, 280.785, -1022.210, -1.459); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1526.258, 279.811, -1023.736, -2.706); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1505.612, 280.402, -1035.262, -2.001); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1517.709, 280.421, -1023.043, 0.490); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1493.458, 280.621, -1018.430, -2.708); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1520.705, 281.513, -1012.023, -0.867); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1520.390, 290.539, -1038.958, -0.601); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1413.956, 347.399, -1106.772, -2.608); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1393.366, 337.977, -1122.789, -1.135); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1399.891, 340.628, -1112.050, 1.098); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1406.123, 286.455, -1132.182, -2.098); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1400.943, 343.202, -1107.763, -2.480); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1399.291, 340.103, -1114.453, 0.302); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1407.312, 348.000, -1106.923, 1.329); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1396.023, 339.746, -1112.727, 2.511); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1406.624, 283.855, -1137.155, 0.222); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1412.545, 347.590, -1105.036, -0.139); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1397.278, 339.656, -1114.849, 1.758); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1404.779, 347.533, -1104.230, 0.167); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1394.591, 338.759, -1118.041, -0.125); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1413.101, 347.504, -1105.536, 0.937); -INSERT INTO server_spawn_locations(actorClassId, zoneId, uniqueId, positionX, positionY, positionZ, rotation) VALUES(1500182, 170, 'rowena', 1399.662, 340.141, -1114.776, -0.259); diff --git a/sql/characters_statuseffect.sql b/sql/characters_statuseffect.sql index 4e60bf4c..f43f4c79 100644 --- a/sql/characters_statuseffect.sql +++ b/sql/characters_statuseffect.sql @@ -23,11 +23,14 @@ DROP TABLE IF EXISTS `characters_statuseffect`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `characters_statuseffect` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `characterId` int(10) unsigned NOT NULL, - `statusId` tinyint(3) unsigned NOT NULL, - `expireTime` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) + `statusId` smallint(5) unsigned NOT NULL, + `magnitude` bigint(20) unsigned NOT NULL, + `duration` int(10) unsigned NOT NULL, + `tick` int(10) unsigned NOT NULL, + `tier` tinyint(3) unsigned NOT NULL, + `extra` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`characterId`, `statusId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/sql/export.sh b/sql/export.sh index 9070a4e9..4ac94db3 100644 --- a/sql/export.sh +++ b/sql/export.sh @@ -6,5 +6,5 @@ DBNAME=ffxiv_server for T in `mysqlshow -u $USER -p$PASS $DBNAME %`; do echo "Backing up $T" - mysqldump -u $USER -p$PASS $DBNAME $T --extended-insert=FALSE --no-tablespaces > $EXPORT_PATH/$T.sql + mysqldump -u $USER -p$PASS $DBNAME $T --extended-insert=FALSE --no-tablespaces --no-autocommit > $EXPORT_PATH/$T.sql done; \ No newline at end of file diff --git a/sql/status_effects.sql b/sql/status_effects.sql new file mode 100644 index 00000000..2679587e --- /dev/null +++ b/sql/status_effects.sql @@ -0,0 +1,52 @@ +-- MySQL dump 10.13 Distrib 5.7.10, for Win64 (x86_64) +-- +-- Host: localhost Database: ffxiv_database +-- ------------------------------------------------------ +-- Server version 5.7.10-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `status_effect` +-- + +DROP TABLE IF EXISTS `status_effect`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `status_effect` ( + `id` smallint(5) unsigned NOT NULL, + `name` varchar(128) NOT NULL, + `flags` int(10) unsigned NOT NULL, + `overwrite` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `status_effect` +-- + +LOCK TABLES `status_effect` WRITE; +/*!40000 ALTER TABLE `status_effect` DISABLE KEYS */; +/*!40000 ALTER TABLE `status_effect` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2016-06-07 22:54:49