منتدي اكواد

منتدي اكواد (https://code.vpscairo.com/index.php)
-   تطوير سيرفرات كونكر (https://code.vpscairo.com/forumdisplay.php?f=11)
-   -   اضافه شخصية Windwalker (https://code.vpscairo.com/showthread.php?t=1048)

محمد ياسر 2019-07-26 07:53 PM

اضافه شخصية Windwalker
 

السلام عليكم ورحمة الله وبركاته
اتمني تكونوا في صحه وعافيه
الموضوع ده قديم اووي بس لناس الي بتحاول ترفع سورس ليه من 5700 وهي طالعه بتعمل ابجريد للكل فايكون مفيد انه تشوف الموضوع ده يلا نبداء


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

هتنزل لحد دى
كود PHP:

 if (client.Entity.Class >= 80 && client.Entity.Class <= 85) 

فوقيها هتحط دى
كود PHP:

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

هتنزل هتلاقى سطر بالشكل دة
كود PHP:

 if (client.Entity.Class >= 100 

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

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

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

هتحط دة
كود PHP:

 #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 

هتروح ل فويد دة
كود PHP:

 public static ushort ItemPosition(uint ID) 

تحت دى هتحط دول
كود PHP:

UInt32 iType = ID / 1000; 

كود PHP:

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

تحت دى
كود PHP:

 UInt32 iType = itemid / 1000; 

هتحط دول
كود PHP:

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

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

 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
كود PHP:

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; 

هتروح باكت هندل هتبحث عن

شفرة الى بالشكل دة
كود PHP:

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;
                                } 

وهتبزبط سطر دة
كود PHP:

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

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

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

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

تحت دة
كود PHP:

client.Entity.Class = reader.ReadByte("Class"); 

هتحط دة
كود PHP:

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

وهتروح فويد SaveEntity

وهتحط دة جوة
كود PHP:

.Set("Windwalker", e.Windwalker) 

وهتروح فويد CreateEntity

وتنزل لحد
كود PHP:

 switch (eC.Class) 

هتنزل لحد
كود PHP:

 using (var cmd = new MySqlCommand(MySqlCommandType.INSERT)) 

وتزود دة ف الاخر قبل كلمة
كود PHP:

 .Execute(); 

كود PHP:

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

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

هتروح فويد
كود PHP:

public byte[] ToArray() 

وضيف دى
كود PHP:

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

وبعدين هتعمل عمود ف entities
كود PHP:

Windwalker  bigint  20  0   -1  0   0   0   0   0   0                   0   0 

هتدخل ع كلاس DataHolder

تحت دى
كود PHP:

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

هتحط دى
كود PHP:

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

وتحت دى
كود PHP:

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

هتحط دى
كود PHP:

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

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

فوق دى
كود PHP:

 job = "Monk[" + lvl + "]"; 

هتحط دى
كود PHP:

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

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

public static void GetStats( 

وتحت دى
كود PHP:

case 60: Class = "Monk"; break; 

هتحط دى
كود PHP:

 case 160: Class = "Windwalker"; break; 

وفوق دى
كود PHP:

else if (Class == "Monk") 

هتحط دى
كود PHP:

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

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

ف داتا بيز

دة نموذج
كود PHP:

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 

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

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

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;
        } 

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

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);
        } 

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

  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);
        } 

وهتبحث عن
كود PHP:

 public void UpdateEffects(bool screen) 

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

 update.AppendFull(0x19, StatusFlag, StatusFlag2, StatusFlag3, StatusFlag4); 

هنيجى بقى الاسكلات كاملة والكمال لله واحده هفنتح ملف الهاندل
ونضيف دول
كود PHP:

#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.ShadowofChaser))
                                        {
                                            
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.ShadowofChaser) && 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.FreezingPelter))
                                        {
                                            
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 

هتيجى تقولى ايه ده ياعم فيه ايرورات ظاهرها هقولك تعالى لسه هنعمل سيرش على كود ده
كود PHP:

 public static bool Allyss(Entity attacker, Entity attacked) 

هنقفله بعلامة السالب وتحتية هنضيف كود ده
كود PHP:

  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.ShadowofChaser) && 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
