mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-22 12:47:46 +00:00
attempt to add tutorial fight
- added tempvars which are reset on spawning/zoning
This commit is contained in:
parent
da621dfc0e
commit
ba8184db89
30 changed files with 552 additions and 154 deletions
|
@ -85,6 +85,7 @@
|
||||||
<Compile Include="actors\area\PrivateAreaContent.cs" />
|
<Compile Include="actors\area\PrivateAreaContent.cs" />
|
||||||
<Compile Include="actors\area\SpawnLocation.cs" />
|
<Compile Include="actors\area\SpawnLocation.cs" />
|
||||||
<Compile Include="actors\area\Zone.cs" />
|
<Compile Include="actors\area\Zone.cs" />
|
||||||
|
<Compile Include="actors\chara\ai\controllers\AllyController.cs" />
|
||||||
<Compile Include="actors\chara\ai\helpers\ActionQueue.cs" />
|
<Compile Include="actors\chara\ai\helpers\ActionQueue.cs" />
|
||||||
<Compile Include="actors\chara\ai\AIContainer.cs" />
|
<Compile Include="actors\chara\ai\AIContainer.cs" />
|
||||||
<Compile Include="actors\chara\ai\controllers\Controller.cs" />
|
<Compile Include="actors\chara\ai\controllers\Controller.cs" />
|
||||||
|
@ -110,6 +111,7 @@
|
||||||
<Compile Include="actors\chara\Modifier.cs" />
|
<Compile Include="actors\chara\Modifier.cs" />
|
||||||
<Compile Include="actors\chara\ModifierList.cs" />
|
<Compile Include="actors\chara\ModifierList.cs" />
|
||||||
<Compile Include="actors\chara\npc\ActorClass.cs" />
|
<Compile Include="actors\chara\npc\ActorClass.cs" />
|
||||||
|
<Compile Include="actors\chara\npc\Ally.cs" />
|
||||||
<Compile Include="actors\chara\npc\BattleNpc.cs" />
|
<Compile Include="actors\chara\npc\BattleNpc.cs" />
|
||||||
<Compile Include="actors\chara\npc\MobModifier.cs" />
|
<Compile Include="actors\chara\npc\MobModifier.cs" />
|
||||||
<Compile Include="actors\chara\npc\NpcWork.cs" />
|
<Compile Include="actors\chara\npc\NpcWork.cs" />
|
||||||
|
|
|
@ -436,13 +436,13 @@ namespace FFXIVClassic_Map_Server
|
||||||
conn.Open();
|
conn.Open();
|
||||||
var query = @"
|
var query = @"
|
||||||
SELECT bsl.bnpcId, bsl.groupId, bsl.positionX, bsl.positionY, bsl.positionZ, bsl.rotation,
|
SELECT bsl.bnpcId, bsl.groupId, bsl.positionX, bsl.positionY, bsl.positionZ, bsl.rotation,
|
||||||
bgr.groupId, bgr.poolId, bgr.actorClassId, bgr.scriptName, bgr.minLevel, bgr.maxLevel, bgr.respawnTime, bgr.hp, bgr.mp,
|
bgr.groupId, bgr.poolId, bgr.scriptName, bgr.minLevel, bgr.maxLevel, bgr.respawnTime, bgr.hp, bgr.mp,
|
||||||
bgr.dropListId, bgr.allegiance, bgr.spawnType, bgr.animationId, bgr.actorState, bgr.privateAreaName, bgr.privateAreaLevel, bgr.zoneId,
|
bgr.dropListId, bgr.allegiance, bgr.spawnType, bgr.animationId, bgr.actorState, bgr.privateAreaName, bgr.privateAreaLevel, bgr.zoneId,
|
||||||
bpo.poolId, bpo.genusId, bpo.currentJob, bpo.combatSkill, bpo.combatDelay, bpo.combatDmgMult, bpo.aggroType,
|
bpo.poolId, bpo.genusId, bpo.actorClassId, bpo.currentJob, bpo.combatSkill, bpo.combatDelay, bpo.combatDmgMult, bpo.aggroType,
|
||||||
bpo.immunity, bpo.linkType, bpo.skillListId, bpo.spellListId,
|
bpo.immunity, bpo.linkType, bpo.skillListId, bpo.spellListId,
|
||||||
bge.genusId, bge.modelSize, bge.speed, bge.kindredId, bge.detection, bge.hpp, bge.mpp, bge.tpp, bge.str, bge.vit, bge.dex,
|
bge.genusId, bge.modelSize, bge.speed, bge.kindredId, bge.detection, bge.hpp, bge.mpp, bge.tpp, bge.str, bge.vit, bge.dex,
|
||||||
bge.int, bge.mnd, bge.pie, bge.att, bge.acc, bge.def, bge.eva, bge.slash, bge.pierce, bge.h2h, bge.blunt,
|
bge.int, bge.mnd, bge.pie, bge.att, bge.acc, bge.def, bge.eva, bge.slash, bge.pierce, bge.h2h, bge.blunt,
|
||||||
bge.fire, bge.ice, bge.wind, bge.lightning, bge.earth, bge.water
|
bge.fire, bge.ice, bge.wind, bge.lightning, bge.earth, bge.water, bge.element
|
||||||
FROM server_battlenpc_spawn_locations bsl
|
FROM server_battlenpc_spawn_locations bsl
|
||||||
INNER JOIN server_battlenpc_groups bgr ON bsl.groupId = bgr.groupId
|
INNER JOIN server_battlenpc_groups bgr ON bsl.groupId = bgr.groupId
|
||||||
INNER JOIN server_battlenpc_pools bpo ON bgr.poolId = bpo.poolId
|
INNER JOIN server_battlenpc_pools bpo ON bgr.poolId = bpo.poolId
|
||||||
|
@ -517,11 +517,15 @@ namespace FFXIVClassic_Map_Server
|
||||||
|
|
||||||
//battleNpc.SetMod((uint)Modifier.ResistFire, )
|
//battleNpc.SetMod((uint)Modifier.ResistFire, )
|
||||||
|
|
||||||
|
// todo: this is dumb
|
||||||
|
if (battleNpc.npcSpawnType == NpcSpawnType.Normal)
|
||||||
|
{
|
||||||
zone.AddActorToZone(battleNpc);
|
zone.AddActorToZone(battleNpc);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Program.Log.Info("Loaded {0} monsters.", count);
|
Program.Log.Info("Loaded {0} monsters.", count);
|
||||||
}
|
}
|
||||||
catch (MySqlException e)
|
catch (MySqlException e)
|
||||||
|
@ -552,13 +556,13 @@ namespace FFXIVClassic_Map_Server
|
||||||
conn.Open();
|
conn.Open();
|
||||||
var query = @"
|
var query = @"
|
||||||
SELECT bsl.bnpcId, bsl.groupId, bsl.positionX, bsl.positionY, bsl.positionZ, bsl.rotation,
|
SELECT bsl.bnpcId, bsl.groupId, bsl.positionX, bsl.positionY, bsl.positionZ, bsl.rotation,
|
||||||
bgr.groupId, bgr.poolId, bgr.actorClassId, bgr.scriptName, bgr.minLevel, bgr.maxLevel, bgr.respawnTime, bgr.hp, bgr.mp,
|
bgr.groupId, bgr.poolId, bgr.scriptName, bgr.minLevel, bgr.maxLevel, bgr.respawnTime, bgr.hp, bgr.mp,
|
||||||
bgr.dropListId, bgr.allegiance, bgr.spawnType, bgr.animationId, bgr.actorState, bgr.privateAreaName, bgr.privateAreaLevel, bgr.zoneId,
|
bgr.dropListId, bgr.allegiance, bgr.spawnType, bgr.animationId, bgr.actorState, bgr.privateAreaName, bgr.privateAreaLevel, bgr.zoneId,
|
||||||
bpo.poolId, bpo.genusId, bpo.currentJob, bpo.combatSkill, bpo.combatDelay, bpo.combatDmgMult, bpo.aggroType,
|
bpo.poolId, bpo.genusId, bpo.actorClassId, bpo.currentJob, bpo.combatSkill, bpo.combatDelay, bpo.combatDmgMult, bpo.aggroType,
|
||||||
bpo.immunity, bpo.linkType, bpo.skillListId, bpo.spellListId,
|
bpo.immunity, bpo.linkType, bpo.skillListId, bpo.spellListId,
|
||||||
bge.genusId, bge.modelSize, bge.speed, bge.kindredId, bge.detection, bge.hpp, bge.mpp, bge.tpp, bge.str, bge.vit, bge.dex,
|
bge.genusId, bge.modelSize, bge.speed, bge.kindredId, bge.detection, bge.hpp, bge.mpp, bge.tpp, bge.str, bge.vit, bge.dex,
|
||||||
bge.int, bge.mnd, bge.pie, bge.att, bge.acc, bge.def, bge.eva, bge.slash, bge.pierce, bge.h2h, bge.blunt,
|
bge.int, bge.mnd, bge.pie, bge.att, bge.acc, bge.def, bge.eva, bge.slash, bge.pierce, bge.h2h, bge.blunt,
|
||||||
bge.fire, bge.ice, bge.wind, bge.lightning, bge.earth, bge.water
|
bge.fire, bge.ice, bge.wind, bge.lightning, bge.earth, bge.water, bge.element
|
||||||
FROM server_battlenpc_spawn_locations bsl
|
FROM server_battlenpc_spawn_locations bsl
|
||||||
INNER JOIN server_battlenpc_groups bgr ON bsl.groupId = bgr.groupId
|
INNER JOIN server_battlenpc_groups bgr ON bsl.groupId = bgr.groupId
|
||||||
INNER JOIN server_battlenpc_pools bpo ON bgr.poolId = bpo.poolId
|
INNER JOIN server_battlenpc_pools bpo ON bgr.poolId = bpo.poolId
|
||||||
|
|
|
@ -111,6 +111,9 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
{
|
{
|
||||||
lock (mActorList)
|
lock (mActorList)
|
||||||
{
|
{
|
||||||
|
if (actor is Character)
|
||||||
|
((Character)actor).ResetTempVars();
|
||||||
|
|
||||||
if (!mActorList.ContainsKey(actor.actorId))
|
if (!mActorList.ContainsKey(actor.actorId))
|
||||||
mActorList.Add(actor.actorId, actor);
|
mActorList.Add(actor.actorId, actor);
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ using FFXIVClassic_Map_Server.packets.send.actor.battle;
|
||||||
using FFXIVClassic_Map_Server.packets.send;
|
using FFXIVClassic_Map_Server.packets.send;
|
||||||
using FFXIVClassic_Map_Server.actors.chara.ai.state;
|
using FFXIVClassic_Map_Server.actors.chara.ai.state;
|
||||||
using FFXIVClassic_Map_Server.actors.chara.ai.utils;
|
using FFXIVClassic_Map_Server.actors.chara.ai.utils;
|
||||||
|
using FFXIVClassic_Map_Server.actors.chara.npc;
|
||||||
|
|
||||||
namespace FFXIVClassic_Map_Server.Actors
|
namespace FFXIVClassic_Map_Server.Actors
|
||||||
{
|
{
|
||||||
|
@ -25,6 +26,15 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
Player
|
Player
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum DamageTakenType
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Attack,
|
||||||
|
Magic,
|
||||||
|
Weaponskill,
|
||||||
|
Ability
|
||||||
|
}
|
||||||
|
|
||||||
class Character : Actor
|
class Character : Actor
|
||||||
{
|
{
|
||||||
public const int CLASSID_PUG = 2;
|
public const int CLASSID_PUG = 2;
|
||||||
|
@ -102,6 +112,8 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
public ushort newMainState;
|
public ushort newMainState;
|
||||||
public float spawnX, spawnY, spawnZ;
|
public float spawnX, spawnY, spawnZ;
|
||||||
|
|
||||||
|
protected Dictionary<string, UInt64> tempVars = new Dictionary<string, UInt64>();
|
||||||
|
|
||||||
public Character(uint actorID) : base(actorID)
|
public Character(uint actorID) : base(actorID)
|
||||||
{
|
{
|
||||||
//Init timer array to "notimer"
|
//Init timer array to "notimer"
|
||||||
|
@ -392,6 +404,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual bool Engage(Character target)
|
||||||
|
{
|
||||||
|
aiContainer.Engage(target);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public virtual bool Disengage(ushort newMainState = 0xFFFF)
|
public virtual bool Disengage(ushort newMainState = 0xFFFF)
|
||||||
{
|
{
|
||||||
if (newMainState != 0xFFFF)
|
if (newMainState != 0xFFFF)
|
||||||
|
@ -447,12 +465,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
|
|
||||||
public bool IsDead()
|
public bool IsDead()
|
||||||
{
|
{
|
||||||
return aiContainer.IsDead();
|
return !IsAlive();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsAlive()
|
public bool IsAlive()
|
||||||
{
|
{
|
||||||
return !aiContainer.IsDead();
|
return !aiContainer.IsDead() && GetHP() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public short GetHP()
|
public short GetHP()
|
||||||
|
@ -520,7 +538,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
// todo: +/- hp and die
|
// todo: +/- hp and die
|
||||||
// todo: battlenpcs probably have way more hp?
|
// todo: battlenpcs probably have way more hp?
|
||||||
var addHp = charaWork.parameterSave.hp[0] + hp;
|
var addHp = charaWork.parameterSave.hp[0] + hp;
|
||||||
addHp = addHp.Clamp(ushort.MinValue, charaWork.parameterSave.hpMax[0]);
|
addHp = addHp.Clamp((short)GetMod((uint)Modifier.MinimumHpLock), charaWork.parameterSave.hpMax[0]);
|
||||||
charaWork.parameterSave.hp[0] = (short)addHp;
|
charaWork.parameterSave.hp[0] = (short)addHp;
|
||||||
|
|
||||||
if (charaWork.parameterSave.hp[0] < 1)
|
if (charaWork.parameterSave.hp[0] < 1)
|
||||||
|
@ -615,7 +633,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
//var packet = BattleActionX01Packet.BuildPacket(owner.actorId, owner.actorId, target.actorId, (uint)0x19001000, (uint)0x8000604, (ushort)0x765D, (ushort)BattleActionX01PacketCommand.Attack, (ushort)damage, (byte)0x1);
|
//var packet = BattleActionX01Packet.BuildPacket(owner.actorId, owner.actorId, target.actorId, (uint)0x19001000, (uint)0x8000604, (ushort)0x765D, (ushort)BattleActionX01PacketCommand.Attack, (ushort)damage, (byte)0x1);
|
||||||
}
|
}
|
||||||
|
|
||||||
target.OnDamageTaken(this, action);
|
target.OnDamageTaken(this, action, DamageTakenType.Ability);
|
||||||
// todo: call onAttack/onDamageTaken
|
// todo: call onAttack/onDamageTaken
|
||||||
target.DelHP(action.amount);
|
target.DelHP(action.amount);
|
||||||
if (target is BattleNpc)
|
if (target is BattleNpc)
|
||||||
|
@ -629,7 +647,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
this.DelMP(spell.mpCost); // mpCost can be set in script e.g. if caster has something for free spells
|
this.DelMP(spell.mpCost); // mpCost can be set in script e.g. if caster has something for free spells
|
||||||
|
|
||||||
foreach (var action in actions)
|
foreach (var action in actions)
|
||||||
zone.FindActorInArea<Character>(action.targetId).OnDamageTaken(this, action);
|
zone.FindActorInArea<Character>(action.targetId).OnDamageTaken(this, action, DamageTakenType.Magic);
|
||||||
|
|
||||||
if (target is BattleNpc)
|
if (target is BattleNpc)
|
||||||
((BattleNpc)target).lastAttacker = this;
|
((BattleNpc)target).lastAttacker = this;
|
||||||
|
@ -642,7 +660,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
this.DelTP(skill.tpCost);
|
this.DelTP(skill.tpCost);
|
||||||
|
|
||||||
foreach (var action in actions)
|
foreach (var action in actions)
|
||||||
zone.FindActorInArea<BattleNpc>(action.targetId)?.OnDamageTaken(this, action);
|
zone.FindActorInArea<BattleNpc>(action.targetId)?.OnDamageTaken(this, action, DamageTakenType.Weaponskill);
|
||||||
|
|
||||||
if (target is BattleNpc)
|
if (target is BattleNpc)
|
||||||
((BattleNpc)target).lastAttacker = this;
|
((BattleNpc)target).lastAttacker = this;
|
||||||
|
@ -654,7 +672,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
((BattleNpc)target).lastAttacker = this;
|
((BattleNpc)target).lastAttacker = this;
|
||||||
|
|
||||||
foreach (var action in actions)
|
foreach (var action in actions)
|
||||||
zone.FindActorInArea<BattleNpc>(action.targetId)?.OnDamageTaken(this, action);
|
zone.FindActorInArea<BattleNpc>(action.targetId)?.OnDamageTaken(this, action, DamageTakenType.Ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OnSpawn()
|
public virtual void OnSpawn()
|
||||||
|
@ -672,11 +690,64 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OnDamageTaken(Character attacker, BattleAction action)
|
public virtual void OnDamageTaken(Character attacker, BattleAction action, DamageTakenType damageTakenType)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
|
public UInt64 GetTempVar(string name)
|
||||||
|
{
|
||||||
|
UInt64 retVal = 0;
|
||||||
|
if (tempVars.TryGetValue(name, out retVal))
|
||||||
|
return retVal;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cause lua is a dick
|
||||||
|
public void SetTempVar(string name, uint val)
|
||||||
|
{
|
||||||
|
if (tempVars.ContainsKey(name))
|
||||||
|
tempVars[name] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTempVar(string name, UInt64 val)
|
||||||
|
{
|
||||||
|
if (tempVars.ContainsKey(name))
|
||||||
|
tempVars[name] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ResetTempVars()
|
||||||
|
{
|
||||||
|
tempVars.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
#region lua helpers
|
||||||
|
public bool IsEngaged()
|
||||||
|
{
|
||||||
|
return aiContainer.IsEngaged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPlayer()
|
||||||
|
{
|
||||||
|
return this is Player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsMonster()
|
||||||
|
{
|
||||||
|
return this is BattleNpc && !IsAlly();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPet()
|
||||||
|
{
|
||||||
|
return this is Pet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsAlly()
|
||||||
|
{
|
||||||
|
return this is Ally;
|
||||||
|
}
|
||||||
|
#endregion lua helpers
|
||||||
|
#endregion ai stuff
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,5 +53,6 @@ namespace FFXIVClassic_Map_Server.actors.chara
|
||||||
HarvestRate = 40,
|
HarvestRate = 40,
|
||||||
|
|
||||||
Raise = 41,
|
Raise = 41,
|
||||||
|
MinimumHpLock = 42, // hp cannot fall below this value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -235,5 +235,10 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai
|
||||||
|
|
||||||
return tpCost;
|
return tpCost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Character> GetTargets()
|
||||||
|
{
|
||||||
|
return targetFind?.GetTargets<Character>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
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.actors.chara.npc;
|
||||||
|
|
||||||
|
namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
|
{
|
||||||
|
// todo: this is probably not needed, can do everything in their script
|
||||||
|
class AllyController : BattleNpcController
|
||||||
|
{
|
||||||
|
protected new Ally owner;
|
||||||
|
public AllyController(Ally owner) :
|
||||||
|
base(owner)
|
||||||
|
{
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
// server really likes to hang whenever scripts iterate area's actorlist
|
||||||
|
protected override void DoCombatTick(DateTime tick, List<Character> contentGroupCharas = null)
|
||||||
|
{
|
||||||
|
if (owner.currentContentGroup != null)
|
||||||
|
{
|
||||||
|
contentGroupCharas = new List<Character>(owner.currentContentGroup.GetMemberCount());
|
||||||
|
foreach (var charaId in owner.currentContentGroup.GetMembers())
|
||||||
|
{
|
||||||
|
var chara = owner.zone.FindActorInArea<Character>(charaId);
|
||||||
|
|
||||||
|
if (chara != null)
|
||||||
|
contentGroupCharas.Add(chara);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
base.DoCombatTick(tick, contentGroupCharas);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,19 +15,19 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
{
|
{
|
||||||
class BattleNpcController : Controller
|
class BattleNpcController : Controller
|
||||||
{
|
{
|
||||||
private DateTime lastActionTime;
|
protected DateTime lastActionTime;
|
||||||
private DateTime lastSpellCastTime;
|
protected DateTime lastSpellCastTime;
|
||||||
private DateTime lastSkillTime;
|
protected DateTime lastSkillTime;
|
||||||
private DateTime lastSpecialSkillTime; // todo: i dont think monsters have "2hr" cooldowns like ffxi
|
protected DateTime lastSpecialSkillTime; // todo: i dont think monsters have "2hr" cooldowns like ffxi
|
||||||
private DateTime deaggroTime;
|
protected DateTime deaggroTime;
|
||||||
private DateTime neutralTime;
|
protected DateTime neutralTime;
|
||||||
private DateTime waitTime;
|
protected DateTime waitTime;
|
||||||
|
|
||||||
private bool firstSpell = true;
|
private bool firstSpell = true;
|
||||||
private DateTime lastRoamUpdate;
|
protected DateTime lastRoamUpdate;
|
||||||
private DateTime battleStartTime;
|
protected DateTime battleStartTime;
|
||||||
|
|
||||||
private new BattleNpc owner;
|
protected new BattleNpc owner;
|
||||||
public BattleNpcController(BattleNpc owner) :
|
public BattleNpcController(BattleNpc owner) :
|
||||||
base(owner)
|
base(owner)
|
||||||
{
|
{
|
||||||
|
@ -84,7 +84,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
return canEngage;
|
return canEngage;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryEngage(Character target)
|
protected bool TryEngage(Character target)
|
||||||
{
|
{
|
||||||
// todo:
|
// todo:
|
||||||
return true;
|
return true;
|
||||||
|
@ -127,7 +127,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
// todo:
|
// todo:
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DoRoamTick(DateTime tick)
|
protected virtual void DoRoamTick(DateTime tick)
|
||||||
{
|
{
|
||||||
if (owner.hateContainer.GetHateList().Count > 0)
|
if (owner.hateContainer.GetHateList().Count > 0)
|
||||||
{
|
{
|
||||||
|
@ -166,15 +166,18 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
{
|
{
|
||||||
if (!owner.neutral && owner.IsAlive())
|
if (!owner.neutral && owner.IsAlive())
|
||||||
{
|
{
|
||||||
foreach (var player in owner.zone.GetActorsAroundActor<Player>(owner, 50))
|
foreach (var chara in owner.zone.GetActorsAroundActor<Character>(owner, 50))
|
||||||
{
|
{
|
||||||
|
if (owner.allegiance == chara.allegiance)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!owner.isMovingToSpawn && owner.aiContainer.pathFind.AtPoint() && owner.detectionType != DetectionType.None)
|
if (!owner.isMovingToSpawn && owner.aiContainer.pathFind.AtPoint() && owner.detectionType != DetectionType.None)
|
||||||
{
|
{
|
||||||
uint levelDifference = (uint)Math.Abs(owner.charaWork.parameterSave.state_mainSkillLevel - player.charaWork.parameterSave.state_mainSkillLevel);
|
uint levelDifference = (uint)Math.Abs(owner.charaWork.parameterSave.state_mainSkillLevel - chara.charaWork.parameterSave.state_mainSkillLevel);
|
||||||
|
|
||||||
if (levelDifference <= 10 || (owner.detectionType & DetectionType.IgnoreLevelDifference) != 0 && CanAggroTarget(player))
|
if (levelDifference <= 10 || (owner.detectionType & DetectionType.IgnoreLevelDifference) != 0 && CanAggroTarget(chara))
|
||||||
{
|
{
|
||||||
owner.hateContainer.AddBaseHate(player);
|
owner.hateContainer.AddBaseHate(chara);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,7 +191,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DoCombatTick(DateTime tick)
|
protected virtual void DoCombatTick(DateTime tick, List<Character> contentGroupCharas = null)
|
||||||
{
|
{
|
||||||
HandleHate();
|
HandleHate();
|
||||||
|
|
||||||
|
@ -200,10 +203,10 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
}
|
}
|
||||||
|
|
||||||
Move();
|
Move();
|
||||||
lua.LuaEngine.CallLuaBattleFunction(owner, "onCombatTick", owner, owner.target, Utils.UnixTimeStampUTC(tick));
|
lua.LuaEngine.CallLuaBattleFunction(owner, "onCombatTick", owner, owner.target, Utils.UnixTimeStampUTC(tick), contentGroupCharas);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Move()
|
protected virtual void Move()
|
||||||
{
|
{
|
||||||
if (!owner.aiContainer.CanFollowPath())
|
if (!owner.aiContainer.CanFollowPath())
|
||||||
{
|
{
|
||||||
|
@ -257,7 +260,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FaceTarget()
|
protected void FaceTarget()
|
||||||
{
|
{
|
||||||
// todo: check if stunned etc
|
// todo: check if stunned etc
|
||||||
if (owner.statusEffects.HasStatusEffectsByFlag(StatusEffectFlags.PreventAction))
|
if (owner.statusEffects.HasStatusEffectsByFlag(StatusEffectFlags.PreventAction))
|
||||||
|
@ -269,7 +272,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CanMoveForward(float distance)
|
protected bool CanMoveForward(float distance)
|
||||||
{
|
{
|
||||||
// todo: check spawn leash and stuff
|
// todo: check spawn leash and stuff
|
||||||
if (!owner.IsCloseToSpawn())
|
if (!owner.IsCloseToSpawn())
|
||||||
|
@ -283,7 +286,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanAggroTarget(Character target)
|
public virtual bool CanAggroTarget(Character target)
|
||||||
{
|
{
|
||||||
if (owner.neutral || owner.detectionType == DetectionType.None || owner.IsDead())
|
if (owner.neutral || owner.detectionType == DetectionType.None || owner.IsDead())
|
||||||
{
|
{
|
||||||
|
@ -303,7 +306,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanDetectTarget(Character target, bool forceSight = false)
|
public virtual bool CanDetectTarget(Character target, bool forceSight = false)
|
||||||
{
|
{
|
||||||
if (owner.IsDead())
|
if (owner.IsDead())
|
||||||
return false;
|
return false;
|
||||||
|
@ -359,12 +362,12 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanSeePoint(float x, float y, float z)
|
public virtual bool CanSeePoint(float x, float y, float z)
|
||||||
{
|
{
|
||||||
return NavmeshUtils.CanSee((Zone)owner.zone, owner.positionX, owner.positionY, owner.positionZ, x, y, z);
|
return NavmeshUtils.CanSee((Zone)owner.zone, owner.positionX, owner.positionY, owner.positionZ, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleHate()
|
protected virtual void HandleHate()
|
||||||
{
|
{
|
||||||
ChangeTarget(owner.hateContainer.GetMostHatedTarget());
|
ChangeTarget(owner.hateContainer.GetMostHatedTarget());
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.state
|
||||||
{
|
{
|
||||||
if (tick >= respawnTime)
|
if (tick >= respawnTime)
|
||||||
{
|
{
|
||||||
|
owner.ResetTempVars();
|
||||||
owner.Spawn(tick);
|
owner.Spawn(tick);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
23
FFXIVClassic Map Server/actors/chara/npc/Ally.cs
Normal file
23
FFXIVClassic Map Server/actors/chara/npc/Ally.cs
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
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.actors.chara.ai;
|
||||||
|
using FFXIVClassic_Map_Server.actors.chara.ai.controllers;
|
||||||
|
|
||||||
|
namespace FFXIVClassic_Map_Server.actors.chara.npc
|
||||||
|
{
|
||||||
|
class Ally : BattleNpc
|
||||||
|
{
|
||||||
|
// todo: ally class is probably not necessary
|
||||||
|
public Ally(int actorNumber, ActorClass actorClass, string uniqueId, Area spawnedArea, float posX, float posY, float posZ, float rot,
|
||||||
|
ushort actorState, uint animationId, string customDisplayName)
|
||||||
|
: base(actorNumber, actorClass, uniqueId, spawnedArea, posX, posY, posZ, rot, actorState, animationId, customDisplayName)
|
||||||
|
{
|
||||||
|
aiContainer = new AIContainer(this, new AllyController(this), new PathFind(this), new TargetFind(this));
|
||||||
|
this.allegiance = CharacterTargetingAllegiance.Player;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -54,10 +54,10 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
public DetectionType detectionType;
|
public DetectionType detectionType;
|
||||||
public KindredType kindredType;
|
public KindredType kindredType;
|
||||||
public bool neutral;
|
public bool neutral;
|
||||||
private uint despawnTime;
|
protected uint despawnTime;
|
||||||
private uint respawnTime;
|
protected uint respawnTime;
|
||||||
private uint spawnDistance;
|
protected uint spawnDistance;
|
||||||
private uint bnpcId;
|
protected uint bnpcId;
|
||||||
public Character lastAttacker;
|
public Character lastAttacker;
|
||||||
|
|
||||||
public uint spellListId, skillListId, dropListId;
|
public uint spellListId, skillListId, dropListId;
|
||||||
|
@ -69,7 +69,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
public ModifierList genusMods;
|
public ModifierList genusMods;
|
||||||
public ModifierList spawnMods;
|
public ModifierList spawnMods;
|
||||||
|
|
||||||
private Dictionary<MobModifier, Int64> mobModifiers = new Dictionary<MobModifier, Int64>();
|
protected Dictionary<MobModifier, Int64> mobModifiers = new Dictionary<MobModifier, Int64>();
|
||||||
|
|
||||||
public BattleNpc(int actorNumber, ActorClass actorClass, string uniqueId, Area spawnedArea, float posX, float posY, float posZ, float rot,
|
public BattleNpc(int actorNumber, ActorClass actorClass, string uniqueId, Area spawnedArea, float posX, float posY, float posZ, float rot,
|
||||||
ushort actorState, uint animationId, string customDisplayName)
|
ushort actorState, uint animationId, string customDisplayName)
|
||||||
|
@ -379,16 +379,30 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
public override void OnCast(State state, BattleAction[] actions, ref BattleAction[] errors)
|
public override void OnCast(State state, BattleAction[] actions, ref BattleAction[] errors)
|
||||||
{
|
{
|
||||||
base.OnCast(state, actions, ref errors);
|
base.OnCast(state, actions, ref errors);
|
||||||
|
|
||||||
|
if (GetMobMod((uint)MobModifier.SpellScript) != 0)
|
||||||
|
foreach (var action in actions)
|
||||||
|
lua.LuaEngine.CallLuaBattleFunction(this, "onCast", this, zone.FindActorInArea<Character>(action.targetId), ((MagicState)state).GetSpell(), action);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnAbility(State state, BattleAction[] actions, ref BattleAction[] errors)
|
public override void OnAbility(State state, BattleAction[] actions, ref BattleAction[] errors)
|
||||||
{
|
{
|
||||||
base.OnAbility(state, actions, ref errors);
|
base.OnAbility(state, actions, ref errors);
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (GetMobMod((uint)MobModifier.AbilityScript) != 0)
|
||||||
|
foreach (var action in actions)
|
||||||
|
lua.LuaEngine.CallLuaBattleFunction(this, "onAbility", this, zone.FindActorInArea<Character>(action.targetId), ((AbilityState)state).GetAbility(), action);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnWeaponSkill(State state, BattleAction[] actions, ref BattleAction[] errors)
|
public override void OnWeaponSkill(State state, BattleAction[] actions, ref BattleAction[] errors)
|
||||||
{
|
{
|
||||||
base.OnWeaponSkill(state, actions, ref errors);
|
base.OnWeaponSkill(state, actions, ref errors);
|
||||||
|
|
||||||
|
if (GetMobMod((uint)MobModifier.WeaponSkillScript) != 0)
|
||||||
|
foreach (var action in actions)
|
||||||
|
lua.LuaEngine.CallLuaBattleFunction(this, "onWeaponSkill", this, zone.FindActorInArea<Character>(action.targetId), ((WeaponSkillState)state).GetWeaponSkill(), action);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnSpawn()
|
public override void OnSpawn()
|
||||||
|
@ -434,10 +448,10 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
mobModifiers.Add((MobModifier)mobModId, val);
|
mobModifiers.Add((MobModifier)mobModId, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDamageTaken(Character attacker, BattleAction action)
|
public override void OnDamageTaken(Character attacker, BattleAction action, DamageTakenType damageTakenType)
|
||||||
{
|
{
|
||||||
if (GetMobMod((uint)MobModifier.DefendScript) != 0)
|
if (GetMobMod((uint)MobModifier.DefendScript) != 0)
|
||||||
lua.LuaEngine.CallLuaBattleFunction(this, "onDamageTaken", this, attacker, action.amount);
|
lua.LuaEngine.CallLuaBattleFunction(this, "onDamageTaken", this, attacker, action.amount, (uint)damageTakenType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.npc
|
||||||
AttackScript = 17, // call my script's onAttack whenever i attack
|
AttackScript = 17, // call my script's onAttack whenever i attack
|
||||||
DefendScript = 18, // call my script's onDamageTaken whenever i take damage
|
DefendScript = 18, // call my script's onDamageTaken whenever i take damage
|
||||||
SpellScript = 19, // call my script's onSpellCast whenever i finish casting
|
SpellScript = 19, // call my script's onSpellCast whenever i finish casting
|
||||||
WeaponskillScript = 20, // call my script's onWeaponSkill whenever i finish using a weaponskill
|
WeaponSkillScript = 20, // call my script's onWeaponSkill whenever i finish using a weaponskill
|
||||||
AbilityScript = 21, // call my script's onAbility whenever i finish using an ability
|
AbilityScript = 21, // call my script's onAbility whenever i finish using an ability
|
||||||
CallForHelp = 22, // actor with this id outside of target's party with this can attack me
|
CallForHelp = 22, // actor with this id outside of target's party with this can attack me
|
||||||
FreeForAll = 23, // any actor can attack me
|
FreeForAll = 23, // any actor can attack me
|
||||||
|
|
|
@ -169,5 +169,9 @@ namespace FFXIVClassic_Map_Server.actors.group
|
||||||
DeleteGroup();
|
DeleteGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<uint> GetMembers()
|
||||||
|
{
|
||||||
|
return members;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
78
data/scripts/ally.lua
Normal file
78
data/scripts/ally.lua
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
require ("global")
|
||||||
|
require ("magic")
|
||||||
|
require ("weaponskill")
|
||||||
|
|
||||||
|
allyGlobal =
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
function allyGlobal.onSpawn(ally, target)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.onEngage(ally, target)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.onAttack(ally, target, damage)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.onDamageTaken(ally, attacker, damage)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.onCombatTick(ally, target, tick, contentGroupCharas)
|
||||||
|
allyGlobal.HelpPlayers(ally, contentGroupCharas);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.onDeath(ally, player, lastAttacker)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.onDespawn(ally)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.HelpPlayers(ally, contentGroupCharas, pickRandomTarget)
|
||||||
|
if contentGroupCharas then
|
||||||
|
for _, chara in pairs(contentGroupCharas) do
|
||||||
|
if chara then
|
||||||
|
-- probably a player, or another ally
|
||||||
|
-- todo: queue support actions, heal, try pull hate off player etc
|
||||||
|
if chara.IsPlayer() then
|
||||||
|
-- do stuff
|
||||||
|
if not ally.IsEngaged() then
|
||||||
|
if chara.IsEngaged() then
|
||||||
|
allyGlobal.EngageTarget(ally, target, nil);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
elseif chara.IsMonster() and chara.IsEngaged() then
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.HealPlayer(ally, player)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.SupportAction(ally, player)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function allyGlobal.EngageTarget(ally, target, contentGroupCharas)
|
||||||
|
if contentGroupCharas then
|
||||||
|
for _, chara in pairs(contentGroupCharas) do
|
||||||
|
if chara.IsMonster() then
|
||||||
|
if chara.allegiance ~= ally.allegiance then
|
||||||
|
ally.Engage(chara);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
elseif target then
|
||||||
|
ally.Engage(target);
|
||||||
|
end;
|
||||||
|
end;
|
27
data/scripts/commands/weaponskill/skull_sunder.lua
Normal file
27
data/scripts/commands/weaponskill/skull_sunder.lua
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
require("global");
|
||||||
|
require("weaponskill");
|
||||||
|
|
||||||
|
function onSkillPrepare(caster, target, spell)
|
||||||
|
return 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function onSkillStart(caster, target, spell)
|
||||||
|
return 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function onSkillFinish(caster, target, spell, action)
|
||||||
|
local damage = math.random(10, 100);
|
||||||
|
|
||||||
|
-- todo: populate a global script with statuses and modifiers
|
||||||
|
action.worldMasterTextId = 0x765D;
|
||||||
|
|
||||||
|
-- todo: populate a global script with statuses and modifiers
|
||||||
|
-- magic.HandleAttackSkill(caster, target, spell, action)
|
||||||
|
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
|
||||||
|
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
|
||||||
|
|
||||||
|
if target.hateContainer then
|
||||||
|
target.hateContainer.UpdateHate(caster, damage);
|
||||||
|
end;
|
||||||
|
return damage;
|
||||||
|
end;
|
|
@ -28,7 +28,7 @@ function onUpdate()
|
||||||
end
|
end
|
||||||
|
|
||||||
function onTalkEvent(player, npc)
|
function onTalkEvent(player, npc)
|
||||||
;
|
|
||||||
if (player:HasQuest(110001) == true) then
|
if (player:HasQuest(110001) == true) then
|
||||||
man0l0Quest = player:GetQuest("man0l0");
|
man0l0Quest = player:GetQuest("man0l0");
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
require ("global")
|
require ("global")
|
||||||
require ("tutorial")
|
require ("tutorial")
|
||||||
|
require ("modifiers")
|
||||||
require ("quests/man/man0g0")
|
require ("quests/man/man0g0")
|
||||||
|
|
||||||
--processTtrBtl001: Active Mode Tutorial
|
--processTtrBtl001: Active Mode Tutorial
|
||||||
|
@ -9,6 +10,37 @@ function init()
|
||||||
return "/Director/Quest/QuestDirectorMan0g001";
|
return "/Director/Quest/QuestDirectorMan0g001";
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function onCreateContentArea(players, director, contentArea, contentGroup)
|
||||||
|
|
||||||
|
local worldManager = GetWorldManager();
|
||||||
|
|
||||||
|
yshtola = GetWorldManager():SpawnBattleNpcById(6, contentArea);
|
||||||
|
stahlmann = GetWorldManager():SpawnBattleNpcById(7, contentArea);
|
||||||
|
|
||||||
|
mob1 = GetWorldManager():SpawnBattleNpcById(3, contentArea);
|
||||||
|
mob2 = GetWorldManager():SpawnBattleNpcById(4, contentArea);
|
||||||
|
mob3 = GetWorldManager():SpawnBattleNpcById(5, contentArea);
|
||||||
|
|
||||||
|
local added = false;
|
||||||
|
for _, player in pairs(players) do
|
||||||
|
if player.currentParty and not added then
|
||||||
|
player.currentParty.AddMember(yshtola);
|
||||||
|
player.currentParty.AddMember(stahlmann);
|
||||||
|
added = true;
|
||||||
|
end;
|
||||||
|
-- dont let player die
|
||||||
|
player.SetModifier(modifiersGlobal.MinimumHpLock, 1);
|
||||||
|
|
||||||
|
contentGroup:AddMember(player);
|
||||||
|
end;
|
||||||
|
contentGroup:AddMember(director);
|
||||||
|
contentGroup:AddMember(yshtola);
|
||||||
|
contentGroup:AddMember(stahlmann);
|
||||||
|
contentGroup:AddMember(mob1);
|
||||||
|
contentGroup:AddMember(mob2);
|
||||||
|
contentGroup:AddMember(mob3);
|
||||||
|
end
|
||||||
|
|
||||||
function onEventStarted(player, actor, triggerName)
|
function onEventStarted(player, actor, triggerName)
|
||||||
|
|
||||||
man0g0Quest = player:GetQuest("Man0g0");
|
man0g0Quest = player:GetQuest("Man0g0");
|
||||||
|
@ -16,30 +48,20 @@ function onEventStarted(player, actor, triggerName)
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrBtl001", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrBtl001", nil, nil, nil);
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
waitForSignal("playerActive");
|
waitForSignal("playerActive");
|
||||||
wait(1); --If this isn't here, the scripts bugs out. TODO: Find a better alternative.
|
wait(2); --If this isn't here, the scripts bugs out. TODO: Find a better alternative.
|
||||||
kickEventContinue(player, actor, "noticeEvent", "noticeEvent");
|
kickEventContinue(player, actor, "noticeEvent", "noticeEvent");
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrBtl002", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrBtl002", nil, nil, nil);
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
wait(4);
|
|
||||||
closeTutorialWidget(player);
|
closeTutorialWidget(player);
|
||||||
showTutorialSuccessWidget(player, 9055); --Open TutorialSuccessWidget for attacking enemy
|
|
||||||
wait(3);
|
wait(3);
|
||||||
|
|
||||||
|
man0g0Quest:NextPhase(5);
|
||||||
openTutorialWidget(player, CONTROLLER_KEYBOARD, TUTORIAL_TP);
|
openTutorialWidget(player, CONTROLLER_KEYBOARD, TUTORIAL_TP);
|
||||||
wait(5);
|
wait(5);
|
||||||
closeTutorialWidget(player);
|
|
||||||
openTutorialWidget(player, CONTROLLER_KEYBOARD, TUTORIAL_WEAPONSKILLS);
|
|
||||||
wait(4); --Should be wait for weaponskillUsed signal
|
|
||||||
closeTutorialWidget(player);
|
|
||||||
showTutorialSuccessWidget(player, 9065); --Open TutorialSuccessWidget for weapon skill
|
|
||||||
|
|
||||||
wait(6); --Should be wait for mobkill
|
man0g0Quest:NextPhase(6);
|
||||||
worldMaster = GetWorldMaster();
|
closeTutorialWidget(player);
|
||||||
player:SendDataPacket("attention", worldMaster, "", 51073, 2);
|
|
||||||
wait(7);
|
|
||||||
player:ChangeMusic(7);
|
|
||||||
player:ChangeState(0);
|
|
||||||
kickEventContinue(player, actor, "noticeEvent", "noticeEvent");
|
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent020_1", nil, nil, nil);
|
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
IF DoW:
|
IF DoW:
|
||||||
|
@ -54,10 +76,10 @@ function onEventStarted(player, actor, triggerName)
|
||||||
OpenWidget (DEFEAT ENEMY)
|
OpenWidget (DEFEAT ENEMY)
|
||||||
]]
|
]]
|
||||||
|
|
||||||
man0g0Quest:NextPhase(10);
|
--man0g0Quest:NextPhase(10);
|
||||||
player:EndEvent();
|
--player:EndEvent();
|
||||||
|
|
||||||
GetWorldManager():DoZoneChange(player, 155, "PrivateAreaMasterPast", 1, 15, 175.38, -1.21, -1156.51, -2.1);
|
--GetWorldManager():DoZoneChange(player, 155, "PrivateAreaMasterPast", 1, 15, 175.38, -1.21, -1156.51, -2.1);
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,9 @@ function onCreateContentArea(players, director, contentArea, contentGroup)
|
||||||
mob2 = contentArea:SpawnActor(2205403, "mob2", -3.02, 17.35, 14.24, -2.81);
|
mob2 = contentArea:SpawnActor(2205403, "mob2", -3.02, 17.35, 14.24, -2.81);
|
||||||
mob3 = contentArea:SpawnActor(2205403, "mob3", -3.02-3, 17.35, 14.24, -2.81);
|
mob3 = contentArea:SpawnActor(2205403, "mob3", -3.02-3, 17.35, 14.24, -2.81);
|
||||||
|
|
||||||
|
for _, player in pairs(players) do
|
||||||
contentGroup:AddMember(player);
|
contentGroup:AddMember(player);
|
||||||
|
end;
|
||||||
contentGroup:AddMember(director);
|
contentGroup:AddMember(director);
|
||||||
contentGroup:AddMember(yshtola);
|
contentGroup:AddMember(yshtola);
|
||||||
contentGroup:AddMember(stahlmann);
|
contentGroup:AddMember(stahlmann);
|
||||||
|
|
|
@ -109,6 +109,14 @@ STAT_HARVEST_POTENCY = 33;
|
||||||
STAT_HARVEST_LIMIT = 34;
|
STAT_HARVEST_LIMIT = 34;
|
||||||
STAT_HARVEST_RATE = 35;
|
STAT_HARVEST_RATE = 35;
|
||||||
|
|
||||||
|
-- DAMAGE TAKEN TYPE
|
||||||
|
DAMAGE_TAKEN_TYPE_NONE = 0;
|
||||||
|
DAMAGE_TAKEN_TYPE_ATTACK = 1;
|
||||||
|
DAMAGE_TAKEN_TYPE_MAGIC = 2;
|
||||||
|
DAMAGE_TAKEN_TYPE_WEAPONSKILL = 3;
|
||||||
|
DAMAGE_TAKEN_TYPE_ABILITY = 4;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--UTILS
|
--UTILS
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
require ("global")
|
||||||
|
require ("modifiers")
|
||||||
|
require ("ally")
|
||||||
|
|
||||||
|
function onSpawn(mob)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
function onDamageTaken(mob, attacker, damage, damageType)
|
||||||
|
if attacker.IsPlayer() then
|
||||||
|
local man0g0Quest = attacker:GetQuest("Man0g0");
|
||||||
|
if damageType == DAMAGE_TAKEN_TYPE_ATTACK then
|
||||||
|
if man0g0Quest:GetPhase() == 5 then
|
||||||
|
closeTutorialWidget(player);
|
||||||
|
showTutorialSuccessWidget(player, 9055); --Open TutorialSuccessWidget for attacking enemy
|
||||||
|
man0g0Quest:NextPhase(6);
|
||||||
|
end;
|
||||||
|
elseif damageType == DAMAGE_TAKEN_TYPE_WEAPONSKILL or damageType == DAMAGE_TAKEN_TYPE_MAGIC then
|
||||||
|
if man0g0Quest:GetPhase() == 6 then
|
||||||
|
closeTutorialWidget(player);
|
||||||
|
showTutorialSuccessWidget(player, 9065); --Open TutorialSuccessWidget for weapon skill
|
||||||
|
man0g0Quest:NextPhase(7);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function onDeath(mob, player, lastAttacker)
|
||||||
|
if player then
|
||||||
|
local man0g0Quest = player:GetQuest("Man0g0");
|
||||||
|
if man0g0Quest and man0g0Quest:GetPhase() >= 7 then
|
||||||
|
man0g0Quest:NextPhase(man0g0Quest:GetPhase() + 1);
|
||||||
|
mob:SetTempVar("playerId", player.actorId);
|
||||||
|
if man0g0Quest:GetPhase() == 10 then
|
||||||
|
local worldMaster = GetWorldMaster();
|
||||||
|
player:SendDataPacket("attention", worldMaster, "", 51073, 1);
|
||||||
|
kickEventContinue(player, director, "noticeEvent", "noticeEvent");
|
||||||
|
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent020_1", nil, nil, nil);
|
||||||
|
player:ChangeMusic(7);
|
||||||
|
player:Disengage(0x0000);
|
||||||
|
mob:SetTempVar("complete", 1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function onDespawn(mob)
|
||||||
|
if zone then
|
||||||
|
local player = zone.FindActorInArea(mob:GetTempVar("playerId"));
|
||||||
|
|
||||||
|
if player and mob:GetTempVar("complete") == 1 then
|
||||||
|
local man0g0Quest = player:GetQuest("Man0g0");
|
||||||
|
player:GetZone():ContentFinished();
|
||||||
|
player:EndEvent();
|
||||||
|
GetWorldManager():DoZoneChange(player, 155, "PrivateAreaMasterPast", 1, 15, 175.38, -1.21, -1156.51, -2.1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
11
data/scripts/unique/fst0Battle03/Monster/papalymo.lua
Normal file
11
data/scripts/unique/fst0Battle03/Monster/papalymo.lua
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
require ("global")
|
||||||
|
|
||||||
|
require ("ally")
|
||||||
|
|
||||||
|
function onSpawn(ally)
|
||||||
|
ally.isAutoAttackEnabled = false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function onCombatTick(ally, target, tick, contentGroupCharas)
|
||||||
|
allyGlobal.onCombatTick(ally, target, tick, contentGroupCharas);
|
||||||
|
end;
|
11
data/scripts/unique/fst0Battle03/Monster/yda.lua
Normal file
11
data/scripts/unique/fst0Battle03/Monster/yda.lua
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
require ("global")
|
||||||
|
|
||||||
|
require ("ally")
|
||||||
|
|
||||||
|
function onSpawn(ally)
|
||||||
|
ally.isAutoAttackEnabled = false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function onCombatTick(ally, target, tick, contentGroupCharas)
|
||||||
|
allyGlobal.onCombatTick(ally, target, tick, contentGroupCharas);
|
||||||
|
end;
|
|
@ -53,8 +53,9 @@ CREATE TABLE `server_battlenpc_genus` (
|
||||||
`lightning` float NOT NULL DEFAULT '1',
|
`lightning` float NOT NULL DEFAULT '1',
|
||||||
`earth` float NOT NULL DEFAULT '1',
|
`earth` float NOT NULL DEFAULT '1',
|
||||||
`water` float NOT NULL DEFAULT '1',
|
`water` float NOT NULL DEFAULT '1',
|
||||||
|
`element` tinyint(4) unsigned NOT NULL DEFAULT '0',
|
||||||
PRIMARY KEY (`genusId`)
|
PRIMARY KEY (`genusId`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
@ -64,71 +65,71 @@ CREATE TABLE `server_battlenpc_genus` (
|
||||||
LOCK TABLES `server_battlenpc_genus` WRITE;
|
LOCK TABLES `server_battlenpc_genus` WRITE;
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_genus` DISABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_genus` DISABLE KEYS */;
|
||||||
set autocommit=0;
|
set autocommit=0;
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (1,'Aldgoat',1,0,1,'Beast',1,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (1,'Aldgoat',1,0,1,'Beast',1,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (2,'Antelope',1,0,1,'Beast',1,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (2,'Antelope',1,0,1,'Beast',1,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (3,'Wolf',1,0,1,'Beast',2,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (3,'Wolf',1,0,1,'Beast',2,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (4,'Opo-opo',1,0,1,'Beast',1,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (4,'Opo-opo',1,0,1,'Beast',1,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (5,'Coeurl',1,0,1,'Beast',15,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (5,'Coeurl',1,0,1,'Beast',15,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (6,'Goobbue',1,0,1,'Beast',4,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (6,'Goobbue',1,0,1,'Beast',4,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (7,'Sheep',1,0,1,'Beast',1,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (7,'Sheep',1,0,1,'Beast',1,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (8,'Buffalo',1,0,1,'Beast',4,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (8,'Buffalo',1,0,1,'Beast',4,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (9,'Boar',1,0,1,'Beast',2,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (9,'Boar',1,0,1,'Beast',2,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (10,'Moon-Mouse?',1,0,1,'Beast',2,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (10,'Moon-Mouse?',1,0,1,'Beast',2,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (11,'Mole',1,0,1,'Beast',4,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (11,'Mole',1,0,1,'Beast',4,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (12,'Rodent',1,0,1,'Beast',2,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (12,'Rodent',1,0,1,'Beast',2,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (13,'Cactuar',1,0,2,'Plantoid',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (13,'Cactuar',1,0,2,'Plantoid',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (14,'Funguar',1,0,2,'Plantoid',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (14,'Funguar',1,0,2,'Plantoid',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (15,'Flying-trap',1,0,2,'Plantoid',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (15,'Flying-trap',1,0,2,'Plantoid',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (16,'Morbol',1,0,2,'Plantoid',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (16,'Morbol',1,0,2,'Plantoid',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (17,'Orobon',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (17,'Orobon',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (18,'Gigantoad',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (18,'Gigantoad',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (19,'Salamander',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (19,'Salamander',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (20,'Jelly-fish',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (20,'Jelly-fish',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (21,'Slug',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (21,'Slug',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (22,'Megalo-crab',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (22,'Megalo-crab',1,0,3,'Aquan',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (23,'Amaalja',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (23,'Amaalja',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (24,'Ixal',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (24,'Ixal',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (25,'Qiqirn',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (25,'Qiqirn',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (26,'Goblin',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (26,'Goblin',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (27,'Kobold',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (27,'Kobold',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (28,'Sylph',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (28,'Sylph',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (29,'Person',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (29,'Person',1,0,4,'Spoken',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (30,'Drake',1,0,5,'Reptilian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (30,'Drake',1,0,5,'Reptilian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (31,'Basilisk',1,0,5,'Reptilian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (31,'Basilisk',1,0,5,'Reptilian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (32,'Raptor',1,0,5,'Reptilian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (32,'Raptor',1,0,5,'Reptilian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (33,'Ant-ring',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (33,'Ant-ring',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (34,'Swarm',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (34,'Swarm',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (35,'Diremite',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (35,'Diremite',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (36,'Chigoe',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (36,'Chigoe',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (37,'Gnat',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (37,'Gnat',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (38,'Beetle',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (38,'Beetle',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (39,'Yarzon',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (39,'Yarzon',1,0,6,'Insect',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (40,'Apkallu',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (40,'Apkallu',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (41,'Vulture',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (41,'Vulture',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (42,'Dodo',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (42,'Dodo',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (43,'Bat',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (43,'Bat',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (44,'Hippogryph',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (44,'Hippogryph',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (45,'Puk',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (45,'Puk',1,0,7,'Avian',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (46,'Ghost',1,0,8,'Undead',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (46,'Ghost',1,0,8,'Undead',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (47,'The-Damned',1,0,8,'Undead',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (47,'The-Damned',1,0,8,'Undead',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (48,'Wight',1,0,8,'Undead',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (48,'Wight',1,0,8,'Undead',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (49,'Coblyn',1,0,9,'Cursed',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (49,'Coblyn',1,0,9,'Cursed',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (50,'Spriggan',1,0,9,'Cursed',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (50,'Spriggan',1,0,9,'Cursed',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (51,'Ahriman',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (51,'Ahriman',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (52,'Imp',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (52,'Imp',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (53,'Will-O-Wisp',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (53,'Will-O-Wisp',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (54,'Fire-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (54,'Fire-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (55,'Water-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (55,'Water-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (56,'Earth-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (56,'Earth-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (57,'Lightning-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (57,'Lightning-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (58,'Ice-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (58,'Ice-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (59,'Wind-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (59,'Wind-Elemental',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (60,'Ogre',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (60,'Ogre',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (61,'Phurble',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (61,'Phurble',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (62,'Plasmoid',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (62,'Plasmoid',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (63,'Flan',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (63,'Flan',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (64,'Bomb',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (64,'Bomb',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
INSERT INTO `server_battlenpc_genus` VALUES (65,'Grenade',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
|
INSERT INTO `server_battlenpc_genus` VALUES (65,'Grenade',1,0,10,'Voidsent',0,100,100,100,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0);
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_genus` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_genus` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
commit;
|
commit;
|
||||||
|
@ -142,4 +143,4 @@ commit;
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2017-09-11 23:51:16
|
-- Dump completed on 2017-09-16 2:42:51
|
||||||
|
|
|
@ -50,4 +50,4 @@ commit;
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2017-09-11 23:52:18
|
-- Dump completed on 2017-09-16 2:43:01
|
||||||
|
|
|
@ -25,7 +25,6 @@ DROP TABLE IF EXISTS `server_battlenpc_groups`;
|
||||||
CREATE TABLE `server_battlenpc_groups` (
|
CREATE TABLE `server_battlenpc_groups` (
|
||||||
`groupId` int(10) unsigned NOT NULL DEFAULT '0',
|
`groupId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
`poolId` int(10) unsigned NOT NULL DEFAULT '0',
|
`poolId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
`actorClassId` int(10) unsigned NOT NULL,
|
|
||||||
`scriptName` varchar(50) NOT NULL,
|
`scriptName` varchar(50) NOT NULL,
|
||||||
`minLevel` tinyint(3) unsigned NOT NULL DEFAULT '1',
|
`minLevel` tinyint(3) unsigned NOT NULL DEFAULT '1',
|
||||||
`maxLevel` tinyint(3) unsigned NOT NULL DEFAULT '1',
|
`maxLevel` tinyint(3) unsigned NOT NULL DEFAULT '1',
|
||||||
|
@ -51,7 +50,10 @@ CREATE TABLE `server_battlenpc_groups` (
|
||||||
LOCK TABLES `server_battlenpc_groups` WRITE;
|
LOCK TABLES `server_battlenpc_groups` WRITE;
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_groups` DISABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_groups` DISABLE KEYS */;
|
||||||
set autocommit=0;
|
set autocommit=0;
|
||||||
INSERT INTO `server_battlenpc_groups` VALUES (1,1,2104001,'wharf_rat',1,1,10,0,0,0,0,0,0,0,'',0,170);
|
INSERT INTO `server_battlenpc_groups` VALUES (1,1,'wharf_rat',1,1,10,0,0,0,0,0,0,0,'',0,170);
|
||||||
|
INSERT INTO `server_battlenpc_groups` VALUES (2,2,'bloodthirsty_wolf',1,1,0,0,0,0,0,1,0,0,'',0,166);
|
||||||
|
INSERT INTO `server_battlenpc_groups` VALUES (3,3,'yda',1,1,0,0,0,0,1,1,0,0,'',0,166);
|
||||||
|
INSERT INTO `server_battlenpc_groups` VALUES (4,4,'papalymo',1,1,0,0,0,0,1,1,0,0,'',0,166);
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_groups` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_groups` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
commit;
|
commit;
|
||||||
|
@ -65,4 +67,4 @@ commit;
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2017-09-07 21:54:42
|
-- Dump completed on 2017-09-16 2:42:34
|
||||||
|
|
|
@ -26,7 +26,8 @@ CREATE TABLE `server_battlenpc_pool_mods` (
|
||||||
`poolId` int(10) unsigned NOT NULL,
|
`poolId` int(10) unsigned NOT NULL,
|
||||||
`modId` smallint(5) unsigned NOT NULL,
|
`modId` smallint(5) unsigned NOT NULL,
|
||||||
`modVal` bigint(20) NOT NULL,
|
`modVal` bigint(20) NOT NULL,
|
||||||
`isMobMod` tinyint(1) unsigned NOT NULL DEFAULT '0'
|
`isMobMod` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`poolId`,`modId`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
@ -37,6 +38,8 @@ CREATE TABLE `server_battlenpc_pool_mods` (
|
||||||
LOCK TABLES `server_battlenpc_pool_mods` WRITE;
|
LOCK TABLES `server_battlenpc_pool_mods` WRITE;
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_pool_mods` DISABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_pool_mods` DISABLE KEYS */;
|
||||||
set autocommit=0;
|
set autocommit=0;
|
||||||
|
INSERT INTO `server_battlenpc_pool_mods` VALUES (2,2,3,1);
|
||||||
|
INSERT INTO `server_battlenpc_pool_mods` VALUES (2,3,3,1);
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_pool_mods` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_pool_mods` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
commit;
|
commit;
|
||||||
|
@ -50,4 +53,4 @@ commit;
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2017-09-11 23:52:06
|
-- Dump completed on 2017-09-16 2:43:11
|
||||||
|
|
|
@ -35,7 +35,7 @@ CREATE TABLE `server_battlenpc_pools` (
|
||||||
`immunity` int(10) unsigned NOT NULL DEFAULT '0',
|
`immunity` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
`linkType` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
`linkType` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||||
`spellListId` int(10) unsigned NOT NULL DEFAULT '0',
|
`spellListId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
`skillListId` int(10) unsigned NOT NULL,
|
`skillListId` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
PRIMARY KEY (`poolId`)
|
PRIMARY KEY (`poolId`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
@ -46,11 +46,12 @@ CREATE TABLE `server_battlenpc_pools` (
|
||||||
|
|
||||||
LOCK TABLES `server_battlenpc_pools` WRITE;
|
LOCK TABLES `server_battlenpc_pools` WRITE;
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_pools` DISABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_pools` DISABLE KEYS */;
|
||||||
set autocommit=0;
|
|
||||||
INSERT INTO `server_battlenpc_pools` VALUES (1,2104001,'wharf_rat',12,0,1,4200,1,0,0,0,0,0);
|
INSERT INTO `server_battlenpc_pools` VALUES (1,2104001,'wharf_rat',12,0,1,4200,1,0,0,0,0,0);
|
||||||
|
INSERT INTO `server_battlenpc_pools` VALUES (2,2205403,'bloodthirsty_wolf',3,0,1,4200,1,0,0,0,0,0);
|
||||||
|
INSERT INTO `server_battlenpc_pools` VALUES (3,2290001,'yda',29,2,1,4200,1,0,0,0,0,0);
|
||||||
|
INSERT INTO `server_battlenpc_pools` VALUES (4,2290002,'papalymo',29,22,1,4200,1,0,0,0,0,0);
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_pools` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_pools` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
commit;
|
|
||||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
@ -61,4 +62,4 @@ commit;
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2017-09-11 23:51:35
|
-- Dump completed on 2017-09-16 2:40:29
|
||||||
|
|
|
@ -31,7 +31,7 @@ CREATE TABLE `server_battlenpc_spawn_locations` (
|
||||||
`positionZ` float NOT NULL,
|
`positionZ` float NOT NULL,
|
||||||
`rotation` float NOT NULL,
|
`rotation` float NOT NULL,
|
||||||
PRIMARY KEY (`bnpcId`)
|
PRIMARY KEY (`bnpcId`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
@ -43,6 +43,11 @@ LOCK TABLES `server_battlenpc_spawn_locations` WRITE;
|
||||||
set autocommit=0;
|
set autocommit=0;
|
||||||
INSERT INTO `server_battlenpc_spawn_locations` VALUES (1,'test',1,25.584,200,-450,-2.514);
|
INSERT INTO `server_battlenpc_spawn_locations` VALUES (1,'test',1,25.584,200,-450,-2.514);
|
||||||
INSERT INTO `server_battlenpc_spawn_locations` VALUES (2,'test',1,20,200,-444,-3.14);
|
INSERT INTO `server_battlenpc_spawn_locations` VALUES (2,'test',1,20,200,-444,-3.14);
|
||||||
|
INSERT INTO `server_battlenpc_spawn_locations` VALUES (3,'bloodthirsty_wolf',2,-3.02,17.35,14.24,-2.81);
|
||||||
|
INSERT INTO `server_battlenpc_spawn_locations` VALUES (4,'bloodthirsty_wolf',2,0.02,17.35,14.24,-2.81);
|
||||||
|
INSERT INTO `server_battlenpc_spawn_locations` VALUES (5,'bloodthirsty_wolf',2,-6.02,17.35,14.24,-2.81);
|
||||||
|
INSERT INTO `server_battlenpc_spawn_locations` VALUES (6,'yshtola',3,-8,16.35,6,0.5);
|
||||||
|
INSERT INTO `server_battlenpc_spawn_locations` VALUES (7,'papalymo',4,0,16.35,22,3);
|
||||||
/*!40000 ALTER TABLE `server_battlenpc_spawn_locations` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `server_battlenpc_spawn_locations` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
commit;
|
commit;
|
||||||
|
@ -56,4 +61,4 @@ commit;
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2017-09-11 23:51:12
|
-- Dump completed on 2017-09-16 2:43:52
|
||||||
|
|
|
@ -50,4 +50,4 @@ commit;
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2017-09-11 23:51:53
|
-- Dump completed on 2017-09-16 2:43:42
|
||||||
|
|
Loading…
Add table
Reference in a new issue