[Bots] Add Data Bucket support to Bot Spell Entries. (#2505)

* [Bots] Add Data Bucket support to Bot Spell Entries.

* Cleanup Formatting and Functions

* Consolidated "CheckDataBucket" Functions

* Remove unneeded CastToClient

* Add choice to format data buckets as either "character-id" or "bot-id" to Bot spells

* Fix Formatting

* Clean up.

* Update npc.h

* Fix Bot Casting issues

* Formatting

Co-authored-by: Kinglykrab <kinglykrab@gmail.com>
Co-authored-by: Kinglykrab <89047260+Kinglykrab@users.noreply.github.com>
This commit is contained in:
Aeadoin
2022-11-06 17:06:01 -05:00
committed by GitHub
parent de63eaa4b2
commit 7e7358e9b6
18 changed files with 623 additions and 367 deletions
Executable → Regular
+176 -1
View File
@@ -1875,7 +1875,7 @@ bool Zone::Depop(bool StartSpawnTimer) {
// clear spell cache
database.ClearNPCSpells();
database.ClearBotSpells();
zone->spawn_group_list.ReloadSpawnGroups();
return true;
@@ -2976,3 +2976,178 @@ std::string Zone::GetAAName(int aa_id)
return std::string();
}
bool Zone::CheckDataBucket(uint8 bucket_comparison, std::string bucket_value, std::string player_value)
{
std::vector<std::string> bucket_checks;
bool found = false;
bool passes = false;
switch (bucket_comparison) {
case BucketComparison::BucketEqualTo:
{
if (player_value != bucket_value) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketNotEqualTo:
{
if (player_value == bucket_value) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketGreaterThanOrEqualTo:
{
if (!Strings::IsNumber(player_value) || !Strings::IsNumber(bucket_value)) {
break;
}
if (std::stoll(player_value) < std::stoll(bucket_value)) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketLesserThanOrEqualTo:
{
if (!Strings::IsNumber(player_value) || !Strings::IsNumber(bucket_value)) {
break;
}
if (std::stoll(player_value) > std::stoll(bucket_value)) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketGreaterThan:
{
if (!Strings::IsNumber(player_value) || !Strings::IsNumber(bucket_value)) {
break;
}
if (std::stoll(player_value) <= std::stoll(bucket_value)) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketLesserThan:
{
if (!Strings::IsNumber(player_value) || !Strings::IsNumber(bucket_value)) {
break;
}
if (std::stoll(player_value) >= std::stoll(bucket_value)) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketIsAny:
{
bucket_checks = Strings::Split(bucket_value, "|");
if (bucket_checks.empty()) {
break;
}
if (std::find(bucket_checks.begin(), bucket_checks.end(), player_value) != bucket_checks.end()) {
found = true;
}
if (!found) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketIsNotAny:
{
bucket_checks = Strings::Split(bucket_value, "|");
if (bucket_checks.empty()) {
break;
}
if (std::find(bucket_checks.begin(), bucket_checks.end(), player_value) != bucket_checks.end()) {
found = true;
}
if (found) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketIsBetween:
{
bucket_checks = Strings::Split(bucket_value, "|");
if (bucket_checks.empty()) {
break;
}
if (
!Strings::IsNumber(player_value) ||
!Strings::IsNumber(bucket_checks[0]) ||
!Strings::IsNumber(bucket_checks[1])
) {
break;
}
if (
!EQ::ValueWithin(
std::stoll(player_value),
std::stoll(bucket_checks[0]),
std::stoll(bucket_checks[1])
)
) {
break;
}
passes = true;
break;
}
case BucketComparison::BucketIsNotBetween:
{
bucket_checks = Strings::Split(bucket_value, "|");
if (bucket_checks.empty()) {
break;
}
if (
!Strings::IsNumber(player_value) ||
!Strings::IsNumber(bucket_checks[0]) ||
!Strings::IsNumber(bucket_checks[1])
) {
break;
}
if (
EQ::ValueWithin(
std::stoll(player_value),
std::stoll(bucket_checks[0]),
std::stoll(bucket_checks[1])
)
) {
break;
}
passes = true;
break;
}
}
return passes;
}