المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : اضافه شخصية Windwalker


محمد ياسر
2019-07-26, 07:53 PM
السلام عليكم ورحمة الله وبركاته
اتمني تكونوا في صحه وعافيه
الموضوع ده قديم اووي بس لناس الي بتحاول ترفع سورس ليه من 5700 وهي طالعه بتعمل ابجريد للكل فايكون مفيد انه تشوف الموضوع ده يلا نبداء


هتروح باكت هندل
فويد EquipItem

هتنزل لحد دى if (client.Entity.Class >= 80 && client.Entity.Class <= 85)

فوقيها هتحط دى

if (client.Entity.Class >= 160 && client.Entity.Class <= 165)
{
can2hand = true;
can2wpn = true;
}

هتنزل هتلاقى سطر بالشكل دة if (client.Entity.Class >= 100

هتعملو بالشكل دة

if (client.Entity.Class >= 100 && client.Entity.Class <= 145)


هتروح ل فويد دة EquipPassJobReq

هتحط دة

#region Windwalker
case 160: if (client.Entity.Class <= 165 && client.Entity.Class >= 160) return true; break;
case 161: if (client.Entity.Class <= 165 && client.Entity.Class >= 161) return true; break;
case 162: if (client.Entity.Class <= 165 && client.Entity.Class >= 162) return true; break;
case 163: if (client.Entity.Class <= 165 && client.Entity.Class >= 163) return true; break;
case 164: if (client.Entity.Class <= 165 && client.Entity.Class >= 164) return true; break;
case 165: if (client.Entity.Class == 165) return true; break;
#endregion

هتروح ل فويد دة public static ushort ItemPosition(uint ID)

تحت دى هتحط دول UInt32 iType = ID / 1000;

if (ID >= 170000 && ID <= 170309)
return ConquerItem.Head;
if (ID >= 101000 && ID <= 101309)
return ConquerItem.Armor;
if (ID >= 626003 && ID <= 626439)
return ConquerItem.RightWeapon;
if (ID >= 626003 && ID <= 626439)
return ConquerItem.LeftWeapon;

هتروح ل فويد دة GetPositionFromID

تحت دى UInt32 iType = itemid / 1000;

هتحط دول

if (iType == 170)
return Positions.Head;
if (iType == 101)
return Positions.Armor;
if (iType == 626)
return Positions.Right;

وهتبدل دى من جوة انتى تيبول عندك

switch (eC.Class)
{
case 0:
case 1: eC.Class = 100; break;
case 2:
case 3: eC.Class = 10; break;
case 4:
case 5: eC.Class = 40; break;
case 6:
case 7: eC.Class = 20; break;
case 8:
case 9: eC.Class = 50; break;
case 10:
case 11: eC.Class = 60; break;
case 12:
case 13: eC.Class = 70; break;
case 14:
case 15: eC.Class = 80; break;
case 16:
case 17:
{
eC.Class = 160;
client.Entity.Windwalker = (byte)8;//Cshser
break;
}
case 18:
case 19:
{
eC.Class = 160;
client.Entity.Windwalker = (byte)0;//Stmper
break;
}
default: { Console.WriteLine("Error Class = " + eC.Class); } break;
}

ودة الاوفسات الى زادت بتعت entity

public const ushort
TimeStamp = 4,
Mesh = 8,
UID = 12,
GuildID = 16,
GuildRank = 20,
Unknown = 24,
StatusFlag = 26,
StatusFlag2 = 34,
StatusFlag3 = 42,
StatusFlag4 = 50,
Appearance = 54,
Head = 56,
Garment = 60,
Armor = 64,
LeftWeapon = 68,
RightWeapon = 72,
LeftWeaponAccessory = 76,
RightWeaponAccessory = 80,
Steed = 84,
MountArmor = 88,
Wing = 92,
WingPlus = 96,
WingProgress = 97,
Hitpoints = 111,
MonsterLevel = 117,
X = 119,
Y = 121,
HairStyle = 123,
Facing = 125,
Action = 126,
Action2 = 128,
Reborn = 133,
Level = 134,
WindowSpawn = 136,
Away = 137,
ExtraBattlePower = 138,
Flower = 154,
NobilityRank = 158,
ArmorColor = 162,
LeftWeaponColor = 164,
HeadColor = 166,
QuizPoints = 168,
SteedPlus = 172,
SteedColor = 174,
Enlighten = 178,
TotalInnerScore = 182,
ClanUID = 194,
ClanRank = 198,
ClanSharedBp = 202,
TitleActivated = 206,
EntitySize = 208,
GuildSharedBp = 213,
ShowArenaGlow = 217,
Boss = 220,
HeadSoul = 221,
RaceItem = 222,
ArmorSoul = 225,
LeftWeaponSoul = 229,
RightWeaponSoul = 233,
SubPro = 237,
SubProActive = 238,
FirstRebornClass = 246,
SecondRebornClass = 248,
Class = 250,
CountryFlag = 252,
EquipmentColor = 258,
JiangHuTalen = 262,
JiangHuActive = 263,
ServerID = 265,
OwnerPet = 271,
OwnerPet1 = 272,
OwnerUID = 274,
UnionID = 278,
UnionExploits = 282,
Offical_Harem_Guards = 286,
UnionRank = 290,
UnionType = 291,
MyTitle = 292,
MyTitleScore = 296,
MyWing = 300,
Windwalker = 304,
Name = 312;
هتروح باكت هندل هتبحث عن

شفرة الى بالشكل دة

case "class":
{
byte _class = client.Entity.Class;
byte.TryParse(Data[1], out _class);
_class = Math.Min((byte)145, Math.Max((byte)1, _class));
client.Entity.Class = _class;
if (client.Entity.Reborn == 0)
{
Database.DataHolder.GetStats(_class, client.Entity.Level, client);
client.CalculateStatBonus();
client.CalculateHPBonus();
client.GemAlgorithm();
}
break;
}

وهتبزبط سطر دة

_class = Math.Min((byte)145, Math.Max((byte)1, _class));

بدل ما هيا 145 اعملها 165

ودة شفرة متعدل عليها

case "class":
{
byte _class = client.Entity.Class;
byte.TryParse(Data[1], out _class);
_class = Math.Min((byte)165, Math.Max((byte)1, _class));
client.Entity.Class = _class;
if (client.Entity.Reborn == 0)
{
Database.DataHolder.GetStats(_class, client.Entity.Level, client);
client.CalculateStatBonus();
client.CalculateHPBonus();
client.GemAlgorithm();
}
break;
}


هتروح انتى تيبول هتروح فويد

LoadEntity

تحت دة client.Entity.Class = reader.ReadByte("Class");

هتحط دة

if (reader.ReadByte("Class") >= 160 && reader.ReadByte("Class") <= 165)
client.Entity.Windwalker = reader.ReadByte("Windwalker");

وهتروح فويد SaveEntity

وهتحط دة جوة

.Set("Windwalker", e.Windwalker)

وهتروح فويد CreateEntity

وتنزل لحد switch (eC.Class)

هتنزل لحد using (var cmd = new MySqlCommand(MySqlCommandType.INSERT))

وتزود دة ف الاخر قبل كلمة .Execute();

.Insert("Windwalker", client.Entity.Windwalker)

بعدين هتدخل كلاس CharacterInfo

هتروح فويد public byte[] ToArray()

وضيف دى

if (client.Entity.Class >= 160 && client.Entity.Class <= 165)
Writer.WriteUInt32(this.client.Entity.Windwalker, 89, level);



وبعدين هتعمل عمود ف entities
Windwalker bigint 20 0 -1 0 0 0 0 0 0 0 0

هتدخل ع كلاس DataHolder

تحت دى

static SafeDictionary<byte, string> MonkStats = new SafeDictionary<byte, string>(130);

هتحط دى

static SafeDictionary<byte, string> WindwalkerStats = new SafeDictionary<byte, string>(130);

وتحت دى

public static bool IsMonk(byte Job) { return Job >= 60 && Job <= 65; }

هتحط دى

public static bool IsWindwalker(byte Job) { return Job >= 160 && Job <= 165; }

وهتروح ع فويد [/PHP] public static void ReadStats()

فوق دى[PHP] job = "Monk[" + lvl + "]";

هتحط دى

job = "Windwalker[" + lvl + "]";
Data = IniFile.ReadString("Stats", job);
WindwalkerStats.Add(lvl, Data);

وبعدين هتروح ع فويد دة

public static void GetStats(

وتحت دى

case 60: Class = "Monk"; break;

هتحط دى

case 160: Class = "Windwalker"; break;

وفوق دى

else if (Class == "Monk")

هتحط دى

else if (Class == "Windwalker")
Data = WindwalkerStats[inLevel].Split(',');

وهتعمل نقاط شخصية ف ملف Stats.ini

ف داتا بيز

دة نموذج

Windwalker[1]=5,3,2,0
Windwalker[2]=3,6,4,0
Windwalker[3]=4,7,5,0
Windwalker[4]=4,9,6,0
Windwalker[5]=5,10,7,0
Windwalker[6]=6,10,9,0
Windwalker[7]=7,11,10,0
Windwalker[8]=7,13,11,0
Windwalker[9]=8,14,12,0
Windwalker[10]=9,15,13,0
Windwalker[11]=10,16,14,0
Windwalker[12]=10,17,15,0
Windwalker[13]=11,19,16,0
Windwalker[14]=12,20,17,0
Windwalker[15]=13,21,18,0
Windwalker[16]=13,23,19,0
Windwalker[17]=14,24,20,0
Windwalker[18]=15,25,21,0
Windwalker[19]=16,25,23,0
Windwalker[20]=17,26,24,0
Windwalker[21]=18,28,25,0
Windwalker[22]=18,29,26,0
Windwalker[23]=19,30,27,0
Windwalker[24]=19,32,28,0
Windwalker[25]=20,33,29,0
Windwalker[26]=21,34,30,0
Windwalker[27]=22,35,31,0
Windwalker[28]=22,37,32,0
Windwalker[29]=23,38,33,0
Windwalker[30]=24,39,34,0
Windwalker[31]=24,40,36,0
Windwalker[32]=25,41,37,0
Windwalker[33]=26,42,38,0
Windwalker[34]=27,43,39,0
Windwalker[35]=28,44,40,0
Windwalker[36]=28,46,41,0
Windwalker[37]=29,47,42,0
Windwalker[38]=30,48,43,0
Windwalker[39]=31,49,44,0
Windwalker[40]=32,50,45,0
Windwalker[41]=32,52,46,0
Windwalker[42]=33,53,47,0
Windwalker[43]=33,54,48,0
Windwalker[44]=34,55,50,0
Windwalker[45]=35,56,51,0
Windwalker[46]=36,57,52,0
Windwalker[47]=37,58,53,0
Windwalker[48]=37,60,54,0
Windwalker[49]=38,61,55,0
Windwalker[50]=39,62,56,0
Windwalker[51]=40,63,57,0
Windwalker[52]=40,65,58,0
Windwalker[53]=41,66,59,0
Windwalker[54]=42,67,60,0
Windwalker[55]=43,68,61,0
Windwalker[56]=43,69,63,0
Windwalker[57]=44,70,64,0
Windwalker[58]=45,71,65,0
Windwalker[59]=46,72,66,0
Windwalker[60]=46,74,67,0
Windwalker[61]=47,75,68,0
Windwalker[62]=48,76,69,0
Windwalker[63]=49,77,70,0
Windwalker[64]=49,79,71,0
Windwalker[65]=50,80,72,0
Windwalker[66]=51,81,73,0
Windwalker[67]=52,82,74,0
Windwalker[68]=52,84,75,0
Windwalker[69]=53,84,77,0
Windwalker[70]=54,85,78,0
Windwalker[71]=55,86,79,0
Windwalker[72]=55,88,80,0
Windwalker[73]=56,89,81,0
Windwalker[74]=57,90,82,0
Windwalker[75]=58,91,83,0
Windwalker[76]=58,93,84,0
Windwalker[77]=59,94,85,0
Windwalker[78]=60,95,86,0
Windwalker[79]=61,96,87,0
Windwalker[80]=61,98,88,0
Windwalker[81]=62,98,90,0
Windwalker[82]=63,99,91,0
Windwalker[83]=64,100,92,0
Windwalker[84]=64,102,93,0
Windwalker[85]=65,103,94,0
Windwalker[86]=66,104,95,0
Windwalker[87]=67,105,96,0
Windwalker[88]=67,107,97,0
Windwalker[89]=68,108,98,0
Windwalker[90]=69,109,99,0
Windwalker[91]=70,110,100,0
Windwalker[92]=70,112,101,0
Windwalker[93]=71,113,102,0
Windwalker[94]=72,113,104,0
Windwalker[95]=73,114,105,0
Windwalker[96]=73,116,106,0
Windwalker[97]=74,117,107,0
Windwalker[98]=75,118,108,0
Windwalker[99]=76,119,109,0
Windwalker[100]=76,121,110,0
Windwalker[101]=77,122,111,0
Windwalker[102]=78,123,112,0
Windwalker[103]=79,124,113,0
Windwalker[104]=79,126,114,0
Windwalker[105]=80,127,115,0
Windwalker[106]=81,127,117,0
Windwalker[107]=82,128,118,0
Windwalker[108]=82,130,119,0
Windwalker[109]=83,131,120,0
Windwalker[110]=84,132,121,0
Windwalker[111]=85,133,122,0
Windwalker[112]=85,135,123,0
Windwalker[113]=86,136,124,0
Windwalker[114]=87,137,125,0
Windwalker[115]=88,138,126,0
Windwalker[116]=88,140,127,0
Windwalker[117]=89,141,128,0
Windwalker[118]=90,142,129,0
Windwalker[119]=91,142,131,0
Windwalker[120]=91,144,132,0

عايز تبدء وتكملة تخمين كمل عايزو كامل زى اونلاين كلم هيما

هتدخل ع كلاس ابديت
هضيف دة

public class Flags4
{//By Mina
public const ulong
Omnipotence = 1UL << 192,
JusticeChant = 1UL << 194,
BlockFrostGaze = 1UL << 195,
HealingSnow = 1UL << 196,
ChillingSnow = 1UL << 197,
xChillingSnow = 1UL << 198,
FreezingPelter = 1UL << 200,
xFreezingPelter = 1UL << 201,
RevengeTaill = 1UL << 202,
WindwalkerTop = 1UL << 203,
ShadowofChaser = 1UL << 204;
}

هتبدل دول بالى عندك

public void AppendFull(byte type, ulong val1, ulong val2, ulong val3, ulong val4)
{
UpdateCount = UpdateCount + 1;
ushort offset = (ushort)(16 + ((UpdateCount - 1) * 28));
WriteUInt32(type, offset, Buffer);
WriteUInt64(val1, offset + 4, Buffer);
WriteUInt64(val2, offset + 12, Buffer);
WriteUInt64(val3, offset + 20, Buffer);
WriteUInt64(val4, offset + 28, Buffer);
}


public void Append(ulong val1, ulong val2, ulong val3, uint val4, uint val5, uint val6, uint val7)
{
WriteUInt32(val4, 24, Buffer);
WriteUInt32(val6, 32, Buffer);
}

بعدين هضيف دول ف انتى

private ulong _Stateff4 = 0;
public ulong StatusFlag4
{
get { return _Stateff4; }
set
{
ulong OldV = StatusFlag4;
if (value != OldV)
{
_Stateff4 = value;
WriteUInt64(value, Offset.StatusFlag4, SpawnPacket);
UpdateEffects(true);
}
}
}
public void AddFlag4(ulong flag)
{
StatusFlag4 |= flag;
}
public void RemoveFlag4(ulong flag)
{
if (ContainsFlag4(flag))
{
StatusFlag4 &= ~flag;
}
}
public bool ContainsFlag4(ulong flag)
{
ulong aux = StatusFlag4;
aux &= ~flag;
return !(aux == StatusFlag4);
}

وهتبحث عن public void UpdateEffects(bool screen)

تبدل دة بالسطر الى زيو

update.AppendFull(0x19, StatusFlag, StatusFlag2, StatusFlag3, StatusFlag4);
هنيجى بقى الاسكلات كاملة والكمال لله واحده هفنتح ملف الهاندل
ونضيف دول

#region WindWalker
#region Chaser
#region ThunderCloud(Passive)
case 12840:
{
if (Time64.Now >= attacker.TCSpellUse.AddSeconds(59))
{
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.X = X;
suse.Y = Y;
suse.SpellID = spell.ID;
attacker.Owner.SendScreen(suse, true);
//////////////////////////////////////////////////
///////////////////////////////////////////////////
uint UID = Kernel.Maps[attacker.MapID].EntityUIDCounter.Next;
uint Mesh = 980;
//////////////////////////////////////////////////////
byte[] Buffer = new byte[68 + 8];
Writer.Write(Buffer.Length - 8, 0, Buffer);
Writer.Write(2035, 2, Buffer);//Packet ID
Writer.Write(UID, 4, Buffer);//FlowerUID
Writer.Write(4264, 8, Buffer);
Buffer[12] = 3;
Writer.Write(Mesh, 16, Buffer);//FloorItemID
Buffer[24] = 14;//AttackRange
Writer.Write(X, 26, Buffer);
Writer.Write(Y, 28, Buffer);
Writer.Write("Thundercloud", 30, Buffer);
//////////////////////////////////////////////////
///////////////////////////////////////////////////
//////////////////////////////////////////////////////
Entity ThunderCloud = new Entity(Game.EntityFlag.Monster, true);
ThunderCloud.Name = "Thundercloud";
ThunderCloud.Mesh = Mesh;
ThunderCloud.UID = UID;
ThunderCloud.GuildID = attacker.GuildID;
ThunderCloud.MaxHitpoints = attacker.MaxHitpoints;
ThunderCloud.Level = 140;
ThunderCloud.X = X;
ThunderCloud.Y = Y;
ThunderCloud.Facing = attacker.Facing;
ThunderCloud.Boss = 1;
ThunderCloud.MapID = attacker.MapID;
Writer.Write(3, 308, ThunderCloud.SpawnPacket);
Writer.Write(15, 272, ThunderCloud.SpawnPacket);
Writer.Write(3, 271, ThunderCloud.SpawnPacket);//AttackUser
//Writer.Write(attacker.Owner.UnionID, 278, ThunderCloud.SpawnPacket);//UnionID
ThunderCloud.CUID = attacker.UID;
ThunderCloud.Owner = new Client.GameClient(null);
ThunderCloud.Owner.Entity = ThunderCloud;
ThunderCloud.MonsterInfo = new MonsterInformation();
ThunderCloud.MonsterInfo.AttackType = 24;
ThunderCloud.MonsterInfo.AttackSpeed = 1000;
ThunderCloud.MonsterInfo.AttackRange = 14;
ThunderCloud.MonsterInfo.Boss = true;
ThunderCloud.MonsterInfo.BoundX = X;
ThunderCloud.Companion = true;
ThunderCloud.MonsterInfo.Guard = false;
ThunderCloud.MonsterInfo.BoundY = Y;
ThunderCloud.MonsterInfo.Defence = attacker.Defence;
ThunderCloud.MonsterInfo.Hitpoints = 10000;
ThunderCloud.MonsterInfo.Mesh = 980;
ThunderCloud.MonsterInfo.MoveSpeed = int.MaxValue;
ThunderCloud.MonsterInfo.Name = "Thundercloud";
ThunderCloud.MonsterInfo.Owner = attacker;
ThunderCloud.MonsterInfo.ViewRange = 14;
ThunderCloud.MonsterInfo.RespawnTime = 0;
ThunderCloud.MonsterInfo.RunSpeed = int.MaxValue;
ThunderCloud.MonsterInfo.SpellID = 13190;
ThunderCloud.Hitpoints = 10000;
Kernel.Maps[ThunderCloud.MapID].AddEntity(ThunderCloud);
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
/////////////////////////////////////////////
Network.GamePackets.Data d = new Data(true);
d.UID = UID;
d.ID = Data.AddEntity;
d.Facing = attacker.Facing;
d.X2 = ThunderCloud.X;
d.Y2 = ThunderCloud.Y;
///////////////////////////////////////////////
////////////////////////////////////////////
/////////////////////////////////////////
attacker.Owner.SendScreen(Buffer, true);
attacker.Owner.SendScreen(ThunderCloud.SpawnPacket , true);
attacker.Owner.SendScreenSpawn(ThunderCloud, true);
attacker.Owner.SendScreen(d, true);
ThunderCloud.ThunderCloudStamp = Time64.Now;
Program.World.Register(ThunderCloud);
attacker.AttackPacket = null;
}
}
break;

}
#endregion
#region ShadowofChaser(Active)
case 13090:
{
if (attacker.ContainsFlag4(Update.Flags4.ShadowofChas er))
{
attacker.RemoveFlag4(Update.Flags4.ShadowofChaser) ;
attacker.AttackPacket = null;
break;
}
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.Attacker1 = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.AddTarget(attacker.UID, 0, attack);
attack = new Attack(true);
attack.Attacker = attack.Attacked = attacker.UID;
attack.X = attacker.X; attack.Y = attacker.Y;
attack.AttackType = 24;
attack.SpellID = spell.ID;
attacker.Owner.SendScreen(suse, true);
attacker.AddFlag4(Update.Flags4.ShadowofChaser);
attacker.AttackPacket = null;
}
break;
}
#endregion
#region TripleBlasts(Passive)
case 12850:
{
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.Attacker1 = attackedsob == null ? attacked.UID : attackedsob.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
if (attackedsob == null)
{
if (CanAttack(attacker, attacked, spell, false))
{
if (attacker.ContainsFlag4(Update.Flags4.ShadowofChas er) && attacker.IsChaser2())
{
var spell2 = Database.SpellTable.GetSpell(13090, attacker.Owner);
if (spell2 != null)
{
spell2.CanKill = true;
if (Kernel.Rate(spell2.Percent))
{
ShadowofChaser(attacker, attacked, attack, 1);
break;
}
}
}

uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked, ref attack);
damage = (uint)(damage * 0.2);

ReceiveAttack(attacker, attacked, attack,damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
attacker.Owner.SendScreen(suse, true);
}
}
else
{
if (CanAttack(attacker, attackedsob, spell))
{

uint damage = Game.Attacking.Calculate.Ranged(attacker, attackedsob, ref attack);

ReceiveAttack(attacker, attackedsob, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
attacker.Owner.SendScreen(suse, true);
}
}

}
break;
}
#endregion
#region swirlingStor
case 12890:
{
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
spell.UseStamina = 40;
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
Sector sector = new Sector(attacker.X, attacker.Y, X, Y);
sector.Arrange(spell.Sector, spell.Distance);
{
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj == null)
continue;
if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
{
attacked = _obj as Entity;
if (sector.Inside(attacked.X, attacked.Y))
{
if (CanAttack(attacker, attacked, spell, attack.AttackType == Attack.Melee))
{
attack.Effect = Attack.AttackEffects.None;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked, ref attack);
damage = (uint)(damage - spell.Power / 10);
suse.Effect = attack.Effect;
ReceiveAttack(attacker, attacked, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
}
}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
attackedsob = _obj as SobNpcSpawn;
if (sector.Inside(attackedsob.X, attackedsob.Y))
{
if (CanAttack(attacker, attackedsob, spell))

attack.Effect = Attack.AttackEffects.None;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attackedsob, ref attack);
damage = (uint)(damage - spell.Power / 10);
suse.Effect = attack.Effect;
suse.AddTarget(attackedsob.UID, damage, attack);
attacker.Owner.SendScreen(suse, true);
}
}
}
}
attacker.Owner.SendScreen(suse, true);
}
break;
}
#endregion
#region ThunderBolt(Active)
case 12970:
{
if (!attacker.Owner.Spells.ContainsKey(12840)) break;
foreach (var th in Kernel.Maps[attacker.MapID].Entities.Values.Where(i => i.Name == "Thundercloud"))
{
if (th.CUID == attacker.UID)
{
if (Kernel.GetDistance(attacker.X, attacker.Y, th.X, th.Y) <= th.MonsterInfo.AttackRange)
{
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.X = X;
suse.Y = Y;
suse.SpellID = spell.ID;
suse.AddTarget(th.UID, 0, null);
Writer.Write(128, 50, th.SpawnPacket);//Flag4(128)
attacker.Owner.SendScreen(suse, true);
attacker.AttackPacket = null;
foreach (var client in Kernel.GamePool.Values.Where(i => Kernel.GetDistance(th.X, th.Y, i.Entity.X, i.Entity.Y) < 17))
{
client.Send(th.SpawnPacket);
}

}
}
}
}
break;
}
#endregion
#region Omnipotence(XP)
case 12860:
{
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
if (attacker.ContainsFlag(Update.Flags.XPList))
{
attacker.AddFlag4(Update.Flags4.Omnipotence);
attacker.OmnipotenceStamp = Time64.Now;
attacker.RemoveFlag(Update.Flags.XPList);
attacker.Owner.SendScreen(suse, true);
}
else
{
if (Kernel.GetDistance(attacker.X, attacker.Y, X, Y) <= spell.Range)
{
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj == null) continue;
if (_obj.MapObjType == MapObjectType.Player)
{
attacked = _obj as Entity;
if (Kernel.GetDistance(attacker.X, attacker.Y, attacked.X, attacked.Y) <= spell.Range)
{
if (CanAttack(attacker, attacked, spell, attack.AttackType == Attack.Melee))
{

uint damage = Game.Attacking.Calculate.Melee(attacker, attacked, ref attack, spell) / 10;

ReceiveAttack(attacker, attacked, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
}
}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
attackedsob = _obj as SobNpcSpawn;
if (Kernel.GetDistance(attacker.X, attacker.Y, attackedsob.X, attackedsob.Y) <= spell.Range)
{
if (CanAttack(attacker, attackedsob, spell))
{

uint damage = Game.Attacking.Calculate.Melee(attacker, attackedsob, ref attack) * 350 / 100;


ReceiveAttack(attacker, attackedsob, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
}
}
else if (_obj.MapObjType == MapObjectType.Monster)
{
attacked = _obj as Entity;
if (Kernel.GetDistance(attacker.X, attacker.Y, attacked.X, attacked.Y) <= spell.Range)
{
if (CanAttack(attacker, attacked, spell, attack.AttackType == Attack.Melee))
{

uint damage = Game.Attacking.Calculate.Melee(attacker, attackedsob, ref attack) * 350 / 100;

ReceiveAttack(attacker, attacked, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
}
}
}
}
}
attacker.Owner.SendScreen(suse, true);
attacker.AttackPacket = null;
break;
}
#endregion
#region FrostGaze(I-II-III)
case 12830:
case 13070:
case 13080:
{
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
attacker.Owner.SendScreen(suse, true);
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj == null)
continue;
if (_obj.MapObjType == MapObjectType.Player)
{
attacked = _obj as Entity;

if (Kernel.GetDistance(attacker.X, attacker.Y, attacked.X, attacked.Y) <= spell.Range)
{
if (CanAttack(attacker, attacked, spell, attack.AttackType == Attack.Melee))
{
int Rate = 100;
int diff = attacked.BattlePower - attacker.BattlePower;
if (diff < 0) diff = 0;
Rate -= (byte)(diff * 5);
if (Rate < 0) Rate = 0;
if (Kernel.Rate(Rate))
{
if (attacked.Stamina >= (byte)spell.Power)
attacked.Stamina -= (byte)spell.Power;
else attacked.Stamina = 0;
}
}
}
}
}
}
break;
}
#endregion
#endregion
#region Stomper
#region ChillingSnow(Active)
case 12960:
{
if (attacker.ContainsFlag4(Update.Flags4.ChillingSnow ))
{
attacker.RemoveFlag4(Update.Flags4.ChillingSnow);
attacker.AttackPacket = null;
break;
}
if (CanUseSpell(spell, attacker.Owner))
{
attacker.RemoveFlag4(Update.Flags4.HealingSnow);
attacker.RemoveFlag4(Update.Flags4.FreezingPelter) ;
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.Attacker1 = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
suse.AddTarget(attacker.UID, 0, attack);
attacker.Owner.SendScreen(suse, true);
attacker.AddFlag4(Update.Flags4.ChillingSnow);
attacker.AttackPacket = null;
}
break;
}
#endregion
#region HealingSnow(Active)
case 12950:
{
if (attacker.ContainsFlag4(Update.Flags4.HealingSnow) )
{
attacker.RemoveFlag4(Update.Flags4.HealingSnow);
attacker.AttackPacket = null;
break;
}
if (CanUseSpell(spell, attacker.Owner))
{
attacker.RemoveFlag4(Update.Flags4.ChillingSnow);
attacker.RemoveFlag4(Update.Flags4.FreezingPelter) ;
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.Attacker1 = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
suse.AddTarget(attacker.UID, 0, attack);
attacker.Owner.SendScreen(suse, true);
attacker.AddFlag4(Update.Flags4.HealingSnow);
attacker.AttackPacket = null;
}
break;
}
#endregion
#region FreezingPelter(Active)
case 13020:
{
if (attacker.ContainsFlag4(Update.Flags4.FreezingPelt er))
{
attacker.RemoveFlag4(Update.Flags4.FreezingPelter) ;
attacker.Owner.LoadItemStats();
attacker.AttackPacket = null;
break;
}
if (CanUseSpell(spell, attacker.Owner))
{
attacker.RemoveFlag4(Update.Flags4.ChillingSnow);
attacker.RemoveFlag4(Update.Flags4.HealingSnow);
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.Attacker1 = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
suse.AddTarget(attacker.UID, 0, attack);
attacker.Owner.SendScreen(suse, true);
attacker.AddFlag4(Update.Flags4.FreezingPelter);
attacker.Owner.LoadItemStats();
attacker.AttackPacket = null;
}
break;
}
#endregion
#region RevengeTail(Active)
case 13030:
{
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.Attacker1 = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
suse.AddTarget(attacker.UID, 0, attack);
attacker.Owner.SendScreen(suse, true);
attacker.AddFlag4(Update.Flags4.RevengeTaill);
attacker.RevengeTaillStamp = Time64.Now;
attacker.AttackPacket = null;
}
break;
}
#endregion
#region BurntFrost(Passive)
case 12940:
{
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);


SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = X;
suse.Y = Y;
Fan sector = new Fan(attacker.X, attacker.Y, X, Y, spell.Range, spell.Sector);
if (Kernel.GetDistance(attacker.X, attacker.Y, X, Y) <= spell.Distance + 1)
{
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
{
if (_obj == null)
continue;
attacked = _obj as Entity;
if (attacked == null) continue;
if (sector.IsInFan(attacked.X, attacked.Y))
{
if (CanAttack(attacker, attacked, spell, attack.AttackType == Attack.Melee))
{

uint damage = Calculate.Melee(attacker, attacked, ref attack, spell);
damage = (uint)(damage * 0.6);
ReceiveAttack(attacker, attacked, attack,damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
}
}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
if (_obj == null)
continue;
attackedsob = _obj as SobNpcSpawn;
if (attackedsob == null) continue;
if (sector.IsInFan(attackedsob.X, attackedsob.Y))
{
if (CanAttack(attacker, attackedsob, spell))
{

uint damage = Game.Attacking.Calculate.Melee(attacker, attackedsob, ref attack);

ReceiveAttack(attacker, attackedsob, attack, damage, spell);
suse.AddTarget(attackedsob.UID, damage, attack);
}
}
}
}
}
attacker.Owner.SendScreen(suse, true);
attacker.AttackPacket = null;
}
break;
}
#endregion
#region RageofWar(Passive)
case 12930:
{
if (CanUseSpell(spell, attacker.Owner))
{
PrepareSpell(spell, attacker.Owner);
Game.Attacking.InLineAlgorithm ila = new Game.Attacking.InLineAlgorithm(attacker.X,
X, attacker.Y, Y, (byte)spell.Range, InLineAlgorithm.Algorithm.DDA);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = SpellID;
suse.SpellLevel = attacker.Owner.Spells[SpellID].Level;
suse.X = X;
suse.Y = Y;
attacker.Owner.SendScreen(suse, true);
bool first = false;
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj == null)
continue;
if (_obj.MapObjType == MapObjectType.Player)
{
attacked = _obj as Entity;
if (ila.InLine(attacked.X, attacked.Y))
{
if (!CanAttack(attacker, attacked, spell, attack.AttackType == Attack.Melee))
continue;
if (Kernel.GetDistance(attacked.X, attacked.Y, attacker.X, attacker.Y) > 11) continue;
if (!first)
{
var map = Kernel.Maps[attacker.MapID];
Network.GamePackets.FloorItem flooritem = new Network.GamePackets.FloorItem(true);
flooritem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (map.Npcs.ContainsKey(flooritem.UID))
flooritem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
flooritem.ItemID = FloorItem.RageOfWarTrap;
flooritem.X = attacked.X;
flooritem.MapID = map.ID;
flooritem.Y = attacked.Y;
flooritem.MapObjType = MapObjectType.FloorSpell;
flooritem.Type = FloorItem.Effect;
flooritem.mColor = 15;
flooritem.OwnerUID = attacker.UID;
flooritem.OnFloor = Time64.Now;
flooritem.Owner = attacker.Owner;
flooritem.Name2 = "RageofWarTrap";
map.AddFloorItem(flooritem);
attacker.Owner.SendScreenSpawn(flooritem, true);
first = true;
}
uint damage = Calculate.Melee(attacker, attacked, ref attack, spell);
damage = (uint)(damage * 0.6);
attack.Damage = damage;
ReceiveAttack(attacker, attacked, attack,damage, spell);

suse.AddTarget(attacked.UID, damage, attack);
}
}
else if (_obj.MapObjType == MapObjectType.Monster)
{
attacked = _obj as Entity;
if (ila.InLine(attacked.X, attacked.Y))
{
if (!CanAttack(attacker, attacked, spell, attack.AttackType == Attack.Melee))
continue;
if (Kernel.GetDistance(attacked.X, attacked.Y, attacker.X, attacker.Y) > 11) continue;
if (!first)
{
var map = Kernel.Maps[attacker.MapID];
Network.GamePackets.FloorItem flooritem = new Network.GamePackets.FloorItem(true);
flooritem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (map.Npcs.ContainsKey(flooritem.UID))
flooritem.UID = Network.GamePackets.FloorItem.FloorUID.Next;

flooritem.ItemID = FloorItem.RageOfWarTrap;
flooritem.X = attacked.X;
flooritem.MapID = map.ID;
flooritem.Y = attacked.Y;
flooritem.Type = FloorItem.Effect;
flooritem.MapObjType = MapObjectType.FloorSpell;
flooritem.mColor = 15;
flooritem.OwnerUID = attacker.UID;
flooritem.OnFloor = Time64.Now;
flooritem.Owner = attacker.Owner;
flooritem.Name2 = "RageofWarTrap";
map.AddFloorItem(flooritem);
attacker.Owner.SendScreenSpawn(flooritem, true);
first = true;
}

uint damage = (uint)(Game.Attacking.Calculate.Melee(attacker, attacked, ref attack) * (spell.Power - 30000) / 100);


attack.Damage = damage;

ReceiveAttack(attacker, attacked, attack,damage, spell);

suse.AddTarget(attacked.UID, damage, attack);
}


}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
attackedsob = _obj as SobNpcSpawn;
if (attackedsob == null) continue;
if (ila.InLine(attackedsob.X, attackedsob.Y))
{
if (!CanAttack(attacker, attackedsob, spell))
continue;
if (Kernel.GetDistance(attackedsob.X, attackedsob.Y, attacker.X, attacker.Y) > 11) continue;
if (!first)
{
var map = Kernel.Maps[attacker.MapID];
Network.GamePackets.FloorItem flooritem = new Network.GamePackets.FloorItem(true);
flooritem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (map.Npcs.ContainsKey(flooritem.UID))
flooritem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
flooritem.MapObjType = MapObjectType.FloorSpell;
flooritem.ItemID = FloorItem.RageOfWarTrap;
flooritem.X = attackedsob.X;
flooritem.MapID = map.ID;
flooritem.Y = attackedsob.Y;
flooritem.Type = FloorItem.Effect;
flooritem.mColor = 15;
flooritem.OwnerUID = attacker.UID;
flooritem.OnFloor = Time64.Now;
flooritem.Owner = attacker.Owner;
flooritem.Name2 = "RageofWarTrap";
map.AddFloorItem(flooritem);
attacker.Owner.SendScreenSpawn(flooritem, true);
first = true;
}

uint damage = (uint)(Game.Attacking.Calculate.Melee(attacker, attackedsob, ref attack) * (spell.Power - 30000) / 100);


attack.Damage = damage;

ReceiveAttack(attacker, attackedsob, attack, damage, spell);

suse.AddTarget(attackedsob.UID, damage, attack);
}


}
}
attacker.Owner.SendScreen(suse, true);
attacker.AttackPacket = null;
}
break;
}
#endregion
#endregion
#endregion

