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

wendertx

Membro Avançado
  • Total de Posts

    46
  • Registro em

  • Última visita

  • WCoins

    15

Posts postados por wendertx

  1. Em 28/12/2022 em 20:55, Sc2ALLin disse:

    Nossa senhora, 2016 é moh cota fii as vezes tu tem conteúdo raro é nem sabe...

    Assim, eu fui adicionando coisas de lá pra cá à medida que ia aprendendo C++ Coisas que sentia falta ou necessidade no Br.

    Pra ser honesto sendo desonesto baixei outras sources também e fui adaptando na minha algumas funções que ia achando interessante. Tipo estrutura de packets e fui adaptando...

    Tem bastante coisa, qualquer dia posto ela. Não tenho intenção de abrir e cuidar de server e acho que iria ajudar a galera. 

    Tem um add de durabilidade das armas (q diminui ou quebra refinando, aumentando add ou morrendo de acordo com o lvl).

    Comidas em forma de skill (se não usar comida vc perde dano, hp, mana, imunidade e defesa).

    Aumentar o add da arma (ou falha e perde add e pode quebrar).

    enfim, coisas que deixam o jogo mais difícil pra jogar e deixar o jogo mais "real". 

    Pra mim o que mais estraga o jogo e faz perder a graça é deixar ele muito fácil. Coisas que no outro dia vc já tá com celestial full e vc fica "sem o que fazer" se não for pvp....

    O problema é que vez ou outra aprecem esses "bugs" que nem eram bugs kkkk 

  2. Agora, ThisSupreme disse:

    vc pode mudar o alcance do range.

    Sim, já fiz esse teste, mas acabava dando tela de personagem. Parece que tá faltando algo no meu GamePatch que devia comunicar com essa função. Talvez um alinhamento da estrutura dos packets do client e da source, mas não quero perder tempo com isso kksksk Já que resolveu, vou deixar desativado por enquanto e fingir que nunca aconteceu kkkkkkk

    A source que uso é de 2016 e nem me lembro quem fez, mas uso o client do phoenix of life que provavelmente não era essa source mas venho adaptando pra treinar programação. Um dia volto nesse bagulho pra tentar resolver kkk

    • Haha 1
  3. 7 horas atrás, DwarfDev disse:

    Verifica a estrutura dos pacotes 39D e 39E, se não me engano pra ataque fisico o cliente envia -1 pra damage/mana

    Era exatamente isso !!!!!!
    Tinha um bloqueio pra não atacar acima de 4 "metros" pra prevenir range hack e bloquear algumas skills. 

    Eu só coloquei na função inteira /* */ pra testar e deu certo. 
    Bom, o server configurei só pra brincar, pro meu uso, não vou precisar me preocupar com hacks nele então vou deixar sem essa função rs. Obrigado!!!

  4. Fala, pessoal!

    Uso a Source 7556 Infinity. Fiz um servidor pra brincar, mas percebi que armas de lançamento tipo hermai, cruz sagrada, dardo, etc (só desse tipo) não dão dano algum, mesmo tendo 10k de ataque.

    Revisei a itemlist e está tudo ok! até substitui as linhas dessas armas por de outras itemlist e mesmo assim não resolveu.

    Alguém já viu isso ou sabe como resolver?

    Agradeço demais! 

     

    Exemplo da itemlist:

    886,Hermai,767.0,284.0.0.0.0,46,45000000,64,2791,0,EF_CLASS,5,EF_GRID,0,EF_DAMAGE,264,EF_RANGE,4,EF_WTYPE,103,EF_CON,70,EF_MOBTYPE,1,EF_ITEMGRADE,5

     

    Todas seguem o mesmo tipo de configuração na itemlist desde o index até o grade...

  5. 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. 

  6. 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

  7. 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.

     

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

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

    };

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

  11. 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.

  12. 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

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

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

  15. 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.

  16. 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.

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

  18. 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

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