|
|
 |
 |
 |
 |
|
 |
 |
|
 |
 |
|
 |
|

01-15-2010, 01:13 AM
|
Discordant
|
|
Join Date: Jan 2002
Posts: 305
|
|
Suspend: Petname tells you, 'By your command, master.' (tell, purple)
Unsuspend: Petname tells you, 'I live again...'(tell, purple)
Suspend with a pet already suspended: You cannot have more than one pet at a time. (red, client message)
Try to unsuspend a pet that isn't there: no message at all
|

01-15-2010, 02:29 AM
|
Sarnak
|
|
Join Date: Apr 2007
Location: Austin, TX
Posts: 64
|
|
Suspend Minion
Essentially, I need a whole pet structure in the PP, if we want to code it to looking to the future.
If we want to wait until we get to that road later, we can just stick with a very suspended minion pet instance and copy over all the data when suspend minion happens.
It's up to you. <=0D
Assuming we are going to prepare for the future, here's some info:
- Pet information is currently stored in the EPP field and is of type ExtendedProfile_Struct, which looks like the following:
Code:
struct ExtendedProfile_Struct {
// Pet stuff
int16 pet_id;
int16 pet_hp;
int16 pet_mana;
SpellBuff_Struct pet_buffs[BUFF_COUNT];
int32 pet_items[MAX_MATERIALS];
char pet_name[64];
uint32 aa_effects;
uint32 perAA; //% of exp going to AAs
};
So, I don't think we need perAA duplicated in the blob field for the suspended minion's stuff, but that's about what we're looking at to store all the pet data.
Thanks!
|
 |
|
 |

