Th, 2024-03-28, 20:26
Diablo: The Hell
Приветствую Вас Новичок | RSS
Главная | Fixing the duping bug - Diablo: The Hell - forums | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Diablo: The Hell - forums » The Hell forum [ENG] » Hellforge » Fixing the duping bug (trying to fix Duping bug...)
Fixing the duping bug
Mordor Date: Su, 2007-12-16, 18:55 | Message # 1
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
I need Diablo v1.07 EXE file. Anyone has one? Let me know. This is important
 
Tykian Date: Su, 2007-12-16, 23:22 | Message # 2
Leather Armor
Группа: Игрок
Посты: 18
Репутация: 0
Замечания: 0%
Статус: Offline
Best I can do, create a seperate installation of Diablo, and use this to make it 1.07
Patch


Edited by Tykian - Su, 2007-12-16, 23:22
 
Mordor Date: Su, 2007-12-16, 23:32 | Message # 3
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
I managed to look through D109 code. That actually turned out to be enough.

I'm trying to implement Dr.Zed's dupe fix patch. It was originally written for D107, but I found its implementation on D109, too. Alas, I didn't find how to do it with Hellfire.

I'm sitting here at the moment, trying to apply it on TheHell's EXE.

Currently, the game doesn't crash when operatng items in inventory, but duping is still not fixed.

The code needs further adjustments and I don't know how to do it. Haven't even found how to substitute some of those pointers. I have successfully substituted one, but the rest of them.. Still nothing.

 
Muzozavr Date: Mn, 2007-12-17, 00:02 | Message # 4
Leather Armor
Группа: Игрок
Посты: 30
Репутация: 1
Замечания: 0%
Статус: Offline
Losers that would cheat generally don't download harder mods, y'know.

no russian language here please


Only zombies and gravediggers on level 1? *yawn*

Edited by Mordor - Mn, 2007-12-17, 00:10
 
Mordor Date: Mn, 2007-12-17, 00:12 | Message # 5
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
anyway, I tend to think that the scarcity of elixirs and inability to buy them will contribute to ppl becoming cheating minority wink

if this succeeds, that would lessen the amount of it

 
Tykian Date: Mn, 2007-12-17, 00:12 | Message # 6
Leather Armor
Группа: Игрок
Посты: 18
Репутация: 0
Замечания: 0%
Статус: Offline
If you want, I can look into it, I also have some friends in high places, who may be able to help.
(Also, I just noticed Ulmo helped on this mod, I know him)
 
Mordor Date: Mn, 2007-12-17, 00:15 | Message # 7
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
do please, I'll provide what code I have at the moment with comments

Ulmo's contribution to D1/HF modding was great, I still use his map editing tools

 
Mordor Date: Mn, 2007-12-17, 00:30 | Message # 8
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
below is the extract from TH mod Notes. What I have implemented in the executable is marked bold (at the end). As I said above, further modification is too tough because I don't know which of those pointers are right, I don;t know if they should be replaced with something else? Diablo corresponding code seems to differ too much from Hellfire which confuses me even further.
_________________________________
Dr.Zed's Fix to the 'duping' bug. (anti-dupe fix)

0041E5E2
0041E...
0041EA5C

0041E5E2:
E8 [6488FEFF] call 00406E4B
90 nop

00406E4B:
6A5C push 0000005C
8DB5 30CA6800 lea esi, dword ptr [ebp+0068CA30] item on cursor
BF 9CBB6900 mov edi, 0069BB9C
59 pop ecx
F3 repz
A5 movsd
8DB0 486D6300 lea esi, dword ptr [eax+00636D48]
833D 0CBD6900 27 cmp dword ptr [0069BD0C], 00000027
7E [07] jle SKIP
C605 0CBD6900 27 mov byte ptr [0069BD0C], 27 max player #4 at 39 items
SKIP:
C3 ret

0041EA5C:
E9 [B5980200] jmp 0042092E <00448316>
90 90 90 nop x3

0042092E: <00448316:>
6A5C push 0000000C
(8DB5 14BD6800 lea esi, dword ptr [ebp+0068BD14])
BE 9CBB6900 mov esi, 0069BB9C
90 nop
8DBD 30CA6800 lea edi, dword ptr [ebp+0068CA30]
59 pop ecx
F3 repz
A5 movsd
5F pop edi
5E pop esi
5D pop ebp
5B pop ebx
83C4 1C add esp, 0000001C
C3 ret

Was:
0041E5BF:
0F84 [97040000] je 0041EA5C

Now:
0041E5BF: (0001D9BF)
0F84 [xxxxxxxx] je 0042093F

=================================================
________________________________________________________

Zenda's try ??: (it wasn't implemented in TD)
___________________________________________________________________
------------------------------------------------------------------ ---------------------------------------------------
Dr.Zed's Dupefix for Diablo 1.07

Requires 71 bytes of free code.

