Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
  • 0

[?] W2PP Code - Replations


SaveWYD
 Compartilhar

Pergunta

Olá todos!!!

 

Sou novo aqui, me chamo Roberto, gosto de WYD e Programação.

Tenho uma dúvida:

 

No jogo, ao jogar as replations em determinadas partes(TODAS:mad::mad::mad::mad::mad::mad:), a replation volta e não tem efeito.

 

Fui analisar as funções:

 

server.cpp

void SetItemBonus2(STRUCT_ITEM *Dest) <<<< Essa Tudo bem, eu acho

 

 

Até chegar aqui

BASE_GetItemSanc();

 

>> Verifica se é âmago, blz!!!

 

 

Tenho em mente que todo item tem seu add: EX: 412 61 10 0 0 0 0 (Resto de Ori 10 Unidades)

Daí essa parte não entra na minha cabeça,

 

 

Basedef.cpp

 

BASE_GetItemSanc(STRUCT_ITEM *item)

{

if (item->stEffect[0].cEffect >= 116 && item->stEffect[0].cEffect <= 125)

sanc = item->stEffect[0].cValue;

else if (item->stEffect[1].cEffect >= 116 && item->stEffect[1].cEffect <= 125)

sanc = item->stEffect[1].cValue;

 

else if (item->stEffect[2].cEffect >= 116 && item->stEffect[2].cEffect <= 125)

sanc = item->stEffect[2].cValue;

....

 

 

Ela ta verificando se na estrutura do item tem, ao inves de 61(que é efeito de quantidade ou amout), tem algum numero(efeito) entre 116 e 125. Mas porque?

Se na header ItemEffect.h só temos efeitos de 22 a 127, sendo que não existem enumerações ou efeitos de 114 a 125

Talvez isso nao tenha nada a ver com o problema citado (REPLATIONS), mas enfim.

 

 

...

ItemEffect.h

 

#define EF_MIN 108

#define EF_YEAR 109

#define EF_WMONTH 110

#define EF_MOBTYPE 112

#define EF_ITEMTYPE 113

 

#define EF_NOSANC 126

#define EF_NOTRADE 127

 

Até pensei em implementar, no arquivo CreadFiles.cpp e CreadFiles.h const char* const CReadFiles::REP_RATE_PATH = "../../Common/Settings/RepsRate.txt"; Desisti por não saber por onde ir.

 

CReadFiles.cpp

const char* const CReadFiles::SANC_RATE_PATH = "../../Common/Settings/SancRate.txt";

>> const char* const CReadFiles::REP_RATE_PATH = "../../Common/Settings/RepsRate.txt";

const char* const CReadFiles::QUESTS_RATE_PATH = "../../Common/Settings/QuestsRate.txt";

const char* const CReadFiles::COMP_RATE_PATH = "../../Common/Settings/CompRate.txt";

const char* const CReadFiles::MOB_MERC_PATH = "../../Common/Settings/MobMerc.txt";

const char* const CReadFiles::ADMIN_PATH = "../../DBSRV/Run/Admin.txt";

const char* const CReadFiles::MAC_BLOCK_PATH = "../../DBSRV/Run/Mac.txt";

const char* const CReadFiles::CHALL_PATH = "../../Common/Chall_%2.2d_%2.2d.txt";

const char* const CReadFiles::GUILD_PATH = "../../Common/Guild_%2.2d_%2.2d.txt";

const char* const CReadFiles::GUILDCHAMP_PATH = "../../Common/ChampionCity_%2.2d_%2.2d.txt";

 

[.....]

 

void CReadFiles::ReadRepRate()

{

 

}

 

CReadFiles.h

 

static void ReadSancRate();

static void ReadRepRate();

static void ReadQuestsRate();

static void ReadCompRate();

static void ReadMobMerc();

static void ReadAdmin();

static void ReadMacblock();

static void ReadChallanger();

static void WriteChallanger();

static void ReadGuild();

static void WriteGuild();

public:

static int QuestExp[5][2];

static int QuestCoin[5];

static int QuestLevel[5][4];

private:

static const char* const SANC_RATE_PATH;

static const char* const REP_RATE_PATH;

static const char* const QUESTS_RATE_PATH;

static const char* const COMP_RATE_PATH;

static const char* const MOB_MERC_PATH;

static const char* const ADMIN_PATH;

static const char* const MAC_BLOCK_PATH;

static const char* const CHALL_PATH;

static const char* const GUILD_PATH;

static const char* const GUILDCHAMP_PATH;

 

 

 

Se eu estiver falando abobrinha ou algo do tipo, relevem, afinal... Sou iniciante na programação, ainda estou brincando de alocar memoria(malloc) para vetor :D:D:D:D

 

Se alguém quiser adicionar skype para debater, geeksawyd.

 

 

Obrigado.:p:p

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Iria até tentar te ajudar, mas como colocou hide e eu não consigo ver o conteúdo, é impossível te ajudar :)

