Update a few npc commands.
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
DROP PROCEDURE IF EXISTS add_migration;
|
||||
delimiter ??
|
||||
CREATE PROCEDURE `add_migration`()
|
||||
BEGIN
|
||||
DECLARE v INT DEFAULT 1;
|
||||
SET v = (SELECT COUNT(*) FROM `migrations` WHERE `id`='20190203133019');
|
||||
IF v=0 THEN
|
||||
INSERT INTO `migrations` VALUES ('20190203133019');
|
||||
-- Add your query below.
|
||||
|
||||
|
||||
UPDATE `mangos_string` SET `content_default`='Invalid virtual item slot (%u)' WHERE `entry`=505;
|
||||
INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (1509, 'Motion type = %u', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
|
||||
-- End of migration.
|
||||
END IF;
|
||||
END??
|
||||
delimiter ;
|
||||
CALL add_migration();
|
||||
DROP PROCEDURE IF EXISTS add_migration;
|
||||
@@ -62,8 +62,6 @@ int CreatureEventAI::Permissible(const Creature *creature)
|
||||
void CreatureEventAI::GetAIInformation(ChatHandler& reader)
|
||||
{
|
||||
reader.PSendSysMessage(LANG_NPC_EVENTAI_PHASE, (uint32)m_Phase);
|
||||
reader.PSendSysMessage(LANG_NPC_EVENTAI_MOVE, reader.GetOnOffStr(m_bCombatMovement));
|
||||
reader.PSendSysMessage(LANG_NPC_EVENTAI_COMBAT, reader.GetOnOffStr(m_bMeleeAttack));
|
||||
}
|
||||
|
||||
CreatureEventAI::CreatureEventAI(Creature *c) : CreatureAI(c)
|
||||
|
||||
@@ -509,12 +509,14 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{
|
||||
{ NODE, "add", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcAddCommand, "", nullptr },
|
||||
{ NODE, "additem", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcAddVendorItemCommand, "", nullptr },
|
||||
{ NODE, "addweapon", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcAddWeaponCommand, "", nullptr },
|
||||
{ NODE, "aiinfo", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcAIInfoCommand, "", nullptr },
|
||||
{ NODE, "allowmove", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcAllowMovementCommand, "", nullptr },
|
||||
{ NODE, "changeentry", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcChangeEntryCommand, "", nullptr },
|
||||
{ NODE, "changelevel", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcChangeLevelCommand, "", nullptr },
|
||||
{ NODE, "delete", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcDeleteCommand, "", nullptr },
|
||||
{ NODE, "delitem", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcDelVendorItemCommand, "", nullptr },
|
||||
{ NODE, "evade", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcEvadeCommand, "", nullptr },
|
||||
{ NODE, "factionid", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcFactionIdCommand, "", nullptr },
|
||||
{ NODE, "flag", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcFlagCommand, "", nullptr },
|
||||
{ NODE, "follow", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcFollowCommand, "", nullptr },
|
||||
@@ -537,7 +539,6 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
|
||||
|
||||
//{ TODO: fix or remove this commands
|
||||
{ NODE, "addweapon", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcAddWeaponCommand, "", nullptr },
|
||||
{ NODE, "name", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcNameCommand, "", nullptr },
|
||||
{ NODE, "subname", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcSubNameCommand, "", nullptr },
|
||||
//}
|
||||
|
||||
@@ -609,6 +609,7 @@ class MANGOS_DLL_SPEC ChatHandler
|
||||
|
||||
//-----------------------Npc Commands-----------------------
|
||||
bool HandleNpcAddCommand(char* args);
|
||||
bool HandleNpcAddWeaponCommand(char* args);
|
||||
bool HandleNpcSummonCommand(char* args);
|
||||
bool HandleNpcAddVendorItemCommand(char* args);
|
||||
bool HandleNpcAIInfoCommand(char* args);
|
||||
@@ -617,6 +618,7 @@ class MANGOS_DLL_SPEC ChatHandler
|
||||
bool HandleNpcChangeLevelCommand(char* args);
|
||||
bool HandleNpcDeleteCommand(char* args);
|
||||
bool HandleNpcDelVendorItemCommand(char* args);
|
||||
bool HandleNpcEvadeCommand(char* args);
|
||||
bool HandleNpcFactionIdCommand(char* args);
|
||||
bool HandleNpcFlagCommand(char* args);
|
||||
bool HandleNpcFollowCommand(char* args);
|
||||
@@ -636,7 +638,6 @@ class MANGOS_DLL_SPEC ChatHandler
|
||||
bool HandleNpcYellCommand(char* args);
|
||||
|
||||
//TODO: NpcCommands that needs to be fixed :
|
||||
bool HandleNpcAddWeaponCommand(char* args);
|
||||
bool HandleNpcNameCommand(char* args);
|
||||
bool HandleNpcSubNameCommand(char* args);
|
||||
//----------------------------------------------------------
|
||||
|
||||
@@ -1722,7 +1722,7 @@ bool ChatHandler::HandleNpcAIInfoCommand(char* /*args*/)
|
||||
{
|
||||
Creature* pTarget = GetSelectedCreature();
|
||||
|
||||
if (!pTarget)
|
||||
if (!pTarget || !pTarget->AI())
|
||||
{
|
||||
SendSysMessage(LANG_SELECT_CREATURE);
|
||||
SetSentErrorMessage(true);
|
||||
@@ -1739,9 +1739,10 @@ bool ChatHandler::HandleNpcAIInfoCommand(char* /*args*/)
|
||||
strAI.empty() ? " - " : strAI.c_str(),
|
||||
cstrAIClass ? cstrAIClass : " - ",
|
||||
strScript.empty() ? " - " : strScript.c_str());
|
||||
|
||||
if (pTarget->AI())
|
||||
pTarget->AI()->GetAIInformation(*this);
|
||||
PSendSysMessage(LANG_NPC_AI_MOVE, GetOnOffStr(pTarget->AI()->IsCombatMovementEnabled()));
|
||||
PSendSysMessage(LANG_NPC_AI_ATTACK, GetOnOffStr(pTarget->AI()->IsMeleeAttackEnabled()));
|
||||
PSendSysMessage(LANG_NPC_MOTION_TYPE, pTarget->GetMotionMaster()->GetCurrentMovementGeneratorType());
|
||||
pTarget->AI()->GetAIInformation(*this);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -2054,6 +2055,7 @@ bool ChatHandler::HandleNpcSetModelCommand(char* args)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//set faction of creature
|
||||
bool ChatHandler::HandleNpcFactionIdCommand(char* args)
|
||||
{
|
||||
|
||||
@@ -4261,6 +4261,7 @@ bool ChatHandler::HandleNearGraveCommand(char* args)
|
||||
}
|
||||
|
||||
//-----------------------Npc Commands-----------------------
|
||||
|
||||
bool ChatHandler::HandleNpcAllowMovementCommand(char* /*args*/)
|
||||
{
|
||||
if (sWorld.getAllowMovement())
|
||||
@@ -4300,6 +4301,23 @@ bool ChatHandler::HandleNpcChangeEntryCommand(char *args)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleNpcEvadeCommand(char* /*args*/)
|
||||
{
|
||||
Creature* pTarget = GetSelectedCreature();
|
||||
|
||||
if (!pTarget)
|
||||
{
|
||||
SendSysMessage(LANG_SELECT_CREATURE);
|
||||
SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pTarget->AI())
|
||||
pTarget->AI()->EnterEvadeMode();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleNpcInfoCommand(char* /*args*/)
|
||||
{
|
||||
Creature* target = GetSelectedCreature();
|
||||
@@ -4368,73 +4386,43 @@ bool ChatHandler::HandleNpcPlayEmoteCommand(char* args)
|
||||
return true;
|
||||
}
|
||||
|
||||
//TODO: NpcCommands that needs to be fixed :
|
||||
|
||||
bool ChatHandler::HandleNpcAddWeaponCommand(char* /*args*/)
|
||||
bool ChatHandler::HandleNpcAddWeaponCommand(char* args)
|
||||
{
|
||||
/*if (!*args)
|
||||
return false;
|
||||
Creature* pCreature = GetSelectedCreature();
|
||||
|
||||
ObjectGuid guid = m_session->GetPlayer()->GetSelectionGuid();
|
||||
if (guid.IsEmpty())
|
||||
{
|
||||
SendSysMessage(LANG_NO_SELECTION);
|
||||
return true;
|
||||
}
|
||||
|
||||
Creature *pCreature = ObjectAccessor::GetCreature(*m_session->GetPlayer(), guid);
|
||||
|
||||
if(!pCreature)
|
||||
if (!pCreature)
|
||||
{
|
||||
SendSysMessage(LANG_SELECT_CREATURE);
|
||||
return true;
|
||||
}
|
||||
|
||||
char* pSlotID = strtok((char*)args, " ");
|
||||
if (!pSlotID)
|
||||
uint32 uiItemId = 0;
|
||||
|
||||
if (!ExtractUInt32(&args, uiItemId))
|
||||
return false;
|
||||
|
||||
char* pItemID = strtok(NULL, " ");
|
||||
if (!pItemID)
|
||||
uint32 uiSlotId = 0;
|
||||
|
||||
if (!ExtractUInt32(&args, uiSlotId))
|
||||
return false;
|
||||
|
||||
ItemPrototype const* pItemProto = ObjectMgr::GetItemPrototype(uiItemId);
|
||||
|
||||
uint32 ItemID = atoi(pItemID);
|
||||
uint32 SlotID = atoi(pSlotID);
|
||||
|
||||
ItemPrototype* tmpItem = ObjectMgr::GetItemPrototype(ItemID);
|
||||
|
||||
bool added = false;
|
||||
if(tmpItem)
|
||||
if (!pItemProto)
|
||||
{
|
||||
switch(SlotID)
|
||||
{
|
||||
case 1:
|
||||
pCreature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, ItemID);
|
||||
added = true;
|
||||
break;
|
||||
case 2:
|
||||
pCreature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01, ItemID);
|
||||
added = true;
|
||||
break;
|
||||
case 3:
|
||||
pCreature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_02, ItemID);
|
||||
added = true;
|
||||
break;
|
||||
default:
|
||||
PSendSysMessage(LANG_ITEM_SLOT_NOT_EXIST,SlotID);
|
||||
added = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if(added)
|
||||
PSendSysMessage(LANG_ITEM_ADDED_TO_SLOT,ItemID,tmpItem->Name1,SlotID);
|
||||
}
|
||||
else
|
||||
{
|
||||
PSendSysMessage(LANG_ITEM_NOT_FOUND,ItemID);
|
||||
PSendSysMessage(LANG_ITEM_NOT_FOUND, uiItemId);
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
if (uiSlotId > VIRTUAL_ITEM_SLOT_2)
|
||||
{
|
||||
PSendSysMessage(LANG_ITEM_SLOT_NOT_EXIST, uiSlotId);
|
||||
return true;
|
||||
}
|
||||
|
||||
pCreature->SetVirtualItem(VirtualItemSlot(uiSlotId), uiItemId);
|
||||
PSendSysMessage(LANG_ITEM_ADDED_TO_SLOT, uiItemId, pItemProto->Name1, uiSlotId);
|
||||
|
||||
return true;
|
||||
}
|
||||
//----------------------------------------------------------
|
||||
|
||||
+4
-3
@@ -1058,9 +1058,10 @@ enum MangosStrings
|
||||
LANG_NPC_AI_HEADER = 1504,
|
||||
LANG_NPC_AI_NAMES = 1505,
|
||||
LANG_NPC_EVENTAI_PHASE = 1506,
|
||||
LANG_NPC_EVENTAI_MOVE = 1507,
|
||||
LANG_NPC_EVENTAI_COMBAT = 1508,
|
||||
// Room for more Level 2 1509-1599 not used
|
||||
LANG_NPC_AI_MOVE = 1507,
|
||||
LANG_NPC_AI_ATTACK = 1508,
|
||||
LANG_NPC_MOTION_TYPE = 1509,
|
||||
// Room for more Level 2 1510-1599 not used
|
||||
|
||||
// Ticket entries
|
||||
LANG_COMMAND_TICKETPLAYERABANDON = 2002,
|
||||
|
||||
@@ -5931,15 +5931,15 @@ void Unit::CombatStop(bool includingCast)
|
||||
if (AI() && isInCombat())
|
||||
AI()->OnCombatStop();
|
||||
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)this)->SendAttackSwingCancelAttack(); // melee and ranged forced attack cancel
|
||||
else if (GetTypeId() == TYPEID_UNIT)
|
||||
if (Player* pPlayer = ToPlayer())
|
||||
pPlayer->SendAttackSwingCancelAttack(); // melee and ranged forced attack cancel
|
||||
else if (Creature* pCreature = ToCreature())
|
||||
{
|
||||
((Creature*)this)->UpdateCombatState(false);
|
||||
((Creature*)this)->UpdateCombatWithZoneState(false);
|
||||
((Creature*)this)->m_TargetNotReachableTimer = 0;
|
||||
if (((Creature*)this)->GetTemporaryFactionFlags() & TEMPFACTION_RESTORE_COMBAT_STOP)
|
||||
((Creature*)this)->ClearTemporaryFaction();
|
||||
pCreature->UpdateCombatState(false);
|
||||
pCreature->UpdateCombatWithZoneState(false);
|
||||
pCreature->m_TargetNotReachableTimer = 0;
|
||||
if (pCreature->GetTemporaryFactionFlags() & TEMPFACTION_RESTORE_COMBAT_STOP)
|
||||
pCreature->ClearTemporaryFaction();
|
||||
}
|
||||
|
||||
ClearInCombat();
|
||||
|
||||
Reference in New Issue
Block a user