Update some commands to new system

Port From (https://github.com/TrinityCore/TrinityCore/commit/3260b94dd627b7b0c7114f94bb97d108b005af3e)
This commit is contained in:
hondacrx
2023-05-23 06:25:00 -04:00
parent d55f4f836f
commit 89a09b1047
7 changed files with 200 additions and 303 deletions
+84 -84
View File
@@ -14,88 +14,91 @@ namespace Game.Chat.Commands
[CommandGroup("add")] [CommandGroup("add")]
class DisableAddCommands 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) switch (disableType)
{ {
case DisableType.Spell: case DisableType.Spell:
{
if (!Global.SpellMgr.HasSpellInfo(entry, Difficulty.None))
{ {
if (!Global.SpellMgr.HasSpellInfo(entry, Difficulty.None)) handler.SendSysMessage(CypherStrings.CommandNospellfound);
{ return false;
handler.SendSysMessage(CypherStrings.CommandNospellfound);
return false;
}
break;
} }
break;
}
case DisableType.Quest: case DisableType.Quest:
{
if (Global.ObjectMgr.GetQuestTemplate(entry) == null)
{ {
if (Global.ObjectMgr.GetQuestTemplate(entry) == null) handler.SendSysMessage(CypherStrings.CommandNoquestfound, entry);
{ return false;
handler.SendSysMessage(CypherStrings.CommandNoquestfound, entry);
return false;
}
break;
} }
break;
}
case DisableType.Map: case DisableType.Map:
{
if (!CliDB.MapStorage.ContainsKey(entry))
{ {
if (!CliDB.MapStorage.ContainsKey(entry)) handler.SendSysMessage(CypherStrings.CommandNomapfound);
{ return false;
handler.SendSysMessage(CypherStrings.CommandNomapfound);
return false;
}
break;
} }
break;
}
case DisableType.Battleground: case DisableType.Battleground:
{
if (!CliDB.BattlemasterListStorage.ContainsKey(entry))
{ {
if (!CliDB.BattlemasterListStorage.ContainsKey(entry)) handler.SendSysMessage(CypherStrings.CommandNoBattlegroundFound);
{ return false;
handler.SendSysMessage(CypherStrings.CommandNoBattlegroundFound);
return false;
}
break;
} }
break;
}
case DisableType.Criteria: case DisableType.Criteria:
{
if (Global.CriteriaMgr.GetCriteria(entry) == null)
{ {
if (Global.CriteriaMgr.GetCriteria(entry) == null) handler.SendSysMessage(CypherStrings.CommandNoAchievementCriteriaFound);
{ return false;
handler.SendSysMessage(CypherStrings.CommandNoAchievementCriteriaFound);
return false;
}
break;
} }
break;
}
case DisableType.OutdoorPVP: case DisableType.OutdoorPVP:
{
if (entry > (int)OutdoorPvPTypes.Max)
{ {
if (entry > (int)OutdoorPvPTypes.Max) handler.SendSysMessage(CypherStrings.CommandNoOutdoorPvpForund);
{ return false;
handler.SendSysMessage(CypherStrings.CommandNoOutdoorPvpForund);
return false;
}
break;
} }
break;
}
case DisableType.VMAP: case DisableType.VMAP:
{
if (!CliDB.MapStorage.ContainsKey(entry))
{ {
if (!CliDB.MapStorage.ContainsKey(entry)) handler.SendSysMessage(CypherStrings.CommandNomapfound);
{ return false;
handler.SendSysMessage(CypherStrings.CommandNomapfound);
return false;
}
break;
} }
break;
}
case DisableType.MMAP: case DisableType.MMAP:
{
if (!CliDB.MapStorage.ContainsKey(entry))
{ {
if (!CliDB.MapStorage.ContainsKey(entry)) handler.SendSysMessage(CypherStrings.CommandNomapfound);
{ return false;
handler.SendSysMessage(CypherStrings.CommandNomapfound);
return false;
}
break;
} }
break;
}
case DisableType.LFGMap:
{
if (!CliDB.MapStorage.ContainsKey(entry))
{
handler.SendSysMessage(CypherStrings.CommandNomapfound);
return false;
}
break;
}
default: default:
break; break;
} }
@@ -113,7 +116,7 @@ namespace Game.Chat.Commands
stmt = WorldDatabase.GetPreparedStatement(WorldStatements.INS_DISABLES); stmt = WorldDatabase.GetPreparedStatement(WorldStatements.INS_DISABLES);
stmt.AddValue(0, entry); stmt.AddValue(0, entry);
stmt.AddValue(1, (byte)disableType); stmt.AddValue(1, (byte)disableType);
stmt.AddValue(2, flags); stmt.AddValue(2, flags.GetValueOrDefault(0));
stmt.AddValue(3, disableComment); stmt.AddValue(3, disableComment);
DB.World.Execute(stmt); DB.World.Execute(stmt);
@@ -122,62 +125,59 @@ namespace Game.Chat.Commands
} }
[Command("spell", RBACPermissions.CommandDisableAddSpell, true)] [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)] [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)] [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)] [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)] [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)] [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)] [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)] [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")] [CommandGroup("remove")]
class DisableRemoveCommands 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); PreparedStatement stmt = WorldDatabase.GetPreparedStatement(WorldStatements.SEL_DISABLES);
stmt.AddValue(0, entry); stmt.AddValue(0, entry);
stmt.AddValue(1, (byte)disableType); stmt.AddValue(1, (byte)disableType);
@@ -200,49 +200,49 @@ namespace Game.Chat.Commands
[Command("spell", RBACPermissions.CommandDisableRemoveSpell, true)] [Command("spell", RBACPermissions.CommandDisableRemoveSpell, true)]
static bool HandleRemoveDisableSpellCommand(CommandHandler handler, uint entry) static bool HandleRemoveDisableSpellCommand(CommandHandler handler, uint entry)
{ {
return HandleRemoveDisables(entry, handler, DisableType.Spell); return HandleRemoveDisables(handler, DisableType.Spell, entry);
} }
[Command("quest", RBACPermissions.CommandDisableRemoveQuest, true)] [Command("quest", RBACPermissions.CommandDisableRemoveQuest, true)]
static bool HandleRemoveDisableQuestCommand(CommandHandler handler, uint entry) static bool HandleRemoveDisableQuestCommand(CommandHandler handler, uint entry)
{ {
return HandleRemoveDisables(entry, handler, DisableType.Quest); return HandleRemoveDisables(handler, DisableType.Quest, entry);
} }
[Command("map", RBACPermissions.CommandDisableRemoveMap, true)] [Command("map", RBACPermissions.CommandDisableRemoveMap, true)]
static bool HandleRemoveDisableMapCommand(CommandHandler handler, uint entry) static bool HandleRemoveDisableMapCommand(CommandHandler handler, uint entry)
{ {
return HandleRemoveDisables(entry, handler, DisableType.Map); return HandleRemoveDisables(handler, DisableType.Map, entry);
} }
[Command("Battleground", RBACPermissions.CommandDisableRemoveBattleground, true)] [Command("Battleground", RBACPermissions.CommandDisableRemoveBattleground, true)]
static bool HandleRemoveDisableBattlegroundCommand(CommandHandler handler, uint entry) static bool HandleRemoveDisableBattlegroundCommand(CommandHandler handler, uint entry)
{ {
return HandleRemoveDisables(entry, handler, DisableType.Battleground); return HandleRemoveDisables(handler, DisableType.Battleground, entry);
} }
[Command("criteria", RBACPermissions.CommandDisableRemoveCriteria, true)] [Command("criteria", RBACPermissions.CommandDisableRemoveCriteria, true)]
static bool HandleRemoveDisableCriteriaCommand(CommandHandler handler, uint entry) static bool HandleRemoveDisableCriteriaCommand(CommandHandler handler, uint entry)
{ {
return HandleRemoveDisables(entry, handler, DisableType.Criteria); return HandleRemoveDisables(handler, DisableType.Criteria, entry);
} }
[Command("outdoorpvp", RBACPermissions.CommandDisableRemoveOutdoorpvp, true)] [Command("outdoorpvp", RBACPermissions.CommandDisableRemoveOutdoorpvp, true)]
static bool HandleRemoveDisableOutdoorPvPCommand(CommandHandler handler, uint entry) static bool HandleRemoveDisableOutdoorPvPCommand(CommandHandler handler, uint entry)
{ {
return HandleRemoveDisables(entry, handler, DisableType.OutdoorPVP); return HandleRemoveDisables(handler, DisableType.OutdoorPVP, entry);
} }
[Command("vmap", RBACPermissions.CommandDisableRemoveVmap, true)] [Command("vmap", RBACPermissions.CommandDisableRemoveVmap, true)]
static bool HandleRemoveDisableVmapCommand(CommandHandler handler, uint entry) static bool HandleRemoveDisableVmapCommand(CommandHandler handler, uint entry)
{ {
return HandleRemoveDisables(entry, handler, DisableType.VMAP); return HandleRemoveDisables(handler, DisableType.VMAP, entry);
} }
[Command("mmap", RBACPermissions.CommandDisableRemoveMmap, true)] [Command("mmap", RBACPermissions.CommandDisableRemoveMmap, true)]
static bool HandleRemoveDisableMMapCommand(CommandHandler handler, uint entry) static bool HandleRemoveDisableMMapCommand(CommandHandler handler, uint entry)
{ {
return HandleRemoveDisables(entry, handler, DisableType.MMAP); return HandleRemoveDisables(handler, DisableType.MMAP, entry);
} }
} }
} }
+9 -33
View File
@@ -133,40 +133,22 @@ namespace Game.Chat
} }
[Command("list", RBACPermissions.CommandGroupList)] [Command("list", RBACPermissions.CommandGroupList)]
static bool HandleGroupListCommand(CommandHandler handler, StringArguments args) static bool HandleGroupListCommand(CommandHandler handler, PlayerIdentifier target)
{ {
// Get ALL the variables! string zoneName = "<ERROR>";
Player playerTarget; string onlineState = "Offline";
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;
// Next, we need a group. So we define a group variable. // Next, we need a group. So we define a group variable.
Group groupTarget = null; Group groupTarget = null;
// We try to extract a group from an online player. // We try to extract a group from an online player.
if (playerTarget) if (target.IsConnected())
groupTarget = playerTarget.GetGroup(); groupTarget = target.GetConnectedPlayer().GetGroup();
else
// If not, we extract it from the SQL.
if (!groupTarget)
{ {
// If not, we extract it from the SQL.
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER); 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); SQLResult resultGroup = DB.Characters.Query(stmt);
if (!resultGroup.IsEmpty()) if (!resultGroup.IsEmpty())
groupTarget = Global.GroupMgr.GetGroupByDbStoreId(resultGroup.Read<uint>(0)); 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 both fails, players simply has no party. Return false.
if (!groupTarget) if (!groupTarget)
{ {
handler.SendSysMessage(CypherStrings.GroupNotInGroup, nameTarget); handler.SendSysMessage(CypherStrings.GroupNotInGroup, target.GetName());
return false; return false;
} }
@@ -228,12 +210,6 @@ namespace Game.Chat
zoneName = zone.AreaName[handler.GetSessionDbcLocale()]; 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! // Now we can print those informations for every single member of each group!
handler.SendSysMessage(CypherStrings.GroupPlayerNameGuid, slot.name, onlineState, handler.SendSysMessage(CypherStrings.GroupPlayerNameGuid, slot.name, onlineState,
+11 -8
View File
@@ -167,20 +167,23 @@ namespace Game.Chat
} }
[Command("info", RBACPermissions.CommandGuildInfo, true)] [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; Guild guild = null;
Player target = handler.GetSelectedPlayerOrSelf();
if (!args.Empty() && args[0] != '\0') if (guildIdentifier != null)
{ {
if (char.IsDigit(args[0])) if (guildIdentifier is ulong)
guild = Global.GuildMgr.GetGuildById(args.NextUInt64()); guild = Global.GuildMgr.GetGuildById(guildIdentifier);
else 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) if (!guild)
return false; return false;
+44 -96
View File
@@ -213,51 +213,8 @@ namespace Game.Chat
} }
[CommandNonGroup("damage", RBACPermissions.CommandDamage)] [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(); Unit target = handler.GetSelectedUnit();
if (!target || handler.GetSession().GetPlayer().GetTarget().IsEmpty()) if (!target || handler.GetSession().GetPlayer().GetTarget().IsEmpty())
{ {
@@ -272,74 +229,72 @@ namespace Game.Chat
if (!target.IsAlive()) if (!target.IsAlive())
return true; 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(); Player attacker = handler.GetSession().GetPlayer();
// flat melee damage without resistence/etc reduction // 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) 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; return true;
} }
if (!int.TryParse(schoolStr, out int school) || school >= (int)SpellSchools.Max) SpellSchoolMask schoolmask = (SpellSchoolMask)(1 << (int)school.Value);
return false;
SpellSchoolMask schoolmask = (SpellSchoolMask)(1 << school);
if (Unit.IsDamageReducedByArmor(schoolmask)) if (Unit.IsDamageReducedByArmor(schoolmask))
damage_ = Unit.CalcArmorReducedDamage(handler.GetPlayer(), target, damage_, null, WeaponAttackType.BaseAttack); damage = Unit.CalcArmorReducedDamage(handler.GetPlayer(), target, damage, null, WeaponAttackType.BaseAttack);
string spellStr = args.NextString();
// melee damage by specific school // 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); Unit.CalcAbsorbResist(dmgInfo);
if (dmgInfo.GetDamage() == 0) if (dmgInfo.GetDamage() == 0)
return true; return true;
damage_ = dmgInfo.GetDamage(); damage = dmgInfo.GetDamage();
uint absorb = dmgInfo.GetAbsorb(); uint absorb = dmgInfo.GetAbsorb();
uint resist = dmgInfo.GetResist(); uint resist = dmgInfo.GetResist();
Unit.DealDamageMods(attacker, target, ref damage_, ref absorb); Unit.DealDamageMods(attacker, target, ref damage, ref absorb);
Unit.DealDamage(attacker, target, damage_, null, DamageEffectType.Direct, schoolmask, null, false); Unit.DealDamage(attacker, target, damage, null, DamageEffectType.Direct, schoolmask, null, false);
attacker.SendAttackStateUpdate(HitInfo.AffectsVictim, target, schoolmask, damage_, absorb, resist, VictimState.Hit, 0); attacker.SendAttackStateUpdate(HitInfo.AffectsVictim, target, schoolmask, damage, absorb, resist, VictimState.Hit, 0);
return true; return true;
} }
// non-melee damage // 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); 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); Unit.DealDamageMods(damageInfo.attacker, damageInfo.target, ref damageInfo.damage, ref damageInfo.absorb);
target.DealSpellDamage(damageInfo, true); target.DealSpellDamage(damageInfo, true);
target.SendSpellNonMeleeDamageLog(damageInfo); target.SendSpellNonMeleeDamageLog(damageInfo);
return true; 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)] [CommandNonGroup("dev", RBACPermissions.CommandDev)]
static bool HandleDevCommand(CommandHandler handler, bool? enableArg) static bool HandleDevCommand(CommandHandler handler, bool? enableArg)
{ {
@@ -1149,27 +1104,20 @@ namespace Game.Chat
} }
[CommandNonGroup("pinfo", RBACPermissions.CommandPinfo, true)] [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! if (arg == null)
Player target; arg = PlayerIdentifier.FromTargetOrSelf(handler);
ObjectGuid targetGuid;
string targetName;
PreparedStatement stmt;
// To make sure we get a target, we convert our guid to an omniversal... if (arg == null)
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))
return false; 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 /* The variables we extract for the command. They are
* default as "does not exist" to prevent problems * default as "does not exist" to prevent problems
* The output is printed in the follow manner: * The output is printed in the follow manner:
+39 -58
View File
@@ -94,10 +94,8 @@ namespace Game.Chat
} }
[Command("faction", RBACPermissions.CommandModifyFaction)] [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(); Creature target = handler.GetSelectedCreature();
if (!target) if (!target)
{ {
@@ -105,34 +103,30 @@ namespace Game.Chat
return false; 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(); handler.SendSysMessage(CypherStrings.CurrentFaction, target.GetGUID().ToString(), factionid.Value, flag.Value, npcflag.Value, dyflag.Value);
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);
return true; return true;
} }
if (!uint.TryParse(args.NextString(), out uint flag)) if (!CliDB.FactionTemplateStorage.ContainsKey(factionid.Value))
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))
{ {
handler.SendSysMessage(CypherStrings.WrongFaction, factionid); handler.SendSysMessage(CypherStrings.WrongFaction, factionid.Value);
return false; 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.ReplaceAllUnitFlags((UnitFlags)flag);
target.ReplaceAllNpcFlags((NPCFlags)(npcflag & 0xFFFFFFFF)); target.ReplaceAllNpcFlags((NPCFlags)(npcflag & 0xFFFFFFFF));
target.ReplaceAllNpcFlags2((NPCFlags2)(npcflag >> 32)); target.ReplaceAllNpcFlags2((NPCFlags2)(npcflag >> 32));
@@ -208,14 +202,8 @@ namespace Game.Chat
} }
[Command("mount", RBACPermissions.CommandModifyMount)] [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)) if (!CliDB.CreatureDisplayInfoStorage.HasRecord(mount))
{ {
handler.SendSysMessage(CypherStrings.NoMount); handler.SendSysMessage(CypherStrings.NoMount);
@@ -233,8 +221,7 @@ namespace Game.Chat
if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) if (handler.HasLowerSecurity(target, ObjectGuid.Empty))
return false; return false;
float speed; if (!CheckModifySpeed(handler, target, speed, 0.1f, 50.0f))
if (!CheckModifySpeed(args, handler, target, out speed, 0.1f, 50.0f))
return false; return false;
NotifyModification(handler, target, CypherStrings.YouGiveMount, CypherStrings.MountGived); NotifyModification(handler, target, CypherStrings.YouGiveMount, CypherStrings.MountGived);
@@ -440,14 +427,8 @@ namespace Game.Chat
} }
[Command("phase", RBACPermissions.CommandModifyPhase)] [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)) if (phaseId != 0 && !CliDB.PhaseStorage.ContainsKey(phaseId))
{ {
handler.SendSysMessage(CypherStrings.PhaseNotfound); handler.SendSysMessage(CypherStrings.PhaseNotfound);
@@ -456,19 +437,19 @@ namespace Game.Chat
Unit target = handler.GetSelectedUnit(); 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()) if (visibleMap == null || visibleMap.ParentMapID != target.GetMapId())
{ {
handler.SendSysMessage(CypherStrings.PhaseNotfound); handler.SendSysMessage(CypherStrings.PhaseNotfound);
return false; return false;
} }
if (!target.GetPhaseShift().HasVisibleMapId(visibleMapId)) if (!target.GetPhaseShift().HasVisibleMapId(visibleMapId.Value))
PhasingHandler.AddVisibleMapId(target, visibleMapId); PhasingHandler.AddVisibleMapId(target, visibleMapId.Value);
else else
PhasingHandler.RemoveVisibleMapId(target, visibleMapId); PhasingHandler.RemoveVisibleMapId(target, visibleMapId.Value);
} }
if (phaseId != 0) if (phaseId != 0)
@@ -686,22 +667,17 @@ namespace Game.Chat
} }
[CommandNonGroup("morph", RBACPermissions.CommandMorph)] [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(); Unit target = handler.GetSelectedUnit();
if (!target) if (target == null)
target = handler.GetSession().GetPlayer(); target = handler.GetSession().GetPlayer();
// check online security // check online security
else if (target.IsTypeId(TypeId.Player) && handler.HasLowerSecurity(target.ToPlayer(), ObjectGuid.Empty)) else if (target.IsTypeId(TypeId.Player) && handler.HasLowerSecurity(target.ToPlayer(), ObjectGuid.Empty))
return false; return false;
target.SetDisplayId(display_id); target.SetDisplayId(displayId);
return true; return true;
} }
@@ -842,14 +818,8 @@ namespace Game.Chat
return true; 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) if (speed > maximumBound || speed < minimumBound)
{ {
handler.SendSysMessage(CypherStrings.BadValue); handler.SendSysMessage(CypherStrings.BadValue);
@@ -877,5 +847,16 @@ namespace Game.Chat
} }
return true; 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);
}
} }
} }
+10 -9
View File
@@ -62,7 +62,7 @@ namespace Game.Chat
} }
[Command("learn", RBACPermissions.CommandPetLearn)] [Command("learn", RBACPermissions.CommandPetLearn)]
static bool HandlePetLearnCommand(CommandHandler handler, uint spellId) static bool HandlePetLearnCommand(CommandHandler handler, SpellInfo spellInfo)
{ {
Pet pet = GetSelectedPlayerPetOrOwn(handler); Pet pet = GetSelectedPlayerPetOrOwn(handler);
if (!pet) if (!pet)
@@ -71,8 +71,7 @@ namespace Game.Chat
return false; return false;
} }
if (spellId == 0 || !Global.SpellMgr.HasSpellInfo(spellId, Difficulty.None)) uint spellId = spellInfo.Id;
return false;
// Check if pet already has it // Check if pet already has it
if (pet.HasSpell(spellId)) if (pet.HasSpell(spellId))
@@ -82,8 +81,7 @@ namespace Game.Chat
} }
// Check if spell is valid // Check if spell is valid
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(spellId, Difficulty.None); if (!Global.SpellMgr.IsSpellValid(spellInfo))
if (spellInfo == null || !Global.SpellMgr.IsSpellValid(spellInfo))
{ {
handler.SendSysMessage(CypherStrings.CommandSpellBroken, spellId); handler.SendSysMessage(CypherStrings.CommandSpellBroken, spellId);
return false; return false;
@@ -96,7 +94,7 @@ namespace Game.Chat
} }
[Command("unlearn", RBACPermissions.CommandPetUnlearn)] [Command("unlearn", RBACPermissions.CommandPetUnlearn)]
static bool HandlePetUnlearnCommand(CommandHandler handler, uint spellId) static bool HandlePetUnlearnCommand(CommandHandler handler, SpellInfo spellInfo)
{ {
Pet pet = GetSelectedPlayerPetOrOwn(handler); Pet pet = GetSelectedPlayerPetOrOwn(handler);
if (!pet) if (!pet)
@@ -105,6 +103,8 @@ namespace Game.Chat
return false; return false;
} }
uint spellId = spellInfo.Id;
if (pet.HasSpell(spellId)) if (pet.HasSpell(spellId))
pet.RemoveSpell(spellId, false); pet.RemoveSpell(spellId, false);
else else
@@ -114,7 +114,7 @@ namespace Game.Chat
} }
[Command("level", RBACPermissions.CommandPetLevel)] [Command("level", RBACPermissions.CommandPetLevel)]
static bool HandlePetLevelCommand(CommandHandler handler, int level) static bool HandlePetLevelCommand(CommandHandler handler, int? level)
{ {
Pet pet = GetSelectedPlayerPetOrOwn(handler); Pet pet = GetSelectedPlayerPetOrOwn(handler);
Player owner = pet ? pet.GetOwner() : null; Player owner = pet ? pet.GetOwner() : null;
@@ -124,15 +124,16 @@ namespace Game.Chat
return false; return false;
} }
if (level == 0) if (!level.HasValue)
level = (int)(owner.GetLevel() - pet.GetLevel()); level = (int)(owner.GetLevel() - pet.GetLevel());
if (level == 0 || level < -SharedConst.StrongMaxLevel || level > SharedConst.StrongMaxLevel) if (level == 0 || level < -SharedConst.StrongMaxLevel || level > SharedConst.StrongMaxLevel)
{ {
handler.SendSysMessage(CypherStrings.BadValue); handler.SendSysMessage(CypherStrings.BadValue);
return false; return false;
} }
int newLevel = (int)pet.GetLevel() + level; int newLevel = (int)pet.GetLevel() + level.Value;
if (newLevel < 1) if (newLevel < 1)
newLevel = 1; newLevel = 1;
else if (newLevel > owner.GetLevel()) else if (newLevel > owner.GetLevel())
+3 -15
View File
@@ -122,20 +122,8 @@ namespace Game.Chat.Commands
} }
[Command("money", RBACPermissions.CommandSendMoney, true)] [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 // from console show not existed sender
MailSender sender = new(MailMessageType.Normal, handler.GetSession() ? handler.GetSession().GetPlayer().GetGUID().GetCounter() : 0, MailStationery.Gm); 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) new MailDraft(subject, text)
.AddMoney((uint)money) .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); DB.Characters.CommitTransaction(trans);
string nameLink = handler.PlayerLink(playerIdentifier.GetName()); string nameLink = handler.PlayerLink(receiver.GetName());
handler.SendSysMessage(CypherStrings.MailSent, nameLink); handler.SendSysMessage(CypherStrings.MailSent, nameLink);
return true; return true;
} }