Small changes
This commit is contained in:
parent
ef89b0b732
commit
66f1423ecc
@ -204,6 +204,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
public int? MarkerSetSNO { get; private set; }
|
public int? MarkerSetSNO { get; private set; }
|
||||||
|
|
||||||
public bool Hidden = false;
|
public bool Hidden = false;
|
||||||
|
// TODO: check if the following is correct: @iamdroppy
|
||||||
|
// {
|
||||||
|
// get => Attributes[GameAttribute.Hidden];
|
||||||
|
// set => Attributes[GameAttribute.Hidden] = value;
|
||||||
|
// }
|
||||||
|
|
||||||
public bool AdjustPosition = true;
|
public bool AdjustPosition = true;
|
||||||
|
|
||||||
@ -239,7 +244,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
ActorSNO = new SNOHandle(SNOGroup.Actor, (int)sno);
|
ActorSNO = new SNOHandle(SNOGroup.Actor, (int)sno);
|
||||||
NameSNO = sno;
|
NameSNO = sno;
|
||||||
//Logger.Info("Loaded actor {0}, id {1}, type {2}", this.ActorSNO.Name, this.DynamicID, this.ActorData.Type);
|
//Logger.Info("Loaded actor {0}, id {1}, type {2}", this.ActorSNO.Name, this.DynamicID, this.ActorData.Type);
|
||||||
Quality = 0;
|
//Quality = 0; - removed, 0 is default and you can't change the quality
|
||||||
HasLoot = true;
|
HasLoot = true;
|
||||||
|
|
||||||
if (ActorData.TagMap.ContainsKey(ActorKeys.TeamID))
|
if (ActorData.TagMap.ContainsKey(ActorKeys.TeamID))
|
||||||
@ -369,7 +374,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
|
|
||||||
CheckPointPosition = position;
|
CheckPointPosition = position;
|
||||||
if (this is Player)
|
if (this is Player)
|
||||||
world.BroadcastIfRevealed((ACDWorldPositionMessage), this);
|
world.BroadcastIfRevealed(ACDWorldPositionMessage, this);
|
||||||
AfterChangeWorld();
|
AfterChangeWorld();
|
||||||
|
|
||||||
if (this is Player plr)
|
if (this is Player plr)
|
||||||
@ -506,7 +511,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
int radius = (int)Math.Pow(2, i);
|
int radius = (int)Math.Pow(2, i);
|
||||||
for (int a = 0; a < 8; a++)
|
for (int a = 0; a < 8; a++)
|
||||||
{
|
{
|
||||||
float angle = (float)((0.125f * a) * (Math.PI * 2));
|
float angle = (float)(0.125f * a * (Math.PI * 2));
|
||||||
Vector3D correctPosition = Position + new Vector3D((float)Math.Cos(angle) * radius, (float)Math.Sin(angle) * radius, 0);
|
Vector3D correctPosition = Position + new Vector3D((float)Math.Cos(angle) * radius, (float)Math.Sin(angle) * radius, 0);
|
||||||
if (World.CheckLocationForFlag(correctPosition, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk))
|
if (World.CheckLocationForFlag(correctPosition, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk))
|
||||||
{
|
{
|
||||||
@ -557,7 +562,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
World.BroadcastIfRevealed(plr => new PlayHitEffectMessage
|
World.BroadcastIfRevealed(plr => new PlayHitEffectMessage
|
||||||
{
|
{
|
||||||
ActorID = DynamicID(plr),
|
ActorID = DynamicID(plr),
|
||||||
HitDealer = (hitDealer.IsRevealedToPlayer(plr) ? hitDealer.DynamicID(plr) : DynamicID(plr)),
|
HitDealer = hitDealer.IsRevealedToPlayer(plr) ? hitDealer.DynamicID(plr) : DynamicID(plr),
|
||||||
DamageType = hitEffect,
|
DamageType = hitEffect,
|
||||||
CriticalDamage = false
|
CriticalDamage = false
|
||||||
}, this);
|
}, this);
|
||||||
@ -709,7 +714,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
|
|
||||||
public void AddPercentHP(int percentage, bool GuidingLight = false)
|
public void AddPercentHP(int percentage, bool GuidingLight = false)
|
||||||
{
|
{
|
||||||
float quantity = (percentage * Attributes[GameAttribute.Hitpoints_Max_Total]) / 100;
|
float quantity = percentage * Attributes[GameAttribute.Hitpoints_Max_Total] / 100;
|
||||||
AddHP(quantity, GuidingLight);
|
AddHP(quantity, GuidingLight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -762,7 +767,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
|
|
||||||
public void SetUsable(bool activated)
|
public void SetUsable(bool activated)
|
||||||
{
|
{
|
||||||
Attributes[GameAttribute.Team_Override] = (activated ? -1 : 2);
|
Attributes[GameAttribute.Team_Override] = activated ? -1 : 2;
|
||||||
Attributes[GameAttribute.Untargetable] = !activated;
|
Attributes[GameAttribute.Untargetable] = !activated;
|
||||||
Attributes[GameAttribute.NPC_Is_Operatable] = activated;
|
Attributes[GameAttribute.NPC_Is_Operatable] = activated;
|
||||||
Attributes[GameAttribute.Operatable] = activated;
|
Attributes[GameAttribute.Operatable] = activated;
|
||||||
@ -818,8 +823,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
lock (player.RevealedObjects)
|
lock (player.RevealedObjects)
|
||||||
{
|
{
|
||||||
if (Hidden || Dead || !Visible || World == null) return false;
|
if (Hidden || Dead || !Visible || World == null) return false;
|
||||||
|
|
||||||
var mysticHiddenWorlds = new WorldSno[] {
|
var mysticHiddenWorlds = new[] {
|
||||||
WorldSno.trdun_crypt_falsepassage_01,
|
WorldSno.trdun_crypt_falsepassage_01,
|
||||||
WorldSno.trdun_crypt_falsepassage_02,
|
WorldSno.trdun_crypt_falsepassage_02,
|
||||||
WorldSno.trdun_crypt_fields_flooded_memories_level01,
|
WorldSno.trdun_crypt_fields_flooded_memories_level01,
|
||||||
@ -833,7 +838,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
|
|
||||||
|
|
||||||
//Destroy Bonewall and Jondar if Exit_S on Second Level of Cathedral
|
//Destroy Bonewall and Jondar if Exit_S on Second Level of Cathedral
|
||||||
if (World.SNO == WorldSno.a1trdun_level04 && (SNO == ActorSno._trdun_cath_bonewall_a_door || SNO == ActorSno._adventurer_d_templarintrounique)) return false;
|
if (World.SNO == WorldSno.a1trdun_level04 && SNO is ActorSno._trdun_cath_bonewall_a_door or ActorSno._adventurer_d_templarintrounique)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (SNO.IsUberWorldActor() && !World.SNO.IsUberWorld()) return false;
|
if (SNO.IsUberWorldActor() && !World.SNO.IsUberWorld()) return false;
|
||||||
if (SNO.IsAdventureModeActor() && World.Game.CurrentAct != 3000) return false;
|
if (SNO.IsAdventureModeActor() && World.Game.CurrentAct != 3000) return false;
|
||||||
@ -850,15 +856,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
|
|
||||||
if (!(this is Item) && GetScenesInRange().Count > 0 && !GetScenesInRange().OrderBy(scene => PowerMath.Distance2D(scene.Position, Position)).First().IsRevealedToPlayer(player)) return false;
|
if (!(this is Item) && GetScenesInRange().Count > 0 && !GetScenesInRange().OrderBy(scene => PowerMath.Distance2D(scene.Position, Position)).First().IsRevealedToPlayer(player)) return false;
|
||||||
|
|
||||||
uint objId = player.NewDynamicID(GlobalID, (this is Player && (!(this as Player).IsInPvPWorld || this == player)) ? (int)(this as Player).PlayerIndex : -1);
|
uint objId = player.NewDynamicID(GlobalID, this is Player thisPlayer && (!thisPlayer.IsInPvPWorld || this == player) ? thisPlayer.PlayerIndex : -1);
|
||||||
|
|
||||||
player.RevealedObjects.Add(GlobalID, objId);
|
player.RevealedObjects.Add(GlobalID, objId);
|
||||||
|
|
||||||
var gbidbank = new int[AffixList.Count];
|
var gbIdBank = new int[AffixList.Count];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (var affix in AffixList)
|
foreach (var affix in AffixList)
|
||||||
{
|
{
|
||||||
gbidbank[i] = affix.AffixGbid;
|
gbIdBank[i] = affix.AffixGbid;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -873,13 +879,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
var msg = ACDEnterKnown(player);
|
var msg = ACDEnterKnown(player);
|
||||||
|
|
||||||
// normaly when we send acdenterknown for players own actor it's set to 0x09. But while sending the acdenterknown for another player's actor we should set it to 0x01. /raist
|
// normaly when we send acdenterknown for players own actor it's set to 0x09. But while sending the acdenterknown for another player's actor we should set it to 0x01. /raist
|
||||||
if ((this is Player) && this != player)
|
if (this is Player)
|
||||||
msg.Flags = 0x01;
|
{
|
||||||
|
msg.Flags = this == player ? 0x09 : 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
player.InGameClient.SendMessage(msg);
|
player.InGameClient.SendMessage(msg);
|
||||||
|
|
||||||
// Collision Flags
|
// Collision Flags
|
||||||
if (!((this is Projectile) || (this is Item)))
|
if (this is not Projectile && this is not Item)
|
||||||
{
|
{
|
||||||
player.InGameClient.SendMessage(new ACDCollFlagsMessage
|
player.InGameClient.SendMessage(new ACDCollFlagsMessage
|
||||||
{
|
{
|
||||||
@ -907,7 +915,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
if (this is Player || this is NPC || this is Goblin)
|
if (this is Player || this is NPC || this is Goblin)
|
||||||
player.InGameClient.SendMessage(new ACDCreateActorMessage(objId));
|
player.InGameClient.SendMessage(new ACDCreateActorMessage(objId));
|
||||||
|
|
||||||
TrickleMessage Trickle = new TrickleMessage()
|
TrickleMessage trickle = new TrickleMessage()
|
||||||
{
|
{
|
||||||
ActorId = DynamicID(player),
|
ActorId = DynamicID(player),
|
||||||
ActorSNO = (int)SNO,
|
ActorSNO = (int)SNO,
|
||||||
@ -920,10 +928,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this is Player)
|
if (this is Player playerTrickle)
|
||||||
Trickle.PlayerIndex = (this as Player).PlayerIndex;
|
trickle.PlayerIndex = playerTrickle.PlayerIndex;
|
||||||
|
|
||||||
player.InGameClient.SendMessage(Trickle);
|
player.InGameClient.SendMessage(trickle);
|
||||||
|
|
||||||
|
|
||||||
// Actor group
|
// Actor group
|
||||||
@ -937,93 +945,103 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
|
|||||||
|
|
||||||
|
|
||||||
#region Special cases
|
#region Special cases
|
||||||
// set idle animation for zombies in tristram - ZHRAAT
|
|
||||||
if (World.SNO == WorldSno.trout_town)
|
switch (World.SNO)
|
||||||
{
|
{
|
||||||
if (Tags != null)
|
// set idle animation for zombies in tristram - ZHRAAT
|
||||||
if (Tags.ContainsKey(MarkerKeys.Group1Hash))
|
case WorldSno.trout_town:
|
||||||
if (Tags[MarkerKeys.Group1Hash] == -1248096796)
|
|
||||||
PlayActionAnimation(AnimationSno.zombie_male_skinny_eating);
|
|
||||||
}
|
|
||||||
// set idle animation for workers
|
|
||||||
else if (World.SNO == WorldSno.trout_tristram_inn && SNO == ActorSno._omninpc_tristram_male_a)
|
|
||||||
PlayActionAnimation(AnimationSno.omninpc_male_hth_injured);
|
|
||||||
else if (SNO == ActorSno._leah)
|
|
||||||
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Inventory.VisualInventoryMessage()
|
|
||||||
{
|
{
|
||||||
ActorID = DynamicID(player),
|
if (Tags != null)
|
||||||
EquipmentList = new VisualEquipment()
|
if (Tags.ContainsKey(MarkerKeys.Group1Hash))
|
||||||
{
|
if (Tags[MarkerKeys.Group1Hash] == -1248096796)
|
||||||
Equipment = new VisualItem[]
|
PlayActionAnimation(AnimationSno.zombie_male_skinny_eating);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// set idle animation for workers
|
||||||
|
case WorldSno.trout_tristram_inn when SNO == ActorSno._omninpc_tristram_male_a:
|
||||||
|
PlayActionAnimation(AnimationSno.omninpc_male_hth_injured);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if (SNO == ActorSno._leah)
|
||||||
|
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Inventory.VisualInventoryMessage()
|
||||||
{
|
{
|
||||||
new()
|
ActorID = DynamicID(player),
|
||||||
|
EquipmentList = new VisualEquipment()
|
||||||
{
|
{
|
||||||
GbId = -1,
|
Equipment = new VisualItem[]
|
||||||
DyeType = 0,
|
{
|
||||||
ItemEffectType = 0,
|
new()
|
||||||
EffectLevel = -1,
|
{
|
||||||
},
|
GbId = -1,
|
||||||
new()
|
DyeType = 0,
|
||||||
{
|
ItemEffectType = 0,
|
||||||
GbId = -1,
|
EffectLevel = -1,
|
||||||
DyeType = 0,
|
},
|
||||||
ItemEffectType = 0,
|
new()
|
||||||
EffectLevel = -1,
|
{
|
||||||
},
|
GbId = -1,
|
||||||
new()
|
DyeType = 0,
|
||||||
{
|
ItemEffectType = 0,
|
||||||
GbId = -1,
|
EffectLevel = -1,
|
||||||
DyeType = 0,
|
},
|
||||||
ItemEffectType = 0,
|
new()
|
||||||
EffectLevel = -1,
|
{
|
||||||
},
|
GbId = -1,
|
||||||
new()
|
DyeType = 0,
|
||||||
{
|
ItemEffectType = 0,
|
||||||
GbId = -1,
|
EffectLevel = -1,
|
||||||
DyeType = 0,
|
},
|
||||||
ItemEffectType = 0,
|
new()
|
||||||
EffectLevel = -1,
|
{
|
||||||
},
|
GbId = -1,
|
||||||
new()
|
DyeType = 0,
|
||||||
{
|
ItemEffectType = 0,
|
||||||
GbId = unchecked((int)-2091504072),
|
EffectLevel = -1,
|
||||||
DyeType = 0,
|
},
|
||||||
ItemEffectType = 0,
|
new()
|
||||||
EffectLevel = -1,
|
{
|
||||||
},
|
GbId = unchecked((int)-2091504072),
|
||||||
new()
|
DyeType = 0,
|
||||||
{
|
ItemEffectType = 0,
|
||||||
GbId = -1,//0x6C3B0389,
|
EffectLevel = -1,
|
||||||
DyeType = 0,
|
},
|
||||||
ItemEffectType = 0,
|
new()
|
||||||
EffectLevel = -1,
|
{
|
||||||
},
|
GbId = -1,//0x6C3B0389,
|
||||||
new()
|
DyeType = 0,
|
||||||
{
|
ItemEffectType = 0,
|
||||||
GbId = -1,
|
EffectLevel = -1,
|
||||||
DyeType = 0,
|
},
|
||||||
ItemEffectType = 0,
|
new()
|
||||||
EffectLevel = -1,
|
{
|
||||||
},
|
GbId = -1,
|
||||||
new()
|
DyeType = 0,
|
||||||
{
|
ItemEffectType = 0,
|
||||||
GbId = -1,
|
EffectLevel = -1,
|
||||||
DyeType = 0,
|
},
|
||||||
ItemEffectType = 0,
|
new()
|
||||||
EffectLevel = -1,
|
{
|
||||||
},
|
GbId = -1,
|
||||||
}
|
DyeType = 0,
|
||||||
}
|
ItemEffectType = 0,
|
||||||
});
|
EffectLevel = -1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
if (this is NPC || this is InteractiveNPC)
|
// if (this is NPC || this is InteractiveNPC)
|
||||||
{
|
// {
|
||||||
//.Contains<TagMap>(AnimationSetKeys.Idle)
|
// //.Contains<TagMap>(AnimationSetKeys.Idle)
|
||||||
//if (this.AnimationSet.Animations.ContainsKey(AnimationSetKeys.Idle.ID))
|
// //if (this.AnimationSet.Animations.ContainsKey(AnimationSetKeys.Idle.ID))
|
||||||
// this.SetIdleAnimation(this.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Idle]);
|
// // this.SetIdleAnimation(this.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Idle]);
|
||||||
//this.PlayAnimation(0, this.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Idle]);
|
// //this.PlayAnimation(0, this.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Idle]);
|
||||||
}
|
// }
|
||||||
|
|
||||||
//Logger.Trace("Reveal actor [{2}]{0} as {1}", this.GlobalID, objId, this.ActorSNO.Name);
|
//Logger.Trace("Reveal actor [{2}]{0} as {1}", this.GlobalID, objId, this.ActorSNO.Name);
|
||||||
|
|
||||||
|
|||||||
@ -31,6 +31,7 @@ using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings;
|
|||||||
using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem;
|
using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem;
|
||||||
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
|
using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using DiIiS_NA.Core.MPQ.FileFormats;
|
using DiIiS_NA.Core.MPQ.FileFormats;
|
||||||
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
|
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
|
||||||
using DiIiS_NA.D3_GameServer.GSSystem.GameSystem;
|
using DiIiS_NA.D3_GameServer.GSSystem.GameSystem;
|
||||||
@ -408,8 +409,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
|
|||||||
/// Executes an action to all players in the game.
|
/// Executes an action to all players in the game.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">Action to execute</param>
|
/// <param name="action">Action to execute</param>
|
||||||
public void BroadcastPlayers(Action<GameClient, Player> action)
|
public void BroadcastPlayers(Action<GameClient, Player> action, [CallerMemberName] string methodName = "")
|
||||||
{
|
{
|
||||||
|
Logger.MethodTrace("Broadcasting to players", methodName);
|
||||||
foreach (var player in Players)
|
foreach (var player in Players)
|
||||||
{
|
{
|
||||||
action(player.Key, player.Value);
|
action(player.Key, player.Value);
|
||||||
@ -421,8 +423,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="predicate">Predicate to check</param>
|
/// <param name="predicate">Predicate to check</param>
|
||||||
/// <param name="action">Action to execute</param>
|
/// <param name="action">Action to execute</param>
|
||||||
public void BroadcastPlayers(Func<GameClient, Player, bool> predicate, Action<GameClient, Player> action)
|
public void BroadcastPlayers(Func<GameClient, Player, bool> predicate, Action<GameClient, Player> action, [CallerMemberName] string methodName = "")
|
||||||
{
|
{
|
||||||
|
Logger.MethodTrace("Broadcasting to players", methodName);
|
||||||
foreach (var player in Players.Where(s=>predicate(s.Key, s.Value)))
|
foreach (var player in Players.Where(s=>predicate(s.Key, s.Value)))
|
||||||
{
|
{
|
||||||
action(player.Key, player.Value);
|
action(player.Key, player.Value);
|
||||||
@ -433,8 +436,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
|
|||||||
/// Executes an action to all worlds in the game.
|
/// Executes an action to all worlds in the game.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">Action to execute</param>
|
/// <param name="action">Action to execute</param>
|
||||||
public void BroadcastWorlds(Action<World> action)
|
public void BroadcastWorlds(Action<World> action, [CallerMemberName] string methodName = "")
|
||||||
{
|
{
|
||||||
|
Logger.MethodTrace("Broadcasting to players", methodName);
|
||||||
foreach (var world in Worlds)
|
foreach (var world in Worlds)
|
||||||
{
|
{
|
||||||
action(world);
|
action(world);
|
||||||
@ -446,8 +450,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="predicate">Predicate to check</param>
|
/// <param name="predicate">Predicate to check</param>
|
||||||
/// <param name="action">Action to execute</param>
|
/// <param name="action">Action to execute</param>
|
||||||
public void BroadcastWorlds(Func<World, bool> predicate, Action<World> action)
|
public void BroadcastWorlds(Func<World, bool> predicate, Action<World> action, [CallerMemberName] string methodName = "")
|
||||||
{
|
{
|
||||||
|
Logger.MethodTrace("Broadcasting to players", methodName);
|
||||||
foreach (var world in Worlds.Where(predicate))
|
foreach (var world in Worlds.Where(predicate))
|
||||||
{
|
{
|
||||||
action(world);
|
action(world);
|
||||||
|
|||||||
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using D3.Quests;
|
||||||
using DiIiS_NA.Core.Extensions;
|
using DiIiS_NA.Core.Extensions;
|
||||||
using DiIiS_NA.Core.Helpers.Hash;
|
using DiIiS_NA.Core.Helpers.Hash;
|
||||||
using DiIiS_NA.Core.Helpers.Math;
|
using DiIiS_NA.Core.Helpers.Math;
|
||||||
@ -193,56 +194,51 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
|||||||
{
|
{
|
||||||
SaveQuestProgress(true);
|
SaveQuestProgress(true);
|
||||||
Logger.Trace($"$[white]$(Advance)$[/]$ Game {Game.GameId} Advanced to quest $[underline white]${Game.CurrentQuest}$[/]$, completed $[underline white]${Quests[Game.CurrentQuest].Completed}$[/]$");
|
Logger.Trace($"$[white]$(Advance)$[/]$ Game {Game.GameId} Advanced to quest $[underline white]${Game.CurrentQuest}$[/]$, completed $[underline white]${Quests[Game.CurrentQuest].Completed}$[/]$");
|
||||||
foreach (var player in Game.Players.Values)
|
Game.BroadcastPlayers((client, player) =>
|
||||||
{
|
{
|
||||||
|
if (Game.CurrentQuest == 312429) return; // open world quest
|
||||||
|
|
||||||
int xpReward = (int)(Quests[Game.CurrentQuest].RewardXp * Game.XpModifier);
|
int xpReward = (int)(Quests[Game.CurrentQuest].RewardXp * Game.XpModifier);
|
||||||
int goldReward = (int)(Quests[Game.CurrentQuest].RewardGold * Game.GoldModifier);
|
int goldReward = (int)(Quests[Game.CurrentQuest].RewardGold * Game.GoldModifier);
|
||||||
if (Game.CurrentQuest != 312429) // open world quest
|
player.InGameClient.SendMessage(new QuestStepCompleteMessage()
|
||||||
{
|
{
|
||||||
player.InGameClient.SendMessage(new QuestStepCompleteMessage()
|
QuestStepComplete = QuestStepComplete.CreateBuilder()
|
||||||
{
|
|
||||||
QuestStepComplete = D3.Quests.QuestStepComplete.CreateBuilder()
|
|
||||||
|
|
||||||
.SetReward(D3.Quests.QuestReward.CreateBuilder()
|
.SetReward(QuestReward.CreateBuilder()
|
||||||
.SetGoldGranted(goldReward)
|
.SetGoldGranted(goldReward)
|
||||||
.SetXpGranted((ulong)xpReward)
|
.SetXpGranted((ulong)xpReward)
|
||||||
.SetSnoQuest(Game.CurrentQuest)
|
.SetSnoQuest(Game.CurrentQuest)
|
||||||
)
|
)
|
||||||
.SetIsQuestComplete(true)
|
.SetIsQuestComplete(true)
|
||||||
.Build()
|
.Build()
|
||||||
//snoQuest = this.Game.CurrentQuest,
|
});
|
||||||
//isQuestComplete = true,
|
player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage()
|
||||||
//rewardXp = xpReward,
|
{
|
||||||
//rewardGold = goldReward
|
Place = new WorldPlace()
|
||||||
});
|
|
||||||
player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage()
|
|
||||||
{
|
{
|
||||||
Place = new WorldPlace()
|
Position = player.Position,
|
||||||
{
|
WorldID = player.World.DynamicID(player),
|
||||||
Position = player.Position,
|
},
|
||||||
WorldID = player.World.DynamicID(player),
|
|
||||||
},
|
|
||||||
|
|
||||||
Amount = xpReward,
|
Amount = xpReward,
|
||||||
Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Experience,
|
Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Experience,
|
||||||
});
|
});
|
||||||
player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage()
|
player.InGameClient.SendMessage(new GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage()
|
||||||
|
{
|
||||||
|
Place = new WorldPlace()
|
||||||
{
|
{
|
||||||
Place = new WorldPlace()
|
Position = player.Position,
|
||||||
{
|
WorldID = player.World.DynamicID(player),
|
||||||
Position = player.Position,
|
},
|
||||||
WorldID = player.World.DynamicID(player),
|
|
||||||
},
|
|
||||||
|
|
||||||
Amount = goldReward,
|
Amount = goldReward,
|
||||||
Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Gold,
|
Type = GameServer.MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Gold,
|
||||||
});
|
});
|
||||||
player.UpdateExp(xpReward);
|
player.UpdateExp(xpReward);
|
||||||
player.Inventory.AddGoldAmount(goldReward);
|
player.Inventory.AddGoldAmount(goldReward);
|
||||||
player.AddAchievementCounter(74987243307173, (uint)goldReward);
|
player.AddAchievementCounter(74987243307173, (uint)goldReward);
|
||||||
player.CheckQuestCriteria(Game.CurrentQuest);
|
player.CheckQuestCriteria(Game.CurrentQuest);
|
||||||
}
|
});
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Quests[Game.CurrentQuest].NextQuest == -1) return;
|
if (Quests[Game.CurrentQuest].NextQuest == -1) return;
|
||||||
@ -305,9 +301,9 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
|||||||
|
|
||||||
player.InGameClient.SendMessage(new QuestStepCompleteMessage()
|
player.InGameClient.SendMessage(new QuestStepCompleteMessage()
|
||||||
{
|
{
|
||||||
QuestStepComplete = D3.Quests.QuestStepComplete.CreateBuilder()
|
QuestStepComplete = QuestStepComplete.CreateBuilder()
|
||||||
|
|
||||||
.SetReward(D3.Quests.QuestReward.CreateBuilder()
|
.SetReward(QuestReward.CreateBuilder()
|
||||||
.SetGoldGranted(goldReward)
|
.SetGoldGranted(goldReward)
|
||||||
.SetXpGranted((ulong)xpReward)
|
.SetXpGranted((ulong)xpReward)
|
||||||
.SetSnoQuest(Game.CurrentSideQuest)
|
.SetSnoQuest(Game.CurrentSideQuest)
|
||||||
@ -416,13 +412,8 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
|||||||
|
|
||||||
public float QuestTimerEstimate = 0f;
|
public float QuestTimerEstimate = 0f;
|
||||||
|
|
||||||
public void LaunchRiftQuestTimer(float duration, Action<int> onDone, int idSNO = 0)
|
public void LaunchRiftQuestTimer(float duration, Action<int> onDone)
|
||||||
{
|
{
|
||||||
foreach (var player in Game.Players.Values)
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
QuestTimerEstimate = duration;
|
QuestTimerEstimate = duration;
|
||||||
|
|
||||||
Game.QuestTimer = SteppedTickTimer.WaitSecondsStepped(Game, 1f, duration, new Action<int>((q) =>
|
Game.QuestTimer = SteppedTickTimer.WaitSecondsStepped(Game, 1f, duration, new Action<int>((q) =>
|
||||||
@ -435,7 +426,7 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
|||||||
|
|
||||||
public void LaunchQuestTimer(int questId, float duration, Action<int> onDone, int masterId = 0)
|
public void LaunchQuestTimer(int questId, float duration, Action<int> onDone, int masterId = 0)
|
||||||
{
|
{
|
||||||
foreach (var player in Game.Players.Values)
|
Game.BroadcastPlayers((client, player) =>
|
||||||
{
|
{
|
||||||
player.InGameClient.SendMessage(new QuestMeterMessage()
|
player.InGameClient.SendMessage(new QuestMeterMessage()
|
||||||
{
|
{
|
||||||
@ -443,7 +434,7 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
|||||||
annMeter = masterId,
|
annMeter = masterId,
|
||||||
flMeter = 1f
|
flMeter = 1f
|
||||||
});
|
});
|
||||||
};
|
});
|
||||||
|
|
||||||
QuestTimerEstimate = duration;
|
QuestTimerEstimate = duration;
|
||||||
|
|
||||||
@ -472,7 +463,7 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
|||||||
Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives[objId].Counter++;
|
Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives[objId].Counter++;
|
||||||
|
|
||||||
var objective = Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives[objId];
|
var objective = Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives[objId];
|
||||||
foreach (var player in Game.Players.Values)
|
Game.BroadcastPlayers((client, player) =>
|
||||||
player.InGameClient.SendMessage(new QuestCounterMessage()
|
player.InGameClient.SendMessage(new QuestCounterMessage()
|
||||||
{
|
{
|
||||||
snoQuest = Game.CurrentQuest,
|
snoQuest = Game.CurrentQuest,
|
||||||
@ -481,7 +472,7 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
|||||||
TaskIndex = objId,
|
TaskIndex = objId,
|
||||||
Counter = objective.Counter,
|
Counter = objective.Counter,
|
||||||
Checked = objective.Counter < objective.Limit ? 0 : 1,
|
Checked = objective.Counter < objective.Limit ? 0 : 1,
|
||||||
});
|
}));
|
||||||
|
|
||||||
if (!Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives.Any(obj => obj.Counter < obj.Limit))
|
if (!Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives.Any(obj => obj.Counter < obj.Limit))
|
||||||
Advance();
|
Advance();
|
||||||
@ -1038,9 +1029,9 @@ namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem
|
|||||||
});
|
});
|
||||||
player.InGameClient.SendMessage(new QuestStepCompleteMessage()
|
player.InGameClient.SendMessage(new QuestStepCompleteMessage()
|
||||||
{
|
{
|
||||||
QuestStepComplete = D3.Quests.QuestStepComplete.CreateBuilder()
|
QuestStepComplete = QuestStepComplete.CreateBuilder()
|
||||||
.SetIsQuestComplete(true)
|
.SetIsQuestComplete(true)
|
||||||
.SetReward(D3.Quests.QuestReward.CreateBuilder()
|
.SetReward(QuestReward.CreateBuilder()
|
||||||
.SetSnoQuest(BountySNOid)
|
.SetSnoQuest(BountySNOid)
|
||||||
.SetXpGranted((ulong)xpReward)
|
.SetXpGranted((ulong)xpReward)
|
||||||
.SetGoldGranted((int)goldReward)
|
.SetGoldGranted((int)goldReward)
|
||||||
|
|||||||
@ -3745,9 +3745,9 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
|||||||
WarpFadeInSecods = 0f
|
WarpFadeInSecods = 0f
|
||||||
});
|
});
|
||||||
|
|
||||||
if (SkillSet.HasSkill(460757))
|
if (SkillSet.HasSkill(460757)) // P6_Necro_Devour
|
||||||
foreach (var skill in SkillSet.ActiveSkills)
|
foreach (var skill in SkillSet.ActiveSkills)
|
||||||
if (skill.snoSkill == 460757)
|
if (skill.snoSkill == 460757) // P6_Necro_Devour
|
||||||
if (skill.snoRune == 3)
|
if (skill.snoRune == 3)
|
||||||
World.BuffManager.AddBuff(this, this, new P6_Necro_Devour_Aura());
|
World.BuffManager.AddBuff(this, this, new P6_Necro_Devour_Aura());
|
||||||
else
|
else
|
||||||
@ -3810,7 +3810,7 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
|||||||
AllBuffs.Clear();
|
AllBuffs.Clear();
|
||||||
BetweenWorlds = false;
|
BetweenWorlds = false;
|
||||||
|
|
||||||
if (_CurrentHPValue != -1)
|
if (Math.Abs(_CurrentHPValue - (-1)) > 0.0001)
|
||||||
{
|
{
|
||||||
Attributes[GameAttribute.Hitpoints_Cur] = _CurrentHPValue;
|
Attributes[GameAttribute.Hitpoints_Cur] = _CurrentHPValue;
|
||||||
Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1] = _CurrentResourceValue;
|
Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1] = _CurrentResourceValue;
|
||||||
@ -3828,7 +3828,8 @@ public class Player : Actor, IMessageConsumer, IUpdateable
|
|||||||
|
|
||||||
#region hero-state
|
#region hero-state
|
||||||
|
|
||||||
public void WTF()
|
[Obsolete("Does this make sense?")]
|
||||||
|
private void WTF()
|
||||||
{
|
{
|
||||||
Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, 208468] = true;
|
Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, 208468] = true;
|
||||||
Attributes[GameAttribute.Thorns_Fixed_Total, 0] = 0;
|
Attributes[GameAttribute.Thorns_Fixed_Total, 0] = 0;
|
||||||
|
|||||||
Loading…
Reference in New Issue
user.block.title