Scripts/Commands: Convert argument parsing of .npc commands

Port From (https://github.com/TrinityCore/TrinityCore/commit/4d62cc70d6a7726d6619ba5c722fcb74d1123396)
This commit is contained in:
hondacrx
2022-06-04 18:24:49 -04:00
parent 91226121c4
commit 5473f9b82e
+121 -315
View File
@@ -34,27 +34,19 @@ namespace Game.Chat
class NPCCommands
{
[Command("despawngroup", RBACPermissions.CommandNpcDespawngroup)]
static bool HandleNpcDespawnGroup(CommandHandler handler, StringArguments args)
static bool HandleNpcDespawnGroup(CommandHandler handler, string[] opts)
{
if (args.Empty())
if (opts.Empty())
return false;
bool deleteRespawnTimes = false;
uint groupId = 0;
// Decode arguments
string arg = args.NextString();
while (!arg.IsEmpty())
foreach (var variant in opts)
{
string thisArg = arg.ToLower();
if (thisArg == "removerespawntime")
if (!uint.TryParse(variant, out groupId))
deleteRespawnTimes = true;
else if (thisArg.IsEmpty() || !thisArg.IsNumber())
return false;
else
groupId = uint.Parse(thisArg);
arg = args.NextString();
}
Player player = handler.GetSession().GetPlayer();
@@ -69,7 +61,7 @@ namespace Game.Chat
}
[Command("evade", RBACPermissions.CommandNpcEvade)]
static bool HandleNpcEvadeCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcEvadeCommand(CommandHandler handler, EvadeReason? why, string force)
{
Creature creatureTarget = handler.GetSelectedCreature();
if (!creatureTarget || creatureTarget.IsPet())
@@ -84,36 +76,15 @@ namespace Game.Chat
return false;
}
string type_str = args.NextString();
string force_str = args.NextString();
EvadeReason why = EvadeReason.Other;
bool force = false;
if (!type_str.IsEmpty())
{
if (type_str.Equals("NO_HOSTILES") || type_str.Equals("EVADE_REASON_NO_HOSTILES"))
why = EvadeReason.NoHostiles;
else if (type_str.Equals("BOUNDARY") || type_str.Equals("EVADE_REASON_BOUNDARY"))
why = EvadeReason.Boundary;
else if (type_str.Equals("SEQUENCE_BREAK") || type_str.Equals("EVADE_REASON_SEQUENCE_BREAK"))
why = EvadeReason.SequenceBreak;
else if (type_str.Equals("FORCE"))
force = true;
if (!force && !force_str.IsEmpty())
if (force_str.Equals("FORCE"))
force = true;
}
if (force)
if (force.Equals("force"))
creatureTarget.ClearUnitState(UnitState.Evade);
creatureTarget.GetAI().EnterEvadeMode(why);
creatureTarget.GetAI().EnterEvadeMode(why.GetValueOrDefault(EvadeReason.Other));
return true;
}
[Command("info", RBACPermissions.CommandNpcInfo)]
static bool HandleNpcInfoCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcInfoCommand(CommandHandler handler)
{
Creature target = handler.GetSelectedCreature();
if (!target)
@@ -202,28 +173,17 @@ namespace Game.Chat
}
[Command("move", RBACPermissions.CommandNpcMove)]
static bool HandleNpcMoveCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcMoveCommand(CommandHandler handler, ulong? spawnId)
{
ulong lowguid;
Creature creature = handler.GetSelectedCreature();
Player player = handler.GetSession().GetPlayer();
if (player == null)
return false;
if (creature != null)
lowguid = creature.GetSpawnId();
else
{
// number or [name] Shift-click form |color|Hcreature:creature_guid|h[name]|h|r
string cId = handler.ExtractKeyFromLink(args, "Hcreature");
if (cId.IsEmpty())
return false;
if (!ulong.TryParse(cId, out lowguid))
return false;
}
if (!spawnId.HasValue && creature == null)
return false;
ulong lowguid = spawnId.HasValue ? spawnId.Value : creature.GetSpawnId();
// Attempting creature load from DB data
CreatureData data = Global.ObjectMgr.GetCreatureData(lowguid);
@@ -254,23 +214,17 @@ namespace Game.Chat
DB.World.Execute(stmt);
// respawn selected creature at the new location
if (creature)
{
if (creature.IsAlive())
creature.SetDeathState(DeathState.JustDied);
creature.Respawn(true);
if (!creature.GetRespawnCompatibilityMode())
creature.AddObjectToRemoveList();
}
if (creature != null)
creature.DespawnOrUnsummon(TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(1));
handler.SendSysMessage(CypherStrings.CommandCreaturemoved);
return true;
}
[Command("near", RBACPermissions.CommandNpcNear)]
static bool HandleNpcNearCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcNearCommand(CommandHandler handler, float? dist)
{
float distance = args.Empty() ? 10.0f : args.NextSingle();
float distance = dist.GetValueOrDefault(10.0f);
uint count = 0;
Player player = handler.GetPlayer();
@@ -314,10 +268,8 @@ namespace Game.Chat
}
[Command("playemote", RBACPermissions.CommandNpcPlayemote)]
static bool HandleNpcPlayEmoteCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcPlayEmoteCommand(CommandHandler handler, uint emote)
{
uint emote = args.NextUInt32();
Creature target = handler.GetSelectedCreature();
if (!target)
{
@@ -331,9 +283,9 @@ namespace Game.Chat
}
[Command("say", RBACPermissions.CommandNpcSay)]
static bool HandleNpcSayCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSayCommand(CommandHandler handler, string text)
{
if (args.Empty())
if (text.IsEmpty())
return false;
Creature creature = handler.GetSelectedCreature();
@@ -342,7 +294,7 @@ namespace Game.Chat
handler.SendSysMessage(CypherStrings.SelectCreature);
return false;
}
string text = args.GetString();
creature.Say(text, Language.Universal);
// make some emotes
@@ -363,7 +315,7 @@ namespace Game.Chat
}
[Command("showloot", RBACPermissions.CommandNpcShowloot)]
static bool HandleNpcShowLootCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcShowLootCommand(CommandHandler handler, string all)
{
Creature creatureTarget = handler.GetSelectedCreature();
if (creatureTarget == null || creatureTarget.IsPet())
@@ -382,7 +334,7 @@ namespace Game.Chat
handler.SendSysMessage(CypherStrings.CommandNpcShowLootHeader, creatureTarget.GetName(), creatureTarget.GetEntry());
handler.SendSysMessage(CypherStrings.CommandNpcShowLootMoney, loot.gold / MoneyConstants.Gold, (loot.gold % MoneyConstants.Gold) / MoneyConstants.Silver, loot.gold % MoneyConstants.Silver);
if (args.NextString() == "all") // nonzero from strcmp <. not equal
if (all.Equals("all")) // nonzero from strcmp <. not equal
{
handler.SendSysMessage(CypherStrings.CommandNpcShowLootLabel, "Standard items", loot.items.Count);
foreach (LootItem item in loot.items)
@@ -424,9 +376,9 @@ namespace Game.Chat
}
[Command("spawngroup", RBACPermissions.CommandNpcSpawngroup)]
static bool HandleNpcSpawnGroup(CommandHandler handler, StringArguments args)
static bool HandleNpcSpawnGroup(CommandHandler handler, string[] opts)
{
if (args.Empty())
if (opts.Empty())
return false;
bool ignoreRespawn = false;
@@ -434,20 +386,20 @@ namespace Game.Chat
uint groupId = 0;
// Decode arguments
string arg = args.NextString();
while (!arg.IsEmpty())
foreach (var variant in opts)
{
string thisArg = arg.ToLower();
if (thisArg == "ignorerespawn")
ignoreRespawn = true;
else if (thisArg == "force")
force = true;
else if (thisArg.IsEmpty() || !thisArg.IsNumber())
return false;
else
groupId = uint.Parse(thisArg);
arg = args.NextString();
switch (variant)
{
case "force":
force = true;
break;
case "ignorerespawn":
ignoreRespawn = true;
break;
default:
uint.TryParse(variant, out groupId);
break;
}
}
Player player = handler.GetSession().GetPlayer();
@@ -465,7 +417,7 @@ namespace Game.Chat
}
[Command("tame", RBACPermissions.CommandNpcTame)]
static bool HandleNpcTameCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcTameCommand(CommandHandler handler)
{
Creature creatureTarget = handler.GetSelectedCreature();
if (!creatureTarget || creatureTarget.IsPet())
@@ -528,34 +480,24 @@ namespace Game.Chat
}
[Command("textemote", RBACPermissions.CommandNpcTextemote)]
static bool HandleNpcTextEmoteCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcTextEmoteCommand(CommandHandler handler, string text)
{
if (args.Empty())
return false;
Creature creature = handler.GetSelectedCreature();
if (!creature)
{
handler.SendSysMessage(CypherStrings.SelectCreature);
return false;
}
creature.TextEmote(args.NextString());
creature.TextEmote(text);
return true;
}
[Command("whisper", RBACPermissions.CommandNpcWhisper)]
static bool HandleNpcWhisperCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcWhisperCommand(CommandHandler handler, string recv, string text)
{
if (args.Empty())
return false;
string receiver_str = args.NextString();
string text = args.NextString("");
if (string.IsNullOrEmpty(receiver_str) || string.IsNullOrEmpty(text))
if (text.IsEmpty())
{
handler.SendSysMessage(CypherStrings.CmdSyntax);
return false;
@@ -568,13 +510,8 @@ namespace Game.Chat
return false;
}
if (!ulong.TryParse(receiver_str, out ulong guid))
return false;
ObjectGuid receiver_guid = ObjectGuid.Create(HighGuid.Player, guid);
// check online security
Player receiver = Global.ObjAccessor.FindPlayer(receiver_guid);
Player receiver = Global.ObjAccessor.FindPlayerByName(recv);
if (handler.HasLowerSecurity(receiver, ObjectGuid.Empty))
return false;
@@ -583,9 +520,9 @@ namespace Game.Chat
}
[Command("yell", RBACPermissions.CommandNpcYell)]
static bool HandleNpcYellCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcYellCommand(CommandHandler handler, string text)
{
if (args.Empty())
if (text.IsEmpty())
return false;
Creature creature = handler.GetSelectedCreature();
@@ -595,7 +532,7 @@ namespace Game.Chat
return false;
}
creature.Yell(args.NextString(), Language.Universal);
creature.Yell(text, Language.Universal);
// make an emote
creature.HandleEmoteCommand(Emote.OneshotShout);
@@ -639,16 +576,9 @@ namespace Game.Chat
class AddCommands
{
[Command("", RBACPermissions.CommandNpcAdd)]
static bool HandleNpcAddCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcAddCommand(CommandHandler handler, uint id)
{
if (args.Empty())
return false;
string charID = handler.ExtractKeyFromLink(args, "Hcreature_entry");
if (string.IsNullOrEmpty(charID))
return false;
if (!uint.TryParse(charID, out uint id) || Global.ObjectMgr.GetCreatureTemplate(id) == null)
if (Global.ObjectMgr.GetCreatureTemplate(id) == null)
return false;
Player chr = handler.GetSession().GetPlayer();
@@ -695,28 +625,14 @@ namespace Game.Chat
}
[Command("item", RBACPermissions.CommandNpcAddItem)]
static bool HandleNpcAddVendorItemCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcAddVendorItemCommand(CommandHandler handler, uint itemId, uint? mc, uint? it, uint? ec, string bonusListIds)
{
if (args.Empty())
return false;
byte type = 1; // FIXME: make type (1 item, 2 currency) an argument
string pitem = handler.ExtractKeyFromLink(args, "Hitem");
if (string.IsNullOrEmpty(pitem))
if (itemId == 0)
{
handler.SendSysMessage(CypherStrings.CommandNeeditemsend);
return false;
}
if (!uint.TryParse(pitem, out uint itemId) || itemId == 0)
return false;
uint maxcount = args.NextUInt32();
uint incrtime = args.NextUInt32();
uint extendedcost = args.NextUInt32();
string fbonuslist = args.NextString();
Creature vendor = handler.GetSelectedCreature();
if (!vendor)
{
@@ -724,6 +640,9 @@ namespace Game.Chat
return false;
}
uint maxcount = mc.GetValueOrDefault(0);
uint incrtime = it.GetValueOrDefault(0);
uint extendedcost = ec.GetValueOrDefault(0);
uint vendor_entry = vendor.GetEntry();
VendorItem vItem = new();
@@ -731,11 +650,11 @@ namespace Game.Chat
vItem.maxcount = maxcount;
vItem.incrtime = incrtime;
vItem.ExtendedCost = extendedcost;
vItem.Type = (ItemVendorType)type;
vItem.Type = ItemVendorType.Item;
if (fbonuslist.IsEmpty())
if (!bonusListIds.IsEmpty())
{
var bonusListIDsTok = new StringArray(fbonuslist, ';');
var bonusListIDsTok = new StringArray(bonusListIds, ';');
if (!bonusListIDsTok.IsEmpty())
{
foreach (string token in bonusListIDsTok)
@@ -758,14 +677,8 @@ namespace Game.Chat
}
[Command("move", RBACPermissions.CommandNpcAddMove)]
static bool HandleNpcAddMoveCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcAddMoveCommand(CommandHandler handler, ulong lowGuid)
{
if (args.Empty())
return false;
ulong lowGuid = args.NextUInt64();
string waitStr = args.NextString();
// attempt check creature existence by DB data
CreatureData data = Global.ObjectMgr.GetCreatureData(lowGuid);
if (data == null)
@@ -774,9 +687,6 @@ namespace Game.Chat
return false;
}
if (!int.TryParse(waitStr, out int wait) || wait < 0)
wait = 0;
// Update movement type
PreparedStatement stmt = DB.World.GetPreparedStatement(WorldStatements.UPD_CREATURE_MOVEMENT_TYPE);
stmt.AddValue(0, (byte)MovementGeneratorType.Waypoint);
@@ -789,14 +699,9 @@ namespace Game.Chat
}
[Command("formation", RBACPermissions.CommandNpcAddFormation)]
static bool HandleNpcAddFormationCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcAddFormationCommand(CommandHandler handler, ulong leaderGUID)
{
if (args.Empty())
return false;
uint leaderGUID = args.NextUInt32();
Creature creature = handler.GetSelectedCreature();
if (!creature || creature.GetSpawnId() == 0)
{
handler.SendSysMessage(CypherStrings.SelectCreature);
@@ -835,30 +740,24 @@ namespace Game.Chat
}
[Command("temp", RBACPermissions.CommandNpcAddTemp)]
static bool HandleNpcAddTempSpawnCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcAddTempSpawnCommand(CommandHandler handler, string lootStr, uint id)
{
if (args.Empty())
return false;
bool loot = false;
string spawntype_str = args.NextString();
if (spawntype_str.Equals("LOOT"))
loot = true;
else if (spawntype_str.Equals("NOLOOT"))
loot = false;
string charID = handler.ExtractKeyFromLink(args, "Hcreature_entry");
if (string.IsNullOrEmpty(charID))
return false;
if (!uint.TryParse(charID, out uint id) || id == 0)
return false;
if (!lootStr.IsEmpty())
{
if (lootStr.Equals("loot"))
loot = true;
else if (lootStr.Equals("noloot"))
loot = false;
else
return false;
}
if (Global.ObjectMgr.GetCreatureTemplate(id) == null)
return false;
Player chr = handler.GetSession().GetPlayer();
chr.SummonCreature(id, chr, loot ? TempSummonType.CorpseTimedDespawn : TempSummonType.CorpseDespawn, TimeSpan.FromSeconds(30));
chr.SummonCreature(id, chr.GetPosition(), loot ? TempSummonType.CorpseTimedDespawn : TempSummonType.CorpseDespawn, TimeSpan.FromSeconds(30));
return true;
}
@@ -868,26 +767,14 @@ namespace Game.Chat
class DeleteCommands
{
[Command("", RBACPermissions.CommandNpcDelete)]
static bool HandleNpcDeleteCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcDeleteCommand(CommandHandler handler, ulong? spawnIdArg)
{
ulong spawnId;
if (!args.Empty())
{
// number or [name] Shift-click form |color|Hcreature:creature_guid|h[name]|h|r
string cId = handler.ExtractKeyFromLink(args, "Hcreature");
if (string.IsNullOrEmpty(cId))
return false;
if (!ulong.TryParse(cId, out ulong guidLow) || guidLow == 0)
return false;
spawnId = guidLow;
}
if (spawnIdArg.HasValue)
spawnId = spawnIdArg.Value;
else
{
Creature creature = handler.GetSelectedCreature();
if (!creature || creature.IsPet() || creature.IsTotem())
{
handler.SendSysMessage(CypherStrings.SelectCreature);
@@ -915,11 +802,8 @@ namespace Game.Chat
}
[Command("item", RBACPermissions.CommandNpcDeleteItem)]
static bool HandleNpcDeleteVendorItemCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcDeleteVendorItemCommand(CommandHandler handler, uint itemId)
{
if (args.Empty())
return false;
Creature vendor = handler.GetSelectedCreature();
if (!vendor || !vendor.IsVendor())
{
@@ -927,19 +811,10 @@ namespace Game.Chat
return false;
}
string pitem = handler.ExtractKeyFromLink(args, "Hitem");
if (string.IsNullOrEmpty(pitem))
{
handler.SendSysMessage(CypherStrings.CommandNeeditemsend);
return false;
}
if (!uint.TryParse(pitem, out uint itemId))
if (itemId == 0)
return false;
ItemVendorType type = ItemVendorType.Item; // FIXME: make type (1 item, 2 currency) an argument
if (!Global.ObjectMgr.RemoveVendorItem(vendor.GetEntry(), itemId, type))
if (!Global.ObjectMgr.RemoveVendorItem(vendor.GetEntry(), itemId, ItemVendorType.Item))
{
handler.SendSysMessage(CypherStrings.ItemNotInList, itemId);
return false;
@@ -955,7 +830,7 @@ namespace Game.Chat
class FollowCommands
{
[Command("", RBACPermissions.CommandNpcFollow)]
static bool HandleNpcFollowCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcFollowCommand(CommandHandler handler)
{
Player player = handler.GetSession().GetPlayer();
Creature creature = handler.GetSelectedCreature();
@@ -974,7 +849,7 @@ namespace Game.Chat
}
[Command("stop", RBACPermissions.CommandNpcFollowStop)]
static bool HandleNpcUnFollowCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcUnFollowCommand(CommandHandler handler)
{
Player player = handler.GetPlayer();
Creature creature = handler.GetSelectedCreature();
@@ -1011,7 +886,7 @@ namespace Game.Chat
class SetCommands
{
[Command("allowmove", RBACPermissions.CommandNpcSetAllowmove)]
static bool HandleNpcSetAllowMovementCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetAllowMovementCommand(CommandHandler handler)
{
/*
if (Global.WorldMgr.getAllowMovement())
@@ -1029,17 +904,8 @@ namespace Game.Chat
}
[Command("data", RBACPermissions.CommandNpcSetData)]
static bool HandleNpcSetDataCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetDataCommand(CommandHandler handler, uint data_1, uint data_2)
{
if (args.Empty())
return false;
uint data_1 = args.NextUInt32();
uint data_2 = args.NextUInt32();
if (data_1 == 0 || data_2 == 0)
return false;
Creature creature = handler.GetSelectedCreature();
if (!creature)
{
@@ -1054,12 +920,8 @@ namespace Game.Chat
}
[Command("entry", RBACPermissions.CommandNpcSetEntry)]
static bool HandleNpcSetEntryCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetEntryCommand(CommandHandler handler, uint newEntryNum)
{
if (args.Empty())
return false;
uint newEntryNum = args.NextUInt32();
if (newEntryNum == 0)
return false;
@@ -1079,13 +941,8 @@ namespace Game.Chat
}
[Command("factionid", RBACPermissions.CommandNpcSetFactionid)]
static bool HandleNpcSetFactionIdCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetFactionIdCommand(CommandHandler handler, uint factionId)
{
if (args.Empty())
return false;
uint factionId = args.NextUInt32();
if (!CliDB.FactionTemplateStorage.ContainsKey(factionId))
{
handler.SendSysMessage(CypherStrings.WrongFaction, factionId);
@@ -1093,7 +950,6 @@ namespace Game.Chat
}
Creature creature = handler.GetSelectedCreature();
if (!creature)
{
handler.SendSysMessage(CypherStrings.SelectCreature);
@@ -1145,12 +1001,8 @@ namespace Game.Chat
}
[Command("level", RBACPermissions.CommandNpcSetLevel)]
static bool HandleNpcSetLevelCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetLevelCommand(CommandHandler handler, byte lvl)
{
if (args.Empty())
return false;
byte lvl = args.NextByte();
if (lvl < 1 || lvl > WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel) + 3)
{
handler.SendSysMessage(CypherStrings.BadValue);
@@ -1173,13 +1025,8 @@ namespace Game.Chat
}
[Command("link", RBACPermissions.CommandNpcSetLink)]
static bool HandleNpcSetLinkCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetLinkCommand(CommandHandler handler, ulong linkguid)
{
if (args.Empty())
return false;
ulong linkguid = args.NextUInt64();
Creature creature = handler.GetSelectedCreature();
if (!creature)
{
@@ -1204,15 +1051,9 @@ namespace Game.Chat
}
[Command("model", RBACPermissions.CommandNpcSetModel)]
static bool HandleNpcSetModelCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetModelCommand(CommandHandler handler, uint displayId)
{
if (args.Empty())
return false;
uint displayId = args.NextUInt32();
Creature creature = handler.GetSelectedCreature();
if (!creature || creature.IsPet())
{
handler.SendSysMessage(CypherStrings.SelectCreature);
@@ -1221,7 +1062,7 @@ namespace Game.Chat
if (!CliDB.CreatureDisplayInfoStorage.ContainsKey(displayId))
{
handler.SendSysMessage(CypherStrings.CommandInvalidParam, args);
handler.SendSysMessage(CypherStrings.CommandInvalidParam, displayId);
return false;
}
@@ -1234,11 +1075,8 @@ namespace Game.Chat
}
[Command("movetype", RBACPermissions.CommandNpcSetMovetype)]
static bool HandleNpcSetMoveTypeCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetMoveTypeCommand(CommandHandler handler, ulong? lowGuid, string type, string nodel)
{
if (args.Empty())
return false;
// 3 arguments:
// GUID (optional - you can also select the creature)
// stay|random|way (determines the kind of movement)
@@ -1246,56 +1084,28 @@ namespace Game.Chat
// this is very handy if you want to do waypoints, that are
// later switched on/off according to special events (like escort
// quests, etc)
string guid_str = args.NextString();
string type = args.NextString();
string dontdel_str = args.NextString();
bool doNotDelete = false;
if (string.IsNullOrEmpty(guid_str))
return false;
bool doNotDelete = !nodel.IsEmpty();
ulong lowguid = 0;
Creature creature = null;
if (!string.IsNullOrEmpty(dontdel_str))
if (!lowGuid.HasValue) // case .setmovetype $move_type (with selected creature)
{
Log.outDebug(LogFilter.Misc, "DEBUG: All 3 params are set");
// All 3 params are set
// GUID
// type
// doNotDEL
if (dontdel_str == "NODEL")
doNotDelete = true;
}
else
{
// Only 2 params - but maybe NODEL is set
if (!string.IsNullOrEmpty(type))
{
Log.outDebug(LogFilter.Server, "DEBUG: Only 2 params ");
if (type == "NODEL")
{
doNotDelete = true;
type = null;
}
}
}
if (string.IsNullOrEmpty(type)) // case .setmovetype $move_type (with selected creature)
{
type = guid_str;
creature = handler.GetSelectedCreature();
if (!creature || creature.IsPet())
return false;
lowguid = creature.GetSpawnId();
}
else // case .setmovetype #creature_guid $move_type (with selected creature)
else
{
if (!ulong.TryParse(guid_str, out ulong lowguid) || lowguid != 0)
lowguid = lowGuid.Value;
if (lowguid != 0)
creature = handler.GetCreatureFromPlayerMapByDbGuid(lowguid);
// attempt check creature existence by DB data
if (!creature)
if (creature == null)
{
CreatureData data = Global.ObjectMgr.GetCreatureData(lowguid);
if (data == null)
@@ -1304,6 +1114,10 @@ namespace Game.Chat
return false;
}
}
else
{
lowguid = creature.GetSpawnId();
}
}
// now lowguid is low guid really existed creature
@@ -1311,19 +1125,25 @@ namespace Game.Chat
MovementGeneratorType move_type;
if (type == "stay")
move_type = MovementGeneratorType.Idle;
else if (type == "random")
move_type = MovementGeneratorType.Random;
else if (type == "way")
move_type = MovementGeneratorType.Waypoint;
else
return false;
switch (type)
{
case "stay":
move_type = MovementGeneratorType.Idle;
break;
case "random":
move_type = MovementGeneratorType.Random;
break;
case "way":
move_type = MovementGeneratorType.Waypoint;
break;
default:
return false;
}
if (creature)
{
// update movement type
if (doNotDelete == false)
if (!doNotDelete)
creature.LoadPath(0);
creature.SetDefaultMovementType(move_type);
@@ -1335,6 +1155,7 @@ namespace Game.Chat
}
creature.SaveToDB();
}
if (!doNotDelete)
{
handler.SendSysMessage(CypherStrings.MoveTypeSet, type);
@@ -1348,13 +1169,9 @@ namespace Game.Chat
}
[Command("phase", RBACPermissions.CommandNpcSetPhase)]
static bool HandleNpcSetPhaseCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetPhaseCommand(CommandHandler handler, uint phaseId)
{
if (args.Empty())
return false;
uint phaseId = args.NextUInt32();
if (!CliDB.PhaseStorage.ContainsKey(phaseId))
if (phaseId == 0)
{
handler.SendSysMessage(CypherStrings.PhaseNotfound);
return false;
@@ -1400,12 +1217,8 @@ namespace Game.Chat
}
[Command("wanderdistance", RBACPermissions.CommandNpcSetSpawndist)]
static bool HandleNpcSetWanderDistanceCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetWanderDistanceCommand(CommandHandler handler, float option)
{
if (args.Empty())
return false;
float option = args.NextSingle();
if (option < 0.0f)
{
handler.SendSysMessage(CypherStrings.BadValue);
@@ -1445,22 +1258,15 @@ namespace Game.Chat
}
[Command("spawntime", RBACPermissions.CommandNpcSetSpawntime)]
static bool HandleNpcSetSpawnTimeCommand(CommandHandler handler, StringArguments args)
static bool HandleNpcSetSpawnTimeCommand(CommandHandler handler, uint spawnTime)
{
if (args.Empty())
return false;
uint spawnTime = args.NextUInt32();
Creature creature = handler.GetSelectedCreature();
if (!creature)
return false;
ulong guidLow = creature.GetSpawnId();
PreparedStatement stmt = DB.World.GetPreparedStatement(WorldStatements.UPD_CREATURE_SPAWN_TIME_SECS);
stmt.AddValue(0, spawnTime);
stmt.AddValue(1, guidLow);
stmt.AddValue(1, creature.GetSpawnId());
DB.World.Execute(stmt);
creature.SetRespawnDelay(spawnTime);