Implements all the old pickup scripts

Testsed to make sure they work
Tested to make sure existing script works still
killing it immedialtely is live accurate, the timer was not accurate
This commit is contained in:
Aaron Kimbre 2023-04-08 22:07:25 -05:00
parent 33f9e9c8cb
commit 37fe935a3a
19 changed files with 263 additions and 39 deletions

View File

@ -160,7 +160,6 @@
#include "AgSalutingNpcs.h"
#include "BossSpiderQueenEnemyServer.h"
#include "RockHydrantSmashable.h"
#include "SpecialImaginePowerupSpawner.h"
// Misc Scripts
#include "ExplodingAsset.h"
@ -295,6 +294,21 @@
// WBL scripts
#include "WblGenericZone.h"
// pickups
#include "Special1BronzeCoinSpawner.h"
#include "Special1SilverCoinSpawner.h"
#include "Special10BronzeCoinSpawner.h"
#include "Special25BronzeCoinSpawner.h"
#include "Special10SilverCoinSpawner.h"
#include "Special25SilverCoinSpawner.h"
#include "Special1GoldCoinSpawner.h"
#include "Special10GoldCoinSpawner.h"
#include "Special25GoldCoinSpawner.h"
#include "SpecialImaginePowerupSpawner.h"
#include "SpecialImaginePowerupSpawner2pt.h"
#include "SpecialLifePowerupSpawner.h"
#include "SpecialArmorPowerupSpawner.h"
//Big bad global bc this is a namespace and not a class:
InvalidScript* invalidToReturn = new InvalidScript();
std::map<std::string, CppScripts::Script*> m_Scripts;
@ -371,8 +385,6 @@ CppScripts::Script* CppScripts::GetScript(Entity* parent, const std::string& scr
script = new RemoveRentalGear();
else if (scriptName == "scripts\\02_server\\Map\\AG\\L_NPC_NJ_ASSISTANT_SERVER.lua")
script = new NpcNjAssistantServer();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_IMAGINE-POWERUP-SPAWNER.lua")
script = new SpecialImaginePowerupSpawner();
else if (scriptName == "scripts\\ai\\AG\\L_AG_SALUTING_NPCS.lua")
script = new AgSalutingNpcs();
else if (scriptName == "scripts\\ai\\AG\\L_AG_JET_EFFECT_SERVER.lua")
@ -860,6 +872,34 @@ CppScripts::Script* CppScripts::GetScript(Entity* parent, const std::string& scr
else if (scriptName == "scripts\\zone\\LUPs\\WBL_generic_zone.lua")
script = new WblGenericZone();
// pickups
if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_1_BRONZE-COIN-SPAWNER.lua")
script = new Special1BronzeCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_1_SILVER-COIN-SPAWNER.lua")
script = new Special1SilverCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_10_BRONZE-COIN-SPAWNER.lua")
script = new Special10BronzeCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_25_BRONZE-COIN-SPAWNER.lua")
script = new Special25BronzeCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_10_SILVER-COIN-SPAWNER.lua")
script = new Special10SilverCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_25_SILVER-COIN-SPAWNER.lua")
script = new Special25SilverCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_1_GOLD-COIN-SPAWNER.lua")
script = new Special1GoldCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_10_GOLD-COIN-SPAWNER.lua")
script = new Special10GoldCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_25_GOLD-COIN-SPAWNER.lua")
script = new Special25GoldCoinSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_IMAGINE-POWERUP-SPAWNER.lua")
script = new SpecialImaginePowerupSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_IMAGINE-POWERUP-SPAWNER-2PT.lua")
script = new SpecialImaginePowerupSpawner2pt();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_LIFE-POWERUP-SPAWNER.lua")
script = new SpecialLifePowerupSpawner();
else if (scriptName == "scripts\\ai\\SPEC\\L_SPECIAL_ARMOR-POWERUP-SPAWNER.lua")
script = new SpecialArmorPowerupSpawner();
// handle invalid script reporting if the path is greater than zero and it's not an ignored script
// information not really needed for sys admins but is for developers
else if (script == invalidToReturn) {

View File

@ -1,3 +1,4 @@
set(DSCRIPTS_SOURCES_AI_SPEC
"SpecialImaginePowerupSpawner.cpp"
set(DSCRIPTS_SOURCES_AI_SPEC
"SpecialCoinSpawner.cpp"
"SpecialPowerupSpawner.cpp"
PARENT_SCOPE)

View File

@ -0,0 +1,13 @@
#ifndef __SPECIAL10BRONZECOINSPAWNER__H__
#define __SPECIAL10BRONZECOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special10BronzeCoinSpawner : public SpecialCoinSpawner {
public:
Special10BronzeCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 10;
};
#endif //!__SPECIAL10BRONZECOINSPAWNER__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIAL10GOLDCOINSPAWNER__H__
#define __SPECIAL10GOLDCOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special10GoldCoinSpawner : public SpecialCoinSpawner {
public:
Special10GoldCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 100000;
};
#endif //!__SPECIAL10GOLDCOINSPAWNER__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIAL10SILVERCOINSPAWNER__H__
#define __SPECIAL10SILVERCOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special10SilverCoinSpawner : public SpecialCoinSpawner {
public:
Special10SilverCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 1000;
};
#endif //!__SPECIAL10SILVERCOINSPAWNER__H__

View File

@ -0,0 +1,15 @@
#ifndef __SPECIAL1BRONZECOINSPAWNER__H__
#define __SPECIAL1BRONZECOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special1BronzeCoinSpawner : public SpecialCoinSpawner {
public:
Special1BronzeCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 1;
};
#endif //!__SPECIAL1BRONZECOINSPAWNER__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIAL1GOLDCOINSPAWNER__H__
#define __SPECIAL1GOLDCOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special1GoldCoinSpawner : public SpecialCoinSpawner {
public:
Special1GoldCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 10000;
};
#endif //!__SPECIAL1GOLDCOINSPAWNER__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIAL1SILVERCOINSPAWNER__H__
#define __SPECIAL1SILVERCOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special1SilverCoinSpawner : public SpecialCoinSpawner {
public:
Special1SilverCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 100;
};
#endif //!__SPECIAL1SILVERCOINSPAWNER__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIAL25BRONZECOINSPAWNER__H__
#define __SPECIAL25BRONZECOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special25BronzeCoinSpawner : public SpecialCoinSpawner {
public:
Special25BronzeCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 25;
};
#endif //!__SPECIAL25BRONZECOINSPAWNER__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIAL25GOLDCOINSPAWNER__H__
#define __SPECIAL25GOLDCOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special25GoldCoinSpawner : public SpecialCoinSpawner {
public:
Special25GoldCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 250000;
};
#endif //!__SPECIAL25GOLDCOINSPAWNER__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIAL25SILVERCOINSPAWNER__H__
#define __SPECIAL25SILVERCOINSPAWNER__H__
#include "SpecialCoinSpawner.h"
class Special25SilverCoinSpawner : public SpecialCoinSpawner {
public:
Special25SilverCoinSpawner() : SpecialCoinSpawner(m_currencyDenomination) {};
private:
static const uint32_t m_currencyDenomination = 2500;
};
#endif //!__SPECIAL25SILVERCOINSPAWNER__H__