Dr.Zed wrote:
Fix to the 'duping' bug. Note that part of this code is checking if player 4's 40th inventory
slot is in use and, if so, deletilg it. This code uses that memory slot. If this wasn't done,
problems would occur.

Oh btw, it is trivial, but if the code made sure not to use the local player's data (like if the
fourth player used the third player's data), no one would actually lose data. By this I mean,
if player 4 has 40 1x1 items, and player 1 uses this data space, player 4 isn't affected but
player 1 will 'see' his backpack as only 39 items. I don't think the game tracks other players
backpacks all that well anyway.

However, this is minor and not worth worrying about....

:0041E5E2 E8D8140300 call 0044FABF
:0041E5E7 90 nop

....47A bytes between 1st jumper and 2nd.... (41ea5c - 41e5e2 = 47a)

:0041EA5C E986100300 jmp 0044FAE7
:0041EA61 90 nop
:0041EA62 90 nop
:0041EA63 90 nop

:0044FABF 6A5C push 0000005C
:0044FAC1 8DB530CA6800 lea esi, dword ptr [ebp+0068CA30]
:0044FAC7 BF9CBB6900 mov edi, 0069BB9C
:0044FACC 90 nop
:0044FACD 59 pop ecx
:0044FACE F3 repz
:0044FACF A5 movsd
:0044FAD0 8DB0486D6300 lea esi, dword ptr [eax+00636D48]
:0044FAD6 833D0CBD690027 cmp dword ptr [0069BD0C], 00000027
:0044FADD 7E07 jle 0044FAE6
:0044FADF C6050CBD690027 mov byte ptr [0069BD0C], 27
:0044FAE6 C3 ret

:0044FAE7 6A5C push 0000005C
:0044FAE9 8DB514BD6800 lea esi, dword ptr [ebp+0068BD14]
:0044FAEF BE9CBB6900 mov esi, 0069BB9C
:0044FAF4 90 nop
:0044FAF5 8DBD30CA6800 lea edi, dword ptr [ebp+0068CA30]
:0044FAFB 59 pop ecx
:0044FAFC F3 repz
:0044FAFD A5 movsd
:0044FAFE 5F pop edi
:0044FAFF 5E pop esi
:0044FB00 5D pop ebp
:0044FB01 5B pop ebx
:0044FB02 83C41C add esp, 0000001C
:0044FB05 C3 ret
-------------------------------------------------------------------------------------------------------------------

for D1.09:

Notes:
Requires 69 bytes free space.

:0041DCE1 8DB0285A6300 lea esi, dword ptr [eax+00635A28] ;item to pick up
->
:0041DCE1 E8???????? call [free space 1]
:0041DCE6 90 nop

---

:0041E0FB 5F pop edi
:0041E0FC 5E pop esi
:0041E0FD 5D pop ebp
:0041E0FE 5B pop ebx
:0041E0FF 83C418 add esp, 00000018
:0041E102 C3 ret
->
:0041E0FB E9???????? jmp [free space 2]
:0041E100 90 nop
:0041E101 90 nop
:0041E102 90 nop

--- free space 1 ---

6A5C push 0000005C
8DB500B76800 lea esi, dword ptr [ebp+0068B700] ;item on cursor
BF6CA86900 mov edi, 0069A86C
59 pop ecx
F3 repz
A5 movsd
8DB0285A6300 lea esi, dword ptr [eax+00635A28] ;item to pick up
833DDCA9690027 cmp dword ptr [0069A9DC], 00000027 ;39th inventory slot
7E07 jle 0044FAE6
C605DCA9690027 mov byte ptr [0069A9DC], 27
C3 ret

--- free space 2 ---

6A5C push 0000005C
8DB5C4AC6800 lea esi, dword ptr [ebp+0068ACC4] ;?
BE6CA86900 mov esi, 0069A86C
8DBD00B76800 lea edi, dword ptr [ebp+0068B700] ;item on cursor
59 pop ecx
F3 repz
A5 movsd
5F pop edi
5E pop esi
5D pop ebp
5B pop ebx
83C418 add esp, 00000018
C3 ret

__________________________________________________________________

Diablo:

:0041E5C5 8B442420 mov eax, dword ptr [esp+20]
:0041E5C9 8BEB mov ebp, ebx
:0041E5CB 69C070010000 imul eax, 00000170
:0041E5D1 69EDD8540000 imul ebp, 000054D8
:0041E5D7 6681A04C6D6300FF7F and word ptr [eax+00636D4C], 7FFF
:0041E5E0 6A5C push 0000005C
:0041E5E2 8DB0486D6300 lea esi, dword ptr [eax+00636D48] from here call made to 406e4b ????
:0041E5E8 8DBD30CA6800 lea edi, dword ptr [ebp+0068CA30]
:0041E5EE 59 pop ecx
:0041E5EF 89742428 mov dword ptr [esp+28], esi
:0041E5F3 F3 repz
:0041E5F4 A5 movsd
:0041E5F5 8BCB mov ecx, ebx
:0041E5F7 89442424 mov dword ptr [esp+24], eax
:0041E5FB E880FCFFFF call 0041E280
:0041E600 8BCB mov ecx, ebx
:0041E602 E8F7FBFFFF call 0041E1FE
:0041E607 8BCB mov ecx, ebx
:0041E609 E8A4FBFFFF call 0041E1B2
:0041E60E 8B8DF0CA6800 mov ecx, dword ptr [ebp+0068CAF0]
:0041E614 83C10C add ecx, 0000000C
:0041E617 E8388EFEFF call 00407454
:0041E61C 83BD38CA68000B cmp dword ptr [ebp+0068CA38], 0000000B