تحتيه
كود PHP:

 #region ShadowofChaser
                            
if (attacker.ContainsFlag4(Update.Flags4.ShadowofChaser))
                            {
                                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.HorrorOfStomper))
                            {
                                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.PeaceofStomper))
                            {
                                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 

بعد كده هتعمل سيرش على كود ده
كود PHP:

 public static void ReceiveAttack(Game.Entity attacker, Game.Entity attacked, Attack attack, uint damage, Database.SpellInformation spell) 

تضيف تحتيه
كود PHP:

 #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.FreezingPelter) && 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 

وبعدين فى اخر الكود ده
كود PHP:

attacker.AttackStamp = Time64.Now; 

هضيف كود ده
كود PHP:

#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 

بعدين هنعمل سيرش فى كود ده
كود PHP:

 public static bool CanAttack(Game.Entity attacker, Game.Entity attacked, Database.SpellInformation spell, bool melee) 

هنضيف تحتيه كود ده
كود PHP:

#region ThunderCloud
            
if (attacked.Name == "Thundercloud")
            {
                if (
attacked.CUID == attacker.UID) return false;
                if (!
Constants.PKForbiddenMaps.Contains(attacker.MapID))
                {
                    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 

بعدين نعمل سيرش على كود ده
كود PHP:

  #region Monster -> Player \ Monster 

هنضيف تحتيه كود ده
كود PHP:

 if (attacked.EntityFlag == EntityFlag.Player)
                {
                    if (
attacker.Companion && attacker.Name != "Thundercloud")
                    {
                        if (
Constants.PKForbiddenMaps.Contains(attacker.MapID))
                            return;
                    } 

فيه نفس كود
هنضيف كود ده
كود PHP:

#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 

بعدين هنعمل سيرش على كود ده
كود PHP:

 attack.Effect = Attack.AttackEffects.None; 

تحتيه هضيف كود ده
كود PHP:

#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
هنزل لحد كود ده
كود PHP:

if (weapons.Item1.ID / 1000 != 500 && weapons.Item1.ID / 1000 != 613 && weapons.Item1.ID 

هنبدلهبى الكود ده
كود PHP:

 if (weapons.Item1.ID / 1000 != 500 && weapons.Item1.ID / 1000 != 613 && weapons.Item1.ID / 1000 != 626) return; 

هنعمل سيرش على نفس كود وهنضفهم تانى
كده خلصنا من ملف الهاندل نيجى بقى لى ملف اينتى
هنضيف دول فى ملف اينتى
كود PHP:

 #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.JusticeChant);
            }
        }
        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 

بعد كده هنبدل ده بالى عندك
كود PHP:

 public uint Mesh
       
{
            
get
            
{
                return 
BitConverter.ToUInt32(SpawnPacket, _Mesh);
            }
            
set
            
{
                
Writer.Write(value, _Mesh, SpawnPacket);
            }
 
        } 

بعد كده هنفتح ملف فلور ايتم
هنضيف دول
كود PHP:

  RageOfWarTrap = 1500,
  
ShadowofChaser = 1550, 

بعد كده هنضيف كوده ده
كود PHP:

 public Game.Entity ShadowofChaserAttacker, ShadowofChaserAttacked;
public 
Attack Attack; 

بعد كده هنضيف

كود PHP:

 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
اعمل سيرش
كود PHP:

public enum MapObjectType 

ضيف فيه كود ده
FloorSpell,
هنفتح ملف Data.cs
هنضيف كود ده
كود PHP:

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
هنضيف فيه كود ده
كود PHP:

 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;
                }
            }
        } 

طبعا هيظهرلك ايرور
هنضيف فى نفس ملف
كود ده
كود PHP:

 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.InSight))
                            
insight = Kernel.Maps[ThunderCloud.MapID].Entities[ThunderCloud.MonsterInfo.InSight];
                        else if (
Kernel.GamePool.ContainsKey(ThunderCloud.MonsterInfo.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.InSight))
                        
insight = Kernel.Maps[ThunderCloud.MapID].Entities[ThunderCloud.MonsterInfo.InSight];
                    else if (
Kernel.GamePool.ContainsKey(ThunderCloud.MonsterInfo.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);
                }
            }
 
        } 

