Ir para conteúdo
🥳 [EVENTO ESPECIAL] 20 Anos de WebCheats - Conte sua história. ×
Venda da WebCheats - Uma Nova Era para a Comunidade ×

gcr_fc

Bronze Member
  • Total de Posts

    245
  • Registro em

  • Última visita

  • Dias Ganhos

    4
  • WCoins

    210

gcr_fc ganhou no último dia 31 de Janeiro 2025

gcr_fc teve o conteúdo mais curtida!

6 Seguidores

  • bitou
  • ThisSupreme
  • biel-gsn
  • ϟ Sanji ϟ
  • -Ink-
  • 3118886

Sobre Mim

  • Discord
    GuiCandiotto

Últimos Visitantes

2.156 visualizações

gcr_fc's Achievements

Experiente

Experiente (8/15)

  • Fã! Rara
  • Usuário Notório Rara
  • Notado Rara
  • Querido Rara
  • Senhor do tempo

Emblemas Recentes

4,1k

Reputação

  1. Fala pessoal blz? estou entrando de ferias da oficina e vou dar uma focada no meu emulador novamente, entao refiz o sistema de log padrao e vou disponibilizar aqui caso alguem tenha interesse em usar ou melhorar. Segue o link do Projeto: GitHub GuiCan na main tem uma implementação simples so para teste e poderem ver como funciona. ficou bem bacana pode ser expandida conforme a necessidade e aprimorada tem sistema de rotação de logs quando chega ao tamanha maximo do arquivo depois de X dias os arquivos sao zipados e se tiver configurado pode ser feito upload para algum servidor ftp se sua escolha para guardar backups apos X dias os logs antigos sao removidos. basicamente é isso.
  2. void ProcessGoldenDragon(int conn, int npcId, int future) { int ret = FALSE; if (pMob[conn].MOB.Equip[PET].Index == 4060) //Immaturity_Angel { int itemSanc = BASE_GetItemSanc(&pMob[conn].MOB.Equip[PET]); int sanc9plus = TRUE; if (itemSanc < 9) sanc9plus = FALSE; if (pMob[conn].Affect[MAX_AFFECT - 1].Type) sanc9plus = FALSE; if (pMob[conn].CheckEvolution() != ARCH) { sanc9plus = FALSE; SendClientMessage(conn, FALSE, _NN_Need_Trans); } if (sanc9plus) { STRUCT_ITEM item{}; item.Index = 5338; //Ideal item.EF1 = EF_NOTRADE; item.EFV1 = EF_NOTRADE; ret = SendPutItemInvCarry(conn, 0, &item); } //004F893D if (ret) { memset(&pMob[conn].MOB.Equip[PET], 0, sizeof STRUCT_ITEM); SendItem(conn, EQUIP_TYPE, PET, &pMob[conn].MOB.Equip[PET]); pMob[conn].Affect[MAX_AFFECT - 1].Type = 49; pMob[conn].Affect[MAX_AFFECT - 1].Level = 0; pMob[conn].Affect[MAX_AFFECT - 1].Time += 75600; pMob[conn].GetCurrentScore(conn); SendAffect(conn); SendClientMessage(conn, FALSE, _NN_Congratulations); } return; } //004F8A06 if(CombineTreasureMap(conn)) return; for (int i = 0; i < MAX_VISIBLE_INVENTORY; i++) { if (pMob[conn].MOB.Inventory[i].Index <= 0) continue; for (int j = 0; j < MAX_TREASURE; j++) { if (g_pTreasure[j].Source <= 0) continue; if (pMob[conn].MOB.Inventory[i].Index != g_pTreasure[j].Source) continue; //004F8ACF char tmpBuffer[128]{}; sprintf_s(temp, "tra,_gold_ 0"); BASE_GetItemCode(&pMob[conn].MOB.Inventory[i], tmpBuffer); strcat(temp, tmpBuffer); Log(temp, pUser[conn].AccountName, pUser[conn].IP); memset(&pMob[conn].MOB.Inventory[i], 0, sizeof STRUCT_ITEM); SendItem(conn, INVEN_TYPE, i, &pMob[conn].MOB.Inventory[i]); int sortItem = rand() % 1000; STRUCT_ITEM item{}; if (sortItem < g_pTreasure[j].Rate[0]) memcpy(&item, &g_pTreasure[j].Target[0], sizeof STRUCT_ITEM); else if (sortItem < g_pTreasure[j].Rate[1]) memcpy(&item, &g_pTreasure[j].Target[1], sizeof STRUCT_ITEM); else if (sortItem < g_pTreasure[j].Rate[2]) memcpy(&item, &g_pTreasure[j].Target[2], sizeof STRUCT_ITEM); else if (sortItem < g_pTreasure[j].Rate[3]) memcpy(&item, &g_pTreasure[j].Target[3], sizeof STRUCT_ITEM); else if (sortItem < g_pTreasure[j].Rate[4]) memcpy(&item, &g_pTreasure[j].Target[4], sizeof STRUCT_ITEM); if (!item.Index) { SendClientMessage(npcId, TRUE, _NN_Next_Chance); return; } sprintf_s(temp, "tra,%s 0", pUser[conn].AccountName); BASE_GetItemCode(&item, tmpBuffer); strcat(temp, tmpBuffer); Log(temp, "_gold_", pUser[conn].IP); if (PutItem(conn, &item)) { SendClientMessage(npcId, TRUE, _NN_Congratulations); return; } } } //004F8DCF int crystal[7]{}; int crystalCount = 0; for (int i = 0; i < MAX_VISIBLE_INVENTORY; i++) { if (pMob[conn].MOB.Inventory[i].Index < 421 || pMob[conn].MOB.Inventory[i].Index > 427) continue; crystal[pMob[conn].MOB.Inventory[i].Index - 421] = 1; crystalCount++; } //004F8E78 if (!crystal[0] || !crystal[1] || !crystal[2] || !crystal[3] || !crystal[4] || !crystal[5] || !crystal[6]) { SendClientMessage(npcId, TRUE, _NN_Gather_7_Clistals); return; } if(!pMob[conn].MOB.Inventory[WEAPON].Index) { SendClientMessage(npcId, TRUE, _NN_Equip_Weapon_To_Enchant); return; } if (pMob[conn].MOB.Inventory[WEAPON].Index >= 3000 && pMob[conn].MOB.Inventory[WEAPON].Index < 3200) { SendClientMessage(npcId, TRUE, _NN_Equip_Weapon_To_Enchant); return; } int weaponMobType = BASE_GetItemAbility(&pMob[conn].MOB.Inventory[WEAPON], EF_MOBTYPE); if (weaponMobType == ARCH || weaponMobType == CELESTIAL) { SendClientMessage(npcId, TRUE, _NN_NOT_TRANS3ITEM); return; } SendEmotion(conn, 23, 0); STRUCT_ITEM weapon = pMob[conn].MOB.Inventory[WEAPON]; STRUCT_ITEM tmpWeapon = weapon; int calcItemLvl = (crystalCount / 10) * 25; int itemReqLvl = g_pItemList[weapon.Index].ReqLvl; weapon.EF1 = 0; weapon.EFV1 = 0; weapon.EF2 = 0; weapon.EFV2 = 0; weapon.EF3 = 0; weapon.EFV3 = 0; SetItemBonus(&weapon, calcItemLvl + itemReqLvl, TRUE, 1104, FALSE); for (int i = 0; i < MAX_VISIBLE_INVENTORY; i++) { if (pMob[conn].MOB.Inventory[i].Index < 421 || pMob[conn].MOB.Inventory[i].Index > 427) continue; pMob[conn].MOB.Inventory[i].Index = 0; memset(&pMob[conn].MOB.Inventory[i], 0, sizeof STRUCT_ITEM); } SendCarry(conn); SendItem(conn, EQUIP_TYPE, WEAPON, &weapon); SendClientMessage(npcId, TRUE, _SN_Now_I_Will_Enchant_Your, pMob[conn].MOB.MobName); SetTick(conn, 44, 200, 200); SendScore(conn); sprintf_s(temp, "etc,crystal %d-%d from %d:%d %d:%d %d:%d to %d:%d %d:%d %d:%d", crystalCount, tmpWeapon.Index, tmpWeapon.EF1, tmpWeapon.EFV1, tmpWeapon.EF2, tmpWeapon.EFV2, tmpWeapon.EF3, tmpWeapon.EFV3, weapon.EF1, weapon.EFV1, weapon.EF2, weapon.EFV2, weapon.EF3, weapon.EFV3); Log(temp, pUser[conn].AccountName, pUser[conn].IP); }
  3. //00420ED0 addr da AddMessage na TMSrv 7.56 BOOL CPSock::AddMessage(char* pMsg, int Size) { int Keyword = 0; //local 2 if (SendQueue[0] != 0) { //00420F03 if (SendCount > 15) { //00420F10 if (EncodeKey != 0) { //00420F19 int encKey = EncodeKey; //local 3 char key = (char)(encKey); //local 4 //00420F28 if (key == 0) key = (char)(encKey + 3); //00420F39 if (key == 0) key = 13; //00420F45 Keyword = ((encKey + 2) + (encKey + 3)) - ((encKey + 1) * key); if (Keyword == 0) Keyword = (char)(encKey); //00420F77 Keyword ^= 255; } //00420F85 else { if ((SendQueue[15] % 2) != 0) //004207F1 Keyword = ((SendQueue[13] + SendQueue[11]) - SendQueue[9]) + 4; else //00420812 Keyword = (SendQueue[5] + (SendQueue[1] + SendQueue[3])) - 87; Keyword ^= 255; } } //00420FED else if (SendQueue[0] != 0) { if (SendCount > 15) { if ((SendQueue[15] % 2) != 0) //00421005 Keyword = ((SendQueue[13] + SendQueue[11]) - SendQueue[9]) + 4; else //0042103E Keyword = (SendQueue[5] + (SendQueue[1] + SendQueue[3])) - 87; Keyword ^= 255; } //0042106A else { Keyword = SendQueue[SendCount]; Keyword ^= 255; SendCount++; } } } //00421096 BOOL err = AddMessage(pMsg, Size, Keyword); return err; } //00421140 addr da AddMessage na TMSrv 7.56 BOOL CPSock::AddMessage(char* pMsg, int Size, int sendKeyWord) { //0042115D MSG_STANDARD packet = *(MSG_STANDARD*)(pMsg); //local 2 if (Sock <= EMPTY_SOCKET) { ErrCount = 10; return FALSE; } //0042117C if (nSendPosition + Size >= SEND_BUFFER_SIZE) { ErrCount = 1; return FALSE; } //0042119E unsigned char iKeyWord = sendKeyWord; //local 3 if (sendKeyWord == 0) iKeyWord = rand() % 256; //004211C0 unsigned char KeyWord = pKeyWord[iKeyWord][0]; //local 4 unsigned char checkSum = 0; //local 5 packet.Size = Size; packet.KeyWord = iKeyWord; packet.CheckSum = checkSum; packet.ClientTick = CurrentTime; LastSendTime = CurrentTime; unsigned char Sum1 = 0; //local 6 unsigned char Sum2 = 0; //local 7 int pos = KeyWord; //local 8 for (int i = 4; i < Size; i++, pos++) //local 9 { Sum1 = Sum1 + pMsg[i]; int qKeyWord = pos % 256; //local 10 unsigned char Trans = pKeyWord[qKeyWord][1]; //local 11 int mod = i & 3; //local 12 if (mod == 0) pSendBuffer[i + nSendPosition] = pMsg[i] + (Trans * 2); else if (mod == 1) pSendBuffer[i + nSendPosition] = pMsg[i] - (Trans >> 3); else if (mod == 2) pSendBuffer[i + nSendPosition] = pMsg[i] + (Trans * 4); else if (mod == 3) pSendBuffer[i + nSendPosition] = pMsg[i] - (Trans >> 5); Sum2 = Sum2 + (pSendBuffer[i + nSendPosition]); } //00421350 checkSum = Sum2 - Sum1; packet.CheckSum = checkSum; //00421370 memcpy(&pSendBuffer[nSendPosition], pMsg, 4); nSendPosition = nSendPosition + Size; return TRUE; } Como de costume o ideal é fazer uma revisão
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.