View File

@ -0,0 +1,14 @@
#ifndef __SPECIALARMORPOWERUPSPAWNER__H__
#define __SPECIALARMORPOWERUPSPAWNER__H__
#include "SpecialPowerupSpawner.h"
class SpecialArmorPowerupSpawner : public SpecialPowerupSpawner {
public:
SpecialArmorPowerupSpawner() : SpecialPowerupSpawner(m_SkillId) {};
private:
uint32_t m_SkillId = 80;
};
#endif //!__SPECIALARMORPOWERUPSPAWNER__H__

View File

@ -0,0 +1,16 @@
#include "SpecialCoinSpawner.h"
#include "CharacterComponent.h"
void SpecialCoinSpawner::OnStartup(Entity* self) {
self->SetProximityRadius(1.5f, "powerupEnter");
}
void SpecialCoinSpawner::OnProximityUpdate(Entity* self, Entity* entering, const std::string name, const std::string status) {
if (name != "powerupEnter" && status != "ENTER") return;
if (!entering->IsPlayer()) return;
auto character = entering->GetCharacter();
if (!character) return;
GameMessages::SendPlayFXEffect(self, -1, u"pickup", "", LWOOBJID_EMPTY, 1, 1, true);
character->SetCoins(character->GetCoins() + this->m_currencyDenomination, eLootSourceType::LOOT_SOURCE_CURRENCY);
self->Smash(entering->GetObjectID(), eKillType::SILENT);
}

View File