Hellfire:

:004219C5 8BC2 mov eax, edx
:004219C7 69C074010000 imul eax, 00000174
:004219CD 89442418 mov dword ptr [esp+18], eax
:004219D1 3988B4636800 cmp dword ptr [eax+006863B4], ecx
:004219D7 7409 je 004219E2
:004219D9 6681A084626800FF7F and word ptr [eax+00686284], 7FFF
:004219E2 8B442418 mov eax, dword ptr [esp+18]
:004219E6 8BEB mov ebp, ebx
:004219E8 69EDC8550000 imul ebp, 000055C8
:004219EE 8DB080626800 lea esi, dword ptr [eax+00686280] call from here ???
:004219F4 A114AE6E00 mov eax, dword ptr [006EAE14]
:004219F9 6A5D push 0000005D
:004219FB 8974242C mov dword ptr [esp+2C], esi
:004219FF 8DBC28A4530000 lea edi, dword ptr [eax+ebp+000053A4]
:00421A06 59 pop ecx
:00421A07 F3 repz
:00421A08 A5 movsd
:00421A09 8BCB mov ecx, ebx
:00421A0B E8D2F8FFFF call 004212E2
:00421A10 8BCB mov ecx, ebx
:00421A12 E814F8FFFF call 0042122B
:00421A17 8BCB mov ecx, ebx
:00421A19 E8C0F7FFFF call 004211DE
:00421A1E A114AE6E00 mov eax, dword ptr [006EAE14]
:00421A23 8B8C2864540000 mov ecx, dword ptr [eax+ebp+00005464]
:00421A2A 83C10C add ecx, 0000000C
:00421A2D E86460FEFF call 00407A96
:00421A32 A114AE6E00 mov eax, dword ptr [006EAE14]
:00421A37 03C5 add eax, ebp
:00421A39 83B8AC5300000B cmp dword ptr [eax+000053AC], 0000000B

***********************

:004219EE 8DB080626800 lea esi, dword ptr [eax+00686280]
changed into
:004219EE E8???????? call 00??????
:004219F3 90 nop

:00421EC5 5F pop edi
:00421EC6 5E pop esi
:00421EC7 5D pop ebp
:00421EC8 5B pop ebx
:00421EC9 83C41C add esp, 0000001C
:00421ECC C3 ret
changed into
:00421EC5 E9???????? jmp 00??????
:00421ECA 909090 3*nop

***********************

:0044FABF 6A5C push 0000005C
:0044FAC1 8DB530CA6800 lea esi, dword ptr [ebp+0068CA30]
:0044FAC7 BF9CBB6900 mov edi, 0069BB9C address of last space in inventory
:0044FACC 90 nop
:0044FACD 59 pop ecx
:0044FACE F3 repz
:0044FACF A5 movsd
:0044FAD0 8DB0486D6300 lea esi, dword ptr [eax+00636D48]
:0044FAD6 833D0CBD690027 cmp dword ptr [0069BD0C], 00000027 number of items in inventory
:0044FADD 7E07 jle 0044FAE6
:0044FADF C6050CBD690027 mov byte ptr [0069BD0C], 27
:0044FAE6 C3 ret

becomes for HF:

:004219FF 8DBC28A4530000 lea edi, dword ptr [eax+ebp+000053A4]
:00422DBF 8BF7 mov esi, edi

:004219EE E8???????? call 00??????

:00422C9E 51 push ecx
:0042075D 81C164460000 add ecx, 00004664
:00401003 8BF9 mov edi, ecx
:004219F9 6A5D push 0000005D
:0044FACD 59 pop ecx
:0044FACE F3 repz
:0044FACF A5 movsd
:004219EE 8DB080626800 lea esi, dword ptr [eax+00686280]
:00422CCA 59 pop ecx
:0042075D 81C1D8470000 add ecx, 000047D8
:0042F9A9 833927 cmp dword ptr [ecx], 00000027
:0044FADD 7E03 jle 00??????
:0047E523 C60127 mov byte ptr [ecx], 27
:0044FAE6 C3 ret

**************************

:00401B8C 8BCB mov ecx, ebx ebx = local character
:004583B0 41 inc ecx
:004584B1 83F904 cmp ecx, 00000004
:00456E10 7202 jb 00??????
:0045852D 33C9 xor ecx, ecx
:0045AE04 69C9C8550000 imul ecx, 000055C8
:0043C889 030D14AE6E00 add ecx, dword ptr [006EAE14]

