Bem-vindo ao Fórum!

Registre-se agora mesmo e fique por dentro da maior comunidade de Cheats do Brasil!

wendertx

Membro Avançado
  • Content Count

    41
  • Joined

  • Last visited

  • WCoins

    5 [ Donate ]

Posts posted by wendertx


  1. Em 11/09/2019 em 23:23, braskinha disse:

    Ah sim kkk. Sei lá eu acredito que de sim. Se é possivel remover muros e coisas do tipo, pq não daria pra modificar o céu?

    Eu pensei em modificar a textura do céu e colocar transparente, pra isso eu precisava achar na pasta do jogo.

    Mas enfim, obrigado pela resposta! 

    Tem como modificar sim. Você só não pode mexer nos itens essenciais do client.

    Peço desculpas por não ter entendido bem a sua questão. Acreditava ser um bug gráfico. 


  2. Eu acredito que isso seja do próprio client.

    Outro dia descobri, brincando com a bolinha do mouse e girando a câmera, uma hora dei zoom máximo no char e fiquei girando (sei lá por quê eu tava fazendo isso)... Mas deu um bug (não crashou) que deu um zoom EXAGERADO, a ponto de que o char sumiu e dava pra ver várias partes do mapa mais adiante, tipo um drone, até certo limite, depois bugava de novo e voltava pro char. KKK

    Enfim, voltando!

    Não kkkkkk tem coisas que é do client e se tentar mexer, dá m


  3. Então, vamos lá:

    A guildMark é uma imagem baixada do site do teu wyd.

    Existe um arquivo chamado "strdef.bin" na pasta UI. Nele, vai ter uma instrução dentre várias que vai dizer qual a página/site onde ele vai pegar a imagem da guildmark.

    Alguns clientes tem esse arquivo modificado para buscar a imagem numa página já existente que hospeda as imagens. Mas pra já vir com o emblema não tem como mesmo. Essa página onde o cliente vai buscar a imagem precisa estar ativo e a imagem precisa bater com o id da guild.

    Resumindo: 

    NÃO TEM COMO JÁ VIR COM A GUILDMARK A NÃO SER QUE A IMAGEM JÁ EXISTA E ESTEJA HOSPEDADA ONDE O STRDEF.BIN VAI BUSCAR.

     

    • Like 1

  4. Tem alguma função das rações na source que vc usa? 

    Eu estava com o mesmo problema com os âmagos, mas era a volatile que tava com instrução errada. Subia o lv e zerava o HP ao invés de encher (tava 0 ao invés de 100). Não que seja a mesma coisa, mas vale dar uma conferida. Por padrão, é muito difícil uma source ter esse tipo de bug, a não ser que tenha um código ou função externa, tipo conflito com alguma função que vc tenha colocado. 

    Qual source vc pegou como base? 

    • Like 1

  5. Isso acontece em praticamente todas as sources.

    Mas tente colocar o level dos mobs mais baixo.

    Porque o server lê o 400 como 401,

    401 não tem exp.

    Exp do mob buga... entende?

    Lembra de não colocar uma Exp muito alta porque se o server tem limite de exp é provavel que ele vá bugar também.

    Tipo na 6.56 tinha limite de 125k de xp. e se passasse disso o player recebia tipo 4000


  6. Bom dia, uso a Source 7556.

    Por algum motivo, todas as secretas são compostas menos a do vento.

    Alguém pode me dar um help aqui?

    Tenho o código o Odin aqui(no final)

    E fui tentar configurar as runas manualmente pra receber a secreta do vento mas ele não reconheceu.

    Se eu esqueci algo ou se tenho que desativar o Odin nativo, como faço?

    Ps.: Armas cele, refinação vai de boas, só secreta do vento mesmo.

    Código inteiro do Odin:

    #include "stdafx.h"

    #include "Functions.h"

    #include "Timer.h"

     

    #define RATE_RefOdin 0

    #define RATE_CompOdin 100

     

     

    int Packets::GetChanceRefOdin(STRUCT_ITEM *Item)

    {

    if ((Item->EFV1 >= 234 && Item->EFV1 < 238) ||

    (Item->EFV2 >= 234 && Item->EFV2 < 238) ||

    (Item->EFV3 >= 234 && Item->EFV3 < 238))

    return 5;

    else if ((Item->EFV1 >= 238 && Item->EFV1 < 242) ||

    (Item->EFV2 >= 238 && Item->EFV2 < 242) ||

    (Item->EFV3 >= 238 && Item->EFV3 < 242))

    return 3;

    else if ((Item->EFV1 >= 242 && Item->EFV1 < 246) ||

    (Item->EFV2 >= 242 && Item->EFV2 < 246) ||

    (Item->EFV3 >= 242 && Item->EFV3 < 246))

    return 2;

    else if ((Item->EFV1 >= 246 && Item->EFV1 < 250) ||

    (Item->EFV2 >= 246 && Item->EFV2 < 250) ||

    (Item->EFV3 >= 246 && Item->EFV3 < 250))

    return 1;

    else

    return 0;

    }

    bool Packets::OdinFixRefinação(int32_t client, MSG_STANDARD* packet)

    {

     

     

    St_Odin *p = (St_Odin*)packet;

    STRUCT_MOB *player = (STRUCT_MOB*)NativeFunctions::getMobFromIndex(p->Header.ClientId);

     

    if (p->Header.ClientId <= 0 || p->Header.ClientId >= 1000)

    return false;

     

    for (INT8 i = 0; i < 7; i++)

    {

    if (p->Slot == 0xFF)

    return false;

     

    else if (memcmp(&p->ItemId, &player->Inventory[p->Slot], sizeof STRUCT_ITEM))

    return false;

     

    else if (p->ItemId.Index != player->Inventory[p->Slot].Index)

    return false;

     

    else if (p->ItemId.Index < 0 || p->ItemId.Index > 6500)

    return false;

    }

     

     

    if (p->ItemId[0].Index == 4043 && p->ItemId[1].Index == 4043)

    {

    if (p->ItemId[3].Index != 3338)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else if (p->ItemId[4].Index != 3338)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else if (p->ItemId[5].Index != 3338)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else if (p->ItemId[6].Index != 3338)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

     

    for (INT8 i = 0; i < sizeof(NotCharms) / sizeof(INT16); i++)

    {

    if (player->Inventory[p->Slot[2]].Index == NotCharms)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    }

     

    INT16 RefDoItem = Packets::GetItemSanc(&p->ItemId[2]);

     

    if (RefDoItem <= 233 || RefDoItem >= 250)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "A refinação do item deve estar entre +11 e +14.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

     

    UINT8 chances = RATE_RefOdin;

    chances += (BASE_GetItemSanc(&p->ItemId[3]) + 2);

    chances += (BASE_GetItemSanc(&p->ItemId[4]) + 2);

    chances += (BASE_GetItemSanc(&p->ItemId[5]) + 2);

    chances += (BASE_GetItemSanc(&p->ItemId[6]) + 2);

    chances += GetChanceRefOdin(&p->ItemId[2]);

     

    for (INT8 e = 3; e < 7; e++)

    memset(&player->Inventory[p->Slot[e]], 0, sizeof STRUCT_ITEM);

     

    memset(&player->Inventory[p->Slot[0]], 0, sizeof STRUCT_ITEM);

    memset(&player->Inventory[p->Slot[1]], 0, sizeof STRUCT_ITEM);

     

     

     

    srand(time(NULL) / 5 * (rand() % 500) * 5);

     

    if ((rand() % 100) <= chances)

    {

    NativeFunctions::sendEmotion(p->Header.ClientId, 14, 3);

    Functions::RefinarItemMais(&player->Inventory[p->Slot[2]], 4);

     

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Sucesso na refinação.");

    Log(Functions::stringFormat("%s ref %s sucess", player->Name, pItem(player->Inventory[p->Slot[2]].Index)->Name), "AlquimistaOdim", 0);

    }

    else

    {

    NativeFunctions::sendEmotion(client, 15, 2);

    Functions::RefinarItemMais(&player->Inventory[p->Slot[2]], -4);

     

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Refinação falhou.");

    Log(Functions::stringFormat("%s ref %s fail", player->Name, pItem(player->Inventory[p->Slot[2]].Index)->Name), "AlquimistaOdim", 0);

     

    }

    for (int i = 0; i < 7; i++)

    NativeFunctions::sendItem(p->Header.ClientId, (int)SlotType::Inventory, p->Slot, &player->Inventory[p->Slot]);

     

    NativeFunctions::sendEtc(p->Header.ClientId);

    NativeFunctions::sendScore(p->Header.ClientId);

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

     

    return true;

    }

    else

    {

    //Slot 0 Item: Emblema_da_Proteção

    //Slot 1 Item : Pacote_Lactolerium

    //Slot 2 Item : Armadura_Rake

    //Slot 3 Item : Refinação_Abençoada

    //Slot 4 Item : Refinação_Abençoada

    //Slot 5 Item : Refinação_Abençoada

    //Slot 6 Item : Pedra_Secreta_(Vento

    if (p->ItemId[0].Index == 4043 && p->ItemId[1].Index == 3448 || p->ItemId[0].Index == 3448 && p->ItemId[1].Index == 4043)

    {

    for (INT8 i = 0; i < sizeof(NotCharms) / sizeof(INT16); i++)

    {

    if (player->Inventory[p->Slot[2]].Index == NotCharms)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    }

     

    INT16 RefDoItem = Functions::GetItemSanc(&p->ItemId[2]);

     

    if (RefDoItem <= 233 || RefDoItem >= 250)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "A refinação do item deve estar entre +11 e +14.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

     

    return true;

    }

    else

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Impossivel fazer isso");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

     

    return true;

    }

    return true;

     

    }

    if (p->ItemId[0].Index == 3448 && p->ItemId[1].Index == 3448)

    {

    for (INT8 i = 0; i < sizeof(NotCharms) / sizeof(INT16); i++)

    {

    if (player->Inventory[p->Slot[2]].Index == NotCharms)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

     

    return true;

    }

    }

     

    INT16 RefDoItem = Functions::GetItemSanc(&p->ItemId[2]);

     

    if (RefDoItem <= 233 || RefDoItem >= 250)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "A refinação do item deve estar entre +11 e +14.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

     

    return true;

    }

    else

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Impossivel fazer isso");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

     

    return true;

    }

    return true;

    }

     

    if (p->ItemId[0].Index == 5122 && p->ItemId[1].Index == 5119)

    {

    if (p->ItemId[2].Index != 5132)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else if (p->ItemId[3].Index != 5120)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else if (p->ItemId[4].Index != 5130)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else if (p->ItemId[5].Index != 5133)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else if (p->ItemId[6].Index != 5123)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado com a combinação.");

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    for (INT8 j = 0; j < 7; j++)//deleta todos os itens

    {

    memset(&player->Inventory[p->Slot[j]], 0, sizeof STRUCT_ITEM);

    NativeFunctions::sendItem(p->Header.ClientId, (int)SlotType::Inventory, p->Slot[j], &player->Inventory[p->Slot[j]]);

    }

    static const STRUCT_ITEM vento[] = { 5337, 0, 0, 0, 0, 0, 0 };

    NativeFunctions::putItem(p->Header.ClientId, &vento[0]);

    NativeFunctions::sendEtc(p->Header.ClientId);

    NativeFunctions::sendEmotion(p->Header.ClientId, 14, 3);

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Composição concluída.");

    }

     

    return true;

    }

    }

    bool Packets::OdinFixArmaCele(int32_t client, MSG_STANDARD* packet)

    {

     

    St_Odin *p = (St_Odin*)packet;

    STRUCT_MOB *player = (STRUCT_MOB*)NativeFunctions::getMobFromIndex(p->Header.ClientId);

     

    if (p->Header.ClientId <= 0 || p->Header.ClientId >= 1000)

    return true;

     

    for (INT8 i = 0; i < 7; i++)

    {

    if (p->Slot == 0xFF)

    return true;

     

    else if (memcmp(&p->ItemId, &player->Inventory[p->Slot], sizeof STRUCT_ITEM))

    return true;

     

    else if (p->ItemId.Index != player->Inventory[p->Slot].Index)

    return true;

     

    else if (p->ItemId.Index < 0 || p->ItemId.Index > 6500)

    return true;

    }

    srand(time(NULL) / 5 * (rand() % 500) * 5);

    int Chance = rand() % 100;

     

    int EquivalenteID = -1, Equivale;

     

    if (p->ItemId[0].Index == 1901 || p->ItemId[0].Index == 1902 || p->ItemId[0].Index == 1903 || p->ItemId[0].Index == 1904 || p->ItemId[0].Index == 1905 || p->ItemId[0].Index == 1906 || p->ItemId[0].Index == 1907 || p->ItemId[0].Index == 1908 || p->ItemId[0].Index == 1909 || p->ItemId[0].Index == 1910 || p->ItemId[0].Index == 1714)

    {

    static int ArmaSelado[] = { 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1714 };

    static int ArmaEquiva[] = { 2491, 2551, 2611, 2671, 2731, 2791, 2859, 2863, 2895, 2935, 1711 };

     

     

     

     

    for (int i = 0; i < sizeof(ArmaSelado) / sizeof(int); i++)

    {

    if (p->ItemId[0].Index == ArmaSelado)

    {

    EquivalenteID = i;

    break;

    }

    }

     

    if (EquivalenteID == -1)

    return true;

     

    if (ArmaSelado[EquivalenteID] == 1714)

    Equivale = ArmaEquiva[EquivalenteID];

    else

    Equivale = ArmaEquiva[EquivalenteID] + 3;

     

    if (p->ItemId[1].Index >= ArmaEquiva[EquivalenteID] && p->ItemId[1].Index <= Equivale)

    {

    int Selado = Functions::GetItemSanc(&p->ItemId[0]);

    int Arch = Functions::GetItemSanc(&p->ItemId[1]);

    if (Selado != 9)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Item Selado deve ser +9");

    return true;

    }

    if (Arch < 27 && Arch > 30)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Item Arch deve ser +15");

    return true;

    }

    if (p->ItemId[2].Index != 772)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Equipe a Jóia_da_Escuridão");

    return true;

    }

     

     

    if (p->ItemId[3].Index != 5334 || p->ItemId[4].Index != 5335 || p->ItemId[5].Index != 5336 || p->ItemId[6].Index != 5337)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Coloque as Pedras Secretas em Ordem");

    return true;

    }

    if (!ReturnCorrectitem(p->ItemId[0].Index, p->ItemId[1].Index))

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Selado não confere!");

    return true;

    }

    if (Chance <= RATE_CompOdin)

    {

    STRUCT_ITEM sGiveItem;

    BASE_ClearItem(&sGiveItem);

     

    memcpy(&sGiveItem, &player->Inventory[p->Slot[1]], sizeof STRUCT_ITEM);//salva o item arch

    sGiveItem.Index = ReturnCorrectitem(p->ItemId[0].Index, p->ItemId[1].Index); //conserva os adds e muda apenas o ID

    for (INT8 j = 0; j < 7; j++)//deleta todos os itens

    {

    memset(&player->Inventory[p->Slot[j]], 0, sizeof STRUCT_ITEM);

    NativeFunctions::sendItem(p->Header.ClientId, (int)SlotType::Inventory, p->Slot[j], &player->Inventory[p->Slot[j]]);

    }

    NativeFunctions::sendNotice(Functions::stringFormat("%s compôs com sucesso o item: %s", player->Name, pItem(sGiveItem.Index)->Name));

    BASE_SetItemSanc(&sGiveItem, 0, 0);

    NativeFunctions::putItem(p->Header.ClientId, &sGiveItem);

    NativeFunctions::sendEtc(p->Header.ClientId);

    BASE_ClearItem(&sGiveItem);

    NativeFunctions::sendEmotion(p->Header.ClientId, 14, 3);

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Composição concluída.");

    Log(Functions::stringFormat("%s comp %s sucess", player->Name, pItem(ReturnCorrectitem(p->ItemId[0].Index, p->ItemId[1].Index))->Name), "AlquimistaOdim", 0);

     

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else

    {

    STRUCT_ITEM GiveItem;

    BASE_ClearItem(&GiveItem);

     

    memcpy(&GiveItem, &player->Inventory[p->Slot[1]], sizeof STRUCT_ITEM);//salva o item arch

    for (INT8 j = 0; j < 7; j++)//deleta todos os itens

    {

    memset(&player->Inventory[p->Slot[j]], 0, sizeof STRUCT_ITEM);

    NativeFunctions::sendItem(p->Header.ClientId, (int)SlotType::Inventory, p->Slot[j], &player->Inventory[p->Slot[j]]);

    }

    NativeFunctions::putItem(p->Header.ClientId, &GiveItem);

    BASE_ClearItem(&GiveItem);

     

    NativeFunctions::sendEmotion(client, 15, 2);

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Composição Falhou.");

    Log(Functions::stringFormat("%s comp %s fail", player->Name, pItem(ReturnCorrectitem(p->ItemId[0].Index, p->ItemId[1].Index))->Name), "AlquimistaOdim", 0);

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    }

    else

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Item equivalente não confere!");

    return true;

    }

    return true;

    }

    if (p->ItemId[0].Index == 1234 || p->ItemId[0].Index == 1235 || p->ItemId[0].Index == 1236 || p->ItemId[0].Index == 1237 || p->ItemId[0].Index == 1369 || p->ItemId[0].Index == 1370 || p->ItemId[0].Index == 1371 || p->ItemId[0].Index == 1372 || p->ItemId[0].Index == 1519 || p->ItemId[0].Index == 1520 || p->ItemId[0].Index == 1521 || p->ItemId[0].Index == 1522 || p->ItemId[0].Index == 1669 || p->ItemId[0].Index == 1670 || p->ItemId[0].Index == 1671 || p->ItemId[0].Index == 1672)

    {

     

    static int SetSelado[] = { 1234, 1235, 1236, 1237, 1369, 1370, 1371, 1372, 1519, 1520, 1521, 1522, 1669, 1670, 1671, 1672 };

    static int SetEquiva[] = { 1221, 1222, 1223, 1224, 1356, 1357, 1358, 1359, 1506, 1507, 1508, 1509, 1656, 1657, 1658, 1659 };

    for (int i = 0; i < sizeof(SetSelado) / sizeof(int); i++)

    {

    if (p->ItemId[0].Index == SetSelado)

    {

    EquivalenteID = i;

    break;

    }

    }

     

    if (EquivalenteID == -1)

    return true;

     

    if (p->ItemId[1].Index == SetEquiva[EquivalenteID])

    {

    int Selado = Functions::GetItemSanc(&p->ItemId[0]);

    int Arch = Functions::GetItemSanc(&p->ItemId[1]);

    if (Selado != 9)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Item Selado deve ser +9");

    return true;

    }

    if (Arch < 27 && Arch > 30)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Item Arch deve ser +15");

    return true;

    }

    if (p->ItemId[2].Index != 542)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Equipe a Pedra Lunar");

    return true;

    }

    if (ReturnCorrectitem(p->ItemId[0].Index, p->ItemId[1].Index) == 0)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Algo está errado!");

    return true;

    }

     

    if (p->ItemId[3].Index != 5334 || p->ItemId[4].Index != 5335 || p->ItemId[5].Index != 5336 || p->ItemId[6].Index != 5337)

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Coloque as Pedras Secretas em Ordem");

    return true;

    }

     

    if (Chance <= RATE_CompOdin)

    {

    STRUCT_ITEM sGiveItem;

    BASE_ClearItem(&sGiveItem);

     

    memcpy(&sGiveItem, &player->Inventory[p->Slot[1]], sizeof STRUCT_ITEM);//salva o item arch

    sGiveItem.Index = ReturnCorrectitem(p->ItemId[0].Index, p->ItemId[1].Index); //conserva os adds e muda apenas o ID

    for (INT8 j = 0; j < 7; j++)//deleta todos os itens

    {

    memset(&player->Inventory[p->Slot[j]], 0, sizeof STRUCT_ITEM);

    NativeFunctions::sendItem(p->Header.ClientId, (int)SlotType::Inventory, p->Slot[j], &player->Inventory[p->Slot[j]]);

    }

    NativeFunctions::sendNotice(Functions::stringFormat("%s compôs com sucesso o item: %s", player->Name, pItem(sGiveItem.Index)->Name));

    BASE_SetItemSanc(&sGiveItem, 0, 0);

    NativeFunctions::putItem(p->Header.ClientId, &sGiveItem);

    NativeFunctions::sendEtc(p->Header.ClientId);

    NativeFunctions::sendScore(p->Header.ClientId);

    BASE_ClearItem(&sGiveItem);

    NativeFunctions::sendEmotion(p->Header.ClientId, 14, 3);

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Composição concluída.");

    Log(Functions::stringFormat("%s comp %s sucess", player->Name, pItem(ReturnCorrectitem(p->ItemId[0].Index, p->ItemId[1].Index))->Name), "AlquimistaOdim", 0);

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    else

    {

    STRUCT_ITEM GiveItem;

    BASE_ClearItem(&GiveItem);

     

    memcpy(&GiveItem, &player->Inventory[p->Slot[1]], sizeof STRUCT_ITEM);//salva o item arch

    for (INT8 j = 0; j < 7; j++)//deleta todos os itens

    {

    memset(&player->Inventory[p->Slot[j]], 0, sizeof STRUCT_ITEM);

    NativeFunctions::sendItem(p->Header.ClientId, (int)SlotType::Inventory, p->Slot[j], &player->Inventory[p->Slot[j]]);

    }

    NativeFunctions::putItem(p->Header.ClientId, &GiveItem);

    BASE_ClearItem(&GiveItem);

     

    NativeFunctions::sendEmotion(client, 15, 2);

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Composição Falhou.");

    Log(Functions::stringFormat("%s comp %s fail", player->Name, pItem(ReturnCorrectitem(p->ItemId[0].Index, p->ItemId[1].Index))->Name), "AlquimistaOdim", 0);

    NativeFunctions::sendClientSignalParm(p->Header.ClientId, 0x7530, 0x3A7, 2);

    return true;

    }

    }

    else

    {

    NativeFunctions::sendClientMessage(p->Header.ClientId, "Item equivalente não confere!");

    return true;

    }

    return true;

    }

     

    return true;

    }

     

     

    Na struct.h onde são citadas as composições das secretas:

     

    static const int CompoeSecretas[4][8] = {

    { 5126, 5127, 5121, 5114, 5125, 5111, 5118, 5334 },//agua

    { 5131, 5113, 5115, 5116, 5125, 5112, 5114, 5335 }, //terra

    { 5110, 5124, 5117, 5129, 5114, 5125, 5128, 5336 }, //sol

    { 5122, 5119, 5132, 5120, 5130, 5133, 5123, 5337 } //Vento

    };

    • Like 1

  7. A P.O vende sem gold nenhum e a PL diz que poeiras não podem ser vendidas, já olhei itemlist e tá tudo certo.

    Source nada menciona sobre poeiras.

    Olhei nas settings e não tem nenhuma restrição de NADA...

    Alguém sabe?

    Na itemlist:

     

    412,Poeira_de_Oriharucon,61.0,0.0.0.0.0,0,1000000,0,0,0,EF_VOLATILE,4,EF_GRID,0

    413,Poeira_de_Lactolerium,62.0,0.0.0.0.0,0,2500000,0,0,0,EF_VOLATILE,5,EF_GRID,0,EF_ITEMGRADE,1


  8. Não da certo, ja tentei. o meu tb nao ta recebendo mais cartas depois que coloquei a source pra funcionar

    Vc editou ou criou algum comando?

    Bom, não sou experiente mas com o que já aprendi com várias sources foi que se vc errar uma única chave "{ }" na source, vc buga todos os outros comandos.

    Tenta dar /[nomedoplayer] se vai, ou /qualquercoisa.


  9. Porque não limita a entrada de 1 por IP direto, em vez de NPC ? Apenas durante o evento...

     

    Isso eu sei que já possui algo criado para controle de contas por IP, que no caso seria a quantidade que você escolhe para poder logar

    Rapaz....

    Boa ideia ahahahahah nem tinha pensado nisso e é bem menos trabalhoso kkkkkk

    • Like 1

  10. As portas, firewall, IP's fixo, com ou sem hamachi não são tudo rs. Podem estar certos mas tem outro detalhe:

    Vc deve estar usando uma source com restrição de client.

    Quer dizer... Sources como phoenix of life por exemplo precisam de um client próprio com um wyd.exe feito pra ela sabe?

    Vc tá usando um client, ou uma source em que os packets não casam um com o outro...

    • Like 1

  11. Abre settings/joiableitems.txt

    Lá vc coloca o item que quer agrupar.

    Só que pra desagrupar é outra história... Aí vc tem que ir no controle dos packets na source e cadastrar a id do item que tu quer que agrupe e desagrupe...


  12. Exatamente, apenas adicionei na cidade. Porém quando colocado, ao subir no portal não aparece aquela mensagem pra teleportar. Você sabe como arruma isso?

     

    Geralmente você configura isso na source. Qual source cê tá usando?

    Não é simplesmente colocar o teleporte.


  13. Dá sim :)

    Só que acho que ninguém vai entregar o código na mão beijada porque requer um pouco de estudo.

    Essa 7556 é uma das mais fáceis de se trabalhar.

    Leva isso como base:

    1- Se na source já tiver um ponteiro que pega o IP do cara, beleza... se não... vc tem que fazer (não é difícil) - Mas a maioria das sources 7556 tem essa função escondida, dá uma olhada aí nas structs.

    2- Colocar o npc pra puxar o IP do cara como condição (melhor se for pra teleportar pra alguma área, por exemplo)

    3- Comparar com o IP de todas as outras contas que estão on e que já passaram pelo NPC (isso é moleza, só configurar um loop de atualização da área)

    4- Se tiver algum IP igual ao outro, online e que tá tentando executar o NPC, manda dar DC (NativeFunctions::charLogout)

     

    Não é um inferno fazer esse código, mas se sua source tiver a função de catar o IP, já é metade do caminho feito.

    • Like 1

  14. Já resolvi !

    Pra quem tiver tendo esse problema, é o Visual Studio, usei o 2013 com update 5 e resolveu.

    Se não compilar por causa das ferramentas v140 ou der incompatibilidade com as versões, ir nas propriedades/General/ vai ter uma janela de seleção das ferramentas de compilação algo como "v140(not installed)", muda pra v12.0, dá um OK e tenta compilar de novo. Vai certinho!


  15. Galera,

    Estou usando a Phoenix of life e o comando /cmd faz a TM fechar sozinha.

    Nenhum outro comando dá esse erro, mas qualquer comando que tenha "espaço" ela fecha.

    Comandos sem espaço funcionam de boas.

     

    Teleportar pra coordenadas, criar itens in-game, Notice, por exemplo, que são innercmd's dá isso.

    Alguém conseguiu resolver ou dá isso em mais alguém?

     

    Se conseguiram, podem por favor dar um help?

     

    ------------------------------------------------------------------------------------------------

    Uso Visual Studio 2017 (completo)

    Windows 10 pro


  16. Estou configurando um servidor 7556.

    Mas algo que não consigo resolver é o tal Grid e os mobs indo pra lugares que não existem no mapa ou ficam lá no alto. Vi em alguns posts dizendo que isso eu posso corrigir na Source, mas não sei exatamente onde e como. Como resolvo isso? Qualquer sugestão serve... Obrigado.

    Mobs das quests256, por exemplo não "reconhecem" as paredes e vão lá pro alto ou atravessam. NPC's somem e vão lá pro alto.


  17. Olá!

    Estou com esse problema há certo tempo e não consegui resolvê-lo. Já olhei em direções e coordenadas que meus npcs e mobs podem "andar". Mas quando chegam perto de um enésimo objeto (pedra, portão, muro, casa) ele simplesmente vai pro alto e fica lá até voltar pro lugar que não ocupe as mesmas coordenadas do tal objeto.

    Alguém tem, já teve e conseguiu resolver? Se puder dar um help aqui, ficarei muito agradecido. Abraços;

     

    Detalhe: Nas instruções de coordenadas, não tem nenhuma que ocupe a de outro objeto, ele simplesmente chega do lado, some e vai pro alto