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

-ux-

Membro Avançado
  • Total de Posts

    28
  • Registro em

  • Última visita

  • WCoins

    0

Posts postados por -ux-

  1. 11 horas atrás, querotop disse:

    Funcionou aqui. parab´´ens. Mas ela ta  mal programada no  tempo, de 4 em 4 segundos +/- ta recebendo itens com esse "if (pMob[bb].ProcessorCounter >= 10)" , no caso como eu colocaria pra ser 10m?

    
    
     

    Não está mal programada, só não está no tempo que você deseja...

    Tenta colocar 600... 

    • Curtir 1
  2. Em 19/05/2019 em 22:54, Shepher disse:

    A W2PP é um emulador.
    Você pode criar uma estrutura própria de conta sem ser necessário criar um segundo arquivo pra isso.

    Exatamente! Mas para quem não sabe fazer isso que você disse, salvar em outro arquivo é uma solução

  3. Esse evento fecha o pvp de armia e começa a jogar itens no chão aleatoriamente... Coloque um npc na entrada do PVP cobrando uma "entrada"... ou apenas use  a lógica para outras coisas.

    download.thumb.png.e59a817e7ca54025dfca6b47c70834ed.png

    Apenas se não já estiverem definidas:

    É necessário se cadastrar para acessar o conteúdo.

    Código do evento:

    É necessário se cadastrar para acessar o conteúdo.

    Obs.: Se já usar o código do prêmio por tempo de loja, é só colocar após o seu término.

     

    • Curtir 16
    • Uau 1
    • Haha 1
  4. A função UserData da 756 salva a struct em um arquivo com o nome da acc.

    Exemplo definindo valor na variável por char:

    User[conn].CharacterInfo[pUser[conn].Slot].Profession.Profissao = 1;

    Falta só colocar  a função para quando deletar o char, zerar as variáveis. Porque como ela é declarada pelo slot, se criar um novo vai vir com as mesmas variáveis daquele slot.

    Citar

     

    Adicionar no arquivo Server.h:

    É necessário se cadastrar para acessar o conteúdo.

    Adicionar no arquivo _MSG_AccountLogin.cpp :

    É necessário se cadastrar para acessar o conteúdo.

    Adicionar no arquivo Basedef.h

    É necessário se cadastrar para acessar o conteúdo.

    Adicionar no arquivo Server.cpp:

    É necessário se cadastrar para acessar o conteúdo.

    ainda no Server.cpp declare em baixo de "CUser pUser[MAX_USER];"

    É necessário se cadastrar para acessar o conteúdo.

    Crie a pasta userdata:

    \TMSrv\run\userdata

     

     

    Se precisar... ProcessClientMessage.h:

    É necessário se cadastrar para acessar o conteúdo.

     

     

     

     

    • Curtir 10
    • Haha 1
  5. Tente isso:

     

    char temp[128];

    sprintf(temp, "../../Common/Logs/%s.txt", pUser[conn].AccountName);

     

    FILE *fp;

     

    fp = fopen(temp, "w");

     

    Não há necessidade de verificar se o arquivo existe ou não, pois o fopen está criando o arquivo toda vez que a função é chamada.

     

    Deu certo, vlw mesmo ;)

  6. Quero criar um arquivo de texto com o nome da acc e salvar a quantidade de donates dentro dele quando alguma função é ativada. Por exemplo quando comprar um item donate..

    Pesquisando na source, consegui fazer isso:

    É necessário se cadastrar para acessar o conteúdo.

    Ele cria um arquivo com o nome "Teste.txt" e coloca os donates..

    Eu sei que o fopen ele lê um arquivo, e quando não tem ele cria um..

    Mas como faço pra criar o arquivo com o nome da acc?

  7. Não estou conseguindo fazer funcionar o add de dano mágico na divina.

     

     

     

     

    #pragma region Divina 7 15 30 Dias

    if (Vol >= 64 && Vol <= 66)

     

    {

    int sAffect = GetEmptyAffect(conn, 34);

     

    if (sAffect == -1 || pMob[conn].Affect[sAffect].Type == 34)

    {

    SendClientMessage(conn, g_pMessageStringTable[_NN_CantEatMore]);

    SendItem(conn, m->SourType, m->SourPos, item);

    return;

    }

     

    time(&pMob[conn].extra.DivineEnd);

     

    if (Vol == 64)//7DD

    pMob[conn].extra.DivineEnd += 60 * 60 * 24 * 8;

     

    else if (Vol == 65)//15D

    pMob[conn].extra.DivineEnd += 60 * 60 * 24 * 16;

     

    else if (Vol == 66)//30D

    pMob[conn].extra.DivineEnd += 60 * 60 * 24 * 31;

     

     

    pMob[conn].Affect[sAffect].Type = 34;

    pMob[conn].Affect[sAffect].Level = 1;

    pMob[conn].Affect[sAffect].Value = 0;

    pMob[conn].Affect[sAffect].Time = 2000000000;

     

    BASE_GetHpMp(&pMob[conn].MOB, &pMob[conn].extra);

    pMob[conn].GetCurrentScore(conn);

     

    SendScore(conn);

     

    sprintf(temp, "useitem,item divine type: %d", Vol-64);

    ItemLog(temp, pUser[conn].AccountName, pUser[conn].IP);

     

    if (amount > 1)

    BASE_SetItemAmount(item, amount - 1);

     

    else

    memset(item, 0, sizeof(STRUCT_ITEM));

     

    return;

    }

    #pragma endregion

     

     

     

     

     

    else if (Type == 34)//Divina

     

    {

    int totalhp = ((MOB.CurrentScore.MaxHp / 10) * 2) + MOB.CurrentScore.MaxHp;

     

    if (totalhp >= MAX_HP)

    MOB.CurrentScore.MaxHp = MAX_HP;

    else

    MOB.CurrentScore.MaxHp = totalhp;

     

    int totalmp = ((MOB.CurrentScore.MaxMp / 10) * 2) + MOB.CurrentScore.MaxMp;

     

    if (totalmp >= MAX_MP)

    MOB.CurrentScore.MaxMp = MAX_MP;

    else

    MOB.CurrentScore.MaxMp = totalmp;

     

    int totaldn = ((MOB.CurrentScore.Damage / 10 ) * 2) + MOB.CurrentScore.Damage;

    if (totaldn >= MAX_DAMAGE)

    MOB.CurrentScore.MaxMp = MAX_DAMAGE;

    else

    MOB.CurrentScore.Damage = totaldn;

     

    int totalmg = ((MOB.Magic / 100) * 10) + MOB.Magic;

     

    if (totalmg >= MAX_DAMAGE_MG)

    MOB.Magic = MAX_DAMAGE_MG;

    else

    MOB.Magic = totalmg;

     

     

    • Curtir 1
  8. Bom saber que deu certo e você está evoluindo, fico feliz em ver isso :)

    Sobre isso, veja se tem acesso ao value ou algo assim, vê o que diferencia as composições uma da outra, tenta colocar para retornar uma mensagem quando clicar em compor, depois é só manipular as informações e indo com calma :)

    Vlw irmão, vou tentar aqui. Até consegui editar todas. A da soul cria muitas possibilidades, só não conseguir criar a função pra nova que eu criei.. Mas vou tentando

  9. Aquele editor não está 100% certo, é mais fácil dar uma olhada nele e estudar como é o .bin, eu sou um dos criadores de um e falta coisas nele!

    Deu certo =D

    https://imgur.com/OOSXGV2

     

    Não faço a menor ideia de como editar o bin, abri com um editor hexa mas fica só uns dados loucos.. mas vou tentando aqui. Vou tentar pelo editor adicionar uma nova composição.

    Edit: Consegui adicionar no mixlist, agora vou tentar colocar a composição na source. Se eu conseguir posto aqui.

    https://imgur.com/uv3OPZl

     

    Tem como clonar o npc e as funções, tipo criar um novo igual a ehre mas com funções independentes?

    • Curtir 1
  10. Ajudante dando os buff de velo, dano, def e skill:

     

    Citar

    //substituir na _MSG_Quest.cpp

    #pragma region CARBUNCLE_WIND

    case CARBUNCLE_WIND:

    {

    if (pMob[conn].extra.ClassMaster != MORTAL && pMob[conn].extra.ClassMaster != ARCH)

    {

    SendSay(npcIndex, g_pMessageStringTable[_NN_Level_Limit2]);

    break;

    }

     

    if (pMob[conn].MOB.CurrentScore.Level >= 100)

    {

    SendSay(npcIndex, g_pMessageStringTable[_NN_Level_Limit2]);

    break;

    }

     

    if(pMob[npcIndex].MOB.SkillBar[0] != 255)

    SetAffect(conn, 41, 400, 100); //número da skill no skilldata, tempo de duração(400 da 128 segundos), level da skill

    if(pMob[npcIndex].MOB.SkillBar[1] != 255)

    SetAffect(conn, 43, 400, 100); //número da skill no skilldata, tempo de duração(400 da 128 segundos), level da skill

    if(pMob[npcIndex].MOB.SkillBar[2] != 255)

    SetAffect(conn, 44, 400, 100); //número da skill no skilldata, tempo de duração(400 da 128 segundos), level da skill

    if(pMob[npcIndex].MOB.SkillBar[3] != 255)

    SetAffect(conn, 45, 400, 100); //número da skill no skilldata, tempo de duração(400 da 128 segundos), level da skill

     

    pMob[conn].GetCurrentScore(conn);

    SendScore(conn);

     

    sprintf(temp, g_pMessageStringTable[_SN_CARBUNCLEMSG], pMob[conn].MOB.MobName);

    SendSay(npcIndex, temp);

     

    sprintf(temp, "etc,carbuncle buff name:%s conn:%d", pMob[conn].MOB.MobName, conn);

    Log(temp, "-system", 0);

    } break;

    #pragma endregion

     

     

    Quest expulsando jogadores com level > 35:

    No _MSG_Action.cpp procure por "_NN_Newbie_zone" e substitua a função em que ele se encontra por:

    Citar

    if (m->TargetX != pMob[conn].TargetX || m->TargetY != pMob[conn].TargetY)

    {

    unsigned char mapAttribute = GetAttribute(m->TargetX, m->TargetY);

     

    if (mapAttribute & 0x80 && (pMob[conn].MOB.CurrentScore.Level >=35 && pMob[conn].MOB.CurrentScore.Level <= 999 || pMob[conn].extra.ClassMaster != MORTAL)) //verifica o level

    {

    SendClientMessage(conn, g_pMessageStringTable[_NN_Newbie_zone]);

     

    DoTeleport(conn, 2091 + rand() % 3, 2101 + rand() % 3); // teleporta pra armia

    return;

    }

    • Curtir 1
×
×
  • 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.