========== fabrica FUN_00659100 @ 00659113 ==========
-- funcao: FUN_00659100 @ 00659100

/* WARNING: Function: __EH_prolog3 replaced with injection: EH_prolog3 */
/* WARNING: Function: __EH_epilog3 replaced with injection: EH_epilog3 */

void FUN_00659100(undefined4 param_1)

{
  char cVar1;
  u_short uVar2;
  u_long uVar3;
  int iVar4;
  int iVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  undefined **local_44;
  undefined4 local_40;
  undefined4 local_3c;
  undefined1 local_38 [12];
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined **local_20;
  int local_1c;
  undefined4 local_18;
  int local_14;
  int local_8;
  undefined4 uStack_4;
  
  uStack_4 = 0x34;
  local_20 = AMOPacket::CCharInfoEquipViewPacket::vftable;
  local_1c = 0;
  local_18 = 0;
  local_8 = 0;
  cVar1 = FUN_004a3e78(param_1);
  iVar4 = local_1c;
  if (cVar1 != '\0') {
    uVar2 = ntohs(*(u_short *)(local_1c + 10));
    if (uVar2 == 0x23e) {
      FUN_00422b0a();
      local_44 = AMOPacket::CCharInfoEquipViewPacket::vftable;
      local_40 = 0;
      local_3c = 0;
      local_8._0_1_ = 2;
      uVar6 = 0;
      if (*(int *)(DAT_008db7ec + 0x7e28) == 0) {
        uVar7 = 0x23f;
      }
      else {
        uVar7 = 0x240;
      }
      uVar3 = ntohl(*(u_long *)(iVar4 + 6));
      FUN_004a5e69(local_38,uVar3,uVar7,uVar6);
      FUN_0064458f(local_38);
      local_8 = (uint)local_8._1_3_ << 8;
      FUN_004235a0();
    }
    else if (uVar2 == 0x23f) {
      uVar3 = ntohl(*(u_long *)(iVar4 + 6));
      local_14 = FUN_004203ec(uVar3);
      if (local_14 != 0) {
        local_2c = 0;
        local_28 = 0;
        local_24 = 0;
        FUN_0044aa51();
        iVar4 = FUN_004498d3(0x3a9e);
        FUN_00615684();
        iVar5 = FUN_006121dc(0x3a9d);
        if ((iVar4 != 0) && (iVar5 != 0)) {
          iVar5 = FUN_00441f56(0);
          if (iVar5 == 0) {
            local_44 = *(undefined ***)(iVar4 + 0x90);
            local_40 = *(undefined4 *)(iVar4 + 0x80);
            local_3c = *(undefined4 *)(iVar4 + 0x84);
            FUN_00589598(&local_44);
            FUN_004a1985(0,&local_2c);
          }
          uVar6 = 0x3a9d;
          FUN_00615684(0x3a9d);
          FUN_0061f171(uVar6);
          uVar3 = ntohl(*(u_long *)(local_1c + 0xc));
          iVar4 = 0;
          if (0 < (int)uVar3) {
            do {
              iVar5 = FUN_006525c4(iVar4);
              if (('\0' < *(char *)(iVar5 + 6)) && (*(char *)(iVar5 + 6) < '\x1f')) {
                uVar6 = 0x3a9d;
                FUN_00615684(0x3a9d,iVar5);
                FUN_0061f1d2(uVar6,iVar5);
              }
              iVar4 = iVar4 + 1;
            } while (iVar4 < (int)uVar3);
          }
          iVar4 = FUN_00453123(0x3a9d,1);
          if (iVar4 != 0) {
            FUN_00455617();
            FUN_00499f23(*(undefined4 *)(local_14 + 0x6a8));
          }
        }
      }
    }
    else if (uVar2 == 0x240) {
      uVar7 = 0;
      uVar6 = 0x7406;
      thunk_FUN_0045135c(0x7406,0);
      uVar6 = FUN_0044fc66(uVar6,uVar7);
      if (DAT_008e0370 == 0) {
        FUN_004517a3(0,&DAT_00838053,uVar6,2,1,0xffffffff,0);
      }
    }
  }
  return;
}



========== usa a vtable (a) @ 004a2ffd ==========
-- funcao: FUN_004a2ff3 @ 004a2ff3

void __fastcall FUN_004a2ff3(undefined4 *param_1)

