Saludo! Aqui le dejo como conseguir que la XP del Assasin anden, Ojo Tienes algunos bug, Deben seguir reparando. Por Ahora, Cosas que he encontrado en la source, Es que El Assasin y el pirata no tan implementado del todo, Faltan las habilidades, Tales como la XP del pirata como la del Assasin, Tambien algunas ciertas habilidades no estan funcionando, como la KineticSpark,GaleBomb, Entre otras. Tambien Si se quitan los Cuchillos transformado en Assesino, Se queda Transformado Al Igual sucede con la Habilidad XP. Sin mas nada que decir vamos a ello.
Van a GameServer/Structure/Magic Data.Csc y buscan lo siguiente, #region Handlers --
Luego en esa Region buscan --- switch (m_pMagic.Sort) y debajo entre los ( ) Agregan ----
case MAGICSORT_ASSASSINVORTEX: bRet = ProcessBladeFlurry(); break;
case MAGICSORT_BLISTERINGWAVE: bRet = ProcessBlisteringWave(); break;
Luego Buscan las siguiente Regiones #region 68 - BladeFlurry #region 69 - BlisteringWave y la reemplazan por la siguientes:
#region 68 - BladeFlurry
private bool ProcessBladeFlurry()
{
if (m_pMagic == null)
return false;
if (m_pOwner.QueryStatus(FlagInt.BLADE_FLURRY) != null) // && m_pMagic.IsReady()) flurry active
{
m_pMagic.Delay();
var pos = new Point();
long nExp = 0;
int nPowerSum = 0;
var targetLocked = CollectTargetSet_Bomb(ref pos, 0, (int)m_pMagic.Range);
var msg = new MsgMagicEffect
{
CellX = m_pOwner.MapX,
CellY = m_pOwner.MapY,
Identity = m_pOwner.Identity,
SkillIdentity = m_pMagic.Type,
SkillLevel = m_pMagic.Level
};
Character user = m_pOwner as Character;
int targetNum = 0;
foreach (var obj in targetLocked)
{
if (obj.Identity != m_pOwner.Identity
&& obj.IsAttackable(m_pOwner))
{
if (IsImmunity(obj))
continue;
var special = InteractionEffect.None;
int nPower = m_pOwner.BattleSystem.CalcPower(HitByMagic(), m_pOwner, obj, ref special);
if (user != null)
{
if (user.CheckScapegoat(m_pOwner))
{
nPower = 0;
}
}
if (++targetNum >= _MAX_TARGET_NUM)
{
m_pOwner.Map.SendToRegion(msg, (ushort)m_pOwner.MapX, (ushort)m_pOwner.MapY);
msg = new MsgMagicEffect
{
CellX = (ushort)pos.X,
CellY = (ushort)pos.Y,
Identity = m_pOwner.Identity,
SkillIdentity = m_pMagic.Type,
SkillLevel = m_pMagic.Level
};
targetNum = 0;
}
msg.AppendTarget(obj.Identity, (uint)obj.BattleSystem.TestAzureShield(nPower), true, (byte)special, (uint)m_pMagic.GetElementPower(obj));
CheckCrime(obj);
var pNpc = obj as DynamicNpc;
int nLifeLost = (int)Math.Min(obj.BattleSystem.CheckAzureShield(nPower), obj.Life);
nPowerSum += nLifeLost;
if (pNpc != null && pNpc.IsAwardScore())
{
user?.AwardSynWarScore(pNpc, nLifeLost);
}
obj.BeAttack(HitByMagic(), m_pOwner, nLifeLost, true);
if (user != null && (obj.IsMonster()
|| pNpc != null && pNpc.IsGoal() && pNpc.Level < m_pOwner.Level))
{
nExp += user.AdjustExperience(obj, nLifeLost, false);
if (!obj.IsAlive)
{
int nBonusExp = (int)(obj.MaxLife * (5 / 100));
user.BattleSystem.OtherMemberAwardExp(obj, nExp);
nExp += user.AdjustExperience(obj, nBonusExp, true);
m_pOwner.Kill(obj, GetDieMode());
}
}
}
}
m_pOwner.Map.SendToRegion(msg, (ushort)m_pOwner.MapX, (ushort)m_pOwner.MapY);
AwardExp(0, nExp, 0);
m_nMagicState = MAGICSTATE_NONE;
}
else
{
int status = (int)m_pMagic.Status;
int power = m_pMagic.Power;
int step = (int)m_pMagic.StepSeconds;
int times = (int)m_pMagic.ActiveTimes;
AbortMagic(true);
if (!m_pOwner.IsAlive)
return false;
if (m_pOwner.IsWing || !(m_pOwner is Character user) || !user.IsAssassin)
return false;
m_pOwner.AttachStatus(m_pOwner, status, power, step, times, 0);
}
return true;
}
#endregion
#region 69 - BlisteringWave
private bool ProcessBlisteringWave()
{
if (m_pMagic == null)
return false;
Magic pMagic = m_pMagic;
var setRole = new Dictionary<uint, Role>();
var setPower = new Dictionary<uint, int>();
var pos = new Point();
int nRange = (int)m_pMagic.Distance + 0;
long nExp = 0;
int nPowerSum = 0;
if (m_pMagic.Ground != 0)
{
pos.X = m_pOwner.MapX;
pos.Y = m_pOwner.MapY;
}
else
{
Role pTarget = m_pOwner.FindAroundRole(m_idTarget) as Role;
if (pTarget == null || !pTarget.IsAlive) return false;
pos.X = pTarget.MapX;
pos.Y = pTarget.MapY;
setRole.Add(pTarget.Identity, pTarget);
}
var setTarget = m_pOwner.Map.CollectMapThing(nRange, pos);
Calculations.CalculateTriangle(pos, m_pPos, (int) m_pMagic.Distance, (int) m_pMagic.Range, out var p1, out var p2);
foreach (var pScrnObj in setTarget)
{
var posThis = new Point(pScrnObj.MapX, pScrnObj.MapY);
if (pScrnObj.Identity == m_pOwner.Identity || pScrnObj.Identity == m_idTarget || pScrnObj is DynamicNpc || !Calculations.IsInTriangle(posThis, pos, p1, p2))
continue;
var pRole = pScrnObj;
if (pRole.IsAttackable(m_pOwner)
&& !IsImmunity(pRole))
setRole.Add(pRole.Identity, pRole);
}
var msg = new MsgMagicEffect
{
Identity = m_pOwner.Identity,
SkillIdentity = m_pMagic.Type,
SkillLevel = m_pMagic.Level,
CellX = (ushort)m_pPos.X,
CellY = (ushort)m_pPos.Y
};
var setRemove = new List<uint>();
foreach (var pRole in setRole.Values)
{
if (pRole is Character)
{
if ((pRole as Character).CheckScapegoat(m_pOwner))
{
setRemove.Add(pRole.Identity);
continue;
}
}
var special = InteractionEffect.None;
int nPower = m_pOwner.BattleSystem.CalcPower(HitByMagic(), m_pOwner, pRole, ref special);
setPower.Add(pRole.Identity, nPower);
if (msg.TargetCount > 29)
{
m_pOwner.Map.SendToRegion(msg, m_pOwner.MapX, m_pOwner.MapY);
msg = new MsgMagicEffect
{
Identity = m_pOwner.Identity,
SkillIdentity = m_pMagic.Type,
SkillLevel = m_pMagic.Level,
CellX = (ushort)m_pPos.X,
CellY = (ushort)m_pPos.Y
};
}
msg.AppendTarget(pRole.Identity, (uint)pRole.BattleSystem.TestAzureShield(nPower), true, (uint)special, (uint)m_pMagic.GetElementPower(pRole));
}
m_pOwner.Map.SendToRegion(msg, m_pOwner.MapX, m_pOwner.MapY);
foreach (var i in setRemove)
setRole.Remove(i);
CheckCrime(setRole);
Character owner = m_pOwner as Character;
bool bMgc2Dealt = false;
foreach (var pRole in setRole.Values)
{
var pNpc = pRole as DynamicNpc;
int nLifeLost = (int)Math.Min(pRole.Life, pRole.BattleSystem.CheckAzureShield(setPower[pRole.Identity]));
nPowerSum += nLifeLost;
pRole.BeAttack(HitByMagic(), m_pOwner, nLifeLost, true);
if (pNpc != null && pNpc.IsAwardScore() && owner != null)
{
owner.AwardSynWarScore(pNpc, nLifeLost);
}
if (owner != null && (pRole.IsMonster() || pNpc != null && pNpc.IsGoal() && m_pOwner.Level >= pNpc.Level))
{
nExp += owner.AdjustExperience(pRole, nLifeLost, false);
if (!pRole.IsAlive)
{
int nBonusExp = (int)(pRole.MaxLife * 20 / 100);
owner.BattleSystem.OtherMemberAwardExp(pRole, nBonusExp);
nExp += owner.AdjustExperience(pRole, nBonusExp, false);
}
}
if (!pRole.IsAlive)
m_pOwner.Kill(pRole, GetDieMode());
if (!bMgc2Dealt && Calculations.ChanceCalc(10f) && m_pOwner is Character)
{
(m_pOwner as Character).SendWeaponMagic2(pRole);
bMgc2Dealt = true;
}
}
AwardExp(nExp, nExp, false, pMagic);
return true;
}
#endregion
Ya con eso deberia andar, Espero les funciones. ๐ ๐