I wanted to add the increased out of combat regen rates to my server like live. I coded it to check if there were variables called HPRegen, MPRegen and ENRegen in the variables table, if not it just defaults to normal regen rates. So admins can set thier regen rates however they like. Here is the code if anyone wants to use it.
change
Code:
void Client::DoHPRegen() {
sint32 normal_regen = LevelRegen();
sint32 item_regen = itembonuses.HPRegen;
sint32 spell_regen = spellbonuses.HPRegen;
sint32 total_regen = normal_regen + item_regen + spell_regen;
total_regen = (total_regen * RuleI(Character, HPRegenMultiplier)) / 100;
SetHP(GetHP() + total_regen);
SendHPUpdate();
}
to
Code:
void Client::DoHPRegen() {
/* Out of combat HP Regen Multiplier added by Zydria */
/* Out of combat hp regen rate */
/* Create variable in db called HPRegen */
float HPRegen;
HPRegen = (float)1;
char tmp[10];
char *tmp2;
sint32 normal_regen = LevelRegen();
sint32 item_regen = itembonuses.HPRegen;
sint32 spell_regen = spellbonuses.HPRegen;
sint32 total_regen = normal_regen + item_regen + spell_regen;
// if the player is in combat... normal hp regen
if (IsEngaged())
{
total_regen = (total_regen * RuleI(Character, HPRegenMultiplier)) / 100;
}
// if they are out of combat... normal regen multiplied by variable HPRegen
// Default: Normal Regen
else
{
if (database.GetVariable("HPRegen", tmp, 9))
HPRegen = strtod((const char*)tmp, &tmp2);
total_regen = ((total_regen * RuleI(Character, HPRegenMultiplier)) / 100) * HPRegen;
}
SetHP(GetHP() + total_regen);
SendHPUpdate();
}
then change
Code:
void Client::DoManaRegen() {
if (GetMana() >= max_mana)
return;
int32 level=GetLevel();
int32 regen = 0;
if (IsSitting()) { //this should be changed so we dont med while camping, etc...
if(HasSkill(MEDITATE)) {
medding = true;
regen = (((GetSkill(MEDITATE)/10)+(level-(level/4)))/4)+4;
regen += spellbonuses.ManaRegen + itembonuses.ManaRegen;
CheckIncreaseSkill(MEDITATE, -10);
}
else
regen = 2+spellbonuses.ManaRegen+itembonuses.ManaRegen+(level/5);
}
else {
medding = false;
regen = 2+spellbonuses.ManaRegen+itembonuses.ManaRegen+(level/5);
}
regen += GetAA(aaMentalClarity);
regen += GetAA(aaBodyAndMindRejuvenation);
regen = (regen * RuleI(Character, ManaRegenMultiplier)) / 100;
SetMana(GetMana() + regen);
SendManaUpdatePacket();
}
to
Code:
void Client::DoManaRegen() {
/* Out of combat Mana Regen Multiplier added by Zydria */
// Out of combat mp regen rate
// Create variable in db called MPRegen
float MPRegen;
MPRegen = (float)1;
char tmp[10];
char *tmp2;
if (GetMana() >= max_mana)
return;
int32 level=GetLevel();
int32 regen = 0;
if (IsSitting()) { //this should be changed so we dont med while camping, etc...
if(HasSkill(MEDITATE)) {
medding = true;
regen = (((GetSkill(MEDITATE)/10)+(level-(level/4)))/4)+4;
regen += spellbonuses.ManaRegen + itembonuses.ManaRegen;
CheckIncreaseSkill(MEDITATE, -10);
}
else
regen = 2+spellbonuses.ManaRegen+itembonuses.ManaRegen+(level/5);
}
else {
medding = false;
regen = 2+spellbonuses.ManaRegen+itembonuses.ManaRegen+(level/5);
}
regen += GetAA(aaMentalClarity);
regen += GetAA(aaBodyAndMindRejuvenation);
// if character is in combat
if (IsEngaged())
{
// normal regen
regen = (regen * RuleI(Character, ManaRegenMultiplier)) / 100;
}
//if not
else
{
//if mpregen is set in variable db to higher than 1
if (database.GetVariable("MPRegen", tmp, 9))
MPRegen = strtod((const char*)tmp, &tmp2);
// regen at normal regen * mpregen value
regen = ((regen * RuleI(Character, ManaRegenMultiplier)) / 100) * MPRegen;
}
SetMana(GetMana() + regen);
SendManaUpdatePacket();
}
then change
Code:
void Client::DoEnduranceRegen()
{
if(GetEndurance() >= GetMaxEndurance())
return;
int32 level=GetLevel();
int32 regen = 0;
regen = int(level*4/10) + 2;
regen += spellbonuses.EnduranceRegen + itembonuses.EnduranceRegen;
regen = (regen * RuleI(Character, EnduranceRegenMultiplier)) / 100;
SetEndurance(GetEndurance() + regen);
}
to
Code:
void Client::DoEnduranceRegen()
{
/* Out of combat Endurance Regen Multiplier added by Zydria */
// Out of combat mp regen rate
// Create variable in db called MPRegen
float ENRegen;
ENRegen = (float)1;
char tmp[10];
char *tmp2;
if(GetEndurance() >= GetMaxEndurance())
return;
int32 level=GetLevel();
int32 regen = 0;
regen = int(level*4/10) + 2;
regen += spellbonuses.EnduranceRegen + itembonuses.EnduranceRegen;
// if player is in combat...
if (IsEngaged())
{
// normal regen
regen = (regen * RuleI(Character, EnduranceRegenMultiplier)) / 100;
}
// if not...
else
{
// if ENRegen is set to higher than 1 in the variables db
if (database.GetVariable("ENRegen", tmp, 9))
ENRegen = strtod((const char*)tmp, &tmp2);
// regen at normal end regen * ENRegen value
regen = ((regen * RuleI(Character, EnduranceRegenMultiplier)) / 100) * ENRegen;
}
SetEndurance(GetEndurance() + regen);
}
then add the rows to your variables table
Code:
INSERT INTO `variables` (`varname`,`value`,`information`) VALUES ('HPRegen','1','Out of combat hit point regen is multiplied by this number. Default: 1');
INSERT INTO `variables` (`varname`,`value`,`information`) VALUES ('MPRegen','1','Out of combat mana regen is multiplied by this number. Default: 1');
INSERT INTO `variables` (`varname`,`value`,`information`) VALUES ('ENRegen','1','Out of combat endurance regen is multiplied by this number. Default: 1');
and set the values to whatever you would like them to be, they default to 1 (normal rates) and if the rows arent set in the variables table, then it also defaults to 1.
I also changed my server to allow players to meditate while standing. it is setup with a variable to turn it on or off too... if anyone wants it just use this code for the "void Client:

