[Help]How to change damage 5165

01/12/2010 23:46 pro4never#31
:O maybe I'm just underestimating how fragmented the lotf source coding is but how has no one released a real fix for the damage calculations yet?

Assuming stats are reading properly from items it shouldn't be THAT hard.. just fix the damage calculation void by re-writing how it handles damage...

Question:

Are stats from items reading properly
Are gems in items being pulled properly


If so I may download source later and attempt to re-write it so it will work a bit better for ppl.
01/13/2010 01:30 Korvacs#32
Quote:
Originally Posted by pro4never View Post
:O maybe I'm just underestimating how fragmented the lotf source coding is but how has no one released a real fix for the damage calculations yet?

Assuming stats are reading properly from items it shouldn't be THAT hard.. just fix the damage calculation void by re-writing how it handles damage...

Question:

Are stats from items reading properly
Are gems in items being pulled properly


If so I may download source later and attempt to re-write it so it will work a bit better for ppl.
Character.cs Line 3959
Code:
                if (A == AttackType.Melee || A == AttackType.Ranged)
                {
                    uint Damage = (uint)Rnd.Next((int)EqStats.minatk, (int)EqStats.maxatk);
                    Damage = (uint)((Damage + Str) * EqStats.GemExtraAttack);
                    Buff Stig = BuffOf(SkillsClass.ExtraEffect.Stigma);
                    if (Stig.Eff == SkillsClass.ExtraEffect.Stigma)
                        Damage = (uint)(Damage * Stig.Value);
                    return Damage;
                }
Character.cs Line 3814
Code:
                        ushort Def = EqStats.defense;
                        Buff Shield = BuffOf(SkillsClass.ExtraEffect.MagicShield);
                        if (Shield.Eff == SkillsClass.ExtraEffect.MagicShield)
                            Def = (ushort)(Def * Shield.Value);

                        if (Def >= Damage)
                            Damage = 1;
                        else
                            Damage -= Def;

                        Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 100);

                        Damage += Attacker.EqStats.MeleeDamageIncrease;

                        if (EqStats.MeleeDamageDecrease >= Damage)
                            Damage = 1;
                        else
                            Damage -= EqStats.MeleeDamageDecrease;
Thats the sum of the Melee damage calculation, (the existing one in the source), its overly complicated in every aspect, at no point does the server half the left hand weapon damage (which is a must to get attack damage correct). Along with a number of other errors which are missing (for example potency doesnt count for shit in this source, neither it seems does tort gems).

I considered fixing it once, but honestly its not worth it having looked through the source.
01/13/2010 01:35 pro4never#33
yah it certainly doesn't look very effective (assuming even that the sub calculations such as bless and gems are calculating properly...)

I dunno, depends how completely bored out of my mind I get... although I'm probably headed to the gym soon so that would solve that problem.

<edit>

wtf... is it just me being dumb or are they doing defence calculations BEFORE attack boost calcs?...

God the entire order of these is wrong... It's been ages since I've seen any proper attack calculations but shouldnt it be

(((min-max atk * dragon gem %) * stig %) - ((pdef * (1 + bless pct) * magic shield %) / (1 * tort %))) + bonus damage (fan/tower)

or something similar to that..

it was atk, then dragons, THEN stig. Once attack was calculated it removed the defence, bless and shield and the FINAL damage was done through torts... or maybe shield was over were torts are also...

Guuhhh now I really wanna read old dmg calc threads on co forget too much of this stuff.
01/13/2010 01:37 Korvacs#34
Quote:
Originally Posted by pro4never View Post
yah it certainly doesn't look very effective (assuming even that the sub calculations such as bless and gems are calculating properly...)

I dunno, depends how completely bored out of my mind I get... although I'm probably headed to the gym soon so that would solve that problem.
This is only an snippet, the full "Attack Handler" goes like this:

