本文整理汇总了C#中DOL.GS.Spell.Clone方法的典型用法代码示例。如果您正苦于以下问题:C# Spell.Clone方法的具体用法?C# Spell.Clone怎么用?C# Spell.Clone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DOL.GS.Spell
的用法示例。
在下文中一共展示了Spell.Clone方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CastSpell
/// <summary>
/// Cast a spell, with optional LOS check
/// </summary>
/// <param name="spell"></param>
/// <param name="line"></param>
/// <param name="checkLOS"></param>
public virtual void CastSpell(Spell spell, SpellLine line, bool checkLOS)
{
if (IsIncapacitated)
return;
if (checkLOS)
{
CastSpell(spell, line);
}
else
{
Spell spellToCast = null;
if (line.KeyName == GlobalSpellsLines.Mob_Spells)
{
// NPC spells will get the level equal to their caster
spellToCast = (Spell)spell.Clone();
spellToCast.Level = Level;
}
else
{
spellToCast = spell;
}
base.CastSpell(spellToCast, line);
}
}
示例2: AddScriptedSpell
/// <summary>
/// Add a scripted spell to a spellline
/// will try to add to global spell list if not exists (preventing obvious harcoded errors...)
/// </summary>
/// <param name="spellLineID"></param>
/// <param name="spell"></param>
public static void AddScriptedSpell(string spellLineID, Spell spell)
{
// lock Skillbase for writes
m_syncLockUpdates.EnterWriteLock();
Spell spcp = null;
try
{
if (spell.ID > 0 && !m_spellIndex.ContainsKey(spell.ID))
{
spcp = (Spell)spell.Clone();
// Level 1 for storing...
spcp.Level = 1;
m_spellIndex.Add(spell.ID, spcp);
// Add Tooltip Index
if (spcp.InternalID != 0 && !m_spellToolTipIndex.ContainsKey((ushort)spcp.InternalID))
m_spellToolTipIndex.Add((ushort)spcp.InternalID, spcp.ID);
}
}
finally
{
m_syncLockUpdates.ExitWriteLock();
}
// let the base handler do this...
if (spcp != null)
{
AddSpellToSpellLine(spellLineID, spell.ID, spell.Level);
return;
}
m_syncLockUpdates.EnterWriteLock();
try
{
// Cannot store it in spell index !! ID could be wrongly set we can't rely on it !
if (!m_lineSpells.ContainsKey(spellLineID))
m_lineSpells.Add(spellLineID, new List<Spell>());
// search for duplicates
bool added = false;
for (int r = 0; r < m_lineSpells[spellLineID].Count; r++)
{
try
{
if (m_lineSpells[spellLineID][r] != null &&
(spell.ID > 0 && m_lineSpells[spellLineID][r].ID == spell.ID && m_lineSpells[spellLineID][r].Name.ToLower().Equals(spell.Name.ToLower()) && m_lineSpells[spellLineID][r].SpellType.ToLower().Equals(spell.SpellType.ToLower()))
|| (m_lineSpells[spellLineID][r].Name.ToLower().Equals(spell.Name.ToLower()) && m_lineSpells[spellLineID][r].SpellType.ToLower().Equals(spell.SpellType.ToLower())))
{
m_lineSpells[spellLineID][r] = spell;
added = true;
}
}
catch
{
}
}
// try regular add (this could go wrong if duplicate detection is bad...)
if (!added)
m_lineSpells[spellLineID].Add(spell);
m_lineSpells[spellLineID] = m_lineSpells[spellLineID].OrderBy(e => e.Level).ThenBy(e => e.ID).ToList();
}
finally
{
m_syncLockUpdates.ExitWriteLock();
}
}