parent
4c4ecddbd2
commit
6bc453117f
3 changed files with 1841 additions and 1737 deletions
|
@ -1,11 +1,12 @@
|
|||
# DutyPacket configuration
|
||||
|
||||
# packet
|
||||
Version=2006282
|
||||
Description=6.28 HotFix
|
||||
OpFate=568
|
||||
OpDuty=378
|
||||
OpMatch=371
|
||||
OpInstance=389
|
||||
OpZone=731
|
||||
Version=2006300
|
||||
Description=6.3 HotFix
|
||||
OpFate=623
|
||||
OpDuty=368
|
||||
OpMatch=907
|
||||
OpInstance=455
|
||||
OpZone=405
|
||||
OpSouthernBozja=0
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
* Duty finding codes from https://github.com/purutu/ACT.DFAssist
|
||||
* Network analyzer codes from https://github.com/Noisyfox/ACT.FFXIVPing
|
||||
|
||||
## Not Working on 6.3
|
||||
Packet structure has changed. DutyContent doesn't work until fix this problem. Sorry!!! 😭
|
||||
## 6.3 HotFix
|
||||
Working again 😭
|
||||
|
||||
---
|
||||
|
||||
|
@ -16,7 +16,3 @@ Revi 님께서 작성하신 Wiki가 있어 링크합니다. 정리가 잘되어
|
|||
|
||||
6.2부터 패킷이 바뀌어서 6.1 및 그 이전 버전과 호환이 되지 않습니다. 버전 27에 한국판을 감지하는 기능을 넣었고 이 버전으로 업데이트 하시면 문제없이 동작합니다.
|
||||
한국판이 6.2로 업데이트가 예정되면 그때 SQEX판과 동일하게 작동하도록 다시금 변경하겠습니다.
|
||||
|
||||
6.1에서 동작하는 것 확인했습니다. 패킷은 자동으로 업뎃됩니다
|
||||
|
||||
※ 6.3에서 패킷이 변경되어 변경점을 찾을 때까지 6.3에서 동작하지 않아요;;;
|
||||
|
|
119
Tab/DutyForm.cs
119
Tab/DutyForm.cs
|
@ -240,6 +240,8 @@ namespace DutyContent.Tab
|
|||
var fcode = BitConverter.ToUInt16(data, 4);
|
||||
|
||||
if (fcode > 100)
|
||||
{
|
||||
if (DcConfig.Duty.PacketForLocal)
|
||||
{
|
||||
// 53=begin, 54=end, 62=progress
|
||||
if (data[0] == 53)
|
||||
|
@ -279,6 +281,52 @@ namespace DutyContent.Tab
|
|||
TraceFate(fcode, false, fate);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 52,49,66=begin / 55=probably npc contact point
|
||||
// 60=progress
|
||||
// 53=end
|
||||
if (data[0] == 49)
|
||||
{
|
||||
var fate = DcContent.GetFate(fcode);
|
||||
TraceFate(fcode, true, fate, 0);
|
||||
|
||||
if (DcConfig.Duty.Fates[DcConfig.Duty.ActiveFate].Selected.Contains(fcode))
|
||||
{
|
||||
PlayEffectSoundFate();
|
||||
NotifyFate(fate);
|
||||
_overlay.PlayFate(fate);
|
||||
}
|
||||
|
||||
_last_fate = fcode;
|
||||
}
|
||||
else if (data[0] == 60 && data[8] > 0) // more than 0%
|
||||
{
|
||||
var fate = DcContent.TryFate(fcode);
|
||||
|
||||
if (fate != null)
|
||||
{
|
||||
var rate = data[8] >= 100 ? -1 : data[8];
|
||||
TraceFate(fcode, false, fate, rate);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DcConfig.DebugEnable)
|
||||
{
|
||||
WriteLog(Color.Magenta, 37, 12, fcode);
|
||||
_last_fate = fcode;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (data[0] == 53)
|
||||
{
|
||||
var fate = DcContent.TryFate(fcode);
|
||||
|
||||
if (fate != null)
|
||||
TraceFate(fcode, false, fate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Duty
|
||||
|
@ -1552,6 +1600,26 @@ namespace DutyContent.Tab
|
|||
|
||||
return -1;
|
||||
}
|
||||
|
||||
private static (int Pos, int Value) IndexOfValues(byte[] data, int index, params ushort[] values)
|
||||
{
|
||||
int len = data.Length;
|
||||
|
||||
for (int i = index; i < len; i++)
|
||||
{
|
||||
if (i + 1 >= len)
|
||||
break;
|
||||
|
||||
ushort n = BitConverter.ToUInt16(data, i);
|
||||
for (int u = 0; u < values.Length; u++)
|
||||
{
|
||||
if (values[u] == n)
|
||||
return (i, n);
|
||||
}
|
||||
}
|
||||
|
||||
return (-1, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
|
@ -1571,13 +1639,37 @@ namespace DutyContent.Tab
|
|||
}
|
||||
else
|
||||
#endif
|
||||
#if false
|
||||
// 매칭 관련
|
||||
if (opcode == 548 || opcode == 288 || opcode == 880 || opcode == 460)
|
||||
if (opcode == 368)
|
||||
{
|
||||
var s = DataToByteString(data);
|
||||
Logger.L("{0}({1}) => {2}", opcode, data.Length, s);
|
||||
}
|
||||
#endif
|
||||
#if true
|
||||
// 페이트
|
||||
(int t, int v) = IndexOfValues(data, 0,
|
||||
// middle la noscea
|
||||
553, 649, 687, 688, 693, 717, 220, 221, 222, 223, 225,
|
||||
226, 227, 229, 231, 233, 235, 237, 238, 239, 240, 1387,
|
||||
1597, 1598, 1599,
|
||||
// southern bozja
|
||||
1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609,
|
||||
1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
|
||||
1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628);
|
||||
if (opcode == 623 && t > 0 && data[0] != 0x3C)
|
||||
{
|
||||
var s = DataToByteString(data);
|
||||
Logger.L("페이트: {0}({1}:{1:X})({2},{3}) => {4}", opcode, v, data.Length, t, s);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// fate & duty & packet
|
||||
if (DcConfig.Duty.PacketForLocal)
|
||||
{
|
||||
// for ACTOZ/Korean service
|
||||
|
||||
// fate
|
||||
if (_new_packet.OpFate == 0 && data.Length > 4 && data[0] == 0x3E)
|
||||
|
@ -1599,11 +1691,6 @@ namespace DutyContent.Tab
|
|||
}
|
||||
}
|
||||
|
||||
// duty & packet
|
||||
if (DcConfig.Duty.PacketForLocal)
|
||||
{
|
||||
// for ACTOZ/Korean service
|
||||
|
||||
// duty
|
||||
if (_new_packet.OpDuty == 0 && data.Length > 12)
|
||||
{
|
||||
|
@ -1654,6 +1741,26 @@ namespace DutyContent.Tab
|
|||
{
|
||||
// for common
|
||||
|
||||
// fate
|
||||
if (_new_packet.OpFate == 0 && data.Length > 20 && data[0] == 0x3C) // real size is 32
|
||||
{
|
||||
var cc = BitConverter.ToUInt16(data, 4);
|
||||
if (IsFateInFindList(cc) && _new_packet.OpFate != opcode)
|
||||
{
|
||||
_new_packet.OpFate = opcode;
|
||||
|
||||
WorkerAct.Invoker(() =>
|
||||
{
|
||||
lstPacketInfo.Items[0].SubItems[2].Text = Locale.Text(10016);
|
||||
lstPacketInfo.Items[0].SubItems[3].Text = _new_packet.OpFate.ToString();
|
||||
});
|
||||
|
||||
_last_fate = cc;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// duty
|
||||
if (_new_packet.OpDuty == 0 && data.Length > 20) // real size is 40
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue