mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-02 16:57:47 +00:00
DelayedEmnityTask and BNpc additions
This commit is contained in:
parent
f8303be9e8
commit
0cc2a497dd
9 changed files with 84 additions and 10 deletions
|
@ -198,7 +198,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 1220 /*Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 1220 /*Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
|
|
||||||
quest.setBitFlag8( 1, true );
|
quest.setBitFlag8( 1, true );
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,7 +204,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 1220 /*Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 1220 /*Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
quest.setBitFlag8( 1, true );
|
quest.setBitFlag8( 1, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -231,7 +231,7 @@ public:
|
||||||
return;
|
return;
|
||||||
else if( entityId == Enemy0 && quest.getSeq() == Seq1 )
|
else if( entityId == Enemy0 && quest.getSeq() == Seq1 )
|
||||||
{
|
{
|
||||||
eventMgr().sendEventNotice( player, getId(), 1, 0 );
|
eventMgr().sendEventNotice( player, getId(), 0, 0 );
|
||||||
quest.setUI8BH( 0 );
|
quest.setUI8BH( 0 );
|
||||||
quest.setSeq( Seq2 );
|
quest.setSeq( Seq2 );
|
||||||
}
|
}
|
||||||
|
@ -290,7 +290,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 319 /*Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 319 /*Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -328,7 +328,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
@ -354,7 +355,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy1, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy1, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
@ -380,7 +382,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy2, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy2, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -242,7 +242,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
quest.setBitFlag8( 1, true );
|
quest.setBitFlag8( 1, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +338,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy1, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy1, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
quest.setBitFlag8( 1, true );
|
quest.setBitFlag8( 1, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -432,7 +434,8 @@ private:
|
||||||
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
|
||||||
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||||
auto enemy = instance->createBNpcFromInstanceId( Enemy2, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
auto enemy = instance->createBNpcFromInstanceId( Enemy2, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
|
||||||
enemy->hateListAdd( player.getAsPlayer(), 1 );
|
enemy->setTriggerOwnerId( player.getId() );
|
||||||
|
enemy->hateListAddDelayed( player.getAsPlayer(), 1 );
|
||||||
|
|
||||||
quest.setBitFlag8( 1, true );
|
quest.setBitFlag8( 1, true );
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include <Manager/TaskMgr.h>
|
#include <Manager/TaskMgr.h>
|
||||||
#include <Task/RemoveBNpcTask.h>
|
#include <Task/RemoveBNpcTask.h>
|
||||||
#include <Task/FadeBNpcTask.h>
|
#include <Task/FadeBNpcTask.h>
|
||||||
|
#include <Task/DelayedEmnityTask.h>
|
||||||
#include <Service.h>
|
#include <Service.h>
|
||||||
|
|
||||||
using namespace Sapphire::Common;
|
using namespace Sapphire::Common;
|
||||||
|
@ -480,6 +481,13 @@ void Sapphire::Entity::BNpc::hateListAdd( const Sapphire::Entity::CharaPtr& pCha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sapphire::Entity::BNpc::hateListAddDelayed( const Sapphire::Entity::CharaPtr& pChara, int32_t hateAmount )
|
||||||
|
{
|
||||||
|
auto& taskMgr = Common::Service< World::Manager::TaskMgr >::ref();
|
||||||
|
auto delayedEmnityTask = std::make_shared< Sapphire::World::DelayedEmnityTask >( 5000, getAsBNpc(), pChara, hateAmount );
|
||||||
|
taskMgr.queueTask( delayedEmnityTask );
|
||||||
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::BNpc::hateListUpdate( const Sapphire::Entity::CharaPtr& pChara, int32_t hateAmount )
|
void Sapphire::Entity::BNpc::hateListUpdate( const Sapphire::Entity::CharaPtr& pChara, int32_t hateAmount )
|
||||||
{
|
{
|
||||||
for( const auto& listEntry : m_hateList )
|
for( const auto& listEntry : m_hateList )
|
||||||
|
|
|
@ -105,6 +105,7 @@ namespace Sapphire::Entity
|
||||||
void hateListClear();
|
void hateListClear();
|
||||||
CharaPtr hateListGetHighest();
|
CharaPtr hateListGetHighest();
|
||||||
void hateListAdd( const CharaPtr& pChara, int32_t hateAmount );
|
void hateListAdd( const CharaPtr& pChara, int32_t hateAmount );
|
||||||
|
void hateListAddDelayed( const CharaPtr& pChara, int32_t hateAmount );
|
||||||
void hateListUpdate( const CharaPtr& pChara, int32_t hateAmount );
|
void hateListUpdate( const CharaPtr& pChara, int32_t hateAmount );
|
||||||
void hateListRemove( const CharaPtr& pChara );
|
void hateListRemove( const CharaPtr& pChara );
|
||||||
bool hateListHasActor( const CharaPtr& pChara );
|
bool hateListHasActor( const CharaPtr& pChara );
|
||||||
|
|
31
src/world/Task/DelayedEmnityTask.cpp
Normal file
31
src/world/Task/DelayedEmnityTask.cpp
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#include "DelayedEmnityTask.h"
|
||||||
|
|
||||||
|
#include <Actor/BNpc.h>
|
||||||
|
#include <Logging/Logger.h>
|
||||||
|
|
||||||
|
using namespace Sapphire::World;
|
||||||
|
|
||||||
|
|
||||||
|
Sapphire::World::DelayedEmnityTask::DelayedEmnityTask( uint64_t delayTime, Entity::BNpcPtr bnpc, Entity::CharaPtr chara, int32_t hateAmount ) :
|
||||||
|
Task(delayTime),
|
||||||
|
m_pBNpc(std::move(bnpc)),
|
||||||
|
m_pChara(std::move(chara)),
|
||||||
|
m_hateAmount( std::move(hateAmount) )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DelayedEmnityTask::onQueue()
|
||||||
|
{
|
||||||
|
Logger::debug( { __FUNCTION__ } );
|
||||||
|
}
|
||||||
|
|
||||||
|
void DelayedEmnityTask::execute()
|
||||||
|
{
|
||||||
|
m_pBNpc->hateListAdd( m_pChara, m_hateAmount );
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string DelayedEmnityTask::toString()
|
||||||
|
{
|
||||||
|
return fmt::format( "DelayedEmnityTask: BNpc#{}, Chara Name: {}, Hate Amount: {}, ElapsedTimeMs: {}", m_pBNpc->getId(), m_pChara->getName(), m_hateAmount, getDelayTimeMs() );
|
||||||
|
}
|
25
src/world/Task/DelayedEmnityTask.h
Normal file
25
src/world/Task/DelayedEmnityTask.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include "Task.h"
|
||||||
|
|
||||||
|
namespace Sapphire::World
|
||||||
|
{
|
||||||
|
|
||||||
|
class DelayedEmnityTask : public Task
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DelayedEmnityTask( uint64_t delayTime, Entity::BNpcPtr bnpc, Entity::CharaPtr chara, int32_t hateAmount );
|
||||||
|
|
||||||
|
void onQueue() override;
|
||||||
|
void execute() override;
|
||||||
|
std::string toString() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Entity::BNpcPtr m_pBNpc;
|
||||||
|
Entity::CharaPtr m_pChara;
|
||||||
|
int32_t m_hateAmount;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue