mirror of
https://github.com/sebastian-heinz/Arrowgene.DragonsDogmaOnline
synced 2026-08-03 11:12:41 -04:00
Merge branch 'sebastian-heinz:develop' into feat/serverside-translation
This commit is contained in:
commit
dad78cc2bb
37 changed files with 282685 additions and 282541 deletions
|
|
@ -23,19 +23,19 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.RogueFighter, 10, 100, 0)
|
||||
LibDdon.Enemy.Create(EnemyId.RogueFighter, 10, 62, 17)
|
||||
.SetDropsTable(dropsTable)
|
||||
.SetHmPresetNo(HmPresetId.RogueFighter)
|
||||
.SetNamedEnemyParams(NamedParamId.HiddenBeachRogue),
|
||||
LibDdon.Enemy.Create(EnemyId.RogueSeeker, 10, 100, 1)
|
||||
LibDdon.Enemy.Create(EnemyId.RogueSeeker, 10, 62, 18)
|
||||
.SetDropsTable(dropsTable)
|
||||
.SetHmPresetNo(HmPresetId.RogueSeeker)
|
||||
.SetNamedEnemyParams(NamedParamId.HiddenBeachRogue),
|
||||
LibDdon.Enemy.Create(EnemyId.RogueHunter, 10, 100, 2)
|
||||
LibDdon.Enemy.Create(EnemyId.RogueHunter, 10, 62, 19)
|
||||
.SetDropsTable(dropsTable)
|
||||
.SetHmPresetNo(HmPresetId.RogueHunter)
|
||||
.SetNamedEnemyParams(NamedParamId.HiddenBeachRogue),
|
||||
LibDdon.Enemy.Create(EnemyId.RogueMage, 10, 100, 3)
|
||||
LibDdon.Enemy.Create(EnemyId.RogueMage, 10, 62, 20)
|
||||
.SetDropsTable(dropsTable)
|
||||
.SetHmPresetNo(HmPresetId.RogueMage)
|
||||
.SetNamedEnemyParams(NamedParamId.HiddenBeachRogue),
|
||||
|
|
|
|||
|
|
@ -23,13 +23,21 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 384, 1)
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 52, 10)
|
||||
.SetDropsTable(namedEnemyDrops)
|
||||
.SetNamedEnemyParams(NamedParamId.MotherHarpy),
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 52, 11)
|
||||
.SetDropsTable(namedEnemyDrops)
|
||||
.SetNamedEnemyParams(NamedParamId.MotherHarpy),
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 52, 12)
|
||||
.SetDropsTable(namedEnemyDrops)
|
||||
.SetNamedEnemyParams(NamedParamId.MotherHarpy),
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 52, 13)
|
||||
.SetDropsTable(namedEnemyDrops)
|
||||
.SetNamedEnemyParams(NamedParamId.MotherHarpy),
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 52, 14)
|
||||
.SetDropsTable(namedEnemyDrops)
|
||||
.SetNamedEnemyParams(NamedParamId.MotherHarpy),
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 276, 0),
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 276, 2),
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 276, 3),
|
||||
LibDdon.Enemy.Create(EnemyId.Harpy, 13, 276, 4),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
|
||||
public override void Initialize()
|
||||
{
|
||||
var namedEnemyDrops = LibDdon.Enemy.GetDropsTable(EnemyId.HobgoblinLeader, 20).Clone()
|
||||
var namedEnemyDrops = LibDdon.Enemy.GetDropsTable(EnemyId.HobgoblinLeader, 19).Clone()
|
||||
.AddDrop(ItemId.BronzeScale0, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.HematiteSand, 1, 3, DropRate.VERY_COMMON)
|
||||
.AddDrop(ItemId.LeatherCord, 1, 1, DropRate.UNCOMMON)
|
||||
|
|
@ -36,20 +36,14 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.HobgoblinLeader, 20, 706, 2)
|
||||
LibDdon.Enemy.Create(EnemyId.HobgoblinLeader, 19, 105, 0)
|
||||
.SetDropsTable(namedEnemyDrops)
|
||||
.SetNamedEnemyParams(NamedParamId.GyumulTheSpikedHorn),
|
||||
CreateRandomHobgoblin(18, 510, 0)
|
||||
CreateRandomHobgoblin(18, 96, 1)
|
||||
.SetNamedEnemyParams(NamedParamId.GyumulsMinion),
|
||||
CreateRandomHobgoblin(18, 510, 1)
|
||||
CreateRandomHobgoblin(18, 96, 2)
|
||||
.SetNamedEnemyParams(NamedParamId.GyumulsMinion),
|
||||
CreateRandomHobgoblin(18, 510, 3)
|
||||
.SetNamedEnemyParams(NamedParamId.GyumulsMinion),
|
||||
CreateRandomHobgoblin(18, 510, 4)
|
||||
.SetNamedEnemyParams(NamedParamId.GyumulsMinion),
|
||||
CreateRandomHobgoblin(18, 510, 5)
|
||||
.SetNamedEnemyParams(NamedParamId.GyumulsMinion),
|
||||
CreateRandomHobgoblin(18, 510, 6)
|
||||
CreateRandomHobgoblin(18, 96, 3)
|
||||
.SetNamedEnemyParams(NamedParamId.GyumulsMinion),
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,12 +24,18 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.Wight0, 23, 874, 0)
|
||||
LibDdon.Enemy.Create(EnemyId.Wight0, 23, 1336, 3)
|
||||
.SetIsBoss(true)
|
||||
.SetScale(115)
|
||||
.SetDropsTable(namedEnemyDrops)
|
||||
.SetNamedEnemyParams(NamedParamId.SpecterOfRuflow)
|
||||
.SetSpawnTime(GameTimeManager.NightTime),
|
||||
LibDdon.Enemy.Create(EnemyId.SkeletonKnight, 21, 95, 4)
|
||||
.SetNamedEnemyParams(NamedParamId.FormerVillager)
|
||||
.SetSpawnTime(GameTimeManager.NightTime),
|
||||
LibDdon.Enemy.Create(EnemyId.SkeletonKnight, 21, 95, 5)
|
||||
.SetNamedEnemyParams(NamedParamId.FormerVillager)
|
||||
.SetSpawnTime(GameTimeManager.NightTime),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
/**
|
||||
* @brief Enemy Spot in "Breya Coast" for "Deserted Village of Ruflow"
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(104);
|
||||
public override QuestAreaId AreaId => QuestAreaId.BreyaCoast;
|
||||
public override bool CautionPlayer => false;
|
||||
public override uint RequiredAreaRank => 7;
|
||||
|
||||
public class NamedParamId
|
||||
{
|
||||
public const uint FormerVillager = 204; // Former Villager
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.Skeleton, 20, 73, 4)
|
||||
.SetNamedEnemyParams(NamedParamId.FormerVillager)
|
||||
.SetSpawnTime(GameTimeManager.NightTime)
|
||||
.SetStartThinkTblNo(8)
|
||||
.SetIsManualSet(true),
|
||||
LibDdon.Enemy.Create(EnemyId.Skeleton, 20, 73, 5)
|
||||
.SetNamedEnemyParams(NamedParamId.FormerVillager)
|
||||
.SetSpawnTime(GameTimeManager.NightTime)
|
||||
.SetStartThinkTblNo(8)
|
||||
.SetIsManualSet(true),
|
||||
LibDdon.Enemy.Create(EnemyId.Skeleton, 20, 73, 6)
|
||||
.SetNamedEnemyParams(NamedParamId.FormerVillager)
|
||||
.SetSpawnTime(GameTimeManager.NightTime)
|
||||
.SetStartThinkTblNo(8)
|
||||
.SetIsManualSet(true),
|
||||
LibDdon.Enemy.Create(EnemyId.Skeleton, 20, 73, 7)
|
||||
.SetNamedEnemyParams(NamedParamId.FormerVillager)
|
||||
.SetSpawnTime(GameTimeManager.NightTime)
|
||||
.SetStartThinkTblNo(8)
|
||||
.SetIsManualSet(true),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return new MonsterSpotInfo();
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(103);
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(98);
|
||||
public override QuestAreaId AreaId => QuestAreaId.BreyaCoast;
|
||||
public override uint RequiredAreaRank => 8;
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.ArmoredCyclops, 27, 1126, 0)
|
||||
LibDdon.Enemy.Create(EnemyId.ArmoredCyclops, 27, 2756, 2)
|
||||
.SetIsBoss(true)
|
||||
.SetScale(135)
|
||||
.SetDropsTable(namedEnemyDrops)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(147);
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(142);
|
||||
public override QuestAreaId AreaId => QuestAreaId.MysreeGrove;
|
||||
public override uint RequiredAreaRank => 3;
|
||||
|
||||
|
|
@ -23,16 +23,13 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
|
||||
var enemies = new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.BlueNewt, 35, 0)
|
||||
LibDdon.Enemy.Create(EnemyId.BlueNewt, 35, 173, 10)
|
||||
.SetDropsTable(dropsTable)
|
||||
.SetNamedEnemyParams(NamedParamId.CobaltNewt),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.BlueNewt, 35, 1)
|
||||
LibDdon.Enemy.Create(EnemyId.BlueNewt, 35, 173, 11)
|
||||
.SetDropsTable(dropsTable)
|
||||
.SetNamedEnemyParams(NamedParamId.CobaltNewt),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.BlueNewt, 35, 2)
|
||||
.SetDropsTable(dropsTable)
|
||||
.SetNamedEnemyParams(NamedParamId.CobaltNewt),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.BlueNewt, 35, 3)
|
||||
LibDdon.Enemy.Create(EnemyId.BlueNewt, 35, 173, 12)
|
||||
.SetDropsTable(dropsTable)
|
||||
.SetNamedEnemyParams(NamedParamId.CobaltNewt),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
{
|
||||
var enemies = new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.MoleTroll0, 43, 2)
|
||||
LibDdon.Enemy.Create(EnemyId.MoleTroll0, 43, 4080, 2)
|
||||
.SetIsBoss(true)
|
||||
.SetNamedEnemyParams(NamedParamId.JotunTheReturned),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
|
||||
public class NamedParamId
|
||||
{
|
||||
public const uint MergodaPatrolCorps = 251; // Mergoda Patrol Corps
|
||||
public const uint MergodaFemaleOfficer = 252; // Mergoda Female Officer
|
||||
}
|
||||
|
||||
|
|
@ -20,11 +19,10 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.Witch, 47, 0, isBoss: true)
|
||||
LibDdon.Enemy.Create(EnemyId.Witch, 47, 3024, 1)
|
||||
.SetIsBoss(true)
|
||||
.SetNamedEnemyParams(NamedParamId.MergodaFemaleOfficer)
|
||||
.AddDrop(ItemId.CrestOfGreaterMagick0, 1, 3, DropRate.UNCOMMON),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.AlchemizedSkeleton, 46, 1)
|
||||
.SetNamedEnemyParams(NamedParamId.MergodaPatrolCorps),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
/**
|
||||
* @brief Enemy Spot in "Zandora Wastelands" for "Twin Wheel Valley"
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(362);
|
||||
public override QuestAreaId AreaId => QuestAreaId.ZandoraWastelands;
|
||||
public override bool CautionPlayer => false;
|
||||
public override uint RequiredAreaRank => 2;
|
||||
|
||||
public class NamedParamId
|
||||
{
|
||||
public const uint MergodaPatrolCorps = 251; // Mergoda Patrol Corps
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.AlchemizedSkeleton, 46, 444, 6)
|
||||
.SetNamedEnemyParams(NamedParamId.MergodaPatrolCorps),
|
||||
LibDdon.Enemy.Create(EnemyId.AlchemizedSkeleton, 46, 444, 7)
|
||||
.SetNamedEnemyParams(NamedParamId.MergodaPatrolCorps),
|
||||
LibDdon.Enemy.Create(EnemyId.AlchemizedSkeleton, 46, 444, 8)
|
||||
.SetNamedEnemyParams(NamedParamId.MergodaPatrolCorps),
|
||||
LibDdon.Enemy.Create(EnemyId.AlchemizedSkeleton, 46, 444, 9)
|
||||
.SetNamedEnemyParams(NamedParamId.MergodaPatrolCorps),
|
||||
LibDdon.Enemy.Create(EnemyId.AlchemizedSkeleton, 46, 444, 10)
|
||||
.SetNamedEnemyParams(NamedParamId.MergodaPatrolCorps),
|
||||
LibDdon.Enemy.Create(EnemyId.AlchemizedSkeleton, 46, 444, 11)
|
||||
.SetNamedEnemyParams(NamedParamId.MergodaPatrolCorps),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return new MonsterSpotInfo();
|
||||
|
|
@ -6,26 +6,22 @@
|
|||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(360);
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(439);
|
||||
public override QuestAreaId AreaId => QuestAreaId.ZandoraWastelands;
|
||||
public override uint RequiredAreaRank => 4;
|
||||
|
||||
public class NamedParamId
|
||||
{
|
||||
public const uint RustedIronGiantWarrior = 249; // Rusted Iron Giant Warrior
|
||||
public const uint RustedAlchemizedGoblin = 250; // Rusted Alchemized Goblin
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.DamnedGolem, 49, 2, isBoss: true)
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedGolem, 49, 4617, 1)
|
||||
.SetIsBoss(true)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedIronGiantWarrior),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.DamnedGoblin, 49, 0)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.DamnedSlingGoblinFlask, 49, 1)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* @brief Enemy Spot in "Zandora Wastelands" for "Banded Haunt"
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(431);
|
||||
public override QuestAreaId AreaId => QuestAreaId.ZandoraWastelands;
|
||||
public override uint RequiredAreaRank => 4;
|
||||
|
||||
public class NamedParamId
|
||||
{
|
||||
public const uint RustedAlchemizedGoblin = 250; // Rusted Alchemized Goblin
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedGoblin, 49, 236, 3)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedGoblin, 49, 236, 4)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedGoblin, 49, 236, 5)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return new MonsterSpotInfo();
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* @brief Enemy Spot in "Zandora Wastelands" for "Banded Haunt"
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(437);
|
||||
public override QuestAreaId AreaId => QuestAreaId.ZandoraWastelands;
|
||||
public override uint RequiredAreaRank => 4;
|
||||
|
||||
public class NamedParamId
|
||||
{
|
||||
public const uint RustedAlchemizedGoblin = 250; // Rusted Alchemized Goblin
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedGoblin, 49, 236, 3)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedGoblin, 49, 236, 4)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedGoblin, 49, 236, 5)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return new MonsterSpotInfo();
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
* @brief Enemy Spot in "Zandora Wastelands" for "Banded Haunt"
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(438);
|
||||
public override QuestAreaId AreaId => QuestAreaId.ZandoraWastelands;
|
||||
public override uint RequiredAreaRank => 4;
|
||||
|
||||
public class NamedParamId
|
||||
{
|
||||
public const uint RustedAlchemizedGoblin = 250; // Rusted Alchemized Goblin
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedSlingGoblinFlask, 49, 236, 5)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedSlingGoblinFlask, 49, 236, 6)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedSlingGoblinFlask, 49, 236, 7)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedSlingGoblinFlask, 49, 236, 8)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
LibDdon.Enemy.Create(EnemyId.DamnedSlingGoblinFlask, 49, 236, 9)
|
||||
.SetNamedEnemyParams(NamedParamId.RustedAlchemizedGoblin),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return new MonsterSpotInfo();
|
||||
|
|
@ -27,15 +27,15 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
// TODO: Guessed based on item levels, but might need to be updated
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.BandedHunter, 48, 2)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian2)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.BandedFighter, 48, 0)
|
||||
LibDdon.Enemy.Create(EnemyId.BandedFighter, 48, 238, 0)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian0)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.BandedMage, 48, 1)
|
||||
LibDdon.Enemy.Create(EnemyId.BandedFighter, 48, 238, 1)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian0)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
LibDdon.Enemy.Create(EnemyId.BandedMage, 48, 238, 2)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian5)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
/**
|
||||
* @brief Enemy Spot in "Zandora Wastelands" for "South Mergoda Ruins"
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(409);
|
||||
public override QuestAreaId AreaId => QuestAreaId.ZandoraWastelands;
|
||||
public override uint RequiredAreaRank => 5;
|
||||
|
||||
public class NamedParamId
|
||||
{
|
||||
public const uint ZandoraBarbarian0 = 253; // Zandora Barbarian (Fighter)
|
||||
public const uint ZandoraBarbarian1 = 254; // Zandora Barbarian (Seeker)
|
||||
public const uint ZandoraBarbarian2 = 255; // Zandora Barbarian (Hunter)
|
||||
public const uint ZandoraBarbarian3 = 256; // Zandora Barbarian (Healer)
|
||||
public const uint ZandoraBarbarian4 = 257; // Zandora Barbarian (Defender)
|
||||
public const uint ZandoraBarbarian5 = 258; // Zandora Barbarian (Mage)
|
||||
public const uint ZandoraBarbarian6 = 259; // Zandora Barbarian (Warrior)
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
// TODO: Unable to locate what jewlery these enemies should drop
|
||||
// TODO: Guessed based on item levels, but might need to be updated
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.Create(EnemyId.BandedFighter, 48, 238, 0)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian0)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
LibDdon.Enemy.Create(EnemyId.BandedHunter, 48, 238, 1)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian2)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
LibDdon.Enemy.Create(EnemyId.BandedMage, 48, 238, 2)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian5)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
LibDdon.Enemy.Create(EnemyId.BandedHealer, 48, 238, 3)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian3)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
LibDdon.Enemy.Create(EnemyId.BandedFighter, 48, 238, 4)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian0)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
LibDdon.Enemy.Create(EnemyId.BandedHunter, 48, 238, 5)
|
||||
.SetNamedEnemyParams(NamedParamId.ZandoraBarbarian2)
|
||||
.AddDrop(ItemId.HighVitalityRing, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.SacredTreeRing, 1, 1, DropRate.VERY_RARE),
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return new MonsterSpotInfo();
|
||||
|
|
@ -21,24 +21,20 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.GeneralOrc, 56, 3)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants1)
|
||||
LibDdon.Enemy.Create(EnemyId.GeneralOrc, 56, 1526, 0)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcGeneralRemnant)
|
||||
.AddDrop(ItemId.RousingSteak, 1, 3, DropRate.UNCOMMON),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.OrcBattler, 56, 0)
|
||||
LibDdon.Enemy.Create(EnemyId.OrcBattler, 56, 356, 1)
|
||||
.SetRepopConditions(1, 10)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants0),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.OrcBattler, 56, 1)
|
||||
LibDdon.Enemy.Create(EnemyId.OrcBattler, 56, 356, 2)
|
||||
.SetRepopConditions(1, 10)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants0),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.OrcBattler, 56, 2)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants0),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.OrcBattler, 56, 4)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants0),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.OrcTrooper, 56, 5)
|
||||
LibDdon.Enemy.Create(EnemyId.OrcTrooper, 56, 307, 3)
|
||||
.SetRepopConditions(1, 10)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants1),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.OrcTrooper, 56, 6)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants1),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.OrcTrooper, 56, 8)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants1),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.OrcTrooper, 56, 9)
|
||||
LibDdon.Enemy.Create(EnemyId.OrcTrooper, 56, 307, 4)
|
||||
.SetRepopConditions(1, 10)
|
||||
.SetNamedEnemyParams(NamedParamId.OrcRemnants1),
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(373);
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(375);
|
||||
public override QuestAreaId AreaId => QuestAreaId.ZandoraWastelands;
|
||||
public override uint RequiredAreaRank => 9;
|
||||
|
||||
|
|
@ -19,7 +19,8 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.Nightmare, 58, 0, isBoss: true)
|
||||
LibDdon.Enemy.Create(EnemyId.Nightmare, 58, 8831, 1)
|
||||
.SetIsBoss(true)
|
||||
.SetNamedEnemyParams(NamedParamId.WailingMora)
|
||||
.AddDrop(ItemId.TitanBracelet, 1, 1, DropRate.RARE)
|
||||
.AddDrop(ItemId.MephistoBracelet, 1, 1, DropRate.RARE)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
public class MonsterSpotInfo : IMonsterSpotInfo
|
||||
{
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(364);
|
||||
public override StageLayoutId StageLayoutId => Stage.Lestania.AsStageLayoutId(361);
|
||||
public override QuestAreaId AreaId => QuestAreaId.ZandoraWastelands;
|
||||
public override uint RequiredAreaRank => 12;
|
||||
|
||||
|
|
@ -19,7 +19,8 @@ public class MonsterSpotInfo : IMonsterSpotInfo
|
|||
{
|
||||
AddEnemies(new List<InstancedEnemy>()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.BlackGriffin0, 70, 0, isBoss: true)
|
||||
LibDdon.Enemy.Create(EnemyId.BlackGriffin0, 70, 6840, 6)
|
||||
.SetIsBoss(true)
|
||||
.SetNamedEnemyParams(NamedParamId.BlackSeaEagleOfTheRuinedSite)
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ public class ScriptedQuest : IQuest
|
|||
// Dacreim Fortress
|
||||
public const uint Allies0 = 5405; // Gillian, Lise, Gurdolin, Elliot
|
||||
public const uint Allies1 = 5412; // Nedo, Meirova, Gillian, Gurdolin, Lise, Elliot, Bertha
|
||||
public const uint Nedo = 6532; // Nedo,
|
||||
public const uint Nedo = 6532; // Nedo,
|
||||
public const uint Blockade = 5643;
|
||||
|
||||
// Rathnite Foothills Lakeside
|
||||
|
|
@ -80,7 +80,7 @@ public class ScriptedQuest : IQuest
|
|||
{
|
||||
AddEnemies(EnemyGroupId.Encounter + 0, Stage.RathniteFoothillsLakeside0, 25, QuestEnemyPlacementType.Manual, new()
|
||||
{
|
||||
// 0, 2, 3, 4
|
||||
// 0, 2, 3, 4
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.SquadLeaderDwarfOrc, 84, 0)
|
||||
.SetNamedEnemyParams(NamedParamId.FortGuard),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.SwordSoldierDwarfOrc, 84, 2)
|
||||
|
|
@ -159,7 +159,7 @@ public class ScriptedQuest : IQuest
|
|||
process0.AddNewTalkToNpcBlock(QuestAnnounceType.CheckpointAndUpdate, Stage.RathniteFoothillsLakeside0, 0, 0, NpcId.RothgillSoldier0, 24170) // Head to the soldier before Dacreim Fortress
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Set, QstLayoutFlag.RothgillSoldiers)
|
||||
.AddQuestFlag(QuestFlagAction.Clear, QuestFlags.RathniteFoothillsLakeside.FortDacriumWallBreach);
|
||||
process0.AddDestroyGroupBlock(QuestAnnounceType.CheckpointAndUpdate, EnemyGroupId.Encounter + 0); // Defeat the obstructing Orcs to storm into Dacreim Fortress
|
||||
process0.AddDestroyGroupBlock(QuestAnnounceType.CheckpointAndUpdate, EnemyGroupId.Encounter + 0); // Defeat the obstructing Orcs to storm into Dacreim Fortress
|
||||
process0.AddDiscoverGroupBlock(QuestAnnounceType.CheckpointAndUpdate, EnemyGroupId.Encounter + 1) // Raid Dacreim Fortress
|
||||
.AddQuestFlag(QuestFlagAction.Set, QuestFlags.RathniteFoothillsLakeside.DacriumFortressEntrance);
|
||||
process0.AddDestroyGroupBlock(QuestAnnounceType.Update, EnemyGroupId.Encounter + 1, resetGroup: false); // Eliminate the War-Ready Manticore and the War-Ready Grimwarg
|
||||
|
|
@ -167,6 +167,8 @@ public class ScriptedQuest : IQuest
|
|||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Set, QstLayoutFlag.Nedo);
|
||||
process0.AddPlayEventBlock(QuestAnnounceType.None, Stage.DacreimFortress0, 0, 4);
|
||||
process0.AddSpawnGroupBlock(QuestAnnounceType.Update, EnemyGroupId.Encounter + 2) // Eliminate the enemy
|
||||
.AddResultCmdMyQstFlagOn(3605)
|
||||
.AddResultCmdSetDiePlayerReturnPos(Stage.DacreimFortress0, 4, 0)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Set, QstLayoutFlag.Allies0)
|
||||
.AddQuestFlag(QuestFlagType.MyQst, QuestFlagAction.Set, MyQstFlag.StartAdds)
|
||||
.AddCheckCmdEmHpLess(Stage.DacreimFortress0, 1, 0, 65)
|
||||
|
|
@ -174,6 +176,8 @@ public class ScriptedQuest : IQuest
|
|||
process0.AddPlayEventBlock(QuestAnnounceType.None, Stage.DacreimFortress0, 5, 1)
|
||||
.AddQuestFlag(QuestFlagType.MyQst, QuestFlagAction.Set, MyQstFlag.EndAdds);
|
||||
process0.AddNewTalkToNpcBlock(QuestAnnounceType.CheckpointAndUpdate, Stage.DacreimFortress0, 1, 0, NpcId.Nedo0, 23223) // Speak with Nedo
|
||||
.AddResultCmdResetDiePlayerReturnPos(Stage.Invalid, 0)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Clear, QstLayoutFlag.Blockade)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Clear, QstLayoutFlag.Nedo)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Clear, QstLayoutFlag.Allies0)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Set, QstLayoutFlag.Allies1);
|
||||
|
|
|
|||
|
|
@ -14,11 +14,6 @@ public class ScriptedQuest : IQuest
|
|||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.QuestUsefulForAdventure;
|
||||
|
||||
public override bool AcceptRequirementsMet(GameClient client)
|
||||
{
|
||||
return client.Character.CharacterJobDataList.Any(x => x.Lv >= 70);
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
{
|
||||
AddPointReward(PointType.ExperiencePoints, 38375);
|
||||
|
|
@ -29,6 +24,8 @@ public class ScriptedQuest : IQuest
|
|||
protected override void InitializeBlocks()
|
||||
{
|
||||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Any, 70);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Archibald0, 20221);
|
||||
process0.AddRawBlock(QuestAnnounceType.Accept)
|
||||
.AddCheckCmdOpenPpMode()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Fighter
|
||||
* @brief Seeking the Master: Fighter
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,19 +11,18 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.FighterTacticsTrialBreakAttack) &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.Fighter;
|
||||
return client.Character.ActiveCharacterJobData.Job == JobId.Fighter;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.Fighter, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.FighterTacticsTrialBreakAttack));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -40,12 +39,12 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.Fighter)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.FighterTacticsTrialBreakAttack);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14011);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.GrittenFort0, NpcId.Vanessa0, 14014);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.GrittenFort0)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.GrittenFort0, NpcId.Vanessa0, 14014)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14013);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.FighterJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Seeker
|
||||
* @brief Seeking the Master: Seeker
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,20 +11,19 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.SeekerTacticsTrialAWhirlwind) &&
|
||||
return client.Character.AreaRanks[QuestAreaId.DoweValley].Rank == 5 &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.Seeker;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.Seeker, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.SeekerTacticsTrialAWhirlwind));
|
||||
AddQuestOrderCondition(QuestOrderCondition.HasAreaRank(QuestAreaId.DoweValley, 5));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -41,12 +40,13 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.Seeker)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.SeekerTacticsTrialAWhirlwind);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18)
|
||||
.AddCheckCmdCheckAreaRank(QuestAreaId.DoweValley, 5);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14025);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.LoneHouseintheValley, NpcId.Chester0, 14027);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.LoneHouseintheValley)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.LoneHouseintheValley, NpcId.Chester0, 14027)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14026);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.SeekerJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Hunter
|
||||
* @brief Seeking the Master: Hunter
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,16 +11,11 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.HunterTacticsTrialBreakAttack) &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.Hunter;
|
||||
}
|
||||
|
||||
public override bool AcceptRequirementsMet(GameClient client)
|
||||
{
|
||||
return client.Character.ActiveCharacterJobData.Job == JobId.Hunter;
|
||||
}
|
||||
|
|
@ -28,7 +23,6 @@ public class ScriptedQuest : IQuest
|
|||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.Hunter, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.HunterTacticsTrialBreakAttack));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -45,12 +39,12 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.Hunter)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.HunterTacticsTrialBreakAttack);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14018);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.IvansLodge, NpcId.Ivan, 14020);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.IvansLodge)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.IvansLodge, NpcId.Ivan, 14020)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14019);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.HunterJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Priest
|
||||
* @brief Seeking the Master: Priest
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,16 +11,11 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.PriestTacticsTrialBreakAttack) &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.Priest;
|
||||
}
|
||||
|
||||
public override bool AcceptRequirementsMet(GameClient client)
|
||||
{
|
||||
return client.Character.ActiveCharacterJobData.Job == JobId.Priest;
|
||||
}
|
||||
|
|
@ -28,7 +23,6 @@ public class ScriptedQuest : IQuest
|
|||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.Priest, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.PriestTacticsTrialBreakAttack));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -45,12 +39,12 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.Priest)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.PriestTacticsTrialBreakAttack);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14015);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.PawnCathedral, NpcId.Camus, 14017);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.PawnCathedral)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.PawnCathedral, NpcId.Camus, 14017)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14016);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.PriestJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Shield Sage
|
||||
* @brief Seeking the Master: Shield Sage
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,19 +11,18 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.ShieldSageTacticsTrialBreakAttack) &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.ShieldSage;
|
||||
return client.Character.ActiveCharacterJobData.Job == JobId.ShieldSage;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.ShieldSage, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.ShieldSageTacticsTrialBreakAttack));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -40,12 +39,12 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.ShieldSage)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.ShieldSageTacticsTrialBreakAttack);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14022);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.LighthouseKeepersHouse, NpcId.Rudolfo, 14024);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.LighthouseKeepersHouse)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.LighthouseKeepersHouse, NpcId.Rudolfo, 14024)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14023);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.ShieldSageJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Sorcerer
|
||||
* @brief Seeking the Master: Sorcerer
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,20 +11,19 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.SorcerTacticsTrialAMagickAttack) &&
|
||||
return client.Character.AreaRanks[QuestAreaId.MysreeForest].Rank == 5 &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.Sorcerer;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.Sorcerer, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.SorcerTacticsTrialAMagickAttack));
|
||||
AddQuestOrderCondition(QuestOrderCondition.HasAreaRank(QuestAreaId.MysreeForest, 5));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -41,12 +40,13 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.Sorcerer)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.SorcerTacticsTrialAMagickAttack);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18)
|
||||
.AddCheckCmdCheckAreaRank(QuestAreaId.MysreeForest, 5);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14028);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.LoneHouseintheForest, NpcId.Emerada0, 14030);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.LoneHouseintheForest)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.LoneHouseintheForest, NpcId.Emerada0, 14030)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14029);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.SorcererJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Warrior
|
||||
* @brief Seeking the Master: Warrior
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,20 +11,19 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.WarriorTacticsTrialAStrongSword) &&
|
||||
return client.Character.AreaRanks[QuestAreaId.EasternZandora].Rank == 3 &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.Warrior;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.Warrior, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.WarriorTacticsTrialAStrongSword));
|
||||
AddQuestOrderCondition(QuestOrderCondition.HasAreaRank(QuestAreaId.EasternZandora, 3));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -41,12 +40,13 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.Warrior)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.WarriorTacticsTrialAStrongSword);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18)
|
||||
.AddCheckCmdCheckAreaRank(QuestAreaId.EasternZandora, 3);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14034);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.OswaldsArmorShop, NpcId.Oliver, 14036);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.OswaldsArmorShop)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.OswaldsArmorShop, NpcId.Oliver, 14036)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14035);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.WarriorJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Element Archer
|
||||
* @brief Seeking the Master: Element Archer
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,20 +11,19 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.ElementArcherTacticsTrialAMagickBow) &&
|
||||
return client.Character.AreaRanks[QuestAreaId.DeenanWoods].Rank == 5 &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.ElementArcher;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.ElementArcher, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.ElementArcherTacticsTrialAMagickBow));
|
||||
AddQuestOrderCondition(QuestOrderCondition.HasAreaRank(QuestAreaId.DeenanWoods, 5));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -41,12 +40,13 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.ElementArcher)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.ElementArcherTacticsTrialAMagickBow);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18)
|
||||
.AddCheckCmdCheckAreaRank(QuestAreaId.DeenanWoods, 5);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14031);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.SecretBowmakersHome, NpcId.Ringdeel0, 14033);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.SecretBowmakersHome)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.SecretBowmakersHome, NpcId.Ringdeel0, 14033)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14032);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.ElementArcherJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Alchemist
|
||||
* @brief Seeking the Master: Alchemist
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,20 +11,19 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.AlchemistTacticsTrialAlchemy) &&
|
||||
return client.Character.AreaRanks[QuestAreaId.MergodaRuins].Rank == 6 &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.Alchemist;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.Alchemist, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.AlchemistTacticsTrialAlchemy));
|
||||
AddQuestOrderCondition(QuestOrderCondition.HasAreaRank(QuestAreaId.MergodaRuins, 6));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -41,12 +40,13 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.Alchemist)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.AlchemistTacticsTrialAlchemy);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18)
|
||||
.AddCheckCmdCheckAreaRank(QuestAreaId.MergodaRuins, 6);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 14037);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.TheodorsAlchemyWorkshop, NpcId.Theodor, 14039);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.TheodorsAlchemyWorkshop)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.TheodorsAlchemyWorkshop, NpcId.Theodor, 14039)
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 14038);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.AlchemistJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @brief Seeking the Master Spirit Lancer
|
||||
* @brief Seeking the Master: Spirit Lancer
|
||||
*/
|
||||
|
||||
#load "libs.csx"
|
||||
|
|
@ -11,19 +11,18 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 18;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.DanaCentrum;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
public override bool ShowInAdventureGuide(GameClient client)
|
||||
{
|
||||
return client.Character.HasQuestCompleted(QuestId.SpiritLancerTacticsTrialASpiritLance) &&
|
||||
client.Character.ActiveCharacterJobData.Job == JobId.SpiritLancer;
|
||||
return client.Character.ActiveCharacterJobData.Job == JobId.SpiritLancer;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
{
|
||||
AddQuestOrderCondition(QuestOrderCondition.MinimumVocationLevel(JobId.SpiritLancer, 18));
|
||||
AddQuestOrderCondition(QuestOrderCondition.PersonalQuestCleared(QuestId.SpiritLancerTacticsTrialASpiritLance));
|
||||
}
|
||||
|
||||
protected override void InitializeRewards()
|
||||
|
|
@ -40,12 +39,12 @@ public class ScriptedQuest : IQuest
|
|||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdPlJobEq(JobId.SpiritLancer)
|
||||
.AddCheckCmdIsTutorialQuestClear(QuestId.SpiritLancerTacticsTrialASpiritLance);
|
||||
.AddCheckCmdJobLevelNotLess(QuestLevelCheckType.Current, 18);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.DanaCentrum, NpcId.Razanailt, 19699);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.SpiritArtsHut, NpcId.AdairDonnchadh0, 19701);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.SpiritArtsHut)
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.SpiritArtsHut, NpcId.AdairDonnchadh0, 19701)
|
||||
.AddResultCmdQstTalkChg(NpcId.Razanailt, 19700);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.SpiritLancerJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ public class ScriptedQuest : IQuest
|
|||
public override ushort RecommendedLevel => 10;
|
||||
public override byte MinimumItemRank => 0;
|
||||
public override bool IsDiscoverable => true;
|
||||
public override bool? EnableCancel => true;
|
||||
public override StageInfo StageInfo => Stage.TheWhiteDragonTemple0;
|
||||
public override QuestAdventureGuideCategory? AdventureGuideCategory => QuestAdventureGuideCategory.VocationQuest;
|
||||
|
||||
|
|
@ -19,12 +20,12 @@ public class ScriptedQuest : IQuest
|
|||
// st0503
|
||||
public const uint Barris0 = 7411;
|
||||
public const uint Barris1 = 7735;
|
||||
|
||||
}
|
||||
|
||||
private class EnemyGroupId
|
||||
{
|
||||
public const uint Encounter = 10;
|
||||
public const uint Set7413 = 7413;
|
||||
public const uint Set7414 = 7414;
|
||||
}
|
||||
|
||||
protected override void InitializeState()
|
||||
|
|
@ -43,43 +44,51 @@ public class ScriptedQuest : IQuest
|
|||
|
||||
protected override void InitializeEnemyGroups()
|
||||
{
|
||||
AddEnemies(EnemyGroupId.Encounter + 0, Stage.SmallCaveTombs, 1, QuestEnemyPlacementType.Manual, new()
|
||||
AddEnemies(EnemyGroupId.Set7413, Stage.SmallCaveTombs, 1, QuestEnemyPlacementType.Manual, new()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.WarriorUndead, 10, 0),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.UndeadMale, 10, 1),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.WarriorUndead, 10, 2),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.UndeadMale, 10, 3),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.WarriorUndead, 10, 4),
|
||||
LibDdon.Enemy.Create(EnemyId.WarriorUndead, 10, 88, 0),
|
||||
LibDdon.Enemy.Create(EnemyId.UndeadMale, 10, 44, 1),
|
||||
LibDdon.Enemy.Create(EnemyId.WarriorUndead, 10, 88, 2),
|
||||
LibDdon.Enemy.Create(EnemyId.UndeadMale, 10, 44, 3),
|
||||
LibDdon.Enemy.Create(EnemyId.WarriorUndead, 10, 88, 4),
|
||||
});
|
||||
|
||||
AddEnemies(EnemyGroupId.Encounter + 1, Stage.SmallCaveTombs, 1, QuestEnemyPlacementType.Manual, new()
|
||||
AddEnemies(EnemyGroupId.Set7414, Stage.SmallCaveTombs, 1, QuestEnemyPlacementType.Manual, new()
|
||||
{
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.WarriorUndead, 10, 5),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.SwordUndead, 15, 6),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.SwordUndead, 15, 7),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.SwordUndead, 15, 8),
|
||||
LibDdon.Enemy.CreateAuto(EnemyId.WarriorUndead, 15, 9),
|
||||
LibDdon.Enemy.Create(EnemyId.SwordUndead, 10, 60, 0),
|
||||
LibDdon.Enemy.Create(EnemyId.WarriorUndead, 10, 88, 1),
|
||||
LibDdon.Enemy.Create(EnemyId.SwordUndead, 10, 60, 2),
|
||||
LibDdon.Enemy.Create(EnemyId.WarriorUndead, 10, 88, 3),
|
||||
LibDdon.Enemy.Create(EnemyId.SwordUndead, 10, 60, 4),
|
||||
});
|
||||
}
|
||||
|
||||
protected override void InitializeBlocks()
|
||||
{
|
||||
var process0 = AddNewProcess(0);
|
||||
process0.AddRawBlock(QuestAnnounceType.None)
|
||||
.AddCheckCmdIsMainQuestClear(QuestId.TheSlumberingGod);
|
||||
process0.AddNpcTalkAndOrderBlock(Stage.TheWhiteDragonTemple0, NpcId.Renton0, 29199);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.CraftRoom, NpcId.Craig0, 27144); // Hear what Craig has to say in the Craft Room
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.CheckpointAndUpdate, Stage.SmallCaveTombs); // Head to "Small Cave Tombs" and stand-in for Craig
|
||||
process0.AddDiscoverGroupBlock(QuestAnnounceType.CheckpointAndUpdate, EnemyGroupId.Encounter + 0); // Investigate a mysterious person
|
||||
process0.AddDestroyGroupBlock(QuestAnnounceType.Update, EnemyGroupId.Encounter + 0, false); // Defeat the enemy encountered
|
||||
process0.AddDestroyGroupBlock(QuestAnnounceType.None, EnemyGroupId.Encounter + 1)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Set, QstLayoutFlag.Barris0);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.Accept, Stage.CraftRoom, NpcId.Craig0, 27144) // Hear what Craig has to say in the Craft Room
|
||||
.AddResultCmdQstTalkChg(NpcId.Renton0, 29200);
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.CheckpointAndUpdate, Stage.SmallCaveTombs) // Head to "Small Cave Tombs" and stand-in for Craig
|
||||
.AddResultCmdQstTalkChg(NpcId.Craig0, 27145);
|
||||
process0.AddDiscoverGroupBlock(QuestAnnounceType.CheckpointAndUpdate, EnemyGroupId.Set7413); // Investigate a mysterious person
|
||||
process0.AddDestroyGroupBlock(QuestAnnounceType.Update, EnemyGroupId.Set7413, false); // Defeat the enemy encountered
|
||||
process0.AddDestroyGroupBlock(QuestAnnounceType.None, EnemyGroupId.Set7414)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Set, QstLayoutFlag.Barris0)
|
||||
.AddResultCmdPlayMessage(29145, 10)
|
||||
.AddResultCmdPlayMessage(29146, 10)
|
||||
.AddResultCmdPlayMessage(29147, 10);
|
||||
process0.AddNewTalkToNpcBlock(QuestAnnounceType.CheckpointAndUpdate, Stage.SmallCaveTombs, 1, 0, NpcId.Barris, 29148) // Speak to the person who assisted
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Clear, QstLayoutFlag.Barris0)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Set, QstLayoutFlag.Barris1);
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.CheckpointAndUpdate, Stage.CraftRoom, NpcId.Craig0, 27146); // Return to the Craft Room and report to Craig
|
||||
process0.AddIsStageNoBlock(QuestAnnounceType.None, Stage.CraftRoom, false)
|
||||
.AddQuestFlag(QuestFlagType.QstLayout, QuestFlagAction.Set, QstLayoutFlag.Barris1)
|
||||
.AddResultCmdStopMessage();
|
||||
process0.AddTalkToNpcBlock(QuestAnnounceType.CheckpointAndUpdate, Stage.CraftRoom, NpcId.Craig0, 27146) // Return to the Craft Room and report to Craig
|
||||
.AddResultCmdQstTalkChg(NpcId.Barris, 29149);
|
||||
process0.AddProcessEndBlock(true)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.ChangetoHighScepter, TutorialId.BasicTacticsHighScepter)
|
||||
.AddResultCmdReleaseAnnounce(ContentsRelease.HighScepterJobTraining, TutorialId.JobTrainingLog);
|
||||
process0.AddProcessEndBlock(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -46,7 +46,7 @@
|
|||
"comment": "Hidden Beach Rogue (Fighter)",
|
||||
"enemy_id": "0x011000",
|
||||
"level": 11,
|
||||
"exp": 55,
|
||||
"exp": 62,
|
||||
"named_enemy_params_id": 195,
|
||||
"hm_present_no": 45
|
||||
},
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
"comment": "Hidden Beach Rogue (Seeker)",
|
||||
"enemy_id": "0x011001",
|
||||
"level": 11,
|
||||
"exp": 55,
|
||||
"exp": 62,
|
||||
"named_enemy_params_id": 195,
|
||||
"hm_present_no": 46
|
||||
},
|
||||
|
|
@ -62,7 +62,7 @@
|
|||
"comment": "Hidden Beach Rogue (Hunter)",
|
||||
"enemy_id": "0x011002",
|
||||
"level": 11,
|
||||
"exp": 55,
|
||||
"exp": 62,
|
||||
"named_enemy_params_id": 195,
|
||||
"hm_present_no": 47
|
||||
},
|
||||
|
|
@ -70,7 +70,7 @@
|
|||
"comment": "Hidden Beach Rogue (Mage)",
|
||||
"enemy_id": "0x011005",
|
||||
"level": 11,
|
||||
"exp": 55,
|
||||
"exp": 62,
|
||||
"named_enemy_params_id": 195,
|
||||
"hm_present_no": 50
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,8 +33,9 @@
|
|||
{
|
||||
"stage_id": {
|
||||
"id": 1,
|
||||
"group_id": 146
|
||||
"group_id": 138
|
||||
},
|
||||
"starting_index": 2,
|
||||
"enemies": [
|
||||
{
|
||||
"comment": "Jotun the Returned (Mole Troll)",
|
||||
|
|
@ -42,7 +43,7 @@
|
|||
"level": 43,
|
||||
"is_boss": true,
|
||||
"named_enemy_params_id": 232,
|
||||
"exp_scheme": "automatic"
|
||||
"exp": 4080
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
"level": 70,
|
||||
"is_boss": true,
|
||||
"named_enemy_params_id": 901,
|
||||
"exp_scheme": "automatic"
|
||||
"exp": 6840
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ namespace Arrowgene.Ddon.Shared.Model.Quest
|
|||
{
|
||||
public enum QuestLevelCheckType : uint
|
||||
{
|
||||
Party = 0,
|
||||
Player = 1,
|
||||
Any = 0,
|
||||
Current = 1,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue