PDA

View Full Version : |Source| Fix Itens Sumindo na Chaos Machine



romariols
03/04/2020, 02:00 AM
Este foi um dos fix mais difíceis que achei até agora, então, para ajudar a galera que está iniciando vou deixar aqui como eu consegui solucionar.

O BUG acontece quando um player coloca seus itens na Chaos Machine e em seguida ele é desconectado do servidor por circunstâncias diversas ou fecha o jogo com os itens na Chaos Machine, e ai ele acaba perdendo os itens, pois eles somem do jogo.

Esta função irá dar um "Rollback" no inventário do player quando isto acontecer, trazendo de volta os itens ao inventário antes de ser desconectado, fixando o problema.

Defines

#define OBJMAX_RANGE(aIndex) (((aIndex) < 0 )?FALSE:( (aIndex) > OBJECT_MAX-1 )?FALSE:TRUE)
#define INVENTORY_SIZE 108

Funções.cpp

int gObjInventoryRollback(int aIndex)
{
if (!OBJMAX_RANGE(aIndex))
{
return false;
}


for (int n = 0; n < INVENTORY_SIZE; n++)
{
gObj[aIndex].Inventory2[n].Clear();
}


gObjSetInventory1Pointer(&gObj[aIndex]);


LogAddFuncColor(COLOR_BLACK, "Rollback no Inventário (%s)", gObj[aIndex].Name);


return true;
}

Funções.h

int gObjInventoryRollback(int aIndex);

A parte abaixo deve ser inserida na função gObjDel

// - Fix Chaos Machine
if (lpObj->CloseType == -1 && lpObj->m_IfState.use == 1 && lpObj->m_IfState.type == 7)
{
LogAddFuncColor(COLOR_BLUE, "[Chaos-Machine][%s][%s] Fechou de Forma Inesperada", lpObj->AccountID, lpObj->Name);
gObjInventoryRollback(aIndex);
}

Créditos: Romário Leite

LaMO
03/04/2020, 03:32 AM
Vou testar amanhã, parece muito com a função que já existe no trade.

Se realmente funcionar é uma coisa muito boa.

romariols
03/04/2020, 03:44 AM
100% funcional, eu fixei no meu servidor com esta função :)

Linkzr
03/04/2020, 01:16 PM
@romariols ([Only registered and activated users can see links])

Tentei forçar o bug em meu servidor de 2 maneiras
Utilizo a source do Update 13 do louis (Season 4).

Tentei deixa um item +11 na chaos machine, só coloquei os itens na CM e matei o processo no Gerenciador De Arquivos.
[Only registered and activated users can see links])

Outra forma foi colocar para MIX o item e logo em seguida dei ALT + F4 antes de terminar a combinação
Em ambos os casos os itens voltaram para o meu inventário...
[Only registered and activated users can see links]

romariols
03/04/2020, 01:29 PM
@romariols ([Only registered and activated users can see links])

Tentei forçar o bug em meu servidor de 2 maneiras
Utilizo a source do Update 13 do louis (Season 4).

Tentei deixa um item +11 na chaos machine, só coloquei os itens na CM e matei o processo no Gerenciador De Arquivos.
[Only registered and activated users can see links])

Outra forma foi colocar para MIX o item e logo em seguida dei ALT + F4 antes de terminar a combinação
Em ambos os casos os itens voltaram para o meu inventário...
[Only registered and activated users can see links]

Mesmo não acontecendo o BUG anexei a tua source ao código do GS :)

Esse BUG tem em todas as versões 97 a 99, já ouvi falar na Season 2 também, não sei se em season maiores tem. A forma como vc tentou forçar, está correta, é assim que o BUG acontece e o player acaba perdendo os itens.

Vlw... Acredito que irá ajudar muitos.

LaMO
05/04/2020, 01:50 PM
@romariols ([Only registered and activated users can see links])

Tentei forçar o bug em meu servidor de 2 maneiras
Utilizo a source do Update 13 do louis (Season 4).

Tentei deixa um item +11 na chaos machine, só coloquei os itens na CM e matei o processo no Gerenciador De Arquivos.
[Only registered and activated users can see links])

Outra forma foi colocar para MIX o item e logo em seguida dei ALT + F4 antes de terminar a combinação
Em ambos os casos os itens voltaram para o meu inventário...
[Only registered and activated users can see links]

Mesmo não acontecendo o BUG anexei a tua source ao código do GS :)

