mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-17 03:08:26 +00:00
[Feature] Zone Scripting (#4908)
* [Feature] Add Zone Scripting Capabilities * Push * Update zone.cpp * Fix crashes * Lua * Add other events, finish Lua * Add EVENT_ENTER_ZONE * Final * Push * Push * [Feature] Add Zone Scripting Capabilities * Push * Update zone.cpp * Fix crashes * Add EVENT_ENTER_ZONE * Remove duplicates * Update embparser.cpp
This commit is contained in:
+60
-54
@@ -64,10 +64,10 @@ QuestManager quest_manager;
|
||||
EQ::ItemInstance* questitem = nullptr; \
|
||||
const SPDat_Spell_Struct* questspell = nullptr; \
|
||||
bool depop_npc = false; \
|
||||
std::string encounter; \
|
||||
std::string encounter = ""; \
|
||||
do { \
|
||||
if(!quests_running_.empty()) { \
|
||||
running_quest e = quests_running_.top(); \
|
||||
if(!m_running_quests.empty()) { \
|
||||
RunningQuest e = m_running_quests.top(); \
|
||||
owner = e.owner; \
|
||||
initiator = e.initiator; \
|
||||
questitem = e.questitem; \
|
||||
@@ -124,33 +124,30 @@ void QuestManager::Process() {
|
||||
}
|
||||
}
|
||||
|
||||
void QuestManager::StartQuest(Mob *_owner, Client *_initiator, EQ::ItemInstance* _questitem, const SPDat_Spell_Struct* _questspell, std::string encounter) {
|
||||
running_quest run;
|
||||
run.owner = _owner;
|
||||
run.initiator = _initiator;
|
||||
run.questitem = _questitem;
|
||||
run.questspell = _questspell;
|
||||
run.depop_npc = false;
|
||||
run.encounter = encounter;
|
||||
quests_running_.push(run);
|
||||
void QuestManager::StartQuest(const RunningQuest& q)
|
||||
{
|
||||
m_running_quests.push(q);
|
||||
}
|
||||
|
||||
void QuestManager::EndQuest() {
|
||||
running_quest run = quests_running_.top();
|
||||
if(run.depop_npc && run.owner->IsNPC()) {
|
||||
RunningQuest run = m_running_quests.top();
|
||||
|
||||
if (run.depop_npc && run.owner->IsNPC()) {
|
||||
//clear out any timers for them...
|
||||
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
|
||||
|
||||
end = QTimerList.end();
|
||||
while (cur != end) {
|
||||
if (cur->mob == run.owner)
|
||||
if (cur->mob == run.owner) {
|
||||
cur = QTimerList.erase(cur);
|
||||
else
|
||||
} else {
|
||||
++cur;
|
||||
}
|
||||
}
|
||||
run.owner->Depop();
|
||||
}
|
||||
quests_running_.pop();
|
||||
|
||||
m_running_quests.pop();
|
||||
}
|
||||
|
||||
void QuestManager::ClearAllTimers() {
|
||||
@@ -1098,18 +1095,18 @@ void QuestManager::depop(int npc_type) {
|
||||
tmp->CastToNPC()->Depop();
|
||||
}
|
||||
else {
|
||||
running_quest e = quests_running_.top();
|
||||
RunningQuest e = m_running_quests.top();
|
||||
e.depop_npc = true;
|
||||
quests_running_.pop();
|
||||
quests_running_.push(e);
|
||||
m_running_quests.pop();
|
||||
m_running_quests.push(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
else { //depop self
|
||||
running_quest e = quests_running_.top();
|
||||
RunningQuest e = m_running_quests.top();
|
||||
e.depop_npc = true;
|
||||
quests_running_.pop();
|
||||
quests_running_.push(e);
|
||||
m_running_quests.pop();
|
||||
m_running_quests.push(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1606,7 +1603,7 @@ void QuestManager::save() {
|
||||
|
||||
void QuestManager::faction(int faction_id, int faction_value, int temp) {
|
||||
QuestManagerCurrentQuestVars();
|
||||
running_quest run = quests_running_.top();
|
||||
RunningQuest run = m_running_quests.top();
|
||||
if(run.owner->IsCharmed() == false && initiator) {
|
||||
if(faction_id != 0 && faction_value != 0) {
|
||||
initiator->SetFactionLevel2(
|
||||
@@ -2077,10 +2074,10 @@ void QuestManager::respawn(int npcTypeID, int grid) {
|
||||
if (!owner || !owner->IsNPC())
|
||||
return;
|
||||
|
||||
running_quest e = quests_running_.top();
|
||||
RunningQuest e = m_running_quests.top();
|
||||
e.depop_npc = true;
|
||||
quests_running_.pop();
|
||||
quests_running_.push(e);
|
||||
m_running_quests.pop();
|
||||
m_running_quests.push(e);
|
||||
|
||||
const NPCType* npcType = nullptr;
|
||||
if ((npcType = content_db.LoadNPCTypesData(npcTypeID)))
|
||||
@@ -3980,81 +3977,90 @@ void QuestManager::ReloadZoneStaticData()
|
||||
}
|
||||
}
|
||||
|
||||
Client *QuestManager::GetInitiator() const {
|
||||
if(!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
Client* QuestManager::GetInitiator() const
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return e.initiator;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
NPC *QuestManager::GetNPC() const {
|
||||
if(!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
NPC* QuestManager::GetNPC() const
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return (e.owner && e.owner->IsNPC()) ? e.owner->CastToNPC() : nullptr;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Bot *QuestManager::GetBot() const {
|
||||
if (!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
Bot* QuestManager::GetBot() const
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return (e.owner && e.owner->IsBot()) ? e.owner->CastToBot() : nullptr;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Merc *QuestManager::GetMerc() const {
|
||||
if (!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
Merc* QuestManager::GetMerc() const
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return (e.owner && e.owner->IsMerc()) ? e.owner->CastToMerc() : nullptr;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Mob *QuestManager::GetOwner() const {
|
||||
if(!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
Mob* QuestManager::GetOwner() const
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return e.owner;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
EQ::InventoryProfile *QuestManager::GetInventory() const {
|
||||
if(!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
EQ::InventoryProfile* QuestManager::GetInventory() const
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return &e.initiator->GetInv();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
EQ::ItemInstance *QuestManager::GetQuestItem() const {
|
||||
if(!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
EQ::ItemInstance* QuestManager::GetQuestItem() const
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return e.questitem;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const SPDat_Spell_Struct *QuestManager::GetQuestSpell() {
|
||||
if(!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
const SPDat_Spell_Struct* QuestManager::GetQuestSpell()
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return e.questspell;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string QuestManager::GetEncounter() const {
|
||||
if(!quests_running_.empty()) {
|
||||
running_quest e = quests_running_.top();
|
||||
std::string QuestManager::GetEncounter() const
|
||||
{
|
||||
if (!m_running_quests.empty()) {
|
||||
RunningQuest e = m_running_quests.top();
|
||||
return e.encounter;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user