هتيجى تقولى ايه ده ياعم فيه ايرورات ظاهرها هقولك تعالى لسه هنعمل سيرش على كود ده
public static bool Allyss(Entity attacker, Entity attacked)
هنقفله بعلامة السالب وتحتية هنضيف كود ده
public static void ShadowofChaser(Entity attacker, Entity attacked, Attack attack, byte oneortwo)
{
#region ShadowofChaser(Active)
IMapObject lastAttacked = attacked;
if (oneortwo == 1)
{
if (attacker.ContainsFlag4(Update.Flags4.ShadowofChas er) && attacker.IsChaser2())
{
#region FloorItem
var map = Kernel.Maps[attacker.MapID];
Network.GamePackets.FloorItem flooritem = new Network.GamePackets.FloorItem(true);
flooritem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
while (map.Npcs.ContainsKey(flooritem.UID))
flooritem.UID = Network.GamePackets.FloorItem.FloorUID.Next;

flooritem.ItemID = FloorItem.ShadowofChaser;
flooritem.X = lastAttacked.X;
flooritem.MapID = attacker.MapID;
flooritem.Y = lastAttacked.Y;
flooritem.Type = FloorItem.Effect;
flooritem.mColor = 14;
flooritem.FlowerType = 3;
flooritem.Unknown37 = 1;
flooritem.MapObjType = MapObjectType.FloorSpell;
flooritem.Attack = attack;
flooritem.OwnerUID = attacker.UID;
flooritem.Owner = attacker.Owner;
flooritem.OwnerGuildUID = attacker.GuildID;
flooritem.OnFloor = Time64.Now;
flooritem.Name2 = "ShadowofChaser";
flooritem.ShadowofChaserAttacked = attacked;
flooritem.ShadowofChaserAttacker = attacker;
attacker.Owner.Map.AddFloorItem(flooritem);
attacker.Owner.SendScreenSpawn(flooritem, true);
#endregion
return;
}
}
else if (oneortwo == 2)
{
var spell = Database.SpellTable.GetSpell(13090, attacker.Owner);
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.Attacker1 = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
if (CanAttack(attacker, attacked, spell, false))
{
lastAttacked = attacked;
var damage = Game.Attacking.Calculate.Melee(attacker, attacked, ref attack, spell);
Handle.ReceiveAttack(attacker, attacked, attack,damage, spell);
suse.AddTarget(attacked.UID, damage, null);
}
attacker.Owner.SendScreen(suse, true);
SpellUse suse2 = new SpellUse(true);
suse2.Attacker = attacker.UID;
suse2.SpellID = spell.ID;
suse2.SpellLevel = spell.Level;
suse2.X = attacked.X;
suse2.Y = attacked.Y;
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
{
if (_obj == null) continue;
var attacked1 = _obj as Entity;
if (lastAttacked.UID == attacked1.UID) continue;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attacked1.X, attacked1.Y) <= 4)
{
if (CanAttack(attacker, attacked1, spell, false))
{
var damage = Game.Attacking.Calculate.Melee(attacker, attacked, ref attack, spell);
ReceiveAttack(attacker, attacked1, attack, damage, spell);
suse2.AddTarget(attacked1.UID, damage, null);
}
}
}
}
attacker.Owner.SendScreen(suse2, true);
}
#endregion
attacker.AttackPacket = null;
}
بعدين هنعمل سيرش على كود ده
#region Kinetic Spark
تحتيه
#region ShadowofChaser
if (attacker.ContainsFlag4(Update.Flags4.ShadowofChas er))
{
var spell = Database.SpellTable.GetSpell(13090, attacker.Owner);
if (spell != null)
{
spell.CanKill = true;
if (Kernel.Rate(spell.Percent))
{
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = attacker.X;
suse.Y = attacker.Y;
IMapObject lastAttacked = attacker;
/*****************/
attacker.Owner.SendScreen(suse, true);
ushort _X = attacker.X, _Y = attacker.Y;
ushort _tX = X, _tY = Y;
// byte dist = 18;
var Array = attacker.Owner.Screen.Objects;
var map = attacker.Owner.Map;
// if (!map.Floor[X, Y, MapObjectType.Item, null])
// return;
Game.Attacking.InLineAlgorithm algo = new Game.Attacking.InLineAlgorithm(attacked.X,
X, attacked.Y, Y, (byte)spell.Range, InLineAlgorithm.Algorithm.DDA);
// InLineAlgorithm algo = new InLineAlgorithm(attacker.X, X, attacker.Y, Y, dist,
// InLineAlgorithm.Algorithm.DDA);
var count = (double)algo.lcoords.Count / 1;
for (int i = 0; i < 1; i++)
{
var selected = i * (int)count;
selected = Math.Min(algo.lcoords.Count - 1, selected);
X = (ushort)algo.lcoords[selected].X;
Y = (ushort)algo.lcoords[selected].Y;
FloorItem floorItem = new FloorItem(true);
floorItem.ItemID = 1550;
floorItem.ItemColor = (Enums.Color)(i + 1);
floorItem.MapID = attacker.MapID;
floorItem.Type = FloorItem.Effect;
floorItem.X = X;
floorItem.Y = Y;
floorItem.OnFloor = Time64.Now;
floorItem.Owner = attacker.Owner;
while (map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
map.AddFloorItem(floorItem);
attacker.Owner.SendScreenSpawn(floorItem, true);
}
/****************/
uint p = 0;
if (Handle.CanAttack(attacker, attacked, spell, false))
{
lastAttacked = attacked;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked, spell, ref attack);
suse.Effect = attack.Effect;
damage = damage - damage * (p += 20) / 100;
Handle.ReceiveAttack(attacker, attacked, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj == null) continue;
if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
{
if (_obj.UID == attacked.UID) continue;
var attacked1 = _obj as Entity;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attacked1.X, attacked1.Y) <= 5)
{
if (Handle.CanAttack(attacker, attacked1, spell, false))
{
lastAttacked = attacked1;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked1, spell, ref attack);
suse.Effect = attack.Effect;
damage = damage + damage * (p += 20) / 100;
if (damage == 0) break;
Handle.ReceiveAttack(attacker, attacked1, attack, damage, spell);
suse.AddTarget(attacked1.UID, damage, attack);
}
}
}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
attackedsob = _obj as SobNpcSpawn;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attackedsob.X, attackedsob.Y) <= 5)
{
if (Handle.CanAttack(attacker, attackedsob, spell))
{
lastAttacked = attackedsob;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attackedsob, ref attack);
suse.Effect = attack.Effect;
damage = damage + damage * (p += 20) / 100;
if (damage == 0) break;
Handle.ReceiveAttack(attacker, attackedsob, attack, damage, spell);
suse.AddTarget(attackedsob.UID, damage, attack);
}
}
}
}
attacker.Owner.SendScreen(suse, true);
return;
}
}
}
#endregion
#region RageofWar
if (attacker.ContainsFlag4(Update.Flags4.RageofWar))
{
var spell = Database.SpellTable.GetSpell(12930, attacker.Owner);
if (spell != null)
{
spell.CanKill = true;
if (Kernel.Rate(spell.Percent))
{
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = attacker.X;
suse.Y = attacker.Y;
IMapObject lastAttacked = attacker;
/*****************/
attacker.Owner.SendScreen(suse, true);
ushort _X = attacker.X, _Y = attacker.Y;
ushort _tX = X, _tY = Y;
// byte dist = 18;
var Array = attacker.Owner.Screen.Objects;
var map = attacker.Owner.Map;
// if (!map.Floor[X, Y, MapObjectType.Item, null])
// return;
Game.Attacking.InLineAlgorithm algo = new Game.Attacking.InLineAlgorithm(attacked.X,
X, attacked.Y, Y, (byte)spell.Range, InLineAlgorithm.Algorithm.DDA);
// InLineAlgorithm algo = new InLineAlgorithm(attacker.X, X, attacker.Y, Y, dist,
// InLineAlgorithm.Algorithm.DDA);
var count = (double)algo.lcoords.Count / 1;
for (int i = 0; i < 1; i++)
{
var selected = i * (int)count;
selected = Math.Min(algo.lcoords.Count - 1, selected);
X = (ushort)algo.lcoords[selected].X;
Y = (ushort)algo.lcoords[selected].Y;
FloorItem floorItem = new FloorItem(true);
floorItem.ItemID = 1500;
floorItem.ItemColor = (Enums.Color)(i + 1);
floorItem.MapID = attacker.MapID;
floorItem.Type = FloorItem.Effect;
floorItem.X = X;
floorItem.Y = Y;
floorItem.OnFloor = Time64.Now;
floorItem.Owner = attacker.Owner;
while (map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
map.AddFloorItem(floorItem);
attacker.Owner.SendScreenSpawn(floorItem, true);
}
/****************/
uint p = 0;
if (Handle.CanAttack(attacker, attacked, spell, false))
{
lastAttacked = attacked;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked, spell, ref attack);
suse.Effect = attack.Effect;
damage = damage - damage * (p += 20) / 100;
Handle.ReceiveAttack(attacker, attacked, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj == null) continue;
if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
{
if (_obj.UID == attacked.UID) continue;
var attacked1 = _obj as Entity;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attacked1.X, attacked1.Y) <= 5)
{
if (Handle.CanAttack(attacker, attacked1, spell, false))
{
lastAttacked = attacked1;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked1, spell, ref attack);
suse.Effect = attack.Effect;
damage = damage + damage * (p += 20) / 100;
if (damage == 0) break;
Handle.ReceiveAttack(attacker, attacked1, attack, damage, spell);
suse.AddTarget(attacked1.UID, damage, attack);
}
}
}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
attackedsob = _obj as SobNpcSpawn;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attackedsob.X, attackedsob.Y) <= 5)
{
if (Handle.CanAttack(attacker, attackedsob, spell))
{
lastAttacked = attackedsob;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attackedsob, ref attack);
suse.Effect = attack.Effect;
damage = damage + damage * (p += 20) / 100;
if (damage == 0) break;
Handle.ReceiveAttack(attacker, attackedsob, attack, damage, spell);
suse.AddTarget(attackedsob.UID, damage, attack);
}
}
}
}
attacker.Owner.SendScreen(suse, true);
return;
}
}
}
#endregion
#region HorrorOfStomper
if (attacker.ContainsFlag4(Update.Flags4.HorrorOfStom per))
{
var spell = Database.SpellTable.GetSpell(12990, attacker.Owner);
if (spell != null)
{
spell.CanKill = true;
if (Kernel.Rate(spell.Percent))
{
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = attacker.X;
suse.Y = attacker.Y;
IMapObject lastAttacked = attacker;
/*****************/
attacker.Owner.SendScreen(suse, true);
ushort _X = attacker.X, _Y = attacker.Y;
ushort _tX = X, _tY = Y;
// byte dist = 18;
var Array = attacker.Owner.Screen.Objects;
var map = attacker.Owner.Map;
// if (!map.Floor[X, Y, MapObjectType.Item, null])
// return;
Game.Attacking.InLineAlgorithm algo = new Game.Attacking.InLineAlgorithm(attacked.X,
X, attacked.Y, Y, (byte)spell.Range, InLineAlgorithm.Algorithm.DDA);
// InLineAlgorithm algo = new InLineAlgorithm(attacker.X, X, attacker.Y, Y, dist,
// InLineAlgorithm.Algorithm.DDA);
var count = (double)algo.lcoords.Count / 1;
for (int i = 0; i < 1; i++)
{
var selected = i * (int)count;
selected = Math.Min(algo.lcoords.Count - 1, selected);
X = (ushort)algo.lcoords[selected].X;
Y = (ushort)algo.lcoords[selected].Y;
FloorItem floorItem = new FloorItem(true);
floorItem.ItemID = 1530;
floorItem.ItemColor = (Enums.Color)(i + 1);
floorItem.MapID = attacker.MapID;
floorItem.Type = FloorItem.Effect;
floorItem.X = X;
floorItem.Y = Y;
floorItem.OnFloor = Time64.Now;
floorItem.Owner = attacker.Owner;
while (map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
map.AddFloorItem(floorItem);
attacker.Owner.SendScreenSpawn(floorItem, true);
}
/****************/
uint p = 0;
if (Handle.CanAttack(attacker, attacked, spell, false))
{
lastAttacked = attacked;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked, spell, ref attack);
suse.Effect = attack.Effect;
damage = damage - damage * (p += 20) / 100;
Handle.ReceiveAttack(attacker, attacked, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj == null) continue;
if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
{
if (_obj.UID == attacked.UID) continue;
var attacked1 = _obj as Entity;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attacked1.X, attacked1.Y) <= 5)
{
if (Handle.CanAttack(attacker, attacked1, spell, false))
{
lastAttacked = attacked1;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked1, spell, ref attack);
suse.Effect = attack.Effect;
damage = damage + damage * (p += 20) / 100;
if (damage == 0) break;
Handle.ReceiveAttack(attacker, attacked1, attack, damage, spell);
suse.AddTarget(attacked1.UID, damage, attack);
}
}
}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
attackedsob = _obj as SobNpcSpawn;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attackedsob.X, attackedsob.Y) <= 5)
{
if (Handle.CanAttack(attacker, attackedsob, spell))
{
lastAttacked = attackedsob;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attackedsob, ref attack);
suse.Effect = attack.Effect;
damage = damage + damage * (p += 20) / 100;
if (damage == 0) break;
Handle.ReceiveAttack(attacker, attackedsob, attack, damage, spell);
suse.AddTarget(attackedsob.UID, damage, attack);
}
}
}
}
attacker.Owner.SendScreen(suse, true);
return;
}
}
}
#endregion
#region PeaceofStomper
if (attacker.ContainsFlag4(Update.Flags4.PeaceofStomp er))
{
var spell = Database.SpellTable.GetSpell(13000, attacker.Owner);
if (spell != null)
{
spell.CanKill = true;
if (Kernel.Rate(spell.Percent))
{
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = attacker.X;
suse.Y = attacker.Y;
IMapObject lastAttacked = attacker;
/*****************/
attacker.Owner.SendScreen(suse, true);
ushort _X = attacker.X, _Y = attacker.Y;
ushort _tX = X, _tY = Y;
// byte dist = 18;
var Array = attacker.Owner.Screen.Objects;
var map = attacker.Owner.Map;
// if (!map.Floor[X, Y, MapObjectType.Item, null])
// return;
Game.Attacking.InLineAlgorithm algo = new Game.Attacking.InLineAlgorithm(attacked.X,
X, attacked.Y, Y, (byte)spell.Range, InLineAlgorithm.Algorithm.DDA);
// InLineAlgorithm algo = new InLineAlgorithm(attacker.X, X, attacker.Y, Y, dist,
// InLineAlgorithm.Algorithm.DDA);
var count = (double)algo.lcoords.Count / 1;
for (int i = 0; i < 1; i++)
{
var selected = i * (int)count;
selected = Math.Min(algo.lcoords.Count - 1, selected);
X = (ushort)algo.lcoords[selected].X;
Y = (ushort)algo.lcoords[selected].Y;
FloorItem floorItem = new FloorItem(true);
floorItem.ItemID = 1540;
floorItem.ItemColor = (Enums.Color)(i + 1);
floorItem.MapID = attacker.MapID;
floorItem.Type = FloorItem.Effect;
floorItem.X = X;
floorItem.Y = Y;
floorItem.OnFloor = Time64.Now;
floorItem.Owner = attacker.Owner;
while (map.Npcs.ContainsKey(floorItem.UID))
floorItem.UID = Network.GamePackets.FloorItem.FloorUID.Next;
map.AddFloorItem(floorItem);
attacker.Owner.SendScreenSpawn(floorItem, true);
}
/****************/
uint p = 0;
if (Handle.CanAttack(attacker, attacked, spell, false))
{
lastAttacked = attacked;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked, spell, ref attack);
suse.Effect = attack.Effect;
damage = damage - damage * (p += 20) / 100;
Handle.ReceiveAttack(attacker, attacked, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
}
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (_obj == null) continue;
if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
{
if (_obj.UID == attacked.UID) continue;
var attacked1 = _obj as Entity;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attacked1.X, attacked1.Y) <= 5)
{
if (Handle.CanAttack(attacker, attacked1, spell, false))
{
lastAttacked = attacked1;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attacked1, spell, ref attack);
suse.Effect = attack.Effect;
damage = damage + damage * (p += 20) / 100;
if (damage == 0) break;
Handle.ReceiveAttack(attacker, attacked1, attack, damage, spell);
suse.AddTarget(attacked1.UID, damage, attack);
}
}
}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
attackedsob = _obj as SobNpcSpawn;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attackedsob.X, attackedsob.Y) <= 5)
{
if (Handle.CanAttack(attacker, attackedsob, spell))
{
lastAttacked = attackedsob;
uint damage = Game.Attacking.Calculate.Ranged(attacker, attackedsob, ref attack);
suse.Effect = attack.Effect;
damage = damage + damage * (p += 20) / 100;
if (damage == 0) break;
Handle.ReceiveAttack(attacker, attackedsob, attack, damage, spell);
suse.AddTarget(attackedsob.UID, damage, attack);
}
}
}
}
attacker.Owner.SendScreen(suse, true);
return;
}
}
}
#endregion
#region TripleBeast
if (attacker.ContainsFlag3(Update.Flags4.TripleBeast) )
{
var spell = Database.SpellTable.GetSpell(12850, attacker.Owner);
if (spell != null && Kernel.Rate(30))
{
spell.CanKill = true;
{
SpellUse suse = new SpellUse(true);
suse.Attacker = attacker.UID;
suse.SpellID = spell.ID;
suse.SpellLevel = spell.Level;
suse.X = attacker.X;
suse.Y = attacker.Y;
IMapObject lastAttacked = attacker;
uint p = 0;
if (Handle.CanAttack(attacker, attacked, spell, false))
{
lastAttacked = attacked;
uint damage = Game.Attacking.Calculate.Melee(attacker, attacked, ref attack, spell);
damage = damage * 160 / 100;
p++;
suse.Effect = attack.Effect;
attack.Damage = 0;
Handle.ReceiveAttack(attacker, attacked, attack, damage, spell);
suse.AddTarget(attacked.UID, damage, attack);
suse.Effect = attack.Effect = Attack.AttackEffects.None;
}
foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects)
{
if (p > 5) break;
if (_obj == null) continue;
if (_obj.MapObjType == MapObjectType.Monster || _obj.MapObjType == MapObjectType.Player)
{
if (_obj.UID == attacked.UID) continue;
var attacked1 = _obj as Entity;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attacked1.X, attacked1.Y) <= 5 && attacked.UID != attacked1.UID)
{
if (Handle.CanAttack(attacker, attacked1, spell, false))
{
lastAttacked = attacked1;
uint damage = Game.Attacking.Calculate.Melee(attacker, attacked1, ref attack, spell);
if (p == 1)
{
damage = damage * 80 / 100;
}
if (p == 2)
{
damage = damage * 60 / 100;
}
if (p == 3)
{
damage = damage * 40 / 100;
}
else if (p > 3)
{
damage = damage * 20 / 100;
}
suse.Effect = attack.Effect;
Handle.ReceiveAttack(attacker, attacked1, attack, damage, spell);
suse.AddTarget(attacked1.UID, damage, attack);
suse.Effect = attack.Effect = Attack.AttackEffects.None;
p++;
}
}
}
else if (_obj.MapObjType == MapObjectType.SobNpc)
{
attackedsob = _obj as SobNpcSpawn;
if (Kernel.GetDistance(lastAttacked.X, lastAttacked.Y, attackedsob.X, attackedsob.Y) <= 5)
{
if (Handle.CanAttack(attacker, attackedsob, spell))
{
lastAttacked = attackedsob;
uint damage = Game.Attacking.Calculate.Melee(attacker, attackedsob, ref attack);
suse.Effect = attack.Effect;
Handle.ReceiveAttack(attacker, attackedsob, attack, damage, spell);
suse.AddTarget(attackedsob.UID, damage, attack);
suse.Effect = attack.Effect = Attack.AttackEffects.None;
}
}
}
}
attacker.Owner.SendScreen(suse, true);
return;
}
}
}
#endregion
بعد كده هتعمل سيرش على كود ده
public static void ReceiveAttack(Game.Entity attacker, Game.Entity attacked, Attack attack, uint damage, Database.SpellInformation spell)
تضيف تحتيه
#region ThunderCloud
if (attacked.Name == "Thundercloud")
{
if (spell != null && spell.ID != 0)
{
if (Kernel.Rate(75)) damage = 1;
else damage = 0;
}
else if (spell == null || spell.ID == 0)
{
damage = 1;
}
}
foreach (var th in Kernel.Maps[attacker.MapID].Entities.Values.Where(i => i.Name == "Thundercloud"))
{
if (th.CUID == attacked.UID)
{
if (attacker == null || Kernel.GetDistance(attacker.X, attacker.Y, th.X, th.Y) > th.MonsterInfo.AttackRange || attacker.Dead) break;
th.MonsterInfo.InSight = attacker.UID;
break;
}
}
#endregion
#region RevengeTaill
if (attacked.ContainsFlag4(Network.GamePackets.Update .Flags4.RevengeTaill))
{
if (attacked.Owner != null && attacked.Owner.Spells != null && attacked.Owner.Spells.ContainsKey(13030))
{
var spelll = Database.SpellTable.GetSpell(13030, attacked.Owner);
if (damage <= spelll.Power)
{
SpellUse suses = new SpellUse(true);
suses.Attacker = attacked.UID;
suses.Attacker1 = attacker.UID;
suses.SpellID = 13030;
suses.SpecialEffect = 1;
suses.AddTarget(attacker.UID, damage, null);
if (attacker.Hitpoints <= damage)
{
attacker.Die(attacked);
}
else
{
attacker.Hitpoints -= damage;
}
attacked.Owner.SendScreen(suses, true);
}
}
}
#endregion
#region ChillingSnow
if (attacked.ContainsFlag4(Update.Flags4.ChillingSnow ) && attacked.IsStomper2() && attacker.EntityFlag == EntityFlag.Player)
{
var spell1 = Database.SpellTable.GetSpell(12960, attacked.Owner);
int rate = 95;
int diff = attacker.BattlePower - attacked.BattlePower;
if (diff < 0) diff = 0;
rate -= (byte)(diff * 5);
if (rate < 0) rate = 0;
if (Kernel.Rate(rate))
{
attacker.AddFlag4(Update.Flags4.xChillingSnow);
attacker.ChillingSnowStamp = Time64.Now;
attacker.ChillingSnow = (byte)(spell1.Level + 1);
}
}
#endregion
#region FreezingPelter
if (attacked.ContainsFlag4(Update.Flags4.FreezingPelt er) && attacked.IsStomper2() && attacker.EntityFlag == EntityFlag.Player)
{
var spell1 = Database.SpellTable.GetSpell(13020, attacked.Owner);
int rate = 30;
int diff = attacker.BattlePower - attacked.BattlePower;
if (diff < 0) diff = 0;
rate -= (byte)(diff * 5);
if (rate < 0) rate = 0;
if (Kernel.Rate(rate))
{
attacker.AddFlag4(Update.Flags4.xFreezingPelter);
attacker.FreezingPelterStamp = Time64.Now;
byte num = 0;
if (spell1.Level == 0) num = 1;
if (spell1.Level == 1) num = 1;
if (spell1.Level == 2) num = 2;
if (spell1.Level == 3) num = 2;
if (spell1.Level == 4) num = 3;
if (spell1.Level == 5) num = 3;
if (spell1.Level == 5) num = 4;
attacker.FreezingPelter = num;
}
}
#endregion
وبعدين فى اخر الكود ده
attacker.AttackStamp = Time64.Now;
هضيف كود ده
#region ThunderCloud
foreach (var th in Kernel.Maps[attacker.MapID].Entities.Values.Where(i => i.Name == "Thundercloud"))
{
if (th.CUID == attacker.UID)
{
if (attacked == null || Kernel.GetDistance(attacked.X, attacked.Y, th.X, th.Y) > th.MonsterInfo.AttackRange || attacked.Dead) break;
th.MonsterInfo.InSight = attacked.UID;
break;
}
}
#endregion
بعدين هنعمل سيرش فى كود ده
public static bool CanAttack(Game.Entity attacker, Game.Entity attacked, Database.SpellInformation spell, bool melee)
هنضيف تحتيه كود ده
#region ThunderCloud
if (attacked.Name == "Thundercloud")
{
if (attacked.CUID == attacker.UID) return false;
if (!Constants.PKForbiddenMaps.Contains(attacker.MapI D))
{
if (attacker.PKMode != Game.Enums.PKMode.PK &&
attacker.PKMode != Game.Enums.PKMode.Team)
return false;
else
{
attacker.AddFlag(Network.GamePackets.Update.Flags. FlashingName);
attacker.FlashingNameStamp = Time64.Now;
attacker.FlashingNameTime = 20;

return true;
}
}
else return false;
}
#endregion
بعدين نعمل سيرش على كود ده
#region Monster -> Player \ Monster
هنضيف تحتيه كود ده
if (attacked.EntityFlag == EntityFlag.Player)
{
if (attacker.Companion && attacker.Name != "Thundercloud")
{
if (Constants.PKForbiddenMaps.Contains(attacker.MapID ))
return;
}
فيه نفس كود
هنضيف كود ده
#region ThunderCloud
if (attacker.Name == "Thundercloud")
{
if (Kernel.GamePool.ContainsKey(attacker.CUID))
{
var owner = Kernel.GamePool[attacker.CUID];
var spell = Database.SpellTable.GetSpell(12840, owner);
var spell2 = Database.SpellTable.GetSpell(12970, owner);
byte percent = 0;
if (spell2 != null)
{
if (spell2.Level == 0) percent = 130;
if (spell2.Level == 1) percent = 140;
if (spell2.Level == 2) percent = 150;
if (spell2.Level == 3) percent = 160;
if (spell2.Level == 4) percent = 170;
if (spell2.Level == 5) percent = 180;
if (spell2.Level == 6) percent = 200;
}
attack = new Attack(true);
attack.Attacker = attacker.UID;
attack.Attacked = attacked.UID;
attack.AttackType = Network.GamePackets.Attack.Kill;
attack.X = attacked.X;
attack.Y = attacked.Y;
attack.Damage = 1;
uint damage2 = (uint)(Calculate.Melee(owner.Entity, attacked, ref attack) * spell.FirstDamage / 100);
if (attacker.SpawnPacket[50] == 128)//ThunderBolt
damage2 = (uint)(damage2 * percent / 100);
SpellUse suse2 = new SpellUse(true);
suse2.Attacker = attacker.UID;
suse2.Attacker1 = attacked.UID;
suse2.SpellID = 13190;
suse2.X = attacked.X;
suse2.Y = attacked.Y;
suse2.AddTarget(attacked.UID, damage2, attack);
attacker.MonsterInfo.SendScreen(suse2);
if (attacked.Hitpoints <= damage2)
{
attacked.Die(attacker);
attack.ResponseDamage = damage2;
attacker.MonsterInfo.SendScreen(attack);
}
else
{
attacked.Hitpoints -= damage2;
}
return;
}
else
return;
}
#endregion
#region ThunderCloudSight
foreach (var th in Kernel.Maps[attacker.MapID].Entities.Values.Where(i => i.Name == "Thundercloud"))
{
if (th.CUID == attacked.UID)
{
if (attacker == null || Kernel.GetDistance(attacker.X, attacker.Y, th.X, th.Y) > th.MonsterInfo.AttackRange || attacker.Dead) break;
th.MonsterInfo.InSight = attacker.UID;
break;
}
}
#endregion
بعدين هنعمل سيرش على كود ده
attack.Effect = Attack.AttackEffects.None;
تحتيه هضيف كود ده

#region ThunderCloud
if (attacker.Name == "Thundercloud")
{
if (Kernel.GamePool.ContainsKey(attacker.CUID))
{
var owner = Kernel.GamePool[attacker.CUID];
var spell = Database.SpellTable.GetSpell(12840, owner);
var spell2 = Database.SpellTable.GetSpell(12970, owner);
uint damage2 = (uint)(Calculate.Melee(owner.Entity, attacked, ref attack) * (spell.Level < 8 ? spell.FirstDamage : 50) / 100);
if (attacker.SpawnPacket[50] == 128)
damage2 = (uint)(damage2 * spell2.FirstDamage);
SpellUse suse2 = new SpellUse(true);
suse2.Attacker = attacker.UID;
suse2.Attacker1 = attacked.UID;
suse2.SpellID = 13190;
suse2.X = attacked.X;
suse2.Y = attacked.Y;
suse2.AddTarget(attacked.UID, damage2, attack);
attacker.MonsterInfo.SendScreen(suse2);
if (attacked.Hitpoints <= damage2)
{
attacked.Die(attacker);
attack = new Attack(true);
attack.Attacker = attacker.UID;
attack.Attacked = attacked.UID;
attack.AttackType = Network.GamePackets.Attack.Kill;
attack.X = attacked.X;
attack.Y = attacked.Y;
attack.Damage = 1;
attack.ResponseDamage = damage2;
attacker.MonsterInfo.SendScreen(attack);
}
else
{
attacked.Hitpoints -= damage2;
}
return;
}
else
return;
}
#endregion
بعدين هنعمل سيرش
#region Ranged
هنزل لحد كود ده
if (weapons.Item1.ID / 1000 != 500 && weapons.Item1.ID / 1000 != 613 && weapons.Item1.ID
هنبدلهبى الكود ده
if (weapons.Item1.ID / 1000 != 500 && weapons.Item1.ID / 1000 != 613 && weapons.Item1.ID / 1000 != 626) return;

هنعمل سيرش على نفس كود وهنضفهم تانى
كده خلصنا من ملف الهاندل نيجى بقى لى ملف اينتى
هنضيف دول فى ملف اينتى
#region WindWalker
public Time64 TCSpellUse;
public Time64 SwirlingStamp;
public bool IsStomper()
{
if (EntityFlag == Game.EntityFlag.Player)
{
if (this.Class >= 160 && this.Class <= 165)
if (this.Windwalker == 8 || this.Windwalker == 9 || this.Windwalker == 15)
return true;
}
return false;
}
public bool IsStomper1()
{
if (EntityFlag == Game.EntityFlag.Player)
{
var weapons = Owner.Weapons;
if (weapons.Item1 != null)
if (weapons.Item1.ID / 1000 == 626)
if (this.Class >= 160 && this.Class <= 165)
if (this.Windwalker == 8 || this.Windwalker == 9 || this.Windwalker == 15)
return true;
}
return false;
}
public bool IsStomper2()
{
if (EntityFlag == Game.EntityFlag.Player)
{
var weapons = Owner.Weapons;
if (weapons.Item2 != null)
if (weapons.Item2.ID / 1000 == 626)
if (this.Class >= 160 && this.Class <= 165)
if (this.Windwalker == 8 || this.Windwalker == 9 || this.Windwalker == 15)
return true;
}
return false;
}
public bool IsChaser()
{
if (EntityFlag == Game.EntityFlag.Player)
{
if (this.Class >= 160 && this.Class <= 165)
if (this.Windwalker == 0 || this.Windwalker == 7 || this.Windwalker == 1)
return true;
}
return false;
}
public bool IsChaser1()
{
if (EntityFlag == Game.EntityFlag.Player)
{
var weapons = Owner.Weapons;
if (weapons.Item1 != null)
if (weapons.Item1.ID / 1000 == 626)
if (this.Class >= 160 && this.Class <= 165)
if (this.Windwalker == 0 || this.Windwalker == 7 || this.Windwalker == 1)
return true;
}
return false;
}
public bool IsChaser2()
{
if (EntityFlag == Game.EntityFlag.Player)
{
var weapons = Owner.Weapons;
if (weapons.Item2 != null)
if (weapons.Item2.ID / 1000 == 626)
if (this.Class >= 160 && this.Class <= 165)
if (this.Windwalker == 0 || this.Windwalker == 7 || this.Windwalker == 1)
return true;
}
return false;
}
public Time64 OmnipotenceStamp, RevengeTaillStamp, StomperStaminaStamp, ChaserStaminaStamp, HealingSnowStamp, ThunderCloudStamp, ChillingSnowStamp, FreezingPelterStamp;
public byte ChillingSnow = 0, FreezingPelter = 0;
#endregion
#region WindWalker.
public String Branch = "";
private byte _ChangeBranch;
public byte ChangeBranch
{
get
{
return _ChangeBranch;
}
set
{
_ChangeBranch = value;
}
}
public Time64 TripleBeastStamp = Time64.Now;
public bool SwirlingStorm = false;
public float SwirlingStormPercent;
public byte _Windwalker;
public byte Windwalker
{
get
{
SpawnPacket[304] = _Windwalker;
return _Windwalker;
}
set
{
_Windwalker = value;
SpawnPacket[304] = value;
if (value > 0)
AddFlag4(Network.GamePackets.Update.Flags4.Justice Chant);
}
}
public bool PWindWalker()
{
if (EntityFlag == Game.EntityFlag.Player)
{
var weapons = Owner.Weapons;
if (weapons.Item2 != null)
if (weapons.Item2.ID / 1000 == 626)
return true;
}
return false;
}
#endregion

بعد كده هنبدل ده بالى عندك
public uint Mesh
{
get
{
return BitConverter.ToUInt32(SpawnPacket, _Mesh);
}
set
{
Writer.Write(value, _Mesh, SpawnPacket);
}

}
بعد كده هنفتح ملف فلور ايتم
هنضيف دول
RageOfWarTrap = 1500,
ShadowofChaser = 1550,
بعد كده هنضيف كوده ده
public Game.Entity ShadowofChaserAttacker, ShadowofChaserAttacked;
public Attack Attack;
بعد كده هنضيف


public byte Unknown37
{
get { return Buffer[37]; }
set { Buffer[37] = value; }
}

public string Name2
{
get { return Program.Encoding.GetString(Buffer, 93, 16); }
set { Writer.Write(value, 93, Buffer); }
}
public ushort X2
{
get { return BitConverter.ToUInt16(Buffer, 61); }
set { Writer.Write(value, 61, Buffer); }
}

public ushort Y2
{
get { return BitConverter.ToUInt16(Buffer, 63); }
set { Writer.Write(value, 63, Buffer); }
}



هنفتح ملف Map.cs
اعمل سيرش
public enum MapObjectType
ضيف فيه كود ده
FloorSpell,
هنفتح ملف Data.cs
هنضيف كود ده
public ushort X2
{
get
{
return BitConverter.ToUInt16(Buffer, 28);
}
set
{
Writer.Write(value, 28, Buffer);
}
}
public ushort Y2
{
get
{
return BitConverter.ToUInt16(Buffer, 30);
}
set
{
Writer.Write(value, 30, Buffer);
}
}
هنفتح ملف world.cs
هنضيف فيه كود ده
public bool Register(Entity ThunderCloudd)
{
if (ThunderCloudd.Owner.TimerSubscriptions == null)
{
ThunderCloudd.Owner.TimerSyncRoot = new object();
ThunderCloudd.Owner.TimerSubscriptions = new IDisposable[]
{
ThunderCloud.Add(ThunderCloudd)
};
return true;
}
return false;
}
public void Unregister(Entity Thundercloud)
{
if (Thundercloud.Owner == null || Thundercloud.Owner.TimerSubscriptions == null) return;
lock (Thundercloud.Owner.TimerSyncRoot)
{
if (Thundercloud.Owner.TimerSubscriptions != null)
{
foreach (var timer in Thundercloud.Owner.TimerSubscriptions)
timer.Dispose();
Thundercloud.Owner.TimerSubscriptions = null;
}
}
}
طبعا هيظهرلك ايرور
هنضيف فى نفس ملف
كود ده
public TimerRule<Entity> ThunderCloud;
private void ThunderCloudTimer(Entity ThunderCloud, int time)
{
if (ThunderCloud == null) return;
if (Time64.Now >= ThunderCloud.ThunderCloudStamp.AddSeconds(1))
{
ThunderCloud.ThunderCloudStamp = Time64.Now;
if (ThunderCloud.Hitpoints > 400)
ThunderCloud.Hitpoints -= 400;
else
{
Kernel.Maps[ThunderCloud.MapID].RemoveEntity(ThunderCloud);
Data data = new Data(true);
data.UID = ThunderCloud.UID;
data.ID = Data.RemoveEntity;
ThunderCloud.MonsterInfo.SendScreen(data);
ThunderCloud.MonsterInfo.SendScreen(data);
foreach (var client in Kernel.GamePool.Values)
{
if (Kernel.GetDistance(ThunderCloud.X, ThunderCloud.Y, client.Entity.X, client.Entity.Y) > 16) continue;
client.RemoveScreenSpawn(ThunderCloud, true);
}
Unregister(ThunderCloud);
return;
}
}
if ((ThunderCloud.SpawnPacket[50] == 0 && Time64.Now >= ThunderCloud.MonsterInfo.LastMove.AddMilliseconds( 750)) || ThunderCloud.SpawnPacket[50] == 128)
{
ThunderCloud.MonsterInfo.LastMove = Time64.Now;
if (ThunderCloud.MonsterInfo.InSight == 0)
{
foreach (var one in Kernel.Maps[ThunderCloud.MapID].Entities.Values.Where(i => Kernel.GetDistance(ThunderCloud.X, ThunderCloud.Y, i.X, i.Y) <= ThunderCloud.MonsterInfo.AttackRange))
{
if (one == null || one.Dead || one.MonsterInfo.Guard || one.Companion) continue;
ThunderCloud.MonsterInfo.InSight = one.UID;
Entity insight = null;
if (Kernel.Maps[ThunderCloud.MapID].Entities.ContainsKey(ThunderCloud.MonsterInfo.InS ight))
insight = Kernel.Maps[ThunderCloud.MapID].Entities[ThunderCloud.MonsterInfo.InSight];
else if (Kernel.GamePool.ContainsKey(ThunderCloud.MonsterI nfo.InSight))
insight = Kernel.GamePool[ThunderCloud.MonsterInfo.InSight].Entity;
if (insight == null || insight.Dead || (insight.MonsterInfo != null && insight.MonsterInfo.Guard))
{
ThunderCloud.MonsterInfo.InSight = 0;
break;
}
new Game.Attacking.Handle(null, ThunderCloud, insight);
break;
}
}
else
{
Entity insight = null;
if (Kernel.Maps[ThunderCloud.MapID].Entities.ContainsKey(ThunderCloud.MonsterInfo.InS ight))
insight = Kernel.Maps[ThunderCloud.MapID].Entities[ThunderCloud.MonsterInfo.InSight];
else if (Kernel.GamePool.ContainsKey(ThunderCloud.MonsterI nfo.InSight))
insight = Kernel.GamePool[ThunderCloud.MonsterInfo.InSight].Entity;
if (insight == null || insight.Dead || (insight.MonsterInfo != null && insight.MonsterInfo.Guard))
{
ThunderCloud.MonsterInfo.InSight = 0;
return;
}
new Game.Attacking.Handle(null, ThunderCloud, insight);
}
}

}
هنيجى لاخر حاجة هنفتح ملف ان بى سى
نعمل سيرش على كود
public Npcs(GameClient client)
هنضيف تحتيه
public static string WindwalkerSkills(GameClient client, ushort spellid)
{
byte level = 0;
if (spellid == 12830 || spellid == 13070 || spellid == 13080) level = 120;
if (spellid == 12840 || spellid == 12960 || spellid == 13000) level = 70;
if (spellid == 12850 || spellid == 12930 || spellid == 12990) level = 40;
if (spellid == 12860 || spellid == 12870) level = 3;
if (spellid == 12890 || spellid == 12940 || spellid == 12950 || spellid == 13090) level = 15;
if (spellid == 12970 || spellid == 13020 || spellid == 13030) level = 100;
var spell = Database.SpellTable.GetSpell(spellid, client);
if (!client.Spells.ContainsKey(spellid) && client.Entity.Level >= level) return "Available";
else if (client.Spells.ContainsKey(spellid)) return "Learned";
else return "N/A";
}
بعدين نضيف ان بى سى ده
#region WindwalkerLord
case 5158:
{
switch (npcRequest.OptionID)
{
case 0:
{
if (client.Entity.Class >= 160 && client.Entity.Class <= 165)
{

dialog.Text("Our Windwalker school was founded by Saint Wan on the principle of KINDNESS and JUSTICE. Once you decide to");
dialog.Text("~join us as a Windwalker, you take the responsibility for the security of the country against alien invaders and devils.");
if (client.Entity.Class != 165)
{
dialog.Option("I~want~to~get~promoted.", 1);
}
dialog.Option("Learn~skills.", 2);
dialog.Option("Switch~to~another~branch.", 4);
dialog.Option("I`ll~talk~to~you~later.", 255);
dialog.Send();

}
else
{
dialog.Text("You don`t look like a Windwalker. What`s the matter? If you were ever a Windwalker in either of the previous two lives, you can learn [Frost Gaze I] from me.");

dialog.Option("Learn~Frost~Gaze~I.", 3);
dialog.Send();
}
break;
}
#region Promocion
case 1:
{
if (client.Entity.Class >= 160 && client.Entity.Class <= 165)
{
if (client.Entity.Class == 165)
{
dialog.Text("You cannot be promoted anymore. You have mastered your class.");
dialog.Option("Thank you master.", 255);
dialog.Send();
}
else
{
dialog.Text("To promote now you need" + client.PromoteItemNameNeed + " level " + client.PromoteLevelNeed + ".");
dialog.Option("Promote me sir.", 7);
dialog.Send();
}
}
else
{
dialog.Text("I will not tell any of the Windwalker secrets to another class, so, good bye.");
dialog.Option("Alright.", 255);
dialog.Send();
}
break;
}
case 7:
{
if (client.Entity.Class >= 160 && client.Entity.Class <= 165)
{
if (client.Entity.Class == 165)
{
dialog.Text("You cannot be promoted anymore. You have mastered your class.");
dialog.Option("Thank you master.", 255);
dialog.Send();
}
else
{
if (client.PromoteItemNeed == 721020)
{
if (client.Inventory.Remove("moonbox"))
{
client.Entity.Update(10, "end_task", true);
client.Inventory.Add(client.PromoteItemGain, 0, 1);
client.Entity.Class++;
dialog.Text("Congratulations! You have been promoted.");
dialog.Option("Thank you master.", 255);
dialog.Send();
}
else
{
dialog.Text("You don't meet the requierments.");
dialog.Option("Ahh.", 255);
dialog.Send();
}
return;
}
if (client.Inventory.Contains(client.PromoteItemNeed, client.PromoteItemCountNeed) && client.Entity.Level >= client.PromoteLevelNeed)
{
client.Inventory.Remove(client.PromoteItemNeed, client.PromoteItemCountNeed);
client.Inventory.Add(client.PromoteItemGain, 0, 1);
client.Entity.Class++;
client.Entity.Update(10, "end_task", true);
dialog.Text("Congratulations! You have been promoted.");
dialog.Option("Thank you master.", 255);
dialog.Send();
}
else
{
dialog.Text("You don't meet the requierments.");
dialog.Option("Ahh.", 255);
dialog.Send();
}
}
}
else
{
dialog.Text("I will not tell any of the WindWalker secrets to another class, so, good bye.");
dialog.Option("Alright.", 255);
dialog.Send();
}
break;
}
#endregion
case 4:
{
if (client.Entity.IsChaser())
{
dialog.Text(" *Branches of Windwalker School*");
dialog.Text("،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ ،ھ،ھ،ھ،ھ،ھ");
dialog.Text("Stomper: Excels in melee combat with excellent attack range and remarkable recovery ability. Stomper`s exclusive skill");
dialog.Text(" can freeze enemies` blood to extend their skill cooldown time and response time.");
dialog.Text("Chaser: Excels in ranged combat. With a unique focusing skill, Chaser is able to control the power of wind to attack");
dialog.Text(" enemies far away.");
dialog.Text("،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ ،ھ،ھ،ھ،ھ،ھ");
dialog.Text("(You`re currently on the [RangedChaser] branch. Each Windwalker can switch his/her branch once every 30 days, free of charge.)");
dialog.Option("Switch~to~[MeleeStomper]~branch.", 5);
dialog.Option("I`ll~think~about~it.", 255);
dialog.Send();
}
else if (client.Entity.IsStomper())
{
dialog.Text(" *Branches of Windwalker School*");
dialog.Text("،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ ،ھ،ھ،ھ،ھ،ھ");
dialog.Text("Stomper: Excels in melee combat with excellent attack range and remarkable recovery ability. Stomper`s exclusive skill");
dialog.Text(" can freeze enemies` blood to extend their skill cooldown time and response time.");
dialog.Text("Chaser: Excels in ranged combat. With a unique focusing skill, Chaser is able to control the power of wind to attack");
dialog.Text(" enemies far away.");
dialog.Text("،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ،ھ ،ھ،ھ،ھ،ھ،ھ");
dialog.Text("(You`re currently on the [MeleeStomper] branch. Each Windwalker can switch his/her branch once every 30 days, free of charge.)");
dialog.Option("Switch~to~[RangedChaser]~branch.", 6);
dialog.Option("I`ll~think~about~it.", 255);
dialog.Send();
}
break;
}
case 5:
{
if (client.Entity.IsStomper())
client.Entity.Windwalker = 0;
else if (client.Entity.IsChaser())
client.Entity.Windwalker = 8;
else break;
Update upd = new Update(true);
upd.UID = client.Entity.UID;
upd.UpdateCount = 1;
upd.SwitchWindwalker(3277209, 1);
client.SendScreen(upd, true);
Update upd2 = new Update(true);
upd2.UID = client.Entity.UID;
upd2.UpdateCount = 1;
upd2.SwitchWindwalker(71, client.Entity.Windwalker);
client.SendScreen(upd2, true);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.JusticeChant);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.ChillingSnow);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.FreezingPelter);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.HealingSnow);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.RevengeTaill);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.ShadowofChaser);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.Omnipotence);
dialog.Text("Okay, I`ve changed your branch to [MeleeStomper].");
dialog.Option("Thanks!", 255);
dialog.Send();
break;
}
case 6:
{
if (client.Entity.IsStomper())
client.Entity.Windwalker = 0;
else if (client.Entity.IsChaser())
client.Entity.Windwalker = 8;
else break;
Update upd = new Update(true);
upd.UID = client.Entity.UID;
upd.UpdateCount = 1;
upd.SwitchWindwalker(3277209, 1);
client.SendScreen(upd, true);
Update upd2 = new Update(true);
upd2.UID = client.Entity.UID;
upd2.UpdateCount = 1;
upd2.SwitchWindwalker(71, client.Entity.Windwalker);
client.SendScreen(upd2, true);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.JusticeChant);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.ChillingSnow);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.FreezingPelter);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.HealingSnow);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.RevengeTaill);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.ShadowofChaser);
client.Entity.RemoveFlag4((ulong)Network.GamePacke ts.Update.Flags4.Omnipotence);
dialog.Text("Okay, I`ve changed your branch to [RangedChaser].");
dialog.Option("Thanks!", 255);
dialog.Send();
break;
}
case 3:
{
if (client.Entity.FirstRebornClass == 0)
{
client.AddSpell(LearnableSpell(12830));
break;
}
else if (client.Entity.FirstRebornClass == 165)
{
client.AddSpell(LearnableSpell(13070));
break;
}
else if (client.Entity.FirstRebornClass == 165 & client.Entity.SecondRebornClass == 165)
{
client.AddSpell(LearnableSpell(13080));
break;
}
else
{
client.MessageBox("You`re not qualified to learn this skill.");
break;
}

}
case 2:
{
dialog.Text("Our Windwalker school is divided into two branches: Chaser and Stomper. Chaser focuses on");
dialog.Text("~ranged combat, while Stomper excels in melee combat. I`m here representing the Chief to");
dialog.Text("~impart distinctive skills to the Windwalkers.");

dialog.Option("Learn~skills~of~Stomper.", 10);
dialog.Option("Learn~skills~of~Chaser.", 11);
dialog.Option("Learn~rebirth~skill.", 12);
dialog.Option("Learn~universal~skills.", 13);
dialog.Send();
break;
}
case 12:
{
dialog.Text("Frost Gaze is an exclusive rebirth skill for Windwalker. The heroes who got reborn to be Windwalker can learn Frost Gaze I. If both of your precious andd");
dialog.Text("~current Class are Windwalker, you can learn Frost Gaze II. While for Windwalkers who were also a Windwalker in previous two lives, they can learn Frost Gaze III.");

if (client.Entity.FirstRebornClass == 0)
dialog.Option("Frost~Gaze~I.", 3);
if (client.Entity.FirstRebornClass == 165)
dialog.Option("Frost~Gaze~II.", 3);
if (client.Entity.SecondRebornClass == 165)
dialog.Option("Frost~Gaze~III.", 3);
dialog.Option("I~want~to~learn~other~skills.", 2);
dialog.Option("I`ll~talk~to~you~later.", 255);
dialog.Send();
break;
}
case 13:
{
dialog.Text("Omnipotence and Justice Chant are basic skills for Windwalker, which are available to both Chaser and Stomper learners. I`ll teach you if you want.");

dialog.Option("Omnipotence~[Lv.3].~(" + WindwalkerSkills(client, 12860) + ")", 40);
dialog.Option("JusticeChant~[Lv.3].~(" + WindwalkerSkills(client, 12870) + ")", 41);
dialog.Option("I~want~to~learn~other~skills.", 2);
dialog.Option("I`ll~talk~to~you~later.", 255);
dialog.Send();
break;
}
case 40:
case 41:
{
ushort spellid = 12800;
switch (npcRequest.OptionID)
{
case 40: { spellid += 60; break; }
case 41: { spellid += 70; break; }
}
if (WindwalkerSkills(client, spellid) == "Learned")
{
dialog.Text("FellowBrother has already acquired this skill. Go practice and feel its power.");

dialog.Option("Okay.", 2);
dialog.Send();
break;
}
else if (WindwalkerSkills(client, spellid) == "Available")
{
client.AddSpell(LearnableSpell(spellid));
}
else
{
dialog.Text("The study of [" + SpellTable.GetSpell(spellid, 0).Name + "] requires FellowBrother to reach a certain level. FellowBrother, you can find me when you reach the required Level.");

dialog.Option("I`ll~see~you!", 2);
dialog.Send();
}
break;
}
case 10:
{
dialog.Text("The Stomper branch has developed overwhelming melee skills which enable the caster to disable an enemy with swift and flexible fighting moves.");
dialog.Text("~FellowBrother, which skill would you like to learn?");

dialog.Option("AngerofStomper~[Lv.1].~(" + WindwalkerSkills(client, 12980) + ")", 20);
dialog.Option("BurntFrost~[Lv.15].~(" + WindwalkerSkills(client, 12940) + ")", 21);
dialog.Option("HealingSnow~[Lv.15].~(" + WindwalkerSkills(client, 12950) + ")", 22);
dialog.Option("RageofWar~[Lv.40].~(" + WindwalkerSkills(client, 12930) + ")", 23);
dialog.Option("HorrorofStomper~[Lv.40].~(" + WindwalkerSkills(client, 12990) + ")", 24);
dialog.Option("ChillingSnow~[Lv.70].~(" + WindwalkerSkills(client, 12960) + ")", 25);
dialog.Option("PeaceofStomper~[Lv.70].~(" + WindwalkerSkills(client, 13000) + ")", 26);
dialog.Option("Next.", 27);
dialog.Send();
break;
}
case 27:
{
dialog.Text("The Stomper branch has developed overwhelming melee skills which enable the caster to disable an enemy with swift and flexible fighting moves.");
dialog.Text("~FellowBrother, which skill would you like to learn?");

dialog.Option("RevengeTail~[Lv.100].~(" + WindwalkerSkills(client, 13030) + ")", 28);
dialog.Option("FreezingPelter~[Lv.100].~(" + WindwalkerSkills(client, 13020) + ")", 29);
dialog.Option("I~want~to~learn~other~skills.", 2);
dialog.Option("I`ll~talk~to~you~later.", 255);
dialog.Option("Previous.", 10);
dialog.Send();
break;
}
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 28:
case 29:
{
ushort spellid = 12900;
switch (npcRequest.OptionID)
{
case 20: { spellid += 80; break; }
case 21: { spellid += 40; break; }
case 22: { spellid += 50; break; }
case 23: { spellid += 30; break; }
case 24: { spellid += 90; break; }
case 25: { spellid += 60; break; }
case 26: { spellid += 100; break; }
case 28: { spellid += 130; break; }
case 29: { spellid += 120; break; }
}
if (WindwalkerSkills(client, spellid) == "Learned")
{
dialog.Text("FellowBrother has already acquired this skill. Go practice and feel its power.");

dialog.Option("Okay.", 2);
dialog.Send();
break;
}
else if (WindwalkerSkills(client, spellid) == "Available")
{
client.AddSpell(LearnableSpell(spellid));
}
else
{
dialog.Text("The study of [" + SpellTable.GetSpell(spellid, 0).Name + "] requires FellowBrother to reach a certain level. FellowBrother, you can find me when you reach the required Level.");

dialog.Option("I`ll~see~you!", 2);
dialog.Send();
}
break;
}
case 11:
{
dialog.Text("The Chaser branch is famous for its ability to control wind and outstanding ranged attacks.");
dialog.Text("~FellowBrother, which skill would you like to learn?");

dialog.Option("SwirlingStorm~[Lv.15].~(" + WindwalkerSkills(client, 12890) + ")", 30);
dialog.Option("ShadowofChaser~[Lv.15].~(" + WindwalkerSkills(client, 13090) + ")", 31);
dialog.Option("TripleBlasts~[Lv.40].~(" + WindwalkerSkills(client, 12850) + ")", 32);
dialog.Option("Thundercloud~[Lv.70]~[" + WindwalkerSkills(client, 12840) + "]", 33);
dialog.Option("Thunderbolt~[Lv.100]~[" + WindwalkerSkills(client, 12970) + "]", 34);
dialog.Option("I~want~to~learn~other~skills.", 2);
dialog.Option("I`ll~talk~to~you~later.", 255);
dialog.Send();
break;
}
case 30:
case 31:
case 32:
case 33:
case 34:
{
ushort spellid = 12800;
switch (npcRequest.OptionID)
{
case 30: { spellid += 90; break; }
case 31: { spellid += 290; break; }
case 32: { spellid += 50; break; }
case 33: { spellid += 40; break; }
case 34: { spellid += 170; break; }
}
if (WindwalkerSkills(client, spellid) == "Learned")
{
dialog.Text("FellowBrother has already acquired this skill. Go practice and feel its power.");

dialog.Option("Okay.", 2);
dialog.Send();
break;
}
else if (WindwalkerSkills(client, spellid) == "Available")
{
client.AddSpell(LearnableSpell(spellid));
}
else
{
dialog.Text("The study of [" + SpellTable.GetSpell(spellid, 0).Name + "] requires FellowBrother to reach a certain level. FellowBrother, you can find me when you reach the required Level.");

dialog.Option("I`ll~see~you!", 2);
dialog.Send();
}
break;
}
}
break;
}
#endregion
بعدين ان بى سى ريبورن واسكند
هنبدله بى ده