هنيجى لاخر حاجة هنفتح ملف ان بى سى
نعمل سيرش على كود
كود PHP:

public Npcs(GameClient client) 

هنضيف تحتيه
كود PHP:

 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";
        } 

بعدين نضيف ان بى سى ده
كود PHP:

#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.GamePackets.Update.Flags4.JusticeChant);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.ChillingSnow);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.FreezingPelter);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.HealingSnow);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.RevengeTaill);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.ShadowofChaser);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.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.GamePackets.Update.Flags4.JusticeChant);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.ChillingSnow);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.FreezingPelter);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.HealingSnow);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.RevengeTaill);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.Update.Flags4.ShadowofChaser);
                                                    
client.Entity.RemoveFlag4((ulong)Network.GamePackets.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 

بعدين ان بى سى ريبورن واسكند
هنبدله بى ده
كود PHP:

#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~train~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~attribute~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.SecondRebornLevel, client.Entity.SecondRebornClass) + 52 + 3 * (client.Entity.Level - 15));
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    
dialog.Text("Although~you~are~reborn,~you~have~not~reached~level~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.SecondQuestStageFour) != null && client.Quests.CheckQuest(QuestID.SecondQuestStageFour) == 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.SecondQuestStageFour) != null && client.Quests.CheckQuest(QuestID.SecondQuestStageFour) == 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(item);
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        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
وهنفتح ملف هاندل هنلاقيه جوه فولدر وهنبحث عن كود ده
كود PHP:

#region Remove Extra Skill 

هنضيف فيه كود ده
كود PHP:

if (client.Entity.FirstRebornClass == 165 && client.Entity.SecondRebornClass == 165 && client.Entity.Class == 165)
            {
                
WontAdd(ElmistRo.Game.Enums.SkillIDs.FrostGazeI);
               
            } 

وبعدين نفس ملف هنبحث عن كود ده
كود PHP:

switch (client.Entity.FirstRebornClass) 

هنضيف ده فيه تحتيه
كود PHP:

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 وهتعملو ده
هضيفه تحت اى كود اسكل الاسكلات ديه
كود PHP:

 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, 

بس كده الايرور اتحل بكده عملنا الفريست ريبورن تعالو نعمل السكند ريبورن
فى ملف الهاندل هنبحث عن كود ده
كود PHP:

 switch (client.Entity.SecondRebornClass) 

هنضيف ده تحتيه
كود PHP:

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;
                    } 

وبعدين نبحث عن كود ده
كود PHP:

#region Low level items 

هنزل تحت لغايت ما نلاقى اسامى الشخصيات
هنضيف الشخصية الجديدة تحت اى شخصية
كود PHP:

#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
تحتيه هنضيف شخصية الجديدة
كود PHP:

#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
هنضيف الشخصية الجديدة
كود PHP:

#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 

بعدين هنبحث عن كود ده
كود PHP:

#region Add Extra Skill 

هنضيف فيه كود ده
كود PHP:

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

رد: اضافه شخصية Windwalker
 


تسلم أيدك ياشق :d


ابو حمزه9 2019-07-26 09:04 PM

رد: اضافه شخصية Windwalker
 


جبتة في وقتة :o


Tefa 2019-07-26 10:41 PM

رد: اضافه شخصية Windwalker
 
عاش

uncelsam 2019-10-24 05:54 PM

رد: اضافه شخصية Windwalker
 
حاجه فظيعه

mohammedshafik 2023-05-25 12:57 PM

رد: اضافه شخصية Windwalker
 
thxxxx

youssef12345 2023-05-28 02:02 AM

رد: اضافه شخصية Windwalker
 
ty

Start5503777 2023-10-09 08:35 PM

رد: اضافه شخصية Windwalker
 
طيب لو عاوز اضيف النينجا والمونك في سورس 5095

xblack99 2024-02-09 10:23 PM

رد: اضافه شخصية Windwalker
 
hytrth

hegazii4 2024-03-04 04:21 PM

رد: اضافه شخصية Windwalker
 
uhhha


الساعة الآن 08:16 AM

مرحبا بكم في منتدي اكواد لتطوير الالعاب