oManaRegen() "instead of the above code...
Code:
void Client::DoManaRegen() {
/* Out of combat Mana Regen Multiplier and Med while standing added by Zydria */
// Out of combat mp regen rate
// Create variable in db called MPRegen
float MPRegen;
MPRegen = (float)1;
// Allow characters to meditate while standing up
// create variabe in db called SitToMed, value: 1 = med while standing. 0 = required to sit
int SitToMed;
SitToMed = 0;
char tmp[10];
char *tmp2;
if (GetMana() >= max_mana)
return;
int32 level=GetLevel();
int32 regen = 0;
// checks to see if player can med while standing
if (database.GetVariable("SitToMed", tmp, 9))
SitToMed = strtod((const char*)tmp, &tmp2);
// if not, make sure there sitting
if (SitToMed == 0){
if (IsSitting()) { //this should be changed so we dont med while camping, etc...
if(HasSkill(MEDITATE)) {
medding = true;
regen = (((GetSkill(MEDITATE)/10)+(level-(level/4)))/4)+4;
regen += spellbonuses.ManaRegen + itembonuses.ManaRegen;
CheckIncreaseSkill(MEDITATE, -10);
}
else
regen = 2+spellbonuses.ManaRegen+itembonuses.ManaRegen+(level/5);
}
else {
medding = false;
regen = 2+spellbonuses.ManaRegen+itembonuses.ManaRegen+(level/5);
}
}
// if med while standing is enabled,
else if (SitToMed == 1)
{
// always meditate
if(HasSkill(MEDITATE)) {
medding = true;
regen = (((GetSkill(MEDITATE)/10)+(level-(level/4)))/4)+4;
regen += spellbonuses.ManaRegen + itembonuses.ManaRegen;
CheckIncreaseSkill(MEDITATE, -10);
}
else
regen = 2+spellbonuses.ManaRegen+itembonuses.ManaRegen+(level/5);
}
else {
medding = false;
regen = 2+spellbonuses.ManaRegen+itembonuses.ManaRegen+(level/5);
}
regen += GetAA(aaMentalClarity);
regen += GetAA(aaBodyAndMindRejuvenation);
// if character is in combat
if (IsEngaged())
{
// normal regen
regen = (regen * RuleI(Character, ManaRegenMultiplier)) / 100;
}
//if not
else
{
//if mpregen is set in variable db to higher than 1
if (database.GetVariable("MPRegen", tmp, 9))
MPRegen = strtod((const char*)tmp, &tmp2);
// regen at normal regen * mpregen value
regen = ((regen * RuleI(Character, ManaRegenMultiplier)) / 100) * MPRegen;
}
SetMana(GetMana() + regen);
SendManaUpdatePacket();
}
and add the variable...
Code:
INSERT INTO `variables` (`varname`,`value`,`information`) VALUES ('SitToMed','0','0 = Player has to sit to med. 1 = Player meditates while standing. Default: 0');
by default it is set to 0, (player must sit to med) change it to 1 to allow them to med while standing.
This is my first contribution, as I am relativly new to the eqemu scene, I hope someone will get some use out of this, and if you find any problems with it, just let me know and i'll try and get it fixed...
Zydria