تسجيل الدخول

مشاهدة النسخة كاملة : رانك الوحوش ف ديتي لاند [RayzoV3]


Tefa
2019-11-22, 02:04 PM
هتعمل كلاس جديد و تسميه BossHarming او اي اسم يعجبك

بعد مده هترمي فيه دول متنساش تغير اسم بروجيكت
using ProtoBuf;
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Collections.Concurrent;
using System.Text;
using VirusX;
using VirusX.Database;
using System.Threading.Tasks;

namespace VirusX.Network.GamePackets
{
public class MsgBossHarmRanking
{
public MsgBossHarmRanking() { }
public MsgBossHarmRankingProto Info;
[ProtoContract]
public class MsgBossHarmRankingProto
{
[ProtoMember(1, IsRequired = true)]
public uint Type;
[ProtoMember(2, IsRequired = true)]
public uint BossUID;
[ProtoMember(3, IsRequired = true)]
public Hunter[] Hunters;
}
[ProtoContract]
public class Hunter
{
[ProtoMember(1, IsRequired = true)]
public uint Rank;
[ProtoMember(2, IsRequired = true)]
public uint ServerID;
[ProtoMember(3, IsRequired = true)]
public uint UID;
[ProtoMember(4, IsRequired = true)]
public string Name;
[ProtoMember(5, IsRequired = true)]
public uint Damage;
}
public bool Read(byte[] packet)
{
using (var memoryStream = new MemoryStream(packet))
{
Info = Serializer.DeserializeWithLengthPrefix<MsgBossHarmRankingProto>(memoryStream, PrefixStyle.Fixed32);
}
return true;
}
public void Ready(VirusX.Client.GameState client)
{
var proto = new MsgBossHarmRankingProto();
proto.BossUID = Info.BossUID;
proto.Type = 1;
/* var scores = client.Map.Entities.Where(i => i.Key == proto.BossUID).FirstOrDefault().Value.MonsterInfo. Score.OrderByDescending(i => i.Value).ToArray();
if (scores.Length != 0)
{
proto.Hunters = new Hunter[scores.Length];
for (int i = 0; i < proto.Hunters.Length; i++)
{
proto.Hunters[i] = new Hunter();
proto.Hunters[i].UID = scores[i].Key.UID;
proto.Hunters[i].Name = scores[i].Key.Name;
proto.Hunters[i].Damage = scores[i].Value;
proto.Hunters[i].ServerID = scores[i].Key.ServerID;
proto.Hunters[i].Rank = (uint)(i + 1);
}
} */
client.Send(Kernel.FinalizeProtoBuf(proto, 1044));
//client.Send(Kernel.FinalizeProtoBuf(Info, 3282));
}
public void Handle(VirusX.Client.GameState client)
{
switch (Info.Type)
{
case 0:
{
var proto = new MsgBossHarmRankingProto();
proto.BossUID = Info.BossUID;
proto.Type = 1;
var scores = client.Map.Entities.Where(i => i.Key == proto.BossUID).FirstOrDefault().Value.MonsterInfo. Score.OrderByDescending(i => i.Value).ToArray();
if (scores.Length != 0)
{
proto.Hunters = new Hunter[scores.Length];
for (int i = 0; i < proto.Hunters.Length; i++)
{
proto.Hunters[i] = new Hunter();
proto.Hunters[i].UID = scores[i].Key.UID;
proto.Hunters[i].Name = scores[i].Key.Name;
proto.Hunters[i].Damage = scores[i].Value;
proto.Hunters[i].ServerID = scores[i].Key.ServerID;
proto.Hunters[i].Rank = (uint)(i + 1);
}
}
client.Send(Kernel.FinalizeProtoBuf(proto, 1044));
break;
}
}
}
}
}



بعد كده هنفتح packethandler.cs
و ننزل لحد البكتات و نرمي ده وسطهم
#region MsgBossHarmRanking
case 1044:
{
var pkt = new VirusX.Network.GamePackets.MsgBossHarmRanking();
var myPacket = new byte[packet.Length - 8];
for (int i = 0; i < myPacket.Length; i++)
{
myPacket[i] = packet[i];
}
if (pkt.Read(myPacket))
pkt.Handle(client);
break;
}
#endregion