***********************************

:0044FAE7 6A5C push 0000005C
:0044FAE9 8DB514BD6800 lea esi, dword ptr [ebp+0068BD14]
:0044FAEF BE9CBB6900 mov esi, 0069BB9C address of last space in inventory
:0044FAF4 90 nop
:0044FAF5 8DBD30CA6800 lea edi, dword ptr [ebp+0068CA30]
:0044FAFB 59 pop ecx
:0044FAFC F3 repz
:0044FAFD A5 movsd
:0044FAFE 5F pop edi
:0044FAFF 5E pop esi
:0044FB00 5D pop ebp
:0044FB01 5B pop ebx
:0044FB02 83C41C add esp, 0000001C
:0044FB05 C3 ret

becomes for HF:

complications arise here, because of the handling of Tome and Bag.

:0044FAE9 8DB514BD6800 lea esi, dword ptr [ebp+0068BD14]

:004219EE E8???????? call 00??????
:0042075D 81C164460000 add ecx, 00004664
:00422222 8BF1 mov esi, ecx

:0044FAF5 8DBD30CA6800 lea edi, dword ptr [ebp+0068CA30]

:0044FAE7 6A5D push 0000005D
:0044FAFB 59 pop ecx
:0044FAFC F3 repz
:0044FAFD A5 movsd
:0044FAFE 5F pop edi
:0044FAFF 5E pop esi
:0044FB00 5D pop ebp
:0044FB01 5B pop ebx
:0044FB02 83C41C add esp, 0000001C
:0044FB05 C3 ret

****************************************

number of items in inventory:

:00422B3C 8B88D8470000 mov ecx, dword ptr [eax+000047D8]

00004664] start last item (first + 39*174h)

+00000DB8] start first inventory object
+00000DC0] item type first inventory object

****************************************
+++++++++++++++++++++++++

Anti-dupe in The Hell:

free space #1: 0045A2F4 > distance = 38901 bytes -> E801890300
free space #2: 0045A318 >

1) call from 004219EE to 0045a2f4 (596f4) -> 38901 bytes -> e801890300

2) jump from 00421ec5 to 0045a31b (5971b) -> 38451 bytes -> e951840300

686280 -> 806268 seems right

part 1: CALL

:004219EE 8DB080626800 lea esi, dword ptr [eax+00686280]
into:
:004219EE E801890300 call 0045A2F4
:004219F3 90 nop

inserted at free space from NoDropAtDeath:
:0045A2F4 6A5C push 0000005C
:0045A2F6 8DB530CA6800 lea esi, dword ptr [ebp+0068CA30] incorrect ???
:0045A2FC BF9CBB6900 mov edi, 0069BB9C
:0045A301 59 pop ecx
:0045A302 F3 repz
:0045A303 A5 movsd
:0045A304 8DB080626800 lea esi, dword ptr [eax+00686280] this ptr seems to be correct by far
:0045A30A 833D0CBD690027 cmp dword ptr [0069BD0C], 00000027 incorrect ???
:0045A311 7E07 jle 0045A31A pointer to return from cal - looks correct
:0045A313 C6050CBD690027 mov byte ptr [0069BD0C], 27

* Referenced by a (U)nconditional or ©onditional Jump at Address:
|:0045A311©
|
:0045A31A C3 ret

part 2: JUMP

:00421EC5 5F pop edi
:00421EC6 5E pop esi
:00421EC7 5D pop ebp
:00421EC8 5B pop ebx
:00421EC9 83C41C add esp, 0000001C
:00421ECC C3 ret
into:
:00421EC5 E951840300 jmp 0045A31B
:00421ECA 90 nop
:00421ECB 90 nop
:00421ECC 90 nop

inserted at free space from NoDropAtDeath:
:0045A31B 6A5C push 0000005C
:0045A31D 8DB514BD6800 lea esi, dword ptr [ebp+0068BD14] incorrect ???
:0045A323 BE9CBB6900 mov esi, 0069BB9C
:0045A328 8DBD30CA6800 lea edi, dword ptr [ebp+0068CA30] incorrect ???
:0045A32E 59 pop ecx
:0045A32F F3 repz
:0045A330 A5 movsd
:0045A331 5F pop edi
:0045A332 5E pop esi
:0045A333 5D pop ebp
:0045A334 5B pop ebx
:0045A335 83C41C add esp, 0000001C
:0045A338 C3 ret

 
Tykian Date: Mn, 2007-12-17, 02:15 | Message # 9
Leather Armor
Группа: Игрок
Посты: 18
Репутация: 0
Замечания: 0%
Статус: Offline
I'm no expert, but I don't see a problem there...
I've copied this and sent it to a friend, hope you don't mind. He's no more experienced then me, but he might see something.
 