#region RebirthMaster
case 59558:
{
dialog.Avatar(67);
switch (npcRequest.OptionID)
{
case 0:
{

dialog.Text("I devote all my life to the research of eternity. And finally I Know the secret of");
dialog.Text(" rebirth! Well, anything I can help you with?");
dialog.Option("1st Rebirth.", 1);
dialog.Option("2nd Rebirth.", 2);
dialog.Option("Reincarnation.", 3);
dialog.Option("Reallot my Attribute Points.", 4);
dialog.Option("Just Passing By.", 255);
dialog.Send();
break;
}
case 175:
{
dialog.Text("It`s a magic stone which is required for the 1st rebirth. There`re 2 ways you can get it: a) Buy it from the Shopping Mall,");
dialog.Text("~b) Collect 7 Normal gems and a bottle of Clean Water, swap them for a Celestial Stone from Celestine (Twin City 365,92).");
dialog.Text("~Tips: You can dig for gems in Mine Caves in main cities. As to the Clean Water, you try your luck on the Water Devil in the Adventure Islands.");

dialog.Option("I~see.", 255);
dialog.Send();
break;
}
case 176:
{
dialog.Text("After the rebirth, you`ll receive some extra attribute points and start from Level 15. Every time you level up, you`ll gain some attribute points, which you can allot to different attributes at your will.");

dialog.Option("Back.", 1);
dialog.Option("I~see.", 255);
dialog.Send();
break;
}
case 177:
{
dialog.Text("Some of the skills you`ve leant are completely forgotten after the rebirth, while the others are forgotten for the moment.");
dialog.Text("~They can have an epiphany. The epiphany makes the skill leap, after it reaches to half of the former level before rebirth.");

dialog.Option("Back.", 1);
dialog.Option("I~see.", 255);
dialog.Send();
break;
}
case 190:
{
dialog.Text("It`s a magic stone which is required for the 1st rebirth. There`re 2 ways you can get it: a) Buy it from the Shopping Mall,");
dialog.Text("~b) Collect 7 Normal gems and a bottle of Clean Water, swap them for a Celestial Stone from Celestine (Twin City 365,92).");
dialog.Text("~Tips: You can dig for gems in Mine Caves in main cities. As to the Clean Water, you try your luck on the Water Devil in the Adventure Islands.");

dialog.Option("I~see.", 255);
dialog.Send();
break;
}
case 1:
{
if (client.Entity.Reborn == 0)
{
if (client.Entity.Level >= 120 || client.Entity.Class > 100 && client.Entity.Level >= 110)
{
if (client.Entity.Class % 10 == 5)
{
if (client.Inventory.Contains(721259, 1))
{
dialog.Text("If you want to get reborn, you should reach at least Level 120 (Level 110 if you`re a Water Taoist), and be promoted to the highest job title.");
dialog.Text("~Besides, you should give me a Celestial Stone. After rebirth, you`ll be able to freely allot your attribute points and learn more powerful skills.");

dialog.Option("Celestial~Stone?", 175);
dialog.Option("Allot~attribute~points?", 176);
dialog.Option("Powerful~skills?", 177);
dialog.Option("I~would~like~to~be~reborn.", 12);
dialog.Option("Let~me~think~it~over.", 255);
dialog.Send();
}
else
{
dialog.Text("I`m really sorry, but I can`t do anything without the Celestial Stone.");

dialog.Option("Celestial~Stone?", 190);
dialog.Send();
}
}
else
{

dialog.Text("You need to master your class. First!.");

dialog.Option("I~see.", 255);
dialog.Send();

}
}
else
{
dialog.Text("Your~Level~is~lower~than~the~required.~Please~trai n~harder.");

dialog.Option("I~see.", 255);
dialog.Send();
}
}
else
{
dialog.Text("You~have~been~reborn.~Please~work~harder.");

dialog.Option("Oh,~I~see.", 255);
dialog.Send();
}
break;
}
case 12:
{
if (client.Entity.Reborn == 0)
{
if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120))
{
dialog.Text("There`re 2 ways to get reborn. Attention: Only the items you equipped will be degraded during the rebirth.");

dialog.Option("Blessed~rebirth.", 181);
dialog.Option("Normal~rebirth.", 180);
dialog.Send();
}
else
{
dialog.Text("You cannot reborn if your level is not 110+ for water saints and 120+ for other masters.");
dialog.Option("Ahh.", 255);
dialog.Send();
}
}
else
{
dialog.Text("You cannot reborn again here. Alex, an elder who lives in Ape Canyon, will tell you about the third life.");
dialog.Option("Thank you.", 255);
dialog.Send();
}
break;
}
case 181:
{
dialog.Text("I dedicate myself to studying the blessed force of eternity, which absorbs the essences of the universe.");
dialog.Text("~During the rebirth, a random piece of your equipment will be added with blessed attribute.");
dialog.Text("But please be noted that epic weapons can only be blessed when you get reborn into the same class (for instance: Trojan-Trojan, Ninja-Ninja).");

dialog.Option("I~agree.", 13);
dialog.Option("Back.", 12);
dialog.Option("Let~me~think~it~over.", 255);
dialog.Send();
break;
}
case 180:
{
dialog.Text("Unlike blessed rebirth, you won`t get blessed attribute added to your equipment.");
dialog.Text("~However, you will receive a Super gem, instead. So, select a class for your new life, first!");

dialog.Option("Okay.", 15);
dialog.Option("Back.", 12);
dialog.Option("Let~me~think~it~over.", 255);
dialog.Send();
break;
}
case 15:
{
if (client.Entity.Reborn == 0)
{
if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120))
{
dialog.Text("Select the super gem you desire.");
dialog.Option("SuperPhoenixGem.", 203);
dialog.Option("SuperDragonGem.", 213);
dialog.Option("SuperFuryGem.", 223);
dialog.Option("SuperRainbowGem.", 233);
dialog.Option("SuperVioletGem.", 253);
dialog.Option("SuperMoonGem.", 254);
dialog.Option("SuperKylinGem.", 243);
dialog.Option("Nothing thank you.", 255);
dialog.Send();
}
else
{
dialog.Text("You cannot reborn if your level is not 110+ for water saints and 120+ for other masters.");
dialog.Option("Ahh.", 255);
dialog.Send();
}
break;
}
else
{
dialog.Text("You cannot reborn again here. Alex, an elder who lives in Ape Canyon, will tell you about the third life.");
dialog.Option("Thank you.", 255);
dialog.Send();
}
break;
}
case 185:
{
dialog.Text("You`ve reached the highest of the class. Now, you can select one of the followings as your new class:");

dialog.Option("Pirate.", (byte)(70 + 13));
dialog.Option("Wind.Guard.", (byte)(161 + npcRequest.OptionID));
dialog.Option("Dragon-Warror.", (byte)(80 + 13));
dialog.Option("Previous~page.", 13);
dialog.Option("I`ll~think~about~it.", 255);
dialog.Send();
break;
}
case 13:
{
if (client.Entity.Reborn == 0)
{
if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120))
{
dialog.Text("You`ve reached the highest of the class. Now, you can select one of the followings as your new class:");

dialog.Option("Trojan.", (byte)(10 + npcRequest.OptionID));
dialog.Option("Warrior.", (byte)(20 + npcRequest.OptionID));
dialog.Option("Archer.", (byte)(40 + npcRequest.OptionID));
dialog.Option("WaterTaoist.", (byte)(132 + npcRequest.OptionID));
dialog.Option("FireTaoist.", (byte)(142 + npcRequest.OptionID));
dialog.Option("Ninja.", (byte)(50 + npcRequest.OptionID));
dialog.Option("Monk.", (byte)(60 + npcRequest.OptionID));
dialog.Option("More~choices.", 185);
dialog.Send();
}
else
{
dialog.Text("You cannot reborn if your level is not 110+ for water saints and 120+ for other masters.");
dialog.Option("Ahh.", 255);
dialog.Send();
}
break;
}
else
{
dialog.Text("You have been reborn. Please work harder.");
dialog.Option("Thank you.", 255);
dialog.Send();
}
break;
}
#region Reincarnation
case 3:
{
dialog.Text("From now on, have total control of your life! If you've been Reborn twice and are at least Level 110, just bring me some Oblivion Dew and I'll help you become Reincarnated! After the Reincarnation, your class skills will revert to level 0,");
dialog.Text("~but they`ll return to their previous levels when you reach Level 110, again. If your classes have been the same for all three lives, including your current one, you can learn the Pure Skills from your class trainer,");
dialog.Text("~in the job center.");

dialog.Option("I~want~to~get~Reincarnated.", 5);
dialog.Option("Where~can~I~get~the~Dew?", 6);
dialog.Send();
break;
}
case 5:
{
if (client.Entity.Reborn == 2 && client.Entity.Level >= 120)
{
client.Send(new Data(true)
{
UID = client.Entity.UID,
ID = Data.OpenWindow,
dwParam = Data.WindowCommands.Reincarnation,
wParam1 = client.Entity.X,
wParam2 = client.Entity.Y
});
}
else
{
dialog.Text("You have not been Reborn twice. I`m afraid you will not withstand the power of the Oblivion Dew. Come to me when you get stronger.");

dialog.Option("Got~it!~Thanks!", 255);
dialog.Send();
}
break;
}
case 6:
{
dialog.Text("Oblivion Dew is available in the Honor Store and the Horse Race Store. You can use your Honor Points or Horse Race Points to purchase one.");

dialog.Option("Got~it!~Thanks!", 255);
dialog.Send();
break;
}
#endregion
#region Reallot Attributes
case 4:
{
dialog.Text("Reborn~level~70+~players~can~redistribute~their~at tribute~points~at~the~cost~of~a~dragonball.");

dialog.Option("I~will~reallot~my~points.", 8);
dialog.Option("Let~me~think~it~over.", 255);
dialog.Send();
break;
}
case 8:
{
if (client.Entity.Reborn > 0)
{
if (client.Entity.Level >= 70)
{
if (client.Inventory.Contains(1088000, 1))
{
client.Inventory.Remove(1088000, 1);
if (client.Entity.Reborn != 0)
{
client.Entity.Agility = 0;
client.Entity.Strength = 0;
client.Entity.Vitality = 1;
client.Entity.Spirit = 0;
if (client.Entity.Reborn == 1)
{
client.Entity.Atributes = (ushort)(client.ExtraAtributePoints(client.Entity. FirstRebornLevel, client.Entity.FirstRebornLevel)
+ 52 + 3 * (client.Entity.Level - 15));
}
else
{
client.Entity.Atributes = (ushort)(client.ExtraAtributePoints(client.Entity. FirstRebornLevel, client.Entity.FirstRebornClass) +
client.ExtraAtributePoints(client.Entity.SecondReb ornLevel, client.Entity.SecondRebornClass) + 52 + 3 * (client.Entity.Level - 15));
}
}
}
else
{
dialog.Text("Although~you~are~reborn,~you~have~not~reached~leve l~70.~Please~put~in~more~efforts.");

dialog.Option("I~see.", 255);
dialog.Send();
}
}
else
{
dialog.Text("Sorry,~you~do~not~have~a~dragonball.");

dialog.Option("I~see.", 255);
dialog.Send();
}
}
else
{
dialog.Text("You~cannot~reallot~your~ability~points~unless~you~ are~reborn~and~above~level~70.");

dialog.Option("I~see.", 255);
dialog.Send();
}
break;
}
#endregion
#region 2nd reborn
case 2:
{
if (client.Entity.Reborn == 1)
{
dialog.Text("Good. You`ve met the requirements for the second rebirth. You`ll face ElmistRo challenges till you complete the big quest.");
dialog.Text("~Once you manage to get reborn, you will receive unique aura, be able to learn Bless, and enjoy many benefits.");
dialog.Text("~If you don`t want to bother with the quest, just go buy an Exemption Token!");
dialog.Option("Exemption~Token?", 9);
dialog.Option("Hear~about~the~quest.", 254);
dialog.Option("Back.", 255);
dialog.Option("Never~mind.~I~quit.", 255);
dialog.Send();
}
else if (client.Entity.Reborn == 2)
{
dialog.Text("Impressive! You are already reborn twice!");
dialog.Option("Take me to the Evil Abyss.", 254);
dialog.Option("Yup!", 255);
dialog.Send();
}
break;
}
case 9:
{
if (client.Entity.Reborn == 1)
{
if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120))
{
dialog.Text("Select the class you want to reborn in.");
dialog.Option("Trojan.", 11);
dialog.Option("Warrior.", 21);
dialog.Option("Archer.", 41);
dialog.Option("WaterTaoist.", 132);
dialog.Option("FireTaoist.", 142);
dialog.Option("Ninja.", 51);
dialog.Option("Monk.", 61);
dialog.Option("Pirate.", 71);
dialog.Option("Wind.Guard.", 161);
dialog.Option("Dragon-Warror", 81);
dialog.Send();
}
else
{
dialog.Text("If you are a water saint you need level 110+, else you need 120+.");
dialog.Option("I'll just leave", 255);
dialog.Send();
break;
}
}
else
{
dialog.Text("Impressive! You are already reborn twice!");
dialog.Option("Take me to the Evil Abyss.", 254);
dialog.Option("Yup!", 255);
dialog.Send();
break;
}
break;
}
case 11:
case 21:
case 41:
case 51:
case 61:
case 71:
case 81:
case 132:
case 142:
case 161:
{
if (npcRequest.OptionID == 255) return;
if (client.Entity.Reborn == 1)
{
if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120))
{
if (client.Inventory.Contains(723701, 1) || client.Quests.GetQuest(QuestID.SecondQuestStageFou r) != null && client.Quests.CheckQuest(QuestID.SecondQuestStageF our) == QuestPacket.QuestData.QuestStatus.Finished)
{
if (client.Reborn(npcRequest.OptionID))
{
client.Inventory.Remove(723701, 1);
}
else
{
dialog.Text("You need two free slots in your inventory.");
dialog.Option("I'll just leave", 255);
dialog.Send();
break;
}
}
}
else
{
dialog.Text("If you are a water saint you need level 110+, else you need 120+.");
dialog.Option("I'll just leave", 255);
dialog.Send();
break;
}
}
else
{
dialog.Text("You need to be in the second life to be able to get the third life.");
dialog.Option("I'll just leave", 255);
dialog.Send();
break;
}
break;
}
case 254:
{
if (client.Entity.Reborn == 1 && client.Quests.GetQuest(QuestID.SecondQuestStageFou r) != null && client.Quests.CheckQuest(QuestID.SecondQuestStageF our) == QuestPacket.QuestData.QuestStatus.Finished)
{
dialog.Text("You have completed your quests with protect performance. you can take your");
dialog.Text(" Second Rebirth now.");
dialog.Option("I want second rebirth.", 9);
dialog.Option("I don't want second rebirth.", 255);
dialog.Send();
}
else
{
dialog.Text("It`s a really ElmistRo way to go... You`re going to meet many trials in the Evil Abyss. What`s more, after you get reborn,"); dialog.Text("~you will need to start over again and make triple efforts to level-up. You`d better think it over before making such a vital decision."); dialog.Text("~If you`ve made up your mind to accept this quest, I`ll send you to the Evil Abyss.");
dialog.Option("Yes,~please!", 253);
dialog.Option("I~don`t~want~to~risk~my~life.", 255);
dialog.Send();
}
break;
}
case 253:
{
var coords = Kernel.Maps[1700].RandomCoordinates(692, 709, 40);
client.Entity.TeleportTeam(1700, coords.Item1, coords.Item2);
break;
}
#endregion
default:
{
if (client.Entity.Reborn == 0)
{
if (client.Entity.Class % 10 == 5 && client.Entity.Level >= (client.Entity.Class == 135 ? 110 : 120))
{
if (npcRequest.OptionID == 255)
return;
if (npcRequest.OptionID >= 200 && npcRequest.OptionID <= 254)
{
client.SelectedGem = (byte)(npcRequest.OptionID % 100);
if (client.SelectedGem == 54)
client.SelectedGem = 63;
if (client.Entity.Reborn == 0)
{
byte id = 4;
dialog.Text("Select the class you want to reborn in.");
dialog.Option("Trojan.", (byte)(10 + id));
dialog.Option("Warrior.", (byte)(20 + id));
dialog.Option("Archer.", (byte)(40 + id));
dialog.Option("WaterTaoist.", (byte)(132 + id));
dialog.Option("FireTaoist.", (byte)(142 + id));
dialog.Option("Ninja.", (byte)(50 + id));
dialog.Option("Monk.", (byte)(60 + id));
dialog.Option("Pirate.", (byte)(70 + id));
dialog.Option("Wind.Guard.", (byte)(161 + id));
dialog.Option("Dragon-Warror.", (byte)(80 + id));
dialog.Send();
break;
}
else
{
dialog.Text("You cannot reborn again here. Alex, an elder who lives in Ape Canyon, will tell you about the third life.");
dialog.Option("Thank you.", 255);
dialog.Send();
}
}
else
{
if (client.Inventory.Contains(721259, 1))
{
byte _class = (byte)(npcRequest.OptionID - npcRequest.OptionID % 10);
if (_class > 100)
_class += 2;
byte type = (byte)(npcRequest.OptionID - _class);
if (_class < 100)
_class++;
if (type != 4)
{
_class -= 10;
}
if (client.Reborn(_class))
{
client.Inventory.Remove(721259, 1);
if (type == 4)
{
if (client.SelectedGem != 0)
{
uint gemid = (uint)(client.SelectedGem + 700000);
client.Inventory.Add(gemid, 0, 1);
}
}
else
{
int availableshots = 0;
for (byte count = 0; count < 19; count++)
{
if (!client.Equipment.Free(count))
{
if (client.Equipment.TryGetItem(count).Bless == 0)
{
availableshots++;
}
}
}
if (availableshots != 0)
{
byte ex = (byte)Kernel.Random.Next(20);
if (!client.Equipment.Free(ex) && client.Equipment.Objects[ex - 1].Position != (byte)PacketHandler.Positions.Steed)
{
if (client.Equipment.TryGetItem(ex).Bless == 0)
{
var item = client.Equipment.TryGetItem(ex);
item.Bless = 1;
item.Mode = ElmistRo.Game.Enums.ItemMode.Update;
item.Send(client);
ElmistRo.Database.ConquerItemTable.UpdateBless(ite m);
}
}
}
}
}
else
{
dialog.Text("Sorry, but you need atleast 2 free spaces in your inventory.");
dialog.Option("Ohh.", 255);
dialog.Send();
}
}
}
}
else
{
dialog.Text("You have been reborn. Please work harder.");
dialog.Option("Thank you.", 255);
dialog.Send();
}
}
break;
}
}
break;
}
#endregion
هتفتح فولدر
Game\Features\Reincarnation
وهنفتح ملف هاندل هنلاقيه جوه فولدر وهنبحث عن كود ده
#region Remove Extra Skill
هنضيف فيه كود ده
if (client.Entity.FirstRebornClass == 165 && client.Entity.SecondRebornClass == 165 && client.Entity.Class == 165)
{
WontAdd(ElmistRo.Game.Enums.SkillIDs.FrostGazeI);

}
وبعدين نفس ملف هنبحث عن كود ده
switch (client.Entity.FirstRebornClass)
هنضيف ده فيه تحتيه
case 165:
{
Add(Game.Enums.SkillIDs.FrostGazeI);
Add(Game.Enums.SkillIDs.Thundercloud);
Add(Game.Enums.SkillIDs.TripleBlasts);
Add(Game.Enums.SkillIDs.Omnipotence);
Add(Game.Enums.SkillIDs.JusticeChant);
Add(Game.Enums.SkillIDs.BurntFrost);
Add(Game.Enums.SkillIDs.HealingSnow);
Add(Game.Enums.SkillIDs.ChillingSnow);
Add(Game.Enums.SkillIDs.Thunderbolt);
Add(Game.Enums.SkillIDs.AngerofStomper);
Add(Game.Enums.SkillIDs.HorrorofStomper);
Add(Game.Enums.SkillIDs.RageofWar);
Add(Game.Enums.SkillIDs.PeaceofStomper);
Add(Game.Enums.SkillIDs.FreezingPelter);
Add(Game.Enums.SkillIDs.RevengeTail);
Add(Game.Enums.SkillIDs.Circle);
Add(Game.Enums.SkillIDs.Rectangle);
Add(Game.Enums.SkillIDs.FrostGazeII);
Add(Game.Enums.SkillIDs.FrostGazeIII);
Add(Game.Enums.SkillIDs.ShadowofChaser);
Add(Game.Enums.SkillIDs.ThundercloudAttack);
Add(Game.Enums.SkillIDs.DestinyFire);
Add(Game.Enums.SkillIDs.FireShower);
Add(Game.Enums.SkillIDs.WheelOfDevastation);
break;
}
}

