mirror of
https://github.com/EQEmu/Server.git
synced 2026-01-21 11:53:53 +00:00
Add pet size preservation like live
Run the SQL!!
This commit is contained in:
parent
a394bf25b2
commit
fdced53be1
@ -1,5 +1,8 @@
|
||||
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||
-------------------------------------------------------
|
||||
== 01/09/2014 ==
|
||||
demonstar55: Add pet size preservation like live (zone, camp, etc)
|
||||
|
||||
== 01/07/2014 ==
|
||||
demonstar55: Moved pet can attack check to before it tries to attack, which is more live like.
|
||||
|
||||
|
||||
1
utils/sql/git/required/2014_01_09_PreservePetSize.sql
Normal file
1
utils/sql/git/required/2014_01_09_PreservePetSize.sql
Normal file
@ -0,0 +1 @@
|
||||
ALTER TABLE `character_pet_info` ADD `size` FLOAT NOT NULL DEFAULT '0';
|
||||
@ -581,6 +581,7 @@ bool Client::Save(uint8 iCommitNow) {
|
||||
m_petinfo.Mana = pet->GetMana();
|
||||
pet->GetPetState(m_petinfo.Buffs, m_petinfo.Items, m_petinfo.Name);
|
||||
m_petinfo.petpower = pet->GetPetPower();
|
||||
m_petinfo.size = pet->GetSize();
|
||||
} else {
|
||||
memset(&m_petinfo, 0, sizeof(struct PetInfo));
|
||||
}
|
||||
@ -5437,7 +5438,7 @@ void Client::SuspendMinion()
|
||||
if(m_suspendedminion.SpellID > 0)
|
||||
{
|
||||
MakePoweredPet(m_suspendedminion.SpellID, spells[m_suspendedminion.SpellID].teleport_zone,
|
||||
m_suspendedminion.petpower, m_suspendedminion.Name);
|
||||
m_suspendedminion.petpower, m_suspendedminion.Name, m_suspendedminion.size);
|
||||
|
||||
CurrentPet = GetPet()->CastToNPC();
|
||||
|
||||
@ -5497,6 +5498,7 @@ void Client::SuspendMinion()
|
||||
|
||||
m_suspendedminion.Mana = CurrentPet->GetMana();
|
||||
m_suspendedminion.petpower = CurrentPet->GetPetPower();
|
||||
m_suspendedminion.size = CurrentPet->GetSize();
|
||||
|
||||
if(AALevel >= 2)
|
||||
CurrentPet->GetPetState(m_suspendedminion.Buffs, m_suspendedminion.Items, m_suspendedminion.Name);
|
||||
|
||||
@ -9154,7 +9154,7 @@ bool Client::FinishConnState2(DBAsyncWork* dbaw) {
|
||||
//Remake pet
|
||||
if (m_petinfo.SpellID > 1 && !GetPet() && m_petinfo.SpellID <= SPDAT_RECORDS)
|
||||
{
|
||||
MakePoweredPet(m_petinfo.SpellID, spells[m_petinfo.SpellID].teleport_zone, m_petinfo.petpower, m_petinfo.Name);
|
||||
MakePoweredPet(m_petinfo.SpellID, spells[m_petinfo.SpellID].teleport_zone, m_petinfo.petpower, m_petinfo.Name, m_petinfo.size);
|
||||
if (GetPet() && GetPet()->IsNPC()) {
|
||||
NPC *pet = GetPet()->CastToNPC();
|
||||
pet->SetPetState(m_petinfo.Buffs, m_petinfo.Items);
|
||||
|
||||
@ -454,7 +454,7 @@ public:
|
||||
static uint8 GetDefaultGender(uint16 in_race, uint8 in_gender = 0xFF);
|
||||
uint16 GetSkillByItemType(int ItemType);
|
||||
virtual void MakePet(uint16 spell_id, const char* pettype, const char *petname = nullptr);
|
||||
virtual void MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, const char *petname = nullptr);
|
||||
virtual void MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, const char *petname = nullptr, float in_size = 0.0f);
|
||||
bool IsWarriorClass() const;
|
||||
char GetCasterClass() const;
|
||||
uint8 GetArchetype() const;
|
||||
|
||||
@ -225,7 +225,8 @@ void Mob::MakePet(uint16 spell_id, const char* pettype, const char *petname) {
|
||||
// making it possible for petpower to be retained without the focus item having to
|
||||
// stay equipped when the character zones. petpower of -1 means that the currently equipped petfocus
|
||||
// of a client is searched for and used instead.
|
||||
void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, const char *petname) {
|
||||
void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower,
|
||||
const char *petname, float in_size) {
|
||||
// Sanity and early out checking first.
|
||||
if(HasPet() || pettype == nullptr)
|
||||
return;
|
||||
@ -422,6 +423,9 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, c
|
||||
}
|
||||
}
|
||||
|
||||
// finally, override size if one was provided
|
||||
if (in_size > 0.0f)
|
||||
npc->size = in_size;
|
||||
|
||||
entity_list.AddNPC(npc, true, true);
|
||||
SetPetID(npc->GetID());
|
||||
|
||||
@ -2745,11 +2745,11 @@ void ZoneDatabase::SavePetInfo(Client *c) {
|
||||
safe_delete_array(query);
|
||||
|
||||
if(!database.RunQuery(query, MakeAnyLenString(&query,
|
||||
"INSERT INTO `character_pet_info` (`char_id`, `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`) "
|
||||
"values (%u, 0, '%s', %i, %u, %u, %u) "
|
||||
"ON DUPLICATE KEY UPDATE `petname`='%s', `petpower`=%i, `spell_id`=%u, `hp`=%u, `mana`=%u",
|
||||
c->CharacterID(), petinfo->Name, petinfo->petpower, petinfo->SpellID, petinfo->HP, petinfo->Mana,
|
||||
petinfo->Name, petinfo->petpower, petinfo->SpellID, petinfo->HP, petinfo->Mana),
|
||||
"INSERT INTO `character_pet_info` (`char_id`, `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`, `size`) "
|
||||
"values (%u, 0, '%s', %i, %u, %u, %u, %f) "
|
||||
"ON DUPLICATE KEY UPDATE `petname`='%s', `petpower`=%i, `spell_id`=%u, `hp`=%u, `mana`=%u, `size`=%f",
|
||||
c->CharacterID(), petinfo->Name, petinfo->petpower, petinfo->SpellID, petinfo->HP, petinfo->Mana, petinfo->size,
|
||||
petinfo->Name, petinfo->petpower, petinfo->SpellID, petinfo->HP, petinfo->Mana, petinfo->size),
|
||||
errbuf))
|
||||
{
|
||||
safe_delete_array(query);
|
||||
@ -2792,11 +2792,11 @@ void ZoneDatabase::SavePetInfo(Client *c) {
|
||||
|
||||
|
||||
if(!database.RunQuery(query, MakeAnyLenString(&query,
|
||||
"INSERT INTO `character_pet_info` (`char_id`, `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`) "
|
||||
"values (%u, 1, '%s', %u, %u, %u, %u) "
|
||||
"ON DUPLICATE KEY UPDATE `petname`='%s', `petpower`=%i, `spell_id`=%u, `hp`=%u, `mana`=%u",
|
||||
c->CharacterID(), suspended->Name, suspended->petpower, suspended->SpellID, suspended->HP, suspended->Mana,
|
||||
suspended->Name, suspended->petpower, suspended->SpellID, suspended->HP, suspended->Mana),
|
||||
"INSERT INTO `character_pet_info` (`char_id`, `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`, `size`) "
|
||||
"values (%u, 1, '%s', %u, %u, %u, %u, %f) "
|
||||
"ON DUPLICATE KEY UPDATE `petname`='%s', `petpower`=%i, `spell_id`=%u, `hp`=%u, `mana`=%u, `size`=%f",
|
||||
c->CharacterID(), suspended->Name, suspended->petpower, suspended->SpellID, suspended->HP, suspended->Mana, suspended->size,
|
||||
suspended->Name, suspended->petpower, suspended->SpellID, suspended->HP, suspended->Mana, suspended->size),
|
||||
errbuf))
|
||||
{
|
||||
safe_delete_array(query);
|
||||
@ -2842,7 +2842,7 @@ void ZoneDatabase::LoadPetInfo(Client *c) {
|
||||
memset(suspended, 0, sizeof(PetInfo));
|
||||
|
||||
if(database.RunQuery(query, MakeAnyLenString(&query,
|
||||
"SELECT `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana` from `character_pet_info` where `char_id`=%u",
|
||||
"SELECT `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`, `size` from `character_pet_info` where `char_id`=%u",
|
||||
c->CharacterID()), errbuf, &result))
|
||||
{
|
||||
safe_delete_array(query);
|
||||
@ -2860,6 +2860,7 @@ void ZoneDatabase::LoadPetInfo(Client *c) {
|
||||
pi->SpellID = atoi(row[3]);
|
||||
pi->HP = atoul(row[4]);
|
||||
pi->Mana = atoul(row[5]);
|
||||
pi->size = atof(row[6]);
|
||||
}
|
||||
mysql_free_result(result);
|
||||
}
|
||||
|
||||
@ -71,6 +71,7 @@ struct PetInfo {
|
||||
int16 petpower;
|
||||
uint32 HP;
|
||||
uint32 Mana;
|
||||
float size;
|
||||
SpellBuff_Struct Buffs[BUFF_COUNT];
|
||||
uint32 Items[MAX_WORN_INVENTORY];
|
||||
char Name[64];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user