Attack.cs
Code:
    public class Attack
    {
        public static void Handle(Main.GameClient GC, byte[] Data)
        {
            try
            {
                uint AttackType = BitConverter.ToUInt32(Data, 20);
                if (AttackType != 24)
                    GC.MyChar.AtkMem.AtkType = (byte)AttackType;
                GC.MyChar.Action = 100;

                if (!GC.MyChar.Alive) return;

                if (AttackType == 2 || AttackType == 28)
                {
                    uint TargetUID = BitConverter.ToUInt32(Data, 12);
                    Game.Mob PossMob = null;
                    Game.Character PossChar = null;

                    if (Game.World.H_Mobs.Contains(GC.MyChar.Loc.Map))
                    {
                        Hashtable MapMobs = (Hashtable)Game.World.H_Mobs[GC.MyChar.Loc.Map];
                        if (MapMobs.Contains(TargetUID))
                            PossMob = (Game.Mob)MapMobs[TargetUID];
                        else if (Game.World.H_Chars.Contains(TargetUID))
                            PossChar = (Game.Character)Game.World.H_Chars[TargetUID];
                    }
                    else if (Game.World.H_Chars.Contains(TargetUID))
                        PossChar = (Game.Character)Game.World.H_Chars[TargetUID];
                    if (PossChar != null)
                        if (GC.GM)
                            return;
                    if (PossMob != null || PossChar != null)
                    {
                        GC.MyChar.AtkMem.Target = TargetUID;
                        GC.MyChar.AtkMem.Attacking = true;

                        if (DateTime.Now > GC.MyChar.AtkMem.LastAttack.AddMilliseconds(GC.MyChar.AtkFrequence))
                        {
                            uint Damage = GC.MyChar.PrepareAttack((byte)AttackType, true);
                            if (PossMob != null && PossMob.Alive && (MyMath.PointDistance(GC.MyChar.Loc.X, GC.MyChar.Loc.Y, PossMob.Loc.X, PossMob.Loc.Y) <= 3 || AttackType == 28 && MyMath.PointDistance(GC.MyChar.Loc.X, GC.MyChar.Loc.Y, PossMob.Loc.X, PossMob.Loc.Y) <= 15 || GC.MyChar.StatEff.Contains(Game.StatusEffectEn.FatalStrike)))
                            {
                                if (!GC.MyChar.WeaponSkill(PossMob.Loc.X, PossMob.Loc.Y, PossMob.EntityID))
                                    PossMob.TakeAttack(GC.MyChar, ref Damage, (NewestCOServer.Game.AttackType)AttackType, false);
                            }
                            else if (PossChar != null && (PossChar.CanBeMeleed || GC.MyChar.AtkMem.AtkType != 2) && PossChar.Alive && (MyMath.PointDistance(GC.MyChar.Loc.X, GC.MyChar.Loc.Y, PossChar.Loc.X, PossChar.Loc.Y) <= 2 || AttackType == 28 && MyMath.PointDistance(GC.MyChar.Loc.X, GC.MyChar.Loc.Y, PossChar.Loc.X, PossChar.Loc.Y) <= 15))
                            {
                                if(!GC.GM)
                                if (!GC.MyChar.WeaponSkill(PossChar.Loc.X, PossChar.Loc.Y, PossChar.EntityID))
                                    PossChar.TakeAttack(GC.MyChar, Damage, (NewestCOServer.Game.AttackType)AttackType, false);
                            }
                            else
                            {
                                GC.MyChar.AtkMem.Target = 0;
                                GC.MyChar.AtkMem.Attacking = false;
                            }
                        }
                    }
                    else if (TargetUID >= 6700 && TargetUID <= 6702)
                    {
                        GC.MyChar.AtkMem.Target = TargetUID;
                        GC.MyChar.AtkMem.Attacking = true;

                        if (DateTime.Now > GC.MyChar.AtkMem.LastAttack.AddMilliseconds(GC.MyChar.AtkFrequence))
                        {
                            uint Damage = GC.MyChar.PrepareAttack((byte)AttackType, true);
                            if (TargetUID == 6700)
                            {
                                if (Features.GuildWars.War)
                                {
                                    if (!GC.MyChar.WeaponSkill(Features.GuildWars.ThePole.Loc.X, Features.GuildWars.ThePole.Loc.Y, Features.GuildWars.ThePole.EntityID))
                                        Features.GuildWars.ThePole.TakeAttack(GC.MyChar, Damage, (byte)AttackType);
                                }
                                else
                                {
                                    GC.MyChar.AtkMem.Target = 0;
                                    GC.MyChar.AtkMem.Attacking = false;
                                }
                            }
                            else if (TargetUID == 6701)
                            {
                                if (!GC.MyChar.WeaponSkill(Features.GuildWars.TheLeftGate.Loc.X, Features.GuildWars.TheLeftGate.Loc.Y, Features.GuildWars.TheLeftGate.EntityID))
                                    Features.GuildWars.TheLeftGate.TakeAttack(GC.MyChar, Damage, (byte)AttackType);

                            }
                            else
                            {
                                if (!GC.MyChar.WeaponSkill(Features.GuildWars.TheRightGate.Loc.X, Features.GuildWars.TheRightGate.Loc.Y, Features.GuildWars.TheRightGate.EntityID))
                                    Features.GuildWars.TheRightGate.TakeAttack(GC.MyChar, Damage, (byte)AttackType);
                            }
                        }
                        return;
                    }
                    else
                        GC.MyChar.AtkMem.Attacking = false;

                    if (PossChar == null && PossMob == null)
                    {
                        Game.NPC PossNPC = (Game.NPC)Game.World.H_NPCs[TargetUID];
                        if (PossNPC != null && PossNPC.Flags == 21 && (MyMath.PointDistance(GC.MyChar.Loc.X, GC.MyChar.Loc.Y, PossNPC.Loc.X, PossNPC.Loc.Y) <= 3 || AttackType == 28 && MyMath.PointDistance(GC.MyChar.Loc.X, GC.MyChar.Loc.Y, PossNPC.Loc.X, PossNPC.Loc.Y) <= 15))
                        {
                            GC.MyChar.AtkMem.Target = TargetUID;
                            GC.MyChar.AtkMem.Attacking = true;

                            if (DateTime.Now > GC.MyChar.AtkMem.LastAttack.AddMilliseconds(GC.MyChar.AtkFrequence))
                            {
                                uint Damage = GC.MyChar.PrepareAttack((byte)AttackType, true);
                                if (!GC.MyChar.WeaponSkill(PossNPC.Loc.X, PossNPC.Loc.Y, PossNPC.EntityID))
                                    PossNPC.TakeAttack(GC.MyChar, Damage, (NewestCOServer.Game.AttackType)AttackType, false);
                            }
                        }
                    }
                }
                else if (AttackType == 44)
                {
                    ushort SkillId = 6003;
                    ushort x = GC.MyChar.Loc.X;
                    ushort y = GC.MyChar.Loc.Y;
                    uint Target = GC.MyChar.EntityID;

                    if (SkillId != 0 && GC.MyChar.Skills.Contains(SkillId))
                    {
                        Game.Skill S = (Game.Skill)GC.MyChar.Skills[SkillId];
                        if (Features.SkillsClass.SkillInfos.Contains(S.ID + " " + S.Lvl))
                        {
                            Features.SkillsClass.SkillUse SU = new NewestCOServer.Features.SkillsClass.SkillUse();
                            SU.Init(GC.MyChar, S.ID, S.Lvl, (ushort)x, (ushort)y);
                            if (SU.Info.ID == 0)
                                return;
                            SU.GetTargets(Target);
                            SU.Use();
                        }
                    }
                }
                else if (AttackType == 24)
                {
                    ushort SkillId;
                    long x;
                    long y;
                    uint Target;
                    #region GetSkillID
                    SkillId = Convert.ToUInt16(((long)Data[24] & 0xFF) | (((long)Data[25] & 0xFF) << 8));
                    SkillId ^= (ushort)0x915d;
                    SkillId ^= (ushort)GC.MyChar.EntityID;
                    SkillId = (ushort)(SkillId << 0x3 | SkillId >> 0xd);
                    SkillId -= 0xeb42;
                    #endregion
                    #region GetCoords
                    x = (Data[16] & 0xFF) | ((Data[17] & 0xFF) << 8);
                    x = x ^ (uint)(GC.MyChar.EntityID & 0xffff) ^ 0x2ed6;
                    x = ((x << 1) | ((x & 0x8000) >> 15)) & 0xffff;
                    x |= 0xffff0000;
                    x -= 0xffff22ee;

                    y = (Data[18] & 0xFF) | ((Data[19] & 0xFF) << 8);
                    y = y ^ (uint)(GC.MyChar.EntityID & 0xffff) ^ 0xb99b;
                    y = ((y << 5) | ((y & 0xF800) >> 11)) & 0xffff;
                    y |= 0xffff0000;
                    y -= 0xffff8922;
                    #endregion
                    #region GetTarget
                    Target = ((uint)Data[12] & 0xFF) | (((uint)Data[13] & 0xFF) << 8) | (((uint)Data[14] & 0xFF) << 16) | (((uint)Data[15] & 0xFF) << 24);
                    Target = ((((Target & 0xffffe000) >> 13) | ((Target & 0x1fff) << 19)) ^ 0x5F2D2463 ^ GC.MyChar.EntityID) - 0x746F4AE6;
                    #endregion
                    if (SkillId != 0 && GC.MyChar.Skills.Contains(SkillId))
                    {
                        Game.Skill S = (Game.Skill)GC.MyChar.Skills[SkillId];
                        if (Features.SkillsClass.SkillInfos.Contains(S.ID + " " + S.Lvl))
                        {
                            Features.SkillsClass.SkillUse SU = new NewestCOServer.Features.SkillsClass.SkillUse();
                            SU.Init(GC.MyChar, S.ID, S.Lvl, (ushort)x, (ushort)y);
                            if (SU.Info.ID == 0)
                                return;
                            bool EnoughArrows = true;
                            if (SU.Info.ArrowsCost > 0)
                            {
                                if (GC.MyChar.Loc.Map != 1039)
                                {
                                    if (GC.MyChar.Equips.LeftHand.ID != 0 && Game.Item.IsArrow(GC.MyChar.Equips.LeftHand.ID))
                                    {
                                        if (GC.MyChar.Equips.LeftHand.CurDur >= SU.Info.ArrowsCost)
                                            GC.MyChar.Equips.LeftHand.CurDur -= SU.Info.ArrowsCost;
                                        else
                                            GC.MyChar.Equips.LeftHand.CurDur = 0;
                                        if (GC.MyChar.Equips.LeftHand.CurDur == 0)
                                        {
                                            GC.AddSend(Packets.ItemPacket(GC.MyChar.Equips.LeftHand.UID, 5, 6));
                                            GC.AddSend(Packets.ItemPacket(GC.MyChar.Equips.LeftHand.UID, 0, 3));
                                            GC.MyChar.Equips.LeftHand = new Game.Item();
                                        }
                                        else
                                            GC.AddSend(Packets.AddItem(GC.MyChar.Equips.LeftHand, 5));
                                    }
                                    else
                                    {
                                        GC.MyChar.AtkMem.Attacking = false;
                                        EnoughArrows = false;
                                    }
                                }
                            }
                            if (GC.MyChar.CurMP >= SU.Info.ManaCost && GC.MyChar.Stamina >= SU.Info.StaminaCost && EnoughArrows || GC.MyChar.Loc.Map == 1039)
                            {
                                if (SU.Info.EndsXPWait)
                                {
                                    if (GC.MyChar.StatEff.Contains(NewestCOServer.Game.StatusEffectEn.XPStart))
                                    {
                                        GC.MyChar.StatEff.Remove(NewestCOServer.Game.StatusEffectEn.XPStart);
                                        GC.MyChar.XPKO = 0;
                                    }
                                    else
                                        return;
                                }
                                try
                                {
                                    if (GC.MyChar.Loc.Map != 1039)
                                    {
                                        GC.MyChar.CurMP -= SU.Info.ManaCost;
                                        GC.MyChar.Stamina -= SU.Info.StaminaCost;
                                        if (SkillId >= 1000 && SkillId <= 1002)
                                        {
                                            GC.MyChar.AtkMem.AtkType = 21;
                                            GC.MyChar.AtkMem.Skill = SU.Info.ID;
                                            GC.MyChar.AtkMem.Attacking = true;
                                            GC.MyChar.AtkMem.Target = Target;
                                            GC.MyChar.AtkMem.LastAttack = DateTime.Now;
                                            GC.MyChar.AtkMem.SX = (ushort)x;
                                            GC.MyChar.AtkMem.SY = (ushort)y;
                                        }
                                    }
                                    else
                                    {
                                        GC.MyChar.AtkMem.AtkType = 21;
                                        GC.MyChar.AtkMem.Skill = SU.Info.ID;
                                        GC.MyChar.AtkMem.Attacking = true;
                                        GC.MyChar.AtkMem.Target = Target;
                                        GC.MyChar.AtkMem.LastAttack = DateTime.Now;
                                        GC.MyChar.AtkMem.SX = (ushort)x;
                                        GC.MyChar.AtkMem.SY = (ushort)y;
                                    }
                                }
                                catch (Exception c) { Program.WriteLine(c.ToString()); }
                                if (SU.Info.ID == 6001)//toxic fog
                                {
                                    #region ToxicFog
                                    if (GC.MyChar.Loc.Map != 1039)
                                    {
                                        #region Mobs
                                        try
                                        {
                                            foreach (Game.Mob Mob in (Game.World.H_Mobs[GC.MyChar.Loc.Map] as Hashtable).Values)
                                            {
                                                if (Mob.Alive)
                                                {
                                                    int Dst = 6;
                                                    if (MyMath.PointDistance(Mob.Loc.X, Mob.Loc.Y, x, y) <= Dst)
                                                    {
                                                        if (Mob.Name.Contains("Guard"))
                                                        {
                                                            continue;
                                                        }
                                                        Mob.PoisonedInfo = new NewestCOServer.Game.PoisonType(SU.Info.Level);
                                                        foreach (Game.Character C in Game.World.H_Chars.Values)
                                                            if (Mob.Loc.Map == C.Loc.Map)
                                                                if (MyMath.PointDistance(Mob.Loc.X, Mob.Loc.Y, C.Loc.X, C.Loc.Y) <= 20)
                                                                    C.MyClient.AddSend(Packets.Status(Mob.EntityID, NewestCOServer.Game.Status.Effect, (ulong)Game.StatusEffectEn.Poisoned));
                                                        uint Damage = 0;
                                                        Mob.TakeAttack(GC.MyChar, ref Damage, NewestCOServer.Game.AttackType.Magic, true);
                                                        GC.MyChar.AddSkillExp(SU.Info.ID, 100);
                                                    }
                                                }
                                            }
                                        }
                                        catch { }
                                        #endregion
                                        #region Players
                                        try
                                        {
                                            if (!Game.World.NoPKMaps.Contains(GC.MyChar.Loc.Map))
                                            {
                                                foreach (Game.Character Player in Game.World.H_Chars.Values)
                                                {
                                                    if (Player.Alive)
                                                    {
                                                        int Dst = 6;
                                                        if (MyMath.PointDistance(Player.Loc.X, Player.Loc.Y, x, y) <= Dst)
                                                        {
                                                            if (GC.MyChar.PKMode == NewestCOServer.Game.PKMode.PK)
                                                            {
                                                                if (Player != GC.MyChar)
                                                                {
                                                                    if (Player.Potency <= GC.MyChar.Potency)
                                                                    {
                                                                        Player.PoisonedInfo = new NewestCOServer.Game.PoisonType(SU.Info.Level);
                                                                        Player.StatEff.Add(NewestCOServer.Game.StatusEffectEn.Poisoned);
                                                                        Player.TakeAttack(GC.MyChar, 0, NewestCOServer.Game.AttackType.Magic, true);
                                                                        SU.PlayerTargets.Add(Player, (uint)1);
                                                                    }
                                                                    else
                                                                    {
                                                                        SU.PlayerTargets.Add(Player, (uint)0);
                                                                    }
                                                                }
                                                            }
                                                            GC.MyChar.AddSkillExp(SU.Info.ID, 100);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        catch { }
                                        #endregion


                                        }
                                        else
                                            GC.MyChar.AddSkillExp(SU.Info.ID, 10);
                                    Game.World.Action(GC.MyChar, Packets.SkillUse(SU).Get);
                                    #endregion
                                }
                                else if (SU.Info.ID == 1100 || SU.Info.ID == 1050)
                                {
                                    #region Pray
                                    if (GC.MyChar.EntityID != Target)
                                    {
                                        if (Game.World.H_Chars.ContainsKey(Target))
                                        {
                                            Game.Character Char = (Game.Character)Game.World.H_Chars[Target];
                                            if (!Char.Alive)
                                            {
                                                SU.GetTargets(Target);
                                                SU.PlayerTargets[Char] = (uint)1;
                                                Game.World.Action(Char, Packets.SkillUse(SU).Get);
                                                Char.Ghost = false;
                                                Char.BlueName = false;
                                                Char.CurHP = (ushort)Char.MaxHP;
                                                Char.Alive = true;
                                                Char.StatEff.Remove(NewestCOServer.Game.StatusEffectEn.Dead);
                                                Char.StatEff.Remove(NewestCOServer.Game.StatusEffectEn.BlueName);
                                                Char.Body = Char.Body;
                                                Char.Hair = Char.Hair;
                                                Char.Equips.Send(Char.MyClient, false);
                                            }
                                        }
                                    }
                                    #endregion
                                }
                                else
                                {
                                    SU.GetTargets(Target);
                                    SU.Use();
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e) { Program.WriteLine(e); }
        }
    }
I wont link you Character.cs because its 5667 lines long, but you will get the idea of how badly written it is from the above.
01/13/2010 07:35 necuja#35
Does anyone know if i change these following If everyone will do less damage?

Quote:
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 100);
Damage = (uint)((double)Damage * (((double)(110 - EqStats.Dodge) / 100)));
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 100);
Damage = (uint)((double)Damage * (((double)(100 - EqStats.MDef1) / 100)));
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 100);
Too

Quote:
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 160);
Damage = (uint)((double)Damage * (((double)(110 - EqStats.Dodge) / 160)));
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 160);
Damage = (uint)((double)Damage * (((double)(100 - EqStats.MDef1) / 160)));
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 160);
And this

Quote:
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 100);
Damage = (uint)((double)Damage * (((double)(100 - EqStats.MDef1) / 100)));
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 100);
Damage = (uint)((double)Damage * (((double)(110 - EqStats.Dodge) / 100)));
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 100);
To this

Quote:
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 160);
Damage = (uint)((double)Damage * (((double)(100 - EqStats.MDef1) / 160)));
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 160);
Damage = (uint)((double)Damage * (((double)(110 - EqStats.Dodge) / 160)));
Damage = (uint)((double)Damage * (100 - EqStats.TotalBless) / 160);
I found those in Character.cs and Skill.cs