01-15-2010, 04:57 AM
|
Sarnak
|
|
Join Date: Apr 2007
Location: Austin, TX
Posts: 64
|
|
Here it is!
Okay, so nevermind on the sending pet buffs to client, I was actually doing a GetClient()->SendPetBuffsToClient(), which had no effect.
That's corrected now and I believe this is a good version.
Of course, I know you guys will give me some feedback, which is very welcome!
There is actually a restriction to where you cannot suspend a pet while it is engaged. Therefore, I took the liberty of creating a general message in red text. If anyone finds that message, please relay that back to me or change it yourself if you have access to the code.
Here it is:
Code:
Index: zone/AA.h
===================================================================
--- zone/AA.h (revision 1094)
+++ zone/AA.h (working copy)
@@ -265,6 +265,7 @@
aaParagonofSpirit = 291, //DB
aaAdvancedInnateStrength = 292, //works
aaAdvancedInnateStamina = 302, //works
+ //aaSuspendMinion = 308, //WIP -- brandon
aaAdvancedInnateAgility = 312, //works
aaAdvancedInnateDexterity = 322, //works
aaAdvancedInnateIntelligence = 332, //works
Index: zone/client.cpp
===================================================================
--- zone/client.cpp (revision 1094)
+++ zone/client.cpp (working copy)
@@ -268,6 +268,7 @@
//for good measure:
memset(&m_pp, 0, sizeof(m_pp));
memset(&m_epp, 0, sizeof(m_epp));
+ memset(&m_suspended_minion, 0, sizeof(m_suspended_minion));
PendingTranslocate = false;
PendingSacrifice = false;
BoatID = 0;
@@ -4767,6 +4768,70 @@
return 0;
}
+void Client::SuspendMinion(){
+ Client *c = this;
+
+ Mob *pet = c->GetPet();
+ NPC *npcPet = NULL;
+
+ int cur_level=c->GetAA(aaID::aaSuspendedMinion);//SuspendedMinion ID
+
+ if(cur_level==0){
+ return;
+ }
+
+ int spell_id=0;
+ if(pet==0){
+ if(m_suspended_minion.pet_id > 0){
+ if(m_suspended_minion.pet_id){
+ c->MakePet(m_suspended_minion.pet_id,spells[m_suspended_minion.pet_id].teleport_zone);
+ pet = GetPet();
+ npcPet = GetPet()->CastToNPC();
+ if(cur_level >= 2){
+ npcPet->SetPetState(m_suspended_minion.pet_buffs, m_suspended_minion.pet_items);
+ pet->SendPetBuffsToClient();
+ }
+ npcPet->CalcBonuses();
+ npcPet->SetHP(m_suspended_minion.pet_hp);
+ npcPet->SetMana(m_suspended_minion.pet_mana);
+ c->Message(clientMessageTell,"%s tells you, 'I live again...'",pet->GetCleanName());
+ memset(&m_suspended_minion, 0, sizeof(m_suspended_minion));
+ }else{
+ c->Message(13,"Error: Couldn't find the spell id for your pet!");
+ return;
+ }
+ }else{
+ return;
+ }
+ }else{
+ npcPet = GetPet()->CastToNPC();
+ spell_id=npcPet->GetPetSpellID();
+ if(spell_id){
+ if(m_suspended_minion.pet_id > 0){
+ c->Message(clientMessageError,"You cannot have more than one pet at a time.");
+ return;
+ }else if(pet->IsEngaged()){
+ c->Message(clientMessageError,"You cannot suspend a pet while in battle.");
+ return;
+ }else{
+
+ m_suspended_minion.pet_id = spell_id;
+ m_suspended_minion.pet_hp = pet->GetHP();;
+ m_suspended_minion.pet_mana = pet->GetMana();
+ if(cur_level >= 2){
+ npcPet->GetPetState(m_suspended_minion.pet_buffs, m_suspended_minion.pet_items,m_suspended_minion.pet_name);
+ }
+
+ c->Message(clientMessageTell,"%s tells you, 'By your command, master.'",pet->GetCleanName());
+ pet->Kill();
+ }
+ }else{
+ c->Message(13,"Error getting the spell_id from the npc_type id.");
+ return;
+ }
+ }
+}
+
void Client::SummonAndRezzAllCorpses()
{
pendingrezzexp = -1;
Index: zone/client.h
===================================================================
--- zone/client.h (revision 1094)
+++ zone/client.h (working copy)
@@ -150,6 +150,16 @@
Client *MakeClient(EQStream* ieqs);
};
+struct SuspendedMinion_Struct
+{
+ int16 pet_id;
+ int16 pet_hp;
+ int16 pet_mana;
+ SpellBuff_Struct pet_buffs[BUFF_COUNT];
+ int32 pet_items[MAX_MATERIALS];
+ char pet_name[64];
+};
+
class Client : public Mob
{
public:
@@ -894,6 +904,7 @@
void CalcItemScale();
bool CalcItemScale(int32 slot_x, int32 slot_y);
void SummonAndRezzAllCorpses();
+ void SuspendMinion();
void NotifyNewTitlesAvailable();
void Signal(int32 data);
Mob *GetBindSightTarget() { return bind_sight_target; }
@@ -1033,6 +1044,8 @@
Inventory m_inv;
Object* m_tradeskill_object;
+ SuspendedMinion_Struct m_suspended_minion;
+
AdventureInfo* m_offered_adventure;
AdventureDetails *m_current_adventure;
Index: zone/command.cpp
===================================================================
--- zone/command.cpp (revision 1094)
+++ zone/command.cpp (working copy)
@@ -341,6 +341,7 @@
command_add("guilds",NULL,0,command_guild) ||
command_add("zonestatus","- Show connected zoneservers, synonymous with /servers",150,command_zonestatus) ||
command_add("manaburn","- Use AA Wizard class skill manaburn on target",10,command_manaburn) ||
+ command_add("suspendminion","- Use pet class AA skill Suspend Minion",10,command_suspendminion) ||
command_add("viewmessage","[id] - View messages in your tell queue",100,command_viewmessage) ||
command_add("viewmessages",NULL,0,command_viewmessage) ||
command_add("doanim","[animnum] [type] - Send an EmoteAnim for you or your target",50,command_doanim) ||
@@ -5158,6 +5159,11 @@
}
}
+void command_suspendminion(Client *c, const Seperator *sep)
+{
+ c->SuspendMinion();
+}
+
void command_viewmessage(Client *c, const Seperator *sep)
{
char errbuf[MYSQL_ERRMSG_SIZE];
Index: zone/command.h
===================================================================
--- zone/command.h (revision 1094)
+++ zone/command.h (working copy)
@@ -218,6 +218,7 @@
bool helper_guild_edit(Client *c, int32 dbid, int32 eqid, int8 rank, const char* what, const char* value);
void command_zonestatus(Client *c, const Seperator *sep);
void command_manaburn(Client *c, const Seperator *sep);
+void command_suspendminion(Client *c, const Seperator *sep);
void command_viewmessage(Client *c, const Seperator *sep);
void command_doanim(Client *c, const Seperator *sep);
void command_randomfeatures(Client *c, const Seperator *sep);
Index: zone/pets.cpp
===================================================================
--- zone/pets.cpp (revision 1094)
+++ zone/pets.cpp (working copy)
@@ -213,8 +213,6 @@
return base_hp;
}
*/
-
-
void Mob::MakePet(int16 spell_id, const char* pettype, const char *petname) {
//see if we are a special type of pet (for command filtering)
PetType type = petOther;
Index: zone/spell_effects.cpp
===================================================================
--- zone/spell_effects.cpp (revision 1094)
+++ zone/spell_effects.cpp (working copy)
@@ -2732,6 +2732,11 @@
CastToClient()->GoToBind(4);
break;
}
+ case SE_SuspendMinion:
+ case SE_SuspendPet:
+ {
+ CastToClient()->SuspendMinion();
+ }
case SE_ImprovedDamage:
case SE_ImprovedHeal:
|
 |
|
 |
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 09:03 PM.
|
|
 |
|
 |
|
|
|
 |
|
 |
|
 |