(não, não irei curtir algo somente para ajudar outra pessoa, eu curto o conteúdo e não pra ver algo)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 0
Olá todos!!!

 

Sou novo aqui, me chamo Roberto, gosto de WYD e Programação.

Tenho uma dúvida:

 

No jogo, ao jogar as replations em determinadas partes(TODAS:mad::mad::mad::mad::mad::mad:), a replation volta e não tem efeito.

 

Fui analisar as funções:

 

*** O conteúdo oculto não pode ser citado. *** [/ B]

 

 

Até chegar aqui

BASE_GetItemSanc();

 

>> Verifica se é âmago, blz!!!

 

 

Tenho em mente que todo item tem seu add: EX: 412 61 10 0 0 0 0 (Resto de Ori 10 Unidades)

Daí essa parte não entra na minha cabeça,

 

*** O conteúdo oculto não pode ser citado. *** [/ B]

 

Ela ta verificando se na estrutura do item tem, ao inves de 61(que é efeito de quantidade ou amout), tem algum numero(efeito) entre 116 e 125. Mas porque?

Se na header ItemEffect.h só temos efeitos de 22 a 127, sendo que não existem enumerações ou efeitos de 114 a 125

Talvez isso nao tenha nada a ver com o problema citado (REPLATIONS), mas enfim.

 

*** O conteúdo oculto não pode ser citado. *** [/ B]

 

 

Até pensei em implementar, no arquivo CreadFiles.cpp e CreadFiles.h const char* const CReadFiles::REP_RATE_PATH = "../../Common/Settings/RepsRate.txt"; Desisti por não saber por onde ir.

 

*** O conteúdo oculto não pode ser citado. *** [/ B]

Se eu estiver falando abobrinha ou algo do tipo, relevem, afinal... Sou iniciante na programação, ainda estou brincando de alocar memoria(malloc) para vetor :D:D:D:D

 

Se alguém quiser adicionar skype para debater, geeksawyd.

 

 

Obrigado.:p:p

você esta precisando não use HIDE, quer ajuda deixe o conteúdo liberado.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia, acordei agora.

Desculpe a demora e ter dado HIDE no conteúdo.

Como disse, sou novo aqui e minha intenção foi ser mais organizado, pra nao ficar um post de 7 cabeças.

 

Se soubesse que o escopo HIDE exigia Like para ser expandido, não teria o colocado. Tentei QUOTE mas não obtive sucesso.

Enfim, ta ai o post livre.

 

vlw

Link para o comentário
Compartilhar em outros sites

  • 0

Agora sim, bom o replation que eu me lembre não possui bugs, tem alguns, mas são mais verificações (não irei comentar sobre), veja o tipo de item e o replation que está jogando, leia a volatile do replation e você vai entender, sobre os valores 116 ~ 126, esses são itens coloridos, é por isso que tem essa verificação, acho que é só isso mesmo...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 0

Quando o replation volta e não funciona é por que o tipo do item não é válido, e isso pode ser configurado dentro da itemlist, EF_GRADE creio eu.

 

BASE_GetItemSanc(); é uma função que retorna a refinação do item +0 até +15, não tem nada haver com verificar se é âmago.

 