{
  param_1[1] = 0;
  param_1[2] = 0;
  *param_1 = AMOPacket::CCharInfoEquipViewPacket::vftable;
  return;
}



========== usa a vtable (b) @ 004a66d1 ==========
-- funcao: FUN_004a63a2 @ 004a63a2

/* WARNING: Function: __EH_prolog3_GS replaced with injection: EH_prolog3 */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void __thiscall FUN_004a63a2(int param_1,int param_2,int param_3)

{
  int iVar1;
  int *piVar2;
  float *pfVar3;
  float *pfVar4;
  float10 fVar5;
  undefined *puVar6;
  undefined4 uVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  char *_Str2;
  undefined1 local_5c [24];
  undefined1 local_44 [24];
  undefined **local_2c;
  undefined **local_28;
  undefined **local_24;
  float local_20;
  undefined4 *local_1c;
  float local_18;
  int local_8;
  undefined4 uStack_4;
  
  uStack_4 = 0x4c;
  local_8 = 0x4a63ae;
  if (param_2 != 1) goto LAB_004a6bda;
  if ((*(int *)(param_1 + 0x1c8) == param_3) && (*(int *)(param_1 + 0x1f8) == 0)) {
    iVar1 = FUN_004521c1(0xea95);
    if (iVar1 != 0) {
      if (*(int *)(iVar1 + 4) == 0) {
        iVar1 = 0;
      }
      else {
        iVar1 = *(int *)(*(int *)(iVar1 + 4) + 8);
      }
      if ((iVar1 == 0xe145) && (*(int *)(param_1 + 0xb8) != 0)) {
        FUN_00566322(8,param_1 + 0xbc);
      }
    }
    goto LAB_004a6bd0;
  }
  if ((*(int *)(param_1 + 0x1d0) == param_3) && (*(int *)(param_1 + 0x1f8) == 0)) {
    FUN_005e9b8d(*(undefined4 *)(param_1 + 0xb8),param_1 + 0xbc);
    goto LAB_004a6bcb;
  }
  if ((*(int *)(param_1 + 0x1d4) == param_3) && (*(int *)(param_1 + 0x1f8) == 0)) {
    piVar2 = (int *)thunk_FUN_00671e3d();
    if (*piVar2 == 0) {
      uVar8 = 0;
      uVar7 = 0x503b;
      thunk_FUN_0045135c(0x503b,0);
      uVar7 = FUN_0044fc66(uVar7,uVar8);
      uVar9 = 0;
      uVar8 = 0x797c;
      thunk_FUN_0045135c(0x797c,0);
      uVar8 = FUN_0044fc66(uVar8,uVar9);
      if (DAT_008e0370 == 0) {
        FUN_004517a3(0,uVar8,uVar7,2,1,0xffffffff,0);
      }
      FUN_00455620();
      goto LAB_004a6bda;
    }
    iVar1 = *(int *)(*(int *)(DAT_008db7ec + 0x8480) + 0x174);
    if (0 < iVar1) {
      if (iVar1 < 4) {
        uVar7 = 0x4f6c;
      }
      else {
        if (5 < iVar1) goto LAB_004a6bd0;
        iVar1 = FUN_005d0daa();
        if (iVar1 == 0) {
          _Str2 = (char *)(param_1 + 0xbc);
          iVar1 = _strcmp((char *)(*(int *)(*(int *)(*(int *)(DAT_008db7ec + 0x8480) + 0x6a8) + 8) +
                                  4),_Str2);
          if (iVar1 == 0) {
            uVar7 = FUN_0041e29a();
            uVar9 = 0;
            uVar8 = 0x4f6e;
            *(undefined4 *)(param_1 + 0xb8) = uVar7;
            thunk_FUN_0045135c(0x4f6e,0);
            uVar7 = FUN_0044fc66(uVar8,uVar9);
            uVar9 = 0;
            uVar8 = 0x797c;
            thunk_FUN_0045135c(0x797c,0);
            uVar8 = FUN_0044fc66(uVar8,uVar9);
            if (DAT_008e0370 == 0) {
              FUN_004517a3(0,uVar8,uVar7,2,1,0xffffffff,0);
            }
            goto LAB_004a6bda;
          }
          uVar7 = *(undefined4 *)(param_1 + 0xb8);
          thunk_FUN_006730c6(uVar7,_Str2);
          FUN_00673405(uVar7,_Str2);
          goto LAB_004a6bcb;
        }
        uVar7 = 0x7b65;
      }
LAB_004a6b63:
      uVar8 = 0;
      thunk_FUN_0045135c(uVar7,0);
      uVar7 = FUN_0044fc66(uVar7,uVar8);
      uVar9 = 0;
      uVar8 = 0x797c;
      thunk_FUN_0045135c(0x797c,0);
      uVar8 = FUN_0044fc66(uVar8,uVar9);
      if (DAT_008e0370 == 0) {
        FUN_004517a3(0,uVar8,uVar7,2,1,0xffffffff,0);
      }
    }
  }
  else {
    if ((*(int *)(param_1 + 0x1cc) == param_3) && (*(int *)(param_1 + 0x1f8) == 0)) {
      FUN_005ea1b7(param_1 + 0xbc);
      goto LAB_004a6bd0;
    }
    if ((*(int *)(param_1 + 0x1d8) == param_3) && (*(int *)(param_1 + 0x1f8) == 0)) {
      if (*(char *)(param_1 + 0x1bc) == '\x01') {
        FUN_00422b0a();
        local_2c = AMOPacket::CCommunityGuardianReqPacket::vftable;
        local_24 = (undefined **)0x0;
        local_20 = 0.0;
        local_8._0_1_ = 1;
        local_8._1_3_ = 0;
        FUN_0044493b(local_44,1,*(undefined4 *)(param_1 + 0xb8),0x1de,&DAT_00838053);
        FUN_0064458f(local_44);
        local_8 = (uint)local_8._1_3_ << 8;
      }
      else {
        FUN_00422b0a();
        local_2c = AMOPacket::CCommunityGuardianReqPacket::vftable;
        local_24 = (undefined **)0x0;
        local_20 = 0.0;
        local_8._0_1_ = 3;
        local_8._1_3_ = 0;
        FUN_0044493b(local_44,0,*(undefined4 *)(param_1 + 0xb8),0x1de,&DAT_00838053);
        FUN_0064458f(local_44);
        local_8 = CONCAT31(local_8._1_3_,2);
      }
      FUN_00444902();
    }
    else {
      if (*(int *)(param_1 + 0x1dc) != param_3) {
        if ((*(int *)(param_1 + 0x1e0) == param_3) && (*(int *)(param_1 + 0x1f8) == 0)) {
          iVar1 = FUN_004a46dd(*(undefined4 *)(param_1 + 0xb8));
          if (iVar1 != 0) {
            FUN_005f72c8(*(undefined4 *)(param_1 + 0xb8));
            goto LAB_004a6bcb;
          }
          FUN_00438e28(0,0x797c,0x795d,0xb000,1,0xffffffff,0);
        }
        else if ((*(int *)(param_1 + 0x1e4) == param_3) && (*(int *)(param_1 + 0x1f8) == 0)) {
          iVar1 = FUN_005dc772();
          if ((iVar1 == 1) || (iVar1 = FUN_005dc772(), iVar1 == 2)) {
            FUN_005d3e49(1,0,*(undefined4 *)(param_1 + 0xb8),&DAT_008e2e24,0,0);
            uVar7 = FUN_005d4028();
            FUN_005ec724(uVar7);
            FUN_005d32e8(1);
            FUN_005d3351(1);
            FUN_005d333b(0);
            FUN_0043a3b4(1);
          }
        }
        else if ((*(int *)(param_1 + 0x1e8) == param_3) && (*(int *)(param_1 + 0x1f8) == 0)) {
          if ((*(int *)(DAT_008db7ec + 0x90c94) != 0) &&
             (local_18 = *(float *)(DAT_008db7ec + 0x68ac), local_18 != 0.0)) {
            local_1c = (undefined4 *)FUN_0041f780();
            iVar1 = FUN_0041f780();
            iVar1 = FUN_006c022d(*local_1c,*(undefined4 *)(iVar1 + 8));
            if (iVar1 == 0) {
              iVar1 = FUN_005dc752(*(undefined4 *)(DAT_008db7ec + 0x8480),DAT_008e16d4);
              if (iVar1 == 0) {
                uVar7 = 0x7ada;
                goto LAB_004a6b63;
              }
              local_1c = (undefined4 *)FUN_004203ec(*(undefined4 *)(param_1 + 0xb8));
              if ((local_1c != (undefined4 *)0x0) && (iVar1 = FUN_005dc772(), iVar1 == 0x14)) {
                pfVar3 = (float *)FUN_0041f780();
                pfVar4 = (float *)FUN_0041f780();
                local_28 = (undefined **)(*pfVar4 - *pfVar3);
                local_24 = (undefined **)(pfVar4[1] - pfVar3[1]);
                local_20 = pfVar4[2] - pfVar3[2];
                local_18 = local_20 * local_20 +
                           (float)local_28 * (float)local_28 + (float)local_24 * (float)local_24;
                fVar5 = (float10)FUN_00401440(local_18);
                if (fVar5 <= (float10)_DAT_007fbb18) {
                  FUN_00615684();
                  FUN_00626083(*(undefined4 *)(param_1 + 0xb8));
                }
                else {
                  uVar7 = FUN_0041f780();
                  iVar1 = FUN_005ec724(uVar7);
                  if (iVar1 != 0) {
                    uVar9 = 0;
                    uVar8 = 0;
                    puVar6 = &DAT_008e2e24;
                    uVar7 = FUN_0041e29a(&DAT_008e2e24,0,0);
                    FUN_005d3e49(1,0,uVar7,puVar6,uVar8,uVar9);
                    FUN_005d32e8(1);
                  }
                }
              }
              goto LAB_004a6bd0;
            }
          }
          uVar8 = 0;
          uVar7 = 0x7ad1;
          thunk_FUN_0045135c(0x7ad1,0);
          uVar7 = FUN_0044fc66(uVar7,uVar8);
          FUN_0043907d(9,&DAT_00838053,uVar7);
        }
        else if (*(int *)(param_1 + 0x1ec) == param_3) {
          iVar1 = FUN_004203ec(*(undefined4 *)(param_1 + 0xb8));
          if (iVar1 != 0) {
            if (((*(char *)(iVar1 + 0x2ed) == '\0') || (iVar1 = FUN_0048a444(), iVar1 != 0)) ||
               (iVar1 = FUN_005dc772(), 3 < iVar1)) {
              uVar7 = 0x8150;
            }
            else {
              local_18 = *(float *)(DAT_008db7ec + 0x8480);
              pfVar3 = (float *)FUN_0041f780();
              pfVar4 = (float *)FUN_0041f780();
              local_1c = (undefined4 *)(*pfVar4 - *pfVar3);
              local_18 = pfVar4[1] - pfVar3[1];
              local_20 = (pfVar4[2] - pfVar3[2]) * (pfVar4[2] - pfVar3[2]) +
                         (float)local_1c * (float)local_1c + local_18 * local_18;
              fVar5 = (float10)FUN_00401440(local_20);
              local_20 = (float)fVar5;
              if (local_20 < (float)_DAT_007fbb18 != (local_20 == (float)_DAT_007fbb18)) {
                FUN_00422b0a();
                local_24 = AMOPacket::CCommunityBoardingPacket::vftable;
                local_8 = 7;
                FUN_00452d98(local_5c,*(undefined4 *)(param_1 + 0xb8),0x242);
                FUN_0064458f(local_5c);
                goto LAB_004a6712;
              }
              uVar7 = 0x4e2e;
            }
            goto LAB_004a6b63;
          }
        }
        else {
          if (*(int *)(param_1 + 0x1f0) == param_3) {
            FUN_005ea2de(param_1 + 0xbc);
          }
          else if (*(int *)(param_1 + 500) != param_3) goto LAB_004a6bd0;
LAB_004a6bcb:
          FUN_00455620();
        }
        goto LAB_004a6bd0;
      }
      FUN_00422b0a();
      local_28 = AMOPacket::CCharInfoEquipViewPacket::vftable;
      local_24 = (undefined **)0x0;
      local_20 = 0.0;
      local_8 = 5;
      FUN_004a5e69(local_44,*(undefined4 *)(param_1 + 0xb8),0x23e,0);
      FUN_0064458f(local_44);
    }
LAB_004a6712:
    local_8 = 0xffffffff;
    FUN_004235a0();
  }
LAB_004a6bd0:
  FUN_00455620();
LAB_004a6bda:
  FUN_007583ae();
  return;
}



========== xref wear (parser vizinho) @ 00652797 ==========
(sem funcao)

========== xref putoff (parser vizinho) @ 00652959 ==========
(sem funcao)

