SaveWYD 65 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Juumper 993 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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) 1 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
bruk 12 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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. ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
SaveWYD 65 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Juumper 993 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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... 1 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
'Woz 181 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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 :) 1 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
SaveWYD 65 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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 ? ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
'Woz 181 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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... 1 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
SaveWYD 65 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 Vou fuçar aqui, agradeço desde já a atenção. Deixa o tópico aberto pra discussões. Qual quer progresso posto aqui. ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Juumper 993 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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 1 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
SaveWYD 65 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Rechdan 2.450 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 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 1 ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
SaveWYD 65 Postado 26 de Abril 2018 Compartilhar Postado 26 de Abril 2018 [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] ᅠᅠMural de Coleçõesᅠᅠ Clique aqui e adquira suas medalhas Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados