Ir para conteúdo
Faça parte da equipe! (2024) ×

Os Melhores

Conteúdo popular

Mostrando conteúdo com a maior reputação em 03-04-2024 in todas as áreas

  1. 100% ATUALIZADO(ABRIL 2024) INTRODUÇÃO A Fox com muito orgulho apresenta seu produto para Grand Chase Classic (Steam/Nexus/Megaxus/Epic Games/etc) Acesse nosso site e tenha acesso à mais produtos exclusivos: Forums - Fox Cheats FUNÇÕES AutoKill - mata todos os monstros da fase Item Vac - puxa todos os itens dropados para o seu personagem STATUS SS - deixa o Status do seu personagem SS permitindo adentrar em missões que ele não atenda os requisitos [ EX : Berkas, VOID/Vazio,etc] Skip Dialog - pula todos os diálogos automaticamente Item Hide - oculta todos os drops para não encher seu inventário de itens fracos/inuteis Level Hack [VOID] - permite que seu personagem entre na missão VAZIO/VOID mesmo que ele não tenha o level necessário Auto Kill Delay - mata todos os monstros da fase mais lentamente Monster VAC - Puxa todos os mobs para um determinado local do mapa. Auto Boss - Ao entrar na missão você vai direto para o BOSS. Item Spawn - Dropa todos os itens que seriam dropados naquela dungeon INTEIRA. Damage Mob - Com essa função você consegue escolher quanto de dano o mob irá lhe causar. Stage Hack - Completa a fase sozinho, de acordo com os delays que você programar. Speed Hack - Aumenta a velocidade do jogo de acordo com o multiplicador desejado. Rank Select - Define qual é o seu rank naquela dungeon (vocÊ pode escolher a pontuação para ir de F até SS) Time Count - O tempo da missão irá começar contar de 10'43 Time Freeze - O Tempo da missão irá ficar parado em 00:00 Hits Count - Falsifica os logs da partida, com você selecionando quantos hits causou na partida Combo Count - Você seleciona qual foi o combo mais alto que deu na partida, além de falsificar os logs da partida também completa AUTOMATICAMENTE as missões de combo ATK Back Count - Você seleciona quantos ataques por trás realizou na missão, além de falsificar os logs da partida também completa AUTOMATICAMENTE as missões de ataque por trás Hits Taken Count - Falsifica os logs da partida com você selecionando quantos hits sofreu na partida Damage Count - Falsifica os logs da partida com você selecionando quanto de dano causou na partida HP Infinity - Deixa seu HP Infinito MP FULL - Deixa seu MP sempre cheio CRITICAL 100% - Seus ataques sempre serão criticos Furia Infinita - Os personagens que possuem furia terão ela infinita Potion CD - Remove o cooldown das poções Fly Hack - Permite seu personagem voar NO PVP - deixa o dano do inimigo no PVP em 1. CoolDown - Cooldown das skills é 0. Pet MP - Deixa o MP do pet sempre cheio Predict Drop - Permite saber o'que irá dropar na missão só de entrar nela, decidindo assim se a recompensa vale o esforço ou se vale a pena quitar pra trocar o drop Speed Farm - Permite carregar uma missão bem mais fácil no lugar da que você esta jogando, permitindo coletar titulos/abrir todos os mapas muito mais rapido! Auto Title - Starta e completa automaticamente as missões BYPASS ANTICHEAT EMBUTIDO - VOCÊ CONSEGUE JOGAR COM MACROS, COM CHEAT ENGINE ABERTO, WPE PRO E MUITO MAIS QUE O JOGO BLOQUEIA MULTI CLIENT EMBUTIDO - VOCÊ CONSEGUE ABRIR QUANTOS GRANDCHASES O SEU COMPUTADOR AGUENTAR SEM MAQUINAS VIRTUAIS OU COISA DO TIPO! SCREEN SHOTS PREÇOS 30 Dias -> R$33,00 ONDE COMPRAR ? Nosso Site -> Forums - Fox Cheats Nosso Discord : https://discord.gg/wQy3zgBJPU COMO USAR Abra o cheat Abra o jogo Seja feliz! DOWNLOAD/SCAN CASO QUEIRA SUPORTE DEDICADO, COM MEMBRO DA EQUIPE INDO EM ANYDESK E TUDO MAIS; AI VOCÊ COMPRA O PRODUTO VIP. [Hidden Content] SCAN : VirusTotal - File - 6ddb4a159c634bc79841a30a3a1238804e2d20e6624e55651705d37dee1e83f6
    7 pontos
  2. Bom após anos longe deste amado forum, voltei para mostrar um dos meus trabalhos recentes. Trata-se deste bot, no Telegram, para assistir a XVideos Red, Tufos, Brazzers etc.. Com o bot você consegue assistir de forma rápida e fácil os vídeos do XVideos Red, Bangbros, Brazzers, Tufos E em breve vou adicionar mais site para bot. O bot está no Telegram, então para usar o bot, você tem que ter uma conta no Telegram. No bot Você começa com 5 créditos, mas você consegue mais créditos de graça ou pagando, a escolha é sua. #### A imagem mostra como o bot funciona, basta você enviar a URL, do vídeo para o bot, e ele vai te gerar um link para assistir. Aqui outro exemplo do bot funcionando com tufos. #### Tutorial de como usar o bot, e o site para encontrar os vídeos do XVídeos Red Clique aqui, para ver o tutorial #### ## Lista de sites suportados brazzers.com xvideos.red tufos.com.br bangbros.com Em breve essa lista vai aumentar, pois já estou trabalhando pra isso. #### [Hidden Content]
    3 pontos
  3. O excel foi comprado alguns anos atrás, e estava perdido no dropbox. Enfim, faça bom aproveito! Excel [Hidden Content] Tutorial [Hidden Content] Programa de Desnivel [Hidden Content]
    3 pontos
  4. *Arquivo de configuração manual.
    3 pontos
  5. Baseado no @OneThinker, resolvi criar este tópico liberando um curso de graça a quem não tem uma condição financeira boa. 3.98GB (compactado) via Mega. VEJA OS BÔNUS INCLUSOS Curso de Engenharia Reversa Para que você alcance patamares ainda maiores e consiga se diferenciar ainda mais de quem ja está no mercado, preparamos um mini-curso prático de engenharia reversa de softwares que iremos disponibilizar gratuitamente para todos nossos alunos. Pacote de Ferramentas Além do software essenciais como IDE’s, debuggers,etc, é necessário adquirir diversas ferramentas extras que devem tunar e auxiliar seus desenvolvimentos de cheats e testes com anti-cheats como Loggers, Injetores, Scanners de Memória, gerenciador de processos avançado, etc. Fazer uma compilação de qualidade dessas ferramentas pode sair muito caro ou, pelo menos, muito trabalhoso. Para poupar tempo e dinheiro dos nossos alunos, disponibilizamos uma série de ferramentas, desenvolvidas pela equipe, gratuitamente como bônus. Mini-Curso de Packing e Unpacking Aqui você vai saber como aumentar a proteção dos seus softwares e como retirar praticamente qualquer packer de softwares protegidos, tendo assim acesso ao seu código original! Download: [Hidden Content] [Hidden Content]
    3 pontos
  6. [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content]
    3 pontos
  7. Recomendo não criar novos perfis e usar os que já tem,pode durar mais tempo
    2 pontos
  8. VALORANT MACRO NO RECOIL É DE CONHECIMENTO GERAL QUE MACROS EM AHK NÃO É 100%. PROVAVELMENTE REDUZ A CADÊNCIA DOS TIROS. (Imagem ilustrativa) DOWNLOAD & SCAN a) DOWNLOAD [Hidden Content] b) SCANNER https://www.virustotal.com/gui/file/6b8a692fc6cd320968f83311cb23edd092950f2d7fb5a561ff922c5d6b175b3c?nocache=1 CRÉDITOS Até o momento não conseguir identificar o autor responsável pelo desenvolvimento do AHK.
    2 pontos
  9. Pack Grátis - Nati Sweetmlr & Mariana Ladeira & Emanuelly Raquel Nati Sweetmlr Download Pack: [Hidden Content] Mariana Ladeira Download Pack: [Hidden Content] Emanuelly Raquel Download Pack: [Hidden Content]
    2 pontos
  10. Tá na mão: [Hidden Content]
    2 pontos
  11. 2 pontos
  12. Prova de funcionamento Tutorial em Escrita Execute o Loader Como administrador Vai perguntar em qual disco o seu CrossFire está instalado, e você informa se é no disco D ou no C e da ENTER Depois vai perguntar se você deseja executar o Cheat, e você da S e da ENTER Após isso ele vai aparecer a mensagem "Aguardando o CrossFire" e você abre o CrossFire E pronto, o cheat será inhjetado após 10 minutinhos, mantenha o seu crossfire aberto, na tela de lobby ou fique jogando até dar os 10 minutos, tem a contagem regressiva na telinha do loader. F12 ABRE E FECHA MENU Bom jogo [Hidden Content] [Hidden Content]
    2 pontos
  13. ASSISTA A QUALQUER VÍDEO NOS SITES OFICIAIS DE VÍDEOS AULTOS +18 SEM PRECISAR PAGAR NADA! INTRODUÇÃO A plataforma a seguir consegue liberar todo e qualquer tipo de vídeos/filmes adultos restritos exclusivamente para assinantes. Você consegue assistir os conteúdos exclusivos sem precisa pagar nada mensalmente! COMO USAR A PLATAFORMA: A plataforma é bem auto-explica, não há muito segredo. Acesse o site do Mineiro (link no final do tópico); Vai aparecer diversos sites pornográficos, selecione o site que deseja assistir (Por exemplo, o site da Brad Montana); Em seguida você será redirecionado para adicionar o link do vídeo restrito; Pois bem, o próximo passo é acessar o site oficial da Brad Montana; Agora escolha um vídeo/filme premium, restrito somente para assinantes; Após escolher, copie o link do vídeo no campo de URL e retorne a plataforma do Mineiro; Retornando ao site do Mineiro, cole o link do vídeo no campo em que está sendo pedido; Depois, clique no botão "Quero assistir esse vídeo/filme". Caso queria entender melhor a explicação em vídeo, assista: 𝗢𝗯𝘀.: Quando você clicar no botão "Quero assistir esse vídeo/filme", vai aparecer alguns anúncios pedindo para você permitir a notificação. Basta você ficar recusando/bloqueando. A solicitação dessa notificação vai aparecer umas 6x depois que você recusar, basta ficar recusando que logo você será direcionado para assistir o vídeo em FULL HD. 𝗢𝗯𝘀.: Se você clicar em permitir, os anúncios vão deixar de aparecer. Lembre-se de remover a notificação depois, pois é muito chato. LINK DO SITE [Hidden Content] EXTENSÃO PARA PULAR ADFLY [Hidden Content] ESTE MATERIAL ERA EXCLUSIVAMENTE PARA MEMBROS VIP! USE COM MODERAÇÃO!
    2 pontos
  14. [Hidden Content] Basta logar com o google ou facebook, que você terá acesso ilimitado aos recursos Canva PRO.
    2 pontos
  15. 2 pontos
  16. Onlyfans Galeira VSCO [Hidden Content]
    2 pontos
  17. 2 pontos
  18. //004621F6 addr da MSG_Attack na TMSrv 7.56 - TMSrv 7.57 0051DD00 void ProcessAttackPacket(int conn, char* pMsg) { MSG_Attack* pAttack = (MSG_Attack*)pMsg; //ebp-4cc ebp-7a4 int size = pAttack->Size; //ebp-4d0 ebp-7b0 pMob[conn].Segment = 0; pAttack->ID = ESCENE_FIELD; if (pUser[conn].Mode != USER_PLAY) { SendHpMode(conn); return; } //00462252 - 0051DD5D if (pAttack->SkillIndex != 99 && pMob[conn].MOB.CurrentScore.Hp <= 0 || pUser[conn].Mode != USER_PLAY) { SendHpMode(conn); #ifdef CLIVER756- AddCrackError(conn, 1, 8); #else AddCrackError(conn, 1, 12); #endif return; } #ifdef CLIVER756- //hackcheck implementado 7.57+ #else //0051DDB1 if (pAttack->ClientTick == SKIPCHECKTICK && pAttack->Motion != 254) { sprintf(temp, "err, HackTool - attack %d, Mob %s", pAttack->ClientTick, pMob[conn].MOB.MobName); Log(temp, pUser[conn].AccountName, pUser[conn].IP); AddCrackError(conn, 15, 19); return; } //0051DE3F if (pAttack->AttackerID <= 0 || pAttack->AttackerID >= MAX_MOB) { sprintf(temp, "err, HackTool buffhack Mob %s", pMob[conn].MOB.MobName); Log(temp, pUser[conn].AccountName, pUser[conn].IP); AddCrackError(conn, 15, 20); return; } #endif //004622AA - 0051DEC2 if (pAttack->ClientTick != SKIPCHECKTICK) { int delayFlag = FALSE; //ebp-4d4 ebp-7bc if (pUser[conn].LogoutAttDelay != 0 && pUser[conn].LogoutAttDelay >= (CurrentTime - 5000)) delayFlag = TRUE; //00462300 - 0051DF18 if (pUser[conn].RecallAttDelay != 0 && pUser[conn].RecallAttDelay >= (CurrentTime - 5000)) delayFlag = TRUE; //00462339 - 0051DF51 if (pUser[conn].RestartAttDelay != 0 && pUser[conn].RestartAttDelay >= (CurrentTime - 5000)) delayFlag = TRUE; //00462372 - 0051DF8A if (delayFlag) { sprintf(temp, "err, attack while dalay_mode logout:%d recall:%d restart:%d now:%d", pUser[conn].LogoutAttDelay, pUser[conn].RecallAttDelay, pUser[conn].RestartAttDelay, CurrentTime); Log(temp, pUser[conn].AccountName, pUser[conn].IP); pUser[conn].LogoutAttDelay = 0; pUser[conn].RecallAttDelay = 0; pUser[conn].RestartAttDelay = 0; } } //0046242C - 0051E045 short DeadMobs[MAX_TARGET]; //ebp-4F0 ebp-7E0 memset(DeadMobs, 0x0, sizeof(short) * MAX_TARGET); int clientTick = pAttack->ClientTick; //ebp-4f4 ebp-7ec if (clientTick != SKIPCHECKTICK && pUser[conn].LastAttackTick != SKIPCHECKTICK) { if (clientTick < (pUser[conn].LastAttackTick + 900)) { #ifdef CLIVER756- AddCrackError(conn, 4, 7); #else AddCrackError(conn, 4, 21); #endif sprintf(temp, "err,attack twice in 900ms skill:%d", pAttack->SkillIndex); Log(temp, pUser[conn].AccountName, pUser[conn].IP); } //004624EC - 0051E123 pUser[conn].LastAttackTick = clientTick; pUser[conn].LastAttack = pAttack->SkillIndex; } //0046251A - 0051E151 if ((pAttack->PosX != pMob[conn].TargetX || pAttack->PosY != pMob[conn].TargetY) && MoveStopState == TRUE) { if (pUser[conn].MoveStopTick < (pAttack->ClientTick - 1000) || pAttack->PosX != pUser[conn].MoveStopLastX || pAttack->PosY != pUser[conn].MoveStopLastY) { if (pAttack->PosX < (pMob[conn].TargetX + 3) && pAttack->PosX >(pMob[conn].TargetX - 3) && pAttack->PosY < (pMob[conn].TargetY + 3) && pAttack->PosY >(pMob[conn].TargetY - 3)) { SendPushUser(conn, pMob[conn].TargetX, pMob[conn].TargetY, 20, (pHeightGrid[pMob[conn].TargetY][pMob[conn].TargetY] + 8)); sprintf(temp, "err, Movestop SendPushUser"); Log(temp, pUser[conn].AccountName, pUser[conn].IP); return; } //004626FA - 0051E323 else { DoTeleport(conn, pMob[conn].TargetX, pMob[conn].TargetY, 0); sprintf(temp, "err, Movestop -> DoTeleport"); Log(temp, pUser[conn].AccountName, pUser[conn].IP); return; } } } //0046276B - 0051E395 if (GetQuestPosition(pMob[conn].TargetX, pMob[conn].TargetY)) { if (!pUser[conn].IsWallX || !pUser[conn].IsWallY) { sprintf(temp, "err,go over a wall attack %s(%d - %d)", pMob[conn].MOB.MobName, pMob[conn].TargetX, pMob[conn].TargetY); Log(temp, pUser[conn].AccountName, pUser[conn].IP); DoRecall(conn); #ifdef CLIVER756- AddCrackError(conn, 1, 5); #else AddCrackError(conn, 1, 22); #endif return; } } //00462855 - 0051E47F else { pUser[conn].IsWallX = 0; pUser[conn].IsWallY = 0; } //0051E4A5 #ifdef CLIVER756- //implementado a partir da 7.57 #else if (pMob[conn].MOB.CurrentScore.Level < 999 && (pMob[conn].MOB.Merchant & 1)) { sprintf(temp, "err,attack in snoop %s(%d) %d", pMob[conn].MOB.MobName, pMob[conn].MOB.CurrentScore.Level, pMob[conn].MOB.Merchant); Log(temp, pUser[conn].AccountName, pUser[conn].IP); AddCrackError(conn, 11, 23); return; } #endif //0046287B - 0051E560 int skillId = pAttack->SkillIndex; //ebp-4f8 ebp-7f8 if (skillId != 84 && clientTick != SKIPCHECKTICK) //84 Skill Alquimia { int curTime = 0; //ebp-4fc ebp-804 if (CurrentTime > 20000) curTime = CurrentTime - 20000; if (clientTick > (CurrentTime + 3000) || clientTick < curTime) { #ifdef CLIVER756- sprintf(temp, "err,attack %d %d 3000ms limit", clientTick, CurrentTime); Log(temp, pUser[conn].AccountName, pUser[conn].IP); Log("err,clienttime faster than 3000ms - MSG_ATTACK", pUser[conn].AccountName, pUser[conn].IP); AddCrackError(conn, 1, 107); #else AddCrackError(conn, 1, 24); #endif //0046297F - 0051E5EF if (clientTick > (CurrentTime + 6000) || clientTick < curTime) { #ifdef CLIVER756- CloseUser(conn); #else CloseUserError(conn, 42); #endif } //0051E622 else CurrentTime = timeGetTime(); return; } //004629C9 - 0051E63B pUser[conn].LastAttackTick = clientTick; } //004629DE - 0051E650 int tX = pAttack->TargetX; //ebp-500 ebp-810 int tY = pAttack->TargetY; //ebp-504 ebp-81c int maxDist = 8; //ebp-508 ebp-828 int targetId = pAttack->Dam[0].TargetID; //ebp-50c ebp-834 if (targetId <= 0 || targetId >= MAX_MOB) return; //00462A38 - 0051E6A4 if (!pMob[targetId].CheckKhepra() && clientTick != SKIPCHECKTICK && skillId != 42) //42 Skill Teleport { #ifdef CLIVER756- BASE_GetHitPosition(pAttack->PosX, pAttack->PosY, &tX, &tY, (char*)&pHeightGrid, maxDist); #else BASE_GetHitPosition(pMob[conn].TargetX, pMob[conn].TargetY, &tX, &tY, (char*)&pHeightGrid, maxDist); #endif if (tX != pAttack->TargetX || tY != pAttack->TargetY) { #ifdef CLIVER756- sprintf(temp, "err,hitposition %d,%d - %d,%d - %d,%d", pAttack->PosX, pAttack->PosY, pAttack->TargetX, pAttack->TargetY, tX, tY); Log(temp, pUser[conn].AccountName, pUser[conn].IP); AddCrackError(conn, 2, 9); #endif return; } //00462B7F - 0051E74B #ifdef CLIVER756- int distance = BASE_GetDistance(pAttack->PosX, pAttack->PosY, tX, tY); //ebp-510 ebp-840 #else int distance = BASE_GetDistance(pMob[conn].TargetX, pMob[conn].TargetY, tX, tY); //ebp-510 ebp-840 #endif int range = pMob[conn].Range; // ebp-514 ebp-84C if (skillId >= 0 && skillId <= 103) { int skillRange = g_pSpell[skillId].Range; //ebp-518 ebp-858 if (pMob[conn].MOB.LearnedSkill & LEARN_29) skillRange++; if (range > 3 || skillRange >= range) range = skillRange; #ifdef CLIVER756- if (distance > range) #else if (distance > (range + 1)) #endif { sprintf(temp, "err,hitposition range %d,%d - %d,%d - D:%d,R:%d - skill:%d", pAttack->PosX, pAttack->PosY, tX, tY, distance, range, skillId); Log(temp, pUser[conn].AccountName, pUser[conn].IP); #ifdef CLIVER756- AddCrackError(conn, 2, 9); #else AddCrackError(conn, 2, 27); #endif return; } } } //00462CDE - 0051E832 if (skillId < -1 || skillId > MAX_SKILLLIST) { Log("MSG_ATTACK, skillnum out of range", pUser[conn].AccountName, pUser[conn].IP); return; } //00462D25 - 0051E879 #ifdef CLIVER756- if (skillId == 64 || skillId == 66 || skillId == 68 || skillId == 70 || skillId == 71) //Transformações BM { if (pMob[conn].MOB.Equip[PET].Index >= 4152 && pMob[conn].MOB.Equip[PET].Index < 4190) //Trajes Personagem return; if (pMob[conn].MOB.Equip[MEDAL].Index >= 4152 && pMob[conn].MOB.Equip[MEDAL].Index < 4190) //Trajes Personagem return; } #else if (skillId >= 110 && skillId <= 116) //skills do kefra { AddCrackError(conn, 9, 28); Log("MSG_Attack, skill out of range - Khepra", pUser[conn].AccountName, pUser[conn].IP); return; } #endif //00462DBA - 0051E8CD if (skillId >= 0 && skillId < MAX_SKILLLIST && clientTick != SKIPCHECKTICK) { if (g_pSpell[skillId].Passive == TRUE) return; int skillTick = pUser[conn].LastSkillTick[skillId]; //ebp-51c ebp-864 if (skillTick != -1 && skillTick != SKIPCHECKTICK) { int calcTick = clientTick - skillTick; //ebp-520 ebp-870 int skillDelay = g_pSpell[skillId].AffectTime; //ebp-524 ebp-87c if (skillId == 102 && pMob[conn].CheckEvolution() == CELESTIAL && pMob[conn].MOB.CurrentScore.Level >= 79) skillDelay = 1000; if ((pMob[conn].MOB.Rsv & 0x40) && skillDelay >= 2) skillDelay--; if ((pMob[conn].nSkillDalay & 0x1) && skillDelay >= 2) skillDelay--; skillDelay *= 1000; if (calcTick < skillDelay - 100) { #ifdef CLIVER756- AddCrackError(conn, 9, 30); #else AddCrackError(conn, 9, 29); #endif sprintf(temp, "skill delay skillnum: %d-%d-%d", skillId, calcTick, (skillDelay - 100)); Log(temp, pUser[conn].AccountName, pUser[conn].IP); return; } } //00462F89 - 0051EA9B pUser[conn].LastSkillTick[skillId] = pAttack->ClientTick; int skillClass = 0; //ebp-528 ebp-888 #ifdef CLIVER756- if(skillId < 96) #else if (skillId < 96 || skillId >= 200 && skillId < MAX_SKILLINDEX) #endif { #ifdef CLIVER756- skillClass = skillId / 24; #else if (skillId < 200) skillClass = skillId / 24; else skillClass = (skillId - 200) / 12; #endif if (skillClass != pMob[conn].MOB.Class) { AddCrackError(conn, 9, 30); sprintf(temp, "MSG_Attack, Request other class skill:%d", skillId); Log(temp, pUser[conn].AccountName, pUser[conn].IP); return; } } } //0046303D - 0051EB9B int curLevel = pMob[conn].MOB.CurrentScore.Level; //ebp-52c ebp-894 if (pMob[conn].CheckEvolution() == CELESTIAL) curLevel += 200; int special = 0; //ebp-530 ebp-8a0 int delay = 100; //ebp-534 ebp-8ac int saveSpecial = 0; //ebp-538 ebp-8b8 //0046309C - 0051EBF9 #ifdef CLIVER756- if (skillId >= 0 && skillId < 96) #else if (skillId >= 0 && skillId < 96 || skillId >= 200 && skillId < MAX_SKILLINDEX) #endif { #ifdef CLIVER756- int skillMaster = ((skillId % 24) / 8) + 1; //ebp-53c #else int maxSkillPerLearn = 24; //ebp-8c4 int isSecondLearnBar = FALSE; //ebp-8d0 int skId = skillId; //ebp-8dc if (skillId >= 200) { skId = skillId - 200; maxSkillPerLearn /= 2; isSecondLearnBar = TRUE; } int skillMastery = skId % maxSkillPerLearn; //ebp-8e8 if (!isSecondLearnBar) skillMastery = (skillMastery / 8) + 1; else skillMastery = (skillMastery / 4) + 1; #endif if (clientTick != SKIPCHECKTICK) { #ifdef CLIVER756- int learn = skillId % 24; //ebp-540 int learnedSkill = 1 << learn; //ebp-544 #else int learn = skId % maxSkillPerLearn; //ebp-8f4 int learnedSkill = 1 << learn; //ebp-900 #endif if (pAttack->ClientTick != SKIPCHECKTICK) { #ifdef CLIVER756- if (!(pMob[conn].MOB.LearnedSkill & learnedSkill)) #else int haveSkill = 0; if (!isSecondLearnBar) haveSkill = (pMob[conn].MOB.LearnedSkill & learnedSkill); else haveSkill = (pMob[conn].MOB.nLearnedSkill & learnedSkill); if(!haveSkill) #endif { sprintf(temp, "err, request other skill: %d", skillId); Log(temp, pUser[conn].AccountName, pUser[conn].IP); #ifdef CLIVER756- if(AddCrackError(conn, 9, 10)) #else if (AddCrackError(conn, 9, 32)) #endif return; } } //004631A0 - 0051ED7D if (skillMastery <= 0 || skillMastery > 3) { Log("Skill kind out of bound - MSG_ATTACK", pUser[conn].AccountName, pUser[conn].IP); return; } } //004631E4 - 0051EDC1 special = pMob[conn].MOB.CurrentScore.Special[skillMastery]; delay += special; saveSpecial = special; } //00463225 - 0051EE01 else if (skillId >= 96 && skillId <= 103) { if (skillId == 97) { if (pAttack->PosX > 0 && pAttack->PosX < MAX_GRIDX && pAttack->PosY > 0 && pAttack->PosY < MAX_GRIDY) { int itemId = pItemGrid[pAttack->PosY][pAttack->PosX]; //ebp-548 ebp-90c if (itemId > 0 && itemId < MAX_ITEMLIST && pItem[itemId].ITEM.Index == 746) pAttack->Motion = 1; else { Log("err,mortar invalid", pUser[conn].AccountName, pUser[conn].IP); return; } } //0051EF0A else { Log("err,mortar invalid", pUser[conn].AccountName, pUser[conn].IP); return; } } //00463373 - 0051EF41 else { int learn = skillId - 72; //ebp-54c ebp-918 int learnedSkill = 1 << learn; //ebp-550 ebp-924 if (pAttack->ClientTick != SKIPCHECKTICK && !(pMob[conn].MOB.LearnedSkill & learnedSkill)) { sprintf(temp, "err, request other skill: %d", skillId); Log(temp, pUser[conn].AccountName, pUser[conn].IP); #ifdef CLIVER756- if (AddCrackError(conn, 9, 1)) #else if (AddCrackError(conn, 9, 33)) #endif return; } } } //00463426 - 0051EFF8 if (skillId != 47) { special = curLevel; delay += special; saveSpecial = special; } else //Cancelamento { special = curLevel; if (special < 299) delay = 100; else delay = 200; saveSpecial = special; } //00463495 - 0051F067 int curMp = pMob[conn].MOB.CurrentScore.Mp; //ebp-554 ebp-930 int reqMp = pUser[conn].ReqMp; //ebp-558 ebp-93c #ifdef CLIVER756- if (skillId >= 0 && skillId < 104) { #else if (skillId >= 0 && skillId < 104 || skillId >= 200 && skillId < MAX_SKILLINDEX) { if (pMob[conn].nAffectInfo & FROZEN) return; #endif int manaSpent = BASE_GetManaSpent(skillId, pMob[conn].MOB.SaveMana, special); //ebp-55c ebp-948 #ifdef CLIVER756- //somente 757+ #else if (pMob[conn].nAffectInfo & MANACONTROL) manaSpent += manaSpent / 2; if (pMob[conn].MOB.Class == FOEMA && pMob[conn].MOB.nLearnedSkill & nLEARN_04) //9ª FM Black Magia Misteriosa { for (int i = 0; i < MAX_AFFECT; i++) { if (pMob[conn].Affect[i].Type == 42) //Magia Misteriosa { manaSpent += manaSpent * 2; break; } } } #endif //0046350A - 0051F1B9 if ((pMob[conn].MOB.CurrentScore.Mp - manaSpent) < 0) { SendSetHpMp(conn); return; } //00463537 - 0051F1E1 pMob[conn].MOB.CurrentScore.Mp -= manaSpent; pUser[conn].ReqMp -= manaSpent; SetReqMp(conn); } //0046358F - 0051F235 pAttack->CurrentMp = pMob[conn].MOB.CurrentScore.Mp; pAttack->ReqMp = pUser[conn].ReqMp; int calcSkillBonus = 0; //ebp-560 ebp-960 if (pMob[conn].MOB.Class == TRANSKNIGHT && (pMob[conn].MOB.LearnedSkill & LEARN_14)) //7ª TK Trans - Noção de Combate { calcSkillBonus = pMob[conn].MOB.CurrentScore.Special[2] / 20; if (calcSkillBonus < 0) calcSkillBonus = 0; if (calcSkillBonus > 15) calcSkillBonus = 15; } //00463640 - 0051F2DE #ifdef CLIVER756- if (pMob[conn].nAffectInfo & BERSERKER) #else if (pMob[conn].nAffectInfo & BERSERKER && skillId != 3 && skillId != 5 && skillId != 11 && skillId != 102) //Samaritano - Aura_de_vida - Assalto - Limite_da_alma #endif DoRemoveAffect(conn, 24); #ifdef CLIVER756- if (pMob[conn].nAffectInfo & INVISIBLE) { #else char isAttack = FALSE; //ebp-969 if (pMob[conn].nAffectInfo & INVISIBLE && (skillId == 72 || skillId == 80 || skillId == 86 || skillId == 88 || skillId >= 96)) //Attaque_Fatal - Golpe_Felino - Explosão_Eterea - Lamina_das_Sombras { #endif DoRemoveAffect(conn, 28); isAttack = TRUE; } //00463688 #ifdef CLIVER756- int exp = 0; //ebp-564 ebp-97c #else long long exp = 0; //ebp-564 ebp-978 97c #endif int level = pMob[conn].MOB.CurrentScore.Level; //ebp-568 ebp-988 int mapAttribute = (GetAttribute(pMob[conn].TargetX, pMob[conn].TargetY) & PVP); //ebp-56c ebp-994 int attHp = 0; //ebp-570 ebp-9a0 char doubleCritical; //ebp-574 ebp-9a9 //004636F4 - 0051F405 if (skillId == 79) //Tempestade de Raios { int weaponType = BASE_GetItemAbility(&pMob[conn].MOB.Equip[WEAPON], EF_WTYPE); //ebp-578 ebp-9d8 if (weaponType != BOW) //Arcos return; int tgtId = pAttack->Dam[0].TargetID; //ebp-57c ebp-9c4 for (int i = 0; i < 6; i++) //ebp-580 ebp-9d0 { pAttack->Dam[i].TargetID = tgtId; pAttack->Dam[i].Damage = -1; pAttack->Type = _MSG_Attack; #ifdef CLIVER756- size = 100; #else size = 168; #endif pAttack->Size = size; } } //004637B7 - 0051F4CA for (int i = 0; i < MAX_TARGET; i++) //ebp-584 ebp-9dc { if (i >= 1 && size <= sizeof(MSG_AttackOne)) break; if (i >= 2 && size <= sizeof(MSG_AttackTwo)) break; int enemy = pAttack->Dam[i].TargetID; //ebp-588 ebp-9e8 if (enemy <= 0 || enemy >= MAX_MOB) continue; if (pMob[enemy].Mode == MOB_EMPTY) { SendRemoveMob(conn, enemy, DELETE_DEAD, FALSE); continue; } if (enemy > MOB_EMPTY && enemy < MAX_USER) pMob[enemy].Segment = 0; if (pMob[enemy].MOB.CurrentScore.Hp <= 0 && pAttack->SkillIndex != 99 && pAttack->SkillIndex != 31) //Ressureição(Sephira) - Renascimento { pAttack->Dam[i].TargetID = MOB_EMPTY; pAttack->Dam[i].Damage = 0; if (enemy < MAX_USER) continue; if (pAttack->SkillIndex != 79) //Tempestade de Raios SendRemoveMob(conn, enemy, DELETE_DEAD, FALSE); continue; } //00463936 - 0051F644 if (enemy < MAX_USER && skillId != 42) //Teleporte { if (pMob[conn].TargetX < (pMob[enemy].TargetX - HALFGRIDX) || pMob[conn].TargetX > (pMob[enemy].TargetX + HALFGRIDX) || pMob[conn].TargetY < (pMob[enemy].TargetY - HALFGRIDY) || pMob[conn].TargetY > (pMob[enemy].TargetY + HALFGRIDY)) { pAttack->Dam[i].TargetID = MOB_EMPTY; pAttack->Dam[i].Damage = 0; continue; } } //00463A16 - 0051F725 if (skillId != 42 && (pMob[conn].TargetX < (pMob[enemy].TargetX - VIEWGRIDX) || pMob[conn].TargetX > (pMob[enemy].TargetX + VIEWGRIDX) || pMob[conn].TargetY < (pMob[enemy].TargetY - VIEWGRIDY) || pMob[conn].TargetY > (pMob[enemy].TargetY + VIEWGRIDY))) { if (enemy >= MAX_USER) SendRemoveMob(conn, enemy, DELETE_DEAD, FALSE); else SendSetHpMp(conn); continue; } //00463AF1 - 0051F800 #ifdef CLIVER756- if (pMob[enemy].nAffectInfo & INVULNERABLE) continue; #else if (conn != enemy && pMob[enemy].nAffectInfo & INVULNERABLE) { pUser[conn].AttackCount++; continue; } #endif //00463B11 - 0051F84D int damage = pAttack->Dam[i].Damage; //ebp-58c ebp-9f4 int saveDamage = damage; //ebp-590 ebp-0a00 if (damage != -1 && damage != -2 && damage != -3 && damage != 0) { pAttack->Dam[i].Damage = 0; #ifdef CLIVER756- AddCrackError(conn, 9, 77); #else AddCrackError(conn, 9, 34); #endif continue; } //00463B80 - 0051F8BC int isSameClan = FALSE; //ebp-594 ebp-0a0c int attackerClan = pMob[conn].MOB.Clan; //ebp-598 ebp-0a18 int enemyClan = pMob[enemy].MOB.Clan; //ebp-59c ebp-0a24 int leader = pMob[conn].Leader; //ebp-5A0 ebp-0a30 if (leader == MOB_EMPTY) leader = conn; int enemyLeader = pMob[enemy].Leader; //ebp-5a4 ebp-0a3c if (enemyLeader == MOB_EMPTY) enemyLeader == enemy; //00463C0D - 0051F949 int guildId = pMob[conn].MOB.Guild; //ebp-5a8 ebp-0a48 if (pMob[conn].GuildDisable) guildId = 0; int enemyGuildId = pMob[enemy].MOB.Guild; //ebp-5ac ebp-0a54 if (pMob[enemy].GuildDisable) enemyGuildId = 0; //00463C7B - 0051F9B3 if (!guildId && !enemyGuildId) guildId = -1; if (BrState && BRItem > 0) { int posX = pMob[conn].TargetX; //ebp-5b0 ebp-0a60 int posY = pMob[conn].TargetY; //ebp-5b4 ebp-0a6c if ((posX >= 2604 && posY >= 1708 && posX <= 2648 && posY <= 1744) || (posX >= 2652 && posY >= 1734 && posX <= 2656 && posY <= 1718)) guildId = -1; } //00463D45 - 0051FA7D if (pMob[enemy].GenerateIndex == 1079) //EndlessTower { #ifdef CLIVER756- int citizen = GetCitizen(conn); //ebp-5b8 if (!citizen) continue; if (enemy >= MAX_USER) { int serverTower = pMob[enemy].ServerTowerId; //ebp-5bc if (citizen == serverTower) continue; if ((ServerIndex + 1) != citizen && ChallangeGuildServer[citizen] != serverTower) continue; } #else int clan = pMob[conn].MOB.Clan; //ebp-0a78 if (clan != KINGDOM_BLUE && clan != KINGDOM_RED) continue; if (enemy >= MAX_USER) { int serverKingdom = pMob[enemy].ServerKingdom; //ebp-0a84 if (clan == serverKingdom) continue; } #endif } //00463DE4 - 0051FAFB else { int enemyFace = pMob[enemy].MOB.Equip[FACE].Index; //ebp-5c0 ebp-0a90 //Rei_azul Rei_vermelho if ((attackerClan >= KINGDOM_BLUE && enemyClan >= KINGDOM_BLUE && attackerClan == enemyClan) || (attackerClan == 0 && (enemyFace == 303 || enemyFace == 304))) isSameClan == TRUE; } //00463E48 - 0051FB5F int skillAggressive = 1; //ebp-5c4 ebp-0a9c if (skillId >= 0 && skillId < MAX_SKILLINDEX) skillAggressive = g_pSpell[skillId].Aggressive; else if (damage == -2) skillAggressive = 1; else skillAggressive = 0; //00463E9A - 0051FBB4 if (g_pGuildAlly[guildId] == enemyGuildId && skillAggressive && g_pGuildAlly[guildId]) continue; //00463ED4 - 0051FBEA int enemyLevel = pMob[enemy].MOB.CurrentScore.Level; //ebp-5c8 ebp-0aa8 if (pMob[enemy].CheckEvolution() == CELESTIAL) enemyLevel += 400; //00463F1B - 0051FC30 if (damage == -2) //ataque fisico { damage = 0; if (i > MOB_EMPTY && (size < sizeof(MSG_AttackTwo) || pMob[conn].MOB.Class != HUNTRESS || !(pMob[conn].MOB.LearnedSkill & LEARN_06))) { #ifdef CLIVER756- AddCrackError(conn, 9, 24); #else AddCrackError(conn, 9, 35); #endif continue; } //00463F85 - 0051FC97 int isDoubleCrit = FALSE; //ebp-5cc ebp-0ab4 if (!i) isDoubleCrit = BASE_GetDoubleCritical(&pMob[conn].MOB, (unsigned short*)pUser[conn].AttackCount, &pAttack->Progress, &doubleCritical); //00463FD7 - 0051FCDF damage = pMob[conn].MOB.CurrentScore.Damage; int enemyAc = pMob[enemy].MOB.CurrentScore.Ac; //ebp-5d0 ebp-0ac0 if (enemy < MAX_USER) enemyAc *= 2; //00464020 - 0051FD26 if (doubleCritical & 2) { if (enemy < MAX_USER) damage = (((rand() % 3) + 13) * damage) / 10; //de 30% a 50% a mais de dano else damage = (((rand() % 4) + 15) * damage) / 10; //de 50% a 90% a mais de dano } //00464093 - 0051FD90 damage = BASE_GetDamage(damage, enemyAc, calcSkillBonus); if (i == 0 && size >= sizeof(MSG_AttackTwo) && pMob[conn].MOB.Class == HUNTRESS && (pMob[conn].MOB.LearnedSkill & LEARN_21)) //Skill Perfuração { int chanceSuccess = rand() % 4; //ebp-5d4 ebp-0acc #ifdef CLIVER756- if (pMob[conn].nAffectInfo & INVISIBLE) { DoRemoveAffect(conn, 28); chanceSuccess = 0; } #endif if (!chanceSuccess) { #ifdef CLIVER756- int calcSkillDamage = (pMob[conn].MOB.CurrentScore.Str + pMob[conn].MOB.CurrentScore.Special[3]) / 2; //ebp-5d8 ebp-0ad8 #else int calcSkillDamage = (pMob[conn].MOB.CurrentScore.Damage + pMob[conn].MOB.CurrentScore.Special[3]) / 2; //ebp-5d8 ebp-0ad8 #endif if (pMob[conn].MOB.LearnedSkill & LEARN_23) { #ifdef CLIVER756- calcSkillDamage += 150; #else calcSkillDamage += 250; #endif } if (pMob[conn].CheckGetLevel() == CELESTIAL) calcSkillDamage += 150; if (enemy > MOB_EMPTY && enemy < MAX_USER) { if (pMob[enemy].CheckEvolution() == ARCH) calcSkillDamage = (calcSkillDamage * 2) / 3; else if (pMob[enemy].CheckEvolution() == CELESTIAL) calcSkillDamage /= 3; } //00464255 - 0051FF1C int deltaDmg = 0; //ebp-5dc ebp-0ae4 if (enemy >= MAX_USER && pMob[enemy].MOB.BaseScore.Level >= 300) { deltaDmg = pMob[enemy].MOB.LearnedSkill % 1000; calcSkillDamage = (calcSkillDamage * (100 - deltaDmg)) / 100; } //004642C8 - 0051FF8E pAttack->Dam[1].TargetID = MOB_EMPTY; #ifdef CLIVER756- if (calcSkillDamage > 32000) calcSkillDamage = 32000; #else calcSkillDamage /= 2; if (calcSkillDamage > 1000000) calcSkillDamage = 1000000; #endif pAttack->Dam[1].Damage = calcSkillDamage; doubleCritical |= 4; damage += calcSkillDamage; } } //0051FFF2 #ifdef CLIVER756- //somente 757+ #else if (pMob[conn].MOB.Class == BEASTMASTER && pMob[conn].MOB.nLearnedSkill & nLEARN_08) //9ª skill BM Natureza - Concha_Resistente { int eptAffect = GetEmptyAffect(conn, 16); //ebp-0af0 int successRate = rand() % 12; //ebp-0afc if (eptAffect != -1 && pMob[conn].Affect[eptAffect].Type <= 5 && successRate < 2) doubleCritical = 0; } #endif //00464322 - 0052007A if (doubleCritical & 1) //100% a mais de dano damage *= 2; #ifdef CLIVER756- //somente 757+ #else if (pMob[conn].MOB.Class == HUNTRESS) { if (pMob[conn].MOB.nLearnedSkill & nLEARN_00 && pUser[conn].useAgainstAttack == TRUE) //9ª skill HT Sobrevivencia - Contra_Ataque { damage = (damage * 12) / 10; pUser[conn].useAgainstAttack = FALSE; } //005200FD int wType = BASE_GetItemAbility(&pMob[conn].MOB.Equip[WEAPON], EF_WTYPE); //ebp-0b08 int successRate = rand() % 100; //ebp-0b14 if (wType == CLAW && pMob[conn].MOB.nLearnedSkill & nLEARN_08 && doubleCritical && successRate > 50) //Garras - 9ª skill ht Captura - Tiro_Direto - dano proporcional ao hp do alvo { SetTick(enemy, 244, 4, 255); if (enemy < MAX_USER) SendAffect(enemy); doubleCritical = 0; damage = (pMob[enemy].MOB.CurrentScore.Hp * 15) / 100; } } //005201C7 if (pMob[conn].MOB.Class == TRANSKNIGHT) { int successRate = rand() % 100; //ebp-0b20 if (doubleCritical & 1 && pMob[conn].MOB.nLearnedSkill & nLEARN_04) //9ª skill tk Trans - Mãos_Sangrentas - Com arma de duas mãos recupera hp aleatoriamente conforme o dano { int weaponFirstId = pMob[conn].MOB.Equip[WEAPON].Index; //ebp-0b2c int weaponSecId = pMob[conn].MOB.Equip[SHIELD].Index; //ebp-0b38 if (successRate < 5 && weaponFirstId != 0 && weaponSecId != 0) { int recHp = damage / 10; //ebp-0b44 pMob[conn].MOB.CurrentScore.Hp += recHp; } } } #endif //00464343 - 00520295 pAttack->DoubleCritical = doubleCritical; } //00464357 - 005202A9 else if (damage == -1 && skillId >= 0 && skillId < MAX_SKILLINDEX) //ataque magico { //critico magico int isMagicCrit = FALSE; if (i < MAX_TARGET) isMagicCrit = BASE_GetDoubleCritical(&pMob[conn].MOB, &pAttack->Progress, &doubleCritical); damage = 0; int maxTarget = g_pSpell[skillId].MaxTarget; //ebp-5e0 ebp-0b50 if (clientTick != SKIPCHECKTICK && i >= maxTarget) { #ifdef CLIVER756- AddCrackError(conn, 10, 28); sprintf(temp, "skill target max num %d", skillId); #else AddCrackError(conn, 10, 36); sprintf(temp, "err,SkipTick:%d CurTar:%d MaxTar:%d UseSkill:%d", clientTick, i, maxTarget, skillId); #endif Log(temp, pUser[conn].AccountName, pUser[conn].IP); continue; } //00464411 - 0052037C if (g_pSpell[skillId].bParty && leader != enemyLeader && guildId != enemyGuildId) { #ifdef CLIVER756- AddCrackError(conn, 9, 27); #else AddCrackError(conn, 9, 35); #endif sprintf(temp, "party skill skill:%d leader:%d tleader:%d", skillId, leader, enemyLeader); Log(temp, pUser[conn].AccountName, pUser[conn].IP); continue; } //00520417 #ifdef CLIVER756- //somente 757+ #else if ((enemy < MAX_USER && pMob[enemy].MOB.Class == BEASTMASTER && conn != enemy && pMob[enemy].MOB.nLearnedSkill & nLEARN_08) || enemy == unkId6145634) //9ª skill bm elemental - Anti_Magia { int has9thElemental = FALSE; //ebp-0b5c for (int j = 0; j < MAX_AFFECT; i++) { if (pMob[enemy].Affect[j].Type == 43) { has9thElemental = TRUE; break; } } if (has9thElemental) continue; } #endif //004644AC - 005204BD int isSetTick = FALSE; //ebp-5e4 ebp-0b74 int instanceType = g_pSpell[skillId].InstanceType; //ebp-5e8 ebp-0b80 if (instanceType >= 1 && instanceType <= 5) { int curWeather = CurrentWeather; //ebp-5ec int isNipple = FALSE; if ((pMob[conn].TargetX / 128) >= 27 && (pMob[conn].TargetX / 128) <= 30 && (pMob[conn].TargetY / 128) >= 21 && (pMob[conn].TargetY / 128) <= 24) //X 3456 - 3840 Y 2688 - 3072 isNipple = TRUE; if (isNipple) curWeather = 2; if ((pMob[conn].TargetY / 128) > 25) curWeather = 0; if (clientTick == SKIPCHECKTICK && pAttack->Motion == 254 && (pAttack->SkillIndex == 32 || pAttack->SkillIndex == 34 || pAttack->SkillIndex == 36)) //Ataque dos Pets { int petSanc = BASE_GetItemSanc(&pMob[conn].MOB.Equip[PET]); //ebp-5f0 if (pAttack->SkillIndex == 32) //imp damage = (petSanc * 200) + (curLevel * 8); else if (pAttack->SkillIndex == 34) //nyerdes damage = (petSanc * 300) + (curLevel * 8); else if (pAttack->SkillIndex == 36) //griupan damage = (petSanc * 350) + (curLevel * 8); } //00464697 else { damage = BASE_GetSkillDamage(skillId, &pMob[conn].MOB, curWeather, pMob[conn].WeaponDamage, pMob[conn].MobFace); } //004646E2 int enemyAc = pMob[enemy].MOB.CurrentScore.Ac; //ebp-5f4 damage = BASE_GetSkillDamage(damage, enemyAc, calcSkillBonus); if (skillId == 50 && (pMob[conn].MOB.LearnedSkill & LEARN_07) && enemy < MAX_USER) //Som das Fadas - se tiver a oitava e o alvo for um player aumenta o dano baseado no hp do alvo damage += (pMob[enemy].MOB.CurrentScore.Hp * 20) / 100; //0046477C if (skillId != 79) { if (instanceType == 1) //Carga, Golpe_Mortal, Espada_da_Fênix, Golpe_Duplo, Contra_Ataque, Ataque_da_Alma, Punhalada_Venenosa, Nevoa_Venenosa, {//Ataque_Fatal, Golpe_Felino, Explosão_Etérea, Lâmina_das_Sombras int dmgInc = 0; //ebp-5f8 if (enemy >= MAX_USER) dmgInc = pMob[enemy].MOB.LearnedSkill % 1000; //testar!!!!!!!! else { dmgInc = 10; if (enemyLevel > 354) { if (pMob[enemy].CheckEvolution() == CELESTIAL) //Celestial+ dmgInc += 32; else if (pMob[enemy].CheckEvolution() == ARCH) dmgInc += 16; else //Mortal dmgInc += 15; } } //0046484E damage = ((100 - dmgInc) * damage) / 100; } //00464875 else if (instanceType >= 2 && instanceType <= 5 && skillId != 97) //4-Giro_da_Furia, 3-Destino, 2-Espada_Flamejante, 3-Lamina_Congelada, 2-Exterminar, 3-Tempestade_De_Gelo, 4-Fanatismo, 4-Flecha_Magica, 4-Choque_Divino, 4-Julgamento_Divino, 2-Ataque_de_Fogo, 5-Relâmpago, {//3-Lança_de_Gelo, 2-Tempestade_de_Meteoro, 3-Nevasca, 2-Fênix_de_Fogo, 2-Inferno, 2-Fera_Flamejante, 4-Som_das_Fadas, 4-Fúria_de_Gaia, 4-Espirito_Vingador, (canhão guardião nao é calculado aqui!!!!) int resist = instanceType - 2; //ebp-5fc int resistValue = pMob[enemy].MOB.Resist[resist]; //ebp-600 if (enemy < MAX_USER) resistValue /= 2; damage = ((100 - resistValue) * damage) / 100; } } //00464905 else //Tempestade de Raios { damage *= 2; } //00464913 - 005209D9 if (skillId != 97) { if (instanceType == 2) //Espada_flamejante, Exterminar, Ataque_de_Fogo, Tempestade_de_Meteoro, Fenix_de_fogo, Inferno, Fera_Flamejante { int calcBonus = 10 - i; //ebp-604 ebp-0bf8 if (calcBonus < 0) { calcBonus = 0; pAttack->Dam[i].TargetID = MOB_EMPTY; } damage = (damage * calcBonus) / 10; } //0046497D - 00520A3C else if (instanceType == 4) //Giro_da_Furia, Fanatismo, Flecha_Magica, Choque_Divino, Julgamento_Divino, Som_das_Fadas, Furia_de_Gaia, Espirito_Vingador { int calcBonus = 10 - (i * 2); //ebp-608 ebp-0c04 if (calcBonus < 0) { calcBonus = 0; pAttack->Dam[i].TargetID = MOB_EMPTY; } damage = (damage * calcBonus) / 10; } } } //004649E1 - 00520A99 else if (instanceType == 6) //Cura, Recuperar { if (enemy <= MOB_EMPTY && enemy >= MAX_USER) continue; int enemyMapAtt = (GetAttribute(pMob[enemy].TargetX, pMob[enemy].TargetY) & PVP); //ebp-60c ebp-0c0d if (!mapAttribute && enemyMapAtt) { pAttack->Dam[i].TargetID = MOB_EMPTY; pAttack->Dam[i].Damage = 0; continue; } //00464A95 - 00520B45 if (skillId == 27) //Curar { damage = (saveSpecial * 2) + g_pSpell[skillId].InstanceValue; if (pMob[conn].CheckEvolution() == CELESTIAL && (pMob[conn].MOB.LearnedSkill & LEARN_07)) { #ifdef CLIVER756- damage += pMob[conn].countHP; #else damage += pMob[conn].countHP + pMob[conn].MOB.CurrentScore.Level; #endif } } //00464B19 - 00520BD2 else //Recuperar { damage = ((saveSpecial * 3) / 2) + g_pSpell[skillId].InstanceValue; if (pMob[conn].MOB.LearnedSkill & LEARN_07) damage = (damage * 120) / 100; if (pMob[conn].CheckEvolution() == CELESTIAL) { #ifdef CLIVER756- damage += pMob[conn].countHP; #else damage += pMob[conn].countHP + pMob[conn].MOB.CurrentScore.Level; if (pMob[conn].MOB.Class == FOEMA && pMob[conn].MOB.nLearnedSkill & nLEARN_00) //9ª Skill Magia Branca Cenote {//Duplica o efeito de cura da skill recuperar. int sucessRate = rand() % 100; //ebp-0c1c int rate = pMob[conn].MOB.CurrentScore.Level - 279; //ebp-0c28 if (rate > 0) rate /= 4; rate += 5; if(sucessRate < rate) { damage *= 2; int newManaSpent = g_pSpell[skillId].ManaSpent * 2; //ebp-0c34 int calcMp = pMob[conn].MOB.CurrentScore.Mp - newManaSpent; //ebp-0c40 if (calcMp < 0) calcMp = 0; pMob[conn].MOB.CurrentScore.Mp = calcMp; int calcReqMp = pUser[conn].ReqMp - newManaSpent; //ebp-0c4c if (calcReqMp < 0) calcReqMp = 0; pUser[conn].ReqMp = calcReqMp; pAttack->ReqMp = calcReqMp; } } #endif } } //00464BA2 - 00520DBF damage = -damage; #ifdef CLIVER756- if (damage < 0 && damage > -6) damage = -6; #else if (damage > -6) damage = -6; #endif int enemyHp = pMob[enemy].MOB.CurrentScore.Hp; //ebp-614 ebp-0c58 CheckMobHpDamage(enemy, damage); SetReqHp(enemy); int enemyHp2 = pMob[enemy].MOB.CurrentScore.Hp; //ebp-618 ebp-0c64 int hpResult = (enemyHp2 - enemyHp) / 8; //ebp-61c ebp-0c70 if (hpResult > 120) hpResult = 120; if (hpResult < 0) hpResult = 0; if (hpResult > 0 && conn != enemy && conn > MOB_EMPTY && conn < MAX_USER) { int village = BASE_GetVillage(pMob[enemy].TargetX, pMob[enemy].TargetY); //ebp-620 ebp-0c7c if (village >= ARMIA && village <= NOATUM && attHp < hpResult) attHp = hpResult; } } //00464CF0 - 00520F00 else if (instanceType == 7) //Flash { pMob[enemy].Mode = MOB_PEACE; pMob[enemy].CurrentTarget = MOB_EMPTY; for (int j = MOB_EMPTY; j < MAX_ENEMY; j++) //ebp-624 ebp-0c88 pMob[enemy].EnemyList[j] = MOB_EMPTY; } //00464D6B - 00520F7B else if (instanceType == 8) //Desintoxicar { int isDeBuff = FALSE; //ebp-628 ebp-0c94 for (int j = 0; j < MAX_AFFECT; j++) //ebp-62c ebp-0ca0 { int enemyAffectType = pMob[enemy].Affect[j].Type; //ebp-630 ebp-0cac #ifdef CLIVER756- if (enemyAffectType == 1 || enemyAffectType == 3 || enemyAffectType == 5 || enemyAffectType == 7 || enemyAffectType == 10 || enemyAffectType == 12 || enemyAffectType == 20) { //Toque_Sagrado, Perseguição, Lamina_Conjelada, Tempestade_de_Gelo, Lança_de_Gelo, Nevasca, Enfraquecer #else if (enemyAffectType == 1 || enemyAffectType == 3 || enemyAffectType == 5 || enemyAffectType == 7 || enemyAffectType == 10 || enemyAffectType == 12 || enemyAffectType == 20 || enemyAffectType == 33) { //Toque_Sagrado, Perseguição, Lamina_Conjelada, Tempestade_de_Gelo, Lança_de_Gelo, Nevasca, Enfraquecer, XXX #endif #ifdef CLIVER756- pMob[enemy].Affect[j].Type = 0; #else pMob[enemy].Affect[j].Type = 0; pMob[enemy].Affect[j].Level = 0; pMob[enemy].Affect[j].Time = 0; #endif isDeBuff = TRUE; } else if (enemyAffectType == 32 && (pMob[conn].MOB.LearnedSkill & LEARN_07) && (pMob[conn].MobFace % 10) > 5) //Arch/Celestial { #ifdef CLIVER756- pMob[enemy].Affect[j].Type = 0; #else pMob[enemy].Affect[j].Type = 0; pMob[enemy].Affect[j].Level = 0; pMob[enemy].Affect[j].Time = 0; #endif isDeBuff = TRUE; } } //00464E97 - 00521126 if (isDeBuff) { pMob[enemy].GetCurrentScore(enemy); SendScore(enemy); } } //00464ED2 - 00521161 else if (instanceType == 9) //Teleporte { int enemyHp = pMob[enemy].MOB.CurrentScore.Hp; //ebp-634 ebp-0cb8 if (enemyHp <= 0) { #ifdef CLIVER756- SendClientMessage(conn, g_pMessageStringTable[_NN_Cant_Summon_Dead_Person]); #else SendMessageChatId(conn, FALSE, _NN_Cant_Summon_Dead_Person); #endif return; } //00464F19 int mapAtt = GetAttribute(pMob[conn].TargetX, pMob[conn].TargetY); //ebp-638 ebp-0cc1 if (mapAtt & CANTSUMMON && curLevel < 1000) { #ifdef CLIVER756- SendClientMessage(conn, g_pMessageStringTable[_NN_Summon_Not_Allowed_Here]); #else SendMessageChatId(conn, FALSE, _NN_Summon_Not_Allowed_Here); #endif continue; } //00464F7C - 005211FF if (enemyLevel > (special + curLevel + 100)) { #ifdef CLIVER756- SendClientMessage(conn, g_pMessageStringTable[_NN_Too_High_Level_To_Summon]); #else SendMessageChatId(conn, FALSE, _NN_Too_High_Level_To_Summon); #endif continue; } //00464FAA - 0052122C if (!(pMob[enemy].TargetX & 0xFF00) && !(pMob[enemy].TargetY & 0xFF00)) { #ifdef CLIVER756- SendClientMessage(conn, g_pMessageStringTable[_NN_Cant_Use_That_Here]); #else SendMessageChatId(conn, FALSE, _NN_Cant_Use_That_Here); #endif return; } //00464FF8 - 00521275 if (enemy < MAX_USER && pUser[enemy].Mode == USER_PLAY) RequestSummon(conn, enemy); } //00465031 - 005212AE else if (instanceType == 11) //Evocações { #ifdef CLIVER756- //somente 757+ #else int pkPoint = pMob[conn].MOB.Inventory[KILL_MARK].EF1; //ebp-0cdc if (pkPoint < 75) { int calcPkPoint = pkPoint; calcPkPoint = 75 - calcPkPoint; if (calcPkPoint >= 70) return; } #endif int instanceValue = g_pSpell[skillId].InstanceValue; //ebp-63c ebp-0ce8 if (instanceValue >= 1 && instanceValue <= 100) { int curEvocPoints = pMob[conn].MOB.CurrentScore.Special[2]; //ebp-640 ebp-0cf4 int howManySummon = 1; //ebp-0d00 #ifdef CLIVER756- if (instanceValue < 3) howManySummon = curEvocPoints / 30; else if (instanceValue < 6) howManySummon = curEvocPoints / 40; else if (instanceValue < 8) howManySummon = curEvocPoints / 80; //004651CA for (int j = 0; j < howManySummon; j++) //ebp-644 { int isSummoned = GenerateSummon(conn, (instanceValue - 1), 0); //ebp-648 if (!isSummoned) { pMob[conn].MOB.CurrentScore.Mp = curMp; pUser[conn].ReqMp = reqMp; damage = 0; return; } } #else //00521357 if(instanceValue < 3) howManySummon = curEvocPoints / 30; else if (instanceValue < 6) howManySummon = curEvocPoints / 50; else if (instanceValue < 8) howManySummon = curEvocPoints / 100; if (howManySummon > 5) howManySummon = 5; //005213C5 int isSummoned = GenerateSummon(conn, (instanceValue - 1), howManySummon, 0); //ebp-0d0c if(!isSummoned) { pMob[conn].MOB.CurrentScore.Mp = curMp; pUser[conn].ReqMp = reqMp; damage = 0; return; } //0052142C int summonLeader = pMob[conn].Leader; //ebp-0d18 if (!summonLeader) summonLeader = conn; SendSummonParty(summonLeader, conn); SendSummonParty(conn, summonLeader); for (int j = 0; j < MAX_PARTY; j++) //ebp-0d24 { int partyId = pMob[summonLeader].PartyList[j]; //ebp-0d30 if (partyId <= MOB_EMPTY || partyId >= MAX_USER) continue; SendSummonParty(partyId, conn); } #endif } //0046525A - 005214E9 damage = 0; break; } //00465269 - 005214FD else if (instanceType == 12) //Chamas_Etereas { if (enemy >= MAX_USER) continue; int enemyMaxMp = pMob[enemy].MOB.CurrentScore.MaxMp; //ebp-64c ebp-0d3c int curElementPoint = pMob[conn].MOB.CurrentScore.Special[1]; //ebp-650 ebp-0d48 int calcMp = 0; //ebp-654 ebp-0d54 #ifdef CLIVER756- int enemyLvl = enemyLevel; //ebp-658 int curLvl = curLevel; //ebp-65c int sucessRate = 100; //ebp-660 if ((enemyLevel + 10) > curLevel) { int calcRate = (reqMp + 10) - curLevel; //ebp-664 sucessRate -= (calcRate * 2); } //00465322 if (pMob[conn].MOB.LearnedSkill & LEARN_07) sucessRate += 40; #else int sucessRate = 30; //ebp-660 ebp-0d60 if (pMob[conn].MOB.LearnedSkill & LEARN_07) sucessRate = 90; #endif //0052157E int rate = rand() % 100; //ebp-668 ebp-0d6c if (rate < sucessRate) { #ifdef CLIVER756- if (pMob[conn].MOB.LearnedSkill & LEARN_07) calcMp = enemyMaxMp; else calcMp = (enemyMaxMp / 3) + curElementPoint; #else if (pMob[conn].MOB.LearnedSkill & LEARN_07) calcMp = pMob[enemy].MOB.CurrentScore.Mp; else calcMp = pMob[enemy].MOB.CurrentScore.Mp / 2; #endif #ifdef CLIVER756- int enemyResist = pMob[enemy].MOB.Resist[2] / 2; //ebp-66c ebp-0d78 #else int enemyResist = pMob[enemy].MOB.Resist[2]; //ebp-66c ebp-0d78 if (enemyResist > 300) enemyResist = ((pMob[enemy].MOB.Resist[2] - 300) / 20) + 60; //0052164E else if (enemyResist > 200) enemyResist = ((pMob[enemy].MOB.Resist[2] - 200) / 10) + 50; //00521692 else enemyResist = pMob[enemy].MOB.Resist[2] / 2; //005216B4 if (enemyResist > 99) enemyResist = 99; #endif calcMp = ((100 - enemyResist) * calcMp) / 100; pMob[enemy].MOB.CurrentScore.Mp -= calcMp; if (pMob[enemy].MOB.CurrentScore.Mp < 0) pMob[enemy].MOB.CurrentScore.Mp = 0; pUser[enemy].ReqMp = pMob[enemy].MOB.CurrentScore.Mp; SendSetHpMp(enemy); //0052176F damage = calcMp; int calcSucess = 0; //ebp-670 ebp-0d9c calcSucess = (curElementPoint / 5) + (pMob[enemy].MOB.CurrentScore.Int / 500); if (calcSucess > 40) calcSucess = 40; rate = rand() % 100; if (rate < calcSucess) { int affType = 0; //ebp-674 ebp-0da8 int isFlag = FALSE; //ebp-678 ebp-0db4 calcSucess = curElementPoint / 8; rate = rand() % 100; if (calcSucess < rate) isFlag = TRUE; //0046555A - 00521844 if (pMob[enemy].MOB.Class == TRANSKNIGHT) { if (isFlag) affType = 14; else affType = 17; } //00465596 - 0052187F else if (pMob[enemy].MOB.Class == FOEMA) { if (isFlag) affType = 18; else affType = 2; } //004655D0 - 005218B8 else if (pMob[enemy].MOB.Class == BEASTMASTER) { if (isFlag) affType = 16; else affType = 10; } //0046560A - 005218F1 else if (pMob[enemy].MOB.Class == HUNTRESS) { if (isFlag) affType = 19; else affType = 26; } //00465642 - 00521928 int emptyAffect = GetEmptyAffect(enemy, affType); //ebp-67c ebp-0dc0 if (pMob[enemy].Affect[emptyAffect].Type == affType) { pMob[enemy].Affect[emptyAffect].Type = 0; pMob[enemy].Affect[emptyAffect].Time = 0; pMob[enemy].Affect[emptyAffect].Level = 0; } //004656D4 - 005219B9 pMob[enemy].GetCurrentScore(enemy); SendEquip(enemy, FALSE); SendScore(enemy); } } //00465714 - 005219F9 else { damage = -4; } return; } //00465723 - 00521A08 if (skillId == 6) //Furia_Divina {// (npcs relacionados aos reinos akelonia e hekalotia) IceQueen if (enemy >= MAX_USER && (pMob[enemy].MOB.Merchant || pMob[enemy].MOB.Clan == 6 || (pMob[enemy].GenerateIndex >= 450 && pMob[enemy].GenerateIndex < 550) || pMob[enemy].GenerateIndex == 155)) break; else if (VsModeState == 2 && !pMob[conn].CheckPvPZone()) break; else if (WarTowerState == 1 && pMob[conn].CheckPvPZone() == 7 && GetCitizen(enemy) != (ServerIndex + 1)) { DoTeleport(enemy, 2095, 2095, FALSE); return; } //004657C3 - 00521B36 pMob[enemy].Route[0] = 0; int myTx = pMob[conn].TargetX; //ebp-680 ebp-0dcc int myTy = pMob[conn].TargetY; //ebp-684 ebp-0dd8 if (myTx < pMob[enemy].TargetX) myTx++; if (myTx > pMob[enemy].TargetX) myTx--; if (myTy < pMob[enemy].TargetY) myTy++; if (myTy > pMob[enemy].TargetY) myTy--; //004658A4 - 00521C17 if (!GetEmptyMobGridValid(enemy, &myTx, &myTy)) break; int curConfiance = pMob[conn].MOB.CurrentScore.Special[1]; //ebp-688 ebp-0de4 int calcSuccess = (curConfiance / 10) + 30; //ebp-68c ebp-0df0 if (enemy >= MAX_USER) calcSuccess = (curConfiance / 5) + 50; if (pMob[conn].MOB.LearnedSkill & LEARN_07) calcSuccess += 20; int sucessBonus = (curLevel - enemyLevel) / 2; //ebp-690 ebp-0dfc if (pMob[enemy].AgmoState == TRUE) break; int enemyFace = pMob[enemy].MOB.Equip[FACE].Index; //ebp-694 ebp-0e08 #ifdef CLIVER756- //Somente 7.57+ #else if (enemy > MOB_EMPTY && enemy <= MAX_USER && pMob[enemy].MOB.Class == BEASTMASTER && pMob[enemy].MOB.LearnedSkill & LEARN_23) //se for um player, Bm e tiver a Edem aprendida { int eptAffect = GetEmptyAffect(enemy, 16); //ebp-0e14 if (pMob[enemy].Affect[eptAffect].Type == 16) //e estiver tranformado. calcSuccess -= 20; //reduz a chance de sucesso. } #endif //004659A4 - 00521D7D if ((rand() % 100) < (calcSuccess + sucessBonus)) { //Torre_de_Thor Força_Lunar Torre_Guardiã Vinha Kefra if (enemyFace != 219 && enemyFace != 220 && enemyFace != 357 && enemyFace != 358 && enemyFace != 362) //inserir aqui qualquer face que nao pode ser puxada pela skill { #ifdef CLIVER756- //Somente 757+ #else if (pMob[conn].MOB.LearnedSkill & LEARN_07 && pMob[conn].MOB.CurrentScore.Int < (rand() % 20000) && SetTick(enemy, skillId, delay, special) && enemy > MOB_EMPTY && enemy < MAX_USER) SendScore(enemy); #endif //00465A15 - 00521E72 pMob[enemy].Route[0] = 0; MSG_Action sendPacket; //ebp-6c8 ebp-0e50 memset(&sendPacket, 0, sizeof(MSG_Action)); GetAction(enemy, myTx, myTy, &sendPacket); sendPacket.Effect = 7; sendPacket.Speed = 2; GridMulticast(enemy, myTx, myTy, (MSG_STANDARD*)&sendPacket); if (enemy < MAX_USER) pUser[enemy].cSock.AddMessage((char*)&sendPacket, sendPacket.Size); } } } //00465AB5 - 00521F12 else if(skillId == 85) //Escudo_Dourado { int calcGoldCost = special * 100; //ebp-6cc ebp-0e5c if (pMob[conn].MOB.Coin < calcGoldCost) { #ifdef CLIVER756- SendClientMessage(conn, g_pMessageStringTable[_NN_Havent_Money_So_Much]); #else SendMessageChatId(conn, FALSE, _NN_Havent_Money_So_Much); #endif return; } pMob[conn].MOB.Coin -= calcGoldCost; SendUpdateCoin(conn); } //00465B1E - 00521F7B else if (skillId == 22) //Exterminar { int currentMp = pMob[conn].MOB.CurrentScore.Mp; //ebp-6d0 ebp-0e68 int restMp = (currentMp * 20) / 100; //ebp-6d4 ebp-0e74 #ifdef CLIVER756- //Somente 7.57+ #else if (pMob[conn].MOB.Class == TRANSKNIGHT && pMob[conn].MOB.nLearnedSkill & nLEARN_08) //9ª Espelho Mágico - Reduz o consumo de mana... restMp /= 2; #endif pMob[conn].MOB.CurrentScore.Mp = restMp; pUser[conn].ReqMp = 0; pAttack->CurrentMp = restMp; int magicSwordPoints = pMob[conn].MOB.CurrentScore.Special[3]; //ebp-6d8 ebp-0e80 int currentInt = pMob[conn].MOB.CurrentScore.Int; //ebp-6dc ebp-0e8c damage = (damage + currentMp) + ((currentInt * 3) / 2); int enemyTx = pMob[conn].TargetX; //ebp-6e0 ebp-0e98 int enemyTy = pMob[conn].TargetY; //ebp-6e4 ebp-0ea4 int newEnemyTx = enemyTx; //ebp-6e8 ebp-0eb0 int newEnemyTy = enemyTy; //ebp-6ec ebp-0ebc damage = (damage * 85) / 100; int enemyFace = pMob[enemy].MOB.Equip[FACE].Index; //ebp-6f0 ebp-0ec8 #ifdef CLIVER756- if(GetEmptyMobGrid(conn, &newEnemyTx, &newEnemyTy) && enemyFace != 219 && enemyFace != 220 && enemyFace != 357 && enemyFace != 358 && enemyFace != 362 && enemyFace != 53) #else if (VsModeState != 2 && enemyFace != 219 && enemyFace != 220 && enemyFace != 357 && enemyFace != 358 && enemyFace != 362 && enemyFace != 53 && GetEmptyMobGrid(conn, &newEnemyTx, &newEnemyTy/*, 1*/)) //GetEmptyMobGrid recebe um 4 argumento na 7.57 #endif { MSG_Action sendPacket; //ebp-724 ebp-0f04 memset(&sendPacket, 0, sizeof(MSG_Action)); GetAction(enemy, newEnemyTx, newEnemyTy, &sendPacket); #ifdef CLIVER756- sendPacket.Effect = 2; #else sendPacket.Effect = 3; #endif sendPacket.Speed = 2; GridMulticast(enemy, newEnemyTx, newEnemyTy, (MSG_STANDARD*)&sendPacket); if (enemy < MAX_USER) pUser[enemy].cSock.AddMessage((char*)&sendPacket, sendPacket.Size); GetAction(conn, newEnemyTx, newEnemyTy, &sendPacket); #ifdef CLIVER756- sendPacket.Effect = 2; #else sendPacket.Effect = 3; #endif GridMulticast(conn, enemyTx, enemyTy, (MSG_STANDARD*)&sendPacket); pUser[conn].cSock.AddMessage((char*)&sendPacket, sendPacket.Size); } } //00465DDB - 00522267 else if (skillId == 30) //Julgamento_Divino { int dmgBonus = pMob[conn].MOB.CurrentScore.Hp; //ebp-728 ebp-0f10 if (pMob[conn].MOB.LearnedSkill & LEARN_07) dmgBonus = (dmgBonus * 110) / 100; damage += dmgBonus; pMob[conn].MOB.CurrentScore.Hp = (pMob[conn].MOB.CurrentScore.Hp * 2) / 3; if(conn < MAX_USER) pUser[conn].ReqHp = pMob[conn].MOB.CurrentScore.Hp; } //00465E96 - 0052231D else if (skillId == 41) //Velocidade { if (conn >= MOB_EMPTY && conn <= MAX_USER && pUser[conn].Mode == USER_PLAY) SetTick(conn, skillId, delay, special); SendScore(conn); break; } //00465EF2 - 0052237E else if (skillId == 44) //Escudo_Magico { int maxShieldTarget = (special / 25) + 2; //ebp-72c ebp-0f1c if (maxShieldTarget > MAX_TARGET) maxShieldTarget = MAX_TARGET; if (maxShieldTarget <= 1) maxShieldTarget = 2; for (int j = 0; j < maxShieldTarget; j++) //ebp-730 ebp-0f28 { if (j >= 1 && size <= sizeof(MSG_AttackOne)) break; if (j >= 1 && size <= sizeof(MSG_AttackTwo)) break; //00465F94 - 00522420 int shieldTargetId = pAttack->Dam[j].TargetID; //ebp-734 ebp-0f34 if (shieldTargetId <= MOB_EMPTY || shieldTargetId >= MAX_USER) continue; if (pUser[shieldTargetId].Mode != USER_PLAY) continue; if (SetTick(shieldTargetId, skillId, delay, special)) SendScore(shieldTargetId); } break; } //00466018 - 005224A7 else if (skillId == 98) //Muro_de_Espinhos { int vineType = (special / 30) - 8; //ebp-738 ebp-0f40 if (vineType < 0) vineType = 0; if (vineType > 2) vineType = 2; int mobId = CreateMob("VINE", pAttack->TargetX, pAttack->TargetY, "npc", &mSummon.Mob[vineType]); //ebp-73c ebp-0f4c if (mobId > MOB_EMPTY && mobId < MAX_MOB) { pMob[mobId].Affect[0].Type = 24; pMob[mobId].Affect[0].Time = vineType + 6; int vineX = pMob[mobId].TargetX; //ebp-740 ebp-0f58 int vineY = pMob[mobId].TargetY; //evp-744 ebp-0f64 STRUCT_ITEM vine; //ebp-74c ebp-0f74 memset(&vine, 0, sizeof(STRUCT_ITEM)); vine.Index = 359; if (pItemGrid[vineY][vineX]) { DeleteMob(mobId, DELETE_NORMAL); return; } int createId = CreateItem(vineX, vineY, &vine, vineX % 4, 1, 0); //ebp-750 ebp-0f80 if (createId > 0 && createId < MAX_ITEMLIST) { int heigth; //ebp-754 ebp-0f8c UpdateItem(createId, 3, &heigth); MSG_UpdateItem sendPacket; //ebp-768 ebp-0f9c memset(&sendPacket, 0, sizeof(MSG_UpdateItem)); sendPacket.ID = ESCENE_FIELD; sendPacket.Type = _MSG_UpdateItem; sendPacket.ItemID = createId + MASK_ITEM; sendPacket.Size = sizeof(MSG_UpdateItem); sendPacket.Height = (char)heigth; sendPacket.State = (short)pItem[createId].State; GridMulticast(vineX, vineY, (MSG_STANDARD*)&sendPacket, FALSE); } else { DeleteMob(mobId, DELETE_DEAD); } } //00466264 - 005226ED GridMulticast(pMob[conn].TargetX, pMob[conn].TargetY, (MSG_STANDARD*)&pAttack, FALSE); return; } //0046629A - 00522728 else if (skillId == 31) //Renascimento { if (enemy >= MAX_USER) return; if (pMob[enemy].MOB.CurrentScore.Hp > 0) return; int isFriendly = FALSE; //ebp-76c ebp-0fb4 int tLeader = pMob[conn].Leader; //ebp-770 ebp-0fc0 if (!tLeader) tLeader = conn; if (tLeader != enemy) { for (int k = 0; k < MAX_PARTY; k++) //ebp-774 ebp-0fcc { if (pMob[tLeader].EnemyList[k] == enemy) { isFriendly = TRUE; break; } } } else isFriendly = TRUE; //00466375 - 005227FF if (enemyGuildId == guildId) isFriendly = TRUE; if (!isFriendly) return; GridMulticast(pMob[conn].TargetX, pMob[conn].TargetY, (MSG_STANDARD*)&pAttack, FALSE); int rate = rand() % 100; //ebp-778 ebp-0fd8 #ifdef CLIVER756- int sucessRate = ((special / 15) * 2) + 56; //ebp-77c ebp-0fe4 #else int sucessRate = ((special / 15) * 2) + 30; //ebp-77c ebp-0fe4 if (sucessRate > 90) sucessRate = 90; #endif if (rate < sucessRate) { if ((pMob[conn].MOB.LearnedSkill & LEARN_07) && (pMob[conn].MobFace % 10) > 5) { #ifdef CLIVER756- pMob[enemy].MOB.CurrentScore.Hp = pMob[enemy].MOB.CurrentScore.MaxHp; pUser[enemy].ReqHp = pMob[enemy].MOB.CurrentScore.Hp; pMob[enemy].MOB.CurrentScore.Mp = pMob[enemy].MOB.CurrentScore.MaxMp; pUser[enemy].ReqMp = pMob[enemy].MOB.CurrentScore.Mp; #else int cenoteSuccess = rand() % 100; //ebp-0ff0 if (cenoteSuccess < 10 && (pMob[conn].MOB.nLearnedSkill & nLEARN_00)) //9º Skill Cenote { pMob[enemy].MOB.CurrentScore.Hp = pMob[enemy].MOB.CurrentScore.MaxHp; pUser[enemy].ReqHp = pMob[enemy].MOB.CurrentScore.Hp; pMob[enemy].MOB.CurrentScore.Mp = pMob[enemy].MOB.CurrentScore.MaxMp; pUser[enemy].ReqMp = pMob[enemy].MOB.CurrentScore.Mp; } else { pMob[enemy].MOB.CurrentScore.Hp = (pMob[enemy].MOB.CurrentScore.MaxHp / 4) * 3; pUser[enemy].ReqHp = pMob[enemy].MOB.CurrentScore.Hp; pMob[enemy].MOB.CurrentScore.Mp = (pMob[enemy].MOB.CurrentScore.MaxMp / 4) * 3; pUser[enemy].ReqMp = pMob[enemy].MOB.CurrentScore.Mp; } #endif } //004664E5 - 00522976 else if (pMob[conn].MOB.LearnedSkill & LEARN_07) { pMob[enemy].MOB.CurrentScore.Hp = pMob[enemy].MOB.CurrentScore.MaxHp / 2; pUser[enemy].ReqHp = pMob[enemy].MOB.CurrentScore.Hp; pMob[enemy].MOB.CurrentScore.Mp = pMob[enemy].MOB.CurrentScore.MaxMp / 2; pUser[enemy].ReqMp = pMob[enemy].MOB.CurrentScore.Mp; } //0046658D #ifdef CLIVER756- pMob[conn].MOB.CurrentScore.Mp = 0; pUser[conn].ReqMp = 0; #else //00522AD8 int restMp = pMob[conn].MOB.CurrentScore.MaxMp - (pMob[conn].MOB.BaseScore.MaxMp / 10); //ebp-0ffc int restReqMp = pUser[conn].ReqMp - (pMob[conn].MOB.BaseScore.MaxMp / 10); //ebp-1008 if (restMp < 0) restMp = 0; if (restReqMp < 0) restReqMp = 0; pMob[conn].MOB.CurrentScore.Mp = restMp; pUser[conn].ReqMp = restReqMp; #endif } //004665B2 - 00522B84 SendSetHpMp(enemy); SendScore(enemy); if (!(pMob[enemy].TargetX & 0xFF00) && !(pMob[enemy].TargetY & 0xFF00)) { sprintf(temp, "etc,resurrect2 success by:%s(%d,%d) to:%s(%d,%d)", pMob[conn].MOB.MobName, pMob[conn].TargetX, pMob[conn].TargetY, pMob[enemy].MOB.MobName, pMob[enemy].TargetX, pMob[enemy].TargetY); Log(temp, pUser[conn].AccountName, pUser[conn].IP); } //004666B7 - 00522C85 int tgtX = pMob[conn].TargetX; //ebp-780 ebp-1014 int tgtY = pMob[conn].TargetY; //ebp-784 ebp-1020 if (tgtX < pMob[conn].TargetX) tgtX++; if (tgtX > pMob[conn].TargetX) tgtX--; if (tgtY < pMob[conn].TargetY) tgtY++; if (tgtY > pMob[conn].TargetY) tgtY--; GetEmptyMobGrid(enemy, &tgtX, &tgtY); MSG_Action sendPacket; //ebp-7b8 ebp-105c memset(&sendPacket, 0, sizeof(MSG_Action)); GetAction(enemy, tgtX, tgtY, &sendPacket); sendPacket.Type = _MSG_Action3; sendPacket.Effect = 6; pUser[enemy].cSock.SendOneMessage((char*)&sendPacket, sendPacket.Size); GridMulticast(enemy, pMob[enemy].TargetX, pMob[enemy].TargetY, (MSG_STANDARD*)&sendPacket); //00466834 - 00522E02 SendSetHpMp(conn); SendScore(conn); SendEmotion(enemy, 14, 0); return; } //00466864 - 00522E37 else if (skillId == 99) //Ressurreição { GridMulticast(pMob[conn].TargetX, pMob[conn].TargetY, (MSG_STANDARD*)&pAttack, FALSE); int rate = rand() % 100; //ebp-7bc ebp-1068 #ifdef CLIVER756- int sucessRate = (special / 6) - 15; //ebp-7c0 #else int sucessRate = 30; //ebp-7c0 ebp-1074 #endif if (rate < sucessRate) { int ressHp = pMob[conn].MOB.CurrentScore.MaxHp / 2; //ebp-f74a4 pMob[conn].MOB.CurrentScore.Hp = ressHp; pUser[conn].ReqHp = pMob[conn].MOB.CurrentScore.Hp; pMob[conn].MOB.CurrentScore.Mp = 0; pUser[conn].ReqMp = 0; SendSetHpMp(conn); SendScore(conn); //00466969 - 00522F2A if (pUser[conn].ressExp > 0 && pUser[conn].ressExp <= 10000) { #ifdef CLIVER756- int resurrectExp = pUser[conn].ressExp; //ebp-7c4 ebp-1080 ebp1084 #else long long resurrectExp = pUser[conn].ressExp; //ebp-7c4 ebp-1084 ebp-1080 #endif ApplyExpHold(conn, &resurrectExp, 0); pMob[conn].MOB.Exp += resurrectExp; #ifdef CLIVER756- sprintf(temp, "*** EXP +%d ***", resurrectExp); SendClientMessage(conn, temp); #else sprintf(temp, "*** EXP +%I64d ***", resurrectExp); SendMessageClientChat(conn, FALSE, _NS_GETEXP, temp); #endif pUser[conn].ressExp = 0; SendEmotion(conn, 14, 0); if (pMob[conn].CheckGetLevel() == 4) { #ifdef CLIVER756- SendClientMessage(conn, g_pMessageStringTable[_NN_Level_Up]); #else SendMessageChatId(conn, 0, _NN_Level_Up); #endif SendScore(conn); } //00466A71 - 005230A9 SendEtc(conn); } //00466A7D - 005230B5 if (!(pMob[conn].TargetX & 0xFF00) && !(pMob[conn].TargetY & 0xFF00)) { sprintf(temp, "etc,resurrect success %s(%d,%d)", pMob[conn].MOB.MobName, pMob[conn].TargetX, pMob[conn].TargetY); Log(temp, pUser[conn].AccountName, pUser[conn].IP); } } //00466B26 - 0052315B else { MSG_STANDARD sendPacket; //ebp-7d0 ebp-1098 memset(&sendPacket, 0, sizeof(MSG_STANDARD)); sendPacket.Type = _MSG_Restart; sendPacket.Size = sizeof(MSG_STANDARD); sendPacket.ID = conn; ProcessClientMessage(conn, (char*)&sendPacket); //00466B69 - 005231AE if (!(pMob[conn].TargetX & 0xFF00) && !(pMob[conn].TargetY & 0xFF00)) { sprintf(temp, "etc,resurrect fail %s(%d,%d)", pMob[conn].MOB.MobName, pMob[conn].TargetX, pMob[conn].TargetY); Log(temp, pUser[conn].AccountName, pUser[conn].IP); } } return; } //00466C11 - 00523259 else if (skillId == 102) //Limite_da_Alma { if (pMob[conn].CheckEvolution() == MORTAL && (pMob[conn].MOB.LearnedSkill & LEARN_07 || pMob[conn].MOB.LearnedSkill & LEARN_15 || pMob[conn].MOB.LearnedSkill & LEARN_23)) SetTick(conn, skillId, 0, 1); //005232DA else if (pMob[conn].CheckEvolution() == CELESTIAL && (pMob[conn].MOB.LearnedSkill & LEARN_07 || pMob[conn].MOB.LearnedSkill & LEARN_15 || pMob[conn].MOB.LearnedSkill & LEARN_23)) { if(pMob[conn].MOB.CurrentScore.Level >= 200) SetTick(conn, skillId, delay, 3); else SetTick(conn, skillId, delay, special); } //00523376 SendScore(conn); return; } #ifdef CLIVER756- //Somente 757+ #else //0052338C else if(skillId == 46) //Controle_de_Mana { int mpDec = pMob[enemy].MOB.CurrentScore.Mp - (pMob[enemy].MOB.CurrentScore.Mp / 2); //ebp-10a4 if (mpDec < 0) mpDec = 0; pMob[enemy].MOB.CurrentScore.Mp = mpDec; if (enemy < MAX_USER) pUser[enemy].ReqMp = mpDec; SetTick(enemy, skillId, delay, special); pMob[conn].GetCurrentScore(conn); SendScore(enemy); return; } #endif //00466D48 - 00523462 int needSetTick = TRUE; //ebp-7d4 ebp-10b0 if (skillAggressive) { int affectResist = g_pSpell[skillId].AffectResist; //ebp-7d8 ebp-10bc if (conn < MAX_USER && pMob[enemy].MOB.Clan == KINGDOM_WHITE) needSetTick = FALSE; if (!affectResist && skillId != 16 && skillId != 51 && skillId != 47) //Perseguição - Enfraquecer - Cancel needSetTick = FALSE; if ((pMob[enemy].nAffectInfo & CANCEL) && skillId != 47) needSetTick = FALSE; if (leader == enemyLeader || guildId == enemyGuildId) needSetTick = FALSE; int difLevel = curLevel - enemyLevel; //ebp-7dc ebp-10c8 if (affectResist >= 1 && affectResist <= 4) { int rate = rand() % 100; //ebp-7e0 ebp-10d4 difLevel /= 2; #ifdef CLIVER756- if (rate < ((affectResist + pMob[enemy].MOB.RegenMP) + difLevel)) #else if (rate < (((affectResist * 2) + pMob[enemy].MOB.RegenMP) + difLevel)) #endif needSetTick = FALSE; } //00466E9F - 005235B6 else if (skillId >= 96) { int rate = rand() % 100; //ebp-7e4 ebp-10e0 difLevel = (curLevel / 2) - 105; if (rate > difLevel) needSetTick = FALSE; } //00466EE7 - 005235FE #ifdef CLIVER756- if (skillId == 2 && (pMob[enemy].MOB.Equip[FACE].Index == 219 || pMob[enemy].MOB.Equip[FACE].Index == 220 || pMob[enemy].MOB.Equip[FACE].Index == 357)) //Perseguição 756- #else if (skillId == 16 && (pMob[enemy].MOB.Equip[FACE].Index == 219 || pMob[enemy].MOB.Equip[FACE].Index == 220 || pMob[enemy].MOB.Equip[FACE].Index == 357)) //Perseguição #endif needSetTick = FALSE; } //00466F4A - 00523662 if (needSetTick) { if (SetTick(enemy, skillId, delay, special)) isSetTick = TRUE; #ifdef CLIVER756- //Somente 757+ #else if (skillId == 21 && pMob[conn].MOB.LearnedSkill & LEARN_23) //Punhalada_Venenosa + 8ª { int rate = rand() % 10; //ebp-10ec if (rate <= 1) SetTick(enemy, 4, 64, 0); } //005236F7 else if (skillId == 47 && pMob[conn].MOB.nLearnedSkill & nLEARN_08) //Cancelamento + 9ª Skill Remover_Memoria { int rate = rand() % 10; //ebp-10f8 if (rate <= 1) SetTick(enemy, 220, 64, 0); } //00523750 else if (skillId == 16 && pMob[conn].MOB.LearnedSkill & LEARN_23) //Perseguição + 8ª { for (int j = 0; j < MAX_AFFECT; j++) { if (pMob[enemy].Affect[j].Type == 3) { pMob[enemy].Affect[j].Level += 10; pMob[enemy].GetCurrentScore(enemy); } } } #endif if (isSetTick && instanceType != 6) SendScore(enemy); } //00466FA6 - 00523838 if (skillId == 64 || skillId == 66 || skillId == 68 || skillId == 70 || skillId == 71) //Mutações { int emptyAffect = GetEmptyAffect(conn, 33); //ebp-7e8 ebp-1110 if (emptyAffect >= 0 && emptyAffect < MAX_AFFECT) { pMob[conn].Affect[emptyAffect].Type = 0; pMob[conn].Affect[emptyAffect].Time = 0; pMob[conn].Affect[emptyAffect].Level = 0; pMob[conn].Affect[emptyAffect].Value = 0; } pMob[conn].GetCurrentScore(conn); SendEquip(conn, FALSE); SendScore(conn); } //Implementação inicial do critico magico, necessario testar o resultado no dano!! if (doubleCritical & 2) { if (enemy < MAX_USER) damage = (((rand() % 3) + 13) * damage) / 10; //de 30% a 50% a mais de dano else damage = (((rand() % 4) + 15) * damage) / 10; //de 50% a 90% a mais de dano } if (doubleCritical & 1) //100% a mais de dano damage *= 2; pAttack->DoubleCritical = doubleCritical; } //00467092 - 00523924 else { Log("err,dam not -2,-1 msg_attack", pUser[conn].AccountName, pUser[conn].IP); return; } //004670C4 - 00523956 int enemySummoner = enemy; //ebp-7ec ebp-111c if (enemy >= MAX_USER && pMob[enemy].MOB.Clan == 4 && pMob[enemy].Summoner > MOB_EMPTY && pMob[enemy].Summoner < MAX_USER && pUser[pMob[enemy].Summoner].Mode == USER_PLAY) { enemySummoner = pMob[enemy].Summoner; int enemyMapAtt = GetAttribute(pMob[enemy].TargetX, pMob[enemy].TargetY); //ebp-7F0 ebp-1125 int attackerMapAtt = GetAttribute(pMob[conn].TargetX, pMob[conn].TargetY); //ebp-7F4 ebp-1131 //004671D0 - 00523A62 if ((enemyMapAtt & VILLAGE) || !(enemyMapAtt & PVP)) enemySummoner = MAX_USER; if ((attackerMapAtt & VILLAGE) || !(attackerMapAtt & PVP)) enemySummoner = MAX_USER; } //0046722F - 00523AA6 #ifdef CLIVER756- SetPkAttack(conn, enemySummoner, skillAggressive, &damage, skillId); if (damage > 64000) damage = 64000; #else SetPkAttack(conn, enemySummoner, &damage, skillId); if (damage > 1000000) damage = 1000000; #endif pAttack->Dam[i].Damage = damage; if (damage == 0 && skillId == 47) continue; if (damage < 0 && skillId != 6) continue; if (enemy < MAX_USER || pMob[enemy].MOB.Clan == 4) { if (pAttack->DoubleCritical & 0x4) //Calculo do dano que o alvo que esta atras recebe na skill perfuração da HT { int secondDamage = (damage - pAttack->Dam[1].Damage) / 4; //ebp-7f8 ebp-1140 damage = pAttack->Dam[1].Damage + secondDamage; } //00467334 - 00523B99 else if (skillId != 97) { damage /= 4; } //00467354 - 00523BB9 else { damage /= 2; } } //00467365 - 00523BCA int isPerfBonus = FALSE; //ebp-7fc ebp-114c if (skillId < 0 || skillId >= MAX_SKILLINDEX) isPerfBonus = TRUE; else if (g_pSpell[skillId].InstanceValue < 0 && g_pSpell[skillId].Aggressive == 1) isPerfBonus = TRUE; else if (g_pSpell[skillId].ForceDamage != 0) isPerfBonus = TRUE; //004673D7 - 00523C3F if (pMob[conn].PerfBonus != 0 && isPerfBonus) { if (damage == 1 || damage == 0) damage = pMob[conn].PerfBonus; else if(damage > 0) //não entendi a lógica disso... damage += pMob[conn].PerfBonus; pAttack->Dam[i].Damage = damage; } //00467457 - 00523CBD if (enemyLeader == leader) //se for da mesma pt zera o damage damage = 0; if (enemyGuildId == guildId) //se for da mesma guilda zera o damage damage = 0; if (enemy >= MAX_USER && isSameClan) //se for um mob e for do mesmo clan (no caso um summon) zera o damage damage = 0; if (enemy >= MAX_USER && !CastleState && pMob[enemy].Leader > MOB_EMPTY && pMob[enemy].Leader < MAX_USER && !pMob[enemy].SummonType && pUser[conn].PKMode == FALSE) //se o alvo for um summon de um player, nao estiver em horario de guerra e o pk estiver off zera o damage { damage = 0; pAttack->Dam[i].Damage = damage; continue; } int storeDamage = damage; //ebp-800 ebp-1158 if (enemySummoner < MAX_USER) { if (skillId != 104) { int accuracyRate = pMob[conn].MOB.CurrentScore.Dex / 5; //ebp-804 ebp-1164 if (pMob[conn].MOB.LearnedSkill & LEARN_28) //Concentração accuracyRate += 100; if (pMob[conn].nSkillDalay & 0x40) accuracyRate += 500; if (saveDamage == -2) accuracyRate += 100; accuracyRate += pMob[conn].Accuracy; int parryRate = GetParryRate(&pMob[enemy].MOB, pMob[enemy].Evasion, accuracyRate, pMob[enemy].nAffectInfo); //ebp-808 ebp-1170 if ((skillId == 79 || skillId == 22) && i < 3) //Tempestade_de_Raios, Exterminar(por isso que esse diabo de skill é roubada no x1 kk) parryRate = (parryRate * 30) / 100; //reduz 70% da chance de evasão int missSuccess = (rand() % 1000) + 1; //ebp-80c ebp-117c if (missSuccess < parryRate && skillAggressive) { damage = -3; if (pMob[enemy].nAffectInfo & CANCEL && missSuccess < 100) damage = -4; #ifdef CLIVER756- //Somente 757+ #else if (enemy < MAX_USER && pMob[enemy].MOB.Class == HUNTRESS && pMob[enemy].MOB.nLearnedSkill & nLEARN_00) //9ª skill sobrevivencia - Contra_Ataque pUser[enemy].useAgainstAttack = TRUE; //habilita o uso. #endif } } } //004676E2 - 00523F80 else if (ItemMasterState) { if (!pMob[enemy].ItemUser || pMob[enemy].ItemUser == conn) { pMob[enemy].ItemUser = conn; pMob[enemy].ItemSummoner = 3; } } //00467742 - 00523FE0 if (damage > 0) { if(enemy < MAX_USER && pMob[enemy].AbsBonus > 0) { damage -= pMob[enemy].AbsBonus; if (damage < 0) damage = 0; } //004677EE - 00524095 if (pMob[conn].ForceDamage > 0) damage += pMob[conn].ForceDamage; //004677CE - 00524065 if (skillId == 79) //Tempestade de Raios { #ifdef CLIVER756- damage = (40 * damage) / 100; #else damage = (((rand() % 15) + 40) * damage) / 100; #endif } } //004677EE - 00524095 int isNeil = FALSE; //ebp-810 ebp-1188 if (pMob[enemy].MOB.Equip[FACE].Index == 68 || pMob[enemy].MOB.Equip[FACE].Index == 57) isNeil = TRUE; if ((level >= MAX_CLEVEL && isNeil) || enemy < MAX_USER || pMob[enemy].MOB.Clan == 4 || pMob[enemy].MOB.Merchant) { int enemyMapAtt = GetAttribute(pMob[enemy].TargetX, pMob[enemy].TargetY); //ebp-814 ebp-1191 int attackerMapAtt = GetAttribute(pMob[conn].TargetX, pMob[conn].TargetY); //ebp-818 ebp-119D //004678E9 - 0052418F if ((enemyMapAtt & VILLAGE) || !(enemyMapAtt & PVP)) damage = 0; if ((attackerMapAtt & VILLAGE) || !(attackerMapAtt & PVP)) damage = 0; } //00467947 - 005241D3 if (pMob[enemy].MOB.Clan == KINGDOM_WHITE && level < MAX_CLEVEL) damage = 0; if (pMob[enemy].QuestFlag) damage = 0; //00467994 - 00524220 int isPvPZone = pMob[conn].CheckPvPZone(); //ebp-81c ebp-11ac if (VsModeState == 2 && !isPvPZone && enemy < MAX_USER && damage > 0) damage = 0; #ifdef CLIVER756- //Somente 757+ #else if (VsModeState == 2 && !isPvPZone && pMob[enemy].MOB.Clan == 4 && damage > 0) damage = 0; #endif //004679F2 - 005242D0 pAttack->Dam[i].Damage = damage; if (damage <= 0) continue; //00467A18 - 005242F4 if (pMob[conn].nAffectInfo & FREEZE && (skillId != 79 || (skillId == 79 && damage != 0))) { int wType = BASE_GetItemAbility(&pMob[conn].MOB.Equip[WEAPON], EF_WTYPE); //ebp-820 ebp-11b8 if (wType == BOW) { int successRate = rand() % 2; //ebp-824 ebp-11c4 if (successRate == 0) { int curSurvivalPoint = pMob[conn].MOB.CurrentScore.Special[1]; //ebp-828 ebp-11d0 if (SetTick(enemy, 36, curSurvivalPoint + 100, curSurvivalPoint)) { #ifdef CLIVER756- SendScore(enemy); #else SendAffect(enemy); #endif } } } } //00467AEA - 005243C2 if (pMob[conn].nAffectInfo & POISON) { int wType = BASE_GetItemAbility(&pMob[conn].MOB.Equip[WEAPON], EF_WTYPE); //ebp-82c ebp-11dc if (wType == CLAW) { int successRate = rand() % 2; //ebp-830 ebp-11e8 if (successRate == 0) { int curTradePoint = pMob[conn].MOB.CurrentScore.Special[2]; //ebp-834 ebp-11f4 if (SetTick(enemy, 40, curTradePoint + 100, curTradePoint)) { #ifdef CLIVER756- SendScore(enemy); #else SendAffect(enemy); #endif } } } } //00467B99 - 0052446D #ifdef CLIVER756- int hpOrDamage = 0; //ebp-838 #else long long hpOrDamage = 0; //ebp-1200 04 #endif if (pMob[enemy].MOB.CurrentScore.Hp < damage) hpOrDamage = damage; else hpOrDamage = pMob[enemy].MOB.CurrentScore.Hp; #ifdef CLIVER756- int calcExp = (pMob[enemy].MOB.Exp * hpOrDamage) / pMob[enemy].MOB.CurrentScore.MaxHp; //ebp-83c #else long long calcExp = 0; //ebp-1210 14 if (pMob[enemy].MOB.CurrentScore.MaxHp <= 0) { if (pMob[enemy].MOB.Equip[PET].Index == 786) calcExp = pMob[enemy].MOB.Exp * 2; //0052453C else if (pMob[enemy].MOB.Equip[PET].Index == 1936) calcExp = pMob[enemy].MOB.Exp * 10; //00524588 else if (pMob[enemy].MOB.Equip[PET].Index == 1937) calcExp = pMob[enemy].MOB.Exp * 1000; //005245D7 else calcExp = pMob[enemy].MOB.Exp; } //00524600 else { if (pMob[enemy].MOB.Equip[PET].Index == 786) hpOrDamage *= 2; //00524643 else if (pMob[enemy].MOB.Equip[PET].Index == 1936) hpOrDamage *= 10; //00524683 else if (pMob[enemy].MOB.Equip[PET].Index == 1937) hpOrDamage *= 1000; calcExp = (pMob[enemy].MOB.Exp * hpOrDamage) / pMob[enemy].MOB.CurrentScore.MaxHp; } #endif //00467C25 - 0052471D calcExp = GetExpApply(calcExp, curLevel, pMob[enemy].MOB.CurrentScore.Level); if (pMob[enemy].MOB.Clan == 4) calcExp = 0; if (enemy < MAX_USER) { if (IsKhepra(conn)) exp = 0; } //00467C9F - 005247B8 else { exp += calcExp; #ifdef CLIVER756- damage += pMob[conn].ServerTowerId; #else damage += pMob[conn].ServerKingdom; #endif } //00467CCC - 005247F7 int dmgCalc = damage; //ebp-840 ebp-1220 dmgCalc = CheckMountHpDamage(enemy, dmgCalc); //00467CF4 - 0052481F int hpBonus = GetBonusHp(conn); //ebp-844 ebp-122c int attackerHpBonus = pMob[conn].countHP + hpBonus; //ebp-848 ebp-1238 int enemyMpBonus = 0; //ebp-845 ebp-1244 if(enemy < MAX_USER) enemyMpBonus = GetBonusMp(enemy); enemyMpBonus += pMob[enemy].countMP; dmgCalc = (dmgCalc + attackerHpBonus) - enemyMpBonus; #ifdef CLIVER756- //Somente 757+ #else //Calc Bonus DamagePvP e DefensePvP if (enemy < MAX_USER) { if (pMob[conn].DamagePvP > 0) dmgCalc = ((pMob[conn].DamagePvP + 1000) * dmgCalc) / 1000; if(pMob[enemy].DefensePvP > 0) dmgCalc = ((1000 - pMob[enemy].DefensePvP) * dmgCalc) / 1000; } #endif //00467D82 - 00524946 #ifdef CLIVER756- if (dmgCalc > 32000) dmgCalc = 32000; #else if (dmgCalc > 1000000) dmgCalc = 1000000; #endif if (dmgCalc > 0 && (pMob[enemy].nAffectInfo & INVISIBLE) && enemy >= MAX_USER) { DoRemoveAffect(enemy, 28); #ifdef CLIVER756- SendScore(enemy); #else SendAffect(enemy); #endif } //00467DDA - 005249A8 pAttack->Dam[i].Damage = dmgCalc; if (dmgCalc < 0) return; //Controle_de_Mana if (enemy < MAX_USER && pMob[enemy].MOB.CurrentScore.Mp > dmgCalc && pMob[enemy].nAffectInfo & MANACONTROL) { #ifdef CLIVER756- int mpAbsDmgCalc = (dmgCalc * 70) / 100; //ebp-850 #else int mpAbsDmgCalc = (dmgCalc * 80) / 100; //ebp-850 ebp-1250 #endif dmgCalc -= mpAbsDmgCalc; #ifdef CLIVER756- //Somente 757+ #else if (skillId == 52 && pAttack->ClientTick == SKIPCHECKTICK) //Furia_de_Gaia mpAbsDmgCalc *= 2; //Fera_Flamejante Som_das_Fadas Furia_de_Gaia Espirito_Vingador else if(pMob[conn].MOB.Class == BEASTMASTER && pMob[conn].MOB.LearnedSkill & LEARN_07 && (skillId == 48 || skillId == 50 || skillId == 52 || skillId == 55)) //8ª Bm Elemental - mpAbsDmgCalc *= 2; #endif pAttack->Dam[i].Damage = dmgCalc; #ifdef CLIVER756- pMob[enemy].MOB.CurrentScore.Mp -= dmgCalc; #else pMob[enemy].MOB.CurrentScore.Mp -= mpAbsDmgCalc; #endif if (pMob[enemy].MOB.CurrentScore.Mp < 0) pMob[enemy].MOB.CurrentScore.Mp = 0; #ifdef CLIVER756- pUser[enemy].ReqMp -= dmgCalc; #else pUser[enemy].ReqMp -= mpAbsDmgCalc; #endif if (pUser[enemy].ReqMp < 0) pUser[enemy].ReqMp = 0; } //00467F1F - 00524B65 CheckMobHpDamage(enemy, dmgCalc); if (enemy > MOB_EMPTY && enemy < MAX_USER) { //Escudo_do_Tormento Eden if (saveDamage == -2 && pMob[enemy].MOB.Class == BEASTMASTER && (pMob[enemy].MOB.LearnedSkill & LEARN_19) && (pMob[enemy].MOB.LearnedSkill & LEARN_23)) { int distance = BASE_GetDistance(pMob[conn].TargetX, pMob[conn].TargetY, pMob[enemy].TargetX, pMob[enemy].TargetY); //ebp-85c ebp-1274 #ifdef CLIVER756- if (distance < 3) { int calcDmg = (damage * 20) / 100; //ebp-860 ebp-1280 #else if (distance < 6) { int calcDmg = (damage * 15) / 100; //ebp-860 ebp-1280 #endif int calcReqHp = pUser[conn].ReqHp; //ebp-864 ebp-128c calcReqHp -= calcDmg; if (calcReqHp > 10) calcReqHp = 10; pUser[conn].ReqHp = calcReqHp; int calcHp = pMob[conn].MOB.CurrentScore.Hp; //ebp-868 ebp-1298 calcHp -= calcDmg; if (calcHp > 10) calcHp = 10; pMob[conn].MOB.CurrentScore.Hp = calcHp; } //00524D1D #ifdef CLIVER756- //Somente 757+ #else pMob[conn].GetCurrentScore(conn); SendScore(conn); #endif } //004680E1 - 00524D4D #ifdef CLIVER756- pUser[enemy].ReqHp -= dmgCalc; #endif pMob[enemy].GetCurrentScore(enemy); SetReqHp(enemy); } //0046813A - 00524D7C else { LinkMountHp(enemy); } //00468149 - 00524D8B if (pMob[enemy].MOB.CurrentScore.Hp < 0) { pMob[enemy].MOB.CurrentScore.Hp = 0; DeadMobs[i] = enemy; continue; } //00468191 - 00524DD0 if (pMob[enemy].Mode && pMob[enemy].MOB.CurrentScore.Hp > 0) { SetBattle(enemy, conn); pMob[conn].CurrentTarget = enemy; //#ifdef CLIVER756- int ptLeader = pMob[conn].Leader; //ebp-86c if (ptLeader <= MOB_EMPTY) ptLeader = conn; //#endif //00468218 - 00524E2C for (int j = 0; j < MAX_PARTY; j++) //ebp-870 ebp-12a4 { #ifdef CLIVER756- int memberPartyId = pMob[ptLeader].PartyList[j]; //ebp-874 ebp-12b0 #else int memberPartyId = pMob[conn].MobList[j]; //ebp-874 ebp-12b0 #endif if (memberPartyId < MAX_USER || memberPartyId >= MAX_MOB) continue; int memberPartyHp = pMob[memberPartyId].MOB.CurrentScore.Hp; //ebp-878 ebp-12bc if (!pMob[memberPartyId].Mode || memberPartyHp <= 0) { if (pMob[memberPartyId].Mode) DeleteMob(memberPartyId, DELETE_DEAD); #ifdef CLIVER756- pMob[ptLeader].PartyList[j] = MOB_EMPTY; #else pMob[conn].MobList[j] = MOB_EMPTY; #endif continue; } //004682FA - 00524F05 #ifdef CLIVER756- int samePartyLeader = FALSE; //ebp-87c int leaderPartyMember = pMob[memberPartyId].Leader; //ebp-880 if (leaderPartyMember != conn && leaderPartyMember > MOB_EMPTY && leaderPartyMember < MAX_USER) { int x = pMob[leaderPartyMember].TargetX; //ebp-884 int y = pMob[leaderPartyMember].TargetY; //ebp-888 if (CastleState > 0 && x == 8 && y == 13) samePartyLeader = TRUE; //004683A8 else { int leaderPtGuild = pMob[leaderPartyMember].MOB.Guild; //ebp-88c int emyGuildId = 0; //ebp-890 if (enemy < MAX_USER) emyGuildId = pMob[enemy].MOB.Guild; //004683F6 else { int emySummoner = pMob[enemy].Summoner; //ebp-894 if (emySummoner > MOB_EMPTY && emySummoner < MAX_USER && pMob[enemy].SummonType) emyGuildId = pMob[emySummoner].MOB.Guild; //00468455 else samePartyLeader = TRUE; } //0046845F if (!samePartyLeader) { if (g_pGuildWar[leaderPtGuild] != emyGuildId || g_pGuildWar[emyGuildId] != leaderPtGuild || emyGuildId == MOB_EMPTY || leaderPtGuild == MOB_EMPTY) { if (pUser[pMob[memberPartyId].Summoner].PKMode) samePartyLeader = TRUE; } else samePartyLeader = TRUE; } } } //004684E3 else { samePartyLeader = TRUE; } //004684ED if (samePartyLeader) SetBattle(memberPartyId, enemy); #else SetBattle(memberPartyId, enemy); #endif } //00468511 #ifdef CLIVER756- ptLeader = pMob[enemy].Leader; if (ptLeader <= MOB_EMPTY) ptLeader = enemy; for (int j = 0; j < MAX_PARTY; j++) { int memberPartyId = pMob[ptLeader].PartyList[j]; //ebp-898 if (memberPartyId < MAX_USER || memberPartyId >= MAX_MOB) continue; int memberPartyHp = pMob[memberPartyId].MOB.CurrentScore.Hp; //ebp-89c if (!pMob[memberPartyId].Mode || memberPartyHp <= 0) { if (pMob[memberPartyId].Mode) DeleteMob(memberPartyId, DELETE_DEAD); pMob[ptLeader].PartyList[j] = MOB_EMPTY; continue; } //00468614 int samePartyLeader = FALSE; //ebp-8a0 int leaderPartyMember = pMob[memberPartyId].Leader; //ebp-8a4 if (leaderPartyMember != enemy && leaderPartyMember > MOB_EMPTY && leaderPartyMember < MAX_USER) { int x = pMob[leaderPartyMember].TargetX; //ebp-8a8 int y = pMob[leaderPartyMember].TargetY; //ebp-8ac if (CastleState > 0 && x == 8 && y == 13) samePartyLeader = TRUE; //004686B8 else { int leaderPtGuild = pMob[leaderPartyMember].MOB.Guild; //ebp-8b0 int emyGuildId = 0; //ebp-8b4 if (conn < MAX_USER) emyGuildId = pMob[conn].MOB.Guild; //004686FE if (g_pGuildWar[leaderPtGuild] != emyGuildId || g_pGuildWar[emyGuildId] != leaderPtGuild || emyGuildId == MOB_EMPTY || leaderPtGuild == MOB_EMPTY) { if (pUser[pMob[memberPartyId].Summoner].PKMode) samePartyLeader = TRUE; } //00468761 else { samePartyLeader = TRUE; } } } //0046876D else { samePartyLeader = TRUE; } //00468777 if (samePartyLeader) SetBattle(memberPartyId, conn); } #else //00524F20 if (pMob[enemy].SummonType > 0) { int emySummoner = pMob[enemy].Summoner; //ebp-12c8 if (emySummoner > 0 && emySummoner < MAX_USER) { for (int j = 0; j < MAX_PARTY; j++) //ebp-12d4 { int memberPartyId = pMob[emySummoner].MobList[j]; //ebp-12e0 if (memberPartyId < MAX_USER || memberPartyId >= MAX_MOB) continue; //00524FCC int memberPartyHp = pMob[memberPartyId].MOB.CurrentScore.Hp; //ebp-12ec if (!pMob[memberPartyId].Mode || memberPartyHp <= 0) { if (pMob[memberPartyId].Mode) DeleteMob(memberPartyId, DELETE_DEAD); pMob[emySummoner].MobList[j] = MOB_EMPTY; continue; } //00525049 SetBattle(memberPartyId, conn); } } } #endif } } //0046879D - 00525066 if (attHp > 0) exp = attHp; //004687B2 - 00525082 if (skillId == 30) //Julgamento_Divino SendSetHpMp(conn); //004687C7 - 00525097 exp = ApplyExpBonus(conn, exp); if (exp < 0) exp = 0; #ifdef CLIVER756- if (exp > 200) exp = 200; #else if (exp > 300) exp = 300; #endif //00468809 - 00525110 if (pMob[conn].ExpBonus > 0) exp += (exp * pMob[conn].ExpBonus) / 100; //00468849 - 0052516A if (!pMob[conn].CheckLevelBlock()) exp = 0; if (LevelUpState) exp = 0; if (!VsModeState) { exp = ApplyExpReduction(conn, exp); ApplyExpHold(conn, &exp, FALSE); pMob[conn].MOB.Exp += exp; if (BLESSMONEY < 1410065048) { if (GetCitizen(conn) == (ServerIndex + 1)) { ExpAmmount += exp; if (ExpAmmount > 100000000) { BLESSMONEY += 100000000; ExpAmmount = 0; } } } } //00468954 - 0052522D pAttack->CurrentExp = pMob[conn].MOB.Exp; pAttack->Hold = pMob[conn].Hold; if (clientTick == SKIPCHECKTICK) pAttack->ClientTick = CurrentTime; if (pMob[conn].MOB.LearnedSkill & LEARN_29) pAttack->DoubleCritical |= 8; GridMulticast(pMob[conn].TargetX, pMob[conn].TargetY, (MSG_STANDARD*)&pAttack, FALSE); if (pMob[conn].nAffectInfo & BERSERKER && conn < MAX_USER) { int healBonus = (pAttack->Dam[0].Damage * 20) / 100; //ebp-8b8 ebp-12f8 #ifdef CLIVER756- pUser[conn].ReqHp += healBonus; #else if (pMob[conn].MOB.CurrentScore.Hp > 0) { if ((pUser[conn].ReqHp + healBonus) > pMob[conn].MOB.CurrentScore.MaxHp) pUser[conn].ReqHp = pMob[conn].MOB.CurrentScore.MaxHp; else pUser[conn].ReqHp += healBonus; } #endif } //00468A55 - 0052539B for (int i = 0; i < MAX_TARGET; i++) //ebp-8dc ebp-1304 { if (DeadMobs[i] > MOB_EMPTY && DeadMobs[i] < MAX_MOB && pMob[DeadMobs[i]].Mode != MOB_EMPTY) MobKilled(DeadMobs[i], conn, 0, 0); #ifdef CLIVER756- //Somente 757+ #else if (pAttack->Dam[i].TargetID == unkId6145628) { int unkId = unkId6145628; //ebp-1310 if (pMob[unkId].unk_1FDF2E0 != 2) pMob[unkId].SpecialMobUnspawnTime = 60; } int enemyId = pAttack->Dam[i].TargetID; //ebp-131c if (enemyId > MOB_EMPTY && enemyId < MAX_USER) { pMob[enemyId].GetCurrentScore(enemyId); SendScore(enemyId); } #endif } //00468AE9 - 005254D4 int segmentLevel = pMob[conn].CheckGetLevel(); //ebp-8c0 ebp-1328 if (segmentLevel >= 1 && segmentLevel <= 4) { if (segmentLevel == 4) { int pkPoint = GetPKPoint(conn); //ebp-8c4 ebp-1334 #ifdef CLIVER756- SendClientMessage(conn, g_pMessageStringTable[_NN_Level_Up]); if (pMob[conn].MOB.BaseScore.Level >= 355) pkPoint += 5; else if (pMob[conn].MOB.BaseScore.Level >= 351) pkPoint += 1; else pkPoint += 3; #else SendMessageChatId(conn, FALSE, _NN_Level_Up); pkPoint += 3; #endif SetPKPoint(conn, pkPoint); MSG_CreateMob sendPacket; //ebp-974 ebp-1424 GetCreateMob(conn, &sendPacket); GridMulticast(pMob[conn].TargetX, pMob[conn].TargetY, (MSG_STANDARD*)&sendPacket, FALSE); sprintf(temp, "lvl %s level up to %d", pMob[conn].MOB.MobName, pMob[conn].MOB.BaseScore.Level); Log(temp, pUser[conn].AccountName, pUser[conn].IP); pMob[conn].GetCurrentScore(conn); SendItemByLevel(conn); } else if (segmentLevel == 3) SendClientMessage(conn, g_pMessageStringTable[_NN_3_Quarters_Bonus]); else if (segmentLevel == 2) SendClientMessage(conn, g_pMessageStringTable[_NN_2_Quarters_Bonus]); else if (segmentLevel == 1) SendClientMessage(conn, g_pMessageStringTable[_NN_1_Quarters_Bonus]); SendScore(conn); SendEtc(conn); SendEmotion(conn, 0xE, 3); } }
    2 pontos
  19. Hook corrigi a descrição do buff das skill que aparece dois "d" quando o time é dias. [Hidden Content]
    2 pontos
  20. Pack Grátis - Aline Faria & Bunniemai1591 Aline Faria Spoiler Download Pack: [Hidden Content] Bunniemai1591 Spoiler Download Pack: [Hidden Content]
    1 ponto
  21. CONTA VIRTUAL SHIELD PREMIUM TOTALMENTE GRÁTIS OBS: Conta é da minha autoria então peço que não troque a senha, pois se trocar irem recuperar e atualizar este Tópico, se você for entrar e da erro no acesso comente esse Tópico pra que eu possa saber disso e recuperar o acesso e liberar de novo pra vocês usarem, prazo de 60 dias pra vocês. [Hidden Content] PREVIA: "Lembrando não autorizo a troca de senha, pois se você Usuário for usar e aparecer senha incorreta apenas comente esse post para que eu resolva o caso e atualize a senha." TMJ BABYS
    1 ponto
  22. Esta "Skilldata.bin" corrige as habilidades que não devem ser passivas e define os alvos adequados, além de estender significativamente os tempos de aprimoramento da maioria das habilidades. Ela também corrige a duração do aprimoramento "Celestial Soul" e melhora a experiência para "Marco" e períodos prolongados de jogo. * Por favor, lembre-se de fazer backup da "Skilldata.bin" atual que você está usando, apenas no caso de estar utilizando uma versão diferente daquela em que estou trabalhando. Obrigado :) [Hidden Content] ** This file is non-executable and is only 24kb, by forum rules there's no need to upload with a scan **
    1 ponto
  23. MACROS PREMIUM CROSSFIRE TIPOS DE MACROS: No Recoil; No Spread; Qs Sniper; Rapid Fire; BunnyHop; Ghost Walk; etc. OBRIGATÓRIO ter instalado na sua maquina o programa AutoHotKey. Após ter baixado, basta entrar no jogo primeiramente, e depois executar o macro como administrador. DOWNLOAD & SCAN: [Hidden Content] Scan: https://www.virustotal.com/gui/file/3770aed4986f2924adb8e35702ec86729c9adafcae22a698f135a042894c7c7f/detection
    1 ponto
  24. Meu primeiro combo de qualidade com contas valorant. [Hidden Content]
    1 ponto
  25. 1 ponto
  26. [Hidden Content] Tenho várias contas , mande mensagem no privado .
    1 ponto
  27. Tentem alguma dessas, são do dia 17/03 e outras são de ontem. [Hidden Content]
    1 ponto
  28. 1 ponto
  29. [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] {Adquirem o Vip e tenham Acesso a Conteúdo Exclusivos e Muito Mais Benefícios}
    1 ponto
  30. Quantidade: 105.136 Tipo: Semi-Privado Créditos: TripleA69 [Hidden Content]
    1 ponto
  31. Basta deslizar e assistir o quanto quiser de vídeos +18 curtos e longos! [Hidden Content] Basta clicar na opção do Tiktok e aproveitar os milhares de vídeos!
    1 ponto
  32. void ProcessShaman(int conn, int npcId) { int circleId = pMob[conn].MOB.Equip[PET].Index; int circleType = 0; int circleMode = 0; if (circleId == 448 || circleId == 449 || circleId == 450) { if (pMob[conn].MOB.Quest & 0x10) { SendClientMessage(npcId, TRUE, _NN_Youve_Done_It_Already); return; } circleType = circleId - 448; circleMode = 1; } else if (circleId == 693 || circleId == 694 || circleId == 695) { circleType = circleId - 693; circleMode = 2; } else { SendClientMessage(npcId, TRUE, _NN_Need_Pure_Divine); return; } int maxResetPoint = 50; if (circleMode == 2) maxResetPoint = 100; int specialPoints = pMob[conn].MOB.SpecialBonus; for (int i = 0; i < 4; i++) { if (pMob[conn].MOB.BaseScore.Special[i] > maxResetPoint) { specialPoints += maxResetPoint; pMob[conn].MOB.BaseScore.Special[i] -= maxResetPoint; } else { specialPoints += pMob[conn].MOB.BaseScore.Special[i]; pMob[conn].MOB.BaseScore.Special[i] = 0; } if (pMob[conn].MOB.BaseScore.Special[i] > 200) { int moreThan200 = pMob[conn].MOB.BaseScore.Special[i]; pMob[conn].MOB.BaseScore.Special[i] = 200; specialPoints = (moreThan200 + specialPoints) - 200; } } pMob[conn].MOB.SpecialBonus = specialPoints; if (circleType == 0) { pMob[conn].MOB.LearnedSkill &= 0xFFFFFF00; pMob[conn].MOB.nLearnedSkill &= 0xFF0; } if (circleType == 1) { pMob[conn].MOB.LearnedSkill &= 0xFFFF00FF; pMob[conn].MOB.nLearnedSkill &= 0xF0F; } if (circleType == 2) { pMob[conn].MOB.LearnedSkill &= 0xFF00FFFF; pMob[conn].MOB.nLearnedSkill &= 0x0FF; } BASE_GetBonusSkillPoint(&pMob[conn].MOB, pMob[conn].MobFace); memset(&pMob[conn].MOB.Equip[PET], 0, sizeof STRUCT_ITEM); SendItem(conn, EQUIP_TYPE, PET, &pMob[conn].MOB.Equip[PET]); SendEtc(conn); SetTick(conn, 44, 20, 20); //pode ser setaffect em algumas sources SendScore(conn); SendClientMessage(npcId, TRUE, _NN_Initialize_Skill); if (circleMode == 1) pMob[conn].MOB.Quest |= 0x10; else if(circleMode == 2) pMob[conn].MOB.Quest |= 0x20; SendClientMessage(conn, FALSE, _NN_Qest06Complete); sprintf_s(temp, "que,divice circle quest item:%d mode:%d type:%d", circleId, circleMode, circleType); Log(temp, pUser[conn].AccountName, pUser[conn].IP); MSG_SetSkillBar pSkillBar{}; pSkillBar.Header.Type = _MSG_SetSkillBar; pSkillBar.Header.ID = ESCENE_FIELD; pSkillBar.Header.Size = sizeof MSG_SetSkillBar; memcpy(pSkillBar.SkillBar1, pMob[conn].MOB.SkillBar1, 4); memcpy(pSkillBar.SkillBar2, pUser[conn].SkillBar2, 16); pUser[conn].cSock.AddMessage((char*)&pSkillBar, pSkillBar.Header.Size); } att
    1 ponto
  33. Skilldata.bin Update : 7.96 Version [Hidden Content]
    1 ponto
  34. Conteúdo atualizado [Hidden Content]
    1 ponto
  35. Onlyfans [Hidden Content]
    1 ponto
Esta tabela de classificação está definida para São Paulo/GMT-03:00
×
×
  • 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.