1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-23 05:07:47 +00:00

added status effect loading

- todo: populate table (and test this doesnt break everything ever), send charawork and message packets
This commit is contained in:
Tahir Akhlaq 2017-07-15 19:33:47 +01:00
parent 13af16ec0e
commit d9d185d7e6
12 changed files with 360 additions and 379 deletions

View file

@ -10,6 +10,7 @@ using FFXIVClassic_Map_Server.packets.send.player;
using FFXIVClassic_Map_Server.dataobjects; using FFXIVClassic_Map_Server.dataobjects;
using FFXIVClassic_Map_Server.Actors; using FFXIVClassic_Map_Server.Actors;
using FFXIVClassic_Map_Server.actors.chara.player; using FFXIVClassic_Map_Server.actors.chara.player;
using FFXIVClassic_Map_Server.actors.chara.ai;
namespace FFXIVClassic_Map_Server namespace FFXIVClassic_Map_Server
{ {
@ -877,7 +878,11 @@ namespace FFXIVClassic_Map_Server
query = @" query = @"
SELECT SELECT
statusId, statusId,
expireTime duration,
magnitude,
tick,
tier,
extra
FROM characters_statuseffect WHERE characterId = @charId"; FROM characters_statuseffect WHERE characterId = @charId";
cmd = new MySqlCommand(query, conn); cmd = new MySqlCommand(query, conn);
@ -887,8 +892,28 @@ namespace FFXIVClassic_Map_Server
int count = 0; int count = 0;
while (reader.Read()) 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.status[count] = reader.GetUInt16(0);
player.charaWork.statusShownTime[count] = reader.GetUInt32(1); 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<uint, StatusEffect> LoadGlobalStatusEffectList()
{
var effects = new Dictionary<uint, StatusEffect>();
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;
}
} }
} }

View file

@ -95,7 +95,8 @@
<Compile Include="actors\chara\ai\PathFind.cs" /> <Compile Include="actors\chara\ai\PathFind.cs" />
<Compile Include="actors\chara\ai\state\AttackState.cs" /> <Compile Include="actors\chara\ai\state\AttackState.cs" />
<Compile Include="actors\chara\ai\state\State.cs" /> <Compile Include="actors\chara\ai\state\State.cs" />
<Compile Include="actors\chara\ai\StatusEffects.cs" /> <Compile Include="actors\chara\ai\StatusEffect.cs" />
<Compile Include="actors\chara\ai\StatusEffectContainer.cs" />
<Compile Include="actors\chara\ai\TargetFind.cs" /> <Compile Include="actors\chara\ai\TargetFind.cs" />
<Compile Include="actors\chara\ai\utils\AttackUtils.cs" /> <Compile Include="actors\chara\ai\utils\AttackUtils.cs" />
<Compile Include="actors\chara\npc\ActorClass.cs" /> <Compile Include="actors\chara\npc\ActorClass.cs" />

View file

@ -54,6 +54,7 @@ namespace FFXIVClassic_Map_Server
mWorldManager.LoadActorClasses(); mWorldManager.LoadActorClasses();
mWorldManager.LoadSpawnLocations(); mWorldManager.LoadSpawnLocations();
mWorldManager.SpawnAllActors(); mWorldManager.SpawnAllActors();
mWorldManager.LoadStatusEffects();
mWorldManager.StartZoneThread(); mWorldManager.StartZoneThread();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(ConfigConstants.OPTIONS_BINDIP), int.Parse(ConfigConstants.OPTIONS_PORT)); IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(ConfigConstants.OPTIONS_BINDIP), int.Parse(ConfigConstants.OPTIONS_PORT));

View file

@ -1123,6 +1123,17 @@ namespace FFXIVClassic_Map_Server
return null; 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;
}
} }
} }

View file

@ -7,6 +7,7 @@ using FFXIVClassic_Map_Server.packets.send.actor;
using FFXIVClassic_Map_Server.utils; using FFXIVClassic_Map_Server.utils;
using FFXIVClassic_Map_Server.actors.chara.ai; using FFXIVClassic_Map_Server.actors.chara.ai;
using System; using System;
using System.Collections.Generic;
namespace FFXIVClassic_Map_Server.Actors namespace FFXIVClassic_Map_Server.Actors
{ {
@ -73,7 +74,7 @@ namespace FFXIVClassic_Map_Server.Actors
public DateTime lastAiUpdate; public DateTime lastAiUpdate;
public AIContainer aiContainer; public AIContainer aiContainer;
public StatusEffects statusEffects; public StatusEffectContainer statusEffects;
public CharacterTargetingAllegiance allegiance; public CharacterTargetingAllegiance allegiance;
@ -83,7 +84,7 @@ namespace FFXIVClassic_Map_Server.Actors
for (int i = 0; i < charaWork.statusShownTime.Length; i++) for (int i = 0; i < charaWork.statusShownTime.Length; i++)
charaWork.statusShownTime[i] = 0xFFFFFFFF; charaWork.statusShownTime[i] = 0xFFFFFFFF;
this.statusEffects = new StatusEffects(this); this.statusEffects = new StatusEffectContainer(this);
} }
public SubPacket CreateAppearancePacket() public SubPacket CreateAppearancePacket()

View file