Mordor Date: Mn, 2007-12-17, 02:34 | Message # 10
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
Hellfire uses (maybe sometimes - dunno for sure) different pointers. Thus pointers from Diablo must be adjusted. But I don't know what they are.

It would help me if I could decipher that code but I still can't.

But I suspect that adjusting the pointers (marked with "incorrect" to the right) might be all what's needed. I might be wrong here, as well.

 
Tykian Date: Mn, 2007-12-17, 05:35 | Message # 11
Leather Armor
Группа: Игрок
Посты: 18
Репутация: 0
Замечания: 0%
Статус: Offline
Currently, a friend and I are working on deciphering the root of the code.

When we figure it out, we'll let you know.

 
Mordor Date: Mn, 2007-12-17, 18:46 | Message # 12
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
alrite
 
Mordor Date: We, 2008-02-27, 11:35 | Message # 13
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
in case some of you are familiar with C language, I'm giving here the function that is causing item dupe. in former code there was a Call made from address 4219EE. it was in this function. anyway, here's the code. if you can comment on this anything, do it please.
______________

Code

//----- (00421978) --------------------------------------------------------
int __fastcall WithCharacterAndStruct372(int aPlayerIndex, signed int Struct372Index)
{
   int PlayerIndex; // ebx@1
   int result; // eax@4
   int CharacterOffset; // ebp@7
   int v5; // ecx@8
   bool v6; // esi@8
   signed int v7; // edi@31
   signed int v8; // edi@34
   signed int v9; // edi@37
   signed int v10; // edi@40
   signed int v11; // edi@45
   signed int v12; // edi@48
   signed int v13; // edi@51
   signed int v14; // edi@56
   signed int *v15; // edi@61
   signed int v16; // edi@64
   signed int v17; // edi@67
   signed int v18; // edi@70
   signed int v19; // edi@75
   signed int v20; // edi@78
   int v21; // ecx@82
   int v22; // edx@86
   int v23; // ecx@87
   char v24; // al@93
   int v25; // ecx@96
   signed int v26; // eax@8
   signed int v27; // eax@18
   bool v28; // eax@33
   bool v29; // eax@36
   bool v30; // eax@39
   bool v31; // eax@42
   bool v32; // eax@47
   bool v33; // eax@50
   bool v34; // eax@53
   bool v35; // eax@58
   bool v36; // eax@63
   bool v37; // eax@72
   bool v38; // eax@77
   bool v39; // eax@80
   int Index2; // [sp+24h] [bp-8h]@1
   int SlotOffset; // [sp+18h] [bp-14h]@5
   const void *ItemOnMapPtr; // [sp+28h] [bp-4h]@7
   int v43; // [sp+14h] [bp-18h]@21
   int v44; // [sp+10h] [bp-1Ch]@21
   signed int v45; // [sp+20h] [bp-Ch]@25
   int v46; // [sp+1Ch] [bp-10h]@25

   PlayerIndex = aPlayerIndex;
   Index2 = Struct372Index;
   if ( dword_4D0E44 )
   {
     dword_4D0E44 = 0;
     dword_4D1108 = 0;
   }
   if ( Struct372Index == 127
     || (result = Struct372Array[Struct372Index].MapCol, *(&Map112x112[112 * Struct372Array[Struct372Index].MapRow]
                    + result)) )
   {
     SlotOffset = 372 * Struct372Index;
     if ( Struct372Array[Struct372Index].field_134 )
       LOWORD(Struct372Array[Struct372Index].field_4) &= 0x7FFFu;
     CharacterOffset = 21960 * aPlayerIndex;
     ItemOnMapPtr = (char *)Struct372Array + SlotOffset;
     memcpy(
       &CharactersPtr[aPlayerIndex].SomeStruct372,
       (char *)Struct372Array + SlotOffset,
       sizeof(CharactersPtr[aPlayerIndex].SomeStruct372));
     sub_4212E2(aPlayerIndex);
     sub_42122B(PlayerIndex);
     sub_4211DE(PlayerIndex);
     sub_407A96(CharactersPtr[PlayerIndex].SomeStruct372.field_C0 + 12);
     if ( CharactersPtr[PlayerIndex].SomeStruct372.field_8 == 11 )
     {
       v26 = sub_41F6CB(PlayerIndex);
       v6 = v26;
       if ( !v26 )
       {
         v5 = SlotOffset;
         *(int *)((char *)&Struct372Array[0].Price + SlotOffset) = *(int *)((char *)&CharactersPtr->SomeStruct372.Price
                    + CharacterOffset);
       }
       goto LABEL_81;
     }
     v6 = 0;
     v5 = *(int *)((char *)&CharactersPtr->Appearance + CharacterOffset) & 0xF;
     if ( (!(*(int *)((char *)&CharactersPtr->Appearance + CharacterOffset) & 0xF)
        || v5 == 1
        || *((_BYTE *)&CharactersPtr->Class + CharacterOffset) >= 4 && (v5 == 6 || v5 == 2))
       && CharactersPtr[PlayerIndex].Unknown <= 3
       && *(_DWORD *)(&CharactersPtr->SomeStruct372.field_164 + CharacterOffset)
       && *((_BYTE *)&CharactersPtr->SomeStruct372.field_BC + CharacterOffset + 2) == 1 )
     {
       v27 = sub_41F9AF(PlayerIndex);
       v6 = v27;
       if ( !v27 )
       {
LABEL_21:
         v5 = dword_4D1620;
         v43 = dword_4D1630;
         v44 = dword_4D1620;
         if ( dword_4D1630 == 1 )
         {
           if ( dword_4D1620 == dword_4D1630 )
           {
             v5 = (int)CharactersPtr;
             if ( *(_DWORD *)(&CharactersPtr->SomeStruct372.field_164 + CharacterOffset) )
             {
               if ( BaseItemsPtr[*(int *)((char *)&CharactersPtr->SomeStruct372.field_168 + CharacterOffset)].UseOnceFlag )
               {
                 v45 = 0;
                 v46 = 21960 * PlayerIndex;
                 while ( !v6 )
                 {
                   if ( *(_DWORD *)(v5 + v46 + 18444) == -1 )
                   {
                     memcpy((void *)(v5 + v46 + 18436), (const void *)(CharacterOffset + 21412 + v5), 0x174u);
                     sub_42463E(PlayerIndex);
                     v6 = 1;
                     dword_68550C = 1;
                   }
                   ++v45;
                   v46 += 372;
                   if ( v45 >= 8 )
                     break;
                   v5 = (int)CharactersPtr;
                 }
               }
             }
             v7 = 30;
             do
             {
               if ( v6 )
                 break;
               v28 = sub_41F373(PlayerIndex, v7++, 1, 1, 1);
               v6 = v28;
             }
             while ( v7 <= 39 );
             v8 = 20;
             do
             {
               if ( v6 )
                 break;
               v29 = sub_41F373(PlayerIndex, v8++, 1, 1, 1);
               v6 = v29;
             }
             while ( v8 <= 29 );
             v9 = 10;
             do
             {
               if ( v6 )
                 break;
               v30 = sub_41F373(PlayerIndex, v9++, 1, 1, 1);
               v6 = v30;
             }
             while ( v9 <= 19 );
             v10 = 0;
             do
             {
               if ( v6 )
                 break;
               v31 = sub_41F373(PlayerIndex, v10++, 1, 1, 1);
               v6 = v31;
             }
             while ( v10 <= 9 );
           }
         }
         if ( v43 == 1 )
         {
           if ( v44 == 2 )
           {
             v11 = 29;
             do
             {
               if ( v6 )
                 break;
               v32 = sub_41F373(PlayerIndex, v11--, 1, 2, 1);
               v6 = v32;
             }
             while ( v11 >= 20 );
             v12 = 9;
             do
             {
               if ( v6 )
                 break;
               v33 = sub_41F373(PlayerIndex, v12--, 1, 2, 1);
               v6 = v33;
             }
             while ( v12 >= 0 );
             v13 = 19;
             do
             {
               if ( v6 )
                 break;
               v34 = sub_41F373(PlayerIndex, v13--, 1, 2, 1);
               v6 = v34;
             }
             while ( v13 >= 10 );
           }
           if ( v43 == 1 )
           {
             if ( v44 == 3 )
             {
               v14 = 0;
               do
               {
                 if ( v6 )
                   break;
                 v35 = sub_41F373(PlayerIndex, v14++, 1, 3, 1);
                 v6 = v35;
               }
               while ( v14 < 20 );
             }
           }
         }
         if ( v43 == 2 )
         {
           if ( v44 == 2 )
           {
             v15 = (signed int *)L"\b";
             do
             {
               if ( v6 )
                 break;
               v36 = sub_41F373(PlayerIndex, *v15, 2, 2, 1);
               ++v15;
               v6 = v36;
             }
             while ( (signed int)v15 < (signed int)"Data\\Inv\\Inv.CEL" );
             v16 = 21;
             do
             {
               if ( v6 )
                 break;
               v6 = sub_41F373(PlayerIndex, v16, 2, 2, 1);
               v16 += 2;
             }
             while ( v16 < 29 );
             v17 = 1;
             do
             {
               if ( v6 )
                 break;
               v6 = sub_41F373(PlayerIndex, v17, 2, 2, 1);
               v17 += 2;
             }
             while ( v17 < 9 );
             v18 = 10;
             do
             {
               if ( v6 )
                 break;
               v37 = sub_41F373(PlayerIndex, v18++, 2, 2, 1);
               v6 = v37;
             }
             while ( v18 < 19 );
           }
           if ( v43 == 2 )
           {
             if ( v44 == 3 )
             {
               v19 = 0;
               do
               {
                 if ( v6 )
                   break;
                 v38 = sub_41F373(PlayerIndex, v19++, 2, 3, 1);
                 v6 = v38;
               }
               while ( v19 < 9 );
               v20 = 10;
               do
               {
                 if ( v6 )
                   break;
                 v39 = sub_41F373(PlayerIndex, v20++, 2, 3, 1);
                 v6 = v39;
               }
               while ( v20 < 19 );
             }
           }
         }
LABEL_81:
         if ( v6 )
         {
           v21 = *(int *)((char *)&Struct372Array[0].MapRow + SlotOffset);
           result = *(int *)((char *)&Struct372Array[0].MapCol + SlotOffset);
           *(&Map112x112[112 * v21] + result) = 0;
           if ( PortalToLevel == 21 )
           {
             if ( v21 == dword_691CA8 )
             {
               if ( result == dword_691CAC )
               {
                 dword_691E1C = -1;
                 byte_691CE4 = 0;
                 dword_691CBC = 0;
                 dword_691CC0 = 0;
                 dword_691CC4 = 0;
                 dword_691CC8 = 0;
                 dword_691CEC = 0;
                 dword_691CE8 = 0;
               }
             }
           }
           v22 = 0;
           while ( v22 < dword_6920DC )
           {
             v23 = DwordArray127[v22];
             if ( v23 == Index2 )
             {
               result = sub_427F68(v23, v22);
               v22 = 0;
             }
             else
             {
               ++v22;
             }
           }
           return result;
         }
         if ( PlayerIndex == CurrentHero[0] )
         {
           v24 = *((_BYTE *)&CharactersPtr->Class + CharacterOffset);
           if ( !v24 )
             goto LABEL_107;
           if ( v24 == 1 )
             goto LABEL_108;
           if ( v24 == 2 )
           {
             LOBYTE(v5) = 0;
             v25 = MayBeRND(v5, 3) + 531;
LABEL_103:
             sub_41850D(v25);
             goto LABEL_104;
           }
           if ( v24 == 3 )
           {
             LOBYTE(v5) = 0;
             v25 = MayBeRND(v5, 3) + 851;
             goto LABEL_103;
           }
           if ( v24 == 4 )
           {
LABEL_108:
             LOBYTE(v5) = 0;
             v25 = MayBeRND(v5, 3) + 634;
             goto LABEL_103;
           }
           if ( v24 == 5 )
           {
LABEL_107:
             LOBYTE(v5) = 0;
             v25 = MayBeRND(v5, 3) + 737;
             goto LABEL_103;
           }
         }
LABEL_104:
         memcpy((char *)CharactersPtr + CharacterOffset + 21412, ItemOnMapPtr, 0x174u);
         sub_427E8B(Index2, 1);
         sub_4471D5(
           1,
           11,
           *((_BYTE *)&Struct372Array[0].MapRow + SlotOffset),
           *((_BYTE *)&Struct372Array[0].MapCol + SlotOffset));
         *(int *)((char *)&CharactersPtr->SomeStruct372.field_8 + CharacterOffset) = -1;
         return sub_407AED();
       }
       sub_424ABF(PlayerIndex, 1);
     }
     if ( v6 )
       goto LABEL_81;
     goto LABEL_21;
   }
   return result;
}
 