O bug só ocorre depois de você fazer o MIX na Chaos Machine. Antes de mixar ele ainda considera o item como seu, se fechar e abrir o jogo novamente, o item volta para o inventário. Porém, depois de uma combinação, o item não é mais seu e sim da CM, e se vc tomar DC, ele se perde lá. Então tente novamente mixando primeiro, e quando der sucesso, fechar o jogo com o item ainda na CM.



Esse BUG tem em todas as versões 97 a 99, já ouvi falar na Season 2 também, não sei se em season maiores tem. A forma como vc tentou forçar, está correta, é assim que o BUG acontece e o player acaba perdendo os itens.

Vlw... Acredito que irá ajudar muitos.

Formatei o PC e ainda não consegui testar, e pelo que eu vi o código está certo. Mas só confere pra mim, o rollback só funciona em caso de sucesso na CM né? Senão o cara perde o item, e fecha o jogo pra recuperar as coisas.

romariols
05/04/2020, 05:23 PM
No meu caso não ocorreu esse problema pq eu criei uma função que retorna um valor quando o player clica no botão OK, não inclui essa parte pq varia de versão pra versão, se ocorrer, basta adaptar com a sua source, algumas deve ser necessário acrescentar "lpObj->ChaosLock = FALSE" ou "lpObj->ChaosLock = FALSE", dependendo do valor que retorna na função da Chaos Mix

27 minutes:------- Atualizado -------

No meu GS ficou assim, os itens depois de apertar o botão "OK", só retornam ao inventário se tiver dado certo a combinação, porém, voltam a forma antes da combinação e o player terá que refazer a combinação, se a combinação falhar, ele perde os itens como normalmente seria. O código postado é 99%, o resto é com a criatividade de cada um.

LaMO
05/04/2020, 07:42 PM
No meu caso não ocorreu esse problema pq eu criei uma função que retorna um valor quando o player clica no botão OK, não inclui essa parte pq varia de versão pra versão, se ocorrer, basta adaptar com a sua source, algumas deve ser necessário acrescentar "lpObj->ChaosLock = FALSE" ou "lpObj->ChaosLock = FALSE", dependendo do valor que retorna na função da Chaos Mix

27 minutes:------- Atualizado -------

No meu GS ficou assim, os itens depois de apertar o botão "OK", só retornam ao inventário se tiver dado certo a combinação, porém, voltam a forma antes da combinação e o player terá que refazer a combinação, se a combinação falhar, ele perde os itens como normalmente seria. O código postado é 99%, o resto é com a criatividade de cada um.

E se você fizer o Rollback do momento pós-combinação, e se tiver algum item ele jogar pro baú ou inventário automaticamente?

Ou até mesmo ele salvar apenas onde o item estava antes da combinação, mas jogar o item de depois? Será que é possível?

Sou iniciante em C++, senão tentava fazer aqui..

Se bem que dá pra falar que não salvou pq a net do cara caiu antes de fazer a combinação.

romariols
05/04/2020, 10:28 PM
Não da pra fazer isso pós-combinação pq as informações ficam salvas no momento de abertura e fechamento do NPC, e quem faz isso é o DataServer, com o fix da Chaos Machine Duper não é possível abrir Baú e Chaos Machine simultaneamente. Bom isso foi o melhor q eu consegui fazer, com ctz deve haver outro meios, principalmente em versões maiores.

louis
06/04/2020, 09:51 AM
@romariols ([Only registered and activated users can see links])

Tentei forçar o bug em meu servidor de 2 maneiras
Utilizo a source do Update 13 do louis (Season 4).

Tentei deixa um item +11 na chaos machine, só coloquei os itens na CM e matei o processo no Gerenciador De Arquivos.
[Only registered and activated users can see links])

Outra forma foi colocar para MIX o item e logo em seguida dei ALT + F4 antes de terminar a combinação
Em ambos os casos os itens voltaram para o meu inventário...
[Only registered and activated users can see links]

muemu base já tem o rollback de fabrica ...

LaMO
06/04/2020, 07:05 PM
Não da pra fazer isso pós-combinação pq as informações ficam salvas no momento de abertura e fechamento do NPC, e quem faz isso é o DataServer, com o fix da Chaos Machine Duper não é possível abrir Baú e Chaos Machine simultaneamente. Bom isso foi o melhor q eu consegui fazer, com ctz deve haver outro meios, principalmente em versões maiores.

Não estou falando que não ficou bom, longe disso... Só estou dando mais ideias de como melhorar um código que já é bom.