[under discussion] RPs for Healing

A place to submit .patch fixes for the DOL SVN

Moderator: Developer Team

[under discussion] RPs for Healing

Postby stephenxpimentel » Fri Mar 13, 2009 12:51 am

HealSpellHandler.cs
Code: Select all
/*
* DAWN OF LIGHT - The first free open source DAoC server emulator
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
using System;
using System.Collections;
using DOL.GS.PacketHandler;
using DOL.GS.RealmAbilities;

namespace DOL.GS.Spells
{
/// <summary>
///
/// </summary>
[SpellHandlerAttribute("Heal")]
public class HealSpellHandler : SpellHandler
{
// constructor
public HealSpellHandler(GameLiving caster, Spell spell, SpellLine line) : base(caster, spell, line) { }
/// <summary>
/// Execute heal spell
/// </summary>
/// <param name="target"></param>
public override void StartSpell(GameLiving target)
{
IList targets = SelectTargets(target);
if (targets.Count <= 0) return;

bool healed = false;
int minHeal;
int maxHeal;
CalculateHealVariance(out minHeal, out maxHeal);

foreach (GameLiving healTarget in targets)
{
int heal = Util.Random(minHeal, maxHeal);
if (SpellLine.KeyName == GlobalSpellsLines.Item_Effects)
heal = maxHeal;
if (healTarget.IsDiseased)
{
MessageToCaster("Your target is diseased!", eChatType.CT_SpellResisted);
heal >>= 1;
}
healed |= HealTarget(healTarget, heal);
}

// group heals seem to use full power even if no heals
if (!healed && Spell.Target.ToLower() == "realm")
m_caster.Mana -= CalculateNeededPower(target) >> 1; // only 1/2 power if no heal
else
m_caster.Mana -= CalculateNeededPower(target);

// send animation for non pulsing spells only
if (Spell.Pulse == 0)
{
// show resisted effect if not healed
foreach (GameLiving healTarget in targets)
if(healTarget.IsAlive)
SendEffectAnimation(healTarget, 0, false, healed ? (byte)1 : (byte)0);
}

if (!healed && Spell.CastTime == 0) m_startReuseTimer = false;
}

/// <summary>
/// Heals hit points of one target and sends needed messages, no spell effects
/// </summary>
/// <param name="target"></param>
/// <param name="amount">amount of hit points to heal</param>
/// <returns>true if heal was done</returns>
public virtual bool HealTarget(GameLiving target, int amount)
{

if (target == null || target.ObjectState != GameLiving.eObjectState.Active) return false;

if (!target.IsAlive)
{
//"You cannot heal the dead!" sshot550.tga
MessageToCaster(target.GetName(0, true) + " is dead!", eChatType.CT_SpellResisted);
return false;
}

if (target is GamePlayer && (target as GamePlayer).NoHelp && Caster is GamePlayer)
{
//player not grouped, anyone else
//player grouped, different group
if ((target as GamePlayer).Group == null ||
(Caster as GamePlayer).Group == null ||
(Caster as GamePlayer).Group != (target as GamePlayer).Group)
{
MessageToCaster("That player does not want assistance", eChatType.CT_SpellResisted);
return false;
}
}

amount = (int)(amount * 1.00);
//moc heal decrease
double mocFactor = 1.0;
Effects.MasteryofConcentrationEffect moc = (Effects.MasteryofConcentrationEffect)Caster.EffectList.GetOfType(typeof(Effects.MasteryofConcentrationEffect));
if (moc != null)
{
GamePlayer playerCaster = Caster as GamePlayer;
RealmAbility ra = playerCaster.GetAbility(typeof(MasteryofConcentrationAbility)) as RealmAbility;
if (ra != null)
mocFactor = System.Math.Round((double)ra.Level * 25 / 100, 2);
amount = (int)Math.Round(amount * mocFactor);
}

int criticalvalue = 0;
int criticalchance = Caster.GetModified(eProperty.CriticalHealHitChance);
double effectiveness = 0;
if (Caster is GamePlayer)
effectiveness = ((GamePlayer)Caster).Effectiveness + Caster.GetModified(eProperty.HealingEffectiveness) * 0.01;
if (Caster is GameNPC)
effectiveness = 1.0;

//USE DOUBLE !
double cache = (double)amount * effectiveness;

amount = (int)cache;

if (Util.Chance(criticalchance))
criticalvalue = Util.Random(amount / 10, amount / 2 + 1);

amount += criticalvalue;

int heal = target.ChangeHealth(Caster, GameLiving.eHealthChangeType.Spell, amount);

if (heal == 0)
{
if (Spell.Pulse == 0)
{
if (target == m_caster)
MessageToCaster("You are fully healed.", eChatType.CT_SpellResisted);
else
MessageToCaster(target.GetName(0, true) + " is fully healed.", eChatType.CT_SpellResisted);
}
return false;
}

if (m_caster == target)
{
MessageToCaster("You heal yourself for " + heal + " hit points.", eChatType.CT_Spell);
if (heal < amount)
MessageToCaster("You are fully healed.", eChatType.CT_Spell);
}
else
{
MessageToCaster("You heal " + target.GetName(0, false) + " for " + heal + " hit points!", eChatType.CT_Spell);
m_caster.GainRealmPoints((long)Math.Round((double)(heal / ServerProperties.Properties.RP_RATE / 40)));
MessageToLiving(target, "You are healed by " + m_caster.GetName(0, false) + " for " + heal + " hit points.", eChatType.CT_Spell);
if (heal < amount)
MessageToCaster(target.GetName(0, true) + " is fully healed.", eChatType.CT_Spell);
if (heal > 0 && criticalvalue > 0)
MessageToCaster("Your heal criticals for an extra " + criticalvalue + " amount of hit points!", eChatType.CT_Spell);
}

return true;
}

/// <summary>
/// Calculates heal variance based on spec
/// </summary>
/// <param name="min">store min variance here</param>
/// <param name="max">store max variance here</param>
public virtual void CalculateHealVariance(out int min, out int max)
{
double spellValue = m_spell.Value;
GamePlayer casterPlayer = m_caster as GamePlayer;

// percents if less than zero
if (spellValue < 0)
{
if (casterPlayer != null)
spellValue = (spellValue / -100.0) * casterPlayer.CalculateMaxHealth(casterPlayer.Level, casterPlayer.GetBaseStat(eStat.CON));
else
spellValue = (spellValue / -100.0) * m_caster.MaxHealth;

min = max = (int)spellValue;
return;
}

int upperLimit = (int)(spellValue * 1.25);
if (upperLimit < 1)
{
upperLimit = 1;
}

double eff = 1.25;
if (Caster is GamePlayer)
{
double lineSpec = Caster.GetModifiedSpecLevel(m_spellLine.Spec);
if (lineSpec < 1)
lineSpec = 1;
eff = 0.25;
if (Spell.Level > 0)
{
eff += (lineSpec - 1.0) / Spell.Level;
if (eff > 1.25)
eff = 1.25;
}
}

int lowerLimit = (int)(spellValue * eff);
if (lowerLimit < 1)
{
lowerLimit = 1;
}
if (lowerLimit > upperLimit)
{
lowerLimit = upperLimit;
}

min = lowerLimit;
max = upperLimit;
return;
}
}
}
You'll get RPS for healing, very livelike, around 30-40 rps per heal.

(Heal Amount / 40 = RPs)
Lets have some fun.
stephenxpimentel
Contributor
 
Posts: 1300
Joined: Wed Sep 19, 2007 5:09 pm

Re: RPs for Healing

Postby sooid » Fri Mar 13, 2009 5:53 am

You'll get RPS for healing, very livelike, around 30-40 rps per heal.

(Heal Amount / 40 = RPs)
That's kinda contradictory. Checked two screenshots and the amount of realmpoints gained was 112 for 1503 hitpoints and 151 for 2025 hitpoints. That's 7,4518 resp. 7,4568 so I guess it should be (heal / ServerProperties.Properties.RP_RATE * (3 / 40)). Would be 38 realmpoints for a 500 hitpoint heal then, sounds about right.

Another MessageToCaster("You get " + healRps + " realmpoints!", ...) would be needed as well if heal >= amount. Should be at the end of the else-loop then. Could be "receive" as well, screenshots ain't english.
User avatar
sooid
DOL Follower
 
Posts: 454
Joined: Wed Nov 28, 2007 8:44 am

Re: RPs for Healing

Postby Graveen » Fri Mar 13, 2009 7:02 am

Stephen, can you post this as a patch please ? :)
Image
* pm me to contribute in Dawn of Light: code, database *
User avatar
Graveen
Project Leader
 
Posts: 12660
Joined: Fri Oct 19, 2007 9:22 pm
Location: France

Re: [awaiting patch] RPs for Healing

Postby LifeFlight » Fri Mar 13, 2009 9:03 am

You sure that it's only RPs when you heal others? I thought it was when you heal yourself too, i'd have to check on Live.

Also, you shouldn't get RPs from healing Mob Damage... So yeah, I dunno how you would do that.
LifeFlight's PvP.
LifeFlight
Contributor
 
Posts: 114
Joined: Wed Jan 03, 2007 6:07 am
Website: http://lifeflight.utpdr.com
Location: Texas

Re: [awaiting patch] RPs for Healing

Postby sooid » Fri Mar 13, 2009 9:41 am

I'd just check for target.InCombatPvP. Anything else would be extremly laborious, imagine having a mob add while in RvR and therefore taking both player and mob damage.
You sure that it's only RPs when you heal others?
That's how it is, you don't get any realmpoints upon healing yourself. Unless that was changed, don't think so tho.
User avatar
sooid
DOL Follower
 
Posts: 454
Joined: Wed Nov 28, 2007 8:44 am

Re: [awaiting patch] RPs for Healing

Postby Dunnerholl » Fri Mar 13, 2009 10:01 am

mmm and i think its was just from single heals...at least i dont remember getting rps from a spread heal....

could someone go and do some testing please before integrating such a change?


edit : what about heal from ra/item proc?
Dunnerholl
Developer
 
Posts: 1229
Joined: Mon Sep 08, 2008 8:39 pm

Re: [awaiting patch] RPs for Healing

Postby sooid » Fri Mar 13, 2009 10:12 am

RAs like Divine Intervention or Ameliorating Melodies don't give you any realmpoints. Same for items.
Spreadheals use a seperate handler, the spec group heal or base group heal use this handler and do indeed result in realmpoints for the caster.
User avatar
sooid
DOL Follower
 
Posts: 454
Joined: Wed Nov 28, 2007 8:44 am

Re: [awaiting patch] RPs for Healing

Postby Graveen » Fri Mar 13, 2009 11:23 am

Only single heal or group heal, not spread or any ameliorating melody, or font of life.

Iirc, around 10rps for 100 healed.
The 100 healed should comes from a player (or a pet) - ie a player is hitting you for 100 life, then a mob damage you for until your bar is 1%, you can't get more than 10 rps (if we state 100 life = 10 rps)
A rez is also giving RPs (30 for rez 30% iirc).
Image
* pm me to contribute in Dawn of Light: code, database *
User avatar
Graveen
Project Leader
 
Posts: 12660
Joined: Fri Oct 19, 2007 9:22 pm
Location: France

Re: [awaiting patch] RPs for Healing

Postby Roozzz » Fri Mar 13, 2009 11:27 am

Rez is working as it should I think, atleast I used to get rps from rezzing people so :)
Quidquid latine dictum sit, altum videtur
Roozzz
Database Team
 
Posts: 1943
Joined: Wed Dec 06, 2006 11:00 am

Re: [awaiting patch] RPs for Healing

Postby Dinberg » Fri Mar 13, 2009 3:53 pm

Throw in a check for dueling aswell please before you commit it. Don't want to have an exploit, do we? ^^
The Marvelous Contraption begins to stir...
User avatar
Dinberg
Inactive Staff Member
 
Posts: 4695
Joined: Sat Mar 10, 2007 9:47 am
Yahoo Messenger: dinberg_darktouch
Location: Jordheim

Re: [awaiting patch] RPs for Healing

Postby stephenxpimentel » Fri Mar 13, 2009 5:00 pm

patch inc - just adding in PvP combat req. As for duels - When someone heals outside of duel or u heal ur target duel ends.. so should be good.

also it doesnt send u a message i dont think.. im pretty sure it just says "You get amount of rps"

EDIT*** Also adding a PvP Server Check for in-group / Guild.

(On PvP Servers Heals shouldnt affect anyone outside of group / guild.(Due to classes with aoe heals))

EDIT*** Added a server property for the disable outside heals... Figured this would be the best way. Default Value is true.

Posting patch in like 2 mins after i test. :D
Lets have some fun.
stephenxpimentel
Contributor
 
Posts: 1300
Joined: Wed Sep 19, 2007 5:09 pm

Re: [awaiting patch] RPs for Healing

Postby sooid » Fri Mar 13, 2009 5:43 pm

also it doesnt send u a message i dont think.. im pretty sure it just says "You get amount of rps"
That's the same thing unless I misunderstood you.
But it brings me to the point that you could maybe check if the caster is a GamePlayer. There's no need to give realmpoints to anything else but a GamePlayer.
User avatar
sooid
DOL Follower
 
Posts: 454
Joined: Wed Nov 28, 2007 8:44 am

Re: [awaiting patch] RPs for Healing

Postby stephenxpimentel » Fri Mar 13, 2009 6:30 pm

ahead of ya :D

I cant figure out how to make a patch for it.. sry lol. Tried following ur directions its just not working.

heres heal spellhandler.. its the same as the 1 in the SVN but has my changes.
Code: Select all
/*
* DAWN OF LIGHT - The first free open source DAoC server emulator
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
using System;
using System.Collections;
using DOL.GS.PacketHandler;
using DOL.GS.RealmAbilities;

namespace DOL.GS.Spells
{
/// <summary>
///
/// </summary>
[SpellHandlerAttribute("Heal")]
public class HealSpellHandler : SpellHandler
{
// constructor
public HealSpellHandler(GameLiving caster, Spell spell, SpellLine line) : base(caster, spell, line) { }
/// <summary>
/// Execute heal spell
/// </summary>
/// <param name="target"></param>
public override void StartSpell(GameLiving target)
{
IList targets = SelectTargets(target);
if (targets.Count <= 0) return;

bool healed = false;
int minHeal;
int maxHeal;
CalculateHealVariance(out minHeal, out maxHeal);

foreach (GameLiving healTarget in targets)
{
int heal = Util.Random(minHeal, maxHeal);
if (SpellLine.KeyName == GlobalSpellsLines.Item_Effects)
heal = maxHeal;
if (healTarget.IsDiseased)
{
MessageToCaster("Your target is diseased!", eChatType.CT_SpellResisted);
heal >>= 1;
}
healed |= HealTarget(healTarget, heal);
}

// group heals seem to use full power even if no heals
if (!healed && Spell.Target.ToLower() == "realm")
m_caster.Mana -= CalculateNeededPower(target) >> 1; // only 1/2 power if no heal
else
m_caster.Mana -= CalculateNeededPower(target);

// send animation for non pulsing spells only
if (Spell.Pulse == 0)
{
// show resisted effect if not healed
foreach (GameLiving healTarget in targets)
if(healTarget.IsAlive)
SendEffectAnimation(healTarget, 0, false, healed ? (byte)1 : (byte)0);
}

if (!healed && Spell.CastTime == 0) m_startReuseTimer = false;
}

/// <summary>
/// Heals hit points of one target and sends needed messages, no spell effects
/// </summary>
/// <param name="target"></param>
/// <param name="amount">amount of hit points to heal</param>
/// <returns>true if heal was done</returns>
public virtual bool HealTarget(GameLiving target, int amount)
{

if (target == null || target.ObjectState != GameLiving.eObjectState.Active) return false;

if (!target.IsAlive)
{
//"You cannot heal the dead!" sshot550.tga
MessageToCaster(target.GetName(0, true) + " is dead!", eChatType.CT_SpellResisted);
return false;
}

if (target is GamePlayer && (target as GamePlayer).NoHelp && Caster is GamePlayer)
{
//player not grouped, anyone else
//player grouped, different group
if ((target as GamePlayer).Group == null ||
(Caster as GamePlayer).Group == null ||
(Caster as GamePlayer).Group != (target as GamePlayer).Group)
{
MessageToCaster("That player does not want assistance", eChatType.CT_SpellResisted);
return false;
}
}

amount = (int)(amount * 1.00);
//moc heal decrease
double mocFactor = 1.0;
Effects.MasteryofConcentrationEffect moc = (Effects.MasteryofConcentrationEffect)Caster.EffectList.GetOfType(typeof(Effects.MasteryofConcentrationEffect));
if (moc != null)
{
GamePlayer playerCaster = Caster as GamePlayer;
RealmAbility ra = playerCaster.GetAbility(typeof(MasteryofConcentrationAbility)) as RealmAbility;
if (ra != null)
mocFactor = System.Math.Round((double)ra.Level * 25 / 100, 2);
amount = (int)Math.Round(amount * mocFactor);
}

int criticalvalue = 0;
int criticalchance = Caster.GetModified(eProperty.CriticalHealHitChance);
double effectiveness = 0;
if (Caster is GamePlayer)
effectiveness = ((GamePlayer)Caster).Effectiveness + Caster.GetModified(eProperty.HealingEffectiveness) * 0.01;
if (Caster is GameNPC)
effectiveness = 1.0;

//USE DOUBLE !
double cache = (double)amount * effectiveness;

amount = (int)cache;

if (Util.Chance(criticalchance))
criticalvalue = Util.Random(amount / 10, amount / 2 + 1);

amount += criticalvalue;

int heal = target.ChangeHealth(Caster, GameLiving.eHealthChangeType.Spell, amount);

if (heal == 0)
{
if (Spell.Pulse == 0)
{
if (target == m_caster)
MessageToCaster("You are fully healed.", eChatType.CT_SpellResisted);
else
MessageToCaster(target.GetName(0, true) + " is fully healed.", eChatType.CT_SpellResisted);
}
return false;
}

if (m_caster == target)
{
MessageToCaster("You heal yourself for " + heal + " hit points.", eChatType.CT_Spell);
if (heal < amount)
MessageToCaster("You are fully healed.", eChatType.CT_Spell);
}
if (target.InCombatPvP && target is GamePlayer)
{
m_caster.GainRealmPoints((long)Math.Round((double)(heal / ServerProperties.Properties.RP_RATE / 40)));

}
if (!target.Group.IsInTheGroup(m_caster) && target.Guild != m_caster.Guild && ServerProperties.Properties.ALLOW_OUTSIDE_HEALS == false)
{
MessageToCaster("You cannot heal " + target.GetName(0, false) + " because he is an enemy", eChatType.CT_Spell);
return false;
}

else
{
MessageToCaster("You heal " + target.GetName(0, false) + " for " + heal + " hit points!", eChatType.CT_Spell);
MessageToLiving(target, "You are healed by " + m_caster.GetName(0, false) + " for " + heal + " hit points.", eChatType.CT_Spell);
if (heal < amount)
MessageToCaster(target.GetName(0, true) + " is fully healed.", eChatType.CT_Spell);
if (heal > 0 && criticalvalue > 0)
MessageToCaster("Your heal criticals for an extra " + criticalvalue + " amount of hit points!", eChatType.CT_Spell);
}

return true;
}

/// <summary>
/// Calculates heal variance based on spec
/// </summary>
/// <param name="min">store min variance here</param>
/// <param name="max">store max variance here</param>
public virtual void CalculateHealVariance(out int min, out int max)
{
double spellValue = m_spell.Value;
GamePlayer casterPlayer = m_caster as GamePlayer;

// percents if less than zero
if (spellValue < 0)
{
if (casterPlayer != null)
spellValue = (spellValue / -100.0) * casterPlayer.CalculateMaxHealth(casterPlayer.Level, casterPlayer.GetBaseStat(eStat.CON));
else
spellValue = (spellValue / -100.0) * m_caster.MaxHealth;

min = max = (int)spellValue;
return;
}

int upperLimit = (int)(spellValue * 1.25);
if (upperLimit < 1)
{
upperLimit = 1;
}

double eff = 1.25;
if (Caster is GamePlayer)
{
double lineSpec = Caster.GetModifiedSpecLevel(m_spellLine.Spec);
if (lineSpec < 1)
lineSpec = 1;
eff = 0.25;
if (Spell.Level > 0)
{
eff += (lineSpec - 1.0) / Spell.Level;
if (eff > 1.25)
eff = 1.25;
}
}

int lowerLimit = (int)(spellValue * eff);
if (lowerLimit < 1)
{
lowerLimit = 1;
}
if (lowerLimit > upperLimit)
{
lowerLimit = upperLimit;
}

min = lowerLimit;
max = upperLimit;
return;
}
}
}
and heres ServerProperties.cs
Code: Select all
/*
/*
* DAWN OF LIGHT - The first free open source DAoC server emulator
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
using System.Collections;
using System.Globalization;
using System;
using System.Reflection;
using DOL.Database;
using log4net;

namespace DOL.GS.ServerProperties
{
/// <summary>
/// The abstract ServerProperty class that also defines the
/// static Init and Load methods for other properties that inherit
/// </summary>
public abstract class Properties
{
/// <summary>
/// Defines a logger for this class.
/// </summary>
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

/// <summary>
/// Init the property
/// </summary>
static Properties()
{
Init(typeof(Properties));
}

/// <summary>
/// The Experience Rate
/// </summary>
[ServerProperty("xp_rate", "The Experience Points Rate Modifier - Edit this to change the rate at which you gain experience points e.g 1.5 is 50% more 2.0 is twice the amount (100%) 0.5 is half the amount (50%)", 1.0)]
public static readonly double XP_RATE;

/// <summary>
/// RvR Zones XP Rate
/// </summary>
[ServerProperty("rvr_zones_xp_rate", "The RvR zones Experience Points Rate Modifier", 1.0)]
public static readonly double RvR_XP_RATE;

/// <summary>
/// The Realm Points Rate
/// </summary>
[ServerProperty("rp_rate", "The Realm Points Rate Modifier - Edit this to change the rate at which you gain realm points e.g 1.5 is 50% more 2.0 is twice the amount (100%) 0.5 is half the amount (50%)", 1.0)]
public static readonly double RP_RATE;

/// <summary>
/// The Bounty Points Rate
/// </summary>
[ServerProperty("bp_rate", "The Bounty Points Rate Modifier - Edit this to change the rate at which you gain bounty points e.g 1.5 is 50% more 2.0 is twice the amount (100%) 0.5 is half the amount (50%)", 1.0)]
public static readonly double BP_RATE;

/// <summary>
/// The Server Message of the Day
/// </summary>
[ServerProperty("motd", "The Server Message of the Day - Edit this to set what is displayed when a level 2+ character enters the game for the first time, set to \"\" for nothing", "Welcome to a Dawn of Light server, please edit this MOTD")]
public static readonly string MOTD;

/// <summary>
/// The damage players do against monsters
/// </summary>
[ServerProperty("pve_damage", "The PvE Damage Modifier - Edit this to change the amount of damage done when fighting mobs e.g 1.5 is 50% more damage 2.0 is twice the damage (100%) 0.5 is half the damage (50%)", 1.0)]
public static readonly double PVE_DAMAGE;

/// <summary>
/// The damage players do against players
/// </summary>
[ServerProperty("pvp_damage", "The PvP Damage Modifier - Edit this to change the amountof damage done when fighting players e.g 1.5 is 50% more damage 2.0 is twice the damage (100%) 0.5 is half the damage (50%)", 1.0)]
public static readonly double PVP_DAMAGE;

/// <summary>
/// The message players get when they enter the game past level 1
/// </summary>
[ServerProperty("starting_msg", "The Starting Mesage - Edit this to set what is displayed when a level 1 character enters the game for the first time, set to \"\" for nothing", "Welcome for your first time to a Dawn of Light server, please edit this Starter Message")]
public static readonly string STARTING_MSG;

/// <summary>
/// The amount of copper a player starts with
/// </summary>
[ServerProperty("starting_money", "Starting Money - Edit this to change the amount in copper of money new characters start the game with, max 214 plat", 0)]
public static readonly long STARTING_MONEY;

/// <summary>
/// The level of experience a player should start with
/// </summary>
[ServerProperty("starting_level", "Starting Level - Edit this to set which levels experience a new player start the game with", 1)]
public static readonly int STARTING_LEVEL;

/// <summary>
/// The message players get when they enter the game at level 1
/// </summary>
[ServerProperty("starting_realm_level", "Starting Realm level - Edit this to set which realm level a new player starts the game with", 0)]
public static readonly int STARTING_REALM_LEVEL;

/// <summary>
/// The a starting guild should be used
/// </summary>
[ServerProperty("starting_guild", "Starter Guild - Edit this to change the starter guild options, values True,False", true)]
public static readonly bool STARTING_GUILD;

/// <summary>
/// The crafting speed modifier
/// </summary>
[ServerProperty("crafting_speed", "Crafting Speed Modifier - Edit this to change the speed at which you craft e.g 1.5 is 50% faster 2.0 is twice as fast (100%) 0.5 is half the speed (50%)", 1.0)]
public static readonly double CRAFTING_SPEED;

/// <summary>
/// The money drop modifier
/// </summary>
[ServerProperty("money_drop", "Money Drop Modifier - Edit this to change the amount of money which is dropped e.g 1.5 is 50% more 2.0 is twice the amount (100%) 0.5 is half the amount (50%)", 1.0)]
public static readonly double MONEY_DROP;

/// <summary>
/// The broadcast type
/// </summary>
[ServerProperty("broadcast_type", "Broadcast Type - Edit this to change what /b does, values 0 = disabled, 1 = area, 2 = visibility distance, 3 = zone, 4 = region, 5 = realm, 6 = server", 1)]
public static readonly int BROADCAST_TYPE;

/// <summary>
/// The max number of guilds in an alliance
/// </summary>
[ServerProperty("alliance_max", "Max Guilds In Alliance - Edit this to change the maximum number of guilds in an alliance -1 = unlimited, 0=disable alliances", -1)]
public static readonly int ALLIANCE_MAX;

/// <summary>
/// The number of players needed for claiming
/// </summary>
[ServerProperty("claim_num", "Players Needed For Claim - Edit this to change the amount of players required to claim a keep, towers are half this amount", 8)]
public static readonly int CLAIM_NUM;

/// <summary>
/// The number of players needed to form a guild
/// </summary>
[ServerProperty("guild_num", "Players Needed For Guild Form - Edit this to change the amount of players required to form a guild", 8)]
public static readonly int GUILD_NUM;

/// <summary>
/// If the server should only accept connections from staff
/// </summary>
[ServerProperty("staff_login", "Staff Login Only - Edit this to set weather you wish staff to be the only ones allowed to log in values True,False", false)]
public static readonly bool STAFF_LOGIN;

/// <summary>
/// The max number of players on the server
/// </summary>
[ServerProperty("max_players", "Max Players - Edit this to set the maximum players allowed to connect at the same time set 0 for unlimited", 0)]
public static readonly int MAX_PLAYERS;

/// <summary>
/// The time until a player is worth rps again after death
/// </summary>
[ServerProperty("rp_worth_seconds", "Realm Points Worth Seconds - Edit this to change how many seconds until a player is worth RPs again after being killed ", 300)]
public static readonly int RP_WORTH_SECONDS;

/// <summary>
/// The minimum client version required to connect
/// </summary>
[ServerProperty("client_version_min", "Minimum Client Version - Edit this to change which client version at the least have to be used: -1 = any, 1.80 = 180", -1)]
public static readonly int CLIENT_VERSION_MIN;

/// <summary>
/// The maximum client version required to connect
/// </summary>
[ServerProperty("client_version_max", "Maximum Client Version - Edit this to change which client version at the most have to be used: -1 = any, 1.80 = 180", -1)]
public static readonly int CLIENT_VERSION_MAX;

/// <summary>
/// Should the server load quests
/// </summary>
[ServerProperty("load_quests", "Should the server load quests, values True,False", true)]
public static readonly bool LOAD_QUESTS;

/// <summary>
/// Should the server log trades
/// </summary>
[ServerProperty("log_trades", "Should the server log all trades a player makes, values True,False", false)]
public static readonly bool LOG_TRADES;

/// <summary>
/// What class should the server use for players
/// </summary>
[ServerProperty("player_class", "What class should the server use for players", "DOL.GS.GamePlayer")]
public static readonly string PLAYER_CLASS;

/// <summary>
/// What is the maximum client type allowed to connect
/// </summary>
[ServerProperty("client_type_max", "What is the maximum client type allowed to connect", -1)]
public static readonly int CLIENT_TYPE_MAX;

/// <summary>
/// Disable minotaurs from being created
/// </summary>
[ServerProperty("disable_minotaurs", "Disable minotaurs from being created", false)]
public static readonly bool DISABLE_MINOTAURS;

/// <summary>
/// Should the server load the example scripts
/// </summary>
[ServerProperty("load_examples", "should the server load the example scripts", true)]
public static readonly bool LOAD_EXAMPLES;

/// <summary>
/// A serialised list of disabled RegionIDs
/// </summary>
[ServerProperty("disabled_regions", "a serialised list of disabled region IDs seperated by ;", "")]
public static readonly string DISABLED_REGIONS;

/// <summary>
/// A serialised list of disabled expansion IDs
/// </summary>
[ServerProperty("disabled_expansions", "a serialised list of disabled expansions IDs, expansion IDs are client type seperated by ;", "")]
public static readonly string DISABLED_EXPANSIONS;

/// <summary>
/// Should the server disable the tutorial zone
/// </summary>
[ServerProperty("disable_tutorial", "should the server disable the tutorial zone", false)]
public static readonly bool DISABLE_TUTORIAL;

/// <summary>
/// Should users be able to create characters in all realms using the same account
/// </summary>
[ServerProperty("allow_all_realms", "should we allow characters to be created on all realms using a single account", false)]
public static readonly bool ALLOW_ALL_REALMS;

/// <summary>
/// Should users be allowed to create catacombs classes
/// </summary>
[ServerProperty("disable_catacombs_classes", "should we disable catacombs classes", false)]
public static readonly bool DISABLE_CATACOMBS_CLASSES;

/// <summary>
/// Days before your elligable for a free level
/// </summary>
[ServerProperty("freelevel_days", "days before your elligable for a free level, use -1 to deactivate", 7)]
public static readonly int FREELEVEL_DAYS;

/// <summary>
/// Server Language
/// </summary>
[ServerProperty("server_language", "Language of your server. It can be EN, FR or DE.", "EN")]
public static readonly string SERV_LANGUAGE;

/// <summary>
/// allow_change_language
/// </summary>
[ServerProperty("allow_change_language", "Should we allow clients to change their language ?", false)]
public static readonly bool ALLOW_CHANGE_LANGUAGE;

/// <summary>
/// StatSave Interval
/// </summary>
[ServerProperty("statsave_interval", "Interval between each DB Stats store in minutes. -1 for deactivated.", -1)]
public static readonly int STATSAVE_INTERVAL;

/// <summary>
/// Anon Modifier
/// </summary>
[ServerProperty("anon_modifier", "Various modifying options for anon, 0 = default, 1 = /who shows player but as ANON, -1 = disabled", 0)]
public static readonly int ANON_MODIFIER;

/// <summary>
/// Buff Range
/// </summary>
[ServerProperty("buff_range", "The range that concentration buffs can last from the owner before it expires", 0)]
public static readonly int BUFF_RANGE;

/// <summary>
/// Disable Bug Reports
/// </summary>
[ServerProperty("disable_bug_reports", "Set to true to disable bug reporting, and false to enable bug reporting", true)]
public static readonly bool DISABLE_BUG_REPORTS;

/// <summary>
/// Use Custom Start Locations
/// </summary>
[ServerProperty("use_custom_start_locations", "Set to true if you will use another script to set your start locations", false)]
public static readonly bool USE_CUSTOM_START_LOCATIONS;

/// <summary>
/// Use Keep Balancing
/// </summary>
[ServerProperty("use_keep_balancing", "Set to true if you want keeps to be higher level in NF the less you have, and lower level the more you have", false)]
public static readonly bool USE_KEEP_BALANCING;

/// <summary>
/// Use Live Keep Bonuses
/// </summary>
[ServerProperty("use_live_keep_bonuses", "Set to true if you want to use the live keeps bonuses, for example 3% extra xp", false)]
public static readonly bool USE_LIVE_KEEP_BONUSES;

/// <summary>
/// Use Supply Chain
/// </summary>
[ServerProperty("use_supply_chain", "Set to true if you want to use the live supply chain for keep teleporting, set to false to allow teleporting to any keep that your realm controls (and towers)", false)]
public static readonly bool USE_SUPPLY_CHAIN;

/// <summary>
/// Death Messages All Realms
/// </summary>
[ServerProperty("death_messages_all_realms", "Set to true if you want all realms to see other realms death and kill messages", false)]
public static readonly bool DEATH_MESSAGES_ALL_REALMS;

/// <summary>
/// Log Email Addresses
/// </summary>
[ServerProperty("log_email_addresses", "set to the email addresses you want logs automatically emailed to, multiple addresses seperate with ;", "")]
public static readonly string LOG_EMAIL_ADDRESSES;

/// <summary>
/// Bug Report Email Addresses
/// </summary>
[ServerProperty("bug_report_email_addresses", "set to the email addresses you want bug reports sent to (bug reports will only send if the user has set an email address for his account, multiple addresses seperate with ;", "")]
public static readonly string BUG_REPORT_EMAIL_ADDRESSES;

/// <summary>
/// Allow Cata Slash Level
/// </summary>
[ServerProperty("allow_cata_slash_level", "Allow catacombs classes to use /level command", false)]
public static readonly bool ALLOW_CATA_SLASH_LEVEL;

/// <summary>
/// Allow Roam
/// </summary>
[ServerProperty("allow_roam", "Allow mobs to roam on the server", true)]
public static readonly bool ALLOW_ROAM;

/// <summary>
/// Allow Maulers
/// </summary>
[ServerProperty("allow_maulers", "Allow maulers to be created on the server", false)]
public static readonly bool ALLOW_MAULERS;

/// <summary>
/// Log All GM commands
/// </summary>
[ServerProperty("log_all_gm_commands", "Log all GM commands on the server", false)]
public static readonly bool LOG_ALL_GM_COMMANDS;

/// <summary>
/// Ban Hackers
/// </summary>
[ServerProperty("ban_hackers", "Should we ban hackers, if set to true, bans will be done, if set to false, kicks will be done", false)]
public static readonly bool BAN_HACKERS;

/// <summary>
/// Allow all realms access to DF
/// </summary>
[ServerProperty("allow_all_realms_df", "Should we allow all realms access to DF", false)]
public static readonly bool ALLOW_ALL_REALMS_DF;

/// <summary>
/// Is the database translated
/// </summary>
[ServerProperty("db_language", "What language is the DB", "EN")]
public static readonly string DB_LANGUAGE;

/// <summary>
/// Max camp bonus
/// </summary>
[ServerProperty("max_camp_bonus", "Max camp bonus", 2.0)]
public static readonly double MAX_CAMP_BONUS;

/// <summary>
/// Disable Instances
/// </summary>
[ServerProperty("disable_instances", "Enable or disable instances on the server", false)]
public static readonly bool DISABLE_INSTANCES;

/// <summary>
/// Health Regen Rate
/// </summary>
[ServerProperty("health_regen_rate", "Health regen rate", 1.0)]
public static readonly double HEALTH_REGEN_RATE;

/// <summary>
/// Health Regen Rate
/// </summary>
[ServerProperty("endurance_regen_rate", "Endurance regen rate", 1.0)]
public static readonly double ENDURANCE_REGEN_RATE;

/// <summary>
/// Health Regen Rate
/// </summary>
[ServerProperty("mana_regen_rate", "Mana regen rate", 1.0)]
public static readonly double MANA_REGEN_RATE;

/// <summary>
/// Load Hookpoints
/// </summary>
[ServerProperty("load_hookpoints", "Load keep hookpoints", true)]
public static readonly bool LOAD_HOOKPOINTS;

/// <summary>
/// Save QuestItems into Database
/// </summary>
[ServerProperty("save_questitems_into_database", "set false if you don't want this", true)]
public static readonly bool SAVE_QUESTITEMS_INTO_DATABASE;

/// <summary>
/// Crafting skill gain bonus in capital cities
/// </summary>
[ServerProperty("capital_city_crafting_skill_gain_bonus", "Crafting skill gain bonus % in capital cities; 5 = 5%", 5)]
public static readonly int CAPITAL_CITY_CRAFTING_SKILL_GAIN_BONUS;

/// <summary>
/// Crafting speed bonus in capital cities
/// </summary>
[ServerProperty("capital_city_crafting_speed_bonus", "Crafting speed bonus in capital cities; 2 = 2x, 3 = 3x, ..., 1 = standard", 1)]
public static readonly double CAPITAL_CITY_CRAFTING_SPEED_BONUS;

/// <summary>
/// Allow Bounty Points to be gained in Battlegrounds
/// </summary>
[ServerProperty("allow_bps_in_bgs", "Allow bounty points to be gained in battlegrounds", false)]
public static readonly bool ALLOW_BPS_IN_BGS;

/// <summary>
/// Sets the Cap for Player Turrets
/// </summary>
[ServerProperty("turret_player_cap_count", "Sets the cap of turrets for a Player", 5)]
public static readonly int TURRET_PLAYER_CAP_COUNT;

/// <summary>
/// Sets the Area Cap for Turrets
/// </summary>
[ServerProperty("turret_area_cap_count", "Sets the cap of the Area for turrets", 10)]
public static readonly int TURRET_AREA_CAP_COUNT;

/// <summary>
/// Sets the Circle of the Area to check for Turrets
/// </summary>
[ServerProperty("turret_area_cap_radius", "Sets the Radius which is checked for the turretareacap", 1000)]
public static readonly int TURRET_AREA_CAP_RADIUS;

/// <summary>
/// This specifies the max amount of people in one battlegroup.
/// </summary>
[ServerProperty("battlegroup_max_member", "Max number of members allowed in a battlegroup.", 64)]
public static readonly int BATTLEGROUP_MAX_MEMBER;

/// <summary>
/// This if the server battleground zones are open to players
/// </summary>
[ServerProperty("bg_zones_open", "Can the players teleport to battleground", true)]
public static bool BG_ZONES_OPENED;

/// <summary>
/// This enables or disables new guild dues. Live standard is 2% dues
/// </summary>
[ServerProperty("new_guild_dues", "Guild dues can be set from 1-100% if enabled, or standard 2% if not", false)]
public static bool NEW_GUILD_DUES;

/// <summary>
/// Sets the max allowed items inside/outside a house.
/// If Outdoor is increased past 30, they vanish. It seems to be hardcoded in client
/// </summary>
[ServerProperty("max_indoor_house_items", "Max number of items allowed inside a players house.", 40)]
public static readonly int MAX_INDOOR_HOUSE_ITEMS;
[ServerProperty("max_outdoor_house_items", "Max number of items allowed in a players garden.", 30)]
public static readonly int MAX_OUTDOOR_HOUSE_ITEMS;
[ServerProperty("indoor_items_depend_on_size", "If true the max number of allowed House indoor items are set like live (40, 60, 80, 100)", true)]
public static readonly bool INDOOR_ITEMS_DEPEND_ON_SIZE;

/// <summary>
/// This is to set the baseHP For NPCs
/// </summary>
[ServerProperty("gamenpc_base_hp", "GameNPC's base HP * level", 500)]
public static readonly int GAMENPC_BASE_HP;

/// <summary>
/// This will Allow/Disallow dual loggins
/// </summary>
[ServerProperty("allow_dual_logins", "Disable to disallow players to connect with more than 1 account at a time.", true)]
public static bool ALLOW_DUAL_LOGINS;

/// <summary>
/// Minimum privilege level to be able to enter Atlantis through teleporters.
/// 1 = anyone can enter Atlantis,
/// 2 = only GMs and admins can enter Atlantis,
/// 3 = only admins can enter Atlantis.
/// </summary>
[ServerProperty("atlantis_teleport_plvl", "Set the minimum privilege level required to enter Atlantis zones.", 2)]
public static int ATLANTIS_TELEPORT_PLVL;

/// <summary>
/// Sets the disabled commands for the server split by ;
/// </summary>
[ServerProperty("disabled_commands", "Sets the disabled commands for the server split by ;, example /realm;/toon;/quit", "")]
public static readonly string DISABLED_COMMANDS;

/// <summary>
/// Do we allow guild members from other realms
/// </summary>
[ServerProperty("allow_cross_realm_guilds","Do we allow guild members from other realms?", false)]
public static readonly bool ALLOW_CROSS_REALM_GUILDS;

/// <summary>
/// Do we want to allow items to be equipped regardless of realm?
/// </summary>
[ServerProperty("allow_cross_realm_items", "Do we want to allow items to be equipped regardless of realm?", false)]
public static readonly bool ALLOW_CROSS_REALM_ITEMS;

/// <summary>
/// What level should /level bring you to?
/// </summary>
[ServerProperty("slash_level_target", "What level should /level bring you to? ", 20)]
public static readonly int SLASH_LEVEL_TARGET;

/// <summary>
/// What level should you have on your account to be able to use /level?
/// </summary>
[ServerProperty("slash_level_requirement", "What level should you have on your account be able to use /level?", 50)]
public static readonly int SLASH_LEVEL_REQUIREMENT;

/// <summary>
/// How many players are required on the relic pad to trigger the pillar?
/// </summary>
[ServerProperty("relic_players_required_on_pad", "How many players are required on the relic pad to trigger the pillar?", 16)]
public static int RELIC_PLAYERS_REQUIRED_ON_PAD;

/// <summary>
/// What levels did we allow a DOL respec ? serialized
/// </summary>
[ServerProperty("give_dol_respec_at_level", "What levels does we give a DOL respec? (serialized)", "0")]
public static readonly string GIVE_DOL_RESPEC_AT_LEVEL;

/// <summary>
/// How many things do we allow guilds to claim?
/// </summary>
[ServerProperty("guilds_claim_limit", "How many things do we allow guilds to claim?", 1)]
public static readonly int GUILDS_CLAIM_LIMIT;

/// <summary>
/// The level keeps return to when claimed.
/// </summary>
[ServerProperty("starting_keep_level", "The default level of a keep when captured that it reverts to. Set to 0 for typical new frontiers, though Dinberg would suggest a value of 1!", 0)]
public static readonly int STARTING_KEEP_LEVEL;

/// <summary>
/// Record news in database
/// </summary>
[ServerProperty("record_news", "Record News in database?", true)]
public static readonly bool RECORD_NEWS;

/// <summary>
/// Whether to use the sync timer utility or not
/// </summary>
[ServerProperty("use_sync_timer", "Shall we use the sync timers utility?", true)]
public static readonly bool USE_SYNC_UTILITY;

/// <summary>
/// Ignore too long outcoming packet or not
/// </summary>
[ServerProperty("ignore_too_long_outcoming_packet", "Shall we ignore too long outcoming packet ?", false)]
public static readonly bool IGNORE_TOO_LONG_OUTCOMING_PACKET;


/// <summary>
/// Epic encounters strength: 100 is 100% base strength
/// </summary>
[ServerProperty("set_difficulty_on_epic_encounters", "Tune encounters taggued <Epic Encounter>. 0 means auto adaptative, others values are % of the initial difficulty (100%=initial difficulty)", 100)]
public static int SET_DIFFICULTY_ON_EPIC_ENCOUNTERS;

/// <summary>
/// Define toughness for doors (keepwalls are 2x doors): 100 is 100% player's damages infliged.
/// </summary>
[ServerProperty("set_structures_toughness", "This value is % of total damages infliged to level 1 door. Walls are 2 times more solid than doors (100=full damages)", 100)]
public static int SET_STRUCTURES_TOUGHNESS;

/// <summary>
/// Allow or disallow /irc in RvR zones, while allowed in pve zone
/// </summary>
[ServerProperty("allow_irc_in_rvr", "Allow players to send/receive irc when in RvR zone", true)]
public static bool ALLOW_IRC_IN_RVR;

/// <summary>
/// Ignore too long outcoming packet or not
/// </summary>
[ServerProperty("enable_minotaur_relics", "Shall we enable Minotaur Relics ?", false)]
public static readonly bool ENABLE_MINOTAUR_RELICS;

/// <summary>
/// Enable WarMap manager
/// </summary>
[ServerProperty("enable_warmapmgr", "Shall we enable the WarMap manager ?", false)]
public static readonly bool ENABLE_WARMAPMGR;

/// <summary>
/// Use new Keeps
/// </summary>
[ServerProperty("use_new_keeps", "Use the new Keeps(v 1.90)", false)]
public static readonly bool USE_NEW_KEEPS;

/// <summary>
/// Perform checklos on client with each mob
/// </summary>
[ServerProperty("always_check_los", "Perform a LoS check before aggroing. This can involve a huge lag, handle with care!", false)]
public static bool ALWAYS_CHECK_LOS;

/// <summary>
/// If the server should allow you to heal outside your group/guild. (Default Allow)
/// </summary>
[ServerProperty("allow_outside_heals", "Should we allow players to heal outside their group or guild? Values: true(allow) / false(not aloud)", true)]
public static readonly bool ALLOW_OUTSIDE_HEALS;

/// <summary>
/// This method loads the property from the database and returns
/// the value of the property as strongly typed object based on the
/// type of the default value
/// </summary>
/// <param name="attrib">The attribute</param>
/// <returns>The real property value</returns>
public static object Load(ServerPropertyAttribute attrib)
{
string key = attrib.Key;
ServerProperty property = GameServer.Database.SelectObject(typeof(ServerProperty), "`Key` = '" + GameServer.Database.Escape(key) + "'") as ServerProperty;
if (property == null)
{
property = new ServerProperty();
property.Key = attrib.Key;
property.Description = attrib.Description;
property.DefaultValue = attrib.DefaultValue.ToString();
property.Value = attrib.DefaultValue.ToString();
GameServer.Database.AddNewObject(property);
log.Debug("Cannot find server property " + key + " creating it");
}
log.Debug("Loading " + key + " Value is " + property.Value);
try
{
//we do this because we need "1.0" to be considered double sometimes its "1,0" in other countries
CultureInfo myCIintl = new CultureInfo("en-US", false);
IFormatProvider provider = myCIintl.NumberFormat;
return Convert.ChangeType(property.Value, attrib.DefaultValue.GetType(), provider);
}
catch (Exception e)
{
log.Error("Exception in ServerProperties Load: ", e);
return null;
}
}

/// <summary>
/// This method is the key. It checks all fields of a specific type and
/// if the field is a ServerProperty it loads the value from the database.
/// </summary>
/// <param name="type">The type to analyze</param>
protected static void Init(Type type)
{
foreach (FieldInfo f in type.GetFields())
{
if (!f.IsStatic)
continue;
object[] attribs = f.GetCustomAttributes(typeof(ServerPropertyAttribute), false);
if (attribs.Length == 0)
continue;
ServerPropertyAttribute attrib = (ServerPropertyAttribute)attribs[0];
f.SetValue(null, Load(attrib));
}
}

/// <summary>
/// Refreshes the server properties from the DB
/// </summary>
public static void Refresh()
{
log.Info("Refreshing server properties!");
Init(typeof(Properties));
}
}
}
again sorry about it not being a patch, just cant figure it out...
Last edited by stephenxpimentel on Fri Mar 13, 2009 6:44 pm, edited 1 time in total.
Lets have some fun.
stephenxpimentel
Contributor
 
Posts: 1300
Joined: Wed Sep 19, 2007 5:09 pm

Re: [awaiting patch] RPs for Healing

Postby Graveen » Fri Mar 13, 2009 6:34 pm

Stephen, why don't you simply rely on the server rules ?

The SP is not interesting for DoL, because i don't know.

We need a patch to include in the SVN. What is not working ?? :)
This is not exploitable actually, at least to figure in the SVN.

At you posted twice the heal spell handler.
Image
* pm me to contribute in Dawn of Light: code, database *
User avatar
Graveen
Project Leader
 
Posts: 12660
Joined: Fri Oct 19, 2007 9:22 pm
Location: France

Re: [awaiting patch] RPs for Healing

Postby stephenxpimentel » Fri Mar 13, 2009 6:47 pm

Stephen, why don't you simply rely on the server rules ?

The SP is not interesting for DoL, because i don't know.

We need a patch to include in the SVN. What is not working ?? :)
This is not exploitable actually, at least to figure in the SVN.

At you posted twice the heal spell handler.
I fixed the post so its server properties.. and as for not relying on server rules, i didnt because then i would need to edit server rules, and what not.. but i figured it was 1 of those things that you should have an option for.. I'll change it to server rules if u want me to, just thought it would be best as an option :D
Lets have some fun.
stephenxpimentel
Contributor
 
Posts: 1300
Joined: Wed Sep 19, 2007 5:09 pm


Return to “%s” DOL Code Contributions

Who is online

Users browsing this forum: No registered users and 1 guest