طبعا هتقولى ايه ده ياعم ايه كمية الايرورات ديه تعالى نحلها مع بعض
شايفين كلمة SkillIDs هتدوسو عليها اف 12 وهتعملو ده
هضيفه تحت اى كود اسكل الاسكلات ديه
FrostGazeI = 12830,
Thundercloud = 12840,
TripleBlasts = 12850,
Omnipotence = 12860,
JusticeChant = 12870,
SwirlingStorm = 12890,
RageofWar = 12930,
BurntFrost = 12940,
HealingSnow = 12950,
ChillingSnow = 12960,
Thunderbolt = 12970,
AngerofStomper = 12980,
HorrorofStomper = 12990,
PeaceofStomper = 13000,
FreezingPelter = 13020,
RevengeTail = 13030,
Circle = 13050,
Rectangle = 13060,
FrostGazeII = 13070,
FrostGazeIII = 13080,
ShadowofChaser = 13090,
ThundercloudAttack = 13190,
DestinyFire = 13362,
FireShower = 13363,
WheelOfDevastation = 13364,
بس كده الايرور اتحل بكده عملنا الفريست ريبورن تعالو نعمل السكند ريبورن
فى ملف الهاندل هنبحث عن كود ده
switch (client.Entity.SecondRebornClass)
هنضيف ده تحتيه
case 165:
{
Add(Game.Enums.SkillIDs.FrostGazeI);
Add(Game.Enums.SkillIDs.Thundercloud);
Add(Game.Enums.SkillIDs.TripleBlasts);
Add(Game.Enums.SkillIDs.Omnipotence);
Add(Game.Enums.SkillIDs.JusticeChant);
Add(Game.Enums.SkillIDs.BurntFrost);
Add(Game.Enums.SkillIDs.HealingSnow);
Add(Game.Enums.SkillIDs.ChillingSnow);
Add(Game.Enums.SkillIDs.Thunderbolt);
Add(Game.Enums.SkillIDs.AngerofStomper);
Add(Game.Enums.SkillIDs.HorrorofStomper);
Add(Game.Enums.SkillIDs.RageofWar);
Add(Game.Enums.SkillIDs.PeaceofStomper);
Add(Game.Enums.SkillIDs.FreezingPelter);
Add(Game.Enums.SkillIDs.RevengeTail);
Add(Game.Enums.SkillIDs.Circle);
Add(Game.Enums.SkillIDs.Rectangle);
Add(Game.Enums.SkillIDs.FrostGazeII);
Add(Game.Enums.SkillIDs.FrostGazeIII);
Add(Game.Enums.SkillIDs.ShadowofChaser);
Add(Game.Enums.SkillIDs.ThundercloudAttack);
Add(Game.Enums.SkillIDs.DestinyFire);
Add(Game.Enums.SkillIDs.FireShower);
Add(Game.Enums.SkillIDs.WheelOfDevastation);
break;
}
وبعدين نبحث عن كود ده
#region Low level items
هنزل تحت لغايت ما نلاقى اسامى الشخصيات
هنضيف الشخصية الجديدة تحت اى شخصية
#region Windwalker
case 165:
{
switch (Second)
{
case 61: break;
default:
WontAdd(Enums.SkillIDs.FrostGazeI);
WontAdd(Enums.SkillIDs.Thundercloud);
WontAdd(Enums.SkillIDs.TripleBlasts);
WontAdd(Enums.SkillIDs.Omnipotence);
WontAdd(Enums.SkillIDs.JusticeChant);
WontAdd(Enums.SkillIDs.SwirlingStorm);
WontAdd(Enums.SkillIDs.RageofWar);
WontAdd(Enums.SkillIDs.BurntFrost);
WontAdd(Enums.SkillIDs.HealingSnow);
WontAdd(Enums.SkillIDs.ChillingSnow);
WontAdd(Enums.SkillIDs.Thunderbolt);
WontAdd(Enums.SkillIDs.AngerofStomper);
WontAdd(Enums.SkillIDs.HorrorofStomper);
WontAdd(Enums.SkillIDs.PeaceofStomper);
WontAdd(Enums.SkillIDs.FreezingPelter);
WontAdd(Enums.SkillIDs.RevengeTail);
WontAdd(Enums.SkillIDs.Circle);
WontAdd(Enums.SkillIDs.Rectangle);
WontAdd(Enums.SkillIDs.FrostGazeII);
WontAdd(Enums.SkillIDs.FrostGazeIII);
WontAdd(Enums.SkillIDs.ShadowofChaser);
WontAdd(Enums.SkillIDs.ThundercloudAttack);
WontAdd(Enums.SkillIDs.DestinyFire);
WontAdd(Enums.SkillIDs.FireShower);
WontAdd(Enums.SkillIDs.WheelOfDevastation);
break;
}
break;
}
#endregion
وبعدين فى نفس ملف هنبحث عن كود ده
#region Spells
تحتيه هنضيف شخصية الجديدة
#region Windwalker