بعد كده هنروح MonsterTable.cs
و هرمي ده جواه
public Dictionary<Game.Entity, uint> Score = new Dictionary<Game.Entity, uint>();

و اخيرا و ليس اخرا هنروح Monster.cs
و هنحط جواه ده
#region Monster Score
if (monster.EntityFlag == EntityFlag.Monster)
{
//if (attacked.Boss > 0)
{
if (monster.MonsterInfo != null)
{
if (monster.MonsterInfo.Score.ContainsKey(client.Enti ty))
monster.MonsterInfo.Score[client.Entity] += obj.Damage;
else monster.MonsterInfo.Score.Add(client.Entity, obj.Damage);

//new VirusX.Network.GamePackets.MsgBossHarmRanking().Re ady(attacker.Owner);
}
}
}

nova
2019-11-23, 05:31 AM
عندى ايرورين ف كلمة packet يا رايدر معلش ممكن حل
عفواً لايمكن عرض الروابط في الإرشيف

Tefa
2019-11-23, 10:33 AM
انته ضايف كود ف مكان غلط سيرش case 1126: و ضيفه تحته

nova
2019-11-23, 10:51 AM
انته ضايف كود ف مكان غلط سيرش case 1126: و ضيفه تحته

تمام اتحلت يا عالمى

محمد ياسر
2019-11-23, 06:30 PM
عاش

Mo Khalid
2019-11-24, 06:03 PM
ابو الصحاب هو الرنك دا ممكن اضيفو ف سورس 2 دي كلينت 6609

Tefa
2019-11-25, 05:12 PM
ابو الصحاب هو الرنك دا ممكن اضيفو ف سورس 2 دي كلينت 6609

ايوه يا حب بس كود ده

if (monster.EntityFlag == EntityFlag.Monster)
{
//if (attacked.Boss > 0)
{
if (monster.MonsterInfo != null)
{
if (monster.MonsterInfo.Score.ContainsKey(client.Enti ty))
monster.MonsterInfo.Score[client.Entity] += obj.Damage;
else monster.MonsterInfo.Score.Add(client.Entity, obj.Damage);

//new VirusX.Network.GamePackets.MsgBossHarmRanking().Re ady(attacker.Owner);
}
}
}

هيتضاف ف PVM.cs

MRonlineGvrix
2019-12-23, 03:13 AM
ايوه يا حب بس كود ده

if (monster.EntityFlag == EntityFlag.Monster)
{
//if (attacked.Boss > 0)
{
if (monster.MonsterInfo != null)
{
if (monster.MonsterInfo.Score.ContainsKey(client.Enti ty))
monster.MonsterInfo.Score[client.Entity] += obj.Damage;
else monster.MonsterInfo.Score.Add(client.Entity, obj.Damage);

//new VirusX.Network.GamePackets.MsgBossHarmRanking().Re ady(attacker.Owner);
}
}
}

هيتضاف ف PVM.cs



لو سمحت ممكن تضيفو هنا
// * Created by CptSky
// * Copyright © 2011
// * COPS v6 Emulator - Project

using System;
using CO2_CORE_DLL.IO;
using AbdoRedaGxV4.Game;
using AbdoRedaGxV4.Database;
using AbdoRedaGxV4.Network.GamePackets;
using AbdoRedaGxV4;
using AbdoRedaGxV4.Game.Attacking;
using System.Collections.Generic;

