this is how the packet looks like and what i have added is to fix the archerban/PoisonStar
PHP Code:
public static byte[] Action(uint EntityID, Dictionary<uint, int> Targets, ushort SkillId, byte SkillLvl, ushort X, ushort Y)
{
byte[] Packet;
Packet = new byte[8 + 32 + (Targets.Count) * 12];
COPacket P = new COPacket(Packet);
P.WriteUshortAddPos2((ushort)(Packet.Length - 8));
P.WriteUshortAddPos2((ushort)0x451);
P.WriteUintAddPos4(EntityID);
P.WriteUshortAddPos2(X);
P.WriteUshortAddPos2(Y);
P.WriteUshortAddPos2(SkillId);
P.WriteUshortAddPos2(SkillLvl);
if (Targets == null)
{
P.WriteUintAddPos4(0);
}
else
P.WriteUintAddPos4((uint)(Targets.Count));
if (Targets != null)
if (SkillId != 6002 && SkillId != 6004)
{
foreach (KeyValuePair<uint, int> DE in Targets)
{
P.WriteUintAddPos4(((uint)DE.Key));
P.WriteUintAddPos4((uint)DE.Value);
P.WriteUintAddPos4(0);
}
}
else
{
foreach (KeyValuePair<uint, int> DE in Targets)
{
NPC N = (NPC)WorldTables.H_NPCs[DE.Key];
Character Attacker = (Character)WorldTables.H_Chars[EntityID];
Character Target = (Character)WorldTables.H_Chars[DE.Key];
if (N == null)
{
if (SkillId == 6002)
{
P.WriteUintAddPos4(((uint)DE.Key));
P.WriteUintAddPos4((uint)DE.Value);
if ((Target.Potency) > (Attacker.Potency))
{
switch (SkillLvl)
{
case 0:
{
if (MyMath.ChanceSuccess(10))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
case 1:
{
if (MyMath.ChanceSuccess(13))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
case 2:
{
if (MyMath.ChanceSuccess(16))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
case 3:
{
if (MyMath.ChanceSuccess(19))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
case 4:
{
if (MyMath.ChanceSuccess(23))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
}
}
else
{
switch (SkillLvl)
{
case 0:
{
if (MyMath.ChanceSuccess(15))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
case 1:
{
if (MyMath.ChanceSuccess(20))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
case 2:
{
if (MyMath.ChanceSuccess(25))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
case 3:
{
if (MyMath.ChanceSuccess(30))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
case 4:
{
if (MyMath.ChanceSuccess(35))
{
P.WriteUintAddPos4(1);
Target.AintUseDrugs = 5 + 5 * SkillId;
Target.UseDrugs = DateTime.Now;
}
break;
}
}
}
}
else
{
if ((Target.Potency) > (Attacker.Potency))
{
switch (SkillLvl)
{
case 0:
{
if (MyMath.ChanceSuccess(10))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
case 1:
{
if (MyMath.ChanceSuccess(13))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
case 2:
{
if (MyMath.ChanceSuccess(16))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
case 3:
{
if (MyMath.ChanceSuccess(19))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
case 4:
{
if (MyMath.ChanceSuccess(23))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
}
}
else
{
switch (SkillLvl)
{
case 0:
{
if (MyMath.ChanceSuccess(15))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
case 1:
{
if (MyMath.ChanceSuccess(20))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
case 2:
{
if (MyMath.ChanceSuccess(25))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
case 3:
{
if (MyMath.ChanceSuccess(30))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
case 4:
{
if (MyMath.ChanceSuccess(35))
{
P.WriteUintAddPos4(1);
Target.Flying = false;
}
break;
}
}
}
}
}
else
{
uint Chance = 0;
switch(SkillLvl)
{
case 0:
{
Chance = 20;
break;
}
case 2:
{
Chance = 30;
break;
}
case 3:
{
Chance = 50;
break;
}
case 4:
{
Chance = 70;
break;
}
}
if (MyMath.ChanceSuccess(Chance))
{
P.WriteUintAddPos4(((uint)DE.Key));
P.WriteUintAddPos4((uint)DE.Value);
P.WriteUintAddPos4(1);
}
else
{
P.WriteUintAddPos4(((uint)DE.Key));
P.WriteUintAddPos4((uint)DE.Value);
P.WriteUintAddPos4(0);
}
}
}
}
return P.AddTQServer8Byte();
}
Should i keep the cases/if statements in a sided void or its fine to have it like what it is
SORRY ITS TO DAMN LONG .