بــــســم الله الـــرحـــمـــن الرحــــيــــم
نظام التناسخ كامل
نظام التناسخ كامل
اولا :
افتح
افتح
كود PHP:
Network/PacketHandler.cs
كود PHP:
#region Reincarnation
كود PHP:
#region Reincarnation
public class Reincarnation
{
private Client.GameState _client;
private SafeDictionary<ushort, Conquer_Online_Server.Interfaces.ISkill> RemoveSkill = null;
private SafeDictionary<ushort, Conquer_Online_Server.Interfaces.ISkill> Addskill = null;
public Reincarnation(Client.GameState client, byte new_class)
{
if (client.Entity.Level < 130)
return;
_client = client;
RemoveSkill = new SafeDictionary<ushort, Conquer_Online_Server.Interfaces.ISkill>(500);
Addskill = new SafeDictionary<ushort, Conquer_Online_Server.Interfaces.ISkill>(500);
#region Low level items
for (byte i = 1; i < 9; i++)
{
if (i != 7)
{
Interfaces.IConquerItem item = client.Equipment.TryGetItem(i);
if (item != null && item.ID != 0)
{
try
{
client.UnloadItemStats(item, false);
Database.ConquerItemInformation cii = new Conquer_Online_Server.Database.ConquerItemInformation(item.ID, item.Plus);
item.ID = cii.LowestID(Network.PacketHandler.ItemMinLevel(Network.PacketHandler.ItemPosition(item.ID)));
item.Mode = Conquer_Online_Server.Game.Enums.ItemMode.Update;
item.Send(client);
client.LoadItemStats(item);
Database.ConquerItemTable.UpdateItemID(item, client);
}
catch
{
Console.WriteLine("Reborn item problem: " + item.ID);
}
}
}
}
Interfaces.IConquerItem hand = client.Equipment.TryGetItem(5);
if (hand != null)
{
client.Equipment.Remove(5);
client.CalculateStatBonus();
client.CalculateHPBonus();
//SendStatMessage();
}
else
client.Screen.SendScreen(client.Entity.SpawnPacket, false);
#endregion
#region Remove Extra Skill
if (client.Entity.FirstRebornClass == 15 && client.Entity.SecondRebornClass == 15 && client.Entity.Class == 15)
{
WontAdd(Conquer_Online_Server.Game.Enums.SkillIDs.DragonWhirl);
}
if (client.Entity.FirstRebornClass == 25 && client.Entity.SecondRebornClass == 25 && client.Entity.Class == 25)
{
WontAdd(Conquer_Online_Server.Game.Enums.SkillIDs.Perseverance);
}
if (client.Entity.FirstRebornClass == 45 && client.Entity.SecondRebornClass == 45 && client.Entity.Class == 45)
{
WontAdd(Conquer_Online_Server.Game.Enums.SkillIDs.StarArrow);
}
if (client.Entity.FirstRebornClass == 55 && client.Entity.SecondRebornClass == 55 && client.Entity.Class == 55)
{
WontAdd(Conquer_Online_Server.Game.Enums.SkillIDs.PoisonStar);
}
if (client.Entity.FirstRebornClass == 65 && client.Entity.SecondRebornClass == 65 && client.Entity.Class == 65)
{
WontAdd(Conquer_Online_Server.Game.Enums.SkillIDs.SoulShackle);
}
if (client.Entity.FirstRebornClass == 135 && client.Entity.SecondRebornClass == 135 && client.Entity.Class == 135)
{
WontAdd(Conquer_Online_Server.Game.Enums.SkillIDs.AzureShield);
}
if (client.Entity.FirstRebornClass == 145 && client.Entity.SecondRebornClass == 145 && client.Entity.Class == 145)
{
WontAdd(Conquer_Online_Server.Game.Enums.SkillIDs.HeavenBlade);
}
#endregion
client.Entity.FirstRebornClass = client.Entity.SecondRebornClass;
client.Entity.SecondRebornClass = client.Entity.Class;
client.Entity.Class = new_class;
client.Entity.SecondRebornLevel = client.Entity.Level;
client.Entity.ReincarnationLev = client.Entity.Level;
client.Entity.Level = 15;
client.Entity.Experience = 0;
client.Entity.Atributes =
(ushort)(client.ExtraAtributePoints(client.Entity.FirstRebornClass, client.Entity.FirstRebornLevel) +
client.ExtraAtributePoints(client.Entity.SecondRebornClass, client.Entity.SecondRebornLevel) + 62);
client.Spells.Clear();
client.Spells = new SafeDictionary<ushort, Conquer_Online_Server.Interfaces.ISkill>(100);
switch (client.Entity.FirstRebornClass)
{
case 15:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Cyclone);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Hercules);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.SpiritHealing);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Robot);
break;
}
case 25:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.SuperMan);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Dash);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Shield);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Reflect);
break;
}
case 45:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Intensify);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Scatter);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.RapidFire);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.XPFly);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.AdvancedFly);
break;
}
case 55:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.FatalStrike);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.ShurikenVortex);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.ToxicFog);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.TwofoldBlades);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.PoisonStar);
break;
}
case 65:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.RadiantPalm);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.WhirlwindKick);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.TripleAttack);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Oblivion);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Serenity);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Compassion);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.TyrantAura);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.TyrantAura);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.DeflectionAura);
break;
}
case 135:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Thunder);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.WaterElf);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Cure);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Lightning);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Volcano);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Pray);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.AdvancedCure);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Meditation);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Stigma);
break;
}
case 140:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Thunder);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Cure);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Lightning);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Tornado);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.FireCircle);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.FireMeteor);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.FireRing);
break;
}
}
byte PreviousClass = client.Entity.FirstRebornClass;
byte toClass = (byte)(client.Entity.SecondRebornClass - 4);
Interfaces.ISkill[] ADD_spells = this.Addskill.Values.ToArray();
foreach (Interfaces.ISkill skill in ADD_spells)
{
skill.Available = true;
if (!client.Spells.ContainsKey(skill.ID))
client.Spells.Add(skill.ID, skill);
}
#region Spells
Interfaces.ISkill[] spells = client.Spells.Values.ToArray();
foreach (Interfaces.ISkill spell in spells)
{
spell.PreviousLevel = spell.Level;
spell.Level = 0;
spell.Experience = 0;
#region Monk
if (PreviousClass == 65)
{
if (client.Entity.Class != 61)
{
switch (spell.ID)
{
case 10490:
case 10415:
case 10381:
client.RemoveSpell(spell);
break;
}
}
}
#endregion
#region Warrior
if (PreviousClass == 25)
{
if (client.Entity.Class != 21)
{
switch (spell.ID)
{
case 1025:
if (client.Entity.Class != 21 && client.Entity.Class != 132)
client.RemoveSpell(spell);
break;
}
}
}
#endregion
#region Ninja
if (toClass != 51)
{
switch (spell.ID)
{
case 6010:
case 6000:
case 6003:
case 6011:
case 6002:
client.RemoveSpell(spell);
break;
}
}
#endregion
#region Trojan
if (toClass != 11)
{
switch (spell.ID)
{
case 1115:
client.RemoveSpell(spell);
break;
}
}
#endregion
#region Archer
if (toClass != 41)
{
switch (spell.ID)
{
case 8001:
case 8000:
case 8003:
case 9000:
case 8002:
case 8030:
client.RemoveSpell(spell);
break;
}
}
#endregion
#region WaterTaoist
if (PreviousClass == 135)
{
if (toClass != 132)
{
switch (spell.ID)
{
case 1000:
case 1001:
case 1010:
case 1125:
case 1100:
case 8030:
client.RemoveSpell(spell);
break;
case 1050:
case 1175:
case 1170:
if (toClass != 142)
client.RemoveSpell(spell);
break;
}
}
}
#endregion
#region FireTaoist
if (PreviousClass == 145)
{
if (toClass != 142)
{
switch (spell.ID)
{
case 1000:
case 1001:
case 1150:
case 1180:
case 1120:
case 1002:
case 1160:
case 1165:
client.RemoveSpell(spell);
break;
}
}
}
#endregion
if (client.Spells.ContainsKey(spell.ID))
if (spell.ID != (ushort)Game.Enums.SkillIDs.Reflect)
spell.Send(client);
}
#endregion
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Bless);
Addskill.Clear();
Addskill = new SafeDictionary<ushort, Conquer_Online_Server.Interfaces.ISkill>(100);
PreviousClass = client.Entity.SecondRebornClass;
toClass = client.Entity.Class;
switch (client.Entity.SecondRebornClass)
{
case 15:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Robot);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Cyclone);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Hercules);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.SpiritHealing);
break;
}
case 25:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.SuperMan);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Dash);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Shield);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Reflect);
break;
}
case 45:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Intensify);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Scatter);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.RapidFire);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.XPFly);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.AdvancedFly);
break;
}
case 55:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.FatalStrike);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.ShurikenVortex);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.ToxicFog);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.TwofoldBlades);
break;
}
case 65:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.RadiantPalm);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.WhirlwindKick);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.TripleAttack);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Oblivion);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Serenity);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Compassion);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.TyrantAura);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.TyrantAura);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.DeflectionAura);
break;
}
case 135:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Thunder);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.WaterElf);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Cure);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Lightning);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Volcano);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Pray);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Stigma);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.AdvancedCure);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Meditation);
break;
}
case 140:
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Thunder);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Cure);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Lightning);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Tornado);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.FireCircle);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.FireMeteor);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.FireRing);
break;
}
}
//PreviousClass = client.Entity.FirstRebornClass;
//toClass = client.Entity.SecondRebornClass;
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Bless);
Interfaces.ISkill[] aADD_spells = this.Addskill.Values.ToArray();
foreach (Interfaces.ISkill skill in aADD_spells)
{
skill.Available = true;
if (!client.Spells.ContainsKey(skill.ID))
client.Spells.Add(skill.ID, skill);
}
#region Spells
Interfaces.ISkill[] aspells = client.Spells.Values.ToArray();
foreach (Interfaces.ISkill aspell in spells)
{
aspell.PreviousLevel = aspell.Level;
aspell.Level = 0;
aspell.Experience = 0;
#region Monk
if (PreviousClass == 65)
{
if (client.Entity.Class != 61)
{
switch (aspell.ID)
{
case 10490:
case 10415:
case 10381:
client.RemoveSpell(aspell);
break;
}
}
}
#endregion
#region Warrior
if (PreviousClass == 25)
{
if (client.Entity.Class != 21)
{
switch (aspell.ID)
{
case 1025:
if (client.Entity.Class != 21 && client.Entity.Class != 132)
client.RemoveSpell(aspell);
break;
}
}
}
#endregion
#region Ninja
if (toClass != 51)
{
switch (aspell.ID)
{
case 6010:
case 6000:
case 6003:
case 6011:
case 6002:
client.RemoveSpell(aspell);
break;
}
}
#endregion
#region Trojan
if (toClass != 11)
{
switch (aspell.ID)
{
case 1115:
client.RemoveSpell(aspell);
break;
}
}
#endregion
#region Archer
if (toClass != 41)
{
switch (aspell.ID)
{
case 8001:
case 8000:
case 8003:
case 9000:
case 8002:
case 8030:
client.RemoveSpell(aspell);
break;
}
}
#endregion
#region WaterTaoist
if (PreviousClass == 135)
{
if (toClass != 132)
{
switch (aspell.ID)
{
case 1000:
case 1001:
case 1010:
case 1125:
case 1100:
case 8030:
client.RemoveSpell(aspell);
break;
case 1050:
case 1175:
case 1170:
if (toClass != 142)
client.RemoveSpell(aspell);
break;
}
}
}
#endregion
#region FireTaoist
if (PreviousClass == 145)
{
if (toClass != 142)
{
switch (aspell.ID)
{
case 1000:
case 1001:
case 1150:
case 1180:
case 1120:
case 1002:
case 1160:
case 1165:
client.RemoveSpell(aspell);
break;
}
}
}
#endregion
if (client.Spells.ContainsKey(aspell.ID))
if (aspell.ID != (ushort)Game.Enums.SkillIDs.Reflect)
aspell.Send(client);
}
#endregion
Addskill.Clear();
Addskill = new SafeDictionary<ushort, Conquer_Online_Server.Interfaces.ISkill>(20);
#region Add Extra Skill
if (client.Entity.FirstRebornClass == 15 && client.Entity.SecondRebornClass == 15 && client.Entity.Class == 11)
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.DragonWhirl);
}
if (client.Entity.FirstRebornClass == 25 && client.Entity.SecondRebornClass == 25 && client.Entity.Class == 21)
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.Perseverance);
}
if (client.Entity.FirstRebornClass == 45 && client.Entity.SecondRebornClass == 45 && client.Entity.Class == 41)
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.StarArrow);
}
if (client.Entity.FirstRebornClass == 55 && client.Entity.SecondRebornClass == 55 && client.Entity.Class == 53)
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.PoisonStar);
Add(Conquer_Online_Server.Game.Enums.SkillIDs.CounterKill);
}
if (client.Entity.FirstRebornClass == 65 && client.Entity.SecondRebornClass == 65 && client.Entity.Class == 61)
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.SoulShackle);
}
if (client.Entity.FirstRebornClass == 135 && client.Entity.SecondRebornClass == 135 && client.Entity.Class == 132)
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.AzureShield);
}
if (client.Entity.FirstRebornClass == 145 && client.Entity.SecondRebornClass == 145 && client.Entity.Class == 142)
{
Add(Conquer_Online_Server.Game.Enums.SkillIDs.HeavenBlade);
}
#endregion
Interfaces.ISkill[] aaADD_spells = this.Addskill.Values.ToArray();
foreach (Interfaces.ISkill skill in aaADD_spells)
{
skill.Available = true;
if (!client.Spells.ContainsKey(skill.ID))
client.Spells.Add(skill.ID, skill);
}
#region Proficiencies
foreach (Interfaces.ISkill proficiency in client.Proficiencies.Values)
{
proficiency.PreviousLevel = proficiency.Level;
proficiency.Level = 0;
proficiency.Experience = 0;
proficiency.Send(client);
}
#endregion
Database.DataHolder.GetStats(client.Entity.Class, client.Entity.Level, client);
client.CalculateStatBonus();
client.CalculateHPBonus();
client.GemAlgorithm();
//SendStatMessage();
using (var conn = Database.DataHolder.MySqlConnection)
{
conn.Open();
Database.EntityTable.SaveEntity(client, conn);
Database.SkillTable.SaveSkills(client, conn);
conn.Close();
}
Network.PacketHandler.WorldMessage(client.Entity.Name + " has got Reincarnation! Congratulations!");
}
void Add(Conquer_Online_Server.Game.Enums.SkillIDs S)
{
Interfaces.ISkill New = new Network.GamePackets.Spell(true);
New.ID = (ushort)S;
New.Level = 0;
New.Experience = 0;
New.PreviousLevel = 0;
New.Send(_client);
Addskill.Add(New.ID, New);
}
void WontAdd(Conquer_Online_Server.Game.Enums.SkillIDs S)
{
Network.GamePackets.Data data = new Data(true);
data.UID = _client.Entity.UID;
data.dwParam = (byte)S;
data.ID = 109;
data.Send(_client);
Interfaces.ISkill New = new Network.GamePackets.Spell(true);
New.ID = (ushort)S;
New.Level = 0;
New.Experience = 0;
New.PreviousLevel = 0;
RemoveSkill.Add(New.ID, New);
}
}
#endregion
0 التعليقات:
إرسال تعليق