if (PreviousClass == 165)
{
if (client.Entity.Class != 161)
{
switch (spell.ID)
{
case 12830:
case 12840:
case 12850:
case 12860:
case 12870:
case 12880:
case 12890:
case 12930:
case 12940:
case 12950:
case 12960:
case 12970:
case 12980:
case 12990:
case 13000:
case 13020:
case 13030:
case 13190:
case 13050:
case 13060:
case 13070:
case 13080:
case 13090:
case 13360:
client.RemoveSpell(spell);
break;
}
}
}

#endregion
بعدين هنبحث تانى
#region Spells
هنضيف الشخصية الجديدة
#region Windwalker
if (PreviousClass == 165)
{
if (client.Entity.Class != 161)
{
switch (aspell.ID)
{
case 12830:
case 12840:
case 12850:
case 12860:
case 12870:
case 12880:
case 12890:
case 12930:
case 12940:
case 12950:
case 12960:
case 12970:
case 12980:
case 12990:
case 13000:
case 13020:
case 13030:
case 13190:
case 13050:
case 13060:
case 13070:
case 13080:
case 13090:
case 13360:
client.RemoveSpell(aspell);
break;
}
}
}
#endregion
بعدين هنبحث عن كود ده
#region Add Extra Skill
هنضيف فيه كود ده
if (client.Entity.FirstRebornClass == 165 && client.Entity.SecondRebornClass == 165 && client.Entity.Class == 165)
{
WontAdd(ElmistRo.Game.Enums.SkillIDs.FrostGazeI);
WontAdd(ElmistRo.Game.Enums.SkillIDs.FrostGazeIII) ;

}
بس كده معاك شخصية جديدة كاملة مكملة والكمال لله واحده
ديه الايتم بتاعت الشخصية
تحميل الملف (عفواً لايمكن عرض الروابط في الإرشيف)

ابو حمزه9
2019-07-26, 09:03 PM
تسلم أيدك ياشق :d

ابو حمزه9
2019-07-26, 09:04 PM
جبتة في وقتة :o

Tefa
2019-07-26, 10:41 PM
عاش

uncelsam
2019-10-24, 05:54 PM
حاجه فظيعه

mohammedshafik
2023-05-25, 12:57 PM
thxxxx

youssef12345
2023-05-28, 02:02 AM
ty

Start5503777
2023-10-09, 08:35 PM
طيب لو عاوز اضيف النينجا والمونك في سورس 5095

xblack99
2024-02-09, 10:23 PM
hytrth

hegazii4
2024-03-04, 04:21 PM
uhhha

yehudityabahy
2024-08-03, 06:24 PM
â‌¤ï¸ڈ

yehudityabahy
2024-08-03, 06:25 PM
❤️

ModyMohamedAdel
2024-08-09, 08:04 PM
عاش

MohamedModyAdel
2024-09-30, 08:25 PM
asdasd

المستشار
2024-11-15, 04:57 PM
تسلم ايدك ي حازم