@ -1,11 +1,10 @@
using System; using FFXIVClassic_Map_Server.Actors;
using FFXIVClassic_Map_Server.lua;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; 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 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 DateTime lastTick; // when did this effect last tick
private uint durationMs; // how long should this effect last in ms private uint durationMs; // how long should this effect last in ms
private uint tickMs; // how often should this effect proc 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 byte tier; // same effect with higher tier overwrites this
private Dictionary<string, UInt64> 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 StatusEffectFlags flags; // death/erase/dispel etc
private StatusEffectOverwrite overwrite; // how to handle adding an effect with same id (see StatusEfectOverwrite) 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.owner = owner;
this.id = (StatusEffectId)id; this.id = (StatusEffectId)id;
@ -373,7 +372,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
this.tickMs = tickMs; this.tickMs = tickMs;
this.durationMs = durationMs; this.durationMs = durationMs;
this.tier = tier; this.tier = tier;
// todo: use tick instead of now? // todo: use tick instead of now?
this.startTime = DateTime.Now; this.startTime = DateTime.Now;
this.lastTick = startTime; this.lastTick = startTime;
@ -399,7 +398,15 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
this.name = effect.name; this.name = effect.name;
this.flags = effect.flags; this.flags = effect.flags;
this.overwrite = effect.overwrite; 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 // return true when duration has elapsed
@ -411,6 +418,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
// todo: call effect's onTick // 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 // todo: maybe keep a global lua object instead of creating a new one each time we wanna call a script
lastTick = tick; lastTick = tick;
LuaEngine.CallLuaStatusEffectFunction(this.owner, this, "onTick", this.owner, this);
} }
// todo: handle infinite duration effects? // todo: handle infinite duration effects?
if (durationMs != 0 && startTime.Millisecond + durationMs >= tick.Millisecond) if (durationMs != 0 && startTime.Millisecond + durationMs >= tick.Millisecond)
@ -447,7 +455,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
return tickMs; return tickMs;
} }
public int GetMagnitude() public UInt64 GetMagnitude()
{ {
return magnitude; return magnitude;
} }
@ -457,9 +465,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
return tier; return tier;
} }
public UInt64 GetVariable(string key) public UInt64 GetExtra()
{ {
return variables?[key] ?? 0; return extra;
} }
public uint GetFlags() public uint GetFlags()
@ -482,6 +490,11 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
this.name = name; this.name = name;
} }
public void SetMagnitude(UInt64 magnitude)
{
this.magnitude = magnitude;
}
public void SetDurationMs(uint durationMs) public void SetDurationMs(uint durationMs)
{ {
this.durationMs = durationMs; this.durationMs = durationMs;
@ -497,17 +510,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
this.tier = tier; this.tier = tier;
} }
public void SetVariable(string key, UInt64 val) public void SetExtra(UInt64 val)
{ {
if (variables != null) this.extra = val;
{
variables[key] = val;
}
else
{
variables = new Dictionary<string, ulong>();
variables[key] = val;
}
} }
public void SetFlags(uint flags) public void SetFlags(uint flags)
@ -520,96 +525,4 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
this.overwrite = (StatusEffectOverwrite)overwrite; this.overwrite = (StatusEffectOverwrite)overwrite;
} }
} }
class StatusEffects
{
private Character owner;
private List<StatusEffect> effects;
public StatusEffects(Character owner)
{
this.owner = owner;
this.effects = new List<StatusEffect>();
}
public void Update(DateTime tick)
{
// list of effects to remove
var removeEffects = new List<StatusEffect>();
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<StatusEffect>();
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<StatusEffect> GetStatusEffectsByFlag(uint flag)
{
var list = new List<StatusEffect>();
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;
}
}
} }

View file

@ -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<uint, StatusEffect> effects;
public StatusEffectContainer(Character owner)
{
this.owner = owner;
this.effects = new Dictionary<uint, StatusEffect>(20);
}
public void Update(DateTime tick)
{
// list of effects to remove
var removeEffects = new List<StatusEffect>();
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<StatusEffect>();
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<StatusEffect> GetStatusEffectsByFlag(uint flag)
{
var list = new List<StatusEffect>();
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<StatusEffect> GetStatusEffects()
{
return effects.Values;
}
}
}

View file

@ -16,6 +16,7 @@ using FFXIVClassic_Map_Server.lua;
using FFXIVClassic.Common; using FFXIVClassic.Common;
using FFXIVClassic_Map_Server.actors.area; using FFXIVClassic_Map_Server.actors.area;
using System.Threading; using System.Threading;
using FFXIVClassic_Map_Server.actors.chara.ai;
namespace FFXIVClassic_Map_Server.lua 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) private static string GetScriptPath(Actor target)
{ {
if (target is Player) if (target is Player)

View file

@ -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);

View file

@ -23,11 +23,14 @@ DROP TABLE IF EXISTS `characters_statuseffect`;
/*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */; /*!40101 SET character_set_client = utf8 */;
CREATE TABLE `characters_statuseffect` ( CREATE TABLE `characters_statuseffect` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`characterId` int(10) unsigned NOT NULL, `characterId` int(10) unsigned NOT NULL,
`statusId` tinyint(3) unsigned NOT NULL, `statusId` smallint(5) unsigned NOT NULL,
`expireTime` int(10) unsigned NOT NULL, `magnitude` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`) `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; ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */; /*!40101 SET character_set_client = @saved_cs_client */;

View file

@ -6,5 +6,5 @@ DBNAME=ffxiv_server
for T in `mysqlshow -u $USER -p$PASS $DBNAME %`; for T in `mysqlshow -u $USER -p$PASS $DBNAME %`;
do do
echo "Backing up $T" 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; done;

52
sql/status_effects.sql Normal file
View file

@ -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