Pyriel Date: Sa, 2008-03-01, 22:33 | Message # 14
Robe
Группа: Игрок
Посты: 12
Репутация: 3
Замечания: 0%
Статус: Offline
Today i've found a mod for hellfire where duping bug is 100% disabled (when trying to dupe item from ground gets to inventory, and item from belt dissapears). So, maybe the exe file will be useful for you.

link: http://www.thedark5.com/frames/mainframe.html

Edit:
Sry, i was trying to dupe gold, so it didnt work. Dupe bug isn't fixed here.


Arcane powers brings destruction.

Edited by Pyriel - Su, 2008-03-02, 00:20
 
Mordor Date: Sa, 2008-03-01, 22:42 | Message # 15
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
if you are talking about thedark53, then there is no dupefix there. I can record a video with duping items if you doubt it. both in SP and MP modes.

dupe fix was implemented in Diablo 107 and 109 versions. and I have yet to see a hellfire mod with dupefix.

 
Frinta Date: We, 2008-04-23, 04:43 | Message # 16
Studded Leather
Группа: Игрок
Посты: 39
Репутация: 2
Замечания: 0%
Статус: Offline
lol... duping is so damned hard on my computer... dry
i have to load so many programs ... and even then it takes about 5-10 minutes of attempts before I manage to successfully dupe an item. On my way way way older computers duping was so much easier. happy Good ol reliable piece of crap. happy


Jarulf's Guide Online
 
oli25 Date: We, 2008-04-23, 14:49 | Message # 17
Ring Mail
Группа: Игрок
Посты: 110
Репутация: 4
Замечания: 0%
Статус: Offline
So your a duper eh ? At least your telling it ... now everyone knows not to trade items with you.
 
Mordor Date: We, 2008-04-23, 15:13 | Message # 18
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
some day all the dupers will get a strong kick in the butt when the fix is done mad
 
oli25 Date: We, 2008-04-23, 15:52 | Message # 19
Ring Mail
Группа: Игрок
Посты: 110
Репутация: 4
Замечания: 0%
Статус: Offline
yeah make something that detect duped item. And automaticly deletes characters saves. But duped items that are in inventory or in stash (sometimes games dupes items by itself...)
 
Lycanthrope Date: We, 2008-04-23, 18:59 | Message # 20
Robe
Группа: Игрок
Посты: 10
Репутация: 0
Замечания: 0%
Статус: Offline
There acctualy is a built in (yet its somewhat halfassed) dupe protection. If there are two items on the ground whit the exact same id then they get destroyed. Except the original.

All these russian letters tend to confuse me abit. Ill try figuring stuff out in time tough
 
Mordor Date: We, 2008-04-23, 20:13 | Message # 21
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
Dr.Zed's dupefix didn't fix duping from monsters if I understood how it is functioning correctly.