If anyone knows if it will reduce the damage let me know THANKS!!!
01/13/2010 08:17 Arcо#36
Quote:
Originally Posted by necuja View Post
Does anyone know if i change these following If everyone will do less damage?



Too



And this



To this



I found those in Character.cs and Skill.cs

If anyone knows if it will reduce the damage let me know THANKS!!!
It sure will :]
01/13/2010 08:36 pro4never#37
Yes. Those are all dividing the certain stats like bless and dodge by a set number (100 to give a percentage value) and multiplying it by the actual damage.

Eg:

10,000 ph dmg but player has 50 percent bless (50 / 100 = .5)
10,000 * .5 = 5,000

therefore half the damage

the quick fix people are suggesting (without correcting the actual damage calculations in the source) is to raise the 100 to something higher, thus making bless/dodge and other stats more effective.

10,000 ph dmg again 50 percent bless (50 / 160 = .3125)
10,000 * .3125 = 3125 effectively reducing damage.
01/13/2010 08:52 ramix#38
this damage is for all classes? your for une class have a calculation damage?
01/13/2010 08:58 pro4never#39
Classes do not have their own damage type. The way this is working it will lower all damage.

Physical and magic damage will be lowered through blessed gear
Magic damage will be further lowered through Mdef1 (percentage mdef)
Archer damage will be lowered through dodge.
01/13/2010 09:15 necuja#40
Wow guy's thanks i understand now ^_^

Another question i added level 137-150 and i dont think it worked can someone tell me if i did it right?

Quote:
}
public static void LoadLevelExp()
{
LevelExp = new ulong[150];
LevelExp[0] = 0;
FileStream FS = new FileStream(@"C:\OldCODB\ExpNeed.dat", FileMode.Open);
BinaryReader BR = new BinaryReader(FS);
for (byte i = 1; i < 130; i++)
LevelExp[i] = BR.ReadUInt32();

LevelExp[130] = 8589148160;
LevelExp[131] = 25767444480;
LevelExp[132] = 77302333440;
LevelExp[133] = 231907000320;
LevelExp[134] = 347860500480;
LevelExp[135] = 521790750720;
LevelExp[136] = 782686126080;
LevelExp[137] = 792686126080;
LevelExp[138] = 802686126080;
LevelExp[139] = 822686126080;
LevelExp[140] = 842686126080;
LevelExp[141] = 882686126080;
LevelExp[142] = 922686126080;
LevelExp[143] = 942686126080;
LevelExp[144] = 952686126080;
LevelExp[145] = 972686126080;
LevelExp[146] = 982686126080;
LevelExp[147] = 1002686126080;
LevelExp[148] = 1022686126080;
LevelExp[149] = 1082686126080;


BR.Close();
FS.Close();
}
I changed/added the stuff in red It doesn't seem to be working...I went changed my level to 137 and tryed leveling for about 10 minutes and dint level?

