mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 16:51:29 +00:00
Fix for class Bot not honoring NPCType data reference
This commit is contained in:
parent
2f3cd45c4a
commit
16036ab492
@ -1,6 +1,11 @@
|
||||
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||
-------------------------------------------------------
|
||||
|
||||
== 1/26/2019 ==
|
||||
Uleat: Fix for class Bot not honoring NPCType data reference
|
||||
- Fixes bots not moving on spawn/grouping issue
|
||||
- Report any issues with non movement-related behavior
|
||||
|
||||
== 1/24/2019 ==
|
||||
Uleat: Extended server spellbook entries to RoF2 standard and added per-client restriction of spell id max
|
||||
- Bumped server spellbook entry capacity to 720 spells
|
||||
|
||||
426
zone/bot.cpp
426
zone/bot.cpp
@ -29,7 +29,7 @@
|
||||
extern volatile bool is_zone_loaded;
|
||||
|
||||
// This constructor is used during the bot create command
|
||||
Bot::Bot(NPCType npcTypeData, Client* botOwner) : NPC(&npcTypeData, nullptr, glm::vec4(), Ground, false), rest_timer(1) {
|
||||
Bot::Bot(NPCType *npcTypeData, Client* botOwner) : NPC(npcTypeData, nullptr, glm::vec4(), Ground, false), rest_timer(1) {
|
||||
if(botOwner) {
|
||||
this->SetBotOwner(botOwner);
|
||||
this->_botOwnerCharacterID = botOwner->CharacterID();
|
||||
@ -46,23 +46,23 @@ Bot::Bot(NPCType npcTypeData, Client* botOwner) : NPC(&npcTypeData, nullptr, glm
|
||||
_lastTotalPlayTime = 0;
|
||||
_startTotalPlayTime = time(&_startTotalPlayTime);
|
||||
_lastZoneId = 0;
|
||||
_baseMR = npcTypeData.MR;
|
||||
_baseCR = npcTypeData.CR;
|
||||
_baseDR = npcTypeData.DR;
|
||||
_baseFR = npcTypeData.FR;
|
||||
_basePR = npcTypeData.PR;
|
||||
_baseCorrup = npcTypeData.Corrup;
|
||||
_baseAC = npcTypeData.AC;
|
||||
_baseSTR = npcTypeData.STR;
|
||||
_baseSTA = npcTypeData.STA;
|
||||
_baseDEX = npcTypeData.DEX;
|
||||
_baseAGI = npcTypeData.AGI;
|
||||
_baseINT = npcTypeData.INT;
|
||||
_baseWIS = npcTypeData.WIS;
|
||||
_baseCHA = npcTypeData.CHA;
|
||||
_baseATK = npcTypeData.ATK;
|
||||
_baseRace = npcTypeData.race;
|
||||
_baseGender = npcTypeData.gender;
|
||||
_baseMR = npcTypeData->MR;
|
||||
_baseCR = npcTypeData->CR;
|
||||
_baseDR = npcTypeData->DR;
|
||||
_baseFR = npcTypeData->FR;
|
||||
_basePR = npcTypeData->PR;
|
||||
_baseCorrup = npcTypeData->Corrup;
|
||||
_baseAC = npcTypeData->AC;
|
||||
_baseSTR = npcTypeData->STR;
|
||||
_baseSTA = npcTypeData->STA;
|
||||
_baseDEX = npcTypeData->DEX;
|
||||
_baseAGI = npcTypeData->AGI;
|
||||
_baseINT = npcTypeData->INT;
|
||||
_baseWIS = npcTypeData->WIS;
|
||||
_baseCHA = npcTypeData->CHA;
|
||||
_baseATK = npcTypeData->ATK;
|
||||
_baseRace = npcTypeData->race;
|
||||
_baseGender = npcTypeData->gender;
|
||||
RestRegenHP = 0;
|
||||
RestRegenMana = 0;
|
||||
RestRegenEndurance = 0;
|
||||
@ -104,8 +104,8 @@ Bot::Bot(NPCType npcTypeData, Client* botOwner) : NPC(&npcTypeData, nullptr, glm
|
||||
}
|
||||
|
||||
// This constructor is used when the bot is loaded out of the database
|
||||
Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double totalPlayTime, uint32 lastZoneId, NPCType npcTypeData)
|
||||
: NPC(&npcTypeData, nullptr, glm::vec4(), Ground, false), rest_timer(1)
|
||||
Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double totalPlayTime, uint32 lastZoneId, NPCType *npcTypeData)
|
||||
: NPC(npcTypeData, nullptr, glm::vec4(), Ground, false), rest_timer(1)
|
||||
{
|
||||
this->_botOwnerCharacterID = botOwnerCharacterID;
|
||||
if(this->_botOwnerCharacterID > 0)
|
||||
@ -122,25 +122,25 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to
|
||||
_startTotalPlayTime = time(&_startTotalPlayTime);
|
||||
_lastZoneId = lastZoneId;
|
||||
berserk = false;
|
||||
_baseMR = npcTypeData.MR;
|
||||
_baseCR = npcTypeData.CR;
|
||||
_baseDR = npcTypeData.DR;
|
||||
_baseFR = npcTypeData.FR;
|
||||
_basePR = npcTypeData.PR;
|
||||
_baseCorrup = npcTypeData.Corrup;
|
||||
_baseAC = npcTypeData.AC;
|
||||
_baseSTR = npcTypeData.STR;
|
||||
_baseSTA = npcTypeData.STA;
|
||||
_baseDEX = npcTypeData.DEX;
|
||||
_baseAGI = npcTypeData.AGI;
|
||||
_baseINT = npcTypeData.INT;
|
||||
_baseWIS = npcTypeData.WIS;
|
||||
_baseCHA = npcTypeData.CHA;
|
||||
_baseATK = npcTypeData.ATK;
|
||||
_baseRace = npcTypeData.race;
|
||||
_baseGender = npcTypeData.gender;
|
||||
current_hp = npcTypeData.current_hp;
|
||||
current_mana = npcTypeData.Mana;
|
||||
_baseMR = npcTypeData->MR;
|
||||
_baseCR = npcTypeData->CR;
|
||||
_baseDR = npcTypeData->DR;
|
||||
_baseFR = npcTypeData->FR;
|
||||
_basePR = npcTypeData->PR;
|
||||
_baseCorrup = npcTypeData->Corrup;
|
||||
_baseAC = npcTypeData->AC;
|
||||
_baseSTR = npcTypeData->STR;
|
||||
_baseSTA = npcTypeData->STA;
|
||||
_baseDEX = npcTypeData->DEX;
|
||||
_baseAGI = npcTypeData->AGI;
|
||||
_baseINT = npcTypeData->INT;
|
||||
_baseWIS = npcTypeData->WIS;
|
||||
_baseCHA = npcTypeData->CHA;
|
||||
_baseATK = npcTypeData->ATK;
|
||||
_baseRace = npcTypeData->race;
|
||||
_baseGender = npcTypeData->gender;
|
||||
current_hp = npcTypeData->current_hp;
|
||||
current_mana = npcTypeData->Mana;
|
||||
RestRegenHP = 0;
|
||||
RestRegenMana = 0;
|
||||
RestRegenEndurance = 0;
|
||||
@ -313,112 +313,252 @@ bool Bot::IsStanding() {
|
||||
return result;
|
||||
}
|
||||
|
||||
NPCType Bot::FillNPCTypeStruct(uint32 botSpellsID, std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender, float size, uint32 face, uint32 hairStyle, uint32 hairColor, uint32 eyeColor, uint32 eyeColor2, uint32 beardColor, uint32 beard, uint32 drakkinHeritage, uint32 drakkinTattoo, uint32 drakkinDetails, int32 hp, int32 mana, int32 mr, int32 cr, int32 dr, int32 fr, int32 pr, int32 corrup, int32 ac, uint32 str, uint32 sta, uint32 dex, uint32 agi, uint32 _int, uint32 wis, uint32 cha, uint32 attack) {
|
||||
NPCType BotNPCType;
|
||||
int CopyLength = 0;
|
||||
CopyLength = botName.copy(BotNPCType.name, 63);
|
||||
BotNPCType.name[CopyLength] = '\0';
|
||||
CopyLength = 0;
|
||||
CopyLength = botLastName.copy(BotNPCType.lastname, 69);
|
||||
BotNPCType.lastname[CopyLength] = '\0';
|
||||
CopyLength = 0;
|
||||
BotNPCType.npc_spells_id = botSpellsID;
|
||||
BotNPCType.level = botLevel;
|
||||
BotNPCType.race = botRace;
|
||||
BotNPCType.class_ = botClass;
|
||||
BotNPCType.gender = gender;
|
||||
BotNPCType.size = size;
|
||||
BotNPCType.luclinface = face;
|
||||
BotNPCType.hairstyle = hairStyle;
|
||||
BotNPCType.haircolor = hairColor;
|
||||
BotNPCType.eyecolor1 = eyeColor;
|
||||
BotNPCType.eyecolor2 = eyeColor2;
|
||||
BotNPCType.beardcolor = beardColor;
|
||||
BotNPCType.beard = beard;
|
||||
BotNPCType.drakkin_heritage = drakkinHeritage;
|
||||
BotNPCType.drakkin_tattoo = drakkinTattoo;
|
||||
BotNPCType.drakkin_details = drakkinDetails;
|
||||
BotNPCType.current_hp = hp;
|
||||
BotNPCType.Mana = mana;
|
||||
BotNPCType.MR = mr;
|
||||
BotNPCType.CR = cr;
|
||||
BotNPCType.DR = dr;
|
||||
BotNPCType.FR = fr;
|
||||
BotNPCType.PR = pr;
|
||||
BotNPCType.Corrup = corrup;
|
||||
BotNPCType.AC = ac;
|
||||
BotNPCType.STR = str;
|
||||
BotNPCType.STA = sta;
|
||||
BotNPCType.DEX = dex;
|
||||
BotNPCType.AGI = agi;
|
||||
BotNPCType.INT = _int;
|
||||
BotNPCType.WIS = wis;
|
||||
BotNPCType.CHA = cha;
|
||||
BotNPCType.ATK = attack;
|
||||
BotNPCType.npc_id = 0;
|
||||
BotNPCType.texture = 0;
|
||||
BotNPCType.d_melee_texture1 = 0;
|
||||
BotNPCType.d_melee_texture2 = 0;
|
||||
BotNPCType.qglobal = false;
|
||||
BotNPCType.attack_speed = 0;
|
||||
BotNPCType.runspeed = 0.7f;
|
||||
BotNPCType.bodytype = 1;
|
||||
BotNPCType.findable = 0;
|
||||
BotNPCType.hp_regen = 1;
|
||||
BotNPCType.mana_regen = 1;
|
||||
BotNPCType.maxlevel = botLevel;
|
||||
BotNPCType.light = 0; // due to the way that bots are coded..this is sent post-spawn
|
||||
return BotNPCType;
|
||||
NPCType *Bot::FillNPCTypeStruct(uint32 botSpellsID, std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender, float size, uint32 face, uint32 hairStyle, uint32 hairColor, uint32 eyeColor, uint32 eyeColor2, uint32 beardColor, uint32 beard, uint32 drakkinHeritage, uint32 drakkinTattoo, uint32 drakkinDetails, int32 hp, int32 mana, int32 mr, int32 cr, int32 dr, int32 fr, int32 pr, int32 corrup, int32 ac, uint32 str, uint32 sta, uint32 dex, uint32 agi, uint32 _int, uint32 wis, uint32 cha, uint32 attack) {
|
||||
auto bot_npc_type = new NPCType{ 0 };
|
||||
int copy_length = 0;
|
||||
|
||||
copy_length = botName.copy(bot_npc_type->name, 63);
|
||||
bot_npc_type->name[copy_length] = '\0';
|
||||
copy_length = 0;
|
||||
|
||||
copy_length = botLastName.copy(bot_npc_type->lastname, 69);
|
||||
bot_npc_type->lastname[copy_length] = '\0';
|
||||
copy_length = 0;
|
||||
|
||||
bot_npc_type->current_hp = hp;
|
||||
bot_npc_type->max_hp = hp;
|
||||
bot_npc_type->size = size;
|
||||
bot_npc_type->runspeed = 0.7f;
|
||||
bot_npc_type->gender = gender;
|
||||
bot_npc_type->race = botRace;
|
||||
bot_npc_type->class_ = botClass;
|
||||
bot_npc_type->bodytype = 1;
|
||||
bot_npc_type->deity = EQEmu::deity::DeityAgnostic;
|
||||
bot_npc_type->level = botLevel;
|
||||
//bot_npc_type->npc_id = 0;
|
||||
//bot_npc_type->texture = 0;
|
||||
//bot_npc_type->helmtexture = 0;
|
||||
//bot_npc_type->herosforgemodel = 0;
|
||||
//bot_npc_type->loottable_id = 0;
|
||||
bot_npc_type->npc_spells_id = botSpellsID;
|
||||
//bot_npc_type->npc_spells_effects_id = 0;
|
||||
//bot_npc_type->npc_faction_id = 0;
|
||||
//bot_npc_type->merchanttype = 0;
|
||||
//bot_npc_type->alt_currency_type = 0;
|
||||
//bot_npc_type->adventure_template = 0;
|
||||
//bot_npc_type->trap_template = 0;
|
||||
//bot_npc_type->light = 0;
|
||||
bot_npc_type->AC = ac;
|
||||
bot_npc_type->Mana = mana;
|
||||
bot_npc_type->ATK = attack;
|
||||
bot_npc_type->STR = str;
|
||||
bot_npc_type->STA = sta;
|
||||
bot_npc_type->DEX = dex;
|
||||
bot_npc_type->AGI = agi;
|
||||
bot_npc_type->INT = _int;
|
||||
bot_npc_type->WIS = wis;
|
||||
bot_npc_type->CHA = cha;
|
||||
bot_npc_type->MR = mr;
|
||||
bot_npc_type->FR = fr;
|
||||
bot_npc_type->CR = cr;
|
||||
bot_npc_type->PR = pr;
|
||||
bot_npc_type->DR = dr;
|
||||
bot_npc_type->Corrup = corrup;
|
||||
//bot_npc_type->PhR = 0;
|
||||
bot_npc_type->haircolor = hairColor;
|
||||
bot_npc_type->beardcolor = beardColor;
|
||||
bot_npc_type->eyecolor1 = eyeColor;
|
||||
bot_npc_type->eyecolor2 = eyeColor2;
|
||||
bot_npc_type->hairstyle = hairStyle;
|
||||
bot_npc_type->luclinface = face;
|
||||
bot_npc_type->beard = beard;
|
||||
bot_npc_type->drakkin_heritage = drakkinHeritage;
|
||||
bot_npc_type->drakkin_tattoo = drakkinTattoo;
|
||||
bot_npc_type->drakkin_details = drakkinDetails;
|
||||
//bot_npc_type->armor_tint = { 0 };
|
||||
//bot_npc_type->min_dmg = 0;
|
||||
//bot_npc_type->max_dmg = 0;
|
||||
//bot_npc_type->charm_ac = 0;
|
||||
//bot_npc_type->charm_min_dmg = 0;
|
||||
//bot_npc_type->charm_max_dmg = 0;
|
||||
//bot_npc_type->charm_attack_delay = 0;
|
||||
//bot_npc_type->charm_accuracy_rating = 0;
|
||||
//bot_npc_type->charm_avoidance_rating = 0;
|
||||
//bot_npc_type->charm_atk = 0;
|
||||
//bot_npc_type->attack_count = 0;
|
||||
//*bot_npc_type->special_abilities = { 0 };
|
||||
//bot_npc_type->d_melee_texture1 = 0;
|
||||
//bot_npc_type->d_melee_texture2 = 0;
|
||||
//*bot_npc_type->ammo_idfile = { 0 };
|
||||
//bot_npc_type->prim_melee_type = 0;
|
||||
//bot_npc_type->sec_melee_type = 0;
|
||||
//bot_npc_type->ranged_type = 0;
|
||||
bot_npc_type->hp_regen = 1;
|
||||
bot_npc_type->mana_regen = 1;
|
||||
//bot_npc_type->aggroradius = 0;
|
||||
//bot_npc_type->assistradius = 0;
|
||||
//bot_npc_type->see_invis = 0;
|
||||
//bot_npc_type->see_invis_undead = false;
|
||||
//bot_npc_type->see_hide = false;
|
||||
//bot_npc_type->see_improved_hide = false;
|
||||
//bot_npc_type->qglobal = false;
|
||||
//bot_npc_type->npc_aggro = false;
|
||||
//bot_npc_type->spawn_limit = 0;
|
||||
//bot_npc_type->mount_color = 0;
|
||||
//bot_npc_type->attack_speed = 0.0f;
|
||||
//bot_npc_type->attack_delay = 0;
|
||||
//bot_npc_type->accuracy_rating = 0;
|
||||
//bot_npc_type->avoidance_rating = 0;
|
||||
//bot_npc_type->findable = false;
|
||||
bot_npc_type->trackable = true;
|
||||
//bot_npc_type->slow_mitigation = 0;
|
||||
bot_npc_type->maxlevel = botLevel;
|
||||
//bot_npc_type->scalerate = 0;
|
||||
//bot_npc_type->private_corpse = false;
|
||||
//bot_npc_type->unique_spawn_by_name = false;
|
||||
//bot_npc_type->underwater = false;
|
||||
//bot_npc_type->emoteid = 0;
|
||||
//bot_npc_type->spellscale = 0.0f;
|
||||
//bot_npc_type->healscale = 0.0f;
|
||||
//bot_npc_type->no_target_hotkey = false;
|
||||
//bot_npc_type->raid_target = false;
|
||||
//bot_npc_type->armtexture = 0;
|
||||
//bot_npc_type->bracertexture = 0;
|
||||
//bot_npc_type->handtexture = 0;
|
||||
//bot_npc_type->legtexture = 0;
|
||||
//bot_npc_type->feettexture = 0;
|
||||
//bot_npc_type->ignore_despawn = false;
|
||||
bot_npc_type->show_name = true;
|
||||
//bot_npc_type->untargetable = false;
|
||||
bot_npc_type->skip_global_loot = true;
|
||||
//bot_npc_type->rare_spawn = false;
|
||||
bot_npc_type->stuck_behavior = Ground;
|
||||
|
||||
return bot_npc_type;
|
||||
}
|
||||
|
||||
NPCType Bot::CreateDefaultNPCTypeStructForBot(std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender) {
|
||||
NPCType Result;
|
||||
int CopyLength = 0;
|
||||
CopyLength = botName.copy(Result.name, 63);
|
||||
Result.name[CopyLength] = '\0';
|
||||
CopyLength = 0;
|
||||
CopyLength = botLastName.copy(Result.lastname, 69);
|
||||
Result.lastname[CopyLength] = '\0';
|
||||
CopyLength = 0;
|
||||
Result.level = botLevel;
|
||||
Result.race = botRace;
|
||||
Result.class_ = botClass;
|
||||
Result.gender = gender;
|
||||
// default values
|
||||
Result.maxlevel = botLevel;
|
||||
Result.size = 6.0;
|
||||
Result.npc_id = 0;
|
||||
Result.current_hp = 0;
|
||||
Result.drakkin_details = 0;
|
||||
Result.drakkin_heritage = 0;
|
||||
Result.drakkin_tattoo = 0;
|
||||
Result.runspeed = 0.7f;
|
||||
Result.bodytype = 1;
|
||||
Result.findable = 0;
|
||||
Result.hp_regen = 1;
|
||||
Result.mana_regen = 1;
|
||||
Result.texture = 0;
|
||||
Result.d_melee_texture1 = 0;
|
||||
Result.d_melee_texture2 = 0;
|
||||
Result.qglobal = false;
|
||||
Result.npc_spells_id = 0;
|
||||
Result.attack_speed = 0;
|
||||
Result.STR = 75;
|
||||
Result.STA = 75;
|
||||
Result.DEX = 75;
|
||||
Result.AGI = 75;
|
||||
Result.WIS = 75;
|
||||
Result.INT = 75;
|
||||
Result.CHA = 75;
|
||||
Result.ATK = 75;
|
||||
Result.MR = 25;
|
||||
Result.FR = 25;
|
||||
Result.DR = 15;
|
||||
Result.PR = 15;
|
||||
Result.CR = 25;
|
||||
Result.Corrup = 15;
|
||||
Result.AC = 12;
|
||||
return Result;
|
||||
NPCType *Bot::CreateDefaultNPCTypeStructForBot(std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender) {
|
||||
auto bot_npc_type = new NPCType{ 0 };
|
||||
int copy_length = 0;
|
||||
|
||||
copy_length = botName.copy(bot_npc_type->name, 63);
|
||||
bot_npc_type->name[copy_length] = '\0';
|
||||
copy_length = 0;
|
||||
|
||||
copy_length = botLastName.copy(bot_npc_type->lastname, 69);
|
||||
bot_npc_type->lastname[copy_length] = '\0';
|
||||
copy_length = 0;
|
||||
|
||||
//bot_npc_type->current_hp = 0;
|
||||
//bot_npc_type->max_hp = 0;
|
||||
bot_npc_type->size = 6.0f;
|
||||
bot_npc_type->runspeed = 0.7f;
|
||||
bot_npc_type->gender = gender;
|
||||
bot_npc_type->race = botRace;
|
||||
bot_npc_type->class_ = botClass;
|
||||
bot_npc_type->bodytype = 1;
|
||||
bot_npc_type->deity = EQEmu::deity::DeityAgnostic;
|
||||
bot_npc_type->level = botLevel;
|
||||
//bot_npc_type->npc_id = 0;
|
||||
//bot_npc_type->texture = 0;
|
||||
//bot_npc_type->helmtexture = 0;
|
||||
//bot_npc_type->herosforgemodel = 0;
|
||||
//bot_npc_type->loottable_id = 0;
|
||||
//bot_npc_type->npc_spells_id = 0;
|
||||
//bot_npc_type->npc_spells_effects_id = 0;
|
||||
//bot_npc_type->npc_faction_id = 0;
|
||||
//bot_npc_type->merchanttype = 0;
|
||||
//bot_npc_type->alt_currency_type = 0;
|
||||
//bot_npc_type->adventure_template = 0;
|
||||
//bot_npc_type->trap_template = 0;
|
||||
//bot_npc_type->light = 0;
|
||||
bot_npc_type->AC = 12;
|
||||
//bot_npc_type->Mana = 0;
|
||||
bot_npc_type->ATK = 75;
|
||||
bot_npc_type->STR = 75;
|
||||
bot_npc_type->STA = 75;
|
||||
bot_npc_type->DEX = 75;
|
||||
bot_npc_type->AGI = 75;
|
||||
bot_npc_type->INT = 75;
|
||||
bot_npc_type->WIS = 75;
|
||||
bot_npc_type->CHA = 75;
|
||||
bot_npc_type->MR = 25;
|
||||
bot_npc_type->FR = 25;
|
||||
bot_npc_type->CR = 25;
|
||||
bot_npc_type->PR = 15;
|
||||
bot_npc_type->DR = 15;
|
||||
bot_npc_type->Corrup = 15;
|
||||
//bot_npc_type->PhR = 0;
|
||||
//bot_npc_type->haircolor = 0;
|
||||
//bot_npc_type->beardcolor = 0;
|
||||
//bot_npc_type->eyecolor1 = 0;
|
||||
//bot_npc_type->eyecolor2 = 0;
|
||||
//bot_npc_type->hairstyle = 0;
|
||||
//bot_npc_type->luclinface = 0;
|
||||
//bot_npc_type->beard = 0;
|
||||
//bot_npc_type->drakkin_heritage = 0;
|
||||
//bot_npc_type->drakkin_tattoo = 0;
|
||||
//bot_npc_type->drakkin_details = 0;
|
||||
//bot_npc_type->armor_tint = { 0 };
|
||||
//bot_npc_type->min_dmg = 0;
|
||||
//bot_npc_type->max_dmg = 0;
|
||||
//bot_npc_type->charm_ac = 0;
|
||||
//bot_npc_type->charm_min_dmg = 0;
|
||||
//bot_npc_type->charm_max_dmg = 0;
|
||||
//bot_npc_type->charm_attack_delay = 0;
|
||||
//bot_npc_type->charm_accuracy_rating = 0;
|
||||
//bot_npc_type->charm_avoidance_rating = 0;
|
||||
//bot_npc_type->charm_atk = 0;
|
||||
//bot_npc_type->attack_count = 0;
|
||||
//*bot_npc_type->special_abilities = { 0 };
|
||||
//bot_npc_type->d_melee_texture1 = 0;
|
||||
//bot_npc_type->d_melee_texture2 = 0;
|
||||
//*bot_npc_type->ammo_idfile = { 0 };
|
||||
//bot_npc_type->prim_melee_type = 0;
|
||||
//bot_npc_type->sec_melee_type = 0;
|
||||
//bot_npc_type->ranged_type = 0;
|
||||
bot_npc_type->hp_regen = 1;
|
||||
bot_npc_type->mana_regen = 1;
|
||||
//bot_npc_type->aggroradius = 0;
|
||||
//bot_npc_type->assistradius = 0;
|
||||
//bot_npc_type->see_invis = 0;
|
||||
//bot_npc_type->see_invis_undead = false;
|
||||
//bot_npc_type->see_hide = false;
|
||||
//bot_npc_type->see_improved_hide = false;
|
||||
//bot_npc_type->qglobal = false;
|
||||
//bot_npc_type->npc_aggro = false;
|
||||
//bot_npc_type->spawn_limit = 0;
|
||||
//bot_npc_type->mount_color = 0;
|
||||
//bot_npc_type->attack_speed = 0.0f;
|
||||
//bot_npc_type->attack_delay = 0;
|
||||
//bot_npc_type->accuracy_rating = 0;
|
||||
//bot_npc_type->avoidance_rating = 0;
|
||||
//bot_npc_type->findable = false;
|
||||
bot_npc_type->trackable = true;
|
||||
//bot_npc_type->slow_mitigation = 0;
|
||||
bot_npc_type->maxlevel = botLevel;
|
||||
//bot_npc_type->scalerate = 0;
|
||||
//bot_npc_type->private_corpse = false;
|
||||
//bot_npc_type->unique_spawn_by_name = false;
|
||||
//bot_npc_type->underwater = false;
|
||||
//bot_npc_type->emoteid = 0;
|
||||
//bot_npc_type->spellscale = 0.0f;
|
||||
//bot_npc_type->healscale = 0.0f;
|
||||
//bot_npc_type->no_target_hotkey = false;
|
||||
//bot_npc_type->raid_target = false;
|
||||
//bot_npc_type->armtexture = 0;
|
||||
//bot_npc_type->bracertexture = 0;
|
||||
//bot_npc_type->handtexture = 0;
|
||||
//bot_npc_type->legtexture = 0;
|
||||
//bot_npc_type->feettexture = 0;
|
||||
//bot_npc_type->ignore_despawn = false;
|
||||
bot_npc_type->show_name = true;
|
||||
//bot_npc_type->untargetable = false;
|
||||
bot_npc_type->skip_global_loot = true;
|
||||
//bot_npc_type->rare_spawn = false;
|
||||
bot_npc_type->stuck_behavior = Ground;
|
||||
|
||||
return bot_npc_type;
|
||||
}
|
||||
|
||||
void Bot::GenerateBaseStats()
|
||||
|
||||
@ -250,8 +250,8 @@ public:
|
||||
};
|
||||
|
||||
// Class Constructors
|
||||
Bot(NPCType npcTypeData, Client* botOwner);
|
||||
Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double totalPlayTime, uint32 lastZoneId, NPCType npcTypeData);
|
||||
Bot(NPCType *npcTypeData, Client* botOwner);
|
||||
Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double totalPlayTime, uint32 lastZoneId, NPCType *npcTypeData);
|
||||
|
||||
//abstract virtual function implementations requird by base abstract class
|
||||
virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill);
|
||||
@ -494,7 +494,7 @@ public:
|
||||
static BotSpell GetBestBotSpellForCure(Bot* botCaster, Mob* target);
|
||||
static BotSpell GetBestBotSpellForResistDebuff(Bot* botCaster, Mob* target);
|
||||
|
||||
static NPCType CreateDefaultNPCTypeStructForBot(std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender);
|
||||
static NPCType *CreateDefaultNPCTypeStructForBot(std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender);
|
||||
|
||||
// Static Bot Group Methods
|
||||
static bool AddBotToGroup(Bot* bot, Group* group);
|
||||
@ -656,7 +656,7 @@ public:
|
||||
virtual void BotRangedAttack(Mob* other);
|
||||
|
||||
// Publicized private functions
|
||||
static NPCType FillNPCTypeStruct(uint32 botSpellsID, std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender, float size, uint32 face, uint32 hairStyle, uint32 hairColor, uint32 eyeColor, uint32 eyeColor2, uint32 beardColor, uint32 beard, uint32 drakkinHeritage, uint32 drakkinTattoo, uint32 drakkinDetails, int32 hp, int32 mana, int32 mr, int32 cr, int32 dr, int32 fr, int32 pr, int32 corrup, int32 ac, uint32 str, uint32 sta, uint32 dex, uint32 agi, uint32 _int, uint32 wis, uint32 cha, uint32 attack);
|
||||
static NPCType *FillNPCTypeStruct(uint32 botSpellsID, std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender, float size, uint32 face, uint32 hairStyle, uint32 hairColor, uint32 eyeColor, uint32 eyeColor2, uint32 beardColor, uint32 beard, uint32 drakkinHeritage, uint32 drakkinTattoo, uint32 drakkinDetails, int32 hp, int32 mana, int32 mr, int32 cr, int32 dr, int32 fr, int32 pr, int32 corrup, int32 ac, uint32 str, uint32 sta, uint32 dex, uint32 agi, uint32 _int, uint32 wis, uint32 cha, uint32 attack);
|
||||
void BotRemoveEquipItem(int16 slot);
|
||||
void RemoveBotItemBySlot(uint32 slotID, std::string* errorMessage);
|
||||
uint32 GetTotalPlayTime();
|
||||
|
||||
@ -7707,16 +7707,7 @@ uint32 helper_bot_create(Client *bot_owner, std::string bot_name, uint8 bot_clas
|
||||
return bot_id;
|
||||
}
|
||||
|
||||
auto DefaultNPCTypeStruct = Bot::CreateDefaultNPCTypeStructForBot(
|
||||
bot_name.c_str(),
|
||||
"",
|
||||
bot_owner->GetLevel(),
|
||||
bot_race,
|
||||
bot_class,
|
||||
bot_gender
|
||||
);
|
||||
|
||||
auto my_bot = new Bot(DefaultNPCTypeStruct, bot_owner);
|
||||
auto my_bot = new Bot(Bot::CreateDefaultNPCTypeStructForBot(bot_name.c_str(), "", bot_owner->GetLevel(), bot_race, bot_class, bot_gender), bot_owner);
|
||||
|
||||
if (!my_bot->Save()) {
|
||||
bot_owner->Message(m_unknown, "Failed to create '%s' due to unknown cause", my_bot->GetCleanName());
|
||||
|
||||
@ -357,8 +357,8 @@ bool BotDatabase::LoadBot(const uint32 bot_id, Bot*& loaded_bot)
|
||||
|
||||
// TODO: Consider removing resists and basic attributes from the load query above since we're using defaultNPCType values instead
|
||||
auto row = results.begin();
|
||||
NPCType defaultNPCTypeStruct = Bot::CreateDefaultNPCTypeStructForBot(std::string(row[2]), std::string(row[3]), atoi(row[10]), atoi(row[8]), atoi(row[9]), atoi(row[7]));
|
||||
NPCType tempNPCStruct = Bot::FillNPCTypeStruct(
|
||||
auto defaultNPCTypeStruct = Bot::CreateDefaultNPCTypeStructForBot(std::string(row[2]), std::string(row[3]), atoi(row[10]), atoi(row[8]), atoi(row[9]), atoi(row[7]));
|
||||
auto tempNPCStruct = Bot::FillNPCTypeStruct(
|
||||
atoi(row[1]),
|
||||
std::string(row[2]),
|
||||
std::string(row[3]),
|
||||
@ -379,21 +379,21 @@ bool BotDatabase::LoadBot(const uint32 bot_id, Bot*& loaded_bot)
|
||||
atoi(row[25]),
|
||||
atoi(row[28]),
|
||||
atoi(row[29]),
|
||||
defaultNPCTypeStruct.MR,
|
||||
defaultNPCTypeStruct.CR,
|
||||
defaultNPCTypeStruct.DR,
|
||||
defaultNPCTypeStruct.FR,
|
||||
defaultNPCTypeStruct.PR,
|
||||
defaultNPCTypeStruct.Corrup,
|
||||
defaultNPCTypeStruct.AC,
|
||||
defaultNPCTypeStruct.STR,
|
||||
defaultNPCTypeStruct.STA,
|
||||
defaultNPCTypeStruct.DEX,
|
||||
defaultNPCTypeStruct.AGI,
|
||||
defaultNPCTypeStruct.INT,
|
||||
defaultNPCTypeStruct.WIS,
|
||||
defaultNPCTypeStruct.CHA,
|
||||
defaultNPCTypeStruct.ATK
|
||||
defaultNPCTypeStruct->MR,
|
||||
defaultNPCTypeStruct->CR,
|
||||
defaultNPCTypeStruct->DR,
|
||||
defaultNPCTypeStruct->FR,
|
||||
defaultNPCTypeStruct->PR,
|
||||
defaultNPCTypeStruct->Corrup,
|
||||
defaultNPCTypeStruct->AC,
|
||||
defaultNPCTypeStruct->STR,
|
||||
defaultNPCTypeStruct->STA,
|
||||
defaultNPCTypeStruct->DEX,
|
||||
defaultNPCTypeStruct->AGI,
|
||||
defaultNPCTypeStruct->INT,
|
||||
defaultNPCTypeStruct->WIS,
|
||||
defaultNPCTypeStruct->CHA,
|
||||
defaultNPCTypeStruct->ATK
|
||||
);
|
||||
|
||||
loaded_bot = new Bot(bot_id, atoi(row[0]), atoi(row[1]), atof(row[14]), atoi(row[6]), tempNPCStruct);
|
||||
|
||||
@ -2142,8 +2142,7 @@ bool QuestManager::createBot(const char *name, const char *lastname, uint8 level
|
||||
return false;
|
||||
}
|
||||
|
||||
NPCType DefaultNPCTypeStruct = Bot::CreateDefaultNPCTypeStructForBot(name, lastname, level, race, botclass, gender);
|
||||
Bot* NewBot = new Bot(DefaultNPCTypeStruct, initiator);
|
||||
Bot* NewBot = new Bot(Bot::CreateDefaultNPCTypeStructForBot(name, lastname, level, race, botclass, gender), initiator);
|
||||
|
||||
if(NewBot)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user