116 a 125 são adicionais de refinação com cor, após jogar o feijão em certo item, o id de refinação 43 muda para um referente a cor entre essa faixa.

 

Qualquer dúvida pode me procurar aqui no fórum :)

  • Curtir 1
kraftweerk_body.png

Link para o comentário
Compartilhar em outros sites

  • 0
Quando o replation volta e não funciona é por que o tipo do item não é válido, e isso pode ser configurado dentro da itemlist, EF_GRADE creio eu.

 

BASE_GetItemSanc(); é uma função que retorna a refinação do item +0 até +15, não tem nada haver com verificar se é âmago.

 

116 a 125 são adicionais de refinação com cor, após jogar o feijão em certo item, o id de refinação 43 muda para um referente a cor entre essa faixa.

 

Qualquer dúvida pode me procurar aqui no fórum :)

 

Bom, perdão, houve um equivoco da minha parte.

 

Ele não verifica se é âmago, e sim MONTARIA ou CRIA, pois não se da pra refinar montaria ou cria, apenas amagos sao permitidos serem colocados em crias ou montarias.

 

if (item->sIndex >= 2330 && item->sIndex < 2390)

{

return FALSE;

}

 

Mas vou procurar no itemlist.

 

Um detalhe:

 

Arquivo Server.cpp

 

Linhas 2370 em diante

 

//Peito calça

int calca = 4, peito = 8;

if(nPos == peito || nPos == calca)

{

int _rand = rand()%48;

if(Dest->stEffect[0].cEffect == EF_SANC)

{

int sanc = BASE_GetItemSanc(Dest);

if (sanc < 6)

{

sanc += rand() % 2;

if (sanc >= 6)

sanc = 6;

BASE_SetItemSanc(Dest, sanc, 0);

}

}

else

{

Dest->stEffect[0].cEffect = EF_SANC;

Dest->stEffect[0].cValue = rand()%2;

}

Dest->stEffect[1].cEffect = g_pBonusValue2[_rand][0];

Dest->stEffect[1].cValue = g_pBonusValue2[_rand][1];

Dest->stEffect[2].cEffect = g_pBonusValue2[_rand][2];

Dest->stEffect[2].cValue = g_pBonusValue2[_rand][3];

}

 

 

Talvez o problema seja na itemlist mesmo.

 

Ingame, quando digite o comando:

/gm +set 2 = ITEM NO ELMO

/gm +set 3 = ITEM NO PEITO

/gm+set 4 = ITEM NA CALÇA

 

if(nPos == peito || nPos == calca)

Talves nessa verificação, não exista slot para 4 e 8, no jogo os slots 7 e 8 são de armas.

 

 

 

Agora sim, bom o replation que eu me lembre não possui bugs, tem alguns, mas são mais verificações (não irei comentar sobre), veja o tipo de item e o replation que está jogando, leia a volatile do replation e você vai entender, sobre os valores 116 ~ 126, esses são itens coloridos, é por isso que tem essa verificação, acho que é só isso mesmo...

 

 

Não lembro de ver essas volatiles.

 

 

int g_pBonusValue5[30][4] ?

int g_pBonusValue4 ?

int g_pBonusValue3 ?

Link para o comentário
Compartilhar em outros sites

  • 0

nPos é uma informação na itemlist, não o slot dele no inventário.

 

Eu não sei decorado essa informação, mas é a informação que diz em qual slot o item vai entrar.

 

Armas são slots 6 e 7 só corrigindo...

 

sobre os g_pBonusValue você precisa ver sua aplicação na source, por que do jeito que você me apresentou não tenho a mínima ideia do que seja...

  • Curtir 1
kraftweerk_body.png

Link para o comentário
Compartilhar em outros sites

  • 0
Está com o nome de Classe na volatile, de uma procurada e você vai encontrar, lendo o código você vai conseguir entender como ela funciona

 

Vi aqui mas, vai dar zé pra entender.

 

if (!m->DestType || m->DestPos >= 60)