Can someone help me with this problem THANKS!!!!!!!
01/13/2010 09:18 pro4never#41
Couple things: Why did you change the LevelExp = new ulong[150];

Don't think that needs to be changed

#2: not added new levels before but wouldn't you need to modify client side also?

I'd suggest searching as I know levels past 130 have been released for sources before. See what those threads have to say.
01/13/2010 09:18 ramix#42
if i up the dodge archer get low damage?
01/13/2010 09:49 necuja#43
Quote:
Originally Posted by pro4never View Post
Couple things: Why did you change the LevelExp = new ulong[150];

Don't think that needs to be changed

#2: not added new levels before but wouldn't you need to modify client side also?

I'd suggest searching as I know levels past 130 have been released for sources before. See what those threads have to say.
Alright thanks

I changed LevelExp=new ulong[150]; because i got a error if i left it 137

Also ever since i added those levels i got these errors now ;/ help?

Quote:
Error 1 The type or namespace name 'Skill' does not exist in the namespace 'NewestCOServer.Game' (are you missing an assembly reference?) C:\rikardo updated\Database.cs 38 18 NewestCOServer
Error 2 The type or namespace name 'Skill' does not exist in the namespace 'NewestCOServer.Game' (are you missing an assembly reference?) C:\rikardo updated\Database.cs 38 37 NewestCOServer
Error 3 The type or namespace name 'NPC' does not exist in the namespace 'NewestCOServer.Game' (are you missing an assembly reference?) C:\rikardo updated\Database.cs 479 22 NewestCOServer
Error 4 The type or namespace name 'NPC' does not exist in the namespace 'NewestCOServer.Game' (are you missing an assembly reference?) C:\rikardo updated\Database.cs 479 54 NewestCOServer
Error 5 The type or namespace name 'DMap' could not be found (are you missing a using directive or an assembly reference?) C:\rikardo updated\Database.cs 514 17 NewestCOServer
Error 6 The type or namespace name 'DMap' could not be found (are you missing a using directive or an assembly reference?) C:\rikardo updated\Database.cs 514 27 NewestCOServer
Error 7 The name 'DMaps' does not exist in the current context C:\rikardo updated\Database.cs 514 32 NewestCOServer
01/13/2010 09:51 Korvacs#44
If your looking for help and support for 5165 in general there is a huge thread in the guide section, this topic is just for attack/damage calculation discussion.
01/13/2010 10:13 intel_ro#45
Quote:
Originally Posted by ramix View Post
if i up the dodge archer get low damage?
to
i should search today a see how the arrows work .. did u try and see if there is a diference betwen normal attak and scatter attak dmg .. if in scater attak dmg the damage is les then on the skills all things are ok and u dind modify the dmg on normal attak

PS are u testing DMG on moobs or on another character