namespace AbdoRedaGxV4
{
public partial class MyMath
{
public static Int32 GetDamageEntity2Monster(Entity Attacker, Entity Monster, uint AtkType, ref Attack Packet)
{
Double Damage = 0;

switch (AtkType)
{
case Attack.Melee:
{
if (!Attacker.Transformed)
Damage = MyMath.Generate(Attacker.MinAttack, Attacker.MaxAttack);
else
Damage = MyMath.Generate(Attacker.TransformationMinAttack, Attacker.TransformationMaxAttack);

AbdoRedaGxV4.Game.Attacking.Calculate.Refinary(Att acker, Monster, ref Damage, ref Packet, false);

// Damage += Attacker.getFan(false);
Damage = Attacker.AdjustAttack((int)Damage);

var bonus = Attacker.Gems[GemTypes.Dragon];
if (bonus > 0)
Damage += MathHelper.MulDiv((int)Damage, bonus, 100);

Damage = AdjustDamageEntity2Monster(Damage, Attacker, Monster);
Damage -= Monster.Defence;
break;
}
case Attack.Magic:
{
Damage = Attacker.MagicAttack;
Damage = AdjustDamageEntity2Monster(Damage, Attacker, Monster);
AbdoRedaGxV4.Game.Attacking.Calculate.Refinary(Att acker, Monster, ref Damage, ref Packet, true);

Damage *= ((Double)(100 - Monster.MagicDefence) / 100);
Damage -= Monster.Block;
Damage *= 0.75;

Damage += Attacker.MagicDamageIncrease;
Damage -= Monster.MagicDamageDecrease;

var effect = Attacker.Gems[GemTypes.Phoenix];
Damage += Damage * effect / 100;
if (effect >= 180)
Damage += Damage / 20;
break;
}
case Attack.Ranged:
{
Damage = MyMath.Generate((int)Attacker.MinAttack, (int)Attacker.MaxAttack) / 25;
AbdoRedaGxV4.Game.Attacking.Calculate.Refinary(Att acker, Monster, ref Damage, ref Packet, false);

Damage = AdjustDamageEntity2Monster(Damage, Attacker, Monster);

var bonus = Attacker.Gems[GemTypes.Dragon];
if (bonus > 0)
Damage += MathHelper.MulDiv((int)Damage, bonus, 100);

break;
}
}

if (AtkType != Attack.Magic)
{
if (Attacker.Gems[GemTypes.Dragon] >= 210)
Damage += Damage * 50 / 100;
}

if (Attacker.OnSuperCyclone())
Damage += (int)((double)Damage * 0.2);

if (Attacker.OnOblivion())
Damage += (int)((double)Damage * 0.2);

if (Attacker.OnFatalStrike())
Damage += (int)((double)Damage * 0.2);

if (Attacker.BattlePower < Monster.Level)
Damage *= 0.01;

Damage += Attacker.getFan(AtkType == Attack.Magic);
if (Damage < 1)
Damage = 1;
Damage = AdjustMinDamageEntity2Monster(Damage, Attacker, Monster);
if (Attacker.EntityFlag == EntityFlag.Entity)
{
if (Attacker.Owner.BlessTime > 0 && MyMath.Success(1))
{
Damage *= 1;
_String str = new _String(true);
str.UID = Attacker.UID;
str.TextsCount = 1;
str.Type = _String.Effect;
str.Texts.Add("LuckyGuy");
Attacker.Owner.SendScreen(str, true);

}
}
return (Int32)Math.Round(Damage, 0);
}

public static Int32 GetDamageEntity2Monster(Entity Attacker, Entity Monster, ushort MagicType, Byte MagicLevel, ref Attack Packet)
{
var Info = SpellTable.GetSpell(MagicType, MagicLevel);

Double Damage = 0;

List<ushort> spells = new List<ushort>()
{
11190,
10315
};
if (Info.ID == 1115 || spells.Contains(Info.ID) || (Info.WeaponSubtype.Count > 0 && !Info.WeaponSubtype.Contains(500) && !Info.WeaponSubtype.Contains(613) && !Attacker.IsChaser1()))
{
Damage = MyMath.Generate((int)Attacker.MinAttack, (int)Attacker.MaxAttack);
AbdoRedaGxV4.Game.Attacking.Calculate.Refinary(Att acker, Monster, ref Damage, ref Packet, false);

if (Info.Power > 30000)
Damage *= (Double)(Info.Power - 30000) / 100;
else
Damage += Info.Power;
// Damage += Attacker.getFan(false);

var bonus = Attacker.Gems[GemTypes.Dragon];
if (bonus > 0)
Damage += MathHelper.MulDiv((int)Damage, bonus, 100);

Damage = AdjustDamageEntity2Monster(Damage, Attacker, Monster);

Damage -= Monster.Defence;

Damage = Attacker.AdjustAttack((int)Damage);


if (Attacker.Gems[GemTypes.Dragon] >= 210)
Damage += Damage * 50 / 100;
}
else if (Info.WeaponSubtype.Contains(500) || Info.WeaponSubtype.Contains(613) || Attacker.IsChaser1())
{
Damage = MyMath.Generate((int)Attacker.MinAttack, (int)Attacker.MaxAttack);
AbdoRedaGxV4.Game.Attacking.Calculate.Refinary(Att acker, Monster, ref Damage, ref Packet, false);
// Damage += Attacker.getFan(false);

if (Info.Power > 30000)
Damage *= (Double)(Info.Power - 30000) / 100;
else
Damage += Info.Power;

Damage = AdjustDamageEntity2Monster(Damage, Attacker, Monster);

Damage = Attacker.AdjustAttack((int)Damage);

var bonus = Attacker.Gems[GemTypes.Dragon];
if (bonus > 0)
Damage += MathHelper.MulDiv((int)Damage, bonus, 100);



if (Attacker.Gems[GemTypes.Dragon] >= 210)
Damage += Damage * 50 / 100;
}
else
{
Damage = Attacker.MagicAttack;
AbdoRedaGxV4.Game.Attacking.Calculate.Refinary(Att acker, Monster, ref Damage, ref Packet, true);
if (Info.Power > 30000)
Damage *= (Double)(Info.Power - 30000) / 100;
else
Damage += Info.Power;
// Damage += Attacker.getFan(true);
var effect = Attacker.Gems[GemTypes.Phoenix];
Damage += Damage * effect / 100;
Damage = AdjustDamageEntity2Monster(Damage, Attacker, Monster);

Damage *= ((Double)(100 - Monster.MagicDefence) / 100);
Damage -= Monster.Block;
// Damage *= 0.75;


if (effect >= 180)
Damage += Damage / 20;


}

if (Attacker.BattlePower < Monster.Level)
Damage *= 0.01;

Damage += Attacker.getFan(Packet.AttackType == Attack.Magic);
if (Attacker.OnSuperman())
Damage += (int)((double)Damage * 2.5); //PvP Reduction!
if (Damage < 1)
Damage = 1;

Damage = AdjustMinDamageEntity2Monster(Damage, Attacker, Monster);



if (Attacker.EntityFlag == EntityFlag.Entity)
{
if (Attacker.Owner.BlessTime > 0 && MyMath.Success(1))
{
Damage *= 1;
_String str = new _String(true);
str.UID = Attacker.UID;
str.TextsCount = 1;
str.Type = _String.Effect;
str.Texts.Add("LuckyGuy");
Attacker.Owner.SendScreen(str, true);
}
}
return (Int32)Math.Round(Damage, 0);
}

private static Int32 AdjustMinDamageEntity2Monster(Double Damage, Entity Attacker, Entity Monster)
{
Int32 MinDmg = 1;
MinDmg += (Int32)(Attacker.Level / 10);

var Item = Attacker.Owner.Equipment.TryGetItem(4);
if (Item != null)
MinDmg += (int)Item.ID % 10;

return Math.Max(MinDmg, (Int32)Damage);
}

private static Int32 AdjustDamageEntity2Monster(Double Damage, Entity Attacker, Entity Monster)
{
if (!Monster.IsGreen(Attacker))
return Math.Max(0, (Int32)Damage);

Int32 DeltaLvl = Attacker.Level - Monster.Level;
if (DeltaLvl >= 3 && DeltaLvl <= 5)
Damage *= 1.5;
else if (DeltaLvl > 5 && DeltaLvl <= 10)
Damage *= 2;
else if (DeltaLvl > 10 && DeltaLvl <= 20)
Damage *= 2.5;
else if (DeltaLvl > 20)
Damage *= 3;
else
Damage *= 1;

return Math.Max(0, (Int32)Damage);
}
}
}

taha
2020-02-14, 08:36 AM
فين الان بى سى علشان اضيفوا فى النفى كات

احمد كرم
2020-02-16, 11:55 PM
لو سمحت يا ابو الصحاب عاوز اضيف المابة بتاعة الديتي لاند كاملة في سورس 3 دي ممكن تعمل موضوع تشرح فيه ازاي اضيفها