{

 

retirei a negação dessa condição

if (m->DestType || m->DestPos >= 60)

{

 

Tive um resultado, informava que só era possível com item equipado, vou continuar.

To gostando.

essa source é, sem comparação, a mais fácil de estudar.

 

Obrigado a quem deu inicio, seja quem for.:p:p:D:D

Link para o comentário
Compartilhar em outros sites

  • 0

Ainda não tá certo, se não me engano "DestType" pode ser 0, 1 ou 2

 

0 = equipamentos

1 = inventário

2 = baú

 

então adicione um "== 1" que daí sim vai estar correto :)

 

@ Edit

 

e o DestPos deve ser >= 0 e < 60

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 0
[quote name='Rechdan DOD']Ainda não tá certo, se não me engano "DestType" pode ser 0, 1 ou 2 0 = equipamentos 1 = inventário 2 = baú então adicione um "== 1" que daí sim vai estar correto :) [B]@ Edit[/B] e o DestPos deve ser >= 0 e < 60[/QUOTE] Quando chegar da facul, tento. vlw [B]@ Edit Deu não. Vou continuar tentando. @Edit [quote name='Rechdan DOD']Ainda não tá certo, se não me engano "DestType" pode ser 0, 1 ou 2 0 = equipamentos 1 = inventário 2 = baú então adicione um "== 1" que daí sim vai estar correto :) @ Edit e o DestPos deve ser >= 0 e < 60[/QUOTE] [/B] [B][/B] [SIZE=7]Deu certo, vlw![/SIZE] [B][/B] [B][B][/B] [B][QUOTE] [/QUOTE][/B][QUOTE][/quote][/B][QUOTE] [I][SIZE=4]#pragma region Classe if(Vol == 190) { STRUCT_ITEM *dest = GetItemPointer(&pMob[conn].MOB, pUser[conn].Cargo, m->DestType, m->DestPos); if (dest == NULL) { sprintf(temp, "err,use item fail dest %d %d", m->DestType, m->DestPos); ItemLog(temp, "-system", 0); return; } [B] if (!(m->DestType == 1 && m->DestPos >= 0 && m->DestPos < 60))[/B] { SendClientMessage(conn, g_pMessageStringTable[_NN_Only_To_Equips]); ItemLog("err,use item fail - dest", pUser[conn].AccountName, pUser[conn].IP); SendItem(conn, m->SourType, m->SourPos, item); return; } int sanc = BASE_GetItemSanc(dest); int ItemId = dest->sIndex; if (sanc > 9 || BASE_GetItemAbility(dest, EF_MOBTYPE) != 0 && BASE_GetItemAbility(dest, EF_MOBTYPE) != 2) { SendItem(conn, m->SourType, m->SourPos, item); return; } int replation = item->sIndex >= 4016 && item->sIndex <= 4020 ? item->sIndex - 4015 : item->sIndex - 4020; [B] if (!(BASE_GetItemAbility(dest, EF_ITEMLEVEL) != replation)) [/B] { SendItem(conn, m->SourType, m->SourPos, item); return; } SetItemBonus2(dest); SendItem(conn, m->DestType, m->DestPos, dest); SendEmotion(conn, 14, 3); sprintf(temp, "useitem,reset effect %d+%d - (%d,%d,%d)", dest->sIndex, sanc, dest->stEffect[0].cEffect, dest->stEffect[1].cEffect, dest->stEffect[2].cEffect); ItemLog(temp, pUser[conn].AccountName, pUser[conn].IP); if (amount > 1) BASE_SetItemAmount(item, amount - 1); else memset(item, 0, sizeof(STRUCT_ITEM)); return; [/SIZE][/I] [B][I][SIZE=4] }[/SIZE][/I] [/B] [B] [/B][/QUOTE][B][/B] [B] um problema: nao ha verificacao para o EF_GRADE[U]x[/U][/B] [U] [B]qual quer replation pode ser colocado em qual quer parte de qual quer set. Seja A, B, C, D ou ate mesmo E, Com exceção de E Arch(EF_GRADE5) e sets celestiais(melponeme, driate etc) [/B][/U] [B][U]Vlw o jeito é bater a cabeça na parede pra verificar as GRADEs[/U][/B]
Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

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