mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
Fix for unconscious ability skillups.
Fix for zone crash related to item==nullptr in Client::SummonItem().
This commit is contained in:
parent
12f8357373
commit
d939820918
@ -1,5 +1,11 @@
|
||||
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||
-------------------------------------------------------
|
||||
== xx/xx/2014 ==
|
||||
Uleat: Fix for unconscious skillups.
|
||||
Uleat: Fix for crash issue with nullptr reference in recent Client::SummonItem() work.
|
||||
Uleat: Added rule for GM Status check code in Client::SummonItem().
|
||||
Note: Rule default is set to 250..but, implementation is on hold until load item code handles the database 'minstatus' field.
|
||||
|
||||
== 03/27/2014 ==
|
||||
Kayen: SE_Gate will now use have a fail chance as defined by its base value in the spell data.
|
||||
Kayen: SE_Succor will now have a baseline fail chance of (2%). Rule added to adjust this as needed.
|
||||
|
||||
@ -138,6 +138,7 @@ RULE_BOOL( Pets, UnTargetableSwarmPet, false )
|
||||
RULE_CATEGORY_END()
|
||||
|
||||
RULE_CATEGORY( GM )
|
||||
RULE_INT ( GM, MinStatusToSummonItem, 250)
|
||||
RULE_INT ( GM, MinStatusToZoneAnywhere, 250 )
|
||||
RULE_CATEGORY_END()
|
||||
|
||||
|
||||
@ -2306,6 +2306,8 @@ uint64 Client::GetAllMoney() {
|
||||
}
|
||||
|
||||
bool Client::CheckIncreaseSkill(SkillUseTypes skillid, Mob *against_who, int chancemodi) {
|
||||
if (IsDead() || IsUnconscious())
|
||||
return false;
|
||||
if (IsAIControlled()) // no skillups while chamred =p
|
||||
return false;
|
||||
if (skillid > HIGHEST_SKILL)
|
||||
@ -2349,6 +2351,10 @@ bool Client::CheckIncreaseSkill(SkillUseTypes skillid, Mob *against_who, int cha
|
||||
}
|
||||
|
||||
void Client::CheckLanguageSkillIncrease(uint8 langid, uint8 TeacherSkill) {
|
||||
if (IsDead() || IsUnconscious())
|
||||
return;
|
||||
if (IsAIControlled())
|
||||
return;
|
||||
if (langid >= MAX_PP_LANGUAGE)
|
||||
return; // do nothing if langid is an invalid language
|
||||
|
||||
|
||||
@ -305,6 +305,7 @@ public:
|
||||
void SetHideMe(bool hm);
|
||||
inline uint16 GetPort() const { return port; }
|
||||
bool IsDead() const { return(dead); }
|
||||
bool IsUnconscious() const { return ((cur_hp <= 0) ? true : false); }
|
||||
inline bool IsLFP() { return LFP; }
|
||||
void UpdateLFP();
|
||||
|
||||
|
||||
@ -209,7 +209,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2,
|
||||
if(item == nullptr) {
|
||||
Message(13, "Item %u does not exist.", item_id);
|
||||
mlog(INVENTORY__ERROR, "Player %s on account %s attempted to create an item with an invalid id.\n(Item: %u, Aug1: %u, Aug2: %u, Aug3: %u, Aug4: %u, Aug5: %u)\n",
|
||||
GetName(), account_name, item->ID, aug1, aug2, aug3, aug4, aug5);
|
||||
GetName(), account_name, item_id, aug1, aug2, aug3, aug4, aug5);
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -228,14 +228,20 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2,
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// This code is ready to implement once the item load code is changed to process the 'minstatus' field.
|
||||
// Checking #iteminfo in-game verfies that item->MinStatus is set to '0' regardless of field value.
|
||||
// An optional sql script will also need to be added, once this goes live, to allow changing of the min status.
|
||||
|
||||
// check to make sure we are a GM if the item is GM-only
|
||||
/*
|
||||
else if(item->gm && (this->Admin() < 100))
|
||||
Message(13, "You are not a GM and can not summon this item.");
|
||||
mlog(INVENTORY__ERROR, "Player %s on account %s attempted to create a GM-only item with a status of %i.\n(Item: %u, Aug1: %u, Aug2: %u, Aug3: %u, Aug4: %u, Aug5: %u)\n",
|
||||
GetName(), account_name, this->Admin(), item->ID, aug1, aug2, aug3, aug4, aug5);
|
||||
else if(item->MinStatus && ((this->Admin() < item->MinStatus) || (this->Admin() < RuleI(GM, MinStatusToSummonItem)))) {
|
||||
Message(13, "You are not a GM or do not have the status to summon this item.");
|
||||
mlog(INVENTORY__ERROR, "Player %s on account %s attempted to create a GM-only item with a status of %i.\n(Item: %u, Aug1: %u, Aug2: %u, Aug3: %u, Aug4: %u, Aug5: %u, MinStatus: %u)\n",
|
||||
GetName(), account_name, this->Admin(), item->ID, aug1, aug2, aug3, aug4, aug5, item->MinStatus);
|
||||
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
uint32 augments[MAX_AUGMENT_SLOTS] = { aug1, aug2, aug3, aug4, aug5 };
|
||||
@ -276,12 +282,15 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2,
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Same as GM check above
|
||||
|
||||
// check to make sure we are a GM if the augment is GM-only
|
||||
/*
|
||||
else if(augtest->gm && (this->Admin() < 100)) {
|
||||
Message(13, "You are not a GM and can not summon this augment.");
|
||||
mlog(INVENTORY__ERROR, "Player %s on account %s attempted to create a GM-only augment (Aug%i) with a status of %i.\n(Item: %u, Aug1: %u, Aug2: %u, Aug3: %u, Aug4: %u, Aug5: %u)\n",
|
||||
GetName(), account_name, (iter + 1), this->Admin(), item->ID, aug1, aug2, aug3, aug4, aug5);
|
||||
else if(augtest->MinStatus && ((this->Admin() < augtest->MinStatus) || (this->Admin() < RuleI(GM, MinStatusToSummonItem)))) {
|
||||
Message(13, "You are not a GM or do not have the status to summon this augment.");
|
||||
mlog(INVENTORY__ERROR, "Player %s on account %s attempted to create a GM-only augment (Aug%i) with a status of %i.\n(Item: %u, Aug1: %u, Aug2: %u, Aug3: %u, Aug4: %u, Aug5: %u, MinStatus: %u)\n",
|
||||
GetName(), account_name, (iter + 1), this->Admin(), item->ID, aug1, aug2, aug3, aug4, aug5, item->MinStatus);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -557,6 +557,15 @@ uint16 Mob::GetSpecializeSkillValue(uint16 spell_id) const {
|
||||
}
|
||||
|
||||
void Client::CheckSpecializeIncrease(uint16 spell_id) {
|
||||
// These are not active because CheckIncreaseSkill() already does so.
|
||||
// It's such a rare occurance that adding them here is wasted..(ref only)
|
||||
/*
|
||||
if (IsDead() || IsUnconscious())
|
||||
return;
|
||||
if (IsAIControlled())
|
||||
return;
|
||||
*/
|
||||
|
||||
switch(spells[spell_id].skill) {
|
||||
case SkillAbjuration:
|
||||
CheckIncreaseSkill(SkillSpecializeAbjure, nullptr);
|
||||
@ -580,6 +589,15 @@ void Client::CheckSpecializeIncrease(uint16 spell_id) {
|
||||
}
|
||||
|
||||
void Client::CheckSongSkillIncrease(uint16 spell_id){
|
||||
// These are not active because CheckIncreaseSkill() already does so.
|
||||
// It's such a rare occurance that adding them here is wasted..(ref only)
|
||||
/*
|
||||
if (IsDead() || IsUnconscious())
|
||||
return;
|
||||
if (IsAIControlled())
|
||||
return;
|
||||
*/
|
||||
|
||||
switch(spells[spell_id].skill)
|
||||
{
|
||||
case SkillSinging:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user