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")]
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);
}
}
}
+9 -33
View File
@@ -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,
+11 -8
View File
@@ -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;
+44 -96
View File
@@ -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:
+39 -58
View File
@@ -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);
}
}
}
+10 -9
View File
@@ -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())
+3 -15
View File
@@ -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;
}