각종 노하우 분류
믹스마스터 코어 믹스 패킷 분석
컨텐츠 정보
- 98 조회
- 0 추천
- 0 비추천
- 목록
본문
/* WARNING: Could not reconcile some variable overlaps */
/* XNPC::MixCore(unsigned short, PACKET_MIX_INFO const&, bool, bool, float) */
undefined4 __thiscall
MixCore(XNPC *this,ushort param_1,PACKET_MIX_INFO *param_2,bool param_3,bool param_4,float param_5)
{
XHERO *this_00;
XHENCH_INFO *pXVar1;
XHENCH_INFO *pXVar2;
PACKET_MIX_INFO PVar3;
ushort uVar4;
ushort uVar5;
char cVar6;
short sVar7;
int iVar8;
uint uVar9;
uint uVar10;
pthread_t pVar11;
ushort uVar12;
int iVar13;
undefined4 uVar14;
ushort uVar15;
int *piVar16;
float fVar17;
short local_1a64;
uint local_1a60;
uint local_1a5c;
PACKET_MIX_INFO local_1a58;
ushort local_1a56;
ushort local_1a52;
uint local_1a44;
uint local_1a40;
uint local_1a38;
uint local_1a34;
CLogPacket local_1a18 [4108];
XHENCH_INFO local_a0c [4];
undefined8 local_a08;
ushort local_9fe;
char local_9fc [25];
bool local_9e3;
undefined local_9e2;
short local_9e0;
ushort local_9de;
ushort local_9dc;
undefined local_9c0;
undefined2 local_9be;
undefined2 local_9bc;
time_t local_9b4;
undefined2 local_99a;
undefined2 local_998;
undefined2 local_97e;
undefined2 local_97c;
undefined local_964;
st_CreatureSkillData local_95c [888];
undefined local_5e4;
undefined local_560 [1196];
int local_b4;
ushort local_b0;
uint local_ac;
uint local_a8;
undefined4 local_a4;
int local_9c;
int local_94;
undefined local_8d;
undefined4 local_8c;
undefined4 local_88;
undefined4 local_84;
undefined4 local_80;
LOG_DATA_CART local_7c;
undefined local_7b;
undefined4 local_78;
undefined4 local_74;
undefined4 local_70;
LOG_DATA_CART local_6c;
undefined local_6b;
undefined4 local_68;
undefined4 local_64;
XHENCH_INFO *local_60;
LOG_DATA_CART local_5c;
undefined local_5b;
undefined4 local_58;
undefined4 local_54;
XHENCH_INFO *local_50;
LOG_DATA_CART local_4c;
undefined local_4b;
undefined4 local_48;
undefined4 local_44;
XHENCH_INFO *local_40;
LOG_DATA_CART local_3c;
undefined local_3b;
undefined4 local_38;
undefined4 local_34;
undefined *local_30;
LOG_DATA_CART local_2c;
undefined local_2b;
undefined4 local_28;
undefined4 local_24;
int local_20;
int local_1c;
LOG_START_DATA local_17;
undefined local_16;
byte local_15 [5];
iVar8 = (uint)param_1 * 0x1da90 + ZC_Client_Data;
this_00 = (XHERO *)(iVar8 + 0x6c);
local_1a58 = *param_2;
PVar3 = param_2[1];
if (param_4 == false) {
local_1a64 = 10000;
}
else {
if ((this_00[(uint)(byte)local_1a58 * 0x4ac + 0x123e] == (XHERO)0x1) ||
(local_1a64 = 10000, this_00[(uint)(byte)PVar3 * 0x4ac + 0x123e] == (XHERO)0x1)) {
local_1a64 = 0;
}
}
local_1a40 = (uint)(byte)local_1a58;
local_1a44 = (uint)(byte)PVar3;
pXVar1 = (XHENCH_INFO *)(this_00 + local_1a40 * 0x4ac + 0x1214);
pXVar2 = (XHENCH_INFO *)(this_00 + local_1a44 * 0x4ac + 0x1214);
local_1a34 = (uint)(longlong)
ROUND((float)(ulonglong)
(((uint)*(ushort *)(pXVar2 + 0x2e) +
(uint)*(ushort *)(pXVar1 + 0x2e)) * 100) * param_5);
local_1a60 = local_1a34;
if (param_4 == false) {
if (pXVar1[0x2a] == (XHENCH_INFO)0x1) {
fVar17 = powf((float)(uint)*(ushort *)(pXVar1 + 0x2e),2.50000000);
local_1a34 = (uint)(longlong)ROUND((float)((longlong)ROUND(fVar17) & 0xffffffff) * 0.80000001)
;
local_1a60 = local_1a60 + local_1a34;
}
if (pXVar2[0x2a] == (XHENCH_INFO)0x1) {
fVar17 = powf((float)(uint)*(ushort *)(pXVar2 + 0x2e),2.50000000);
local_1a34 = (uint)(longlong)ROUND((float)((longlong)ROUND(fVar17) & 0xffffffff) * 0.80000001)
;
local_1a60 = local_1a60 + local_1a34;
}
}
local_1a5c = local_1a60;
if (param_3 != false) {
local_1a5c = GetCurTaxPrice(*(X_ZONE **)(this + 0x30),local_1a60);
}
if (*(uint *)(iVar8 + 0x94) <= local_1a5c && local_1a5c != *(uint *)(iVar8 + 0x94)) {
return 0;
}
if (*(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1242) <
*(ushort *)
(SMonsterData + (uint)*(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1222) * 0x98 + 0x1e)) {
return 0;
}
if (*(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1242) <
*(ushort *)
(SMonsterData + (uint)*(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1222) * 0x98 + 0x1e)) {
return 0;
}
local_1c = 0;
iVar13 = 9;
piVar16 = &local_b4;
while (iVar13 != 0) {
iVar13 = iVar13 + -1;
*piVar16 = 0;
piVar16 = piVar16 + 1;
}
local_15[0] = 0;
iVar13 = CheckMixItem(this,this_00,&local_b4,(uchar *)(param_2 + 2),'\0');
if (iVar13 != 1) {
return 0;
}
if (local_1a64 == 0) {
return 0;
}
uVar9 = GetMixSuccessRate(this,pXVar1,pXVar2,&local_1c,(MIX_SKILL_INFO *)(iVar8 + 0x18b10),
local_15,&local_b4);
uVar9 = uVar9 & 0xffff;
if (0x639b < uVar9) {
return 0;
}
if ((uVar9 == 0x639c) || (uVar9 == 0)) {
sVar7 = (short)uVar9;
LAB_080cb7a5:
if ((sVar7 == 0x639c) || (sVar7 == 0)) {
return 0;
}
}
else {
if ((short)local_a8 != 0) {
uVar9 = (uint)ROUND(((float)(local_a8 & 0xffff) / 100.00000000) * (float)uVar9);
}
uVar10 = uVar9 + (int)(short)local_a4;
if (10000 < (int)uVar10) {
uVar10 = 10000;
LAB_080cb796:
sVar7 = (short)uVar10;
uVar9 = uVar10;
goto LAB_080cb7a5;
}
uVar9 = 100;
if (99 < (int)uVar10) goto LAB_080cb796;
}
CLogPacket(local_1a18);
local_17 = *(LOG_START_DATA *)(iVar8 + 0x88);
local_16 = 7;
/* try { // try from 080cb7de to 080cb7e2 has its CatchHandler @ 080cc244 */
StartObjectLogPacket(local_1a18,&local_17);
local_70 = *(undefined4 *)(iVar8 + 0x1af3c);
local_78 = 0;
local_7c = (LOG_DATA_CART)0x1;
local_7b = 0;
local_74 = 1;
/* try { // try from 080cb81a to 080cb81e has its CatchHandler @ 080cc242 */
MakeObjectLogPacket(local_1a18,'\0',&local_7c);
/* try { // try from 080cb826 to 080cb93f has its CatchHandler @ 080cc223 */
iVar13 = GetRandom(10000);
if ((uVar9 & 0xffff) < iVar13 + 1U) {
uVar9 = (uint)local_b0;
if (1 < (int)local_ac) {
/* try { // try from 080cc018 to 080cc12d has its CatchHandler @ 080cc223 */
iVar13 = GetRandom(local_ac);
uVar9 = uVar9 + iVar13;
}
local_1a52 = *(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1242);
uVar15 = (ushort)uVar9;
if ((uVar15 < local_1a52) &&
((uVar9 & 0xffff) +
(uint)*(ushort *)
(SMonsterData +
(uint)*(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1222) * 0x98 + 0x1e) <=
(uint)local_1a52)) {
local_1a52 = local_1a52 - uVar15;
}
else {
local_1a52 = 0;
}
uVar12 = *(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1242);
if ((uVar15 < uVar12) &&
((uVar9 & 0xffff) +
(uint)*(ushort *)
(SMonsterData +
(uint)*(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1222) * 0x98 + 0x1e) <=
(uint)uVar12)) {
uVar12 = uVar12 - uVar15;
}
else {
uVar12 = 0;
}
noop();
SetFailMixCore(this_00,(uchar)local_1a58,local_1a52,param_4,local_1a18);
SetFailMixCore(this_00,(uchar)PVar3,uVar12,param_4,local_1a18);
sVar7 = 1;
uVar15 = 0x270e;
local_1a56 = 0;
LAB_080cbc6b:
uVar9 = (uint)local_15[0];
uVar12 = *(ushort *)(iVar8 + 0x18b10 + uVar9 * 2);
if (uVar15 < uVar12) {
*(undefined2 *)(iVar8 + 0x18b10 + uVar9 * 2) = 9999;
}
else {
*(short *)(iVar8 + 0x18b10 + uVar9 * 2) = sVar7 + uVar12;
}
local_80 = 0;
local_8d = 10;
local_84 = *(undefined4 *)(iVar8 + 0x94);
local_8c = 0;
local_88 = 0;
/* try { // try from 080cbccb to 080cbccf has its CatchHandler @ 080cc223 */
SetAsyncGold(this_00,*(int *)(iVar8 + 0x94) - local_1a5c);
local_80 = *(undefined4 *)(iVar8 + 0x94);
local_3c = (LOG_DATA_CART)0x0;
local_3b = 0;
local_38 = 0;
local_30 = &local_8d;
local_34 = 5;
/* try { // try from 080cbd0d to 080cbd11 has its CatchHandler @ 080cc23b */
MakeObjectLogPacket(local_1a18,'\x01',&local_3c);
if (param_2[2] != (PACKET_MIX_INFO)0x50) {
local_20 = iVar8 + 0x18b28 + (uint)(byte)param_2[2] * 0x28;
local_2c = (LOG_DATA_CART)0x2;
local_2b = 0;
local_28 = 1;
local_24 = 2;
/* try { // try from 080cbd5b to 080cbd5f has its CatchHandler @ 080cc23d */
MakeObjectLogPacket(local_1a18,'\0',&local_2c);
/* try { // try from 080cbd7e to 080cbd82 has its CatchHandler @ 080cc223 */
cVar6 = RemoveMyPocketItem(this_00,(uchar)param_2[2],1,false);
if (cVar6 == '\0') {
pVar11 = pthread_self();
addLogOnTime((CLogManager *)g_CriticalLog,pVar11,"[E] Mix Item Remove Error\n");
}
}
if (param_2[3] != (PACKET_MIX_INFO)0x50) {
local_20 = iVar8 + 0x18b28 + (uint)(byte)param_2[3] * 0x28;
local_2c = (LOG_DATA_CART)0x2;
local_2b = 0;
local_28 = 1;
local_24 = 2;
/* try { // try from 080cbdd4 to 080cbdd8 has its CatchHandler @ 080cc23d */
MakeObjectLogPacket(local_1a18,'\0',&local_2c);
/* try { // try from 080cbdf7 to 080cbece has its CatchHandler @ 080cc223 */
cVar6 = RemoveMyPocketItem(this_00,(uchar)param_2[3],1,false);
if (cVar6 == '\0') {
pVar11 = pthread_self();
/* try { // try from 080cc199 to 080cc1bf has its CatchHandler @ 080cc223 */
addLogOnTime((CLogManager *)g_CriticalLog,pVar11,"[E] Mix Item Remove Error\n");
}
}
EndObjectLogPacket(local_1a18);
if (param_3 != false) {
AddGuildTax(*(X_ZONE **)(this + 0x30),local_1a60,1);
}
Clean((XPACKET *)NpcPacket);
AddByte((XPACKET *)NpcPacket,-0x5d);
AddWord((XPACKET *)NpcPacket,local_1a56);
AddByte((XPACKET *)NpcPacket,(uchar)local_1a58);
AddByte((XPACKET *)NpcPacket,local_15[0]);
AddWord((XPACKET *)NpcPacket,*(ushort *)(iVar8 + 0x18b10 + (uint)local_15[0] * 2));
AddTo_ZC_SendQ(param_1,(XPACKET *)NpcPacket);
uVar14 = 1;
}
else {
local_1a56 = *(ushort *)(SMixData + local_1c * 0xc + 8);
uVar15 = *(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1242);
uVar12 = *(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1242);
uVar4 = *(ushort *)
(SMonsterData + (uint)*(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1222) * 0x98 + 0x20)
;
uVar5 = *(ushort *)
(SMonsterData + (uint)*(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1222) * 0x98 + 0x20)
;
local_a08 = CONCAT44(local_a08._4_4_,(undefined4)local_a08);
if ((uVar4 != 0) && (local_a08 = CONCAT44(local_a08._4_4_,(undefined4)local_a08), uVar5 != 0)) {
local_1a38 = 100;
if (uVar12 < uVar4) {
local_1a38 = (int)((uint)uVar12 * 100) / (int)(uint)uVar4 & 0xffff;
}
uVar9 = 100;
if (uVar15 < uVar5) {
uVar9 = (int)((uint)uVar15 * 100) / (int)(uint)uVar5 & 0xffff;
}
local_9de = (short)((int)(uVar9 + local_1a38) / 0x14) +
(short)((int)((uint)uVar15 + (uint)uVar12) >> 1);
noop();
XHENCH_INFO(local_a0c);
local_a0c[0] = (XHENCH_INFO)0x1;
local_9e2 = 0;
uVar9 = (uint)local_1a56;
local_9e0 = *(short *)(this_00 + local_1a40 * 0x4ac + 0x1240) + 1;
local_9dc = *(ushort *)(SMonsterData + uVar9 * 0x98 + 0x20);
local_964 = (undefined)local_94;
local_9fe = local_1a56;
if (local_94 == 0) {
/* try { // try from 080cc1e2 to 080cc20f has its CatchHandler @ 080cc215 */
iVar13 = GetRandom((uint)(byte)SMonsterData[(uint)local_1a56 * 0x98 + 0x83]);
local_964 = *(undefined *)(iVar13 + (uint)local_1a56 * 0x98 + 0x825cffd);
}
if ((local_9dc < local_9de) && (local_9de = local_9dc, 200 < local_9dc)) {
local_9de = 200;
}
if (local_9c == 0) {
SetSex(local_a0c,SMonsterData[uVar9 * 0x98 + 0x28]);
}
else {
local_9e3 = local_9c != 10;
}
iVar13 = uVar9 * 0x98;
strcpy(local_9fc,SMonsterData + iVar13 + 4);
local_9c0 = SMonsterData[iVar13 + 0x29];
local_9be = *(undefined2 *)(SMonsterData + iVar13 + 0x2c);
local_9bc = *(undefined2 *)(SMonsterData + iVar13 + 0x30);
/* try { // try from 080cba39 to 080cbb1b has its CatchHandler @ 080cc215 */
GetBaseExp(local_9de);
SetExp((long_long)local_a0c);
SetHenchStat(local_a0c,false,true);
local_97e = 0;
local_97c = 0;
Refresh(local_a0c,true,false);
local_99a = 0;
local_998 = 0;
local_5e4 = 1;
SetUsableMonsterSkills
(g_pCSkillDriver,'\x02',SMonsterData[(uint)local_9fe * 0x98 + 0x1d],local_9de,
local_95c,'\0');
local_a08 = GetSerial('\a',*(uchar *)((uint)param_1 * 0x1da90 + 0x88 + ZC_Client_Data));
local_9b4 = time((time_t *)0x0);
local_6c = (LOG_DATA_CART)0x3;
local_6b = 3;
local_68 = 1;
local_64 = 3;
local_60 = pXVar1;
/* try { // try from 080cbb71 to 080cbb75 has its CatchHandler @ 080cc215 */
MakeObjectLogPacket(local_1a18,'\0',&local_6c);
local_5c = (LOG_DATA_CART)0x3;
local_5b = 3;
local_58 = 1;
local_54 = 3;
local_50 = pXVar2;
/* try { // try from 080cbbad to 080cbbb1 has its CatchHandler @ 080cc256 */
MakeObjectLogPacket(local_1a18,'\0',&local_5c);
local_40 = local_a0c;
local_4c = (LOG_DATA_CART)0x1;
local_4b = 7;
local_48 = 1;
local_44 = 3;
/* try { // try from 080cbbe9 to 080cbbed has its CatchHandler @ 080cc254 */
MakeObjectLogPacket(local_1a18,'\0',&local_4c);
/* try { // try from 080cbbfb to 080cbc11 has its CatchHandler @ 080cc215 */
RemoveMyPocketHench(this_00,(uchar)local_1a58);
RemoveMyPocketHench(this_00,(uchar)PVar3);
memcpy(local_560,local_a0c,0x4ac);
/* try { // try from 080cbc39 to 080cbc3d has its CatchHandler @ 080cc246 */
sVar7 = AddMyPocketHench(this_00,SUB41(local_560,0));
local_1a58 = SUB21(sVar7,0);
if (-1 < sVar7) {
/* try { // try from 080cbc5c to 080cbc60 has its CatchHandler @ 080cc215 */
AddMixLog(this_00,(uint)local_9fe);
sVar7 = 2;
uVar15 = 0x270d;
goto LAB_080cbc6b;
}
}
uVar14 = 0;
}
~CLogPacket(local_1a18);
return uVar14;
}
믹스 시 패킷 분석한 것 입니다
/* XNPC::MixCore(unsigned short, PACKET_MIX_INFO const&, bool, bool, float) */
undefined4 __thiscall
MixCore(XNPC *this,ushort param_1,PACKET_MIX_INFO *param_2,bool param_3,bool param_4,float param_5)
{
XHERO *this_00;
XHENCH_INFO *pXVar1;
XHENCH_INFO *pXVar2;
PACKET_MIX_INFO PVar3;
ushort uVar4;
ushort uVar5;
char cVar6;
short sVar7;
int iVar8;
uint uVar9;
uint uVar10;
pthread_t pVar11;
ushort uVar12;
int iVar13;
undefined4 uVar14;
ushort uVar15;
int *piVar16;
float fVar17;
short local_1a64;
uint local_1a60;
uint local_1a5c;
PACKET_MIX_INFO local_1a58;
ushort local_1a56;
ushort local_1a52;
uint local_1a44;
uint local_1a40;
uint local_1a38;
uint local_1a34;
CLogPacket local_1a18 [4108];
XHENCH_INFO local_a0c [4];
undefined8 local_a08;
ushort local_9fe;
char local_9fc [25];
bool local_9e3;
undefined local_9e2;
short local_9e0;
ushort local_9de;
ushort local_9dc;
undefined local_9c0;
undefined2 local_9be;
undefined2 local_9bc;
time_t local_9b4;
undefined2 local_99a;
undefined2 local_998;
undefined2 local_97e;
undefined2 local_97c;
undefined local_964;
st_CreatureSkillData local_95c [888];
undefined local_5e4;
undefined local_560 [1196];
int local_b4;
ushort local_b0;
uint local_ac;
uint local_a8;
undefined4 local_a4;
int local_9c;
int local_94;
undefined local_8d;
undefined4 local_8c;
undefined4 local_88;
undefined4 local_84;
undefined4 local_80;
LOG_DATA_CART local_7c;
undefined local_7b;
undefined4 local_78;
undefined4 local_74;
undefined4 local_70;
LOG_DATA_CART local_6c;
undefined local_6b;
undefined4 local_68;
undefined4 local_64;
XHENCH_INFO *local_60;
LOG_DATA_CART local_5c;
undefined local_5b;
undefined4 local_58;
undefined4 local_54;
XHENCH_INFO *local_50;
LOG_DATA_CART local_4c;
undefined local_4b;
undefined4 local_48;
undefined4 local_44;
XHENCH_INFO *local_40;
LOG_DATA_CART local_3c;
undefined local_3b;
undefined4 local_38;
undefined4 local_34;
undefined *local_30;
LOG_DATA_CART local_2c;
undefined local_2b;
undefined4 local_28;
undefined4 local_24;
int local_20;
int local_1c;
LOG_START_DATA local_17;
undefined local_16;
byte local_15 [5];
iVar8 = (uint)param_1 * 0x1da90 + ZC_Client_Data;
this_00 = (XHERO *)(iVar8 + 0x6c);
local_1a58 = *param_2;
PVar3 = param_2[1];
if (param_4 == false) {
local_1a64 = 10000;
}
else {
if ((this_00[(uint)(byte)local_1a58 * 0x4ac + 0x123e] == (XHERO)0x1) ||
(local_1a64 = 10000, this_00[(uint)(byte)PVar3 * 0x4ac + 0x123e] == (XHERO)0x1)) {
local_1a64 = 0;
}
}
local_1a40 = (uint)(byte)local_1a58;
local_1a44 = (uint)(byte)PVar3;
pXVar1 = (XHENCH_INFO *)(this_00 + local_1a40 * 0x4ac + 0x1214);
pXVar2 = (XHENCH_INFO *)(this_00 + local_1a44 * 0x4ac + 0x1214);
local_1a34 = (uint)(longlong)
ROUND((float)(ulonglong)
(((uint)*(ushort *)(pXVar2 + 0x2e) +
(uint)*(ushort *)(pXVar1 + 0x2e)) * 100) * param_5);
local_1a60 = local_1a34;
if (param_4 == false) {
if (pXVar1[0x2a] == (XHENCH_INFO)0x1) {
fVar17 = powf((float)(uint)*(ushort *)(pXVar1 + 0x2e),2.50000000);
local_1a34 = (uint)(longlong)ROUND((float)((longlong)ROUND(fVar17) & 0xffffffff) * 0.80000001)
;
local_1a60 = local_1a60 + local_1a34;
}
if (pXVar2[0x2a] == (XHENCH_INFO)0x1) {
fVar17 = powf((float)(uint)*(ushort *)(pXVar2 + 0x2e),2.50000000);
local_1a34 = (uint)(longlong)ROUND((float)((longlong)ROUND(fVar17) & 0xffffffff) * 0.80000001)
;
local_1a60 = local_1a60 + local_1a34;
}
}
local_1a5c = local_1a60;
if (param_3 != false) {
local_1a5c = GetCurTaxPrice(*(X_ZONE **)(this + 0x30),local_1a60);
}
if (*(uint *)(iVar8 + 0x94) <= local_1a5c && local_1a5c != *(uint *)(iVar8 + 0x94)) {
return 0;
}
if (*(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1242) <
*(ushort *)
(SMonsterData + (uint)*(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1222) * 0x98 + 0x1e)) {
return 0;
}
if (*(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1242) <
*(ushort *)
(SMonsterData + (uint)*(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1222) * 0x98 + 0x1e)) {
return 0;
}
local_1c = 0;
iVar13 = 9;
piVar16 = &local_b4;
while (iVar13 != 0) {
iVar13 = iVar13 + -1;
*piVar16 = 0;
piVar16 = piVar16 + 1;
}
local_15[0] = 0;
iVar13 = CheckMixItem(this,this_00,&local_b4,(uchar *)(param_2 + 2),'\0');
if (iVar13 != 1) {
return 0;
}
if (local_1a64 == 0) {
return 0;
}
uVar9 = GetMixSuccessRate(this,pXVar1,pXVar2,&local_1c,(MIX_SKILL_INFO *)(iVar8 + 0x18b10),
local_15,&local_b4);
uVar9 = uVar9 & 0xffff;
if (0x639b < uVar9) {
return 0;
}
if ((uVar9 == 0x639c) || (uVar9 == 0)) {
sVar7 = (short)uVar9;
LAB_080cb7a5:
if ((sVar7 == 0x639c) || (sVar7 == 0)) {
return 0;
}
}
else {
if ((short)local_a8 != 0) {
uVar9 = (uint)ROUND(((float)(local_a8 & 0xffff) / 100.00000000) * (float)uVar9);
}
uVar10 = uVar9 + (int)(short)local_a4;
if (10000 < (int)uVar10) {
uVar10 = 10000;
LAB_080cb796:
sVar7 = (short)uVar10;
uVar9 = uVar10;
goto LAB_080cb7a5;
}
uVar9 = 100;
if (99 < (int)uVar10) goto LAB_080cb796;
}
CLogPacket(local_1a18);
local_17 = *(LOG_START_DATA *)(iVar8 + 0x88);
local_16 = 7;
/* try { // try from 080cb7de to 080cb7e2 has its CatchHandler @ 080cc244 */
StartObjectLogPacket(local_1a18,&local_17);
local_70 = *(undefined4 *)(iVar8 + 0x1af3c);
local_78 = 0;
local_7c = (LOG_DATA_CART)0x1;
local_7b = 0;
local_74 = 1;
/* try { // try from 080cb81a to 080cb81e has its CatchHandler @ 080cc242 */
MakeObjectLogPacket(local_1a18,'\0',&local_7c);
/* try { // try from 080cb826 to 080cb93f has its CatchHandler @ 080cc223 */
iVar13 = GetRandom(10000);
if ((uVar9 & 0xffff) < iVar13 + 1U) {
uVar9 = (uint)local_b0;
if (1 < (int)local_ac) {
/* try { // try from 080cc018 to 080cc12d has its CatchHandler @ 080cc223 */
iVar13 = GetRandom(local_ac);
uVar9 = uVar9 + iVar13;
}
local_1a52 = *(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1242);
uVar15 = (ushort)uVar9;
if ((uVar15 < local_1a52) &&
((uVar9 & 0xffff) +
(uint)*(ushort *)
(SMonsterData +
(uint)*(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1222) * 0x98 + 0x1e) <=
(uint)local_1a52)) {
local_1a52 = local_1a52 - uVar15;
}
else {
local_1a52 = 0;
}
uVar12 = *(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1242);
if ((uVar15 < uVar12) &&
((uVar9 & 0xffff) +
(uint)*(ushort *)
(SMonsterData +
(uint)*(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1222) * 0x98 + 0x1e) <=
(uint)uVar12)) {
uVar12 = uVar12 - uVar15;
}
else {
uVar12 = 0;
}
noop();
SetFailMixCore(this_00,(uchar)local_1a58,local_1a52,param_4,local_1a18);
SetFailMixCore(this_00,(uchar)PVar3,uVar12,param_4,local_1a18);
sVar7 = 1;
uVar15 = 0x270e;
local_1a56 = 0;
LAB_080cbc6b:
uVar9 = (uint)local_15[0];
uVar12 = *(ushort *)(iVar8 + 0x18b10 + uVar9 * 2);
if (uVar15 < uVar12) {
*(undefined2 *)(iVar8 + 0x18b10 + uVar9 * 2) = 9999;
}
else {
*(short *)(iVar8 + 0x18b10 + uVar9 * 2) = sVar7 + uVar12;
}
local_80 = 0;
local_8d = 10;
local_84 = *(undefined4 *)(iVar8 + 0x94);
local_8c = 0;
local_88 = 0;
/* try { // try from 080cbccb to 080cbccf has its CatchHandler @ 080cc223 */
SetAsyncGold(this_00,*(int *)(iVar8 + 0x94) - local_1a5c);
local_80 = *(undefined4 *)(iVar8 + 0x94);
local_3c = (LOG_DATA_CART)0x0;
local_3b = 0;
local_38 = 0;
local_30 = &local_8d;
local_34 = 5;
/* try { // try from 080cbd0d to 080cbd11 has its CatchHandler @ 080cc23b */
MakeObjectLogPacket(local_1a18,'\x01',&local_3c);
if (param_2[2] != (PACKET_MIX_INFO)0x50) {
local_20 = iVar8 + 0x18b28 + (uint)(byte)param_2[2] * 0x28;
local_2c = (LOG_DATA_CART)0x2;
local_2b = 0;
local_28 = 1;
local_24 = 2;
/* try { // try from 080cbd5b to 080cbd5f has its CatchHandler @ 080cc23d */
MakeObjectLogPacket(local_1a18,'\0',&local_2c);
/* try { // try from 080cbd7e to 080cbd82 has its CatchHandler @ 080cc223 */
cVar6 = RemoveMyPocketItem(this_00,(uchar)param_2[2],1,false);
if (cVar6 == '\0') {
pVar11 = pthread_self();
addLogOnTime((CLogManager *)g_CriticalLog,pVar11,"[E] Mix Item Remove Error\n");
}
}
if (param_2[3] != (PACKET_MIX_INFO)0x50) {
local_20 = iVar8 + 0x18b28 + (uint)(byte)param_2[3] * 0x28;
local_2c = (LOG_DATA_CART)0x2;
local_2b = 0;
local_28 = 1;
local_24 = 2;
/* try { // try from 080cbdd4 to 080cbdd8 has its CatchHandler @ 080cc23d */
MakeObjectLogPacket(local_1a18,'\0',&local_2c);
/* try { // try from 080cbdf7 to 080cbece has its CatchHandler @ 080cc223 */
cVar6 = RemoveMyPocketItem(this_00,(uchar)param_2[3],1,false);
if (cVar6 == '\0') {
pVar11 = pthread_self();
/* try { // try from 080cc199 to 080cc1bf has its CatchHandler @ 080cc223 */
addLogOnTime((CLogManager *)g_CriticalLog,pVar11,"[E] Mix Item Remove Error\n");
}
}
EndObjectLogPacket(local_1a18);
if (param_3 != false) {
AddGuildTax(*(X_ZONE **)(this + 0x30),local_1a60,1);
}
Clean((XPACKET *)NpcPacket);
AddByte((XPACKET *)NpcPacket,-0x5d);
AddWord((XPACKET *)NpcPacket,local_1a56);
AddByte((XPACKET *)NpcPacket,(uchar)local_1a58);
AddByte((XPACKET *)NpcPacket,local_15[0]);
AddWord((XPACKET *)NpcPacket,*(ushort *)(iVar8 + 0x18b10 + (uint)local_15[0] * 2));
AddTo_ZC_SendQ(param_1,(XPACKET *)NpcPacket);
uVar14 = 1;
}
else {
local_1a56 = *(ushort *)(SMixData + local_1c * 0xc + 8);
uVar15 = *(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1242);
uVar12 = *(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1242);
uVar4 = *(ushort *)
(SMonsterData + (uint)*(ushort *)(this_00 + local_1a40 * 0x4ac + 0x1222) * 0x98 + 0x20)
;
uVar5 = *(ushort *)
(SMonsterData + (uint)*(ushort *)(this_00 + local_1a44 * 0x4ac + 0x1222) * 0x98 + 0x20)
;
local_a08 = CONCAT44(local_a08._4_4_,(undefined4)local_a08);
if ((uVar4 != 0) && (local_a08 = CONCAT44(local_a08._4_4_,(undefined4)local_a08), uVar5 != 0)) {
local_1a38 = 100;
if (uVar12 < uVar4) {
local_1a38 = (int)((uint)uVar12 * 100) / (int)(uint)uVar4 & 0xffff;
}
uVar9 = 100;
if (uVar15 < uVar5) {
uVar9 = (int)((uint)uVar15 * 100) / (int)(uint)uVar5 & 0xffff;
}
local_9de = (short)((int)(uVar9 + local_1a38) / 0x14) +
(short)((int)((uint)uVar15 + (uint)uVar12) >> 1);
noop();
XHENCH_INFO(local_a0c);
local_a0c[0] = (XHENCH_INFO)0x1;
local_9e2 = 0;
uVar9 = (uint)local_1a56;
local_9e0 = *(short *)(this_00 + local_1a40 * 0x4ac + 0x1240) + 1;
local_9dc = *(ushort *)(SMonsterData + uVar9 * 0x98 + 0x20);
local_964 = (undefined)local_94;
local_9fe = local_1a56;
if (local_94 == 0) {
/* try { // try from 080cc1e2 to 080cc20f has its CatchHandler @ 080cc215 */
iVar13 = GetRandom((uint)(byte)SMonsterData[(uint)local_1a56 * 0x98 + 0x83]);
local_964 = *(undefined *)(iVar13 + (uint)local_1a56 * 0x98 + 0x825cffd);
}
if ((local_9dc < local_9de) && (local_9de = local_9dc, 200 < local_9dc)) {
local_9de = 200;
}
if (local_9c == 0) {
SetSex(local_a0c,SMonsterData[uVar9 * 0x98 + 0x28]);
}
else {
local_9e3 = local_9c != 10;
}
iVar13 = uVar9 * 0x98;
strcpy(local_9fc,SMonsterData + iVar13 + 4);
local_9c0 = SMonsterData[iVar13 + 0x29];
local_9be = *(undefined2 *)(SMonsterData + iVar13 + 0x2c);
local_9bc = *(undefined2 *)(SMonsterData + iVar13 + 0x30);
/* try { // try from 080cba39 to 080cbb1b has its CatchHandler @ 080cc215 */
GetBaseExp(local_9de);
SetExp((long_long)local_a0c);
SetHenchStat(local_a0c,false,true);
local_97e = 0;
local_97c = 0;
Refresh(local_a0c,true,false);
local_99a = 0;
local_998 = 0;
local_5e4 = 1;
SetUsableMonsterSkills
(g_pCSkillDriver,'\x02',SMonsterData[(uint)local_9fe * 0x98 + 0x1d],local_9de,
local_95c,'\0');
local_a08 = GetSerial('\a',*(uchar *)((uint)param_1 * 0x1da90 + 0x88 + ZC_Client_Data));
local_9b4 = time((time_t *)0x0);
local_6c = (LOG_DATA_CART)0x3;
local_6b = 3;
local_68 = 1;
local_64 = 3;
local_60 = pXVar1;
/* try { // try from 080cbb71 to 080cbb75 has its CatchHandler @ 080cc215 */
MakeObjectLogPacket(local_1a18,'\0',&local_6c);
local_5c = (LOG_DATA_CART)0x3;
local_5b = 3;
local_58 = 1;
local_54 = 3;
local_50 = pXVar2;
/* try { // try from 080cbbad to 080cbbb1 has its CatchHandler @ 080cc256 */
MakeObjectLogPacket(local_1a18,'\0',&local_5c);
local_40 = local_a0c;
local_4c = (LOG_DATA_CART)0x1;
local_4b = 7;
local_48 = 1;
local_44 = 3;
/* try { // try from 080cbbe9 to 080cbbed has its CatchHandler @ 080cc254 */
MakeObjectLogPacket(local_1a18,'\0',&local_4c);
/* try { // try from 080cbbfb to 080cbc11 has its CatchHandler @ 080cc215 */
RemoveMyPocketHench(this_00,(uchar)local_1a58);
RemoveMyPocketHench(this_00,(uchar)PVar3);
memcpy(local_560,local_a0c,0x4ac);
/* try { // try from 080cbc39 to 080cbc3d has its CatchHandler @ 080cc246 */
sVar7 = AddMyPocketHench(this_00,SUB41(local_560,0));
local_1a58 = SUB21(sVar7,0);
if (-1 < sVar7) {
/* try { // try from 080cbc5c to 080cbc60 has its CatchHandler @ 080cc215 */
AddMixLog(this_00,(uint)local_9fe);
sVar7 = 2;
uVar15 = 0x270d;
goto LAB_080cbc6b;
}
}
uVar14 = 0;
}
~CLogPacket(local_1a18);
return uVar14;
}
믹스 시 패킷 분석한 것 입니다
-
등록일 10.10
-
등록일 10.10
-
등록일 10.10
-
등록일 10.09
관련자료
댓글 0
등록된 댓글이 없습니다.