@ -0,0 +1,13 @@
#pragma once
#include "CppScripts.h"
class SpecialCoinSpawner : public CppScripts::Script {
public:
SpecialCoinSpawner(uint32_t CurrencyDenomination) {
m_currencyDenomination = CurrencyDenomination;
};
void OnStartup(Entity* self) override;
void OnProximityUpdate(Entity* self, Entity* entering, const std::string name, const std::string status) override;
private:
int32_t m_currencyDenomination = 0;
};

View File

@ -1,9 +1,13 @@
#pragma once
#include "CppScripts.h"
#ifndef __SPECIALIMAGINEPOWERUPSPAWNER__H__
#define __SPECIALIMAGINEPOWERUPSPAWNER__H__
class SpecialImaginePowerupSpawner final : public CppScripts::Script
{
#include "SpecialPowerupSpawner.h"
class SpecialImaginePowerupSpawner : public SpecialPowerupSpawner {
public:
void OnStartup(Entity* self) override;
void OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status) override;
SpecialImaginePowerupSpawner() : SpecialPowerupSpawner(m_SkillId) {};
private:
uint32_t m_SkillId = 13;
};
#endif //!__SPECIALIMAGINEPOWERUPSPAWNER__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIALIMAGINEPOWERUPSPAWNER2PT__H__
#define __SPECIALIMAGINEPOWERUPSPAWNER2PT__H__
#include "SpecialPowerupSpawner.h"
class SpecialImaginePowerupSpawner2pt : public SpecialPowerupSpawner {
public:
SpecialImaginePowerupSpawner2pt() : SpecialPowerupSpawner(m_SkillId) {};
private:
uint32_t m_SkillId = 129;
};
#endif //!__SPECIALIMAGINEPOWERUPSPAWNER2PT__H__

View File

@ -0,0 +1,13 @@
#ifndef __SPECIALLIFEPOWERUPSPAWNER__H__
#define __SPECIALLIFEPOWERUPSPAWNER__H__
#include "SpecialPowerupSpawner.h"
class SpecialLifePowerupSpawner : public SpecialPowerupSpawner {
public:
SpecialLifePowerupSpawner() : SpecialPowerupSpawner(m_SkillId) {};
private:
uint32_t m_SkillId = 5;
};
#endif //!__SPECIALLIFEPOWERUPSPAWNER__H__

View File

@ -2,7 +2,6 @@
#include "GameMessages.h"
#include "SkillComponent.h"
#include "DestroyableComponent.h"
#include "EntityManager.h"
#include "eReplicaComponentType.h"
@ -12,37 +11,16 @@ void SpecialImaginePowerupSpawner::OnStartup(Entity* self) {
}
void SpecialImaginePowerupSpawner::OnProximityUpdate(Entity* self, Entity* entering, const std::string name, const std::string status) {
if (name != "powerupEnter" && status != "ENTER") {
return;
}
if (entering->GetLOT() != 1) {
return;
}
if (self->GetVar<bool>(u"bIsDead")) {
return;
}
if (name != "powerupEnter" && status != "ENTER") return;
if (!entering->IsPlayer()) return;
if (self->GetVar<bool>(u"bIsDead")) return;
GameMessages::SendPlayFXEffect(self, -1, u"pickup", "", LWOOBJID_EMPTY, 1, 1, true);
SkillComponent* skillComponent;
if (!self->TryGetComponent(eReplicaComponentType::SKILL, skillComponent)) {
return;
}
const auto source = entering->GetObjectID();
skillComponent->CalculateBehavior(13, 20, source);
DestroyableComponent* destroyableComponent;
if (!self->TryGetComponent(eReplicaComponentType::DESTROYABLE, destroyableComponent)) {
return;
}
if (!self->TryGetComponent(eReplicaComponentType::SKILL, skillComponent)) return;
skillComponent->CastSkill(13, entering->GetObjectID());
self->SetVar(u"bIsDead", true);
self->AddCallbackTimer(1.0f, [self]() {
EntityManager::Instance()->ScheduleForKill(self);
});
self->Smash(entering->GetObjectID(), eKillType::SILENT);
}

View File

@ -0,0 +1,13 @@
#pragma once
#include "CppScripts.h"
class SpecialPowerupSpawner : public CppScripts::Script {
public:
SpecialPowerupSpawner(uint32_t skillId) {
m_SkillId = skillId;
};
void OnStartup(Entity* self) override;
void OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status) override;
private:
uint32_t m_SkillId = 0;
};