From 34770bd70fb863b60e28aebc74195cd0853e4c60 Mon Sep 17 00:00:00 2001 From: collett Date: Sun, 12 Mar 2023 08:55:40 +0900 Subject: [PATCH] debug command to force bnpc action --- src/world/Actor/Player.cpp | 8 +++--- src/world/Manager/ActionMgr.cpp | 4 +++ src/world/Manager/DebugCommandMgr.cpp | 35 +++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index b619c62b..ccb77f32 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -1035,14 +1035,16 @@ void Sapphire::Entity::Player::despawn( Entity::PlayerPtr pTarget ) Sapphire::Entity::ActorPtr Sapphire::Entity::Player::lookupTargetById( uint64_t targetId ) { - ActorPtr targetActor; + if( targetId == 0 || targetId == INVALID_GAME_OBJECT_ID64 ) + return nullptr; + auto inRange = getInRangeActors( true ); for( auto actor : inRange ) { if( actor->getId() == targetId ) - targetActor = actor; + return actor; } - return targetActor; + return nullptr; } void Sapphire::Entity::Player::setLastPing( uint32_t ping ) diff --git a/src/world/Manager/ActionMgr.cpp b/src/world/Manager/ActionMgr.cpp index 240d81e4..07aecd30 100644 --- a/src/world/Manager/ActionMgr.cpp +++ b/src/world/Manager/ActionMgr.cpp @@ -22,6 +22,10 @@ void World::Manager::ActionMgr::handlePlacedAction( Entity::Chara& chara, uint32 if( auto player = chara.getAsPlayer() ) player->sendDebug( "got aoe act: {0}", actionData->name ); + if( !actionData ) + { + actionData = Common::Service< Data::ExdDataGenerated >::ref().get< Data::Action >( actionId ); + } auto action = Action::make_Action( chara.getAsChara(), actionId, sequence, actionData ); diff --git a/src/world/Manager/DebugCommandMgr.cpp b/src/world/Manager/DebugCommandMgr.cpp index 044bc7f2..3550b4e8 100644 --- a/src/world/Manager/DebugCommandMgr.cpp +++ b/src/world/Manager/DebugCommandMgr.cpp @@ -28,6 +28,7 @@ #include "Script/ScriptMgr.h" #include "Script/NativeScriptMgr.h" +#include "Actor/Actor.h" #include "Actor/EventObject.h" #include "Actor/BNpc.h" @@ -38,6 +39,7 @@ #include "Territory/PublicContent.h" #include "Territory/InstanceObjectCache.h" #include "Manager/TerritoryMgr.h" +#include "Manager/ActionMgr.h" #include "Event/EventDefs.h" #include "ServerMgr.h" @@ -466,6 +468,28 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& } player.setVisualEffect( id ); } + else if( subCommand == "bnpccast" || subCommand == "bcast" ) + { + if( auto target = player.lookupTargetById( player.getTargetId() ) ) + { + if( auto bnpc = target->getAsBNpc() ) + { + int32_t id; + sscanf( params.c_str(), "%d", &id ); + auto actionData = Common::Service< Data::ExdDataGenerated >::ref().get< Data::Action >( id ); + if ( !actionData ) + return; + if( !actionData->targetArea && bnpc->getTargetId() != 0 && bnpc->getTargetId() != INVALID_GAME_OBJECT_ID64 ) + { + Service< World::Manager::ActionMgr >::ref().handleTargetedAction( *bnpc, id, actionData, bnpc->getTargetId(), 0 ); + } + else if ( actionData->targetArea ) + { + Service< World::Manager::ActionMgr >::ref().handlePlacedAction( *bnpc, id, actionData, player.getPos(), 0 ); + } + } + } + } else { player.sendUrgent( "{0} is not a valid SET command.", subCommand ); @@ -696,6 +720,17 @@ void Sapphire::World::Manager::DebugCommandMgr::get( char* data, Entity::Player& player.sendNotice( "x:{}, y:{}, z:{}", pPopRange->header.transform.translation.x, pPopRange->header.transform.translation.y, pPopRange->header.transform.translation.z ); } } + else if ( ( subCommand == "targetinfo" ) || ( subCommand == "tinfo" ) || subCommand == "ti" ) + { + if( auto target = player.lookupTargetById( player.getTargetId() ) ) + { + if( auto bnpc = target->getAsBNpc() ) + { + player.sendNotice( "BNpcBaseId: {}, BNpcNameId, {}", bnpc->getBNpcBaseId(), bnpc->getBNpcNameId() ); + } + //else if + } + } else { player.sendUrgent( "{0} is not a valid GET command.", subCommand );