It restricted duping items to players, who dupe by clicking on a belt item at the moment of picking up item from the ground. See?

 
Frinta Date: We, 2008-04-23, 21:31 | Message # 22
Studded Leather
Группа: Игрок
Посты: 39
Репутация: 2
Замечания: 0%
Статус: Offline
Quote
So your a duper eh ? At least your telling it ... now everyone knows not to trade items with you.

i urge you take that back, I am not sitting here and taking that lightly, why? because your telling people to not play with me! I have legit characters and i have non-legit characters. That's just how it is. Furthermore... I am
a] not playing TH yet (don't even ask) (so incase you were wondering... that duping I'm doing is on diablo 1.09b)
b] open and honest about whether my characters are legit or not (AND ALWAYS ALWAYS ALWAYS ALWAYS HAVE BEEN)

Oh and about my previous post, somehow updating out of 1.00 straight into 1.09b made the duping alot easier to do. biggrin


Jarulf's Guide Online

Edited by Frinta - We, 2008-04-23, 21:33
 
oli25 Date: We, 2008-04-23, 21:39 | Message # 23
Ring Mail
Группа: Игрок
Посты: 110
Репутация: 4
Замечания: 0%
Статус: Offline
I'm not telling ppl to not play with you. Everyone will decide by his own. But I think when ppl will know your duping they won't want to trade with you. So how do we know you will use the legit ones ?
 
Frinta Date: We, 2008-04-23, 22:42 | Message # 24
Studded Leather
Группа: Игрок
Посты: 39
Репутация: 2
Замечания: 0%
Статус: Offline
If my above post didn't convince you then what will?

Furthermore what about hacks? how can anyone truely ever trust anyone?
atleast you have my word and there is nothing more I can say
I actually like to play legitimately... as for trades, I don't trust anyone myself.

I would really like the dupe bug fixed. I'm not defending it, I want it gone as much as the next person. I'm just defending myself, you seem to have taken to being suspicous of me... come on... everyone has my word and not just in this post in this thread, but everyone I play with that I will play legit ESPECIALLY if I can find other legit people to play with. Otherwise it might turn out like the d2lod mod I was playing where I think some guys I was playing with were not totally legit and some trained me and others gave me an item or two. dry
Didn't really matter anyway... I don't think I found a single legit player in the whole time I played it. dry dry dry


Jarulf's Guide Online
 
oli25 Date: Th, 2008-04-24, 01:03 | Message # 25
Ring Mail
Группа: Игрок
Посты: 110
Репутация: 4
Замечания: 0%
Статус: Offline
I am suspicious cuz I was roled few times by dupers on trading (they actually don't play mod anymore for around 2 months, probobly bored cuz of max stats etc)
Yeah if you wanna to fully enjoy this awesome mod just don't dupe wink
 
Frinta Date: Th, 2008-04-24, 03:19 | Message # 26
Studded Leather
Группа: Игрок
Посты: 39
Репутация: 2
Замечания: 0%
Статус: Offline
I won't, but can you tell me how many legit players are on hamachi to play with?
It would be really cool if there are alot of people playing.


Jarulf's Guide Online
 
oli25 Date: Th, 2008-04-24, 16:58 | Message # 27
Ring Mail
Группа: Игрок
Посты: 110
Репутация: 4
Замечания: 0%
Статус: Offline
Your askin' how many legit chars are playing on hamachi? Better ask if there is someone who plays it at all... I haven't been online on hamachi for a while cuz no one is playing it anymore sad
 
Frinta Date: Th, 2008-04-24, 20:47 | Message # 28
Studded Leather
Группа: Игрок
Посты: 39
Репутация: 2
Замечания: 0%
Статус: Offline
MAKE THEM PLAY cry cry cry

Jarulf's Guide Online
 
Mordor Date: Th, 2008-04-24, 21:22 | Message # 29
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline
cut the flood
 
Diablo: The Hell - forums » The Hell forum [ENG] » Hellforge » Fixing the duping bug (trying to fix Duping bug...)
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024 Хостинг от uCoz