Update some commands to new system
Port From (https://github.com/TrinityCore/TrinityCore/commit/3260b94dd627b7b0c7114f94bb97d108b005af3e)
This commit is contained in:
@@ -14,88 +14,91 @@ namespace Game.Chat.Commands
|
||||
[CommandGroup("add")]
|
||||
class DisableAddCommands
|
||||
{
|
||||
static bool HandleAddDisables(uint entry, uint flags, string disableComment, CommandHandler handler, DisableType disableType)
|
||||
static bool HandleAddDisables(CommandHandler handler, DisableType disableType, uint entry, uint? flags, Tail disableComment)
|
||||
{
|
||||
if (entry == 0)
|
||||
return false;
|
||||
|
||||
if (disableComment.IsEmpty())
|
||||
return false;
|
||||
|
||||
switch (disableType)
|
||||
{
|
||||
case DisableType.Spell:
|
||||
{
|
||||
if (!Global.SpellMgr.HasSpellInfo(entry, Difficulty.None))
|
||||
{
|
||||
if (!Global.SpellMgr.HasSpellInfo(entry, Difficulty.None))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNospellfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.CommandNospellfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DisableType.Quest:
|
||||
{
|
||||
if (Global.ObjectMgr.GetQuestTemplate(entry) == null)
|
||||
{
|
||||
if (Global.ObjectMgr.GetQuestTemplate(entry) == null)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNoquestfound, entry);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.CommandNoquestfound, entry);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DisableType.Map:
|
||||
{
|
||||
if (!CliDB.MapStorage.ContainsKey(entry))
|
||||
{
|
||||
if (!CliDB.MapStorage.ContainsKey(entry))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DisableType.Battleground:
|
||||
{
|
||||
if (!CliDB.BattlemasterListStorage.ContainsKey(entry))
|
||||
{
|
||||
if (!CliDB.BattlemasterListStorage.ContainsKey(entry))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNoBattlegroundFound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.CommandNoBattlegroundFound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DisableType.Criteria:
|
||||
{
|
||||
if (Global.CriteriaMgr.GetCriteria(entry) == null)
|
||||
{
|
||||
if (Global.CriteriaMgr.GetCriteria(entry) == null)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNoAchievementCriteriaFound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.CommandNoAchievementCriteriaFound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DisableType.OutdoorPVP:
|
||||
{
|
||||
if (entry > (int)OutdoorPvPTypes.Max)
|
||||
{
|
||||
if (entry > (int)OutdoorPvPTypes.Max)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNoOutdoorPvpForund);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.CommandNoOutdoorPvpForund);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DisableType.VMAP:
|
||||
{
|
||||
if (!CliDB.MapStorage.ContainsKey(entry))
|
||||
{
|
||||
if (!CliDB.MapStorage.ContainsKey(entry))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DisableType.MMAP:
|
||||
{
|
||||
if (!CliDB.MapStorage.ContainsKey(entry))
|
||||
{
|
||||
if (!CliDB.MapStorage.ContainsKey(entry))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DisableType.LFGMap:
|
||||
{
|
||||
if (!CliDB.MapStorage.ContainsKey(entry))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -113,7 +116,7 @@ namespace Game.Chat.Commands
|
||||
stmt = WorldDatabase.GetPreparedStatement(WorldStatements.INS_DISABLES);
|
||||
stmt.AddValue(0, entry);
|
||||
stmt.AddValue(1, (byte)disableType);
|
||||
stmt.AddValue(2, flags);
|
||||
stmt.AddValue(2, flags.GetValueOrDefault(0));
|
||||
stmt.AddValue(3, disableComment);
|
||||
DB.World.Execute(stmt);
|
||||
|
||||
@@ -122,62 +125,59 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
[Command("spell", RBACPermissions.CommandDisableAddSpell, true)]
|
||||
static bool HandleAddDisableSpellCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
|
||||
static bool HandleAddDisableSpellCommand(CommandHandler handler, uint entry, uint? flags, Tail disableComment)
|
||||
{
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Spell);
|
||||
return HandleAddDisables(handler, DisableType.Spell, entry, flags, disableComment);
|
||||
}
|
||||
|
||||
[Command("quest", RBACPermissions.CommandDisableAddQuest, true)]
|
||||
static bool HandleAddDisableQuestCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
|
||||
static bool HandleAddDisableQuestCommand(CommandHandler handler, uint entry, uint? flags, Tail disableComment)
|
||||
{
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Quest);
|
||||
return HandleAddDisables(handler, DisableType.Quest, entry, flags, disableComment);
|
||||
}
|
||||
|
||||
[Command("map", RBACPermissions.CommandDisableAddMap, true)]
|
||||
static bool HandleAddDisableMapCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
|
||||
static bool HandleAddDisableMapCommand(CommandHandler handler, uint entry, uint? flags, Tail disableComment)
|
||||
{
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Map);
|
||||
return HandleAddDisables(handler, DisableType.Map, entry, flags, disableComment);
|
||||
}
|
||||
|
||||
[Command("Battleground", RBACPermissions.CommandDisableAddBattleground, true)]
|
||||
static bool HandleAddDisableBattlegroundCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
|
||||
static bool HandleAddDisableBattlegroundCommand(CommandHandler handler, uint entry, uint flags, Tail disableComment)
|
||||
{
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Battleground);
|
||||
return HandleAddDisables(handler, DisableType.Battleground, entry, flags, disableComment);
|
||||
}
|
||||
|
||||
[Command("criteria", RBACPermissions.CommandDisableAddCriteria, true)]
|
||||
static bool HandleAddDisableCriteriaCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
|
||||
static bool HandleAddDisableCriteriaCommand(CommandHandler handler, uint entry, uint flags, Tail disableComment)
|
||||
{
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Criteria);
|
||||
return HandleAddDisables(handler, DisableType.Criteria, entry, flags, disableComment);
|
||||
}
|
||||
|
||||
[Command("outdoorpvp", RBACPermissions.CommandDisableAddOutdoorpvp, true)]
|
||||
static bool HandleAddDisableOutdoorPvPCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
|
||||
static bool HandleAddDisableOutdoorPvPCommand(CommandHandler handler, uint entry, uint flags, Tail disableComment)
|
||||
{
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.OutdoorPVP);
|
||||
return HandleAddDisables(handler, DisableType.OutdoorPVP, entry, flags, disableComment);
|
||||
}
|
||||
|
||||
[Command("vmap", RBACPermissions.CommandDisableAddVmap, true)]
|
||||
static bool HandleAddDisableVmapCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
|
||||
static bool HandleAddDisableVmapCommand(CommandHandler handler, uint entry, uint flags, Tail disableComment)
|
||||
{
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.VMAP);
|
||||
return HandleAddDisables(handler, DisableType.VMAP, entry, flags, disableComment);
|
||||
}
|
||||
|
||||
[Command("mmap", RBACPermissions.CommandDisableAddMmap, true)]
|
||||
static bool HandleAddDisableMMapCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
|
||||
static bool HandleAddDisableMMapCommand(CommandHandler handler, uint entry, uint flags, Tail disableComment)
|
||||
{
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.MMAP);
|
||||
return HandleAddDisables(handler, DisableType.MMAP, entry, flags, disableComment);
|
||||
}
|
||||
}
|
||||
|
||||
[CommandGroup("remove")]
|
||||
class DisableRemoveCommands
|
||||
{
|
||||
static bool HandleRemoveDisables(uint entry, CommandHandler handler, DisableType disableType)
|
||||
static bool HandleRemoveDisables(CommandHandler handler, DisableType disableType, uint entry)
|
||||
{
|
||||
if (entry == 0)
|
||||
return false;
|
||||
|
||||
PreparedStatement stmt = WorldDatabase.GetPreparedStatement(WorldStatements.SEL_DISABLES);
|
||||
stmt.AddValue(0, entry);
|
||||
stmt.AddValue(1, (byte)disableType);
|
||||
@@ -200,49 +200,49 @@ namespace Game.Chat.Commands
|
||||
[Command("spell", RBACPermissions.CommandDisableRemoveSpell, true)]
|
||||
static bool HandleRemoveDisableSpellCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Spell);
|
||||
return HandleRemoveDisables(handler, DisableType.Spell, entry);
|
||||
}
|
||||
|
||||
[Command("quest", RBACPermissions.CommandDisableRemoveQuest, true)]
|
||||
static bool HandleRemoveDisableQuestCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Quest);
|
||||
return HandleRemoveDisables(handler, DisableType.Quest, entry);
|
||||
}
|
||||
|
||||
[Command("map", RBACPermissions.CommandDisableRemoveMap, true)]
|
||||
static bool HandleRemoveDisableMapCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Map);
|
||||
return HandleRemoveDisables(handler, DisableType.Map, entry);
|
||||
}
|
||||
|
||||
[Command("Battleground", RBACPermissions.CommandDisableRemoveBattleground, true)]
|
||||
static bool HandleRemoveDisableBattlegroundCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Battleground);
|
||||
return HandleRemoveDisables(handler, DisableType.Battleground, entry);
|
||||
}
|
||||
|
||||
[Command("criteria", RBACPermissions.CommandDisableRemoveCriteria, true)]
|
||||
static bool HandleRemoveDisableCriteriaCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Criteria);
|
||||
return HandleRemoveDisables(handler, DisableType.Criteria, entry);
|
||||
}
|
||||
|
||||
[Command("outdoorpvp", RBACPermissions.CommandDisableRemoveOutdoorpvp, true)]
|
||||
static bool HandleRemoveDisableOutdoorPvPCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
return HandleRemoveDisables(entry, handler, DisableType.OutdoorPVP);
|
||||
return HandleRemoveDisables(handler, DisableType.OutdoorPVP, entry);
|
||||
}
|
||||
|
||||
[Command("vmap", RBACPermissions.CommandDisableRemoveVmap, true)]
|
||||
static bool HandleRemoveDisableVmapCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
return HandleRemoveDisables(entry, handler, DisableType.VMAP);
|
||||
return HandleRemoveDisables(handler, DisableType.VMAP, entry);
|
||||
}
|
||||
|
||||
[Command("mmap", RBACPermissions.CommandDisableRemoveMmap, true)]
|
||||
static bool HandleRemoveDisableMMapCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
return HandleRemoveDisables(entry, handler, DisableType.MMAP);
|
||||
return HandleRemoveDisables(handler, DisableType.MMAP, entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,40 +133,22 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("list", RBACPermissions.CommandGroupList)]
|
||||
static bool HandleGroupListCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGroupListCommand(CommandHandler handler, PlayerIdentifier target)
|
||||
{
|
||||
// Get ALL the variables!
|
||||
Player playerTarget;
|
||||
ObjectGuid guidTarget;
|
||||
string nameTarget;
|
||||
string zoneName = "";
|
||||
string onlineState;
|
||||
|
||||
// Parse the guid to uint32...
|
||||
ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64());
|
||||
|
||||
// ... and try to extract a player out of it.
|
||||
if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out nameTarget))
|
||||
{
|
||||
playerTarget = Global.ObjAccessor.FindPlayer(parseGUID);
|
||||
guidTarget = parseGUID;
|
||||
}
|
||||
// If not, we return false and end right away.
|
||||
else if (!handler.ExtractPlayerTarget(args, out playerTarget, out guidTarget, out nameTarget))
|
||||
return false;
|
||||
string zoneName = "<ERROR>";
|
||||
string onlineState = "Offline";
|
||||
|
||||
// Next, we need a group. So we define a group variable.
|
||||
Group groupTarget = null;
|
||||
|
||||
// We try to extract a group from an online player.
|
||||
if (playerTarget)
|
||||
groupTarget = playerTarget.GetGroup();
|
||||
|
||||
// If not, we extract it from the SQL.
|
||||
if (!groupTarget)
|
||||
if (target.IsConnected())
|
||||
groupTarget = target.GetConnectedPlayer().GetGroup();
|
||||
else
|
||||
{
|
||||
// If not, we extract it from the SQL.
|
||||
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER);
|
||||
stmt.AddValue(0, guidTarget.GetCounter());
|
||||
stmt.AddValue(0, target.GetGUID().GetCounter());
|
||||
SQLResult resultGroup = DB.Characters.Query(stmt);
|
||||
if (!resultGroup.IsEmpty())
|
||||
groupTarget = Global.GroupMgr.GetGroupByDbStoreId(resultGroup.Read<uint>(0));
|
||||
@@ -175,7 +157,7 @@ namespace Game.Chat
|
||||
// If both fails, players simply has no party. Return false.
|
||||
if (!groupTarget)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.GroupNotInGroup, nameTarget);
|
||||
handler.SendSysMessage(CypherStrings.GroupNotInGroup, target.GetName());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -228,12 +210,6 @@ namespace Game.Chat
|
||||
zoneName = zone.AreaName[handler.GetSessionDbcLocale()];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// ... else, everything is set to offline or neutral values.
|
||||
zoneName = "<ERROR>";
|
||||
onlineState = "Offline";
|
||||
}
|
||||
|
||||
// Now we can print those informations for every single member of each group!
|
||||
handler.SendSysMessage(CypherStrings.GroupPlayerNameGuid, slot.name, onlineState,
|
||||
|
||||
@@ -167,20 +167,23 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("info", RBACPermissions.CommandGuildInfo, true)]
|
||||
static bool HandleGuildInfoCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGuildInfoCommand(CommandHandler handler, [OptionalArg][VariantArg(typeof(ulong), typeof(string))] dynamic guildIdentifier)
|
||||
{
|
||||
Guild guild = null;
|
||||
Player target = handler.GetSelectedPlayerOrSelf();
|
||||
|
||||
if (!args.Empty() && args[0] != '\0')
|
||||
if (guildIdentifier != null)
|
||||
{
|
||||
if (char.IsDigit(args[0]))
|
||||
guild = Global.GuildMgr.GetGuildById(args.NextUInt64());
|
||||
if (guildIdentifier is ulong)
|
||||
guild = Global.GuildMgr.GetGuildById(guildIdentifier);
|
||||
else
|
||||
guild = Global.GuildMgr.GetGuildByName(args.NextString());
|
||||
guild = Global.GuildMgr.GetGuildByName(guildIdentifier);
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayerIdentifier target = PlayerIdentifier.FromTargetOrSelf(handler);
|
||||
if (target != null && target.IsConnected())
|
||||
guild = target.GetConnectedPlayer().GetGuild();
|
||||
}
|
||||
else if (target)
|
||||
guild = target.GetGuild();
|
||||
|
||||
if (!guild)
|
||||
return false;
|
||||
|
||||
@@ -213,51 +213,8 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[CommandNonGroup("damage", RBACPermissions.CommandDamage)]
|
||||
static bool HandleDamageCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleDamageCommand(CommandHandler handler, uint damage, SpellSchools? school, [OptionalArg]SpellInfo spellInfo)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
string str = args.NextString();
|
||||
|
||||
if (str == "go")
|
||||
{
|
||||
ulong guidLow = args.NextUInt64();
|
||||
if (guidLow == 0)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.BadValue);
|
||||
return false;
|
||||
}
|
||||
|
||||
int damage = args.NextInt32();
|
||||
if (damage == 0)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.BadValue);
|
||||
return false;
|
||||
}
|
||||
Player player = handler.GetSession().GetPlayer();
|
||||
if (player)
|
||||
{
|
||||
GameObject go = handler.GetObjectFromPlayerMapByDbGuid(guidLow);
|
||||
if (!go)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandObjnotfound, guidLow);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!go.IsDestructibleBuilding())
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.InvalidGameobjectType);
|
||||
return false;
|
||||
}
|
||||
|
||||
go.ModifyHealth(-damage, player);
|
||||
handler.SendSysMessage(CypherStrings.GameobjectDamaged, go.GetName(), guidLow, -damage, go.GetGoValue().Building.Health);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Unit target = handler.GetSelectedUnit();
|
||||
if (!target || handler.GetSession().GetPlayer().GetTarget().IsEmpty())
|
||||
{
|
||||
@@ -272,74 +229,72 @@ namespace Game.Chat
|
||||
if (!target.IsAlive())
|
||||
return true;
|
||||
|
||||
if (!int.TryParse(str, out int damage_int))
|
||||
return false;
|
||||
|
||||
if (damage_int <= 0)
|
||||
return true;
|
||||
|
||||
uint damage_ = (uint)damage_int;
|
||||
|
||||
string schoolStr = args.NextString();
|
||||
|
||||
Player attacker = handler.GetSession().GetPlayer();
|
||||
|
||||
// flat melee damage without resistence/etc reduction
|
||||
if (string.IsNullOrEmpty(schoolStr))
|
||||
if (school.HasValue)
|
||||
{
|
||||
Unit.DealDamage(attacker, target, damage_, null, DamageEffectType.Direct, SpellSchoolMask.Normal, null, false);
|
||||
Unit.DealDamage(attacker, target, damage, null, DamageEffectType.Direct, SpellSchoolMask.Normal, null, false);
|
||||
if (target != attacker)
|
||||
attacker.SendAttackStateUpdate(HitInfo.AffectsVictim, target, SpellSchoolMask.Normal, damage_, 0, 0, VictimState.Hit, 0);
|
||||
attacker.SendAttackStateUpdate(HitInfo.AffectsVictim, target, SpellSchoolMask.Normal, damage, 0, 0, VictimState.Hit, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!int.TryParse(schoolStr, out int school) || school >= (int)SpellSchools.Max)
|
||||
return false;
|
||||
|
||||
SpellSchoolMask schoolmask = (SpellSchoolMask)(1 << school);
|
||||
SpellSchoolMask schoolmask = (SpellSchoolMask)(1 << (int)school.Value);
|
||||
|
||||
if (Unit.IsDamageReducedByArmor(schoolmask))
|
||||
damage_ = Unit.CalcArmorReducedDamage(handler.GetPlayer(), target, damage_, null, WeaponAttackType.BaseAttack);
|
||||
|
||||
string spellStr = args.NextString();
|
||||
damage = Unit.CalcArmorReducedDamage(handler.GetPlayer(), target, damage, null, WeaponAttackType.BaseAttack);
|
||||
|
||||
// melee damage by specific school
|
||||
if (string.IsNullOrEmpty(spellStr))
|
||||
if (spellInfo == null)
|
||||
{
|
||||
DamageInfo dmgInfo = new(attacker, target, damage_, null, schoolmask, DamageEffectType.SpellDirect, WeaponAttackType.BaseAttack);
|
||||
DamageInfo dmgInfo = new(attacker, target, damage, null, schoolmask, DamageEffectType.SpellDirect, WeaponAttackType.BaseAttack);
|
||||
Unit.CalcAbsorbResist(dmgInfo);
|
||||
|
||||
if (dmgInfo.GetDamage() == 0)
|
||||
return true;
|
||||
|
||||
damage_ = dmgInfo.GetDamage();
|
||||
damage = dmgInfo.GetDamage();
|
||||
|
||||
uint absorb = dmgInfo.GetAbsorb();
|
||||
uint resist = dmgInfo.GetResist();
|
||||
Unit.DealDamageMods(attacker, target, ref damage_, ref absorb);
|
||||
Unit.DealDamage(attacker, target, damage_, null, DamageEffectType.Direct, schoolmask, null, false);
|
||||
attacker.SendAttackStateUpdate(HitInfo.AffectsVictim, target, schoolmask, damage_, absorb, resist, VictimState.Hit, 0);
|
||||
Unit.DealDamageMods(attacker, target, ref damage, ref absorb);
|
||||
Unit.DealDamage(attacker, target, damage, null, DamageEffectType.Direct, schoolmask, null, false);
|
||||
attacker.SendAttackStateUpdate(HitInfo.AffectsVictim, target, schoolmask, damage, absorb, resist, VictimState.Hit, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
// non-melee damage
|
||||
// number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form
|
||||
uint spellid = handler.ExtractSpellIdFromLink(args);
|
||||
if (spellid == 0)
|
||||
return false;
|
||||
|
||||
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(spellid, attacker.GetMap().GetDifficultyID());
|
||||
if (spellInfo == null)
|
||||
return false;
|
||||
|
||||
SpellNonMeleeDamage damageInfo = new(attacker, target, spellInfo, new SpellCastVisual(spellInfo.GetSpellXSpellVisualId(attacker), 0), spellInfo.SchoolMask);
|
||||
damageInfo.damage = damage_;
|
||||
damageInfo.damage = damage;
|
||||
Unit.DealDamageMods(damageInfo.attacker, damageInfo.target, ref damageInfo.damage, ref damageInfo.absorb);
|
||||
target.DealSpellDamage(damageInfo, true);
|
||||
target.SendSpellNonMeleeDamageLog(damageInfo);
|
||||
return true;
|
||||
}
|
||||
|
||||
[CommandNonGroup("damage go", RBACPermissions.CommandDamage)]
|
||||
static bool HandleDamageGoCommand(CommandHandler handler, ulong spawnId, int damage)
|
||||
{
|
||||
GameObject go = handler.GetObjectFromPlayerMapByDbGuid(spawnId);
|
||||
if (go == null)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandObjnotfound, spawnId);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!go.IsDestructibleBuilding())
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.InvalidGameobjectType);
|
||||
return false;
|
||||
}
|
||||
|
||||
go.ModifyHealth(-damage, handler.GetSession().GetPlayer());
|
||||
handler.SendSysMessage(CypherStrings.GameobjectDamaged, go.GetName(), spawnId, -damage, go.GetGoValue().Building.Health);
|
||||
return true;
|
||||
}
|
||||
|
||||
[CommandNonGroup("dev", RBACPermissions.CommandDev)]
|
||||
static bool HandleDevCommand(CommandHandler handler, bool? enableArg)
|
||||
{
|
||||
@@ -1149,27 +1104,20 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[CommandNonGroup("pinfo", RBACPermissions.CommandPinfo, true)]
|
||||
static bool HandlePInfoCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandlePInfoCommand(CommandHandler handler, [OptionalArg]PlayerIdentifier arg)
|
||||
{
|
||||
// Define ALL the player variables!
|
||||
Player target;
|
||||
ObjectGuid targetGuid;
|
||||
string targetName;
|
||||
PreparedStatement stmt;
|
||||
if (arg == null)
|
||||
arg = PlayerIdentifier.FromTargetOrSelf(handler);
|
||||
|
||||
// To make sure we get a target, we convert our guid to an omniversal...
|
||||
ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64());
|
||||
|
||||
// ... and make sure we get a target, somehow.
|
||||
if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out targetName))
|
||||
{
|
||||
target = Global.ObjAccessor.FindPlayer(parseGUID);
|
||||
targetGuid = parseGUID;
|
||||
}
|
||||
// if not, then return false. Which shouldn't happen, now should it ?
|
||||
else if (!handler.ExtractPlayerTarget(args, out target, out targetGuid, out targetName))
|
||||
if (arg == null)
|
||||
return false;
|
||||
|
||||
// Define ALL the player variables!
|
||||
Player target = arg.GetConnectedPlayer();
|
||||
ObjectGuid targetGuid = arg.GetGUID();
|
||||
string targetName = arg.GetName();
|
||||
PreparedStatement stmt;
|
||||
|
||||
/* The variables we extract for the command. They are
|
||||
* default as "does not exist" to prevent problems
|
||||
* The output is printed in the follow manner:
|
||||
|
||||
@@ -94,10 +94,8 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("faction", RBACPermissions.CommandModifyFaction)]
|
||||
static bool HandleModifyFactionCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleModifyFactionCommand(CommandHandler handler, uint? factionid, uint? flag, ulong? npcflag, uint? dyflag)
|
||||
{
|
||||
string pfactionid = handler.ExtractKeyFromLink(args, "Hfaction");
|
||||
|
||||
Creature target = handler.GetSelectedCreature();
|
||||
if (!target)
|
||||
{
|
||||
@@ -105,34 +103,30 @@ namespace Game.Chat
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!uint.TryParse(pfactionid, out uint factionid))
|
||||
if (!flag.HasValue)
|
||||
flag = target.m_unitData.Flags;
|
||||
|
||||
if (!npcflag.HasValue)
|
||||
npcflag = (ulong)target.m_unitData.NpcFlags[0] << 32 | target.m_unitData.NpcFlags[1];
|
||||
|
||||
if (!dyflag.HasValue)
|
||||
dyflag = target.m_objectData.DynamicFlags;
|
||||
|
||||
if (!factionid.HasValue)
|
||||
{
|
||||
uint _factionid = target.GetFaction();
|
||||
uint _flag = target.m_unitData.Flags;
|
||||
ulong _npcflag = (ulong)target.m_unitData.NpcFlags[0] << 32 | target.m_unitData.NpcFlags[1];
|
||||
uint _dyflag = target.m_objectData.DynamicFlags;
|
||||
handler.SendSysMessage(CypherStrings.CurrentFaction, target.GetGUID().ToString(), _factionid, _flag, _npcflag, _dyflag);
|
||||
handler.SendSysMessage(CypherStrings.CurrentFaction, target.GetGUID().ToString(), factionid.Value, flag.Value, npcflag.Value, dyflag.Value);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!uint.TryParse(args.NextString(), out uint flag))
|
||||
flag = target.m_unitData.Flags;
|
||||
|
||||
if (!ulong.TryParse(args.NextString(), out ulong npcflag))
|
||||
npcflag = (ulong)target.m_unitData.NpcFlags[0] << 32 | target.m_unitData.NpcFlags[1];
|
||||
|
||||
if (!uint.TryParse(args.NextString(), out uint dyflag))
|
||||
dyflag = target.m_objectData.DynamicFlags;
|
||||
|
||||
if (!CliDB.FactionTemplateStorage.ContainsKey(factionid))
|
||||
if (!CliDB.FactionTemplateStorage.ContainsKey(factionid.Value))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.WrongFaction, factionid);
|
||||
handler.SendSysMessage(CypherStrings.WrongFaction, factionid.Value);
|
||||
return false;
|
||||
}
|
||||
|
||||
handler.SendSysMessage(CypherStrings.YouChangeFaction, target.GetGUID().ToString(), factionid, flag, npcflag, dyflag);
|
||||
handler.SendSysMessage(CypherStrings.YouChangeFaction, target.GetGUID().ToString(), factionid.Value, flag.Value, npcflag.Value, dyflag.Value);
|
||||
|
||||
target.SetFaction(factionid);
|
||||
target.SetFaction(factionid.Value);
|
||||
target.ReplaceAllUnitFlags((UnitFlags)flag);
|
||||
target.ReplaceAllNpcFlags((NPCFlags)(npcflag & 0xFFFFFFFF));
|
||||
target.ReplaceAllNpcFlags2((NPCFlags2)(npcflag >> 32));
|
||||
@@ -208,14 +202,8 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("mount", RBACPermissions.CommandModifyMount)]
|
||||
static bool HandleModifyMountCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleModifyMountCommand(CommandHandler handler, uint mount, float speed)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
if (!uint.TryParse(args.NextString(), out uint mount))
|
||||
return false;
|
||||
|
||||
if (!CliDB.CreatureDisplayInfoStorage.HasRecord(mount))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.NoMount);
|
||||
@@ -233,8 +221,7 @@ namespace Game.Chat
|
||||
if (handler.HasLowerSecurity(target, ObjectGuid.Empty))
|
||||
return false;
|
||||
|
||||
float speed;
|
||||
if (!CheckModifySpeed(args, handler, target, out speed, 0.1f, 50.0f))
|
||||
if (!CheckModifySpeed(handler, target, speed, 0.1f, 50.0f))
|
||||
return false;
|
||||
|
||||
NotifyModification(handler, target, CypherStrings.YouGiveMount, CypherStrings.MountGived);
|
||||
@@ -440,14 +427,8 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("phase", RBACPermissions.CommandModifyPhase)]
|
||||
static bool HandleModifyPhaseCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleModifyPhaseCommand(CommandHandler handler, uint phaseId, uint? visibleMapId)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
uint phaseId = args.NextUInt32();
|
||||
uint visibleMapId = args.NextUInt32();
|
||||
|
||||
if (phaseId != 0 && !CliDB.PhaseStorage.ContainsKey(phaseId))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.PhaseNotfound);
|
||||
@@ -456,19 +437,19 @@ namespace Game.Chat
|
||||
|
||||
Unit target = handler.GetSelectedUnit();
|
||||
|
||||
if (visibleMapId != 0)
|
||||
if (visibleMapId.HasValue)
|
||||
{
|
||||
MapRecord visibleMap = CliDB.MapStorage.LookupByKey(visibleMapId);
|
||||
MapRecord visibleMap = CliDB.MapStorage.LookupByKey(visibleMapId.Value);
|
||||
if (visibleMap == null || visibleMap.ParentMapID != target.GetMapId())
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.PhaseNotfound);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!target.GetPhaseShift().HasVisibleMapId(visibleMapId))
|
||||
PhasingHandler.AddVisibleMapId(target, visibleMapId);
|
||||
if (!target.GetPhaseShift().HasVisibleMapId(visibleMapId.Value))
|
||||
PhasingHandler.AddVisibleMapId(target, visibleMapId.Value);
|
||||
else
|
||||
PhasingHandler.RemoveVisibleMapId(target, visibleMapId);
|
||||
PhasingHandler.RemoveVisibleMapId(target, visibleMapId.Value);
|
||||
}
|
||||
|
||||
if (phaseId != 0)
|
||||
@@ -686,22 +667,17 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[CommandNonGroup("morph", RBACPermissions.CommandMorph)]
|
||||
static bool HandleModifyMorphCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleModifyMorphCommand(CommandHandler handler, uint displayId)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
uint display_id = args.NextUInt32();
|
||||
|
||||
Unit target = handler.GetSelectedUnit();
|
||||
if (!target)
|
||||
if (target == null)
|
||||
target = handler.GetSession().GetPlayer();
|
||||
|
||||
// check online security
|
||||
else if (target.IsTypeId(TypeId.Player) && handler.HasLowerSecurity(target.ToPlayer(), ObjectGuid.Empty))
|
||||
return false;
|
||||
|
||||
target.SetDisplayId(display_id);
|
||||
target.SetDisplayId(displayId);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -842,14 +818,8 @@ namespace Game.Chat
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool CheckModifySpeed(StringArguments args, CommandHandler handler, Unit target, out float speed, float minimumBound, float maximumBound, bool checkInFlight = true)
|
||||
static bool CheckModifySpeed(CommandHandler handler, Unit target, float speed, float minimumBound, float maximumBound, bool checkInFlight = true)
|
||||
{
|
||||
speed = 0f;
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
speed = args.NextSingle();
|
||||
|
||||
if (speed > maximumBound || speed < minimumBound)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.BadValue);
|
||||
@@ -877,5 +847,16 @@ namespace Game.Chat
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool CheckModifySpeed(CommandHandler handler, StringArguments args, Unit target, out float speed, float minimumBound, float maximumBound, bool checkInFlight = true)
|
||||
{
|
||||
speed = 0f;
|
||||
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
speed = (float)args.NextSingle();
|
||||
return CheckModifySpeed(handler, target, speed, minimumBound, maximumBound, checkInFlight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("learn", RBACPermissions.CommandPetLearn)]
|
||||
static bool HandlePetLearnCommand(CommandHandler handler, uint spellId)
|
||||
static bool HandlePetLearnCommand(CommandHandler handler, SpellInfo spellInfo)
|
||||
{
|
||||
Pet pet = GetSelectedPlayerPetOrOwn(handler);
|
||||
if (!pet)
|
||||
@@ -71,8 +71,7 @@ namespace Game.Chat
|
||||
return false;
|
||||
}
|
||||
|
||||
if (spellId == 0 || !Global.SpellMgr.HasSpellInfo(spellId, Difficulty.None))
|
||||
return false;
|
||||
uint spellId = spellInfo.Id;
|
||||
|
||||
// Check if pet already has it
|
||||
if (pet.HasSpell(spellId))
|
||||
@@ -82,8 +81,7 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
// Check if spell is valid
|
||||
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(spellId, Difficulty.None);
|
||||
if (spellInfo == null || !Global.SpellMgr.IsSpellValid(spellInfo))
|
||||
if (!Global.SpellMgr.IsSpellValid(spellInfo))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandSpellBroken, spellId);
|
||||
return false;
|
||||
@@ -96,7 +94,7 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("unlearn", RBACPermissions.CommandPetUnlearn)]
|
||||
static bool HandlePetUnlearnCommand(CommandHandler handler, uint spellId)
|
||||
static bool HandlePetUnlearnCommand(CommandHandler handler, SpellInfo spellInfo)
|
||||
{
|
||||
Pet pet = GetSelectedPlayerPetOrOwn(handler);
|
||||
if (!pet)
|
||||
@@ -105,6 +103,8 @@ namespace Game.Chat
|
||||
return false;
|
||||
}
|
||||
|
||||
uint spellId = spellInfo.Id;
|
||||
|
||||
if (pet.HasSpell(spellId))
|
||||
pet.RemoveSpell(spellId, false);
|
||||
else
|
||||
@@ -114,7 +114,7 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("level", RBACPermissions.CommandPetLevel)]
|
||||
static bool HandlePetLevelCommand(CommandHandler handler, int level)
|
||||
static bool HandlePetLevelCommand(CommandHandler handler, int? level)
|
||||
{
|
||||
Pet pet = GetSelectedPlayerPetOrOwn(handler);
|
||||
Player owner = pet ? pet.GetOwner() : null;
|
||||
@@ -124,15 +124,16 @@ namespace Game.Chat
|
||||
return false;
|
||||
}
|
||||
|
||||
if (level == 0)
|
||||
if (!level.HasValue)
|
||||
level = (int)(owner.GetLevel() - pet.GetLevel());
|
||||
|
||||
if (level == 0 || level < -SharedConst.StrongMaxLevel || level > SharedConst.StrongMaxLevel)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.BadValue);
|
||||
return false;
|
||||
}
|
||||
|
||||
int newLevel = (int)pet.GetLevel() + level;
|
||||
int newLevel = (int)pet.GetLevel() + level.Value;
|
||||
if (newLevel < 1)
|
||||
newLevel = 1;
|
||||
else if (newLevel > owner.GetLevel())
|
||||
|
||||
@@ -122,20 +122,8 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
[Command("money", RBACPermissions.CommandSendMoney, true)]
|
||||
static bool HandleSendMoneyCommand(CommandHandler handler, PlayerIdentifier playerIdentifier, QuotedString subject, QuotedString text, long money)
|
||||
static bool HandleSendMoneyCommand(CommandHandler handler, PlayerIdentifier receiver, QuotedString subject, QuotedString text, long money)
|
||||
{
|
||||
// format: name "subject text" "mail text" money
|
||||
if (playerIdentifier == null)
|
||||
playerIdentifier = PlayerIdentifier.FromTarget(handler);
|
||||
if (playerIdentifier == null)
|
||||
return false;
|
||||
|
||||
if (subject.IsEmpty() || text.IsEmpty())
|
||||
return false;
|
||||
|
||||
if (money <= 0)
|
||||
return false;
|
||||
|
||||
// from console show not existed sender
|
||||
MailSender sender = new(MailMessageType.Normal, handler.GetSession() ? handler.GetSession().GetPlayer().GetGUID().GetCounter() : 0, MailStationery.Gm);
|
||||
|
||||
@@ -143,11 +131,11 @@ namespace Game.Chat.Commands
|
||||
|
||||
new MailDraft(subject, text)
|
||||
.AddMoney((uint)money)
|
||||
.SendMailTo(trans, new MailReceiver(playerIdentifier.GetGUID().GetCounter()), sender);
|
||||
.SendMailTo(trans, new MailReceiver(receiver.GetConnectedPlayer(), receiver.GetGUID().GetCounter()), sender);
|
||||
|
||||
DB.Characters.CommitTransaction(trans);
|
||||
|
||||
string nameLink = handler.PlayerLink(playerIdentifier.GetName());
|
||||
string nameLink = handler.PlayerLink(receiver.GetName());
|
||||
handler.SendSysMessage(CypherStrings.MailSent, nameLink);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user