NewWars 875 Posted May 16, 2015 Boas Pessoal Como os veios têm pouco uso devido a ser secante ou por não lhes darem valor mesmo, aqui esta uma boa forma de fazer algo com eles. Vamos la! No ficheiro mining.cpp editam: Linha 119/120 void OreDrop(LPCHARACTER ch, DWORD dwLoadVnum) Abaixo esta, int iFractionCount = GetFractionCount(); Esta função faz um numero random de 1 a 100, e enquanto esse numero for menor ao indice 0 da tabela, ele reduz o indice, imaginemos o primeiro indice 20, saiu o numero 85, ora então 85 - 20 = 65, e enquanto esse numero for maior que o indice, ele continua até ser menor, ai sai outro valor aleatorio de X a X, mas definido na tabela. Olhemos a tabela para entenderem int fraction_info[MAX_FRACTION_COUNT][3] = { { 20, 1, 10 }, { 30, 11, 20 }, { 20, 21, 30 }, { 15, 31, 40 }, { 5, 41, 50 }, { 4, 51, 60 }, { 3, 61, 70 }, { 2, 71, 80 }, { 1, 81, 90 }, }; Se formos pelo exemplo do 85, era 85 - 20 do primeiro indice, dava 65, que faziamos 65 - 30, dava 35, como não é menor que o proximo indice, 20, fazemos 35 - 20, que da 15, ora 15 é igual ao proximo indice 15, logo iria retornar um numero de 31 a 40 fragmentos por refinar. Esta parte é como definir valores aleatorios, voltemos aos fixos! Ja que é assim, na variavel int iFractionCount = GetFractionCount(); tiram o GetFractionCount() e metem um valor fixo que querem que saia quando mina com sucesso, 1 fragmento, 2 fragmentos, sempre fixo... Mas calma! Ainda so vai sair fragmentos e não ja refinado! Para isso, mais abaixo em LPITEM item = ITEM_MANAGER::instance().CreateItem(dwRawOreVnum, GetFractionCount()); ele cria fragmentos e obtem um aleatorio novamente, o que fazemos é: LPITEM item = ITEM_MANAGER::instance().CreateItem(GetRefineFromRawOre(dwRawOreVnum), iFractionCount); Assim ele vai buscar o refinado apartir do id do fragmento, e cria a quantidade que metemos fixa em cima, ou aleatoria, o que quiserem. Bem acho que é tudo sobre este assunto em particular, espero que gostem, e que o Undefined não se chateie por eu ter postado algum do nosso trabalho privado xDDD Cumprimentos. 5 nagatto, iмαłucø, xXBoyDarkXx and 2 others reacted to this Share this post Link to post Share on other sites
Mago_pt 27 Posted August 7, 2016 Boas para dropar os minerios a 100% posso também fazer isto?função : int GetFractionCount() { int r = number(1, 100); for (int i = 0; i < MAX_FRACTION_COUNT; ++i) { if (r <= fraction_info[i][0]) return number(fraction_info[i][1], fraction_info[i][2]); else r -= fraction_info[i][0]; } return 0; } deixa-la assim int GetFractionCount() { int r = number(100, 100); for (int i = 0; i < MAX_FRACTION_COUNT; ++i) { if (r <= fraction_info[i][0]) return number(fraction_info[i][1], fraction_info[i][2]); else r -= fraction_info[i][0]; } return 0; } Share this post Link to post Share on other sites
NewWars 875 Posted November 3, 2016 Isso faz-se na função que supostamente dá os minérios e faz randomize, e não na função de contagem. Cumprimentos. Share this post Link to post Share on other sites
NewWars 875 Posted November 3, 2016 Tópico movido De: Programação > Ensino > C++Para: Metin2 > Gerenciamento de Servidores e Clientes > Metin2 - Source Code Isto é uma mensagem automática Share this post Link to post Share on other sites