게임강의
각종 노하우 분류

믹스마스터 코어 믹스 패킷 분석

컨텐츠 정보

본문

/* 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;
}

 

믹스 시 패킷 분석한 것 입니다

관련자료

댓글 0
등록된 댓글이 없습니다.
전체 658 / 1 페이지
번호
제목
이름

강의실

🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 147,509
2 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 91,378
3 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 64,195
4 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 59,621
5 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 57,281
6 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 54,964
7 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 52,661
8 no_profile Gatchaman쪽지보내기 자기소개 아이디로 검색 전체게시물 45,503
9 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 35,020
10 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 29,199
알림 0