mirror of
https://gitlab.com/hashborgir/plugy.git
synced 2024-11-30 04:26:02 +00:00
v14.00 by Yohann
This commit is contained in:
parent
c8849ef0fa
commit
2597bc3946
@ -1,10 +1,10 @@
|
|||||||
/*======================================================================
|
/*======================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Declares the type for a STDCALL or FASTCALL function pointer
|
Declares the type for a STDCALL or FASTCALL function pointer
|
||||||
called N with arguments list P, returning R, namedInDLL D and at @A
|
called N with arguments list P, returning R, namedInDLL D and at @A
|
||||||
|
|
||||||
======================================================================*/
|
======================================================================*/
|
||||||
|
|
||||||
@ -149,144 +149,143 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//F7(STD, D2Common,00000,00000,00000,00000,10001,00000,00000,00000, DWORD, D2GetActIDFromLevel, (DWORD levelID));
|
//F8(STD, D2Common,00000,00000,00000,00000,10001,00000,00000,00000,00000, DWORD, D2GetActIDFromLevel, (DWORD levelID));
|
||||||
F8(STD, D2Common,00000,00000,00000,10188,11084,11109,10346,10907, 21AED0, DWORD, D2Common11084, (Room* ptRoom, DWORD zero));
|
F8(STD, D2Common,00000,00000,00000,10188,11084,11109,10346,10907,21AED0, DWORD, D2Common11084, (Room* ptRoom, DWORD zero));
|
||||||
F8(STD, D2Common,10057,10057,10057,10332,11021,10511,10826,10691, 21A1B0, DWORD, D2GetLevelID, (Room* ptRoom));
|
F8(STD, D2Common,10057,10057,10057,10332,11021,10511,10826,10691,21A1B0, DWORD, D2GetLevelID, (Room* ptRoom));
|
||||||
F8(STD, D2Common,10138,10138,10138,10623,10491,11043,10654,10716, 24E810, Room*, D2GetDropRoom, (Room* ptRoom, Position*, Position*, DWORD, DWORD, DWORD, DWORD));
|
F8(STD, D2Common,10138,10138,10138,10623,10491,11043,10654,10716,24E810, Room*, D2GetDropRoom, (Room* ptRoom, Position*, Position*, DWORD, DWORD, DWORD, DWORD));
|
||||||
//F7(STD, D2Common,10149,10149,10149,00000,00000,00000,00000,00000, Inventory*, D2GetInventory, (Unit* ptUnit));
|
//F8(STD, D2Common,10149,10149,10149,00000,00000,00000,00000,00000,00000, Inventory*, D2GetInventory, (Unit* ptUnit));
|
||||||
F8(STD, D2Common,10242,10242,10242,00000,00000,00000,00000,00000,00000, Unit*, D2Common10242, (Inventory* ptInventory, Unit* ptItem, DWORD bIsClient));
|
F8(STD, D2Common,10242,10242,10242,00000,00000,00000,00000,00000,00000, Unit*, D2Common10242, (Inventory* ptInventory, Unit* ptItem, DWORD bIsClient));
|
||||||
F8(STD, D2Common,10246,10246,10246,10855,10813,10289,10133,10402, 23B950, Unit*, D2CanPutItemInInv, (Inventory* ptInventory, Unit* ptItem, DWORD p3, DWORD zero, Unit* ptUnit, const char* file, DWORD line));
|
F8(STD, D2Common,10246,10246,10246,10855,10813,10289,10133,10402,23B950, Unit*, D2CanPutItemInInv, (Inventory* ptInventory, Unit* ptItem, DWORD p3, DWORD zero, Unit* ptUnit, const char* file, DWORD line));
|
||||||
F8(STD, D2Common,10243,10243,10243,10461,10827,10936,10646,10490, 23AD90, Unit*, D2InvRemoveItem, (Inventory* ptInventory, Unit* ptItem));
|
F8(STD, D2Common,10243,10243,10243,10461,10827,10936,10646,10490,23AD90, Unit*, D2InvRemoveItem, (Inventory* ptInventory, Unit* ptItem));
|
||||||
F8(STD, D2Common,10249,10249,10249,10880,11068,10436,11107,10963, 23BCC0, DWORD, D2InvAddItem, (Inventory* ptInventory, Unit* ptItem, DWORD posX, DWORD posY, DWORD vValueC, DWORD bIsClient, BYTE page));//result : boolean 0=echec ; vValueC = 0 for Game.dll, 1 for Clientdll
|
F8(STD, D2Common,10249,10249,10249,10880,11068,10436,11107,10963,23BCC0, DWORD, D2InvAddItem, (Inventory* ptInventory, Unit* ptItem, DWORD posX, DWORD posY, DWORD vValueC, DWORD bIsClient, BYTE page));//result : boolean 0=echec ; vValueC = 0 for Game.dll, 1 for Clientdll
|
||||||
F8(STD, D2Common,10250,10250,10250,00000,00000,00000,00000,00000, 00000, DWORD, D2Common10250, (const char* file, DWORD line, Inventory* ptInventory, DWORD posX, DWORD posY, DWORD vValueC, DWORD bIsClient, BYTE page));// result : boolean 0=echec ; vValueC = 0 for Game.dll, 1 for Clientdll
|
F8(STD, D2Common,10250,10250,10250,00000,00000,00000,00000,00000,00000, DWORD, D2Common10250, (const char* file, DWORD line, Inventory* ptInventory, DWORD posX, DWORD posY, DWORD vValueC, DWORD bIsClient, BYTE page));// result : boolean 0=echec ; vValueC = 0 for Game.dll, 1 for Clientdll
|
||||||
//F7(STD, D2Common,10257,10257,10257,00000,00000,00000,00000,00000, Unit*, D2GetItemFromBodyLoc, (Inventory* ptInventory, DWORD bodyloc));
|
//F8(STD, D2Common,10257,10257,10257,00000,00000,00000,00000,00000,00000, Unit*, D2GetItemFromBodyLoc, (Inventory* ptInventory, DWORD bodyloc));
|
||||||
F8(STD, D2Common,10273,10273,10273,00000,00000,00000,00000,00000, 00000, DWORD, D2Common10273, (Inventory* ptInventory, void* unknown));
|
F8(STD, D2Common,10273,10273,10273,00000,00000,00000,00000,00000,00000, DWORD, D2Common10273, (Inventory* ptInventory, void* unknown));
|
||||||
F8(STD, D2Common,10277,10277,10277,10402,10535,11151,10460,11040, 23B2C0, Unit*, D2InventoryGetFirstItem, (Inventory* ptInventory));
|
F8(STD, D2Common,10277,10277,10277,10402,10535,11151,10460,11040,23B2C0, Unit*, D2InventoryGetFirstItem, (Inventory* ptInventory));
|
||||||
F8(STD, D2Common,10304,10304,10304,10934,11140,10770,10464,10879, 23DFA0, Unit*, D2UnitGetNextItem, (Unit* ptItem));
|
F8(STD, D2Common,10304,10304,10304,10934,11140,10770,10464,10879,23DFA0, Unit*, D2UnitGetNextItem, (Unit* ptItem));
|
||||||
F8(STD, D2Common,10305,10305,10305,11095,10748,10852,11147,10897, 23DFD0, Unit*, D2GetRealItem, (Unit* ptUnit));
|
F8(STD, D2Common,10305,10305,10305,11095,10748,10852,11147,10897,23DFD0, Unit*, D2GetRealItem, (Unit* ptUnit));
|
||||||
//F7(STD, D2Common,10321,10321,10321,00000,00000,00000,00000,00000, SkillData*, D2GetLeftSkill, (Unit* ptChar));
|
//F8(STD, D2Common,10321,10321,10321,00000,00000,00000,00000,00000,00000, SkillData*, D2GetLeftSkill, (Unit* ptChar));
|
||||||
//F7(STD, D2Common,10322,10322,10322,00000,00000,00000,00000,00000, SkillData*, D2GetRightSkill, (Unit* ptChar));
|
//F8(STD, D2Common,10322,10322,10322,00000,00000,00000,00000,00000,00000, SkillData*, D2GetRightSkill, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10326,10326,00000,00000,00000,00000,00000,00000, 00000, DWORD, D2GetPosX, (Unit* ptUnit));//NOT IN 1.10
|
F8(STD, D2Common,10326,10326,00000,00000,00000,00000,00000,00000,00000, DWORD, D2GetPosX, (Unit* ptUnit));//NOT IN 1.10
|
||||||
//F7(STD, D2Common,10328,10328,10328,00000,00000,00000,00000,00000, void, D2SetPosX, (Unit* ptUnit, DWORD pos));
|
//F8(STD, D2Common,10328,10328,10328,00000,00000,00000,00000,00000,00000, void, D2SetPosX, (Unit* ptUnit, DWORD pos));
|
||||||
F8(STD, D2Common,10329,10329,00000,00000,00000,00000,00000,00000, 00000, DWORD, D2GetPosY, (Unit* ptUnit));//NOT IN 1.10
|
F8(STD, D2Common,10329,10329,00000,00000,00000,00000,00000,00000,00000, DWORD, D2GetPosY, (Unit* ptUnit));//NOT IN 1.10
|
||||||
//F7(STD, D2Common,10331,10331,10331,00000,00000,00000,00000,00000, void, D2SetPosY, (Unit* ptUnit, DWORD pos));
|
//F8(STD, D2Common,10331,10331,10331,00000,00000,00000,00000,00000,00000, void, D2SetPosY, (Unit* ptUnit, DWORD pos));
|
||||||
F8(STD, D2Common,10332,10332,10332,11080,10056,10543,10141,11166, 220870, void, D2GetPosition, (Unit* ptUnit, Position* pos));
|
F8(STD, D2Common,10332,10332,10332,11080,10056,10543,10141,11166,220870, void, D2GetPosition, (Unit* ptUnit, Position* pos));
|
||||||
F8(STD, D2Common,10339,10339,10339,10455,10864,10941,11060,11025, 223460, DWORD, D2GetMaxGoldBank, (Unit* ptUnit));
|
F8(STD, D2Common,10339,10339,10339,10455,10864,10941,11060,11025,223460, DWORD, D2GetMaxGoldBank, (Unit* ptUnit));
|
||||||
F8(STD, D2Common,10342,10342,10342,10172,10933,10366,10331,10846, 220BB0, Room*, D2GetRoom, (Unit* ptUnit));
|
F8(STD, D2Common,10342,10342,10342,10172,10933,10366,10331,10846,220BB0, Room*, D2GetRoom, (Unit* ptUnit));
|
||||||
//F7(STD, D2Common,10348,10348,10348,00000,00000,00000,00000,00000, void, D2SetUnitMode, (Unit* ptUnit, DWORD mode));
|
//F8(STD, D2Common,10348,10348,10348,00000,00000,00000,00000,00000,00000, void, D2SetUnitMode, (Unit* ptUnit, DWORD mode));
|
||||||
//F7(STD, D2Common,10394,10394,10394,00000,00000,00000,00000,00000, ObjectsBIN*,D2GetObjectsBIN, (Unit* ptObject));
|
//F8(STD, D2Common,10394,10394,10394,00000,00000,00000,00000,00000,00000, ObjectsBIN*,D2GetObjectsBIN, (Unit* ptObject));
|
||||||
F8(STD, D2Common,10420,10420,10420,10218,10079,11097,10356,10404, 221F90, PlayerData*,D2InitPlayerData, (Unit* ptChar));
|
F8(STD, D2Common,10420,10420,10420,10218,10079,11097,10356,10404,221F90, PlayerData*,D2InitPlayerData, (Unit* ptChar));
|
||||||
//F7(STD, D2Common,10421,10421,10421,10914,10329,00000,00000,00000, DWORD, D2FreePlayerData, (DWORD game1C, Unit* ptChar));
|
//F8(STD, D2Common,10421,10421,10421,10914,10329,00000,00000,00000,00000, DWORD, D2FreePlayerData, (DWORD game1C, Unit* ptChar));
|
||||||
F8(STD, D2Common,10424,10424,10424,10562,10800,10860,10920,11103, 2221A0, PlayerData*,D2GetPlayerData, (Unit* ptChar));
|
F8(STD, D2Common,10424,10424,10424,10562,10800,10860,10920,11103,2221A0, PlayerData*,D2GetPlayerData, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10431,10431,10431,00000,00000,00000,00000,00000, 00000, DWORD, D2GetDefence, (Unit* ptChar));
|
F8(STD, D2Common,10431,10431,10431,00000,00000,00000,00000,00000,00000, DWORD, D2GetDefence, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10433,10433,10433,00000,00000,00000,00000,00000, 00000, DWORD, D2GetChanceToBlock, (Unit* ptChar, DWORD isLODGame));
|
F8(STD, D2Common,10433,10433,10433,00000,00000,00000,00000,00000,00000, DWORD, D2GetChanceToBlock, (Unit* ptChar, DWORD isLODGame));
|
||||||
F8(STD, D2Common,10439,10439,10439,10343,11131,10729,10049,11159, 222E70, DWORD, D2GetMaxGold, (Unit* ptUnit));
|
F8(STD, D2Common,10439,10439,10439,10343,11131,10729,10049,11159,222E70, DWORD, D2GetMaxGold, (Unit* ptUnit));
|
||||||
F8(STD, D2Common,00000,00000,00000,10440,10572,10481,11090,10193, 224690, DWORD, D2Common10572, (Unit* ptObject, DWORD value));
|
F8(STD, D2Common,00000,00000,00000,10440,10572,10481,11090,10193,224690, DWORD, D2Common10572, (Unit* ptObject, DWORD value));
|
||||||
//F7(STD, D2Common,10463,10463,10463,00000,00000,00000,00000,00000, DWORD, D2SetStatWithNoTest, ( Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
|
//F8(STD, D2Common,10463,10463,10463,00000,00000,00000,00000,00000,00000, DWORD, D2SetStatWithNoTest, ( Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
|
||||||
//F7(STD, D2Common,10464,10464,10464,00000,00000,00000,00000,00000, void, D2AddStat, (Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
|
//F8(STD, D2Common,10464,10464,10464,00000,00000,00000,00000,00000,00000, void, D2AddStat, (Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
|
||||||
//F7(STD, D2Common,10465,10465,10465,00000,00000,00000,00000,00000, DWORD, D2SetStat, (Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
|
//F8(STD, D2Common,10465,10465,10465,00000,00000,00000,00000,00000,00000, DWORD, D2SetStat, (Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
|
||||||
//F7(STD, D2Common,10466,10466,10466,00000,00000,00000,00000,00000, int, D2GetStat, (Stats* ptStats, DWORD statID, DWORD statIndex));
|
//F8(STD, D2Common,10466,10466,10466,00000,00000,00000,00000,00000,00000, int, D2GetStat, (Stats* ptStats, DWORD statID, DWORD statIndex));
|
||||||
//F7(STD, D2Common,10470,10470,10470,00000,00000,00000,00000,00000, Stats*, D2AllocNewStats, (DWORD nUnitId, DWORD flags, DWORD uk18, DWORD nUnitType, DWORD nItemNum));
|
//F8(STD, D2Common,10470,10470,10470,00000,00000,00000,00000,00000,00000, Stats*, D2AllocNewStats, (DWORD nUnitId, DWORD flags, DWORD uk18, DWORD nUnitType, DWORD nItemNum));
|
||||||
F8(STD, D2Common,00000,00000,00000,10471,11160,10866,10258,10040, 2222C0, BYTE, D2GetObjectFlags, (Unit* ptObject));
|
F8(STD, D2Common,00000,00000,00000,10471,11160,10866,10258,10040,2222C0, BYTE, D2GetObjectFlags, (Unit* ptObject));
|
||||||
F8(STD, D2Common,00000,00000,00000,10572,11048,10150,10111,10033, 222300, void, D2SetObjectFlags, (Unit* ptObject, BYTE flags));
|
F8(STD, D2Common,00000,00000,00000,10572,11048,10150,10111,10033,222300, void, D2SetObjectFlags, (Unit* ptObject, BYTE flags));
|
||||||
//F7(STD, D2Common,10471,10471,10471,00000,00000,00000,00000,00000, DWORD, D2Common10471, (void*));
|
//F8(STD, D2Common,10471,10471,10471,00000,00000,00000,00000,00000,00000, DWORD, D2Common10471, (void*));
|
||||||
//F7(STD, D2Common,10472,10472,10472,00000,00000,00000,00000,00000, DWORD, D2Common10472, (void*));
|
//F8(STD, D2Common,10472,10472,10472,00000,00000,00000,00000,00000,00000, DWORD, D2Common10472, (void*));
|
||||||
//F7(STD, D2Common,10475,10475,10475,00000,00000,00000,00000,00000, void, D2UpdateDisabledStat, (Stats* ptCharStats, Stats* ptStats, DWORD one));
|
//F8(STD, D2Common,10475,10475,10475,00000,00000,00000,00000,00000,00000, void, D2UpdateDisabledStat, (Stats* ptCharStats, Stats* ptStats, DWORD one));
|
||||||
//F7(STD, D2Common,10481,10481,10481,00000,00000,00000,00000,00000, void*, D2Common10481, (Unit* ptUnit, DWORD flags));
|
//F8(STD, D2Common,10481,10481,10481,00000,00000,00000,00000,00000,00000, void*, D2Common10481, (Unit* ptUnit, DWORD flags));
|
||||||
//F7(STD, D2Common,10484,10484,10484,00000,00000,00000,00000,00000, Stats*, D2GetAffixStats, (Unit* ptItem, DWORD, DWORD));
|
//F8(STD, D2Common,10484,10484,10484,00000,00000,00000,00000,00000,00000, Stats*, D2GetAffixStats, (Unit* ptItem, DWORD, DWORD));
|
||||||
//F7(STD, D2Common,10485,10485,10485,00000,00000,00000,00000,00000, void, D2FreeStats, (Stats* ptStats));
|
//F8(STD, D2Common,10485,10485,10485,00000,00000,00000,00000,00000,00000, void, D2FreeStats, (Stats* ptStats));
|
||||||
F8(STD, D2Common,10487,10487,10487,00000,00000,00000,00000,00000, 00000, DWORD, D2isInState, (Unit* ptChar, DWORD isLODGame));
|
F8(STD, D2Common,10487,10487,10487,00000,00000,00000,00000,00000,00000, DWORD, D2isInState, (Unit* ptChar, DWORD isLODGame));
|
||||||
//F7(STD, D2Common,10517,10517,10517,00000,00000,00000,00000,00000, void, D2SetPlayerStat, (Unit* ptChar, DWORD statID, int amount, DWORD index));
|
//F8(STD, D2Common,10517,10517,10517,00000,00000,00000,00000,00000,00000, void, D2SetPlayerStat, (Unit* ptChar, DWORD statID, int amount, DWORD index));
|
||||||
F8(STD, D2Common,10518,10518,10518,10109,10627,10762,10551,10645, 2272B0, void, D2AddPlayerStat, (Unit* ptChar, DWORD statID, int amount, DWORD index));//ONLY 1.11b
|
F8(STD, D2Common,10518,10518,10518,10109,10627,10762,10551,10645,2272B0, void, D2AddPlayerStat, (Unit* ptChar, DWORD statID, int amount, DWORD index));//ONLY 1.11b
|
||||||
F8(STD, D2Common,10519,10519,10519,11092,10061,10658,10973,10550, 225480, int, D2GetPlayerStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b
|
F8(STD, D2Common,10519,10519,10519,11092,10061,10658,10973,10550,225480, int, D2GetPlayerStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b
|
||||||
//F7(STD, D2Common,10520,10520,10520,00000,00000,00000,00000,00000, int, D2GetPlayerStat20, (Unit* ptChar, DWORD statID, DWORD index));
|
//F8(STD, D2Common,10520,10520,10520,00000,00000,00000,00000,00000,00000, int, D2GetPlayerStat20, (Unit* ptChar, DWORD statID, DWORD index));
|
||||||
F8(STD, D2Common,10521,10521,10521,10733,10550,10494,10587,10216, 2253B0, int, D2GetPlayerBaseStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b
|
F8(STD, D2Common,10521,10521,10521,10733,10550,10494,10587,10216,2253B0, int, D2GetPlayerBaseStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b
|
||||||
//F7(STD, D2Common,10527,10527,10527,00000,00000,00000,00000,00000, DWORD, D2Common10527, (Unit* ptUnit));
|
//F8(STD, D2Common,10527,10527,10527,00000,00000,00000,00000,00000,00000, DWORD, D2Common10527, (Unit* ptUnit));
|
||||||
F8(STD, D2Common,10539,10539,10539,00000,00000,00000,00000,00000, 00000, DWORD, D2haveDefenceBonus, (Unit* ptChar));
|
F8(STD, D2Common,10539,10539,10539,00000,00000,00000,00000,00000,00000, DWORD, D2haveDefenceBonus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10540,10540,10540,00000,00000,00000,00000,00000, 00000, DWORD, D2haveFireResBonus, (Unit* ptChar));
|
F8(STD, D2Common,10540,10540,10540,00000,00000,00000,00000,00000,00000, DWORD, D2haveFireResBonus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10541,10541,10541,00000,00000,00000,00000,00000, 00000, DWORD, D2haveColdResBonus, (Unit* ptChar));
|
F8(STD, D2Common,10541,10541,10541,00000,00000,00000,00000,00000,00000, DWORD, D2haveColdResBonus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10542,10542,10542,00000,00000,00000,00000,00000, 00000, DWORD, D2haveLightResBonus, (Unit* ptChar));
|
F8(STD, D2Common,10542,10542,10542,00000,00000,00000,00000,00000,00000, DWORD, D2haveLightResBonus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10543,10543,10543,00000,00000,00000,00000,00000, 00000, DWORD, D2havePoisonResBonus, (Unit* ptChar));
|
F8(STD, D2Common,10543,10543,10543,00000,00000,00000,00000,00000,00000, DWORD, D2havePoisonResBonus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10546,10546,10546,00000,00000,00000,00000,00000, 00000, DWORD, D2haveDefenceMalus, (Unit* ptChar));
|
F8(STD, D2Common,10546,10546,10546,00000,00000,00000,00000,00000,00000, DWORD, D2haveDefenceMalus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10547,10547,10547,00000,00000,00000,00000,00000, 00000, DWORD, D2haveFireResMalus, (Unit* ptChar));
|
F8(STD, D2Common,10547,10547,10547,00000,00000,00000,00000,00000,00000, DWORD, D2haveFireResMalus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10548,10548,10548,00000,00000,00000,00000,00000, 00000, DWORD, D2haveColdResMalus, (Unit* ptChar));
|
F8(STD, D2Common,10548,10548,10548,00000,00000,00000,00000,00000,00000, DWORD, D2haveColdResMalus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10549,10549,10549,00000,00000,00000,00000,00000, 00000, DWORD, D2haveLightResMalus, (Unit* ptChar));
|
F8(STD, D2Common,10549,10549,10549,00000,00000,00000,00000,00000,00000, DWORD, D2haveLightResMalus, (Unit* ptChar));
|
||||||
F8(STD, D2Common,10550,10550,10550,00000,00000,00000,00000,00000, 00000, DWORD, D2havePoisonResMalus, (Unit* ptChar));
|
F8(STD, D2Common,10550,10550,10550,00000,00000,00000,00000,00000,00000, DWORD, D2havePoisonResMalus, (Unit* ptChar));
|
||||||
//F7(STD, D2Common,10552,10552,10552,00000,00000,00000,00000,00000, DWORD, D2Common10552, (Unit* ptUnit));
|
//F8(STD, D2Common,10552,10552,10552,00000,00000,00000,00000,00000,00000, DWORD, D2Common10552, (Unit* ptUnit));
|
||||||
//F7(STD, D2Common,10567,10567,10567,00000,00000,00000,00000,00000, DWORD, D2CanBeBroken, (Unit* ptItem));
|
//F8(STD, D2Common,10567,10567,10567,00000,00000,00000,00000,00000,00000, DWORD, D2CanBeBroken, (Unit* ptItem));
|
||||||
//F7(STD, D2Common,10573,10573,10573,00000,00000,00000,00000,00000, void, D2CopyStats, (Stats* ptDestStats, Stats* ptSrcStats));
|
//F8(STD, D2Common,10573,10573,10573,00000,00000,00000,00000,00000,00000, void, D2CopyStats, (Stats* ptDestStats, Stats* ptSrcStats));
|
||||||
//F7(STD, D2Common,10574,10574,10574,00000,00000,00000,00000,00000, void*, D2SetEnabledStat, (Unit* ptItem, DWORD statId, DWORD disabled));
|
//F8(STD, D2Common,10574,10574,10574,00000,00000,00000,00000,00000,00000, void*, D2SetEnabledStat, (Unit* ptItem, DWORD statId, DWORD disabled));
|
||||||
//F7(STD, D2Common,10575,10575,10575,00000,00000,00000,00000,00000, void, D2FreeBinFiles, ());
|
//F8(STD, D2Common,10575,10575,10575,00000,00000,00000,00000,00000,00000, void, D2FreeBinFiles, ());
|
||||||
//F7(STD, D2Common,10576,10576,10576,00000,00000,00000,00000,00000, void, D2LoadBinFiles, (DWORD zero1, DWORD zero2, bool));
|
//F8(STD, D2Common,10576,10576,10576,00000,00000,00000,00000,00000,00000, void, D2LoadBinFiles, (DWORD zero1, DWORD zero2, bool));
|
||||||
//F7(STD, D2Common,00000,00000,00000,10651,10651,00000,00000,00000, DWORD, D2CheckQuestState, (void* ptQuest, DWORD index, DWORD value));
|
//F8(STD, D2Common,00000,00000,00000,10651,10651,00000,00000,00000,00000, DWORD, D2CheckQuestState, (void* ptQuest, DWORD index, DWORD value));
|
||||||
F8(STD, D2Common,10578,10578,10578,10653,10496,10244,10849,10037, 2122F0, void*, D2CompileTxtFile, (DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength));
|
F8(STD, D2Common,10578,10578,10578,10653,10496,10244,10849,10037,2122F0, void*, D2CompileTxtFile, (DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength));
|
||||||
F8(STD, D2Common,10600,10600,10600,10573,10262,10887,10695,10994, 2335F0, ItemsBIN*, D2GetItemsBIN, (DWORD itemID));
|
F8(STD, D2Common,10600,10600,10600,10573,10262,10887,10695,10994,2335F0, ItemsBIN*, D2GetItemsBIN, (DWORD itemID));
|
||||||
//F7(STD, D2Common,10601,10601,10601,00000,00000,00000,00000,00000, ItemsBIN*, D2GetByCodeItemStatsBIN, (DWORD code, DWORD* itemID));
|
//F8(STD, D2Common,10601,10601,10601,00000,00000,00000,00000,00000,00000, ItemsBIN*, D2GetByCodeItemStatsBIN, (DWORD code, DWORD* itemID));
|
||||||
//F7(STD, D2Common,10604,10604,10604,00000,00000,00000,00000,00000, AffixBIN*, D2GetAffixBIN, (int affixID));
|
//F8(STD, D2Common,10604,10604,10604,00000,00000,00000,00000,00000,00000, AffixBIN*, D2GetAffixBIN, (int affixID));
|
||||||
F8(STD, D2Common,10616,10616,10616,10500,10523,10774,10806,10619, 10619, GemsBIN*, D2GetGemsBIN, (DWORD gemID));
|
F8(STD, D2Common,10616,10616,10616,10500,10523,10774,10806,10619,2372C0, GemsBIN*, D2GetGemsBIN, (DWORD gemID));
|
||||||
F8(STD, D2Common,11232,11232,11232,10746,10258,10913,10783,10393, 26A1B0, CubeMainBIN*,D2GetCubeMainBIN, (DWORD cubemainID));
|
F8(STD, D2Common,11232,11232,11232,10746,10258,10913,10783,10393,26A1B0, CubeMainBIN*,D2GetCubeMainBIN, (DWORD cubemainID));
|
||||||
F8(STD, D2Common,11233,11233,11233,10639,11135,10390,10675,10235, 26A200, int, D2GetNbCubeMainBIN, ());
|
F8(STD, D2Common,11233,11233,11233,10639,11135,10390,10675,10235,26A200, int, D2GetNbCubeMainBIN, ());
|
||||||
//F7(STD, D2Common,10737,10737,10737,00000,00000,00000,00000,00000, LevelsBIN*, D2GetLevelsBIN, (DWORD levelID));
|
//F8(STD, D2Common,10737,10737,10737,00000,00000,00000,00000,00000,00000, LevelsBIN*, D2GetLevelsBIN, (DWORD levelID));
|
||||||
F8(STD, D2Common,10628,10628,10628,00000,00000,00000,00000,00000, 00000, DWORD, D2GetNextLevelXP, (DWORD classID, DWORD level));
|
F8(STD, D2Common,10628,10628,10628,00000,00000,00000,00000,00000,00000, DWORD, D2GetNextLevelXP, (DWORD classID, DWORD level));
|
||||||
F8(STD, D2Common,10629,10629,10629,00000,00000,00000,00000,00000, 00000, DWORD, D2GetMaxLevel, (DWORD classID));
|
F8(STD, D2Common,10629,10629,10629,00000,00000,00000,00000,00000,00000, DWORD, D2GetMaxLevel, (DWORD classID));
|
||||||
F8(STD, D2Common,10655,10655,10655,10655,10309,10297,10218,10694, 10694, DifficultyLevelsBIN*, D2GetDifficultyLevelsBIN, (DWORD difficultyLevel));
|
F8(STD, D2Common,10655,10655,10655,10655,10309,10297,10218,10694,111D30, DifficultyLevelsBIN*, D2GetDifficultyLevelsBIN, (DWORD difficultyLevel));
|
||||||
//F7(STD, D2Common,10659,10659,10659,00000,00000,00000,00000,00000, TreasureClassBIN*, D2GetTreasureClassBIN, (WORD id, DWORD uk));
|
//F8(STD, D2Common,10659,10659,10659,00000,00000,00000,00000,00000,00000, TreasureClassBIN*, D2GetTreasureClassBIN, (WORD id, DWORD uk));
|
||||||
//F7(STD, D2Common,10668,10668,10668,10450,10953,00000,00000,00000, SuperUniqueBIN*, D2GetSuperUniqueBIN, (WORD id));
|
//F8(STD, D2Common,10668,10668,10668,10450,10953,00000,00000,00000,00000, SuperUniqueBIN*, D2GetSuperUniqueBIN, (WORD id));
|
||||||
F8(STD, D2Common,10695,10695,10695,10927,10899,10276,10106,10911, 227E70, DWORD, D2GetItemQuality, (Unit* ptItem));
|
F8(STD, D2Common,10695,10695,10695,10927,10899,10276,10106,10911,227E70, DWORD, D2GetItemQuality, (Unit* ptItem));
|
||||||
F8(STD, D2Common,10707,10707,10707,10911,10303,10989,10202,10458, 2280A0, DWORD, D2TestFlags, (Unit* ptUnit, DWORD flags, DWORD line, const char* file));
|
F8(STD, D2Common,10707,10707,10707,10911,10303,10989,10202,10458,2280A0, DWORD, D2TestFlags, (Unit* ptUnit, DWORD flags, DWORD line, const char* file));
|
||||||
//F7(STD, D2Common,10708,10708,10708,00000,00000,00000,00000,00000, void, D2SetFlags, (Unit* ptUnit, DWORD flags, DWORD bitNewValue));
|
//F8(STD, D2Common,10708,10708,10708,00000,00000,00000,00000,00000,00000, void, D2SetFlags, (Unit* ptUnit, DWORD flags, DWORD bitNewValue));
|
||||||
//F7(STD, D2Common,10709,10709,10709,00000,00000,00000,00000,00000, DWORD, D2GetFlags, (Unit* ptUnit));
|
//F8(STD, D2Common,10709,10709,10709,00000,00000,00000,00000,00000,00000, DWORD, D2GetFlags, (Unit* ptUnit));
|
||||||
//F7(STD, D2Common,10711,10711,10711,00000,00000,00000,00000,00000, void, D2ItemSetFlags, (Unit* ptItem, DWORD flags, DWORD toSet));// toSet = 0 for set to 0 the selected flags else set to 1
|
//F8(STD, D2Common,10711,10711,10711,00000,00000,00000,00000,00000,00000, void, D2ItemSetFlags, (Unit* ptItem, DWORD flags, DWORD toSet));// toSet = 0 for set to 0 the selected flags else set to 1
|
||||||
F8(STD, D2Common,10717,10717,10717,10898,10100,10410,10086,10008, 2281E0, DWORD, D2GetItemLevel, (Unit* ptItem));
|
F8(STD, D2Common,10717,10717,10717,10898,10100,10410,10086,10008,2281E0, DWORD, D2GetItemLevel, (Unit* ptItem));
|
||||||
F8(STD, D2Common,10719,10719,10719,10820,10505,10370,10020,10810, 228250, BYTE, D2ItemGetPage, (Unit* ptUnit));
|
F8(STD, D2Common,10719,10719,10719,10820,10505,10370,10020,10810,228250, BYTE, D2ItemGetPage, (Unit* ptUnit));
|
||||||
F8(STD, D2Common,10720,10720,10720,10485,10608,10223,10012,11026, 228280, void, D2ItemSetPage, (Unit* ptItem, BYTE page));
|
F8(STD, D2Common,10720,10720,10720,10485,10608,10223,10012,11026,228280, void, D2ItemSetPage, (Unit* ptItem, BYTE page));
|
||||||
F8(STD, D2Common,10731,10731,10731,11017,10890,10231,10744,10601, 229BB0, DWORD, D2CheckItemType, (Unit* ptItem, DWORD itype));
|
F8(STD, D2Common,10731,10731,10731,11017,10890,10231,10744,10601,229BB0, DWORD, D2CheckItemType, (Unit* ptItem, DWORD itype));
|
||||||
F8(STD, D2Common,10732,10732,10732,10692,10685,10280,10620,10075, 229DA0, int, D2GetUniqueID, (Unit* ptItem));
|
F8(STD, D2Common,10732,10732,10732,10692,10685,10280,10620,10075,229DA0, int, D2GetUniqueID, (Unit* ptItem));
|
||||||
F8(STD, D2Common,10734,10734,10734,00000,00000,00000,00000,00000, 00000, void, D2SetAnim, (Unit* ptUnit, int anim));
|
F8(STD, D2Common,10734,10734,10734,00000,00000,00000,00000,00000,00000, void, D2SetAnim, (Unit* ptUnit, int anim));
|
||||||
//F7(STD, D2Common,10749,10749,10749,00000,00000,00000,00000,00000, void, D2GetWidthHeight, (Unit* ptItem, BYTE* Width, BYTE* Height);
|
//F8(STD, D2Common,10749,10749,10749,00000,00000,00000,00000,00000,00000, void, D2GetWidthHeight, (Unit* ptItem, BYTE* Width, BYTE* Height);
|
||||||
//F7(STD, D2Common,10751,10751,10751,00000,00000,00000,00000,00000, DWORD, D2GetItemType, (Unit* ptUnit));
|
//F8(STD, D2Common,10751,10751,10751,00000,00000,00000,00000,00000,00000, DWORD, D2GetItemType, (Unit* ptUnit));
|
||||||
//F7(STD, D2Common,10757,10757,10757,00000,00000,00000,00000,00000, DWORD, D2GetItemLevelReq, (Unit* ptChar, Unit* ptItem));
|
//F8(STD, D2Common,10757,10757,10757,00000,00000,00000,00000,00000,00000, DWORD, D2GetItemLevelReq, (Unit* ptChar, Unit* ptItem));
|
||||||
F8(STD, D2Common,10619,10619,10619,10687,10877,10321,11032,10981, 10981, int*, D2GetNbRunesBIN, ());//return the point on th number
|
F8(STD, D2Common,10619,10619,10619,10687,10877,10321,11032,10981,239CB0, int*, D2GetNbRunesBIN, ());//return the point on th number
|
||||||
F8(STD, D2Common,10620,10620,10620,10775,10296,10622,10006,10405, 10405, RunesBIN*, D2GetRunesBIN, (int runesID));
|
F8(STD, D2Common,10620,10620,10620,10775,10296,10622,10006,10405,239D60, RunesBIN*, D2GetRunesBIN, (int runesID));
|
||||||
//F7(STD, D2Common,10792,10792,10792,00000,00000,00000,00000,00000, DWORD, D2CanBeRare, (Unit* ptItem));
|
//F8(STD, D2Common,10792,10792,10792,00000,00000,00000,00000,00000,00000, DWORD, D2CanBeRare, (Unit* ptItem));
|
||||||
//F7(STD, D2Common,10810,10810,10810,00000,00000,00000,00000,00000, BYTE, D2CheckHasInv, (Unit* ptItem));
|
//F8(STD, D2Common,10810,10810,10810,00000,00000,00000,00000,00000,00000, BYTE, D2CheckHasInv, (Unit* ptItem));
|
||||||
//F7(STD, D2Common,10813,10813,10813,00000,00000,00000,00000,00000, DWORD, D2GetStaffMods, (Unit* ptItem));
|
//F8(STD, D2Common,10813,10813,10813,00000,00000,00000,00000,00000,00000, DWORD, D2GetStaffMods, (Unit* ptItem));
|
||||||
//F7(STD, D2Common,10816,10816,10816,10816,11085,00000,00000,00000, DWORD, D2GetNbSocket, (Unit* ptItem));
|
//F8(STD, D2Common,10816,10816,10816,10816,11085,00000,00000,00000,00000, DWORD, D2GetNbSocket, (Unit* ptItem));
|
||||||
//F7(STD, D2Common,10840,10840,10840,00000,00000,00000,00000,00000, DWORD, D2Common10840, (Unit* ptItem, Unit* ptChar));
|
//F8(STD, D2Common,10840,10840,10840,00000,00000,00000,00000,00000,00000, DWORD, D2Common10840, (Unit* ptItem, Unit* ptChar));
|
||||||
//F7(STD, D2Common,10855,10855,10855,00000,00000,00000,00000,00000, void, D2AddAffix, (DWORD, DWORD, Unit* ptItem, AffixBIN* ptAffix, DWORD, DWORD));
|
//F8(STD, D2Common,10855,10855,10855,00000,00000,00000,00000,00000,00000, void, D2AddAffix, (DWORD, DWORD, Unit* ptItem, AffixBIN* ptAffix, DWORD, DWORD));
|
||||||
//F7(STD, D2Common,10872,10872,10872,00000,00000,00000,00000,00000, DWORD, D2WarpPlayer, (Path* ptPath, Unit* ptChar, Room* ptRoom, DWORD x, DWORD y));
|
//F8(STD, D2Common,10872,10872,10872,00000,00000,00000,00000,00000,00000, DWORD, D2WarpPlayer, (Path* ptPath, Unit* ptChar, Room* ptRoom, DWORD x, DWORD y));
|
||||||
//F7(STD, D2Common,10875,10875,10875,00000,00000,00000,00000,00000, WORD, D2GetItemVersion, (Unit* ptItem));
|
//F8(STD, D2Common,10875,10875,10875,00000,00000,00000,00000,00000,00000, WORD, D2GetItemVersion, (Unit* ptItem));
|
||||||
F8(STD, D2Common,11163,11163,11163,10880,11068,10436,11107,10963, 23BCC0, DWORD, D2isEtheral, (Unit* ptItem));//ONLY UNTIL 1.10
|
//F8(STD, D2Common,11163,11163,11163,10880,11068,10436,11107,10963,23BCC0, DWORD, D2isEtheral, (Unit* ptItem));//ONLY UNTIL 1.10
|
||||||
F8(STD, D2Common, 11163, 11163, 11163, 10880, 11068, 10436, 11107, 10963, 23BCC0, DWORD, D2isEtheral2, (Unit* ptItem, DWORD a2, DWORD a3, DWORD a4, DWORD a5, DWORD a6, WORD a7));
|
F8(STD, D2Common,10881,10881,10881,10956,11156,10218,10987,10665,2313E0, DWORD, D2SaveItem, (Unit* ptItem, saveBitField* data, DWORD startSize, DWORD p4, DWORD p5, DWORD p6));
|
||||||
F8(STD, D2Common,10881,10881,10881,10956,11156,10218,10987,10665, 2313E0, DWORD, D2SaveItem, (Unit* ptItem, saveBitField* data, DWORD startSize, DWORD p4, DWORD p5, DWORD p6));
|
//F8(STD, D2Common,10916,10916,10916,00000,00000,00000,00000,00000,00000, void, DoNothing916, ());
|
||||||
//F7(STD, D2Common,10916,10916,10916,00000,00000,00000,00000,00000, void, DoNothing916, ());
|
//F8(STD, D2Common,10940,10940,10940,10027,10105,10953,00000,00000,00000, void, D2Common10027, (Unit* ptChar, DWORD skillID));
|
||||||
//F7(STD, D2Common,10940,10940,10940,10027,10105,10953,00000,00000, void, D2Common10027, (Unit* ptChar, DWORD skillID));
|
//F8(STD, D2Common,10950,10950,10950,00000,00000,00000,00000,00000,00000, SkillData*, D2GetSkillPointer, (Unit* ptChar, WORD SkillID));
|
||||||
//F7(STD, D2Common,10950,10950,10950,00000,00000,00000,00000,00000, SkillData*, D2GetSkillPointer, (Unit* ptChar, WORD SkillID));
|
//F8(STD, D2Common,10952,10952,10952,10950,10256,10858,00000,00000,00000, SkillData*, D2IncSkillBaseLevel, (Unit* ptChar, DWORD skillID));
|
||||||
//F7(STD, D2Common,10952,10952,10952,10950,10256,10858,00000,00000, SkillData*, D2IncSkillBaseLevel, (Unit* ptChar, DWORD skillID));
|
F8(STD, D2Common,10953,10953,10953,10099,10255,10210,10302,10335,247280, void, D2SetSkillBaseLevel,(Unit* ptChar, DWORD skillID, DWORD slvl, DWORD bRemove, char*, DWORD));
|
||||||
F8(STD, D2Common,10953,10953,10953,10099,10255,10210,10302,10335, 247280, void, D2SetSkillBaseLevel,(Unit* ptChar, DWORD skillID, DWORD slvl, DWORD bRemove, char*, DWORD));
|
//F8(STD, D2Common,10963,10963,10963,00000,00000,00000,00000,00000,00000, DWORD, D2GetSkillID, (SkillData* ptSkill, const char* file, DWORD line));
|
||||||
//F7(STD, D2Common,10963,10963,10963,00000,00000,00000,00000,00000, DWORD, D2GetSkillID, (SkillData* ptSkill, const char* file, DWORD line));
|
//F8(FAST, D2Common,10966,10966,10966,00000,00000,00000,00000,00000,00000, SkillsBIN*, D2GetSkillsBIN, (SkillData* ptSkill));
|
||||||
//F7(FAST, D2Common,10966,10966,10966,00000,00000,00000,00000,00000, SkillsBIN*, D2GetSkillsBIN, (SkillData* ptSkill));
|
F8(STD, D2Common,10968,10968,10968,10700,10109,10904,10306,10007,2442A0, DWORD, D2GetSkillLevel, (Unit* ptChar, SkillData* ptSkill, DWORD includingBonus));
|
||||||
F8(STD, D2Common,10968,10968,10968,10700,10109,10904,10306,10007, 2442A0, DWORD, D2GetSkillLevel, (Unit* ptChar, SkillData* ptSkill, DWORD includingBonus));
|
//F8(STD, D2Common,11023,11023,11023,00000,00000,00000,00000,00000,00000, DWORD, D2GetCriticalStrikeFromMasteries, (Unit* ptChar, Unit* ptItem, DWORD zero, DWORD two));
|
||||||
//F7(STD, D2Common,11023,11023,11023,00000,00000,00000,00000,00000, DWORD, D2GetCriticalStrikeFromMasteries, (Unit* ptChar, Unit* ptItem, DWORD zero, DWORD two));
|
//F8(STD, D2Common,11007,11007,11007,00000,00000,00000,00000,00000,00000, bool, D2TestQuestState, (void* ptQuest, DWORD QuestID, DWORD QuestState));
|
||||||
//F7(STD, D2Common,11007,11007,11007,00000,00000,00000,00000,00000, bool, D2TestQuestState, (void* ptQuest, DWORD QuestID, DWORD QuestState));
|
//F8(STD, D2Common,11041,11041,11041,00000,00000,00000,00000,00000,00000, int, D2GetPlayerSkillID, (DWORD playerID, DWORD skillNumber));
|
||||||
//F7(STD, D2Common,11041,11041,11041,00000,00000,00000,00000,00000, int, D2GetPlayerSkillID, (DWORD playerID, DWORD skillNumber));
|
//F8(STD, D2Common,11042,11042,11042,00000,00000,00000,00000,00000,00000, int, D2GetNbSkillsPerPlayer, (DWORD playerID));
|
||||||
//F7(STD, D2Common,11042,11042,11042,00000,00000,00000,00000,00000, int, D2GetNbSkillsPerPlayer, (DWORD playerID));
|
//F8(STD, D2Common,11269,11269,11269,00000,00000,00000,00000,00000,00000, DWORD, D2GetAllIndexFromStat, (Stats* ptStats, DWORD statID, D2Stat* allIndex, DWORD maxIndex));
|
||||||
//F7(STD, D2Common,11269,11269,11269,00000,00000,00000,00000,00000, DWORD, D2GetAllIndexFromStat, (Stats* ptStats, DWORD statID, D2Stat* allIndex, DWORD maxIndex));
|
//F8(STD, D2Common,11270,11270,11270,00000,00000,00000,00000,00000,00000, DWORD, D2GetAllIndexFromStatID, (Unit* ptItem, DWORD statID, D2Stat* allIndex, DWORD));
|
||||||
//F7(STD, D2Common,11270,11270,11270,00000,00000,00000,00000,00000, DWORD, D2GetAllIndexFromStatID, (Unit* ptItem, DWORD statID, D2Stat* allIndex, DWORD));
|
F8(STD, D2Common,11276,11276,11276,10254,10074,10111,10435,11081,246CA0, DWORD, D2GetSkillCost, (Unit* ptChar, int skpoints, DWORD skillID, DWORD curSkillLevel));//not 10447
|
||||||
F8(STD, D2Common,11276,11276,11276,10254,10074,10111,10435,11081, 246D00, DWORD, D2GetSkillCost, (Unit* ptChar, int skpoints, DWORD skillID, DWORD curSkillLevel));//not 10447
|
A8(FAST, D2Common,00000,00000,82C80, 15D0, 1800, 1220, 12D0, 17B0, 833E0, CharStatsBIN*, D2GetCharStatsBIN, (DWORD charID));
|
||||||
A8(FAST, D2Common,00000,00000,82C80, 15D0, 1800, 1220, 12D0, 17B0, 833E0, CharStatsBIN*, D2GetCharStatsBIN, (DWORD charID));
|
A8(FAST, D2Common,00000,00000,12410,5D7D0,1A100,116C0,1C020,5B0E0,268600, DWORD, D2CompileCubeInput, (CubeInput* cubeinput, char* s, DWORD p1, DWORD p2));
|
||||||
A8(FAST, D2Common,00000,00000,12410,5D7D0,1A100,116C0,1C020,5B0E0, 268600, DWORD, D2CompileCubeInput, (CubeInput* cubeinput, char* s, DWORD p1, DWORD p2));
|
//A8(FAST, D2Common,00000,00000,12910,5D210,19B40,11100,1BA60,5AB20,268A90, DWORD, D2CompileCubeOutput, (CubeOutput* cubeoutput, char* s, DWORD p1, DWORD p2));
|
||||||
A8(FAST, D2Common,00000,00000,12910,5D210,19B40,11100,1BA60,5AB20, 5AB20, DWORD, D2CompileCubeOutput, (CubeOutput* cubeoutput, char* s, DWORD p1, DWORD p2));
|
A8(FAST, D2Common,00000,00000,2B1A0, 11F0, 1380, 1140, 1300, 1160,155C90, ItemTypesBIN*, D2GetItemTypesBIN, (DWORD itemTypesId));
|
||||||
A8(FAST, D2Common,00000,00000,2B1A0, 11F0, 1380, 1140, 1300, 1160, 155C90, ItemTypesBIN*, D2GetItemTypesBIN, (DWORD itemTypesId));
|
//A8(FAST, D2Common,00000,00000,62FD0,00000,00000,00000,00000,00000,00000, void, D2EncodeValueCheckMax, (saveBitField* data, DWORD value, DWORD bitSize));
|
||||||
//A7(FAST, D2Common,00000,00000,62FD0,00000,00000,00000,00000,00000, void, D2EncodeValueCheckMax, (saveBitField* data, DWORD value, DWORD bitSize));
|
A8(FAST, D2Common,00000,00000,642B0, 13F0, 12F0, 1540, 17A0, 17E0,5C4F0, ItemStatCostBIN*,D2GetItemStatCostBIN, (DWORD id));
|
||||||
A8(FAST, D2Common,00000,00000,642B0, 13F0, 12F0, 1540, 17A0, 17E0, 5C4F0, ItemStatCostBIN*,D2GetItemStatCostBIN, (DWORD id));
|
//A8(FAST, D2Common,00000,00000,764A0,00000,00000,00000,00000,00000,00000, void*, D2Common764A0, (Stats* ptStats, DWORD stat, ItemStatCostBIN* itemStatCost ,DWORD));
|
||||||
//A7(FAST, D2Common,00000,00000,764A0,00000,00000,00000,00000,00000, void*, D2Common764A0, (Stats* ptStats, DWORD stat, ItemStatCostBIN* itemStatCost ,DWORD));
|
//A8(STD, D2Common,00000,00000,76E30,00000,00000,00000,00000,00000,00000, void, D2PreUpdateDisabledStat, (Stats* ptStats));
|
||||||
//A7(STD, D2Common,00000,00000,76E30,00000,00000,00000,00000,00000, void, D2PreUpdateDisabledStat, (Stats* ptStats));
|
//A8(FAST, D2Common,00000,00000,76C10,00000,00000,00000,00000,00000,00000, void, D2ApplyStat,(Stats* ptCharStats, DWORD statId, DWORD value, Unit* ptItem));
|
||||||
//A7(FAST, D2Common,00000,00000,76C10,00000,00000,00000,00000,00000, void, D2ApplyStat,(Stats* ptCharStats, DWORD statId, DWORD value, Unit* ptItem));
|
A8(FAST, D2Common,738A4,739B4,84268, 96E0, 98D0, 9900, 9900, B5E0,117079, void*, D2ReadFile,(DWORD mempool, char* filename, DWORD* size, const char*, DWORD));
|
||||||
A8(FAST, D2Common,738A4,739B4,84268, 96E0, 98D0, 9900, 9900, B5E0, /*116E46*/117079, void*, D2ReadFile,(DWORD unused, char* filename, DWORD* size, const char*, DWORD));
|
//A8(FAST, D2Common,00000,00000, 94D0,00000,00000,00000,00000,00000,00000, void*, D2GetStringIDForTxtFile,(const char * string));
|
||||||
//A7(FAST, D2Common,00000,00000, 94D0,00000,00000,00000,00000,00000, void*, D2GetStringIDForTxtFile,(const char * string));
|
A8(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870,80C40,2552E0, void, D2LoadSuperuniques,(DWORD mempool));//FASCALL UNTIL 1.10
|
||||||
A8(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870,80C40, 2552E0, void, D2LoadSuperuniques,(DWORD mempool));//FASCALL UNTIL 1.10
|
A8(STD, D2Common,00000,00000,00000,00000,00000,00000,81EA0,00000,00000, InventoryBIN*, D2GetInventoryBIN, ());
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//D2Client : 6FAA0000
|
//D2Client : 6FAA0000
|
||||||
@ -310,26 +309,29 @@ A8(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870,80C40, 2552E0, void,
|
|||||||
//E2F(D2Client,5BA90, void, D2ReloadGambleScreen, ());//1.11b
|
//E2F(D2Client,5BA90, void, D2ReloadGambleScreen, ());//1.11b
|
||||||
//E2F(D2Client,1FEB0, void, D2OpenNPCMenu, (Unit* ptNPC));//1.11b by ESI
|
//E2F(D2Client,1FEB0, void, D2OpenNPCMenu, (Unit* ptNPC));//1.11b by ESI
|
||||||
|
|
||||||
A8(FAST, D2Client, 1000, 1000, 1000,75D00,A9070,BEF70,2B420,A9480, 788B0, void*, D2LoadImage, (const char* filename, DWORD filetype));
|
A8(FAST, D2Client, 1000, 1000, 1000,75D00,A9070,BEF70,2B420,A9480,788B0, void*, D2LoadImage, (const char* filename, DWORD filetype));
|
||||||
A8(FAST, D2Client, 1150, 1150, 1140,00000,00000,00000,00000,00000, 00000, void, D2FreeImage, (void* image));//6FAA1140
|
A8(FAST, D2Client, 1150, 1150, 1140,00000,00000,00000,00000,00000,78A00, void, D2FreeImage, (void* image));//6FAA1140
|
||||||
A8(FAST, D2Client, D640, D630, DB50,73620,5E4E0,79670,147A0,B6890, 787B0, void, D2SendMsgToAll,(BYTE* data));//1.11 and 1.11b by ESI !!
|
A8(FAST, D2Client, D640, D630, DB50,73620,5E4E0,79670,147A0,B6890,787B0, void, D2SendMsgToAll,(BYTE* data));//1.11 and 1.11b by ESI !!
|
||||||
//A7(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000,00000, int, D2GetAvgChanceMonsterWillHitYou, ());//6FAB5A80
|
//A8(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000,00000,00000, int, D2GetAvgChanceMonsterWillHitYou, ());//6FAB5A80
|
||||||
A8(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000,00000, 00000, DWORD, D2GetLastMonsterIDFight, ());//6FAB5A80
|
A8(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000,00000,00000, DWORD, D2GetLastMonsterIDFight, ());//6FAB5A80
|
||||||
A8(STD, D2Client,29800,297F0,2FD60,828A0,89320,6B280,BCEA0,BF640, A7D00, void, D2PrintStatsPage, ());
|
A8(STD, D2Client,29800,297F0,2FD60,828A0,89320,6B280,BCEA0,BF640,A7D00, void, D2PrintStatsPage, ());
|
||||||
//A7(FAST, D2Client,00000,00000,45990,00000,00000,00000,00000,00000, Unit*, D245990, (Inventory*,DWORD idItem);//6FAE5990
|
//A8(FAST, D2Client,00000,00000,45990,00000,00000,00000,00000,00000,00000, Unit*, D245990, (Inventory*,DWORD idItem);//6FAE5990
|
||||||
A8(FAST, D2Client,4BB20,4BB20,521C0,B8CB0,21250,88EA0,54E10,2CE40, E4D80, DWORD, D2PrintStat,(Unit* ptItem, Stats* ptStats, DWORD statID, DWORD statIndex, DWORD statValue, LPWSTR lpText));//statID=EAX, lpText=ESI 1.11b
|
A8(FAST, D2Client,4BB20,4BB20,521C0,B8CB0,21250,88EA0,54E10,2CE40,E4D80, DWORD, D2PrintStat,(Unit* ptItem, Stats* ptStats, DWORD statID, DWORD statIndex, DWORD statValue, LPWSTR lpText));//statID=EAX, lpText=ESI 1.11b
|
||||||
A8(FAST, D2Client,85A60,84DE0,80430,9EEB0,62070,8B7A0,BF5F0,18820, 521C0, LPWSTR, D2SetColorPopup, (LPWSTR popupText, DWORD color));//1.11 and 1.11b BY EDI
|
A8(FAST, D2Client,85A60,84DE0,80430,9EEB0,62070,8B7A0,BF5F0,18820,521C0, LPWSTR, D2SetColorPopup, (LPWSTR popupText, DWORD color));//1.11 and 1.11b BY EDI
|
||||||
//A7(FAST, D2Client,00000,00000,869F0,00000,00000,00000,00000,00000, Unit*, D2ClientGetObject, (DWORD itemNum, DWORD type));//6FB269F0
|
//A8(FAST, D2Client,00000,00000,869F0,00000,00000,00000,00000,00000,00000, Unit*, D2ClientGetObject, (DWORD itemNum, DWORD type));//6FB269F0
|
||||||
A8(FAST, D2Client,B4360,B36E0,B5820,3ACC0,54210,31FA0,88A70,26270, B9A00, DWORD, D2PlaySound, (DWORD id, DWORD, DWORD, DWORD, DWORD));
|
A8(FAST, D2Client,B4360,B36E0,B5820,3ACC0,54210,31FA0,88A70,26270,B9A00, DWORD, D2PlaySound, (DWORD id, DWORD, DWORD, DWORD, DWORD));
|
||||||
//A7(FAST, D2Client,B9970,B8CF0,BB0F0,00000,00000,00000,00000,00000, void, D2FillRect,(DWORD x, DWORD y, DWORD Width, DWORD Height, DWORD color, DWORD transTbl));
|
//A8(FAST, D2Client,B9970,B8CF0,BB0F0,00000,00000,00000,00000,00000,00000, void, D2FillRect,(DWORD x, DWORD y, DWORD Width, DWORD Height, DWORD color, DWORD transTbl));
|
||||||
A8(FAST, D2Client,00000,00000,00000,00000,571C0,18450,46150,790D0, 790D0, Unit*, D2GetCurrentNPC, ());
|
//A8(FAST, D2Client,00000,00000,00000,00000,571C0,18450,46150,790D0,00000, Unit*, D2GetCurrentNPC, ());
|
||||||
A8(FAST, D2Client,00000,00000,00000,73260,5DE40,791A0,143E0,B61F0, 78350, void, D2SendToServerXX,(DWORD size, BYTE * data));//by EBX
|
A8(FAST, D2Client,00000,00000,00000,73260,5DE40,791A0,143E0,B61F0,78350, void, D2SendToServerXX,(DWORD size, BYTE * data));//by EBX
|
||||||
A8(FAST, D2Client,88940,87CC0,83260,A1F30,65690,8EF00,C2790,1C190, 55F20, void, D2TogglePage, (DWORD a, DWORD b, DWORD c));
|
A8(FAST, D2Client,88940,87CC0,83260,A1F30,65690,8EF00,C2790,1C190,55F20, void, D2TogglePage, (DWORD a, DWORD b, DWORD c));
|
||||||
A8(FAST, D2Client,00000,00000,00000,A6520,710C0,A6640,8CD00,90C10, 89980, void, D2ClickOnStashButton, (DWORD x, DWORD y));//BY x=ESI y=EDI
|
A8(FAST, D2Client,00000,00000,00000,A6520,710C0,A6640,8CD00,90C10,89980, void, D2ClickOnStashButton, (DWORD x, DWORD y));//BY x=ESI y=EDI
|
||||||
A8(STD, D2Client,897B0,88B30,84110,9E3B0,621C0,8B8F0,BEAF0,18AA0, 54600, void*, D2LoadBuySelBtn, ());
|
A8(STD, D2Client,897B0,88B30,84110,9E3B0,621C0,8B8F0,BEAF0,18AA0,54600, void*, D2LoadBuySelBtn, ());
|
||||||
A8(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0,7DC60, 7DC60, void, D2ReloadGambleScreen, ());
|
//A8(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0,7DC60,00000, void, D2ReloadGambleScreen, ());
|
||||||
//A7(FAST, D2Client,00000,00000,00000,00000,1FEB0,5CDD0,00000,00000, void, D2OpenNPCMenu, (Unit* ptNPC));//by ESI
|
//A8(FAST, D2Client,00000,00000,00000,00000,1FEB0,5CDD0,00000,00000,00000, void, D2OpenNPCMenu, (Unit* ptNPC));//by ESI
|
||||||
|
A8(FAST, D2Client,00000,00000,00000,00000,00000,00000,00000,00000,520C0, void*, D2LoadResImage, (const char* filename));
|
||||||
|
A8(FAST, D2Client,00000,00000,00000,00000,00000,00000,00000,00000,96990, void*, D2FreeResImages, ());
|
||||||
|
A8(FAST, D2Client,00000,00000,00000,00000,00000,00000,00000,00000,5C850, void*, D2ReceivePacket, (DWORD a , DWORD b));
|
||||||
|
A8(STD, D2Client,87220,865A0,81B70,A35F0,669F0,90150,C39E0,1D3E0,56EE0, DWORD, D2PrintInterface, (void* unknown));
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//D2Game : 6FC30000
|
//D2Game : 6FC30000
|
||||||
@ -351,7 +353,7 @@ A8(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0,7DC60, 7DC60, void,
|
|||||||
////E2F(D2Game,22C00, WORD, D2GetNewAffix, (Unit* ptItem, DWORD testIfSpawnable, DWORD mustSelectOne, DWORD addToItem, DWORD isPrefix, int affixID, WORD autoAffixGroupID));//6FC52C00
|
////E2F(D2Game,22C00, WORD, D2GetNewAffix, (Unit* ptItem, DWORD testIfSpawnable, DWORD mustSelectOne, DWORD addToItem, DWORD isPrefix, int affixID, WORD autoAffixGroupID));//6FC52C00
|
||||||
////E2F(D2Game,23610, WORD, D2GetRareAffixName, (Unit* ptItem, DWORD wantPrefix));//6FC53610
|
////E2F(D2Game,23610, WORD, D2GetRareAffixName, (Unit* ptItem, DWORD wantPrefix));//6FC53610
|
||||||
////E2F(D2Game,3AD10, DWORD, D2GetSuperUniqueMonsterID, (Game* ptGame, Unit* ptMonster));//6FC6AD10
|
////E2F(D2Game,3AD10, DWORD, D2GetSuperUniqueMonsterID, (Game* ptGame, Unit* ptMonster));//6FC6AD10
|
||||||
//E2F(D2Game,EC7E0, DWORD, D2SpawnMonster, (Game* ptGame, Room* ptRoom, DWORD zero1, DWORD x, DWORD y, DWORD minusOne, DWORD superuniqueID, DWORD zero2));//1.11b (wrong param)
|
//E2F(D2Game,EC7E0, DWORD, D2SpawnSuperUnique, (Game* ptGame, Room* ptRoom, DWORD zero1, DWORD x, DWORD y, DWORD minusOne, DWORD superuniqueID, DWORD zero2));//1.11b (wrong param)
|
||||||
//E2S(D2Game,235C0, void, D2Game235C0, (Game* ptGame, Room* ptRoom));//1.11/1.11b
|
//E2S(D2Game,235C0, void, D2Game235C0, (Game* ptGame, Room* ptRoom));//1.11/1.11b
|
||||||
//E2F(D2Game,4C7B0, Unit*, D2GetSkillItem, (Unit* ptChar));//6FC7C7B0
|
//E2F(D2Game,4C7B0, Unit*, D2GetSkillItem, (Unit* ptChar));//6FC7C7B0
|
||||||
////E2F(D2Game,5A500, DWORD, D2SavePlayer, (Game* ptGame, Unit* ptChar, char* playername, DWORD zero));//6FC8A500
|
////E2F(D2Game,5A500, DWORD, D2SavePlayer, (Game* ptGame, Unit* ptChar, char* playername, DWORD zero));//6FC8A500
|
||||||
@ -362,53 +364,57 @@ A8(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0,7DC60, 7DC60, void,
|
|||||||
//E2F(D2Game,C09E0, Unit*, D2CreateUnit, (DWORD type, DWORD id, DWORD x, DWORD y, Game* ptGame, Room* ptRoom, DWORD uk1, DWORD uk2, DWORD uk3));//1.11b
|
//E2F(D2Game,C09E0, Unit*, D2CreateUnit, (DWORD type, DWORD id, DWORD x, DWORD y, Game* ptGame, Room* ptRoom, DWORD uk1, DWORD uk2, DWORD uk3));//1.11b
|
||||||
//E2F(D2Game,34920, void, D2OpenPandPortal, (Game* ptGame, Unit* ptChar));//1.11b
|
//E2F(D2Game,34920, void, D2OpenPandPortal, (Game* ptGame, Unit* ptChar));//1.11b
|
||||||
//E2F(D2Game,34910, void, D2OpenPandFinalPortal, (Game* ptGame, Unit* ptChar));//1.11b
|
//E2F(D2Game,34910, void, D2OpenPandFinalPortal, (Game* ptGame, Unit* ptChar));//1.11b
|
||||||
//E2F(D2Game,85AA0, void, D2MephIA, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
//E2F(D2Game,85AA0, void, D2MephAI, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
||||||
//E2F(D2Game,D7BD0, void, D2DiabloIA, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
//E2F(D2Game,D7BD0, void, D2DiabloAI, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
||||||
//E2F(D2Game,2BC80, void, D2BaalIA, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
//E2F(D2Game,2BC80, void, D2BaalAI, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
||||||
//E2F(D2Game,D2D70, void, D2UberMephIA, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
//E2F(D2Game,D2D70, void, D2UberMephAI, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
||||||
//E2F(D2Game,7FE60, void, D2UberDiabloIA, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
//E2F(D2Game,7FE60, void, D2UberDiabloAI, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
||||||
//E2F(D2Game,2A300, void, D2UberBaalIA, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
//E2F(D2Game,2A300, void, D2UberBaalAI, (Game* ptGame, Unit* ptMonster, DWORD*));//1.11b
|
||||||
////E2F(D2Game,92420, void, D2ReloadGambleScreenGame, (Unit* ptNPC, Game* ptGame, Unit* ptChar, DWORD, DWORD one));//1.11b
|
////E2F(D2Game,92420, void, D2ReloadGambleScreenGame, (Unit* ptNPC, Game* ptGame, Unit* ptChar, DWORD, DWORD one));//1.11b
|
||||||
//E2S(D2Game,E66D0, void, D2SaveGame, (Game* ptGame));//1.11b
|
//E2S(D2Game,E66D0, void, D2SaveGame, (Game* ptGame));//1.11b
|
||||||
|
|
||||||
|
|
||||||
F8(FAST, D2Game,10059,10059,10059,10039,10007,10037,10049,10002, 135780, void, D2SetNbPlayers, (DWORD nbPlayers));
|
F8(FAST, D2Game,10059,10059,10059,10039,10007,10037,10049,10002,135780, void, D2SetNbPlayers, (DWORD nbPlayers));
|
||||||
//A7(FAST, D2Game,00000,00000,01DE0,00000,00000,00000,00000,00000, void*, D2GetClientByClientID, (Game* ptGame, DWORD clientID));//6FC31DE0
|
//A8(FAST, D2Game,00000,00000,01DE0,00000,00000,00000,00000,00000,00000, void*, D2GetClientByClientID, (Game* ptGame, DWORD clientID));//6FC31DE0
|
||||||
A8(FAST, D2Game,00000,00000, 6C60,E3DA0,E8210,EB060,49930,E5070, 12C550, void, D2AddClient, (DWORD clientID));//BY EAX
|
A8(FAST, D2Game,00000,00000, 6C60,E3DA0,E8210,EB060,49930,E5070,12C550, void, D2AddClient, (DWORD clientID));//BY EAX
|
||||||
A8(STD, D2Game,00000,00000, 94E0,E0520,E49A0,A6360,2AAE0,BC700, /*12E860*/12FEE0, Game*, D2GetGameByClientID, (DWORD clientID));//6FC394E0
|
A8(STD, D2Game,00000,00000, 94E0,E0520,E49A0,A6360,2AAE0,BC700,12E860, Game*, D2GetGameByClientID, (DWORD clientID));//6FC394E0
|
||||||
A8(FAST, D2Game,00000,00000, B0E0,DF250,E36D0,A5080,29820,BB510, 12DED0, void, D2BroadcastFunction, (Game* ptGame, void* fct, void* param));//00DAB0E0
|
A8(FAST, D2Game,00000,00000, B0E0,DF250,E36D0,A5080,29820,BB510,12DED0, void, D2BroadcastFunction, (Game* ptGame, void* fct, void* param));//00DAB0E0
|
||||||
A8(FAST, D2Game, C380, C650, C710,41420,A0D50,7D220,8A3E0,DB780, 13B280, DWORD, D2SendPacket, (void* ptNetClient, LPVOID pData, DWORD size));//EAX=ptNetClient [ESP]=pData
|
A8(FAST, D2Game, C380, C650, C710,41420,A0D50,7D220,8A3E0,DB780,13B280, DWORD, D2SendPacket, (void* ptNetClient, LPVOID pData, DWORD size));//EAX=ptNetClient [ESP]=pData
|
||||||
A8(FAST, D2Game, D650, D920, DB50,44D00,A3F20,802E0,8D5F0,DD4F0, 13C4A0, void, D2SetSkillBaseLevelOnClient, (void* ptClient, Unit* ptChar, DWORD skillID, DWORD sLvl, DWORD bRemove));//by EAX,ESI,EBX
|
A8(FAST, D2Game, D650, D920, DB50,44D00,A3F20,802E0,8D5F0,DD4F0,13C4A0, void, D2SetSkillBaseLevelOnClient, (void* ptClient, Unit* ptChar, DWORD skillID, DWORD sLvl, DWORD bRemove));//by EAX,ESI,EBX
|
||||||
//A7(FAST, D2Game,00000,00000,0E6F0,00000,00000,00000,00000,00000, void, D2UpdateClientItem, (NetClient* ptNetClient, Unit* ptChar, Unit* ptItem,DWORD,DWORD,DWORD));//6FC3E6F0
|
//A8(FAST, D2Game,00000,00000,0E6F0,00000,00000,00000,00000,00000,00000, void, D2UpdateClientItem, (NetClient* ptNetClient, Unit* ptChar, Unit* ptItem,DWORD,DWORD,DWORD));//6FC3E6F0
|
||||||
//A7(FAST, D2Game,00000,00000,10FB0,00000,00000,00000,00000,00000, DWORD, D2UpdateInventory, (Game* ptGame, Unit* ptChar, void* ptNetClient, Inventory* pInventory));//6FC40FB0
|
//A8(FAST, D2Game,00000,00000,10FB0,00000,00000,00000,00000,00000,00000, DWORD, D2UpdateInventory, (Game* ptGame, Unit* ptChar, void* ptNetClient, Inventory* pInventory));//6FC40FB0
|
||||||
//A7(FAST, D2Game,00000,00000,110E0,00000,00000,00000,00000,00000, DWORD, D2UpdateItem, (Unit* ptChar, Unit* ptItem, Unit* ptSocketedItem, void* ptNetClient));//6FC410E0
|
//A8(FAST, D2Game,00000,00000,110E0,00000,00000,00000,00000,00000,00000, DWORD, D2UpdateItem, (Unit* ptChar, Unit* ptItem, Unit* ptSocketedItem, void* ptNetClient));//6FC410E0
|
||||||
A8(STD, D2Game,00000,00000,00000,27230,109F0,AE930,A22E0,15F40, 16CF40, DWORD, D2LinkPortal, (Game* ptGame, Unit* ptObject, DWORD levelEndID, DWORD levelStartID));
|
A8(STD, D2Game,00000,00000,00000,27230,109F0,AE930,A22E0,15F40,16CF40, DWORD, D2LinkPortal, (Game* ptGame, Unit* ptObject, DWORD levelEndID, DWORD levelStartID));
|
||||||
A8(FAST, D2Game,00000,00000,128F0,38D90,43E60,11FF0,D2070,B2F70, 15CA40, DWORD, D2VerifIfNotCarry1, (Unit* ptItem, ItemsBIN* itemsData, Unit* ptFirstItem));// BY EBX=itemsData EAX=ptFirstItem [ESP]=ptItem
|
A8(FAST, D2Game,00000,00000,128F0,38D90,43E60,11FF0,D2070,B2F70,15CA40, DWORD, D2VerifIfNotCarry1, (Unit* ptItem, ItemsBIN* itemsData, Unit* ptFirstItem));// BY EBX=itemsData EAX=ptFirstItem [ESP]=ptItem
|
||||||
//A7(FAST, D2Game,00000,00000,1ED80,00000,00000,00000,00000,00000, Unit*, D2CreateItem, (Game* ptGame, ItemGenerationData* itemGenerationData, DWORD));//6FC4ED80
|
//A8(FAST, D2Game,00000,00000,1ED80,00000,00000,00000,00000,00000,00000, Unit*, D2CreateItem, (Game* ptGame, ItemGenerationData* itemGenerationData, DWORD));//6FC4ED80
|
||||||
A8(FAST, D2Game,00000,00000,22070, 1090, 1DF0, 11F0, 1280, 1340, 63740, Room*, D2TestPositionInRoom, (Room* ptRoom, DWORD x, DWORD y));
|
A8(FAST, D2Game,00000,00000,22070, 1090, 1DF0, 11F0, 1280, 1340,63740, Room*, D2TestPositionInRoom, (Room* ptRoom, DWORD x, DWORD y));
|
||||||
//A7(FAST, D2Game,00000,00000,22410,00000,00000,00000,00000,00000, void, D2AddStaffModAffixes, (Unit* ptItem, ItemGenerationData* itemParam));//6FC52410
|
//A8(FAST, D2Game,00000,00000,22410,00000,00000,00000,00000,00000,00000, void, D2AddStaffModAffixes, (Unit* ptItem, ItemGenerationData* itemParam));//6FC52410
|
||||||
//A7(FAST, D2Game,00000,00000,22C00,00000,00000,00000,00000,00000, WORD, D2GetNewAffix, (Unit* ptItem, DWORD testIfSpawnable, DWORD mustSelectOne, DWORD addToItem, DWORD isPrefix, int affixID, WORD autoAffixGroupID));//6FC52C00
|
//A8(FAST, D2Game,00000,00000,22C00,00000,00000,00000,00000,00000,00000, WORD, D2GetNewAffix, (Unit* ptItem, DWORD testIfSpawnable, DWORD mustSelectOne, DWORD addToItem, DWORD isPrefix, int affixID, WORD autoAffixGroupID));//6FC52C00
|
||||||
//A7(FAST, D2Game,00000,00000,23610,00000,00000,00000,00000,00000, WORD, D2GetRareAffixName, (Unit* ptItem, DWORD wantPrefix));//6FC53610
|
//A8(FAST, D2Game,00000,00000,23610,00000,00000,00000,00000,00000,00000, WORD, D2GetRareAffixName, (Unit* ptItem, DWORD wantPrefix));//6FC53610
|
||||||
//A7(FAST, D2Game,00000,00000,3AD10,00000,00000,00000,00000,00000, DWORD, D2GetSuperUniqueMonsterID, (Game* ptGame, Unit* ptMonster));//6FC6AD10
|
//A8(FAST, D2Game,00000,00000,3AD10,00000,00000,00000,00000,00000,00000, DWORD, D2GetSuperUniqueMonsterID, (Game* ptGame, Unit* ptMonster));//6FC6AD10
|
||||||
A8(FAST, D2Game,00000,00000,3F220,4ABE0,EC7E0,40B90,24950,CDE20, 1A09E0, DWORD, D2SpawnMonster, (Game* ptGame, Room* ptRoom, DWORD zero1, DWORD x, DWORD y, DWORD minusOne, DWORD superuniqueID, DWORD zero2));//wrong param
|
A8(FAST, D2Game,00000,00000,3F220,4ABE0,EC7E0,40B90,24950,CDE20,1A09E0, DWORD, D2SpawnSuperUnique, (Game* ptGame, Room* ptRoom, DWORD zero1, DWORD x, DWORD y, DWORD minusOne, DWORD superuniqueID, DWORD zero2));//wrong param
|
||||||
A8(STD, D2Game,00000,00000,00000,D6D10,235C0, D410,200E0,59980, 142B40, void, D2Game235C0, (Game* ptGame, Room* ptRoom));
|
A8(FAST, D2Game,00000,00000,00000,C80F0,EF870,EFB10,EF650,C8D70,1B2F20, Unit*, D2SpawnMonster, (DWORD id, DWORD mode, Game* ptGame, Room* ptRoom, DWORD x, DWORD y, DWORD one, DWORD zero));
|
||||||
//A7(FAST, D2Game,00000,00000,4C7B0,00000,00000,00000,00000,00000, Unit*, D2GetSkillItem, (Unit* ptChar));//6FC7C7B0
|
A8(STD, D2Game,00000,00000,00000,D6D10,235C0, D410,200E0,59980,142B40, void, D2Game235C0, (Game* ptGame, Room* ptRoom));
|
||||||
//A7(FAST, D2Game,00000,00000,5A500,00000,00000,00000,00000,00000, DWORD, D2SavePlayer, (Game* ptGame, Unit* ptChar, char* playername, DWORD zero));//6FC8A500
|
//A8(FAST, D2Game,00000,00000,4C7B0,00000,00000,00000,00000,00000,00000, Unit*, D2GetSkillItem, (Unit* ptChar));//6FC7C7B0
|
||||||
A8(FAST, D2Game,4F100,4F500,5B8A0,B9D70,25D50,44950,54810,3A4C0, 1335E0, DWORD, D2LoadInventory, (Game* ptGame, Unit* pChar, saveBitField* pdata, DWORD p2, DWORD maxSize, DWORD p4, DWORD *ptNbBytesRead));//6FC8B8A0
|
//A8(FAST, D2Game,00000,00000,5A500,00000,00000,00000,00000,00000,00000, DWORD, D2SavePlayer, (Game* ptGame, Unit* ptChar, char* playername, DWORD zero));//6FC8A500
|
||||||
A8(FAST, D2Game,7BAE0,7BFD0,8BB00,97620,BEF80,93650,E03A0,6DC40, 152F60, Unit*, D2GameGetObject, (Game* ptGame, DWORD type, DWORD itemNum));//6FCBBB00
|
A8(FAST, D2Game,4F100,4F500,5B8A0,B9D70,25D50,44950,54810,3A4C0,1335E0, DWORD, D2LoadInventory, (Game* ptGame, Unit* pChar, saveBitField* pdata, DWORD p2, DWORD maxSize, DWORD p4, DWORD *ptNbBytesRead));//6FC8B8A0
|
||||||
//A7(FAST, D2Game,00000,00000,9F320,501C0,F1C50,F1A50,F3220,00000, Unit*, D2GetOwnerMonster, (Unit* ptMonster));
|
A8(FAST, D2Game,7BAE0,7BFD0,8BB00,97620,BEF80,93650,E03A0,6DC40,152F60, Unit*, D2GameGetObject, (Game* ptGame, DWORD type, DWORD itemNum));//6FCBBB00
|
||||||
//A7(FAST, D2Game,00000,00000,E08D0,00000,00000,00000,00000,00000, void, D2UpdateSkillDataAfterUnassignment, (Game* ptGame, Unit* ptChar, DWORD skillID));//6FD108D0
|
//A8(FAST, D2Game,00000,00000,9F320,501C0,F1C50,F1A50,F3220,00000,00000, Unit*, D2GetOwnerMonster, (Unit* ptMonster));
|
||||||
A8(FAST, D2Game,00000,00000,00000,99760,C09E0,94E70,E1D90,6FE10, 155230, Unit*, D2CreateUnit, (DWORD type, DWORD id, DWORD x, DWORD y, Game* ptGame, Room* ptRoom, DWORD uk1, DWORD uk2, DWORD uk3));
|
//A8(FAST, D2Game,00000,00000,E08D0,00000,00000,00000,00000,00000,00000, void, D2UpdateSkillDataAfterUnassignment, (Game* ptGame, Unit* ptChar, DWORD skillID));//6FD108D0
|
||||||
A8(FAST, D2Game,00000,00000,00000,9B480,34920,D1AA0,70180,941E0, 194270, void, D2OpenPandPortal, (Game* ptGame, Unit* ptChar));
|
A8(FAST, D2Game,00000,00000,00000,99760,C09E0,94E70,E1D90,6FE10,155230, Unit*, D2CreateUnit, (DWORD type, DWORD id, DWORD x, DWORD y, Game* ptGame, Room* ptRoom, DWORD uk1, DWORD uk2, DWORD uk3));
|
||||||
A8(FAST, D2Game,00000,00000,00000,9B470,34910,D1A90,70170,941D0, 194280, void, D2OpenPandFinalPortal, (Game* ptGame, Unit* ptChar));
|
A8(FAST, D2Game,00000,00000,00000,9B480,34920,D1AA0,70180,941E0,165A90, void, D2OpenPandPortal, (Game* ptGame, Unit* ptChar));
|
||||||
A8(FAST, D2Game,00000,00000,00000,84730,85AA0,DBE90,A9610,31920, 1E9170, void, D2MephIA, (Game* ptGame, Unit* ptMonster, DWORD*));
|
A8(FAST, D2Game,00000,00000,00000,9B470,34910,D1A90,70170,941D0,165AA0, void, D2OpenPandFinalPortal, (Game* ptGame, Unit* ptChar));
|
||||||
A8(FAST, D2Game,00000,00000,00000,75980,D7BD0,CD0F0,85B60,4EAD0, 1F78B0, void, D2DiabloIA, (Game* ptGame, Unit* ptMonster, DWORD*));
|
A8(FAST, D2Game,00000,00000,00000,75980,D7BD0,CD0F0,85B60,4EAD0,1F78B0, void, D2MephAI, (Game* ptGame, Unit* ptMonster, AIParam* args));
|
||||||
A8(FAST, D2Game,00000,00000,00000,EAB20,2BC80,B3B90,B8610,C8850, 1FCFE0, void, D2BaalIA, (Game* ptGame, Unit* ptMonster, DWORD*));
|
A8(FAST, D2Game,00000,00000,00000,84730,85AA0,DBE90,A9610,31920,1E9170, void, D2DiabloAI, (Game* ptGame, Unit* ptMonster, AIParam* args));
|
||||||
A8(FAST, D2Game,00000,00000,00000,70320,D2D70,C2A90,7B4E0,49480, 1F81C0, void, D2UberMephIA, (Game* ptGame, Unit* ptMonster, DWORD*));
|
A8(FAST, D2Game,00000,00000,00000,EAB20,2BC80,B3B90,B8610,C8850,1FCFE0, void, D2BaalAI, (Game* ptGame, Unit* ptMonster, AIParam* args));
|
||||||
A8(FAST, D2Game,00000,00000,00000,7F200,7FE60,D6250,A39D0,2C3F0, 1E9DF0, void, D2UberDiabloIA, (Game* ptGame, Unit* ptMonster, DWORD*));
|
A8(FAST, D2Game,00000,00000,00000,E92B0,2A300,B2210,B6C80,C6EC0,1FD200, void, D2UberBaalAI, (Game* ptGame, Unit* ptMonster, AIParam* args));
|
||||||
A8(FAST, D2Game,00000,00000,00000,E92B0,2A300,B2210,B6C80,C6EC0, 1FD200, void, D2UberBaalIA, (Game* ptGame, Unit* ptMonster, DWORD*));
|
A8(FAST, D2Game,00000,00000,00000,70320,D2D70,C2A90,7B4E0,49480,1F81C0, void, D2UberMephAI, (Game* ptGame, Unit* ptMonster, AIParam* args));
|
||||||
//A7(FAST, D2Game,00000,00000,00000,00000,92420,00000,00000,00000, void, D2ReloadGambleScreenGame, (Unit* ptNPC, Game* ptGame, Unit* ptChar, DWORD, DWORD one));
|
A8(FAST, D2Game,00000,00000,00000,7F200,7FE60,D6250,A39D0,2C3F0,1E9DF0, void, D2UberDiabloAI, (Game* ptGame, Unit* ptMonster, AIParam* args));
|
||||||
A8(STD, D2Game,00000,00000, 89C0,E2390,E66D0,A8090,2C830,BE660, 12CA10, void, D2SaveGame, (Game* ptGame) );
|
//A8(FAST, D2Game,00000,00000,00000,00000,92420,00000,00000,00000,179430, void, D2ReloadGambleScreenGame, (Unit* ptNPC, Game* ptGame, Unit* ptChar, DWORD, DWORD one));
|
||||||
|
A8(STD, D2Game,00000,00000, 89C0,E2390,E66D0,A8090,2C830,BE660,12CA10, void, D2SaveGame, (Game* ptGame) );
|
||||||
|
A8(FAST, D2Game,00000,00000,00000,EF580,F0F70,F0D70,F2540,F1800,1DEB60, void, D2MonsterMove, (Game* ptGame, Unit* ptMonster, Unit* target, DWORD two, DWORD x, DWORD y, DWORD one, DWORD zero) );
|
||||||
|
A8(FAST, D2Game,00000,00000,00000,FF1B0,F0DB0,F0BB0,F2380,F1430,1DEAD0, void, D2MonsterUseSkill, (Game* ptGame, Unit* ptMonster, DWORD arg, DWORD skill, Unit* target, DWORD x, DWORD y) );
|
||||||
|
A8(FAST, D2Game,00000,00000,00000,B9340,25450,44140,53F10,39810,132240, void, D2SaveSPChar, (Game* ptGame, Unit* ptChar, char* name, DWORD arg, DWORD secondPass) );
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -416,8 +422,8 @@ A8(STD, D2Game,00000,00000, 89C0,E2390,E66D0,A8090,2C830,BE660, 12CA10, void,
|
|||||||
//D2S(D2Net,10020, DWORD, D2SendToServer, (DWORD size, DWORD one, void* data));//ONLY 1.11b
|
//D2S(D2Net,10020, DWORD, D2SendToServer, (DWORD size, DWORD one, void* data));//ONLY 1.11b
|
||||||
//D2S(D2Net,10018, DWORD, D2SendToClient, (DWORD zero, DWORD clientID, void* data, DWORD size));//ONLY 1.11b
|
//D2S(D2Net,10018, DWORD, D2SendToClient, (DWORD zero, DWORD clientID, void* data, DWORD size));//ONLY 1.11b
|
||||||
|
|
||||||
F8(STD, D2Net, 10005,10005,10005,10035,10020,10036,10024,10015, 12AE50, DWORD, D2SendToServer, (DWORD size, DWORD one, void* data));//(DWORD zero, void* data, DWORD size) for 1.10 and before
|
F8(STD, D2Net, 10005,10005,10005,10035,10020,10036,10024,10015,12AE50, DWORD, D2SendToServer, (DWORD size, DWORD one, void* data));//(DWORD zero, void* data, DWORD size) for 1.10 and before
|
||||||
F8(STD, D2Net, 10006,10006,10006,10018,10018,10015,10002,10012, 12B330, DWORD, D2SendToClient, (DWORD zero, DWORD clientID, void* data, DWORD size));
|
F8(STD, D2Net, 10006,10006,10006,10018,10018,10015,10002,10012,12B330, DWORD, D2SendToClient, (DWORD zero, DWORD clientID, void* data, DWORD size));
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -442,25 +448,25 @@ F8(STD, D2Net, 10006,10006,10006,10018,10018,10015,10002,10012, 12B330, DWORD,
|
|||||||
////D2S(Fog,10217, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840
|
////D2S(Fog,10217, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840
|
||||||
//D2S(Fog,10265, int, D2GetInstructionPointer, ());//ONLY 1.11/1.11b NOT 1.10
|
//D2S(Fog,10265, int, D2GetInstructionPointer, ());//ONLY 1.11/1.11b NOT 1.10
|
||||||
|
|
||||||
F8(STD, Fog, 10023,10023,10023,00000,00000,00000,00000,00000, 00000, void, D2FogAssertOld, (const char* ptMessage, DWORD eip, DWORD line));//(STDCALL until 1.10)
|
F8(STD, Fog, 10023,10023,10023,00000,00000,00000,00000,00000,00000, void, D2FogAssertOld, (const char* ptMessage, DWORD eip, DWORD line));//(STDCALL until 1.10)
|
||||||
F8(FAST, Fog, 00000,00000,00000,10024,10024,10024,10024,10024, 8A60, void, D2FogAssert, (const char* ptMessage, DWORD eip, DWORD line));
|
F8(FAST, Fog, 00000,00000,00000,10024,10024,10024,10024,10024,8A60, void, D2FogAssert, (const char* ptMessage, DWORD eip, DWORD line));
|
||||||
F8(FAST, Fog, 10042,10042,10042,10042,10042,10042,10042,10042, B380, void*, D2FogMemAlloc, (DWORD dwMemSize, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
F8(FAST, Fog, 10042,10042,10042,10042,10042,10042,10042,10042,B380, void*, D2FogMemAlloc, (DWORD dwMemSize, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
||||||
F8(FAST, Fog, 10043,10043,10043,10043,10043,10043,10043,10043, B3C0, void*, D2FogMemDeAlloc, (void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
F8(FAST, Fog, 10043,10043,10043,10043,10043,10043,10043,10043,B3C0, void*, D2FogMemDeAlloc, (void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
||||||
F8(FAST, Fog, 10045,10045,10045,10045,10045,10045,10045,10045, B430, void*, D2AllocMem, (DWORD,DWORD dwMemSize, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
F8(FAST, Fog, 10045,10045,10045,10045,10045,10045,10045,10045,B430, void*, D2AllocMem, (DWORD,DWORD dwMemSize, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
||||||
F8(FAST, Fog, 10046,10046,10046,10046,10046,10046,10046,10046, B480, void*, D2FreeMem, (DWORD,void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
F8(FAST, Fog, 10046,10046,10046,10046,10046,10046,10046,10046,B480, void*, D2FreeMem, (DWORD,void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
||||||
F8(FAST, Fog, 10102,10102,10102,10102,10102,10102,10102,10102, 68E0, DWORD, D2MPQOpenFile, (char* ptPath, void** buf));
|
F8(FAST, Fog, 10102,10102,10102,10102,10102,10102,10102,10102,68E0, DWORD, D2MPQOpenFile, (char* ptPath, void** buf));
|
||||||
F8(FAST, Fog, 10103,10103,10103,10103,10103,10103,10103,10103, 68F0, DWORD, D2MPQCloseFile, (void* mpqfile));
|
F8(FAST, Fog, 10103,10103,10103,10103,10103,10103,10103,10103,68F0, DWORD, D2MPQCloseFile, (void* mpqfile));
|
||||||
F8(FAST, Fog, 10104,10104,10104,10104,10104,10104,10104,10104, 6900, DWORD, D2MPQReadFile, (void* mpqfile, BYTE* buffer, DWORD nbToRead, DWORD* nbRead,DWORD,DWORD,DWORD));
|
F8(FAST, Fog, 10104,10104,10104,10104,10104,10104,10104,10104,6900, DWORD, D2MPQReadFile, (void* mpqfile, BYTE* buffer, DWORD nbToRead, DWORD* nbRead,DWORD,DWORD,DWORD));
|
||||||
F8(FAST, Fog, 10105,10105,10105,10105,10105,10105,10105,10105, 6930, DWORD, D2MPQGetSizeFile, (void* mpqfile, DWORD* toReset));
|
F8(FAST, Fog, 10105,10105,10105,10105,10105,10105,10105,10105,6930, DWORD, D2MPQGetSizeFile, (void* mpqfile, DWORD* toReset));
|
||||||
F8(FAST, Fog, 10115,10115,10115,10115,10115,10115,10115,10115, 7050, void, D2FogGetSavePath, (char* ptPath, DWORD maxsize));
|
F8(FAST, Fog, 10115,10115,10115,10115,10115,10115,10115,10115,7050, void, D2FogGetSavePath, (char* ptPath, DWORD maxsize));
|
||||||
F8(FAST, Fog, 10116,10116,10116,10116,10116,10116,10116,10116, 6BA0, void, D2FogGetInstallPath, (char* ptPath, DWORD maxsize));
|
F8(FAST, Fog, 10116,10116,10116,10116,10116,10116,10116,10116,6BA0, void, D2FogGetInstallPath, (char* ptPath, DWORD maxsize));
|
||||||
//F7(STD, Fog, 10126,10126,10126,10126,10126,10126,10126,10126, DWORD, D2InitBitField, (saveBitField* data, BYTE* buf, DWORD bufsize));//6FF536C0
|
//F8(STD, Fog, 10126,10126,10126,10126,10126,10126,10126,10126,00000, DWORD, D2InitBitField, (saveBitField* data, BYTE* buf, DWORD bufsize));//6FF536C0
|
||||||
//F7(STD, Fog, 10127,10127,10127,10127,10127,10127,10127,10127, DWORD, D2GetBitFieldSize, (saveBitField* data));//6FF536C0
|
//F8(STD, Fog, 10127,10127,10127,10127,10127,10127,10127,10127,00000, DWORD, D2GetBitFieldSize, (saveBitField* data));//6FF536C0
|
||||||
//F7(STD, Fog, 10128,10128,10128,10128,10128,10128,10128,10128, void, D2EncodeValue, (saveBitField* data, DWORD value, DWORD bitSize));//6FF536C0
|
//F8(STD, Fog, 10128,10128,10128,10128,10128,10128,10128,10128,00000, void, D2EncodeValue, (saveBitField* data, DWORD value, DWORD bitSize));//6FF536C0
|
||||||
//F7(STD, Fog, 10130,10130,10130,10130,10130,10130,10130,10130, DWORD, D2DecodeValue, (saveBitField* data,DWORD readingSize));//6FF53840
|
//F8(STD, Fog, 10130,10130,10130,10130,10130,10130,10130,10130,00000, DWORD, D2DecodeValue, (saveBitField* data,DWORD readingSize));//6FF53840
|
||||||
F8(STD, Fog, 10212,10212,10212,10212,10212,10212,10212,10212, 2BD0B0, void, D2Fog10212, (DWORD unknown));
|
F8(STD, Fog, 10212,10212,10212,10212,10212,10212,10212,10212,2BD0B0, void, D2Fog10212, (DWORD unknow));
|
||||||
//F7(STD, Fog, 10217,10217,10217,10217,10217,10217,10217,10217, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840
|
//F8(STD, Fog, 10217,10217,10217,10217,10217,10217,10217,10217,00000, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840
|
||||||
F8(STD, Fog, 00000,00000,00000,10265,10265,10265,10265,10265, 8090, int, D2GetInstructionPointer, ());
|
F8(STD, Fog, 00000,00000,00000,10265,10265,10265,10265,10265,8090, int, D2GetInstructionPointer, ());
|
||||||
//Fog10213 getIndexFromLookupTable (&table,code,bool)
|
//Fog10213 getIndexFromLookupTable (&table,code,bool)
|
||||||
|
|
||||||
|
|
||||||
@ -479,19 +485,19 @@ F8(STD, Fog, 00000,00000,00000,10265,10265,10265,10265,10265, 8090, int, D2Get
|
|||||||
////E2F(D2Lang,2CD0, DWORD, D2unicodenwidth, (char* ptChar, DWORD size));//6FC12CD0_unicodenwidth
|
////E2F(D2Lang,2CD0, DWORD, D2unicodenwidth, (char* ptChar, DWORD size));//6FC12CD0_unicodenwidth
|
||||||
////E2S(D2Lang,1670, DWORD, D2swprintf, (DWORD bufSize, LPWSTR buf, LPWSTR string, ...));//6FC11670_sprintf
|
////E2S(D2Lang,1670, DWORD, D2swprintf, (DWORD bufSize, LPWSTR buf, LPWSTR string, ...));//6FC11670_sprintf
|
||||||
|
|
||||||
//F7(FAST, D2Lang, 10003,10003,10003,00000,00000,00000,00000,10011, LPWSTR, D2GetStringFromString, (const char* ptString));//6FC13BC0
|
//F8(FAST, D2Lang, 10003,10003,10003,00000,00000,00000,00000,10011,00000, LPWSTR, D2GetStringFromString, (const char* ptString));//6FC13BC0
|
||||||
F8(FAST, D2Lang, 10003,10003,10003,10002,10004,10010,10011,10011, 124E20, LPWSTR, D2GetStringFromString, (const char* ptString));//6FC13BC0 LAutour
|
F8(FAST, D2Lang, 10003,10003,10003,10002,10004,10010,10011,10011,124E20, LPWSTR, D2GetStringFromString, (const char* ptString));//6FC13BC0 LAutour
|
||||||
F8(FAST, D2Lang, 10004,10004,10004,10005,10000,10005,10003,10004, 124A30, LPWSTR, D2GetStringFromIndex, (WORD dwIndexNum));
|
F8(FAST, D2Lang, 10004,10004,10004,10005,10000,10005,10003,10004,124A30, LPWSTR, D2GetStringFromIndex, (WORD dwIndexNum));
|
||||||
//F7(STD, D2Lang, 10006,10006,10006,00000,00000,00000,00000,00000, void, D2GetStringLang, (LPSTR ptLang, DWORD Zero));//6FC13FB0
|
//F8(STD, D2Lang, 10006,10006,10006,00000,00000,00000,00000,00000,00000, void, D2GetStringLang, (LPSTR ptLang, DWORD Zero));//6FC13FB0
|
||||||
F8(STD, D2Lang, 10007,10007,10007,10009,10013,10002,10009,10001, 125150, DWORD, D2GetLang, ());//14b 00522A20
|
F8(STD, D2Lang, 10007,10007,10007,10009,10013,10002,10009,10001,125150, DWORD, D2GetLang, ());//14b 00522A20
|
||||||
F8(STD, D2Lang, 10010,10010,10010,00000,00000,00000,00000,00000, 00000, DWORD, D2PrintBigNumber, (LPWSTR ptBuf , DWORD number, DWORD size));//6FC14210
|
F8(STD, D2Lang, 10010,10010,10010,00000,00000,00000,00000,00000,00000, DWORD, D2PrintBigNumber, (LPWSTR ptBuf , DWORD number, DWORD size));//6FC14210
|
||||||
//F7(STD, D2Lang, 10013,10013,10013,00000,00000,00000,00000,10005, DWORD, D2GetStringAndIndexFromString, (const char* ptString , LPWSTR result));//6FC13960
|
//F8(STD, D2Lang, 10013,10013,10013,00000,00000,00000,00000,10005,00000, DWORD, D2GetStringAndIndexFromString, (const char* ptString , LPWSTR result));//6FC13960
|
||||||
//A7(FAST, D2Lang, 00000,00000,029B0,00000,00000,00000,00000,00000, DWORD, D2UnicodeWidth, (DWORD MemLoc, WORD Size));//6FC129B0
|
//A8(FAST, D2Lang, 00000,00000,029B0,00000,00000,00000,00000,00000,00000, DWORD, D2UnicodeWidth, (DWORD MemLoc, WORD Size));//6FC129B0
|
||||||
//A7(FAST, D2Lang, 00000,00000,02E60,00000,00000,00000,00000,00000, LPWSTR, D2GetStrFromIndex , (void* ptFile, void* ptMemLoc, DWORD dwIndexNum));//6FC12E60
|
//A8(FAST, D2Lang, 00000,00000,02E60,00000,00000,00000,00000,00000,00000, LPWSTR, D2GetStrFromIndex , (void* ptFile, void* ptMemLoc, DWORD dwIndexNum));//6FC12E60
|
||||||
//A7(FAST, D2Lang, 00000,00000,03640,00000,00000,00000,00000,00000, TblHeader*, D2LoadTblFile, (LPCSTR lpszFileName));//6FC13640
|
//A8(FAST, D2Lang, 00000,00000,03640,00000,00000,00000,00000,00000,00000, TblHeader*, D2LoadTblFile, (LPCSTR lpszFileName));//6FC13640
|
||||||
//A7(FAST, D2Lang, 00000,00000,03A90,00000,00000,00000,00000,00000, WORD, D2GetStrAndIndexFromString, (void* ptFile, void* ptMemLoc, LPSTR String, LPWSTR RetString));//6FC13A90
|
//A8(FAST, D2Lang, 00000,00000,03A90,00000,00000,00000,00000,00000,00000, WORD, D2GetStrAndIndexFromString, (void* ptFile, void* ptMemLoc, LPSTR String, LPWSTR RetString));//6FC13A90
|
||||||
//A7(FAST, D2Lang, 00000,00000,02CD0,00000,00000,00000,00000,00000, DWORD, D2unicodenwidth, (char* ptChar, DWORD size));//6FC12CD0_unicodenwidth
|
//A8(FAST, D2Lang, 00000,00000,02CD0,00000,00000,00000,00000,00000,00000, DWORD, D2unicodenwidth, (char* ptChar, DWORD size));//6FC12CD0_unicodenwidth
|
||||||
//A7(STD, D2Lang, 00000,00000,01670,00000,00000,00000,00000,00000, DWORD, D2swprintf, (DWORD bufSize, LPWSTR buf, LPWSTR string, ...));//6FC11670_sprintf
|
//A8(STD, D2Lang, 00000,00000,01670,00000,00000,00000,00000,00000,00000, DWORD, D2swprintf, (DWORD bufSize, LPWSTR buf, LPWSTR string, ...));//6FC11670_sprintf
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//Storm : 6FFB0000
|
//Storm : 6FFB0000
|
||||||
@ -500,10 +506,10 @@ F8(STD, D2Lang, 10010,10010,10010,00000,00000,00000,00000,00000, 00000, DWORD,
|
|||||||
//D2S(Storm,503, void, D2Storm503, (DWORD, DWORD, DWORD)); //+1.11
|
//D2S(Storm,503, void, D2Storm503, (DWORD, DWORD, DWORD)); //+1.11
|
||||||
//D2S(Storm,511, void, D2FreeWinMessage, (sWinMessage* msg));//1.11/1.11b
|
//D2S(Storm,511, void, D2FreeWinMessage, (sWinMessage* msg));//1.11/1.11b
|
||||||
|
|
||||||
//F7(STD, Storm, 253, 253, 253, 253, 253, 253, 000, 000, void, D2StormMPQCloseFile, (void* mpqfile));
|
//F8(STD, Storm, 253, 253, 253, 253, 253, 253, 000, 000,00000, void, D2StormMPQCloseFile, (void* mpqfile));
|
||||||
F8(STD, Storm, 268, 268, 268, 268, 268, 268, 268, 268, 192F0, DWORD, D2StormMPQOpenFile, (DWORD zero, LPCSTR fileName, DWORD dwSearchScope, void** buffer))
|
F8(STD, Storm, 268, 268, 268, 268, 268, 268, 268, 268, 192F0, DWORD, D2StormMPQOpenFile, (DWORD zero, LPCSTR fileName, DWORD dwSearchScope, void** buffer))
|
||||||
F8(STD, Storm, 503, 503, 503, 503, 503, 503, 503, 503, 13750, void, D2Storm503, (DWORD, DWORD, DWORD));
|
F8(STD, Storm, 503, 503, 503, 503, 503, 503, 503, 503, 13750, void, D2Storm503, (DWORD, DWORD, DWORD));
|
||||||
F8(STD, Storm, 511, 511, 511, 511, 511, 511, 511, 511, 20290, void, D2FreeWinMessage, (sWinMessage* msg));
|
F8(STD, Storm, 511, 511, 511, 511, 511, 511, 511, 511, 20290, void, D2FreeWinMessage, (sWinMessage* msg));
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -515,12 +521,12 @@ F8(STD, Storm, 511, 511, 511, 511, 511, 511, 511, 511, 20290, void, D
|
|||||||
//D2S(D2gfx,10000, void, D2FillArea,(DWORD x1, DWORD y1, DWORD x2, DWORD y2, DWORD color, DWORD transTbl));//ONLY 1.11b
|
//D2S(D2gfx,10000, void, D2FillArea,(DWORD x1, DWORD y1, DWORD x2, DWORD y2, DWORD color, DWORD transTbl));//ONLY 1.11b
|
||||||
//D2S(D2gfx,10044, void, D2PrintImage,(sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) );//ONLY 1.11b
|
//D2S(D2gfx,10044, void, D2PrintImage,(sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) );//ONLY 1.11b
|
||||||
|
|
||||||
F8(STD, D2gfx, 10005,10005,10005,10000,10063,10043,10031,10012, F5160, DWORD, D2GetResolution,() );
|
F8(STD, D2gfx, 10005,10005,10005,10000,10063,10043,10031,10012,F5160, DWORD, D2GetResolution,() );
|
||||||
//F7,STD, D2gfx, 10023,10023,10023,00000,00000,00000,00000,00000, DWORD, D2CreateMainWindow,(DWORD,DWORD) );
|
//F8,STD, D2gfx, 10023,10023,10023,00000,00000,00000,00000,00000,00000, DWORD, D2CreateMainWindow,(DWORD,DWORD) );
|
||||||
//F7(STD, D2gfx, 10026,10026,10026,00000,00000,00000,00000,00000, DWORD, D2ShowWindow,() );
|
//F8(STD, D2gfx, 10026,10026,10026,00000,00000,00000,00000,00000,00000, DWORD, D2ShowWindow,() );
|
||||||
//F7,STD, D2gfx, 10027,10027,10027,00000,00000,00000,00000,00000, HWND, D2GetWindowHandle,() );//6FA749C0
|
//F8,STD, D2gfx, 10027,10027,10027,00000,00000,00000,00000,00000,00000, HWND, D2GetWindowHandle,() );//6FA749C0
|
||||||
F8(STD, D2gfx, 10055,10055,10055,10028,10000,10062,10014,10028, F6300, void, D2FillArea,(DWORD x1, DWORD y1, DWORD x2, DWORD y2, DWORD color, DWORD transTbl));
|
F8(STD, D2gfx, 10055,10055,10055,10028,10000,10062,10014,10028,F6300, void, D2FillArea,(DWORD x1, DWORD y1, DWORD x2, DWORD y2, DWORD color, DWORD transTbl));
|
||||||
F8(STD, D2gfx, 10072,10072,10072,10047,10044,10024,10041,10042, F6480, void, D2PrintImage,(sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) );
|
F8(STD, D2gfx, 10072,10072,10072,10047,10044,10024,10041,10042,F6480, void, D2PrintImage,(sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) );
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -534,36 +540,36 @@ F8(STD, D2gfx, 10072,10072,10072,10047,10044,10024,10041,10042, F6480, void, D
|
|||||||
//D2F(D2Win,10132, DWORD, D2PrintTextPopup,(LPWSTR s, DWORD x, DWORD y, DWORD uk, DWORD type, DWORD color) );//6F8AB080
|
//D2F(D2Win,10132, DWORD, D2PrintTextPopup,(LPWSTR s, DWORD x, DWORD y, DWORD uk, DWORD type, DWORD color) );//6F8AB080
|
||||||
//D2S(D2Win,10113, void*, D2CreateTextBox,(DWORD* data) );//ONLY 1.11b
|
//D2S(D2Win,10113, void*, D2CreateTextBox,(DWORD* data) );//ONLY 1.11b
|
||||||
|
|
||||||
F8(FAST, D2Win, 10046,10046,10046,10061,10075,10015,10022,10051, FCFF0, void, D2PrintLineOnTextBox,(void* screen, char* s, DWORD color) );
|
F8(FAST, D2Win, 10046,10046,10046,10061,10075,10015,10022,10051,FCFF0, void, D2PrintLineOnTextBox,(void* screen, char* s, DWORD color) );
|
||||||
F8(FAST, D2Win, 10117,10117,10117,10020,10064,10001,10150,10076, 102320, void, D2PrintString,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD bfalse) );
|
F8(FAST, D2Win, 10117,10117,10117,10020,10064,10001,10150,10076,102320, void, D2PrintString,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD bfalse) );
|
||||||
F8(FAST, D2Win, 10121,10121,10121,10034,10128,10132,10028,10150, 101820, DWORD, D2GetPixelLen,(LPWSTR s) );
|
F8(FAST, D2Win, 10121,10121,10121,10034,10128,10132,10028,10150,101820, DWORD, D2GetPixelLen,(LPWSTR s) );
|
||||||
F8(FAST, D2Win, 10127,10127,10127,10141,10170,10010,10184,10047, 102EF0, DWORD, D2SetFont,(DWORD fontID) );
|
F8(FAST, D2Win, 10127,10127,10127,10141,10170,10010,10184,10047,102EF0, DWORD, D2SetFont,(DWORD fontID) );
|
||||||
F8(FAST, D2Win, 10129,10129,10129,10118,10039,10031,10085,10137, 102280, void, D2PrintPopup,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD center) );
|
F8(FAST, D2Win, 10129,10129,10129,10118,10039,10031,10085,10137,102280, void, D2PrintPopup,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD center) );
|
||||||
F8(FAST, D2Win, 10131,10131,10131,00000,00000,00000,00000,00000, 00000, void, D2GetPixelRect,(LPWSTR s, DWORD* x, DWORD* y) );//6F8AB260
|
F8(FAST, D2Win, 10131,10131,10131,00000,00000,00000,00000,00000,00000, void, D2GetPixelRect,(LPWSTR s, DWORD* x, DWORD* y) );//6F8AB260
|
||||||
F8(FAST, D2Win, 10132,10132,10132,00000,00000,00000,00000,00000, 00000, DWORD, D2PrintTextPopup,(LPWSTR s, DWORD x, DWORD y, DWORD uk, DWORD type, DWORD color) );//6F8AB080
|
F8(FAST, D2Win, 10132,10132,10132,00000,00000,00000,00000,00000,00000, DWORD, D2PrintTextPopup,(LPWSTR s, DWORD x, DWORD y, DWORD uk, DWORD type, DWORD color) );//6F8AB080
|
||||||
F8(STD, D2Win, 10017,10017,10017,10147,10113,10098,10098,10164, F93C0, void*, D2CreateTextBox,(DWORD* data) );
|
F8(STD, D2Win, 10017,10017,10017,10147,10113,10098,10098,10164,F93C0, void*, D2CreateTextBox,(DWORD* data) );
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//D2CMP : ????0000
|
//D2CMP : ????0000
|
||||||
//D2S(D2CMP,10014, DWORD, D2CMP10014, (void* image) );//ONLY 1.11
|
//D2S(D2CMP,10014, DWORD, D2CMP10014, (void* image) );//ONLY 1.11
|
||||||
|
|
||||||
F8(STD, D2CMP, 10032,10032,10032,10021,10014,10106,10065,10020, 201A50, DWORD, D2CMP10014, (void* image) );
|
F8(STD, D2CMP, 10032,10032,10032,10021,10014,10106,10065,10020,201A50, DWORD, D2CMP10014, (void* image) );
|
||||||
|
|
||||||
|
|
||||||
//ONLY UNTIL 1.10 :
|
//ONLY UNTIL 1.10 :
|
||||||
A8(FAST, D2Client, BA00, B9F0, C080,00000,00000,00000,00000,00000, 00000, DWORD, D2isLODGame, ());//6FAAC080
|
A8(FAST, D2Client, BA00, B9F0, C080,00000,00000,00000,00000,00000,00000, DWORD, D2isLODGame, ());//6FAAC080
|
||||||
A8(FAST, D2Client, 00000,00000, C090,00000,00000,00000,00000,00000, 00000, BYTE, D2GetDifficultyLevel, ());//6FAAC090 1.09 should be BA10 (b) BA00 (d)
|
A8(FAST, D2Client, 00000,00000, C090,00000,00000,00000,00000,00000,00000, BYTE, D2GetDifficultyLevel, ());//6FAAC090 1.09 should be BA10 (b) BA00 (d)
|
||||||
A8(STD, D2Client, B6670,B59F0,B7BC0,00000,00000,00000,00000,00000, 00000, DWORD, D2GetMouseX, ());//6FB57BC0
|
A8(STD, D2Client, B6670,B59F0,B7BC0,00000,00000,00000,00000,00000,00000, DWORD, D2GetMouseX, ());//6FB57BC0
|
||||||
A8(STD, D2Client, B6680,B5A00,B7BD0,00000,00000,00000,00000,00000, 00000, DWORD, D2GetMouseY, ());//6FB57BD0
|
A8(STD, D2Client, B6680,B5A00,B7BD0,00000,00000,00000,00000,00000,00000, DWORD, D2GetMouseY, ());//6FB57BD0
|
||||||
A8(STD, D2Client, 8DC40,8CFC0,883D0,00000,00000,00000,00000,00000, 00000, Unit*, D2GetClientPlayer, ());//6FB283D0
|
A8(STD, D2Client, 8DC40,8CFC0,883D0,00000,00000,00000,00000,00000,63DD0, Unit*, D2GetClientPlayer, ());//6FB283D0
|
||||||
A8(FAST, D2Client, B920, B910, BF60,00000,00000,00000,00000,00000, 00000, void, D2CleanStatMouseUp, ());//6FAABF60
|
A8(FAST, D2Client, B920, B910, BF60,00000,00000,00000,00000,00000,4DA70, void, D2CleanStatMouseUp, ());//6FAABF60
|
||||||
A8(FAST, D2Client, D210, D200, D990,00000,00000,00000,00000,00000, 00000, void, D2SendToServer3, (BYTE type, WORD p));//6FAAD990
|
A8(FAST, D2Client, D210, D200, D990,00000,00000,00000,00000,00000,00000, void, D2SendToServer3, (BYTE type, WORD p));//6FAAD990
|
||||||
//A7(FAST, D2Client, 00000,00000, DA20,00000,00000,00000,00000,00000, void, D2SendToServer5, (BYTE type, DWORD p));//6FAADA20
|
//A8(FAST, D2Client, 00000,00000, DA20,00000,00000,00000,00000,00000,00000, void, D2SendToServer5, (BYTE type, DWORD p));//6FAADA20
|
||||||
//A7(FAST, D2Client, 00000,00000, D9E0,00000,00000,00000,00000,00000, void, D2SendToServer7, (BYTE type, WORD p1, WORD p2, WORD p3));//6FAAD9E0
|
//A8(FAST, D2Client, 00000,00000, D9E0,00000,00000,00000,00000,00000,00000, void, D2SendToServer7, (BYTE type, WORD p1, WORD p2, WORD p3));//6FAAD9E0
|
||||||
//A7(FAST, D2Client, 00000,00000, DA40,00000,00000,00000,00000,00000, void, D2SendToServer9, (BYTE type, DWORD p1, DWORD p2));//6FAADA40
|
//A8(FAST, D2Client, 00000,00000, DA40,00000,00000,00000,00000,00000,00000, void, D2SendToServer9, (BYTE type, DWORD p1, DWORD p2));//6FAADA40
|
||||||
//A7(FAST, D2Client, 00000,00000, DA70,00000,00000,00000,00000,00000, void, D2SendToServer13,(BYTE type, DWORD p1, DWORD p2, DWORD p3));//6FAADA70
|
//A8(FAST, D2Client, 00000,00000, DA70,00000,00000,00000,00000,00000,00000, void, D2SendToServer13,(BYTE type, DWORD p1, DWORD p2, DWORD p3));//6FAADA70
|
||||||
A8(FAST, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000,00000, 00000, NetClient*, D2GetClient, (Unit* ptUnit, char* lpszErrFile, DWORD ErrLine));//6FCBC2E0
|
A8(FAST, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000,00000,1531C0, NetClient*, D2GetClient, (Unit* ptUnit, char* lpszErrFile, DWORD ErrLine));//6FCBC2E0
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//////// VARIABLES ////////
|
//////// VARIABLES ////////
|
||||||
@ -584,24 +590,25 @@ A8(FAST, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000,00000, 00000, NetClie
|
|||||||
//E2C(D2Client,11B418,DWORD, MouseX);//0x320 = 800 //1.11b
|
//E2C(D2Client,11B418,DWORD, MouseX);//0x320 = 800 //1.11b
|
||||||
//E2C(D2Client,11C1E0,Unit*, ptClientChar);//1.11b
|
//E2C(D2Client,11C1E0,Unit*, ptClientChar);//1.11b
|
||||||
|
|
||||||
//C7(D2Common,000000,000000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C, DataTables*,SgptDataTables); //03836A20 - 037A0000 //01EE6A20
|
//C8(D2Common,000000,000000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C,000000,000000, DataTables*,SgptDataTables); //03836A20 - 037A0000 //01EE6A20
|
||||||
C8(D2Client, D50E8, D40E0, D40F0, F5C60, F4FC8, DC6E4, DBC4C, F7038, 311470, DWORD, ResolutionY);//0x258 = 600
|
C8(D2Client, D50E8, D40E0, D40F0, F5C60, F4FC8, DC6E4, DBC4C, F7038,311470, DWORD, ResolutionY);//0x258 = 600
|
||||||
C8(D2Client, D50EC, D40E4, D40F4, F5C5C, F4FC4, DC6E0, DBC48, F7034, 31146C, DWORD, ResolutionX);//0x320 = 800
|
C8(D2Client, D50EC, D40E4, D40F4, F5C5C, F4FC4, DC6E0, DBC48, F7034,31146C, DWORD, ResolutionX);//0x320 = 800
|
||||||
C8(D2Client,125AD8,124958,11A74C,11BD28,11BEFC,11BD2C,11B9A4,11D358, 3A285C, DWORD, NegWindowStartY);//0xFFFFFFC4 = -60
|
C8(D2Client,125AD8,124958,11A74C,11BD28,11BEFC,11BD2C,11B9A4,11D358,3A285C, DWORD, NegWindowStartY);//0xFFFFFFC4 = -60
|
||||||
C8(D2Client,125AD4,124954,11A748,11BD24,11BEF8,11BD28,11B9A0,11D354, 3A2858, DWORD, WindowStartX);//0x50 = 80
|
C8(D2Client,125AD4,124954,11A748,11BD24,11BEF8,11BD28,11B9A0,11D354,3A2858, DWORD, WindowStartX);//0x50 = 80
|
||||||
//C7(D2Launch, 55818, 56088, 2CD5C,000000, 2CD5C,000000,000000,00000, DWORD, GameTypeMode);//0x50 = 80 //6FA3CD5C-6FA10000
|
//C8(D2Launch, 55818, 56088, 2CD5C,000000, 2CD5C,000000,000000,00000,000000, DWORD, GameTypeMode);//0x50 = 80 //6FA3CD5C-6FA10000
|
||||||
C8(D2Game, F2A80, F2918,113FB8,111718,1115E0,1105E0,1107B8,1105E0, 4842A8, NetClient*, ClientTable);
|
C8(D2Game, F2A80, F2918,113FB8,111718,1115E0,1105E0,1107B8,1105E0,4842A8, NetClient*, ClientTable);
|
||||||
//C7(D2Client,000000,000000,000000,000000,104225,000000,000000,00000, DWORD, CurrentNPCNum);
|
//C8(D2Client,000000,000000,000000,000000,104225,000000,000000,00000,000000, DWORD, CurrentNPCNum);
|
||||||
C8(D2Client,000000,000000,000000, FB3F4,11A2F4,10330C,119854,1087B4, 3A04F4, DWORD, IsLodGame);
|
C8(D2Client,000000,000000,000000, FB3F4,11A2F4,10330C,119854,1087B4,3A04F4, DWORD, IsLodGame);
|
||||||
C8(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000,000000, 000000, BYTE, DifficultyLevel);
|
C8(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000,000000,000000, BYTE, DifficultyLevel);
|
||||||
//C7(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000,11D1D8, BYTE, DifficultyLevel);
|
//C8(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000,11D1D8,000000, BYTE, DifficultyLevel);
|
||||||
C8(D2Client,000000,000000,000000,10A40C,11B414,101634,11B824,11C94C, 3A6AAC, DWORD, MouseY);//0x258 = 600
|
C8(D2Client,000000,000000,000000,10A40C,11B414,101634,11B824,11C94C,3A6AAC, DWORD, MouseY);//0x258 = 600
|
||||||
C8(D2Client,000000,000000,000000,10A410,11B418,101638,11B828,11C950, 3A6AB0, DWORD, MouseX);//0x320 = 800
|
C8(D2Client,000000,000000,000000,10A410,11B418,101638,11B828,11C950,3A6AB0, DWORD, MouseX);//0x320 = 800
|
||||||
C8(D2Client,000000,000000,000000,11C4F0,11C1E0,11C3D0,11BBFC,11D050, 3A6A70, Unit*, ptClientChar);
|
C8(D2Client,000000,000000,000000,11C4F0,11C1E0,11C3D0,11BBFC,11D050,3A6A70, Unit*, ptClientChar);
|
||||||
|
C8(D2Client,11E0F4,11CF54,112D04,11B9A8,11BB30,11BF48,11C028,11CAA4,3BB5E8, DWORD, InputCommandLen);
|
||||||
|
C8(D2Client,11CE50,11BCB0,111A58,11C590,11D590,11FC40,11EC80,11D650,3BB638, WCHAR, InputCommand);
|
||||||
|
|
||||||
|
C8(D2Client, DB918, DA828,000000,000000,000000,000000,000000,000000,000000, DWORD, NbStatDesc);
|
||||||
C8(D2Client, DB918, DA828,000000,000000,000000,000000,000000,000000, 000000, DWORD, NbStatDesc);
|
C8(D2Client, DAF98, D9EA8,000000,000000,000000,000000,000000,000000,000000, DWORD, StatDescTable);
|
||||||
C8(D2Client, DAF98, D9EA8,000000,000000,000000,000000,000000,000000, 000000, DWORD, StatDescTable);
|
|
||||||
|
|
||||||
/* NEXT NOT TESTED IN 1.10 (1.09b fct)
|
/* NEXT NOT TESTED IN 1.10 (1.09b fct)
|
||||||
D2_STD(D2Common10066, void, D2RemoveFromRoom, (DrlgRoom1* hRoom, DWORD untitype, DWORD unitID), 0x6FD7CFD0);
|
D2_STD(D2Common10066, void, D2RemoveFromRoom, (DrlgRoom1* hRoom, DWORD untitype, DWORD unitID), 0x6FD7CFD0);
|
||||||
@ -659,69 +666,69 @@ D2_FST(D2Client6FB30470,void, D2ClientUpdatePlayer, (Unit* ptChar, DWORD nUnitT
|
|||||||
|
|
||||||
|
|
||||||
Storm 1.09:
|
Storm 1.09:
|
||||||
251 SFileAuthenticateArchive
|
251 SFileAuthenticateArchive
|
||||||
252 SFileCloseArchive
|
252 SFileCloseArchive
|
||||||
253 SFileCloseFile
|
253 SFileCloseFile
|
||||||
254 SFileDdaBegin
|
254 SFileDdaBegin
|
||||||
255 SFileDdaBeginEx
|
255 SFileDdaBeginEx
|
||||||
256 SFileDdaDestroy
|
256 SFileDdaDestroy
|
||||||
257 SFileDdaEnd
|
257 SFileDdaEnd
|
||||||
258 SFileDdaGetPos
|
258 SFileDdaGetPos
|
||||||
259 SFileDdaGetVolume
|
259 SFileDdaGetVolume
|
||||||
260 SFileDdaInitialize
|
260 SFileDdaInitialize
|
||||||
261 SFileDdaSetVolume
|
261 SFileDdaSetVolume
|
||||||
262 SFileDestroy
|
262 SFileDestroy
|
||||||
263 SFileEnableDirectAccess
|
263 SFileEnableDirectAccess
|
||||||
264 SFileGetFileArchive
|
264 SFileGetFileArchive
|
||||||
265 SFileGetFileSize
|
265 SFileGetFileSize
|
||||||
266 SFileOpenArchive
|
266 SFileOpenArchive
|
||||||
267 SFileOpenFile
|
267 SFileOpenFile
|
||||||
268 SFileOpenFileEx
|
268 SFileOpenFileEx
|
||||||
269 SFileReadFile
|
269 SFileReadFile
|
||||||
270 SFileSetBasePath
|
270 SFileSetBasePath
|
||||||
271 SFileSetFilePointer
|
271 SFileSetFilePointer
|
||||||
272 SFileSetLocale
|
272 SFileSetLocale
|
||||||
273 SFileGetBasePath
|
273 SFileGetBasePath
|
||||||
274 SFileSetIoErrorMode
|
274 SFileSetIoErrorMode
|
||||||
275 SFileGetArchiveName
|
275 SFileGetArchiveName
|
||||||
276 SFileGetFileName
|
276 SFileGetFileName
|
||||||
277 SFileGetArchiveInfo
|
277 SFileGetArchiveInfo
|
||||||
278 SFileSetPlatform
|
278 SFileSetPlatform
|
||||||
279 SFileLoadFile
|
279 SFileLoadFile
|
||||||
280 SFileUnloadFile
|
280 SFileUnloadFile
|
||||||
281 SFileLoadFileEx
|
281 SFileLoadFileEx
|
||||||
282 SFilePrioritizeRequest
|
282 SFilePrioritizeRequest
|
||||||
283 SFile_CancelRequest
|
283 SFile_CancelRequest
|
||||||
284 SFileSetAsyncBudget
|
284 SFileSetAsyncBudget
|
||||||
285 SFileSetDataChunkSize
|
285 SFileSetDataChunkSize
|
||||||
286 SFileEnableSeekOptimization
|
286 SFileEnableSeekOptimization
|
||||||
287 SFileReadFileEx
|
287 SFileReadFileEx
|
||||||
288 SFile_CancelRequestEx
|
288 SFile_CancelRequestEx
|
||||||
289 SFileReadFileEx2
|
289 SFileReadFileEx2
|
||||||
290 SFileLoadFileEx2
|
290 SFileLoadFileEx2
|
||||||
|
|
||||||
Storm1.08
|
Storm1.08
|
||||||
401 SMemAlloc
|
401 SMemAlloc
|
||||||
403 SMemFree
|
403 SMemFree
|
||||||
404 SMemGetSize
|
404 SMemGetSize
|
||||||
405 SMemReAlloc
|
405 SMemReAlloc
|
||||||
481 SMemFindNextBlock
|
481 SMemFindNextBlock
|
||||||
482 SMemFindNextHeap
|
482 SMemFindNextHeap
|
||||||
483 SMemGetHeapByCaller
|
483 SMemGetHeapByCaller
|
||||||
484 SMemGetHeapByPtr
|
484 SMemGetHeapByPtr
|
||||||
485 SMemHeapAlloc
|
485 SMemHeapAlloc
|
||||||
486 SMemHeapCreate
|
486 SMemHeapCreate
|
||||||
487 SMemHeapDestroy
|
487 SMemHeapDestroy
|
||||||
488 SMemHeapFree
|
488 SMemHeapFree
|
||||||
489 SMemHeapReAlloc
|
489 SMemHeapReAlloc
|
||||||
490 SMemHeapSize
|
490 SMemHeapSize
|
||||||
491 SMemCopy
|
491 SMemCopy
|
||||||
492 SMemFill
|
492 SMemFill
|
||||||
493 SMemMove
|
493 SMemMove
|
||||||
494 SMemZero
|
494 SMemZero
|
||||||
495 SMemCmp
|
495 SMemCmp
|
||||||
496 SMemSetDebugFlags
|
496 SMemSetDebugFlags
|
||||||
497 SMemDumpState
|
497 SMemDumpState
|
||||||
*/
|
*/
|
||||||
//Kingpin: D2Common #10027 is used to get dest unit (used for get type5 object in next room)
|
//Kingpin: D2Common #10027 is used to get dest unit (used for get type5 object in next room)
|
||||||
//D2Common10247, (ptInventory, ptItem, x,y,0xC,void*,void*,BYTE page) verif if items can be put in inventory
|
//D2Common10247, (ptInventory, ptItem, x,y,0xC,void*,void*,BYTE page) verif if items can be put in inventory
|
||||||
@ -741,9 +748,9 @@ Storm1.08
|
|||||||
/*
|
/*
|
||||||
Kingpin: d2common #11270
|
Kingpin: d2common #11270
|
||||||
Kingpin: Check MonType.txt line to see if it match (returns a boolan)
|
Kingpin: Check MonType.txt line to see if it match (returns a boolan)
|
||||||
Kingpin: arg1 = unknown
|
Kingpin: arg1 = unknown
|
||||||
arg2 = damage_vs_montype (stat from intestatscost.txt)
|
arg2 = damage_vs_montype (stat from intestatscost.txt)
|
||||||
arg3 = ptUnit
|
arg3 = ptUnit
|
||||||
arg4 = 80 (maxline maybe, but is only guessing)
|
arg4 = 80 (maxline maybe, but is only guessing)
|
||||||
|
|
||||||
//d2game.6FD1D660 reverse player name :P
|
//d2game.6FD1D660 reverse player name :P
|
||||||
@ -763,42 +770,42 @@ Kingpin: D2Client.6FB18770 returns a boolean if you have enough mana for skill
|
|||||||
Kingpin: D2Client.6FB18AC0 sets it to selectable or not
|
Kingpin: D2Client.6FB18AC0 sets it to selectable or not
|
||||||
D2Common #10480 Return ptState arg1 = ptUnit, arg2 = state_id
|
D2Common #10480 Return ptState arg1 = ptUnit, arg2 = state_id
|
||||||
D2Common #10479 Get State_ID from ptState+14
|
D2Common #10479 Get State_ID from ptState+14
|
||||||
D2Common #11265 Get Skill_ID from ptState+1C Arg1 = ptState
|
D2Common #11265 Get Skill_ID from ptState+1C Arg1 = ptState
|
||||||
|
|
||||||
Kingpin: D2Common #10497 Get Duration of State
|
Kingpin: D2Common #10497 Get Duration of State
|
||||||
Kingpin: arg1 = state_id
|
Kingpin: arg1 = state_id
|
||||||
|
|
||||||
|
|
||||||
D2Client.6FB5B0F0
|
D2Client.6FB5B0F0
|
||||||
Function: Draw Filled Rectangle
|
Function: Draw Filled Rectangle
|
||||||
void FASTCALL D2ClientFillRect(int x, int y, int Width, int Height, ULONG ulColor, ULONG transTbl);
|
void FASTCALL D2ClientFillRect(int x, int y, int Width, int Height, ULONG ulColor, ULONG transTbl);
|
||||||
D2_FST(D2Client6FB5B0F0,void, D2ClientFillRect,(int x, int y, int Width, int Height, DWORD col, DWORD transTbl), offset_D2Client + 0xBB0F0);//6FB5B0F0-6FAA0000
|
D2_FST(D2Client6FB5B0F0,void, D2ClientFillRect,(int x, int y, int Width, int Height, DWORD col, DWORD transTbl), offset_D2Client + 0xBB0F0);//6FB5B0F0-6FAA0000
|
||||||
D2Gfx.#10055
|
D2Gfx.#10055
|
||||||
Function: Draw Filled Rectangle
|
Function: Draw Filled Rectangle
|
||||||
void STDCALL D2GfxFillRect(int left, int top, int right, int bottom, ULONG ulColor, ULONG transTbl);
|
void STDCALL D2GfxFillRect(int left, int top, int right, int bottom, ULONG ulColor, ULONG transTbl);
|
||||||
NOTES:
|
NOTES:
|
||||||
color = Palette index.
|
color = Palette index.
|
||||||
transTbl = pl2 transform table index ...
|
transTbl = pl2 transform table index ...
|
||||||
0 = 75% transparent
|
0 = 75% transparent
|
||||||
1 = 50% transparent
|
1 = 50% transparent
|
||||||
2 = 25% transparent
|
2 = 25% transparent
|
||||||
3 = color blend 1 //white is transparent black is solid
|
3 = color blend 1 //white is transparent black is solid
|
||||||
4 = color blend 2 //black is transparent white is solid
|
4 = color blend 2 //black is transparent white is solid
|
||||||
5 = normal draw
|
5 = normal draw
|
||||||
6 = color blend 3 // screen + color
|
6 = color blend 3 // screen + color
|
||||||
7 = hilight
|
7 = hilight
|
||||||
|
|
||||||
|
|
||||||
6FAE7831 E8 9A380800 CALL <JMP.&D2Common.#10252> ; click inventory
|
6FAE7831 E8 9A380800 CALL <JMP.&D2Common.#10252> ; click inventory
|
||||||
6FAE8D44 E8 87230800 CALL <JMP.&D2Common.#10252> ; Right click inventory
|
6FAE8D44 E8 87230800 CALL <JMP.&D2Common.#10252> ; Right click inventory
|
||||||
6FAE8972 E8 59270800 CALL <JMP.&D2Common.#10252> ; mouse over
|
6FAE8972 E8 59270800 CALL <JMP.&D2Common.#10252> ; mouse over
|
||||||
|
|
||||||
|
|
||||||
D2Client.6FACFCD0 then that set color for the text (it calls in this function #10121 and 10117)
|
D2Client.6FACFCD0 then that set color for the text (it calls in this function #10121 and 10117)
|
||||||
Kingpin: and the position
|
Kingpin: and the position
|
||||||
Kingpin: arg1 = Xpos
|
Kingpin: arg1 = Xpos
|
||||||
arg2 = Ypos
|
arg2 = Ypos
|
||||||
arg3 = Pointer to Unicode String
|
arg3 = Pointer to Unicode String
|
||||||
arg4 = Color
|
arg4 = Color
|
||||||
|
|
||||||
Kingpin: 10470 has as first arg ptGame +1C (memory alloc thing)
|
Kingpin: 10470 has as first arg ptGame +1C (memory alloc thing)
|
||||||
@ -808,51 +815,51 @@ Kingpin: arg4 = 4 (same here, no idea)
|
|||||||
Kingpin: arg5 = uniqueID
|
Kingpin: arg5 = uniqueID
|
||||||
|
|
||||||
Kingpin: 10868 SetMod
|
Kingpin: 10868 SetMod
|
||||||
arg1 = ptItem
|
arg1 = ptItem
|
||||||
arg2 = ItemMod
|
arg2 = ItemMod
|
||||||
arg3 = 1
|
arg3 = 1
|
||||||
Kingpin: 11232 Get Cube Recipe Record (Line) from Cubemain.bin Address in memory
|
Kingpin: 11232 Get Cube Recipe Record (Line) from Cubemain.bin Address in memory
|
||||||
Kingpin: i have no parameters for 11232
|
Kingpin: i have no parameters for 11232
|
||||||
Kingpin: 11233 Get Number of Cube Recipes
|
Kingpin: 11233 Get Number of Cube Recipes
|
||||||
|
|
||||||
Kingpin: edi contains target unit
|
Kingpin: edi contains target unit
|
||||||
Kingpin: 10342 get ptRoom from target unit
|
Kingpin: 10342 get ptRoom from target unit
|
||||||
Kingpin: ecx = unique unit id
|
Kingpin: ecx = unique unit id
|
||||||
Kingpin: ebx = unit type
|
Kingpin: ebx = unit type
|
||||||
Kingpin: eax = ptRoom
|
Kingpin: eax = ptRoom
|
||||||
Kingpin: 10066 remove unit from room
|
Kingpin: 10066 remove unit from room
|
||||||
|
|
||||||
D2Game.6FCBC900 ; Get Target Unit
|
D2Game.6FCBC900 ; Get Target Unit
|
||||||
Arg1 = ptPlayer (ptUnit)
|
Arg1 = ptPlayer (ptUnit)
|
||||||
Arg2 = ptGame
|
Arg2 = ptGame
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#10962 Add skill to player
|
#10962 Add skill to player
|
||||||
Kingpin: arg1 ptPlayer
|
Kingpin: arg1 ptPlayer
|
||||||
arg2 SkillID
|
arg2 SkillID
|
||||||
Kingpin: arg3 Skill Level
|
Kingpin: arg3 Skill Level
|
||||||
|
|
||||||
10602 Gets an item ID # from an item code
|
10602 Gets an item ID # from an item code
|
||||||
|
|
||||||
Kingpin: get Prefix/suffix
|
Kingpin: get Prefix/suffix
|
||||||
Kingpin: #10699 arg1 = ptItem, arg2 = prefix Index
|
Kingpin: #10699 arg1 = ptItem, arg2 = prefix Index
|
||||||
Kingpin: #10701 arg1 = ptItem, arg2 = suffix index
|
Kingpin: #10701 arg1 = ptItem, arg2 = suffix index
|
||||||
|
|
||||||
|
|
||||||
D2EquipUnit STDCALL_FUNCTION(int, D2Common280D, (Inventory* ptInventory, Unit* ptItem, int bodylocation));
|
D2EquipUnit STDCALL_FUNCTION(int, D2Common280D, (Inventory* ptInventory, Unit* ptItem, int bodylocation));
|
||||||
D2AddItemToInventory STDCALL_FUNCTION(int, D2Common2802, (Inventory* ptInventory, Unit* ptItem, int nodePage));
|
D2AddItemToInventory STDCALL_FUNCTION(int, D2Common2802, (Inventory* ptInventory, Unit* ptItem, int nodePage));
|
||||||
Kingpin: in my notes it should start here
|
Kingpin: in my notes it should start here
|
||||||
Kingpin: 6FC51360 /$ 55 PUSH EBP
|
Kingpin: 6FC51360 /$ 55 PUSH EBP
|
||||||
|
|
||||||
D2DropTC FASTCALL_FUNCTION(void, D2Game6FC51360, (D2Game* ptGame, Unit* ptChar, Unit* ptNPC, void* ptTC, DWORD z5, DWORD ilvl, DWORD z1, DWORD z2, DWORD z3, DWORD z4));
|
D2DropTC FASTCALL_FUNCTION(void, D2Game6FC51360, (D2Game* ptGame, Unit* ptChar, Unit* ptNPC, void* ptTC, DWORD z5, DWORD ilvl, DWORD z1, DWORD z2, DWORD z3, DWORD z4));
|
||||||
|
|
||||||
Kingpin: D2CreateItemUnit FASTCALL_FUNCTION(Unit*, D2Game6FC501A0, (Unit* ptPlayer, DWORD itemCode, D2Game* ptGame, DWORD uk1, DWORD quality, DWORD uk3, DWORD uk4, DWORD Lvl, DWORD uk5, DWORD uk6, DWORD uk7));
|
Kingpin: D2CreateItemUnit FASTCALL_FUNCTION(Unit*, D2Game6FC501A0, (Unit* ptPlayer, DWORD itemCode, D2Game* ptGame, DWORD uk1, DWORD quality, DWORD uk3, DWORD uk4, DWORD Lvl, DWORD uk5, DWORD uk6, DWORD uk7));
|
||||||
ptItem = D2CreateItemUnit(ptPlayer, D2GetItemIDfromCode(CharstatTXT->Item1), PCGame, 4, 2, 1, 1, D2GetUnitStat(ptPlayer,STATS_LEVEL,0), 0, 0, 0);
|
ptItem = D2CreateItemUnit(ptPlayer, D2GetItemIDfromCode(CharstatTXT->Item1), PCGame, 4, 2, 1, 1, D2GetUnitStat(ptPlayer,STATS_LEVEL,0), 0, 0, 0);
|
||||||
|
|
||||||
Kingpin: monsterData +28 holds ptGame
|
Kingpin: monsterData +28 holds ptGame
|
||||||
Kingpin: ptGame +2C UniqueID (owner ID)
|
Kingpin: ptGame +2C UniqueID (owner ID)
|
||||||
Kingpin: ptGame +30 UnitType
|
Kingpin: ptGame +30 UnitType
|
||||||
srvDoFunc 15 adds temporarly a stat
|
srvDoFunc 15 adds temporarly a stat
|
||||||
|
|
||||||
Kingpin: we have 10041 that get ptRoom from ptAct, XOffset&Yoffset
|
Kingpin: we have 10041 that get ptRoom from ptAct, XOffset&Yoffset
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
@brief Diablo II Unit Structures definitions.
|
@brief Diablo II Unit Structures definitions.
|
||||||
|
|
||||||
|
NOT TESTED IN 1.10 (1.09b)
|
||||||
|
|
||||||
NOT TESTED IN 1.10 (1.09b)
|
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -16,6 +16,14 @@ struct Unit;
|
|||||||
struct SkillsBIN;
|
struct SkillsBIN;
|
||||||
struct SkillData;
|
struct SkillData;
|
||||||
struct ObjectsBIN;
|
struct ObjectsBIN;
|
||||||
|
struct NetClient;
|
||||||
|
|
||||||
|
struct Game;
|
||||||
|
struct ActMap;
|
||||||
|
struct ActData;
|
||||||
|
struct Level;
|
||||||
|
struct RoomEx;
|
||||||
|
struct Room;
|
||||||
|
|
||||||
/*=================================================================*/
|
/*=================================================================*/
|
||||||
/* Skill Structure. */
|
/* Skill Structure. */
|
||||||
@ -59,7 +67,7 @@ struct Position
|
|||||||
DWORD y;
|
DWORD y;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Room//size=0x80
|
/*struct Room//size=0x80
|
||||||
{
|
{
|
||||||
//ptRoom +48 0 = spawn new units (monster, objects e.tc), 1 = don't spawn any new units
|
//ptRoom +48 0 = spawn new units (monster, objects e.tc), 1 = don't spawn any new units
|
||||||
DWORD seed1; //+00
|
DWORD seed1; //+00
|
||||||
@ -79,23 +87,113 @@ struct Room//size=0x80
|
|||||||
BYTE isGenerated2:1;//???
|
BYTE isGenerated2:1;//???
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};*/
|
||||||
|
|
||||||
struct ActMap//ptGame+BC size=0x60
|
struct RoomEx //size=5C
|
||||||
{
|
{
|
||||||
DWORD isNotManaged;
|
DWORD __00[2]; //0x00
|
||||||
DWORD uk4;
|
RoomEx** roomExNear; //0x08
|
||||||
DWORD uk8;//size = 0x488
|
DWORD __0C[5]; //0x0C
|
||||||
Room* ptFirstRoom;
|
struct {
|
||||||
|
INT32 roomNumber; //0x00
|
||||||
|
void* __04; //0x04
|
||||||
|
PINT32 subNumber; //0x08
|
||||||
|
} *pType2Info; //0x20
|
||||||
|
RoomEx* ptNextRoomEx; //0x24
|
||||||
|
UINT32 roomFlags; //0x28
|
||||||
|
UINT32 roomsNearCount; //0x2C
|
||||||
|
Room* ptRoom; //0x30
|
||||||
|
INT32 posX; //0x34
|
||||||
|
INT32 posY; //0x38
|
||||||
|
INT32 sizeX; //0x3C
|
||||||
|
INT32 sizeY; //0x40
|
||||||
|
DWORD __44; //0x44
|
||||||
|
UINT32 presetType; //0x48
|
||||||
|
void* ptWarpTiles; //0x4C
|
||||||
|
DWORD __50[2]; //0x50
|
||||||
|
Level* ptLevel; //0x58
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Room //size=0x80
|
||||||
|
{
|
||||||
|
Room** ptNearRooms; //0x00
|
||||||
|
DWORD __04[3]; //0x04
|
||||||
|
RoomEx* ptRoomEx; //0x10
|
||||||
|
DWORD __14[3]; //0x14
|
||||||
|
void* coll; //0x20
|
||||||
|
INT32 nbNearRooms; //0x24
|
||||||
|
DWORD __28[9]; //0x28
|
||||||
|
DWORD startX; //0x4C
|
||||||
|
DWORD startY; //0x50
|
||||||
|
DWORD sizeX; //0x54
|
||||||
|
DWORD sizeY; //0x58
|
||||||
|
DWORD __5C[6]; //0x5C
|
||||||
|
Unit* ptFirstUnit; //0x74
|
||||||
|
DWORD __78; //0x78
|
||||||
|
Room* ptNextRoom; //0x7C
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Level //size=0x234
|
||||||
|
{
|
||||||
|
DWORD type; //+000
|
||||||
|
DWORD flags; //+004
|
||||||
|
DWORD __004_010[2]; //+008
|
||||||
|
RoomEx* ptFirstRoomEx; //+010
|
||||||
|
DWORD __014_01C[2]; //+014
|
||||||
|
INT32 posX; //+01C
|
||||||
|
INT32 posY; //+020
|
||||||
|
INT32 sizeX; //+024
|
||||||
|
INT32 sizeY; //+028
|
||||||
|
DWORD __0C2_1AC[96]; //+02C
|
||||||
|
Level* ptNextLevel; //+1AC
|
||||||
|
DWORD __1B0; //+1B0
|
||||||
|
ActData* ptActData; //+1B4
|
||||||
|
DWORD __1B8_1C0[2]; //+1B8
|
||||||
|
DWORD levelType; //+1C0
|
||||||
|
DWORD seed1; //+1C4
|
||||||
|
DWORD seed2; //+1C8
|
||||||
|
DWORD uk_1CC; //+1CC
|
||||||
|
UINT32 levelNo; //+1D0
|
||||||
|
DWORD __1D4_234[96]; //+1D4
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ActData //size=0x488
|
||||||
|
{
|
||||||
|
DWORD seed1; //+000
|
||||||
|
DWORD seed2; //+004
|
||||||
|
DWORD nbRooms; //+008
|
||||||
|
DWORD __00C_0094[34]; //+00C
|
||||||
|
DWORD nTalRashaTombLevel; //094
|
||||||
|
DWORD __098; //+098
|
||||||
|
Game* ptGame; //+09C
|
||||||
|
DWORD __0A0_450[237]; //+0A0
|
||||||
|
BYTE difficulty; //+450
|
||||||
|
BYTE __451_46C[27]; //+451
|
||||||
|
ActMap* ptActMap; //+46C
|
||||||
|
DWORD __470_484[5]; //+470
|
||||||
|
DWORD nBossMummyTombLevel;//+484
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ActMap //size=0x60
|
||||||
|
{
|
||||||
|
DWORD isNotManaged; //+00
|
||||||
|
DWORD __04; //+04
|
||||||
|
DWORD townLevel; //+08
|
||||||
|
DWORD seed; //+0C
|
||||||
|
Room* ptFirstRoom; //+10
|
||||||
|
DWORD actNumber; //+14
|
||||||
|
DWORD __18_48[12]; //+18
|
||||||
|
ActData* ptActData; //+48
|
||||||
|
DWORD __50_5C[4]; //+4C
|
||||||
|
void* ptMemoryPool; //+5C
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NetClient;
|
|
||||||
//ptGame : 04E4007C
|
//ptGame : 04E4007C
|
||||||
struct Game
|
struct Game
|
||||||
{ //Offset from Code.
|
{ //Offset from Code.
|
||||||
BYTE uk1[0x18]; //+00
|
BYTE uk1[0x18]; //+00
|
||||||
DWORD _ptLock; //+18 Unknown
|
DWORD _ptLock; //+18 Unknown
|
||||||
DWORD memoryPool; //+1C Memory Pool (??)
|
DWORD memoryPool; //+1C Memory Pool (??)
|
||||||
BYTE uk2[0x4D]; //+20
|
BYTE uk2[0x4D]; //+20
|
||||||
BYTE difficultyLevel; //+6D (Difficulty 0,1 or 2)
|
BYTE difficultyLevel; //+6D (Difficulty 0,1 or 2)
|
||||||
WORD unknown1; //+6E Cube puts 4 here
|
WORD unknown1; //+6E Cube puts 4 here
|
||||||
@ -104,7 +202,9 @@ struct Game
|
|||||||
WORD unknown2; //+78
|
WORD unknown2; //+78
|
||||||
BYTE uk4[0x0E]; //+7A
|
BYTE uk4[0x0E]; //+7A
|
||||||
NetClient* ptClient; //+88
|
NetClient* ptClient; //+88
|
||||||
BYTE uk8C[0x30]; //+8C
|
BYTE __8C[0x1C]; //+8C
|
||||||
|
DWORD gameFrame; //+A8
|
||||||
|
BYTE __AC[0x10]; //+AC
|
||||||
ActMap* mapAct[5]; //+BC
|
ActMap* mapAct[5]; //+BC
|
||||||
BYTE ukD0[0x1024]; //+D0
|
BYTE ukD0[0x1024]; //+D0
|
||||||
DWORD* game10F4; //+10F4
|
DWORD* game10F4; //+10F4
|
||||||
@ -117,7 +217,7 @@ struct Game
|
|||||||
|
|
||||||
|
|
||||||
struct Path //(8 dword)
|
struct Path //(8 dword)
|
||||||
{ //Offset from Code. Size: 20
|
{ //Offset from Code. Size: 20
|
||||||
WORD uk1; //+00
|
WORD uk1; //+00
|
||||||
WORD mapx; //+02
|
WORD mapx; //+02
|
||||||
WORD uk2; //+04
|
WORD uk2; //+04
|
||||||
@ -132,7 +232,7 @@ struct Path //(8 dword)
|
|||||||
|
|
||||||
|
|
||||||
struct Inventory
|
struct Inventory
|
||||||
{ //Offset from Code. Size: 30 <20> 40
|
{ //Offset from Code. Size: 30 to 40
|
||||||
DWORD tag; //+00 = 0x01020304
|
DWORD tag; //+00 = 0x01020304
|
||||||
BYTE uk1[0x04]; //+04 =? 0
|
BYTE uk1[0x04]; //+04 =? 0
|
||||||
Unit* ptChar; //+08
|
Unit* ptChar; //+08
|
||||||
@ -200,24 +300,49 @@ struct Stats //sizeof(Stats)=0x64
|
|||||||
DWORD unknow2; //+60 (=0)
|
DWORD unknow2; //+60 (=0)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct AIControl
|
||||||
|
{
|
||||||
|
DWORD specialState; // +00 SpecialState - stuff like terror, confusion goes here
|
||||||
|
void* aiFunction; // +04 fpAiFunction(); - the primary ai function to call (void * __fastcall)(pGame,pUnit,pAiTickArgs);
|
||||||
|
DWORD aiFlags; // +08 AiFlags
|
||||||
|
DWORD ownerGUID; // +0C OwnerGUID - the global unique identifier of the boss or minion owner
|
||||||
|
DWORD ownerType; // +10 eOwnerType - the unit type of the boss or minion owner
|
||||||
|
DWORD args[3]; // +14 dwArgs[3] - three dwords holding custom data used by ai func to store counters (etc)
|
||||||
|
void* cmdCurrent; // +20 pCmdCurrents
|
||||||
|
void* cmdLast; // +24 pCmdLast
|
||||||
|
Game* ptGame; // +28 pGame
|
||||||
|
DWORD ownerGUID2; // +2C OwnerGUID - the same as +008
|
||||||
|
DWORD ownerType2; // +30 eOwnerType - the same as +00C
|
||||||
|
void* minionList; // +34 pMinionList - list of all minions, for boss units (SetBoss in MonStats, Unique, SuperUnique etc)
|
||||||
|
DWORD trapNo; // +3C eTrapNo - used by shadows for summoning traps (so they stick to one type usually)
|
||||||
|
};
|
||||||
|
|
||||||
struct MonsterData // sizeof(MonsterData)=0x60
|
struct MonsterData // sizeof(MonsterData)=0x60
|
||||||
{ //Offset from Code.
|
{ //Offset from Code.
|
||||||
BYTE uk[0x16]; //+00
|
MonStatsBIN* ptMonStats; //+000 - pMonStats - record in monstats.txt
|
||||||
union {
|
BYTE components[0x10]; //+004 - Components[16] - bytes holding the component Ids for each component; Order: HD, TR, LG, RA, LA, RH, LH, SH, S1, S2, S3, S4, S5, S6, S7, S8
|
||||||
WORD flags; //+16
|
WORD seed; //+014 - NameSeed
|
||||||
struct {
|
union
|
||||||
WORD fuk1:1;
|
{
|
||||||
WORD isSuperUnique:1;
|
BYTE flags; //+016 - TypeFlags
|
||||||
WORD isChampion:1;
|
struct
|
||||||
WORD isUnique:1;
|
{
|
||||||
WORD fuk2:13;
|
BYTE isOther:1; // MONTYPE_OTHER(set for some champs, uniques)
|
||||||
|
BYTE isSuperUnique:1; // MONTYPE_SUPERUNIQUE
|
||||||
|
BYTE isChampion:1; // MONTYPE_CHAMPION
|
||||||
|
BYTE isUnique:1; // MONTYPE_UNIQUE
|
||||||
|
BYTE isMinion:1; // MONTYPE_MINION
|
||||||
|
BYTE isPossessed:1; // MONTYPE_POSSESSED
|
||||||
|
BYTE isGhostly:1; // MONTYPE_GHOSTLY
|
||||||
|
BYTE isMultishot:1; // MONTYPE_MULTISHOT
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
BYTE uk1[0x0E]; //+18
|
BYTE lastMode; //+017 - eLastMode
|
||||||
WORD superUniqueID; //+26
|
DWORD duriel; //+018 - dwDuriel - set only for duriel
|
||||||
void* unknow1; //+28
|
BYTE monUModList[10]; //+01C - MonUModList[9] - nine bytes holding the Ids for each MonUMod assigned to the unit
|
||||||
BYTE uk2[0x38]; //+28
|
DWORD superUniqueID; //+026
|
||||||
|
AIControl* ptAiGeneral; //+02A
|
||||||
|
BYTE uk2[0x32]; //+02E
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ObjectData
|
struct ObjectData
|
||||||
@ -226,15 +351,15 @@ struct ObjectData
|
|||||||
BYTE levelID;
|
BYTE levelID;
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
Kingpin: struct MonsterData
|
Kingpin: struct MonsterData
|
||||||
{
|
{
|
||||||
BYTE uk1[0x13]; // +00
|
BYTE uk1[0x13]; // +00
|
||||||
DWORD Flags; // +14
|
DWORD Flags; // +14
|
||||||
DWORD uk2; // +18
|
DWORD uk2; // +18
|
||||||
DWORD MinionOwnerID; // +1C
|
DWORD MinionOwnerID; // +1C
|
||||||
BYTE uk3[0x5]; // +20
|
BYTE uk3[0x5]; // +20
|
||||||
WORD SuperUniqueID; // +26 Superunique ID of monster
|
WORD SuperUniqueID; // +26 Superunique ID of monster
|
||||||
D2Game* ptGame; // +28 ptGame
|
D2Game* ptGame; // +28 ptGame
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -269,27 +394,27 @@ struct ItemData//size=0x74
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
ITEMFLAG_NEWITEM = 0x00000001,
|
ITEMFLAG_NEWITEM = 0x00000001,
|
||||||
ITEMFLAG_TAGETING = 0x00000004,
|
ITEMFLAG_TAGETING = 0x00000004,
|
||||||
ITEMFLAG_UNIDENTIFIED = 0x00000010,
|
ITEMFLAG_UNIDENTIFIED = 0x00000010,
|
||||||
ITEMFLAG_QUANTITY = 0x00000020,
|
ITEMFLAG_QUANTITY = 0x00000020,
|
||||||
ITEMFLAG_Durability = 0x00000100,
|
ITEMFLAG_Durability = 0x00000100,
|
||||||
ITEMFLAG_UNKNOWN2 = 0x00000400,
|
ITEMFLAG_UNKNOWN2 = 0x00000400,
|
||||||
ITEMFLAG_SOCKETED = 0x00000800,
|
ITEMFLAG_SOCKETED = 0x00000800,
|
||||||
ITEMFLAG_NON_SELLABLE = 0x00001000,
|
ITEMFLAG_NON_SELLABLE = 0x00001000,
|
||||||
ITEMFLAG_NEWITEM2 = 0x00002000,
|
ITEMFLAG_NEWITEM2 = 0x00002000,
|
||||||
ITEMFLAG_UNKNOWN3 = 0x00004000,
|
ITEMFLAG_UNKNOWN3 = 0x00004000,
|
||||||
ITEMFLAG_CHECKSECPRICE = 0x00010000,
|
ITEMFLAG_CHECKSECPRICE = 0x00010000,
|
||||||
ITEMFLAG_CHECKGAMBLEPRICE = 0x00020000,
|
ITEMFLAG_CHECKGAMBLEPRICE = 0x00020000,
|
||||||
ITEMFLAG_UNKNOWN4 = 0x00080000,
|
ITEMFLAG_UNKNOWN4 = 0x00080000,
|
||||||
ITEMFLAG_INDESTRUCTIBLE(ETHERAL) = 0x00400000,
|
ITEMFLAG_INDESTRUCTIBLE(ETHERAL) = 0x00400000,
|
||||||
ITEMFLAG_UNKNOWN5 = 0x00800000,
|
ITEMFLAG_UNKNOWN5 = 0x00800000,
|
||||||
ITEMFLAG_FROMPLAYER = 0x01000000,
|
ITEMFLAG_FROMPLAYER = 0x01000000,
|
||||||
ITEMFLAG_RUNEWORD = 0x04000000
|
ITEMFLAG_RUNEWORD = 0x04000000
|
||||||
*/
|
*/
|
||||||
DWORD guid1; //+1C Global Unique ID 1
|
DWORD guid1; //+1C Global Unique ID 1
|
||||||
DWORD guid2; //+20 Global Unique ID 2
|
DWORD guid2; //+20 Global Unique ID 2
|
||||||
DWORD guid3; //+24 Global Unique ID 3
|
DWORD guid3; //+24 Global Unique ID 3
|
||||||
DWORD uniqueID; //+28
|
DWORD uniqueID; //+28
|
||||||
BYTE ilvl; //+2C
|
BYTE ilvl; //+2C
|
||||||
BYTE uk1[0x03]; //+2D
|
BYTE uk1[0x03]; //+2D
|
||||||
@ -300,7 +425,7 @@ ITEMFLAG_RUNEWORD = 0x04000000
|
|||||||
WORD prefix[3]; //+38
|
WORD prefix[3]; //+38
|
||||||
WORD suffix[3]; //+3E
|
WORD suffix[3]; //+3E
|
||||||
BYTE equipLoc; //+44
|
BYTE equipLoc; //+44
|
||||||
/* emplacement si <20>quip<69>
|
/* location if equipped
|
||||||
* 00 = noequip/inBelt
|
* 00 = noequip/inBelt
|
||||||
* 01 = head
|
* 01 = head
|
||||||
* 02 = neck
|
* 02 = neck
|
||||||
@ -326,7 +451,7 @@ ITEMFLAG_RUNEWORD = 0x04000000
|
|||||||
BYTE ItemData3; //+47 //D2Common10854 D2Common10853
|
BYTE ItemData3; //+47 //D2Common10854 D2Common10853
|
||||||
BYTE pEarLevel; //+48
|
BYTE pEarLevel; //+48
|
||||||
BYTE varGfx; //+49
|
BYTE varGfx; //+49
|
||||||
char IName[0x12]; //+4A //inscribed/ear name
|
char IName[0x12]; //+4A //inscribed/ear name
|
||||||
Inventory* ptInventory; //+5C
|
Inventory* ptInventory; //+5C
|
||||||
Unit* ptPrevItem; //+60
|
Unit* ptPrevItem; //+60
|
||||||
Unit* ptNextItem; //+64
|
Unit* ptNextItem; //+64
|
||||||
@ -360,12 +485,12 @@ struct NetClient
|
|||||||
//+1A8 is ptGame
|
//+1A8 is ptGame
|
||||||
//+4A8 ptNextClient
|
//+4A8 ptNextClient
|
||||||
/*
|
/*
|
||||||
Kingpin: ptPclient
|
Kingpin: ptPclient
|
||||||
+16C is either act or unit type
|
+16C is either act or unit type
|
||||||
+170 Active UniqueID for player
|
+170 Active UniqueID for player
|
||||||
+174 Active ptPlayer on Client
|
+174 Active ptPlayer on Client
|
||||||
+1a8 ptGame
|
+1a8 ptGame
|
||||||
+1b4 Current or next ptRoom
|
+1b4 Current or next ptRoom
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
@ -376,20 +501,20 @@ struct PlayerData
|
|||||||
NetClient* ptNetClient; //+9C
|
NetClient* ptNetClient; //+9C
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
struct PlayerData
|
struct PlayerData
|
||||||
{
|
{
|
||||||
char name[0x10]; //+00 Player Name
|
char name[0x10]; //+00 Player Name
|
||||||
void* ptQuest[3]; //+10 Quest Pointers for each difficulty
|
void* ptQuest[3]; //+10 Quest Pointers for each difficulty
|
||||||
BYTE uk1[0x18]; //+1C //before : 0x14
|
BYTE uk1[0x18]; //+1C //before : 0x14
|
||||||
void* ptArenaUnit; //+34 ptArena for the Unit
|
void* ptArenaUnit; //+34 ptArena for the Unit
|
||||||
BYTE uk2[0x4]; //+38 //before : 0x7
|
BYTE uk2[0x4]; //+38 //before : 0x7
|
||||||
WORD MPSourcePortalUniqueID; //+3C Source Portal Unique_ID
|
WORD MPSourcePortalUniqueID; //+3C Source Portal Unique_ID
|
||||||
BYTE uk3[0x2]; //+3E
|
BYTE uk3[0x2]; //+3E
|
||||||
WORD MPDestPortalUniqueID; //+40 Destination Portal Unique_ID
|
WORD MPDestPortalUniqueID; //+40 Destination Portal Unique_ID
|
||||||
BYTE uk4[0x06]; //+42
|
BYTE uk4[0x06]; //+42
|
||||||
BYTE ptObjectUnID; //+48 Object UniqueID for TownPortals
|
BYTE ptObjectUnID; //+48 Object UniqueID for TownPortals
|
||||||
BYTE uk5[0x53]; //+49
|
BYTE uk5[0x53]; //+49
|
||||||
NetClient* ptNetClient; //+9C ptClient
|
NetClient* ptNetClient; //+9C ptClient
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -400,11 +525,11 @@ struct Unit
|
|||||||
DWORD nUnitType; //+00
|
DWORD nUnitType; //+00
|
||||||
union{
|
union{
|
||||||
DWORD nPlayerClass;
|
DWORD nPlayerClass;
|
||||||
DWORD nTxtFileNo;
|
DWORD nTxtFileNo;
|
||||||
}; //+04
|
}; //+04
|
||||||
DWORD nUnitId; //+08
|
DWORD nUnitId; //+08
|
||||||
DWORD nItemNum; //+0C
|
DWORD nItemNum; //+0C
|
||||||
DWORD CurrentAnim; //+10
|
DWORD mode; //+10
|
||||||
union{
|
union{
|
||||||
MonsterData* ptMonsterData;
|
MonsterData* ptMonsterData;
|
||||||
ObjectData* ptObjectData;
|
ObjectData* ptObjectData;
|
||||||
@ -452,7 +577,7 @@ struct Unit
|
|||||||
BYTE uk10[0x0C]; //+D4
|
BYTE uk10[0x0C]; //+D4
|
||||||
Unit* ptFirstMonster; //+E0
|
Unit* ptFirstMonster; //+E0
|
||||||
Unit* Unit1; //+E4
|
Unit* Unit1; //+E4
|
||||||
Unit* Unit2; //+E8
|
Unit* ptNextUnitInRoom; //+E8
|
||||||
BYTE uk11[0x08]; //+EC
|
BYTE uk11[0x08]; //+EC
|
||||||
union{
|
union{
|
||||||
CBPlayerData* ptCBPlayerData;
|
CBPlayerData* ptCBPlayerData;
|
||||||
@ -480,60 +605,60 @@ struct ItemMod
|
|||||||
|
|
||||||
struct AIStruct
|
struct AIStruct
|
||||||
{
|
{
|
||||||
DWORD mSpawn; // +00
|
DWORD mSpawn; // +00
|
||||||
void* mAIFunc; // +04
|
void* mAIFunc; // +04
|
||||||
DWORD mUnknown1[8]; // +08
|
DWORD mUnknown1[8]; // +08
|
||||||
D2Game* mGame; // +28
|
D2Game* mGame; // +28
|
||||||
DWORD mMinionOwner; // +2C
|
DWORD mMinionOwner; // +2C
|
||||||
DWORD mOwnerType; // +30
|
DWORD mOwnerType; // +30
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct LocInfo
|
struct LocInfo
|
||||||
{ //Offset from Code
|
{ //Offset from Code
|
||||||
Unit* noneLoc; //+00
|
Unit* noneLoc; //+00
|
||||||
Unit* headLoc; //+04
|
Unit* headLoc; //+04
|
||||||
Unit* neckLoc; //+08
|
Unit* neckLoc; //+08
|
||||||
Unit* torsoLoc; //+0c
|
Unit* torsoLoc; //+0c
|
||||||
Unit* rightArmLoc; //+10
|
Unit* rightArmLoc; //+10
|
||||||
Unit* leftArmLoc; //+14
|
Unit* leftArmLoc; //+14
|
||||||
Unit* rightRingLoc; //+18
|
Unit* rightRingLoc; //+18
|
||||||
Unit* leftRingLoc; //+1c
|
Unit* leftRingLoc; //+1c
|
||||||
Unit* beltLoc; //+20
|
Unit* beltLoc; //+20
|
||||||
Unit* feetLoc; //+24
|
Unit* feetLoc; //+24
|
||||||
Unit* glovesLoc; //+28
|
Unit* glovesLoc; //+28
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ItemData
|
struct ItemData
|
||||||
{ // Offset from Code
|
{ // Offset from Code
|
||||||
DWORD quality; // +00.
|
DWORD quality; // +00.
|
||||||
DWORD lowSeed; // +04.
|
DWORD lowSeed; // +04.
|
||||||
DWORD highSeed; // +08.
|
DWORD highSeed; // +08.
|
||||||
DWORD unknown1; // +0c.
|
DWORD unknown1; // +0c.
|
||||||
DWORD startLowSeed; // +10.
|
DWORD startLowSeed; // +10.
|
||||||
DWORD cmdFlags; // +14.
|
DWORD cmdFlags; // +14.
|
||||||
DWORD flags; // +18.
|
DWORD flags; // +18.
|
||||||
DWORD unknown2[2]; // +1C
|
DWORD unknown2[2]; // +1C
|
||||||
DWORD originID; // +24.
|
DWORD originID; // +24.
|
||||||
DWORD iLvl; // +28.
|
DWORD iLvl; // +28.
|
||||||
WORD version; // +2C.
|
WORD version; // +2C.
|
||||||
WORD prefix; // +2E.
|
WORD prefix; // +2E.
|
||||||
WORD suffix; // +30.
|
WORD suffix; // +30.
|
||||||
WORD autoPrefix; // +32.
|
WORD autoPrefix; // +32.
|
||||||
WORD prefix1; // +34.
|
WORD prefix1; // +34.
|
||||||
WORD prefix2; // +36.
|
WORD prefix2; // +36.
|
||||||
WORD prefix3; // +38.
|
WORD prefix3; // +38.
|
||||||
WORD suffix1; // +3A.
|
WORD suffix1; // +3A.
|
||||||
WORD suffix2; // +3C.
|
WORD suffix2; // +3C.
|
||||||
WORD suffix3; // +3E.
|
WORD suffix3; // +3E.
|
||||||
BYTE bodyLoc; // +40. // 0=inv/stash 4=gaucheS 5=droiteS
|
BYTE bodyLoc; // +40. // 0=inv/stash 4=gaucheS 5=droiteS
|
||||||
BYTE inPage; // +41. // FF=equip 00=inv 04=stash
|
BYTE inPage; // +41. // FF=equip 00=inv 04=stash
|
||||||
BYTE unknown3[3]; // +42
|
BYTE unknown3[3]; // +42
|
||||||
BYTE picture[8]; // +45
|
BYTE picture[8]; // +45
|
||||||
DWORD ilvl; // +4C
|
DWORD ilvl; // +4C
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PresetUnit
|
struct PresetUnit
|
||||||
{ //Offset from Code
|
{ //Offset from Code
|
||||||
DWORD unitType; //+00
|
DWORD unitType; //+00
|
||||||
DWORD txtFileNo; //+04
|
DWORD txtFileNo; //+04
|
||||||
@ -546,128 +671,128 @@ struct PresetUnit
|
|||||||
|
|
||||||
struct MissileData
|
struct MissileData
|
||||||
{
|
{
|
||||||
+04 flags
|
+04 flags
|
||||||
+08 0 on start
|
+08 0 on start
|
||||||
+0c -1 on start
|
+0c -1 on start
|
||||||
+20 nDirection
|
+20 nDirection
|
||||||
+28 range?
|
+28 range?
|
||||||
+2c range?
|
+2c range?
|
||||||
+30 level
|
+30 level
|
||||||
+34 number of pierces (byte)
|
+34 number of pierces (byte)
|
||||||
+35 (byte)
|
+35 (byte)
|
||||||
+36 (byte)
|
+36 (byte)
|
||||||
+37 (byte)
|
+37 (byte)
|
||||||
+38 range-activate
|
+38 range-activate
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct Combat
|
struct Combat
|
||||||
{
|
{
|
||||||
DWORD mHeader; // +00 : Always 0x32
|
DWORD mHeader; // +00 : Always 0x32
|
||||||
DWORD mDisplayFlag; // +04 : Affect critical hit etc ...
|
DWORD mDisplayFlag; // +04 : Affect critical hit etc ...
|
||||||
DWORD mPhysicalDmg; // +08 : Values are << 8
|
DWORD mPhysicalDmg; // +08 : Values are << 8
|
||||||
DWORD mUnknown1; // +0C
|
DWORD mUnknown1; // +0C
|
||||||
DWORD mFireDmg; // +10 : Values are << 8
|
DWORD mFireDmg; // +10 : Values are << 8
|
||||||
DWORD mUnknown2; // +14
|
DWORD mUnknown2; // +14
|
||||||
DWORD mBurnLeng; // +18
|
DWORD mBurnLeng; // +18
|
||||||
DWORD mLtngDmg; // +1C : values are << 8
|
DWORD mLtngDmg; // +1C : values are << 8
|
||||||
DWORD mMagDmg; // +20 : values are << 8
|
DWORD mMagDmg; // +20 : values are << 8
|
||||||
DWORD mColdDmg; // +24 : values are << 8
|
DWORD mColdDmg; // +24 : values are << 8
|
||||||
DWORD mPoisDmg; // +28 : ??
|
DWORD mPoisDmg; // +28 : ??
|
||||||
DWORD mPoisLeng; // +2C
|
DWORD mPoisLeng; // +2C
|
||||||
DWORD mColdLeng; // +30
|
DWORD mColdLeng; // +30
|
||||||
DWORD mFreezeLeng; // +34
|
DWORD mFreezeLeng; // +34
|
||||||
DWORD mLifeSteal; // +38
|
DWORD mLifeSteal; // +38
|
||||||
DWORD mManaSteal; // +3C
|
DWORD mManaSteal; // +3C
|
||||||
DWORD mUnknwon3; // +40
|
DWORD mUnknwon3; // +40
|
||||||
DWORD mStunLeng; // +44
|
DWORD mStunLeng; // +44
|
||||||
DWORD mUnknown4; // +48
|
DWORD mUnknown4; // +48
|
||||||
DWORD mTotalDamage; // +4C
|
DWORD mTotalDamage; // +4C
|
||||||
DWORD mUnknown5[6]; // +50
|
DWORD mUnknown5[6]; // +50
|
||||||
DWORD mOverlay; // +68
|
DWORD mOverlay; // +68
|
||||||
DWORD mUnknwon6; // +6C
|
DWORD mUnknwon6; // +6C
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct Node
|
struct Node
|
||||||
{ //Offset from Code.
|
{ //Offset from Code.
|
||||||
DWORD flag; //+00 //Yoh : null->flag
|
DWORD flag; //+00 //Yoh : null->flag
|
||||||
Unit* ptItem; //+04 //Yoh : ItemData=>Unit
|
Unit* ptItem; //+04 //Yoh : ItemData=>Unit
|
||||||
DWORD unID; //+08
|
DWORD unID; //+08
|
||||||
DWORD page; //+0c //Yoh plutot etat : inventory/stash=1; inv-belt=2; equip=3
|
DWORD page; //+0c //Yoh plutot etat : inventory/stash=1; inv-belt=2; equip=3
|
||||||
Node* nextNode; //+10
|
Node* nextNode; //+10
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct MonsterData // size110 : 60
|
struct MonsterData // size110 : 60
|
||||||
{
|
{
|
||||||
AIStruct* AIPtr;
|
AIStruct* AIPtr;
|
||||||
void* unkonwPtr1;
|
void* unkonwPtr1;
|
||||||
void* uniqueInfo;
|
void* uniqueInfo;
|
||||||
void* spawnInfo;
|
void* spawnInfo;
|
||||||
void* unknownPtr2;
|
void* unknownPtr2;
|
||||||
DWORD unkown[8];
|
DWORD unkown[8];
|
||||||
void* lvlPtr;
|
void* lvlPtr;
|
||||||
MonStatTxt* monstatPtr;
|
MonStatTxt* monstatPtr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct Unit
|
struct Unit
|
||||||
{ //Offset from Code.
|
{ //Offset from Code.
|
||||||
DWORD nUnitType; //+00
|
DWORD nUnitType; //+00
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
DWORD nTxtFileNo;
|
DWORD nTxtFileNo;
|
||||||
DWORD nPlayerClass;
|
DWORD nPlayerClass;
|
||||||
}; //+04
|
}; //+04
|
||||||
|
|
||||||
DWORD nUnitId; //+08
|
DWORD nUnitId; //+08
|
||||||
DWORD eMode; //+0c
|
DWORD eMode; //+0c
|
||||||
DWORD* unknow1; //+10
|
DWORD* unknow1; //+10
|
||||||
DWORD nAct; //+14
|
DWORD nAct; //+14
|
||||||
DWORD pActRelated; //+18
|
DWORD pActRelated; //+18
|
||||||
DWORD unknown2[4]; //Unknown Data at +1C
|
DWORD unknown2[4]; //Unknown Data at +1C
|
||||||
D2Seed nSeed; //+2C
|
D2Seed nSeed; //+2C
|
||||||
DWORD startSeed; //+34
|
DWORD startSeed; //+34
|
||||||
Path* pPos; //+38
|
Path* pPos; //+38
|
||||||
DWORD unknown3[6]; //Unknown Data at +3C
|
DWORD unknown3[6]; //Unknown Data at +3C
|
||||||
DWORD animSpeed; //+54
|
DWORD animSpeed; //+54
|
||||||
DWORD unknown32[2]; //+58
|
DWORD unknown32[2]; //+58
|
||||||
BYTE COFString[12]; //+60
|
BYTE COFString[12]; //+60
|
||||||
Stats* ptStats; //+6C
|
Stats* ptStats; //+6C
|
||||||
|
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
PlayerData* pPlayerData;
|
PlayerData* pPlayerData;
|
||||||
MonsterData* pMonsterData;
|
MonsterData* pMonsterData;
|
||||||
ItemData* pItemData;
|
ItemData* pItemData;
|
||||||
MissileData* pMissile;
|
MissileData* pMissile;
|
||||||
ObjectData* pObjectData;
|
ObjectData* pObjectData;
|
||||||
}; //+70
|
}; //+70
|
||||||
|
|
||||||
DWORD unknown5[2]; //+74
|
DWORD unknown5[2]; //+74
|
||||||
BYTE unknown6[2]; //+7C
|
BYTE unknown6[2]; //+7C
|
||||||
BYTE rndDmg[2]; //+7e
|
BYTE rndDmg[2]; //+7e
|
||||||
DWORD unknown7; //+80
|
DWORD unknown7; //+80
|
||||||
Inventory* ptInventory; //+84
|
Inventory* ptInventory; //+84
|
||||||
DWORD unknown8[4]; //+88
|
DWORD unknown8[4]; //+88
|
||||||
DWORD startNull; //+98
|
DWORD startNull; //+98
|
||||||
DWORD unknown9[2]; //+9c
|
DWORD unknown9[2]; //+9c
|
||||||
D2Game* ptGame; //+a4
|
D2Game* ptGame; //+a4
|
||||||
DWORD unknown10[4]; //+a8
|
DWORD unknown10[4]; //+a8
|
||||||
DWORD nOwnerType; //+b8
|
DWORD nOwnerType; //+b8
|
||||||
DWORD nOwnerId; //+bc
|
DWORD nOwnerId; //+bc
|
||||||
DWORD unknown11[3]; //+c0
|
DWORD unknown11[3]; //+c0
|
||||||
D2Info* ptInfo; //+cc
|
D2Info* ptInfo; //+cc
|
||||||
Combat* ptCombat; //+d0
|
Combat* ptCombat; //+d0
|
||||||
DWORD unknown12[5]; //+d4
|
DWORD unknown12[5]; //+d4
|
||||||
DWORD flags; //+e8
|
DWORD flags; //+e8
|
||||||
DWORD LODflag; //+ec
|
DWORD LODflag; //+ec
|
||||||
DWORD unknown13[7]; //+f0
|
DWORD unknown13[7]; //+f0
|
||||||
Unit* pNext; //+10c
|
Unit* pNext; //+10c
|
||||||
DWORD unknown14[2]; //+110 //YOH
|
DWORD unknown14[2]; //+110 //YOH
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
ItemData* ptItemData;
|
ItemData* ptItemData;
|
||||||
void* ptData;
|
void* ptData;
|
||||||
|
1061
Commons/d2BinFile.h
1061
Commons/d2BinFile.h
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
@brief Diablo II Tbl Structures definitions.
|
@brief Diablo II Tbl Structures definitions.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
NOT TESTED IN 1.10 (1.09b)
|
NOT TESTED IN 1.10 (1.09b)
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
@ -15,15 +15,15 @@ struct Room;
|
|||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
struct sWinMessage
|
struct sWinMessage
|
||||||
{
|
{
|
||||||
void* msg;
|
DWORD msg;
|
||||||
DWORD type;
|
DWORD type;
|
||||||
DWORD uk1;
|
DWORD key;
|
||||||
WORD x;
|
WORD x;
|
||||||
WORD y;
|
WORD y;
|
||||||
DWORD uk3;
|
DWORD uk3;
|
||||||
DWORD uk4;
|
DWORD uk4;
|
||||||
DWORD managed;
|
DWORD managed;
|
||||||
DWORD unmanaged;
|
DWORD unmanaged;
|
||||||
};
|
};
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
@ -60,11 +60,11 @@ struct saveBitField
|
|||||||
|
|
||||||
struct BINField
|
struct BINField
|
||||||
{
|
{
|
||||||
char* fieldName;
|
char* fieldName;
|
||||||
int type;
|
int type;
|
||||||
DWORD strLength;
|
DWORD strLength;
|
||||||
DWORD offset;
|
DWORD offset;
|
||||||
void* lookup;
|
void* lookup;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ItemGenerationData //size=0x84
|
struct ItemGenerationData //size=0x84
|
||||||
@ -95,6 +95,17 @@ struct ItemGenerationData //size=0x84
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct AIParam {
|
||||||
|
void* control; //+0x00
|
||||||
|
void* u_0x04; //+0x04
|
||||||
|
Unit* target; //+0x08
|
||||||
|
void* u_0x0C; //+0x0C
|
||||||
|
void* u_0x10; //+0x10
|
||||||
|
DWORD distanceToTarget; //+0x14
|
||||||
|
BOOL engagedInCombat; //+0x18
|
||||||
|
MonStatsBIN* ptMonStatsBIN; //+0x1C
|
||||||
|
void* ptMonStats2BIN; //+0x20
|
||||||
|
};
|
||||||
|
|
||||||
/*=================================================================*/
|
/*=================================================================*/
|
||||||
/* Data Structure to Update Client */
|
/* Data Structure to Update Client */
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Constants of D2
|
Constants of D2
|
||||||
NOT TESTED IN 1.10 (from 1.09b)
|
NOT TESTED IN 1.10 (from 1.09b)
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/*==================================================================================*/
|
/*==================================================================================*/
|
||||||
/*
|
/*
|
||||||
* Constants & Enumerations.
|
* Constants & Enumerations.
|
||||||
*/
|
*/
|
||||||
/*==================================================================================*/
|
/*==================================================================================*/
|
||||||
@ -18,29 +18,29 @@ enum D2TypeSize { D2TS_UNITSIZE = 0x011C };
|
|||||||
enum D2DifficultyModes { D2DM_NORMAL, D2DM_NIGHTMARE, D2DM_HELL };
|
enum D2DifficultyModes { D2DM_NORMAL, D2DM_NIGHTMARE, D2DM_HELL };
|
||||||
enum D2PlayerClass { D2PC_AMAZON, D2PC_SORCERESS, D2PC_NECROMANCER, D2PC_PALADIN, D2PC_BARBARIAN, D2PC_DRUID, D2PC_ASSASSIN };
|
enum D2PlayerClass { D2PC_AMAZON, D2PC_SORCERESS, D2PC_NECROMANCER, D2PC_PALADIN, D2PC_BARBARIAN, D2PC_DRUID, D2PC_ASSASSIN };
|
||||||
|
|
||||||
|
// add the prefix "ÿc" before the number directly in the text.
|
||||||
enum D2Color
|
enum D2Color
|
||||||
{
|
{
|
||||||
|
BLACK=6,
|
||||||
|
// BLACK_BIS=14,
|
||||||
|
DARK_GRAY=5,
|
||||||
|
GRAY=16,
|
||||||
|
LIGHT_GRAY=15,
|
||||||
|
// WHITE_BIS=13,
|
||||||
WHITE=0,
|
WHITE=0,
|
||||||
RED=1,
|
BRIGHT_WHITE=18,
|
||||||
|
GOLD=4,
|
||||||
|
DARK_YELLOW=7,
|
||||||
|
YELLOW=9,
|
||||||
|
ORANGE=8,
|
||||||
|
DARKEST_GREEN=10,
|
||||||
|
DARK_GREEN=12,
|
||||||
GREEN=2,
|
GREEN=2,
|
||||||
BLUE=3,
|
BLUE=3,
|
||||||
GOLD=4,
|
PURPLE=11,
|
||||||
DARK_GRAY=5,
|
RED=1,
|
||||||
// INVISIBLE=6,
|
CRYSTAL_RED=19,
|
||||||
DARK_YELLOW=7,
|
// VERY_WIERD=17,
|
||||||
ORANGE=8,
|
|
||||||
YELLOW=9,
|
|
||||||
DARKEST_GREEN=0xA,
|
|
||||||
PURPLE=0xB,
|
|
||||||
DARK_GREEN=0xC,
|
|
||||||
// WHITE_BIS=0xD,
|
|
||||||
// INVISIBLE2=0xE,
|
|
||||||
LIGHT_GRAY=0xF,
|
|
||||||
GRAY=0x10,
|
|
||||||
// VERY_WIERD=0x11,
|
|
||||||
BRIGHT_WHITE=0x12,
|
|
||||||
CRYSTAL_RED=0x13,
|
|
||||||
// WIERD_YELLOW=0x14
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum D2Lang
|
enum D2Lang
|
||||||
@ -52,8 +52,8 @@ enum D2Lang
|
|||||||
LNG_POR,// Portuguese
|
LNG_POR,// Portuguese
|
||||||
LNG_ITA,// Italian
|
LNG_ITA,// Italian
|
||||||
LNG_JPN,// Japanese
|
LNG_JPN,// Japanese
|
||||||
LNG_KOR,// Korean
|
LNG_KOR,// Korean
|
||||||
LNG_SIN,//
|
LNG_SIN,//
|
||||||
LNG_CHI,// Chinese
|
LNG_CHI,// Chinese
|
||||||
LNG_POL,// Polish
|
LNG_POL,// Polish
|
||||||
LNG_RUS,// Russian
|
LNG_RUS,// Russian
|
||||||
@ -445,7 +445,7 @@ enum D2Mod
|
|||||||
DEXTERITY,
|
DEXTERITY,
|
||||||
VITALITY,
|
VITALITY,
|
||||||
ENERGY,
|
ENERGY,
|
||||||
MAXMANA,
|
MAXMANA,
|
||||||
MAXMANA_PERCENT,
|
MAXMANA_PERCENT,
|
||||||
MAXHP,
|
MAXHP,
|
||||||
MAXHP_PERCENT,
|
MAXHP_PERCENT,
|
||||||
@ -824,6 +824,30 @@ enum D2UnitType
|
|||||||
UNIT_ROOMTILE
|
UNIT_ROOMTILE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum D2UnitMode
|
||||||
|
{
|
||||||
|
UNIT_MODE_DEATH = 0,
|
||||||
|
UNIT_MODE_NEUTRAL,
|
||||||
|
UNIT_MODE_WALK,
|
||||||
|
UNIT_MODE_RUN,
|
||||||
|
UNIT_MODE_GET_HIT,
|
||||||
|
UNIT_MODE_TOWN_NEUTRAL,
|
||||||
|
UNIT_MODE_TOWN_WALK,
|
||||||
|
UNIT_MODE_ATTACK1,
|
||||||
|
UNIT_MODE_ATTACK2,
|
||||||
|
UNIT_MODE_BLOCK,
|
||||||
|
UNIT_MODE_CAST,
|
||||||
|
UNIT_MODE_THROW,
|
||||||
|
UNIT_MODE_KICK,
|
||||||
|
UNIT_MODE_SKILL1,
|
||||||
|
UNIT_MODE_SKILL2,
|
||||||
|
UNIT_MODE_SKILL3,
|
||||||
|
UNIT_MODE_SKILL4,
|
||||||
|
UNIT_MODE_DEAD,
|
||||||
|
UNIT_MODE_SEQUENCE,
|
||||||
|
UNIT_MODE_KNOCK_BACK
|
||||||
|
};
|
||||||
|
|
||||||
enum D2BodyLoc
|
enum D2BodyLoc
|
||||||
{
|
{
|
||||||
LOC_HEAD =1,
|
LOC_HEAD =1,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Use a more big stash
|
Use a more big stash
|
||||||
|
|
||||||
@ -45,15 +45,26 @@ InventoryBIN* STDCALL modifStashGrid(InventoryBIN* ptInventoryBin)
|
|||||||
return ptInventoryBin;
|
return ptInventoryBin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM ( caller_modifStashGrid )
|
FCT_ASM ( caller_modifStashGrid )
|
||||||
POP ESI
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
CALL D2CompileTxtFile
|
CALL D2CompileTxtFile
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
CALL modifStashGrid
|
CALL modifStashGrid
|
||||||
JMP ESI
|
RETN 0x14
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
//FCT_ASM ( caller_modifStashGrid )
|
||||||
|
// POP ESI
|
||||||
|
// CALL D2CompileTxtFile
|
||||||
|
// PUSH EAX
|
||||||
|
// CALL modifStashGrid
|
||||||
|
// JMP ESI
|
||||||
|
//}}
|
||||||
|
|
||||||
FCT_ASM ( caller_changeTradeStash )
|
FCT_ASM ( caller_changeTradeStash )
|
||||||
CMP onRealm,0
|
CMP onRealm,0
|
||||||
JNZ normalTradeStash
|
JNZ normalTradeStash
|
||||||
@ -79,30 +90,27 @@ void Install_BigStash()
|
|||||||
|
|
||||||
// modification of stash grid
|
// modification of stash grid
|
||||||
mem_seek R8(D2Common, C9F3, CA03, 14ED3, 5FCB5, 2A505, 1BDB5, 82CA5, 6CC25, 25C0F8);
|
mem_seek R8(D2Common, C9F3, CA03, 14ED3, 5FCB5, 2A505, 1BDB5, 82CA5, 6CC25, 25C0F8);
|
||||||
if (version_D2Common == V114d) {
|
MEMC_REF4( D2CompileTxtFile, caller_modifStashGrid);
|
||||||
MEMT_REF4(0xFFFB61F4, caller_modifStashGrid);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MEMC_REF4(D2CompileTxtFile, caller_modifStashGrid);
|
|
||||||
}
|
|
||||||
//01B64ED2 |. E8 99AEFFFF CALL D2Common.#10578
|
//01B64ED2 |. E8 99AEFFFF CALL D2Common.#10578
|
||||||
//6FDAFCB4 |. E8 A7C3FCFF CALL D2Common.#10653
|
//6FDAFCB4 |. E8 A7C3FCFF CALL D2Common.#10653
|
||||||
//6FD7A504 |. E8 5743FEFF CALL D2Common.#10496 ; \#10496
|
//6FD7A504 |. E8 5743FEFF CALL D2Common.#10496 ; \#10496
|
||||||
//6FD6BDB4 |. E8 97600200 CALL D2Common.#10244 ; \#10244
|
//6FD6BDB4 |. E8 97600200 CALL D2Common.#10244 ; \#10244
|
||||||
//6FDD2CA4 |. E8 97C2FDFF CALL D2Common.#10849 ; \#10849
|
//6FDD2CA4 |. E8 97C2FDFF CALL D2Common.#10849 ; \#10849
|
||||||
//6FDBCC24 |. E8 B7FEF9FF CALL D2Common.#10037 ; \#10037
|
//6FDBCC24 |. E8 B7FEF9FF CALL D2Common.#10037 ; \#10037
|
||||||
|
//0065C0F7 |. E8 F461FBFF CALL Game.006122F0 ; \Game.006122F0
|
||||||
|
|
||||||
// modification of stash background
|
// modification of stash background
|
||||||
mem_seek R8(D2Client, 45B1C, 45B1C, 4C61C, A643C, 749BC, A9D7C, 8CC1C, 943FC, 89EB5);
|
mem_seek R8(D2Client, 45B1C, 45B1C, 4C61C, A643C, 749BC, A9D7C, 8CC1C, 943FC, 89EB5);
|
||||||
memt_byte(0x68, 0xE8); // CALL caller_changeTradeStash
|
memt_byte( 0x68, 0xE8 ); // CALL caller_changeTradeStash
|
||||||
MEMT_REF4(0x00000104, caller_changeTradeStash);
|
MEMT_REF4( 0x00000104, caller_changeTradeStash);
|
||||||
|
//6FAEC61C |. 68 04010000 PUSH 104
|
||||||
|
//6FB5643C |. 68 04010000 PUSH 104
|
||||||
|
//6FB249BC |. 68 04010000 PUSH 104
|
||||||
|
//6FB59D7C |. 68 04010000 PUSH 104
|
||||||
|
//6FB3CC1C |. 68 04010000 PUSH 104
|
||||||
|
//6FB443FC |. 68 04010000 PUSH 104
|
||||||
|
//00489EB5 |. 68 04010000 PUSH 104 ; |Arg2 = 00000104
|
||||||
|
|
||||||
//6FAEC61C |. 68 04010000 PUSH 104
|
|
||||||
//6FB5643C |. 68 04010000 PUSH 104
|
|
||||||
//6FB249BC |. 68 04010000 PUSH 104
|
|
||||||
//6FB59D7C |. 68 04010000 PUSH 104
|
|
||||||
//6FB3CC1C |. 68 04010000 PUSH 104
|
|
||||||
//6FB443FC |. 68 04010000 PUSH 104
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
isInstalled = true;
|
isInstalled = true;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Add an extra save file for each characters.
|
Add an extra save file for each characters.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
/*
|
/*
|
||||||
@ -23,7 +23,7 @@ BYTE * openClientSaveFile(char* name, DWORD* size)
|
|||||||
strcat(filename, ".clt");
|
strcat(filename, ".clt");
|
||||||
|
|
||||||
log_msg("Client file to read : %s\n",filename);
|
log_msg("Client file to read : %s\n",filename);
|
||||||
|
|
||||||
FILE* file = fopen(filename, "rb");
|
FILE* file = fopen(filename, "rb");
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
@ -55,7 +55,7 @@ DWORD loadClientSaveFile()
|
|||||||
if (!data) return 0;
|
if (!data) return 0;
|
||||||
|
|
||||||
DWORD curSize = 0;
|
DWORD curSize = 0;
|
||||||
|
|
||||||
log_msg("Load client file.\n");
|
log_msg("Load client file.\n");
|
||||||
if (*(DWORD*)&data[curSize] != FILE_SAVETYPE)
|
if (*(DWORD*)&data[curSize] != FILE_SAVETYPE)
|
||||||
{
|
{
|
||||||
@ -103,7 +103,7 @@ DWORD saveClientSaveFile()
|
|||||||
D2FogGetSavePath( (char*)data, BUFFER_SIZE);
|
D2FogGetSavePath( (char*)data, BUFFER_SIZE);
|
||||||
sprintf( szSaveName, "%s%s.clt", data, PCPlayerData->name );
|
sprintf( szSaveName, "%s%s.clt", data, PCPlayerData->name );
|
||||||
log_msg("Client save file for saving : %s\n",szSaveName);
|
log_msg("Client save file for saving : %s\n",szSaveName);
|
||||||
// if (!MoveFileEx(szTempName, szSaveName, MOVEFILE_WRITE_THROUGH|MOVEFILE_REPLACE_EXISTING))
|
// if (!MoveFileEx(szTempName, szSaveName, MOVEFILE_WRITE_THROUGH|MOVEFILE_REPLACE_EXISTING))
|
||||||
DeleteFile(szSaveName);
|
DeleteFile(szSaveName);
|
||||||
if (!MoveFile(szTempName, szSaveName))
|
if (!MoveFile(szTempName, szSaveName))
|
||||||
log_box("Could not create the client save file.");
|
log_box("Could not create the client save file.");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Updating server.
|
Updating server.
|
||||||
|
|
||||||
@ -15,6 +15,8 @@
|
|||||||
#include "extraOptions.h"
|
#include "extraOptions.h"
|
||||||
#include "windowed.h"
|
#include "windowed.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "savePlayerData.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
bool active_Commands=true;
|
bool active_Commands=true;
|
||||||
|
|
||||||
@ -35,14 +37,19 @@ const char * CMD_UNLOCK_MOUSE2 = "/unlock";
|
|||||||
|
|
||||||
const char * CMD_RENAME_CHAR="/renamechar";
|
const char * CMD_RENAME_CHAR="/renamechar";
|
||||||
|
|
||||||
const char * CMD_REPAGE_NAME = "/renamepage";
|
const char * CMD_RENAME_PAGE = "/renamepage";
|
||||||
|
const char * CMD_SHORT_RENAME_PAGE = "/rp";
|
||||||
const char * CMD_SET_INDEX = "/setindex";
|
const char * CMD_SET_INDEX = "/setindex";
|
||||||
const char * CMD_SET_MAIN_INDEX = "/setmainindex";
|
const char * CMD_SET_MAIN_INDEX = "/setmainindex";
|
||||||
const char * CMD_RESET_INDEX = "/resetindex";
|
const char * CMD_RESET_INDEX = "/resetindex";
|
||||||
const char * CMD_INSERT_PAGE = "/insertpage";
|
const char * CMD_INSERT_PAGE = "/insertpage";
|
||||||
|
const char * CMD_SHORT_INSERT_PAGE = "/ip";
|
||||||
const char * CMD_DELETE_PAGE = "/deletepage";
|
const char * CMD_DELETE_PAGE = "/deletepage";
|
||||||
const char * CMD_SWAP = "/swap";
|
const char * CMD_SHORT_DELETE_PAGE = "/dp";
|
||||||
const char * CMD_TOGGLE = "/toggle";
|
const char * CMD_SWAP_PAGE = "/swappage";
|
||||||
|
const char * CMD_SHORT_SWAP_PAGE = "/sp";
|
||||||
|
const char * CMD_TOGGLE_PAGE = "/togglepage";
|
||||||
|
const char * CMD_SHORT_TOGGLE_PAGE = "/tp";
|
||||||
|
|
||||||
const char * CMD_DISPLAY_MANA_LIFE = "/dml";
|
const char * CMD_DISPLAY_MANA_LIFE = "/dml";
|
||||||
const char * CMD_DISPLAY_LIFE_MANA = "/dlm";
|
const char * CMD_DISPLAY_LIFE_MANA = "/dlm";
|
||||||
@ -173,29 +180,29 @@ void gambleReload(Unit* ptChar)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
void gambleReload(Unit* ptChar)
|
/*void gambleReload(Unit* ptChar)
|
||||||
{
|
{
|
||||||
Unit* ptNPC = D2GetCurrentNPC();
|
Unit* ptNPC = D2GetCurrentNPC();
|
||||||
if (ptNPC)
|
if (ptNPC)
|
||||||
{
|
{
|
||||||
D2TogglePage(0xC,1,0);
|
D2TogglePage(0xC,1,0);
|
||||||
__asm {
|
//Game* ptGame = ptChar->ptGame;
|
||||||
NOP
|
//DWORD caller = offset_D2Game + 0x74900;
|
||||||
NOP
|
//__asm {
|
||||||
NOP
|
// PUSH 0
|
||||||
NOP
|
// PUSH 6
|
||||||
NOP
|
// PUSH 2
|
||||||
NOP
|
// PUSH ptGame
|
||||||
NOP
|
// MOV ECX, ptChar
|
||||||
NOP
|
// CALL caller
|
||||||
NOP
|
//}
|
||||||
NOP
|
//0330CD70 . 837C24 08 0D CMP DWORD PTR SS:[ESP+8],0D
|
||||||
}
|
D2OpenNPCMenu(ptNPC);
|
||||||
// D2OpenNPCMenu(ptNPC);
|
|
||||||
D2ReloadGambleScreen();
|
D2ReloadGambleScreen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//6FACFFD4 |. E8 77F90000 CALL D2Client.6FADF950
|
//6FACFFD4 |. E8 77F90000 CALL D2Client.6FADF950
|
||||||
|
*/
|
||||||
|
|
||||||
void savePlayers(Unit* ptChar)
|
void savePlayers(Unit* ptChar)
|
||||||
{
|
{
|
||||||
@ -207,15 +214,15 @@ void maxGold(Unit* ptChar)
|
|||||||
{
|
{
|
||||||
log_msg("maxGold\n");
|
log_msg("maxGold\n");
|
||||||
|
|
||||||
DWORD maxGold = D2GetMaxGold(ptChar);
|
DWORD maxGold = D2GetMaxGold(ptChar);
|
||||||
DWORD maxGoldBank = D2GetMaxGoldBank(ptChar);
|
DWORD maxGoldBank = D2GetMaxGoldBank(ptChar);
|
||||||
DWORD playerGold = D2GetPlayerStat(ptChar, STATS_GOLD, 0);
|
DWORD playerGold = D2GetPlayerStat(ptChar, STATS_GOLD, 0);
|
||||||
DWORD playerGoldBank = D2GetPlayerStat(ptChar, STATS_GOLDBANK, 0);
|
DWORD playerGoldBank = D2GetPlayerStat(ptChar, STATS_GOLDBANK, 0);
|
||||||
if ( (playerGold < maxGold) || (playerGoldBank < maxGoldBank) ) {
|
if ( (playerGold < maxGold) || (playerGoldBank < maxGoldBank) ) {
|
||||||
D2AddPlayerStat( ptChar, STATS_GOLD, maxGold-playerGold, 0 );
|
D2AddPlayerStat( ptChar, STATS_GOLD, maxGold-playerGold, 0 );
|
||||||
D2AddPlayerStat( ptChar, STATS_GOLDBANK, maxGoldBank-playerGoldBank, 0 );
|
D2AddPlayerStat( ptChar, STATS_GOLDBANK, maxGoldBank-playerGoldBank, 0 );
|
||||||
} else {
|
} else {
|
||||||
D2AddPlayerStat( ptChar, STATS_GOLD, 100000, 0 );
|
D2AddPlayerStat( ptChar, STATS_GOLD, 100000, 0 );
|
||||||
}
|
}
|
||||||
if (active_sharedGold)
|
if (active_sharedGold)
|
||||||
{
|
{
|
||||||
@ -263,7 +270,57 @@ void updateSharedGold(DWORD goldAmount)
|
|||||||
PCPY->sharedGold = goldAmount;
|
PCPY->sharedGold = goldAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool renameCharacter(Unit* ptChar, const char* newName)
|
bool renamePage(Unit* ptChar, char* newName)
|
||||||
|
{
|
||||||
|
Stash* ptStash = PCPY->currentStash;
|
||||||
|
if (!ptStash)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
log_msg("Rename current page on Client : '%s' -> '%s'\n", ptStash->name, newName);
|
||||||
|
int len = strlen(newName);
|
||||||
|
// trim text
|
||||||
|
while (newName[0] == ' ')
|
||||||
|
{
|
||||||
|
newName++;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
while (len > 0 && newName[len-1] == ' ')
|
||||||
|
{
|
||||||
|
newName[len-1] = NULL;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
// Fix max length
|
||||||
|
if (len > 20)
|
||||||
|
{
|
||||||
|
newName[20] = NULL;
|
||||||
|
len = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if new name is default name
|
||||||
|
char defautText[50];
|
||||||
|
wcstombs(defautText, getDefaultStashName(ptChar), 50);
|
||||||
|
if (!strcmp(newName, defautText))
|
||||||
|
{
|
||||||
|
newName[0] = NULL;
|
||||||
|
len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the name change
|
||||||
|
if (newName[0] == NULL && (ptStash->name == NULL || ptStash->name[0] == NULL))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (ptStash->name && !strcmp(newName, ptStash->name))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// Rename the page
|
||||||
|
log_msg("Rename current page valid : '%s' (%s)\n", newName, defautText);
|
||||||
|
renameCurrentStash(ptChar, newName);
|
||||||
|
for (int i = 0; i <= len; i++)
|
||||||
|
updateServer(US_PAGENAME + (newName[i] << 8));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool renameCharacter(Unit* ptChar, char* newName)
|
||||||
{
|
{
|
||||||
int len = strlen(newName);
|
int len = strlen(newName);
|
||||||
if (len < 2 || len > 15)
|
if (len < 2 || len > 15)
|
||||||
@ -274,7 +331,10 @@ bool renameCharacter(Unit* ptChar, const char* newName)
|
|||||||
if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c == '_')))
|
if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c == '_')))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
log_msg("Rename Character : %s -> %s\n", PCPlayerData->name, newName);
|
||||||
|
|
||||||
// Move current save file
|
// Move current save file
|
||||||
|
backupSaveFiles(PCPlayerData->name, -1);
|
||||||
{
|
{
|
||||||
char szCurrentFile[MAX_PATH];
|
char szCurrentFile[MAX_PATH];
|
||||||
char szNewFile[MAX_PATH];
|
char szNewFile[MAX_PATH];
|
||||||
@ -282,7 +342,7 @@ bool renameCharacter(Unit* ptChar, const char* newName)
|
|||||||
//Get temporary savefile name.
|
//Get temporary savefile name.
|
||||||
D2FogGetSavePath(szCurrentFile, MAX_PATH);
|
D2FogGetSavePath(szCurrentFile, MAX_PATH);
|
||||||
D2FogGetSavePath(szNewFile, MAX_PATH);
|
D2FogGetSavePath(szNewFile, MAX_PATH);
|
||||||
strcat(szCurrentFile, ptChar->ptPlayerData->name);
|
strcat(szCurrentFile, PCPlayerData->name);
|
||||||
strcat(szNewFile, newName);
|
strcat(szNewFile, newName);
|
||||||
strcat(szCurrentFile, ".");
|
strcat(szCurrentFile, ".");
|
||||||
strcat(szNewFile, ".");
|
strcat(szNewFile, ".");
|
||||||
@ -290,7 +350,8 @@ bool renameCharacter(Unit* ptChar, const char* newName)
|
|||||||
int newLen = strlen(szNewFile);
|
int newLen = strlen(szNewFile);
|
||||||
strcpy(&szCurrentFile[curLen], "d2s");
|
strcpy(&szCurrentFile[curLen], "d2s");
|
||||||
strcpy(&szNewFile[newLen], "d2s");
|
strcpy(&szNewFile[newLen], "d2s");
|
||||||
MoveFile(szCurrentFile, szNewFile);
|
if (!MoveFile(szCurrentFile, szNewFile))
|
||||||
|
return 0;
|
||||||
strcpy(&szCurrentFile[curLen], "d2x");
|
strcpy(&szCurrentFile[curLen], "d2x");
|
||||||
strcpy(&szNewFile[newLen], "d2x");
|
strcpy(&szNewFile[newLen], "d2x");
|
||||||
MoveFile(szCurrentFile, szNewFile);
|
MoveFile(szCurrentFile, szNewFile);
|
||||||
@ -316,16 +377,19 @@ bool renameCharacter(Unit* ptChar, const char* newName)
|
|||||||
strcpy(&szNewFile[newLen], "map");
|
strcpy(&szNewFile[newLen], "map");
|
||||||
MoveFile(szCurrentFile, szNewFile);
|
MoveFile(szCurrentFile, szNewFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update server
|
// Update server
|
||||||
for (int i = 0; i <= len; i++)
|
for (int i = 0; i <= len; i++)
|
||||||
updateServer(US_RENAME + (newName[i] << 8));
|
updateServer(US_RENAME + (newName[i] << 8));
|
||||||
|
|
||||||
// Update client
|
// Update client
|
||||||
log_msg("Rename on Client : %s -> %s\n", ptChar->ptPlayerData->name, newName);
|
log_msg("Rename on Client : %s -> %s\n", PCPlayerData->name, newName);
|
||||||
strcpy(ptChar->ptPlayerData->name, newName);
|
strcpy(PCPlayerData->name, newName);
|
||||||
|
|
||||||
updateServer(US_SAVE);
|
updateServer(US_SAVE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************************************/
|
/****************************************************************************************************/
|
||||||
|
|
||||||
int STDCALL commands (char* ptText)
|
int STDCALL commands (char* ptText)
|
||||||
@ -376,41 +440,25 @@ int STDCALL commands (char* ptText)
|
|||||||
|
|
||||||
if (!strncmp(command, CMD_RENAME_CHAR, strlen(CMD_RENAME_CHAR)))
|
if (!strncmp(command, CMD_RENAME_CHAR, strlen(CMD_RENAME_CHAR)))
|
||||||
{
|
{
|
||||||
const char* param = &ptText[strlen(CMD_RENAME_CHAR)];
|
char* param = &ptText[strlen(CMD_RENAME_CHAR)];
|
||||||
if (param[0] != ' ')
|
if (param[0] != ' ')
|
||||||
return 1;
|
return 1;
|
||||||
param++;
|
param++;
|
||||||
return renameCharacter(ptChar, param);
|
return renameCharacter(ptChar, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmp(command, CMD_REPAGE_NAME,strlen(CMD_REPAGE_NAME)))
|
if (!strncmp(command, CMD_RENAME_PAGE, strlen(CMD_RENAME_PAGE)))
|
||||||
{
|
{
|
||||||
if (!active_multiPageStash) return 1;
|
if (!active_multiPageStash) return 1;
|
||||||
char* param = &ptText[strlen(CMD_REPAGE_NAME)];
|
char* param = &ptText[strlen(CMD_RENAME_PAGE)];
|
||||||
Stash* ptStash = PCPY->currentStash;
|
return renamePage(ptChar, param);
|
||||||
if (!ptStash)
|
}
|
||||||
return 0;
|
|
||||||
|
|
||||||
int len = strlen(param);
|
if (!strncmp(command, CMD_SHORT_RENAME_PAGE, strlen(CMD_SHORT_RENAME_PAGE)))
|
||||||
while (len > 0 && param[0] == ' ')
|
{
|
||||||
{
|
if (!active_multiPageStash) return 1;
|
||||||
param++;
|
char* param = &ptText[strlen(CMD_SHORT_RENAME_PAGE)];
|
||||||
len--;
|
return renamePage(ptChar, param);
|
||||||
}
|
|
||||||
if (len > 0 && len <= 15)
|
|
||||||
{
|
|
||||||
log_msg("Rename current page on Client : %s -> %s\n", ptStash->name, param);
|
|
||||||
renameCurrentStash(ptChar, param);
|
|
||||||
for (int i = 0; i <= len; i++)
|
|
||||||
updateServer(US_PAGENAME + (param[i] << 8));
|
|
||||||
}
|
|
||||||
else if (len == 0)
|
|
||||||
{
|
|
||||||
log_msg("Rename current page on Client: %s\n", ptStash->name);
|
|
||||||
renameCurrentStash(ptChar, NULL);
|
|
||||||
updateServer(US_PAGENAME);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(command, CMD_SET_INDEX))
|
if (!strcmp(command, CMD_SET_INDEX))
|
||||||
@ -442,6 +490,14 @@ int STDCALL commands (char* ptText)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(command, CMD_SHORT_INSERT_PAGE))
|
||||||
|
{
|
||||||
|
if (!active_multiPageStash) return 1;
|
||||||
|
insertStash(ptChar);
|
||||||
|
updateServer(US_INSERT_PAGE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(command, CMD_DELETE_PAGE))
|
if (!strcmp(command, CMD_DELETE_PAGE))
|
||||||
{
|
{
|
||||||
if (!active_multiPageStash) return 1;
|
if (!active_multiPageStash) return 1;
|
||||||
@ -450,10 +506,18 @@ int STDCALL commands (char* ptText)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmp(command, CMD_SWAP, strlen(CMD_SWAP)))
|
if (!strcmp(command, CMD_SHORT_DELETE_PAGE))
|
||||||
{
|
{
|
||||||
if (!active_multiPageStash) return 1;
|
if (!active_multiPageStash) return 1;
|
||||||
int page = atoi(&command[strlen(CMD_SWAP)]) - 1;
|
if (deleteStash(ptChar, true))
|
||||||
|
updateServer(US_DELETE_PAGE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strncmp(command, CMD_SWAP_PAGE, strlen(CMD_SWAP_PAGE)))
|
||||||
|
{
|
||||||
|
if (!active_multiPageStash) return 1;
|
||||||
|
int page = atoi(&command[strlen(CMD_SWAP_PAGE)]) - 1;
|
||||||
if (page < 0 && PCPY->currentStash->nextStash)
|
if (page < 0 && PCPY->currentStash->nextStash)
|
||||||
page = PCPY->currentStash->nextStash->id;
|
page = PCPY->currentStash->nextStash->id;
|
||||||
if (page < 0)
|
if (page < 0)
|
||||||
@ -465,10 +529,38 @@ int STDCALL commands (char* ptText)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmp(command, CMD_TOGGLE, strlen(CMD_TOGGLE)))
|
if (!strncmp(command, CMD_SHORT_SWAP_PAGE, strlen(CMD_SHORT_SWAP_PAGE)))
|
||||||
|
{
|
||||||
|
if (!active_multiPageStash) return 1;
|
||||||
|
int page = atoi(&command[strlen(CMD_SHORT_SWAP_PAGE)]) - 1;
|
||||||
|
if (page < 0 && PCPY->currentStash->nextStash)
|
||||||
|
page = PCPY->currentStash->nextStash->id;
|
||||||
|
if (page < 0)
|
||||||
|
return 1;
|
||||||
|
updateServer(US_SWAP3 + ((page & 0xFF000000) >> 16));
|
||||||
|
updateServer(US_SWAP2 + ((page & 0xFF0000) >> 8));
|
||||||
|
updateServer(US_SWAP1 + (page & 0xFF00));
|
||||||
|
updateServer(US_SWAP0 + ((page & 0xFF) << 8));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strncmp(command, CMD_TOGGLE_PAGE, strlen(CMD_TOGGLE_PAGE)))
|
||||||
{
|
{
|
||||||
if (!active_sharedStash) return 1;
|
if (!active_sharedStash) return 1;
|
||||||
int page = atoi(&command[strlen(CMD_TOGGLE)]) - 1;
|
int page = atoi(&command[strlen(CMD_TOGGLE_PAGE)]) - 1;
|
||||||
|
if (page < 0)
|
||||||
|
return 1;
|
||||||
|
updateServer(US_SWAP3 + ((page & 0xFF000000) >> 16));
|
||||||
|
updateServer(US_SWAP2 + ((page & 0xFF0000) >> 8));
|
||||||
|
updateServer(US_SWAP1 + (page & 0xFF00));
|
||||||
|
updateServer(US_SWAP0_TOGGLE + ((page & 0xFF) << 8));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strncmp(command, CMD_SHORT_TOGGLE_PAGE, strlen(CMD_SHORT_TOGGLE_PAGE)))
|
||||||
|
{
|
||||||
|
if (!active_sharedStash) return 1;
|
||||||
|
int page = atoi(&command[strlen(CMD_SHORT_TOGGLE_PAGE)]) - 1;
|
||||||
if (page < 0)
|
if (page < 0)
|
||||||
return 1;
|
return 1;
|
||||||
updateServer(US_SWAP3 + ((page & 0xFF000000) >> 16));
|
updateServer(US_SWAP3 + ((page & 0xFF000000) >> 16));
|
||||||
@ -517,6 +609,45 @@ int STDCALL commands (char* ptText)
|
|||||||
// return 0;
|
// return 0;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
//if (!strcmp(command,"t"))
|
||||||
|
//{
|
||||||
|
// //test();
|
||||||
|
// FILE* file = fopen("D:\\tmp.txt", "wb+");
|
||||||
|
// for (int i = 0; i<= 0xFFFF; i++)
|
||||||
|
// {
|
||||||
|
// fwprintf( file, L"== %04X ===================================\n%s\n", i, D2GetStringFromIndex(i) );
|
||||||
|
// }
|
||||||
|
// fclose(file);
|
||||||
|
// return 0;
|
||||||
|
//}
|
||||||
|
|
||||||
|
if (!strcmp(command,"aa"))
|
||||||
|
{
|
||||||
|
#pragma pack(1)
|
||||||
|
struct {
|
||||||
|
BYTE displayType;//0x15 main msg; 0x14: char popup
|
||||||
|
BYTE un;
|
||||||
|
BYTE zero;
|
||||||
|
char string[0xFF];
|
||||||
|
char null;
|
||||||
|
char u1[0x100];
|
||||||
|
char u2[0x100];
|
||||||
|
char u3[0x100];
|
||||||
|
} data;
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
//D2SetNbPlayers(nbPlayersCommand);
|
||||||
|
|
||||||
|
memset(&data,0,sizeof(data));
|
||||||
|
data.displayType=0x15;
|
||||||
|
data.un=1;
|
||||||
|
data.zero=0;//*(BYTE*)(offset_D2Client+0x112CFC); in 1.10
|
||||||
|
data.null=NULL;
|
||||||
|
sprintf(data.string, "players %u", nbPlayersCommand);
|
||||||
|
D2SendMsgToAll((BYTE*)&data);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,7 +702,7 @@ void Install_Commands()
|
|||||||
|
|
||||||
// Run custom commmand
|
// Run custom commmand
|
||||||
mem_seek R8(D2Client, 2C120, 2C110, 32BDD, C1EE6, 91C16, 86926, 70AE6, B1FD6, 7C548);
|
mem_seek R8(D2Client, 2C120, 2C110, 32BDD, C1EE6, 91C16, 86926, 70AE6, B1FD6, 7C548);
|
||||||
memt_byte( 0x83, 0xE8 ); // CALL
|
memt_byte( 0x83, 0xE8 ); // CALL
|
||||||
MEMT_REF4( 0xC08508C4 , version_D2Client >= V113d ? caller_Commands_113d : version_D2Client >= V111 ? caller_Commands_111 : caller_Commands);
|
MEMT_REF4( 0xC08508C4 , version_D2Client >= V113d ? caller_Commands_113d : version_D2Client >= V111 ? caller_Commands_111 : caller_Commands);
|
||||||
//6FB71EE6 . 83C4 08 ADD ESP,8
|
//6FB71EE6 . 83C4 08 ADD ESP,8
|
||||||
//6FB71EE7 . 85C0 TEST EAX,EAX
|
//6FB71EE7 . 85C0 TEST EAX,EAX
|
||||||
@ -585,6 +716,8 @@ void Install_Commands()
|
|||||||
//6FB20AE9 |. 85C0 TEST EAX,EAX
|
//6FB20AE9 |. 85C0 TEST EAX,EAX
|
||||||
//6FB61FD6 |. 83C4 08 ADD ESP,8
|
//6FB61FD6 |. 83C4 08 ADD ESP,8
|
||||||
//6FB61FD9 |. 85C0 TEST EAX,EAX
|
//6FB61FD9 |. 85C0 TEST EAX,EAX
|
||||||
|
//0047C548 |. 83C4 08 ADD ESP,8
|
||||||
|
//0047C54B |. 85C0 TEST EAX,EAX
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Common functions.
|
Common functions.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*================================================
|
/*================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
This file implements some common and useful
|
This file implements some common and useful
|
||||||
function related to some Diablo II mechanisms.
|
function related to some Diablo II mechanisms.
|
||||||
@ -50,43 +50,46 @@ D2S(D2Common,10598, ItemStatCostBIN*, D2Common10598, (DWORD itemStatCostID));//O
|
|||||||
D2S(D2Common,10673, ItemTypesBIN*, D2Common10673, (DWORD itemTypesID));//ONLY in 1.09
|
D2S(D2Common,10673, ItemTypesBIN*, D2Common10673, (DWORD itemTypesID));//ONLY in 1.09
|
||||||
#undef D2S
|
#undef D2S
|
||||||
|
|
||||||
//TD2SetPlayerStat V2SetPlayerStat;
|
//TD2SetPlayerStat V2SetPlayerStat;
|
||||||
TD2AddPlayerStat V2AddPlayerStat;
|
TD2AddPlayerStat V2AddPlayerStat;
|
||||||
TD2GetPlayerStat V2GetPlayerStat;
|
TD2GetPlayerStat V2GetPlayerStat;
|
||||||
//TD2GetPlayerStat20 V2GetPlayerStat20;
|
//TD2GetPlayerStat20 V2GetPlayerStat20;
|
||||||
TD2GetPlayerBaseStat V2GetPlayerBaseStat;
|
TD2GetPlayerBaseStat V2GetPlayerBaseStat;
|
||||||
TD2SetSkillBaseLevel V2SetSkillBaseLevel;
|
TD2SetSkillBaseLevel V2SetSkillBaseLevel;
|
||||||
TD2SetSkillBaseLevelOnClient V2SetSkillBaseLevelOnClient;
|
TD2SetSkillBaseLevelOnClient V2SetSkillBaseLevelOnClient;
|
||||||
TD2PrintStat V2PrintStat;
|
TD2PrintStat V2PrintStat;
|
||||||
TD2CompileCubeInput V2CompileCubeInput;
|
TD2CompileCubeInput V2CompileCubeInput;
|
||||||
TD2CompileCubeOutput V2CompileCubeOutput;
|
//TD2CompileCubeOutput V2CompileCubeOutput;
|
||||||
TD2BroadcastFunction V2BroadcastFunction;
|
TD2BroadcastFunction V2BroadcastFunction;
|
||||||
TD2GetGameByClientID V2GetGameByClientID;
|
TD2GetGameByClientID V2GetGameByClientID;
|
||||||
TD2SpawnMonster V2SpawnMonster;
|
TD2SpawnSuperUnique V2SpawnSuperUnique;
|
||||||
TD2VerifIfNotCarry1 V2VerifIfNotCarry1;
|
TD2SpawnMonster V2SpawnMonster;
|
||||||
TD2GameGetObject V2GameGetObject;
|
TD2VerifIfNotCarry1 V2VerifIfNotCarry1;
|
||||||
TD2TestPositionInRoom V2TestPositionInRoom;
|
TD2GameGetObject V2GameGetObject;
|
||||||
TD2GetItemTypesBIN V2GetItemTypesBIN;
|
TD2TestPositionInRoom V2TestPositionInRoom;
|
||||||
TD2CompileTxtFile compileTxtFile;
|
TD2GetItemTypesBIN V2GetItemTypesBIN;
|
||||||
|
TD2CompileTxtFile compileTxtFile;
|
||||||
WORD (*getDescStrPos) (DWORD statID);
|
WORD (*getDescStrPos) (DWORD statID);
|
||||||
//void (*setImage) (sDrawImageInfo* data, void* image);
|
//void (*setImage) (sDrawImageInfo* data, void* image);
|
||||||
//void (*setFrame) (sDrawImageInfo* data, DWORD frame);
|
//void (*setFrame) (sDrawImageInfo* data, DWORD frame);
|
||||||
TD2SendMsgToAll V2SendMsgToAll;
|
TD2SendMsgToAll V2SendMsgToAll;
|
||||||
TD2SetColorPopup V2SetColorPopup;
|
TD2SetColorPopup V2SetColorPopup;
|
||||||
TD2LoadImage V2LoadImage;
|
TD2LoadImage V2LoadImage;
|
||||||
TD2PlaySound V2PlaySound;
|
TD2PlaySound V2PlaySound;
|
||||||
TD2SendToServer V2SendToServer;
|
TD2SendToServer V2SendToServer;
|
||||||
TD2GetCharStatsBIN V2GetCharStatsBIN;
|
TD2GetCharStatsBIN V2GetCharStatsBIN;
|
||||||
TD2GetItemStatCostBIN V2GetItemStatCostBIN;
|
TD2GetItemStatCostBIN V2GetItemStatCostBIN;
|
||||||
TD2SendPacket V2SendPacket;
|
TD2SendPacket V2SendPacket;
|
||||||
TD2LoadInventory V2LoadInventory;
|
TD2LoadInventory V2LoadInventory;
|
||||||
TD2SaveGame V2SaveGame;
|
TD2SaveGame V2SaveGame;
|
||||||
TD2LinkPortal V2LinkPortal;
|
TD2MonsterUseSkill V2MonsterUseSkill;
|
||||||
TD2Game235C0 V2Game235C0;
|
TD2LinkPortal V2LinkPortal;
|
||||||
|
TD2Game235C0 V2Game235C0;
|
||||||
|
TD2ReadFile V2ReadFile;
|
||||||
|
|
||||||
//DWORD* ptNbStatDesc
|
//DWORD* ptNbStatDesc
|
||||||
//DWORD* ptStatDescTable;
|
//DWORD* ptStatDescTable;
|
||||||
//TD2OpenNPCMenu V2OpenNPCMenu;
|
//TD2OpenNPCMenu V2OpenNPCMenu;
|
||||||
|
|
||||||
DWORD getStatDescIDFrom (DWORD statID)//FOR 1.09
|
DWORD getStatDescIDFrom (DWORD statID)//FOR 1.09
|
||||||
{
|
{
|
||||||
@ -231,7 +234,7 @@ __declspec(naked) void* STDCALL compileTxtFile_9(DWORD unused, const char* filen
|
|||||||
PUSH EDX
|
PUSH EDX
|
||||||
MOV ECX,DWORD PTR SS:[ESP+0x230]
|
MOV ECX,DWORD PTR SS:[ESP+0x230]
|
||||||
LEA EDX,DWORD PTR SS:[ESP+0x28]
|
LEA EDX,DWORD PTR SS:[ESP+0x28]
|
||||||
CALL D2ReadFile
|
CALL V2ReadFile
|
||||||
TEST EAX,EAX
|
TEST EAX,EAX
|
||||||
JNZ continue_compileTxtFile
|
JNZ continue_compileTxtFile
|
||||||
PUSH 0
|
PUSH 0
|
||||||
@ -270,7 +273,7 @@ __declspec(naked) void* STDCALL compileTxtFile_10(DWORD unused, const char* file
|
|||||||
PUSH EDX
|
PUSH EDX
|
||||||
MOV ECX,DWORD PTR SS:[ESP+0x230]
|
MOV ECX,DWORD PTR SS:[ESP+0x230]
|
||||||
LEA EDX,DWORD PTR SS:[ESP+0x28]
|
LEA EDX,DWORD PTR SS:[ESP+0x28]
|
||||||
CALL D2ReadFile
|
CALL V2ReadFile
|
||||||
TEST EAX,EAX
|
TEST EAX,EAX
|
||||||
JNZ continue_compileTxtFile
|
JNZ continue_compileTxtFile
|
||||||
PUSH 0
|
PUSH 0
|
||||||
@ -285,44 +288,108 @@ continue_compileTxtFile:
|
|||||||
JMP ECX
|
JMP ECX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
__declspec(naked) void* STDCALL compileTxtFile_114(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength) {
|
|
||||||
_asm {
|
|
||||||
SUB ESP, 0x20C
|
|
||||||
// MOV EAX,DWORD PTR DS:[6FDF1464]
|
|
||||||
PUSH EBX
|
|
||||||
PUSH EBP
|
|
||||||
PUSH ESI
|
|
||||||
PUSH EDI
|
|
||||||
MOV DWORD PTR SS : [ESP + 0x10], 0
|
|
||||||
MOV EBX, DWORD PTR SS : [ESP + 0x224]
|
|
||||||
|
|
||||||
PUSH EBX
|
DWORD compileTxtFile114_1;
|
||||||
LEA EAX, DWORD PTR SS : [ESP + 0x1A]
|
DWORD compileTxtFile114_2;
|
||||||
PUSH EAX
|
DWORD compileTxtFile114_3;
|
||||||
CALL DWORD PTR SS : [wsprintf]
|
DWORD compileTxtFile114_5;
|
||||||
MOV EDX, DWORD PTR SS : [ESP + 0x228]
|
DWORD compileTxtFile114_6;
|
||||||
ADD ESP, 8
|
DWORD compileTxtFile114_7;
|
||||||
LEA EDX, DWORD PTR SS : [ESP + 0xE]
|
__declspec(naked) void* STDCALL compileTxtFile_114(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength)
|
||||||
PUSH EDX
|
{_asm{
|
||||||
PUSH EAX
|
PUSH EBP
|
||||||
LEA EDX, DWORD PTR SS : [ESP + 0x20]
|
MOV EBP,ESP
|
||||||
CALL D2ReadFile
|
SUB ESP,0x11C
|
||||||
TEST EAX, EAX
|
PUSH EBX
|
||||||
JNZ continue_compileTxtFile
|
PUSH ESI
|
||||||
PUSH __LINE__
|
PUSH EDI
|
||||||
CALL D2GetInstructionPointer
|
|
||||||
PUSH EAX
|
MOV EAX,DWORD PTR SS:[EBP+0x10]
|
||||||
PUSH S_errorReadTxtFile
|
MOV ECX,DWORD PTR SS:[EBP+0x14]
|
||||||
CALL D2FogAssert
|
PUSH EBX
|
||||||
ADD ESP, 0xC
|
PUSH ESI
|
||||||
PUSH - 1
|
MOV ESI,DWORD PTR SS:[EBP+0x8]
|
||||||
CALL exit
|
PUSH EDI
|
||||||
continue_compileTxtFile :
|
MOV EDI,DWORD PTR SS:[EBP+0xC]
|
||||||
MOV ECX, D2CompileTxtFile
|
MOV DWORD PTR SS:[EBP-0x11C],ESI
|
||||||
ADD ECX, 0x1EC
|
MOV DWORD PTR SS:[EBP-0x10C],EDI
|
||||||
JMP ECX
|
MOV DWORD PTR SS:[EBP-0x110],EAX
|
||||||
}
|
MOV DWORD PTR SS:[EBP-0x118],ECX
|
||||||
}
|
MOV DWORD PTR SS:[EBP-0x108],0
|
||||||
|
|
||||||
|
PUSH __LINE__
|
||||||
|
PUSH S_compileTxtFile
|
||||||
|
LEA EAX,DWORD PTR SS:[EBP-0x108]
|
||||||
|
PUSH EAX
|
||||||
|
MOV ECX,unused
|
||||||
|
MOV EDX,filename
|
||||||
|
CALL V2ReadFile
|
||||||
|
TEST EAX,EAX
|
||||||
|
JNZ continue_compileTxtFile
|
||||||
|
PUSH __LINE__
|
||||||
|
CALL D2GetInstructionPointer
|
||||||
|
PUSH EAX
|
||||||
|
PUSH S_errorReadTxtFile
|
||||||
|
CALL D2FogAssert
|
||||||
|
ADD ESP,0xC
|
||||||
|
PUSH -1
|
||||||
|
CALL exit
|
||||||
|
continue_compileTxtFile:
|
||||||
|
// EAX : file
|
||||||
|
// ECX : -
|
||||||
|
// EDX : -
|
||||||
|
// EBX : -
|
||||||
|
// MOV ESI,DWORD PTR SS:[EBP+8]
|
||||||
|
// MOV EDI,DWORD PTR SS:[EBP+C]
|
||||||
|
MOV ESI,DWORD PTR SS:[EBP+0xC]
|
||||||
|
|
||||||
|
MOV ECX,DWORD PTR SS:[EBP-0x108]
|
||||||
|
PUSH ECX ; /Arg2
|
||||||
|
PUSH EAX ; |Arg1
|
||||||
|
CALL compileTxtFile114_1 ; \Game.006BD640
|
||||||
|
MOV EDI,EAX
|
||||||
|
PUSH EDI ; /Arg1
|
||||||
|
CALL compileTxtFile114_2 ; \Game.006BCDE0
|
||||||
|
MOV EBX,EAX
|
||||||
|
MOV ESI,EBX
|
||||||
|
IMUL ESI,DWORD PTR SS:[EBP+0x18]
|
||||||
|
PUSH 0 ; /Arg3 = 00000000
|
||||||
|
PUSH 0x904 ; |Arg2 = 00000904
|
||||||
|
PUSH compileTxtFile114_3 ; |Arg1 = 006E6370 ASCII ".\DATATBLS\DataTbls.cpp"
|
||||||
|
MOV EDX,ESI ; |
|
||||||
|
XOR ECX,ECX ; |
|
||||||
|
CALL D2AllocMem ; \Game.0040B430
|
||||||
|
PUSH ESI
|
||||||
|
PUSH 0
|
||||||
|
PUSH EAX
|
||||||
|
MOV DWORD PTR SS:[EBP-0x10C],EAX
|
||||||
|
CALL compileTxtFile114_5
|
||||||
|
MOV EDX,DWORD PTR SS:[EBP+0x18]
|
||||||
|
MOV EAX,DWORD PTR SS:[EBP-0x10C]
|
||||||
|
MOV ECX,DWORD PTR SS:[EBP-0x110]
|
||||||
|
ADD ESP,0xC
|
||||||
|
PUSH EDX
|
||||||
|
PUSH EBX
|
||||||
|
PUSH EAX
|
||||||
|
PUSH ECX
|
||||||
|
PUSH EDI
|
||||||
|
CALL compileTxtFile114_6
|
||||||
|
PUSH EDI ; /Arg1
|
||||||
|
CALL compileTxtFile114_7 ; \Game.006BCDA0
|
||||||
|
|
||||||
|
MOV EAX, DWORD PTR SS:[EBP-0x10C]
|
||||||
|
MOV ECX,DWORD PTR SS:[EBP-0x118]
|
||||||
|
TEST ECX,ECX
|
||||||
|
JE fin
|
||||||
|
MOV DWORD PTR DS:[ECX],EBX
|
||||||
|
fin:
|
||||||
|
POP EDI
|
||||||
|
POP ESI
|
||||||
|
POP EBX
|
||||||
|
MOV ESP,EBP
|
||||||
|
POP EBP
|
||||||
|
RETN 0x14
|
||||||
|
}}
|
||||||
|
|
||||||
__declspec(naked) void* STDCALL compileTxtFile_111(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength)
|
__declspec(naked) void* STDCALL compileTxtFile_111(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength)
|
||||||
{_asm{
|
{_asm{
|
||||||
@ -345,7 +412,7 @@ __declspec(naked) void* STDCALL compileTxtFile_111(DWORD unused, const char* fil
|
|||||||
PUSH EDX
|
PUSH EDX
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
LEA EAX,DWORD PTR SS:[ESP+0x20]
|
LEA EAX,DWORD PTR SS:[ESP+0x20]
|
||||||
CALL D2ReadFile
|
CALL V2ReadFile
|
||||||
TEST EAX,EAX
|
TEST EAX,EAX
|
||||||
JNZ continue_compileTxtFile
|
JNZ continue_compileTxtFile
|
||||||
PUSH __LINE__
|
PUSH __LINE__
|
||||||
@ -372,14 +439,6 @@ Unit* STDCALL D2GetClientPlayer_111(){return ptClientChar;}
|
|||||||
DWORD *StatMouse1, *StatMouse2, *StatMouse3, *StatMouse4;
|
DWORD *StatMouse1, *StatMouse2, *StatMouse3, *StatMouse4;
|
||||||
void FASTCALL D2CleanStatMouseUp_111(){*StatMouse1=*StatMouse2=*StatMouse3=*StatMouse4=0;}
|
void FASTCALL D2CleanStatMouseUp_111(){*StatMouse1=*StatMouse2=*StatMouse3=*StatMouse4=0;}
|
||||||
|
|
||||||
FCT_ASM ( D2CleanStatMouseUp_114 )
|
|
||||||
MOV DWORD PTR DS : [StatMouse1], 0
|
|
||||||
MOV DWORD PTR DS : [StatMouse2], 0
|
|
||||||
MOV DWORD PTR DS : [StatMouse3], 0
|
|
||||||
MOV DWORD PTR DS : [StatMouse4], 0
|
|
||||||
RETN
|
|
||||||
}}
|
|
||||||
|
|
||||||
Unit* STDCALL D2GetRealItem_111(Unit* ptItem){return ptItem;}
|
Unit* STDCALL D2GetRealItem_111(Unit* ptItem){return ptItem;}
|
||||||
/* 1.11 : sizememory : 0x104 (LoadBuySell)
|
/* 1.11 : sizememory : 0x104 (LoadBuySell)
|
||||||
6FADA7F0 |. A1 48BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD48]
|
6FADA7F0 |. A1 48BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD48]
|
||||||
@ -422,14 +481,6 @@ FCT_ASM ( D2LoadImage_111 )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2LoadImage_114 )
|
|
||||||
PUSH EDX
|
|
||||||
MOV EAX, ECX
|
|
||||||
CALL V2LoadImage
|
|
||||||
POP EDX
|
|
||||||
RETN
|
|
||||||
}}
|
|
||||||
|
|
||||||
const char* D2FreeImage_FILE = __FILE__;
|
const char* D2FreeImage_FILE = __FILE__;
|
||||||
FCT_ASM ( D2FreeImage_111 )
|
FCT_ASM ( D2FreeImage_111 )
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
@ -468,20 +519,6 @@ FCT_ASM ( D2GetClient_111 )
|
|||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2SetSkillBaseLevelOnClient_114 )
|
|
||||||
PUSH EBX
|
|
||||||
PUSH EDX
|
|
||||||
PUSH ESI
|
|
||||||
PUSH DWORD PTR SS : [ESP + 0x14]
|
|
||||||
PUSH DWORD PTR SS : [ESP + 0x14]
|
|
||||||
MOV EBX, DWORD PTR SS : [ESP + 0x14]
|
|
||||||
MOV EAX, ECX
|
|
||||||
MOV ESI, EDX
|
|
||||||
CALL V2SetSkillBaseLevelOnClient
|
|
||||||
POP ESI
|
|
||||||
POP EBX
|
|
||||||
RETN 0xC
|
|
||||||
}}
|
|
||||||
|
|
||||||
FCT_ASM ( D2SetSkillBaseLevelOnClient_111 )
|
FCT_ASM ( D2SetSkillBaseLevelOnClient_111 )
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
@ -508,21 +545,19 @@ FCT_ASM ( D2GetItemStatCostBIN_111 )
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2SendToServer3_114 )
|
FCT_ASM( D2SendToServer3_114 )
|
||||||
PUSH EDI
|
PUSH EDI
|
||||||
PUSH ESI
|
PUSH EBX
|
||||||
PUSH EBX
|
PUSH ECX
|
||||||
PUSH ECX
|
MOV BYTE PTR SS:[ESP],CL
|
||||||
MOV BYTE PTR SS : [ESP], CL
|
MOV WORD PTR SS:[ESP+1],DX
|
||||||
MOV WORD PTR SS : [ESP + 1], DX
|
MOV EDI,3
|
||||||
MOV EDI, 3
|
LEA EDX,DWORD PTR SS:[ESP]
|
||||||
LEA ECX, DWORD PTR SS : [ESP]
|
PUSH EDX
|
||||||
PUSH ECX
|
CALL D2SendToServerXX
|
||||||
CALL D2SendToServerXX
|
POP ECX
|
||||||
POP ECX
|
POP EBX
|
||||||
POP EBX
|
POP EDI
|
||||||
POP ESI
|
RETN
|
||||||
POP EDI
|
|
||||||
RETN
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( D2SendToServer3_111 )
|
FCT_ASM ( D2SendToServer3_111 )
|
||||||
@ -539,21 +574,17 @@ FCT_ASM ( D2SendToServer3_111 )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2PrintStat_114 )
|
FCT_ASM ( D2PrintStat_114 )
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
PUSH EBX
|
MOV ESI,DWORD PTR SS:[ESP+0x14]
|
||||||
PUSH ECX
|
PUSH DWORD PTR SS:[ESP+0x10]
|
||||||
MOV ESI, DWORD PTR SS : [ESP + 0x1C]
|
PUSH DWORD PTR SS:[ESP+0x10]
|
||||||
PUSH DWORD PTR SS : [ESP + 0x18]
|
PUSH DWORD PTR SS:[ESP+0x10]
|
||||||
PUSH DWORD PTR SS : [ESP + 0x18]
|
PUSH EDX
|
||||||
PUSH DWORD PTR SS : [ESP + 0x18]
|
PUSH ECX
|
||||||
PUSH EDX
|
CALL V2PrintStat
|
||||||
PUSH ECX
|
|
||||||
CALL V2PrintStat
|
|
||||||
POP ECX
|
|
||||||
POP EBX
|
|
||||||
POP ESI
|
POP ESI
|
||||||
RETN 0x10
|
RETN 0x10
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( D2PrintStat_111 )
|
FCT_ASM ( D2PrintStat_111 )
|
||||||
@ -569,14 +600,14 @@ FCT_ASM ( D2PrintStat_111 )
|
|||||||
RETN 0x10
|
RETN 0x10
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM(D2SendPacket_114)
|
FCT_ASM ( D2SendPacket_114 )
|
||||||
PUSH EDI
|
PUSH EDI
|
||||||
PUSH DWORD PTR SS : [ESP + 8]
|
PUSH DWORD PTR SS:[ESP+8]
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
MOV EDI, ECX
|
MOV EDI,ECX
|
||||||
CALL V2SendPacket
|
CALL V2SendPacket
|
||||||
POP EDI
|
POP EDI
|
||||||
RETN 0x4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( D2SendPacket_111 )
|
FCT_ASM ( D2SendPacket_111 )
|
||||||
@ -602,22 +633,22 @@ FCT_ASM ( D2CompileCubeInput_111 )
|
|||||||
RETN 8
|
RETN 8
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2CompileCubeInput_114 )
|
FCT_ASM ( D2CompileCubeInput_114 )
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
MOV EAX, EDX
|
MOV EAX,EDX
|
||||||
CALL V2CompileCubeInput
|
CALL V2CompileCubeInput
|
||||||
RETN 8
|
|
||||||
}}
|
|
||||||
|
|
||||||
FCT_ASM ( D2CompileCubeOutput_111 )
|
|
||||||
PUSH EBX
|
|
||||||
MOV EBX,ECX
|
|
||||||
PUSH EDX
|
|
||||||
CALL V2CompileCubeOutput
|
|
||||||
POP EBX
|
|
||||||
RETN 8
|
RETN 8
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
//FCT_ASM ( D2CompileCubeOutput_111 )
|
||||||
|
// PUSH EBX
|
||||||
|
// MOV EBX,ECX
|
||||||
|
// PUSH EDX
|
||||||
|
// CALL V2CompileCubeOutput
|
||||||
|
// POP EBX
|
||||||
|
// RETN 8
|
||||||
|
//}}
|
||||||
|
|
||||||
FCT_ASM ( D2BroadcastFunction_111 )
|
FCT_ASM ( D2BroadcastFunction_111 )
|
||||||
PUSH EDI
|
PUSH EDI
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
@ -630,7 +661,7 @@ FCT_ASM ( D2BroadcastFunction_111 )
|
|||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( D2SpawnMonster_111 )
|
FCT_ASM ( D2SpawnSuperUnique_111 )
|
||||||
PUSH DWORD PTR SS:[ESP+0x18]
|
PUSH DWORD PTR SS:[ESP+0x18]
|
||||||
PUSH DWORD PTR SS:[ESP+0x14]
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
PUSH DWORD PTR SS:[ESP+0x14]
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
@ -638,11 +669,11 @@ FCT_ASM ( D2SpawnMonster_111 )
|
|||||||
PUSH ECX
|
PUSH ECX
|
||||||
MOV ECX,DWORD PTR SS:[ESP+0x18]
|
MOV ECX,DWORD PTR SS:[ESP+0x18]
|
||||||
MOV EAX,DWORD PTR SS:[ESP+0x28]
|
MOV EAX,DWORD PTR SS:[ESP+0x28]
|
||||||
CALL V2SpawnMonster
|
CALL V2SpawnSuperUnique
|
||||||
RETN 0x18
|
RETN 0x18
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( D2SpawnMonster_111b )
|
FCT_ASM ( D2SpawnSuperUnique_111b )
|
||||||
PUSH DWORD PTR SS:[ESP+0x10]
|
PUSH DWORD PTR SS:[ESP+0x10]
|
||||||
PUSH DWORD PTR SS:[ESP+0x10]
|
PUSH DWORD PTR SS:[ESP+0x10]
|
||||||
PUSH DWORD PTR SS:[ESP+0x10]
|
PUSH DWORD PTR SS:[ESP+0x10]
|
||||||
@ -651,24 +682,39 @@ FCT_ASM ( D2SpawnMonster_111b )
|
|||||||
MOV EAX,DWORD PTR SS:[ESP+0x18]
|
MOV EAX,DWORD PTR SS:[ESP+0x18]
|
||||||
MOV EDX,DWORD PTR SS:[ESP+0x2C]
|
MOV EDX,DWORD PTR SS:[ESP+0x2C]
|
||||||
MOV ECX,DWORD PTR SS:[ESP+0x28]//superuniqueID
|
MOV ECX,DWORD PTR SS:[ESP+0x28]//superuniqueID
|
||||||
CALL V2SpawnMonster
|
CALL V2SpawnSuperUnique
|
||||||
RETN 0x18
|
RETN 0x18
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2SpawnMonster_114 )
|
|
||||||
PUSH ECX
|
FCT_ASM( D2SpawnSuperUnique_114 )
|
||||||
MOV EBX, DWORD PTR SS : [ESP + 0x18]
|
PUSH EBX
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0x14]
|
PUSH EDI
|
||||||
MOV DWORD PTR SS : [ESP + 0x18], ECX
|
MOV EBX, DWORD PTR SS:[ESP+0x1C]
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0x10]
|
MOV EDI, ECX
|
||||||
MOV DWORD PTR SS : [ESP + 0x14], ECX
|
PUSH DWORD PTR SS:[ESP+0x20]
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0xC]
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
MOV DWORD PTR SS : [ESP + 0x10], ECX
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0x8]
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
MOV DWORD PTR SS : [ESP + 0xC], ECX
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
MOV DWORD PTR SS : [ESP + 0x8], EDX
|
PUSH EDX
|
||||||
POP ECX
|
CALL V2SpawnSuperUnique
|
||||||
JMP V2SpawnMonster
|
POP EDI
|
||||||
|
POP EBX
|
||||||
|
RETN 0x18
|
||||||
|
}}
|
||||||
|
|
||||||
|
FCT_ASM ( D2SpawnMonster_114 )
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x18]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x18]
|
||||||
|
PUSH EDX
|
||||||
|
PUSH ECX
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x20]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x20]
|
||||||
|
MOV EDX,DWORD PTR SS:[ESP+0x20]
|
||||||
|
MOV ECX,DWORD PTR SS:[ESP+0x1C]
|
||||||
|
CALL V2SpawnMonster
|
||||||
|
RETN 0x18
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( D2VerifIfNotCarry1_111 )
|
FCT_ASM ( D2VerifIfNotCarry1_111 )
|
||||||
@ -718,10 +764,6 @@ FCT_ASM ( D2SendToServer_1XX )
|
|||||||
RETN 0xC
|
RETN 0xC
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2GetGameByClientID_114 )
|
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0x4]
|
|
||||||
JMP V2GetGameByClientID
|
|
||||||
}}
|
|
||||||
|
|
||||||
FCT_ASM ( D2GetGameByClientID_1XX )
|
FCT_ASM ( D2GetGameByClientID_1XX )
|
||||||
POP EAX
|
POP EAX
|
||||||
@ -737,36 +779,63 @@ FCT_ASM ( D2SaveGame_1XX )
|
|||||||
JMP V2SaveGame
|
JMP V2SaveGame
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2SetColorPopup_114 )
|
FCT_ASM ( D2MonsterUseSkill_111 )
|
||||||
PUSH EDI
|
PUSH EBX
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
MOV EDI, ECX
|
MOV EBX,ECX
|
||||||
CALL V2SetColorPopup
|
MOV ECX,EDX
|
||||||
POP EDI
|
MOV EAX,DWORD PTR SS:[ESP+0xC]
|
||||||
RETN
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
|
CALL V2MonsterUseSkill
|
||||||
|
// Game sets monsters AiControl args[0] to 0 after this call
|
||||||
|
POP EDX
|
||||||
|
MOV EDX,DWORD PTR DS:[EDX+0x14]
|
||||||
|
MOV EDX,DWORD PTR DS:[EDX+0x28]
|
||||||
|
MOV DWORD PTR DS:[EDX+0x14],0
|
||||||
|
POP EBX
|
||||||
|
RETN 0x14
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM( D2LinkPortal_114 )
|
FCT_ASM( D2LinkPortal_114 )
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0x8]
|
MOV ECX,DWORD PTR SS:[ESP+0x8]
|
||||||
PUSH DWORD PTR SS : [ESP + 0x14]
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
PUSH DWORD PTR SS : [ESP + 0x14]
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
PUSH DWORD PTR SS : [ESP + 0x14]
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
CALL V2LinkPortal
|
CALL V2LinkPortal
|
||||||
POP ECX
|
POP ECX
|
||||||
RETN 0x10
|
RETN 0x10
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( D2Game235C0_114 )
|
FCT_ASM( D2Game235C0_114 )
|
||||||
PUSH ECX
|
POP EAX
|
||||||
PUSH EDX
|
POP ECX
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0xC]
|
POP EDX
|
||||||
MOV EDX, DWORD PTR SS : [ESP + 0x10]
|
PUSH EAX
|
||||||
POP EDX
|
JMP V2Game235C0
|
||||||
POP ECX
|
|
||||||
RETN 0x8
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
FCT_ASM( D2ReadFile_111 )
|
||||||
|
MOV EAX,EDX
|
||||||
|
PUSH DWORD PTR SS:[ESP+4]
|
||||||
|
PUSH ECX
|
||||||
|
CALL V2ReadFile
|
||||||
|
RETN 0xC
|
||||||
|
}}
|
||||||
|
|
||||||
|
/*FCT_ASM( D2SaveSPGame_111 )
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x8]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x8]
|
||||||
|
PUSH EDX
|
||||||
|
PUSH ECX
|
||||||
|
CALL V2SaveSPGame
|
||||||
|
RETN 8
|
||||||
|
}}*/
|
||||||
|
|
||||||
#define SETFCTADDR(F, I, N) setFctAddr((DWORD*)&N, (HMODULE)offset_##F, (LPCSTR)I)
|
#define SETFCTADDR(F, I, N) setFctAddr((DWORD*)&N, (HMODULE)offset_##F, (LPCSTR)I)
|
||||||
void setFctAddr(DWORD* addr, HMODULE module, LPCSTR index)
|
void setFctAddr(DWORD* addr, HMODULE module, LPCSTR index)
|
||||||
{
|
{
|
||||||
@ -790,14 +859,11 @@ void initD2functions()
|
|||||||
#define E2S(F, A, R, N, P) N = (T##N)(offset_##F + 0x##A);
|
#define E2S(F, A, R, N, P) N = (T##N)(offset_##F + 0x##A);
|
||||||
#define E2F(F, A, R, N, P) N = (T##N)(offset_##F + 0x##A);
|
#define E2F(F, A, R, N, P) N = (T##N)(offset_##F + 0x##A);
|
||||||
#define E2C(F, A, T, N) pt##N = (T*)(offset_##F + 0x##A);
|
#define E2C(F, A, T, N) pt##N = (T*)(offset_##F + 0x##A);
|
||||||
#define F8(X, Z, A,B,C,D,E,F,G,H,I, R, N, P) if (version_##Z == V114d) { E2S(Z, I, 0, N, 0) } else { setFctAddr((DWORD*)&N, (HMODULE)offset_##Z, (LPCSTR)(version_##Z == V113d? H : (version_##Z == V113c? G : (version_##Z == V112? F : (version_##Z == V111b? E : (version_##Z == V111? D : (version_##Z == V110? C : (version_##Z == V109d? B : A)))))))); }
|
#define F8(X, Z, A,B,C,D,E,F,G,H,I, R, N, P) if (version_##Z > V113d) { N = (T##N)R8(Z,A,B,C,D,E,F,G,H,I); } else setFctAddr((DWORD*)&N, (HMODULE)offset_##Z, (LPCSTR)(version_##Z == V113d? H : (version_##Z == V113c? G : (version_##Z == V112? F : (version_##Z == V111b? E : (version_##Z == V111? D : (version_##Z == V110? C : (version_##Z == V109d? B : A))))))));
|
||||||
#define A8(X, Z, A,B,C,D,E,F,G,H,I, R, N, P) N = (T##N)R8(Z,A,B,C,D,E,F,G,H,I);
|
#define A8(X, Z, A,B,C,D,E,F,G,H,I, R, N, P) N = (T##N)R8(Z,A,B,C,D,E,F,G,H,I);
|
||||||
#define C8(Z, A,B,C,D,E,F,G,H,I, T, N) pt##N = (T*)R8(Z,A,B,C,D,E,F,G,H,I);
|
#define C8(Z, A,B,C,D,E,F,G,H,I, T, N) pt##N = (T*)R8(Z,A,B,C,D,E,F,G,H,I);
|
||||||
|
|
||||||
#include "../Commons/D2Funcs.h"
|
#include "../Commons/D2Funcs.h"
|
||||||
//D2FogMemAlloc = (TD2FogMemAlloc)(offset_D2Game + 0xB380);
|
|
||||||
//E2S(D2Game, B380, 0, D2FogMemAlloc, 0)
|
|
||||||
//return;
|
|
||||||
SgptDataTables = *(DataTables**) R8(D2Common, 0000, 0000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C, A33F0, 344304);
|
SgptDataTables = *(DataTables**) R8(D2Common, 0000, 0000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C, A33F0, 344304);
|
||||||
if (version_D2Common < V110)
|
if (version_D2Common < V110)
|
||||||
{
|
{
|
||||||
@ -814,12 +880,17 @@ void initD2functions()
|
|||||||
#undef E2F
|
#undef E2F
|
||||||
#undef E2C
|
#undef E2C
|
||||||
|
|
||||||
|
|
||||||
//////////////// MISC FCT ////////////////
|
//////////////// MISC FCT ////////////////
|
||||||
//setImage = version_D2Common >= V111 ? setImage_111 : setImage_1XX;
|
//setImage = version_D2Common >= V111 ? setImage_111 : setImage_1XX;
|
||||||
//setFrame = version_D2Common >= V111 ? setFrame_111 : setFrame_1XX;
|
//setFrame = version_D2Common >= V111 ? setFrame_111 : setFrame_1XX;
|
||||||
getDescStrPos = version_D2Common >= V110 ? getDescStrPos_10 : getDescStrPos_9;
|
getDescStrPos = version_D2Common >= V110 ? getDescStrPos_10 : getDescStrPos_9;
|
||||||
compileTxtFile = version_D2Common == V114d ? compileTxtFile_114 : version_D2Common >= V111 ? compileTxtFile_111 : version_D2Common == V110 ? compileTxtFile_10 : compileTxtFile_9;
|
compileTxtFile114_1 = offset_D2Client + 0x002BD640;
|
||||||
|
compileTxtFile114_2 = offset_D2Client + 0x002BCDE0;
|
||||||
|
compileTxtFile114_3 = offset_D2Client + 0x002E6370;
|
||||||
|
compileTxtFile114_5 = offset_D2Client + 0x00281EF0;
|
||||||
|
compileTxtFile114_6 = offset_D2Client + 0x002BD780;
|
||||||
|
compileTxtFile114_7 = offset_D2Client + 0x002BCDA0;
|
||||||
|
compileTxtFile = version_D2Common >= V114a ? compileTxtFile_114 : version_D2Common >= V111 ? compileTxtFile_111 : version_D2Common == V110 ? compileTxtFile_10 : compileTxtFile_9;
|
||||||
|
|
||||||
|
|
||||||
//////////////// SELECT RIGHT ADDR FUNCTION ////////////////
|
//////////////// SELECT RIGHT ADDR FUNCTION ////////////////
|
||||||
@ -1013,7 +1084,7 @@ void initD2functions()
|
|||||||
//V3(D2LoadSuperuniques, TD2LoadSuperuniques, D2Common, 1F500, 1F510, 29FA0, 71EB0);
|
//V3(D2LoadSuperuniques, TD2LoadSuperuniques, D2Common, 1F500, 1F510, 29FA0, 71EB0);
|
||||||
//V3(D2GetItemStatCostBIN,TD2GetItemStatCostBIN, D2Common, 000, 000, 642B0, 13F0);
|
//V3(D2GetItemStatCostBIN,TD2GetItemStatCostBIN, D2Common, 000, 000, 642B0, 13F0);
|
||||||
//V3(D2GetItemTypesBIN, TD2GetItemTypesBIN, D2Common, 000, 000, 2B1A0, 11F0);
|
//V3(D2GetItemTypesBIN, TD2GetItemTypesBIN, D2Common, 000, 000, 2B1A0, 11F0);
|
||||||
//V3(D2SpawnMonster, TD2SpawnMonster, D2Game, 000, 000, 3F220, 4ABE0);
|
//V3(D2SpawnSuperUnique, TD2SpawnSuperUnique, D2Game, 000, 000, 3F220, 4ABE0);
|
||||||
//V3(D2ReloadGambleScreen,TD2ReloadGambleScreen, D2Game, 000, 000, 000, 8E480);
|
//V3(D2ReloadGambleScreen,TD2ReloadGambleScreen, D2Game, 000, 000, 000, 8E480);
|
||||||
//V3(D2SaveGame, TD2SaveGame, D2Game, 000, 000, 89C0, E2390);
|
//V3(D2SaveGame, TD2SaveGame, D2Game, 000, 000, 89C0, E2390);
|
||||||
//V3(D2ClickOnStashButton,TD2ClickOnStashButton, D2Client, 000, 000, 000, A6520);
|
//V3(D2ClickOnStashButton,TD2ClickOnStashButton, D2Client, 000, 000, 000, A6520);
|
||||||
@ -1022,12 +1093,12 @@ void initD2functions()
|
|||||||
//V3(D2Game235C0, TD2Game235C0, D2Game, 000, 000, 000, D6D10);
|
//V3(D2Game235C0, TD2Game235C0, D2Game, 000, 000, 000, D6D10);
|
||||||
//V3(D2OpenPandPortal, TD2OpenPandPortal, D2Game, 000, 000, 000, 9B480);
|
//V3(D2OpenPandPortal, TD2OpenPandPortal, D2Game, 000, 000, 000, 9B480);
|
||||||
//V3(D2OpenPandFinalPortal,TD2OpenPandFinalPortal,D2Game, 000, 000, 000, 9B470);
|
//V3(D2OpenPandFinalPortal,TD2OpenPandFinalPortal,D2Game, 000, 000, 000, 9B470);
|
||||||
//V3(D2MephIA, TD2MephIA, D2Game, 000, 000, 000, 84730);
|
//V3(D2MephAI, TD2MephAI, D2Game, 000, 000, 000, 84730);
|
||||||
//V3(D2DiabloIA, TD2DiabloIA, D2Game, 000, 000, 000, 75980);
|
//V3(D2DiabloAI, TD2DiabloAI, D2Game, 000, 000, 000, 75980);
|
||||||
//V3(D2BaalIA, TD2BaalIA, D2Game, 000, 000, 000, EAB20);
|
//V3(D2BaalAI, TD2BaalAI, D2Game, 000, 000, 000, EAB20);
|
||||||
//V3(D2UberMephIA, TD2UberMephIA, D2Game, 000, 000, 000, 70320);
|
//V3(D2UberMephAI, TD2UberMephAI, D2Game, 000, 000, 000, 70320);
|
||||||
//V3(D2UberDiabloIA, TD2UberDiabloIA, D2Game, 000, 000, 000, 7F200);
|
//V3(D2UberDiabloAI, TD2UberDiabloAI, D2Game, 000, 000, 000, 7F200);
|
||||||
//V3(D2UberBaalIA, TD2UberBaalIA, D2Game, 000, 000, 000, E92B0);
|
//V3(D2UberBaalAI, TD2UberBaalAI, D2Game, 000, 000, 000, E92B0);
|
||||||
|
|
||||||
//#undef V3
|
//#undef V3
|
||||||
|
|
||||||
@ -1049,46 +1120,42 @@ void initD2functions()
|
|||||||
V2SendPacket = D2SendPacket;
|
V2SendPacket = D2SendPacket;
|
||||||
V2LoadInventory = D2LoadInventory;
|
V2LoadInventory = D2LoadInventory;
|
||||||
V2CompileCubeInput = D2CompileCubeInput;
|
V2CompileCubeInput = D2CompileCubeInput;
|
||||||
V2CompileCubeOutput = D2CompileCubeOutput;
|
//V2CompileCubeOutput = D2CompileCubeOutput;
|
||||||
V2BroadcastFunction = D2BroadcastFunction;
|
V2BroadcastFunction = D2BroadcastFunction;
|
||||||
V2GetGameByClientID = D2GetGameByClientID;
|
V2GetGameByClientID = D2GetGameByClientID;
|
||||||
|
V2SpawnSuperUnique = D2SpawnSuperUnique;
|
||||||
V2SpawnMonster = D2SpawnMonster;
|
V2SpawnMonster = D2SpawnMonster;
|
||||||
V2VerifIfNotCarry1 = D2VerifIfNotCarry1;
|
V2VerifIfNotCarry1 = D2VerifIfNotCarry1;
|
||||||
V2GameGetObject = D2GameGetObject;
|
V2GameGetObject = D2GameGetObject;
|
||||||
V2TestPositionInRoom = D2TestPositionInRoom;
|
V2TestPositionInRoom = D2TestPositionInRoom;
|
||||||
V2GetItemTypesBIN = D2GetItemTypesBIN;
|
V2GetItemTypesBIN = D2GetItemTypesBIN;
|
||||||
V2SaveGame = D2SaveGame;
|
V2SaveGame = D2SaveGame;
|
||||||
|
V2MonsterUseSkill = D2MonsterUseSkill;
|
||||||
V2LinkPortal = D2LinkPortal;
|
V2LinkPortal = D2LinkPortal;
|
||||||
V2Game235C0 = D2Game235C0;
|
V2Game235C0 = D2Game235C0;
|
||||||
|
V2ReadFile = D2ReadFile;
|
||||||
//V2OpenNPCMenu = D2OpenNPCMenu;
|
//V2OpenNPCMenu = D2OpenNPCMenu;
|
||||||
//////////////// REDIRECT ON CUSTOM FUNCTIONS ////////////////
|
//////////////// REDIRECT ON CUSTOM FUNCTIONS ////////////////
|
||||||
|
|
||||||
if (version_D2Client == V114d) {
|
|
||||||
D2GetClientPlayer = D2GetClientPlayer_111;
|
|
||||||
D2GetClient = (TD2GetClient)D2GetClient_111;
|
|
||||||
D2LoadImage = (TD2LoadImage)D2LoadImage_114;
|
|
||||||
D2FreeImage = (TD2FreeImage)D2FreeImage_111;
|
|
||||||
D2isLODGame = D2isLODGame_111;
|
|
||||||
D2GetMouseX = D2GetMouseX_111;
|
|
||||||
D2GetMouseY = D2GetMouseY_111;
|
|
||||||
D2SendToServer3 = (TD2SendToServer3)D2SendToServer3_114;
|
|
||||||
D2SetSkillBaseLevelOnClient = (TD2SetSkillBaseLevelOnClient)D2SetSkillBaseLevelOnClient_114;
|
|
||||||
D2SendPacket = (TD2SendPacket)D2SendPacket_114;
|
|
||||||
D2GetGameByClientID = (TD2GetGameByClientID)D2GetGameByClientID_1XX;
|
|
||||||
D2SpawnMonster = (TD2SpawnMonster)D2SpawnMonster_114;
|
|
||||||
D2CompileCubeInput = (TD2CompileCubeInput)D2CompileCubeInput_114;
|
|
||||||
D2CleanStatMouseUp = (TD2CleanStatMouseUp)D2CleanStatMouseUp_114;
|
|
||||||
D2LinkPortal = (TD2LinkPortal)D2LinkPortal_114;
|
|
||||||
D2Game235C0 = (TD2Game235C0)D2Game235C0_114;
|
|
||||||
D2PrintStat = (TD2PrintStat)D2PrintStat_114;
|
|
||||||
D2SaveGame = (TD2SaveGame)D2SaveGame_1XX;
|
|
||||||
D2VerifIfNotCarry1 = (TD2VerifIfNotCarry1)D2VerifIfNotCarry1_111;
|
|
||||||
|
|
||||||
StatMouse1 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C004, 11C2F4, 11C040, 11C3DC, 11D224, A0650);
|
if (version_D2Client == V114d)
|
||||||
StatMouse2 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C008, 11C2F8, 11C044, 11C3E0, 11D228, A0654);
|
{
|
||||||
StatMouse3 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C020, 11C310, 11C05C, 11C3F8, 11D240, A0658);
|
D2SendToServer3 = (TD2SendToServer3) D2SendToServer3_114;
|
||||||
StatMouse4 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C024, 11C314, 11C060, 11C3FC, 11D244, A065C);
|
D2PrintStat = (TD2PrintStat)D2PrintStat_114;
|
||||||
} else if ( version_D2Client >= V111 ) {
|
D2SendPacket = (TD2SendPacket) D2SendPacket_114;
|
||||||
|
D2CompileCubeInput = (TD2CompileCubeInput) D2CompileCubeInput_114;
|
||||||
|
D2SpawnSuperUnique = (TD2SpawnSuperUnique) D2SpawnSuperUnique_114;
|
||||||
|
D2VerifIfNotCarry1 = (TD2VerifIfNotCarry1)D2VerifIfNotCarry1_111;
|
||||||
|
D2isLODGame = D2isLODGame_111;
|
||||||
|
D2GetMouseX = D2GetMouseX_111;
|
||||||
|
D2GetMouseY = D2GetMouseY_111;
|
||||||
|
D2SpawnMonster = (TD2SpawnMonster)D2SpawnMonster_114;
|
||||||
|
D2LinkPortal = (TD2LinkPortal)D2LinkPortal_114;
|
||||||
|
D2Game235C0 = (TD2Game235C0) D2Game235C0_114;
|
||||||
|
D2GetGameByClientID = (TD2GetGameByClientID) D2GetGameByClientID_1XX;
|
||||||
|
D2SaveGame = (TD2SaveGame) D2SaveGame_1XX;
|
||||||
|
}
|
||||||
|
else if ( version_D2Client >= V111 )
|
||||||
|
{
|
||||||
D2SendMsgToAll = (TD2SendMsgToAll) D2SendMsgToAll_111;
|
D2SendMsgToAll = (TD2SendMsgToAll) D2SendMsgToAll_111;
|
||||||
D2SetColorPopup = (TD2SetColorPopup) D2SetColorPopup_111;
|
D2SetColorPopup = (TD2SetColorPopup) D2SetColorPopup_111;
|
||||||
D2LoadImage = (TD2LoadImage) D2LoadImage_111;
|
D2LoadImage = (TD2LoadImage) D2LoadImage_111;
|
||||||
@ -1103,9 +1170,9 @@ void initD2functions()
|
|||||||
D2SendPacket = (TD2SendPacket) D2SendPacket_111;
|
D2SendPacket = (TD2SendPacket) D2SendPacket_111;
|
||||||
D2LoadInventory = (TD2LoadInventory) D2LoadInventory_111;
|
D2LoadInventory = (TD2LoadInventory) D2LoadInventory_111;
|
||||||
D2CompileCubeInput = (TD2CompileCubeInput) D2CompileCubeInput_111;
|
D2CompileCubeInput = (TD2CompileCubeInput) D2CompileCubeInput_111;
|
||||||
D2CompileCubeOutput = (TD2CompileCubeOutput) D2CompileCubeOutput_111;
|
//D2CompileCubeOutput = (TD2CompileCubeOutput) D2CompileCubeOutput_111;
|
||||||
D2BroadcastFunction = (TD2BroadcastFunction) D2BroadcastFunction_111;
|
D2BroadcastFunction = (TD2BroadcastFunction) D2BroadcastFunction_111;
|
||||||
D2SpawnMonster = version_D2Game >= V111b ? (TD2SpawnMonster)D2SpawnMonster_111b : (TD2SpawnMonster)D2SpawnMonster_111;
|
D2SpawnSuperUnique = version_D2Game >= V111b ? (TD2SpawnSuperUnique)D2SpawnSuperUnique_111b : (TD2SpawnSuperUnique)D2SpawnSuperUnique_111;
|
||||||
D2VerifIfNotCarry1 = (TD2VerifIfNotCarry1) D2VerifIfNotCarry1_111;
|
D2VerifIfNotCarry1 = (TD2VerifIfNotCarry1) D2VerifIfNotCarry1_111;
|
||||||
D2GameGetObject = (TD2GameGetObject) D2GameGetObject_111;
|
D2GameGetObject = (TD2GameGetObject) D2GameGetObject_111;
|
||||||
D2GetItemTypesBIN = (TD2GetItemTypesBIN) D2GetItemTypesBIN_111;
|
D2GetItemTypesBIN = (TD2GetItemTypesBIN) D2GetItemTypesBIN_111;
|
||||||
@ -1118,10 +1185,12 @@ void initD2functions()
|
|||||||
D2GetClientPlayer = D2GetClientPlayer_111;
|
D2GetClientPlayer = D2GetClientPlayer_111;
|
||||||
D2GetRealItem = D2GetRealItem_111;
|
D2GetRealItem = D2GetRealItem_111;
|
||||||
D2CleanStatMouseUp = D2CleanStatMouseUp_111;
|
D2CleanStatMouseUp = D2CleanStatMouseUp_111;
|
||||||
StatMouse1 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C004, 11C2F4, 11C040, 11C3DC, 11D224, A0650);
|
D2MonsterUseSkill = (TD2MonsterUseSkill)D2MonsterUseSkill_111;
|
||||||
StatMouse2 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C008, 11C2F8, 11C044, 11C3E0, 11D228, A0654);
|
D2ReadFile = (TD2ReadFile)D2ReadFile_111;
|
||||||
StatMouse3 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C020, 11C310, 11C05C, 11C3F8, 11D240, A0658);
|
StatMouse1 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C004, 11C2F4, 11C040, 11C3DC, 11D224, 3A0650);
|
||||||
StatMouse4 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C024, 11C314, 11C060, 11C3FC, 11D244, A065C);
|
StatMouse2 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C008, 11C2F8, 11C044, 11C3E0, 11D228, 3A0654);
|
||||||
|
StatMouse3 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C020, 11C310, 11C05C, 11C3F8, 11D240, 3A0658);
|
||||||
|
StatMouse4 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C024, 11C314, 11C060, 11C3FC, 11D244, 3A065C);
|
||||||
} else {
|
} else {
|
||||||
D2SendToServer = (TD2SendToServer) D2SendToServer_1XX;
|
D2SendToServer = (TD2SendToServer) D2SendToServer_1XX;
|
||||||
D2GetGameByClientID = (TD2GetGameByClientID) D2GetGameByClientID_1XX;
|
D2GetGameByClientID = (TD2GetGameByClientID) D2GetGameByClientID_1XX;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d and DoNotCloseNihlathakPortal by haxifix.
|
||||||
|
|
||||||
@file D2wrapper.cpp
|
@file D2wrapper.cpp
|
||||||
@brief Main Diablo II extra DLL handler.
|
@brief Main Diablo II extra DLL handler.
|
||||||
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
|
#include "plugYFiles.h" // Install_PlugYFiles()
|
||||||
#include "globalVariable.h" // Install_VariableOnRealm()
|
#include "globalVariable.h" // Install_VariableOnRealm()
|
||||||
#include "commands.h" // Install_Commands()
|
#include "commands.h" // Install_Commands()
|
||||||
#include "othersFeatures.h" // Install_ChangeResolution()
|
#include "othersFeatures.h" // Install_ChangeResolution()
|
||||||
@ -27,10 +28,10 @@
|
|||||||
#include "extraOptions.h" // Install_AlwaysRegenMapInSP()
|
#include "extraOptions.h" // Install_AlwaysRegenMapInSP()
|
||||||
#include "language.h" // Install_LanguageManagement()
|
#include "language.h" // Install_LanguageManagement()
|
||||||
#include "windowed.h" // installed with Install_PrintPlugYVersion()
|
#include "windowed.h" // installed with Install_PrintPlugYVersion()
|
||||||
|
#include "savePlayerData.h" // Install_SavePlayerData()
|
||||||
#include "customLibraries.h"
|
#include "customLibraries.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include "interface_Stash.h"
|
|
||||||
|
|
||||||
int version_Game = UNKNOWN;
|
int version_Game = UNKNOWN;
|
||||||
//int version_binkw32 = UNKNOWN;
|
//int version_binkw32 = UNKNOWN;
|
||||||
@ -175,21 +176,22 @@ void hookLibraries()
|
|||||||
{
|
{
|
||||||
log_msg("***** Unprotect Libraries *****\n");
|
log_msg("***** Unprotect Libraries *****\n");
|
||||||
|
|
||||||
if (version_Game == V114d) {
|
if (version_Game >= V114a)
|
||||||
hookLibrary(S_Game, offset_Game);
|
hookLibrary(S_Game, offset_Game);
|
||||||
} else {
|
else
|
||||||
hookLibrary(S_D2Client, offset_D2Client);
|
{
|
||||||
// hookLibrary(S_D2CMP, offset_D2CMP);
|
hookLibrary(S_D2Client, offset_D2Client);
|
||||||
hookLibrary(S_D2Common, offset_D2Common);
|
// hookLibrary(S_D2CMP, offset_D2CMP);
|
||||||
hookLibrary(S_D2Game, offset_D2Game);
|
hookLibrary(S_D2Common, offset_D2Common);
|
||||||
hookLibrary(S_D2gfx, offset_D2gfx);
|
hookLibrary(S_D2Game, offset_D2Game);
|
||||||
hookLibrary(S_D2Lang, offset_D2Lang);
|
hookLibrary(S_D2gfx, offset_D2gfx);
|
||||||
hookLibrary(S_D2Launch, offset_D2Launch);
|
hookLibrary(S_D2Lang, offset_D2Lang);
|
||||||
// hookLibrary(S_D2Net, offset_D2Net);
|
hookLibrary(S_D2Launch, offset_D2Launch);
|
||||||
// hookLibrary(S_D2Win, offset_D2Win);
|
// hookLibrary(S_D2Net, offset_D2Net);
|
||||||
hookLibrary(S_Fog, offset_Fog);
|
// hookLibrary(S_D2Win, offset_D2Win);
|
||||||
hookLibrary(S_Storm, offset_Storm);
|
hookLibrary(S_Fog, offset_Fog);
|
||||||
}
|
hookLibrary(S_Storm, offset_Storm);
|
||||||
|
}
|
||||||
|
|
||||||
log_msg("\n\n");
|
log_msg("\n\n");
|
||||||
}
|
}
|
||||||
@ -198,21 +200,22 @@ void unhookLibraries()
|
|||||||
{
|
{
|
||||||
log_msg("***** Reprotect Libraries *****\n");
|
log_msg("***** Reprotect Libraries *****\n");
|
||||||
|
|
||||||
if (version_Game == V114d) {
|
if (version_Game >= V114a)
|
||||||
unhookLibrary(S_Game, offset_Game);
|
unhookLibrary(S_Game, offset_Game);
|
||||||
} else {
|
else
|
||||||
unhookLibrary(S_D2Client, offset_D2Client);
|
{
|
||||||
// unhookLibrary(S_D2CMP, offset_D2CMP);
|
unhookLibrary(S_D2Client, offset_D2Client);
|
||||||
unhookLibrary(S_D2Common, offset_D2Common);
|
// unhookLibrary(S_D2CMP, offset_D2CMP);
|
||||||
unhookLibrary(S_D2Game, offset_D2Game);
|
unhookLibrary(S_D2Common, offset_D2Common);
|
||||||
unhookLibrary(S_D2gfx, offset_D2gfx);
|
unhookLibrary(S_D2Game, offset_D2Game);
|
||||||
unhookLibrary(S_D2Lang, offset_D2Lang);
|
unhookLibrary(S_D2gfx, offset_D2gfx);
|
||||||
unhookLibrary(S_D2Launch, offset_D2Launch);
|
unhookLibrary(S_D2Lang, offset_D2Lang);
|
||||||
// unhookLibrary(S_D2Net, offset_D2Net);
|
unhookLibrary(S_D2Launch, offset_D2Launch);
|
||||||
// unhookLibrary(S_D2Win, offset_D2Win);
|
// unhookLibrary(S_D2Net, offset_D2Net);
|
||||||
unhookLibrary(S_Fog, offset_Fog);
|
// unhookLibrary(S_D2Win, offset_D2Win);
|
||||||
unhookLibrary(S_Storm, offset_Storm);
|
unhookLibrary(S_Fog, offset_Fog);
|
||||||
}
|
unhookLibrary(S_Storm, offset_Storm);
|
||||||
|
}
|
||||||
|
|
||||||
log_msg("\n\n");
|
log_msg("\n\n");
|
||||||
}
|
}
|
||||||
@ -231,14 +234,7 @@ void freeCustomLibraries()
|
|||||||
dll->release();
|
dll->release();
|
||||||
freeLibrary(dll->offset);
|
freeLibrary(dll->offset);
|
||||||
nextDll = dll->nextDll;
|
nextDll = dll->nextDll;
|
||||||
if (version_D2Game == V114d)
|
delete(dll);
|
||||||
{
|
|
||||||
delete dll;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
D2FogMemDeAlloc(dll, __FILE__, __LINE__, 0);
|
|
||||||
}
|
|
||||||
dll = nextDll;
|
dll = nextDll;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,15 +266,15 @@ void loadCustomLibraries()
|
|||||||
log_msg("No custom libraries to load.\n");
|
log_msg("No custom libraries to load.\n");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
log_msg("Load custom libraries :\n");
|
|
||||||
while (curString)
|
while (curString)
|
||||||
{
|
{
|
||||||
if (curString[0])
|
if (curString[0])
|
||||||
{
|
{
|
||||||
|
log_msg("Load custom library : %s\n", curString);
|
||||||
offset_currentDll = (DWORD)LoadLibrary(curString);
|
offset_currentDll = (DWORD)LoadLibrary(curString);
|
||||||
if (!offset_currentDll)
|
if (!offset_currentDll)
|
||||||
{
|
{
|
||||||
log_msg("Load library %s failed:\n", curString);
|
log_msg("Load library %s failed !\n", curString);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
nextDll = customDlls;
|
nextDll = customDlls;
|
||||||
@ -289,8 +285,8 @@ void loadCustomLibraries()
|
|||||||
curString=strtok(NULL,"|");
|
curString=strtok(NULL,"|");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dllFilenames)
|
if(dllFilenames)
|
||||||
D2FogMemDeAlloc(dllFilenames, __FILE__, __LINE__, 0);
|
D2FogMemDeAlloc(dllFilenames,__FILE__,__LINE__,0);
|
||||||
|
|
||||||
log_msg("\n\n");
|
log_msg("\n\n");
|
||||||
}
|
}
|
||||||
@ -339,7 +335,7 @@ void initD2modules()
|
|||||||
|
|
||||||
if (version_Game >= V114a)
|
if (version_Game >= V114a)
|
||||||
{
|
{
|
||||||
// offset_Bnclient = offset_Game; version_Bnclient = version_Game;
|
// offset_Bnclient = offset_Game; version_Bnclient = version_Game;
|
||||||
offset_D2Client = offset_Game; version_D2Client = version_Game;
|
offset_D2Client = offset_Game; version_D2Client = version_Game;
|
||||||
offset_D2CMP = offset_Game; version_D2CMP = version_Game;
|
offset_D2CMP = offset_Game; version_D2CMP = version_Game;
|
||||||
offset_D2Common = offset_Game; version_D2Common = version_Game;
|
offset_D2Common = offset_Game; version_D2Common = version_Game;
|
||||||
@ -376,13 +372,13 @@ void initD2modules()
|
|||||||
GET_VERSION(D2Launch, 109A, 81E8526F, 01E8526F, 85E8526F, 247C8B00, 00FC6583, 15FF0424, E850E045); //0x20000 0x6FA10000 Already Loaded 0x1E000
|
GET_VERSION(D2Launch, 109A, 81E8526F, 01E8526F, 85E8526F, 247C8B00, 00FC6583, 15FF0424, E850E045); //0x20000 0x6FA10000 Already Loaded 0x1E000
|
||||||
// GET_VERSION(D2MCPClient 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //0x6000 0x6F9F0000 Already Loaded -
|
// GET_VERSION(D2MCPClient 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //0x6000 0x6F9F0000 Already Loaded -
|
||||||
// GET_VERSION(D2Multi 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //0x1000 0x6F9A0000 ?
|
// GET_VERSION(D2Multi 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //0x1000 0x6F9A0000 ?
|
||||||
GET_VERSION(D2Net, 16E1, 78B8A73C, 68B8A73C, 10244C8B, 5349E808, 5EA9E808, 105D8B72, 53B9E808); //0x6000 0x6FC00000 Already Loaded -
|
GET_VERSION(D2Net, 16E1, 78B8A73C, 68B8A73C, 10244C8B, 5349E808, 5EA9E808, 105D8B72, 53B9E808); //0x6000 0x6FC00000 Already Loaded -
|
||||||
// GET_VERSION(D2sound 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //0xC000 0x6F980000 Already Loaded 0xD000
|
// GET_VERSION(D2sound 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //0xC000 0x6F980000 Already Loaded 0xD000
|
||||||
GET_VERSION(D2Win, 1699, 88686F8C, 84686F8C, D094686F, F0030000, 001435E8, 8B088F44, 0013F5E8); //0x19000 0x6F8A0000 Already Loaded 0x1C000
|
GET_VERSION(D2Win, 1699, 88686F8C, 84686F8C, D094686F, F0030000, 001435E8, 8B088F44, 0013F5E8); //0x19000 0x6F8A0000 Already Loaded 0x1C000
|
||||||
GET_VERSION(Fog, 102, D0000006, 10000001, 00000006, 000042E6, 00004302, 0000483C, 00004B95); //0x20000 0x6FF50000 Already Loaded 0x1F000
|
GET_VERSION(Fog, 102, D0000006, 10000001, 00000006, 000042E6, 00004302, 0000483C, 00004B95); //0x20000 0x6FF50000 Already Loaded 0x1F000
|
||||||
GET_VERSION(Storm, 1190, 19E85082, 59E85082, 13C103F6, 0474F685, 8B000321, 3B1074C9, 0D896404); //0x30000 0x6FFB0000 Already Loaded -
|
GET_VERSION(Storm, 1190, 19E85082, 59E85082, 13C103F6, 0474F685, 8B000321, 3B1074C9, 0D896404); //0x30000 0x6FFB0000 Already Loaded -
|
||||||
if (version_Game == UNKNOWN)
|
if (version_Game == UNKNOWN)
|
||||||
version_Game = version_D2gfx;
|
version_Game = version_D2gfx;
|
||||||
}
|
}
|
||||||
// GET_VERSION(binkw32 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //
|
// GET_VERSION(binkw32 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //
|
||||||
// GET_VERSION(ijl11 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //0x24000 0x60000000 Already Loaded -
|
// GET_VERSION(ijl11 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); //0x24000 0x60000000 Already Loaded -
|
||||||
@ -395,10 +391,12 @@ void initD2modules()
|
|||||||
|
|
||||||
extern "C" __declspec(dllexport) bool __stdcall Release()
|
extern "C" __declspec(dllexport) bool __stdcall Release()
|
||||||
{
|
{
|
||||||
log_msg("\n***** ENDING DIABLO II *****\n\n" );
|
log_msg("\n***** FREE LIBRARIES *****\n\n" );
|
||||||
|
|
||||||
freeCustomLibraries();
|
freeCustomLibraries();
|
||||||
freeD2Libraries();
|
freeD2Libraries();
|
||||||
|
log_msg("***** END DIABLO II *****\n" );
|
||||||
|
log_close();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,7 +410,7 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
|||||||
|
|
||||||
initD2modules();
|
initD2modules();
|
||||||
|
|
||||||
if (version_Game < V109 || version_Game > V114d)
|
if (version_Game < V109 || version_Game > V113d && version_Game != V114d)
|
||||||
{
|
{
|
||||||
log_box("PlugY isn't compatible with this version : %s", GetVersionString(version_Game));
|
log_box("PlugY isn't compatible with this version : %s", GetVersionString(version_Game));
|
||||||
Release();
|
Release();
|
||||||
@ -431,6 +429,7 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
|||||||
|
|
||||||
log_msg("***** INSTALL FUNCTIONS *****\n");
|
log_msg("***** INSTALL FUNCTIONS *****\n");
|
||||||
|
|
||||||
|
Install_PlugYFiles();
|
||||||
Install_VariableOnRealm();
|
Install_VariableOnRealm();
|
||||||
|
|
||||||
if (active_Commands)
|
if (active_Commands)
|
||||||
@ -456,6 +455,9 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
|||||||
if (active_changingSavePath)
|
if (active_changingSavePath)
|
||||||
Install_ChangingSavePath();
|
Install_ChangingSavePath();
|
||||||
|
|
||||||
|
if (active_AutoBackup)
|
||||||
|
Install_SavePlayerData();
|
||||||
|
|
||||||
if (active_StatsShiftClickLimit)
|
if (active_StatsShiftClickLimit)
|
||||||
Install_StatsLimitShiftClick();
|
Install_StatsLimitShiftClick();
|
||||||
|
|
||||||
@ -507,8 +509,14 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
|||||||
if (active_EnabledCowPortalWhenCowKingWasKill)
|
if (active_EnabledCowPortalWhenCowKingWasKill)
|
||||||
Install_EnabledCowPortalWhenCowKingWasKill();
|
Install_EnabledCowPortalWhenCowKingWasKill();
|
||||||
|
|
||||||
if (active_DoNotCloseNihlathakPortal)
|
if (active_DoNotCloseNihlathakPortal)
|
||||||
Install_DoNotCloseNihlathakPortal();
|
Install_DoNotCloseNihlathakPortal();
|
||||||
|
|
||||||
|
if (active_MoveCainNearHarrogathWaypoint)
|
||||||
|
Install_MoveCainNearHarrogathWaypoint();
|
||||||
|
|
||||||
|
if (active_RemoveExperienceDiminushingReturn)
|
||||||
|
Install_RemoveExperienceDiminushingReturn();
|
||||||
|
|
||||||
log_msg("\nDLL patched sucessfully.\n\n\n");
|
log_msg("\nDLL patched sucessfully.\n\n\n");
|
||||||
|
|
||||||
@ -516,11 +524,13 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
|||||||
|
|
||||||
initCustomLibraries();
|
initCustomLibraries();
|
||||||
|
|
||||||
loadLocalizedStrings(D2GetLang());
|
//loadLocalizedStrings(D2GetLang());
|
||||||
|
|
||||||
log_msg("***** ENTERING DIABLO II *****\n\n" );
|
log_msg("***** ENTERING DIABLO II *****\n\n" );
|
||||||
|
|
||||||
active_logFile = active_logFile - 1;
|
active_logFile--;
|
||||||
|
if (active_logFile < 1)
|
||||||
|
log_close();
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Error Logger implementation.
|
Error Logger implementation.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
@ -13,29 +13,28 @@
|
|||||||
#include <string.h> // strlen() strcat()
|
#include <string.h> // strlen() strcat()
|
||||||
#include <direct.h> // _getcwd()
|
#include <direct.h> // _getcwd()
|
||||||
|
|
||||||
DWORD active_logFile = 1;
|
int active_logFile = 1;
|
||||||
|
|
||||||
static char log_file[MAX_PATH] = "";
|
static char log_file[MAX_PATH] = "";
|
||||||
static bool log_init = false;
|
static bool log_init = false;
|
||||||
|
static FILE* fLogFile = NULL;
|
||||||
|
|
||||||
void log_initfile()
|
void log_initfile()
|
||||||
{
|
{
|
||||||
if (log_init) return;
|
if (log_init) return;
|
||||||
|
|
||||||
_getcwd( log_file, MAX_PATH );
|
_getcwd( log_file, MAX_PATH );
|
||||||
if( log_file[strlen(log_file)] != '\\')
|
if( log_file[strlen(log_file)] != '\\')
|
||||||
strcat(log_file, "\\");
|
strcat(log_file, "\\");
|
||||||
strcat(log_file, "PlugY.log");
|
strcat(log_file, "PlugY.log");
|
||||||
|
|
||||||
FILE* lLog = fopen( log_file, "w" );
|
fLogFile = fopen( log_file, "w" );
|
||||||
|
|
||||||
if( lLog != NULL )
|
if( fLogFile == NULL )
|
||||||
{
|
return;
|
||||||
fclose(lLog);
|
|
||||||
log_init = true;
|
log_init = true;
|
||||||
}
|
|
||||||
|
|
||||||
log_msg("<----------------------------------------------->\n"
|
log_msg("<----------------------------------------------->\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\t\tA Plugin by Yohann\n"
|
"\t\tA Plugin by Yohann\n"
|
||||||
@ -46,6 +45,15 @@ void log_initfile()
|
|||||||
,PLUGY_VERSION);
|
,PLUGY_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void log_close()
|
||||||
|
{
|
||||||
|
if (fLogFile)
|
||||||
|
{
|
||||||
|
fclose(fLogFile);
|
||||||
|
fLogFile = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void log_box( const char* pFormat, ... )
|
void log_box( const char* pFormat, ... )
|
||||||
{
|
{
|
||||||
char buffer[300];
|
char buffer[300];
|
||||||
@ -61,7 +69,8 @@ void log_box( const char* pFormat, ... )
|
|||||||
|
|
||||||
void log_msg( const char* pFormat, ... )
|
void log_msg( const char* pFormat, ... )
|
||||||
{
|
{
|
||||||
if (!active_logFile) return;
|
if (!active_logFile)
|
||||||
|
return;
|
||||||
|
|
||||||
if( !log_init )
|
if( !log_init )
|
||||||
log_initfile();
|
log_initfile();
|
||||||
@ -71,13 +80,14 @@ void log_msg( const char* pFormat, ... )
|
|||||||
va_list lArgs;
|
va_list lArgs;
|
||||||
va_start( lArgs, pFormat );
|
va_start( lArgs, pFormat );
|
||||||
|
|
||||||
FILE *lDebug = fopen( log_file, "a" );
|
if ( fLogFile == NULL )
|
||||||
|
fLogFile = fopen( log_file, "a" );
|
||||||
|
|
||||||
if( lDebug != NULL )
|
if( fLogFile != NULL )
|
||||||
{
|
{
|
||||||
vfprintf( lDebug, pFormat, lArgs );
|
vfprintf( fLogFile, pFormat, lArgs );
|
||||||
fclose( lDebug );
|
fflush(fLogFile);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
log_init = false;
|
log_init = false;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Add an extra save file for each characters.
|
Add an extra save file for each characters.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
@ -17,7 +17,7 @@
|
|||||||
#define FILE_EXTENDED 0x4D545343 //"CSTM"
|
#define FILE_EXTENDED 0x4D545343 //"CSTM"
|
||||||
|
|
||||||
|
|
||||||
BYTE * readExtendedSaveFile(char* name, DWORD* size)//WORKS
|
BYTE * readExtendedSaveFile(char* name, DWORD* size)
|
||||||
{
|
{
|
||||||
char filename[512];
|
char filename[512];
|
||||||
BYTE* data;
|
BYTE* data;
|
||||||
@ -45,7 +45,7 @@ BYTE * readExtendedSaveFile(char* name, DWORD* size)//WORKS
|
|||||||
*size = 14;
|
*size = 14;
|
||||||
*((DWORD*)&data[0]) = FILE_EXTENDED; //"CSTM"
|
*((DWORD*)&data[0]) = FILE_EXTENDED; //"CSTM"
|
||||||
*((WORD *)&data[4]) = FILE_VERSION;
|
*((WORD *)&data[4]) = FILE_VERSION;
|
||||||
*((DWORD*)&data[6]) = nbPlayersCommandByDefault - 1;
|
*((DWORD*)&data[6]) = (BYTE)(nbPlayersCommandByDefault == 0 ? 0 : nbPlayersCommandByDefault - 1);
|
||||||
*((DWORD*)&data[10]) = 0;// number of stash
|
*((DWORD*)&data[10]) = 0;// number of stash
|
||||||
|
|
||||||
TCustomDll* currentDll = customDlls;
|
TCustomDll* currentDll = customDlls;
|
||||||
@ -59,7 +59,7 @@ BYTE * readExtendedSaveFile(char* name, DWORD* size)//WORKS
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int loadExtendedSaveFile(Unit* ptChar, BYTE data[], DWORD maxSize)//WORKS
|
int loadExtendedSaveFile(Unit* ptChar, BYTE data[], DWORD maxSize)
|
||||||
{
|
{
|
||||||
if (!ptChar || !PCPY || !data) return 0;
|
if (!ptChar || !PCPY || !data) return 0;
|
||||||
|
|
||||||
@ -99,7 +99,6 @@ int loadExtendedSaveFile(Unit* ptChar, BYTE data[], DWORD maxSize)//WORKS
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void writeExtendedSaveFile(char* name, BYTE* data, DWORD size)
|
void writeExtendedSaveFile(char* name, BYTE* data, DWORD size)
|
||||||
{
|
{
|
||||||
char szTempName[MAX_PATH];
|
char szTempName[MAX_PATH];
|
||||||
@ -122,28 +121,12 @@ void writeExtendedSaveFile(char* name, BYTE* data, DWORD size)
|
|||||||
strcat(szSaveName, ".d2x");
|
strcat(szSaveName, ".d2x");
|
||||||
log_msg("Extended file for saving : %s\n",szSaveName);
|
log_msg("Extended file for saving : %s\n",szSaveName);
|
||||||
|
|
||||||
// if (!MoveFileEx(szTempName, szSaveName, MOVEFILE_WRITE_THROUGH|MOVEFILE_REPLACE_EXISTING))
|
// if (!MoveFileEx(szTempName, szSaveName, MOVEFILE_WRITE_THROUGH|MOVEFILE_REPLACE_EXISTING))
|
||||||
DeleteFile(szSaveName);
|
DeleteFile(szSaveName);
|
||||||
if (!MoveFile(szTempName, szSaveName))
|
if (!MoveFile(szTempName, szSaveName))
|
||||||
log_box("Could not create the extended save file.");
|
log_box("Could not create the extended save file.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void backupExtendedSaveFile(char* name)
|
|
||||||
{
|
|
||||||
char szBackupName[MAX_PATH];
|
|
||||||
char szSaveName[MAX_PATH];
|
|
||||||
|
|
||||||
D2FogGetSavePath(szSaveName, MAX_PATH);
|
|
||||||
strcat(szSaveName, name);
|
|
||||||
strcat(szSaveName, ".d2x");
|
|
||||||
|
|
||||||
D2FogGetSavePath(szBackupName, MAX_PATH);
|
|
||||||
strcat(szBackupName, name);
|
|
||||||
strcat(szBackupName, ".d2x.backup");
|
|
||||||
|
|
||||||
CopyFile(szSaveName, szBackupName, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void saveExtendedSaveFile(Unit* ptChar, BYTE** data, DWORD* maxSize, DWORD* curSize)
|
void saveExtendedSaveFile(Unit* ptChar, BYTE** data, DWORD* maxSize, DWORD* curSize)
|
||||||
{
|
{
|
||||||
@ -151,7 +134,7 @@ void saveExtendedSaveFile(Unit* ptChar, BYTE** data, DWORD* maxSize, DWORD* curS
|
|||||||
*curSize += 4;
|
*curSize += 4;
|
||||||
*(WORD *)(*data + *curSize) = FILE_VERSION;
|
*(WORD *)(*data + *curSize) = FILE_VERSION;
|
||||||
*curSize += 2;
|
*curSize += 2;
|
||||||
*(DWORD *)(*data + *curSize) = (BYTE)(nbPlayersCommand - 1);
|
*(DWORD *)(*data + *curSize) = (BYTE)(nbPlayersCommand == 0 ? 0 : nbPlayersCommand - 1);
|
||||||
*curSize += 4;
|
*curSize += 4;
|
||||||
|
|
||||||
saveStashList(ptChar, PCPY->selfStash, data, maxSize, curSize);
|
saveStashList(ptChar, PCPY->selfStash, data, maxSize, curSize);
|
||||||
|
@ -1,27 +1,29 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d and DoNotCloseNihlathakPortal by haxifix.
|
||||||
|
|
||||||
More little options.
|
More little options.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "skillsPoints.h"
|
#include "infinityStash.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
int active_DisplayItemLevel = false;
|
bool active_DisplayItemLevel = false;
|
||||||
DWORD nbPlayersCommandByDefault = 0;
|
DWORD nbPlayersCommandByDefault = 0;
|
||||||
DWORD nbPlayersCommand = 0;
|
DWORD nbPlayersCommand = 0;
|
||||||
int active_alwaysRegenMapInSP = false;
|
bool active_alwaysRegenMapInSP = false;
|
||||||
int active_RunLODs = false;
|
bool active_RunLODs = false;
|
||||||
int active_AlwaysDisplayLifeMana = false;
|
int active_AlwaysDisplayLifeMana = 0;
|
||||||
int active_EnabledTXTFilesWithMSExcel = false;
|
bool active_EnabledTXTFilesWithMSExcel = false;
|
||||||
int active_DisplayBaseStatsValue = false;
|
bool active_DisplayBaseStatsValue = false;
|
||||||
int active_LadderRunewords = false;
|
bool active_LadderRunewords = false;
|
||||||
int active_EnabledCowPortalWhenCowKingWasKill = false;
|
bool active_EnabledCowPortalWhenCowKingWasKill = false;
|
||||||
int active_DoNotCloseNihlathakPortal = false;
|
bool active_DoNotCloseNihlathakPortal = false;
|
||||||
|
bool active_MoveCainNearHarrogathWaypoint = false;
|
||||||
|
bool active_RemoveExperienceDiminushingReturn = false;
|
||||||
|
|
||||||
/****************************************************************************************************/
|
/****************************************************************************************************/
|
||||||
|
|
||||||
@ -29,25 +31,23 @@ void STDCALL displayItemlevel(LPWSTR popup, Unit* ptItem)
|
|||||||
{
|
{
|
||||||
if (onRealm && (selectModParam==MOD_NO)) return;
|
if (onRealm && (selectModParam==MOD_NO)) return;
|
||||||
WCHAR text[0x50];
|
WCHAR text[0x50];
|
||||||
_snwprintf(text, sizeof(text), L"%s: %u\n", getLocalString(STR_ITEM_LEVEL), D2GetItemLevel(ptItem));
|
_snwprintf(text, 50, L"%s: %u\n", getLocalString(STR_ITEM_LEVEL), D2GetItemLevel(ptItem));
|
||||||
D2SetColorPopup(text,WHITE);
|
D2SetColorPopup(text,WHITE);
|
||||||
wcscat(popup,text);
|
wcscat(popup,text);
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_displayItemlevel_114 )
|
FCT_ASM ( caller_displayItemlevel_114 )
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
PUSH EDI
|
PUSH ECX
|
||||||
PUSH ECX
|
LEA EAX,DWORD PTR SS:[EBP-0x2434]
|
||||||
LEA EAX, DWORD PTR SS : [EBP - 0x2434]
|
PUSH EAX
|
||||||
PUSH EAX
|
CALL displayItemlevel
|
||||||
CALL displayItemlevel
|
POP EAX
|
||||||
POP EDI
|
POP ECX
|
||||||
POP EAX
|
POP EDX
|
||||||
POP ECX
|
PUSH 0x100
|
||||||
POP EDX
|
JMP EDX
|
||||||
PUSH 0x100
|
|
||||||
JMP EDX
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_displayItemlevel_113 )
|
FCT_ASM ( caller_displayItemlevel_113 )
|
||||||
@ -78,22 +78,19 @@ FCT_ASM ( caller_displayItemlevel_111 )
|
|||||||
JMP EAX
|
JMP EAX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_displayItemlevelSet_114 )
|
FCT_ASM ( caller_displayItemlevelSet_114 )
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
PUSH EAX
|
PUSH EDX
|
||||||
PUSH EDI
|
PUSH ECX
|
||||||
PUSH ECX
|
LEA EAX,DWORD PTR SS:[EBP-0x2138]
|
||||||
LEA EAX, DWORD PTR SS : [EBP - 0x2138]
|
PUSH EAX
|
||||||
PUSH EAX
|
CALL displayItemlevel
|
||||||
CALL displayItemlevel
|
POP EDX
|
||||||
POP EDI
|
POP ECX
|
||||||
POP EAX
|
POP EAX
|
||||||
POP ECX
|
PUSH 0x100
|
||||||
POP EDX
|
JMP EAX
|
||||||
PUSH 0x100
|
|
||||||
JMP EDX
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_displayItemlevelSet_111 )
|
FCT_ASM ( caller_displayItemlevelSet_111 )
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
@ -176,24 +173,26 @@ void Install_DisplayItemLevel()
|
|||||||
// print the text in the final buffer
|
// print the text in the final buffer
|
||||||
mem_seek R8(D2Client, 3D47C, 3D47C, 438A1, ADD0A, 789DA, AE0AA, 941C0, 98590, 8E983);
|
mem_seek R8(D2Client, 3D47C, 3D47C, 438A1, ADD0A, 789DA, AE0AA, 941C0, 98590, 8E983);
|
||||||
memt_byte( 0x68 , 0xE8);
|
memt_byte( 0x68 , 0xE8);
|
||||||
MEMT_REF4( 0x100, version_D2Client == V114d ? caller_displayItemlevel_114 : version_D2Client >= V113c ? caller_displayItemlevel_113 : version_D2Client >= V111 ? caller_displayItemlevel_111 : version_D2Client == V110 ? caller_displayItemlevel : caller_displayItemlevel_9);
|
MEMT_REF4( 0x100, version_D2Client >= V114d ? caller_displayItemlevel_114 : version_D2Client >= V113c ? caller_displayItemlevel_113 : version_D2Client >= V111 ? caller_displayItemlevel_111 : version_D2Client == V110 ? caller_displayItemlevel : caller_displayItemlevel_9);
|
||||||
//6FAE38A1 . 68 00010000 PUSH 100
|
//6FAE38A1 . 68 00010000 PUSH 100
|
||||||
//6FB5DD0A |. 68 00010000 PUSH 100
|
//6FB5DD0A |. 68 00010000 PUSH 100
|
||||||
//6FB289DA |. 68 00010000 PUSH 100
|
//6FB289DA |. 68 00010000 PUSH 100
|
||||||
//6FB5E0AA |. 68 00010000 PUSH 100
|
//6FB5E0AA |. 68 00010000 PUSH 100
|
||||||
//6FB441C0 |. 68 00010000 PUSH 100
|
//6FB441C0 |. 68 00010000 PUSH 100
|
||||||
//6FB48590 |. 68 00010000 PUSH 100
|
//6FB48590 |. 68 00010000 PUSH 100
|
||||||
|
//0048E983 |. 68 00010000 PUSH 100 ; /Arg1 = 00000100
|
||||||
|
|
||||||
// print the text in the final buffer (for set items)
|
// print the text in the final buffer (for set items)
|
||||||
mem_seek R8(D2Client, 3C452, 3C452, 427BE, AC773, 77773, ACEB3, 92FE3, 973B3, 8D774);
|
mem_seek R8(D2Client, 3C452, 3C452, 427BE, AC773, 77773, ACEB3, 92FE3, 973B3, 8D774);
|
||||||
memt_byte( 0x68 , 0xE8);
|
memt_byte( 0x68 , 0xE8);
|
||||||
MEMT_REF4( 0x100, version_D2Client == V114d ? caller_displayItemlevelSet_114 : version_D2Client >= V111 ? caller_displayItemlevelSet_111 : version_D2Client == V110 ? caller_displayItemlevelSet : caller_displayItemlevelSet_9);
|
MEMT_REF4( 0x100, version_D2Client >= V114d ? caller_displayItemlevelSet_114 : version_D2Client >= V111 ? caller_displayItemlevelSet_111 : version_D2Client == V110 ? caller_displayItemlevelSet : caller_displayItemlevelSet_9);
|
||||||
//6FAE27BE . 68 00010000 PUSH 100
|
//6FAE27BE . 68 00010000 PUSH 100
|
||||||
//6FB5C773 |. 68 00010000 PUSH 100
|
//6FB5C773 |. 68 00010000 PUSH 100
|
||||||
//6FB27773 |. 68 00010000 PUSH 100
|
//6FB27773 |. 68 00010000 PUSH 100
|
||||||
//6FB5CEB3 |. 68 00010000 PUSH 100
|
//6FB5CEB3 |. 68 00010000 PUSH 100
|
||||||
//6FB42FE3 |. 68 00010000 PUSH 100
|
//6FB42FE3 |. 68 00010000 PUSH 100
|
||||||
//6FB473B3 |. 68 00010000 PUSH 100
|
//6FB473B3 |. 68 00010000 PUSH 100
|
||||||
|
//0048D774 |. 68 00010000 PUSH 100 ; /Arg1 = 00000100
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
@ -206,6 +205,9 @@ char* msgNBPlayersString = "players %u";
|
|||||||
DWORD* infoEnabledSendPlayersCommand;
|
DWORD* infoEnabledSendPlayersCommand;
|
||||||
void SendPlayersCommand()
|
void SendPlayersCommand()
|
||||||
{
|
{
|
||||||
|
if (!needToInit || onRealm) return;
|
||||||
|
needToInit = false;
|
||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
struct {
|
struct {
|
||||||
BYTE displayType;//0x15 main msg; 0x14: char popup
|
BYTE displayType;//0x15 main msg; 0x14: char popup
|
||||||
@ -213,14 +215,20 @@ void SendPlayersCommand()
|
|||||||
BYTE zero;
|
BYTE zero;
|
||||||
char string[0xFF];
|
char string[0xFF];
|
||||||
char null;
|
char null;
|
||||||
|
char targetName[0x10];
|
||||||
|
char null2;
|
||||||
} data;
|
} data;
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
if (!needToInit || onRealm) return;
|
|
||||||
needToInit=0;
|
|
||||||
|
|
||||||
DWORD info = *infoEnabledSendPlayersCommand;
|
DWORD info = *infoEnabledSendPlayersCommand;
|
||||||
if ((info != 0) && (info != 1) && (info != 6) && (info != 8)) return;
|
if ((info != 0) && (info != 1) && (info != 6) && (info != 8)) return;
|
||||||
|
|
||||||
|
if (!active_multiPageStash)
|
||||||
|
nbPlayersCommand = nbPlayersCommandByDefault;
|
||||||
|
|
||||||
|
//if (nbPlayersCommand < 2)
|
||||||
|
// return;
|
||||||
|
|
||||||
log_msg("SendPlayersCommand %u\n", nbPlayersCommand);
|
log_msg("SendPlayersCommand %u\n", nbPlayersCommand);
|
||||||
|
|
||||||
D2SetNbPlayers(nbPlayersCommand);
|
D2SetNbPlayers(nbPlayersCommand);
|
||||||
@ -229,14 +237,21 @@ void SendPlayersCommand()
|
|||||||
data.displayType=0x15;
|
data.displayType=0x15;
|
||||||
data.un=1;
|
data.un=1;
|
||||||
data.zero=0;//*(BYTE*)(offset_D2Client+0x112CFC); in 1.10
|
data.zero=0;//*(BYTE*)(offset_D2Client+0x112CFC); in 1.10
|
||||||
data.null=NULL;
|
|
||||||
sprintf(data.string, msgNBPlayersString, nbPlayersCommand);
|
sprintf(data.string, msgNBPlayersString, nbPlayersCommand);
|
||||||
|
data.null=NULL;
|
||||||
D2SendMsgToAll((BYTE*)&data);
|
D2SendMsgToAll((BYTE*)&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//FCT_ASM ( caller_SendPlayersCommand_old )
|
||||||
|
// CALL SendPlayersCommand
|
||||||
|
// JMP D2GetResolution
|
||||||
|
//}}
|
||||||
|
|
||||||
FCT_ASM ( caller_SendPlayersCommand )
|
FCT_ASM ( caller_SendPlayersCommand )
|
||||||
|
PUSH ECX
|
||||||
CALL SendPlayersCommand
|
CALL SendPlayersCommand
|
||||||
JMP D2GetResolution
|
POP ECX
|
||||||
|
JMP D2PrintInterface
|
||||||
}}
|
}}
|
||||||
|
|
||||||
void Install_SendPlayersCommand()
|
void Install_SendPlayersCommand()
|
||||||
@ -247,17 +262,12 @@ void Install_SendPlayersCommand()
|
|||||||
log_msg("Patch D2Client for init default nb /players. (SendPlayersCommand)\n");
|
log_msg("Patch D2Client for init default nb /players. (SendPlayersCommand)\n");
|
||||||
|
|
||||||
infoEnabledSendPlayersCommand = (DWORD*)R8(D2Client, 111D60, 110BC0, 107960, 11BFBC, 11C2AC, 11BFF8, 11C394, 11D1DC, 3A0610);
|
infoEnabledSendPlayersCommand = (DWORD*)R8(D2Client, 111D60, 110BC0, 107960, 11BFBC, 11C2AC, 11BFF8, 11C394, 11D1DC, 3A0610);
|
||||||
if ( version_D2Client >= V110 )
|
if ( version_D2Client >= V110 )
|
||||||
msgNBPlayersString = (char*)R8(D2Client, 0000, 0000, D8448, D06A8, D4748, D4680, D4E00, D470C, 2D7374);
|
msgNBPlayersString = (char*)R8(D2Client, 0000, 0000, D8448, D06A8, D4748, D4680, D4E00, D470C, 2D7374);
|
||||||
|
|
||||||
// Set nb Player to default
|
// Set nb Player to default
|
||||||
mem_seek R8(D2Client, 8723B, 865BB, 81B8B, A3602, 66A02, 90162, C39F2, 1D3F2, 56EF9);//6FB1C7B7-6FAA0000
|
// mem_seek R8(D2Client, 8723B, 865BB, 81B8B, A3602, 66A02, 90162, C39F2, 1D3F2, 56EF9);//6FB1C7B7-6FAA0000
|
||||||
if (version_D2Client == V114d) {
|
// MEMJ_REF4( D2GetResolution, caller_SendPlayersCommand_old);
|
||||||
MEMT_REF4(0x0009E263, caller_SendPlayersCommand);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MEMJ_REF4(D2GetResolution, caller_SendPlayersCommand);
|
|
||||||
}
|
|
||||||
//6FB2723A |. E8 7D8E0300 CALL <JMP.&D2gfx.#10005>
|
//6FB2723A |. E8 7D8E0300 CALL <JMP.&D2gfx.#10005>
|
||||||
//6FB265BA |. E8 7D8E0300 CALL <JMP.&D2gfx.#10005>
|
//6FB265BA |. E8 7D8E0300 CALL <JMP.&D2gfx.#10005>
|
||||||
//6FB21B8A . E8 4F9C0400 CALL <JMP.&D2gfx.#10005>
|
//6FB21B8A . E8 4F9C0400 CALL <JMP.&D2gfx.#10005>
|
||||||
@ -266,6 +276,20 @@ void Install_SendPlayersCommand()
|
|||||||
//6FB40161 |. E8 1ECFF7FF CALL <JMP.&D2gfx.#10043>
|
//6FB40161 |. E8 1ECFF7FF CALL <JMP.&D2gfx.#10043>
|
||||||
//6FB739F1 |. E8 B896F4FF CALL <JMP.&D2gfx.#10031>
|
//6FB739F1 |. E8 B896F4FF CALL <JMP.&D2gfx.#10031>
|
||||||
//6FACD3F1 |. E8 EAFBFEFF CALL <JMP.&D2gfx.#10012>
|
//6FACD3F1 |. E8 EAFBFEFF CALL <JMP.&D2gfx.#10012>
|
||||||
|
//00456EF8 |. E8 63E20900 CALL Game.004F5160
|
||||||
|
|
||||||
|
// Set nb Player to default
|
||||||
|
mem_seek R8(D2Client, 90BA, 90AA, 97DA, 88E4C, 32C8C, 7CB5C, 4437C, 453CC, 4CB04);//6FB1C7B7-6FAA0000
|
||||||
|
MEMC_REF4( D2PrintInterface, caller_SendPlayersCommand);
|
||||||
|
//6FAA90B9 . E8 62E10700 CALL D2Client.6FB27220
|
||||||
|
//6FAA90A9 . E8 F2D40700 CALL D2Client.6FB265A0
|
||||||
|
//6FAA97D9 . E8 92830700 CALL D2Client.6FB21B70
|
||||||
|
//6FB38E4B . E8 A0A70100 CALL D2Client.6FB535F0
|
||||||
|
//6FAE2C8B . E8 603D0300 CALL D2Client.6FB169F0
|
||||||
|
//6FB2CB5B . E8 F0350100 CALL D2Client.6FB40150
|
||||||
|
//6FAF437B . E8 60F60700 CALL D2Client.6FB739E0
|
||||||
|
//6FAF53CB . E8 1080FDFF CALL D2Client.6FACD3E0
|
||||||
|
//0044CB03 |. E8 D8A30000 CALL Game.00456EE0
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
@ -279,18 +303,19 @@ void Install_AlwaysRegenMapInSP()
|
|||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Game for always regenerate maps in Single player. (AlwaysRegenMapInSP)\n");
|
log_msg("Patch D2Game for always regenerate maps in Single player. (AlwaysRegenMapInSP)\n");
|
||||||
|
|
||||||
// Always regenerate maps in Single player
|
// Always regenerate maps in Single player
|
||||||
mem_seek R8(D2Game, 517ED, 51BFA, 5DE88, 6235D, 2966D, 1E1FE, ED3BE, 26D7E, 16A20F);
|
mem_seek R8(D2Game, 517ED, 51BFA, 5DE88, 6235D, 2966D, 1E1FE, ED3BE, 26D7E, 16A20F);
|
||||||
memt_byte( 0x74 , 0xEB); // JMP SHORT D2Game.01FE2368
|
memt_byte( 0x74 , 0xEB); // JMP SHORT D2Game.01FE2368
|
||||||
//6FC8DE88 |. 74 09 JE SHORT D2Game.6FC8DE93
|
//6FC8DE88 |. 74 09 JE SHORT D2Game.6FC8DE93
|
||||||
//01FE235D |. 74 09 JE SHORT D2Game.01FE2368
|
//01FE235D |. 74 09 JE SHORT D2Game.01FE2368
|
||||||
//01F9966D |. 74 09 JE SHORT D2Game.01F99678
|
//01F9966D |. 74 09 JE SHORT D2Game.01F99678
|
||||||
//6FC3E1FE |. 74 09 JE SHORT D2Game.6FC3E209
|
//6FC3E1FE |. 74 09 JE SHORT D2Game.6FC3E209
|
||||||
//6FD0D3BE |. 74 09 JE SHORT D2Game.6FD0D3C9
|
//6FD0D3BE |. 74 09 JE SHORT D2Game.6FD0D3C9
|
||||||
//6FC46D7E |. 74 09 JE SHORT D2Game.6FC46D89
|
//6FC46D7E |. 74 09 JE SHORT D2Game.6FC46D89
|
||||||
|
//0056A20F |. 74 09 JE SHORT Game.0056A21A
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
@ -313,6 +338,7 @@ void Install_RunLODs()
|
|||||||
//6FA8894F |. 74 45 JE SHORT D2gfx.6FA88996
|
//6FA8894F |. 74 45 JE SHORT D2gfx.6FA88996
|
||||||
//6FA885BF |. 74 45 JE SHORT D2gfx.6FA88606
|
//6FA885BF |. 74 45 JE SHORT D2gfx.6FA88606
|
||||||
//6FA8B6B0 |. 74 45 JE SHORT D2gfx.6FA8B6F7
|
//6FA8B6B0 |. 74 45 JE SHORT D2gfx.6FA8B6F7
|
||||||
|
//004F562B |. 74 45 JE SHORT Game.004F5672
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
@ -321,16 +347,19 @@ void Install_RunLODs()
|
|||||||
|
|
||||||
/****************************************************************************************************/
|
/****************************************************************************************************/
|
||||||
|
|
||||||
FCT_ASM(caller_AlwaysDisplayLife_114)
|
FCT_ASM (caller_AlwaysDisplayLife_114)
|
||||||
CMP onRealm, 0
|
JNZ displayLife
|
||||||
JNZ normalDisplayLife
|
CMP onRealm,0
|
||||||
CMP active_AlwaysDisplayLifeMana, 0
|
JNZ normalDisplayLife
|
||||||
JE normalDisplayLife
|
CMP active_AlwaysDisplayLifeMana,0
|
||||||
CMP EAX, 0x1
|
JE normalDisplayLife
|
||||||
RETN
|
displayLife:
|
||||||
normalDisplayLife :
|
POP EAX
|
||||||
CMP DWORD PTR DS : [0x7BEFDC], EAX
|
ADD EAX,0x24
|
||||||
RETN
|
JMP EAX
|
||||||
|
normalDisplayLife:
|
||||||
|
LEA EAX,DWORD PTR DS:[ESI-0x1E]
|
||||||
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM (caller_AlwaysDisplayLife_113)
|
FCT_ASM (caller_AlwaysDisplayLife_113)
|
||||||
@ -377,17 +406,18 @@ normalDisplayLife:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_AlwaysDisplayMana_114 )
|
FCT_ASM (caller_AlwaysDisplayMana_114)
|
||||||
CMP onRealm, 0
|
CMP onRealm,0
|
||||||
JNZ normalDisplayMana
|
JNZ normalDisplayMana
|
||||||
CMP active_AlwaysDisplayLifeMana, 0
|
CMP active_AlwaysDisplayLifeMana,0
|
||||||
JE normalDisplayMana
|
JE normalDisplayMana
|
||||||
POP EAX
|
POP EAX
|
||||||
ADD EAX, 0x32
|
ADD EAX,0x23
|
||||||
JMP EAX
|
JMP EAX
|
||||||
normalDisplayMana :
|
normalDisplayMana:
|
||||||
CMP DWORD PTR DS : [0x7BEFE0], 0
|
LEA EDI,DWORD PTR DS:[ECX-0x6F]
|
||||||
RETN
|
CMP ESI,EDI
|
||||||
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM (caller_AlwaysDisplayMana_113)
|
FCT_ASM (caller_AlwaysDisplayMana_113)
|
||||||
@ -448,16 +478,13 @@ void Install_AlwaysDisplayLifeMana()
|
|||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Client for always display life and mana. (ALwaysPrintLifeMana)\n");
|
log_msg("Patch D2Client for always display life and mana. (ALwaysPrintLifeMana)\n");
|
||||||
if (version_D2Client == V114d) {
|
|
||||||
mem_seek R8(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2764A, 6D6FA, 98146);
|
if ( version_D2Client >= V113c )
|
||||||
memt_byte(0x39, 0xE8);
|
{
|
||||||
MEMT_REF4(0x7BEFDC05, caller_AlwaysDisplayLife_114);
|
mem_seek R8(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2764A, 6D6FA, 98183);
|
||||||
memt_byte(0x00, 0x90);
|
if (version_D2Client < V114d) memt_byte( 0x0F , 0x90);
|
||||||
} else if ( version_D2Client >= V113c ) {
|
memt_byte( version_D2Client >= V114d ? 0x75 : 0x8C , 0xE8);
|
||||||
mem_seek R8(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2764A, 6D6FA, 6D6FA);
|
MEMT_REF4( version_D2Client >= V114d ? 0xE2468D27 : 0x000000BC, version_D2Client >= V114d ? caller_AlwaysDisplayLife_114 : caller_AlwaysDisplayLife_113);
|
||||||
memt_byte( 0x0F , 0x90);
|
|
||||||
memt_byte( 0x8C , 0xE8);
|
|
||||||
MEMT_REF4( 0x000000BC, caller_AlwaysDisplayLife_113);
|
|
||||||
//6FAD764A |. 0F8C BC000000 JL D2Client.6FAD770C
|
//6FAD764A |. 0F8C BC000000 JL D2Client.6FAD770C
|
||||||
//6FAD7650 |. 83FA 6E CMP EDX,6E
|
//6FAD7650 |. 83FA 6E CMP EDX,6E
|
||||||
//6FAD7653 |. 0F8F B3000000 JG D2Client.6FAD770C
|
//6FAD7653 |. 0F8F B3000000 JG D2Client.6FAD770C
|
||||||
@ -465,6 +492,9 @@ void Install_AlwaysDisplayLifeMana()
|
|||||||
|
|
||||||
//6FAD7667 |. 0F8C A4000000 JL D2Client.6FAD7711
|
//6FAD7667 |. 0F8C A4000000 JL D2Client.6FAD7711
|
||||||
//6FB1D717 |. 0F8C A4000000 JL D2Client.6FB1D7C1
|
//6FB1D717 |. 0F8C A4000000 JL D2Client.6FB1D7C1
|
||||||
|
//6FB1D6FA |. 0F8C BC000000 JL D2Client.6FB1D7BC
|
||||||
|
//00498183 |. 75 27 JNZ SHORT Game.004981AC
|
||||||
|
//00498185 |. 8D46 E2 LEA EAX,DWORD PTR DS:[ESI-1E]
|
||||||
} else {
|
} else {
|
||||||
// Always display life.
|
// Always display life.
|
||||||
mem_seek R8(D2Client, 58B32, 58B32, 5F102, 2D713, B5DF3, 81733, 0000, 0000, 0000);
|
mem_seek R8(D2Client, 58B32, 58B32, 5F102, 2D713, B5DF3, 81733, 0000, 0000, 0000);
|
||||||
@ -475,21 +505,17 @@ void Install_AlwaysDisplayLifeMana()
|
|||||||
//6FB31733 |. A1 E4C6B86F MOV EAX,DWORD PTR DS:[6FB8C6E4]
|
//6FB31733 |. A1 E4C6B86F MOV EAX,DWORD PTR DS:[6FB8C6E4]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Always display mana.
|
// Always display mana.
|
||||||
if (version_D2Client == V114d) {
|
if ( version_D2Client >= V113c )
|
||||||
mem_seek R8(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2770C, 6D7BC, 9824E);
|
{
|
||||||
memt_byte(0x83, 0xE8);
|
|
||||||
MEMT_REF4(0x7BEFE03D, caller_AlwaysDisplayMana_114);
|
|
||||||
memt_byte(0x00, 0x90);
|
|
||||||
memt_byte(0x00, 0x90);
|
|
||||||
} else if ( version_D2Client >= V113c ) {
|
|
||||||
//mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 27711);
|
//mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 27711);
|
||||||
//memt_byte( 0x8B , 0x90);
|
//memt_byte( 0x8B , 0x90);
|
||||||
//memt_byte( 0x0D , 0xE8);
|
//memt_byte( 0x0D , 0xE8);
|
||||||
//MEMT_REF4( offset_D2Client + 0x11C4B4 , caller_AlwaysDisplayMana_113);
|
//MEMT_REF4( offset_D2Client + 0x11C4B4 , caller_AlwaysDisplayMana_113);
|
||||||
mem_seek R8(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2770C, 6D7BC, 00000);
|
mem_seek R8(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2770C, 6D7BC, 9825D);
|
||||||
memt_byte( 0xA1 , 0xE8);
|
memt_byte( version_D2Client >= V114d ? 0x8D : 0xA1 , 0xE8);
|
||||||
MEMT_REF4( ptResolutionY , caller_AlwaysDisplayMana_113);
|
MEMT_REF4( version_D2Client >= V114d ? 0xF73B9179 : (DWORD)ptResolutionY , version_D2Client >= V114d ? caller_AlwaysDisplayMana_114 : caller_AlwaysDisplayMana_113);
|
||||||
//6FAD770C |> A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C]
|
//6FAD770C |> A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C]
|
||||||
//6FAD7711 |> 8B0D B4C4BC6F MOV ECX,DWORD PTR DS:[6FBCC4B4]
|
//6FAD7711 |> 8B0D B4C4BC6F MOV ECX,DWORD PTR DS:[6FBCC4B4]
|
||||||
|
|
||||||
@ -502,6 +528,8 @@ void Install_AlwaysDisplayLifeMana()
|
|||||||
//6FAD77CB |. 81C4 28030000 ADD ESP,328
|
//6FAD77CB |. 81C4 28030000 ADD ESP,328
|
||||||
//6FAD77D1 \. C3 RETN
|
//6FAD77D1 \. C3 RETN
|
||||||
//6FB1D7BC |> A1 3870BA6F MOV EAX,DWORD PTR DS:[6FB8BC4C]
|
//6FB1D7BC |> A1 3870BA6F MOV EAX,DWORD PTR DS:[6FB8BC4C]
|
||||||
|
//0049825D |. 8D79 91 LEA EDI,DWORD PTR DS:[ECX-6F]
|
||||||
|
//00498260 |. 3BF7 CMP ESI,EDI
|
||||||
}
|
}
|
||||||
else if ( version_D2Client >= V110 )
|
else if ( version_D2Client >= V110 )
|
||||||
{
|
{
|
||||||
@ -553,8 +581,8 @@ void Install_EnabledTXTFilesWithMSExcel()
|
|||||||
|
|
||||||
log_msg("Patch D2Client for enabled the opening of files already opened by MS Excel. (EnabledTXTFilesWithMSExcel)\n");
|
log_msg("Patch D2Client for enabled the opening of files already opened by MS Excel. (EnabledTXTFilesWithMSExcel)\n");
|
||||||
|
|
||||||
mem_seek( (DWORD)D2StormMPQOpenFile + (version_Storm == V114d ? 0xB4 : version_Storm >= V111 ? 0x12A : 0xFF) );
|
mem_seek( (DWORD)D2StormMPQOpenFile + (version_Storm >= V114d ? 0xB4 : version_Storm >= V111 ? 0x12A : 0xFF) );
|
||||||
memt_byte( 0x01 , 0x03); //; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
|
memt_byte( 0x01 , 0x03); //; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
|
||||||
//6FC1C969 |. 6A 01 PUSH 1 ; |ShareMode = FILE_SHARE_READ
|
//6FC1C969 |. 6A 01 PUSH 1 ; |ShareMode = FILE_SHARE_READ
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
@ -588,7 +616,7 @@ void STDCALL printDisplayBaseStatsValue(WORD statID, sDrawImageInfo* data, DWORD
|
|||||||
if (isOnRect(D2GetMouseX(),D2GetMouseY(),x+5,y+5,32,32))
|
if (isOnRect(D2GetMouseX(),D2GetMouseY(),x+5,y+5,32,32))
|
||||||
{
|
{
|
||||||
WCHAR text[100];
|
WCHAR text[100];
|
||||||
_snwprintf(text, sizeof(text), getLocalString(STR_STATS_BASE_MIN), statValue, minValue);
|
_snwprintf(text, 100, getLocalString(STR_STATS_BASE_MIN), statValue, minValue);
|
||||||
D2SetFont(1);
|
D2SetFont(1);
|
||||||
D2PrintPopup(text, x+18, y-32, WHITE, 1);
|
D2PrintPopup(text, x+18, y-32, WHITE, 1);
|
||||||
}
|
}
|
||||||
@ -613,31 +641,30 @@ void Install_DisplayBaseStatsValue()
|
|||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Client for display base stats value. (DisplayBaseStatsValue)\n");
|
log_msg("Patch D2Client for display base stats value. (DisplayBaseStatsValue)\n");
|
||||||
if (version_D2Client == V114d) goto jump;
|
|
||||||
// Always print stat button images.
|
// Always print stat button images.
|
||||||
mem_seek R8(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5, BF955, BF955);
|
mem_seek R8(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5, BF955, A7FFB);
|
||||||
memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088
|
memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088
|
||||||
memt_byte( 0x4C, V8(D2Client, 12, 12, 13, 13, 13, 13, 13, 13, 13) );
|
memt_byte( version_D2Client == V114d ? 0x4D : 0x4C, V8(D2Client, 12, 12, 13, 13, 13, 13, 13, 13, 12) );
|
||||||
memt_byte( 0x24, 0x90 ); // NOP
|
memt_byte( version_D2Client == V114d ? 0xF8 : 0x24, 0x90 ); // NOP
|
||||||
memt_byte( V8(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C, 1C, 1C), 0x90 ); // NOP (V109d:0x20 , V110:0x14
|
if (version_D2Client < V114d) memt_byte( V8(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C, 1C, 53), 0x90 ); // NOP (V109d:0x20 , V110:0x14
|
||||||
//6FAD0073 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
|
//6FAD0073 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
|
||||||
//6FB32BBA > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB32BBA > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
//6FB3963A > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB3963A > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
//6FB1B59A > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB1B59A > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
//6FB6D1B5 |> 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB6D1B5 |> 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
//6FB6F955 |> 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB6F955 |> 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
jump:
|
//004A7FFB > 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
|
||||||
|
//004A7FFE . 53 PUSH EBX ; /Arg3
|
||||||
|
|
||||||
mem_seek R8(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E, BF9DE, A808C);
|
mem_seek R8(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E, BF9DE, A808C);
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2PrintImage, caller_displayBaseStatsValue);
|
||||||
MEMT_REF4(0x0004E3F0, caller_displayBaseStatsValue);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2PrintImage, caller_displayBaseStatsValue);
|
|
||||||
}
|
|
||||||
//6FB32C53 . E8 82A3F8FF CALL <JMP.&D2gfx.#10047>
|
//6FB32C53 . E8 82A3F8FF CALL <JMP.&D2gfx.#10047>
|
||||||
//6FB396D3 . E8 D238F8FF CALL <JMP.&D2gfx.#10044>
|
//6FB396D3 . E8 D238F8FF CALL <JMP.&D2gfx.#10044>
|
||||||
//6FB1B636 . E8 431AFAFF CALL <JMP.&D2gfx.#10024>
|
//6FB1B636 . E8 431AFAFF CALL <JMP.&D2gfx.#10024>
|
||||||
//6FB6D23D |. E8 54FEF4FF |CALL <JMP.&D2gfx.#10041>
|
//6FB6D23D |. E8 54FEF4FF |CALL <JMP.&D2gfx.#10041>
|
||||||
//6FB6F9DD |. E8 54FEF4FF |CALL <JMP.&D2gfx.#10042>
|
//6FB6F9DD |. E8 54FEF4FF |CALL <JMP.&D2gfx.#10042>
|
||||||
|
//004A808B . E8 F0E30400 CALL Game.004F6480 ; \Game.004F6480
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
@ -650,9 +677,8 @@ void Install_DisplayBaseStatsValue()
|
|||||||
RunesBIN* STDCALL compileRunesTxt(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength)
|
RunesBIN* STDCALL compileRunesTxt(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength)
|
||||||
{
|
{
|
||||||
RunesBIN* ptRunesBin = (RunesBIN*)D2CompileTxtFile(unused, filename, ptFields, ptRecordCount, recordLength);
|
RunesBIN* ptRunesBin = (RunesBIN*)D2CompileTxtFile(unused, filename, ptFields, ptRecordCount, recordLength);
|
||||||
for (DWORD i = 0; i < *ptRecordCount; i++) {
|
for (DWORD i=0; i < *ptRecordCount; i++)
|
||||||
ptRunesBin[i].Server = 0;
|
ptRunesBin[i].Server=0;
|
||||||
}
|
|
||||||
return ptRunesBin;
|
return ptRunesBin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -667,17 +693,14 @@ void Install_LadderRunewords()
|
|||||||
log_msg("Patch D2Common for enabled the ladder only runewords. (LadderRunewords)\n");
|
log_msg("Patch D2Common for enabled the ladder only runewords. (LadderRunewords)\n");
|
||||||
|
|
||||||
mem_seek R8(D2Common, 0000, 0000, 1E965, 61762, 43A72, 5D492, 724B2, 63782, 239C40);
|
mem_seek R8(D2Common, 0000, 0000, 1E965, 61762, 43A72, 5D492, 724B2, 63782, 239C40);
|
||||||
if (version_D2Common == V114d) {
|
MEMC_REF4( D2CompileTxtFile, compileRunesTxt);
|
||||||
MEMT_REF4(0xFFFD86AC, compileRunesTxt);
|
|
||||||
} else {
|
|
||||||
MEMC_REF4(D2CompileTxtFile, compileRunesTxt);
|
|
||||||
}
|
|
||||||
//01B6E964 |. E8 0714FFFF CALL D2Common.#10578 ; \#10578
|
//01B6E964 |. E8 0714FFFF CALL D2Common.#10578 ; \#10578
|
||||||
//6FDB1761 |. E8 FAA8FCFF CALL D2Common.#10653 ; \#10653
|
//6FDB1761 |. E8 FAA8FCFF CALL D2Common.#10653 ; \#10653
|
||||||
//6FD93A71 |. E8 EAADFCFF CALL D2Common.#10496 ; \#10496
|
//6FD93A71 |. E8 EAADFCFF CALL D2Common.#10496 ; \#10496
|
||||||
//6FDAD491 |. E8 BA49FEFF CALL D2Common.#10244 ; \#10244
|
//6FDAD491 |. E8 BA49FEFF CALL D2Common.#10244 ; \#10244
|
||||||
//6FDC24B1 |. E8 8ACAFEFF CALL D2Common.#10849 ; \#10849
|
//6FDC24B1 |. E8 8ACAFEFF CALL D2Common.#10849 ; \#10849
|
||||||
//6FDB3781 |. E8 5A93FAFF CALL D2Common.#10037 ; \#10037
|
//6FDB3781 |. E8 5A93FAFF CALL D2Common.#10037 ; \#10037
|
||||||
|
//00639C3F |. E8 AC86FDFF CALL Game.006122F0 ; \Game.006122F0
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
@ -705,6 +728,7 @@ void Install_EnabledCowPortalWhenCowKingWasKill()
|
|||||||
//6FC95C68 |. 85C0 TEST EAX,EAX
|
//6FC95C68 |. 85C0 TEST EAX,EAX
|
||||||
//6FC87508 |. 85C0 TEST EAX,EAX
|
//6FC87508 |. 85C0 TEST EAX,EAX
|
||||||
//6FC2EBE8 |. 85C0 TEST EAX,EAX
|
//6FC2EBE8 |. 85C0 TEST EAX,EAX
|
||||||
|
//00594179 |. 85C0 TEST EAX,EAX
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
@ -715,19 +739,226 @@ void Install_EnabledCowPortalWhenCowKingWasKill()
|
|||||||
|
|
||||||
void Install_DoNotCloseNihlathakPortal()
|
void Install_DoNotCloseNihlathakPortal()
|
||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (version_D2Game < V114d || isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Game to not close Nihlathak's portal. (DoNotCloseNihlathakPortal)\n");
|
log_msg("Patch D2Game to not close Nihlathak's portal. (DoNotCloseNihlathakPortal)\n");
|
||||||
|
|
||||||
mem_seek R8(D2Game, 0, 0, 0, 0, 0, 0, 0, 0, 18B9D7);
|
mem_seek R8(D2Game, 76B19, 77019, 86679 , 107C7, 51987, 26B67, 5AE67, 1FF27, 18B9D7);
|
||||||
memt_byte(0x0F, 0x90);
|
memt_byte(0x0F, 0x90);
|
||||||
memt_byte(0x85, 0x90);
|
memt_byte(0x85, 0x90);
|
||||||
memt_dword(0x000000C5, 0x90909090);
|
memt_dword( version_D2Game >= V114d ? 0x000000C5 : version_D2Game >= V111 ? 0x000000BF : 0x000000C1, 0x90909090);
|
||||||
|
//6FCA6B19 . 0F85 C1000000 JNZ D2Game.6FCA6BE0
|
||||||
|
//6FCA7019 . 0F85 C1000000 JNZ D2Game.6FCA70E0
|
||||||
|
//6FCB6679 . 0F85 C1000000 JNZ D2Game.6FCB6740
|
||||||
|
//6FC307C7 . 0F85 BF000000 JNZ D2Game.6FC3088C
|
||||||
|
//6FC71987 . 0F85 BF000000 JNZ D2Game.6FC71A4C
|
||||||
|
//6FC46B67 . 0F85 BF000000 JNZ D2Game.6FC46C2C
|
||||||
|
//6FC7AE67 . 0F85 BF000000 JNZ D2Game.6FC7AF2C
|
||||||
|
//6FC3FF27 . 0F85 BF000000 JNZ D2Game.6FC3FFEC
|
||||||
|
//0058B9D7 |. 0F85 C5000000 JNZ Game.0058BAA2
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
isInstalled = true;
|
isInstalled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************************************/
|
||||||
|
/* townWest.ds1:
|
||||||
|
129A6 : 4D->76
|
||||||
|
129AA : 56->3A
|
||||||
|
12ACA : 05->04
|
||||||
|
+4 : 4D->76
|
||||||
|
+4 : 56->3A
|
||||||
|
+4 : 4E->76
|
||||||
|
+4 : 58->3A
|
||||||
|
+4 : 01->01
|
||||||
|
+4 : 4C->7B
|
||||||
|
+4 : 57->50
|
||||||
|
+4 : 02->02
|
||||||
|
+4 : 4D->7B
|
||||||
|
+4 : 5D->41
|
||||||
|
+4 : 01->01
|
||||||
|
+4 : 49->7D
|
||||||
|
+4 : 5C->3E
|
||||||
|
+4 : 02->02
|
||||||
|
+4 : 4F->
|
||||||
|
+4 : 5B->
|
||||||
|
+4 : 02->
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*char* FASTCALL usePlugYTownWest(char* filename)
|
||||||
|
{
|
||||||
|
if (onRealm)
|
||||||
|
return filename;
|
||||||
|
|
||||||
|
if (!strcmp(filename, "DATA\\GLOBAL\\TILES\\Expansion\\Town\\townWest.ds1"))
|
||||||
|
return "PlugY\\townWest.ds1";
|
||||||
|
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCT_ASM ( caller_usePlugYTownWest )
|
||||||
|
LEA EAX,DWORD PTR SS:[EBP-0x40]
|
||||||
|
MOV ECX,EAX
|
||||||
|
CALL usePlugYTownWest
|
||||||
|
MOV ECX,EAX
|
||||||
|
RETN
|
||||||
|
}}
|
||||||
|
|
||||||
|
FCT_ASM ( caller_usePlugYTownWest_113d )
|
||||||
|
LEA EAX,DWORD PTR SS:[ESP+0x14]
|
||||||
|
MOV ECX,EAX
|
||||||
|
CALL usePlugYTownWest
|
||||||
|
MOV EDX,ESI
|
||||||
|
RETN
|
||||||
|
}}*/
|
||||||
|
|
||||||
|
/****************************************************************************************************/
|
||||||
|
|
||||||
|
void* FASTCALL updateHarrogath(DWORD unused, char* filename, DWORD* size, const char* __CallFile, DWORD __CallLine)
|
||||||
|
{
|
||||||
|
if (onRealm)
|
||||||
|
return D2ReadFile(unused, filename, size, __CallFile, __CallLine);
|
||||||
|
|
||||||
|
if (strcmp(filename, "DATA\\GLOBAL\\TILES\\Expansion\\Town\\townWest.ds1"))
|
||||||
|
return D2ReadFile(unused, filename, size, __CallFile, __CallLine);
|
||||||
|
|
||||||
|
DWORD fileSize = 0;
|
||||||
|
if (size == NULL)
|
||||||
|
size = &fileSize;
|
||||||
|
char* data = (char*)D2ReadFile(unused, filename, size, __FILE__, __LINE__);
|
||||||
|
if (*size > 400 &&
|
||||||
|
*(DWORD*)(data + *size - 0x16C) == 0x0000004D &&
|
||||||
|
*(DWORD*)(data + *size - 0x168) == 0x00000056 &&
|
||||||
|
*(DWORD*)(data + *size - 0x48) == 0x00000005 &&
|
||||||
|
*(DWORD*)(data + *size - 0x44) == 0x0000004D &&
|
||||||
|
*(DWORD*)(data + *size - 0x40) == 0x00000056 &&
|
||||||
|
*(DWORD*)(data + *size - 0x3C) == 0x0000004E &&
|
||||||
|
*(DWORD*)(data + *size - 0x38) == 0x00000058 &&
|
||||||
|
*(DWORD*)(data + *size - 0x34) == 0x00000001 &&
|
||||||
|
*(DWORD*)(data + *size - 0x30) == 0x0000004C &&
|
||||||
|
*(DWORD*)(data + *size - 0x2C) == 0x00000057 &&
|
||||||
|
*(DWORD*)(data + *size - 0x28) == 0x00000002 &&
|
||||||
|
*(DWORD*)(data + *size - 0x24) == 0x0000004D &&
|
||||||
|
*(DWORD*)(data + *size - 0x20) == 0x0000005D &&
|
||||||
|
*(DWORD*)(data + *size - 0x1C) == 0x00000001 &&
|
||||||
|
*(DWORD*)(data + *size - 0x18) == 0x00000049 &&
|
||||||
|
*(DWORD*)(data + *size - 0x14) == 0x0000005C &&
|
||||||
|
*(DWORD*)(data + *size - 0x10) == 0x00000002 &&
|
||||||
|
*(DWORD*)(data + *size - 0x0C) == 0x0000004F &&
|
||||||
|
*(DWORD*)(data + *size - 0x08) == 0x0000005B &&
|
||||||
|
*(DWORD*)(data + *size - 0x04) == 0x00000002)
|
||||||
|
{
|
||||||
|
log_msg("update TownWest to Move Cain near Harrogath waypoint\n");
|
||||||
|
*(DWORD*)(data + *size - 0x16C) = 0x00000076;
|
||||||
|
*(DWORD*)(data + *size - 0x168) = 0x0000003A;
|
||||||
|
*(DWORD*)(data + *size - 0x48) = 0x00000004;
|
||||||
|
*(DWORD*)(data + *size - 0x44) = 0x00000076;
|
||||||
|
*(DWORD*)(data + *size - 0x40) = 0x0000003A;
|
||||||
|
*(DWORD*)(data + *size - 0x3C) = 0x00000076;
|
||||||
|
*(DWORD*)(data + *size - 0x38) = 0x0000003A;
|
||||||
|
*(DWORD*)(data + *size - 0x34) = 0x00000001;
|
||||||
|
*(DWORD*)(data + *size - 0x30) = 0x0000007B;
|
||||||
|
*(DWORD*)(data + *size - 0x2C) = 0x00000050;
|
||||||
|
*(DWORD*)(data + *size - 0x28) = 0x00000002;
|
||||||
|
*(DWORD*)(data + *size - 0x24) = 0x0000007B;
|
||||||
|
*(DWORD*)(data + *size - 0x20) = 0x00000041;
|
||||||
|
*(DWORD*)(data + *size - 0x1C) = 0x00000001;
|
||||||
|
*(DWORD*)(data + *size - 0x18) = 0x0000007D;
|
||||||
|
*(DWORD*)(data + *size - 0x14) = 0x0000003E;
|
||||||
|
*(DWORD*)(data + *size - 0x10) = 0x00000002;
|
||||||
|
*(DWORD*)(data + *size - 0x0C) = 0x00000000;
|
||||||
|
*(DWORD*)(data + *size - 0x08) = 0x00000000;
|
||||||
|
*(DWORD*)(data + *size - 0x04) = 0x00000000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
log_msg("ERROR : Failed to update TownWest to Move Cain near Harrogath waypoint\n");
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCT_ASM ( caller_updateHarrogath )
|
||||||
|
MOV ECX,DWORD PTR SS:[ESP+4]
|
||||||
|
PUSH 0
|
||||||
|
PUSH 0
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x10]
|
||||||
|
MOV EDX,EAX
|
||||||
|
CALL updateHarrogath
|
||||||
|
RETN 8
|
||||||
|
}}
|
||||||
|
|
||||||
|
void Install_MoveCainNearHarrogathWaypoint()
|
||||||
|
{
|
||||||
|
static int isInstalled = false;
|
||||||
|
if (isInstalled) return;
|
||||||
|
|
||||||
|
log_msg("Patch D2Common to move Deckard Cain near Waypoint in Harrogath. (MoveCainNearHarrogathWaypoint)\n");
|
||||||
|
mem_seek R8(D2Common, 3653E, 3654E, 45A2E , 82233, 39593, 222A3, B573, 54033, 265972);
|
||||||
|
MEMC_REF4( V2ReadFile, version_D2Common >= V111 && version_D2Common <= V113d? (TD2ReadFile)caller_updateHarrogath : updateHarrogath);
|
||||||
|
//6FD7653D |. E8 62D30300 CALL D2Common.6FDB38A4
|
||||||
|
//6FD7654D |. E8 62D40300 CALL D2Common.6FDB39B4
|
||||||
|
//6FD85A2D |. E8 36E80300 CALL D2Common.6FDC4268
|
||||||
|
//6FDD2232 . E8 A974F8FF CALL D2Common.6FD596E0
|
||||||
|
//6FD89592 . E8 3903FDFF CALL D2Common.6FD598D0
|
||||||
|
//6FD722A2 . E8 5976FEFF CALL D2Common.6FD59900
|
||||||
|
//6FD5B572 . E8 89E3FFFF CALL D2Common.6FD59900
|
||||||
|
//6FDA4032 . E8 A975FBFF CALL D2Common.6FD5B5E0
|
||||||
|
//00665971 |. E8 0317EBFF CALL Game.00517079
|
||||||
|
|
||||||
|
/*
|
||||||
|
mem_seek R8(D2Common, 0000, 0000, 0000 , 0000, 0000, 734AA, 6C75A, 308FA, 21E4F7);
|
||||||
|
memt_byte( 0x8D, 0xE8);
|
||||||
|
MEMT_REF4( version_D2Common >= V114d ? 0xC88BC045 : 0x8B102444, version_D2Common >= V114d ? caller_usePlugYTownWest : caller_usePlugYTownWest_113d);
|
||||||
|
if (version_D2Common < V114d) memt_byte( 0xD6, 0x90);
|
||||||
|
//6FDC34AA |. 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
|
||||||
|
//6FDC34AE |. 8BD6 MOV EDX,ESI
|
||||||
|
//6FDBC75A |. 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
|
||||||
|
//6FDBC75E |. 8BD6 MOV EDX,ESI
|
||||||
|
//6FD808FA |. 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
|
||||||
|
//6FD808FE |. 8BD6 MOV EDX,ESI
|
||||||
|
//0061E4F7 |. 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40]
|
||||||
|
//0061E4FA |. 8BC8 MOV ECX,EAX
|
||||||
|
*/
|
||||||
|
log_msg("\n");
|
||||||
|
|
||||||
|
isInstalled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ExperienceBIN* STDCALL modifExperienceBin(ExperienceBIN* ptExperienceBIN)
|
||||||
|
{
|
||||||
|
for (int i=71; i<101; i++)
|
||||||
|
ptExperienceBIN[i].ExpRatio = 1024;
|
||||||
|
return ptExperienceBIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCT_ASM ( caller_modifExperienceBin )
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
|
CALL D2CompileTxtFile
|
||||||
|
PUSH EAX
|
||||||
|
CALL modifExperienceBin
|
||||||
|
RETN 0x14
|
||||||
|
}}
|
||||||
|
|
||||||
|
void Install_RemoveExperienceDiminushingReturn()
|
||||||
|
{
|
||||||
|
static int isInstalled = false;
|
||||||
|
if (isInstalled) return;
|
||||||
|
|
||||||
|
log_msg("Patch D2Common to remove experience diminushing return. (RemoveExperienceDiminushingReturn)\n");
|
||||||
|
|
||||||
|
// modification of experienceBIN
|
||||||
|
mem_seek R8(D2Common, 00000, 00000, 00000, 00000, 00000, 00000, 00000, 00000, 213E42);
|
||||||
|
MEMC_REF4( D2CompileTxtFile, caller_modifExperienceBin);
|
||||||
|
//00613E41 |. E8 AAE4FFFF CALL Game.006122F0 ; \Game.006122F0
|
||||||
|
|
||||||
|
log_msg("\n");
|
||||||
|
|
||||||
|
isInstalled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Updating server.
|
Updating server.
|
||||||
|
|
||||||
@ -9,16 +9,21 @@
|
|||||||
|
|
||||||
#include "bigStash.h" // active_bigStash_tested
|
#include "bigStash.h" // active_bigStash_tested
|
||||||
#include "uberQuest.h" //active_UberQuest + resetQuestState()
|
#include "uberQuest.h" //active_UberQuest + resetQuestState()
|
||||||
|
#include "infinityStash.h" //active_UberQuest + resetQuestState()
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
bool onRealm=false;
|
bool onRealm = false;
|
||||||
bool needToInit=false;
|
bool needToInit = false;
|
||||||
int previouslyOnRealm = -1;
|
int previouslyOnRealm = -1;
|
||||||
|
|
||||||
void STDCALL BtnPress()
|
// mode 0:SinglePlayer - 1:TCPIP - 2:Battlenet
|
||||||
|
void STDCALL BtnPress(int mode)
|
||||||
{
|
{
|
||||||
needToInit = 1;
|
needToInit = true;
|
||||||
|
|
||||||
|
loadLocalizedStrings(D2GetLang());
|
||||||
|
|
||||||
// if (active_WorldEvent)
|
// if (active_WorldEvent)
|
||||||
// initWorldEventVariables();
|
// initWorldEventVariables();
|
||||||
if (active_UberQuest)
|
if (active_UberQuest)
|
||||||
@ -28,19 +33,20 @@ void STDCALL BtnPress()
|
|||||||
previouslyOnRealm = onRealm;
|
previouslyOnRealm = onRealm;
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_BnetBtnPress114 )
|
FCT_ASM ( caller_BnetBtnPress114 )
|
||||||
CMP active_DisableBattleNet, 1
|
CMP active_DisableBattleNet,1
|
||||||
JE disableBattleNet
|
JE disableBattleNet
|
||||||
MOV onRealm, 1
|
MOV onRealm,1
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
CALL BtnPress
|
PUSH 2
|
||||||
POP EAX
|
CALL BtnPress
|
||||||
SUB ESP, 0x3FC//400
|
POP EAX
|
||||||
JMP DWORD PTR SS : [ESP + 0x3FC]
|
SUB ESP,0x3FC//400
|
||||||
disableBattleNet :
|
JMP DWORD PTR SS:[ESP+0x3FC]
|
||||||
POP EAX
|
disableBattleNet:
|
||||||
POP EAX
|
POP EAX
|
||||||
RETN
|
POP EAX
|
||||||
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_BnetBtnPress )
|
FCT_ASM ( caller_BnetBtnPress )
|
||||||
@ -48,6 +54,7 @@ FCT_ASM ( caller_BnetBtnPress )
|
|||||||
JE disableBattleNet
|
JE disableBattleNet
|
||||||
MOV onRealm,1
|
MOV onRealm,1
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
|
PUSH 2
|
||||||
CALL BtnPress
|
CALL BtnPress
|
||||||
POP EAX
|
POP EAX
|
||||||
SUB ESP,0x3FC//400
|
SUB ESP,0x3FC//400
|
||||||
@ -65,19 +72,18 @@ FCT_ASM ( caller_MultiPlayerBtnPress )
|
|||||||
}}
|
}}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FCT_ASM( caller_TCPIPBtnPress114 )
|
FCT_ASM ( caller_TCPIPBtnPress114 )
|
||||||
MOV onRealm, 0
|
MOV onRealm,0
|
||||||
PUSH EAX
|
PUSH 1
|
||||||
PUSH EDX
|
CALL BtnPress
|
||||||
CALL BtnPress
|
MOV ECX,DWORD PTR SS:[ESP]
|
||||||
POP EDX
|
ADD ECX,0xB9B0
|
||||||
POP EAX
|
JMP ECX
|
||||||
MOV ECX, 0x006D39BC
|
|
||||||
RETN
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_TCPIPBtnPress111 )
|
FCT_ASM ( caller_TCPIPBtnPress111 )
|
||||||
MOV onRealm,0
|
MOV onRealm,0
|
||||||
|
PUSH 1
|
||||||
CALL BtnPress
|
CALL BtnPress
|
||||||
MOV ESI,0x40
|
MOV ESI,0x40
|
||||||
RETN
|
RETN
|
||||||
@ -85,6 +91,7 @@ FCT_ASM ( caller_TCPIPBtnPress111 )
|
|||||||
|
|
||||||
FCT_ASM ( caller_TCPIPBtnPress )
|
FCT_ASM ( caller_TCPIPBtnPress )
|
||||||
MOV onRealm,0
|
MOV onRealm,0
|
||||||
|
PUSH 1
|
||||||
CALL BtnPress
|
CALL BtnPress
|
||||||
MOV EBP,1
|
MOV EBP,1
|
||||||
RETN
|
RETN
|
||||||
@ -92,6 +99,7 @@ FCT_ASM ( caller_TCPIPBtnPress )
|
|||||||
|
|
||||||
FCT_ASM ( caller_SinglePlayerBtnPress )
|
FCT_ASM ( caller_SinglePlayerBtnPress )
|
||||||
MOV onRealm,0
|
MOV onRealm,0
|
||||||
|
PUSH 0
|
||||||
CALL BtnPress
|
CALL BtnPress
|
||||||
MOV EDX,0x400
|
MOV EDX,0x400
|
||||||
RETN
|
RETN
|
||||||
@ -131,6 +139,7 @@ void Install_VariableOnRealm()
|
|||||||
MEMT_REF4( 0x000400EC, version_D2Launch == V114d ? caller_BnetBtnPress114 : caller_BnetBtnPress);
|
MEMT_REF4( 0x000400EC, version_D2Launch == V114d ? caller_BnetBtnPress114 : caller_BnetBtnPress);
|
||||||
memt_byte( 0x00, 0x90 ); // NOP
|
memt_byte( 0x00, 0x90 ); // NOP
|
||||||
//6FA529E5 . 81EC 00040000 SUB ESP,400
|
//6FA529E5 . 81EC 00040000 SUB ESP,400
|
||||||
|
//0043533B |. 81EC 00040000 SUB ESP,400
|
||||||
|
|
||||||
// click on Multiplayer button
|
// click on Multiplayer button
|
||||||
// mem_seek R7(D2Launch, D5EC, D5CC, EFFC, 0000, 0000, 0000, 0000);
|
// mem_seek R7(D2Launch, D5EC, D5CC, EFFC, 0000, 0000, 0000, 0000);
|
||||||
@ -139,15 +148,17 @@ void Install_VariableOnRealm()
|
|||||||
//6FA1EFFC . B8 01000000 MOV EAX,1
|
//6FA1EFFC . B8 01000000 MOV EAX,1
|
||||||
|
|
||||||
// click on TCP/IP button
|
// click on TCP/IP button
|
||||||
mem_seek R8(D2Launch, 87B9, 87C9, 9F99, 11329, 17409, 16659, 17B8E, 1053E, 2FFFA);
|
mem_seek R8(D2Launch, 87B9, 87C9, 9F99, 11329, 17409, 16659, 17B8E, 1053E, 2FFEC);
|
||||||
if (version_D2Launch == V109b || version_D2Launch == V109d || version_D2Launch == V110)
|
if (version_D2Launch <= V110)
|
||||||
{
|
{
|
||||||
memt_byte( 0xBD, 0xE8 ); // CALL
|
memt_byte( 0xBD, 0xE8 ); // CALL
|
||||||
MEMT_REF4( 0x00000001, caller_TCPIPBtnPress);
|
MEMT_REF4( 0x00000001, caller_TCPIPBtnPress);
|
||||||
} else if (version_D2Launch == V114d) {
|
}
|
||||||
memt_byte(0xB9, 0xE8);
|
else if (version_D2Launch >= V114d)
|
||||||
MEMT_REF4(0x006D39BC, caller_TCPIPBtnPress114);
|
{
|
||||||
} else {
|
MEMT_REF4( 0x0000B9B0, caller_TCPIPBtnPress114);
|
||||||
|
//0042FFEB . E8 B0B90000 CALL Game.0043B9A0
|
||||||
|
} else {
|
||||||
memt_byte( 0xBE, 0xE8 ); // CALL
|
memt_byte( 0xBE, 0xE8 ); // CALL
|
||||||
MEMT_REF4( 0x00000040, caller_TCPIPBtnPress111);
|
MEMT_REF4( 0x00000040, caller_TCPIPBtnPress111);
|
||||||
//6FA51329 . BE 40000000 MOV ESI,40
|
//6FA51329 . BE 40000000 MOV ESI,40
|
||||||
@ -158,6 +169,7 @@ void Install_VariableOnRealm()
|
|||||||
memt_byte( 0xBA, 0xE8 ); // CALL
|
memt_byte( 0xBA, 0xE8 ); // CALL
|
||||||
MEMT_REF4( 0x00000400, caller_SinglePlayerBtnPress);
|
MEMT_REF4( 0x00000400, caller_SinglePlayerBtnPress);
|
||||||
//6FA4B726 . BA 00040000 MOV EDX,400
|
//6FA4B726 . BA 00040000 MOV EDX,400
|
||||||
|
//00430BC9 |. BA 00040000 MOV EDX,400
|
||||||
|
|
||||||
if (version_D2Game == V110)
|
if (version_D2Game == V110)
|
||||||
{
|
{
|
||||||
|
@ -98,7 +98,7 @@ INIFile::INIFile()
|
|||||||
m_cache = NULL;
|
m_cache = NULL;
|
||||||
m_sectionStart = NULL;
|
m_sectionStart = NULL;
|
||||||
m_sectionEnd = NULL;
|
m_sectionEnd = NULL;
|
||||||
|
|
||||||
ZeroMemory((void *)m_path, sizeof(m_path));
|
ZeroMemory((void *)m_path, sizeof(m_path));
|
||||||
ZeroMemory((void *)m_currentSection, sizeof(m_currentSection));
|
ZeroMemory((void *)m_currentSection, sizeof(m_currentSection));
|
||||||
}
|
}
|
||||||
@ -165,7 +165,7 @@ BOOL INIFile::InitReadWrite(const char *path, int readWrite, DWORD writeCacheSiz
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if((m_readWrite == INIFILE_MPQREAD) || (m_readWrite == INIFILE_READ))
|
// if((m_readWrite == INIFILE_MPQREAD) || (m_readWrite == INIFILE_READ))
|
||||||
if(m_readWrite == INIFILE_READ)
|
if(m_readWrite == INIFILE_READ)
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Gestion of the infinity and shared Stash.
|
Gestion of the infinity and shared Stash.
|
||||||
|
|
||||||
@ -13,13 +13,15 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#define STASH_TAG 0x5453 //"ST"
|
#define STASH_TAG 0x5453 //"ST"
|
||||||
#define JM_TAG 0x4D4A //"JM"
|
#define JM_TAG 0x4D4A //"JM"
|
||||||
|
|
||||||
DWORD maxSelfPages = -1;
|
DWORD maxSelfPages = -1;
|
||||||
DWORD maxSharedPages = -1;
|
DWORD maxSharedPages = -1;
|
||||||
DWORD nbPagesPerIndex = 10;
|
DWORD nbPagesPerIndex = 10;
|
||||||
DWORD nbPagesPerIndex2 = 100;
|
DWORD nbPagesPerIndex2 = 100;
|
||||||
bool active_multiPageStash = false;
|
bool active_multiPageStash = false;
|
||||||
|
bool autoRenameStashPage = false;
|
||||||
|
int active_SharedStashInMultiPlayer = 0;//0: disabled, 1:shared in SP, 2: shared in SP & TCP/IP
|
||||||
bool active_sharedStash = false;
|
bool active_sharedStash = false;
|
||||||
bool separateHardSoftStash = false;
|
bool separateHardSoftStash = false;
|
||||||
bool active_sharedGold=false;
|
bool active_sharedGold=false;
|
||||||
@ -39,14 +41,14 @@ Unit* firstClassicStashItem(Unit* ptChar)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD endStashList(Unit* ptChar, Stash* ptStash)//WORKS
|
DWORD endStashList(Unit* ptChar, Stash* ptStash)
|
||||||
{
|
{
|
||||||
Stash* stash = ptStash;
|
Stash* stash = ptStash;
|
||||||
|
|
||||||
while (stash)
|
while (stash)
|
||||||
{
|
{
|
||||||
if (stash->ptListItem || ((stash == PCPY->currentStash) && firstClassicStashItem(ptChar))) return 0;
|
if (stash->ptListItem || ((stash == PCPY->currentStash) && firstClassicStashItem(ptChar))) return 0;
|
||||||
if (stash->isIndex || (stash->name != NULL && stash->name[0])) return 0;
|
if (stash->name != NULL && stash->name[0]) return 0;
|
||||||
stash = stash->nextStash;
|
stash = stash->nextStash;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -64,59 +66,61 @@ DWORD endStashList(Unit* ptChar, Stash* ptStash)//WORKS
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
Stash* getLastStash(Stash* ptStash)//WORKS
|
Stash* getLastStash(Stash* ptStash)
|
||||||
{
|
{
|
||||||
Stash* stash = ptStash;
|
if (!ptStash)
|
||||||
|
return NULL;
|
||||||
if (!stash) return NULL;
|
while (ptStash->nextStash)
|
||||||
while (stash->nextStash)
|
ptStash = ptStash->nextStash;
|
||||||
stash = stash->nextStash;
|
return ptStash;
|
||||||
|
|
||||||
return stash;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Stash* newStash(DWORD id)
|
Stash* newStash(DWORD id)
|
||||||
{
|
{
|
||||||
d2_assert( id == 0xFFFFFFFF , "Too much stash", __FILE__, __LINE__);
|
d2_assert( id == 0xFFFFFFFF , "Too much stash", __FILE__, __LINE__);
|
||||||
|
|
||||||
Stash* stash = (Stash*)malloc(sizeof(Stash));//D2AllocMem(memPool, sizeof(Stash),__FILE__,__LINE__,0);
|
Stash* stash = (Stash*)malloc(sizeof(Stash));//D2AllocMem(memPool, sizeof(Stash),__FILE__,__LINE__,0);
|
||||||
d2_assert(!stash , "Error on stash allocation.", __FILE__, __LINE__);
|
d2_assert(!stash , "Error on stash allocation.", __FILE__, __LINE__);
|
||||||
ZeroMemory(stash, sizeof(Stash));
|
ZeroMemory(stash, sizeof(Stash));
|
||||||
stash->id = id;
|
stash->id = id;
|
||||||
|
|
||||||
return stash;
|
return stash;
|
||||||
}
|
}
|
||||||
|
|
||||||
Stash* addStash(Unit* ptChar, bool isShared)
|
Stash* addStash(Unit* ptChar, bool isShared, bool autoSetIndex, Stash* previous)
|
||||||
{
|
{
|
||||||
Stash* previous;
|
previous = getLastStash(previous ? previous : isShared ? PCPY->sharedStash : PCPY->selfStash);
|
||||||
Stash* stash;
|
if (previous)
|
||||||
// DWORD memPool = PCGame ? PCGame->memoryPool :0;
|
isShared = previous->isShared;
|
||||||
if (isShared)
|
|
||||||
{
|
|
||||||
previous = getLastStash(PCPY->sharedStash);
|
|
||||||
stash = newStash(PCPY->nbSharedPages++);
|
|
||||||
} else {
|
|
||||||
previous = getLastStash(PCPY->selfStash);
|
|
||||||
stash = newStash(PCPY->nbSelfPages++);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Stash* stash = newStash(isShared ? PCPY->nbSharedPages++ : PCPY->nbSelfPages++);
|
||||||
stash->isShared = isShared;
|
stash->isShared = isShared;
|
||||||
stash->previousStash = previous;
|
stash->previousStash = previous;
|
||||||
|
|
||||||
if (previous)
|
if (previous)
|
||||||
|
{
|
||||||
previous->nextStash = stash;
|
previous->nextStash = stash;
|
||||||
|
stash->isIndex = ((stash->id + 1) % nbPagesPerIndex) == 0;
|
||||||
|
stash->isMainIndex = ((stash->id + 1) % nbPagesPerIndex2) == 0;
|
||||||
|
}
|
||||||
else if (isShared)
|
else if (isShared)
|
||||||
|
{
|
||||||
PCPY->sharedStash = stash;
|
PCPY->sharedStash = stash;
|
||||||
|
stash->isIndex = 1;
|
||||||
|
stash->isMainIndex = 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
PCPY->selfStash = stash;
|
PCPY->selfStash = stash;
|
||||||
|
stash->isIndex = 1;
|
||||||
log_msg("AddStash: stash->id=%d\tstash->isShared=%d\tstash->previous=%08X\tnbSelf=%d\tnbShared=%d\n",
|
stash->isMainIndex = 1;
|
||||||
stash->id,stash->isShared,stash->previousStash,PCPY->nbSelfPages,PCPY->nbSharedPages);
|
}
|
||||||
|
|
||||||
|
log_msg("AddStash: stash->id=%d\tstash->isShared=%d\tnbSelf=%d\tnbShared=%d\n", stash->id, stash->isShared, PCPY->nbSelfPages, PCPY->nbSharedPages);
|
||||||
return stash;
|
return stash;
|
||||||
}
|
}
|
||||||
|
|
||||||
Stash* getStash(Unit* ptChar, DWORD isShared, DWORD id)//WORKS
|
Stash* getStash(Unit* ptChar, DWORD isShared, DWORD id)
|
||||||
{
|
{
|
||||||
Stash* ptStash = isShared ? PCPY->sharedStash : PCPY->selfStash;
|
Stash* ptStash = isShared ? PCPY->sharedStash : PCPY->selfStash;
|
||||||
|
|
||||||
@ -134,11 +138,11 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWO
|
|||||||
{
|
{
|
||||||
if (!newStash) return 0;
|
if (!newStash) return 0;
|
||||||
|
|
||||||
log_msg("changeToSelectedStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n", newStash->id, newStash->isShared, bOnlyItems, bIsClient);
|
|
||||||
|
|
||||||
Stash* currentStash = PCPY->currentStash;
|
Stash* currentStash = PCPY->currentStash;
|
||||||
if (currentStash == newStash) return 0;
|
if (currentStash == newStash) return 0;
|
||||||
|
|
||||||
|
log_msg("changeToSelectedStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n", newStash->id, newStash->isShared, bOnlyItems, bIsClient);
|
||||||
|
|
||||||
d2_assert( currentStash && currentStash->ptListItem, "ERROR : currentStash isn't empty (ptListItem != NULL)",__FILE__,__LINE__);
|
d2_assert( currentStash && currentStash->ptListItem, "ERROR : currentStash isn't empty (ptListItem != NULL)",__FILE__,__LINE__);
|
||||||
|
|
||||||
// collect items to remove
|
// collect items to remove
|
||||||
@ -153,7 +157,7 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWO
|
|||||||
{
|
{
|
||||||
D2SetAnim(D2GetRealItem(ptItem),-1);
|
D2SetAnim(D2GetRealItem(ptItem),-1);
|
||||||
if (ptPrevItem) {
|
if (ptPrevItem) {
|
||||||
ptPrevItem->CurrentAnim = (DWORD)ptNextItem;//is ptPrevItem->nextNode = ptNextItem;
|
ptPrevItem->mode = (DWORD)ptNextItem;//is ptPrevItem->nextNode = ptNextItem;
|
||||||
} else {
|
} else {
|
||||||
ptInventory->currentUsedSocket = (DWORD)ptNextItem;//is ptInventory->ptListItem = ptNextItem;
|
ptInventory->currentUsedSocket = (DWORD)ptNextItem;//is ptInventory->ptListItem = ptNextItem;
|
||||||
}
|
}
|
||||||
@ -167,7 +171,7 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWO
|
|||||||
if (currentStash)
|
if (currentStash)
|
||||||
{
|
{
|
||||||
// ptItem = setNextItem(ptItem, PCPY->currentStash->ptListItem);
|
// ptItem = setNextItem(ptItem, PCPY->currentStash->ptListItem);
|
||||||
ptItem->CurrentAnim = (DWORD)currentStash->ptListItem;//is ptItem->nextNode = ptListItem
|
ptItem->mode = (DWORD)currentStash->ptListItem;//is ptItem->nextNode = ptListItem
|
||||||
currentStash->ptListItem = ptItem;
|
currentStash->ptListItem = ptItem;
|
||||||
};
|
};
|
||||||
} else ptPrevItem = ptItem;
|
} else ptPrevItem = ptItem;
|
||||||
@ -195,11 +199,11 @@ int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DW
|
|||||||
{
|
{
|
||||||
if (!newStash) return 0;
|
if (!newStash) return 0;
|
||||||
|
|
||||||
log_msg("changeToSelectedStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n",newStash->id,newStash->isShared, bOnlyItems,bIsClient);
|
|
||||||
|
|
||||||
Stash* currentStash = PCPY->currentStash;
|
Stash* currentStash = PCPY->currentStash;
|
||||||
if (currentStash == newStash) return 0;
|
if (currentStash == newStash) return 0;
|
||||||
|
|
||||||
|
log_msg("changeToSelectedStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n",newStash->id,newStash->isShared, bOnlyItems,bIsClient);
|
||||||
|
|
||||||
d2_assert( currentStash && currentStash->ptListItem, "ERROR : currentStash isn't empty (ptListItem != NULL)",__FILE__,__LINE__);
|
d2_assert( currentStash && currentStash->ptListItem, "ERROR : currentStash isn't empty (ptListItem != NULL)",__FILE__,__LINE__);
|
||||||
|
|
||||||
// Remove items from current page
|
// Remove items from current page
|
||||||
@ -276,42 +280,79 @@ DWORD loadStash(Unit* ptChar, Stash* ptStash, BYTE data[], DWORD startSize, DWOR
|
|||||||
// Read inventory.
|
// Read inventory.
|
||||||
DWORD ret = D2LoadInventory(PCGame, ptChar, (saveBitField*)&data[curSize], 0x60, maxSize-curSize, 0, &nbBytesRead);
|
DWORD ret = D2LoadInventory(PCGame, ptChar, (saveBitField*)&data[curSize], 0x60, maxSize-curSize, 0, &nbBytesRead);
|
||||||
if (ret) log_msg("loadStash -> D2LoadInventory failed\n");
|
if (ret) log_msg("loadStash -> D2LoadInventory failed\n");
|
||||||
log_msg("Stash loaded (%d : %s)\n", ptStash->id ,ptStash->name);
|
log_msg("Stash loaded (%d : %s)\n", ptStash->id, ptStash->name);
|
||||||
|
|
||||||
*retSize=curSize + nbBytesRead;
|
*retSize=curSize + nbBytesRead;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD loadStashList(Unit* ptChar, BYTE* data, DWORD maxSize, DWORD* curSize, bool isShared)//WORKS
|
void autoSetIndex(Stash* fistStash)
|
||||||
|
{
|
||||||
|
if (!fistStash)
|
||||||
|
return;
|
||||||
|
Stash* stash = fistStash;
|
||||||
|
while (stash)
|
||||||
|
{
|
||||||
|
if (stash->isIndex || stash->isMainIndex)
|
||||||
|
return;
|
||||||
|
stash = stash->nextStash;
|
||||||
|
}
|
||||||
|
stash = fistStash;
|
||||||
|
stash->isIndex = 1;
|
||||||
|
stash = stash->nextStash;
|
||||||
|
while (stash)
|
||||||
|
{
|
||||||
|
stash->isIndex = ((stash->id + 1) % nbPagesPerIndex) == 0;
|
||||||
|
stash->isMainIndex = ((stash->id + 1) % nbPagesPerIndex2) == 0;
|
||||||
|
stash = stash->nextStash;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD loadStashList(Unit* ptChar, BYTE* data, DWORD maxSize, DWORD* curSize, bool isShared)
|
||||||
{
|
{
|
||||||
DWORD curStash = 0;
|
DWORD curStash = 0;
|
||||||
Stash* newStash;
|
Stash* newStash = NULL;
|
||||||
|
|
||||||
DWORD nbStash = *(DWORD*)&data[*curSize];
|
DWORD nbStash = *(DWORD*)&data[*curSize];
|
||||||
*curSize += 4;
|
*curSize += 4;
|
||||||
|
|
||||||
log_msg("loadStashList\n\nnbStash = %d\n\n", nbStash);
|
log_msg("loadStashList nbStash=%d\n", nbStash);
|
||||||
|
|
||||||
while (curStash < nbStash)
|
while (curStash < nbStash)
|
||||||
{
|
{
|
||||||
newStash = addStash(ptChar, isShared);
|
newStash = addStash(ptChar, isShared, false, newStash);
|
||||||
changeToSelectedStash(ptChar, newStash, 0, false);
|
changeToSelectedStash(ptChar, newStash, 0, false);
|
||||||
DWORD ret = loadStash(ptChar, newStash, data, *curSize, 10000000, curSize);
|
DWORD ret = loadStash(ptChar, newStash, data, *curSize, 10000000, curSize);
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
curStash++;
|
curStash++;
|
||||||
}
|
}
|
||||||
|
if (nbStash <2)
|
||||||
if (!isShared && !PCPY->selfStash)
|
|
||||||
{
|
{
|
||||||
newStash = addStash(ptChar, isShared);
|
newStash = addStash(ptChar, isShared, false, newStash);
|
||||||
PCPY->currentStash = newStash;
|
changeToSelectedStash(ptChar, newStash, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isShared && !PCPY->sharedStash)
|
if (!isShared)
|
||||||
{
|
{
|
||||||
newStash = addStash(ptChar, isShared);
|
if (PCPY->selfStash)
|
||||||
if (!PCPY->currentStash)
|
autoSetIndex(PCPY->selfStash);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newStash = addStash(ptChar, isShared, true, newStash);
|
||||||
PCPY->currentStash = newStash;
|
PCPY->currentStash = newStash;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isShared)
|
||||||
|
{
|
||||||
|
if (PCPY->sharedStash)
|
||||||
|
autoSetIndex(PCPY->sharedStash);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newStash = addStash(ptChar, isShared, true, newStash);
|
||||||
|
if (!PCPY->currentStash)
|
||||||
|
PCPY->currentStash = newStash;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -335,7 +376,7 @@ void saveStash(Unit* ptChar, Stash* ptStash, BYTE** data, DWORD* maxSize, DWORD*
|
|||||||
if (ptStash->name)
|
if (ptStash->name)
|
||||||
{
|
{
|
||||||
int size = strlen(ptStash->name);
|
int size = strlen(ptStash->name);
|
||||||
if (size > 15) size = 15;
|
if (size > 20) size = 20;
|
||||||
strncpy((char*)DATA, ptStash->name, size);
|
strncpy((char*)DATA, ptStash->name, size);
|
||||||
*curSize += size;
|
*curSize += size;
|
||||||
}
|
}
|
||||||
@ -396,7 +437,7 @@ void saveStashList(Unit* ptChar, Stash* ptStash, BYTE** data, DWORD* maxSize, DW
|
|||||||
}
|
}
|
||||||
|
|
||||||
/////// client
|
/////// client
|
||||||
void updateSelectedStashClient(Unit* ptChar)//WORKS
|
void updateSelectedStashClient(Unit* ptChar)
|
||||||
{
|
{
|
||||||
Stash* newStash = PCPY->currentStash;
|
Stash* newStash = PCPY->currentStash;
|
||||||
if (!newStash)
|
if (!newStash)
|
||||||
@ -405,13 +446,13 @@ void updateSelectedStashClient(Unit* ptChar)//WORKS
|
|||||||
updateClient(ptChar, UC_PAGE_NAME, newStash->name);
|
updateClient(ptChar, UC_PAGE_NAME, newStash->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags, bool bOnlyItems)//WORKS
|
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags, bool bOnlyItems)
|
||||||
{
|
{
|
||||||
log_msg("setSelectedStashClient ID:%d, stashFlags:%d, flags:%08X\n", stashId, stashFlags, flags);
|
log_msg("setSelectedStashClient ID:%d, stashFlags:%d, flags:%08X\n", stashId, stashFlags, flags);
|
||||||
Unit* ptChar = D2GetClientPlayer();
|
Unit* ptChar = D2GetClientPlayer();
|
||||||
Stash* newStash = getStash(ptChar, (stashFlags & 1) == 1, stashId);
|
Stash* newStash = getStash(ptChar, (stashFlags & 1) == 1, stashId);
|
||||||
if (!newStash) do
|
if (!newStash) do
|
||||||
newStash = addStash(ptChar, (stashFlags & 1) == 1);
|
newStash = addStash(ptChar, (stashFlags & 1) == 1, true, newStash);
|
||||||
while (newStash->id < stashId);
|
while (newStash->id < stashId);
|
||||||
newStash->flags = stashFlags;
|
newStash->flags = stashFlags;
|
||||||
changeToSelectedStash(ptChar, newStash, bOnlyItems, 1);
|
changeToSelectedStash(ptChar, newStash, bOnlyItems, 1);
|
||||||
@ -419,10 +460,13 @@ void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags, bool b
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void selectStash(Unit* ptChar, Stash* newStash)
|
void selectStash(Unit* ptChar, Stash* newStash, bool forceUpdate)
|
||||||
{
|
{
|
||||||
if (!newStash)
|
if (!newStash)
|
||||||
return;
|
return;
|
||||||
|
if (!forceUpdate && newStash == PCPY->currentStash)
|
||||||
|
return;
|
||||||
|
log_msg("selectStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n", newStash->id, newStash->isShared, 0, 0);
|
||||||
changeToSelectedStash(ptChar, newStash, 0, 0);
|
changeToSelectedStash(ptChar, newStash, 0, 0);
|
||||||
updateSelectedStashClient(ptChar);
|
updateSelectedStashClient(ptChar);
|
||||||
}
|
}
|
||||||
@ -452,6 +496,7 @@ void toggleToSharedStash(Unit* ptChar)
|
|||||||
|
|
||||||
void swapStash(Unit* ptChar, Stash* curStash, Stash* swpStash)
|
void swapStash(Unit* ptChar, Stash* curStash, Stash* swpStash)
|
||||||
{
|
{
|
||||||
|
log_msg("swapStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n", swpStash->id, swpStash->isShared, 1, 0);
|
||||||
if (!ptChar || !curStash || !swpStash || curStash == swpStash)
|
if (!ptChar || !curStash || !swpStash || curStash == swpStash)
|
||||||
return;
|
return;
|
||||||
changeToSelectedStash(ptChar, swpStash, 1, 0);
|
changeToSelectedStash(ptChar, swpStash, 1, 0);
|
||||||
@ -468,13 +513,16 @@ void toggleStash(Unit* ptChar, DWORD page)
|
|||||||
|
|
||||||
void swapStash(Unit* ptChar, DWORD page, bool toggle)
|
void swapStash(Unit* ptChar, DWORD page, bool toggle)
|
||||||
{
|
{
|
||||||
log_msg("swap stash page = %u\n", page);
|
log_msg("swap stash page = %u, toggle=%u\n", page, toggle);
|
||||||
Stash* curStash = PCPY->currentStash;
|
Stash* curStash = PCPY->currentStash;
|
||||||
Stash* swpStash = curStash->isShared == toggle ? PCPY->selfStash : PCPY->sharedStash;
|
Stash* swpStash = curStash->isShared == toggle ? PCPY->selfStash : PCPY->sharedStash;
|
||||||
|
if (!swpStash)
|
||||||
|
swpStash = addStash(ptChar, !curStash->isShared, true, swpStash);
|
||||||
for (DWORD i = 0; i < page; i++)
|
for (DWORD i = 0; i < page; i++)
|
||||||
{
|
{
|
||||||
if (curStash->nextStash == NULL)
|
log_msg("swap stash : %i\n", i);
|
||||||
addStash(ptChar, swpStash->isShared);
|
if (swpStash->nextStash == NULL)
|
||||||
|
addStash(ptChar, swpStash->isShared, true, swpStash);
|
||||||
swpStash = swpStash->nextStash;
|
swpStash = swpStash->nextStash;
|
||||||
}
|
}
|
||||||
swapStash(ptChar, curStash, swpStash);
|
swapStash(ptChar, curStash, swpStash);
|
||||||
@ -483,8 +531,8 @@ void swapStash(Unit* ptChar, DWORD page, bool toggle)
|
|||||||
void insertStash(Unit* ptChar)
|
void insertStash(Unit* ptChar)
|
||||||
{
|
{
|
||||||
Stash* curStash = PCPY->currentStash;
|
Stash* curStash = PCPY->currentStash;
|
||||||
Stash* stash = addStash(ptChar, curStash->isShared);
|
Stash* stash = addStash(ptChar, curStash->isShared, false, curStash);
|
||||||
while (stash->previousStash != curStash)
|
while (stash->previousStash != curStash)
|
||||||
{
|
{
|
||||||
stash->flags = stash->previousStash->flags;
|
stash->flags = stash->previousStash->flags;
|
||||||
stash->name = stash->previousStash->name;
|
stash->name = stash->previousStash->name;
|
||||||
@ -513,7 +561,10 @@ bool deleteStash(Unit* ptChar, bool isClient)
|
|||||||
stash->flags = stash->nextStash->flags;
|
stash->flags = stash->nextStash->flags;
|
||||||
stash->name = stash->nextStash->name;
|
stash->name = stash->nextStash->name;
|
||||||
if (stash->nextStash->ptListItem != NULL)
|
if (stash->nextStash->ptListItem != NULL)
|
||||||
|
{
|
||||||
|
log_msg("deleteStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n", stash->id, stash->isShared, 1, isClient);
|
||||||
changeToSelectedStash(ptChar, stash->nextStash, 1, isClient);
|
changeToSelectedStash(ptChar, stash->nextStash, 1, isClient);
|
||||||
|
}
|
||||||
stash = stash->nextStash;
|
stash = stash->nextStash;
|
||||||
while (stash->nextStash)
|
while (stash->nextStash)
|
||||||
{
|
{
|
||||||
@ -532,15 +583,13 @@ bool deleteStash(Unit* ptChar, bool isClient)
|
|||||||
|
|
||||||
void renameCurrentStash(Unit* ptChar, char* name)
|
void renameCurrentStash(Unit* ptChar, char* name)
|
||||||
{
|
{
|
||||||
log_msg("renameCurrentStash : %08X, %s\n", ptChar, name);
|
log_msg("renameCurrentStash : '%s'\n", name);
|
||||||
Stash* stash = PCPY->currentStash;
|
Stash* stash = PCPY->currentStash;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
if (name != NULL)
|
if (name != NULL)
|
||||||
len = strlen(name);
|
len = strlen(name);
|
||||||
log_msg("renameCurrentStash : %d\n", len);
|
|
||||||
if (stash->name)
|
if (stash->name)
|
||||||
D2FogMemDeAlloc(stash->name, __FILE__, __LINE__, 0);
|
D2FogMemDeAlloc(stash->name, __FILE__, __LINE__, 0);
|
||||||
log_msg("renameCurrentStash 3\n");
|
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
{
|
{
|
||||||
stash->name = (char *)malloc(len + 1);//D2FogMemAlloc(len,__FILE__,__LINE__,0);
|
stash->name = (char *)malloc(len + 1);//D2FogMemAlloc(len,__FILE__,__LINE__,0);
|
||||||
@ -548,7 +597,6 @@ void renameCurrentStash(Unit* ptChar, char* name)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
stash->name = NULL;
|
stash->name = NULL;
|
||||||
log_msg("renameCurrentStash 4\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -583,7 +631,7 @@ void selectNextStash(Unit* ptChar)
|
|||||||
if (!selStash->isShared && (selStash->id >= maxSelfPages)) return;
|
if (!selStash->isShared && (selStash->id >= maxSelfPages)) return;
|
||||||
if (selStash->isShared && (selStash->id >= maxSharedPages)) return;
|
if (selStash->isShared && (selStash->id >= maxSharedPages)) return;
|
||||||
|
|
||||||
selStash = selStash->nextStash ? selStash->nextStash : addStash(ptChar, PCPY->showSharedStash);
|
selStash = selStash->nextStash ? selStash->nextStash : addStash(ptChar, PCPY->showSharedStash, true, selStash);
|
||||||
|
|
||||||
if (selStash && (selStash != PCPY->currentStash))
|
if (selStash && (selStash != PCPY->currentStash))
|
||||||
selectStash(ptChar, selStash);
|
selectStash(ptChar, selStash);
|
||||||
@ -656,7 +704,7 @@ void selectNextIndexStash(Unit* ptChar)
|
|||||||
{
|
{
|
||||||
if (!selStash->isShared && (selStash->id >= maxSelfPages)) break;
|
if (!selStash->isShared && (selStash->id >= maxSelfPages)) break;
|
||||||
if (selStash->isShared && (selStash->id >= maxSharedPages)) break;
|
if (selStash->isShared && (selStash->id >= maxSharedPages)) break;
|
||||||
selStash = selStash->nextStash ? selStash->nextStash : addStash(ptChar, PCPY->showSharedStash);;
|
selStash = selStash->nextStash ? selStash->nextStash : addStash(ptChar, PCPY->showSharedStash, true, selStash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (selStash && (selStash != PCPY->currentStash))
|
if (selStash && (selStash != PCPY->currentStash))
|
||||||
@ -677,13 +725,132 @@ void selectNextIndex2Stash(Unit* ptChar)
|
|||||||
{
|
{
|
||||||
if (!selStash->isShared && (selStash->id >= maxSelfPages)) break;
|
if (!selStash->isShared && (selStash->id >= maxSelfPages)) break;
|
||||||
if (selStash->isShared && (selStash->id >= maxSharedPages)) break;
|
if (selStash->isShared && (selStash->id >= maxSharedPages)) break;
|
||||||
selStash = selStash->nextStash ? selStash->nextStash : addStash(ptChar, PCPY->showSharedStash);;
|
selStash = selStash->nextStash ? selStash->nextStash : addStash(ptChar, PCPY->showSharedStash, true, selStash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (selStash && (selStash != PCPY->currentStash))
|
if (selStash && (selStash != PCPY->currentStash))
|
||||||
selectStash(ptChar, selStash);
|
selectStash(ptChar, selStash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WCHAR* getDefaultStashName(Unit* ptChar)
|
||||||
|
{
|
||||||
|
if (!autoRenameStashPage)
|
||||||
|
return getLocalString( PCPY->currentStash->isShared ? STR_SHARED_PAGE_NUMBER : STR_PERSONAL_PAGE_NUMBER);
|
||||||
|
|
||||||
|
int onlyOneUnique = -1;
|
||||||
|
int uniqueNameIndex = -1;
|
||||||
|
int onlyOneSet = -1;
|
||||||
|
int setNameIndex = -1;
|
||||||
|
int onlyOneMisc = -1;
|
||||||
|
int miscNameIndex = -1;
|
||||||
|
|
||||||
|
Unit* ptItem = D2InventoryGetFirstItem(PCInventory);
|
||||||
|
int nb = 0;
|
||||||
|
while (ptItem)
|
||||||
|
{
|
||||||
|
if (D2ItemGetPage(ptItem) == 4)
|
||||||
|
{
|
||||||
|
if (onlyOneUnique != 0)
|
||||||
|
{
|
||||||
|
if (ptItem->ptItemData->quality != ITEMQUALITY_UNIQUE)
|
||||||
|
{
|
||||||
|
onlyOneUnique = 0;
|
||||||
|
uniqueNameIndex = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int uniqueId = D2GetUniqueID(ptItem);
|
||||||
|
UniqueItemsBIN* uniqueBIN = SgptDataTables->uniqueItems + uniqueId;
|
||||||
|
if (onlyOneUnique < 0)
|
||||||
|
{
|
||||||
|
onlyOneUnique = 1;
|
||||||
|
uniqueNameIndex = uniqueBIN->uniqueNameId;
|
||||||
|
}
|
||||||
|
else if (setNameIndex != uniqueBIN->uniqueNameId)
|
||||||
|
{
|
||||||
|
onlyOneUnique = 0;
|
||||||
|
uniqueNameIndex = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onlyOneSet != 0)
|
||||||
|
{
|
||||||
|
if (ptItem->ptItemData->quality != ITEMQUALITY_SET)
|
||||||
|
{
|
||||||
|
onlyOneSet = 0;
|
||||||
|
setNameIndex = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int uniqueID = ptItem->ptItemData->uniqueID;
|
||||||
|
SetItemsBIN* itemBIN = &SgptDataTables->setItems[uniqueID];
|
||||||
|
SetsBIN* setBIN = &SgptDataTables->sets[itemBIN->setId];
|
||||||
|
|
||||||
|
if (onlyOneSet < 0)
|
||||||
|
{
|
||||||
|
onlyOneSet = 1;
|
||||||
|
setNameIndex = setBIN->setNameIndex;
|
||||||
|
}
|
||||||
|
else if (setNameIndex != setBIN->setNameIndex)
|
||||||
|
{
|
||||||
|
onlyOneSet = 0;
|
||||||
|
setNameIndex = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onlyOneMisc != 0)
|
||||||
|
{
|
||||||
|
if (ptItem->ptItemData->quality != ITEMQUALITY_NORMAL)
|
||||||
|
{
|
||||||
|
onlyOneMisc = 0;
|
||||||
|
miscNameIndex = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ItemsBIN* ptItemsBin = D2GetItemsBIN(ptItem->nTxtFileNo);
|
||||||
|
if (onlyOneMisc < 0)
|
||||||
|
{
|
||||||
|
onlyOneMisc = 1;
|
||||||
|
miscNameIndex = ptItemsBin->NameStr;
|
||||||
|
}
|
||||||
|
else if (miscNameIndex != ptItemsBin->NameStr)
|
||||||
|
{
|
||||||
|
onlyOneMisc = 0;
|
||||||
|
miscNameIndex = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ptItem = D2UnitGetNextItem(ptItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onlyOneUnique == 1 && uniqueNameIndex >= 0)
|
||||||
|
return StripGender(D2GetStringFromIndex(uniqueNameIndex));
|
||||||
|
if (onlyOneSet == 1 && setNameIndex >= 0)
|
||||||
|
return StripGender(D2GetStringFromIndex(setNameIndex));
|
||||||
|
if (onlyOneMisc == 1 && miscNameIndex >= 0)
|
||||||
|
return StripGender(D2GetStringFromIndex(miscNameIndex));
|
||||||
|
|
||||||
|
return getLocalString( PCPY->currentStash->isShared ? STR_SHARED_PAGE_NUMBER : STR_PERSONAL_PAGE_NUMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
void getCurrentStashName(WCHAR* buffer, DWORD maxSize, Unit* ptChar)
|
||||||
|
{
|
||||||
|
if (PCPY->currentStash->name && PCPY->currentStash->name[0])
|
||||||
|
{
|
||||||
|
mbstowcs(buffer, PCPY->currentStash->name, maxSize - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wcsncpy(buffer, getDefaultStashName(ptChar), maxSize - 1);;
|
||||||
|
}
|
||||||
|
buffer[20] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
Stash* curStash2;
|
Stash* curStash2;
|
||||||
DWORD currentSawStash2;
|
DWORD currentSawStash2;
|
||||||
@ -749,7 +916,7 @@ DWORD STDCALL carry1Limit(Unit* ptChar, Unit* ptItemParam, DWORD itemNum, BYTE p
|
|||||||
{
|
{
|
||||||
if (!ptChar) return 0;
|
if (!ptChar) return 0;
|
||||||
Unit* ptItem = ptItemParam ? ptItemParam : D2GameGetObject(PCGame, UNIT_ITEM, itemNum);
|
Unit* ptItem = ptItemParam ? ptItemParam : D2GameGetObject(PCGame, UNIT_ITEM, itemNum);
|
||||||
if ((page != 4) && (D2GetItemQuality(ptItem) == 7) && ptChar)
|
if ((page != 4) && (D2GetItemQuality(ptItem) == ITEMQUALITY_UNIQUE) && ptChar)
|
||||||
{
|
{
|
||||||
int uniqueID = D2GetUniqueID(ptItem);
|
int uniqueID = D2GetUniqueID(ptItem);
|
||||||
if ((uniqueID>=0) && (uniqueID < (int)SgptDataTables->nbUniqueItems))
|
if ((uniqueID>=0) && (uniqueID < (int)SgptDataTables->nbUniqueItems))
|
||||||
@ -767,24 +934,24 @@ DWORD STDCALL carry1Limit(Unit* ptChar, Unit* ptItemParam, DWORD itemNum, BYTE p
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_carry1Limit_114 )
|
FCT_ASM ( caller_carry1Limit_114 )
|
||||||
PUSH DWORD PTR SS : [ESP + 0x08]//page
|
PUSH DWORD PTR SS:[ESP+0x08]//page
|
||||||
PUSH 0//EDI
|
PUSH 0//EDI
|
||||||
PUSH DWORD PTR SS : [ESP + 0x0C]
|
PUSH DWORD PTR SS:[ESP+0x0C]
|
||||||
PUSH ESI//ptChar
|
PUSH ESI//ptChar
|
||||||
CALL carry1Limit
|
CALL carry1Limit
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JNZ end_carry1Limit
|
JNZ end_carry1Limit
|
||||||
JMP D2ItemSetPage
|
JMP D2ItemSetPage
|
||||||
end_carry1Limit :
|
end_carry1Limit:
|
||||||
ADD ESP, 0x10
|
ADD ESP,0xC
|
||||||
XOR EAX, EAX
|
XOR EAX,EAX
|
||||||
POP EDI
|
POP EDI
|
||||||
POP EBX
|
POP EBX
|
||||||
POP ESI
|
POP ESI
|
||||||
MOV ESP, EBP
|
MOV ESP,EBP
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN 8
|
RETN 8
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_carry1Limit_111 )
|
FCT_ASM ( caller_carry1Limit_111 )
|
||||||
@ -826,24 +993,24 @@ end_carry1Limit:
|
|||||||
RETN 8
|
RETN 8
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_carry1LimitSwap_114 )
|
FCT_ASM ( caller_carry1LimitSwap_114 )
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
PUSH DWORD PTR SS : [ESP + 0x20]
|
PUSH DWORD PTR SS:[ESP+0x20]
|
||||||
PUSH 0
|
PUSH 0
|
||||||
PUSH EDI//ptChar
|
PUSH EDI//ptChar
|
||||||
CALL carry1Limit
|
CALL carry1Limit
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JNZ end_carry1Limit
|
JNZ end_carry1Limit
|
||||||
JMP D2ItemGetPage
|
JMP D2ItemGetPage
|
||||||
end_carry1Limit :
|
end_carry1Limit:
|
||||||
ADD ESP, 8
|
ADD ESP,8
|
||||||
XOR EAX, EAX
|
XOR EAX,EAX
|
||||||
POP EBX
|
POP EBX
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
MOV ESP, EBP
|
MOV ESP, EBP
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN 8
|
RETN 8
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_carry1LimitSwap_112 )
|
FCT_ASM ( caller_carry1LimitSwap_112 )
|
||||||
@ -923,18 +1090,18 @@ END_carry1LimitWhenDrop:
|
|||||||
RETN
|
RETN
|
||||||
}}*/
|
}}*/
|
||||||
|
|
||||||
FCT_ASM( caller_carry1LimitWhenDrop_114 )
|
FCT_ASM ( caller_carry1LimitWhenDrop_114 )
|
||||||
PUSH 0
|
PUSH 0
|
||||||
PUSH 0
|
PUSH 0
|
||||||
PUSH DWORD PTR SS : [ESP + 0x10] //ptItem
|
PUSH DWORD PTR SS:[ESP+0x10] //ptItem
|
||||||
PUSH EBX //ptChar
|
PUSH EBX //ptChar
|
||||||
CALL carry1Limit
|
CALL carry1Limit
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JNZ end_carry1Limit
|
JNZ end_carry1Limit
|
||||||
JMP D2CanPutItemInInv
|
JMP D2CanPutItemInInv
|
||||||
end_carry1Limit :
|
end_carry1Limit:
|
||||||
XOR EAX, EAX
|
XOR EAX,EAX
|
||||||
RETN 0x1C
|
RETN 0x1C
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_carry1LimitWhenDrop_111 )
|
FCT_ASM ( caller_carry1LimitWhenDrop_111 )
|
||||||
@ -982,17 +1149,17 @@ END_carry1LimitWhenDrop:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_carry1OutOfStash_114 )
|
FCT_ASM ( caller_carry1OutOfStash_114 )
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
CALL D2ItemGetPage
|
CALL D2ItemGetPage
|
||||||
CMP AL, 4
|
CMP AL,4
|
||||||
JNZ continue_carry1OutOfStash
|
JNZ continue_carry1OutOfStash
|
||||||
SUB DWORD PTR SS : [ESP], 0xC
|
SUB DWORD PTR SS:[ESP],0xC
|
||||||
RETN
|
RETN
|
||||||
continue_carry1OutOfStash :
|
continue_carry1OutOfStash:
|
||||||
MOV EDI, DWORD PTR SS : [EBP - 0x4]
|
MOV EDI,DWORD PTR SS:[EBP-4]
|
||||||
TEST EDI, EDI
|
TEST EDI,EDI
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_carry1OutOfStash_111 )
|
FCT_ASM ( caller_carry1OutOfStash_111 )
|
||||||
@ -1038,46 +1205,37 @@ void Install_MultiPageStash()
|
|||||||
|
|
||||||
// Cannot put 2 items carry1 in inventory
|
// Cannot put 2 items carry1 in inventory
|
||||||
mem_seek R8(D2Game, 0000, 0000, 55050, 57CA3, 2FE63, 99B03, CF1E3, 6B013, 14AC7F);
|
mem_seek R8(D2Game, 0000, 0000, 55050, 57CA3, 2FE63, 99B03, CF1E3, 6B013, 14AC7F);
|
||||||
if (version_D2Game == V114d) {
|
MEMJ_REF4( D2ItemSetPage , version_D2Game >= V114d ? caller_carry1Limit_114 : version_D2Game >= V111 ? caller_carry1Limit_111 : caller_carry1Limit);
|
||||||
MEMT_REF4(0x000DD5FD, caller_carry1Limit_114);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2ItemSetPage, version_D2Game >= V111 ? caller_carry1Limit_111 : caller_carry1Limit);
|
|
||||||
}
|
|
||||||
//6FC8504F . E8 94670900 CALL <JMP.&D2Common.#10720>
|
//6FC8504F . E8 94670900 CALL <JMP.&D2Common.#10720>
|
||||||
//01FD7CA2 . E8 6329FBFF CALL <JMP.&D2Common.#10485>
|
//01FD7CA2 . E8 6329FBFF CALL <JMP.&D2Common.#10485>
|
||||||
//01F9FE62 . E8 47A8FDFF CALL <JMP.&D2Common.#10608>
|
//01F9FE62 . E8 47A8FDFF CALL <JMP.&D2Common.#10608>
|
||||||
//6FCB9B02 . E8 9709F7FF CALL <JMP.&D2Common.#10223>
|
//6FCB9B02 . E8 9709F7FF CALL <JMP.&D2Common.#10223>
|
||||||
//6FCEF1E2 . E8 47B7F3FF CALL <JMP.&D2Common.#10012>
|
//6FCEF1E2 . E8 47B7F3FF CALL <JMP.&D2Common.#10012>
|
||||||
//6FC8B012 . E8 13F7F9FF CALL <JMP.&D2Common.#11026>
|
//6FC8B012 . E8 13F7F9FF CALL <JMP.&D2Common.#11026>
|
||||||
|
//0054AC7E |. E8 FDD50D00 CALL Game.00628280 ; \Game.00628280
|
||||||
|
|
||||||
// Cannot put 2 items carry1 in inventory by swapping
|
// Cannot put 2 items carry1 in inventory by swapping
|
||||||
mem_seek R8(D2Game, 0000, 0000, 558D9, 58968, 310E8, 9B6E8, D10C8, 6BC78, 14B179);
|
mem_seek R8(D2Game, 0000, 0000, 558D9, 58968, 310E8, 9B6E8, D10C8, 6BC78, 14B179);
|
||||||
if (version_D2Game == V114d) {
|
MEMJ_REF4( D2ItemGetPage , version_D2Game >= V114d ? caller_carry1LimitSwap_114 : version_D2Game >= V112 ? caller_carry1LimitSwap_112 : version_D2Game >= V111 ? caller_carry1LimitSwap_111 : caller_carry1LimitSwap);
|
||||||
MEMT_REF4(0x000DD0D3, caller_carry1LimitSwap_114);
|
//6FC858D8 . E8 175F0900 CALL <JMP.&D2Common.#10719>
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2ItemGetPage, version_D2Game >= V112 ? caller_carry1LimitSwap_112 : version_D2Game >= V111 ? caller_carry1LimitSwap_111 : caller_carry1LimitSwap);
|
|
||||||
}
|
|
||||||
//6FC858D8 . E8 175F0900 CALL <JMP.&D2Common.#10719>
|
|
||||||
//01FD8967 . E8 8E1DFBFF CALL <JMP.&D2Common.#10820>
|
//01FD8967 . E8 8E1DFBFF CALL <JMP.&D2Common.#10820>
|
||||||
//01FA10E7 . E8 9A96FDFF CALL <JMP.&D2Common.#10505>
|
//01FA10E7 . E8 9A96FDFF CALL <JMP.&D2Common.#10505>
|
||||||
//6FCBB6E7 . E8 CAEDF6FF CALL <JMP.&D2Common.#10370>
|
//6FCBB6E7 . E8 CAEDF6FF CALL <JMP.&D2Common.#10370>
|
||||||
//6FCF10C7 . E8 F895F3FF CALL <JMP.&D2Common.#10020>
|
//6FCF10C7 . E8 F895F3FF CALL <JMP.&D2Common.#10020>
|
||||||
//6FC8BC77 . E8 22E9F9FF CALL <JMP.&D2Common.#10810>
|
//6FC8BC77 . E8 22E9F9FF CALL <JMP.&D2Common.#10810>
|
||||||
|
//0054B178 |. E8 D3D00D00 CALL Game.00628250 ; \Game.00628250
|
||||||
|
|
||||||
if ( version_D2Game >= V111 )
|
if ( version_D2Game >= V111 )
|
||||||
{
|
{
|
||||||
// Cannot put 2 items carry1 in inventory when drop cube
|
// Cannot put 2 items carry1 in inventory when drop cube
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, 3D935, 49FD5, 17AD5, D7B75, B7B15, 163A89);
|
mem_seek R8(D2Game, 0000, 0000, 0000, 3D935, 49FD5, 17AD5, D7B75, B7B15, 163A89);
|
||||||
if (version_D2Game == V114d) {
|
MEMJ_REF4( D2CanPutItemInInv , version_D2Game >= V114d ? caller_carry1LimitWhenDrop_114 : caller_carry1LimitWhenDrop_111);
|
||||||
MEMT_REF4(0x000D7EC3, caller_carry1LimitWhenDrop_114);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2CanPutItemInInv, caller_carry1LimitWhenDrop_111);
|
|
||||||
}
|
|
||||||
//01FBD934 |. E8 5BD3FCFF |CALL <JMP.&D2Common.#10855>
|
//01FBD934 |. E8 5BD3FCFF |CALL <JMP.&D2Common.#10855>
|
||||||
//01FB9FD4 |. E8 3912FCFF |CALL <JMP.&D2Common.#10813>
|
//01FB9FD4 |. E8 3912FCFF |CALL <JMP.&D2Common.#10813>
|
||||||
//6FC37AD4 |. E8 0535FFFF |CALL <JMP.&D2Common.#10289>
|
//6FC37AD4 |. E8 0535FFFF |CALL <JMP.&D2Common.#10289>
|
||||||
//6FCF7B74 |. E8 232FF3FF |CALL <JMP.&D2Common.#10133>
|
//6FCF7B74 |. E8 232FF3FF |CALL <JMP.&D2Common.#10133>
|
||||||
//6FCD7B14 |. E8 7D32F5FF |CALL <JMP.&D2Common.#10402>
|
//6FCD7B14 |. E8 7D32F5FF |CALL <JMP.&D2Common.#10402>
|
||||||
|
//00563A88 . E8 C37E0D00 CALL Game.0063B950 ; \Game.0063B950
|
||||||
} else {
|
} else {
|
||||||
// Cannot put 2 items carry1 in inventory when drop cube
|
// Cannot put 2 items carry1 in inventory when drop cube
|
||||||
mem_seek R8(D2Game, 0000, 0000, 14341, 0000, 0000, 0000, 0000, 0000, 0000);
|
mem_seek R8(D2Game, 0000, 0000, 14341, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||||
@ -1088,15 +1246,10 @@ void Install_MultiPageStash()
|
|||||||
|
|
||||||
// Verif only carry1 out of stash page when pick up an item
|
// Verif only carry1 out of stash page when pick up an item
|
||||||
mem_seek R8(D2Game, 0000, 0000, 1299E, 38E3B, 43F0B, 1209B, D211B, B301B, 15CADD);
|
mem_seek R8(D2Game, 0000, 0000, 1299E, 38E3B, 43F0B, 1209B, D211B, B301B, 15CADD);
|
||||||
if (version_D2Game == V114d) {
|
memt_byte( 0x8B ,0xE8);
|
||||||
memt_byte(0x8B, 0xE8);
|
MEMT_REF4( version_D2Game >= V114d ? 0xFF85FC7D : version_D2Game >= V111 ? 0x850C2474 : 0x85102444 , version_D2Game >= V114d ? caller_carry1OutOfStash_114 : version_D2Game >= V111 ? caller_carry1OutOfStash_111 : caller_carry1OutOfStash);
|
||||||
MEMT_REF4(0xFF85FC7D, caller_carry1OutOfStash_114);
|
if (version_D2Game < V114d) memt_byte( version_D2Game >= V111 ? 0xF6 : 0xC0 ,0x90);
|
||||||
} else {
|
//6FC4299E |. 8B4424 10 |MOV EAX,DWORD PTR SS:[ESP+10]
|
||||||
memt_byte(0x8B, 0xE8);
|
|
||||||
MEMT_REF4(version_D2Game >= V111 ? 0x850C2474 : 0x85102444, version_D2Game >= V111 ? caller_carry1OutOfStash_111 : caller_carry1OutOfStash);
|
|
||||||
memt_byte(version_D2Game >= V111 ? 0xF6 : 0xC0, 0x90);
|
|
||||||
}
|
|
||||||
//6FC4299E |. 8B4424 10 |MOV EAX,DWORD PTR SS:[ESP+10]
|
|
||||||
//6FC429A2 |. 85C0 |TEST EAX,EAX
|
//6FC429A2 |. 85C0 |TEST EAX,EAX
|
||||||
//01FB8E3B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C]
|
//01FB8E3B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C]
|
||||||
//01FB8E3F |. 85F6 |TEST ESI,ESI
|
//01FB8E3F |. 85F6 |TEST ESI,ESI
|
||||||
@ -1108,6 +1261,8 @@ void Install_MultiPageStash()
|
|||||||
//6FCF211F |. 85F6 |TEST ESI,ESI
|
//6FCF211F |. 85F6 |TEST ESI,ESI
|
||||||
//6FCD301B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C]
|
//6FCD301B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C]
|
||||||
//6FCD301F |. 85F6 |TEST ESI,ESI
|
//6FCD301F |. 85F6 |TEST ESI,ESI
|
||||||
|
//0055CADD |> 8B7D FC |MOV EDI,DWORD PTR SS:[EBP-4]
|
||||||
|
//0055CAE0 |. 85FF |TEST EDI,EDI
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Interface functions
|
Interface functions
|
||||||
|
|
||||||
@ -16,7 +16,7 @@
|
|||||||
int posXUnassignSkillBtn=-1;
|
int posXUnassignSkillBtn=-1;
|
||||||
int posYUnassignSkillBtn=-1;
|
int posYUnassignSkillBtn=-1;
|
||||||
|
|
||||||
DWORD btnSkillIsDown;
|
DWORD btnSkillIsDown=0;
|
||||||
DWORD getXSkillBtn() {return RX(posXUnassignSkillBtn<0? 0x243 : posXUnassignSkillBtn);}
|
DWORD getXSkillBtn() {return RX(posXUnassignSkillBtn<0? 0x243 : posXUnassignSkillBtn);}
|
||||||
#define getLSkillBtn() 32
|
#define getLSkillBtn() 32
|
||||||
DWORD getYSkillBtn() {return RY(posYUnassignSkillBtn<0 ? 0x1B1 : posYUnassignSkillBtn);}
|
DWORD getYSkillBtn() {return RY(posYUnassignSkillBtn<0 ? 0x1B1 : posYUnassignSkillBtn);}
|
||||||
@ -29,7 +29,7 @@ void STDCALL printSkillsPageBtns()
|
|||||||
if (active_SkillsPoints && !onRealm && D2isLODGame())
|
if (active_SkillsPoints && !onRealm && D2isLODGame())
|
||||||
{
|
{
|
||||||
sDrawImageInfo data;
|
sDrawImageInfo data;
|
||||||
ZeroMemory(&data, sizeof(data));
|
ZeroMemory(&data,sizeof(data));
|
||||||
setImage(&data, unassignSkillsBtnImages);
|
setImage(&data, unassignSkillsBtnImages);
|
||||||
setFrame(&data, btnSkillIsDown);
|
setFrame(&data, btnSkillIsDown);
|
||||||
D2PrintImage(&data, getXSkillBtn(), getYSkillBtn(), -1, 5, 0);
|
D2PrintImage(&data, getXSkillBtn(), getYSkillBtn(), -1, 5, 0);
|
||||||
@ -45,9 +45,8 @@ void STDCALL printSkillsPageBtns()
|
|||||||
Unit* STDCALL skillsPageMouseDown(sWinMessage* msg)
|
Unit* STDCALL skillsPageMouseDown(sWinMessage* msg)
|
||||||
{
|
{
|
||||||
Unit* ptChar = D2GetClientPlayer();
|
Unit* ptChar = D2GetClientPlayer();
|
||||||
log_msg("push down left button\n");
|
|
||||||
log_msg("type=%u\nx=%u\ny=%u\n\n", msg->type, msg->x, msg->y);
|
if (active_SkillsPoints && !onRealm && D2isLODGame() && isOnButtonUnassignSkill(D2GetMouseX(),D2GetMouseY()))
|
||||||
if ( active_SkillsPoints && !onRealm && D2isLODGame() && isOnButtonUnassignSkill(D2GetMouseX(),D2GetMouseY()))
|
|
||||||
{
|
{
|
||||||
log_msg("push down left button unassign skill\n");
|
log_msg("push down left button unassign skill\n");
|
||||||
btnSkillIsDown = 1;
|
btnSkillIsDown = 1;
|
||||||
@ -61,8 +60,7 @@ Unit* STDCALL skillsPageMouseDown(sWinMessage* msg)
|
|||||||
|
|
||||||
void STDCALL skillsPageMouseUp()
|
void STDCALL skillsPageMouseUp()
|
||||||
{
|
{
|
||||||
log_msg("push up left button\n");
|
if (active_SkillsPoints && !onRealm && D2isLODGame() && isOnButtonUnassignSkill(D2GetMouseX(),D2GetMouseY()))
|
||||||
if ( active_SkillsPoints && !onRealm && D2isLODGame() && isOnButtonUnassignSkill(D2GetMouseX(),D2GetMouseY()))
|
|
||||||
{
|
{
|
||||||
log_msg("push up left button unassign skill\n");
|
log_msg("push up left button unassign skill\n");
|
||||||
if (btnSkillIsDown)
|
if (btnSkillIsDown)
|
||||||
@ -91,22 +89,22 @@ FCT_ASM ( caller_printSkillsPageBtns )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_DontPrintSkillPointsRemaining_114 )
|
FCT_ASM ( caller_DontPrintSkillPointsRemaining_114 )
|
||||||
MOV AL, BYTE PTR DS : [onRealm]
|
MOV AL,BYTE PTR DS:[onRealm]
|
||||||
TEST AL, AL
|
TEST AL,AL
|
||||||
JNZ dontPrint
|
JNZ dontPrint
|
||||||
ADD DWORD PTR SS : [ESP], 0x97
|
ADD DWORD PTR SS:[ESP],0x97
|
||||||
RETN
|
RETN
|
||||||
dontPrint :
|
dontPrint:
|
||||||
MOV ECX, 0x1083
|
MOV ECX,0x1083
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM(caller_DontPrintSkillPointsRemaining_111)
|
FCT_ASM ( caller_DontPrintSkillPointsRemaining_111 )
|
||||||
MOV AL, BYTE PTR DS : [onRealm]
|
MOV AL,BYTE PTR DS:[onRealm]
|
||||||
TEST AL, AL
|
TEST AL,AL
|
||||||
JNZ dontPrint
|
JNZ dontPrint
|
||||||
ADD DWORD PTR SS : [ESP], 0xF2
|
ADD DWORD PTR SS:[ESP],0xF2
|
||||||
RETN
|
RETN
|
||||||
dontPrint:
|
dontPrint:
|
||||||
MOV ECX,0x1083
|
MOV ECX,0x1083
|
||||||
@ -124,10 +122,10 @@ dontPrint:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_skillsPageMouseDown_114 )
|
FCT_ASM ( caller_skillsPageMouseDown_114 )
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
CALL skillsPageMouseDown
|
CALL skillsPageMouseDown
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_skillsPageMouseDown_111 )
|
FCT_ASM ( caller_skillsPageMouseDown_111 )
|
||||||
@ -188,6 +186,11 @@ void Install_InterfaceSkills()
|
|||||||
//6FADF382 |. 5B POP EBX
|
//6FADF382 |. 5B POP EBX
|
||||||
//6FADF383 \. C3 RETN
|
//6FADF383 \. C3 RETN
|
||||||
//6FADF384 CC INT3
|
//6FADF384 CC INT3
|
||||||
|
//004AB7A5 |> 5F POP EDI
|
||||||
|
//004AB7A6 |. 5E POP ESI
|
||||||
|
//004AB7A7 |. 5B POP EBX
|
||||||
|
//004AB7A8 \. C3 RETN
|
||||||
|
//004AB7A9 CC INT3
|
||||||
} else {
|
} else {
|
||||||
MEMT_REF4( 0x835B5D5E, caller_printSkillsPageBtns);
|
MEMT_REF4( 0x835B5D5E, caller_printSkillsPageBtns);
|
||||||
memt_byte( 0xC4, 0x90 ); // NOP
|
memt_byte( 0xC4, 0x90 ); // NOP
|
||||||
@ -206,42 +209,40 @@ void Install_InterfaceSkills()
|
|||||||
// Don't print "Skill Points Remaining"
|
// Don't print "Skill Points Remaining"
|
||||||
mem_seek R8(D2Client, 7AC30, 7AC30, 77080, 16294, 8AC74, 7ECF4, 78334, 2F7E4, AACE0);
|
mem_seek R8(D2Client, 7AC30, 7AC30, 77080, 16294, 8AC74, 7ECF4, 78334, 2F7E4, AACE0);
|
||||||
memt_byte( 0xB9, 0xE8 );
|
memt_byte( 0xB9, 0xE8 );
|
||||||
MEMT_REF4( 0x00001083, version_D2Client == V114d ? caller_DontPrintSkillPointsRemaining_114 : version_D2Client >= V111 ? caller_DontPrintSkillPointsRemaining_111 : caller_DontPrintSkillPointsRemaining);
|
MEMT_REF4( 0x00001083, version_D2Client >= V114d ? caller_DontPrintSkillPointsRemaining_114 : version_D2Client >= V111 ? caller_DontPrintSkillPointsRemaining_111 : caller_DontPrintSkillPointsRemaining);
|
||||||
//6FB17080 /$ B9 83100000 MOV ECX,1083
|
//6FB17080 /$ B9 83100000 MOV ECX,1083
|
||||||
//6FAC6294 |. B9 83100000 MOV ECX,1083
|
//6FAC6294 |. B9 83100000 MOV ECX,1083
|
||||||
//6FB3AC74 |. B9 83100000 MOV ECX,1083
|
//6FB3AC74 |. B9 83100000 MOV ECX,1083
|
||||||
//6FB2ECF4 |. B9 83100000 MOV ECX,1083
|
//6FB2ECF4 |. B9 83100000 MOV ECX,1083
|
||||||
//6FB28334 |. B9 83100000 MOV ECX,1083
|
//6FB28334 |. B9 83100000 MOV ECX,1083
|
||||||
//6FADF7E4 |. B9 83100000 MOV ECX,1083
|
//6FADF7E4 |. B9 83100000 MOV ECX,1083
|
||||||
|
//004AACE0 /$ B9 83100000 MOV ECX,1083
|
||||||
}
|
}
|
||||||
|
|
||||||
// Manage mouse down (Play sound)
|
// Manage mouse down (Play sound)
|
||||||
mem_seek R8(D2Client, 7BBD1, 7BBD1, 780E4, 17BC2, 8C6E2, 808B2, 79C62, 31112, ABC1A);
|
mem_seek R8(D2Client, 7BBD1, 7BBD1, 780E4, 17BC2, 8C6E2, 808B2, 79C62, 31112, ABC1A);
|
||||||
memt_byte(0xC7, 0xE8); // CALL caller_skillsPageMouseDown
|
memt_byte( 0xC7, 0xE8 ); // CALL caller_skillsPageMouseDown
|
||||||
MEMT_REF4(version_D2Client == V114d ? 0x00001846 : version_D2Client >= V111 ? 0x00001845 : 0x00001843, version_D2Client == V114d ? caller_skillsPageMouseDown_114 : version_D2Client >= V111 ? caller_skillsPageMouseDown_111 : caller_skillsPageMouseDown);
|
MEMT_REF4( version_D2Client >= V114d ? 0x00001846 : version_D2Client >= V111 ? 0x00001845 : 0x00001843, version_D2Client == V114d ? caller_skillsPageMouseDown_114 : version_D2Client >= V111 ? caller_skillsPageMouseDown_111 : caller_skillsPageMouseDown);
|
||||||
memt_byte(0x00, 0x90); // NOP
|
memt_byte( 0x00, 0x90 ); // NOP
|
||||||
memt_byte(0x00, 0x90); // NOP
|
memt_byte( 0x00, 0x90 ); // NOP
|
||||||
|
|
||||||
//6FB180E4 > C743 18 00000000 MOV DWORD PTR DS:[EBX+18],0
|
//6FB180E4 > C743 18 00000000 MOV DWORD PTR DS:[EBX+18],0
|
||||||
//6FAC7BC2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
//6FAC7BC2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||||
//6FB3C6E2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
//6FB3C6E2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||||
//6FB308B2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
//6FB308B2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||||
//6FB29C62 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
//6FB29C62 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||||
//6FAE1112 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
//6FAE1112 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||||
|
//004ABC1A |> C746 18 00000000 MOV DWORD PTR DS:[ESI+18],0
|
||||||
|
|
||||||
// Manage mouse up
|
// Manage mouse up
|
||||||
mem_seek R8(D2Client, 7BC40, 7BC40, 78466, 17558, 8C078, 80248, 795F8, 30AA8, ABC96/*ABE38*/);
|
mem_seek R8(D2Client, 7BC40, 7BC40, 78466, 17558, 8C078, 80248, 795F8, 30AA8, ABC96);
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2FreeWinMessage, caller_skillsPageMouseUp);//0xFFF93B0A
|
||||||
MEMT_REF4(/*0xFFFFFE45*/0xFFF745F6, caller_skillsPageMouseUp);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2FreeWinMessage, caller_skillsPageMouseUp);//0xFFF93B0A
|
|
||||||
}
|
|
||||||
//6FB18465 . E8 C07D0400 CALL <JMP.&Storm.#511>
|
//6FB18465 . E8 C07D0400 CALL <JMP.&Storm.#511>
|
||||||
//6FAC7557 .^E9 4248FFFF JMP <JMP.&Storm.#511>
|
//6FAC7557 .^E9 4248FFFF JMP <JMP.&Storm.#511>
|
||||||
//6FB3C077 .^E9 16FDF7FF JMP <JMP.&Storm.#511>
|
//6FB3C077 .^E9 16FDF7FF JMP <JMP.&Storm.#511>
|
||||||
//6FB30247 .^E9 2CBCF8FF JMP <JMP.&Storm.#511>
|
//6FB30247 .^E9 2CBCF8FF JMP <JMP.&Storm.#511>
|
||||||
//6FB295F7 .^E9 8828F9FF JMP <JMP.&Storm.#511>
|
//6FB295F7 .^E9 8828F9FF JMP <JMP.&Storm.#511>
|
||||||
//6FAE0AA7 .^E9 E0B2FDFF JMP <JMP.&Storm.#511>
|
//6FAE0AA7 .^E9 E0B2FDFF JMP <JMP.&Storm.#511>
|
||||||
|
//004ABC95 |. E8 F645F7FF CALL Game.00420290
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Interface stats page functions
|
Interface stats page functions
|
||||||
|
|
||||||
@ -26,73 +26,118 @@ static struct
|
|||||||
DWORD nextIndex:1;
|
DWORD nextIndex:1;
|
||||||
DWORD putGold:1;
|
DWORD putGold:1;
|
||||||
DWORD takeGold:1;
|
DWORD takeGold:1;
|
||||||
|
DWORD stashName:1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} isDownBtn;
|
} isDownBtn;
|
||||||
|
|
||||||
bool displaySharedSetItemNameInGreen = true;
|
bool displaySharedSetItemNameInGreen = true;
|
||||||
int posXPreviousBtn=-1;
|
int posXPreviousBtn = -1;
|
||||||
int posYPreviousBtn=-1;
|
int posYPreviousBtn = -1;
|
||||||
int posXNextBtn=-1;
|
int posWPreviousBtn = 32;
|
||||||
int posYNextBtn=-1;
|
int posHPreviousBtn = 32;
|
||||||
int posXSharedBtn=-1;
|
int posXNextBtn = -1;
|
||||||
int posYSharedBtn=-1;
|
int posYNextBtn = -1;
|
||||||
int posXPreviousIndexBtn=-1;
|
int posWNextBtn = 32;
|
||||||
int posYPreviousIndexBtn=-1;
|
int posHNextBtn = 32;
|
||||||
int posXNextIndexBtn=-1;
|
int posXSharedBtn = -1;
|
||||||
int posYNextIndexBtn=-1;
|
int posYSharedBtn = -1;
|
||||||
int posXPutGoldBtn=-1;
|
int posWSharedBtn = 32;
|
||||||
int posYPutGoldBtn=-1;
|
int posHSharedBtn = 32;
|
||||||
int posXTakeGoldBtn=-1;
|
int posXPreviousIndexBtn = -1;
|
||||||
int posYTakeGoldBtn=-1;
|
int posYPreviousIndexBtn = -1;
|
||||||
|
int posWPreviousIndexBtn = 32;
|
||||||
|
int posHPreviousIndexBtn = 32;
|
||||||
|
int posXNextIndexBtn = -1;
|
||||||
|
int posYNextIndexBtn = -1;
|
||||||
|
int posWNextIndexBtn = 32;
|
||||||
|
int posHNextIndexBtn = 32;
|
||||||
|
int posXPutGoldBtn = -1;
|
||||||
|
int posYPutGoldBtn = -1;
|
||||||
|
int posWPutGoldBtn = 32;
|
||||||
|
int posHPutGoldBtn = 32;
|
||||||
|
int posXTakeGoldBtn = -1;
|
||||||
|
int posYTakeGoldBtn = -1;
|
||||||
|
int posWTakeGoldBtn = 32;
|
||||||
|
int posHTakeGoldBtn = 32;
|
||||||
|
int posXStashNameField = -1;
|
||||||
|
int posYStashNameField = -1;
|
||||||
|
int posWStashNameField = 175;
|
||||||
|
int posHStashNameField = 20;
|
||||||
|
int posXStashGoldField = -1;
|
||||||
|
int posYStashGoldField = -1;
|
||||||
|
int posWStashGoldField = 152;
|
||||||
|
int posHStashGoldField = 18;
|
||||||
|
|
||||||
|
|
||||||
|
DWORD PersonalNormalPageColor = WHITE;
|
||||||
|
DWORD PersonalIndexPageColor = DARK_GREEN;
|
||||||
|
DWORD PersonalMainIndexPageColor = YELLOW;
|
||||||
|
DWORD SharedNormalPageColor = GOLD;
|
||||||
|
DWORD SharedIndexPageColor = ORANGE;
|
||||||
|
DWORD SharedMainIndexPageColor = RED;
|
||||||
|
|
||||||
|
|
||||||
DWORD getXPreviousBtn() {return RX(posXPreviousBtn<0? D2GetResolution()?0x80:0xAF : posXPreviousBtn);}
|
DWORD getXPreviousBtn() {return RX(posXPreviousBtn<0? D2GetResolution()?0x80:0xAF : posXPreviousBtn);}
|
||||||
#define getLPreviousBtn() 32
|
|
||||||
DWORD getYPreviousBtn() {return RY(posYPreviousBtn<0 ? 0x40 : posYPreviousBtn);}
|
DWORD getYPreviousBtn() {return RY(posYPreviousBtn<0 ? 0x40 : posYPreviousBtn);}
|
||||||
#define getHPreviousBtn() 32
|
|
||||||
|
|
||||||
DWORD getXNextBtn() {return RX(posXNextBtn<0 ? D2GetResolution()?0xA0:0xCF :posXNextBtn);}//?169:SEL_X(0x63, 0x63, 0xCF, 0xA0));}
|
DWORD getXNextBtn() {return RX(posXNextBtn<0 ? D2GetResolution()?0xA0:0xCF :posXNextBtn);}//?169:SEL_X(0x63, 0x63, 0xCF, 0xA0));}
|
||||||
#define getLNextBtn() 32
|
|
||||||
DWORD getYNextBtn() {return RY(posYNextBtn<0 ? 0x40 : posYNextBtn);}
|
DWORD getYNextBtn() {return RY(posYNextBtn<0 ? 0x40 : posYNextBtn);}
|
||||||
#define getHNextBtn() 32
|
|
||||||
|
|
||||||
DWORD getXSharedBtn() {return RX(posXSharedBtn<0 ? D2GetResolution()?0x10:0x6F :posXSharedBtn);}//17:SEL_X(0xE3, 0xE3, 0x6F, 0x10));}//0xD8
|
DWORD getXSharedBtn() {return RX(posXSharedBtn<0 ? D2GetResolution()?0x10:0x6F :posXSharedBtn);}//17:SEL_X(0xE3, 0xE3, 0x6F, 0x10));}//0xD8
|
||||||
#define getLSharedBtn() 32
|
|
||||||
DWORD getYSharedBtn() {return RY(posYSharedBtn<0 ? 0x40 : posYSharedBtn);}
|
DWORD getYSharedBtn() {return RY(posYSharedBtn<0 ? 0x40 : posYSharedBtn);}
|
||||||
#define getHSharedBtn() 32
|
|
||||||
|
|
||||||
DWORD getXPreviousIndexBtn() {return RX(posXPreviousIndexBtn<0 ? D2GetResolution()?0x60:0x8F :posXPreviousIndexBtn);}//73:SEL_X(0x18, 0x60, 0x8F, 0x60));}
|
DWORD getXPreviousIndexBtn() {return RX(posXPreviousIndexBtn<0 ? D2GetResolution()?0x60:0x8F :posXPreviousIndexBtn);}//73:SEL_X(0x18, 0x60, 0x8F, 0x60));}
|
||||||
#define getLPreviousIndexBtn() 32
|
|
||||||
DWORD getYPreviousIndexBtn() {return RY(posYPreviousIndexBtn<0 ? 0x40 : posYPreviousIndexBtn);}
|
DWORD getYPreviousIndexBtn() {return RY(posYPreviousIndexBtn<0 ? 0x40 : posYPreviousIndexBtn);}
|
||||||
#define getHPreviousIndexBtn() 32
|
|
||||||
|
|
||||||
DWORD getXNextIndexBtn() {return RX(posXNextIndexBtn<0? D2GetResolution()?0xC0:0xEF : posXNextIndexBtn);}//217:SEL_X(0x128, 0xC0, 0xEF, 0xC0));}
|
DWORD getXNextIndexBtn() {return RX(posXNextIndexBtn<0? D2GetResolution()?0xC0:0xEF : posXNextIndexBtn);}//217:SEL_X(0x128, 0xC0, 0xEF, 0xC0));}
|
||||||
#define getLNextIndexBtn() 32
|
|
||||||
DWORD getYNextIndexBtn() {return RY(posYNextIndexBtn<0 ? 0x40 : posYNextIndexBtn);}
|
DWORD getYNextIndexBtn() {return RY(posYNextIndexBtn<0 ? 0x40 : posYNextIndexBtn);}
|
||||||
#define getHNextIndexBtn() 32
|
|
||||||
|
|
||||||
DWORD getXPutGoldBtn() {return RX(posXPutGoldBtn<0? 0x1C : posXPutGoldBtn);}
|
DWORD getXPutGoldBtn() {return RX(posXPutGoldBtn<0? 0x1C : posXPutGoldBtn);}
|
||||||
#define getLPutGoldBtn() 32
|
|
||||||
DWORD getYPutGoldBtn() {return RY(posYPutGoldBtn<0 ? 0x1A8 : posYPutGoldBtn);}
|
DWORD getYPutGoldBtn() {return RY(posYPutGoldBtn<0 ? 0x1A8 : posYPutGoldBtn);}
|
||||||
#define getHPutGoldBtn() 32
|
|
||||||
|
|
||||||
DWORD getXTakeGoldBtn() {return RX(posXTakeGoldBtn<0? 0x105 : posXTakeGoldBtn);}
|
DWORD getXTakeGoldBtn() {return RX(posXTakeGoldBtn<0? 0x105 : posXTakeGoldBtn);}
|
||||||
#define getLTakeGoldBtn() 32
|
|
||||||
DWORD getYTakeGoldBtn() {return RY(posYTakeGoldBtn<0 ? 0x1A8 : posYTakeGoldBtn);}
|
DWORD getYTakeGoldBtn() {return RY(posYTakeGoldBtn<0 ? 0x1A8 : posYTakeGoldBtn);}
|
||||||
#define getHTakeGoldBtn() 32
|
DWORD getXStashNameField() {return RX(posXStashNameField<0 ? 0x4A : posXStashNameField);}
|
||||||
|
DWORD getYStashNameField() {return RY(posYStashNameField<0 ? 0x19A : posYStashNameField);}
|
||||||
|
DWORD getXStashGoldField() {return RX(posXStashGoldField<0 ? 0x61 : posXStashGoldField);}
|
||||||
|
DWORD getYStashGoldField() {return RY(posYStashGoldField<0 ? 0x1B6 : posYStashGoldField);}
|
||||||
|
|
||||||
//closeBtn x: D2C=0x113 LOD=0x110(0->0x28) y: D2C=0x41 LOD=0x40 (-0x23 -> 5)
|
//closeBtn x: D2C=0x113 LOD=0x110(0->0x28) y: D2C=0x41 LOD=0x40 (-0x23 -> 5)
|
||||||
|
|
||||||
|
|
||||||
#define isOnButtonNextStash(x,y) isOnRect(x, y, getXNextBtn(), getYNextBtn(), getLNextBtn(), getHNextBtn())
|
#define isOnButtonNextStash(x,y) isOnRect(x, y, getXNextBtn(), getYNextBtn(), posWNextBtn, posHNextBtn)
|
||||||
#define isOnButtonPreviousStash(x,y) isOnRect(x, y, getXPreviousBtn(), getYPreviousBtn(), getLPreviousBtn(), getHPreviousBtn())
|
#define isOnButtonPreviousStash(x,y) isOnRect(x, y, getXPreviousBtn(), getYPreviousBtn(), posWPreviousBtn, posHPreviousBtn)
|
||||||
#define isOnButtonToggleSharedStash(x,y) isOnRect(x, y, getXSharedBtn(), getYSharedBtn(), getLSharedBtn(), getHSharedBtn())
|
#define isOnButtonToggleSharedStash(x,y) isOnRect(x, y, getXSharedBtn(), getYSharedBtn(), posWSharedBtn, posHSharedBtn)
|
||||||
#define isOnButtonNextIndexStash(x,y) isOnRect(x, y, getXNextIndexBtn(), getYNextIndexBtn(), getLNextIndexBtn(), getHNextIndexBtn())
|
#define isOnButtonNextIndexStash(x,y) isOnRect(x, y, getXNextIndexBtn(), getYNextIndexBtn(), posWNextIndexBtn, posHNextIndexBtn)
|
||||||
#define isOnButtonPreviousIndexStash(x,y) isOnRect(x, y, getXPreviousIndexBtn(), getYPreviousIndexBtn(), getLPreviousIndexBtn(), getHPreviousIndexBtn())
|
#define isOnButtonPreviousIndexStash(x,y) isOnRect(x, y, getXPreviousIndexBtn(), getYPreviousIndexBtn(), posWPreviousIndexBtn, posHPreviousIndexBtn)
|
||||||
#define isOnButtonPutGold(x,y) isOnRect(x, y, getXPutGoldBtn(), getYPutGoldBtn(), getLPutGoldBtn(), getHPutGoldBtn())
|
#define isOnButtonPutGold(x,y) isOnRect(x, y, getXPutGoldBtn(), getYPutGoldBtn(), posWPutGoldBtn, posHPutGoldBtn)
|
||||||
#define isOnButtonTakeGold(x,y) isOnRect(x, y, getXTakeGoldBtn(), getYTakeGoldBtn(), getLTakeGoldBtn(), getHTakeGoldBtn())
|
#define isOnButtonTakeGold(x,y) isOnRect(x, y, getXTakeGoldBtn(), getYTakeGoldBtn(), posWTakeGoldBtn, posHTakeGoldBtn)
|
||||||
|
#define isOnStashNameField(x,y) isOnRect(x, y, getXStashNameField(), getYStashNameField(), posWStashNameField, posHStashNameField)
|
||||||
|
#define isOnStashGoldField(x,y) isOnRect(x, y, getXStashGoldField(), getYStashGoldField(), posWStashGoldField, posHStashGoldField)
|
||||||
|
|
||||||
|
void UpdateStashPosition()
|
||||||
|
{
|
||||||
|
//static int isInstalled = false;
|
||||||
|
//if (isInstalled) return;
|
||||||
|
|
||||||
|
InventoryBIN* inventory = D2GetInventoryBIN();
|
||||||
|
if (inventory->gridY == 15)
|
||||||
|
{
|
||||||
|
posXPreviousBtn = 127;
|
||||||
|
posYPreviousBtn = 500;
|
||||||
|
posXNextBtn = 159;
|
||||||
|
posYNextBtn = 500;
|
||||||
|
posXSharedBtn = 28;
|
||||||
|
posYSharedBtn = 21;
|
||||||
|
posXPreviousIndexBtn = 95;
|
||||||
|
posYPreviousIndexBtn = 500;
|
||||||
|
posXNextIndexBtn = 191;
|
||||||
|
posYNextIndexBtn = 500;
|
||||||
|
posXPutGoldBtn = 28;
|
||||||
|
posYPutGoldBtn = 500;
|
||||||
|
posXTakeGoldBtn = 259;
|
||||||
|
posYTakeGoldBtn = 500;
|
||||||
|
//posXStashNameField = -1;
|
||||||
|
posYStashNameField = 16;
|
||||||
|
//posXStashGoldField = -1;
|
||||||
|
posYStashGoldField = 36;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void* STDCALL printBtns()
|
void* STDCALL printBtns()
|
||||||
{
|
{
|
||||||
@ -134,7 +179,6 @@ void* STDCALL printBtns()
|
|||||||
|
|
||||||
|
|
||||||
LPWSTR lpText;
|
LPWSTR lpText;
|
||||||
WCHAR text[100];
|
|
||||||
DWORD mx = D2GetMouseX();
|
DWORD mx = D2GetMouseX();
|
||||||
DWORD my = D2GetMouseY();
|
DWORD my = D2GetMouseY();
|
||||||
|
|
||||||
@ -142,31 +186,36 @@ void* STDCALL printBtns()
|
|||||||
|
|
||||||
if (isOnButtonPreviousStash(mx,my)) {
|
if (isOnButtonPreviousStash(mx,my)) {
|
||||||
lpText = getLocalString(STR_STASH_PREVIOUS_PAGE);
|
lpText = getLocalString(STR_STASH_PREVIOUS_PAGE);
|
||||||
D2PrintPopup(lpText, getXPreviousBtn()+getLPreviousBtn()/2, getYPreviousBtn()-getHPreviousBtn(), WHITE, 1);
|
D2PrintPopup(lpText, getXPreviousBtn()+posWPreviousBtn/2, getYPreviousBtn()-posHPreviousBtn, WHITE, 1);
|
||||||
|
|
||||||
} else if (isOnButtonNextStash(mx,my)) {
|
} else if (isOnButtonNextStash(mx,my)) {
|
||||||
lpText = getLocalString(STR_STASH_NEXT_PAGE);
|
lpText = getLocalString(STR_STASH_NEXT_PAGE);
|
||||||
D2PrintPopup(lpText, getXNextBtn()+getLNextBtn()/2, getYNextBtn()-getHNextBtn(), WHITE, 1);
|
D2PrintPopup(lpText, getXNextBtn()+posWNextBtn/2, getYNextBtn()-posHNextBtn, WHITE, 1);
|
||||||
|
|
||||||
} else if (active_sharedStash && isOnButtonToggleSharedStash(mx,my)) {
|
} else if (isOnButtonToggleSharedStash(mx,my)) {
|
||||||
lpText = getLocalString(PCPY->showSharedStash ? STR_TOGGLE_TO_PERSONAL : STR_TOGGLE_TO_SHARED);
|
if (active_sharedStash) {
|
||||||
D2PrintPopup(lpText, getXSharedBtn()+getLSharedBtn()/2, getYSharedBtn()-getHSharedBtn(), WHITE, 1);
|
lpText = getLocalString(PCPY->showSharedStash ? STR_TOGGLE_TO_PERSONAL : STR_TOGGLE_TO_SHARED);
|
||||||
|
D2PrintPopup(lpText, getXSharedBtn()+posWSharedBtn/2, getYSharedBtn()-posHSharedBtn, WHITE, 1);
|
||||||
|
} else if (active_SharedStashInMultiPlayer == 1) {
|
||||||
|
lpText = getLocalString(STR_TOGGLE_MULTI_DISABLED);
|
||||||
|
D2PrintPopup(lpText, getXPreviousIndexBtn()+posWPreviousIndexBtn/2, getYPreviousIndexBtn()-posHPreviousIndexBtn, WHITE, 1);
|
||||||
|
}
|
||||||
|
|
||||||
} else if (isOnButtonPreviousIndexStash(mx,my)) {
|
} else if (isOnButtonPreviousIndexStash(mx,my)) {
|
||||||
_snwprintf(text, sizeof(text), getLocalString(STR_STASH_PREVIOUS_INDEX) ,nbPagesPerIndex,nbPagesPerIndex2);
|
lpText = getLocalString(STR_STASH_PREVIOUS_INDEX);
|
||||||
D2PrintPopup(text, getXPreviousIndexBtn()+getLPreviousIndexBtn()/2, getYPreviousIndexBtn()-getHPreviousIndexBtn(), 0, 0);
|
D2PrintPopup(lpText, getXPreviousIndexBtn()+posWPreviousIndexBtn/2, getYPreviousIndexBtn()-posHPreviousIndexBtn, WHITE, 1);
|
||||||
|
|
||||||
} else if (isOnButtonNextIndexStash(mx,my)) {
|
} else if (isOnButtonNextIndexStash(mx,my)) {
|
||||||
_snwprintf(text, sizeof(text), getLocalString(STR_STASH_NEXT_INDEX) ,nbPagesPerIndex,nbPagesPerIndex2);
|
lpText = getLocalString(STR_STASH_NEXT_INDEX);
|
||||||
D2PrintPopup(text, getXNextIndexBtn()+getLNextIndexBtn()/2, getYNextIndexBtn()-getHNextIndexBtn(), WHITE, 1);
|
D2PrintPopup(lpText, getXNextIndexBtn()+posWNextIndexBtn/2, getYNextIndexBtn()-posHNextIndexBtn, WHITE, 1);
|
||||||
|
|
||||||
} else if (active_sharedGold && isOnButtonPutGold(mx,my)) {
|
} else if (active_sharedGold && isOnButtonPutGold(mx,my)) {
|
||||||
lpText = getLocalString(STR_PUT_GOLD);
|
lpText = getLocalString(STR_PUT_GOLD);
|
||||||
D2PrintPopup(lpText, getXPutGoldBtn()+getLPutGoldBtn()/2, getYPutGoldBtn()-getHPutGoldBtn(), WHITE, 1);
|
D2PrintPopup(lpText, getXPutGoldBtn()+posWPutGoldBtn/2, getYPutGoldBtn()-posHPutGoldBtn, WHITE, 1);
|
||||||
|
|
||||||
} else if (active_sharedGold && isOnButtonTakeGold(mx,my)) {
|
} else if (active_sharedGold && isOnButtonTakeGold(mx,my)) {
|
||||||
lpText = getLocalString(STR_TAKE_GOLD);
|
lpText = getLocalString(STR_TAKE_GOLD);
|
||||||
D2PrintPopup(lpText, getXTakeGoldBtn()+getLTakeGoldBtn()/2, getYTakeGoldBtn()-getHTakeGoldBtn(), WHITE, 1);
|
D2PrintPopup(lpText, getXTakeGoldBtn()+posWTakeGoldBtn/2, getYTakeGoldBtn()-posHTakeGoldBtn, WHITE, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return D2LoadBuySelBtn();
|
return D2LoadBuySelBtn();
|
||||||
@ -191,6 +240,8 @@ DWORD STDCALL manageBtnDown(sWinMessage* msg)
|
|||||||
isDownBtn.putGold = 1;
|
isDownBtn.putGold = 1;
|
||||||
else if (active_sharedGold && isOnButtonTakeGold(msg->x,msg->y))
|
else if (active_sharedGold && isOnButtonTakeGold(msg->x,msg->y))
|
||||||
isDownBtn.takeGold = 1;
|
isDownBtn.takeGold = 1;
|
||||||
|
else if (isOnStashNameField(msg->x,msg->y))
|
||||||
|
isDownBtn.stashName = 1;
|
||||||
else return 0;
|
else return 0;
|
||||||
|
|
||||||
D2PlaySound(4,0,0,0,0);
|
D2PlaySound(4,0,0,0,0);
|
||||||
@ -198,7 +249,7 @@ DWORD STDCALL manageBtnDown(sWinMessage* msg)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL manageBtnUp(sWinMessage* msg)
|
DWORD STDCALL manageBtnUp(sWinMessage* msg)
|
||||||
{
|
{
|
||||||
if (onRealm || !D2isLODGame()) return 0;
|
if (onRealm || !D2isLODGame()) return 0;
|
||||||
@ -226,7 +277,7 @@ DWORD STDCALL manageBtnUp(sWinMessage* msg)
|
|||||||
if (isDownBtn.toggleToSharedStash)
|
if (isDownBtn.toggleToSharedStash)
|
||||||
if (PCPY->showSharedStash)
|
if (PCPY->showSharedStash)
|
||||||
updateServer(US_SELECT_SELF);
|
updateServer(US_SELECT_SELF);
|
||||||
else
|
else
|
||||||
updateServer(US_SELECT_SHARED);
|
updateServer(US_SELECT_SHARED);
|
||||||
|
|
||||||
} else if (isOnButtonPreviousIndexStash(msg->x,msg->y)) {
|
} else if (isOnButtonPreviousIndexStash(msg->x,msg->y)) {
|
||||||
@ -255,6 +306,26 @@ DWORD STDCALL manageBtnUp(sWinMessage* msg)
|
|||||||
if (isDownBtn.takeGold)
|
if (isDownBtn.takeGold)
|
||||||
updateServer(US_TAKEGOLD);
|
updateServer(US_TAKEGOLD);
|
||||||
|
|
||||||
|
} else if (isOnStashNameField(msg->x,msg->y)) {
|
||||||
|
log_msg("push up left Stash Name\n");
|
||||||
|
if (isDownBtn.stashName && PCPY->currentStash)
|
||||||
|
{
|
||||||
|
if (GetKeyState(VK_SHIFT)<0)
|
||||||
|
{
|
||||||
|
WCHAR text[21];
|
||||||
|
getCurrentStashName(text, 21, ptChar);
|
||||||
|
D2TogglePage(5,0,0);// Open command window
|
||||||
|
_snwprintf(ptInputCommand, 25, L"/rp %s", text);
|
||||||
|
InputCommandLen = wcslen(ptInputCommand);
|
||||||
|
}
|
||||||
|
else if (PCPY->currentStash->isMainIndex)
|
||||||
|
updateServer(US_RESET_INDEX);
|
||||||
|
else if (PCPY->currentStash->isIndex)
|
||||||
|
updateServer(US_SET_MAIN_INDEX);
|
||||||
|
else
|
||||||
|
updateServer(US_SET_INDEX);
|
||||||
|
}
|
||||||
|
|
||||||
} else return 0;
|
} else return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -268,41 +339,84 @@ void FASTCALL printPageNumber(LPWSTR maxGoldText, DWORD x, DWORD y, DWORD color,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD mx = D2GetMouseX();
|
||||||
|
DWORD my = D2GetMouseY();
|
||||||
Unit* ptChar = D2GetClientPlayer();
|
Unit* ptChar = D2GetClientPlayer();
|
||||||
WCHAR popupText[100];
|
WCHAR popupText[0x400];
|
||||||
|
|
||||||
if (PCPY->currentStash)
|
if (!PCPY->currentStash)
|
||||||
|
D2PrintString(getLocalString(STR_NO_SELECTED_PAGE), x, y, WHITE, bfalse);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
bool isShared = PCPY->currentStash->isShared;
|
bool isShared = PCPY->currentStash->isShared;
|
||||||
bool isIndex = PCPY->currentStash->isIndex;
|
bool isIndex = PCPY->currentStash->isIndex;
|
||||||
DWORD currentId = PCPY->currentStash->id;
|
bool isMainIndex = PCPY->currentStash->isMainIndex;
|
||||||
|
DWORD currentId = PCPY->currentStash->id + 1;
|
||||||
|
|
||||||
if (PCPY->currentStash->name && PCPY->currentStash->name[0])
|
WCHAR text[21];
|
||||||
mbstowcs(popupText,PCPY->currentStash->name,50);//strlen(PCPY->currentStash->name)+1
|
getCurrentStashName(text, 21, ptChar);
|
||||||
else _snwprintf(popupText, sizeof(popupText), getLocalString( isShared ? STR_SHARED_PAGE_NUMBER : STR_PERSONAL_PAGE_NUMBER), currentId+1);
|
|
||||||
D2PrintString(popupText, x, y, isShared ? (isIndex ? CRYSTAL_RED : RED) : (isIndex ? BRIGHT_WHITE : WHITE), bfalse);
|
// Replace character # by number page.
|
||||||
} else {
|
int j = 0;
|
||||||
_snwprintf(popupText, sizeof(popupText), getLocalString(STR_NO_SELECTED_PAGE));
|
for (int i=0; text[i]; i++)
|
||||||
D2PrintString(popupText, x, y, WHITE, bfalse);
|
{
|
||||||
|
if (text[i] == L'#')
|
||||||
|
{
|
||||||
|
DWORD val = currentId;
|
||||||
|
int nbDigits = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
nbDigits++;
|
||||||
|
val /= 10;
|
||||||
|
} while(val);
|
||||||
|
j += nbDigits;
|
||||||
|
|
||||||
|
val = currentId;
|
||||||
|
nbDigits = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
nbDigits++;
|
||||||
|
popupText[j - nbDigits] = (WCHAR)(val % 10 + 48);
|
||||||
|
val /= 10;
|
||||||
|
} while(val);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
popupText[j++] = text[i];
|
||||||
|
}
|
||||||
|
popupText[j] = NULL;
|
||||||
|
|
||||||
|
// Check text length vs field name length
|
||||||
|
int pixelLen = D2GetPixelLen(popupText);
|
||||||
|
int len = wcslen(popupText);
|
||||||
|
while(len > 0 && pixelLen > posWStashNameField - 5)
|
||||||
|
{
|
||||||
|
len--;
|
||||||
|
popupText[len] = NULL;
|
||||||
|
pixelLen = D2GetPixelLen(popupText);
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD color = isShared ? (isMainIndex ? SharedMainIndexPageColor : isIndex ? SharedIndexPageColor : SharedNormalPageColor) : (isMainIndex ? PersonalMainIndexPageColor : isIndex ? PersonalIndexPageColor : PersonalNormalPageColor);
|
||||||
|
D2PrintString(popupText, x, y, color, bfalse);
|
||||||
|
|
||||||
|
if (isOnStashNameField(mx, my))
|
||||||
|
{
|
||||||
|
_snwprintf(popupText, 0x400, getLocalString(STR_PAGE_TYPE_CHANGE), currentId);
|
||||||
|
D2PrintPopup(popupText, getXStashNameField() + posWStashNameField/2, getYStashNameField() - posHStashNameField - 2, WHITE, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//printGoldMaxPopup
|
//printGoldMaxPopup
|
||||||
DWORD mx = D2GetMouseX();
|
if (isOnStashGoldField(mx, my))
|
||||||
DWORD my = D2GetMouseY();
|
|
||||||
if ((RX(0x5E) < mx) && (mx < RX(0xF8)) && (RY(0x1C8) < my) && (my < RY(0x1B6)) )
|
|
||||||
{
|
{
|
||||||
if (active_sharedGold)
|
if (active_sharedGold)
|
||||||
{
|
{
|
||||||
_snwprintf(popupText, sizeof(popupText), L"%s\n%s: %u", maxGoldText, getLocalString(STR_SHARED_GOLD_QUANTITY), PCPY->sharedGold);
|
_snwprintf(popupText, 0x400, L"%s\n%s: %u", maxGoldText, getLocalString(STR_SHARED_GOLD_QUANTITY), PCPY->sharedGold);
|
||||||
DWORD x = D2GetPixelLen(maxGoldText);
|
D2PrintPopup(popupText, getXStashGoldField() + posWStashGoldField/2, getYStashGoldField() - posHStashGoldField - 2, WHITE, 1);
|
||||||
DWORD x2 = D2GetPixelLen(popupText) - x;
|
} else
|
||||||
D2PrintPopup(popupText, RX(0xA8-max(x,x2)/2), RY(0x1CA), WHITE, 0);
|
D2PrintPopup(maxGoldText, getXStashGoldField() + posWStashGoldField/2, getYStashGoldField() - posHStashGoldField - 2, WHITE, 1);
|
||||||
} else
|
|
||||||
D2PrintPopup(maxGoldText, RX(0xA8), RY(0x1CA), WHITE, 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Stash* curStash=NULL;
|
static Stash* curStash=NULL;
|
||||||
static DWORD currentSawStash=0;
|
static DWORD currentSawStash=0;
|
||||||
Unit* STDCALL getNextItemForSet(Unit* ptItem)
|
Unit* STDCALL getNextItemForSet(Unit* ptItem)
|
||||||
@ -348,24 +462,23 @@ Unit* STDCALL initGetNextItemForSet(Inventory* ptInventory)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_manageBtnDown_114 )
|
FCT_ASM( caller_manageBtnDown_114 )
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
CALL manageBtnDown
|
CALL manageBtnDown
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JE IS_NOT_ON_BUTTON
|
JE IS_NOT_ON_BUTTON
|
||||||
POP EDX
|
POP EDX
|
||||||
MOV EDX, DWORD PTR DS : [EDX + 0xA]
|
MOV EDX, DWORD PTR DS:[EDX+0xA]
|
||||||
MOV DWORD PTR DS : [EDX], 1
|
MOV DWORD PTR DS:[EDX],1
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EBX
|
POP EBX
|
||||||
MOV ESP, EBP
|
MOV ESP,EBP
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN 4
|
RETN 4
|
||||||
IS_NOT_ON_BUTTON :
|
IS_NOT_ON_BUTTON:
|
||||||
JMP D2ClickOnStashButton
|
JMP D2ClickOnStashButton
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM( caller_manageBtnDown_111 )
|
FCT_ASM( caller_manageBtnDown_111 )
|
||||||
PUSH EBP
|
PUSH EBP
|
||||||
CALL manageBtnDown
|
CALL manageBtnDown
|
||||||
@ -401,28 +514,28 @@ IS_NOT_ON_BUTTON:
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_manageBtnUp_114 )
|
FCT_ASM( caller_manageBtnUp_114 )
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
CALL manageBtnUp
|
CALL manageBtnUp
|
||||||
MOV isDownBtn.all, 0
|
MOV isDownBtn.all,0
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JE IS_NOT_ON_BUTTON
|
JE IS_NOT_ON_BUTTON
|
||||||
POP EDX
|
POP EDX
|
||||||
MOV EDX, DWORD PTR DS : [EDX + 0x33]
|
MOV EDX, DWORD PTR DS:[EDX+0x33]
|
||||||
MOV DWORD PTR DS : [EDX], 0
|
MOV DWORD PTR DS:[EDX],0
|
||||||
SUB EDX, 8
|
SUB EDX,8
|
||||||
MOV DWORD PTR DS : [EDX], 0
|
MOV DWORD PTR DS:[EDX],0
|
||||||
ADD EDX, 4
|
ADD EDX,4
|
||||||
MOV DWORD PTR DS : [EDX], 0
|
MOV DWORD PTR DS:[EDX],0
|
||||||
ADD EDX, 0x68
|
ADD EDX,0x64
|
||||||
MOV DWORD PTR DS : [EDX], 0
|
MOV DWORD PTR DS:[EDX],0
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EBX
|
POP EBX
|
||||||
MOV ESP, EBP
|
MOV ESP,EBP
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN 4
|
RETN 4
|
||||||
IS_NOT_ON_BUTTON:
|
IS_NOT_ON_BUTTON:
|
||||||
JMP D2ClickOnStashButton
|
JMP D2ClickOnStashButton
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_manageBtnUp_111 )
|
FCT_ASM( caller_manageBtnUp_111 )
|
||||||
@ -474,10 +587,12 @@ IS_NOT_ON_BUTTON:
|
|||||||
JMP D2isLODGame
|
JMP D2isLODGame
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( initBtnsStates_114 )
|
FCT_ASM ( initBtnsStates_114 )
|
||||||
MOV isDownBtn.all, 0
|
MOV isDownBtn.all,0
|
||||||
MOV DWORD PTR DS : [0x7BCC3C], EAX
|
POP ECX
|
||||||
RETN
|
MOV ESP,EBP
|
||||||
|
POP EBP
|
||||||
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( initBtnsStates )
|
FCT_ASM ( initBtnsStates )
|
||||||
@ -499,70 +614,59 @@ void Install_InterfaceStash()
|
|||||||
|
|
||||||
// Print button images
|
// Print button images
|
||||||
mem_seek R8(D2Client, 39060, 39060, 3F399, B1006, 7DF86, B3656, 99A56, 9DE26, 8F308);
|
mem_seek R8(D2Client, 39060, 39060, 3F399, B1006, 7DF86, B3656, 99A56, 9DE26, 8F308);
|
||||||
if (version_D2Client == V114d) {
|
MEMC_REF4( D2LoadBuySelBtn, printBtns);
|
||||||
MEMT_REF4(0xFFFC52F4, printBtns);
|
|
||||||
} else {
|
|
||||||
MEMC_REF4(D2LoadBuySelBtn, printBtns);
|
|
||||||
}
|
|
||||||
//6FADF398 |. E8 734D0400 CALL D2Client.6FB24110
|
//6FADF398 |. E8 734D0400 CALL D2Client.6FB24110
|
||||||
//6FB61005 |. E8 A6D3FEFF CALL D2Client.6FB4E3B0
|
//6FB61005 |. E8 A6D3FEFF CALL D2Client.6FB4E3B0
|
||||||
//6FB2DF85 |. E8 3642FEFF CALL D2Client.6FB121C0
|
//6FB2DF85 |. E8 3642FEFF CALL D2Client.6FB121C0
|
||||||
//6FB63655 |. E8 9682FDFF CALL D2Client.6FB3B8F0
|
//6FB63655 |. E8 9682FDFF CALL D2Client.6FB3B8F0
|
||||||
//6FB49A55 |. E8 96500200 CALL D2Client.6FB6EAF0
|
//6FB49A55 |. E8 96500200 CALL D2Client.6FB6EAF0
|
||||||
//6FB4DE25 |. E8 76ACF7FF CALL D2Client.6FAC8AA0
|
//6FB4DE25 |. E8 76ACF7FF CALL D2Client.6FAC8AA0
|
||||||
|
//0048F307 |. E8 F452FCFF CALL Game.00454600
|
||||||
|
|
||||||
// print page number
|
// print page number
|
||||||
mem_seek R8(D2Client, 3903C, 3903C, 3F375, B0FE3, 7DF63, B3633, 99A33, 9DE03, 8F2E5);
|
mem_seek R8(D2Client, 3903C, 3903C, 3F375, B0FE3, 7DF63, B3633, 99A33, 9DE03, 8F2E5);
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2PrintString, printPageNumber);
|
||||||
MEMT_REF4(0x00073037, printPageNumber);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2PrintString, printPageNumber);
|
|
||||||
}
|
|
||||||
//6FADF374 |. E8 3FCC0800 CALL <JMP.&D2Win.#10117>
|
//6FADF374 |. E8 3FCC0800 CALL <JMP.&D2Win.#10117>
|
||||||
//6FB60FE2 |. E8 99C2F5FF CALL <JMP.&D2Win.#10020>
|
//6FB60FE2 |. E8 99C2F5FF CALL <JMP.&D2Win.#10020>
|
||||||
//6FB2DF62 |. E8 19F3F8FF CALL <JMP.&D2Win.#10064>
|
//6FB2DF62 |. E8 19F3F8FF CALL <JMP.&D2Win.#10064>
|
||||||
//6FB63632 |. E8 299DF5FF CALL <JMP.&D2Win.#10001>
|
//6FB63632 |. E8 299DF5FF CALL <JMP.&D2Win.#10001>
|
||||||
//6FB49A32 |. E8 4739F7FF CALL <JMP.&D2Win.#10150>
|
//6FB49A32 |. E8 4739F7FF CALL <JMP.&D2Win.#10150>
|
||||||
//6FB4DE02 |. E8 4739F7FF CALL <JMP.&D2Win.#10076>
|
//6FB4DE02 |. E8 4739F7FF CALL <JMP.&D2Win.#10076>
|
||||||
|
//0048F2E4 |. E8 37300700 CALL Game.00502320 ; \Game.00502320
|
||||||
|
|
||||||
// Manage mouse down (Play sound)
|
// Manage mouse down (Play sound)
|
||||||
mem_seek R8(D2Client, 45091, 45091, 4BBA1, B4666, 7FDD6, B54A6, 9B8A6, 9FC76, 925B8);
|
mem_seek R8(D2Client, 45091, 45091, 4BBA1, B4666, 7FDD6, B54A6, 9B8A6, 9FC76, 925B8);
|
||||||
if (version_D2Client == V114d) {
|
MEMC_REF4( version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V114a ? caller_manageBtnDown_114 : version_D2Client >= V111 ? caller_manageBtnDown_111 : caller_manageBtnDown);
|
||||||
MEMT_REF4(0xFFFF73C4, caller_manageBtnDown_114);
|
//6FAEBBA0 > E8 DB04FCFF CALL D2Client.6FAAC080
|
||||||
} else {
|
|
||||||
MEMC_REF4(version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V111 ? caller_manageBtnDown_111 : caller_manageBtnDown);
|
|
||||||
}
|
|
||||||
//6FAEBBA0 > E8 DB04FCFF CALL D2Client.6FAAC080
|
|
||||||
//6FB64665 . E8 B61EFFFF CALL D2Client.6FB56520
|
//6FB64665 . E8 B61EFFFF CALL D2Client.6FB56520
|
||||||
//6FB2FDD5 . E8 E612FFFF CALL D2Client.6FB210C0
|
//6FB2FDD5 . E8 E612FFFF CALL D2Client.6FB210C0
|
||||||
//6FB654A5 . E8 9611FFFF CALL D2Client.6FB56640
|
//6FB654A5 . E8 9611FFFF CALL D2Client.6FB56640
|
||||||
//6FB4B8A5 . E8 5614FFFF CALL D2Client.6FB3CD00
|
//6FB4B8A5 . E8 5614FFFF CALL D2Client.6FB3CD00
|
||||||
//6FB4FC75 . E8 960FFFFF CALL D2Client.6FB40C10
|
//6FB4FC75 . E8 960FFFFF CALL D2Client.6FB40C10
|
||||||
|
//004925B7 |. E8 C473FFFF CALL Game.00489980
|
||||||
|
|
||||||
// Manage mouse up
|
// Manage mouse up
|
||||||
mem_seek R8(D2Client, 455F9, 455F9, 4C0F9, B57B9, 7FC09, B52D9, 9B6D9, 9FAA9, 89B63);
|
mem_seek R8(D2Client, 455F9, 455F9, 4C0F9, B57B9, 7FC09, B52D9, 9B6D9, 9FAA9, 89B63);
|
||||||
if (version_D2Client == V114d) {
|
MEMC_REF4( version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V114a ? caller_manageBtnUp_114 : version_D2Client >= V111 ? caller_manageBtnUp_111 : caller_manageBtnUp);
|
||||||
MEMT_REF4(0xFFFFFE19, caller_manageBtnUp_114);
|
//6FAEC0F8 > E8 83FFFBFF CALL D2Client.6FAAC080
|
||||||
} else {
|
|
||||||
MEMC_REF4(version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V111 ? caller_manageBtnUp_111 : caller_manageBtnUp);
|
|
||||||
}
|
|
||||||
//6FAEC0F8 > E8 83FFFBFF CALL D2Client.6FAAC080
|
|
||||||
//6FB657B8 > E8 630DFFFF CALL D2Client.6FB56520
|
//6FB657B8 > E8 630DFFFF CALL D2Client.6FB56520
|
||||||
//6FB2FC08 > E8 B314FFFF CALL D2Client.6FB210C0
|
//6FB2FC08 > E8 B314FFFF CALL D2Client.6FB210C0
|
||||||
//6FB652D8 > E8 6313FFFF CALL D2Client.6FB56640
|
//6FB652D8 > E8 6313FFFF CALL D2Client.6FB56640
|
||||||
//6FB4B6D8 > E8 2316FFFF CALL D2Client.6FB3CD00
|
//6FB4B6D8 > E8 2316FFFF CALL D2Client.6FB3CD00
|
||||||
//6FB4FAA8 > E8 6311FFFF CALL D2Client.6FB40C10
|
//6FB4FAA8 > E8 6311FFFF CALL D2Client.6FB40C10
|
||||||
|
//00489B62 |> E8 19FEFFFF CALL Game.00489980
|
||||||
|
|
||||||
// init state of button on open stash page
|
// init state of button on open stash page
|
||||||
mem_seek R8(D2Client, 45B3A, 45B3A, 4C63A, A645A, 749DA, A9D9A, 8CC3A, 9441A, 89ED0);
|
mem_seek R8(D2Client, 45B3A, 45B3A, 4C63A, A645A, 749DA, A9D9A, 8CC3A, 9441A, 89ED5);
|
||||||
if (version_D2Client == V114d) {
|
if (version_D2Client >= V114d)
|
||||||
memt_byte(0xA3, 0xE8);
|
{
|
||||||
MEMT_REF4(0x007BCC3C, initBtnsStates_114);
|
memt_byte( 0x8B, 0xE9 ); // CALL initBtnsStates
|
||||||
} else {
|
MEMT_REF4( 0xCCC35DE5, initBtnsStates_114);
|
||||||
memt_byte(0x81, 0xE9); // CALL initBtnsStates
|
} else {
|
||||||
MEMT_REF4(0x000104C4, initBtnsStates);
|
memt_byte( 0x81, 0xE9 ); // CALL initBtnsStates
|
||||||
memt_byte(0x00, 0x90);
|
MEMT_REF4( 0x000104C4, initBtnsStates);
|
||||||
}
|
memt_byte( 0x00, 0x90 );
|
||||||
|
}
|
||||||
//6FAE5B3A |> 81C4 04010000 ADD ESP,104
|
//6FAE5B3A |> 81C4 04010000 ADD ESP,104
|
||||||
//6FAE5B3A |> 81C4 04010000 ADD ESP,104
|
//6FAE5B3A |> 81C4 04010000 ADD ESP,104
|
||||||
//6FAEC63A |> 81C4 04010000 ADD ESP,104
|
//6FAEC63A |> 81C4 04010000 ADD ESP,104
|
||||||
@ -571,34 +675,32 @@ void Install_InterfaceStash()
|
|||||||
//6FB59D9A |> 81C4 04010000 ADD ESP,104
|
//6FB59D9A |> 81C4 04010000 ADD ESP,104
|
||||||
//6FB3CC3A |> 81C4 04010000 ADD ESP,104
|
//6FB3CC3A |> 81C4 04010000 ADD ESP,104
|
||||||
//6FB4441A |> 81C4 04010000 ADD ESP,104
|
//6FB4441A |> 81C4 04010000 ADD ESP,104
|
||||||
|
//00489ED5 |> 8BE5 MOV ESP,EBP
|
||||||
|
//00489ED7 |. 5D POP EBP
|
||||||
|
//00489ED8 \. C3 RETN
|
||||||
|
//00489ED9 CC INT3
|
||||||
|
|
||||||
// init the search of print in green the item set name we have in stash
|
// init the search of print in green the item set name we have in stash
|
||||||
mem_seek R8(D2Client, 3F098, 3F098, 45997, A71F4, 71F64, A7314, 8D434, 91A24, 86774);
|
mem_seek R8(D2Client, 3F098, 3F098, 45997, A71F4, 71F64, A7314, 8D434, 91A24, 86774);
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2InventoryGetFirstItem, initGetNextItemForSet);
|
||||||
MEMT_REF4(0x001B4B48, initGetNextItemForSet);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2InventoryGetFirstItem, initGetNextItemForSet);
|
|
||||||
}
|
|
||||||
//6FAE5996 |. E8 D5500800 CALL <JMP.&D2Common.#10277>
|
//6FAE5996 |. E8 D5500800 CALL <JMP.&D2Common.#10277>
|
||||||
//6FB571F3 |. E8 D64EF6FF CALL <JMP.&D2Common.#10402>
|
//6FB571F3 |. E8 D64EF6FF CALL <JMP.&D2Common.#10402>
|
||||||
//6FB21F63 |. E8 96A1F9FF CALL <JMP.&D2Common.#10535>
|
//6FB21F63 |. E8 96A1F9FF CALL <JMP.&D2Common.#10535>
|
||||||
//6FB57313 |. E8 8250F6FF CALL <JMP.&D2Common.#11151>
|
//6FB57313 |. E8 8250F6FF CALL <JMP.&D2Common.#11151>
|
||||||
//6FB3D433 |. E8 B8F0F7FF CALL <JMP.&D2Common.#10460>
|
//6FB3D433 |. E8 B8F0F7FF CALL <JMP.&D2Common.#10460>
|
||||||
//6FB41A23 |. E8 96A7F7FF CALL <JMP.&D2Common.#11040>
|
//6FB41A23 |. E8 96A7F7FF CALL <JMP.&D2Common.#11040>
|
||||||
|
//00486773 |. E8 484B1B00 CALL Game.0063B2C0 ; \Game.0063B2C0
|
||||||
|
|
||||||
// Get next item for print in green the item set name we have in stash
|
// Get next item for print in green the item set name we have in stash
|
||||||
mem_seek R8(D2Client, 3F0FA, 3F0FA, 45A1C, A728B, 71FFB, A73AB, 8D4CB, 91ABB, 86807);
|
mem_seek R8(D2Client, 3F0FA, 3F0FA, 45A1C, A728B, 71FFB, A73AB, 8D4CB, 91ABB, 86807);
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2UnitGetNextItem, getNextItemForSet);
|
||||||
MEMT_REF4(0x001B7795, getNextItemForSet);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2UnitGetNextItem, getNextItemForSet);
|
|
||||||
}
|
|
||||||
//6FAE5A1B E8 4A500800 CALL <JMP.&D2Common.#10304>
|
//6FAE5A1B E8 4A500800 CALL <JMP.&D2Common.#10304>
|
||||||
//6FB5728A |. E8 0B4FF6FF |CALL <JMP.&D2Common.#10934>
|
//6FB5728A |. E8 0B4FF6FF |CALL <JMP.&D2Common.#10934>
|
||||||
//6FB21FFA |. E8 A1A1F9FF |CALL <JMP.&D2Common.#11140>
|
//6FB21FFA |. E8 A1A1F9FF |CALL <JMP.&D2Common.#11140>
|
||||||
//6FB573AA |. E8 7550F6FF |CALL <JMP.&D2Common.#10770>
|
//6FB573AA |. E8 7550F6FF |CALL <JMP.&D2Common.#10770>
|
||||||
//6FB3D4CA |. E8 99F0F7FF |CALL <JMP.&D2Common.#10464>
|
//6FB3D4CA |. E8 99F0F7FF |CALL <JMP.&D2Common.#10464>
|
||||||
//6FB41ABA |. E8 A3A8F7FF |CALL <JMP.&D2Common.#10879>
|
//6FB41ABA |. E8 A3A8F7FF |CALL <JMP.&D2Common.#10879>
|
||||||
|
//00486806 |. E8 95771B00 |CALL Game.0063DFA0 ; \Game.0063DFA0
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Interface functions
|
Interface functions
|
||||||
|
|
||||||
@ -139,14 +139,14 @@ Unit* STDCALL statsPageMouseUp(sWinMessage* msg)
|
|||||||
return ptChar;
|
return ptChar;
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_printStatsPageBtns_114 )
|
FCT_ASM ( caller_printStatsPageBtns_114 )
|
||||||
CALL printStatsPageBtns
|
CALL printStatsPageBtns
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EBX
|
POP EBX
|
||||||
MOV ESP, EBP
|
MOV ESP,EBP
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_printStatsPageBtns_111 )
|
FCT_ASM ( caller_printStatsPageBtns_111 )
|
||||||
@ -180,20 +180,20 @@ FCT_ASM ( caller_printStatsPageBtns_9 )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_statsPageMouseDown_114 )
|
|
||||||
PUSH DWORD PTR SS : [ESP + 0x18]
|
FCT_ASM ( caller_statsPageMouseDown_114 )
|
||||||
CALL statsPageMouseDown
|
PUSH DWORD PTR SS:[ESP+0x18]
|
||||||
TEST EAX, EAX
|
CALL statsPageMouseDown
|
||||||
JE fin_statsPageMouseDown
|
TEST EAX,EAX
|
||||||
MOV EAX, DWORD PTR DS : [0x7A6A70]
|
JE fin_statsPageMouseDown
|
||||||
RETN
|
JMP D2GetClientPlayer
|
||||||
fin_statsPageMouseDown :
|
fin_statsPageMouseDown:
|
||||||
ADD ESP, 4
|
ADD ESP,4
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EBX
|
POP EBX
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_statsPageMouseDown_111 )
|
FCT_ASM ( caller_statsPageMouseDown_111 )
|
||||||
@ -226,20 +226,20 @@ fin_statsPageMouseDown:
|
|||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_statsPageMouseUp_114 )
|
FCT_ASM ( caller_statsPageMouseUp_114 )
|
||||||
PUSH DWORD PTR SS : [EBP + 0x8]
|
PUSH DWORD PTR SS:[EBP+0x8]
|
||||||
CALL statsPageMouseUp
|
CALL statsPageMouseUp
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JE fin_statsPageMouseUp
|
JE fin_statsPageMouseUp
|
||||||
MOV EAX, DWORD PTR DS : [0x7A6A70]
|
JMP D2GetClientPlayer
|
||||||
RETN
|
fin_statsPageMouseUp:
|
||||||
fin_statsPageMouseUp :
|
ADD ESP,4
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EBX
|
POP EBX
|
||||||
MOV ESP, EBP
|
MOV ESP, EBP
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_statsPageMouseUp )
|
FCT_ASM ( caller_statsPageMouseUp )
|
||||||
@ -279,23 +279,16 @@ void Install_InterfaceStats()
|
|||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
Install_PlugYImagesFiles();
|
Install_PlugYImagesFiles();
|
||||||
|
|
||||||
log_msg("Patch D2Client for stats interface. (InterfaceStats)\n");
|
log_msg("Patch D2Client for stats interface. (InterfaceStats)\n");
|
||||||
|
|
||||||
// Print new buttons images
|
// Print new buttons images
|
||||||
if (version_D2Client == V114d) {
|
mem_seek R8(D2Client, 2A7BE, 2A7AE, 30F86, 83636, 8A0B6, 6C016, BDC16, C03B6, A8949);
|
||||||
mem_seek R8(D2Client, 2A7BE, 2A7AE, 30F86, 83636, 8A0B6, 6C016, BDC16, C03B6, A8949);
|
memt_byte( 0x5F, 0xE9 ); // JMP
|
||||||
memt_byte(0x5F, 0xE9);
|
MEMT_REF4( version_D2Client >= V114d ? 0xE58B5B5E : 0x815B5D5E, version_D2Client >= V114d ? caller_printStatsPageBtns_114 : version_D2Client >= V111 ? caller_printStatsPageBtns_111: version_D2Client == V110 ? caller_printStatsPageBtns : caller_printStatsPageBtns_9);
|
||||||
MEMT_REF4(0xE58B5B5E, caller_printStatsPageBtns_114);
|
//6FAD0F86 . 5F POP EDI
|
||||||
} else {
|
|
||||||
mem_seek R8(D2Client, 2A7BE, 2A7AE, 30F86, 83636, 8A0B6, 6C016, BDC16, C03B6, C03B6);
|
|
||||||
memt_byte(0x5F, 0xE9); // JMP
|
|
||||||
MEMT_REF4(0x815B5D5E, version_D2Client >= V111 ? caller_printStatsPageBtns_111 : version_D2Client == V110 ? caller_printStatsPageBtns : caller_printStatsPageBtns_9);
|
|
||||||
}
|
|
||||||
|
|
||||||
//6FAD0F86 . 5F POP EDI
|
|
||||||
//6FAD0F87 . 5E POP ESI
|
//6FAD0F87 . 5E POP ESI
|
||||||
//6FAD0F88 . 5D POP EBP
|
//6FAD0F88 . 5D POP EBP
|
||||||
//6FAD0F89 . 5B POP EBX
|
//6FAD0F89 . 5B POP EBX
|
||||||
@ -330,18 +323,30 @@ void Install_InterfaceStats()
|
|||||||
//6FB703B8 |. 5D POP EBP
|
//6FB703B8 |. 5D POP EBP
|
||||||
//6FB703B9 |. 5B POP EBX
|
//6FB703B9 |. 5B POP EBX
|
||||||
//6FB703BA |. 81C4 70030000 ADD ESP,370
|
//6FB703BA |. 81C4 70030000 ADD ESP,370
|
||||||
//6FB703<30>0 \. C3 RETN
|
//6FB703C0 \. C3 RETN
|
||||||
|
//004A8949 . 5F POP EDI
|
||||||
|
//004A894A . 5E POP ESI
|
||||||
|
//004A894B . 5B POP EBX
|
||||||
|
//004A894C . 8BE5 MOV ESP,EBP
|
||||||
|
|
||||||
if ( version_D2Client >= V111 )
|
if ( version_D2Client >= V114d )
|
||||||
{
|
{
|
||||||
// Manage mouse down (Play sound)
|
// Manage mouse down (Play sound)
|
||||||
mem_seek R8(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, BCDC8, BF568, A77D4);
|
mem_seek R8(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, BCDC8, BF568, A77D4);
|
||||||
if (version_D2Client == V114d) {
|
MEMC_REF4( D2GetClientPlayer, caller_statsPageMouseDown_114);
|
||||||
MEMT_REF4(0xFFFBC5F8, caller_statsPageMouseDown_114);
|
//004A77D3 . E8 F8C5FBFF CALL Game.00463DD0
|
||||||
} else {
|
|
||||||
memt_byte(0xA1, 0xE8);
|
// Manage mouse up
|
||||||
MEMT_REF4(ptptClientChar, caller_statsPageMouseDown);
|
mem_seek R8(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, BDE33, C05D3, A7963);
|
||||||
}
|
MEMC_REF4( D2GetClientPlayer, caller_statsPageMouseUp_114);
|
||||||
|
//004A7962 |. E8 69C4FBFF CALL Game.00463DD0
|
||||||
|
}
|
||||||
|
else if ( version_D2Client >= V111 )
|
||||||
|
{
|
||||||
|
// Manage mouse down (Play sound)
|
||||||
|
mem_seek R8(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, BCDC8, BF568, A77D4);
|
||||||
|
memt_byte( 0xA1, 0xE8 );
|
||||||
|
MEMT_REF4( ptptClientChar, caller_statsPageMouseDown);
|
||||||
//6FB327C8 . A1 F0C4BC6F MOV EAX,DWORD PTR DS:[6FBCC4F0]
|
//6FB327C8 . A1 F0C4BC6F MOV EAX,DWORD PTR DS:[6FBCC4F0]
|
||||||
//6FB39248 . A1 E0C1BC6F MOV EAX,DWORD PTR DS:[6FBCC1E0]
|
//6FB39248 . A1 E0C1BC6F MOV EAX,DWORD PTR DS:[6FBCC1E0]
|
||||||
//6FB1B1A8 . A1 D0C3BC6F MOV EAX,DWORD PTR DS:[6FBCC3D0]
|
//6FB1B1A8 . A1 D0C3BC6F MOV EAX,DWORD PTR DS:[6FBCC3D0]
|
||||||
@ -350,12 +355,8 @@ void Install_InterfaceStats()
|
|||||||
|
|
||||||
// Manage mouse up
|
// Manage mouse up
|
||||||
mem_seek R8(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, BDE33, C05D3, A7963);
|
mem_seek R8(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, BDE33, C05D3, A7963);
|
||||||
if (version_D2Client == V114d) {
|
memt_byte( 0xA1, 0xE8 );
|
||||||
MEMT_REF4(0xFFFBC469, caller_statsPageMouseUp_114);
|
MEMT_REF4( ptptClientChar, caller_statsPageMouseUp);
|
||||||
} else {
|
|
||||||
memt_byte(0xA1, 0xE8);
|
|
||||||
MEMT_REF4(ptptClientChar, caller_statsPageMouseUp);
|
|
||||||
}
|
|
||||||
//6FB33853 . A1 F0C4BC6F MOV EAX,DWORD PTR DS:[6FBCC4F0]
|
//6FB33853 . A1 F0C4BC6F MOV EAX,DWORD PTR DS:[6FBCC4F0]
|
||||||
//6FB3A2D3 . A1 E0C1BC6F MOV EAX,DWORD PTR DS:[6FBCC1E0]
|
//6FB3A2D3 . A1 E0C1BC6F MOV EAX,DWORD PTR DS:[6FBCC1E0]
|
||||||
//6FB1C233 . A1 D0C3BC6F MOV EAX,DWORD PTR DS:[6FBCC3D0]
|
//6FB1C233 . A1 D0C3BC6F MOV EAX,DWORD PTR DS:[6FBCC3D0]
|
||||||
@ -363,12 +364,12 @@ void Install_InterfaceStats()
|
|||||||
//6FB705D3 . A1 50D0BC6F MOV EAX,DWORD PTR DS:[6FBCD050]
|
//6FB705D3 . A1 50D0BC6F MOV EAX,DWORD PTR DS:[6FBCD050]
|
||||||
} else {
|
} else {
|
||||||
// Manage mouse down (Play sound)
|
// Manage mouse down (Play sound)
|
||||||
mem_seek R8(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, 0000, 0000, 0000);
|
mem_seek R8(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, BCDC8, BF568, A77D4);
|
||||||
MEMC_REF4( D2GetClientPlayer, caller_statsPageMouseDown);
|
MEMC_REF4( D2GetClientPlayer, caller_statsPageMouseDown);
|
||||||
//6FAD133C . E8 8F700500 CALL D2Client.6FB283D0
|
//6FAD133C . E8 8F700500 CALL D2Client.6FB283D0
|
||||||
|
|
||||||
// Manage mouse up
|
// Manage mouse up
|
||||||
mem_seek R8(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, 0000, 0000, 0000);
|
mem_seek R8(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, BDE33, C05D3, A7963);
|
||||||
MEMC_REF4( D2GetClientPlayer, version_D2Client == V110 ? caller_statsPageMouseUp : caller_statsPageMouseUp_9);//0x00056EB2
|
MEMC_REF4( D2GetClientPlayer, version_D2Client == V110 ? caller_statsPageMouseUp : caller_statsPageMouseUp_9);//0x00056EB2
|
||||||
//6FAD1519 . E8 B26E0500 CALL D2Client.6FB283D0
|
//6FAD1519 . E8 B26E0500 CALL D2Client.6FB283D0
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Language management.
|
Language management.
|
||||||
|
|
||||||
@ -10,7 +11,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
bool active_ChangeLanguage = true;
|
bool active_ChangeLanguage = false;
|
||||||
DWORD selectedLanguage = LNG_ENG;
|
DWORD selectedLanguage = LNG_ENG;
|
||||||
|
|
||||||
bool active_LanguageManagement = false;
|
bool active_LanguageManagement = false;
|
||||||
@ -19,12 +20,17 @@ t_availableLanguages availableLanguages;
|
|||||||
|
|
||||||
DWORD* ptCurrentLanguage;
|
DWORD* ptCurrentLanguage;
|
||||||
|
|
||||||
DWORD STDCALL languageManagement ()
|
DWORD STDCALL languageManagement()
|
||||||
{
|
{
|
||||||
if (active_ChangeLanguage) *ptCurrentLanguage = selectedLanguage;
|
if (active_ChangeLanguage)
|
||||||
|
*ptCurrentLanguage = selectedLanguage;
|
||||||
|
|
||||||
if (active_LanguageManagement)
|
if (active_LanguageManagement)
|
||||||
if ((*ptCurrentLanguage > LNG_RUS) || !((1 << *ptCurrentLanguage) & availableLanguages.all))
|
{
|
||||||
*ptCurrentLanguage = defaultLanguage;
|
if ((*ptCurrentLanguage >= LNG_DEF) || !((1 << *ptCurrentLanguage) & availableLanguages.all))
|
||||||
|
*ptCurrentLanguage = defaultLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
return *ptCurrentLanguage;
|
return *ptCurrentLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,10 +39,11 @@ void Install_LanguageManagement()
|
|||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Lang for language management. (LanguageManagement)\n");
|
log_msg("Patch D2Lang for language management. (LanguageManagement)\n");
|
||||||
|
|
||||||
ptCurrentLanguage = *(DWORD**)((DWORD)D2GetLang + (version_D2Lang == V114d ? 0x5F : version_D2Lang >= V111 ? 0x51: 0x5C));
|
ptCurrentLanguage = *(DWORD**)((DWORD)D2GetLang + (version_D2Lang == V114d ? 0x4D : version_D2Lang >= V111 ? 0x51: 0x5C));
|
||||||
|
languageManagement();
|
||||||
|
|
||||||
// Language management
|
// Language management
|
||||||
mem_seek( (DWORD)D2GetLang + (version_D2Lang == V114d ? 0x4C : version_D2Lang >= V111 ? 0x3E : 0x49));//6FC13E39-6FC10000
|
mem_seek( (DWORD)D2GetLang + (version_D2Lang == V114d ? 0x4C : version_D2Lang >= V111 ? 0x3E : 0x49));//6FC13E39-6FC10000
|
||||||
@ -45,11 +52,11 @@ void Install_LanguageManagement()
|
|||||||
//6FC13E39 |. A1 EC0CC26F MOV EAX,DWORD PTR DS:[6FC20CEC]
|
//6FC13E39 |. A1 EC0CC26F MOV EAX,DWORD PTR DS:[6FC20CEC]
|
||||||
//003D91FE |. A1 1C0A3E00 MOV EAX,DWORD PTR DS:[3E0A1C]
|
//003D91FE |. A1 1C0A3E00 MOV EAX,DWORD PTR DS:[3E0A1C]
|
||||||
//003DA0AE |. A1 1C0A3E00 MOV EAX,DWORD PTR DS:[3E0A1C]
|
//003DA0AE |. A1 1C0A3E00 MOV EAX,DWORD PTR DS:[3E0A1C]
|
||||||
|
//0052519C |> A1 EC298800 MOV EAX,DWORD PTR DS:[8829EC]
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
isInstalled = true;
|
isInstalled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -1,9 +1,9 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Load Player Custom Data.
|
Load Player Custom Data.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
@ -21,6 +21,8 @@ DWORD STDCALL LoadSPCustomData(Unit* ptChar)
|
|||||||
BYTE* data;
|
BYTE* data;
|
||||||
|
|
||||||
log_msg("--- Start LoadSPCustomData ---\n");
|
log_msg("--- Start LoadSPCustomData ---\n");
|
||||||
|
active_sharedStash = active_SharedStashInMultiPlayer > 0;
|
||||||
|
log_msg("active_sharedStash = %d : %d\n\n", active_sharedStash);
|
||||||
|
|
||||||
if (!ptChar)
|
if (!ptChar)
|
||||||
{log_msg("LoadSPCustomData : ptChar == NULL\n");return 0x1B;}//Unknow failure
|
{log_msg("LoadSPCustomData : ptChar == NULL\n");return 0x1B;}//Unknow failure
|
||||||
@ -38,7 +40,7 @@ DWORD STDCALL LoadSPCustomData(Unit* ptChar)
|
|||||||
data = readExtendedSaveFile(PCPlayerData->name, &size);
|
data = readExtendedSaveFile(PCPlayerData->name, &size);
|
||||||
ret = loadExtendedSaveFile(ptChar, data, size);
|
ret = loadExtendedSaveFile(ptChar, data, size);
|
||||||
D2FogMemDeAlloc(data,__FILE__,__LINE__,0);
|
D2FogMemDeAlloc(data,__FILE__,__LINE__,0);
|
||||||
if (!ret)
|
if (!ret && active_sharedStash)
|
||||||
{
|
{
|
||||||
data = readSharedSaveFile(PCPlayerData->name, &size);
|
data = readSharedSaveFile(PCPlayerData->name, &size);
|
||||||
ret = loadSharedSaveFile(ptChar, data, size);
|
ret = loadSharedSaveFile(ptChar, data, size);
|
||||||
@ -52,19 +54,19 @@ DWORD STDCALL LoadSPCustomData(Unit* ptChar)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_LoadSPPlayerCustomData_114 )
|
FCT_ASM (caller_LoadSPPlayerCustomData_114 )
|
||||||
MOV EDI, EAX
|
MOV EDI,EAX
|
||||||
TEST EDI, EDI
|
TEST EDI,EDI
|
||||||
JNZ JMP_LoadSPPlayerCustomData
|
JNZ JMP_LoadSPPlayerCustomData
|
||||||
PUSH DWORD PTR SS : [ESP + 0x1C]
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
CALL LoadSPCustomData
|
CALL LoadSPCustomData
|
||||||
MOV EDI, EAX
|
MOV EDI,EAX
|
||||||
TEST EDI, EDI
|
TEST EDI,EDI
|
||||||
JNZ JMP_LoadSPPlayerCustomData
|
JNZ JMP_LoadSPPlayerCustomData
|
||||||
RETN
|
RETN
|
||||||
JMP_LoadSPPlayerCustomData :
|
JMP_LoadSPPlayerCustomData:
|
||||||
ADD DWORD PTR SS : [ESP], 0x14
|
ADD DWORD PTR SS:[ESP],0x14
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM (caller_LoadSPPlayerCustomData )
|
FCT_ASM (caller_LoadSPPlayerCustomData )
|
||||||
@ -187,33 +189,31 @@ void sendData(BYTE* data, DWORD size, bool isShared)
|
|||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD sizeExtended;
|
|
||||||
static BYTE* dataExtended;
|
|
||||||
static DWORD sizeShared;
|
|
||||||
static BYTE* dataShared;
|
|
||||||
|
|
||||||
void FASTCALL SendSaveFiles (char* ptPath, DWORD maxsize, char* name)
|
void FASTCALL SendSaveFiles (char* ptPath, DWORD maxsize, char* name)
|
||||||
{
|
{
|
||||||
// DWORD size;
|
|
||||||
// BYTE* data;
|
|
||||||
|
|
||||||
D2FogGetSavePath(ptPath,maxsize);
|
D2FogGetSavePath(ptPath,maxsize);
|
||||||
|
|
||||||
log_msg("\n--- Start SendSaveFiles ---\n");
|
log_msg("\n--- Start SendSaveFiles ---\n");
|
||||||
|
active_sharedStash = active_SharedStashInMultiPlayer == 2;
|
||||||
log_msg("path = %s\n\nmaxsize = %d\n\nname = %s\n\n", ptPath, maxsize, name);
|
log_msg("active_sharedStash = %d : %d\n\n", active_sharedStash);
|
||||||
|
|
||||||
// Send Extended Save File
|
// Send Extended Save File
|
||||||
log_msg("Send Extended Save File\n");
|
log_msg("Send Extended Save File\n");
|
||||||
dataExtended = readExtendedSaveFile(name, &sizeExtended);
|
DWORD sizeExtended = 0;
|
||||||
|
BYTE* dataExtended = readExtendedSaveFile(name, &sizeExtended);
|
||||||
sendData(dataExtended, sizeExtended, false);
|
sendData(dataExtended, sizeExtended, false);
|
||||||
D2FogMemDeAlloc(dataExtended,__FILE__,__LINE__,0);
|
D2FogMemDeAlloc(dataExtended,__FILE__,__LINE__,0);
|
||||||
|
|
||||||
// Send Shared Save File
|
// Send Shared Save File
|
||||||
log_msg("Send Shared Save File\n");
|
//if (active_sharedStash)
|
||||||
dataShared = readSharedSaveFile(name, &sizeShared);
|
{
|
||||||
sendData(dataShared, sizeShared, true);
|
log_msg("Send Shared Save File\n");
|
||||||
D2FogMemDeAlloc(dataShared,__FILE__,__LINE__,0);
|
DWORD sizeShared = 0;
|
||||||
|
BYTE* dataShared = readSharedSaveFile(name, &sizeShared);
|
||||||
|
sendData(dataShared, sizeShared, true);
|
||||||
|
D2FogMemDeAlloc(dataShared,__FILE__,__LINE__,0);
|
||||||
|
}
|
||||||
|
|
||||||
// Ending load
|
// Ending load
|
||||||
log_msg("End SendSaveFiles.\n\n");
|
log_msg("End SendSaveFiles.\n\n");
|
||||||
@ -226,6 +226,8 @@ DWORD STDCALL ReceiveSaveFiles (DWORD clientID, t_rcvMsg* msg)
|
|||||||
if( (msg->packID != customPackID) || !msg->isCustom) return msg->packID;
|
if( (msg->packID != customPackID) || !msg->isCustom) return msg->packID;
|
||||||
|
|
||||||
log_msg("Loading Receive Packet: clientID=%d\t type=%X\t finalSize=%X\t packSize=%02X\t data=%08X\n", clientID, msg->type, msg->finalSize, msg->packSize, msg->data);
|
log_msg("Loading Receive Packet: clientID=%d\t type=%X\t finalSize=%X\t packSize=%02X\t data=%08X\n", clientID, msg->type, msg->finalSize, msg->packSize, msg->data);
|
||||||
|
active_sharedStash = active_SharedStashInMultiPlayer == 2;
|
||||||
|
log_msg("active_sharedStash = %d : %d\n\n", active_sharedStash);
|
||||||
|
|
||||||
bool isShared;
|
bool isShared;
|
||||||
|
|
||||||
@ -314,6 +316,8 @@ int STDCALL ReceiveSaveFiles_9(DWORD clientID, SOCKET s, char *buf, int len, int
|
|||||||
DWORD STDCALL LoadMPCustomData(Unit* ptChar)
|
DWORD STDCALL LoadMPCustomData(Unit* ptChar)
|
||||||
{
|
{
|
||||||
log_msg("Start LoadMPCustomData\n");
|
log_msg("Start LoadMPCustomData\n");
|
||||||
|
active_sharedStash = active_SharedStashInMultiPlayer == 2;
|
||||||
|
log_msg("active_sharedStash = %d : %d\n\n", active_sharedStash);
|
||||||
|
|
||||||
if (!ptChar) return NULL;
|
if (!ptChar) return NULL;
|
||||||
if (!ptChar)
|
if (!ptChar)
|
||||||
@ -354,7 +358,7 @@ DWORD STDCALL LoadMPCustomData(Unit* ptChar)
|
|||||||
log_msg("is LOD Game\n");
|
log_msg("is LOD Game\n");
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = loadExtendedSaveFile(ptChar, curSF->dataExtended, curSF->sizeExtended);
|
ret = loadExtendedSaveFile(ptChar, curSF->dataExtended, curSF->sizeExtended);
|
||||||
if (!ret)
|
if (!ret && active_sharedStash)
|
||||||
ret = loadSharedSaveFile(ptChar, curSF->dataShared, curSF->sizeShared);
|
ret = loadSharedSaveFile(ptChar, curSF->dataShared, curSF->sizeShared);
|
||||||
} else {
|
} else {
|
||||||
log_msg("is not LOD Game\n");
|
log_msg("is not LOD Game\n");
|
||||||
@ -367,21 +371,22 @@ DWORD STDCALL LoadMPCustomData(Unit* ptChar)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_LoadMPPlayerCustomData_114 )
|
FCT_ASM ( caller_LoadMPPlayerCustomData_114 )
|
||||||
PUSH DWORD PTR SS : [EDI]
|
PUSH DWORD PTR SS:[EDI]
|
||||||
CALL LoadMPCustomData
|
CALL LoadMPCustomData
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JNZ JMP_LoadMPlayerCustomData
|
JNZ JMP_LoadMPlayerCustomData
|
||||||
CMP DWORD PTR DS : [EDI], 0
|
CMP DWORD PTR DS:[EDI],0
|
||||||
JNZ Continue_LoadMP
|
JNZ Continue_LoadMP
|
||||||
ADD DWORD PTR SS : [ESP], 0x1D
|
ADD DWORD PTR SS:[ESP],0x1D
|
||||||
Continue_LoadMP :
|
Continue_LoadMP:
|
||||||
|
RETN
|
||||||
|
JMP_LoadMPlayerCustomData:
|
||||||
|
SUB DWORD PTR SS:[ESP],0x10
|
||||||
RETN
|
RETN
|
||||||
JMP_LoadMPlayerCustomData :
|
|
||||||
SUB DWORD PTR SS : [ESP], 0x10
|
|
||||||
RETN
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM ( caller_LoadMPPlayerCustomData_111 )
|
FCT_ASM ( caller_LoadMPPlayerCustomData_111 )
|
||||||
PUSH DWORD PTR SS:[EBX]
|
PUSH DWORD PTR SS:[EBX]
|
||||||
CALL LoadMPCustomData
|
CALL LoadMPCustomData
|
||||||
@ -443,19 +448,20 @@ FCT_ASM ( caller_SendSaveFiles )
|
|||||||
JMP SendSaveFiles
|
JMP SendSaveFiles
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_ReceiveSaveFiles_114 )
|
FCT_ASM ( caller_ReceiveSaveFiles_114 )
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
LEA EBX, DWORD PTR DS : [ESI + 4]
|
LEA EBX,DWORD PTR DS:[ESI+4]
|
||||||
PUSH EBX //Message
|
PUSH EBX //Message
|
||||||
MOV EBX, DWORD PTR SS : [ESI]
|
MOV EBX,DWORD PTR SS:[ESI]
|
||||||
PUSH EBX //ID client
|
PUSH EBX //ID client
|
||||||
CALL ReceiveSaveFiles
|
CALL ReceiveSaveFiles
|
||||||
POP EDX
|
POP EDX
|
||||||
POP ECX
|
POP ECX
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM ( caller_ReceiveSaveFiles_111 )
|
FCT_ASM ( caller_ReceiveSaveFiles_111 )
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
@ -511,15 +517,15 @@ go_to_default:
|
|||||||
void Install_LoadPlayerData()
|
void Install_LoadPlayerData()
|
||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled || !active_PlayerCustomData) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Game & D2Client for load Player's custom data. (LoadPlayerData)\n");
|
log_msg("Patch D2Game & D2Client for load Player's custom data. (LoadPlayerData)\n");
|
||||||
|
|
||||||
// Load SP player custom data.
|
// Load SP player custom data.
|
||||||
mem_seek R8(D2Game, 5046F, 5086F, 5CB0F, BB8ED, 278CD, 465BD, 5638D, 3BCCD, 13447A);
|
mem_seek R8(D2Game, 5046F, 5086F, 5CB0F, BB8ED, 278CD, 465BD, 5638D, 3BCCD, 13447A);
|
||||||
memt_byte( 0x8B, 0xE8); // CALL caller_LoadSPPlayerCustomData
|
memt_byte( 0x8B, 0xE8); // CALL caller_LoadSPPlayerCustomData
|
||||||
MEMT_REF4( version_D2Game == V114d ? 0x75FF85F8 : 0x75F685F0 , version_D2Game == V114d ? caller_LoadSPPlayerCustomData_114 : caller_LoadSPPlayerCustomData);
|
MEMT_REF4( version_D2Game >= V114d ? 0x75FF85F8 : 0x75F685F0 , version_D2Game >= V114d ? caller_LoadSPPlayerCustomData_114 : caller_LoadSPPlayerCustomData);
|
||||||
memt_byte( version_D2Game == V114d ? 0x13 : 0x16, 0x90); // NOP
|
memt_byte( version_D2Game >= V114d ? 0x13 : 0x16, 0x90); // NOP
|
||||||
//6FC8CB0F 8BF0 MOV ESI,EAX
|
//6FC8CB0F 8BF0 MOV ESI,EAX
|
||||||
//6FC8CB11 85F6 TEST ESI,ESI
|
//6FC8CB11 85F6 TEST ESI,ESI
|
||||||
//6FC8CB13 75 16 JNZ SHORT D2Game.6FC8CB2B
|
//6FC8CB13 75 16 JNZ SHORT D2Game.6FC8CB2B
|
||||||
@ -538,11 +544,14 @@ void Install_LoadPlayerData()
|
|||||||
//6FC5BCCD |> 8BF0 MOV ESI,EAX
|
//6FC5BCCD |> 8BF0 MOV ESI,EAX
|
||||||
//6FC5BCCF |. 85F6 TEST ESI,ESI
|
//6FC5BCCF |. 85F6 TEST ESI,ESI
|
||||||
//6FC5BCD1 |. 75 16 JNZ SHORT D2Game.6FC5BCE9
|
//6FC5BCD1 |. 75 16 JNZ SHORT D2Game.6FC5BCE9
|
||||||
|
//0053447A |. 8BF8 MOV EDI,EAX
|
||||||
|
//0053447C |. 85FF TEST EDI,EDI
|
||||||
|
//0053447E |. 75 13 JNZ SHORT Game.00534493
|
||||||
|
|
||||||
// Load MP player custom data.
|
// Load MP player custom data.
|
||||||
mem_seek R8(D2Game, 50790, 50B90, 5CC66, BB777, 27757, 46447, 56217, 3BB57, 134572);
|
mem_seek R8(D2Game, 50790, 50B90, 5CC66, BB777, 27757, 46447, 56217, 3BB57, 134572);
|
||||||
memt_byte( 0x83, 0xE8);
|
memt_byte( 0x83, 0xE8);
|
||||||
MEMT_REF4( version_D2Game == V114d ? 0x1D74003F : version_D2Game >= V111 ? 0x2174003B : version_D2Game == V110 ? 0x4674003F : 0x1D74003F, version_D2Game == V114d ? caller_LoadMPPlayerCustomData_114 : version_D2Game >= V111 ? caller_LoadMPPlayerCustomData_111 : version_D2Game == V110 ? caller_LoadMPPlayerCustomData: caller_LoadMPPlayerCustomData_9);
|
MEMT_REF4( version_D2Game >= V114d ? 0x1D74003F : version_D2Game >= V111 ? 0x2174003B : version_D2Game == V110 ? 0x4674003F : 0x1D74003F, version_D2Game >= V114d ? caller_LoadMPPlayerCustomData_114 : version_D2Game >= V111 ? caller_LoadMPPlayerCustomData_111 : version_D2Game == V110 ? caller_LoadMPPlayerCustomData: caller_LoadMPPlayerCustomData_9);
|
||||||
//6FC8CC66 . 833F 00 CMP DWORD PTR DS:[EDI],0
|
//6FC8CC66 . 833F 00 CMP DWORD PTR DS:[EDI],0
|
||||||
//6FC8CC69 . 74 46 JE SHORT D2Game.6FC8CCB1
|
//6FC8CC69 . 74 46 JE SHORT D2Game.6FC8CCB1
|
||||||
//0203B777 |> 833B 00 CMP DWORD PTR DS:[EBX],0
|
//0203B777 |> 833B 00 CMP DWORD PTR DS:[EBX],0
|
||||||
@ -555,31 +564,26 @@ void Install_LoadPlayerData()
|
|||||||
//6FC7621A |. 74 21 JE SHORT D2Game.6FC7623D
|
//6FC7621A |. 74 21 JE SHORT D2Game.6FC7623D
|
||||||
//6FC5BB57 |> 833B 00 CMP DWORD PTR DS:[EBX],0
|
//6FC5BB57 |> 833B 00 CMP DWORD PTR DS:[EBX],0
|
||||||
//6FC5BB5A |. 74 21 JE SHORT D2Game.6FC5BB7D
|
//6FC5BB5A |. 74 21 JE SHORT D2Game.6FC5BB7D
|
||||||
|
//00534572 |> 833F 00 CMP DWORD PTR DS:[EDI],0
|
||||||
|
//00534575 |. 74 1D JE SHORT Game.00534594
|
||||||
|
|
||||||
// Send save files to Server.
|
// Send save files to Server.
|
||||||
mem_seek R8(D2Client, CF42, CF32, D5A2, 733FC, 5DFDC, 7933C, 1457C, B638C, 7807E);
|
mem_seek R8(D2Client, CF42, CF32, D5A2, 733FC, 5DFDC, 7933C, 1457C, B638C, 7807E);
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2FogGetSavePath, version_D2Game >= V111 ? caller_SendSaveFiles_111 : caller_SendSaveFiles);
|
||||||
MEMT_REF4(0xFFF8EFCE, caller_SendSaveFiles_111);
|
//6FAAD5A1 |. E8 88D10B00 CALL <JMP.&Fog.#10115>
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2FogGetSavePath, version_D2Game >= V111 ? caller_SendSaveFiles_111 : caller_SendSaveFiles);
|
|
||||||
}
|
|
||||||
|
|
||||||
//6FAAD5A1 |. E8 88D10B00 CALL <JMP.&Fog.#10115>
|
|
||||||
//6FB233FB |. E8 CA8AF9FF CALL <JMP.&Fog.#10115>
|
//6FB233FB |. E8 CA8AF9FF CALL <JMP.&Fog.#10115>
|
||||||
//6FB0DFDB |. E8 C6DEFAFF CALL <JMP.&Fog.#10115>
|
//6FB0DFDB |. E8 C6DEFAFF CALL <JMP.&Fog.#10115>
|
||||||
//6FB2933B |. E8 6A2CF9FF CALL <JMP.&Fog.#10115>
|
//6FB2933B |. E8 6A2CF9FF CALL <JMP.&Fog.#10115>
|
||||||
//6FAC457B |. E8 187AFFFF CALL <JMP.&Fog.#10115>
|
//6FAC457B |. E8 187AFFFF CALL <JMP.&Fog.#10115>
|
||||||
//6FB6638B |. E8 2E5BF5FF CALL <JMP.&Fog.#10115>
|
//6FB6638B |. E8 2E5BF5FF CALL <JMP.&Fog.#10115>
|
||||||
|
//0047807D |. E8 CEEFF8FF CALL Game.00407050
|
||||||
|
|
||||||
// Receive save files from client.
|
// Receive save files from client.
|
||||||
mem_seek R8(D2Game, 183A, 183A, 191A, 376E9, 703D9, 624D9, CAF39, D53E9, 13F114);
|
mem_seek R8(D2Game, 183A, 183A, 191A, 376E9, 703D9, 624D9, CAF39, D53E9, 13F114);
|
||||||
memt_byte( 0x8B ,0xE8);
|
memt_byte( 0x8B ,0xE8);
|
||||||
if (version_D2Game == V114d) {
|
if ( version_D2Game >= V111 ) {
|
||||||
MEMT_REF4(0x46B60F1E, caller_ReceiveSaveFiles_114);
|
MEMT_REF4( version_D2Game >= V114d ? 0x46B60F1E : 0xB60F005D, version_D2Game >= V114d ? caller_ReceiveSaveFiles_114 : caller_ReceiveSaveFiles_111);
|
||||||
memt_byte(0x04, 0x90);
|
if (version_D2Game < V114a) memt_byte( 0x45 ,0x90);
|
||||||
} else if ( version_D2Game >= V111 ) {
|
|
||||||
MEMT_REF4( 0xB60F005D, caller_ReceiveSaveFiles_111);
|
|
||||||
memt_byte( 0x45 ,0x90);
|
|
||||||
memt_byte( 0x04 ,0x90);
|
memt_byte( 0x04 ,0x90);
|
||||||
//01FB76E9 |. 8B5D 00 MOV EBX,DWORD PTR SS:[EBP]
|
//01FB76E9 |. 8B5D 00 MOV EBX,DWORD PTR SS:[EBP]
|
||||||
//01FB76EC |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4]
|
//01FB76EC |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4]
|
||||||
@ -591,6 +595,8 @@ void Install_LoadPlayerData()
|
|||||||
//6FCEAF3C |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4]
|
//6FCEAF3C |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4]
|
||||||
//6FCF53E9 |. 8B5D 00 MOV EBX,DWORD PTR SS:[EBP]
|
//6FCF53E9 |. 8B5D 00 MOV EBX,DWORD PTR SS:[EBP]
|
||||||
//6FCF53EC |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4]
|
//6FCF53EC |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4]
|
||||||
|
//0053F114 |. 8B1E MOV EBX,DWORD PTR DS:[ESI]
|
||||||
|
//0053F116 |. 0FB646 04 MOVZX EAX,BYTE PTR DS:[ESI+4]
|
||||||
} else {
|
} else {
|
||||||
MEMT_REF4( 0x04468A3E, caller_ReceiveSaveFiles);
|
MEMT_REF4( 0x04468A3E, caller_ReceiveSaveFiles);
|
||||||
//6FC3191A |. 8B3E MOV EDI,DWORD PTR DS:[ESI]
|
//6FC3191A |. 8B3E MOV EDI,DWORD PTR DS:[ESI]
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Localized strings functions.
|
Localized strings functions.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
#include "INIfile.h"
|
#include "INIfile.h"
|
||||||
@ -10,6 +10,8 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
const char* LOCALIZED_STRINGS_FILENAME = "PlugY\\LocalizedStrings.ini";
|
||||||
|
|
||||||
LPWSTR StripGender(LPWSTR text)
|
LPWSTR StripGender(LPWSTR text)
|
||||||
{
|
{
|
||||||
if (text[0] == L' ')
|
if (text[0] == L' ')
|
||||||
@ -32,11 +34,14 @@ struct LocalizedTypeString
|
|||||||
LPSTR itemStr;
|
LPSTR itemStr;
|
||||||
LPWSTR typeLocalizedString;
|
LPWSTR typeLocalizedString;
|
||||||
} *sLocalizedTypeStrings;
|
} *sLocalizedTypeStrings;
|
||||||
LPWSTR sLocalizedStrings[60];
|
|
||||||
|
LPWSTR sLocalizedStrings[100];
|
||||||
int nbLocalizedTypeString = 0;
|
int nbLocalizedTypeString = 0;
|
||||||
|
|
||||||
LPWSTR getLocalString(int stringId)
|
LPWSTR getLocalString(int stringId)
|
||||||
{
|
{
|
||||||
|
if (stringId < 0 || stringId >= 100)
|
||||||
|
return L"";
|
||||||
return sLocalizedStrings[stringId];
|
return sLocalizedStrings[stringId];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,19 +98,29 @@ void loadLocalString(INIFileW *iniFile, int id, LPCWSTR section, LPCWSTR key)
|
|||||||
sLocalizedStrings[id] = new WCHAR[len + 1];
|
sLocalizedStrings[id] = new WCHAR[len + 1];
|
||||||
wcsncpy(sLocalizedStrings[id], section, len);
|
wcsncpy(sLocalizedStrings[id], section, len);
|
||||||
sLocalizedStrings[id][len] = NULL;
|
sLocalizedStrings[id][len] = NULL;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int j = 0;
|
||||||
|
int i = 0;
|
||||||
if (buffer[0] == L'"' && buffer[len-1] == L'"')
|
if (buffer[0] == L'"' && buffer[len-1] == L'"')
|
||||||
{
|
{
|
||||||
sLocalizedStrings[id] = new WCHAR[len - 1];
|
buffer[len-1] = NULL;
|
||||||
wcsncpy(sLocalizedStrings[id], buffer + 1, len - 2);
|
i++;
|
||||||
sLocalizedStrings[id][len - 2] = NULL;
|
len -= 2;
|
||||||
}
|
}
|
||||||
else
|
sLocalizedStrings[id] = new WCHAR[len + 1];
|
||||||
|
for (; i<len; i++)
|
||||||
{
|
{
|
||||||
sLocalizedStrings[id] = new WCHAR[len + 1];
|
if (buffer[i] == L'\\' && buffer[i+1] == L'n')
|
||||||
wcsncpy(sLocalizedStrings[id], buffer, len);
|
{
|
||||||
sLocalizedStrings[id][len] = NULL;
|
sLocalizedStrings[id][j++] = L'\n';
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sLocalizedStrings[id][j++] = buffer[i];
|
||||||
}
|
}
|
||||||
|
sLocalizedStrings[id][j] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetPrivateProfileStringList(LPCWCHAR m_cache, LPCWSTR section, LPCWSTR key)
|
int GetPrivateProfileStringList(LPCWCHAR m_cache, LPCWSTR section, LPCWSTR key)
|
||||||
@ -143,7 +158,7 @@ int GetPrivateProfileStringList(LPCWCHAR m_cache, LPCWSTR section, LPCWSTR key)
|
|||||||
|
|
||||||
// Treat next section
|
// Treat next section
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (nextHeader)
|
while (nextHeader && i < nb)
|
||||||
{
|
{
|
||||||
cur = nextHeader + wcslen(sectionString);
|
cur = nextHeader + wcslen(sectionString);
|
||||||
end = wcsstr(cur, L"]");
|
end = wcsstr(cur, L"]");
|
||||||
@ -227,12 +242,20 @@ int GetPrivateProfileStringList(LPCWCHAR m_cache, LPCWSTR section, LPCWSTR key)
|
|||||||
|
|
||||||
void loadLocalizedStrings(int language)
|
void loadLocalizedStrings(int language)
|
||||||
{
|
{
|
||||||
|
if (sLocalizedTypeStrings)
|
||||||
|
return;
|
||||||
|
|
||||||
INIFileW *iniFile = new INIFileW;
|
INIFileW *iniFile = new INIFileW;
|
||||||
|
|
||||||
log_msg("***** Load localized Strings *****\n");
|
log_msg("***** Load localized Strings *****\n");
|
||||||
if (!iniFile->InitReadWrite("PlugY\\LocalizedStrings.ini", INIFILE_MPQREAD, 0))//C:\\Jeux\\Blizzard\\D2\\-
|
if (iniFile->InitReadWrite(LOCALIZED_STRINGS_FILENAME, INIFILE_MPQREAD, 0))//C:\\Jeux\\Blizzard\\D2\\-
|
||||||
|
log_msg("File %s loaded from MPQ.\n\n", LOCALIZED_STRINGS_FILENAME);
|
||||||
|
else if (iniFile->InitReadWrite(LOCALIZED_STRINGS_FILENAME, INIFILE_READ, 0))//C:\\Jeux\\Blizzard\\D2\\-
|
||||||
|
log_msg("File %s loaded from PlugY folder.\n\n", LOCALIZED_STRINGS_FILENAME);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
log_msg("Failed to load LocalizedStrings, default values used.\n\n");
|
log_msg("Failed to load %s.\n\n", LOCALIZED_STRINGS_FILENAME);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPCWSTR key;
|
LPCWSTR key;
|
||||||
@ -266,6 +289,7 @@ void loadLocalizedStrings(int language)
|
|||||||
LOAD(STR_STASH_NEXT_PAGE);
|
LOAD(STR_STASH_NEXT_PAGE);
|
||||||
LOAD(STR_TOGGLE_TO_PERSONAL);
|
LOAD(STR_TOGGLE_TO_PERSONAL);
|
||||||
LOAD(STR_TOGGLE_TO_SHARED);
|
LOAD(STR_TOGGLE_TO_SHARED);
|
||||||
|
LOAD(STR_TOGGLE_MULTI_DISABLED);
|
||||||
LOAD(STR_STASH_PREVIOUS_INDEX);
|
LOAD(STR_STASH_PREVIOUS_INDEX);
|
||||||
LOAD(STR_STASH_NEXT_INDEX);
|
LOAD(STR_STASH_NEXT_INDEX);
|
||||||
LOAD(STR_PUT_GOLD);
|
LOAD(STR_PUT_GOLD);
|
||||||
@ -277,6 +301,7 @@ void loadLocalizedStrings(int language)
|
|||||||
LOAD(STR_PREVIOUS_PAGE);
|
LOAD(STR_PREVIOUS_PAGE);
|
||||||
LOAD(STR_NEXT_PAGE);
|
LOAD(STR_NEXT_PAGE);
|
||||||
LOAD(STR_ITEM_LEVEL);
|
LOAD(STR_ITEM_LEVEL);
|
||||||
|
LOAD(STR_PAGE_TYPE_CHANGE);
|
||||||
|
|
||||||
// Cube receipt :
|
// Cube receipt :
|
||||||
LOAD(STR_COW_PORTAL);
|
LOAD(STR_COW_PORTAL);
|
||||||
@ -316,6 +341,27 @@ void loadLocalizedStrings(int language)
|
|||||||
LOAD(STR_ONLY_HELL);
|
LOAD(STR_ONLY_HELL);
|
||||||
LOAD(STR_ONLY_CLASS);
|
LOAD(STR_ONLY_CLASS);
|
||||||
|
|
||||||
|
// Breakpoints :
|
||||||
|
LOAD(STR_MERCENARIES);
|
||||||
|
LOAD(STR_MERC_ACT_1);
|
||||||
|
LOAD(STR_MERC_ACT_2);
|
||||||
|
LOAD(STR_MERC_ACT_3);
|
||||||
|
LOAD(STR_MERC_ACT_5);
|
||||||
|
LOAD(STR_BREAKPOINT);
|
||||||
|
LOAD(STR_BREAKPOINTS);
|
||||||
|
LOAD(STR_BLOCK_FRAMES);
|
||||||
|
LOAD(STR_CASTING_FRAMES);
|
||||||
|
LOAD(STR_HIT_RECOVERY_FRAMES);
|
||||||
|
LOAD(STR_1H_SWINGING_WEAPON);
|
||||||
|
LOAD(STR_OTHER_WEAPONS);
|
||||||
|
LOAD(STR_HUMAN_FORM);
|
||||||
|
LOAD(STR_BEAR_FORM);
|
||||||
|
LOAD(STR_WOLF_FORM);
|
||||||
|
LOAD(STR_VAMPIRE_FORM);
|
||||||
|
LOAD(STR_SPEARS_AND_STAVES);
|
||||||
|
LOAD(STR_LIGHTNING_CHAIN_LIGHTNING);
|
||||||
|
LOAD(STR_OTHER_SPELLS);
|
||||||
|
|
||||||
iniFile->close();
|
iniFile->close();
|
||||||
delete iniFile;
|
delete iniFile;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
/*==============================================
|
/*==============================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
|
|
||||||
this file implements some common and useful
|
this file implements some common and useful
|
||||||
function related to some Diablo II mechanisms.
|
function related to some Diablo II mechanisms.
|
||||||
|
|
||||||
/*============================================*/
|
/*============================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -26,6 +26,7 @@ enum eStringList
|
|||||||
STR_STASH_NEXT_PAGE,
|
STR_STASH_NEXT_PAGE,
|
||||||
STR_TOGGLE_TO_PERSONAL,
|
STR_TOGGLE_TO_PERSONAL,
|
||||||
STR_TOGGLE_TO_SHARED,
|
STR_TOGGLE_TO_SHARED,
|
||||||
|
STR_TOGGLE_MULTI_DISABLED,
|
||||||
STR_STASH_PREVIOUS_INDEX,
|
STR_STASH_PREVIOUS_INDEX,
|
||||||
STR_STASH_NEXT_INDEX,
|
STR_STASH_NEXT_INDEX,
|
||||||
STR_PUT_GOLD,
|
STR_PUT_GOLD,
|
||||||
@ -37,6 +38,7 @@ enum eStringList
|
|||||||
STR_PREVIOUS_PAGE,
|
STR_PREVIOUS_PAGE,
|
||||||
STR_NEXT_PAGE,
|
STR_NEXT_PAGE,
|
||||||
STR_ITEM_LEVEL,
|
STR_ITEM_LEVEL,
|
||||||
|
STR_PAGE_TYPE_CHANGE,
|
||||||
//
|
//
|
||||||
STR_COW_PORTAL,
|
STR_COW_PORTAL,
|
||||||
STR_PANDEMONIUM_PORTAL,
|
STR_PANDEMONIUM_PORTAL,
|
||||||
@ -74,6 +76,26 @@ enum eStringList
|
|||||||
STR_ONLY_N_H,
|
STR_ONLY_N_H,
|
||||||
STR_ONLY_HELL,
|
STR_ONLY_HELL,
|
||||||
STR_ONLY_CLASS,
|
STR_ONLY_CLASS,
|
||||||
|
|
||||||
|
STR_MERCENARIES,
|
||||||
|
STR_MERC_ACT_1,
|
||||||
|
STR_MERC_ACT_2,
|
||||||
|
STR_MERC_ACT_3,
|
||||||
|
STR_MERC_ACT_5,
|
||||||
|
STR_BREAKPOINT,
|
||||||
|
STR_BREAKPOINTS,
|
||||||
|
STR_BLOCK_FRAMES,
|
||||||
|
STR_CASTING_FRAMES,
|
||||||
|
STR_HIT_RECOVERY_FRAMES,
|
||||||
|
STR_1H_SWINGING_WEAPON,
|
||||||
|
STR_OTHER_WEAPONS,
|
||||||
|
STR_HUMAN_FORM,
|
||||||
|
STR_BEAR_FORM,
|
||||||
|
STR_WOLF_FORM,
|
||||||
|
STR_VAMPIRE_FORM,
|
||||||
|
STR_SPEARS_AND_STAVES,
|
||||||
|
STR_LIGHTNING_CHAIN_LIGHTNING,
|
||||||
|
STR_OTHER_SPELLS
|
||||||
};
|
};
|
||||||
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Print PlugY version on screen.
|
Print PlugY version on screen.
|
||||||
|
|
||||||
@ -35,28 +35,14 @@ void STDCALL printPlugYVersion(void** childrens, DWORD* sgnNumChildren)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void STDCALL printPlugYVersion114()
|
void** childrens;
|
||||||
{
|
DWORD* sgnNumChildren;
|
||||||
if (active_Windowed)
|
FCT_ASM ( caller_printPlugYVersion114 )
|
||||||
SetWindowedOptions();
|
PUSH sgnNumChildren
|
||||||
if (active_PrintPlugYVersion)
|
PUSH childrens
|
||||||
{
|
CALL printPlugYVersion
|
||||||
char buf[20];
|
MOV ECX,0x115
|
||||||
void* textbox = D2CreateTextBox(newTextBoxData);
|
RETN
|
||||||
void** childrens = (void**)0x779350;
|
|
||||||
DWORD* sgnNumChildren = (DWORD*)0x779944;
|
|
||||||
childrens[*sgnNumChildren] = textbox;
|
|
||||||
d2_assert((*sgnNumChildren)++ >= 40, "sgnNumChildren < MAX_CHILDREN", __FILE__, __LINE__);
|
|
||||||
sprintf(buf, "PlugY %s", PLUGY_VERSION);
|
|
||||||
D2PrintLineOnTextBox(textbox, buf, colorOfPlugYVersion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FCT_ASM( caller_printPlugYVersion114 )
|
|
||||||
POP ESI
|
|
||||||
CALL printPlugYVersion114
|
|
||||||
MOV ECX, 0x115
|
|
||||||
JMP ESI
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_printPlugYVersion )
|
FCT_ASM ( caller_printPlugYVersion )
|
||||||
@ -76,23 +62,27 @@ void Install_PrintPlugYVersion()
|
|||||||
|
|
||||||
log_msg("Patch D2Launch to print PlugY version. (PrintPlugYVersion)\n");
|
log_msg("Patch D2Launch to print PlugY version. (PrintPlugYVersion)\n");
|
||||||
|
|
||||||
if (version_D2Launch == V114d) {
|
// Print PlugY version.
|
||||||
mem_seek R8(D2Launch, 7F5D, 7F7D, 9639, 117C7, 178A7, 16AF7, 18061, 10A11, 33798);
|
mem_seek R8(D2Launch, 7F5D, 7F7D, 9639, 117C7, 178A7, 16AF7, 18061, 10A11, 33798);
|
||||||
memt_byte(0xB9, 0xE8);
|
if (version_D2Launch == V114d)
|
||||||
MEMT_REF4(0x00000115, caller_printPlugYVersion114);
|
{
|
||||||
} else {
|
memt_byte(0xB9, 0xE8);
|
||||||
// Print PlugY version.
|
MEMT_REF4(0x00000115, caller_printPlugYVersion114);
|
||||||
mem_seek R8(D2Launch, 7F5D, 7F7D, 9639, 117C7, 178A7, 16AF7, 18061, 10A11, 10A11);
|
childrens = (void**)(offset_Game + 0x379350);
|
||||||
MEMJ_REF4(D2CreateTextBox, caller_printPlugYVersion);
|
sgnNumChildren = (DWORD*)(offset_Game + 0x379944);
|
||||||
//6FA19638 |. E8 1BED0000 CALL <JMP.&D2Win.#10017>
|
//00433798 |. B9 15010000 MOV ECX,115
|
||||||
//6FA517C6 |. E8 6F81FFFF CALL <JMP.&D2Win.#10147>
|
}
|
||||||
//6FA578A6 |. E8 D71FFFFF CALL <JMP.&D2Win.#10113>
|
else
|
||||||
//6FA56B1F |. E8 1A2EFFFF CALL <JMP.&D2Win.#10098>
|
{
|
||||||
//6FA56AF6 |. E8 432EFFFF CALL <JMP.&D2Win.#10098>
|
MEMJ_REF4( D2CreateTextBox, caller_printPlugYVersion);
|
||||||
//6FA58060 |. E8 ED18FFFF CALL <JMP.&D2Win.#10098>
|
//6FA19638 |. E8 1BED0000 CALL <JMP.&D2Win.#10017>
|
||||||
//6FA50A10 |. E8 218FFFFF CALL <JMP.&D2Win.#10164>
|
//6FA517C6 |. E8 6F81FFFF CALL <JMP.&D2Win.#10147>
|
||||||
}
|
//6FA578A6 |. E8 D71FFFFF CALL <JMP.&D2Win.#10113>
|
||||||
|
//6FA56B1F |. E8 1A2EFFFF CALL <JMP.&D2Win.#10098>
|
||||||
|
//6FA56AF6 |. E8 432EFFFF CALL <JMP.&D2Win.#10098>
|
||||||
|
//6FA58060 |. E8 ED18FFFF CALL <JMP.&D2Win.#10098>
|
||||||
|
//6FA50A10 |. E8 218FFFFF CALL <JMP.&D2Win.#10164>
|
||||||
|
}
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
@ -106,6 +96,14 @@ void FASTCALL versionChange(void* screen, char* text, DWORD color)
|
|||||||
D2PrintLineOnTextBox(screen,versionText,modVersionColor);
|
D2PrintLineOnTextBox(screen,versionText,modVersionColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FCT_ASM ( caller_VersionChange_114 )
|
||||||
|
MOV CL, BYTE PTR DS:[modVersionColor]
|
||||||
|
MOV BYTE PTR SS:[ESP+4], CL
|
||||||
|
MOV EDX,versionText
|
||||||
|
MOV ECX,ESI
|
||||||
|
RETN
|
||||||
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_VersionChange_10 )
|
FCT_ASM ( caller_VersionChange_10 )
|
||||||
MOV CL, BYTE PTR DS:[modVersionColor]
|
MOV CL, BYTE PTR DS:[modVersionColor]
|
||||||
MOV BYTE PTR SS:[ESP+4], CL
|
MOV BYTE PTR SS:[ESP+4], CL
|
||||||
@ -114,12 +112,6 @@ FCT_ASM ( caller_VersionChange_10 )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM(caller_VersionChange_114)
|
|
||||||
MOV EDX, versionText
|
|
||||||
MOV ECX, ESI
|
|
||||||
RETN
|
|
||||||
}}
|
|
||||||
|
|
||||||
void Install_VersionChange()// BUG WITH 2MOD if D2Mod started before PlugY ????
|
void Install_VersionChange()// BUG WITH 2MOD if D2Mod started before PlugY ????
|
||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
@ -133,14 +125,17 @@ void Install_VersionChange()// BUG WITH 2MOD if D2Mod started before PlugY ????
|
|||||||
|
|
||||||
|
|
||||||
// Print LoD/Mod version.
|
// Print LoD/Mod version.
|
||||||
if (version_D2Launch == V114d) {
|
if (version_D2Launch >= V114d)
|
||||||
mem_seek R8(D2Launch, 00000, 00000, 9723, 1189B, 1797B, 16BCB, 18134, 10AE4, 337EA);//6FA19721-6FA10000
|
|
||||||
memt_byte(0x8D, 0xE8); // CALL
|
|
||||||
MEMT_REF4(0xCE8BC055, caller_VersionChange_114);
|
|
||||||
//memt_byte(0xCE, 0x90); // NOP
|
|
||||||
} else if (version_D2Launch >= V110)
|
|
||||||
{
|
{
|
||||||
mem_seek R8(D2Launch, 00000, 00000, 9723, 1189B, 1797B, 16BCB, 18134, 10AE4, 10AE4);//6FA19721-6FA10000
|
mem_seek R8(D2Launch, 00000, 00000, 9723, 1189B, 1797B, 16BCB, 18134, 10AE4, 337EA);//6FA19721-6FA10000
|
||||||
|
memt_byte(0x8D, 0xE8); // CALL
|
||||||
|
MEMT_REF4(0xCE8BC055, caller_VersionChange_114);
|
||||||
|
//004337EA |. 8D55 C0 LEA EDX,DWORD PTR SS:[EBP-40] ; |
|
||||||
|
//004337ED |. 8BCE MOV ECX,ESI ; |
|
||||||
|
}
|
||||||
|
else if (version_D2Launch >= V110)
|
||||||
|
{
|
||||||
|
mem_seek R8(D2Launch, 00000, 00000, 9723, 1189B, 1797B, 16BCB, 18134, 10AE4, 337EA);//6FA19721-6FA10000
|
||||||
memt_byte( 0x8D, 0xE8 ); // CALL
|
memt_byte( 0x8D, 0xE8 ); // CALL
|
||||||
MEMT_REF4( 0x8B102454 , caller_VersionChange_10);
|
MEMT_REF4( 0x8B102454 , caller_VersionChange_10);
|
||||||
memt_byte( 0xCF, 0x90 ); // NOP
|
memt_byte( 0xCF, 0x90 ); // NOP
|
||||||
@ -157,7 +152,7 @@ void Install_VersionChange()// BUG WITH 2MOD if D2Mod started before PlugY ????
|
|||||||
//6FA50AE4 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
|
//6FA50AE4 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
|
||||||
//6FA50AE8 |. 8BCF MOV ECX,EDI
|
//6FA50AE8 |. 8BCF MOV ECX,EDI
|
||||||
} else {
|
} else {
|
||||||
mem_seek R8(D2Launch, 801B, 803B, 972A, 118A2, 17982, 16BD2, 1813B, 10AEB, 10AEB);
|
mem_seek R8(D2Launch, 801B, 803B, 972A, 118A2, 17982, 16BD2, 1813B, 10AEB, 00000);
|
||||||
MEMJ_REF4( D2PrintLineOnTextBox, versionChange);
|
MEMJ_REF4( D2PrintLineOnTextBox, versionChange);
|
||||||
//6FA19729 |. E8 88EB0000 CALL <JMP.&D2Win.#10046>
|
//6FA19729 |. E8 88EB0000 CALL <JMP.&D2Win.#10046>
|
||||||
//6FA518A1 |. E8 267FFFFF CALL <JMP.&D2Win.#10061>
|
//6FA518A1 |. E8 267FFFFF CALL <JMP.&D2Win.#10061>
|
||||||
|
@ -9,11 +9,10 @@
|
|||||||
#include "parameters.h"
|
#include "parameters.h"
|
||||||
#include "modifMemory.h"
|
#include "modifMemory.h"
|
||||||
|
|
||||||
const char* MSG_ERROR_READ_MEMORY = "Error : Read access missing to patch memory at %08X.\nPlease install a clean version of Lord of Destruction\n\n"
|
const char* MSG_ERROR_READ_MEMORY = "Error : Read access missing to patch memory at %08X.\n\nAn option in PlugY.ini is incompatible with another mod.";
|
||||||
"You can avoid this error message by setting ActiveCkeckMemory=0 in PlugY.ini\n(WARNING: Be careful when you use it, it shouldn't be used by common user)";
|
const char* MSG_CRITICAL_WRITE_MEMORY = "Error.\nWrite access missing to patch memory at %08X.\n\nAn option in PlugY.ini is incompatible with another mod.";
|
||||||
const char* MSG_CRITICAL_WRITE_MEMORY = "Error.\nWrite access missing to patch memory at %08X.\n\nPlease install a clean version of Lord of Destruction\n";
|
const char* ERROR_TESTING1 = "Error : BYTE %02X wanted but %02X found to change memory at %08X.\n\nAn option in PlugY.ini is incompatible with another mod.";
|
||||||
const char* ERROR_TESTING1 = "Error : BYTE %02X wanted but %02X found to change memory at %08X\n\n";
|
const char* ERROR_TESTING4 = "Error : DWORD %08X wanted but %08X found to change memory at %08X.\n\nAn option in PlugY.ini is incompatible with another mod.";
|
||||||
const char* ERROR_TESTING4 = "Error : DWORD %08X wanted but %08X found to change memory at %08X\n\n";
|
|
||||||
|
|
||||||
|
|
||||||
void* currentMemoryPos = 0;
|
void* currentMemoryPos = 0;
|
||||||
@ -102,11 +101,13 @@ bool testIfAlreadySet(DWORD current, DWORD wanted)
|
|||||||
void testMemory4(DWORD old, DWORD found)
|
void testMemory4(DWORD old, DWORD found)
|
||||||
{
|
{
|
||||||
if (old != found)
|
if (old != found)
|
||||||
|
{
|
||||||
if (active_CheckMemory)
|
if (active_CheckMemory)
|
||||||
{
|
{
|
||||||
log_box(ERROR_TESTING4, old, found, currentMemoryPos);
|
log_box(ERROR_TESTING4, old, found, currentMemoryPos);
|
||||||
exit(1);
|
exit(1);
|
||||||
} else log_msg(ERROR_TESTING4, old, found, currentMemoryPos);
|
} else log_msg(ERROR_TESTING4, old, found, currentMemoryPos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void memt_dword(DWORD old, DWORD val)
|
void memt_dword(DWORD old, DWORD val)
|
||||||
|
@ -42,7 +42,7 @@ void printOutputItem(CubeOutput* output, LPWSTR buf, LPINT len, LPINT nbOutputs)
|
|||||||
|
|
||||||
if ((output->quantityOrNbSockets>1) && !output->haveSockets)
|
if ((output->quantityOrNbSockets>1) && !output->haveSockets)
|
||||||
{
|
{
|
||||||
if (output->quantityOrNbSockets = 255)
|
if (output->quantityOrNbSockets == 255)
|
||||||
PRINT(BUF, L"%s ", getLocalString(STR_FULL));
|
PRINT(BUF, L"%s ", getLocalString(STR_FULL));
|
||||||
else
|
else
|
||||||
PRINT(BUF, L"%u ", output->quantityOrNbSockets);
|
PRINT(BUF, L"%u ", output->quantityOrNbSockets);
|
||||||
@ -305,6 +305,7 @@ void listAllCubeFormula()
|
|||||||
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
int nbCubeReceipt = 0;
|
int nbCubeReceipt = 0;
|
||||||
|
int line = 0;
|
||||||
for (int i=0; i<nbLines; i++)
|
for (int i=0; i<nbLines; i++)
|
||||||
{
|
{
|
||||||
DWORD res = 1;
|
DWORD res = 1;
|
||||||
@ -315,7 +316,7 @@ void listAllCubeFormula()
|
|||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
nbCubeReceipt++;
|
nbCubeReceipt++;
|
||||||
fwprintf(file, L"%3u: %s\n", i, buf);
|
fwprintf(file, L"%3u: %s\n", ++line, buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ void printRuneword(RunesBIN* runesData, DWORD pos)
|
|||||||
void STDCALL printRunewordsPage()
|
void STDCALL printRunewordsPage()
|
||||||
{
|
{
|
||||||
if (!D2isLODGame() || !D2GetResolution()) return D2PrintStatsPage();
|
if (!D2isLODGame() || !D2GetResolution()) return D2PrintStatsPage();
|
||||||
|
|
||||||
LPWSTR lpText;
|
LPWSTR lpText;
|
||||||
bDontPrintBorder = true;
|
bDontPrintBorder = true;
|
||||||
|
|
||||||
@ -153,7 +153,7 @@ void STDCALL printRunewordsPage()
|
|||||||
setImage(&data, D2LoadBuySelBtn());
|
setImage(&data, D2LoadBuySelBtn());
|
||||||
setFrame(&data, 10 + isDownBtn.close);
|
setFrame(&data, 10 + isDownBtn.close);
|
||||||
D2PrintImage(&data, getXCloseBtn(), getYCloseBtn(), -1, 5, 0);
|
D2PrintImage(&data, getXCloseBtn(), getYCloseBtn(), -1, 5, 0);
|
||||||
|
|
||||||
//print next page button
|
//print next page button
|
||||||
setFrame(&data, isDownBtn.nextPage);
|
setFrame(&data, isDownBtn.nextPage);
|
||||||
D2PrintImage(&data, getXNextPageBtn(), getYNextPageBtn(), -1, 5, 0);
|
D2PrintImage(&data, getXNextPageBtn(), getYNextPageBtn(), -1, 5, 0);
|
||||||
@ -174,7 +174,7 @@ void STDCALL printRunewordsPage()
|
|||||||
RunesBIN* runesFirst = nbRunes>1 ? D2GetRunesBIN(1)-1 : NULL;
|
RunesBIN* runesFirst = nbRunes>1 ? D2GetRunesBIN(1)-1 : NULL;
|
||||||
RunesBIN* runesLast = runesFirst? runesFirst + nbRunes : NULL;
|
RunesBIN* runesLast = runesFirst? runesFirst + nbRunes : NULL;
|
||||||
// log_msg("nbRunes(%d,%d) runesFirst(%08X, %08X) runesLast(%08X, %08X)",nbRunes,SgptDataTables->nbRunes,runesFirst, SgptDataTables->runes,runesLast,SgptDataTables->runes + SgptDataTables->nbRunes);
|
// log_msg("nbRunes(%d,%d) runesFirst(%08X, %08X) runesLast(%08X, %08X)",nbRunes,SgptDataTables->nbRunes,runesFirst, SgptDataTables->runes,runesLast,SgptDataTables->runes + SgptDataTables->nbRunes);
|
||||||
|
|
||||||
int nbRunesCompleted=0;
|
int nbRunesCompleted=0;
|
||||||
DWORD curNbRunes=0;
|
DWORD curNbRunes=0;
|
||||||
for ( RunesBIN* runesData = runesFirst; runesData < runesLast; runesData++)
|
for ( RunesBIN* runesData = runesFirst; runesData < runesLast; runesData++)
|
||||||
@ -210,27 +210,30 @@ DWORD STDCALL mouseRunewordsPageLeftDown(sWinMessage* msg)
|
|||||||
{
|
{
|
||||||
if (!D2isLODGame() || !D2GetResolution()) return -1;
|
if (!D2isLODGame() || !D2GetResolution()) return -1;
|
||||||
|
|
||||||
if (!isOnStatsPage(msg->x,msg->y)) return 1;
|
DWORD x = D2GetMouseX();
|
||||||
|
DWORD y = D2GetMouseY();
|
||||||
|
if (!isOnStatsPage(x,y))
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (isOnCloseBtn(msg->x,msg->y))
|
if (isOnCloseBtn(x,y))
|
||||||
{
|
{
|
||||||
log_msg("push down left button close\n");
|
log_msg("push down left button close\n");
|
||||||
isDownBtn.close = 1;
|
isDownBtn.close = 1;
|
||||||
D2PlaySound(4,0,0,0,0);
|
D2PlaySound(4,0,0,0,0);
|
||||||
}
|
}
|
||||||
else if (isOnNextPageBtn(msg->x,msg->y))
|
else if (isOnNextPageBtn(x,y))
|
||||||
{
|
{
|
||||||
log_msg("push down left button next page\n");
|
log_msg("push down left button next page\n");
|
||||||
isDownBtn.nextPage = 1;
|
isDownBtn.nextPage = 1;
|
||||||
D2PlaySound(4,0,0,0,0);
|
D2PlaySound(4,0,0,0,0);
|
||||||
}
|
}
|
||||||
else if (isOnPrevRunesBtn(msg->x,msg->y))
|
else if (isOnPrevRunesBtn(x,y))
|
||||||
{
|
{
|
||||||
log_msg("push down left button prev page\n");
|
log_msg("push down left button prev page\n");
|
||||||
isDownBtn.prevRunes = 1;
|
isDownBtn.prevRunes = 1;
|
||||||
D2PlaySound(4,0,0,0,0);
|
D2PlaySound(4,0,0,0,0);
|
||||||
}
|
}
|
||||||
else if (isOnNextRunesBtn(msg->x,msg->y))
|
else if (isOnNextRunesBtn(x,y))
|
||||||
{
|
{
|
||||||
log_msg("push down left button next runes\n");
|
log_msg("push down left button next runes\n");
|
||||||
isDownBtn.nextRunes = 1;
|
isDownBtn.nextRunes = 1;
|
||||||
@ -246,24 +249,30 @@ DWORD STDCALL mouseRunewordsPageLeftUp(sWinMessage* msg)
|
|||||||
{
|
{
|
||||||
if (!D2isLODGame() || !D2GetResolution()) return -1;
|
if (!D2isLODGame() || !D2GetResolution()) return -1;
|
||||||
|
|
||||||
if (!isOnStatsPage(msg->x,msg->y)) return 1;
|
DWORD x = D2GetMouseX();
|
||||||
|
DWORD y = D2GetMouseY();
|
||||||
|
if (!isOnStatsPage(x,y))
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (isOnCloseBtn(msg->x,msg->y))
|
if (isOnCloseBtn(x,y))
|
||||||
{
|
{
|
||||||
log_msg("push up left button close\n");
|
log_msg("push up left button close\n");
|
||||||
if (isDownBtn.close)
|
if (isDownBtn.close)
|
||||||
D2TogglePage(2,1,0);
|
D2TogglePage(2,1,0);
|
||||||
}
|
}
|
||||||
else if (isOnNextPageBtn(msg->x,msg->y))
|
else if (isOnNextPageBtn(x,y))
|
||||||
{
|
{
|
||||||
log_msg("push up left button next page\n");
|
log_msg("push up left button next page\n");
|
||||||
if (isDownBtn.nextPage)
|
if (isDownBtn.nextPage)
|
||||||
{
|
{
|
||||||
GoStatPage(GetCurrentPage()+1);
|
if (extraHiddenPage>1)
|
||||||
|
GoStatPage(GetCurrentPage()+1);
|
||||||
|
else
|
||||||
|
GoStatPage(0);
|
||||||
log_msg("next page press\n");
|
log_msg("next page press\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isOnPrevRunesBtn(msg->x,msg->y))
|
else if (isOnPrevRunesBtn(x,y))
|
||||||
{
|
{
|
||||||
log_msg("push up left button prev runes\n");
|
log_msg("push up left button prev runes\n");
|
||||||
if (isDownBtn.prevRunes)
|
if (isDownBtn.prevRunes)
|
||||||
@ -271,7 +280,7 @@ DWORD STDCALL mouseRunewordsPageLeftUp(sWinMessage* msg)
|
|||||||
if (curRunesPage) curRunesPage--;
|
if (curRunesPage) curRunesPage--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isOnNextRunesBtn(msg->x,msg->y))
|
else if (isOnNextRunesBtn(x,y))
|
||||||
{
|
{
|
||||||
log_msg("push up left button next runes\n");
|
log_msg("push up left button next runes\n");
|
||||||
if (isDownBtn.nextRunes)
|
if (isDownBtn.nextRunes)
|
||||||
|
@ -117,7 +117,7 @@ void print2Lines(WORD id, LPWSTR lpText, DWORD x, DWORD l, DWORD y)
|
|||||||
{
|
{
|
||||||
wcsncpy(lpText, D2GetStringFromIndex(id), 0x63);
|
wcsncpy(lpText, D2GetStringFromIndex(id), 0x63);
|
||||||
lpText[0x64]= L'\0';
|
lpText[0x64]= L'\0';
|
||||||
|
|
||||||
LPWSTR lptmp = lpText;
|
LPWSTR lptmp = lpText;
|
||||||
while (*lptmp)
|
while (*lptmp)
|
||||||
{
|
{
|
||||||
@ -145,7 +145,7 @@ void print2Lines(WORD id, LPWSTR lpText, DWORD x, DWORD l, DWORD y)
|
|||||||
void STDCALL printNewStatsPage()
|
void STDCALL printNewStatsPage()
|
||||||
{
|
{
|
||||||
if (!D2isLODGame() || !D2GetResolution()) return D2PrintStatsPage();
|
if (!D2isLODGame() || !D2GetResolution()) return D2PrintStatsPage();
|
||||||
|
|
||||||
WCHAR text[BUFSIZE];
|
WCHAR text[BUFSIZE];
|
||||||
LPWSTR lpText;
|
LPWSTR lpText;
|
||||||
DWORD nbPixel;
|
DWORD nbPixel;
|
||||||
@ -347,7 +347,7 @@ if (version_D2Client <= V110)
|
|||||||
|
|
||||||
//print Hit Point
|
//print Hit Point
|
||||||
curValue = D2GetPlayerStat(ptChar, STATS_HP, 0) / 256;
|
curValue = D2GetPlayerStat(ptChar, STATS_HP, 0) / 256;
|
||||||
if ((ptChar->CurrentAnim != 0x11) && !curValue) curValue=1;
|
if ((ptChar->mode != UNIT_MODE_DEAD) && !curValue) curValue=UNIT_MODE_NEUTRAL;
|
||||||
|
|
||||||
swprintf(text,L"%ld",curValue);
|
swprintf(text,L"%ld",curValue);
|
||||||
|
|
||||||
@ -523,7 +523,7 @@ if (version_D2Client <= V110)
|
|||||||
D2PrintImage(&data, getXAssVITBtn(), getYAssVITBtn(), -1, 5, 0);
|
D2PrintImage(&data, getXAssVITBtn(), getYAssVITBtn(), -1, 5, 0);
|
||||||
D2PrintImage(&data, getXAssENEBtn(), getYAssENEBtn(), -1, 5, 0);
|
D2PrintImage(&data, getXAssENEBtn(), getYAssENEBtn(), -1, 5, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (active_StatsPoints && !onRealm)
|
if (active_StatsPoints && !onRealm)
|
||||||
{
|
{
|
||||||
setImage(&data, D2AssignStatsPointsBoxImages);
|
setImage(&data, D2AssignStatsPointsBoxImages);
|
||||||
@ -584,9 +584,9 @@ if (version_D2Client <= V110)
|
|||||||
if ( version_D2Client <= V110 )
|
if ( version_D2Client <= V110 )
|
||||||
{
|
{
|
||||||
DWORD avgChanceMonsterWillHitYou=53;//TODO
|
DWORD avgChanceMonsterWillHitYou=53;//TODO
|
||||||
if (avgChanceMonsterWillHitYou<5) avgChanceMonsterWillHitYou = 5;
|
if (avgChanceMonsterWillHitYou<5) avgChanceMonsterWillHitYou = 5;
|
||||||
else if (avgChanceMonsterWillHitYou>95) avgChanceMonsterWillHitYou = 95;
|
else if (avgChanceMonsterWillHitYou>95) avgChanceMonsterWillHitYou = 95;
|
||||||
|
|
||||||
int chanceToBlock = D2GetChanceToBlock(ptChar, D2isLODGame());
|
int chanceToBlock = D2GetChanceToBlock(ptChar, D2isLODGame());
|
||||||
if (chanceToBlock <= 0)
|
if (chanceToBlock <= 0)
|
||||||
{
|
{
|
||||||
@ -700,8 +700,8 @@ DWORD STDCALL mouseNewStatsPageLeftDown(sWinMessage* msg)
|
|||||||
void sendAssignStats(DWORD code, DWORD nbStatPointsRemaining)
|
void sendAssignStats(DWORD code, DWORD nbStatPointsRemaining)
|
||||||
{
|
{
|
||||||
DWORD nbPoints = GetKeyState(VK_SHIFT)<0? nbStatPointsRemaining : 1;
|
DWORD nbPoints = GetKeyState(VK_SHIFT)<0? nbStatPointsRemaining : 1;
|
||||||
if (active_StatsShiftClickLimit && (nbPoints>limitValueToShiftClick))
|
if (active_StatsShiftClickLimit && (nbPoints>limitValueToShiftClick))
|
||||||
nbPoints = limitValueToShiftClick;
|
nbPoints = limitValueToShiftClick;
|
||||||
while ( nbPoints>0 )
|
while ( nbPoints>0 )
|
||||||
{
|
{
|
||||||
DWORD nbTemp = nbPoints > 0x20 ? 0x20 : nbPoints;
|
DWORD nbTemp = nbPoints > 0x20 ? 0x20 : nbPoints;
|
||||||
@ -744,7 +744,7 @@ DWORD STDCALL mouseNewStatsPageLeftUp(sWinMessage* msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (nbStatPointsRemaining)
|
else if (nbStatPointsRemaining)
|
||||||
{
|
{
|
||||||
if (isOnAssSTRBtn(msg->x,msg->y))
|
if (isOnAssSTRBtn(msg->x,msg->y))
|
||||||
{
|
{
|
||||||
log_msg("push up left button assign strengh\n");
|
log_msg("push up left button assign strengh\n");
|
||||||
|
@ -11,10 +11,6 @@
|
|||||||
#include "newInterfaces.h"
|
#include "newInterfaces.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <fstream>
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
#define getXCloseBtn() RX(0x110)
|
#define getXCloseBtn() RX(0x110)
|
||||||
#define getLCloseBtn() 32
|
#define getLCloseBtn() 32
|
||||||
@ -34,8 +30,9 @@
|
|||||||
#define getHNextPageBtn() 32
|
#define getHNextPageBtn() 32
|
||||||
#define isOnNextPageBtn(x,y) isOnRect(x, y, getXNextPageBtn(), getYNextPageBtn(), getLNextPageBtn(), getHNextPageBtn())
|
#define isOnNextPageBtn(x,y) isOnRect(x, y, getXNextPageBtn(), getYNextPageBtn(), getLNextPageBtn(), getHNextPageBtn())
|
||||||
|
|
||||||
|
const char * STATS_INTERFACE_FILENAME = "PlugY\\statsinterface.txt";
|
||||||
|
|
||||||
#define BUFSIZE 0x80
|
#define BUFSIZE 0x400
|
||||||
|
|
||||||
static struct
|
static struct
|
||||||
{
|
{
|
||||||
@ -62,68 +59,12 @@ struct statsInterfaceBIN
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern int lastPage;
|
extern int lastPage;
|
||||||
int nbStatsInterface;
|
int nbStatsInterface = 0;
|
||||||
statsInterfaceBIN* statsInterface;
|
statsInterfaceBIN* statsInterface = NULL;
|
||||||
|
|
||||||
void loadStatsInterfaceDesc_114() {
|
|
||||||
char filename[0x104];
|
|
||||||
strcpy(filename, "PlugY\\statsinterface.txt");
|
|
||||||
char fileTemp[0x104];
|
|
||||||
log_msg("Load custom file : %s", filename);
|
|
||||||
strcpy(fileTemp, filename);
|
|
||||||
D2FogGetInstallPath(filename, 0x104 - strlen(filename));
|
|
||||||
strcat(filename, fileTemp);
|
|
||||||
log_msg("-> %s\n", filename);
|
|
||||||
std::ifstream statsFile(filename);
|
|
||||||
std::vector<std::string> stats;
|
|
||||||
if (statsFile.is_open()) {
|
|
||||||
std::string line;
|
|
||||||
while (std::getline(statsFile, line)) {
|
|
||||||
if (line.length() > 0 && line[0] != '*') {
|
|
||||||
//log_msg("Loading stat:\n");
|
|
||||||
//log_msg("%s\n\n", line);
|
|
||||||
stats.push_back(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log_msg("FAILED TO OPEN FILE: %s", filename);
|
|
||||||
}
|
|
||||||
statsFile.close();
|
|
||||||
nbStatsInterface = stats.size();
|
|
||||||
statsInterface = new statsInterfaceBIN[nbStatsInterface];
|
|
||||||
for (int i = 0; i < nbStatsInterface; ++i) {
|
|
||||||
std::istringstream ss(stats[i]);
|
|
||||||
auto& stat = statsInterface[i];
|
|
||||||
std::string token = "";
|
|
||||||
std::getline(ss, token, '\t');
|
|
||||||
//log_msg("Stat (%u) %s\n", i, token.c_str());
|
|
||||||
std::getline(ss, token, '\t');
|
|
||||||
stat.enabled = token.length() == 0 ? 0 : std::stoi(token.c_str());
|
|
||||||
//log_msg("\tenabled = %u\n", stat.enabled);
|
|
||||||
std::getline(ss, token, '\t');
|
|
||||||
stat.page = token.length() == 0 ? 0 : std::stoi(token.c_str());
|
|
||||||
//log_msg("\tpage = %u\n", stat.page);
|
|
||||||
std::getline(ss, token, '\t');
|
|
||||||
stat.x = token.length() == 0 ? 0 : std::stoi(token.c_str());
|
|
||||||
//log_msg("\tx = %u\n", stat.x);
|
|
||||||
std::getline(ss, token, '\t');
|
|
||||||
stat.y = token.length() == 0 ? 0 : std::stoi(token.c_str());
|
|
||||||
//log_msg("\ty = %u\n", stat.y);
|
|
||||||
std::getline(ss, token, '\t');
|
|
||||||
stat.color = token.length() == 0 ? 0 : std::stoi(token.c_str());
|
|
||||||
//log_msg("\tcolor = %u\n", stat.color);
|
|
||||||
std::getline(ss, token, '\t');
|
|
||||||
stat.font = token.length() == 0 ? 0 : std::stoi(token.c_str());
|
|
||||||
//log_msg("\tfont = %u\n", stat.font);
|
|
||||||
std::getline(ss, token, '\t');
|
|
||||||
stat.statsID = token.length() == 0 ? 0 : std::stoi(token.c_str());
|
|
||||||
//log_msg("\tstatsID = %u\n", stat.statsID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadStatsInterfaceDesc(DWORD mempool)
|
void loadStatsInterfaceDesc(DWORD mempool)
|
||||||
{
|
{
|
||||||
log_msg("loadStatsInterfaceDesc(%d)\n",mempool);
|
log_msg("loadStatsInterfaceDesc(%d)\n", mempool);
|
||||||
|
|
||||||
CREATE_TABLE_DESCRIPTION(8);
|
CREATE_TABLE_DESCRIPTION(8);
|
||||||
ADD_WORD_FIELD(0, "enabled");
|
ADD_WORD_FIELD(0, "enabled");
|
||||||
@ -135,20 +76,50 @@ void loadStatsInterfaceDesc(DWORD mempool)
|
|||||||
// ADD_LOOKUP_WORD(10, "stat", lookupItemStatCost);
|
// ADD_LOOKUP_WORD(10, "stat", lookupItemStatCost);
|
||||||
ADD_WORD_FIELD(12, "statID");
|
ADD_WORD_FIELD(12, "statID");
|
||||||
ADD_TERM_FIELD();
|
ADD_TERM_FIELD();
|
||||||
//log_msg("statsInterface=0x%08x\nnbStatsInterface=0x%08x\n", statsInterface, &nbStatsInterface);
|
BUILD_BIN(statsInterfaceBIN, statsInterface, nbStatsInterface, STATS_INTERFACE_FILENAME);
|
||||||
//void* test = D2ReadFile(mempool, "PlugY\\statsinterface.txt", (DWORD*)nbStatsInterface, __FILE__, __LINE__);
|
//statsInterface = (statsInterfaceBIN*)compileTxtFile(mempool, STATS_INTERFACE_FILENAME, TableDesc, (DWORD*)&nbStatsInterface, sizeof(statsInterfaceBIN));
|
||||||
//void* test = D2CompileTxtFile(mempool, "PlugY\\statsinterface.txt", TableDesc, (DWORD*)&nbStatsInterface, sizeof(statsInterfaceBIN));
|
|
||||||
//log_msg("D2CompileTxtFile()=0x%08x", test);
|
|
||||||
if (version_D2Game == V114d) {
|
|
||||||
loadStatsInterfaceDesc_114();
|
|
||||||
} else {
|
|
||||||
BUILD_BIN(statsInterfaceBIN, statsInterface, nbStatsInterface, "PlugY\\statsinterface.txt");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
int nbSize=0;
|
||||||
|
char* data = (char*)D2ReadFile(mempool, STATS_INTERFACE_FILENAME, (DWORD*)&nbSize, __FILE__, __LINE__);
|
||||||
|
if (!data || nbSize <= 0)
|
||||||
|
{
|
||||||
|
D2FogAssert("statsinterface.txt missing", D2GetInstructionPointer(), __LINE__);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
//statsInterface = (statsInterfaceBIN*)compileTxtFile(mempool, STATS_INTERFACE_FILENAME, TableDesc, (DWORD*)&nbStatsInterface, sizeof(statsInterfaceBIN));
|
||||||
|
//statsInterface = (statsInterfaceBIN*)compileTxtFile((DWORD)nbSize, data, TableDesc, (DWORD*)&nbStatsInterface, sizeof(statsInterfaceBIN));
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
nbStatsInterface = 0;
|
||||||
|
for (int i = 0; i<nbSize;i++)
|
||||||
|
if (data[i] == '\n') nbStatsInterface++;
|
||||||
|
if (data[nbSize - 1] != '\n') nbStatsInterface++;
|
||||||
|
nbStatsInterface--;
|
||||||
|
|
||||||
|
statsInterface = (statsInterfaceBIN*)D2FogMemAlloc(nbStatsInterface * sizeof(statsInterfaceBIN),__FILE__,__LINE__,0);
|
||||||
|
|
||||||
|
strtok(data,"\n");
|
||||||
|
for (i=0; i<nbStatsInterface; i++)
|
||||||
|
{
|
||||||
|
strtok(NULL,"\t");
|
||||||
|
statsInterface[i].enabled = atoi(strtok(NULL,"\t"));
|
||||||
|
statsInterface[i].page = atoi(strtok(NULL,"\t"));
|
||||||
|
statsInterface[i].x = atoi(strtok(NULL,"\t"));
|
||||||
|
statsInterface[i].y = atoi(strtok(NULL,"\t"));
|
||||||
|
statsInterface[i].color = atoi(strtok(NULL,"\t"));
|
||||||
|
statsInterface[i].font = atoi(strtok(NULL,"\t"));
|
||||||
|
statsInterface[i].statsID = atoi(strtok(NULL,"\t"));
|
||||||
|
strtok(NULL,"\n");
|
||||||
|
log_msg("stats : %d, %d, %d, %d, %d, %d, %d\n", statsInterface[i].enabled, statsInterface[i].page, statsInterface[i].x, statsInterface[i].y, statsInterface[i].color, statsInterface[i].font, statsInterface[i].statsID);
|
||||||
|
}
|
||||||
|
*/
|
||||||
lastPage = 0;
|
lastPage = 0;
|
||||||
for (i=0; i<nbStatsInterface; i++)
|
for (i=0; i<nbStatsInterface; i++)
|
||||||
if (statsInterface[i].page > lastPage)
|
if (statsInterface[i].page > lastPage)
|
||||||
lastPage = statsInterface[i].page;
|
lastPage = statsInterface[i].page;
|
||||||
|
|
||||||
|
log_msg("loadStatsInterfaceDesc - fin\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void freeStatsInterfaceDesc()
|
void freeStatsInterfaceDesc()
|
||||||
@ -157,21 +128,170 @@ void freeStatsInterfaceDesc()
|
|||||||
|
|
||||||
if (statsInterface)
|
if (statsInterface)
|
||||||
{
|
{
|
||||||
if (version_D2Game == V114d) {
|
D2FogMemDeAlloc(statsInterface,__FILE__,__LINE__,0);
|
||||||
delete[] statsInterface;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
D2FogMemDeAlloc(statsInterface, __FILE__, __LINE__, 0);
|
|
||||||
}
|
|
||||||
statsInterface = NULL;
|
statsInterface = NULL;
|
||||||
nbStatsInterface = 0;
|
nbStatsInterface = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void printCharacterBreakpoints(Unit* ptChar, DWORD x, DWORD y, DWORD color, LPWSTR lpText)
|
||||||
|
{
|
||||||
|
CharStatsBIN* charStatsBIN = D2GetCharStatsBIN(ptChar->nPlayerClass);
|
||||||
|
swprintf(lpText, L"%s : %s", getLocalString(STR_BREAKPOINTS), charStatsBIN->nameU);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=33;
|
||||||
|
D2SetFont(6);
|
||||||
|
|
||||||
|
LPWSTR sBreakpoint = getLocalString(STR_BREAKPOINT);
|
||||||
|
LPWSTR sBlockFrames = getLocalString(STR_BLOCK_FRAMES);
|
||||||
|
LPWSTR sCastingFrames = getLocalString(STR_CASTING_FRAMES);
|
||||||
|
LPWSTR sHitRecoveryFrames = getLocalString(STR_HIT_RECOVERY_FRAMES);
|
||||||
|
|
||||||
|
LPWSTR s1HSwingingWeapon = getLocalString(STR_1H_SWINGING_WEAPON);
|
||||||
|
LPWSTR sOtherWeapon = getLocalString(STR_OTHER_WEAPONS);
|
||||||
|
LPWSTR sHumanForm = getLocalString(STR_HUMAN_FORM);
|
||||||
|
LPWSTR sBearForm = getLocalString(STR_BEAR_FORM);
|
||||||
|
LPWSTR sWolfForm = getLocalString(STR_WOLF_FORM);
|
||||||
|
LPWSTR sVampireForm = getLocalString(STR_VAMPIRE_FORM);
|
||||||
|
|
||||||
|
LPWSTR sHolyShield = D2GetStringFromIndex(0x12EC);
|
||||||
|
LPWSTR sSpearsAndStaves= getLocalString(STR_SPEARS_AND_STAVES);
|
||||||
|
LPWSTR sLightningAndChainLightnings = getLocalString(STR_LIGHTNING_CHAIN_LIGHTNING);
|
||||||
|
|
||||||
|
switch (ptChar->nPlayerClass)
|
||||||
|
{
|
||||||
|
case D2PC_AMAZON:
|
||||||
|
swprintf(lpText, L"%s:%s\n%s - %s: %d", sBreakpoint, L"4 6 11 15 23 29 40 56 80 120 200 480", sBlockFrames, s1HSwingingWeapon, 17);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"13 32 86 600", sBlockFrames, sOtherWeapon, 5);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"7 14 22 32 48 68 99 152", sCastingFrames, 19);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"6 13 20 32 52 86 174 600", sHitRecoveryFrames, 11);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case D2PC_ASSASSIN:
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"13 32 86 600", sBlockFrames, 5);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"8 16 27 42 65 102 174", sCastingFrames, 16);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"7 15 27 48 86 200", sHitRecoveryFrames, 9);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case D2PC_BARBARIAN:
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"9 20 42 86 280", sBlockFrames, 7);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"9 20 37 63 105 200", sCastingFrames, 13);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"7 15 27 48 86 200", sHitRecoveryFrames, 9);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case D2PC_DRUID:
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"6 13 20 32 52 86 174 600", sBlockFrames, sHumanForm, 11);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"5 10 16 27 40 65 109 223", sBlockFrames, sBearForm, 12);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"7 15 27 48 86 200", sBlockFrames, sWolfForm, 9);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"4 10 19 30 46 68 99 163", sCastingFrames, sHumanForm, 18);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"7 15 26 40 63 99 163", sCastingFrames, sBearForm, 16);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"6 14 26 40 60 95 157", sCastingFrames, sWolfForm, 16);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"3 7 13 19 29 42 63 99 174 456", sHitRecoveryFrames, s1HSwingingWeapon, 14);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"5 10 16 26 39 56 86 152 377", sHitRecoveryFrames, sOtherWeapon, 13);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"5 10 16 24 37 54 86 152 360", sHitRecoveryFrames, sBearForm, 13);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"9 20 42 86 280", sHitRecoveryFrames, sWolfForm, 7);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case D2PC_NECROMANCER:
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"6 13 20 32 52 86 174 600", sBlockFrames, 11);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"9 18 30 48 75 125", sCastingFrames, sHumanForm, 15);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"6 11 18 24 35 48 65 86 120 180", sCastingFrames, sVampireForm, 23);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"5 10 16 26 39 56 86 152 377", sHitRecoveryFrames, sHumanForm, 13);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"2 6 10 16 24 34 48 72 117", sHitRecoveryFrames, sVampireForm, 15);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case D2PC_PALADIN:
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"13 32 86 600", sBlockFrames, 5);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"86", sBlockFrames, sHolyShield, 2);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"9 18 30 48 75 125", sCastingFrames, 15);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"3 7 13 20 32 48 75 129 280", sHitRecoveryFrames, sSpearsAndStaves, 13);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"7 15 27 48 86 200", sHitRecoveryFrames, sOtherWeapon, 9);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case D2PC_SORCERESS:
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"7 15 27 48 86 200", sBlockFrames, 9);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"9 20 37 63 105 200", sCastingFrames, 13);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"7 15 23 35 52 78 117 194", sCastingFrames, sLightningAndChainLightnings, 19);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s: %d", sBreakpoint, L"5 9 14 20 30 42 60 86 142 280", sHitRecoveryFrames, 15);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void printMercBreakpoints(Unit* ptChar, DWORD x, DWORD y, DWORD color, LPWSTR lpText)
|
||||||
|
{
|
||||||
|
LPWSTR sBreakpoint = getLocalString(STR_BREAKPOINT);
|
||||||
|
LPWSTR sCastingFrames = getLocalString(STR_CASTING_FRAMES);
|
||||||
|
LPWSTR sHitRecoveryFrames = getLocalString(STR_HIT_RECOVERY_FRAMES);
|
||||||
|
|
||||||
|
swprintf(lpText, L"%s : %s", getLocalString(STR_BREAKPOINTS), getLocalString(STR_MERCENARIES));
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=33;
|
||||||
|
D2SetFont(6);
|
||||||
|
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"8 15 26 39 58 86 138", sCastingFrames, getLocalString(STR_MERC_ACT_3), 17);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
y+=13;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"6 13 20 32 52 86 174 600", sHitRecoveryFrames, getLocalString(STR_MERC_ACT_1), 11);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"5 9 14 20 30 42 60 86 142 280", sHitRecoveryFrames, getLocalString(STR_MERC_ACT_2), 15);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"5 8 13 18 24 32 46 63 86 133 232 600", sHitRecoveryFrames, getLocalString(STR_MERC_ACT_3), 17);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
swprintf(lpText, L"%s : %s\n%s - %s: %d", sBreakpoint, L"7 15 27 48 86 200", sHitRecoveryFrames, getLocalString(STR_MERC_ACT_5), 9);
|
||||||
|
D2PrintString(lpText, x, y, color, 0); y+=29;
|
||||||
|
}
|
||||||
|
|
||||||
void printStat(Unit* ptChar, DWORD statID, DWORD x, DWORD y, DWORD color, LPWSTR lpText)
|
void printStat(Unit* ptChar, DWORD statID, DWORD x, DWORD y, DWORD color, LPWSTR lpText)
|
||||||
{
|
{
|
||||||
LPWSTR text;
|
LPWSTR text;
|
||||||
log_msg("printStat : %d\n", statID);
|
|
||||||
switch (statID)
|
switch (statID)
|
||||||
{
|
{
|
||||||
case STATS_FIRERESIST:
|
case STATS_FIRERESIST:
|
||||||
@ -179,10 +299,16 @@ void printStat(Unit* ptChar, DWORD statID, DWORD x, DWORD y, DWORD color, LPWSTR
|
|||||||
case STATS_LIGHTRESIST:
|
case STATS_LIGHTRESIST:
|
||||||
case STATS_POISONRESIST:
|
case STATS_POISONRESIST:
|
||||||
text = D2GetStringFromIndex(getDescStrPos(statID));
|
text = D2GetStringFromIndex(getDescStrPos(statID));
|
||||||
if (wcslen(text) > 50) return;
|
if (wcslen(text) > BUFSIZE) return;
|
||||||
swprintf(lpText, L"%s +%i%%", text, D2GetPlayerStat(ptChar,statID,0));
|
swprintf(lpText, L"%s +%i%%", text, D2GetPlayerStat(ptChar,statID,0));
|
||||||
break;
|
break;
|
||||||
default:
|
case 10000:
|
||||||
|
printCharacterBreakpoints(ptChar, x, y, color, lpText);
|
||||||
|
return;
|
||||||
|
case 10001:
|
||||||
|
printMercBreakpoints(ptChar, x, y, color, lpText);
|
||||||
|
return;
|
||||||
|
default:
|
||||||
D2PrintStat(ptChar, NULL, statID, 0, D2GetPlayerStat(ptChar,statID,0), lpText);//param2=ptChar->ptStats->ptItemStats
|
D2PrintStat(ptChar, NULL, statID, 0, D2GetPlayerStat(ptChar,statID,0), lpText);//param2=ptChar->ptStats->ptItemStats
|
||||||
}
|
}
|
||||||
// D2SetFont(1);
|
// D2SetFont(1);
|
||||||
@ -275,7 +401,7 @@ void STDCALL printNewStatsPageTwo(int currentPage)
|
|||||||
setImage(&data, D2LoadBuySelBtn());
|
setImage(&data, D2LoadBuySelBtn());
|
||||||
setFrame(&data, 10 + isDownBtn.close);
|
setFrame(&data, 10 + isDownBtn.close);
|
||||||
D2PrintImage(&data, getXCloseBtn(), getYCloseBtn(), -1, 5, 0);
|
D2PrintImage(&data, getXCloseBtn(), getYCloseBtn(), -1, 5, 0);
|
||||||
|
|
||||||
//print previous page button
|
//print previous page button
|
||||||
setFrame(&data, 12 + isDownBtn.previousPage);
|
setFrame(&data, 12 + isDownBtn.previousPage);
|
||||||
D2PrintImage(&data, getXPreviousPageBtn(), getYPreviousPageBtn(), -1, 5, 0);
|
D2PrintImage(&data, getXPreviousPageBtn(), getYPreviousPageBtn(), -1, 5, 0);
|
||||||
@ -284,12 +410,11 @@ void STDCALL printNewStatsPageTwo(int currentPage)
|
|||||||
setFrame(&data, 14 + isDownBtn.nextPage);
|
setFrame(&data, 14 + isDownBtn.nextPage);
|
||||||
D2PrintImage(&data, getXNextPageBtn(), getYNextPageBtn(), -1, 5, 0);
|
D2PrintImage(&data, getXNextPageBtn(), getYNextPageBtn(), -1, 5, 0);
|
||||||
|
|
||||||
|
|
||||||
//////////////////// POPUP PRINTING ////////////////////
|
//////////////////// POPUP PRINTING ////////////////////
|
||||||
//set MouseX & MouseY
|
//set MouseX & MouseY
|
||||||
DWORD mx = D2GetMouseX();
|
DWORD mx = D2GetMouseX();
|
||||||
DWORD my = D2GetMouseY();
|
DWORD my = D2GetMouseY();
|
||||||
|
|
||||||
D2SetFont(1);
|
D2SetFont(1);
|
||||||
|
|
||||||
if (isOnCloseBtn(mx,my)) // print popup "close"
|
if (isOnCloseBtn(mx,my)) // print popup "close"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Interface functions
|
Interface functions
|
||||||
|
|
||||||
@ -57,9 +57,6 @@ int GetCurrentPage()
|
|||||||
void STDCALL printCustomPage()
|
void STDCALL printCustomPage()
|
||||||
{
|
{
|
||||||
if(onRealm) {D2PrintStatsPage();return;}
|
if(onRealm) {D2PrintStatsPage();return;}
|
||||||
|
|
||||||
//printNewStatsPageTwo(selectedPage); return;
|
|
||||||
|
|
||||||
if ( (selectedPage > 0) && (selectedPage<=lastPage) )
|
if ( (selectedPage > 0) && (selectedPage<=lastPage) )
|
||||||
printNewStatsPageTwo(selectedPage);
|
printNewStatsPageTwo(selectedPage);
|
||||||
else if (selectedPage == lastPage+1)
|
else if (selectedPage == lastPage+1)
|
||||||
@ -96,16 +93,18 @@ DWORD STDCALL mouseCustomPageLeftUp(sWinMessage* msg)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_DontPrintBorder_114 )
|
FCT_ASM ( caller_DontPrintBorder_114 )
|
||||||
MOV ESI, bDontPrintBorder
|
MOV ECX,bDontPrintBorder
|
||||||
TEST ESI, ESI
|
TEST ECX,ECX
|
||||||
JE printBorder
|
JE printBorder
|
||||||
MOV bDontPrintBorder, 0
|
MOV bDontPrintBorder,0
|
||||||
ADD DWORD PTR SS : [ESP], 0x14F
|
ADD DWORD PTR SS:[ESP],0xC1
|
||||||
RETN
|
RETN
|
||||||
printBorder :
|
printBorder:
|
||||||
MOV ESI, DWORD PTR DS : [0x7BEF18]
|
POP ECX
|
||||||
RETN
|
PUSH 0x48
|
||||||
|
LEA EAX,DWORD PTR SS:[EBP-0x48]
|
||||||
|
JMP ECX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_DontPrintBorder_111 )
|
FCT_ASM ( caller_DontPrintBorder_111 )
|
||||||
@ -132,28 +131,28 @@ printBorder:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM(caller_mouseCustomPageLeftDown_114)
|
FCT_ASM ( caller_mouseCustomPageLeftDown_114 )
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
CALL mouseCustomPageLeftDown
|
CALL mouseCustomPageLeftDown
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
POP EAX
|
POP EAX
|
||||||
JE end_mouseNewPageLDown
|
JE end_mouseNewPageLDown
|
||||||
;JG continue_mouseNewPageLDown
|
JG continue_mouseNewPageLDown
|
||||||
LEA ECX, DWORD PTR DS : [EAX + 0x80]
|
LEA ECX,DWORD PTR DS:[EAX+0x80]
|
||||||
RETN
|
RETN
|
||||||
continue_mouseNewPageLDown :
|
continue_mouseNewPageLDown:
|
||||||
POP EAX
|
POP EAX
|
||||||
ADD EAX, 0x170
|
ADD EAX,0x172
|
||||||
PUSH 0x4A7720
|
PUSH EDI
|
||||||
JMP EAX
|
JMP EAX
|
||||||
RETN
|
RETN
|
||||||
end_mouseNewPageLDown :
|
end_mouseNewPageLDown:
|
||||||
POP EDI
|
ADD ESP,4
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EBX
|
POP EBX
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
@ -225,26 +224,26 @@ end_mouseNewPageLDown:
|
|||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM(caller_mouseCustomPageLeftUp_114)
|
FCT_ASM ( caller_mouseCustomPageLeftUp_114 )
|
||||||
PUSH EBP
|
PUSH EBP
|
||||||
CALL mouseCustomPageLeftUp
|
CALL mouseCustomPageLeftUp
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JE end_mouseNewPageLUp
|
JE end_mouseNewPageLUp
|
||||||
;JG continue_mouseNewPageLUp
|
JG continue_mouseNewPageLUp
|
||||||
MOV EAX, DWORD PTR DS : [ptWindowStartX]
|
MOV EAX,DWORD PTR DS:[ptWindowStartX]
|
||||||
MOV EAX, DWORD PTR DS : [EAX]
|
MOV EAX,DWORD PTR DS:[EAX]
|
||||||
RETN
|
RETN
|
||||||
continue_mouseNewPageLUp :
|
continue_mouseNewPageLUp:
|
||||||
ADD DWORD PTR SS : [ESP], 0x2C4
|
ADD DWORD PTR SS:[ESP],0x17D
|
||||||
RETN
|
RETN
|
||||||
end_mouseNewPageLUp :
|
end_mouseNewPageLUp:
|
||||||
ADD ESP, 4
|
ADD ESP,4
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EBX
|
POP EBX
|
||||||
MOV ESP, EBP
|
MOV ESP,EBP
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_mouseCustomPageLeftUp_111 )
|
FCT_ASM ( caller_mouseCustomPageLeftUp_111 )
|
||||||
@ -317,10 +316,17 @@ end_mouseNewPageLUp:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM( caller_resetSelectedPageByToolBar_114 )
|
FCT_ASM ( caller_resetSelected_114 )
|
||||||
MOV selectedPage, 0
|
CMP ECX,2
|
||||||
MOV EDX, 2
|
JNZ NO_RESET
|
||||||
RETN
|
MOV selectedPage, 0
|
||||||
|
NO_RESET:
|
||||||
|
POP EAX
|
||||||
|
PUSH EBX
|
||||||
|
PUSH ESI
|
||||||
|
PUSH EDI
|
||||||
|
MOV EDI,ECX
|
||||||
|
JMP EAX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
@ -333,13 +339,6 @@ noJump:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_resetSelectedPageByKey_114 )
|
|
||||||
MOV selectedPage, 0
|
|
||||||
MOV EDX, DWORD PTR DS : [ECX * 4 + 0x712698]
|
|
||||||
RETN
|
|
||||||
}}
|
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM ( caller_resetSelectedPageByKey )
|
FCT_ASM ( caller_resetSelectedPageByKey )
|
||||||
MOV selectedPage,0
|
MOV selectedPage,0
|
||||||
POP EAX
|
POP EAX
|
||||||
@ -377,12 +376,22 @@ void Install_NewInterfaces()
|
|||||||
|
|
||||||
if (selectMainPageOnOpenning)
|
if (selectMainPageOnOpenning)
|
||||||
{
|
{
|
||||||
if ( version_D2Client >= V111 )
|
if ( version_D2Client >= V114a )
|
||||||
{
|
{
|
||||||
// Reset selectedPage variable on opening stats page
|
mem_seek R8(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 55F24);
|
||||||
mem_seek R8(D2Client, 0000, 0000, 0000, 4B79E, 8F73E, 55E0E, 65F5E, C41FE, 7EC7A);
|
memt_byte( 0x53, 0xE8 ); // CALL caller_resetSelectedPage
|
||||||
memt_byte( version_D2Client == V114d ? 0xBA : 0x83, 0xE8 ); // CALL caller_resetSelectedPage
|
MEMT_REF4( 0xF98B5756, caller_resetSelected_114);
|
||||||
MEMT_REF4( version_D2Client == V114d ? 0x00000002 : 0x1F7426F8, version_D2Client == V114d ? caller_resetSelectedPageByToolBar_114 : caller_resetSelectedPageByToolBar);
|
//00455F24 |. 53 PUSH EBX
|
||||||
|
//00455F25 |. 56 PUSH ESI
|
||||||
|
//00455F26 |. 57 PUSH EDI
|
||||||
|
//00455F27 |. 8BF9 MOV EDI,ECX
|
||||||
|
}
|
||||||
|
else if ( version_D2Client >= V111 )
|
||||||
|
{
|
||||||
|
//Reset selectedPage variable on opening stats page
|
||||||
|
mem_seek R8(D2Client, 0000, 0000, 0000, 4B79E, 8F73E, 55E0E, 65F5E, C41FE, 7EC5C);
|
||||||
|
memt_byte( version_D2Client == V114d ? 0xB9 : 0x83, 0xE8 ); // CALL caller_resetSelectedPage
|
||||||
|
MEMT_REF4( version_D2Client == V114d ? 0x00000002 : 0x1F7426F8, caller_resetSelectedPageByToolBar);
|
||||||
//6FAFB79E > 83F8 26 CMP EAX,26
|
//6FAFB79E > 83F8 26 CMP EAX,26
|
||||||
//6FAFB7A1 . 74 1F JE SHORT D2Client.6FAFB7C2
|
//6FAFB7A1 . 74 1F JE SHORT D2Client.6FAFB7C2
|
||||||
//6FB3F73E > 83F8 26 CMP EAX,26
|
//6FB3F73E > 83F8 26 CMP EAX,26
|
||||||
@ -393,18 +402,13 @@ void Install_NewInterfaces()
|
|||||||
//6FB15F61 . 74 1F JE SHORT D2Client.6FB15F82
|
//6FB15F61 . 74 1F JE SHORT D2Client.6FB15F82
|
||||||
//6FB741FE > 83F8 26 CMP EAX,26
|
//6FB741FE > 83F8 26 CMP EAX,26
|
||||||
//6FB74201 . 74 1F JE SHORT D2Client.6FB05E32
|
//6FB74201 . 74 1F JE SHORT D2Client.6FB05E32
|
||||||
|
//6FB741FE > 83F8 26 CMP EAX,26
|
||||||
|
//6FB74201 . 74 1F JE SHORT D2Client.6FB74222
|
||||||
|
//0047EC5C > B9 02000000 MOV ECX,2
|
||||||
|
|
||||||
mem_seek R8(D2Client, 0000, 0000, 0000, 1E55A, 6A8FA, A31DA, 3C5EA, 3E39A, 6A91D);
|
mem_seek R8(D2Client, 0000, 0000, 0000, 1E55A, 6A8FA, A31DA, 3C5EA, 3E39A, 0000);
|
||||||
if (version_D2Client == V114d) {
|
memt_byte( 0x55, 0xE8 ); // CALL caller_resetSelectedPage
|
||||||
memt_byte(0x8B, 0x90);
|
MEMT_REF4( 0xD53BED33, caller_resetSelectedPageByKey);
|
||||||
memt_byte(0x14, 0x90);
|
|
||||||
memt_byte(0x8D, 0xE8);
|
|
||||||
MEMT_REF4(0x00712698, caller_resetSelectedPageByKey_114);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
memt_byte(0x55, 0xE8); // CALL caller_resetSelectedPage
|
|
||||||
MEMT_REF4(0xD53BED33, caller_resetSelectedPageByKey);
|
|
||||||
}
|
|
||||||
//6FACE55A . 55 PUSH EBP
|
//6FACE55A . 55 PUSH EBP
|
||||||
//6FACE55B . 33ED XOR EBP,EBP
|
//6FACE55B . 33ED XOR EBP,EBP
|
||||||
//6FACE55D . 3BD5 CMP EDX,EBP
|
//6FACE55D . 3BD5 CMP EDX,EBP
|
||||||
@ -448,29 +452,27 @@ void Install_NewInterfaces()
|
|||||||
|
|
||||||
// Print custom page
|
// Print custom page
|
||||||
mem_seek R8(D2Client, 87697, 86A17, 81FAB, A3759, 66B59, 902B9, C3B49, 1D549, 57052);
|
mem_seek R8(D2Client, 87697, 86A17, 81FAB, A3759, 66B59, 902B9, C3B49, 1D549, 57052);
|
||||||
if (version_D2Client == V114d) {
|
MEMC_REF4( D2PrintStatsPage, printCustomPage);
|
||||||
MEMT_REF4(0x00050CAA, printCustomPage);
|
|
||||||
} else {
|
|
||||||
MEMC_REF4(D2PrintStatsPage, printCustomPage);
|
|
||||||
}
|
|
||||||
//6FB21FAA . E8 B1DDFAFF CALL D2Client.6FACFD60
|
//6FB21FAA . E8 B1DDFAFF CALL D2Client.6FACFD60
|
||||||
//6FB53758 . E8 43F1FDFF CALL D2Client.6FB328A0
|
//6FB53758 . E8 43F1FDFF CALL D2Client.6FB328A0
|
||||||
//6FB16B58 |. E8 C3270200 CALL D2Client.6FB39320
|
//6FB16B58 |. E8 C3270200 CALL D2Client.6FB39320
|
||||||
//6FB402B8 |. E8 C3AFFDFF CALL D2Client.6FB1B280
|
//6FB402B8 |. E8 C3AFFDFF CALL D2Client.6FB1B280
|
||||||
//6FB73B48 |. E8 5393FFFF CALL D2Client.6FB6CEA0
|
//6FB73B48 |. E8 5393FFFF CALL D2Client.6FB6CEA0
|
||||||
//6FACD548 |. E8 F3200A00 CALL D2Client.6FB1B280
|
//6FACD548 |. E8 F3200A00 CALL D2Client.6FB1B280
|
||||||
|
//00457051 |. E8 AA0C0500 CALL Game.004A7D00
|
||||||
|
|
||||||
// Don't print Border
|
// Don't print Border
|
||||||
mem_seek R8(D2Client, 58EF6, 58EF6, 5F4C6, 2D366, B5A46, 82166, 271C6, 6D2B6, 98707);
|
mem_seek R8(D2Client, 58EF6, 58EF6, 5F4C6, 2D366, B5A46, 82166, 271C6, 6D2B6, 98636);
|
||||||
memt_byte( version_D2Client == V114d ? 0x8B : 0xB9, 0xE8 ); // CALL caller_DontPrintBorder
|
memt_byte( version_D2Client >= V114d ? 0x6A : 0xB9, 0xE8 ); // CALL caller_DontPrintBorder
|
||||||
MEMT_REF4( version_D2Client == V114d ? 0x7BEF1835 : 0x00000012, version_D2Client == V114d ? caller_DontPrintBorder_114 : version_D2Client >= V111 ? caller_DontPrintBorder_111 : caller_DontPrintBorder);
|
MEMT_REF4( version_D2Client >= V114d ? 0xB8458D48 : 0x00000012, version_D2Client >= V114d ? caller_DontPrintBorder_114 : version_D2Client >= V111 ? caller_DontPrintBorder_111 : caller_DontPrintBorder);
|
||||||
if (version_D2Client == V114d) memt_byte(0x00, 0x90);
|
//6FAFF4C6 > B9 12000000 MOV ECX,12
|
||||||
//6FAFF4C6 > B9 12000000 MOV ECX,12
|
|
||||||
//6FADD366 |. B9 12000000 MOV ECX,12
|
//6FADD366 |. B9 12000000 MOV ECX,12
|
||||||
//6FB65A46 |. B9 12000000 MOV ECX,12
|
//6FB65A46 |. B9 12000000 MOV ECX,12
|
||||||
//6FB32166 |. B9 12000000 MOV ECX,12
|
//6FB32166 |. B9 12000000 MOV ECX,12
|
||||||
//6FAD71C6 |. B9 12000000 MOV ECX,12
|
//6FAD71C6 |. B9 12000000 MOV ECX,12
|
||||||
//6FB1D2B6 |. B9 12000000 MOV ECX,12
|
//6FB1D2B6 |. B9 12000000 MOV ECX,12
|
||||||
|
//00498636 |. 6A 48 PUSH 48
|
||||||
|
//00498638 |. 8D45 B8 LEA EAX,DWORD PTR SS:[EBP-48]
|
||||||
|
|
||||||
// Manage mouse down (Play sound)
|
// Manage mouse down (Play sound)
|
||||||
mem_seek R8(D2Client, 2A9DC, 2A9CC, 312A5, 82736, 891B6, 6B116, BCD36, BF4D6, A7731);
|
mem_seek R8(D2Client, 2A9DC, 2A9CC, 312A5, 82736, 891B6, 6B116, BCD36, BF4D6, A7731);
|
||||||
@ -483,18 +485,19 @@ void Install_NewInterfaces()
|
|||||||
//6FB1B116 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
//6FB1B116 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
||||||
//6FB6CD36 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
//6FB6CD36 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
||||||
//6FB6F4D6 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
//6FB6F4D6 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
||||||
|
//004A7731 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
||||||
|
|
||||||
// Manage mouse up
|
// Manage mouse up
|
||||||
mem_seek R8(D2Client, 2ABBB, 2ABAB, 3148D, 836D9, 8A159, 6C0B9, BDCB9, C0459, A78DA);
|
mem_seek R8(D2Client, 2ABBB, 2ABAB, 3148D, 836D9, 8A159, 6C0B9, BDCB9, C0459, A78DA);
|
||||||
memt_byte( 0xA1, 0xE8 ); // CALL caller_mouseCustomPageLeftUp
|
memt_byte( 0xA1, 0xE8 ); // CALL caller_mouseCustomPageLeftUp
|
||||||
MEMT_REF4( ptWindowStartX, version_D2Client == V114d ? caller_mouseCustomPageLeftUp_114 : version_D2Client >= V111 ? caller_mouseCustomPageLeftUp_111 : version_D2Client == V110 ? caller_mouseCustomPageLeftUp : caller_mouseCustomPageLeftUp_9);
|
MEMT_REF4( ptWindowStartX, version_D2Client >= V114d ? caller_mouseCustomPageLeftUp_114 : version_D2Client >= V111 ? caller_mouseCustomPageLeftUp_111 : version_D2Client == V110 ? caller_mouseCustomPageLeftUp : caller_mouseCustomPageLeftUp_9);
|
||||||
//6FAD148D . A1 48A7BB6F MOV EAX,DWORD PTR DS:[6FBBA748]
|
//6FAD148D . A1 48A7BB6F MOV EAX,DWORD PTR DS:[6FBBA748]
|
||||||
//6FB336D9 . A1 24BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD24]
|
//6FB336D9 . A1 24BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD24]
|
||||||
//6FB3A159 . A1 F8BEBC6F MOV EAX,DWORD PTR DS:[6FBCBEF8]
|
//6FB3A159 . A1 F8BEBC6F MOV EAX,DWORD PTR DS:[6FBCBEF8]
|
||||||
//6FB1C0B9 . A1 28BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD28]
|
//6FB1C0B9 . A1 28BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD28]
|
||||||
//6FB6DCB9 . A1 A0B9BC6F MOV EAX,DWORD PTR DS:[6FBCB9A0]
|
//6FB6DCB9 . A1 A0B9BC6F MOV EAX,DWORD PTR DS:[6FBCB9A0]
|
||||||
//6FB70459 . A1 54D3BC6F MOV EAX,DWORD PTR DS:[6FBCD354]
|
//6FB70459 . A1 54D3BC6F MOV EAX,DWORD PTR DS:[6FBCD354]
|
||||||
|
//004A78DA |. A1 58287A00 MOV EAX,DWORD PTR DS:[7A2858]
|
||||||
|
|
||||||
// open page : 6FB23515 |> 892CB5 A8A6BB6>MOV DWORD PTR DS:[ESI*4+6FBBA6A8],EBP
|
// open page : 6FB23515 |> 892CB5 A8A6BB6>MOV DWORD PTR DS:[ESI*4+6FBBA6A8],EBP
|
||||||
//6FB2347D |. 8914B5 A8A6BB6F MOV DWORD PTR DS:[ESI*4+6FBBA6A8],EDX
|
//6FB2347D |. 8914B5 A8A6BB6F MOV DWORD PTR DS:[ESI*4+6FBBA6A8],EDX
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
bool active_othersFeatures = false;
|
bool active_othersFeatures = false;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Remove protect on the save file .d2s
|
// Remove protect on the save file .d2s
|
||||||
mem_seek( offset_D2Game + 0x77080);//6FC8DD5E-6FAA0000
|
mem_seek( offset_D2Game + 0x77080);//6FC8DD5E-6FAA0000
|
||||||
@ -22,7 +21,7 @@ void Install_ChangeResolution()
|
|||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2gfx for . (ChangeResolution)\n");
|
log_msg("Patch D2gfx for . (ChangeResolution)\n");
|
||||||
|
|
||||||
// execute if it's our packet else continue
|
// execute if it's our packet else continue
|
||||||
@ -98,7 +97,7 @@ void Install_Test2()
|
|||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Game. (Test)\n");
|
log_msg("Patch D2Game. (Test)\n");
|
||||||
|
|
||||||
// Test
|
// Test
|
||||||
@ -111,8 +110,6 @@ void Install_Test2()
|
|||||||
isInstalled = true;
|
isInstalled = true;
|
||||||
}*/
|
}*/
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
void Install_OthersFeatures()
|
void Install_OthersFeatures()
|
||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
@ -120,6 +117,7 @@ void Install_OthersFeatures()
|
|||||||
|
|
||||||
log_msg("Patch. (OthersFeatures)\n");
|
log_msg("Patch. (OthersFeatures)\n");
|
||||||
|
|
||||||
|
// Install_RemoveExperienceDiminushingReturn();
|
||||||
// Install_ChangeResolution();
|
// Install_ChangeResolution();
|
||||||
// Install_Test();
|
// Install_Test();
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
Add DoNotCloseNihlathakPortal by haxifix.
|
||||||
|
|
||||||
Loading parameters from ini file.
|
Loading parameters from ini file.
|
||||||
|
|
||||||
@ -13,9 +14,9 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
|
|
||||||
#define PARAMETERS_FILENAME "PlugY.ini"
|
const char* PARAMETERS_FILENAME = "PlugY.ini";
|
||||||
#define PARAM_FIXED_FILENAME "PlugY\\PlugYFixed.ini"
|
const char* PARAM_FIXED_FILENAME = "PlugY\\PlugYFixed.ini";
|
||||||
#define PARAM_DEFAULT_FILENAME "PlugY\\PlugYDefault.ini"
|
const char* PARAM_DEFAULT_FILENAME = "PlugY\\PlugYDefault.ini";
|
||||||
|
|
||||||
#define BUFSIZE 0x400
|
#define BUFSIZE 0x400
|
||||||
|
|
||||||
@ -35,6 +36,7 @@
|
|||||||
#include "commands.h"
|
#include "commands.h"
|
||||||
#include "language.h"
|
#include "language.h"
|
||||||
#include "windowed.h"
|
#include "windowed.h"
|
||||||
|
#include "savePlayerData.h"
|
||||||
|
|
||||||
|
|
||||||
char* modDataDirectory = "PlugY";
|
char* modDataDirectory = "PlugY";
|
||||||
@ -48,13 +50,13 @@ TargetMod selectModParam = MOD_NO;
|
|||||||
|
|
||||||
|
|
||||||
const char* S_GENERAL = "GENERAL";
|
const char* S_GENERAL = "GENERAL";
|
||||||
const char* S_dllFilenames = "DllToLoad";
|
|
||||||
const char* S_dllFilenames2 = "DllToLoad2";
|
|
||||||
const char* S_active_plugin = "ActivePlugin";
|
const char* S_active_plugin = "ActivePlugin";
|
||||||
const char* S_active_DisableBattleNet = "DisableBattleNet";
|
const char* S_active_DisableBattleNet = "DisableBattleNet";
|
||||||
const char* S_active_logFile = "ActiveLogFile";
|
const char* S_active_logFile = "ActiveLogFile";
|
||||||
const char* S_active_CheckMemory = "ActiveCheckMemory";
|
const char* S_dllFilenames = "DllToLoad";
|
||||||
|
const char* S_dllFilenames2 = "DllToLoad2";
|
||||||
const char* S_active_Commands = "ActiveCommands";
|
const char* S_active_Commands = "ActiveCommands";
|
||||||
|
const char* S_active_CheckMemory = "ActiveCheckMemory";
|
||||||
const char* S_active_othersFeatures = "ActiveAllOthersFeatures";
|
const char* S_active_othersFeatures = "ActiveAllOthersFeatures";
|
||||||
|
|
||||||
const char* S_WINDOWED = "WINDOWED";
|
const char* S_WINDOWED = "WINDOWED";
|
||||||
@ -79,44 +81,76 @@ const char* S_availableLanguages = "AvailableLanguages";
|
|||||||
const char* S_SAVEPATH = "SAVEPATH";
|
const char* S_SAVEPATH = "SAVEPATH";
|
||||||
const char* S_active_changingSavePath = "ActiveSavePathChange";
|
const char* S_active_changingSavePath = "ActiveSavePathChange";
|
||||||
const char* S_savePath = "SavePath";
|
const char* S_savePath = "SavePath";
|
||||||
|
const char* S_active_AutoBackup = "ActiveAutoBackup";
|
||||||
|
const char* S_maxBackupPerCharacter = "MaxBackupPerCharacter";
|
||||||
|
|
||||||
const char* S_MAIN_SCREEN = "MAIN SCREEN";
|
const char* S_MAIN_SCREEN = "MAIN SCREEN";
|
||||||
const char* S_active_VersionTextChange = "ActiveVersionTextChange";
|
const char* S_active_VersionTextChange = "ActiveVersionTextChange";
|
||||||
const char* S_active_VersionTextChanges = "ActiveVersionTextChanges";
|
|
||||||
const char* S_versionText = "VersionText";
|
const char* S_versionText = "VersionText";
|
||||||
const char* S_modVersionColor = "ColorOfVersionText";
|
const char* S_modVersionColor = "ColorOfVersionText";
|
||||||
const char* S_active_PrintPlugYVersion = "ActivePrintPlugYVersion";
|
const char* S_active_PrintPlugYVersion = "ActivePrintPlugYVersion";
|
||||||
const char* S_colorOfPlugYVersion = "ColorOfPlugYVersion";
|
const char* S_colorOfPlugYVersion = "ColorOfPlugYVersion";
|
||||||
|
|
||||||
const char* S_STASH = "STASH";
|
const char* S_STASH = "STASH";
|
||||||
|
const char* S_active_bigStash = "ActiveBigStash";
|
||||||
const char* S_active_multiPageStash = "ActiveMultiPageStash";
|
const char* S_active_multiPageStash = "ActiveMultiPageStash";
|
||||||
const char* S_maxSelfPages = "MaxPersonnalPages";
|
|
||||||
const char* S_nbPagesPerIndex = "NbPagesPerIndex";
|
const char* S_nbPagesPerIndex = "NbPagesPerIndex";
|
||||||
const char* S_nbPagesPerIndex2 = "NbPagesPerIndex2";
|
const char* S_nbPagesPerIndex2 = "NbPagesPerIndex2";
|
||||||
const char* S_active_sharedStash = "ActiveSharedStash";
|
const char* S_maxSelfPages = "MaxPersonnalPages";
|
||||||
const char* S_openSharedStashOnLoading = "OpenSharedStashOnLoading";
|
const char* S_autoRenameStashPage = "AutoRenameStashPage";
|
||||||
const char* S_maxSharedPages = "MaxSharedPages";
|
const char* S_PersonalNormalPageColor = "PersonalNormalPageColor";
|
||||||
const char* S_sharedStashFilename = "SharedStashFilename";
|
const char* S_PersonalIndexPageColor = "PersonalIndexPageColor";
|
||||||
const char* S_separateHardSoftStash = "SeparateHardcoreStash";
|
const char* S_PersonalMainIndexPageColor = "PersonalMainIndexPageColor";
|
||||||
const char* S_active_bigStash = "ActiveBigStash";
|
const char* S_SharedNormalPageColor = "SharedNormalPageColor";
|
||||||
const char* S_displaySharedSetItemNameInGreen = "DisplaySharedSetItemNameInGreen";
|
const char* S_SharedIndexPageColor = "SharedIndexPageColor";
|
||||||
const char* S_active_sharedGold = "ActiveSharedGold";
|
const char* S_SharedMainIndexPageColor = "SharedMainIndexPageColor";
|
||||||
|
|
||||||
|
const char* S_active_sharedStash = "ActiveSharedStash";
|
||||||
|
const char* S_active_SharedStashInMultiPlayer = "ActiveSharedStashInMultiPlayer";
|
||||||
|
const char* S_separateHardSoftStash = "SeparateHardcoreStash";
|
||||||
|
const char* S_openSharedStashOnLoading = "OpenSharedStashOnLoading";
|
||||||
|
const char* S_sharedStashFilename = "SharedStashFilename";
|
||||||
|
const char* S_displaySharedSetItemNameInGreen = "DisplaySharedSetItemNameInGreen";
|
||||||
|
const char* S_maxSharedPages = "MaxSharedPages";
|
||||||
|
const char* S_active_sharedGold = "ActiveSharedGold";
|
||||||
|
|
||||||
const char* S_posXPreviousBtn = "PosXPreviousBtn";
|
const char* S_posXPreviousBtn = "PosXPreviousBtn";
|
||||||
const char* S_posYPreviousBtn = "PosYPreviousBtn";
|
const char* S_posYPreviousBtn = "PosYPreviousBtn";
|
||||||
|
const char* S_posWPreviousBtn = "PosWPreviousBtn";
|
||||||
|
const char* S_posHPreviousBtn = "PosHPreviousBtn";
|
||||||
const char* S_posXNextBtn = "PosXNextBtn";
|
const char* S_posXNextBtn = "PosXNextBtn";
|
||||||
const char* S_posYNextBtn = "PosYNextBtn";
|
const char* S_posYNextBtn = "PosYNextBtn";
|
||||||
|
const char* S_posWNextBtn = "PosWNextBtn";
|
||||||
|
const char* S_posHNextBtn = "PosHNextBtn";
|
||||||
const char* S_posXSharedBtn = "PosXSharedBtn";
|
const char* S_posXSharedBtn = "PosXSharedBtn";
|
||||||
const char* S_posYSharedBtn = "PosYSharedBtn";
|
const char* S_posYSharedBtn = "PosYSharedBtn";
|
||||||
|
const char* S_posWSharedBtn = "PosWSharedBtn";
|
||||||
|
const char* S_posHSharedBtn = "PosHSharedBtn";
|
||||||
const char* S_posXPreviousIndexBtn = "PosXPreviousIndexBtn";
|
const char* S_posXPreviousIndexBtn = "PosXPreviousIndexBtn";
|
||||||
const char* S_posYPreviousIndexBtn = "PosYPreviousIndexBtn";
|
const char* S_posYPreviousIndexBtn = "PosYPreviousIndexBtn";
|
||||||
|
const char* S_posWPreviousIndexBtn = "PosWPreviousIndexBtn";
|
||||||
|
const char* S_posHPreviousIndexBtn = "PosHPreviousIndexBtn";
|
||||||
const char* S_posXNextIndexBtn = "PosXNextIndexBtn";
|
const char* S_posXNextIndexBtn = "PosXNextIndexBtn";
|
||||||
const char* S_posYNextIndexBtn = "PosYNextIndexBtn";
|
const char* S_posYNextIndexBtn = "PosYNextIndexBtn";
|
||||||
|
const char* S_posWNextIndexBtn = "PosWNextIndexBtn";
|
||||||
|
const char* S_posHNextIndexBtn = "PosHNextIndexBtn";
|
||||||
const char* S_posXPutGoldBtn = "PosXPutGoldBtn";
|
const char* S_posXPutGoldBtn = "PosXPutGoldBtn";
|
||||||
const char* S_posYPutGoldBtn = "PosYPutGoldBtn";
|
const char* S_posYPutGoldBtn = "PosYPutGoldBtn";
|
||||||
|
const char* S_posWPutGoldBtn = "PosWPutGoldBtn";
|
||||||
|
const char* S_posHPutGoldBtn = "PosHPutGoldBtn";
|
||||||
const char* S_posXTakeGoldBtn = "PosXTakeGoldBtn";
|
const char* S_posXTakeGoldBtn = "PosXTakeGoldBtn";
|
||||||
const char* S_posYTakeGoldBtn = "PosYTakeGoldBtn";
|
const char* S_posYTakeGoldBtn = "PosYTakeGoldBtn";
|
||||||
|
const char* S_posWTakeGoldBtn = "PosWTakeGoldBtn";
|
||||||
|
const char* S_posHTakeGoldBtn = "PosHTakeGoldBtn";
|
||||||
|
const char* S_posXStashNameField = "PosXStashNameField";
|
||||||
|
const char* S_posYStashNameField = "PosYStashNameField";
|
||||||
|
const char* S_posWStashNameField = "PosWStashNameField";
|
||||||
|
const char* S_posHStashNameField = "PosHStashNameField";
|
||||||
|
const char* S_posXStashGoldField = "PosXStashGoldField";
|
||||||
|
const char* S_posYStashGoldField = "PosYStashGoldField";
|
||||||
|
const char* S_posWStashGoldField = "PosWStashGoldField";
|
||||||
|
const char* S_posHStashGoldField = "PosHStashGoldField";
|
||||||
|
|
||||||
|
|
||||||
const char* S_STATS_POINTS = "STATS POINTS";
|
const char* S_STATS_POINTS = "STATS POINTS";
|
||||||
const char* S_active_StatsPoints = "ActiveStatsUnassignment";
|
const char* S_active_StatsPoints = "ActiveStatsUnassignment";
|
||||||
@ -124,14 +158,20 @@ const char* S_keyUsedForUnassignStatPoint = "KeyUsed";
|
|||||||
const char* S_active_StatsShiftClickLimit = "ActiveShiftClickLimit";
|
const char* S_active_StatsShiftClickLimit = "ActiveShiftClickLimit";
|
||||||
const char* S_limitValueToShiftClick = "LimitValueToShiftClick";
|
const char* S_limitValueToShiftClick = "LimitValueToShiftClick";
|
||||||
|
|
||||||
const char* S_SKILL_ON_LEVEL_UP = "SKILL ON LEVEL UP";
|
|
||||||
const char* S_active_SkillPerLevelUpChange = "ActiveSkillPerLevelUp";
|
|
||||||
const char* S_skillPerLevelUp = "SkillPerLevelUp";
|
|
||||||
|
|
||||||
const char* S_STAT_ON_LEVEL_UP = "STAT ON LEVEL UP";
|
const char* S_STAT_ON_LEVEL_UP = "STAT ON LEVEL UP";
|
||||||
const char* S_active_StatPerLevelUpChange = "ActiveStatPerLevelUp";
|
const char* S_active_StatPerLevelUpChange = "ActiveStatPerLevelUp";
|
||||||
const char* S_statPerLevelUp = "StatPerLevelUp";
|
const char* S_statPerLevelUp = "StatPerLevelUp";
|
||||||
|
|
||||||
|
const char* S_SKILLS_POINTS = "SKILLS POINTS";
|
||||||
|
const char* S_active_SkillsPoints = "ActiveSkillsUnassignment";
|
||||||
|
const char* S_unassignSkillsPointsOneForOne = "ActiveSkillsUnassignmentOneForOne";
|
||||||
|
const char* S_posXUnassignSkillBtn = "PosXUnassignSkillBtn";
|
||||||
|
const char* S_posYUnassignSkillBtn = "PosYUnassignSkillBtn";
|
||||||
|
|
||||||
|
const char* S_SKILL_ON_LEVEL_UP = "SKILL ON LEVEL UP";
|
||||||
|
const char* S_active_SkillPerLevelUpChange = "ActiveSkillPerLevelUp";
|
||||||
|
const char* S_skillPerLevelUp = "SkillPerLevelUp";
|
||||||
|
|
||||||
const char* S_WORLD_EVENT = "WORLD EVENT";
|
const char* S_WORLD_EVENT = "WORLD EVENT";
|
||||||
const char* S_active_WorldEvent = "ActiveWorldEvent";
|
const char* S_active_WorldEvent = "ActiveWorldEvent";
|
||||||
const char* S_showSOJSoldCounterInAllDiff = "ShowCounterInAllDifficulty";
|
const char* S_showSOJSoldCounterInAllDiff = "ShowCounterInAllDifficulty";
|
||||||
@ -148,12 +188,27 @@ const char* S_timeBeforeAutoSellDelta = "TimeBeforeAutoSellMax";
|
|||||||
|
|
||||||
const char* S_UBER_QUEST = "UBER QUEST";
|
const char* S_UBER_QUEST = "UBER QUEST";
|
||||||
const char* S_active_UberQuest = "ActiveUberQuest";
|
const char* S_active_UberQuest = "ActiveUberQuest";
|
||||||
|
const char* S_UberMephistoX = "UberMephistoX";
|
||||||
|
const char* S_UberMephistoY = "UberMephistoY";
|
||||||
|
const char* S_UberDiabloX = "UberDiabloX";
|
||||||
|
const char* S_UberDiabloY = "UberDiabloY";
|
||||||
|
const char* S_UberBaalX = "UberBaalX";
|
||||||
|
const char* S_UberBaalY = "UberBaalY";
|
||||||
|
|
||||||
const char* S_SKILLS_POINTS = "SKILLS POINTS";
|
const char* S_active_UberMinions = "ActiveUberMinions";
|
||||||
const char* S_active_SkillsPoints = "ActiveSkillsUnassignment";
|
//const char* S_UberMephistoMinions = "UberMephistoMinions";
|
||||||
const char* S_unassignSkillsPointsOneByOne = "ActiveSkillsUnassignmentOneByOne";
|
const char* S_UberMephistoSpawnPercent = "UberMephistoSpawnPercent";
|
||||||
const char* S_posXUnassignSkillBtn = "PosXUnassignSkillBtn";
|
const char* S_UberMephistoSpawnRadius = "UberMephistoSpawnRadius";
|
||||||
const char* S_posYUnassignSkillBtn = "PosYUnassignSkillBtn";
|
//const char* S_UberBaalMinions = "UberBaalMinions";
|
||||||
|
const char* S_UberBaalSpawnPercent = "UberBaalSpawnPercent";
|
||||||
|
const char* S_UberBaalSpawnRadius = "UberBaalSpawnRadius";
|
||||||
|
//const char* S_UberDiabloMinions = "UberDiabloMinions";
|
||||||
|
const char* S_UberDiabloSpawnPercent = "UberDiabloSpawnPercent";
|
||||||
|
const char* S_UberDiabloSpawnRadius = "UberDiabloSpawnRadius";
|
||||||
|
const char* S_active_UberDiabloRushTweekAI = "ActiveUberDiabloRushTweekAI";
|
||||||
|
const char* S_active_UberBaalTeleportTweekAI = "ActiveUberBaalTeleportTweekAI";
|
||||||
|
const char* S_active_UberBaalChillingArmorTweekAI = "ActiveUberBaalChillingArmorTweekAI";
|
||||||
|
const char* S_uberBaalChillingArmorTimer = "UberBaalChillingArmorTimer";
|
||||||
|
|
||||||
const char* S_INTERFACE = "INTERFACE";
|
const char* S_INTERFACE = "INTERFACE";
|
||||||
const char* S_active_newInterfaces = "ActiveNewStatsInterface";
|
const char* S_active_newInterfaces = "ActiveNewStatsInterface";
|
||||||
@ -161,16 +216,18 @@ const char* S_selectMainPageOnOpenning = "SelectMainPageOnOpenning";
|
|||||||
const char* S_printBackgroundOnMainPage = "PrintButtonsBackgroundOnMainStatsPage";
|
const char* S_printBackgroundOnMainPage = "PrintButtonsBackgroundOnMainStatsPage";
|
||||||
|
|
||||||
const char* S_EXTRA = "EXTRA";
|
const char* S_EXTRA = "EXTRA";
|
||||||
|
const char* S_active_RunLODs = "ActiveLaunchAnyNumberOfLOD";
|
||||||
const char* S_active_alwaysRegenMapInSP = "AlwaysRegenMapInSP";
|
const char* S_active_alwaysRegenMapInSP = "AlwaysRegenMapInSP";
|
||||||
const char* S_nbPlayersCommandByDefault = "NBPlayersByDefault";
|
const char* S_nbPlayersCommandByDefault = "NBPlayersByDefault";
|
||||||
const char* S_active_DisplayItemLevel = "ActiveDisplayItemLevel";
|
const char* S_active_DisplayItemLevel = "ActiveDisplayItemLevel";
|
||||||
const char* S_active_RunLODs = "ActiveLaunchAnyNumberOfLOD";
|
|
||||||
const char* S_active_AlwaysDisplayLifeMana = "AlwaysDisplayLifeAndManaValues";
|
const char* S_active_AlwaysDisplayLifeMana = "AlwaysDisplayLifeAndManaValues";
|
||||||
const char* S_active_EnabledTXTFilesWithMSExcel= "EnabledTXTFilesWhenMSExcelOpenIt";
|
const char* S_active_EnabledTXTFilesWithMSExcel= "EnabledTXTFilesWhenMSExcelOpenIt";
|
||||||
const char* S_active_DisplayBaseStatsValue = "ActiveDisplayBaseStatsValue";
|
const char* S_active_DisplayBaseStatsValue = "ActiveDisplayBaseStatsValue";
|
||||||
const char* S_active_LadderRunewords = "ActiveLadderRunewords";
|
const char* S_active_LadderRunewords = "ActiveLadderRunewords";
|
||||||
const char* S_active_EnabledCowPortalWhenCowKingWasKill = "ActiveCowPortalWhenCowKingWasKilled";
|
const char* S_active_EnabledCowPortalWhenCowKingWasKill = "ActiveCowPortalWhenCowKingWasKilled";
|
||||||
const char* S_active_DoNotCloseNihlathakPortal = "ActiveDoNotCloseNihlathakPortal";
|
const char* S_active_DoNotCloseNihlathakPortal = "ActiveDoNotCloseNihlathakPortal";
|
||||||
|
const char* S_active_MoveCainNearHarrogathWaypoint = "MoveCainNearHarrogathWaypoint";
|
||||||
|
const char* S_active_RemoveExperienceDiminushingReturn = "RemoveExperienceDiminushingReturn";
|
||||||
|
|
||||||
const char* S_DLL = "DLL:\t";
|
const char* S_DLL = "DLL:\t";
|
||||||
const char* S_DEFAULT = "DEFAULT:";
|
const char* S_DEFAULT = "DEFAULT:";
|
||||||
@ -207,6 +264,13 @@ else log_msg(S_DEFAULT); \
|
|||||||
else log_msg(S_FIXED); \
|
else log_msg(S_FIXED); \
|
||||||
else log_msg(S_USER)
|
else log_msg(S_USER)
|
||||||
|
|
||||||
|
int getColor(char* buffer)
|
||||||
|
{
|
||||||
|
int val = atoi(buffer);
|
||||||
|
if (val < 1 || val > 19 || val == 17)
|
||||||
|
return 0;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
void init_ActivePlugin(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
void init_ActivePlugin(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
||||||
{
|
{
|
||||||
@ -227,8 +291,18 @@ void init_General(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFi
|
|||||||
log_msg("active_DisableBattleNet\t\t= %d\n", active_DisableBattleNet);
|
log_msg("active_DisableBattleNet\t\t= %d\n", active_DisableBattleNet);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_active_logFile, "0");
|
GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_active_logFile, "0");
|
||||||
active_logFile = atoi(buffer)+1;
|
active_logFile = atoi(buffer) + 1;
|
||||||
log_msg("active_logFile\t\t\t\t= %d\n", active_logFile-1);
|
log_msg("active_logFile\t\t\t\t= %d\n", active_logFile);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_GENERAL,S_dllFilenames,"");
|
||||||
|
strcat(buffer,"|");
|
||||||
|
char* buf = &buffer[strlen(buffer)];
|
||||||
|
if (!iniFixedFile->GetPrivateProfileString(S_GENERAL, S_dllFilenames2, NULL, buf, maxSize))
|
||||||
|
if (!iniFile->GetPrivateProfileString(S_GENERAL, S_dllFilenames2, NULL, buf, maxSize))
|
||||||
|
iniDefaultFile->GetPrivateProfileString(S_GENERAL, S_dllFilenames2, NULL, buf, maxSize);
|
||||||
|
dllFilenames = (char*)D2FogMemAlloc(strlen(buffer)+1,__FILE__,__LINE__,0);
|
||||||
|
strcpy(dllFilenames,buffer);
|
||||||
|
log_msg("dllFilenames\t\t\t\t= %s\n", dllFilenames);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_active_Commands, "0");
|
GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_active_Commands, "0");
|
||||||
active_Commands = atoi(buffer) != 0;
|
active_Commands = atoi(buffer) != 0;
|
||||||
@ -242,17 +316,6 @@ void init_General(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFi
|
|||||||
active_othersFeatures = atoi(buffer) != 0;
|
active_othersFeatures = atoi(buffer) != 0;
|
||||||
log_msg("active_othersFeatures\t\t= %u\n", active_othersFeatures);
|
log_msg("active_othersFeatures\t\t= %u\n", active_othersFeatures);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_GENERAL,S_dllFilenames,"");
|
|
||||||
strcat(buffer,"|");
|
|
||||||
char* buf = &buffer[strlen(buffer)];
|
|
||||||
if (!iniFixedFile->GetPrivateProfileString(S_GENERAL, S_dllFilenames2, NULL, buf, maxSize))
|
|
||||||
if (!iniFile->GetPrivateProfileString(S_GENERAL, S_dllFilenames2, NULL, buf, maxSize))
|
|
||||||
iniDefaultFile->GetPrivateProfileString(S_GENERAL, S_dllFilenames2, NULL, buf, maxSize);
|
|
||||||
dllFilenames = (char*)D2FogMemAlloc(strlen(buffer)+1,__FILE__,__LINE__,0);
|
|
||||||
strcpy(dllFilenames,buffer);
|
|
||||||
|
|
||||||
log_msg("dllFilenames\t\t\t\t= %s\n",dllFilenames);
|
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +340,7 @@ void init_Windowed(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultF
|
|||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_SetWindowPos, "0");
|
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_SetWindowPos, "0");
|
||||||
active_SetWindowPos = atoi(buffer) != 0;
|
active_SetWindowPos = atoi(buffer) != 0;
|
||||||
log_msg("active_MoveAndResizeWindow\t= %d\n", active_SetWindowPos);
|
log_msg("active_SetWindowPos\t= %d\n", active_SetWindowPos);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_X, "0");
|
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_X, "0");
|
||||||
windowedX = atoi(buffer);
|
windowedX = atoi(buffer);
|
||||||
@ -287,11 +350,11 @@ void init_Windowed(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultF
|
|||||||
windowedY = atoi(buffer);
|
windowedY = atoi(buffer);
|
||||||
log_msg("windowedY\t\t\t\t\t= %d\n", windowedY);
|
log_msg("windowedY\t\t\t\t\t= %d\n", windowedY);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_Width, "0");
|
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_Width, "800");
|
||||||
windowedWidth = atoi(buffer);
|
windowedWidth = atoi(buffer);
|
||||||
log_msg("windowedWidth\t\t\t\t= %d\n", windowedWidth);
|
log_msg("windowedWidth\t\t\t\t= %d\n", windowedWidth);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_Height, "0");
|
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_Height, "600");
|
||||||
windowedHeight = atoi(buffer);
|
windowedHeight = atoi(buffer);
|
||||||
log_msg("windowedHeight\t\t\t\t= %d\n", windowedHeight);
|
log_msg("windowedHeight\t\t\t\t= %d\n", windowedHeight);
|
||||||
|
|
||||||
@ -388,7 +451,6 @@ void init_ActiveLanguage(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDe
|
|||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void init_SavePath(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
void init_SavePath(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
||||||
{
|
{
|
||||||
GET_PRIVATE_PROFILE_STRING3(S_SAVEPATH, S_active_changingSavePath, "0");
|
GET_PRIVATE_PROFILE_STRING3(S_SAVEPATH, S_active_changingSavePath, "0");
|
||||||
@ -416,7 +478,6 @@ void init_SavePath(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultF
|
|||||||
{
|
{
|
||||||
active_changingSavePath = false;
|
active_changingSavePath = false;
|
||||||
log_msg("active_changingSavePath\t\t= %u (no valid savePath)\n\n", active_changingSavePath);
|
log_msg("active_changingSavePath\t\t= %u (no valid savePath)\n\n", active_changingSavePath);
|
||||||
// log_msg("\tsavePath\t\t\t= %s\n", savePath);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,7 +485,7 @@ void init_SavePath(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultF
|
|||||||
{
|
{
|
||||||
char buf[MAX_PATH];
|
char buf[MAX_PATH];
|
||||||
buf[0]=NULL;
|
buf[0]=NULL;
|
||||||
D2FogGetInstallPath(buf,MAX_PATH);
|
D2FogGetSavePath(buf,MAX_PATH);
|
||||||
savePath = (char*)D2FogMemAlloc(strlen(buf) + curSize - start + 1,__FILE__,__LINE__,0);
|
savePath = (char*)D2FogMemAlloc(strlen(buf) + curSize - start + 1,__FILE__,__LINE__,0);
|
||||||
strcpy(savePath,buf);
|
strcpy(savePath,buf);
|
||||||
strcat(savePath,&buffer[start]);
|
strcat(savePath,&buffer[start]);
|
||||||
@ -434,10 +495,18 @@ void init_SavePath(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultF
|
|||||||
}
|
}
|
||||||
log_msg("savePath\t\t\t\t\t= %s\n", savePath);
|
log_msg("savePath\t\t\t\t\t= %s\n", savePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING3(S_SAVEPATH, S_active_AutoBackup, "0");
|
||||||
|
active_AutoBackup = atoi(buffer) != 0;
|
||||||
|
log_msg("active_autoBackup\t\t= %u\n", active_AutoBackup);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING3(S_SAVEPATH, S_maxBackupPerCharacter, "5");
|
||||||
|
maxBackupPerCharacter = atoi(buffer);
|
||||||
|
log_msg("maxBackupPerCharacter\t\t= %u\n", maxBackupPerCharacter);
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void init_VersionText(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
void init_VersionText(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
||||||
{
|
{
|
||||||
GET_PRIVATE_PROFILE_STRING(S_MAIN_SCREEN, S_active_VersionTextChange, "0");
|
GET_PRIVATE_PROFILE_STRING(S_MAIN_SCREEN, S_active_VersionTextChange, "0");
|
||||||
@ -449,29 +518,31 @@ void init_VersionText(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefau
|
|||||||
GET_PRIVATE_PROFILE_STRING(S_MAIN_SCREEN, S_versionText, versionText);
|
GET_PRIVATE_PROFILE_STRING(S_MAIN_SCREEN, S_versionText, versionText);
|
||||||
if (!buffer[0])
|
if (!buffer[0])
|
||||||
{
|
{
|
||||||
switch(version_D2Game)
|
strcpy(buffer, "v ");
|
||||||
{
|
strcat(buffer, GetVersionString(version_D2Game));
|
||||||
//case V107: //"v 1.07"
|
//switch(version_D2Game)
|
||||||
//case V108: //"v 1.08"
|
//{
|
||||||
//case V109: //"v 1.09"
|
////case V107: //"v 1.07"
|
||||||
case V109b: //"v 1.09"
|
////case V108: //"v 1.08"
|
||||||
case V109d: //"v 1.09"
|
////case V109: //"v 1.09"
|
||||||
//case V110: //"v 1.10"
|
//case V109b: //"v 1.09"
|
||||||
//case V111: //"v 1.11"
|
//case V109d: //"v 1.09"
|
||||||
case V111b: //"v 1.11"
|
////case V110: //"v 1.10"
|
||||||
//case V112: //"v 1.12"
|
////case V111: //"v 1.11"
|
||||||
case V113c: //"v 1.13"
|
//case V111b: //"v 1.11"
|
||||||
case V113d: //"v 1.13"
|
////case V112: //"v 1.12"
|
||||||
case V114a: //"v 1.14"
|
//case V113c: //"v 1.13"
|
||||||
//case V114b: //"v 1.14b"
|
//case V113d: //"v 1.13"
|
||||||
//case V114c: //"v 1.14c"
|
//case V114a: //"v 1.14"
|
||||||
//case V114d: //"v 1.14d"
|
////case V114b: //"v 1.14b"
|
||||||
strcpy(buffer, "v ");
|
////case V114c: //"v 1.14c"
|
||||||
strcat(buffer, GetVersionString(version_D2Game));
|
////case V114d: //"v 1.14d"
|
||||||
break;
|
// strcpy(buffer, "v ");
|
||||||
default:
|
// strcat(buffer, GetVersionString(version_D2Game));
|
||||||
active_VersionTextChange=0;
|
// break;
|
||||||
}
|
//default:
|
||||||
|
// active_VersionTextChange=0;
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
versionText = (char*)D2FogMemAlloc(strlen(buffer)+1,__FILE__,__LINE__,0);
|
versionText = (char*)D2FogMemAlloc(strlen(buffer)+1,__FILE__,__LINE__,0);
|
||||||
@ -479,7 +550,7 @@ void init_VersionText(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefau
|
|||||||
log_msg("versionText\t\t\t\t\t= %s\n", versionText);
|
log_msg("versionText\t\t\t\t\t= %s\n", versionText);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_MAIN_SCREEN, S_modVersionColor, "0");
|
GET_PRIVATE_PROFILE_STRING(S_MAIN_SCREEN, S_modVersionColor, "0");
|
||||||
modVersionColor = atoi(buffer);
|
modVersionColor = getColor(buffer);
|
||||||
log_msg("modVersionColor\t\t\t\t= %u\n", modVersionColor);
|
log_msg("modVersionColor\t\t\t\t= %u\n", modVersionColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,10 +561,10 @@ void init_VersionText(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefau
|
|||||||
if (active_PrintPlugYVersion)
|
if (active_PrintPlugYVersion)
|
||||||
{
|
{
|
||||||
GET_PRIVATE_PROFILE_STRING(S_MAIN_SCREEN, S_colorOfPlugYVersion, "4");
|
GET_PRIVATE_PROFILE_STRING(S_MAIN_SCREEN, S_colorOfPlugYVersion, "4");
|
||||||
colorOfPlugYVersion = atoi(buffer);
|
colorOfPlugYVersion = getColor(buffer);
|
||||||
log_msg("colorOfPlugYVersion\t\t\t= %u\n", colorOfPlugYVersion);
|
log_msg("colorOfPlugYVersion\t\t\t= %u\n", colorOfPlugYVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,11 +581,6 @@ void init_Stash(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile
|
|||||||
if (active_multiPageStash)
|
if (active_multiPageStash)
|
||||||
{
|
{
|
||||||
active_PlayerCustomData = true;
|
active_PlayerCustomData = true;
|
||||||
// log_msg("active_PlayerCustomData\t\t= %d\n", active_PlayerCustomData);
|
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_maxSelfPages, "0");
|
|
||||||
maxSelfPages = atoi(buffer) - 1;
|
|
||||||
log_msg("maxSelfPages\t\t\t\t= %u\n", maxSelfPages);
|
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_nbPagesPerIndex, "10");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_nbPagesPerIndex, "10");
|
||||||
nbPagesPerIndex = atoi(buffer);
|
nbPagesPerIndex = atoi(buffer);
|
||||||
@ -526,69 +592,177 @@ void init_Stash(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile
|
|||||||
if (!nbPagesPerIndex2) nbPagesPerIndex2=100;
|
if (!nbPagesPerIndex2) nbPagesPerIndex2=100;
|
||||||
log_msg("nbPagesPerIndex2\t\t\t= %u\n", nbPagesPerIndex2);
|
log_msg("nbPagesPerIndex2\t\t\t= %u\n", nbPagesPerIndex2);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_maxSelfPages, "0");
|
||||||
|
maxSelfPages = atoi(buffer) - 1;
|
||||||
|
log_msg("maxSelfPages\t\t\t\t= %u\n", maxSelfPages);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_autoRenameStashPage, "0");
|
||||||
|
autoRenameStashPage = atoi(buffer) != 0;
|
||||||
|
log_msg("autoRenameStashPage\t\t\t= %d\n", autoRenameStashPage);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_PersonalNormalPageColor, "0");
|
||||||
|
PersonalNormalPageColor = getColor(buffer);
|
||||||
|
log_msg("PersonalNormalPageColor\t\t\t= %d\n", PersonalNormalPageColor);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_PersonalIndexPageColor, "12");
|
||||||
|
PersonalIndexPageColor = getColor(buffer);
|
||||||
|
log_msg("PersonalIndexPageColor\t\t\t= %d\n", PersonalIndexPageColor);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_PersonalMainIndexPageColor, "9");
|
||||||
|
PersonalMainIndexPageColor = getColor(buffer);
|
||||||
|
log_msg("PersonalMainIndexPageColor\t\t\t= %d\n", PersonalMainIndexPageColor);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_SharedNormalPageColor, "4");
|
||||||
|
SharedNormalPageColor = getColor(buffer);
|
||||||
|
log_msg("SharedNormalPageColor\t\t\t= %d\n", SharedNormalPageColor);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_SharedIndexPageColor, "8");
|
||||||
|
SharedIndexPageColor = getColor(buffer);
|
||||||
|
log_msg("SharedIndexPageColor\t\t\t= %d\n", SharedIndexPageColor);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_SharedMainIndexPageColor, "1");
|
||||||
|
SharedMainIndexPageColor = getColor(buffer);
|
||||||
|
log_msg("SharedMainIndexPageColor\t\t\t= %d\n", SharedMainIndexPageColor);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_active_sharedStash, "0");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_active_sharedStash, "0");
|
||||||
active_sharedStash = atoi(buffer) != 0;
|
active_sharedStash = atoi(buffer) != 0;
|
||||||
log_msg("active_sharedStash\t\t\t= %u\n", active_sharedStash);
|
log_msg("active_sharedStash\t\t\t= %u\n", active_sharedStash);
|
||||||
|
|
||||||
|
if (active_sharedStash)
|
||||||
|
{
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_active_SharedStashInMultiPlayer, "0");
|
||||||
|
active_SharedStashInMultiPlayer = atoi(buffer) ? 2 : 1;
|
||||||
|
log_msg("active_SharedStashInMultiPlayer = %u\n", active_SharedStashInMultiPlayer);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_separateHardSoftStash, "1");
|
||||||
|
separateHardSoftStash = atoi(buffer) != 0;
|
||||||
|
log_msg("separateHardSoftStash\t\t= %u\n", separateHardSoftStash);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_openSharedStashOnLoading, "0");
|
||||||
|
openSharedStashOnLoading = atoi(buffer) != 0;
|
||||||
|
log_msg("openSharedStashOnLoading\t\t= %u\n", openSharedStashOnLoading);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_sharedStashFilename, "SharedStashSave");
|
||||||
|
sharedStashFilename = (char*)D2FogMemAlloc(strlen(buffer)+1,__FILE__,__LINE__,0);
|
||||||
|
strcpy(sharedStashFilename, buffer);
|
||||||
|
log_msg("sharedStashFilename\t\t\t= %s\n", sharedStashFilename);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_displaySharedSetItemNameInGreen, "1");
|
||||||
|
displaySharedSetItemNameInGreen = atoi(buffer) != 0;
|
||||||
|
log_msg("displaySharedSetItemNameInGreen = %u\n", displaySharedSetItemNameInGreen);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_maxSharedPages, "0");
|
||||||
|
maxSharedPages = atoi(buffer) - 1;
|
||||||
|
log_msg("maxSharedPages\t\t\t\t= %u\n", maxSharedPages);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_active_sharedGold, "1");
|
||||||
|
active_sharedGold = atoi(buffer) != 0;
|
||||||
|
log_msg("active_sharedGold\t\t\t= %u\n", active_sharedGold);
|
||||||
|
}
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPreviousBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPreviousBtn,"-1");
|
||||||
posXPreviousBtn = atoi(buffer);
|
posXPreviousBtn = atoi(buffer);
|
||||||
|
log_msg("posXPreviousBtn\t\t\t= %d\n", posXPreviousBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPreviousBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPreviousBtn,"-1");
|
||||||
posYPreviousBtn = atoi(buffer);
|
posYPreviousBtn = atoi(buffer);
|
||||||
|
log_msg("posYPreviousBtn\t\t\t= %d\n", posYPreviousBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWPreviousBtn,"32");
|
||||||
|
posWPreviousBtn = atoi(buffer);
|
||||||
|
log_msg("posWPreviousBtn\t\t\t= %d\n", posWPreviousBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHPreviousBtn,"32");
|
||||||
|
posHPreviousBtn = atoi(buffer);
|
||||||
|
log_msg("posHPreviousBtn\t\t\t= %d\n", posHPreviousBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXNextBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXNextBtn,"-1");
|
||||||
posXNextBtn = atoi(buffer);
|
posXNextBtn = atoi(buffer);
|
||||||
|
log_msg("posXNextBtn\t\t\t= %d\n", posXNextBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYNextBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYNextBtn,"-1");
|
||||||
posYNextBtn = atoi(buffer);
|
posYNextBtn = atoi(buffer);
|
||||||
|
log_msg("posYNextBtn\t\t\t= %d\n", posYNextBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWNextBtn,"32");
|
||||||
|
posWNextBtn = atoi(buffer);
|
||||||
|
log_msg("posWNextBtn\t\t\t= %d\n", posWNextBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHNextBtn,"32");
|
||||||
|
posHNextBtn = atoi(buffer);
|
||||||
|
log_msg("posHNextBtn\t\t\t= %d\n", posHNextBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXSharedBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXSharedBtn,"-1");
|
||||||
posXSharedBtn = atoi(buffer);
|
posXSharedBtn = atoi(buffer);
|
||||||
|
log_msg("posXSharedBtn\t\t\t= %d\n", posXSharedBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYSharedBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYSharedBtn,"-1");
|
||||||
posYSharedBtn = atoi(buffer);
|
posYSharedBtn = atoi(buffer);
|
||||||
|
log_msg("posYSharedBtn\t\t\t= %d\n", posYSharedBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWSharedBtn,"32");
|
||||||
|
posWSharedBtn = atoi(buffer);
|
||||||
|
log_msg("posWSharedBtn\t\t\t= %d\n", posWSharedBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHSharedBtn,"32");
|
||||||
|
posHSharedBtn = atoi(buffer);
|
||||||
|
log_msg("posHSharedBtn\t\t\t= %d\n", posHSharedBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPreviousIndexBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPreviousIndexBtn,"-1");
|
||||||
posXPreviousIndexBtn = atoi(buffer);
|
posXPreviousIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posXPreviousIndexBtn\t\t\t= %d\n", posXPreviousIndexBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPreviousIndexBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPreviousIndexBtn,"-1");
|
||||||
posYPreviousIndexBtn = atoi(buffer);
|
posYPreviousIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posYPreviousIndexBtn\t\t\t= %d\n", posYPreviousIndexBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWPreviousIndexBtn,"32");
|
||||||
|
posWPreviousIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posWPreviousIndexBtn\t\t\t= %d\n", posWPreviousIndexBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHPreviousIndexBtn,"32");
|
||||||
|
posHPreviousIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posHPreviousIndexBtn\t\t\t= %d\n", posHPreviousIndexBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXNextIndexBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXNextIndexBtn,"-1");
|
||||||
posXNextIndexBtn = atoi(buffer);
|
posXNextIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posXNextIndexBtn\t\t\t= %d\n", posXNextIndexBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYNextIndexBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYNextIndexBtn,"-1");
|
||||||
posYNextIndexBtn = atoi(buffer);
|
posYNextIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posYNextIndexBtn\t\t\t= %d\n", posYNextIndexBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWNextIndexBtn,"32");
|
||||||
|
posWNextIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posWNextIndexBtn\t\t\t= %d\n", posWNextIndexBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHNextIndexBtn,"32");
|
||||||
|
posHNextIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posHNextIndexBtn\t\t\t= %d\n", posHNextIndexBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPutGoldBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPutGoldBtn,"-1");
|
||||||
posXPutGoldBtn = atoi(buffer);
|
posXPutGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posXPutGoldBtn\t\t\t= %d\n", posXPutGoldBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPutGoldBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPutGoldBtn,"-1");
|
||||||
posYPutGoldBtn = atoi(buffer);
|
posYPutGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posYPutGoldBtn\t\t\t= %d\n", posYPutGoldBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWPutGoldBtn,"32");
|
||||||
|
posWPutGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posWPutGoldBtn\t\t\t= %d\n", posWPutGoldBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHPutGoldBtn,"32");
|
||||||
|
posHPutGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posHPutGoldBtn\t\t\t= %d\n", posHPutGoldBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXTakeGoldBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXTakeGoldBtn,"-1");
|
||||||
posXTakeGoldBtn = atoi(buffer);
|
posXTakeGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posXTakeGoldBtn\t\t\t= %d\n", posXTakeGoldBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYTakeGoldBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYTakeGoldBtn,"-1");
|
||||||
posYTakeGoldBtn = atoi(buffer);
|
posYTakeGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posYTakeGoldBtn\t\t\t= %d\n", posYTakeGoldBtn);
|
||||||
log_msg("\t Buttons Positions: %d %d %d %d %d %d %d %d %d %d\n",posXPreviousBtn,posYPreviousBtn,posXNextBtn,posYNextBtn,posXSharedBtn,posYSharedBtn,posXPreviousIndexBtn,posYPreviousIndexBtn,posXNextIndexBtn,posYNextIndexBtn);
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWTakeGoldBtn,"32");
|
||||||
|
posWTakeGoldBtn = atoi(buffer);
|
||||||
}
|
log_msg("posWTakeGoldBtn\t\t\t= %d\n", posWTakeGoldBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHTakeGoldBtn,"32");
|
||||||
if (active_sharedStash)
|
posHTakeGoldBtn = atoi(buffer);
|
||||||
{
|
log_msg("posHTakeGoldBtn\t\t\t= %d\n", posHTakeGoldBtn);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_openSharedStashOnLoading, "0");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXStashNameField,"-1");
|
||||||
openSharedStashOnLoading = atoi(buffer) != 0;
|
posXStashNameField = atoi(buffer);
|
||||||
log_msg("openSharedStashOnLoading\t\t= %u\n", openSharedStashOnLoading);
|
log_msg("posXStashNameField\t\t\t= %d\n", posXStashNameField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYStashNameField,"-1");
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_maxSharedPages, "0");
|
posYStashNameField = atoi(buffer);
|
||||||
maxSharedPages = atoi(buffer) - 1;
|
log_msg("posYStashNameField\t\t\t= %d\n", posYStashNameField);
|
||||||
log_msg("maxSharedPages\t\t\t\t= %u\n", maxSharedPages);
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWStashNameField,"175");
|
||||||
|
posWStashNameField = atoi(buffer);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_sharedStashFilename, "SharedStashSave");
|
log_msg("posWStashNameField\t\t\t= %d\n", posWStashNameField);
|
||||||
sharedStashFilename = (char*)D2FogMemAlloc(strlen(buffer)+1,__FILE__,__LINE__,0);
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHStashNameField,"20");
|
||||||
strcpy(sharedStashFilename, buffer);
|
posHStashNameField = atoi(buffer);
|
||||||
log_msg("sharedStashFilename\t\t\t= %s\n", sharedStashFilename);
|
log_msg("posHStashNameField\t\t\t= %d\n", posHStashNameField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXStashGoldField,"-1");
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_separateHardSoftStash, "1");
|
posXStashGoldField = atoi(buffer);
|
||||||
separateHardSoftStash = atoi(buffer) != 0;
|
log_msg("posXStashGoldField\t\t\t= %d\n", posXStashGoldField);
|
||||||
log_msg("separateHardSoftStash\t\t= %u\n", separateHardSoftStash);
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYStashGoldField,"-1");
|
||||||
|
posYStashGoldField = atoi(buffer);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_displaySharedSetItemNameInGreen, "1");
|
log_msg("posYStashGoldField\t\t\t= %d\n", posYStashGoldField);
|
||||||
displaySharedSetItemNameInGreen = atoi(buffer) != 0;
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWStashGoldField,"152");
|
||||||
log_msg("displaySharedSetItemNameInGreen = %u\n", displaySharedSetItemNameInGreen);
|
posWStashGoldField = atoi(buffer);
|
||||||
|
log_msg("posWStashGoldField\t\t\t= %d\n", posWStashGoldField);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_active_sharedGold, "1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHStashGoldField,"18");
|
||||||
active_sharedGold = atoi(buffer) != 0;
|
posHStashGoldField = atoi(buffer);
|
||||||
log_msg("active_sharedGold\t\t\t= %u\n", active_sharedGold);
|
log_msg("posHStashGoldField\t\t\t= %d\n", posHStashGoldField);
|
||||||
}
|
}
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
@ -620,7 +794,6 @@ void init_StatsPoints(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefau
|
|||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void init_StatPerLevelUp(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
void init_StatPerLevelUp(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
||||||
{
|
{
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STAT_ON_LEVEL_UP, S_active_StatPerLevelUpChange, "0");
|
GET_PRIVATE_PROFILE_STRING(S_STAT_ON_LEVEL_UP, S_active_StatPerLevelUpChange, "0");
|
||||||
@ -642,23 +815,25 @@ void init_SkillsPoints(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefa
|
|||||||
active_SkillsPoints = atoi(buffer) != 0;
|
active_SkillsPoints = atoi(buffer) != 0;
|
||||||
log_msg("active_SkillsPoints\t\t\t= %d\n", active_SkillsPoints);
|
log_msg("active_SkillsPoints\t\t\t= %d\n", active_SkillsPoints);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_unassignSkillsPointsOneByOne, "0");
|
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_unassignSkillsPointsOneForOne, "0");
|
||||||
unassignSkillsPointsOneByOne = atoi(buffer) != 0;
|
unassignSkillsPointsOneForOne = atoi(buffer) != 0;
|
||||||
log_msg("unassignSkillsPointsOneByOne\t\t\t= %d\n", unassignSkillsPointsOneByOne);
|
log_msg("unassignSkillsPointsOneForOne\t\t\t= %d\n", unassignSkillsPointsOneForOne);
|
||||||
if (unassignSkillsPointsOneByOne)
|
if (unassignSkillsPointsOneForOne)
|
||||||
{
|
{
|
||||||
active_SkillsPoints = true;
|
active_SkillsPoints = true;
|
||||||
log_msg("active_SkillsPoints\t\t\t= %d\n", active_SkillsPoints);
|
log_msg("active_SkillsPoints\t\t\t= %d\n", active_SkillsPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_posXUnassignSkillBtn,"-1");
|
if (active_SkillsPoints)
|
||||||
posXUnassignSkillBtn = atoi(buffer);
|
{
|
||||||
log_msg("posXUnassignSkillBtn\t\t\t= %d\n", posXUnassignSkillBtn);
|
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_posXUnassignSkillBtn,"-1");
|
||||||
|
posXUnassignSkillBtn = atoi(buffer);
|
||||||
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_posYUnassignSkillBtn,"-1");
|
log_msg("posXUnassignSkillBtn\t\t\t= %d\n", posXUnassignSkillBtn);
|
||||||
posYUnassignSkillBtn = atoi(buffer);
|
|
||||||
log_msg("posXUnassignSkillBtn\t\t\t= %d\n", posYUnassignSkillBtn);
|
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_posYUnassignSkillBtn,"-1");
|
||||||
|
posYUnassignSkillBtn = atoi(buffer);
|
||||||
|
log_msg("posXUnassignSkillBtn\t\t\t= %d\n", posYUnassignSkillBtn);
|
||||||
|
}
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -677,12 +852,11 @@ void init_SkillPerLevelUp(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniD
|
|||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void init_WorldEvent(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
void init_WorldEvent(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
||||||
{
|
{
|
||||||
GET_PRIVATE_PROFILE_STRING(S_WORLD_EVENT, S_active_WorldEvent, "0");
|
GET_PRIVATE_PROFILE_STRING(S_WORLD_EVENT, S_active_WorldEvent, "0");
|
||||||
active_WorldEvent = atoi(buffer) != 0;
|
active_WorldEvent = atoi(buffer) != 0;
|
||||||
if (active_WorldEvent && ((version_D2Game == V109b) || (version_D2Game == V109d)) ) {
|
if (active_WorldEvent && version_D2Game < V110) {
|
||||||
active_WorldEvent = 0;
|
active_WorldEvent = 0;
|
||||||
log_msg("active_WorldEvent\t\t\t= %d (Warning : this feature is only for LoD version 1.10 or higher, so it's automatically disabled)\n", active_WorldEvent);
|
log_msg("active_WorldEvent\t\t\t= %d (Warning : this feature is only for LoD version 1.10 or higher, so it's automatically disabled)\n", active_WorldEvent);
|
||||||
} else
|
} else
|
||||||
@ -721,7 +895,7 @@ void init_WorldEvent(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaul
|
|||||||
log_msg("triggerAtSolJSoldMin\t\t= %d\n", triggerAtSolJSoldMin);
|
log_msg("triggerAtSolJSoldMin\t\t= %d\n", triggerAtSolJSoldMin);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_WORLD_EVENT, S_triggerAtSolJSoldDelta, "125");
|
GET_PRIVATE_PROFILE_STRING(S_WORLD_EVENT, S_triggerAtSolJSoldDelta, "125");
|
||||||
triggerAtSolJSoldDelta = atoi(buffer)-triggerAtSolJSoldMin+1;
|
triggerAtSolJSoldDelta = atoi(buffer) - triggerAtSolJSoldMin + 1;
|
||||||
log_msg("triggerAtSolJSoldDelta\t\t= %d\n", triggerAtSolJSoldDelta);
|
log_msg("triggerAtSolJSoldDelta\t\t= %d\n", triggerAtSolJSoldDelta);
|
||||||
|
|
||||||
|
|
||||||
@ -747,15 +921,102 @@ void init_UberQuest(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefault
|
|||||||
{
|
{
|
||||||
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_active_UberQuest, "0");
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_active_UberQuest, "0");
|
||||||
active_UberQuest = atoi(buffer) != 0;
|
active_UberQuest = atoi(buffer) != 0;
|
||||||
if (active_UberQuest && ((version_D2Game == V109b) || (version_D2Game == V109d) || (version_D2Game == V110)) ) {
|
if (active_UberQuest && version_D2Game < V111) {
|
||||||
active_UberQuest = 0;
|
active_UberQuest = 0;
|
||||||
log_msg("active_UberQuest\t\t= %d (Warning : this feature is only for LoD version 1.11 or higher, so it's automatically disabled)\n", active_UberQuest);
|
log_msg("active_UberQuest\t\t= %d (Warning : this feature is only for LoD version 1.11 or higher, so it's automatically disabled)\n", active_UberQuest);
|
||||||
} else
|
} else
|
||||||
log_msg("active_UberQuest\t\t\t= %d\n", active_UberQuest);
|
log_msg("active_UberQuest\t\t\t= %d\n", active_UberQuest);
|
||||||
|
if (active_UberQuest)
|
||||||
|
{
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberMephistoX, "25130");
|
||||||
|
UberMephistoX = atoi(buffer);
|
||||||
|
log_msg("UberMephistoX\t\t= %d\n", UberMephistoX);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberMephistoY, "5143");
|
||||||
|
UberMephistoY = atoi(buffer);
|
||||||
|
log_msg("UberMephistoY\t\t= %d\n", UberMephistoY);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberDiabloX, "25139");
|
||||||
|
UberDiabloX = atoi(buffer);
|
||||||
|
log_msg("UberDiabloX\t\t= %d\n", UberDiabloX);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberDiabloY, "5139");
|
||||||
|
UberDiabloY = atoi(buffer);
|
||||||
|
log_msg("UberDiabloY\t\t= %d\n", UberDiabloY);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberBaalX, "25139");
|
||||||
|
UberBaalX = atoi(buffer);
|
||||||
|
log_msg("UberBaalX\t\t= %d\n", UberBaalX);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberBaalY, "5135");
|
||||||
|
UberBaalY = atoi(buffer);
|
||||||
|
log_msg("UberBaalY\t\t= %d\n", UberBaalY);
|
||||||
|
|
||||||
|
if (version_D2Game >= V113c)
|
||||||
|
{
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_active_UberMinions, "1");
|
||||||
|
active_UberMinions = atoi(buffer) != 0;
|
||||||
|
log_msg("active_UberMinions\t\t= %d\n", active_UberMinions);
|
||||||
|
|
||||||
|
//GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberMephistoMinions, "1");
|
||||||
|
//UberMephistoNbMinions = atoi(buffer);
|
||||||
|
//UberMephistoMinions = atoi(buffer);
|
||||||
|
//log_msg("ActiveUberMinions\t= %d\n", UberMephistoMinions);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberMephistoSpawnPercent, "80");
|
||||||
|
UberMephistoSpawnPercent = atoi(buffer);
|
||||||
|
log_msg("UberMephistoSpawnPercent\t\t= %d\n", UberMephistoSpawnPercent);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberMephistoSpawnRadius, "30");
|
||||||
|
UberMephistoSpawnRadius = atoi(buffer);
|
||||||
|
log_msg("UberMephistoSpawnRadius\t\t= %d\n", UberMephistoSpawnRadius);
|
||||||
|
|
||||||
|
//GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberBaalMinions, "1");
|
||||||
|
//UberBaalNbMinions = atoi(buffer);
|
||||||
|
//UberBaalMinions = atoi(buffer);
|
||||||
|
//log_msg("UberBaalMinions\t\t= %d\n", UberBaalMinions);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberBaalSpawnPercent, "30");
|
||||||
|
UberBaalSpawnPercent = atoi(buffer);
|
||||||
|
log_msg("UberBaalSpawnPercent\t\t= %d\n", UberBaalSpawnPercent);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberBaalSpawnRadius, "30");
|
||||||
|
UberBaalSpawnRadius = atoi(buffer);
|
||||||
|
log_msg("UberBaalSpawnRadius\t\t= %d\n", UberBaalSpawnRadius);
|
||||||
|
|
||||||
|
//GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberDiabloMinions, "1");
|
||||||
|
//UberDiabloNbMinions = atoi(buffer);
|
||||||
|
//UberDiabloMinions = atoi(buffer);
|
||||||
|
//log_msg("UberDiabloMinions\t\t= %d\n", UberDiabloMinions);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberDiabloSpawnPercent, "30");
|
||||||
|
UberDiabloSpawnPercent = atoi(buffer);
|
||||||
|
log_msg("UberDiabloSpawnPercent\t\t= %d\n", UberDiabloSpawnPercent);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_UberDiabloSpawnRadius, "30");
|
||||||
|
UberDiabloSpawnRadius = atoi(buffer);
|
||||||
|
log_msg("UberDiabloSpawnRadius\t\t= %d\n", UberDiabloSpawnRadius);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_active_UberDiabloRushTweekAI, "1");
|
||||||
|
active_UberDiabloRushTweekAI = atoi(buffer) != 0;
|
||||||
|
log_msg("active_UberDiabloRushTweekAI\t\t= %d\n", active_UberDiabloRushTweekAI);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_active_UberBaalTeleportTweekAI, "1");
|
||||||
|
active_UberBaalTeleportTweekAI = atoi(buffer) != 0;
|
||||||
|
log_msg("active_UberBaalTeleportTweekAI\t\t= %d\n", active_UberBaalTeleportTweekAI);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_active_UberBaalChillingArmorTweekAI, "1");
|
||||||
|
active_UberBaalChillingArmorTweekAI = atoi(buffer) != 0;
|
||||||
|
log_msg("active_UberBaalChillingArmorTweekAI\t\t= %d\n", active_UberBaalChillingArmorTweekAI);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_UBER_QUEST, S_uberBaalChillingArmorTimer, "6000");
|
||||||
|
uberBaalChillingArmorTimer = atoi(buffer);
|
||||||
|
log_msg("uberBaalChillingArmorTimer\t\t= %d\n", uberBaalChillingArmorTimer);
|
||||||
|
}
|
||||||
|
}
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void init_NewInterfaces(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
void init_NewInterfaces(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
||||||
{
|
{
|
||||||
GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_active_newInterfaces, "0");
|
GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_active_newInterfaces, "0");
|
||||||
@ -775,11 +1036,14 @@ void init_NewInterfaces(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDef
|
|||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void init_ExtraOptions(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
void init_ExtraOptions(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
|
||||||
{
|
{
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_RunLODs, "0");
|
||||||
|
active_RunLODs = atoi(buffer) != 0;
|
||||||
|
log_msg("active_RunLODs\t\t\t\t= %u\n", active_RunLODs);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_alwaysRegenMapInSP, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_alwaysRegenMapInSP, "0");
|
||||||
active_alwaysRegenMapInSP = atoi(buffer);
|
active_alwaysRegenMapInSP = atoi(buffer) != 0;
|
||||||
log_msg("active_alwaysRegenMapInSP\t= %d\n", active_alwaysRegenMapInSP);
|
log_msg("active_alwaysRegenMapInSP\t= %d\n", active_alwaysRegenMapInSP);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_nbPlayersCommandByDefault, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_nbPlayersCommandByDefault, "0");
|
||||||
@ -790,42 +1054,54 @@ void init_ExtraOptions(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefa
|
|||||||
log_msg("nbPlayersCommandByDefault\t= %d\n", nbPlayersCommandByDefault);
|
log_msg("nbPlayersCommandByDefault\t= %d\n", nbPlayersCommandByDefault);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_DisplayItemLevel, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_DisplayItemLevel, "0");
|
||||||
active_DisplayItemLevel = atoi(buffer);
|
active_DisplayItemLevel = atoi(buffer) != 0;
|
||||||
log_msg("active_DisplayItemLevel\t\t= %d\n", active_DisplayItemLevel);
|
log_msg("active_DisplayItemLevel\t\t= %d\n", active_DisplayItemLevel);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_AlwaysDisplayLifeMana, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_AlwaysDisplayLifeMana, "0");
|
||||||
active_AlwaysDisplayLifeMana = atoi(buffer);
|
active_AlwaysDisplayLifeMana = atoi(buffer);
|
||||||
log_msg("active_AlwaysDisplayLifeMana= %d\n", active_AlwaysDisplayLifeMana);
|
log_msg("active_AlwaysDisplayLifeMana= %d\n", active_AlwaysDisplayLifeMana);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_RunLODs, "0");
|
|
||||||
active_RunLODs = atoi(buffer);
|
|
||||||
log_msg("active_RunLODs\t\t\t\t= %u\n", active_RunLODs);
|
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_EnabledTXTFilesWithMSExcel, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_EnabledTXTFilesWithMSExcel, "0");
|
||||||
active_EnabledTXTFilesWithMSExcel = atoi(buffer);
|
active_EnabledTXTFilesWithMSExcel = atoi(buffer) != 0;
|
||||||
log_msg("active_EnabledTXTFilesWithMSExcel= %u\n\n", active_EnabledTXTFilesWithMSExcel);
|
log_msg("active_EnabledTXTFilesWithMSExcel= %u\n\n", active_EnabledTXTFilesWithMSExcel);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_DisplayBaseStatsValue, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_DisplayBaseStatsValue, "0");
|
||||||
active_DisplayBaseStatsValue = atoi(buffer);
|
active_DisplayBaseStatsValue = atoi(buffer) != 0;
|
||||||
log_msg("active_DisplayBaseStatsValue= %u\n\n", active_DisplayBaseStatsValue);
|
log_msg("active_DisplayBaseStatsValue= %u\n\n", active_DisplayBaseStatsValue);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_LadderRunewords, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_LadderRunewords, "0");
|
||||||
active_LadderRunewords = atoi(buffer);
|
active_LadderRunewords = atoi(buffer) != 0;
|
||||||
if (active_LadderRunewords && (version_D2Common == V109b || version_D2Common == V109d) ) {
|
if (active_LadderRunewords && version_D2Common < V110) {
|
||||||
active_LadderRunewords = 0;
|
active_LadderRunewords = 0;
|
||||||
log_msg("active_LadderRunewords\t= %d (Warning : Warning : this feature is only for LoD version 1.10 or higher, so it's automatically disabled)\n", active_WorldEvent);
|
log_msg("active_LadderRunewords\t= %d (Warning : this feature is only for LoD version 1.10 or higher, so it's automatically disabled)\n", active_WorldEvent);
|
||||||
} else
|
} else
|
||||||
log_msg("active_LadderRunewords\t= %u\n\n", active_LadderRunewords);
|
log_msg("active_LadderRunewords\t= %u\n\n", active_LadderRunewords);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_EnabledCowPortalWhenCowKingWasKill, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_EnabledCowPortalWhenCowKingWasKill, "0");
|
||||||
active_EnabledCowPortalWhenCowKingWasKill = atoi(buffer);
|
active_EnabledCowPortalWhenCowKingWasKill = atoi(buffer) != 0;
|
||||||
log_msg("active_EnabledCowPortalWhenCowKingWasKill= %u\n\n", active_EnabledCowPortalWhenCowKingWasKill);
|
log_msg("active_EnabledCowPortalWhenCowKingWasKill= %u\n\n", active_EnabledCowPortalWhenCowKingWasKill);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_DoNotCloseNihlathakPortal, "0");
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_DoNotCloseNihlathakPortal, "0");
|
||||||
active_DoNotCloseNihlathakPortal = atoi(buffer);
|
active_DoNotCloseNihlathakPortal = atoi(buffer) != 0;
|
||||||
log_msg("active_DoNotCloseNihlathakPortal= %u\n\n", active_DoNotCloseNihlathakPortal);
|
log_msg("active_DoNotCloseNihlathakPortal= %u\n\n", active_DoNotCloseNihlathakPortal);
|
||||||
}
|
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_MoveCainNearHarrogathWaypoint, "0");
|
||||||
|
active_MoveCainNearHarrogathWaypoint = atoi(buffer) != 0;
|
||||||
|
log_msg("active_MoveCainNearHarrogathWaypoint= %u\n\n", active_MoveCainNearHarrogathWaypoint);
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_EXTRA, S_active_RemoveExperienceDiminushingReturn, "0");
|
||||||
|
active_RemoveExperienceDiminushingReturn = atoi(buffer) != 0;
|
||||||
|
if (active_RemoveExperienceDiminushingReturn)
|
||||||
|
{
|
||||||
|
if (version_D2Common == V114d)
|
||||||
|
log_msg("active_RemoveExperienceDiminushingReturn= %u\n\n", active_RemoveExperienceDiminushingReturn);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
active_RemoveExperienceDiminushingReturn = 0;
|
||||||
|
log_msg("active_RemoveExperienceDiminushingReturn\t= %d (Warning : this feature is only for LoD version 1.14d or higher, so it's automatically disabled)\n", active_RemoveExperienceDiminushingReturn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void loadParameters()
|
void loadParameters()
|
||||||
@ -858,6 +1134,7 @@ void loadParameters()
|
|||||||
if(loading)
|
if(loading)
|
||||||
{
|
{
|
||||||
log_msg("Reading parameters.\n\n");
|
log_msg("Reading parameters.\n\n");
|
||||||
|
|
||||||
init_ActivePlugin(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
|
init_ActivePlugin(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
|
||||||
if (active_plugin)
|
if (active_plugin)
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Adding custom data.
|
Adding custom data.
|
||||||
Save and load infinity & shared Stash
|
Save and load infinity & shared Stash
|
||||||
@ -14,7 +14,7 @@
|
|||||||
#include "loadPlayerData.h" //Install_LoadPlayerData()
|
#include "loadPlayerData.h" //Install_LoadPlayerData()
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
bool active_PlayerCustomData = true;
|
bool active_PlayerCustomData = false;
|
||||||
bool openSharedStashOnLoading = false;
|
bool openSharedStashOnLoading = false;
|
||||||
|
|
||||||
|
|
||||||
@ -28,8 +28,10 @@ Stash* getStashFromItem(Unit* ptChar, Unit* ptItem)
|
|||||||
while (curStash)
|
while (curStash)
|
||||||
{
|
{
|
||||||
if (curStash == PCPY->currentStash)
|
if (curStash == PCPY->currentStash)
|
||||||
curItem = D2InventoryGetFirstItem(PCInventory);
|
curItem = D2InventoryGetFirstItem(PCInventory);
|
||||||
else curItem = curStash->ptListItem;
|
else
|
||||||
|
curItem = curStash->ptListItem;
|
||||||
|
|
||||||
while (curItem)
|
while (curItem)
|
||||||
{
|
{
|
||||||
if (D2GetRealItem(curItem) == ptItem) return curStash;
|
if (D2GetRealItem(curItem) == ptItem) return curStash;
|
||||||
@ -37,7 +39,7 @@ Stash* getStashFromItem(Unit* ptChar, Unit* ptItem)
|
|||||||
}
|
}
|
||||||
curStash = curStash->nextStash;
|
curStash = curStash->nextStash;
|
||||||
}
|
}
|
||||||
|
|
||||||
curStash = PCPY->sharedStash;
|
curStash = PCPY->sharedStash;
|
||||||
while (curStash)
|
while (curStash)
|
||||||
{
|
{
|
||||||
@ -67,18 +69,26 @@ Unit* FASTCALL updateItem(Game* ptGame, DWORD type, DWORD itemNum, Unit* ptChar)
|
|||||||
return ptItem;
|
return ptItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FASTCALL updateItem_111(Unit* ptItem, Unit* ptChar)
|
||||||
|
{
|
||||||
|
if (PCGame->isLODGame && (D2ItemGetPage(ptItem) == 4))
|
||||||
|
{
|
||||||
|
Stash* ptStash = getStashFromItem(ptChar, ptItem);
|
||||||
|
if (ptStash)
|
||||||
|
selectStash(ptChar, ptStash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void STDCALL updateClientPlayerOnLoading(Unit* ptChar)
|
void STDCALL updateClientPlayerOnLoading(Unit* ptChar)
|
||||||
{
|
{
|
||||||
log_msg("--- Start updateClientPlayerOnLoading ---\n");
|
log_msg("--- Start updateClientPlayerOnLoading ---\n");
|
||||||
if (PCGame->isLODGame)
|
if (PCGame->isLODGame)
|
||||||
{
|
{
|
||||||
PCPY->showSharedStash = openSharedStashOnLoading;
|
PCPY->showSharedStash = openSharedStashOnLoading && active_sharedStash;
|
||||||
selectStash(ptChar, openSharedStashOnLoading ? PCPY->sharedStash : PCPY->selfStash);
|
selectStash(ptChar, PCPY->showSharedStash ? PCPY->sharedStash : PCPY->selfStash, true);
|
||||||
|
|
||||||
log_msg("End update client on loading.\n\n");
|
|
||||||
}
|
}
|
||||||
updateClient(ptChar, UC_SHARED_GOLD, PCPY->sharedGold, 0, 0);
|
updateClient(ptChar, UC_SHARED_GOLD, PCPY->sharedGold, 0, 0);
|
||||||
|
log_msg("End update client on loading.\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************** INIT CUSTOM DATA ****************************/
|
/**************************** INIT CUSTOM DATA ****************************/
|
||||||
@ -143,7 +153,7 @@ Unit* STDCALL getNextItemToFree(Unit* ptChar, Unit* ptItem)
|
|||||||
return item;//->nUnitType == 4 ? item : NULL;
|
return item;//->nUnitType == 4 ? item : NULL;
|
||||||
}
|
}
|
||||||
curStash = curStash->nextStash;
|
curStash = curStash->nextStash;
|
||||||
}
|
}
|
||||||
|
|
||||||
curStash = PCPY->sharedStash;
|
curStash = PCPY->sharedStash;
|
||||||
while ( curStash )
|
while ( curStash )
|
||||||
@ -163,30 +173,11 @@ Unit* STDCALL getNextItemToFree(Unit* ptChar, Unit* ptItem)
|
|||||||
|
|
||||||
/************************ INSTALL PLAYER CUSTOM DATA ****************************/
|
/************************ INSTALL PLAYER CUSTOM DATA ****************************/
|
||||||
|
|
||||||
void FASTCALL updateItem_111(Unit* ptItem, Unit* ptChar)
|
FCT_ASM ( caller_updateItem_114 )
|
||||||
{
|
PUSH EDI
|
||||||
if (PCGame->isLODGame && (D2ItemGetPage(ptItem) == 4))
|
PUSH DWORD PTR SS:[ESP+0x8]
|
||||||
{
|
CALL updateItem
|
||||||
Stash* ptStash = getStashFromItem(ptChar, ptItem);
|
RETN 4
|
||||||
if (ptStash)
|
|
||||||
selectStash(ptChar, ptStash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FCT_ASM( caller_updateItem_114 )
|
|
||||||
PUSH EAX
|
|
||||||
MOV EAX, 0x552F60
|
|
||||||
CALL EAX
|
|
||||||
PUSH EAX
|
|
||||||
PUSH ECX
|
|
||||||
PUSH EDX
|
|
||||||
MOV ECX, EAX
|
|
||||||
MOV EDX, EDI
|
|
||||||
CALL updateItem_111
|
|
||||||
POP EDX
|
|
||||||
POP ECX
|
|
||||||
POP EAX
|
|
||||||
RETN 4
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_updateItem_111 )
|
FCT_ASM ( caller_updateItem_111 )
|
||||||
@ -199,22 +190,6 @@ FCT_ASM ( caller_updateItem_111 )
|
|||||||
JMP EAX
|
JMP EAX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_updateItemB_114 )
|
|
||||||
PUSH EAX
|
|
||||||
MOV EAX, 0x552F60
|
|
||||||
CALL EAX
|
|
||||||
PUSH EAX
|
|
||||||
PUSH ECX
|
|
||||||
PUSH EDX
|
|
||||||
MOV ECX, EAX
|
|
||||||
MOV EDX, EDI
|
|
||||||
CALL updateItem_111
|
|
||||||
POP EDX
|
|
||||||
POP ECX
|
|
||||||
POP EAX
|
|
||||||
RETN 4
|
|
||||||
}}
|
|
||||||
|
|
||||||
FCT_ASM ( caller_updateItemB_111 )
|
FCT_ASM ( caller_updateItemB_111 )
|
||||||
MOV EDX,EBP
|
MOV EDX,EBP
|
||||||
CALL updateItem_111
|
CALL updateItem_111
|
||||||
@ -238,15 +213,15 @@ FCT_ASM ( caller_updateItem_9 )
|
|||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_updateClientPlayerOnLoading_114 )
|
FCT_ASM ( caller_updateClientPlayerOnLoading_114 )
|
||||||
PUSH DWORD PTR SS : [ESP + 0x14]
|
PUSH DWORD PTR SS:[ESP+0x14]
|
||||||
CALL updateClientPlayerOnLoading
|
CALL updateClientPlayerOnLoading
|
||||||
POP ECX
|
POP ECX
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
XOR EAX, EAX
|
XOR EAX,EAX
|
||||||
POP EBX
|
POP EBX
|
||||||
JMP ECX
|
JMP ECX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_updateClientPlayerOnLoading )
|
FCT_ASM ( caller_updateClientPlayerOnLoading )
|
||||||
@ -260,11 +235,11 @@ FCT_ASM ( caller_updateClientPlayerOnLoading )
|
|||||||
JMP ECX
|
JMP ECX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( callerServer_getNextItemToFree_114 )
|
FCT_ASM ( callerServer_getNextItemToFree_114 )
|
||||||
PUSH DWORD PTR SS : [ESP + 4]
|
PUSH DWORD PTR SS:[ESP+4]
|
||||||
PUSH DWORD PTR SS : [ESP + 0x10]
|
PUSH DWORD PTR SS:[EBP-8]
|
||||||
CALL getNextItemToFree
|
CALL getNextItemToFree
|
||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( callerServer_getNextItemToFree_111 )
|
FCT_ASM ( callerServer_getNextItemToFree_111 )
|
||||||
@ -288,11 +263,11 @@ FCT_ASM ( callerServer_getNextItemToFree_9 )
|
|||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( callerClient_getNextItemToFree_114 )
|
FCT_ASM ( callerClient_getNextItemToFree_114 )
|
||||||
PUSH DWORD PTR SS : [ESP + 4]
|
PUSH DWORD PTR SS:[ESP+4]
|
||||||
PUSH DWORD PTR SS : [ESP + 0xC]
|
PUSH DWORD PTR SS:[EBP-4]
|
||||||
CALL getNextItemToFree
|
CALL getNextItemToFree
|
||||||
RETN 4
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( callerClient_getNextItemToFree_111 )
|
FCT_ASM ( callerClient_getNextItemToFree_111 )
|
||||||
@ -320,9 +295,9 @@ FCT_ASM ( callerClient_getNextItemToFree_9 )
|
|||||||
void Install_PlayerCustomData()
|
void Install_PlayerCustomData()
|
||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled || !active_PlayerCustomData) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
Install_SavePlayerData();
|
Install_SavePlayerData();
|
||||||
Install_LoadPlayerData();
|
Install_LoadPlayerData();
|
||||||
Install_UpdateClient();
|
Install_UpdateClient();
|
||||||
|
|
||||||
@ -330,28 +305,21 @@ void Install_PlayerCustomData()
|
|||||||
|
|
||||||
// Initialize custom data.
|
// Initialize custom data.
|
||||||
mem_seek(version_D2Client == V114d ? offset_D2Common + 0x221FDD : version_D2Client == V113d ? offset_D2Common + 0x170DE : version_D2Client == V113c ? offset_D2Common + 0x309BE : version_D2Client == V112 ? offset_D2Common + 0x585EE : version_D2Client == V111b ? offset_D2Common + 0x5BFCE : version_D2Common == V111 ? offset_D2Common + 0x4ED5E :(DWORD)D2InitPlayerData + 0x62 );
|
mem_seek(version_D2Client == V114d ? offset_D2Common + 0x221FDD : version_D2Client == V113d ? offset_D2Common + 0x170DE : version_D2Client == V113c ? offset_D2Common + 0x309BE : version_D2Client == V112 ? offset_D2Common + 0x585EE : version_D2Client == V111b ? offset_D2Common + 0x5BFCE : version_D2Common == V111 ? offset_D2Common + 0x4ED5E :(DWORD)D2InitPlayerData + 0x62 );
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2AllocMem, init_PlayerCustomData);
|
||||||
MEMT_REF4(0xFFDE944F, init_PlayerCustomData);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2AllocMem, init_PlayerCustomData);
|
|
||||||
}
|
|
||||||
//01BD0381 |. E8 C03F0000 CALL <JMP.&Fog.#10045>
|
//01BD0381 |. E8 C03F0000 CALL <JMP.&Fog.#10045>
|
||||||
//6FD9ED5D |. E8 94A4FBFF CALL <JMP.&Fog.#10045>
|
//6FD9ED5D |. E8 94A4FBFF CALL <JMP.&Fog.#10045>
|
||||||
//6FDABFCD |. E8 34D2FAFF CALL <JMP.&Fog.#10045>
|
//6FDABFCD |. E8 34D2FAFF CALL <JMP.&Fog.#10045>
|
||||||
//6FDA85ED |. E8 240CFBFF CALL <JMP.&Fog.#10045>
|
//6FDA85ED |. E8 240CFBFF CALL <JMP.&Fog.#10045>
|
||||||
//6FD809BD |. E8 6088FDFF CALL <JMP.&Fog.#10045>
|
//6FD809BD |. E8 6088FDFF CALL <JMP.&Fog.#10045>
|
||||||
//6FD670DD |. E8 0C3EFFFF CALL <JMP.&Fog.#10045>
|
//6FD670DD |. E8 0C3EFFFF CALL <JMP.&Fog.#10045>
|
||||||
|
//00621FDC |. E8 4F94DEFF CALL Game.0040B430 ; \Game.0040B430
|
||||||
|
|
||||||
if ( version_D2Game >= V111 )
|
if ( version_D2Game >= V111 && version_D2Game <= V113d)
|
||||||
{
|
{
|
||||||
// update item
|
// update item
|
||||||
mem_seek R8(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 9BB91, 75C81, 1978F3);
|
mem_seek R8(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 9BB91, 75C81, 0000);
|
||||||
if (version_D2Game == V114d) {
|
memt_byte( 0x8B ,0xE8); // CALL
|
||||||
MEMT_REF4(0xFFFBB669, caller_updateItem_114);
|
MEMT_REF4( 0x52182454, caller_updateItem_111);
|
||||||
} else {
|
|
||||||
memt_byte(0x8B, 0xE8); // CALL
|
|
||||||
MEMT_REF4(0x52182454, caller_updateItem_111);
|
|
||||||
}
|
|
||||||
//0200BC71 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
|
//0200BC71 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
|
||||||
//0200BC75 |. 52 |PUSH EDX ; /Arg1
|
//0200BC75 |. 52 |PUSH EDX ; /Arg1
|
||||||
//02023C51 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
|
//02023C51 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
|
||||||
@ -363,13 +331,9 @@ void Install_PlayerCustomData()
|
|||||||
//6FC95C81 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
|
//6FC95C81 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
|
||||||
//6FC95C85 |. 52 |PUSH EDX
|
//6FC95C85 |. 52 |PUSH EDX
|
||||||
|
|
||||||
mem_seek R8(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 9BBF1, 75CE1, 197943);
|
mem_seek R8(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 9BBF1, 75CE1, 0000);
|
||||||
if (version_D2Game == V114d) {
|
memt_byte( 0x8B ,0xE8); // CALL
|
||||||
MEMT_REF4(0xFFFBB619, caller_updateItemB_114);
|
MEMT_REF4( 0x52182454, caller_updateItemB_111);
|
||||||
} else {
|
|
||||||
memt_byte(0x8B, 0xE8); // CALL
|
|
||||||
MEMT_REF4(0x52182454, caller_updateItemB_111);
|
|
||||||
}
|
|
||||||
//0200BCD1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
|
//0200BCD1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
|
||||||
//0200BCD5 |. 52 ||PUSH EDX ; /Arg1
|
//0200BCD5 |. 52 ||PUSH EDX ; /Arg1
|
||||||
//02023CB1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
|
//02023CB1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
|
||||||
@ -383,23 +347,20 @@ void Install_PlayerCustomData()
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
// update item
|
// update item
|
||||||
mem_seek R8(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 0000, 0000, 0000);
|
mem_seek R8(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 0000, 0000, 1978F3);
|
||||||
MEMC_REF4( D2GameGetObject, version_D2Game == V110?caller_updateItem: caller_updateItem_9);
|
MEMC_REF4( D2GameGetObject, version_D2Game >= V114a ? caller_updateItem_114 : version_D2Game >= V110 ? caller_updateItem : caller_updateItem_9);
|
||||||
//6FC4100C |. E8 EFAA0700 |CALL D2Game.6FCBBB00
|
//6FC4100C |. E8 EFAA0700 |CALL D2Game.6FCBBB00
|
||||||
mem_seek R8(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 0000, 0000, 0000);
|
//005978F2 |. E8 69B6FBFF |CALL Game.00552F60 ; \Game.00552F60
|
||||||
MEMC_REF4( D2GameGetObject, version_D2Game == V110?caller_updateItem: caller_updateItem_9);
|
mem_seek R8(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 0000, 0000, 197943);
|
||||||
|
MEMC_REF4( D2GameGetObject, version_D2Game >= V114a ? caller_updateItem_114 : version_D2Game >= V110 ? caller_updateItem : caller_updateItem_9);
|
||||||
//6FC41057 |. E8 A4AA0700 ||CALL D2Game.6FCBBB00
|
//6FC41057 |. E8 A4AA0700 ||CALL D2Game.6FCBBB00
|
||||||
|
//00597942 |. E8 19B6FBFF |CALL Game.00552F60 ; \Game.00552F60 //005978F2 |. E8 69B6FBFF |CALL Game.00552F60 ; \Game.00552F60
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update client on loading
|
// Update client on loading
|
||||||
mem_seek R8(D2Game, 23EB, 2426, 25D4, 53482, C6A32, ED502, 4BF12, E7548, 139A20);//6FC325D4-6FC30000
|
mem_seek R8(D2Game, 23EB, 2426, 25D4, 53482, C6A32, ED502, 4BF12, E7548, 139A20);//6FC325D4-6FC30000
|
||||||
if (version_D2Game == V114d) {
|
memt_byte( 0x5F ,0xE8); // CALL
|
||||||
memt_byte(0x5F, 0xE8); // CALL
|
MEMT_REF4( version_D2Game >= V114d ? 0x5BC0335E : 0xC0335D5E , version_D2Game >= V114d ? caller_updateClientPlayerOnLoading_114 : caller_updateClientPlayerOnLoading);
|
||||||
MEMT_REF4(0x5BC0335E, caller_updateClientPlayerOnLoading_114);
|
|
||||||
} else {
|
|
||||||
memt_byte(0x5F, 0xE8); // CALL
|
|
||||||
MEMT_REF4(0xC0335D5E, caller_updateClientPlayerOnLoading);
|
|
||||||
}
|
|
||||||
//6FC325D4 |> 5F POP EDI
|
//6FC325D4 |> 5F POP EDI
|
||||||
//6FC325D5 |. 5E POP ESI
|
//6FC325D5 |. 5E POP ESI
|
||||||
//6FC325D6 |. 5D POP EBP
|
//6FC325D6 |. 5D POP EBP
|
||||||
@ -424,49 +385,43 @@ void Install_PlayerCustomData()
|
|||||||
//6FD07549 |. 5E POP ESI
|
//6FD07549 |. 5E POP ESI
|
||||||
//6FD0754A |. 5D POP EBP
|
//6FD0754A |. 5D POP EBP
|
||||||
//6FD0754B |. 33C0 XOR EAX,EAX
|
//6FD0754B |. 33C0 XOR EAX,EAX
|
||||||
|
//00539A20 |> 5F POP EDI
|
||||||
|
//00539A21 |. 5E POP ESI
|
||||||
|
//00539A22 |. 33C0 XOR EAX,EAX
|
||||||
|
//00539A24 |. 5B POP EBX
|
||||||
|
|
||||||
// Free custom data.
|
// Free custom data.
|
||||||
mem_seek R8(D2Common, 7055C, 7065C, 80483, 4F82D, 5C9CD, 5856D, 3093D, 1705D, 2220DD);
|
mem_seek R8(D2Common, 7055C, 7065C, 80483, 4F82D, 5C9CD, 5856D, 3093D, 1705D, 2220DD);
|
||||||
if (version_D2Common == V114d) {
|
MEMJ_REF4( D2FreeMem, free_PlayerCustomData);
|
||||||
MEMT_REF4(0xFFDE939F, free_PlayerCustomData);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2FreeMem, free_PlayerCustomData);
|
|
||||||
}
|
|
||||||
//01BD0482 |. E8 C53E0000 CALL <JMP.&Fog.#10046>
|
//01BD0482 |. E8 C53E0000 CALL <JMP.&Fog.#10046>
|
||||||
//6FD9F82C |. E8 E399FBFF CALL <JMP.&Fog.#10046>
|
//6FD9F82C |. E8 E399FBFF CALL <JMP.&Fog.#10046>
|
||||||
//6FDAC9CC |. E8 3BC8FAFF CALL <JMP.&Fog.#10046>
|
//6FDAC9CC |. E8 3BC8FAFF CALL <JMP.&Fog.#10046>
|
||||||
//6FDA856C |. E8 E70CFBFF CALL <JMP.&Fog.#10046>
|
//6FDA856C |. E8 E70CFBFF CALL <JMP.&Fog.#10046>
|
||||||
//6FD8093C |. E8 E788FDFF CALL <JMP.&Fog.#10046>
|
//6FD8093C |. E8 E788FDFF CALL <JMP.&Fog.#10046>
|
||||||
//6FD6705C |. E8 CF3EFFFF CALL <JMP.&Fog.#10046>
|
//6FD6705C |. E8 CF3EFFFF CALL <JMP.&Fog.#10046>
|
||||||
|
//006220DC |. E8 9F93DEFF CALL Game.0040B480 ; \Game.0040B480
|
||||||
|
|
||||||
// Free item in Stash (Server-side)
|
// Free item in Stash (Server-side)
|
||||||
mem_seek R8(D2Game, 7D12B, 7D62B, 8D5A4, 99112, BFDB2, 94242, E1162, 6F7C2, 155B34);
|
mem_seek R8(D2Game, 7D12B, 7D62B, 8D5A4, 99112, BFDB2, 94242, E1162, 6F7C2, 155B34);
|
||||||
if (version_D2Game == V114d) {
|
MEMJ_REF4( D2UnitGetNextItem, version_D2Game >= V114a ? callerServer_getNextItemToFree_114 : version_D2Game >= V111 ? callerServer_getNextItemToFree_111 : version_D2Game == V110 ? callerServer_getNextItemToFree : callerServer_getNextItemToFree_9);//0x0005E204
|
||||||
MEMT_REF4(0x000E8468, callerServer_getNextItemToFree_114);
|
//6FCBD5A3 . E8 04E20500 CALL <JMP.&D2Common.#10304>
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2UnitGetNextItem, version_D2Game >= V111 ? callerServer_getNextItemToFree_111 : version_D2Game == V110 ? callerServer_getNextItemToFree : callerServer_getNextItemToFree_9);//0x0005E204
|
|
||||||
}
|
|
||||||
//6FCBD5A3 . E8 04E20500 CALL <JMP.&D2Common.#10304>
|
|
||||||
//02019111 |. E8 5016F7FF |CALL <JMP.&D2Common.#10934>
|
//02019111 |. E8 5016F7FF |CALL <JMP.&D2Common.#10934>
|
||||||
//0202FDB1 |. E8 30AAF4FF |CALL <JMP.&D2Common.#11140>
|
//0202FDB1 |. E8 30AAF4FF |CALL <JMP.&D2Common.#11140>
|
||||||
//6FCB4241 |. E8 8862F7FF |CALL <JMP.&D2Common.#10770>
|
//6FCB4241 |. E8 8862F7FF |CALL <JMP.&D2Common.#10770>
|
||||||
//6FD01161 |. E8 6693F2FF |CALL <JMP.&D2Common.#10464>
|
//6FD01161 |. E8 6693F2FF |CALL <JMP.&D2Common.#10464>
|
||||||
//6FC8F7C1 |. E8 44AEF9FF |CALL <JMP.&D2Common.#10879>
|
//6FC8F7C1 |. E8 44AEF9FF |CALL <JMP.&D2Common.#10879>
|
||||||
|
//00555B33 |. E8 68840E00 |CALL Game.0063DFA0 ; \Game.0063DFA0
|
||||||
|
|
||||||
// Free item in Stash (Client-side)
|
// Free item in Stash (Client-side)
|
||||||
mem_seek R8(D2Client, 8EF8F, 8E30F, 89B32, 26404, 4C264, 1F2D4, A5C94, 621E4, 66D02);//6FB29B31-6FAA0000
|
mem_seek R8(D2Client, 8EF8F, 8E30F, 89B32, 26404, 4C264, 1F2D4, A5C94, 621E4, 66D02);//6FB29B31-6FAA0000
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2UnitGetNextItem, version_D2Game >= V114d ? callerClient_getNextItemToFree_114 : version_D2Game >= V111 ? callerClient_getNextItemToFree_111 : version_D2Game == V110 ? callerClient_getNextItemToFree : callerClient_getNextItemToFree_9);//0x00040F34
|
||||||
MEMT_REF4(0x001D729A, callerClient_getNextItemToFree_114);
|
//6FB29B31 E8 340F0400 CALL <JMP.&D2Common.#10304>
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2UnitGetNextItem, version_D2Game >= V111 ? callerClient_getNextItemToFree_111 : version_D2Game == V110 ? callerClient_getNextItemToFree : callerClient_getNextItemToFree_9);//0x00040F34
|
|
||||||
}
|
|
||||||
|
|
||||||
//6FB29B31 E8 340F0400 CALL <JMP.&D2Common.#10304>
|
|
||||||
//6FAD6403 |. E8 925DFEFF |CALL <JMP.&D2Common.#10934>
|
//6FAD6403 |. E8 925DFEFF |CALL <JMP.&D2Common.#10934>
|
||||||
//6FAFC263 |. E8 38FFFBFF |CALL <JMP.&D2Common.#11140>
|
//6FAFC263 |. E8 38FFFBFF |CALL <JMP.&D2Common.#11140>
|
||||||
//6FACF2D3 |. E8 4CD1FEFF |CALL <JMP.&D2Common.#10770>
|
//6FACF2D3 |. E8 4CD1FEFF |CALL <JMP.&D2Common.#10770>
|
||||||
//6FB55C93 |. E8 D068F6FF |CALL <JMP.&D2Common.#10464>
|
//6FB55C93 |. E8 D068F6FF |CALL <JMP.&D2Common.#10464>
|
||||||
//6FB121E3 |. E8 7AA1FAFF |CALL <JMP.&D2Common.#10879>
|
//6FB121E3 |. E8 7AA1FAFF |CALL <JMP.&D2Common.#10879>
|
||||||
|
//00466D01 E8 9A721D00 |CALL Game.0063DFA0
|
||||||
|
|
||||||
if ( version_D2Common >= V110 )
|
if ( version_D2Common >= V110 )
|
||||||
{
|
{
|
||||||
@ -479,6 +434,7 @@ void Install_PlayerCustomData()
|
|||||||
//6FDBAE92 |. 74 0D JE SHORT D2Common.6FDBAEA1
|
//6FDBAE92 |. 74 0D JE SHORT D2Common.6FDBAEA1
|
||||||
//6FD71B22 |. 74 0D JE SHORT D2Common.6FD71B31
|
//6FD71B22 |. 74 0D JE SHORT D2Common.6FD71B31
|
||||||
//6FD8B392 |. 74 0D JE SHORT D2Common.6FD8B3A1
|
//6FD8B392 |. 74 0D JE SHORT D2Common.6FD8B3A1
|
||||||
|
//0063ADB4 |. 74 0E JE SHORT Game.0063ADC4
|
||||||
} else {
|
} else {
|
||||||
mem_seek R8(D2Game, 7D176, 7D676, 0000, 0000, 0000, 0000, 0000, 0000, 0000);
|
mem_seek R8(D2Game, 7D176, 7D676, 0000, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||||
memt_byte( 0x74 , 0x90);//MOV EAX,EDI
|
memt_byte( 0x74 , 0x90);//MOV EAX,EDI
|
||||||
|
BIN
PlugY/PlugY.rc
BIN
PlugY/PlugY.rc
Binary file not shown.
@ -1,41 +1,20 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||||
# Visual Studio 14
|
# Visual C++ Express 2008
|
||||||
VisualStudioVersion = 14.0.25420.1
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugY", "PlugY.vcproj", "{EB63DF4E-A019-4522-A140-9E8C7350B331}"
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugY", "PlugY.vcxproj", "{EB63DF4E-A019-4522-A140-9E8C7350B331}"
|
Global
|
||||||
EndProject
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugYInstall", "..\PlugYInstall\PlugYInstall.vcxproj", "{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}"
|
Debug|Win32 = Debug|Win32
|
||||||
EndProject
|
Release|Win32 = Release|Win32
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugYRun", "..\PlugYRun\PlugYRun.vcxproj", "{1DF62C54-02A0-4E13-A5DC-F975DFBE03FC}"
|
EndGlobalSection
|
||||||
EndProject
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
Global
|
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
Debug|Win32 = Debug|Win32
|
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
Release|Win32 = Release|Win32
|
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Release|Win32.Build.0 = Release|Win32
|
||||||
Restore|Win32 = Restore|Win32
|
EndGlobalSection
|
||||||
EndGlobalSection
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
HideSolutionNode = FALSE
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Debug|Win32.ActiveCfg = Debug|Win32
|
EndGlobalSection
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Debug|Win32.Build.0 = Debug|Win32
|
EndGlobal
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Restore|Win32.ActiveCfg = Release|Win32
|
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Restore|Win32.Build.0 = Release|Win32
|
|
||||||
{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}.Restore|Win32.ActiveCfg = Restore|Win32
|
|
||||||
{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}.Restore|Win32.Build.0 = Restore|Win32
|
|
||||||
{1DF62C54-02A0-4E13-A5DC-F975DFBE03FC}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{1DF62C54-02A0-4E13-A5DC-F975DFBE03FC}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{1DF62C54-02A0-4E13-A5DC-F975DFBE03FC}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{1DF62C54-02A0-4E13-A5DC-F975DFBE03FC}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{1DF62C54-02A0-4E13-A5DC-F975DFBE03FC}.Restore|Win32.ActiveCfg = Release|Win32
|
|
||||||
{1DF62C54-02A0-4E13-A5DC-F975DFBE03FC}.Restore|Win32.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
||||||
|
BIN
PlugY/PlugY.suo
BIN
PlugY/PlugY.suo
Binary file not shown.
1180
PlugY/PlugY.vcproj
1180
PlugY/PlugY.vcproj
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Adding custom data.
|
Adding custom data.
|
||||||
Save and load infinity & shared Stash
|
Save and load infinity & shared Stash
|
||||||
@ -30,12 +30,14 @@ DWORD STDCALL isModFile (char* filename)
|
|||||||
{
|
{
|
||||||
if (strstr(filename, modDataDirectory) )
|
if (strstr(filename, modDataDirectory) )
|
||||||
{
|
{
|
||||||
|
log_msg("Load custom file : %s\n", filename);
|
||||||
|
if ((GetFileAttributesA(filename) & 0x10) == 0)
|
||||||
|
return true;
|
||||||
char fileTemp[0x104];
|
char fileTemp[0x104];
|
||||||
log_msg("Load custom file : %s", filename);
|
|
||||||
strcpy(fileTemp,filename);
|
strcpy(fileTemp,filename);
|
||||||
D2FogGetInstallPath(filename,0x104-strlen(filename));
|
D2FogGetInstallPath(filename,0x104-strlen(filename));
|
||||||
strcat(filename,fileTemp);
|
strcat(filename,fileTemp);
|
||||||
log_msg("-> %s\n", filename);
|
log_msg("Load custom file full path : %s\n", filename);
|
||||||
if ((GetFileAttributesA(filename) & 0x10) == 0)
|
if ((GetFileAttributesA(filename) & 0x10) == 0)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -43,6 +45,17 @@ DWORD STDCALL isModFile (char* filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD STDCALL isModFile_114 (char* filename)
|
||||||
|
{
|
||||||
|
if (strstr(filename, modDataDirectory) )
|
||||||
|
{
|
||||||
|
log_msg("Load custom file : %s\n", filename);
|
||||||
|
if ((GetFileAttributesA(filename) & 0x10) == 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
FCT_ASM ( caller_isModFile )
|
FCT_ASM ( caller_isModFile )
|
||||||
TEST ESI,ESI
|
TEST ESI,ESI
|
||||||
JNZ ISNOTMODDATA
|
JNZ ISNOTMODDATA
|
||||||
@ -79,19 +92,38 @@ FCT_ASM ( caller_isModFile_111 )
|
|||||||
ISNOTMODDATA:
|
ISNOTMODDATA:
|
||||||
JMP DWORD PTR CS:[LeaveCriticalSection]
|
JMP DWORD PTR CS:[LeaveCriticalSection]
|
||||||
}}
|
}}
|
||||||
|
/*
|
||||||
|
FCT_ASM ( caller_isModFile_114 )
|
||||||
|
TEST ESI,ESI
|
||||||
|
JNZ ISNOTMODDATA
|
||||||
|
MOV ESI, DWORD PTR SS:[ESP+0x130]
|
||||||
|
PUSH ESI
|
||||||
|
CALL isModFile
|
||||||
|
TEST EAX,EAX
|
||||||
|
JE ISNOTMODDATA
|
||||||
|
MOV BL, BYTE PTR SS:[ESP+0x134]
|
||||||
|
POP EAX
|
||||||
|
POP EAX
|
||||||
|
MOV EAX,D2StormMPQOpenFile
|
||||||
|
ADD EAX,0x93
|
||||||
|
MOV EBP,GetFileAttributesA
|
||||||
|
JMP EAX
|
||||||
|
ISNOTMODDATA:
|
||||||
|
JMP DWORD PTR CS:[LeaveCriticalSection]
|
||||||
|
}}
|
||||||
|
*/
|
||||||
|
|
||||||
FCT_ASM( caller_isModFile_114 )
|
FCT_ASM( caller_isModFile_114 )
|
||||||
PUSH EBX
|
PUSH EDX
|
||||||
CALL isModFile
|
PUSH EBX
|
||||||
TEST EAX, EAX
|
CALL isModFile_114
|
||||||
JE ISNOTMODDATA
|
POP EDX
|
||||||
MOV EDX, 0x00100001
|
TEST EAX,EAX
|
||||||
JMP ALLDONE
|
JE ISNOTMODDATA
|
||||||
ISNOTMODDATA :
|
MOV EDX,1 // Active -direct command
|
||||||
MOV EDX, DWORD PTR SS : [EBP + 0x10]
|
ISNOTMODDATA:
|
||||||
ALLDONE :
|
LEA EAX,DWORD PTR SS:[EBP-0x108]
|
||||||
LEA EAX, DWORD PTR SS : [EBP - 0x108]
|
RETN
|
||||||
RETN
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
void Install_PlugYFiles()
|
void Install_PlugYFiles()
|
||||||
@ -103,23 +135,24 @@ void Install_PlugYFiles()
|
|||||||
|
|
||||||
// Try in Diablo II\PlugY\ if file not found
|
// Try in Diablo II\PlugY\ if file not found
|
||||||
mem_seek R8(Storm, 192C6, 19296, 18677, 2CC69, 14259, 121E9, 28D89, 2DA79, 19369);//( (DWORD)D2Storm268 + V7(Storm, 01A8, 01A8, 01AB, 0429, 0429, 0429, 0000) );
|
mem_seek R8(Storm, 192C6, 19296, 18677, 2CC69, 14259, 121E9, 28D89, 2DA79, 19369);//( (DWORD)D2Storm268 + V7(Storm, 01A8, 01A8, 01AB, 0429, 0429, 0429, 0000) );
|
||||||
memt_byte( version_D2Client == V114d ? 0x8D : 0xFF ,0x90); // NOP
|
if ( version_Storm >= V114a )
|
||||||
memt_byte( version_D2Client == V114d ? 0x85 : 0x15 ,0xE8); // CALL
|
{
|
||||||
if (version_Storm == V114d)
|
memt_byte( 0x8D ,0x90); // NOP
|
||||||
{
|
memt_byte( 0x85 ,0xE8); // CALL
|
||||||
MEMT_REF4(0xFFFFFEF8, caller_isModFile_114);
|
MEMT_REF4(0xFFFFFEF8, caller_isModFile_114);
|
||||||
}
|
//00419369 |. 8D85 F8FEFFFF LEA EAX,DWORD PTR SS:[EBP-108]
|
||||||
else
|
} else {
|
||||||
{
|
memt_byte( 0xFF ,0x90); // NOP
|
||||||
MEMD_REF4(LeaveCriticalSection, version_Storm >= V111 ? caller_isModFile_111 : caller_isModFile);
|
memt_byte( 0x15 ,0xE8); // CALL
|
||||||
}
|
MEMD_REF4( LeaveCriticalSection, version_Storm >= V114a ? caller_isModFile_114 : version_Storm >= V111 ? caller_isModFile_111 : caller_isModFile);
|
||||||
//6FFC8677 |. FF15 F411FE6F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
//6FFC8677 |. FF15 F411FE6F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
||||||
//6FC1CC69 |. FF15 3832C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
//6FC1CC69 |. FF15 3832C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
||||||
//6FC04259 |. FF15 3832C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
//6FC04259 |. FF15 3832C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
||||||
//6FC021E9 |. FF15 4432C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
//6FC021E9 |. FF15 4432C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
||||||
//6FC18D89 |. FF15 5832C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
//6FC18D89 |. FF15 5832C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
||||||
//6FC1DA79 |. FF15 3C32C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
//6FC1DA79 |. FF15 3C32C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
||||||
|
//0041BC81 |. FF15 14C26C00 CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
||||||
|
}
|
||||||
|
|
||||||
log_msg("\n" );
|
log_msg("\n" );
|
||||||
|
|
||||||
@ -150,31 +183,31 @@ void loadImagesFile(void** images, const char* name)
|
|||||||
|
|
||||||
void STDCALL loadCustomImages()
|
void STDCALL loadCustomImages()
|
||||||
{
|
{
|
||||||
if ( active_SkillsPoints ) loadImagesFile(&unassignSkillsBtnImages, "UnassignSkillsBtns");
|
if ( active_SkillsPoints ) loadImagesFile(&unassignSkillsBtnImages, "UnassignSkillsBtns");
|
||||||
if ( active_StatsPoints ) loadImagesFile(&unassignStatsBtnImages, "UnassignStatsBtns");
|
if ( active_StatsPoints ) loadImagesFile(&unassignStatsBtnImages, "UnassignStatsBtns");
|
||||||
if ( active_multiPageStash || active_newInterfaces) loadImagesFile(&stashBtnsImages, "StashBtns");
|
if ( active_multiPageStash || active_newInterfaces) loadImagesFile(&stashBtnsImages, "StashBtns");
|
||||||
if ( active_sharedGold) loadImagesFile(&sharedGoldBtnsImages, "SharedGoldBtns");
|
if ( active_sharedGold) loadImagesFile(&sharedGoldBtnsImages, "SharedGoldBtns");
|
||||||
if ( active_newInterfaces ) loadImagesFile(&newStatsInterfaceImages, "EmptyPage");
|
if ( active_newInterfaces ) loadImagesFile(&newStatsInterfaceImages, "EmptyPage");
|
||||||
if ( active_newInterfaces ) loadImagesFile(&statsBackgroundImages, "StatsBackground");
|
if ( active_newInterfaces ) loadImagesFile(&statsBackgroundImages, "StatsBackground");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define freeImagesFile(I) if(I) {D2FreeImage(I);I=NULL;}
|
#define FREE_IMAGE_FILE(I) if(I) {D2FreeImage(I);I=NULL;}
|
||||||
|
|
||||||
void STDCALL freeCustomImages()
|
void STDCALL freeCustomImages()
|
||||||
{
|
{
|
||||||
freeImagesFile(unassignSkillsBtnImages);
|
FREE_IMAGE_FILE(unassignSkillsBtnImages);
|
||||||
freeImagesFile(unassignStatsBtnImages);
|
FREE_IMAGE_FILE(unassignStatsBtnImages);
|
||||||
freeImagesFile(stashBtnsImages);
|
FREE_IMAGE_FILE(stashBtnsImages);
|
||||||
freeImagesFile(sharedGoldBtnsImages);
|
FREE_IMAGE_FILE(sharedGoldBtnsImages);
|
||||||
freeImagesFile(newStatsInterfaceImages);
|
FREE_IMAGE_FILE(newStatsInterfaceImages);
|
||||||
freeImagesFile(statsBackgroundImages);
|
FREE_IMAGE_FILE(statsBackgroundImages);
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_loadCustomImages_114 )
|
FCT_ASM ( caller_loadCustomImages_114 )
|
||||||
CALL loadCustomImages
|
PUSH ECX
|
||||||
POP EAX
|
CALL loadCustomImages
|
||||||
PUSH 0x6CC8B8
|
POP ECX
|
||||||
JMP EAX
|
JMP D2LoadResImage
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_loadCustomImages )
|
FCT_ASM ( caller_loadCustomImages )
|
||||||
@ -183,11 +216,10 @@ FCT_ASM ( caller_loadCustomImages )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_freeCustomImages_114 )
|
FCT_ASM ( caller_freeCustomImages_114 )
|
||||||
CALL freeCustomImages
|
CALL freeCustomImages
|
||||||
POP EAX
|
CALL D2FreeResImages
|
||||||
PUSH 0x7BEF30
|
RETN
|
||||||
JMP EAX
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_freeCustomImages )
|
FCT_ASM ( caller_freeCustomImages )
|
||||||
@ -206,26 +238,38 @@ void Install_PlugYImagesFiles()
|
|||||||
log_msg("Patch D2Client to load/free custom images. (PlugYImagesFiles)\n");
|
log_msg("Patch D2Client to load/free custom images. (PlugYImagesFiles)\n");
|
||||||
|
|
||||||
// Load custom images
|
// Load custom images
|
||||||
mem_seek R8(D2Client, 57E21, 57E21, 5E4B1, 2E101, B67E1, 82761, 27EAE, 6E0BE, 96955);
|
mem_seek R8(D2Client, 57E21, 57E21, 5E4B1, 2E101, B67E1, 82761, 27EAE, 6E0BE, 9692F);
|
||||||
memt_byte(V8(D2Client, B9, B9, B9, B9, B9, B9, B9, B9, 68), 0xE8);
|
if (version_D2Client == V114d)
|
||||||
MEMT_REF4(version_D2Client == V114d ? 0x006CC8B8 : 0x0000000C, version_D2Client == V114d ? caller_loadCustomImages_114 : caller_loadCustomImages);
|
{
|
||||||
//6FAFE4B1 |. B9 0C000000 MOV ECX,0C
|
MEMC_REF4( D2LoadResImage , caller_loadCustomImages_114);
|
||||||
//6FADE101 |. B9 0C000000 MOV ECX,0C
|
//0049692E |. E8 8DB7FBFF CALL Game.004520C0
|
||||||
//6FB667E1 |. B9 0C000000 MOV ECX,0C
|
} else {
|
||||||
//6FB32761 |. B9 0C000000 MOV ECX,0C
|
memt_byte( 0xB9 ,0xE8);
|
||||||
//6FAD7EAE |. B9 0C000000 MOV ECX,0C
|
MEMT_REF4( 0x0000000C , caller_loadCustomImages);
|
||||||
//6FB1E0BE |. B9 0C000000 MOV ECX,0C
|
//6FAFE4B1 |. B9 0C000000 MOV ECX,0C
|
||||||
|
//6FADE101 |. B9 0C000000 MOV ECX,0C
|
||||||
|
//6FB667E1 |. B9 0C000000 MOV ECX,0C
|
||||||
|
//6FB32761 |. B9 0C000000 MOV ECX,0C
|
||||||
|
//6FAD7EAE |. B9 0C000000 MOV ECX,0C
|
||||||
|
//6FB1E0BE |. B9 0C000000 MOV ECX,0C
|
||||||
|
}
|
||||||
|
|
||||||
// Free custom images
|
// Free custom images
|
||||||
mem_seek R8(D2Client, 57FA9, 57FA9, 5E639, 2D12D, B580D, 8158D, 26F8D, 6D07D, 96AFB);
|
mem_seek R8(D2Client, 57FA9, 57FA9, 5E639, 2D12D, B580D, 8158D, 26F8D, 6D07D, 56DED);
|
||||||
memt_byte(V8(D2Client, B9, B9, B9, B9, B9, B9, B9, B9, 68),0xE8);
|
if (version_D2Client == V114d)
|
||||||
MEMT_REF4(version_D2Client == V114d ? 0x007BEF30 : 0x0000000C, version_D2Client == V114d ? caller_freeCustomImages_114 : caller_freeCustomImages);
|
{
|
||||||
//6FAFE639 |> B9 0C000000 MOV ECX,0C
|
MEMC_REF4( D2FreeResImages , caller_freeCustomImages_114);
|
||||||
//6FADD12D |> B9 0C000000 MOV ECX,0C
|
//00456DEC . E8 9FFB0300 CALL Game.00496990
|
||||||
//6FB6580D |> B9 0C000000 MOV ECX,0C
|
} else {
|
||||||
//6FB3158D |> B9 0C000000 MOV ECX,0C
|
memt_byte( 0xB9 ,0xE8);
|
||||||
//6FAD6F8D |> B9 0C000000 MOV ECX,0C
|
MEMT_REF4( 0x0000000C , caller_freeCustomImages);
|
||||||
//6FB1D07D |> B9 0C000000 MOV ECX,0C
|
//6FAFE639 |> B9 0C000000 MOV ECX,0C
|
||||||
|
//6FADD12D |> B9 0C000000 MOV ECX,0C
|
||||||
|
//6FB6580D |> B9 0C000000 MOV ECX,0C
|
||||||
|
//6FB3158D |> B9 0C000000 MOV ECX,0C
|
||||||
|
//6FAD6F8D |> B9 0C000000 MOV ECX,0C
|
||||||
|
//6FB1D07D |> B9 0C000000 MOV ECX,0C
|
||||||
|
}
|
||||||
|
|
||||||
log_msg("\n" );
|
log_msg("\n" );
|
||||||
|
|
||||||
@ -234,12 +278,36 @@ void Install_PlugYImagesFiles()
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************************************/
|
/****************************************************************************************************/
|
||||||
|
/*char* STDCALL isModCompileFile (char* filename)
|
||||||
|
{
|
||||||
|
if (strstr(filename, modDataDirectory) )
|
||||||
|
return ".";
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
char * fff = "%s";
|
||||||
|
FCT_ASM( caller_compileExcel_114 )
|
||||||
|
PUSH ECX
|
||||||
|
PUSH EDX
|
||||||
|
PUSH EDX
|
||||||
|
CALL isModCompileFile
|
||||||
|
POP EDX
|
||||||
|
POP ECX
|
||||||
|
TEST EAX,EAX
|
||||||
|
JE ISNOTMODDATA
|
||||||
|
POP EAX
|
||||||
|
MOV DWORD PTR SS:[ESP],EDX
|
||||||
|
PUSH fff
|
||||||
|
ADD EAX,5
|
||||||
|
PUSH EAX
|
||||||
|
ISNOTMODDATA:
|
||||||
|
LEA EAX,DWORD PTR SS:[EBP-0x108]
|
||||||
|
RETN
|
||||||
|
}}*/
|
||||||
|
|
||||||
void loadStatsInterfaceDesc(DWORD mempool);
|
void loadStatsInterfaceDesc(DWORD mempool);
|
||||||
void freeStatsInterfaceDesc();
|
void freeStatsInterfaceDesc();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void FASTCALL loadTxtFiles(DWORD mempool)
|
void FASTCALL loadTxtFiles(DWORD mempool)
|
||||||
{
|
{
|
||||||
loadStatsInterfaceDesc(mempool);
|
loadStatsInterfaceDesc(mempool);
|
||||||
@ -268,7 +336,6 @@ FCT_ASM ( caller_freeTxtFiles )
|
|||||||
JMP D2Fog10212
|
JMP D2Fog10212
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
void Install_PlugYTxtFiles()
|
void Install_PlugYTxtFiles()
|
||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
@ -282,7 +349,7 @@ void Install_PlugYTxtFiles()
|
|||||||
|
|
||||||
// Load custom txt files
|
// Load custom txt files
|
||||||
mem_seek R8(D2Common, 7F4B, 7F4B, 2F7D7, 76854, 37444, 81C44, 5D6E4, 855E4, 25A560);
|
mem_seek R8(D2Common, 7F4B, 7F4B, 2F7D7, 76854, 37444, 81C44, 5D6E4, 855E4, 25A560);
|
||||||
MEMC_REF4( D2LoadSuperuniques, version_D2Common == V114d ? caller_loadTxtFiles : version_D2Common >= V111 ? caller_loadTxtFiles_111 : caller_loadTxtFiles );
|
MEMC_REF4( D2LoadSuperuniques, version_D2Common >= V111 && version_D2Common < V114a ? caller_loadTxtFiles_111 : caller_loadTxtFiles );
|
||||||
//6FD47F4A |. E8 B1750100 CALL D2Common.6FD5F500
|
//6FD47F4A |. E8 B1750100 CALL D2Common.6FD5F500
|
||||||
//6FD47F4A |. E8 C1750100 CALL D2Common.6FD5F510
|
//6FD47F4A |. E8 C1750100 CALL D2Common.6FD5F510
|
||||||
//01B6F7D6 |. E8 C5A7FFFF CALL D2Common.01B69FA0
|
//01B6F7D6 |. E8 C5A7FFFF CALL D2Common.01B69FA0
|
||||||
@ -291,14 +358,11 @@ void Install_PlugYTxtFiles()
|
|||||||
//6FDD1C43 |. E8 58B6FFFF CALL D2Common.6FDCD2A0 ; \D2Common.6FDCD2A0
|
//6FDD1C43 |. E8 58B6FFFF CALL D2Common.6FDCD2A0 ; \D2Common.6FDCD2A0
|
||||||
//6FDAD6E3 |. E8 88C1FFFF CALL D2Common.6FDA9870 ; \D2Common.6FDA9870
|
//6FDAD6E3 |. E8 88C1FFFF CALL D2Common.6FDA9870 ; \D2Common.6FDA9870
|
||||||
//6FDD55E3 |. E8 58B6FFFF CALL D2Common.6FDD0C40 ; \D2Common.6FDD0C40
|
//6FDD55E3 |. E8 58B6FFFF CALL D2Common.6FDD0C40 ; \D2Common.6FDD0C40
|
||||||
|
//0065A55F |. E8 7CADFFFF CALL Game.006552E0
|
||||||
|
|
||||||
// Free custom txt files
|
// Free custom txt files
|
||||||
mem_seek R8(D2Common, 79EC, 79EC, 10186, 332B3, 15AB3, 44E13, 5E8B3, FAA3, 25A1C8);
|
mem_seek R8(D2Common, 79EC, 79EC, 10186, 332B3, 15AB3, 44E13, 5E8B3, FAA3, 25A1C8);
|
||||||
if (version_D2Common == V114d) {
|
MEMJ_REF4( D2Fog10212, caller_freeTxtFiles );
|
||||||
MEMT_REF4(0x00062EE4, caller_freeTxtFiles);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2Fog10212, caller_freeTxtFiles);
|
|
||||||
}
|
|
||||||
//6FD479EB . E8 C8C00600 CALL <JMP.&Fog.#10212>
|
//6FD479EB . E8 C8C00600 CALL <JMP.&Fog.#10212>
|
||||||
//6FD479EB . E8 C8C00600 CALL <JMP.&Fog.#10212>
|
//6FD479EB . E8 C8C00600 CALL <JMP.&Fog.#10212>
|
||||||
//01B50185 |. E8 F8410700 CALL <JMP.&Fog.#10212>
|
//01B50185 |. E8 F8410700 CALL <JMP.&Fog.#10212>
|
||||||
@ -307,6 +371,16 @@ void Install_PlugYTxtFiles()
|
|||||||
//6FD94E12 |. E8 1744FCFF CALL <JMP.&Fog.#10212>
|
//6FD94E12 |. E8 1744FCFF CALL <JMP.&Fog.#10212>
|
||||||
//6FDAE8B2 |. E8 8FA9FAFF CALL <JMP.&Fog.#10212>
|
//6FDAE8B2 |. E8 8FA9FAFF CALL <JMP.&Fog.#10212>
|
||||||
//6FD5FAA2 |. E8 5FB4FFFF CALL <JMP.&Fog.#10212>
|
//6FD5FAA2 |. E8 5FB4FFFF CALL <JMP.&Fog.#10212>
|
||||||
|
//0065A1C7 . E8 E42E0600 CALL Game.006BD0B0 ; \Game.006BD0B0
|
||||||
|
|
||||||
|
/*if ( version_D2Client >= V114a )
|
||||||
|
{
|
||||||
|
mem_seek R8(Storm, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 2122A2);
|
||||||
|
memt_byte( 0x8D ,0x90); // NOP
|
||||||
|
memt_byte( 0x85 ,0xE8); // CALL
|
||||||
|
MEMT_REF4(0xFFFFFEF8, caller_compileExcel_114);
|
||||||
|
//006122A2 |. 8D85 F8FEFFFF LEA EAX,DWORD PTR SS:[EBP-108] ; |
|
||||||
|
}*/
|
||||||
|
|
||||||
log_msg("\n" );
|
log_msg("\n" );
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Changing the current save path.
|
Changing the current save path.
|
||||||
|
|
||||||
@ -51,43 +51,47 @@ END_CHANGESP:
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( changeSavePath_114 )
|
FCT_ASM( changeSavePath_114 )
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
PUSH EDI
|
PUSH EDI
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
MOV ESI, EBX
|
MOV ESI, EBX
|
||||||
MOV EDI, DWORD PTR DS : [savePath]
|
MOV EDI,DWORD PTR DS:[savePath]
|
||||||
XOR AL, AL
|
XOR AL,AL
|
||||||
CLD
|
CLD
|
||||||
OR ECX, 0xFFFFFFFF
|
OR ECX,0xFFFFFFFF
|
||||||
REPNE SCAS BYTE PTR ES : [EDI]
|
REPNE SCAS BYTE PTR ES:[EDI]
|
||||||
NOT ECX
|
NOT ECX
|
||||||
SUB EDI, ECX
|
SUB EDI,ECX
|
||||||
XCHG EDI, ESI
|
XCHG EDI,ESI
|
||||||
CMP BYTE PTR[ESI + 1], ':'
|
CMP BYTE PTR [ESI+1],':'
|
||||||
JE END_CHANGESP
|
JE END_CHANGESP
|
||||||
//RELATIVE_PATH:
|
//RELATIVE_PATH:
|
||||||
MOV EDX, ECX
|
MOV EDX,ECX
|
||||||
OR ECX, 0xFFFFFFFF
|
OR ECX,0xFFFFFFFF
|
||||||
REPNE SCAS BYTE PTR ES : [EDI]
|
REPNE SCAS BYTE PTR ES:[EDI]
|
||||||
DEC EDI
|
DEC EDI
|
||||||
CMP BYTE PTR[EDI - 1], '\\'
|
CMP BYTE PTR [EDI-1],'\\'
|
||||||
JE NEXT
|
JE NEXT
|
||||||
MOV BYTE PTR[EDI], '\\'
|
MOV BYTE PTR [EDI],'\\'
|
||||||
INC EDI
|
INC EDI
|
||||||
NEXT :
|
NEXT:
|
||||||
MOV ECX, EDX
|
MOV ECX,EDX
|
||||||
END_CHANGESP :
|
END_CHANGESP:
|
||||||
REP MOVS BYTE PTR ES : [EDI], BYTE PTR DS : [ESI]
|
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EDX
|
POP EDX
|
||||||
POP EDI
|
POP EDI
|
||||||
POP EAX
|
POP EAX
|
||||||
CMP EAX, -1
|
PUSH EBX
|
||||||
JE DONOT_JMP
|
CALL DWORD PTR[GetFileAttributesA]
|
||||||
ADD DWORD PTR SS : [ESP], 5
|
CMP EAX,-1
|
||||||
DONOT_JMP :
|
JE DONOT_JMP
|
||||||
RETN
|
ADD DWORD PTR SS:[ESP],0x5
|
||||||
|
RETN
|
||||||
|
DONOT_JMP:
|
||||||
|
ADD DWORD PTR SS:[ESP],0x1D
|
||||||
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( changeSavePath_111 )
|
FCT_ASM( changeSavePath_111 )
|
||||||
@ -129,28 +133,6 @@ DONOT_JMP:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( forCreateSavePath_114 )
|
|
||||||
PUSH EDI
|
|
||||||
MOV ESI, EBX
|
|
||||||
MOV EDI, DWORD PTR DS : [savePath]
|
|
||||||
MOV ECX, EDI
|
|
||||||
CMP BYTE PTR DS : [EDI + 1], ':'
|
|
||||||
JNZ END_CREATESP
|
|
||||||
PUSH ESI
|
|
||||||
XOR AL, AL
|
|
||||||
CLD
|
|
||||||
OR ECX, 0xFFFFFFFF
|
|
||||||
REPNE SCAS BYTE PTR ES : [EDI]
|
|
||||||
NOT ECX
|
|
||||||
SUB EDI, ECX
|
|
||||||
XCHG EDI, ESI
|
|
||||||
REP MOVS BYTE PTR ES : [EDI], BYTE PTR DS : [ESI]
|
|
||||||
POP ESI
|
|
||||||
END_CREATESP :
|
|
||||||
POP EDI
|
|
||||||
MOV DWORD PTR SS : [ESP + 8], ECX
|
|
||||||
JMP D2Storm503
|
|
||||||
}}
|
|
||||||
|
|
||||||
FCT_ASM ( forCreateSavePath )
|
FCT_ASM ( forCreateSavePath )
|
||||||
PUSH EDI
|
PUSH EDI
|
||||||
@ -175,7 +157,6 @@ END_CREATESP:
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Install_ChangingSavePath()
|
void Install_ChangingSavePath()
|
||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
@ -185,7 +166,7 @@ void Install_ChangingSavePath()
|
|||||||
|
|
||||||
if (version_Fog >= V111)
|
if (version_Fog >= V111)
|
||||||
{
|
{
|
||||||
// Appel de notre fct d'ajout d'un sous-r<>pertoire
|
// Call funtion to manage subfolder
|
||||||
mem_seek R8(Fog, 000, 000, 000, 185F6, 1C106, 1F086, 17F86, 1E146, 71A6);
|
mem_seek R8(Fog, 000, 000, 000, 185F6, 1C106, 1F086, 17F86, 1E146, 71A6);
|
||||||
memt_byte( 0x83 ,0xE8); // CALL changeSavePath
|
memt_byte( 0x83 ,0xE8); // CALL changeSavePath
|
||||||
MEMT_REF4( 0x0575FFF8, version_Fog == V114d ? changeSavePath_114 : changeSavePath_111);
|
MEMT_REF4( 0x0575FFF8, version_Fog == V114d ? changeSavePath_114 : changeSavePath_111);
|
||||||
@ -199,24 +180,25 @@ void Install_ChangingSavePath()
|
|||||||
//6FF67F89 . 75 05 JNZ SHORT Fog.6FF67F90
|
//6FF67F89 . 75 05 JNZ SHORT Fog.6FF67F90
|
||||||
//6FF6E146 . 83F8 FF CMP EAX,-1
|
//6FF6E146 . 83F8 FF CMP EAX,-1
|
||||||
//6FF6E149 . 75 05 JNZ SHORT Fog.6FF50F64
|
//6FF6E149 . 75 05 JNZ SHORT Fog.6FF50F64
|
||||||
|
//004071A6 |. 83F8 FF CMP EAX,-1
|
||||||
|
//004071A9 |. 75 05 JNZ SHORT Game.004071B0
|
||||||
|
|
||||||
// Pour cr<63>er le bon chemin de sauvegarde
|
// Create the right save path
|
||||||
mem_seek R8(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6, 1E166, 71CA);
|
if (version_Fog < V114a)
|
||||||
if (version_Fog == V114d) {
|
{
|
||||||
MEMT_REF4(0x0000C582, forCreateSavePath_114);
|
mem_seek R8(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6, 1E166, 71CA);
|
||||||
} else {
|
MEMJ_REF4( D2Storm503, forCreateSavePath);
|
||||||
MEMJ_REF4(D2Storm503, forCreateSavePath);
|
//6FF68615 . E8 A246FFFF CALL <JMP.&Storm.#503>
|
||||||
}
|
//6FF6C125 . E8 C20BFFFF CALL <JMP.&Storm.#503>
|
||||||
//6FF68615 . E8 A246FFFF CALL <JMP.&Storm.#503>
|
//6FF6F0A5 . E8 34DDFEFF CALL <JMP.&Storm.#503>
|
||||||
//6FF6C125 . E8 C20BFFFF CALL <JMP.&Storm.#503>
|
//6FF67FA5 . E8 504EFFFF CALL <JMP.&Storm.#503>
|
||||||
//6FF6F0A5 . E8 34DDFEFF CALL <JMP.&Storm.#503>
|
//6FF6E165 . E8 6AEBFEFF CALL <JMP.&Storm.#503>
|
||||||
//6FF67FA5 . E8 504EFFFF CALL <JMP.&Storm.#503>
|
//004071C9 |. E8 82C50000 CALL Game.00413750 ; \Game.00413750
|
||||||
//6FF6E165 . E8 6AEBFEFF CALL <JMP.&Storm.#503>
|
}
|
||||||
|
|
||||||
|
|
||||||
// Remove registry update
|
// Remove registry update
|
||||||
mem_seek R8(Fog, 000, 000, 000, 1861A, 1C12A, 1F0AA, 17FAA, 1E16A, 71E9);
|
mem_seek R8(Fog, 000, 000, 000, 1861A, 1C12A, 1F0AA, 17FAA, 1E16A, 71E9);
|
||||||
memt_byte( version_Fog == V114d ? 0x53 : 0x56 ,0xEB); // JMP SHORT fog.6FF6862C
|
memt_byte( version_Fog == V114d ? 0x53 : 0x56 ,0xEB); // JMP SHORT fog.6FF6862C
|
||||||
memt_byte( 0x6A ,0x10); //
|
memt_byte( 0x6A ,0x10); //
|
||||||
memt_byte( version_Fog == V114d ? 0x01 : 0x00 ,0x90); // NOP
|
memt_byte( version_Fog == V114d ? 0x01 : 0x00 ,0x90); // NOP
|
||||||
//6FF6861A . 56 PUSH ESI
|
//6FF6861A . 56 PUSH ESI
|
||||||
@ -238,10 +220,10 @@ void Install_ChangingSavePath()
|
|||||||
//6FF67FAB . 6A 00 PUSH 0
|
//6FF67FAB . 6A 00 PUSH 0
|
||||||
//6FF6E16A . 56 PUSH ESI
|
//6FF6E16A . 56 PUSH ESI
|
||||||
//6FF6E16B . 6A 00 PUSH 0
|
//6FF6E16B . 6A 00 PUSH 0
|
||||||
|
//004071E9 |> 53 PUSH EBX ; /Arg4
|
||||||
|
//004071EA |. 6A 01 PUSH 1 ; |Arg3 = 00000001
|
||||||
} else {
|
} else {
|
||||||
|
// Call funtion to manage subfolder
|
||||||
// Appel de notre fct d'ajout d'un sous-r<>pertoire
|
|
||||||
mem_seek( (DWORD)D2FogGetSavePath + 0x28);//6FF61928-6FF50000
|
mem_seek( (DWORD)D2FogGetSavePath + 0x28);//6FF61928-6FF50000
|
||||||
memt_byte( 0x56 ,0x90); // NOP
|
memt_byte( 0x56 ,0x90); // NOP
|
||||||
memt_byte( 0xFF ,0xE8); // CALL changeSavePath
|
memt_byte( 0xFF ,0xE8); // CALL changeSavePath
|
||||||
@ -250,14 +232,14 @@ void Install_ChangingSavePath()
|
|||||||
//6FF61929 FFD5 CALL EBP
|
//6FF61929 FFD5 CALL EBP
|
||||||
//6FF6192B 83F8 FF CMP EAX,-1
|
//6FF6192B 83F8 FF CMP EAX,-1
|
||||||
|
|
||||||
// Pour cr<63>er le bon chemin de sauvegarde
|
// Create the right save path
|
||||||
mem_seek( (DWORD)D2FogGetSavePath + 0xBD);//6FF619BC
|
mem_seek( (DWORD)D2FogGetSavePath + 0xBD);//6FF619BC
|
||||||
MEMJ_REF4( D2Storm503, forCreateSavePath);
|
MEMJ_REF4( D2Storm503, forCreateSavePath);
|
||||||
//6FF619BC . E8 5D2A0000 CALL <JMP.&Storm.#503>
|
//6FF619BC . E8 5D2A0000 CALL <JMP.&Storm.#503>
|
||||||
|
|
||||||
// Remove registry update
|
// Remove registry update
|
||||||
mem_seek( (DWORD)D2FogGetSavePath + 0xC1);//6FF619C1-6FF50000
|
mem_seek( (DWORD)D2FogGetSavePath + 0xC1);//6FF619C1-6FF50000
|
||||||
memt_byte( 0x56 ,0xEB); // JMP SHORT FOG.6FF619D2
|
memt_byte( 0x56 ,0xEB); // JMP SHORT FOG.6FF619D2
|
||||||
memt_byte( 0x53 ,0x0F); //6FF619C3-6FF619D2
|
memt_byte( 0x53 ,0x0F); //6FF619C3-6FF619D2
|
||||||
//6FF619C1 56 PUSH ESI
|
//6FF619C1 56 PUSH ESI
|
||||||
//6FF619C2 53 PUSH EBX
|
//6FF619C2 53 PUSH EBX
|
||||||
|
@ -1,17 +1,158 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
|
||||||
|
|
||||||
Save Player Custom Data.
|
Save Player Custom Data.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "infinityStash.h"
|
#include "infinityStash.h"
|
||||||
#include "extendedSaveFile.h"
|
#include "extendedSaveFile.h"
|
||||||
#include "sharedSaveFile.h"
|
#include "sharedSaveFile.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
bool active_AutoBackup = false;
|
||||||
|
int maxBackupPerCharacter = 5;
|
||||||
|
|
||||||
|
/*backup
|
||||||
|
Save SP :
|
||||||
|
00530441 |. E8 CAC5FFFF CALL Game.0052CA10
|
||||||
|
0052CA5A |. E8 A1590000 |CALL Game.00532400 ; \Game.00532400
|
||||||
|
005324EB |. E8 50FDFFFF CALL Game.00532240 ; \Game.00532240
|
||||||
|
00532275 |. E8 B6C95256 CALL PlugY.caller_SaveSPPlayerCustomData
|
||||||
|
00530503 |. E8 98980000 |CALL Game.00539DA0
|
||||||
|
00539E03 . E8 F82AFFFF CALL Game.0052C900
|
||||||
|
0052C93B |. E8 C05A0000 CALL Game.00532400 ; \Game.00532400
|
||||||
|
005324EB |. E8 50FDFFFF CALL Game.00532240 ; \Game.00532240
|
||||||
|
00532275 |. E8 B6C95256 CALL PlugY.caller_SaveSPPlayerCustomData
|
||||||
|
Save MP :
|
||||||
|
00530441 |. E8 CAC5FFFF CALL Game.0052CA10
|
||||||
|
0052CA5A |. E8 A1590000 |CALL Game.00532400 ; \Game.00532400
|
||||||
|
005324FD |. E8 3EFEFFFF CALL Game.00532340 ; \Game.00532340
|
||||||
|
00532399 |. E8 62D15256 CALL PlugY.caller_SendSaveFilesToSave_11>
|
||||||
|
00530503 |. E8 98980000 |CALL Game.00539DA0
|
||||||
|
00539E03 . E8 F82AFFFF CALL Game.0052C900
|
||||||
|
0052C93B |. E8 C05A0000 CALL Game.00532400 ; \Game.00532400
|
||||||
|
005324FD |. E8 3EFEFFFF CALL Game.00532340 ; \Game.00532340
|
||||||
|
*/
|
||||||
|
void backupSaveFiles(char* name, int isHardCoreGame)
|
||||||
|
{
|
||||||
|
if (!active_AutoBackup)
|
||||||
|
return;
|
||||||
|
|
||||||
|
char savePath[MAX_PATH];
|
||||||
|
char backupPath[MAX_PATH];
|
||||||
|
char szSaveName[MAX_PATH];
|
||||||
|
char szBackupName[MAX_PATH];
|
||||||
|
|
||||||
|
D2FogGetSavePath(savePath, MAX_PATH);
|
||||||
|
|
||||||
|
// backupfiles
|
||||||
|
time_t t = time(NULL);
|
||||||
|
struct tm* tm = localtime(&t);
|
||||||
|
sprintf(backupPath, "%sbackup", savePath);
|
||||||
|
CreateDirectory(backupPath, NULL);
|
||||||
|
sprintf(backupPath, "%sbackup\\%s_%04d%02d%02d_%02d%02d%02d\\", savePath, name, tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
|
||||||
|
CreateDirectory(backupPath, NULL);
|
||||||
|
log_msg("backup directory:%s isHardcore:%d\n", backupPath, isHardCoreGame);
|
||||||
|
|
||||||
|
sprintf(szSaveName, "%s%s.d2s", savePath, name);
|
||||||
|
sprintf(szBackupName, "%s%s.d2s", backupPath, name);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
|
||||||
|
sprintf(szSaveName, "%s%s.d2x", savePath, name);
|
||||||
|
sprintf(szBackupName, "%s%s.d2x", backupPath, name);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
|
||||||
|
sprintf(szSaveName, "%s%s.ma0", savePath, name);
|
||||||
|
sprintf(szBackupName, "%s%s.ma0", backupPath, name);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
|
||||||
|
sprintf(szSaveName, "%s%s.ma1", savePath, name);
|
||||||
|
sprintf(szBackupName, "%s%s.ma1", backupPath, name);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
|
||||||
|
sprintf(szSaveName, "%s%s.ma2", savePath, name);
|
||||||
|
sprintf(szBackupName, "%s%s.ma2", backupPath, name);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
|
||||||
|
sprintf(szSaveName, "%s%s.ma3", savePath, name);
|
||||||
|
sprintf(szBackupName, "%s%s.ma3", backupPath, name);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
|
||||||
|
sprintf(szSaveName, "%s%s.map", savePath, name);
|
||||||
|
sprintf(szBackupName, "%s%s.map", backupPath, name);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
|
||||||
|
if (separateHardSoftStash && isHardCoreGame != 0)
|
||||||
|
{
|
||||||
|
sprintf(szSaveName, "%s%s%s.sss", savePath, "_LOD_HC_", sharedStashFilename);
|
||||||
|
sprintf(szBackupName, "%s%s%s.sss", backupPath, "_LOD_HC_", sharedStashFilename);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
}
|
||||||
|
if (!separateHardSoftStash || isHardCoreGame != 1)
|
||||||
|
{
|
||||||
|
sprintf(szSaveName, "%s%s%s.sss", savePath, separateHardSoftStash && isHardCoreGame != 0? "_LOD_HC_" : "_LOD_", sharedStashFilename);
|
||||||
|
sprintf(szBackupName, "%s%s%s.sss", backupPath, separateHardSoftStash && isHardCoreGame != 0? "_LOD_HC_" : "_LOD_", sharedStashFilename);
|
||||||
|
CopyFile(szSaveName, szBackupName, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete older backup
|
||||||
|
if (maxBackupPerCharacter > 0)
|
||||||
|
{
|
||||||
|
sprintf(szBackupName, "%sbackup\\%s_*", savePath, name);
|
||||||
|
WIN32_FIND_DATA FindFileData;
|
||||||
|
HANDLE hFind = FindFirstFile(szBackupName, &FindFileData);
|
||||||
|
if (hFind)
|
||||||
|
{
|
||||||
|
// Count nb backup folders
|
||||||
|
int nbFolders = (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY;
|
||||||
|
while(FindNextFile(hFind, &FindFileData))
|
||||||
|
nbFolders += (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY;
|
||||||
|
|
||||||
|
// delete nbFolders - maxfolder
|
||||||
|
log_msg("Backup nbFolders: %d\n", nbFolders);
|
||||||
|
nbFolders -= maxBackupPerCharacter;
|
||||||
|
if (nbFolders > 0)
|
||||||
|
{
|
||||||
|
hFind = FindFirstFile(szBackupName, &FindFileData);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
|
||||||
|
{
|
||||||
|
sprintf(backupPath, "%sbackup\\%s\\", savePath, FindFileData.cFileName);
|
||||||
|
log_msg("Delete backup : %s\n", backupPath);
|
||||||
|
|
||||||
|
sprintf(szBackupName, "%s%s.d2s", backupPath, name);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
sprintf(szBackupName, "%s%s.d2x", backupPath, name);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
sprintf(szBackupName, "%s%s.ma0", backupPath, name);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
sprintf(szBackupName, "%s%s.ma1", backupPath, name);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
sprintf(szBackupName, "%s%s.ma2", backupPath, name);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
sprintf(szBackupName, "%s%s.ma3", backupPath, name);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
sprintf(szBackupName, "%s%s.map", backupPath, name);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
sprintf(szBackupName, "%s_LOD_%s.sss", backupPath, sharedStashFilename);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
sprintf(szBackupName, "%s_LOD_HC_%s.sss", backupPath, sharedStashFilename);
|
||||||
|
DeleteFile(szBackupName);
|
||||||
|
RemoveDirectory(backupPath);
|
||||||
|
nbFolders--;
|
||||||
|
}
|
||||||
|
FindNextFile(hFind, &FindFileData);
|
||||||
|
}
|
||||||
|
while (nbFolders > 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void STDCALL SaveSPPlayerCustomData(Unit* ptChar)
|
void STDCALL SaveSPPlayerCustomData(Unit* ptChar)
|
||||||
{
|
{
|
||||||
@ -19,46 +160,69 @@ void STDCALL SaveSPPlayerCustomData(Unit* ptChar)
|
|||||||
|
|
||||||
log_msg("\n--- Start SaveSPPlayerCustomData ---\n");
|
log_msg("\n--- Start SaveSPPlayerCustomData ---\n");
|
||||||
|
|
||||||
if (PCPY->selfStashIsOpened)
|
NetClient* ptClient = D2GetClient(ptChar,__FILE__,__LINE__);
|
||||||
|
backupSaveFiles(PCPlayerData->name, ptClient->isHardCoreGame);
|
||||||
|
|
||||||
|
if (active_PlayerCustomData)
|
||||||
{
|
{
|
||||||
DWORD curSizeExt = 0;
|
if (PCPY->selfStashIsOpened)
|
||||||
DWORD maxSizeExt = 0x4000;
|
{
|
||||||
BYTE* dataExt = (BYTE *)D2AllocMem(PCGame->memoryPool, maxSizeExt,__FILE__,__LINE__,0);
|
DWORD curSizeExt = 0;
|
||||||
d2_assert(!dataExt, "Error : Memory allocation Extended SaveFile", __FILE__, __LINE__);
|
DWORD maxSizeExt = 0x4000;
|
||||||
saveExtendedSaveFile(ptChar, &dataExt, &maxSizeExt, &curSizeExt);
|
BYTE* dataExt = (BYTE *)D2AllocMem(PCGame->memoryPool, maxSizeExt,__FILE__,__LINE__,0);
|
||||||
writeExtendedSaveFile(PCPlayerData->name, dataExt, curSizeExt);
|
d2_assert(!dataExt, "Error : Memory allocation Extended SaveFile", __FILE__, __LINE__);
|
||||||
D2FreeMem(PCGame->memoryPool, dataExt,__FILE__,__LINE__,0);
|
saveExtendedSaveFile(ptChar, &dataExt, &maxSizeExt, &curSizeExt);
|
||||||
|
writeExtendedSaveFile(PCPlayerData->name, dataExt, curSizeExt);
|
||||||
|
D2FreeMem(PCGame->memoryPool, dataExt,__FILE__,__LINE__,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (active_sharedStash && PCPY->sharedStashIsOpened)
|
||||||
|
{
|
||||||
|
DWORD curSizeShr = 0;
|
||||||
|
DWORD maxSizeShr = 0x4000;
|
||||||
|
BYTE* dataShr = (BYTE *)D2AllocMem(PCGame->memoryPool, maxSizeShr,__FILE__,__LINE__,0);
|
||||||
|
d2_assert(!dataShr, "Error : Memory allocation Shared SaveFile", __FILE__, __LINE__);
|
||||||
|
saveSharedSaveFile(ptChar, &dataShr, &maxSizeShr, &curSizeShr);
|
||||||
|
|
||||||
|
writeSharedSaveFile(PCPlayerData->name, dataShr, curSizeShr, ptClient->isHardCoreGame );
|
||||||
|
D2FreeMem(PCGame->memoryPool, dataShr,__FILE__,__LINE__,0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (active_sharedStash && PCPY->sharedStashIsOpened)
|
|
||||||
{
|
|
||||||
DWORD curSizeShr = 0;
|
|
||||||
DWORD maxSizeShr = 0x4000;
|
|
||||||
BYTE* dataShr = (BYTE *)D2AllocMem(PCGame->memoryPool, maxSizeShr,__FILE__,__LINE__,0);
|
|
||||||
d2_assert(!dataShr, "Error : Memory allocation Shared SaveFile", __FILE__, __LINE__);
|
|
||||||
saveSharedSaveFile(ptChar, &dataShr, &maxSizeShr, &curSizeShr);
|
|
||||||
|
|
||||||
NetClient* ptClient = D2GetClient(ptChar,__FILE__,__LINE__);
|
|
||||||
writeSharedSaveFile(PCPlayerData->name, dataShr, curSizeShr, ptClient->isHardCoreGame );
|
|
||||||
D2FreeMem(PCGame->memoryPool, dataShr,__FILE__,__LINE__,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
log_msg("End saving.\n\n");
|
log_msg("End saving.\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_SaveSPPlayerCustomData_114 )
|
|
||||||
CALL D2FogGetSavePath
|
FCT_ASM ( caller_SaveSPPlayerCustomData_114 )
|
||||||
PUSH EDI
|
MOV EAX,DWORD PTR SS:[ESP+8]
|
||||||
CALL SaveSPPlayerCustomData
|
TEST EAX,EAX
|
||||||
RETN
|
JE next
|
||||||
|
PUSH ECX
|
||||||
|
PUSH EDX
|
||||||
|
PUSH EDX
|
||||||
|
CALL SaveSPPlayerCustomData
|
||||||
|
POP EDX
|
||||||
|
POP ECX
|
||||||
|
next:
|
||||||
|
JMP D2SaveSPChar
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_SaveSPPlayerCustomData_111 )
|
FCT_ASM ( caller_SaveSPPlayerCustomData_111 )
|
||||||
|
MOV EAX,DWORD PTR SS:[ESP+0x14]
|
||||||
|
TEST EAX,EAX
|
||||||
|
JE next
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x8]
|
||||||
|
CALL SaveSPPlayerCustomData
|
||||||
|
next:
|
||||||
|
JMP D2SaveSPChar
|
||||||
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
/*FCT_ASM ( caller_SaveSPPlayerCustomData_111 )
|
||||||
CALL D2FogGetSavePath
|
CALL D2FogGetSavePath
|
||||||
PUSH DWORD PTR SS:[ESP+0x2608]
|
PUSH DWORD PTR SS:[ESP+0x2608]
|
||||||
CALL SaveSPPlayerCustomData
|
CALL SaveSPPlayerCustomData
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}*/
|
||||||
|
|
||||||
FCT_ASM ( caller_SaveSPPlayerCustomData )
|
FCT_ASM ( caller_SaveSPPlayerCustomData )
|
||||||
CALL D2FogGetSavePath
|
CALL D2FogGetSavePath
|
||||||
@ -193,7 +357,7 @@ void STDCALL SendSaveFilesToSave( Unit* ptChar )
|
|||||||
dataToSend->sizeShared = curSizeShr;
|
dataToSend->sizeShared = curSizeShr;
|
||||||
dataToSend->curShared = 0;
|
dataToSend->curShared = 0;
|
||||||
dataToSend->dataShared = dataShr;
|
dataToSend->dataShared = dataShr;
|
||||||
log_msg("clientID=%d\t init=%d\t sizeExtended=%X\t curExtended=%X\t dataExtended=%X\t sizeShared=%X\t curShared=%X\t dataShared=%08X\n",
|
log_msg("SendSaveFilesToSave : clientID=%d\t init=%d\t sizeExtended=%d\t curExtended=%d\t dataExtended=%d\t sizeShared=%d\t curShared=%d\t dataShared=%08X\n",
|
||||||
dataToSend->clientID, dataToSend->init, dataToSend->sizeExtended, dataToSend->curExtended, dataToSend->dataExtended, dataToSend->sizeShared, dataToSend->curShared, dataToSend->dataShared);
|
dataToSend->clientID, dataToSend->init, dataToSend->sizeExtended, dataToSend->curExtended, dataToSend->dataExtended, dataToSend->sizeShared, dataToSend->curShared, dataToSend->dataShared);
|
||||||
|
|
||||||
/* NetClient* ptClient = D2GetClient(ptChar,__FILE__,__LINE__);
|
/* NetClient* ptClient = D2GetClient(ptChar,__FILE__,__LINE__);
|
||||||
@ -208,19 +372,19 @@ void STDCALL SendSaveFilesToSave( Unit* ptChar )
|
|||||||
D2FreeMem(PCGame->memoryPool, dataShr,__FILE__,__LINE__,0);
|
D2FreeMem(PCGame->memoryPool, dataShr,__FILE__,__LINE__,0);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
log_msg("End SendSaveFilesToSave.\n\n");
|
log_msg("SendSaveFilesToSave : End\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL ManageNextPacketToSend(NetClient* ptClient)
|
DWORD STDCALL ManageNextPacketToSend(NetClient* ptClient)
|
||||||
{
|
{
|
||||||
log_msg("ManageNextPacketToSend: ");
|
log_msg("ManageNextPacketToSend\n");
|
||||||
s_dataToSend* dataToSend = ptDataToSend;
|
s_dataToSend* dataToSend = ptDataToSend;
|
||||||
while (dataToSend && (dataToSend->clientID != ptClient->clientID))
|
while (dataToSend && (dataToSend->clientID != ptClient->clientID))
|
||||||
dataToSend = dataToSend->next;
|
dataToSend = dataToSend->next;
|
||||||
if (!dataToSend) return 1;
|
if (!dataToSend) return 1;
|
||||||
|
|
||||||
log_msg("clientID=%d\t init=%d\t sizeExtended=%X\t curExtended=%X\t dataExtended=%X\t sizeShared=%X\t curShared=%X\t dataShared=%08X\n",
|
log_msg("ManageNextPacketToSend : clientID=%d\t init=%d\t sizeExtended=%d\t curExtended=%d\t dataExtended=%08X\t sizeShared=%d\t curShared=%d\t dataShared=%08X\n",
|
||||||
dataToSend->clientID, dataToSend->init, dataToSend->sizeExtended, dataToSend->curExtended, dataToSend->dataExtended, dataToSend->sizeShared, dataToSend->curShared, dataToSend->dataShared);
|
dataToSend->clientID, dataToSend->init, dataToSend->sizeExtended, dataToSend->curExtended, dataToSend->dataExtended, dataToSend->sizeShared, dataToSend->curShared, dataToSend->dataShared);
|
||||||
|
|
||||||
if (dataToSend->sizeExtended && dataToSend->dataExtended && (dataToSend->curExtended < dataToSend->sizeExtended))
|
if (dataToSend->sizeExtended && dataToSend->dataExtended && (dataToSend->curExtended < dataToSend->sizeExtended))
|
||||||
@ -234,7 +398,7 @@ DWORD STDCALL ManageNextPacketToSend(NetClient* ptClient)
|
|||||||
msg->isCustom = true;
|
msg->isCustom = true;
|
||||||
msg->packSize = remainingData > 0xFE ? 0xFF : (BYTE)remainingData + 1;
|
msg->packSize = remainingData > 0xFE ? 0xFF : (BYTE)remainingData + 1;
|
||||||
CopyMemory(msg->data, &dataToSend->dataExtended[dataToSend->curExtended], msg->packSize);
|
CopyMemory(msg->data, &dataToSend->dataExtended[dataToSend->curExtended], msg->packSize);
|
||||||
log_msg("Saving Send Packet: type=%X\t init=%d\t finalSize=%X\t packSize=%02X\t data=%08X\n", msg->type, msg->init, msg->finalSize, msg->packSize, msg->data);
|
log_msg("ManageNextPacketToSend : type=%d\t init=%d\t finalSize=%d\t packSize=%d\t data=%08X\n", msg->type, msg->init, msg->finalSize, msg->packSize, msg->data);
|
||||||
D2SendToClient(0, dataToSend->clientID, msg, msg->packSize+7);
|
D2SendToClient(0, dataToSend->clientID, msg, msg->packSize+7);
|
||||||
dataToSend->init = false;
|
dataToSend->init = false;
|
||||||
dataToSend->curExtended += msg->packSize - 1;
|
dataToSend->curExtended += msg->packSize - 1;
|
||||||
@ -246,7 +410,7 @@ DWORD STDCALL ManageNextPacketToSend(NetClient* ptClient)
|
|||||||
D2FreeMem(PClientGame->memoryPool, dataToSend->dataExtended,__FILE__,__LINE__,0);
|
D2FreeMem(PClientGame->memoryPool, dataToSend->dataExtended,__FILE__,__LINE__,0);
|
||||||
dataToSend->dataExtended = NULL;
|
dataToSend->dataExtended = NULL;
|
||||||
}
|
}
|
||||||
log_msg("End Send Packet\n");
|
log_msg("ManageNextPacketToSend : End\n");
|
||||||
return 0;//ManageNextPacketToSend(ptClient);//return 0;
|
return 0;//ManageNextPacketToSend(ptClient);//return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +425,7 @@ DWORD STDCALL ManageNextPacketToSend(NetClient* ptClient)
|
|||||||
msg->isCustom = true;
|
msg->isCustom = true;
|
||||||
msg->packSize = remainingData > 0xFE ? 0xFF : (BYTE)remainingData + 1;
|
msg->packSize = remainingData > 0xFE ? 0xFF : (BYTE)remainingData + 1;
|
||||||
CopyMemory(msg->data, &dataToSend->dataShared[dataToSend->curShared], msg->packSize);
|
CopyMemory(msg->data, &dataToSend->dataShared[dataToSend->curShared], msg->packSize);
|
||||||
log_msg("Saving Send Packet: type=%X\t init=%d\t finalSize=%X\t packSize=%02X\t data=%08X\n", msg->type, msg->init, msg->finalSize, msg->packSize, msg->data);
|
log_msg("ManageNextPacketToSend : type=%d\t init=%d\t finalSize=%d\t packSize=%d\t data=%08X\n", msg->type, msg->init, msg->finalSize, msg->packSize, msg->data);
|
||||||
D2SendToClient(0, dataToSend->clientID, msg, msg->packSize+7);
|
D2SendToClient(0, dataToSend->clientID, msg, msg->packSize+7);
|
||||||
dataToSend->init = false;
|
dataToSend->init = false;
|
||||||
dataToSend->curShared += msg->packSize - 1;
|
dataToSend->curShared += msg->packSize - 1;
|
||||||
@ -273,11 +437,11 @@ DWORD STDCALL ManageNextPacketToSend(NetClient* ptClient)
|
|||||||
D2FreeMem(PClientGame->memoryPool, dataToSend->dataShared,__FILE__,__LINE__,0);
|
D2FreeMem(PClientGame->memoryPool, dataToSend->dataShared,__FILE__,__LINE__,0);
|
||||||
dataToSend->dataShared = NULL;
|
dataToSend->dataShared = NULL;
|
||||||
}
|
}
|
||||||
log_msg("End Send Packet\n");
|
log_msg("ManageNextPacketToSend : End\n");
|
||||||
return 0;//ManageNextPacketToSend(ptClient);//return 0;
|
return 0;//ManageNextPacketToSend(ptClient);//return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_msg("End Send Packet\n");
|
log_msg("ManageNextPacketToSend : End\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,7 +450,7 @@ DWORD STDCALL ReceiveSaveFilesToSave(t_rcvMsg* msg)
|
|||||||
{
|
{
|
||||||
if( (msg->packID != customPackID) || !msg->isCustom) return 0;
|
if( (msg->packID != customPackID) || !msg->isCustom) return 0;
|
||||||
|
|
||||||
log_msg("Saving Receive Packet: id = %d\ttype=%X\t init=%d\t finalSize=%X\t packSize=%02X\t data=%08X\n", msg->type, msg->init, msg->finalSize, msg->packSize, msg->data);
|
log_msg("ReceiveSaveFilesToSave : Receive Packet - type=%d\t init=%d\t finalSize=%d\t packSize=%d\t data=%08X\n", msg->type, msg->init, msg->finalSize, msg->packSize, msg->data);
|
||||||
|
|
||||||
bool isShared;
|
bool isShared;
|
||||||
|
|
||||||
@ -301,10 +465,10 @@ DWORD STDCALL ReceiveSaveFilesToSave(t_rcvMsg* msg)
|
|||||||
{
|
{
|
||||||
D2FogMemDeAlloc(receivedSaveFiles.dataExtended,__FILE__,__LINE__,0);
|
D2FogMemDeAlloc(receivedSaveFiles.dataExtended,__FILE__,__LINE__,0);
|
||||||
D2FogMemDeAlloc(receivedSaveFiles.dataShared,__FILE__,__LINE__,0);
|
D2FogMemDeAlloc(receivedSaveFiles.dataShared,__FILE__,__LINE__,0);
|
||||||
ZeroMemory(&receivedSaveFiles, sizeof(receivedSaveFiles));//TODO
|
ZeroMemory(&receivedSaveFiles, sizeof(receivedSaveFiles));
|
||||||
}
|
}
|
||||||
|
|
||||||
log_msg("receivedSaveFiles: sizeExtended=%d\t curExtended=%d\t dataExtended=%08X\t sizeShared=%d\t curShared=%d\t dataShared=%08X\n", receivedSaveFiles.sizeExtended, receivedSaveFiles.curExtended, receivedSaveFiles.dataExtended, receivedSaveFiles.sizeShared, receivedSaveFiles.curShared, receivedSaveFiles.dataShared);
|
log_msg("ReceiveSaveFilesToSave : sizeExtended=%d\t curExtended=%d\t dataExtended=%08X\t sizeShared=%d\t curShared=%d\t dataShared=%08X\n", receivedSaveFiles.sizeExtended, receivedSaveFiles.curExtended, receivedSaveFiles.dataExtended, receivedSaveFiles.sizeShared, receivedSaveFiles.curShared, receivedSaveFiles.dataShared);
|
||||||
|
|
||||||
DWORD size = msg->packSize - 1;
|
DWORD size = msg->packSize - 1;
|
||||||
if (isShared)
|
if (isShared)
|
||||||
@ -331,77 +495,48 @@ DWORD STDCALL ReceiveSaveFilesToSave(t_rcvMsg* msg)
|
|||||||
CopyMemory(&receivedSaveFiles.dataExtended[receivedSaveFiles.curExtended], msg->data, size);
|
CopyMemory(&receivedSaveFiles.dataExtended[receivedSaveFiles.curExtended], msg->data, size);
|
||||||
receivedSaveFiles.curExtended += size;
|
receivedSaveFiles.curExtended += size;
|
||||||
}
|
}
|
||||||
log_msg("End Save Receive Packet\n");
|
log_msg("ReceiveSaveFilesToSave : End\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void STDCALL SaveMPPlayerCustomData(BYTE* dataD2Savefile )
|
void STDCALL SaveMPPlayerCustomData(BYTE* dataD2Savefile )
|
||||||
{
|
{
|
||||||
log_msg("Start SaveMPPlayerCustomData.\n");
|
log_msg("SaveMPPlayerCustomData - Start.\n");
|
||||||
|
|
||||||
Unit* ptChar = D2GetClientPlayer();
|
Unit* ptChar = D2GetClientPlayer();
|
||||||
if( receivedSaveFiles.sizeExtended && (receivedSaveFiles.sizeExtended == receivedSaveFiles.curExtended) && receivedSaveFiles.sizeShared && (receivedSaveFiles.sizeShared == receivedSaveFiles.curShared) )
|
backupSaveFiles(PCPlayerData->name, (dataD2Savefile[0x24] & 4) == 4);
|
||||||
|
|
||||||
|
if (active_PlayerCustomData)
|
||||||
{
|
{
|
||||||
log_msg("Saving can start\n");
|
if( receivedSaveFiles.sizeExtended && (receivedSaveFiles.sizeExtended == receivedSaveFiles.curExtended) && (!active_sharedStash || receivedSaveFiles.sizeShared && (receivedSaveFiles.sizeShared == receivedSaveFiles.curShared)) )
|
||||||
if (ptChar)
|
|
||||||
{
|
{
|
||||||
writeExtendedSaveFile(PCPlayerData->name, receivedSaveFiles.dataExtended, receivedSaveFiles.sizeExtended);
|
log_msg("SaveMPPlayerCustomData - Saving can start\n");
|
||||||
D2FogMemDeAlloc(receivedSaveFiles.dataExtended,__FILE__,__LINE__,0);
|
if (ptChar)
|
||||||
if (active_sharedStash)
|
{
|
||||||
writeSharedSaveFile(PCPlayerData->name, receivedSaveFiles.dataShared, receivedSaveFiles.sizeShared, (dataD2Savefile[0x24] & 4) == 4);//6FBAB9A4-6FAA0000
|
writeExtendedSaveFile(PCPlayerData->name, receivedSaveFiles.dataExtended, receivedSaveFiles.sizeExtended);
|
||||||
D2FogMemDeAlloc(receivedSaveFiles.dataShared,__FILE__,__LINE__,0);
|
D2FogMemDeAlloc(receivedSaveFiles.dataExtended,__FILE__,__LINE__,0);
|
||||||
ZeroMemory(&receivedSaveFiles,sizeof(receivedSaveFiles));
|
if (active_sharedStash)
|
||||||
}
|
{
|
||||||
log_msg("Receive Savefiles completed\n\n");
|
writeSharedSaveFile(PCPlayerData->name, receivedSaveFiles.dataShared, receivedSaveFiles.sizeShared, (dataD2Savefile[0x24] & 4) == 4);//6FBAB9A4-6FAA0000
|
||||||
} else {
|
D2FogMemDeAlloc(receivedSaveFiles.dataShared,__FILE__,__LINE__,0);
|
||||||
if (ptChar)
|
}
|
||||||
{
|
ZeroMemory(&receivedSaveFiles,sizeof(receivedSaveFiles));
|
||||||
log_box("Connection error : back up current save file then save with client data.");
|
}
|
||||||
backupSharedSaveFile();
|
log_msg("SaveMPPlayerCustomData - Receive Savefiles completed\n\n");
|
||||||
backupExtendedSaveFile(PCPlayerData->name);
|
} else {
|
||||||
SaveSPPlayerCustomData(ptChar);
|
if (ptChar)
|
||||||
|
{
|
||||||
|
log_box("Connection error : save with client data.");
|
||||||
|
SaveSPPlayerCustomData(ptChar);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log_msg("--- End SaveMPPlayerCustomData. ---\n\n");
|
log_msg("--- SaveMPPlayerCustomData End ---\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void STDCALL SaveMPPlayerCustomData_114()
|
|
||||||
{
|
|
||||||
if (!D2isLODGame()) return;
|
|
||||||
|
|
||||||
log_msg("\n--- Start SaveMPPlayerCustomData ---\n");
|
|
||||||
|
|
||||||
Unit* ptChar = D2GetClientPlayer();
|
|
||||||
|
|
||||||
if (PCPY->selfStashIsOpened)
|
|
||||||
{
|
|
||||||
DWORD curSizeExt = 0;
|
|
||||||
DWORD maxSizeExt = 0x4000;
|
|
||||||
BYTE* dataExt = new BYTE[maxSizeExt];
|
|
||||||
ZeroMemory(dataExt, maxSizeExt);
|
|
||||||
d2_assert(!dataExt, "Error : Memory allocation Extended SaveFile", __FILE__, __LINE__);
|
|
||||||
saveExtendedSaveFile(ptChar, &dataExt, &maxSizeExt, &curSizeExt);
|
|
||||||
writeExtendedSaveFile(PCPlayerData->name, dataExt, curSizeExt);
|
|
||||||
delete[] dataExt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (active_sharedStash && PCPY->sharedStashIsOpened)
|
|
||||||
{
|
|
||||||
DWORD curSizeShr = 0;
|
|
||||||
DWORD maxSizeShr = 0x4000;
|
|
||||||
BYTE* dataShr = new BYTE[maxSizeShr];
|
|
||||||
ZeroMemory(dataShr, maxSizeShr);
|
|
||||||
d2_assert(!dataShr, "Error : Memory allocation Shared SaveFile", __FILE__, __LINE__);
|
|
||||||
saveSharedSaveFile(ptChar, &dataShr, &maxSizeShr, &curSizeShr);
|
|
||||||
|
|
||||||
NetClient* ptClient = D2GetClient(ptChar, __FILE__, __LINE__);
|
|
||||||
writeSharedSaveFile(PCPlayerData->name, dataShr, curSizeShr, 0/*ptClient->isHardCoreGame*/);
|
|
||||||
delete[] dataShr;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_msg("End saving.\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -468,7 +603,12 @@ end_caller_ManageNextPacketToSend_9d:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
FCT_ASM( caller_SendSaveFilesToSave_114 )
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x4]
|
||||||
|
CALL SendSaveFilesToSave
|
||||||
|
MOV EDI,DWORD PTR SS:[EBP-0x2008]
|
||||||
|
RETN
|
||||||
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_SendSaveFilesToSave_111 )
|
FCT_ASM( caller_SendSaveFilesToSave_111 )
|
||||||
PUSH DWORD PTR SS:[ESP+0x2014]
|
PUSH DWORD PTR SS:[ESP+0x2014]
|
||||||
@ -494,6 +634,21 @@ FCT_ASM( caller_SendSaveFilesToSave_9 )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
FCT_ASM ( caller_ReceivedSaveFilesToSave_114 )
|
||||||
|
CMP EDX,-1
|
||||||
|
JE continue_rcvFct
|
||||||
|
PUSH ECX
|
||||||
|
PUSH EDX
|
||||||
|
PUSH ECX
|
||||||
|
CALL ReceiveSaveFilesToSave
|
||||||
|
POP EDX
|
||||||
|
POP ECX
|
||||||
|
TEST EAX,EAX
|
||||||
|
JE continue_rcvFct
|
||||||
|
RETN
|
||||||
|
continue_rcvFct:
|
||||||
|
JMP D2ReceivePacket
|
||||||
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_ReceivedSaveFilesToSave_111 )
|
FCT_ASM ( caller_ReceivedSaveFilesToSave_111 )
|
||||||
LEA EAX,DWORD PTR SS:[ESP+0x10]
|
LEA EAX,DWORD PTR SS:[ESP+0x10]
|
||||||
@ -529,16 +684,6 @@ continue_rcvFct:
|
|||||||
// JMP DWORD PTR SS:[ESP+0x5F0]
|
// JMP DWORD PTR SS:[ESP+0x5F0]
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_SaveMPPlayerCustomData_114 )
|
|
||||||
PUSH EAX
|
|
||||||
PUSH ECX
|
|
||||||
CALL SaveMPPlayerCustomData_114
|
|
||||||
POP ECX
|
|
||||||
POP EAX
|
|
||||||
CMP ECX, 0xAA55AA55
|
|
||||||
RETN
|
|
||||||
}}
|
|
||||||
|
|
||||||
FCT_ASM ( caller_SaveMPPlayerCustomData_111 )
|
FCT_ASM ( caller_SaveMPPlayerCustomData_111 )
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
@ -550,8 +695,6 @@ FCT_ASM ( caller_SaveMPPlayerCustomData_111 )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM ( caller_SaveMPPlayerCustomData )
|
FCT_ASM ( caller_SaveMPPlayerCustomData )
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
@ -563,89 +706,107 @@ FCT_ASM ( caller_SaveMPPlayerCustomData )
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Install_SavePlayerData()
|
void Install_SavePlayerData()
|
||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled || !active_PlayerCustomData) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Game & D2Client for save Player's custom data. (SavePlayerData)\n");
|
log_msg("Patch D2Game & D2Client for save Player's custom data. (SavePlayerData)\n");
|
||||||
|
|
||||||
// Save single player custom data.
|
//Save single player custom data.
|
||||||
mem_seek R8(D2Game, 4DF04, 4E304, 5A624, B9365, 25475, 44165, 53F35, 39835, 132276);
|
if (version_D2Game >= V111)
|
||||||
if (version_D2Game == V114d) {
|
{
|
||||||
MEMT_REF4(0xFFED4DD6, caller_SaveSPPlayerCustomData_114);
|
mem_seek R8(D2Game, 0000, 0000, 0000, B9801, 25911, 44601, 543D1, 39CD1, 1324EC);
|
||||||
} else {
|
MEMC_REF4( D2SaveSPChar, version_D2Game >= V114a ? caller_SaveSPPlayerCustomData_114 : version_D2Game >= V111 ? caller_SaveSPPlayerCustomData_111 : version_D2Game != V109b ? caller_SaveSPPlayerCustomData : caller_SaveSPPlayerCustomData_9);
|
||||||
MEMJ_REF4(D2FogGetSavePath, version_D2Game >= V111 ? caller_SaveSPPlayerCustomData_111 : version_D2Game != V109b ? caller_SaveSPPlayerCustomData : caller_SaveSPPlayerCustomData_9);
|
//6FCD9800 |. E8 3BFBFFFF CALL D2Game.6FCD9340
|
||||||
}
|
//6FC45910 |. E8 3BFBFFFF CALL D2Game.6FC45450
|
||||||
//6FC8A623 E8 3E210900 CALL <JMP.&Fog.#10115>
|
//6FC64600 |. E8 3BFBFFFF CALL D2Game.6FC64140
|
||||||
//02039364 |. E8 3B0FF5FF CALL <JMP.&Fog.#10115>
|
//6FC743D0 |. E8 3BFBFFFF CALL D2Game.6FC73F10
|
||||||
//01F95474 |. E8 C34EFEFF CALL <JMP.&Fog.#10115>
|
//6FC59CD0 |. E8 3BFBFFFF CALL D2Game.6FC59810
|
||||||
//6FC64164 |. E8 EB61FCFF CALL <JMP.&Fog.#10115>
|
//005324EB |. E8 50FDFFFF CALL Game.00532240 ; \Game.00532240
|
||||||
//6FC73F34 |. E8 DD63FBFF CALL <JMP.&Fog.#10115>
|
}
|
||||||
//6FC59834 |. E8 FB0AFDFF CALL <JMP.&Fog.#10115>
|
else
|
||||||
|
{
|
||||||
|
mem_seek R8(D2Game, 4DF04, 4E304, 5A624, B9365, 25475, 44165, 53F35, 39835, 132276);
|
||||||
|
MEMJ_REF4( D2FogGetSavePath, /*version_D2Game >= V114a ? caller_SaveSPPlayerCustomData : version_D2Game >= V111 ? caller_SaveSPPlayerCustomData_111 :*/ version_D2Game != V109b ? caller_SaveSPPlayerCustomData : caller_SaveSPPlayerCustomData_9);
|
||||||
|
//6FC8A623 E8 3E210900 CALL <JMP.&Fog.#10115>
|
||||||
|
//02039364 |. E8 3B0FF5FF CALL <JMP.&Fog.#10115>
|
||||||
|
//01F95474 |. E8 C34EFEFF CALL <JMP.&Fog.#10115>
|
||||||
|
//6FC64164 |. E8 EB61FCFF CALL <JMP.&Fog.#10115>
|
||||||
|
//6FC73F34 |. E8 DD63FBFF CALL <JMP.&Fog.#10115>
|
||||||
|
//6FC59834 |. E8 FB0AFDFF CALL <JMP.&Fog.#10115>
|
||||||
|
//00532275 |. E8 D64DEDFF CALL Game.00407050
|
||||||
|
}
|
||||||
|
|
||||||
if (version_D2Game == V114d) {
|
if (active_PlayerCustomData)
|
||||||
// Save multiplayer player custom data.
|
{
|
||||||
mem_seek R8(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, AC572, 829C2, 5C565);
|
//Send SaveFiles
|
||||||
memt_byte(0x81, 0xE8); // CALL
|
mem_seek R8(D2Game, 4DFFA, 4E3FA, 5A720, B92DB, 253EB, 440DB, 53EAB, 397AB, 132398);
|
||||||
MEMT_REF4(0x55AA55F9, caller_SaveMPPlayerCustomData_114);
|
memt_byte( 0x8B ,0x90); // NOP
|
||||||
memt_byte(0xAA, 0x90); // CALL
|
memt_byte( version_D2Game >= V114d ? 0xBD : version_D2Game >= V111 ? 0x44 : version_D2Game != V109b ? 0x7C : 0x74, 0xE8); // CALL
|
||||||
log_msg("\n");
|
MEMT_REF4( version_D2Game >= V114d ? 0xFFFFDFF8 : version_D2Game >= V111 ? 0xC0850424 : version_D2Game != V109b ? 0xFF851024 : 0xF6851024, version_D2Game >= V114d ? caller_SendSaveFilesToSave_114 : version_D2Game >= V111 ? caller_SendSaveFilesToSave_111 : version_D2Game != V109b ? caller_SendSaveFilesToSave : caller_SendSaveFilesToSave_9);
|
||||||
isInstalled = true;
|
//6FC8A720 |. 8B7C24 10 MOV EDI,DWORD PTR SS:[ESP+10]
|
||||||
return;
|
//6FC8A724 |. 85FF TEST EDI,EDI
|
||||||
}
|
//020392DB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||||
|
//020392DF |. 85C0 TEST EAX,EAX
|
||||||
|
//01F953EB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||||
|
//01F953EF |. 85C0 TEST EAX,EAX
|
||||||
|
//6FC640DB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||||
|
//6FC640DF |. 85C0 TEST EAX,EAX
|
||||||
|
//6FC73EAB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||||
|
//6FC73EAF |. 85C0 TEST EAX,EAX
|
||||||
|
//6FC597AB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||||
|
//6FC597AF |. 85C0 TEST EAX,EAX
|
||||||
|
//00532398 |. 8BBD F8DFFFFF MOV EDI,DWORD PTR SS:[EBP-2008]
|
||||||
|
|
||||||
//Send SaveFiles
|
mem_seek R8(D2Game, 7993, 7A13, 7BBB, E2943, E6D83, A89D3, 2D173, BEDD3, 12E13E);
|
||||||
mem_seek R8(D2Game, 4DFFA, 4E3FA, 5A720, B92DB, 253EB, 440DB, 53EAB, 397AB, 132398);
|
memt_byte( 0x8B ,0x90); // NOP
|
||||||
memt_byte( 0x8B ,0x90); // NOP
|
memt_byte( version_D2Game >= V110 ? 0x8E : 0x86 ,0xE8); // CALL
|
||||||
memt_byte( version_D2Game >= V111 ? 0x44 : version_D2Game != V109b ? 0x7C : 0x74 ,0xE8); // CALL
|
MEMT_REF4( version_D2Game >= V110 ? 0x0000017C : version_D2Game == V109d ? 0x0000174 : 0x00000150, version_D2Game >= V110 ? caller_ManageNextPacketToSend : version_D2Game == V109d ? caller_ManageNextPacketToSend_9d : caller_ManageNextPacketToSend_9);
|
||||||
MEMT_REF4( version_D2Game >= V111 ? 0xC0850424 : version_D2Game != V109b ? 0xFF851024 : 0xF6851024, version_D2Game >= V111 ? caller_SendSaveFilesToSave_111 : version_D2Game != V109b ? caller_SendSaveFilesToSave : caller_SendSaveFilesToSave_9);
|
//6FC37BBB |> 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
//6FC8A720 |. 8B7C24 10 MOV EDI,DWORD PTR SS:[ESP+10]
|
//02062943 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
//6FC8A724 |. 85FF TEST EDI,EDI
|
//02056D83 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
//020392DB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
//6FCC89D3 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
//020392DF |. 85C0 TEST EAX,EAX
|
//6FC4D173 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
//01F953EB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
//6FCDEDD3 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
//01F953EF |. 85C0 TEST EAX,EAX
|
//0052E13E |> 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
//6FC640DB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
|
||||||
//6FC640DF |. 85C0 TEST EAX,EAX
|
|
||||||
//6FC73EAB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
|
||||||
//6FC73EAF |. 85C0 TEST EAX,EAX
|
|
||||||
//6FC597AB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
|
||||||
//6FC597AF |. 85C0 TEST EAX,EAX
|
|
||||||
|
|
||||||
mem_seek R8(D2Game, 7993, 7A13, 7BBB, E2943, E6D83, A89D3, 2D173, BEDD3, 138FEC/*12E110*/);
|
// mem_seek R7(D2Game, 7B82, 7C05, 7DCF, 0000, 0000, 0000, 0000);//117FC, 117EC, 11DBC
|
||||||
memt_byte( 0x8B ,0x90); // NOP
|
// memt_byte( 0x8B ,0xE8); // CALL
|
||||||
memt_byte( version_D2Game >= V110 ? 0x8E : 0x86 ,0xE8); // CALL
|
// MEMT_REF4( (version_D2Game == V110) ? 0x50CD8BD3 : 0x50CF8BD3, (version_D2Game == V110) ? caller_SendSaveFilesToSave : caller_SendSaveFilesToSave_9);
|
||||||
MEMT_REF4( version_D2Game >= V110 ? 0x0000017C : version_D2Game == V109d ? 0x0000174 : 0x00000150, version_D2Game >= V110 ? caller_ManageNextPacketToSend : version_D2Game == V109d ? caller_ManageNextPacketToSend_9d : caller_ManageNextPacketToSend_9);
|
//6FC37DCF |. 8BD3 |MOV EDX,EBX
|
||||||
//6FC37BBB |> 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
//6FC37DD1 |. 8BCD |MOV ECX,EBP
|
||||||
//02062943 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
//6FC37DD3 |. 50 |PUSH EAX
|
||||||
//02056D83 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
|
||||||
//6FCC89D3 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
|
||||||
//6FC4D173 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
|
||||||
//6FCDEDD3 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
|
||||||
|
|
||||||
// mem_seek R7(D2Game, 7B82, 7C05, 7DCF, 0000, 0000, 0000, 0000);//117FC, 117EC, 11DBC
|
//Received SaveFiles
|
||||||
// memt_byte( 0x8B ,0xE8); // CALL
|
mem_seek R8(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 43946, 448E6, 4C70D);
|
||||||
// MEMT_REF4( (version_D2Game == V110) ? 0x50CD8BD3 : 0x50CF8BD3, (version_D2Game == V110) ? caller_SendSaveFilesToSave : caller_SendSaveFilesToSave_9);
|
if ( version_D2Game >= V114a )
|
||||||
//6FC37DCF |. 8BD3 |MOV EDX,EBX
|
{
|
||||||
//6FC37DD1 |. 8BCD |MOV ECX,EBP
|
MEMC_REF4( D2ReceivePacket, caller_ReceivedSaveFilesToSave_114);
|
||||||
//6FC37DD3 |. 50 |PUSH EAX
|
//0044C70C |. E8 3F010100 |CALL Game.0045C850
|
||||||
|
}
|
||||||
|
else if ( version_D2Game >= V111 )
|
||||||
|
{
|
||||||
|
memt_byte( 0x0F ,0xE8);
|
||||||
|
MEMT_REF4( 0x0C2444B6, caller_ReceivedSaveFilesToSave_111);
|
||||||
|
//6FB39246 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||||
|
//6FAE2076 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||||
|
//6FB2BCD6 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||||
|
//6FAF3946 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||||
|
//6FAF48E6 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||||
|
} else {
|
||||||
|
//Received SaveFiles
|
||||||
|
memt_byte( 0x81 ,0x90); // NOP
|
||||||
|
memt_byte( 0xEC ,0xE8); // CALL
|
||||||
|
MEMT_REF4( 0x000005F4, caller_ReceivedSaveFilesToSave);
|
||||||
|
//6FAB1CB0 |$ 81EC F4050000 SUB ESP,5F4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( version_D2Game >= V111 )
|
if ( version_D2Game >= V111 )
|
||||||
{
|
{
|
||||||
//Received SaveFiles
|
|
||||||
mem_seek R8(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 43946, 448E6, 448E6);
|
|
||||||
memt_byte( 0x0F ,0xE8);
|
|
||||||
MEMT_REF4( 0x0C2444B6, caller_ReceivedSaveFilesToSave_111);
|
|
||||||
//6FB39246 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
|
||||||
//6FAE2076 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
|
||||||
//6FB2BCD6 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
|
||||||
//6FAF3946 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
|
||||||
//6FAF48E6 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
|
||||||
|
|
||||||
// Save multiplayer player custom data.
|
// Save multiplayer player custom data.
|
||||||
mem_seek R8(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, AC572, 829C2, 829C2);
|
mem_seek R8(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, AC572, 829C2, 5C565);
|
||||||
memt_byte( 0x81 ,0xE8); // CALL
|
memt_byte( 0x81 ,0xE8); // CALL
|
||||||
MEMT_REF4( 0x55AA55F9, caller_SaveMPPlayerCustomData_111);
|
MEMT_REF4( 0x55AA55F9, caller_SaveMPPlayerCustomData_111);
|
||||||
memt_byte( 0xAA ,0x90); // CALL
|
memt_byte( 0xAA ,0x90); // CALL
|
||||||
@ -654,14 +815,8 @@ void Install_SavePlayerData()
|
|||||||
//6FB14A22 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
//6FB14A22 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
||||||
//6FB5C572 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
//6FB5C572 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
||||||
//6FB329C2 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
//6FB329C2 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
||||||
|
//0045C565 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
||||||
} else {
|
} else {
|
||||||
//Received SaveFiles
|
|
||||||
mem_seek R8(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 0000, 0000, 0000);
|
|
||||||
memt_byte( 0x81 ,0x90); // NOP
|
|
||||||
memt_byte( 0xEC ,0xE8); // CALL
|
|
||||||
MEMT_REF4( 0x000005F4, caller_ReceivedSaveFilesToSave);
|
|
||||||
//6FAB1CB0 |$ 81EC F4050000 SUB ESP,5F4
|
|
||||||
|
|
||||||
// Save multiplayer player custom data.
|
// Save multiplayer player custom data.
|
||||||
mem_seek R8(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, 0000, 0000, 0000);
|
mem_seek R8(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, 0000, 0000, 0000);
|
||||||
memt_byte( 0x8B ,0xE8); // CALL
|
memt_byte( 0x8B ,0xE8); // CALL
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Add an extra save file shared by all own characters.
|
Add an extra save file shared by all own characters.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
@ -15,9 +15,7 @@
|
|||||||
#define BUFFER_SIZE 0x4000
|
#define BUFFER_SIZE 0x4000
|
||||||
#define FILE_VERSION 0x3230 //"02"
|
#define FILE_VERSION 0x3230 //"02"
|
||||||
|
|
||||||
//6FC8CE8A |. E8 A16BFAFF CALL D2Game.6FC33A30
|
|
||||||
//$+C0 > 1F 00 00 00 03 00 00 06 .....
|
|
||||||
// 28 0010 1000
|
|
||||||
BYTE* readSharedSaveFile(char* name, DWORD* size)
|
BYTE* readSharedSaveFile(char* name, DWORD* size)
|
||||||
{
|
{
|
||||||
char filename[512];
|
char filename[512];
|
||||||
@ -151,46 +149,12 @@ void writeSharedSaveFile(char* name, BYTE* data, DWORD size, bool isHardcore)
|
|||||||
strcat(szSaveName,".sss");
|
strcat(szSaveName,".sss");
|
||||||
log_msg("Shared file for saving : %s\n", szSaveName);
|
log_msg("Shared file for saving : %s\n", szSaveName);
|
||||||
|
|
||||||
// if (!MoveFileEx(szTempName, szSaveName, MOVEFILE_WRITE_THROUGH|MOVEFILE_REPLACE_EXISTING))
|
// if (!MoveFileEx(szTempName, szSaveName, MOVEFILE_WRITE_THROUGH|MOVEFILE_REPLACE_EXISTING))
|
||||||
DeleteFile(szSaveName);
|
DeleteFile(szSaveName);
|
||||||
if (!MoveFile(szTempName, szSaveName))
|
if (!MoveFile(szTempName, szSaveName))
|
||||||
log_box("Could not create the shared save file.");
|
log_box("Could not create the shared save file.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void backupSharedSaveFile()
|
|
||||||
{
|
|
||||||
char szBackupName[MAX_PATH];
|
|
||||||
char szSaveName[MAX_PATH];
|
|
||||||
|
|
||||||
D2FogGetSavePath( szSaveName, MAX_PATH-30);
|
|
||||||
strcat(szSaveName, "_LOD_");
|
|
||||||
strcat(szSaveName, sharedStashFilename);
|
|
||||||
strcat(szSaveName,".sss");
|
|
||||||
|
|
||||||
D2FogGetSavePath( szBackupName, MAX_PATH-30);
|
|
||||||
strcat(szBackupName, "_LOD_");
|
|
||||||
strcat(szBackupName, sharedStashFilename);
|
|
||||||
strcat(szBackupName,".sss.backup");
|
|
||||||
|
|
||||||
CopyFile(szSaveName, szBackupName, true);
|
|
||||||
|
|
||||||
if (separateHardSoftStash)
|
|
||||||
{
|
|
||||||
D2FogGetSavePath( szSaveName, MAX_PATH-30);
|
|
||||||
strcat(szSaveName, "_LOD_HC_");
|
|
||||||
strcat(szSaveName, sharedStashFilename);
|
|
||||||
strcat(szSaveName,".sss");
|
|
||||||
|
|
||||||
D2FogGetSavePath( szBackupName, MAX_PATH-30);
|
|
||||||
strcat(szBackupName, "_LOD_HC_");
|
|
||||||
strcat(szBackupName, sharedStashFilename);
|
|
||||||
strcat(szBackupName,".sss.backup");
|
|
||||||
|
|
||||||
CopyFile(szSaveName, szBackupName, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void saveSharedSaveFile(Unit* ptChar, BYTE** data, DWORD* maxSize, DWORD* curSize)
|
void saveSharedSaveFile(Unit* ptChar, BYTE** data, DWORD* maxSize, DWORD* curSize)
|
||||||
{
|
{
|
||||||
*(DWORD *)(*data + *curSize) = FILE_SHAREDSTASH;
|
*(DWORD *)(*data + *curSize) = FILE_SHAREDSTASH;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Change Skill win per level up.
|
Change Skill win per level up.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
#include "skillPerLevelUp.h"
|
#include "skillPerLevelUp.h"
|
||||||
@ -13,6 +13,13 @@
|
|||||||
bool active_SkillPerLevelUpChange=0;
|
bool active_SkillPerLevelUpChange=0;
|
||||||
DWORD skillPerLevelUp=1;
|
DWORD skillPerLevelUp=1;
|
||||||
|
|
||||||
|
FCT_ASM ( caller_changeSkillPerLevelUp_114 )
|
||||||
|
MOV EAX,skillPerLevelUp
|
||||||
|
IMUL EAX,EDI
|
||||||
|
MOV DWORD PTR SS:[ESP+0xC], EAX
|
||||||
|
JMP V2AddPlayerStat
|
||||||
|
}}
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM ( caller_changeSkillPerLevelUp_111 )
|
FCT_ASM ( caller_changeSkillPerLevelUp_111 )
|
||||||
MOV EAX,skillPerLevelUp
|
MOV EAX,skillPerLevelUp
|
||||||
@ -33,21 +40,18 @@ void Install_SkillPerLevelUp()
|
|||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Game for change Skill points win per level up. (SkillPerLevelUp)\n");
|
log_msg("Patch D2Game for change Skill points win per level up. (SkillPerLevelUp)\n");
|
||||||
|
|
||||||
mem_seek R8(D2Game, 42261, 42651, 4ED60, D7AE5, 79695, AA455, EB1E5, EDCA5, 1709D1);
|
mem_seek R8(D2Game, 42261, 42651, 4ED60, D7AE5, 79695, AA455, EB1E5, EDCA5, 1709D1);
|
||||||
if (version_D2Game == V114d) {
|
MEMJ_REF4( V2AddPlayerStat, version_D2Game >= V114d ? caller_changeSkillPerLevelUp_114 : version_D2Game >= V111 ? caller_changeSkillPerLevelUp_111 : caller_changeSkillPerLevelUp);
|
||||||
MEMT_REF4(0x000B68DB, caller_changeSkillPerLevelUp);
|
//6FC7ED5F |. E8 56CB0900 CALL <JMP.&D2Common.#10518>
|
||||||
} else {
|
//02057AE4 |. E8 9F28F3FF CALL <JMP.&D2Common.#10109>
|
||||||
MEMJ_REF4(V2AddPlayerStat, version_D2Game >= V111 ? caller_changeSkillPerLevelUp_111 : caller_changeSkillPerLevelUp);
|
//01FE9694 |. E8 1B0DF9FF CALL <JMP.&D2Common.#10627>
|
||||||
//6FC7ED5F |. E8 56CB0900 CALL <JMP.&D2Common.#10518>
|
//6FCCA454 |. E8 5F01F6FF CALL <JMP.&D2Common.#10762>
|
||||||
//02057AE4 |. E8 9F28F3FF CALL <JMP.&D2Common.#10109>
|
//6FD0B1E4 |. E8 E9F2F1FF CALL <JMP.&D2Common.#10551>
|
||||||
//01FE9694 |. E8 1B0DF9FF CALL <JMP.&D2Common.#10627>
|
//6FD0DCA4 |. E8 FDC6F1FF CALL <JMP.&D2Common.#10645>
|
||||||
//6FCCA454 |. E8 5F01F6FF CALL <JMP.&D2Common.#10762>
|
//005709D0 |. E8 DB680B00 CALL Game.006272B0 ; \Game.006272B0
|
||||||
//6FD0B1E4 |. E8 E9F2F1FF CALL <JMP.&D2Common.#10551>
|
|
||||||
//6FD0DCA4 |. E8 FDC6F1FF CALL <JMP.&D2Common.#10645>
|
|
||||||
}
|
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
bool active_SkillsPoints=0;
|
bool active_SkillsPoints=0;
|
||||||
bool unassignSkillsPointsOneByOne=0;
|
bool unassignSkillsPointsOneForOne=0;
|
||||||
|
|
||||||
int (*getskPoint)(SkillData* ptSkill);
|
int (*getskPoint)(SkillData* ptSkill);
|
||||||
int (*getCharClass)(SkillData* ptSkill);
|
int (*getCharClass)(SkillData* ptSkill);
|
||||||
@ -40,9 +40,9 @@ void UnassignAllSkillsPoints(Unit* ptChar)
|
|||||||
DWORD skillID, keepBonus, maxSkillLevel;
|
DWORD skillID, keepBonus, maxSkillLevel;
|
||||||
int skpoints;
|
int skpoints;
|
||||||
DWORD nbPoints = 0;
|
DWORD nbPoints = 0;
|
||||||
|
|
||||||
void* ptClient = D2GetClient(ptChar,__FILE__,__LINE__);
|
void* ptClient = D2GetClient(ptChar,__FILE__,__LINE__);
|
||||||
SkillData* ptSkill = PCSkills->ptFirstSkill;
|
SkillData* ptSkill = PCSkills->ptFirstSkill;
|
||||||
log_msg("\n\nUNASSIGN SKILL POINTS\n\n");
|
|
||||||
|
|
||||||
while (ptSkill)
|
while (ptSkill)
|
||||||
{
|
{
|
||||||
@ -53,7 +53,7 @@ void UnassignAllSkillsPoints(Unit* ptChar)
|
|||||||
keepBonus = !getSingleSkillValue(ptChar, STATS_ITEM_SINGLESKILL, skillID);
|
keepBonus = !getSingleSkillValue(ptChar, STATS_ITEM_SINGLESKILL, skillID);
|
||||||
maxSkillLevel = D2GetSkillLevel(ptChar, ptSkill, 0);
|
maxSkillLevel = D2GetSkillLevel(ptChar, ptSkill, 0);
|
||||||
skpoints = getskPoint(ptSkill);
|
skpoints = getskPoint(ptSkill);
|
||||||
if (skpoints == -1 || unassignSkillsPointsOneByOne)
|
if (skpoints == -1 || unassignSkillsPointsOneForOne)
|
||||||
{
|
{
|
||||||
D2SetSkillBaseLevel(ptChar, skillID, 0, keepBonus, __FILE__, __LINE__);
|
D2SetSkillBaseLevel(ptChar, skillID, 0, keepBonus, __FILE__, __LINE__);
|
||||||
nbPoints += maxSkillLevel;
|
nbPoints += maxSkillLevel;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Change Stat win per level up.
|
Change Stat win per level up.
|
||||||
|
|
||||||
@ -13,6 +13,13 @@
|
|||||||
bool active_StatPerLevelUpChange=0;
|
bool active_StatPerLevelUpChange=0;
|
||||||
DWORD statPerLevelUp=5;
|
DWORD statPerLevelUp=5;
|
||||||
|
|
||||||
|
FCT_ASM ( caller_changeStatPerLevelUp_114 )
|
||||||
|
MOV EAX,statPerLevelUp
|
||||||
|
IMUL EAX,EDI
|
||||||
|
MOV DWORD PTR SS:[ESP+0xC], EAX
|
||||||
|
JMP V2AddPlayerStat
|
||||||
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_changeStatPerLevelUp_111 )
|
FCT_ASM ( caller_changeStatPerLevelUp_111 )
|
||||||
MOV EAX,statPerLevelUp
|
MOV EAX,statPerLevelUp
|
||||||
IMUL EAX,EBX
|
IMUL EAX,EBX
|
||||||
@ -31,21 +38,18 @@ void Install_StatPerLevelUp()
|
|||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Game for change Stat points win per level up. (StatPerLevelUp)\n");
|
log_msg("Patch D2Game for change Stat points win per level up. (StatPerLevelUp)\n");
|
||||||
|
|
||||||
mem_seek R8(D2Game, 42258, 42648, 4ED55, D7ADA, 7968A, AA44A, EB1DA, EDC9A, 1709C6);
|
mem_seek R8(D2Game, 42258, 42648, 4ED55, D7ADA, 7968A, AA44A, EB1DA, EDC9A, 1709C6);
|
||||||
if (version_D2Game == V114d) {
|
MEMJ_REF4( V2AddPlayerStat, version_D2Game >= V114d ? caller_changeStatPerLevelUp_114 : version_D2Game >= V111 ? caller_changeStatPerLevelUp_111 : caller_changeStatPerLevelUp);
|
||||||
MEMT_REF4(0x000B68E6, caller_changeStatPerLevelUp);
|
//6FC7ED54 |. E8 61CB0900 CALL <JMP.&D2Common.#10518>
|
||||||
} else {
|
//02057AD9 |. E8 AA28F3FF CALL <JMP.&D2Common.#10109>
|
||||||
MEMJ_REF4(V2AddPlayerStat, version_D2Game >= V111 ? caller_changeStatPerLevelUp_111 : caller_changeStatPerLevelUp);
|
//01FE9689 |. E8 260DF9FF CALL <JMP.&D2Common.#10627>
|
||||||
//6FC7ED54 |. E8 61CB0900 CALL <JMP.&D2Common.#10518>
|
//6FCCA449 |. E8 6A01F6FF CALL <JMP.&D2Common.#10762>
|
||||||
//02057AD9 |. E8 AA28F3FF CALL <JMP.&D2Common.#10109>
|
//6FD0B1D9 |. E8 F4F2F1FF CALL <JMP.&D2Common.#10551>
|
||||||
//01FE9689 |. E8 260DF9FF CALL <JMP.&D2Common.#10627>
|
//6FD0DC99 |. E8 08C7F1FF CALL <JMP.&D2Common.#10645>
|
||||||
//6FCCA449 |. E8 6A01F6FF CALL <JMP.&D2Common.#10762>
|
//005709C5 |. E8 E6680B00 CALL Game.006272B0 ; \Game.006272B0
|
||||||
//6FD0B1D9 |. E8 F4F2F1FF CALL <JMP.&D2Common.#10551>
|
|
||||||
//6FD0DC99 |. E8 08C7F1FF CALL <JMP.&D2Common.#10645>
|
|
||||||
}
|
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Unassign Stats Point for futher re-assignment.
|
Unassign Stats Point for futher re-assignment.
|
||||||
|
|
||||||
@ -10,6 +10,7 @@
|
|||||||
#include "plugYFiles.h" // Install_PlugYImagesFiles()
|
#include "plugYFiles.h" // Install_PlugYImagesFiles()
|
||||||
#include "interface_Stats.h" // Install_InterfaceStats()
|
#include "interface_Stats.h" // Install_InterfaceStats()
|
||||||
#include "updateServer.h"
|
#include "updateServer.h"
|
||||||
|
#include "extraOptions.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
@ -41,7 +42,7 @@ void UnassignDex(Unit* ptChar, int nb)
|
|||||||
|
|
||||||
int currentDex, removePtsNb;
|
int currentDex, removePtsNb;
|
||||||
CharStatsBIN* charStats = D2GetCharStatsBIN(ptChar->nPlayerClass);
|
CharStatsBIN* charStats = D2GetCharStatsBIN(ptChar->nPlayerClass);
|
||||||
|
|
||||||
currentDex = D2GetPlayerBaseStat( ptChar, STATS_DEXTERITY, 0 );
|
currentDex = D2GetPlayerBaseStat( ptChar, STATS_DEXTERITY, 0 );
|
||||||
if (currentDex <= charStats->baseDEX) return;
|
if (currentDex <= charStats->baseDEX) return;
|
||||||
removePtsNb = currentDex - charStats->baseDEX >= nb ? nb : currentDex - charStats->baseDEX;
|
removePtsNb = currentDex - charStats->baseDEX >= nb ? nb : currentDex - charStats->baseDEX;
|
||||||
@ -58,14 +59,14 @@ void UnassignVit(Unit* ptChar, int nb)
|
|||||||
|
|
||||||
int currentVit, removePtsNb, removeVitNb, removeStaNb;
|
int currentVit, removePtsNb, removeVitNb, removeStaNb;
|
||||||
CharStatsBIN* charStats = D2GetCharStatsBIN(ptChar->nPlayerClass);
|
CharStatsBIN* charStats = D2GetCharStatsBIN(ptChar->nPlayerClass);
|
||||||
|
|
||||||
currentVit = D2GetPlayerBaseStat( ptChar, STATS_VITALITY, 0 );
|
currentVit = D2GetPlayerBaseStat( ptChar, STATS_VITALITY, 0 );
|
||||||
if (currentVit <= charStats->baseVIT) return;
|
if (currentVit <= charStats->baseVIT) return;
|
||||||
removePtsNb = currentVit - charStats->baseVIT >= nb ? nb : currentVit - charStats->baseVIT;
|
removePtsNb = currentVit - charStats->baseVIT >= nb ? nb : currentVit - charStats->baseVIT;
|
||||||
if (currentVit - removePtsNb < 1) removePtsNb = currentVit - 1;
|
if (currentVit - removePtsNb < 1) removePtsNb = currentVit - 1;
|
||||||
removeVitNb = removePtsNb * (charStats->lifePerVitality << 6);
|
removeVitNb = removePtsNb * (charStats->lifePerVitality << 6);
|
||||||
removeStaNb = removePtsNb * (charStats->staminaPerVitality << 6);
|
removeStaNb = removePtsNb * (charStats->staminaPerVitality << 6);
|
||||||
|
|
||||||
log_msg("Start Unassign Vitality (cur %d, base %d, rem %d)\n",currentVit,charStats->baseVIT,removePtsNb);
|
log_msg("Start Unassign Vitality (cur %d, base %d, rem %d)\n",currentVit,charStats->baseVIT,removePtsNb);
|
||||||
D2AddPlayerStat( ptChar, STATS_VITALITY, -removePtsNb ,0 );
|
D2AddPlayerStat( ptChar, STATS_VITALITY, -removePtsNb ,0 );
|
||||||
D2AddPlayerStat( ptChar, STATS_MAXHP, -removeVitNb ,0 );
|
D2AddPlayerStat( ptChar, STATS_MAXHP, -removeVitNb ,0 );
|
||||||
@ -79,13 +80,13 @@ void UnassignEne(Unit* ptChar, int nb)
|
|||||||
|
|
||||||
int currentEne, removePtsNb, removeManNb;
|
int currentEne, removePtsNb, removeManNb;
|
||||||
CharStatsBIN* charStats = D2GetCharStatsBIN(ptChar->nPlayerClass);
|
CharStatsBIN* charStats = D2GetCharStatsBIN(ptChar->nPlayerClass);
|
||||||
|
|
||||||
currentEne = D2GetPlayerBaseStat( ptChar, STATS_ENERGY, 0);
|
currentEne = D2GetPlayerBaseStat( ptChar, STATS_ENERGY, 0);
|
||||||
if (currentEne <= charStats->baseENE) return;
|
if (currentEne <= charStats->baseENE) return;
|
||||||
removePtsNb = currentEne - charStats->baseENE >= nb ? nb : currentEne - charStats->baseENE;
|
removePtsNb = currentEne - charStats->baseENE >= nb ? nb : currentEne - charStats->baseENE;
|
||||||
if (currentEne - removePtsNb < 1) removePtsNb = currentEne - 1;
|
if (currentEne - removePtsNb < 1) removePtsNb = currentEne - 1;
|
||||||
removeManNb = removePtsNb * (charStats->manaPerMagic << 6);
|
removeManNb = removePtsNb * (charStats->manaPerMagic << 6);
|
||||||
|
|
||||||
log_msg("Start Unassign Energy (cur %d, base %d, rem %d)\n",currentEne,charStats->baseENE,removePtsNb);
|
log_msg("Start Unassign Energy (cur %d, base %d, rem %d)\n",currentEne,charStats->baseENE,removePtsNb);
|
||||||
D2AddPlayerStat( ptChar, STATS_ENERGY, -removePtsNb ,0 );
|
D2AddPlayerStat( ptChar, STATS_ENERGY, -removePtsNb ,0 );
|
||||||
D2AddPlayerStat( ptChar, STATS_MAXMANA, -removeManNb ,0 );
|
D2AddPlayerStat( ptChar, STATS_MAXMANA, -removeManNb ,0 );
|
||||||
@ -163,9 +164,12 @@ void STDCALL printDisabledStatsBtn(WORD statID, sDrawImageInfo* data, DWORD x, D
|
|||||||
_snwprintf(text, sizeof(text) - 1, getLocalString(STR_STATS_UNASSIGN_WITH_LIMIT), limitValueToShiftClick);
|
_snwprintf(text, sizeof(text) - 1, getLocalString(STR_STATS_UNASSIGN_WITH_LIMIT), limitValueToShiftClick);
|
||||||
else
|
else
|
||||||
_snwprintf(text, sizeof(text) - 1, getLocalString(STR_STATS_UNASSIGN_WITHOUT_LIMIT));
|
_snwprintf(text, sizeof(text) - 1, getLocalString(STR_STATS_UNASSIGN_WITHOUT_LIMIT));
|
||||||
wcscat(text,L"\n");
|
if (active_DisplayBaseStatsValue)
|
||||||
int len = wcslen(text);
|
{
|
||||||
_snwprintf(text + len, sizeof(text) - len, getLocalString(STR_STATS_BASE_MIN), statValue, minValue);
|
wcscat(text,L"\n");
|
||||||
|
int len = wcslen(text);
|
||||||
|
_snwprintf(text + len, sizeof(text) - len, getLocalString(STR_STATS_BASE_MIN), statValue, minValue);
|
||||||
|
}
|
||||||
D2SetFont(1);
|
D2SetFont(1);
|
||||||
D2PrintPopup(text, x+18, y-32, WHITE, 1);
|
D2PrintPopup(text, x+18, y-32, WHITE, 1);
|
||||||
}
|
}
|
||||||
@ -250,12 +254,12 @@ END_UNASSGNSTATS:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_setValue_114 )
|
FCT_ASM ( caller_setValue_114 )
|
||||||
MOV CL, 0x3A
|
MOV CL,0x3A
|
||||||
OR DX, WORD PTR DS : [ESI]
|
OR DX,WORD PTR DS:[ESI]
|
||||||
ADD DL, currentMsgID
|
ADD DL, currentMsgID
|
||||||
MOV CH, DL
|
MOV CH, DL
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_setValue_111 )
|
FCT_ASM ( caller_setValue_111 )
|
||||||
@ -297,18 +301,18 @@ DWORD STDCALL pushDown (DWORD num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_pushDown_114 )
|
FCT_ASM( caller_pushDown_114 )
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
PUSH DWORD PTR SS : [EBP + 0x8]
|
PUSH DWORD PTR SS:[EBP+0x8]
|
||||||
CALL pushDown
|
CALL pushDown
|
||||||
POP EDX
|
POP EDX
|
||||||
TEST EAX, EAX
|
TEST EAX, EAX
|
||||||
JNZ end_pushDown
|
JNZ end_pushDown
|
||||||
SUB DWORD PTR SS : [ESP], 0x22
|
SUB DWORD PTR SS:[ESP],0x22
|
||||||
RETN
|
RETN
|
||||||
end_pushDown :
|
end_pushDown :
|
||||||
MOV EAX, DWORD PTR SS : [EBP + 0x8]
|
MOV EAX, DWORD PTR SS:[EBP+8]
|
||||||
LEA ECX, DWORD PTR DS : [EAX * 8]
|
LEA ECX, DWORD PTR DS:[EAX*8]
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_pushDown_111 )
|
FCT_ASM ( caller_pushDown_111 )
|
||||||
@ -356,56 +360,58 @@ void Install_StatsPoints()
|
|||||||
memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088
|
memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088
|
||||||
memt_byte( version_D2Client == V114d ? 0x4D : 0x4C, V8(D2Client, 12, 12, 13, 13, 13, 13, 13, 13, 12) );
|
memt_byte( version_D2Client == V114d ? 0x4D : 0x4C, V8(D2Client, 12, 12, 13, 13, 13, 13, 13, 13, 12) );
|
||||||
memt_byte( version_D2Client == V114d ? 0xF8 : 0x24, 0x90 ); // NOP
|
memt_byte( version_D2Client == V114d ? 0xF8 : 0x24, 0x90 ); // NOP
|
||||||
if (version_D2Client < V114d) memt_byte( V8(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C, 1C, 1C), 0x90 ); // NOP (V109d:0x20 , V110:0x14
|
if (version_D2Client < V114a) memt_byte( V8(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C, 1C, 53), 0x90 ); // NOP (V109d:0x20 , V110:0x14
|
||||||
//6FAD0073 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
|
//6FAD0073 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
|
||||||
//6FB32BBA > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB32BBA > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
//6FB3963A > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB3963A > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
//6FB1B59A > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB1B59A > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
//6FB6D1B5 |> 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB6D1B5 |> 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
//6FB6F955 > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
//6FB6F955 > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||||
|
//004A7FFB > 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
|
||||||
|
//004A7FFE . 53 PUSH EBX ; /Arg3
|
||||||
|
|
||||||
//print our buttons
|
//print our buttons
|
||||||
mem_seek R8(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E, BF9DE, A808C);
|
mem_seek R8(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E, BF9DE, A808C);
|
||||||
if (version_D2Client == V114d) {
|
MEMJ_REF4( D2PrintImage, caller_printUnassignStatsBtn);
|
||||||
MEMT_REF4(0x0004E3F0, caller_printUnassignStatsBtn);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2PrintImage, caller_printUnassignStatsBtn);
|
|
||||||
}
|
|
||||||
//6FB32C53 . E8 82A3F8FF CALL <JMP.&D2gfx.#10047>
|
//6FB32C53 . E8 82A3F8FF CALL <JMP.&D2gfx.#10047>
|
||||||
//6FB396D3 . E8 D238F8FF CALL <JMP.&D2gfx.#10044>
|
//6FB396D3 . E8 D238F8FF CALL <JMP.&D2gfx.#10044>
|
||||||
//6FB1B636 . E8 431AFAFF CALL <JMP.&D2gfx.#10024>
|
//6FB1B636 . E8 431AFAFF CALL <JMP.&D2gfx.#10024>
|
||||||
//6FB6D23D . E8 54FEF4FF CALL <JMP.&D2gfx.#10041>
|
//6FB6D23D . E8 54FEF4FF CALL <JMP.&D2gfx.#10041>
|
||||||
//6FB6F9DD . E8 ECD5F4FF CALL <JMP.&D2gfx.#10042>
|
//6FB6F9DD . E8 ECD5F4FF CALL <JMP.&D2gfx.#10042>
|
||||||
|
//004A808B . E8 F0E30400 CALL Game.004F6480 ; \Game.004F6480
|
||||||
|
|
||||||
// Always manage push down.
|
// Always manage push down.
|
||||||
mem_seek R8(D2Client, 2AA7B, 2AA6B, 3134D, 827D9, 89259, 6B1B9, BCDD9, BF579, A77E4);
|
mem_seek R8(D2Client, 2AA7B, 2AA6B, 3134D, 827D9, 89259, 6B1B9, BCDD9, BF579, A77E4);
|
||||||
memt_byte( 0x74, 0x90 ); // NOP
|
memt_byte( 0x74, 0x90 ); // NOP
|
||||||
memt_byte(version_D2Client == V114d ? 0x62 : 0x4E, 0x90); // NOP
|
memt_byte( version_D2Client == V114d ? 0x62 : 0x4E, 0x90 ); // NOP
|
||||||
|
|
||||||
//6FAD134D 74 4E JE SHORT D2Client.6FAD139D
|
//6FAD134D 74 4E JE SHORT D2Client.6FAD139D
|
||||||
//6FB327D9 . 74 4E JE SHORT D2Client.6FB32829
|
//6FB327D9 . 74 4E JE SHORT D2Client.6FB32829
|
||||||
//6FB39259 . 74 4E JE SHORT D2Client.6FB392A9
|
//6FB39259 . 74 4E JE SHORT D2Client.6FB392A9
|
||||||
//6FB1B1B9 74 4E JE SHORT D2Client.6FB1B209
|
//6FB1B1B9 74 4E JE SHORT D2Client.6FB1B209
|
||||||
//6FB6CDD9 . 74 4E JE SHORT D2Client.6FB6CE29
|
//6FB6CDD9 . 74 4E JE SHORT D2Client.6FB6CE29
|
||||||
//6FB6F579 . 74 4E JE SHORT D2Client.6FB6F5C9
|
//6FB6F579 . 74 4E JE SHORT D2Client.6FB6F5C9
|
||||||
|
//004A77E4 . 74 62 JE SHORT Game.004A7848
|
||||||
|
|
||||||
if ( version_D2Client >= V111 )
|
if ( version_D2Client >= V114d )
|
||||||
{
|
{
|
||||||
// On Push down.
|
// On Push down.
|
||||||
mem_seek R8(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 6B224, BCE44, BF5E4, A7863);
|
mem_seek R8(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 6B224, BCE44, BF5E4, A7863);
|
||||||
if (version_D2Client == V114d) {
|
memt_byte(0x8B, 0xE8);
|
||||||
memt_byte(0x8B, 0xE8);
|
MEMT_REF4(0x0C8D0845, caller_pushDown_114);
|
||||||
MEMT_REF4(0x0C8D0845, caller_pushDown_114);
|
memt_byte(0xC5, 0x90);
|
||||||
memt_byte(0xC5, 0x90);
|
memt_dword(0x00000000, 0x90909090);
|
||||||
memt_dword(0x00000000, 0x90909090);
|
//004A7863 > 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
|
||||||
} else {
|
//004A7866 . 8D0CC5 0000000>LEA ECX,DWORD PTR DS:[EAX*8]
|
||||||
memt_byte(0x6B, 0xE8);
|
}
|
||||||
MEMT_REF4(0x01BF0ED2, caller_pushDown_111);
|
else if ( version_D2Client >= V111 )
|
||||||
memt_byte(0x00, 0x6B); // IMUL EDX,EDX,0E
|
{
|
||||||
memt_byte(0x00, 0xD2);
|
// On Push down.
|
||||||
memt_byte(0x00, 0x0E);
|
mem_seek R8(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 6B224, BCE44, BF5E4, A7863);
|
||||||
}
|
memt_byte( 0x6B, 0xE8 );
|
||||||
|
MEMT_REF4( 0x01BF0ED2, caller_pushDown_111);
|
||||||
|
memt_byte( 0x00, 0x6B ); // IMUL EDX,EDX,0E
|
||||||
|
memt_byte( 0x00, 0xD2 );
|
||||||
|
memt_byte( 0x00, 0x0E );
|
||||||
//6FB32844 > 6BD2 0E IMUL EDX,EDX,0E
|
//6FB32844 > 6BD2 0E IMUL EDX,EDX,0E
|
||||||
//6FB32847 . BF 01000000 MOV EDI,1
|
//6FB32847 . BF 01000000 MOV EDI,1
|
||||||
//6FB392C4 > 6BD2 0E IMUL EDX,EDX,0E
|
//6FB392C4 > 6BD2 0E IMUL EDX,EDX,0E
|
||||||
@ -427,21 +433,21 @@ void Install_StatsPoints()
|
|||||||
//6FAD13B8 8D04D5 00000000 LEA EAX,DWORD PTR DS:[EDX*8]
|
//6FAD13B8 8D04D5 00000000 LEA EAX,DWORD PTR DS:[EDX*8]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ( version_D2Client >= V110 )
|
if ( version_D2Client >= V110 )
|
||||||
{
|
{
|
||||||
// Always manage push up.
|
// Always manage push up.
|
||||||
mem_seek R8(D2Client, 0000, 0000, 3152E, 83869, 8A2E9, 6C249, BDE49, C05E9, A7976);
|
mem_seek R8(D2Client, 0000, 0000, 3152E, 83869, 8A2E9, 6C249, BDE49, C05E9, A7976);
|
||||||
memt_byte( version_D2Client == V114d ? 0x0F : 0x74, 0x90 ); // NOP
|
memt_byte( version_D2Client == V114d ? 0x0F : 0x74, 0x90 ); // NOP
|
||||||
memt_byte(version_D2Client == V114d ? 0x84 : version_D2Client >= V111 ? 0x65 : 0x68, 0x90 ); // NOP
|
memt_byte( version_D2Client == V114d ? 0x84 : version_D2Client >= V111 ? 0x65 : 0x68, 0x90 ); // NOP
|
||||||
if (version_D2Client == V114d) {
|
if (version_D2Client == V114d) memt_dword(0x000000BB, 0x90909090);
|
||||||
memt_dword(0x000000BB, 0x90909090);
|
|
||||||
}
|
|
||||||
//6FAD152E 74 68 JE SHORT D2Client.6FAD1598
|
//6FAD152E 74 68 JE SHORT D2Client.6FAD1598
|
||||||
//6FB33869 . 74 65 JE SHORT D2Client.6FB338D0
|
//6FB33869 . 74 65 JE SHORT D2Client.6FB338D0
|
||||||
//6FB3A2E9 . 74 65 JE SHORT D2Client.6FB3A350
|
//6FB3A2E9 . 74 65 JE SHORT D2Client.6FB3A350
|
||||||
//6FB1C249 74 65 JE SHORT D2Client.6FB1C2B0
|
//6FB1C249 74 65 JE SHORT D2Client.6FB1C2B0
|
||||||
//6FB6DE49 . 74 65 JE SHORT D2Client.6FB6DEB0
|
//6FB6DE49 . 74 65 JE SHORT D2Client.6FB6DEB0
|
||||||
//6FB705E9 . 74 65 JE SHORT D2Client.6FB70650
|
//6FB705E9 . 74 65 JE SHORT D2Client.6FB70650
|
||||||
|
//004A7976 |. 0F84 BB000000 JE Game.004A7A37
|
||||||
|
|
||||||
// Unassign stats point when ctrl is push.
|
// Unassign stats point when ctrl is push.
|
||||||
mem_seek R8(D2Client, 0000, 0000, 315D3, 8391B, 8A39B, 6C2FB, BDEFB, C069B, A79F2);
|
mem_seek R8(D2Client, 0000, 0000, 315D3, 8391B, 8A39B, 6C2FB, BDEFB, C069B, A79F2);
|
||||||
@ -459,6 +465,8 @@ void Install_StatsPoints()
|
|||||||
//6FB6DEFE . 7C 07 JL SHORT D2Client.6FB6DF07
|
//6FB6DEFE . 7C 07 JL SHORT D2Client.6FB6DF07
|
||||||
//6FB7069B . 66:85C0 TEST AX,AX
|
//6FB7069B . 66:85C0 TEST AX,AX
|
||||||
//6FB7069E . 7C 07 JL SHORT D2Client.6FB706A7
|
//6FB7069E . 7C 07 JL SHORT D2Client.6FB706A7
|
||||||
|
//004A79F2 |. 66:85C0 TEST AX,AX
|
||||||
|
//004A79F5 |. 7C 07 JL SHORT Game.004A79FE
|
||||||
} else {
|
} else {
|
||||||
// Always manage push up.
|
// Always manage push up.
|
||||||
mem_seek R8(D2Client, 2AC55, 2AC45, 0000, 0000, 0000, 0000, 0000, 0000, 0000);
|
mem_seek R8(D2Client, 2AC55, 2AC45, 0000, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||||
@ -478,16 +486,14 @@ void Install_StatsPoints()
|
|||||||
mem_seek R8(D2Client, 2AD02, 2ACF2, 31611, 8395E, 8A3DE, 6C33E, BDF3E, C06DE, A7A29);
|
mem_seek R8(D2Client, 2AD02, 2ACF2, 31611, 8395E, 8A3DE, 6C33E, BDF3E, C06DE, A7A29);
|
||||||
if ( version_D2Client >= V111 ) {
|
if ( version_D2Client >= V111 ) {
|
||||||
memt_byte( version_D2Client == V114d ? 0xB1 : 0x66, 0xE8 ); // CALL
|
memt_byte( version_D2Client == V114d ? 0xB1 : 0x66, 0xE8 ); // CALL
|
||||||
if (version_D2Client == V114d) {
|
MEMT_REF4( version_D2Client == V114d ? 0x160B663A : 0x15244C89, version_D2Client == V114d ? caller_setValue_114 : caller_setValue_111);
|
||||||
MEMT_REF4(0x160B663A, caller_setValue_114);
|
|
||||||
} else {
|
|
||||||
MEMT_REF4(0x15244C89, caller_setValue_111);
|
|
||||||
}
|
|
||||||
//6FB3395E . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX
|
//6FB3395E . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX
|
||||||
//6FB3A3DE . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX
|
//6FB3A3DE . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX
|
||||||
//6FB1C33E . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX ; |
|
//6FB1C33E . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX ; |
|
||||||
//6FB6DF3E . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX ; |
|
//6FB6DF3E . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX ; |
|
||||||
//6FB706DE . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX ; |
|
//6FB706DE . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX ; |
|
||||||
|
//004A7A29 |. B1 3A |MOV CL,3A
|
||||||
|
//004A7A2B |. 66:0B16 |OR DX,WORD PTR DS:[ESI]
|
||||||
} else {
|
} else {
|
||||||
MEMC_REF4( D2SendToServer3, caller_setValue);
|
MEMC_REF4( D2SendToServer3, caller_setValue);
|
||||||
//6FAD1610 . E8 7BC3FDFF CALL D2Client.6FAAD990
|
//6FAD1610 . E8 7BC3FDFF CALL D2Client.6FAAD990
|
||||||
@ -534,6 +540,7 @@ void Install_StatsLimitShiftClick()
|
|||||||
//6FB1C2F5 . FF15 10F1B76F CALL DWORD PTR DS:[<&USER32.GetKeyState>>; \GetKeyState
|
//6FB1C2F5 . FF15 10F1B76F CALL DWORD PTR DS:[<&USER32.GetKeyState>>; \GetKeyState
|
||||||
//6FB6DEF5 . FF15 04F1B76F CALL DWORD PTR DS:[<&USER32.GetKeyState>>; \GetKeyState
|
//6FB6DEF5 . FF15 04F1B76F CALL DWORD PTR DS:[<&USER32.GetKeyState>>; \GetKeyState
|
||||||
//6FB70695 . FF15 2001B86F CALL DWORD PTR DS:[<&USER32.GetKeyState>>; \GetKeyState
|
//6FB70695 . FF15 2001B86F CALL DWORD PTR DS:[<&USER32.GetKeyState>>; \GetKeyState
|
||||||
|
//004A79EC |. FF15 5CC46C00 CALL DWORD PTR DS:[<&USER32.GetKeyState>>; \GetKeyState
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -1,57 +1,70 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Uber Quest Management.
|
Uber Quest Management.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
#include "uberQuest.h"
|
#include "uberQuest.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
bool active_UberQuest=0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
void* ptQuest = D2GetPlayerData(ptChar)->ptQuest[ptGame->difficultyLevel];
|
|
||||||
if (D2CheckQuestState(ptGame->game10F4[0xC],4,0xB) ||
|
|
||||||
D2CheckQuestState(ptQuest,4,0xA) ||
|
|
||||||
ptGame->ptIsLodGame && !D2CheckQuestState(ptQuest,0x28,0)
|
|
||||||
// !ptGame->ptIsLodGame && D2CheckQuestState(ptQuest,0x1A,0)TODO for !ptGame->ptIsLodGame...
|
|
||||||
{
|
|
||||||
// d2_assert(!ptChar,"openPandPortal : ptChar==NULL",__FILE__,__LINE__);
|
|
||||||
// ptChar->v6E = 0x14;
|
|
||||||
// ptChar->v70 = ptChar;
|
|
||||||
// D2Common10148(ptChar);
|
|
||||||
// ptChar->flag400 = 1;
|
|
||||||
// return 0;
|
|
||||||
}
|
|
||||||
Room* = ptRoom = D2GetRoom(ptChar);
|
|
||||||
if (D2GetLevelID(ptRoom) != 1) return 0;
|
|
||||||
Position pos1;
|
|
||||||
D2GetPosition(ptChar, &pos1);
|
|
||||||
void* ptPortal = NULL;
|
|
||||||
D2Game02059FE0(ptRoom,&pos1,3,0x400,&ptPortal,0x64);
|
|
||||||
if (!ptPortal) return 0;
|
|
||||||
Position pos2;
|
|
||||||
pos2.x = pos1.x;
|
|
||||||
pos2.y = pos1.y;
|
|
||||||
testing crash useless...
|
|
||||||
D2GetDropRoom(ptRoom, &pos2, &pos2,3,0x3E01,0xC01,0);
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
void* FASTCALL D2Game01F81090(Room* ptRoom, DWORD x, DWORD y);//0x1090
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define OBJECT_PERMANENT_PORTAL 0x3C
|
#define OBJECT_PERMANENT_PORTAL 0x3C
|
||||||
#define LEVEL_ACT5TOWN 109
|
#define LEVEL_ACT5TOWN 109
|
||||||
#define LEVEL_ACT5_PANDEMONIUM1 133
|
#define LEVEL_ACT5_PANDEMONIUM1 133
|
||||||
#define LEVEL_ACT5_PANDEMONIUM2 134
|
#define LEVEL_ACT5_PANDEMONIUM2 134
|
||||||
#define LEVEL_ACT5_PANDEMONIUM3 135
|
#define LEVEL_ACT5_PANDEMONIUM3 135
|
||||||
#define LEVEL_ACT5_PANDEMONIUM_FINAL 136
|
#define LEVEL_ACT5_PANDEMONIUM_FINAL 136
|
||||||
|
|
||||||
|
#define UBER_IZUAL_ID 706
|
||||||
|
#define UBER_ANDARIEL_ID 707
|
||||||
|
#define UBER_DURIEL_ID 708
|
||||||
|
#define UBER_MEPHISTO_ID 704
|
||||||
|
#define UBER_DIABLO_ID 705
|
||||||
|
#define UBER_BAAL_ID 709
|
||||||
|
|
||||||
|
#define UBER_MEPHISTO_SQUELETON 725
|
||||||
|
#define UBER_MEPHISTO_ARCHER 726
|
||||||
|
#define UBER_MEPHISTO_FIRE 727
|
||||||
|
#define UBER_MEPHISTO_LIGHTNING 728
|
||||||
|
#define UBER_MEPHISTO_COLD 729
|
||||||
|
#define UBER_MEPHISTO_POISON 730
|
||||||
|
#define UBER_BAAL_DARK_LORD 731
|
||||||
|
#define UBER_BAAL_SPECTER 732
|
||||||
|
#define UBER_DIABLO_PIT_LORD 711
|
||||||
|
|
||||||
|
|
||||||
|
bool active_UberQuest = false;
|
||||||
|
DWORD UberMephistoX = 25130;
|
||||||
|
DWORD UberMephistoY = 5143;
|
||||||
|
DWORD UberDiabloX = 25139;
|
||||||
|
DWORD UberDiabloY = 5139;
|
||||||
|
DWORD UberBaalX = 25139;
|
||||||
|
DWORD UberBaalY = 5135;
|
||||||
|
|
||||||
|
bool active_UberMinions = true;
|
||||||
|
DWORD UberMephistoNbMinions = 6;
|
||||||
|
DWORD UberMephistoMinions[] = {UBER_MEPHISTO_SQUELETON, UBER_MEPHISTO_ARCHER, UBER_MEPHISTO_FIRE, UBER_MEPHISTO_LIGHTNING, UBER_MEPHISTO_COLD, UBER_MEPHISTO_POISON};
|
||||||
|
int UberMephistoSpawnPercent = 80;
|
||||||
|
DWORD UberMephistoSpawnRadius = 30;
|
||||||
|
DWORD UberBaalNbMinions = 2;
|
||||||
|
DWORD UberBaalMinions[] = {UBER_BAAL_DARK_LORD, UBER_BAAL_SPECTER};
|
||||||
|
int UberBaalSpawnPercent = 30;
|
||||||
|
DWORD UberBaalSpawnRadius = 30;
|
||||||
|
DWORD UberDiabloNbMinions = 1;
|
||||||
|
DWORD UberDiabloMinions[] = {UBER_DIABLO_PIT_LORD};
|
||||||
|
int UberDiabloSpawnPercent = 30;
|
||||||
|
DWORD UberDiabloSpawnRadius = 30;
|
||||||
|
|
||||||
|
bool active_UberDiabloRushTweekAI = false;
|
||||||
|
bool active_UberBaalTeleportTweekAI = false;
|
||||||
|
bool active_UberBaalChillingArmorTweekAI = false;
|
||||||
|
int uberBaalChillingArmorTimer = 6000;
|
||||||
|
|
||||||
|
int uberBaalChillingArmorLastFrame = 0;
|
||||||
|
|
||||||
static struct
|
static struct
|
||||||
{
|
{
|
||||||
union{
|
union{
|
||||||
@ -72,39 +85,48 @@ static struct
|
|||||||
int count1;
|
int count1;
|
||||||
int count2;
|
int count2;
|
||||||
int count3;
|
int count3;
|
||||||
int count4;
|
|
||||||
int count5;
|
|
||||||
int count6;
|
|
||||||
Room* room1;
|
|
||||||
Room* room2;
|
|
||||||
Room* room3;
|
|
||||||
Room* room4;
|
|
||||||
Room* room5;
|
|
||||||
Room* room6;
|
|
||||||
} questState;
|
} questState;
|
||||||
|
|
||||||
|
|
||||||
|
int GetNbMonsters(Level* level, Position position, int radius);
|
||||||
|
int GetNbMonsters(Level* level);
|
||||||
|
|
||||||
|
bool IsInRoom(Room* ptRoom, DWORD x, DWORD y)
|
||||||
|
{
|
||||||
|
DWORD startX = version_D2Game > V112 ? ptRoom->startX : *((DWORD*)ptRoom + 6);
|
||||||
|
DWORD startY = version_D2Game > V112 ? ptRoom->startY : *((DWORD*)ptRoom + 7);
|
||||||
|
DWORD sizeX = version_D2Game > V112 ? ptRoom->sizeX : *((DWORD*)ptRoom + 8);
|
||||||
|
DWORD sizeY = version_D2Game > V112 ? ptRoom->sizeY : *((DWORD*)ptRoom + 9);
|
||||||
|
return x >= startX && x <= startX + sizeX &&
|
||||||
|
y >= startY && y <= startY + sizeY;
|
||||||
|
}
|
||||||
|
|
||||||
|
double Distance(Position p1, Position p2)
|
||||||
|
{
|
||||||
|
return sqrt((double)(p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
|
||||||
|
}
|
||||||
|
|
||||||
void resetQuestState()
|
void resetQuestState()
|
||||||
{
|
{
|
||||||
ZeroMemory(&questState,sizeof(questState));
|
ZeroMemory(&questState,sizeof(questState));
|
||||||
questState.count1 = 10 + RANDOM(10);
|
questState.count1 = 10 + RANDOM(10);
|
||||||
questState.count2 = 20 + RANDOM(40);
|
questState.count2 = 20 + RANDOM(40);
|
||||||
questState.count3 = 10 + RANDOM(20);
|
questState.count3 = 10 + RANDOM(20);
|
||||||
int value = 5 + RANDOM(10);
|
uberBaalChillingArmorLastFrame = 0;
|
||||||
questState.count4 = value + RANDOM(4);
|
log_msg("Uber Quest State : %d %d %d\n",questState.count1, questState.count2, questState.count3);
|
||||||
questState.count5 = value + RANDOM(4);
|
|
||||||
questState.count6 = value + RANDOM(4);
|
|
||||||
log_msg("Uber Quest State : %d %d %d %d %d %d\n",questState.count1, questState.count2, questState.count3, questState.count4, questState.count5, questState.count6);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD openPortalOnLevel(Game* ptGame, Unit* ptChar, DWORD levelID)
|
DWORD openPortalOnLevel(Game* ptGame, Unit* ptChar, DWORD levelID)
|
||||||
{
|
{
|
||||||
log_msg("openning portal to level %d\n",levelID);
|
log_msg("Open portal to level %d\n", levelID);
|
||||||
Room* ptRoom = D2GetRoom(ptChar);
|
Room* ptRoom = D2GetRoom(ptChar);
|
||||||
if ( D2GetLevelID(ptRoom) != LEVEL_ACT5TOWN ) return 0;
|
if ( D2GetLevelID(ptRoom) != LEVEL_ACT5TOWN ) return 0;
|
||||||
|
|
||||||
//Get position in the room
|
//Get position in the room
|
||||||
Position pos;
|
Position pos;
|
||||||
D2GetPosition(ptChar, &pos);
|
D2GetPosition(ptChar, &pos);
|
||||||
|
log_msg("ptChar pos : %d %d\n", pos.x, pos.y);
|
||||||
|
|
||||||
if (!D2GetDropRoom(ptRoom, &pos, &pos, 3, 0x3E01, 0xC01, 0)) return 0;
|
if (!D2GetDropRoom(ptRoom, &pos, &pos, 3, 0x3E01, 0xC01, 0)) return 0;
|
||||||
ptRoom = D2TestPositionInRoom(ptRoom, pos.x, pos.y);
|
ptRoom = D2TestPositionInRoom(ptRoom, pos.x, pos.y);
|
||||||
if (!ptRoom) return 0;
|
if (!ptRoom) return 0;
|
||||||
@ -124,11 +146,10 @@ DWORD openPortalOnLevel(Game* ptGame, Unit* ptChar, DWORD levelID)
|
|||||||
DWORD FASTCALL openPandPortal(Game* ptGame, Unit* ptChar)
|
DWORD FASTCALL openPandPortal(Game* ptGame, Unit* ptChar)
|
||||||
{
|
{
|
||||||
log_msg("openPandPortal\n");
|
log_msg("openPandPortal\n");
|
||||||
Position pos;
|
|
||||||
D2GetPosition(ptChar, &pos);
|
|
||||||
log_msg("ptChar pos : %d %d\n",pos.x,pos.y);
|
|
||||||
|
|
||||||
if (ptGame->difficultyLevel != D2DM_HELL) return 0;
|
if (ptGame->difficultyLevel != D2DM_HELL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
int available[3];
|
int available[3];
|
||||||
int nbAvailable=0;
|
int nbAvailable=0;
|
||||||
if (!questState.portal1Opened) available[nbAvailable++]=LEVEL_ACT5_PANDEMONIUM1;
|
if (!questState.portal1Opened) available[nbAvailable++]=LEVEL_ACT5_PANDEMONIUM1;
|
||||||
@ -141,45 +162,30 @@ DWORD FASTCALL openPandPortal(Game* ptGame, Unit* ptChar)
|
|||||||
|
|
||||||
int ret = openPortalOnLevel(ptGame, ptChar, selectedTargetLevel);
|
int ret = openPortalOnLevel(ptGame, ptChar, selectedTargetLevel);
|
||||||
|
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
if (selectedTargetLevel == LEVEL_ACT5_PANDEMONIUM1) questState.portal1Opened = 1;
|
if (selectedTargetLevel == LEVEL_ACT5_PANDEMONIUM1) questState.portal1Opened = 1;
|
||||||
else if (selectedTargetLevel == LEVEL_ACT5_PANDEMONIUM2) questState.portal2Opened = 1;
|
else if (selectedTargetLevel == LEVEL_ACT5_PANDEMONIUM2) questState.portal2Opened = 1;
|
||||||
else if (selectedTargetLevel == LEVEL_ACT5_PANDEMONIUM3) questState.portal3Opened = 1;
|
else if (selectedTargetLevel == LEVEL_ACT5_PANDEMONIUM3) questState.portal3Opened = 1;
|
||||||
}
|
}
|
||||||
log_msg("openPandPortal ending\n\n");
|
|
||||||
return ret;//normally return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD FASTCALL openPandFinalPortal(Game* ptGame, Unit* ptChar)
|
DWORD FASTCALL openPandFinalPortal(Game* ptGame, Unit* ptChar)
|
||||||
{
|
{
|
||||||
log_msg("openPandFinalPortal\n");
|
log_msg("openPandFinalPortal\n");
|
||||||
Position pos;
|
|
||||||
D2GetPosition(ptChar, &pos);
|
|
||||||
log_msg("ptChar pos : %d %d",pos.x,pos.y);
|
|
||||||
int ret = openPortalOnLevel(ptGame, ptChar, LEVEL_ACT5_PANDEMONIUM_FINAL);
|
|
||||||
log_msg("openPandFinalPortal ending\n");
|
|
||||||
return ret;//normally return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
Room* selectRoom(Game* ptGame, Room* ptCurrentRoom, DWORD level)
|
if (ptGame->difficultyLevel != D2DM_HELL)
|
||||||
{
|
return 0;
|
||||||
/* Room* tab[200];
|
|
||||||
nbRoom=0;
|
return openPortalOnLevel(ptGame, ptChar, LEVEL_ACT5_PANDEMONIUM_FINAL);
|
||||||
Room* ptRoom = ptGame->mapAct[5]->ptFirstRoom;
|
|
||||||
while (ptRoom);
|
|
||||||
if(!ptCurrentRoom->nbNearRooms) return ptCurrentRoom;
|
|
||||||
int targetRoomNum = RANDOM(ptCurrentRoom->nbNearRooms);
|
|
||||||
Room* ptRoom = ptCurrentRoom->ptNearRooms;
|
|
||||||
while (targetRoomNum--)
|
|
||||||
ptRoom = ptRoom->ptNextRoom;*/
|
|
||||||
return ptCurrentRoom;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void STDCALL spawnUber(Game* ptGame, Room* ptRoom)
|
void STDCALL spawnUber(Game* ptGame, Room* ptRoom)
|
||||||
{
|
{
|
||||||
log_msg("Uber Quest State : %d %d %d %d %d %d\n",questState.count1, questState.count2, questState.count3, questState.count4, questState.count5, questState.count6);
|
log_msg("Uber Quest State : %d %d %d\n",questState.count1, questState.count2, questState.count3);
|
||||||
|
log_msg("Uber Quest questState spawn : %d %d %d %d %d %d\n",questState.uber1Spawned, questState.uber2Spawned, questState.uber3Spawned, questState.uber4Spawned, questState.uber5Spawned, questState.uber6Spawned);
|
||||||
switch(D2GetLevelID(ptRoom))
|
switch(D2GetLevelID(ptRoom))
|
||||||
{
|
{
|
||||||
case LEVEL_ACT5_PANDEMONIUM1:
|
case LEVEL_ACT5_PANDEMONIUM1:
|
||||||
@ -187,8 +193,7 @@ void STDCALL spawnUber(Game* ptGame, Room* ptRoom)
|
|||||||
{
|
{
|
||||||
if (questState.count1) questState.count1--;
|
if (questState.count1) questState.count1--;
|
||||||
else {
|
else {
|
||||||
Room* ptTargetRoom = selectRoom(ptGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
if (D2SpawnSuperUnique(ptGame, ptRoom, 0, 0, 0, -1, UBER_ANDARIEL_ID, 0))
|
||||||
if (D2SpawnMonster(ptGame, ptTargetRoom, 0, 0, 0, -1, 707, 0))
|
|
||||||
questState.uber1Spawned = 1;
|
questState.uber1Spawned = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,8 +203,7 @@ void STDCALL spawnUber(Game* ptGame, Room* ptRoom)
|
|||||||
{
|
{
|
||||||
if (questState.count2) questState.count2--;
|
if (questState.count2) questState.count2--;
|
||||||
else {
|
else {
|
||||||
Room* ptTargetRoom = selectRoom(ptGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
if (D2SpawnSuperUnique(ptGame, ptRoom, 0, 0, 0, -1, UBER_DURIEL_ID, 0))
|
||||||
if (D2SpawnMonster(ptGame, ptTargetRoom, 0, 0, 0, -1, 708, 0))
|
|
||||||
questState.uber2Spawned = 1;
|
questState.uber2Spawned = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -209,8 +213,7 @@ void STDCALL spawnUber(Game* ptGame, Room* ptRoom)
|
|||||||
{
|
{
|
||||||
if (questState.count3) questState.count3--;
|
if (questState.count3) questState.count3--;
|
||||||
else {
|
else {
|
||||||
Room* ptTargetRoom = selectRoom(ptGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
if (D2SpawnSuperUnique(ptGame, ptRoom, 0, 0, 0, -1, UBER_IZUAL_ID, 0))
|
||||||
if (D2SpawnMonster(ptGame, ptTargetRoom, 0, 0, 0, -1, 706, 0))
|
|
||||||
questState.uber3Spawned = 1;
|
questState.uber3Spawned = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -218,110 +221,239 @@ void STDCALL spawnUber(Game* ptGame, Room* ptRoom)
|
|||||||
case LEVEL_ACT5_PANDEMONIUM_FINAL:
|
case LEVEL_ACT5_PANDEMONIUM_FINAL:
|
||||||
if (!questState.uber4Spawned)
|
if (!questState.uber4Spawned)
|
||||||
{
|
{
|
||||||
if (questState.count4) questState.count4--;
|
log_msg("Spawn Mephisto ptRoom: startX:%d - startY:%d / x:%d y:%d\n", ptRoom->startX, ptRoom->startY, ptRoom->sizeX, ptRoom->sizeY);
|
||||||
else {
|
if (IsInRoom(ptRoom, UberMephistoX, UberMephistoY))
|
||||||
Room* ptTargetRoom = selectRoom(ptGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
{
|
||||||
if (D2SpawnMonster(ptGame, ptTargetRoom, 0, 0, 0, -1, 704, 0))
|
log_msg("Spawn Mephisto ptRoom: startX:%d - startY:%d / x:%d y:%d\n", ptRoom->startX, ptRoom->startY, ptRoom->sizeX, ptRoom->sizeY);
|
||||||
|
if (D2SpawnSuperUnique(ptGame, ptRoom, 0, UberMephistoX, UberMephistoY, -1, UBER_MEPHISTO_ID, 0))
|
||||||
questState.uber4Spawned = 1;
|
questState.uber4Spawned = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!questState.uber5Spawned)
|
if (!questState.uber5Spawned)
|
||||||
{
|
{
|
||||||
if (questState.count5) questState.count5--;
|
if (IsInRoom(ptRoom, UberDiabloX, UberDiabloY))
|
||||||
else {
|
{
|
||||||
Room* ptTargetRoom = selectRoom(ptGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
log_msg("Spawn Diablo ptRoom: startX:%d - startY:%d / x:%d y:%d\n", ptRoom->startX, ptRoom->startY, ptRoom->sizeX, ptRoom->sizeY);
|
||||||
if (D2SpawnMonster(ptGame, ptTargetRoom, 0, 0, 0, -1, 705, 0))
|
if (D2SpawnSuperUnique(ptGame, ptRoom, 0, UberDiabloX, UberDiabloY, -1, UBER_DIABLO_ID, 0))
|
||||||
questState.uber5Spawned = 1;
|
questState.uber4Spawned = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!questState.uber6Spawned)
|
if (!questState.uber6Spawned)
|
||||||
{
|
{
|
||||||
if (questState.count6) questState.count6--;
|
if (IsInRoom(ptRoom, UberBaalX, UberBaalY))
|
||||||
else {
|
{
|
||||||
Room* ptTargetRoom = selectRoom(ptGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
log_msg("Spawn Baal ptRoom: startX:%d - startY:%d / x:%d y:%d\n", ptRoom->startX, ptRoom->startY, ptRoom->sizeX, ptRoom->sizeY);
|
||||||
if (D2SpawnMonster(ptGame, ptTargetRoom, 0, 0, 0, -1, 709, 0))
|
if (D2SpawnSuperUnique(ptGame, ptRoom, 0, UberBaalX, UberBaalY, -1, UBER_BAAL_ID, 0))
|
||||||
questState.uber6Spawned = 1;
|
questState.uber4Spawned = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// D2SpawnMonster(PCGame, ptRoom, 0, 25113, 5138, -1, 704, 0);
|
|
||||||
// D2SpawnMonster(PCGame, ptRoom, 0, 25125, 5150, -1, 705, 0);
|
|
||||||
// D2SpawnMonster(PCGame, ptRoom, 0, 25135, 5140, -1, 709, 0);
|
|
||||||
}
|
}
|
||||||
D2Game235C0(ptGame, ptRoom);
|
D2Game235C0(ptGame, ptRoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*DWORD STDCALL spawnUber(Path* ptPath, Unit* ptChar, Room* ptRoom, DWORD x, DWORD y)
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
{
|
|
||||||
if (!D2WarpPlayer(ptPath, ptChar, ptRoom, x, y)) return 0;
|
|
||||||
|
|
||||||
switch(D2GetLevelID(ptRoom))
|
int GetNbMonsters(Level* level)
|
||||||
|
{
|
||||||
|
int nbMonsters = 0;
|
||||||
|
for (RoomEx* roomEx = level->ptFirstRoomEx; roomEx; roomEx = roomEx->ptNextRoomEx)
|
||||||
{
|
{
|
||||||
case LEVEL_ACT5_PANDEMONIUM1:
|
if (roomEx->ptRoom)
|
||||||
if (!questState.uber1Spawned)
|
|
||||||
{
|
{
|
||||||
Room* ptTargetRoom = selectRoom(PCGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
for (Unit* unit = roomEx->ptRoom->ptFirstUnit; unit; unit = unit->ptNextUnitInRoom)
|
||||||
D2SpawnMonster(PCGame, ptTargetRoom, 0, 0, 0, -1, 707, 0);
|
{
|
||||||
questState.uber1Spawned = 1;
|
if (unit->nUnitType == UNIT_MONSTER && unit->mode != UNIT_MODE_KICK && unit->nTxtFileNo != 711)
|
||||||
}
|
{
|
||||||
break;
|
//log_msg("GetNbMonsters ++ / type:%d - id:%d - mode:%d\n", unit->nUnitType, unit->nTxtFileNo, unit->mode);
|
||||||
case LEVEL_ACT5_PANDEMONIUM2:
|
nbMonsters++;
|
||||||
if (!questState.uber2Spawned)
|
}
|
||||||
{
|
//else log_msg("GetNbMonsters no / type:%d - id:%d - mode:%d\n", unit->nUnitType, unit->nTxtFileNo, unit->mode);
|
||||||
Room* ptTargetRoom = selectRoom(PCGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
}
|
||||||
D2SpawnMonster(PCGame, ptTargetRoom, 0, 0, 0, -1, 708, 0);
|
|
||||||
questState.uber2Spawned = 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LEVEL_ACT5_PANDEMONIUM3:
|
|
||||||
if (!questState.uber3Spawned)
|
|
||||||
{
|
|
||||||
Room* ptTargetRoom = selectRoom(PCGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
|
||||||
D2SpawnMonster(PCGame, ptTargetRoom, 0, 0, 0, -1, 706, 0);
|
|
||||||
questState.uber3Spawned = 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LEVEL_ACT5_PANDEMONIUM_FINAL:
|
|
||||||
if (!questState.uber4Spawned)
|
|
||||||
{
|
|
||||||
Room* ptTargetRoom = selectRoom(PCGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
|
||||||
D2SpawnMonster(PCGame, ptTargetRoom, 0, 0, 0, -1, 704, 0);
|
|
||||||
ptTargetRoom = selectRoom(PCGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
|
||||||
D2SpawnMonster(PCGame, ptTargetRoom, 0, 0, 0, -1, 705, 0);
|
|
||||||
ptTargetRoom = selectRoom(PCGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
|
||||||
D2SpawnMonster(PCGame, ptTargetRoom, 0, 0, 0, -1, 709, 0);
|
|
||||||
// D2SpawnMonster(PCGame, ptRoom, 0, 25113, 5138, -1, 704, 0);
|
|
||||||
// D2SpawnMonster(PCGame, ptRoom, 0, 25125, 5150, -1, 705, 0);
|
|
||||||
// D2SpawnMonster(PCGame, ptRoom, 0, 25135, 5140, -1, 709, 0);
|
|
||||||
questState.uber4Spawned = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return nbMonsters;
|
||||||
}
|
|
||||||
*/
|
|
||||||
void FASTCALL uberMephIA(Game* ptGame, Unit* ptMonster, DWORD* ptData)
|
|
||||||
{
|
|
||||||
D2MephIA(ptGame, ptMonster, ptData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FASTCALL uberDiabloIA(Game* ptGame, Unit* ptMonster, DWORD* ptData)
|
int GetNbMonsters(Level* level, Position position, int radius)
|
||||||
{
|
{
|
||||||
D2DiabloIA(ptGame, ptMonster, ptData);
|
int nbMonsters = 0;
|
||||||
|
for (RoomEx* roomEx = level->ptFirstRoomEx; roomEx; roomEx = roomEx->ptNextRoomEx)
|
||||||
|
{
|
||||||
|
if (roomEx->ptRoom)
|
||||||
|
{
|
||||||
|
for (Unit* unit = roomEx->ptRoom->ptFirstUnit; unit; unit = unit->ptNextUnitInRoom)
|
||||||
|
{
|
||||||
|
if (unit->nUnitType == UNIT_MONSTER && unit->mode != UNIT_MODE_KICK && unit->nTxtFileNo != 711)
|
||||||
|
{
|
||||||
|
Position p;
|
||||||
|
D2GetPosition(unit, &p);
|
||||||
|
if (Distance(position, p) <= radius)
|
||||||
|
nbMonsters++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nbMonsters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CastSummonMonster(Game* ptGame, Unit* ptMonster, DWORD x, DWORD y, DWORD* minions, int minionsSize, int mode)
|
||||||
void FASTCALL uberBaalIA(Game* ptGame, Unit* ptMonster, DWORD* ptData)
|
|
||||||
{
|
{
|
||||||
D2BaalIA(ptGame, ptMonster, ptData);
|
DWORD minionId = minions[RANDOM(minionsSize)];
|
||||||
|
log_msg("CastSummonMonster: id:%d x:%d y:%d mode:%d\n", minionId, x, y, mode);
|
||||||
|
|
||||||
|
Room* ptRoom = D2GetRoom(ptMonster);
|
||||||
|
|
||||||
|
// Check nb of monsters
|
||||||
|
Level* ptLevel = ptRoom->ptRoomEx->ptLevel;
|
||||||
|
int monstersInLevel = GetNbMonsters(ptLevel);
|
||||||
|
Position position;
|
||||||
|
D2GetPosition(ptMonster, &position);
|
||||||
|
int monstersNearby = GetNbMonsters(ptLevel, position, 25);
|
||||||
|
|
||||||
|
log_msg("CastSummonMonster nbMonsters: %d - %d\n", monstersNearby, monstersInLevel);
|
||||||
|
if (monstersNearby > 16 || monstersInLevel > 100)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Spawn Monster
|
||||||
|
log_msg("CastSummonMonster D2SpawnMonster(%d, %d, %08X, %08X, %d, %d, %d, %d)\n", minionId, mode, ptGame, ptRoom, x, y, 1, 0);
|
||||||
|
Unit* monster = D2SpawnMonster(minionId, mode, ptGame, ptRoom, x, y, 1, 0);
|
||||||
|
log_msg("CastSummonMonster D2SpawnMonster end\n");
|
||||||
|
if (monster)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Try in near rooms
|
||||||
|
log_msg("CastSummonMonster Try in near rooms: %d - %d\n", ptRoom->startX, ptRoom->startY);
|
||||||
|
for(int i = 0; i < ptRoom->nbNearRooms; i++)
|
||||||
|
{
|
||||||
|
Room* ptRoom2 = ptRoom->ptNearRooms[i];
|
||||||
|
if (IsInRoom(ptRoom2, x, y))
|
||||||
|
{
|
||||||
|
log_msg("CastSummonMonster D2SpawnMonster(%d, %d, %08X, %08X, %d, %d, %d, %d)\n", minionId, mode, ptGame, ptRoom2, x, y, 1, 0);
|
||||||
|
monster = D2SpawnMonster(minionId, mode, ptGame, ptRoom2, x, y, 1, 0);
|
||||||
|
log_msg("CastSummonMonster D2SpawnMonster end\n");
|
||||||
|
if (monster)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log_msg("CastSummonMonster end: %d - %d\n", ptRoom->startX, ptRoom->startY);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RandInCircle(Position* position, DWORD radius)
|
||||||
|
{
|
||||||
|
double theta = RANDOMF() * 6.283185;
|
||||||
|
double r = sqrt(RANDOMF()) * radius;
|
||||||
|
position->x += (DWORD)(r * cos(theta));
|
||||||
|
position->y += (DWORD)(r * sin(theta));
|
||||||
|
}
|
||||||
|
|
||||||
|
void FASTCALL uberMephAI(Game* ptGame, Unit* ptMonster, AIParam* ptAIArgs)
|
||||||
|
{
|
||||||
|
log_msg("UberMephAI called.\n");
|
||||||
|
|
||||||
|
// Spawn Minions
|
||||||
|
if (active_UberMinions && RANDOM(100) < UberMephistoSpawnPercent && ptAIArgs->distanceToTarget < UberMephistoSpawnRadius)
|
||||||
|
{
|
||||||
|
Position pos;
|
||||||
|
D2GetPosition(ptAIArgs->target, &pos);
|
||||||
|
CastSummonMonster(ptGame, ptMonster, pos.x, pos.y, UberMephistoMinions, UberMephistoNbMinions, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
log_msg("Uber Mephisto AI activated.\n");
|
||||||
|
D2MephAI(ptGame, ptMonster, ptAIArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FASTCALL uberDiabloAI(Game* ptGame, Unit* ptMonster, AIParam* ptAIArgs)
|
||||||
|
{
|
||||||
|
log_msg("UberDiabloAI called.\n");
|
||||||
|
|
||||||
|
// Spawn Minions
|
||||||
|
if (active_UberMinions && RANDOM(100) < UberDiabloSpawnPercent && ptAIArgs->distanceToTarget < UberDiabloSpawnRadius)
|
||||||
|
{
|
||||||
|
Position pos;
|
||||||
|
D2GetPosition(ptAIArgs->target, &pos);
|
||||||
|
RandInCircle(&pos, 3);
|
||||||
|
CastSummonMonster(ptGame, ptMonster, pos.x, pos.y, UberDiabloMinions, UberDiabloNbMinions, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tweek Diablo AI Rush
|
||||||
|
if (active_UberDiabloRushTweekAI && RANDOM(100) < (int)ptAIArgs->distanceToTarget - 10)
|
||||||
|
{
|
||||||
|
if (RANDOM(3) > 0)//67% to Rush
|
||||||
|
{
|
||||||
|
log_msg("Uber Diablo Run activated.\n");
|
||||||
|
int diabloRunSkillId = 4;
|
||||||
|
D2MonsterUseSkill(ptGame, ptMonster, ptAIArgs->ptMonStatsBIN->skillArg[diabloRunSkillId], ptAIArgs->ptMonStatsBIN->skill[diabloRunSkillId], ptAIArgs->target, 0, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log_msg("Uber Diablo Move activated.\n");
|
||||||
|
Position pos;
|
||||||
|
D2GetPosition(ptAIArgs->target, &pos);
|
||||||
|
D2MonsterMove(ptGame, ptMonster, NULL, 2, pos.x, pos.y, 1, 0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_msg("Uber Diablo AI activated.\n");
|
||||||
|
D2DiabloAI(ptGame, ptMonster, ptAIArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FASTCALL uberBaalAI(Game* ptGame, Unit* ptMonster, AIParam* ptAIArgs)
|
||||||
|
{
|
||||||
|
log_msg("UberBaalAI called.\n");
|
||||||
|
|
||||||
|
if (active_UberMinions && RANDOM(100) < UberBaalSpawnPercent && ptAIArgs->distanceToTarget < UberBaalSpawnRadius)
|
||||||
|
{
|
||||||
|
Position pos;
|
||||||
|
D2GetPosition(ptAIArgs->target, &pos);
|
||||||
|
RandInCircle(&pos, 3);
|
||||||
|
CastSummonMonster(ptGame, ptMonster, pos.x, pos.y, UberBaalMinions, UberBaalNbMinions, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tweek Baal AI Chilling Armor
|
||||||
|
if (active_UberBaalChillingArmorTweekAI)
|
||||||
|
{
|
||||||
|
if (uberBaalChillingArmorLastFrame == 0 || ((int)ptGame->gameFrame - uberBaalChillingArmorLastFrame > uberBaalChillingArmorTimer))
|
||||||
|
{
|
||||||
|
log_msg("Uber Baal Chilling Armor activated.\n");
|
||||||
|
uberBaalChillingArmorLastFrame = ptGame->gameFrame;
|
||||||
|
const int baalChillingArmorSkillId = 7;
|
||||||
|
D2MonsterUseSkill(ptGame, ptMonster, ptAIArgs->ptMonStatsBIN->skillArg[baalChillingArmorSkillId], ptAIArgs->ptMonStatsBIN->skill[baalChillingArmorSkillId], NULL, 0, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tweek Baal AI Teleport
|
||||||
|
if (active_UberBaalTeleportTweekAI && RANDOM(100) < (int)ptAIArgs->distanceToTarget - 10)
|
||||||
|
{
|
||||||
|
if (RANDOM(3) > 0)//67% to teleport
|
||||||
|
{
|
||||||
|
log_msg("Uber Baal Teleport activated.\n");
|
||||||
|
const int baalTeleportSkillId = 4;
|
||||||
|
Position pos;
|
||||||
|
D2GetPosition(ptAIArgs->target, &pos);
|
||||||
|
D2MonsterUseSkill(ptGame, ptMonster, ptAIArgs->ptMonStatsBIN->skillArg[baalTeleportSkillId], ptAIArgs->ptMonStatsBIN->skill[baalTeleportSkillId], NULL/*ptAIArgs->target*/, pos.x, pos.y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log_msg("Uber Baal Move activated.\n");
|
||||||
|
Position pos;
|
||||||
|
D2GetPosition(ptAIArgs->target, &pos);
|
||||||
|
D2MonsterMove(ptGame, ptMonster, NULL, 2, pos.x, pos.y, 1, 0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_msg("Uber Baal AI activated.\n");
|
||||||
|
D2BaalAI(ptGame, ptMonster, ptAIArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM ( caller_spawnUber )
|
FCT_ASM ( caller_spawnUber )
|
||||||
PUSHAD
|
PUSH EDX
|
||||||
PUSH EDX
|
PUSH ECX
|
||||||
PUSH ECX
|
CALL spawnUber
|
||||||
CALL spawnUber
|
RETN
|
||||||
POPAD
|
|
||||||
RETN
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
void Install_UberQuest()
|
void Install_UberQuest()
|
||||||
@ -339,44 +471,32 @@ void Install_UberQuest()
|
|||||||
// open Red Portal
|
// open Red Portal
|
||||||
VirtualProtect((LPVOID)R8(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0, FA2C4, 2E11D0), 8, PAGE_EXECUTE_READWRITE, &oldProtection);
|
VirtualProtect((LPVOID)R8(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0, FA2C4, 2E11D0), 8, PAGE_EXECUTE_READWRITE, &oldProtection);
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, FA480, FA7B8, FA228, FA5F0, FA2C4, 2E11D0);
|
mem_seek R8(D2Game, 0000, 0000, 0000, FA480, FA7B8, FA228, FA5F0, FA2C4, 2E11D0);
|
||||||
if (version_D2Game == V114d) {
|
MEMT_DWORD( D2OpenPandPortal , openPandPortal);
|
||||||
MEMT_DWORD(0x00565A90, openPandPortal);
|
MEMT_DWORD( D2OpenPandFinalPortal , openPandFinalPortal);
|
||||||
MEMT_DWORD(0x00565AA0, openPandFinalPortal);
|
|
||||||
} else {
|
|
||||||
MEMT_DWORD(D2OpenPandPortal, openPandPortal);
|
|
||||||
MEMT_DWORD(D2OpenPandFinalPortal, openPandFinalPortal);
|
|
||||||
}
|
|
||||||
//0201E357 |. FFD0 |CALL EAX
|
//0201E357 |. FFD0 |CALL EAX
|
||||||
//01FA77E7 |. FFD0 |CALL EAX
|
//01FA77E7 |. FFD0 |CALL EAX
|
||||||
//6FCF3CC7 |. FFD0 |CALL EAX
|
//6FCF3CC7 |. FFD0 |CALL EAX
|
||||||
//6FC92437 |. FFD0 |CALL EAX
|
//6FC92437 |. FFD0 |CALL EAX
|
||||||
//6FCB7127 |. FFD0 |CALL EAX
|
//6FCB7127 |. FFD0 |CALL EAX
|
||||||
|
//00565D45 . FFD0 CALL EAX
|
||||||
VirtualProtect((LPVOID)R8(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0, FA2C4, 2E11D0), 8, oldProtection, &oldProtection);
|
VirtualProtect((LPVOID)R8(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0, FA2C4, 2E11D0), 8, oldProtection, &oldProtection);
|
||||||
|
|
||||||
|
|
||||||
// manage uberIA (fct table at 0209E7E8)
|
// manage uberIA (fct table at 0209E7E8)
|
||||||
VirtualProtect((LPVOID)(R8(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788, 10ED00, 33CA18) + 145*0x10), 0x30, PAGE_EXECUTE_READWRITE, &oldProtection);
|
VirtualProtect((LPVOID)(R8(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788, 10ED00, 33CA18) + 145*0x10), 0x30, PAGE_EXECUTE_READWRITE, &oldProtection);
|
||||||
if (version_D2Game == V114d) {
|
mem_seek R8(D2Game, 0000, 0000, 0000, 10F100, 10F5E8, 10F870, 10F0A0, 10F618, 33D330);
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, 10F100, 10F5E8, 10F870, 10F0A0, 10F618, 33D330);
|
MEMT_DWORD( D2UberBaalAI , uberBaalAI);
|
||||||
MEMT_DWORD(0x005FD200, uberBaalIA);
|
mem_seek R8(D2Game, 0000, 0000, 0000, 10F110, 10F5F8, 10F880, 10F0B0, 10F628, 33D340);
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, 10F110, 10F5F8, 10F880, 10F0B0, 10F628, 33D340);
|
MEMT_DWORD( D2UberMephAI , uberMephAI);
|
||||||
MEMT_DWORD(0x005F81C0, uberMephIA);
|
mem_seek R8(D2Game, 0000, 0000, 0000, 10F120, 10F608, 10F890, 10F0C0, 10F638, 33D350);
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, 10F120, 10F608, 10F890, 10F0C0, 10F638, 33D350);
|
MEMT_DWORD( D2UberDiabloAI , uberDiabloAI);
|
||||||
MEMT_DWORD(0x005E9DF0, uberDiabloIA);
|
|
||||||
} else {
|
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, 10F100, 10F5E8, 10F870, 10F0A0, 10F618, 33D330);
|
|
||||||
MEMT_DWORD(D2UberBaalIA, uberBaalIA);
|
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, 10F110, 10F5F8, 10F880, 10F0B0, 10F628, 33D340);
|
|
||||||
MEMT_DWORD(D2UberMephIA, uberMephIA);
|
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, 10F120, 10F608, 10F890, 10F0C0, 10F638, 33D350);
|
|
||||||
MEMT_DWORD(D2UberDiabloIA, uberDiabloIA);
|
|
||||||
}
|
|
||||||
VirtualProtect((LPVOID)(R8(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788, 10ED00, 33CA18) + 145*0x10), 0x30, oldProtection, &oldProtection);
|
VirtualProtect((LPVOID)(R8(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788, 10ED00, 33CA18) + 145*0x10), 0x30, oldProtection, &oldProtection);
|
||||||
//0202ADA7 |> B8 E8E70902 MOV EAX,D2Game.0209E7E8
|
//0202ADA7 |> B8 E8E70902 MOV EAX,D2Game.0209E7E8
|
||||||
//01FD2BE7 |> B8 D0EC0702 MOV EAX,D2Game.0207ECD0
|
//01FD2BE7 |> B8 D0EC0702 MOV EAX,D2Game.0207ECD0
|
||||||
//6FC3B597 |> B8 58EFD26F MOV EAX,D2Game.6FD2EF58
|
//6FC3B597 |> B8 58EFD26F MOV EAX,D2Game.6FD2EF58
|
||||||
//6FCBD157 |> B8 88E7D26F MOV EAX,D2Game.6FD2E788
|
//6FCBD157 |> B8 88E7D26F MOV EAX,D2Game.6FD2E788
|
||||||
//6FC5C617 |> B8 00EDD26F MOV EAX,D2Game.6FD2ED00
|
//6FC5C617 |> B8 00EDD26F MOV EAX,D2Game.6FD2ED00
|
||||||
|
//005B163D |. B8 18CA7300 MOV EAX,Game.0073CA18
|
||||||
|
|
||||||
// spawn Uber
|
// spawn Uber
|
||||||
// mem_seek R7(D2Game, 0000, 0000, 0000, 98DAD, 0000, 0000, 0000);
|
// mem_seek R7(D2Game, 0000, 0000, 0000, 98DAD, 0000, 0000, 0000);
|
||||||
@ -384,49 +504,17 @@ void Install_UberQuest()
|
|||||||
//02028DAC |. E8 491CF7FF CALL <JMP.&D2Common.#10872>
|
//02028DAC |. E8 491CF7FF CALL <JMP.&D2Common.#10872>
|
||||||
|
|
||||||
mem_seek R8(D2Game, 0000, 0000, 0000, E26E2, E6B52, A850B, 2CCAB, BE9AB, 12D1DC);
|
mem_seek R8(D2Game, 0000, 0000, 0000, E26E2, E6B52, A850B, 2CCAB, BE9AB, 12D1DC);
|
||||||
if (version_D2Game == V114d) {
|
MEMC_REF4( V2Game235C0 , version_D2Game >= V114d ? (DWORD)caller_spawnUber : (DWORD)spawnUber);
|
||||||
MEMT_REF4(0x00015960, caller_spawnUber);
|
|
||||||
} else {
|
|
||||||
MEMC_REF4(D2Game235C0, spawnUber);
|
|
||||||
}
|
|
||||||
//020726E1 |. E8 2A46FFFF ||CALL D2Game.02066D10
|
//020726E1 |. E8 2A46FFFF ||CALL D2Game.02066D10
|
||||||
//02056B51 |. E8 6ACAF3FF ||CALL D2Game.01F935C0
|
//02056B51 |. E8 6ACAF3FF ||CALL D2Game.01F935C0
|
||||||
//6FCC850A |. E8 014FF6FF ||CALL D2Game.6FC2D410
|
//6FCC850A |. E8 014FF6FF ||CALL D2Game.6FC2D410
|
||||||
//6FC4CCAA |. E8 3134FFFF ||CALL D2Game.6FC400E0
|
//6FC4CCAA |. E8 3134FFFF ||CALL D2Game.6FC400E0
|
||||||
//6FCDE9AA |. E8 D1AFF9FF ||CALL D2Game.6FC79980
|
//6FCDE9AA |. E8 D1AFF9FF ||CALL D2Game.6FC79980
|
||||||
|
//0052D1DB |. E8 60590100 ||CALL Game.00542B40
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
isInstalled = true;
|
isInstalled = true;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
call fct to manage TP :
|
|
||||||
0201E33E |. 8B048D 78A4070>|MOV EAX,DWORD PTR DS:[ECX*4+207A478] ; D2Game.0201B480
|
|
||||||
0201E345 |. 85C0 |TEST EAX,EAX
|
|
||||||
0201E347 |. 74 14 |JE SHORT D2Game.0201E35D
|
|
||||||
0201E349 |. 8B9424 2C01000>|MOV EDX,DWORD PTR SS:[ESP+12C]
|
|
||||||
0201E350 |. 8B8C24 2801000>|MOV ECX,DWORD PTR SS:[ESP+128]
|
|
||||||
0201E357 |. FFD0 |CALL EAX
|
|
||||||
0201E359 |. 894424 38 |MOV DWORD PTR SS:[ESP+38],EAX
|
|
||||||
|
|
||||||
DWORD FASTCALL openPortal (Unit* ptGame, Unit* ptChar)
|
|
||||||
0201C6D0 : CowPortal
|
|
||||||
0201B480 : Pand. Portal return 0 !!
|
|
||||||
0201B470 : Pand. FInal Portal
|
|
||||||
|
|
||||||
manage IA
|
|
||||||
0202AD8B |> 66:8B46 1E MOV AX,WORD PTR DS:[ESI+1E]
|
|
||||||
0202AD8F |. 66:85C0 TEST AX,AX
|
|
||||||
0202AD92 |. 7C 13 JL SHORT D2Game.0202ADA7
|
|
||||||
0202AD94 |. 66:3D 9400 CMP AX,94
|
|
||||||
0202AD98 |. 73 0D JNB SHORT D2Game.0202ADA7
|
|
||||||
0202AD9A |. 0FBFC0 MOVSX EAX,AX
|
|
||||||
0202AD9D |. C1E0 04 SHL EAX,4
|
|
||||||
0202ADA0 |. 05 E8E70902 ADD EAX,D2Game.0209E7E8
|
|
||||||
0202ADA5 |. 5E POP ESI
|
|
||||||
0202ADA6 |. C3 RETN
|
|
||||||
0202ADA7 |> B8 E8E70902 MOV EAX,D2Game.0209E7E8
|
|
||||||
0202ADAC |. 5E POP ESI
|
|
||||||
0202ADAD \. C3 RETN
|
|
||||||
*/
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -1,10 +1,10 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Updating client.
|
Updating client.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
#include "updateClient.h"
|
#include "updateClient.h"
|
||||||
@ -44,10 +44,10 @@ void updateClient(Unit* ptChar, DWORD mFunc, char* msg)
|
|||||||
packet.mFunc = (BYTE)mFunc;
|
packet.mFunc = (BYTE)mFunc;
|
||||||
packet.mSize = sizeof(DataPacket);
|
packet.mSize = sizeof(DataPacket);
|
||||||
packet.mPlayerID = ptChar->nUnitId;
|
packet.mPlayerID = ptChar->nUnitId;
|
||||||
if (msg != NULL && strlen(msg) >= 20)
|
if (msg != NULL && strlen(msg) > 20)
|
||||||
return;
|
return;
|
||||||
if (msg != NULL)
|
if (msg != NULL)
|
||||||
strcpy((char*)&packet.mItemID, msg);
|
strncpy((char*)&packet.mItemID, msg, 20);
|
||||||
|
|
||||||
ptNetClient = D2GetClient(ptChar, __FILE__, __LINE__);
|
ptNetClient = D2GetClient(ptChar, __FILE__, __LINE__);
|
||||||
|
|
||||||
@ -60,21 +60,25 @@ DWORD FASTCALL handleClientUpdate(DataPacket* packet)
|
|||||||
log_msg("[CLIENT] Received custom message: %d with param: %08X , %08X , %08X\n",packet->mFunc,packet->mParam1,packet->mParam2,packet->mParam3);
|
log_msg("[CLIENT] Received custom message: %d with param: %08X , %08X , %08X\n",packet->mFunc,packet->mParam1,packet->mParam2,packet->mParam3);
|
||||||
switch (packet->mFunc)
|
switch (packet->mFunc)
|
||||||
{
|
{
|
||||||
case UC_SELECT_STASH: setSelectedStashClient(packet->mParam1, packet->mParam2, packet->mParam3, (packet->mParam2 & 8) == 8); return 1;
|
case UC_SELECT_STASH: setSelectedStashClient(packet->mParam1, packet->mParam2, packet->mParam3, (packet->mParam2 & 8) == 8); return 1;
|
||||||
case UC_SHARED_GOLD : updateSharedGold(packet->mParam1); return 1;
|
case UC_SHARED_GOLD : updateSharedGold(packet->mParam1); return 1;
|
||||||
case UC_PAGE_NAME: renameCurrentStash(D2GetClientPlayer(), (char*)&packet->mItemID); return 1;
|
case UC_PAGE_NAME:
|
||||||
|
{
|
||||||
|
char pageName[21];
|
||||||
|
strncpy(pageName, (char*)&packet->mItemID, 20);
|
||||||
|
pageName[20] = NULL;
|
||||||
|
renameCurrentStash(D2GetClientPlayer(), pageName); return 1;
|
||||||
|
}
|
||||||
default : return 0;
|
default : return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_handleClientUpdate_114 )
|
FCT_ASM ( caller_handleClientUpdate_114 )
|
||||||
LEA ECX, DWORD PTR SS : [ESP]
|
LEA ECX,DWORD PTR SS:[ESP]
|
||||||
CALL handleClientUpdate
|
CALL handleClientUpdate
|
||||||
POP EDI
|
MOV ESP,EBP
|
||||||
POP ESI
|
POP EBP
|
||||||
MOV ESP, EBP
|
RETN
|
||||||
POP EBP
|
|
||||||
RETN
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_handleClientUpdate_111 )
|
FCT_ASM ( caller_handleClientUpdate_111 )
|
||||||
@ -99,18 +103,19 @@ void Install_UpdateClient()
|
|||||||
{
|
{
|
||||||
static int isInstalled = false;
|
static int isInstalled = false;
|
||||||
if (isInstalled) return;
|
if (isInstalled) return;
|
||||||
|
|
||||||
log_msg("Patch D2Client for received Item packet. (UpdateClient)\n");
|
log_msg("Patch D2Client for received Item packet. (UpdateClient)\n");
|
||||||
|
|
||||||
// execute if it's our packet else continue
|
// execute if it's our packet else continue
|
||||||
mem_seek R8(D2Client, 14236, 14226, 145B6, 9C6B6, BFE86, 66E06, AE896, 84D96, 5EC99);
|
mem_seek R8(D2Client, 14236, 14226, 145B6, 9C6B6, BFE86, 66E06, AE896, 84D96, 5EC99);
|
||||||
MEMT_REF4( version_D2Client == V114d ? 0x000000CE : version_D2Client >= V111 ? 0x000000CF : 0x000000D6, version_D2Client == V114d ? caller_handleClientUpdate_114 : version_D2Client >= V111 ? caller_handleClientUpdate_111 : caller_handleClientUpdate);
|
MEMT_REF4( version_D2Client >= V114d ? 0x000000CE : version_D2Client >= V111 ? 0x000000CF : 0x000000D6, version_D2Client >= V114d ? caller_handleClientUpdate_114 : version_D2Client >= V111 ? caller_handleClientUpdate_111 : caller_handleClientUpdate);
|
||||||
//6FAB45B4 |. 0F87 D6000000 JA D2Client.6FAB4690
|
//6FAB45B4 |. 0F87 D6000000 JA D2Client.6FAB4690
|
||||||
//6FB4C6B4 |. 0F87 CF000000 JA D2Client.6FB4C789
|
//6FB4C6B4 |. 0F87 CF000000 JA D2Client.6FB4C789
|
||||||
//6FB6FE84 |. 0F87 CF000000 JA D2Client.6FB6FF59
|
//6FB6FE84 |. 0F87 CF000000 JA D2Client.6FB6FF59
|
||||||
//6FB16E04 |. 0F87 CF000000 JA D2Client.6FB16ED9
|
//6FB16E04 |. 0F87 CF000000 JA D2Client.6FB16ED9
|
||||||
//6FB5E894 |. 0F87 CF000000 JA D2Client.6FB5E969
|
//6FB5E894 |. 0F87 CF000000 JA D2Client.6FB5E969
|
||||||
//6FB34D94 |. 0F87 CF000000 JA D2Client.6FB34E69
|
//6FB34D94 |. 0F87 CF000000 JA D2Client.6FB34E69
|
||||||
|
//0045EC97 |. 0F87 CE000000 JA Game.0045ED6B
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
Updating server.
|
Updating server.
|
||||||
|
|
||||||
@ -14,8 +14,16 @@
|
|||||||
#include "commands.h"
|
#include "commands.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
|
||||||
|
void updateServer(WORD p)
|
||||||
|
{
|
||||||
|
if (!onRealm)
|
||||||
|
D2SendToServer3(0x3A, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int renameIndex = 0;
|
int renameIndex = 0;
|
||||||
char renameString[16];
|
char renameString[21];
|
||||||
DWORD PageSwap;
|
DWORD PageSwap;
|
||||||
|
|
||||||
int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
|
int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
|
||||||
@ -62,25 +70,27 @@ int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
|
|||||||
case US_SWAP0: swapStash(ptChar, PageSwap | arg, false); PageSwap = 0; return 1;
|
case US_SWAP0: swapStash(ptChar, PageSwap | arg, false); PageSwap = 0; return 1;
|
||||||
case US_SWAP0_TOGGLE : swapStash(ptChar, PageSwap | arg, true); PageSwap = 0; return 1;
|
case US_SWAP0_TOGGLE : swapStash(ptChar, PageSwap | arg, true); PageSwap = 0; return 1;
|
||||||
case US_RENAME :
|
case US_RENAME :
|
||||||
if (renameIndex == 0)
|
if (renameIndex == 0)
|
||||||
for (int i = 0; i < 16; i++)
|
ZeroMemory(renameString, sizeof(renameString));
|
||||||
renameString[i] = 0;
|
if (arg != NULL && renameIndex < 15)
|
||||||
renameString[renameIndex++] = (char)arg;
|
renameString[renameIndex++] = (char)arg;
|
||||||
if (arg == 0)
|
if (arg == NULL)
|
||||||
{
|
{
|
||||||
renameIndex = 0;
|
renameString[renameIndex] = NULL;
|
||||||
log_msg("Rename on Server : %s -> %s\n", ptChar->ptPlayerData->name, renameString);
|
renameIndex = 0;
|
||||||
strcpy(ptChar->ptPlayerData->name, renameString);
|
log_msg("Rename on Server : %s -> %s\n", PCPlayerData->name, renameString);
|
||||||
strcpy(ptChar->ptPlayerData->ptNetClient->name, renameString);
|
strcpy(PCPlayerData->name, renameString);
|
||||||
}
|
strcpy(PCPlayerData->ptNetClient->name, renameString);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
case US_PAGENAME:
|
case US_PAGENAME:
|
||||||
if (renameIndex == 0)
|
if (renameIndex == 0)
|
||||||
for (int i = 0; i < 16; i++)
|
ZeroMemory(renameString, sizeof(renameString));
|
||||||
renameString[i] = 0;
|
if (arg != NULL && renameIndex < 20)
|
||||||
renameString[renameIndex++] = (char)arg;
|
renameString[renameIndex++] = (char)arg;
|
||||||
if (arg == 0)
|
if (arg == NULL)
|
||||||
{
|
{
|
||||||
|
renameString[renameIndex] = NULL;
|
||||||
renameIndex = 0;
|
renameIndex = 0;
|
||||||
log_msg("Rename current page on Server : %s -> %s\n", PCPY->currentStash->name, renameString);
|
log_msg("Rename current page on Server : %s -> %s\n", PCPY->currentStash->name, renameString);
|
||||||
renameCurrentStash(ptChar, renameString);
|
renameCurrentStash(ptChar, renameString);
|
||||||
@ -91,24 +101,24 @@ int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FCT_ASM( caller_handleServerUpdate_114 )
|
FCT_ASM( caller_handleServerUpdate_114)
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
CALL handleServerUpdate
|
CALL handleServerUpdate
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JNZ END_RCM
|
JNZ END_RCM
|
||||||
MOV EAX, ESI
|
MOV EAX,ESI
|
||||||
AND EAX, 0xFF
|
AND EAX,0xFF
|
||||||
SHR ESI, 8
|
SHR ESI,8
|
||||||
MOV EDI, EAX
|
MOV EDI,EAX
|
||||||
RETN
|
RETN
|
||||||
END_RCM :
|
END_RCM:
|
||||||
ADD ESP, 8
|
ADD ESP,8
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
XOR EAX, EAX
|
XOR EAX,EAX
|
||||||
POP EBX
|
POP EBX
|
||||||
RETN 8
|
RETN 8
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_handleServerUpdate)
|
FCT_ASM( caller_handleServerUpdate)
|
||||||
@ -180,6 +190,9 @@ void Install_UpdateServer()
|
|||||||
//066A76C3 |. C1EE 08 SHR ESI,8
|
//066A76C3 |. C1EE 08 SHR ESI,8
|
||||||
//066A76C6 |. 57 PUSH EDI
|
//066A76C6 |. 57 PUSH EDI
|
||||||
//066A76C7 |. 8BF8 MOV EDI,EAX
|
//066A76C7 |. 8BF8 MOV EDI,EAX
|
||||||
|
//0054BD38 |. C1EE 08 SHR ESI,8
|
||||||
|
//0054BD3B |. 57 PUSH EDI
|
||||||
|
//0054BD3C |. 8BF8 MOV EDI,EAX
|
||||||
} else if (version_D2Game == V110) {
|
} else if (version_D2Game == V110) {
|
||||||
memt_byte( 0xC1, 0xE8 ); // CALL caller_handleServerUpdate
|
memt_byte( 0xC1, 0xE8 ); // CALL caller_handleServerUpdate
|
||||||
MEMT_REF4( 0xF88B08EE, caller_handleServerUpdate);
|
MEMT_REF4( 0xF88B08EE, caller_handleServerUpdate);
|
||||||
|
@ -8,17 +8,17 @@
|
|||||||
#include "windowed.h"
|
#include "windowed.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
int active_Windowed = true;
|
int active_Windowed = false;
|
||||||
int setWindowedOptionsDone = false;
|
int setWindowedOptionsDone = false;
|
||||||
int active_RemoveBorder = true;
|
int active_RemoveBorder = false;
|
||||||
int active_WindowOnTop = true;
|
int active_WindowOnTop = false;
|
||||||
int active_Maximized = true;
|
int active_Maximized = false;
|
||||||
int active_SetWindowPos = true;
|
int active_SetWindowPos = false;
|
||||||
int windowedX = 240;
|
int windowedX = 0;
|
||||||
int windowedY = 0;
|
int windowedY = 0;
|
||||||
int windowedWidth = 1440;
|
int windowedWidth = 800;
|
||||||
int windowedHeight = 1080;
|
int windowedHeight = 600;
|
||||||
int active_LockMouseOnStartup = true;
|
int active_LockMouseOnStartup = false;
|
||||||
|
|
||||||
void unlockMouseCursor()
|
void unlockMouseCursor()
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
World Event Management.
|
World Event Management.
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ DWORD WEactive = 0;
|
|||||||
DWORD DCloneSpawned = 0;
|
DWORD DCloneSpawned = 0;
|
||||||
|
|
||||||
DWORD nbSOJSold = 0;
|
DWORD nbSOJSold = 0;
|
||||||
DWORD nbNeedSOJSold = 100;
|
DWORD nbNeedSOJSold = 0;
|
||||||
DWORD nbManagedSOJSold = 0;
|
DWORD nbManagedSOJSold = 0;
|
||||||
|
|
||||||
DWORD nbTicksForNextSOJSold = 0;
|
DWORD nbTicksForNextSOJSold = 0;
|
||||||
@ -80,21 +80,26 @@ Game* STDCALL WEManagement(DWORD clientID)
|
|||||||
if (!ptGame) return ptGame;
|
if (!ptGame) return ptGame;
|
||||||
|
|
||||||
if (active_AutomaticSell)
|
if (active_AutomaticSell)
|
||||||
while (GetTickCount() - prevTicks >= nbTicksForNextSOJSold)
|
|
||||||
{
|
{
|
||||||
nbSOJSold++;
|
while (GetTickCount() - prevTicks >= nbTicksForNextSOJSold)
|
||||||
prevTicks = prevTicks + nbTicksForNextSOJSold;
|
{
|
||||||
nbTicksForNextSOJSold = getTicksForNextSOJSold();
|
nbSOJSold++;
|
||||||
|
prevTicks = prevTicks + nbTicksForNextSOJSold;
|
||||||
|
nbTicksForNextSOJSold = getTicksForNextSOJSold();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nbSOJSold == nbManagedSOJSold) return ptGame;
|
if (nbSOJSold == nbManagedSOJSold)
|
||||||
|
return ptGame;
|
||||||
|
|
||||||
DWORD newWE;
|
DWORD newWE;
|
||||||
if (!WEactive && (ptGame->difficultyLevel == D2DM_HELL) && (nbSOJSold >= nbNeedSOJSold))
|
if (!WEactive && (ptGame->difficultyLevel == D2DM_HELL) && (nbSOJSold >= nbNeedSOJSold))
|
||||||
{
|
{
|
||||||
newWE = 1;
|
newWE = 1;
|
||||||
WEactive = 1;
|
WEactive = 1;
|
||||||
} else newWE = 0;
|
}
|
||||||
|
else
|
||||||
|
newWE = 0;
|
||||||
|
|
||||||
if ( showSOJSoldCounterInAllDiff || (ptGame->difficultyLevel == D2DM_HELL))
|
if ( showSOJSoldCounterInAllDiff || (ptGame->difficultyLevel == D2DM_HELL))
|
||||||
worldEventBroadcast(ptGame, newWE, nbSOJSold);
|
worldEventBroadcast(ptGame, newWE, nbSOJSold);
|
||||||
@ -109,10 +114,11 @@ DWORD FASTCALL spawnDClone(Game* ptGame, Room* ptRoom, DWORD p3, DWORD p4, DWORD
|
|||||||
if (WEactive && (ptGame->difficultyLevel == D2DM_HELL) && !DCloneSpawned)
|
if (WEactive && (ptGame->difficultyLevel == D2DM_HELL) && !DCloneSpawned)
|
||||||
{
|
{
|
||||||
DCloneSpawned=1;
|
DCloneSpawned=1;
|
||||||
D2SpawnMonster(ptGame,ptRoom,p3,p4,p5,p6,worldEventmonsterID,p8);
|
D2SpawnSuperUnique(ptGame,ptRoom,p3,p4,p5,p6,worldEventmonsterID,p8);
|
||||||
return 0;//no minions
|
return 0;//no minions
|
||||||
}
|
}
|
||||||
else return D2SpawnMonster(ptGame,ptRoom,p3,p4,p5,p6,monsterID,p8);
|
else
|
||||||
|
return D2SpawnSuperUnique(ptGame,ptRoom,p3,p4,p5,p6,monsterID,p8);
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD STDCALL verifIfWEItem (Unit* ptItem, DWORD flags, DWORD line, const char* filename)
|
DWORD STDCALL verifIfWEItem (Unit* ptItem, DWORD flags, DWORD line, const char* filename)
|
||||||
@ -120,27 +126,22 @@ DWORD STDCALL verifIfWEItem (Unit* ptItem, DWORD flags, DWORD line, const char*
|
|||||||
ItemsBIN* ptItemStats = D2GetItemsBIN(ptItem->nTxtFileNo);
|
ItemsBIN* ptItemStats = D2GetItemsBIN(ptItem->nTxtFileNo);
|
||||||
ItemsBIN* ptWantedItemStats = D2GetItemsBIN(itemNeeded.ID);
|
ItemsBIN* ptWantedItemStats = D2GetItemsBIN(itemNeeded.ID);
|
||||||
|
|
||||||
log_msg("D2CheckItemType() = %u\n\n", D2CheckItemType(ptItem, itemNeeded.ID));
|
|
||||||
log_msg("D2GetUniqueID() = %u\n\n", D2GetUniqueID(ptItem));
|
|
||||||
log_msg("D2isEtheral() = %u\n\n", D2isEtheral2(ptItem, 0, 0, 0, 0, 0, 0));
|
|
||||||
log_msg("itemNeeded.ID = %u\n\n", itemNeeded.ID);
|
|
||||||
|
|
||||||
if((itemNeeded.byItemTypeID && D2CheckItemType(ptItem,itemNeeded.ID))
|
if((itemNeeded.byItemTypeID && D2CheckItemType(ptItem,itemNeeded.ID))
|
||||||
|| (itemNeeded.byItemID && (itemNeeded.ID == 0xFFFF))
|
|| (itemNeeded.byItemID && (itemNeeded.ID == 0xFFFF))
|
||||||
|| (itemNeeded.byItemID && !itemNeeded.includeUpgradedVersions && ((DWORD)itemNeeded.ID == ptItem->nTxtFileNo))
|
|| (itemNeeded.byItemID && !itemNeeded.includeUpgradedVersions && ((DWORD)itemNeeded.ID == ptItem->nTxtFileNo))
|
||||||
|| (itemNeeded.byItemID && itemNeeded.includeUpgradedVersions) && (
|
|| (itemNeeded.byItemID && itemNeeded.includeUpgradedVersions) && (
|
||||||
(ptItemStats->ItemCode == ptItemStats->NormCode) && (ptItemStats->ItemCode == ptWantedItemStats->NormCode)
|
(ptItemStats->ItemCode == ptItemStats->NormCode) && (ptItemStats->ItemCode == ptWantedItemStats->NormCode)
|
||||||
|| (ptItemStats->ItemCode == ptItemStats->UberCode) && (ptItemStats->ItemCode == ptWantedItemStats->NormCode)
|
|| (ptItemStats->ItemCode == ptItemStats->UberCode) && (ptItemStats->ItemCode == ptWantedItemStats->NormCode)
|
||||||
|| (ptItemStats->ItemCode == ptItemStats->UberCode) && (ptItemStats->ItemCode == ptWantedItemStats->UberCode)
|
|| (ptItemStats->ItemCode == ptItemStats->UberCode) && (ptItemStats->ItemCode == ptWantedItemStats->UberCode)
|
||||||
|| (ptItemStats->ItemCode == ptItemStats->HellCode) && (ptItemStats->ItemCode == ptWantedItemStats->NormCode)
|
|| (ptItemStats->ItemCode == ptItemStats->HellCode) && (ptItemStats->ItemCode == ptWantedItemStats->NormCode)
|
||||||
|| (ptItemStats->ItemCode == ptItemStats->HellCode) && (ptItemStats->ItemCode == ptWantedItemStats->UberCode)
|
|| (ptItemStats->ItemCode == ptItemStats->HellCode) && (ptItemStats->ItemCode == ptWantedItemStats->UberCode)
|
||||||
|| (ptItemStats->ItemCode == ptItemStats->HellCode) && (ptItemStats->ItemCode == ptWantedItemStats->HellCode)
|
|| (ptItemStats->ItemCode == ptItemStats->HellCode) && (ptItemStats->ItemCode == ptWantedItemStats->HellCode)
|
||||||
))
|
))
|
||||||
if(!(itemNeeded.isSpecificItem && (D2GetUniqueID(ptItem) != itemNeeded.specificID-1))
|
if(!(itemNeeded.isSpecificItem && (D2GetUniqueID(ptItem) != itemNeeded.specificID-1))
|
||||||
&& !(itemNeeded.haveNoSocket && (D2GetPlayerStat(ptItem, STATS_ITEM_NUMSOCKETS, 0) > 0))
|
&& !(itemNeeded.haveNoSocket && (D2GetPlayerStat(ptItem, STATS_ITEM_NUMSOCKETS, 0) > 0))
|
||||||
&& !(itemNeeded.haveSockets && (D2GetPlayerStat(ptItem, STATS_ITEM_NUMSOCKETS, 0) == 0))
|
&& !(itemNeeded.haveSockets && (D2GetPlayerStat(ptItem, STATS_ITEM_NUMSOCKETS, 0) == 0))
|
||||||
&& !(itemNeeded.isNotEthereal && D2isEtheral(ptItem))
|
&& !(itemNeeded.isNotEthereal && ptItem->ptItemData->isEtheral)
|
||||||
&& !(itemNeeded.isEthereal && !D2isEtheral(ptItem))
|
&& !(itemNeeded.isEthereal && !ptItem->ptItemData->isEtheral)
|
||||||
&& !(itemNeeded.isBasic && (ptItemStats->ItemCode != ptWantedItemStats->NormCode))
|
&& !(itemNeeded.isBasic && (ptItemStats->ItemCode != ptWantedItemStats->NormCode))
|
||||||
&& !(itemNeeded.isExceptional && (ptItemStats->ItemCode != ptWantedItemStats->UberCode))
|
&& !(itemNeeded.isExceptional && (ptItemStats->ItemCode != ptWantedItemStats->UberCode))
|
||||||
&& !(itemNeeded.isElite && (ptItemStats->ItemCode != ptWantedItemStats->HellCode))
|
&& !(itemNeeded.isElite && (ptItemStats->ItemCode != ptWantedItemStats->HellCode))
|
||||||
@ -166,9 +167,16 @@ void initWorldEventVariables()
|
|||||||
WEactive = 0;
|
WEactive = 0;
|
||||||
|
|
||||||
while (nbSOJSold >= nbNeedSOJSold)
|
while (nbSOJSold >= nbNeedSOJSold)
|
||||||
nbNeedSOJSold += (DWORD)(rand()/(RAND_MAX+1.0)*triggerAtSolJSoldDelta+triggerAtSolJSoldMin);
|
nbNeedSOJSold += (DWORD)(rand()/(RAND_MAX+1.0)*triggerAtSolJSoldDelta + triggerAtSolJSoldMin);
|
||||||
|
|
||||||
|
log_msg("initWorldEventVariables - nbSOJSold = %d, nbNeedSOJSold = %d\n", nbSOJSold, nbNeedSOJSold);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FCT_ASM ( caller_WEManagement_114 )
|
||||||
|
PUSH ECX
|
||||||
|
CALL WEManagement
|
||||||
|
RETN
|
||||||
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_WEManagement_1XX )
|
FCT_ASM ( caller_WEManagement_1XX )
|
||||||
POP EAX
|
POP EAX
|
||||||
@ -204,31 +212,29 @@ FCT_ASM ( caller_spawnDClone_111b )
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_spawnDClone_114 )
|
FCT_ASM( caller_spawnDClone_114 )
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
PUSH EDI
|
PUSH EDI
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
|
|
||||||
PUSH 0
|
PUSH 0
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
PUSH 0xFFFFFFFF
|
PUSH 0xFFFFFFFF
|
||||||
PUSH DWORD PTR SS : [ESP + 0x30]
|
PUSH DWORD PTR SS : [ESP + 0x30]
|
||||||
PUSH DWORD PTR SS : [ESP + 0x30]
|
PUSH DWORD PTR SS : [ESP + 0x30]
|
||||||
PUSH DWORD PTR SS : [ESP + 0x30]
|
PUSH DWORD PTR SS : [ESP + 0x30]
|
||||||
MOV ECX, EDI
|
MOV ECX, EDI
|
||||||
MOV EDX, EAX
|
MOV EDX, EAX
|
||||||
CALL spawnDClone
|
CALL spawnDClone
|
||||||
|
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EDI
|
POP EDI
|
||||||
POP EDX
|
POP EDX
|
||||||
POP ECX
|
POP ECX
|
||||||
POP EBX
|
POP EBX
|
||||||
RETN 0x18
|
RETN 0x18
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM( caller_addClientForWE_111 )
|
FCT_ASM( caller_addClientForWE_111 )
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
CALL initWorldEventVariables
|
CALL initWorldEventVariables
|
||||||
@ -253,7 +259,7 @@ void Install_WorldEvent()
|
|||||||
if ( version_D2Game < V110 )
|
if ( version_D2Game < V110 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
nbSOJSold = (DWORD)(rand()/(RAND_MAX+1.0)*valueInitSOJSoldDelta+valueInitSOJSoldMin);
|
nbSOJSold = (DWORD)(rand()/(RAND_MAX+1.0)*valueInitSOJSoldDelta + valueInitSOJSoldMin);
|
||||||
if (active_AutomaticSell)
|
if (active_AutomaticSell)
|
||||||
{
|
{
|
||||||
prevTicks = GetTickCount();
|
prevTicks = GetTickCount();
|
||||||
@ -264,60 +270,48 @@ void Install_WorldEvent()
|
|||||||
|
|
||||||
// spawn DClone
|
// spawn DClone
|
||||||
mem_seek R8(D2Game, 0000, 0000, 3F720, 4BCB1, ECF10, 41570, 25280, CFBD0, 1A4A4F);
|
mem_seek R8(D2Game, 0000, 0000, 3F720, 4BCB1, ECF10, 41570, 25280, CFBD0, 1A4A4F);
|
||||||
if (version_D2Client == V114d) {
|
MEMC_REF4( V2SpawnSuperUnique , version_D2Game >= V114a ? (DWORD)caller_spawnDClone_114 : version_D2Game >= V111b ? (DWORD)caller_spawnDClone_111b : version_D2Game == V111 ? (DWORD)caller_spawnDClone_111 : (DWORD)spawnDClone);
|
||||||
MEMT_REF4(0xFFFFBF8D, caller_spawnDClone_114);
|
//6FC6F71F |. E8 FCFAFFFF CALL D2Game.6FC6F220
|
||||||
} else {
|
|
||||||
MEMC_REF4(V2SpawnMonster, version_D2Game >= V111b ? (DWORD)caller_spawnDClone_111b : version_D2Game == V111 ? (DWORD)caller_spawnDClone_111 : (DWORD)spawnDClone);
|
|
||||||
}
|
|
||||||
//6FC6F71F |. E8 FCFAFFFF CALL D2Game.6FC6F220
|
|
||||||
//01FCBCB0 |. E8 2BEFFFFF CALL D2Game.01FCABE0 ; \D2Game.01FCABE0
|
//01FCBCB0 |. E8 2BEFFFFF CALL D2Game.01FCABE0 ; \D2Game.01FCABE0
|
||||||
//0205CF0F |. E8 CCF8FFFF CALL D2Game.0205C7E0 ; \D2Game.0205C7E0
|
//0205CF0F |. E8 CCF8FFFF CALL D2Game.0205C7E0 ; \D2Game.0205C7E0
|
||||||
//6FC6156F |. E8 1CF6FFFF CALL D2Game.6FC60B90 ; \D2Game.6FC60B90
|
//6FC6156F |. E8 1CF6FFFF CALL D2Game.6FC60B90 ; \D2Game.6FC60B90
|
||||||
//6FC4527F |. E8 CCF6FFFF CALL D2Game.6FC44950 ; \D2Game.6FC44950
|
//6FC4527F |. E8 CCF6FFFF CALL D2Game.6FC44950 ; \D2Game.6FC44950
|
||||||
//6FCEFBCF |. E8 4CE2FFFF CALL D2Game.6FCEDE20 ; \D2Game.6FCEDE20
|
//6FCEFBCF |. E8 4CE2FFFF CALL D2Game.6FCEDE20 ; \D2Game.6FCEDE20
|
||||||
|
//005A4A4E |. E8 8DBFFFFF CALL Game.005A09E0 ; \Game.005A09E0
|
||||||
|
|
||||||
// verify if the item sold is a trigger of WE
|
// verify if the item sold is a trigger of WE
|
||||||
mem_seek R8(D2Game, 0000, 0000, 977D0, 8E799, 92859, 84499, BFB29, 72BE9, 179667);
|
mem_seek R8(D2Game, 0000, 0000, 977D0, 8E799, 92859, 84499, BFB29, 72BE9, 179667);
|
||||||
if (version_D2Game == V114d) {
|
MEMJ_REF4( D2TestFlags , verifIfWEItem);
|
||||||
MEMT_REF4(0x000AEA35, verifIfWEItem);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2TestFlags, verifIfWEItem);
|
|
||||||
}
|
|
||||||
//6FCC77CF |. E8 32400500 CALL <JMP.&D2Common.#10707>
|
//6FCC77CF |. E8 32400500 CALL <JMP.&D2Common.#10707>
|
||||||
//0200E798 |. E8 E9BDF7FF CALL <JMP.&D2Common.#10911>
|
//0200E798 |. E8 E9BDF7FF CALL <JMP.&D2Common.#10911>
|
||||||
//02002858 |. E8 E57DF7FF CALL <JMP.&D2Common.#10303>
|
//02002858 |. E8 E57DF7FF CALL <JMP.&D2Common.#10303>
|
||||||
//6FCA4498 |. E8 3B62F8FF CALL <JMP.&D2Common.#10989>
|
//6FCA4498 |. E8 3B62F8FF CALL <JMP.&D2Common.#10989>
|
||||||
//6FCDFB28 |. E8 77ADF4FF CALL <JMP.&D2Common.#10202>
|
//6FCDFB28 |. E8 77ADF4FF CALL <JMP.&D2Common.#10202>
|
||||||
//6FC92BE8 |. E8 DD7AF9FF CALL <JMP.&D2Common.#10458>
|
//6FC92BE8 |. E8 DD7AF9FF CALL <JMP.&D2Common.#10458>
|
||||||
|
//00579666 |. E8 35EA0A00 CALL Game.006280A0 ; \Game.006280A0
|
||||||
|
|
||||||
// management of the WorldEvent
|
// management of the WorldEvent
|
||||||
mem_seek R8(D2Game, 0000, 0000, 3CE0, 51F01, C5681, EBF41, 4A791, E5F51, 1389B1);
|
mem_seek R8(D2Game, 0000, 0000, 3CE0, 51F01, C5681, EBF41, 4A791, E5F51, 12FEED);
|
||||||
if (version_D2Game == V114d) {
|
MEMC_REF4( V2GetGameByClientID , version_D2Game >= V114a ? (DWORD)caller_WEManagement_114 : version_D2Game >= V111 ? (DWORD)WEManagement : (DWORD)caller_WEManagement_1XX);
|
||||||
MEMT_REF4(0xFFFF752B, caller_WEManagement_1XX);
|
|
||||||
} else {
|
|
||||||
MEMC_REF4(V2GetGameByClientID, version_D2Game >= V111 ? (DWORD)WEManagement : (DWORD)caller_WEManagement_1XX);
|
|
||||||
}
|
|
||||||
//6FC33CDF . E8 FC570000 CALL D2Game.6FC394E0
|
//6FC33CDF . E8 FC570000 CALL D2Game.6FC394E0
|
||||||
//01FD1F00 |. E8 1BE60800 CALL D2Game.02060520
|
//01FD1F00 |. E8 1BE60800 CALL D2Game.02060520
|
||||||
//02035680 |. E8 1BF30100 CALL D2Game.020549A0
|
//02035680 |. E8 1BF30100 CALL D2Game.020549A0
|
||||||
//6FD0BF40 |. E8 1BA4FBFF CALL D2Game.6FCC6360
|
//6FD0BF40 |. E8 1BA4FBFF CALL D2Game.6FCC6360
|
||||||
//6FC6A790 |. E8 4B03FEFF CALL D2Game.6FC4AAE0
|
//6FC6A790 |. E8 4B03FEFF CALL D2Game.6FC4AAE0
|
||||||
//6FD05F50 |. E8 AB67FDFF CALL D2Game.6FCDC700
|
//6FD05F50 |. E8 AB67FDFF CALL D2Game.6FCDC700
|
||||||
|
//0052FEEC |. E8 6FE9FFFF CALL Game.0052E860
|
||||||
|
//to check : 005389B0 |. E8 2B75FFFF CALL Game.0052FEE0
|
||||||
|
|
||||||
// add client for the WorldEvent
|
// add client for the WorldEvent
|
||||||
mem_seek R8(D2Game, 0000, 0000, 1AEF, 3786A, 7055A, 6265F, CB0BF, D556F, 13F2D2);
|
mem_seek R8(D2Game, 0000, 0000, 1AEF, 3786A, 7055A, 6265F, CB0BF, D556F, 13F2D2);
|
||||||
if (version_D2Game == V114d) {
|
MEMC_REF4( D2AddClient , version_D2Game >= V111 && version_D2Game <= V113d ? caller_addClientForWE_111 : caller_addClientForWE);
|
||||||
MEMT_REF4(0xFFFED27A, caller_addClientForWE);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MEMC_REF4(D2AddClient, version_D2Game >= V111 ? caller_addClientForWE_111 : caller_addClientForWE);
|
|
||||||
}
|
|
||||||
//6FC31AEE |. E8 6D510000 CALL D2Game.6FC36C60
|
//6FC31AEE |. E8 6D510000 CALL D2Game.6FC36C60
|
||||||
//01FB7869 |. E8 32C50A00 CALL D2Game.02063DA0
|
//01FB7869 |. E8 32C50A00 CALL D2Game.02063DA0
|
||||||
//01FE0559 |. E8 B27C0700 CALL D2Game.02058210
|
//01FE0559 |. E8 B27C0700 CALL D2Game.02058210
|
||||||
//6FC8265E |. E8 FD890800 CALL D2Game.6FD0B060
|
//6FC8265E |. E8 FD890800 CALL D2Game.6FD0B060
|
||||||
//6FCEB0BE |. E8 6DE8F7FF CALL D2Game.6FC69930
|
//6FCEB0BE |. E8 6DE8F7FF CALL D2Game.6FC69930
|
||||||
//6FCF556E |. E8 FDFA0000 CALL D2Game.6FD05070
|
//6FCF556E |. E8 FDFA0000 CALL D2Game.6FD05070
|
||||||
|
//0053F2D1 |. E8 7AD2FEFF CALL Game.0052C550
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Add an extra save file for each characters.
|
Add an extra save file for each characters.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
|
|
||||||
this file implements some common and useful
|
|
||||||
function related to some Diablo II mechanisms.
|
|
||||||
|
|
||||||
/*============================================*/
|
/*============================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Data added to D2 base-stucture
|
Data added to D2 base-stucture
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*================================================
|
/*================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
Add support 1.13d by L'Autour.
|
Add support 1.13d by L'Autour.
|
||||||
Add support 1.14d by haxifix.
|
Add support 1.14d by haxifix.
|
||||||
|
|
||||||
This file implements some common and useful
|
This file implements some common and useful
|
||||||
function related to some Diablo II mechanisms.
|
function related to some Diablo II mechanisms.
|
||||||
@ -23,13 +23,14 @@ struct s_shifting {
|
|||||||
extern s_shifting shifting;
|
extern s_shifting shifting;
|
||||||
|
|
||||||
//#ifdef MSVC
|
//#ifdef MSVC
|
||||||
#define FASTCALL __fastcall
|
#define FASTCALL __fastcall
|
||||||
//#else
|
//#else
|
||||||
//#define FASTCALL __msfastcall
|
//#define FASTCALL __msfastcall
|
||||||
//#endif
|
//#endif
|
||||||
#define STDCALL __stdcall
|
#define STDCALL __stdcall
|
||||||
#define FCT_ASM(N) __declspec(naked) void N() {__asm{
|
#define FCT_ASM(N) __declspec(naked) void N() {__asm{
|
||||||
#define RANDOM(V) ((int)(rand()/(RAND_MAX+1.0)*(V)))
|
#define RANDOM(V) ((int)(rand()/(RAND_MAX+1.0)*(V)))
|
||||||
|
#define RANDOMF() ((double)rand() / (double)RAND_MAX)
|
||||||
//#define RANDOM(V) (rand()%(V))
|
//#define RANDOM(V) (rand()%(V))
|
||||||
|
|
||||||
//#define PY(C) (*(PYPlayerData**)((BYTE*)(ptChar)+shifting.ptPYPlayerData))
|
//#define PY(C) (*(PYPlayerData**)((BYTE*)(ptChar)+shifting.ptPYPlayerData))
|
||||||
@ -87,7 +88,10 @@ extern DataTables* SgptDataTables;
|
|||||||
|
|
||||||
extern TD2AddPlayerStat V2AddPlayerStat;
|
extern TD2AddPlayerStat V2AddPlayerStat;
|
||||||
extern TD2GetGameByClientID V2GetGameByClientID;
|
extern TD2GetGameByClientID V2GetGameByClientID;
|
||||||
|
extern TD2SpawnSuperUnique V2SpawnSuperUnique;
|
||||||
extern TD2SpawnMonster V2SpawnMonster;
|
extern TD2SpawnMonster V2SpawnMonster;
|
||||||
|
extern TD2Game235C0 V2Game235C0;
|
||||||
|
extern TD2ReadFile V2ReadFile;
|
||||||
//extern TD2SetColorPopup V2SetColorPopup;
|
//extern TD2SetColorPopup V2SetColorPopup;
|
||||||
extern WORD (*getDescStrPos) (DWORD statID);
|
extern WORD (*getDescStrPos) (DWORD statID);
|
||||||
extern void* (STDCALL *compileTxtFile)(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength);
|
extern void* (STDCALL *compileTxtFile)(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength);
|
||||||
@ -102,13 +106,14 @@ void __inline fillRect(DWORD x, DWORD y, DWORD Width, DWORD Height, DWORD color,
|
|||||||
#define WindowStartX (*ptWindowStartX)
|
#define WindowStartX (*ptWindowStartX)
|
||||||
#define GameTypeMode (*ptGameTypeMode)
|
#define GameTypeMode (*ptGameTypeMode)
|
||||||
#define ClientTable (*ptClientTable)
|
#define ClientTable (*ptClientTable)
|
||||||
|
//#define CurrentNPCNum (*ptCurrentNPCNum)
|
||||||
#define IsLodGame (*ptIsLodGame)
|
#define IsLodGame (*ptIsLodGame)
|
||||||
#define DifficultyLevel (*ptDifficultyLevel)
|
#define DifficultyLevel (*ptDifficultyLevel)
|
||||||
#define MouseY (*ptMouseY)
|
#define MouseY (*ptMouseY)
|
||||||
#define MouseX (*ptMouseX)
|
#define MouseX (*ptMouseX)
|
||||||
#define ptClientChar (*ptptClientChar)
|
#define ptClientChar (*ptptClientChar)
|
||||||
//#define CurrentNPCNum (*ptCurrentNPCNum)
|
#define InputCommandLen (*ptInputCommandLen)
|
||||||
|
#define InputCommand (*ptInputCommand)
|
||||||
|
|
||||||
void initD2functions();
|
void initD2functions();
|
||||||
|
|
||||||
|
@ -1,20 +1,11 @@
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
File modified by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
NAME
|
Main Diablo II extra DLL handler.
|
||||||
inifile.h
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
Memory cached INI file read/write class to replace legacy MS code
|
|
||||||
|
|
||||||
COPYRIGHT
|
|
||||||
©1999-2004 Ultrafunk (www.ultrafunk.com) - info@ultrafunk.com
|
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
extern int version_Game;
|
extern int version_Game;
|
||||||
//extern int version_binkw32;
|
//extern int version_binkw32;
|
||||||
//extern int version_Bnclient;
|
//extern int version_Bnclient;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
@file error.hpp
|
@file error.hpp
|
||||||
@brief Error logger definition.
|
@brief Error logger definition.
|
||||||
|
|
||||||
This file defiens various functions related to
|
This file defiens various functions related to
|
||||||
error handling in D2External functions.
|
error handling in D2External functions.
|
||||||
|
|
||||||
==============================================*/
|
==============================================*/
|
||||||
@ -12,9 +12,10 @@
|
|||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
extern DWORD active_logFile;
|
extern int active_logFile;
|
||||||
|
|
||||||
void log_initfile();
|
void log_initfile();
|
||||||
|
void log_close();
|
||||||
void log_box( const char* pFormat, ... );
|
void log_box( const char* pFormat, ... );
|
||||||
void log_msg( const char* pFormat, ... );
|
void log_msg( const char* pFormat, ... );
|
||||||
void d2_assert( bool pCondition, char* pLocation, char* pMessage, int pLineNbr );
|
void d2_assert( bool pCondition, char* pLocation, char* pMessage, int pLineNbr );
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Add an extra save file for each characters.
|
Add an extra save file for each characters.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
Add DoNotCloseNihlathakPortal by haxifix.
|
||||||
|
|
||||||
More little options.
|
More little options.
|
||||||
|
|
||||||
@ -8,17 +9,19 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
extern int active_DisplayItemLevel;
|
extern bool active_DisplayItemLevel;
|
||||||
extern DWORD nbPlayersCommandByDefault;
|
extern DWORD nbPlayersCommandByDefault;
|
||||||
extern DWORD nbPlayersCommand;
|
extern DWORD nbPlayersCommand;
|
||||||
extern int active_alwaysRegenMapInSP;
|
extern bool active_alwaysRegenMapInSP;
|
||||||
extern int active_RunLODs;
|
extern bool active_RunLODs;
|
||||||
extern int active_AlwaysDisplayLifeMana;
|
extern int active_AlwaysDisplayLifeMana;
|
||||||
extern int active_EnabledTXTFilesWithMSExcel;
|
extern bool active_EnabledTXTFilesWithMSExcel;
|
||||||
extern int active_DisplayBaseStatsValue;
|
extern bool active_DisplayBaseStatsValue;
|
||||||
extern int active_LadderRunewords;
|
extern bool active_LadderRunewords;
|
||||||
extern int active_EnabledCowPortalWhenCowKingWasKill;
|
extern bool active_EnabledCowPortalWhenCowKingWasKill;
|
||||||
extern int active_DoNotCloseNihlathakPortal;
|
extern bool active_DoNotCloseNihlathakPortal;
|
||||||
|
extern bool active_MoveCainNearHarrogathWaypoint;
|
||||||
|
extern bool active_RemoveExperienceDiminushingReturn;
|
||||||
|
|
||||||
void Install_DisplayItemLevel();
|
void Install_DisplayItemLevel();
|
||||||
void Install_SendPlayersCommand();
|
void Install_SendPlayersCommand();
|
||||||
@ -30,5 +33,7 @@ void Install_DisplayBaseStatsValue();
|
|||||||
void Install_LadderRunewords();
|
void Install_LadderRunewords();
|
||||||
void Install_EnabledCowPortalWhenCowKingWasKill();
|
void Install_EnabledCowPortalWhenCowKingWasKill();
|
||||||
void Install_DoNotCloseNihlathakPortal();
|
void Install_DoNotCloseNihlathakPortal();
|
||||||
|
void Install_MoveCainNearHarrogathWaypoint();
|
||||||
|
void Install_RemoveExperienceDiminushingReturn();
|
||||||
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
infinity Stash gestion
|
infinity Stash gestion
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -13,13 +13,57 @@ extern DWORD maxSharedPages;
|
|||||||
extern DWORD nbPagesPerIndex;
|
extern DWORD nbPagesPerIndex;
|
||||||
extern DWORD nbPagesPerIndex2;
|
extern DWORD nbPagesPerIndex2;
|
||||||
extern bool active_multiPageStash;
|
extern bool active_multiPageStash;
|
||||||
|
extern int active_SharedStashInMultiPlayer;
|
||||||
extern bool active_sharedStash;
|
extern bool active_sharedStash;
|
||||||
extern bool active_sharedGold;
|
extern bool active_sharedGold;
|
||||||
extern bool separateHardSoftStash;
|
extern bool separateHardSoftStash;
|
||||||
extern char* sharedStashFilename;
|
extern char* sharedStashFilename;
|
||||||
|
|
||||||
extern bool displaySharedSetItemNameInGreen;
|
extern bool displaySharedSetItemNameInGreen;
|
||||||
extern int posXPreviousBtn,posYPreviousBtn,posXNextBtn,posYNextBtn,posXSharedBtn,posYSharedBtn,posXPreviousIndexBtn,posYPreviousIndexBtn,posXNextIndexBtn,posYNextIndexBtn,posXPutGoldBtn,posYPutGoldBtn,posXTakeGoldBtn,posYTakeGoldBtn;
|
extern int posXPreviousBtn;
|
||||||
|
extern int posYPreviousBtn;
|
||||||
|
extern int posWPreviousBtn;
|
||||||
|
extern int posHPreviousBtn;
|
||||||
|
extern int posXNextBtn;
|
||||||
|
extern int posYNextBtn;
|
||||||
|
extern int posWNextBtn;
|
||||||
|
extern int posHNextBtn;
|
||||||
|
extern int posXSharedBtn;
|
||||||
|
extern int posYSharedBtn;
|
||||||
|
extern int posWSharedBtn;
|
||||||
|
extern int posHSharedBtn;
|
||||||
|
extern int posXPreviousIndexBtn;
|
||||||
|
extern int posYPreviousIndexBtn;
|
||||||
|
extern int posWPreviousIndexBtn;
|
||||||
|
extern int posHPreviousIndexBtn;
|
||||||
|
extern int posXNextIndexBtn;
|
||||||
|
extern int posYNextIndexBtn;
|
||||||
|
extern int posWNextIndexBtn;
|
||||||
|
extern int posHNextIndexBtn;
|
||||||
|
extern int posXPutGoldBtn;
|
||||||
|
extern int posYPutGoldBtn;
|
||||||
|
extern int posWPutGoldBtn;
|
||||||
|
extern int posHPutGoldBtn;
|
||||||
|
extern int posXTakeGoldBtn;
|
||||||
|
extern int posYTakeGoldBtn;
|
||||||
|
extern int posWTakeGoldBtn;
|
||||||
|
extern int posHTakeGoldBtn;
|
||||||
|
extern int posXStashNameField;
|
||||||
|
extern int posYStashNameField;
|
||||||
|
extern int posWStashNameField;
|
||||||
|
extern int posHStashNameField;
|
||||||
|
extern int posXStashGoldField;
|
||||||
|
extern int posYStashGoldField;
|
||||||
|
extern int posWStashGoldField;
|
||||||
|
extern int posHStashGoldField;
|
||||||
|
|
||||||
|
extern bool autoRenameStashPage;
|
||||||
|
extern DWORD PersonalNormalPageColor;
|
||||||
|
extern DWORD PersonalIndexPageColor;
|
||||||
|
extern DWORD PersonalMainIndexPageColor;
|
||||||
|
extern DWORD SharedNormalPageColor;
|
||||||
|
extern DWORD SharedIndexPageColor;
|
||||||
|
extern DWORD SharedMainIndexPageColor;
|
||||||
|
|
||||||
void toggleToSharedStash(Unit* ptChar);
|
void toggleToSharedStash(Unit* ptChar);
|
||||||
void toggleToSelfStash(Unit* ptChar);
|
void toggleToSelfStash(Unit* ptChar);
|
||||||
@ -37,13 +81,17 @@ void renameCurrentStash(Unit* ptChar, char* name);
|
|||||||
void insertStash(Unit* ptChar);
|
void insertStash(Unit* ptChar);
|
||||||
bool deleteStash(Unit* ptChar, bool isClient);
|
bool deleteStash(Unit* ptChar, bool isClient);
|
||||||
|
|
||||||
void selectStash(Unit* ptChar, Stash* newStash);
|
void updateSelectedStashClient(Unit* ptChar);
|
||||||
|
void selectStash(Unit* ptChar, Stash* newStash, bool forceUpdate = false);
|
||||||
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags, bool bOnlyItems);
|
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags, bool bOnlyItems);
|
||||||
|
|
||||||
Stash* addStash(Unit* ptChar, bool isShared);
|
Stash* addStash(Unit* ptChar, bool isShared, bool autoSetIndex, Stash* ptStash = NULL);
|
||||||
DWORD loadStashList(Unit* ptChar, BYTE* data, DWORD maxSize, DWORD* curSize, bool isShared);
|
DWORD loadStashList(Unit* ptChar, BYTE* data, DWORD maxSize, DWORD* curSize, bool isShared);
|
||||||
void saveStashList(Unit* ptChar, Stash* ptStash, BYTE** data, DWORD* maxSize, DWORD* curSize);
|
void saveStashList(Unit* ptChar, Stash* ptStash, BYTE** data, DWORD* maxSize, DWORD* curSize);
|
||||||
|
|
||||||
|
void getCurrentStashName(WCHAR* buffer, DWORD maxSize, Unit* ptChar);
|
||||||
|
WCHAR* getDefaultStashName(Unit* ptChar);
|
||||||
|
|
||||||
void Install_MultiPageStash();
|
void Install_MultiPageStash();
|
||||||
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Load Player Custom Data.
|
Load Player Custom Data.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Add "plugY v1.00" on screen.
|
Print PlugY version on screen.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Modification of code in memory functions.
|
Modification of code in memory functions.
|
||||||
|
|
||||||
/*============================================*/
|
/*============================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ void memt_dword(DWORD old, DWORD val);
|
|||||||
void memt_ref4(DWORD old, DWORD ref);
|
void memt_ref4(DWORD old, DWORD ref);
|
||||||
|
|
||||||
//CALL <JMP.&D2gfx.#10047>
|
//CALL <JMP.&D2gfx.#10047>
|
||||||
#define MEMJ_REF4(O, R) memj_ref4((DWORD)(O), (DWORD)(R))
|
#define MEMJ_REF4(O, R) if (version_Game < V114a) memj_ref4((DWORD)(O), (DWORD)(R)); else memc_ref4((DWORD)(O), (DWORD)(R))
|
||||||
void memj_ref4(DWORD old, DWORD ref);
|
void memj_ref4(DWORD old, DWORD ref);
|
||||||
|
|
||||||
//CALL D2Common.6FD5F500
|
//CALL D2Common.6FD5F500
|
||||||
@ -31,6 +31,4 @@ void memc_ref4(DWORD old, DWORD ref);
|
|||||||
#define MEMD_REF4(O, R) memd_ref4((DWORD)(O), (DWORD)(R))
|
#define MEMD_REF4(O, R) memd_ref4((DWORD)(O), (DWORD)(R))
|
||||||
void memd_ref4(DWORD old, DWORD ref);
|
void memd_ref4(DWORD old, DWORD ref);
|
||||||
|
|
||||||
void patchMemory4(DWORD value);
|
|
||||||
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -12,6 +12,7 @@
|
|||||||
#define isOnStatsPage(x,y) ((x<400) && (y<553))
|
#define isOnStatsPage(x,y) ((x<400) && (y<553))
|
||||||
|
|
||||||
extern DWORD bDontPrintBorder;
|
extern DWORD bDontPrintBorder;
|
||||||
|
extern int extraHiddenPage;
|
||||||
|
|
||||||
void GoNextStatPage();
|
void GoNextStatPage();
|
||||||
void GoPreviousStatPage();
|
void GoPreviousStatPage();
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Loading parameters from ini file.
|
Loading parameters from ini file.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define PLUGY_VERSION "12.00"
|
#define PLUGY_VERSION "14.00"
|
||||||
|
|
||||||
enum TargetMod
|
enum TargetMod
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Data added to Player base-stucture
|
Data added to Player base-stucture
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@ -16,9 +16,9 @@ struct Unit;
|
|||||||
struct Stash
|
struct Stash
|
||||||
{
|
{
|
||||||
DWORD id;
|
DWORD id;
|
||||||
union {
|
union {
|
||||||
DWORD flags;
|
DWORD flags;
|
||||||
struct {
|
struct {
|
||||||
DWORD isShared:1; //
|
DWORD isShared:1; //
|
||||||
DWORD isIndex:1; //
|
DWORD isIndex:1; //
|
||||||
DWORD isMainIndex:1; //
|
DWORD isMainIndex:1; //
|
||||||
@ -35,13 +35,13 @@ struct Stash
|
|||||||
struct PYPlayerData
|
struct PYPlayerData
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
DWORD flags;
|
DWORD flags;
|
||||||
struct {
|
struct {
|
||||||
DWORD selfStashIsOpened:1; //
|
DWORD selfStashIsOpened:1; //
|
||||||
DWORD sharedStashIsOpened:1;//
|
DWORD sharedStashIsOpened:1;//
|
||||||
DWORD showSharedStash:1; //
|
DWORD showSharedStash:1; //
|
||||||
// DWORD notOnRealm:1; //set to 1 when the player is load from client or in SP
|
// DWORD notOnRealm:1; //set to 1 when the player is load from client or in SP
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
DWORD sharedGold;
|
DWORD sharedGold;
|
||||||
DWORD nbSelfPages;
|
DWORD nbSelfPages;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Data added to D2 base-stucture
|
Data added to D2 base-stucture
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Changing the current save path.
|
Changing the current save path.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Save Player Custom Data.
|
Save Player Custom Data.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
extern bool active_AutoBackup;
|
||||||
|
extern int maxBackupPerCharacter;
|
||||||
|
|
||||||
|
void backupSaveFiles(char* name, int isHardCoreGame);
|
||||||
void Install_SavePlayerData();
|
void Install_SavePlayerData();
|
||||||
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -1,7 +1,7 @@
|
|||||||
/*=================================================================
|
/*=================================================================
|
||||||
File created by Yohann NICOLAS.
|
File created by Yohann NICOLAS.
|
||||||
|
|
||||||
Add an extra save file shared by all own characters.
|
Add an extra save file shared by all own characters.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
extern bool active_SkillsPoints;
|
extern bool active_SkillsPoints;
|
||||||
extern bool unassignSkillsPointsOneByOne;
|
extern bool unassignSkillsPointsOneForOne;
|
||||||
extern int posXUnassignSkillBtn, posYUnassignSkillBtn;
|
extern int posXUnassignSkillBtn, posYUnassignSkillBtn;
|
||||||
|
|
||||||
void UnassignAllSkillsPoints(Unit* ptChar);
|
void UnassignAllSkillsPoints(Unit* ptChar);
|
||||||
|
@ -9,6 +9,33 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
extern bool active_UberQuest;
|
extern bool active_UberQuest;
|
||||||
|
extern DWORD UberMephistoX;
|
||||||
|
extern DWORD UberMephistoY;
|
||||||
|
extern DWORD UberDiabloX;
|
||||||
|
extern DWORD UberDiabloY;
|
||||||
|
extern DWORD UberBaalX;
|
||||||
|
extern DWORD UberBaalY;
|
||||||
|
|
||||||
|
extern bool active_UberMinions;
|
||||||
|
//extern DWORD UberMephistoNbMinions;
|
||||||
|
//extern DWORD UberMephistoMinions[];
|
||||||
|
extern int UberMephistoSpawnPercent;
|
||||||
|
extern DWORD UberMephistoSpawnRadius;
|
||||||
|
|
||||||
|
//extern DWORD UberBaalNbMinions;
|
||||||
|
//extern DWORD UberBaalMinions[];
|
||||||
|
extern int UberBaalSpawnPercent;
|
||||||
|
extern DWORD UberBaalSpawnRadius;
|
||||||
|
|
||||||
|
//extern DWORD UberDiabloNbMinions;
|
||||||
|
//extern DWORD UberDiabloMinions[];
|
||||||
|
extern int UberDiabloSpawnPercent;
|
||||||
|
extern DWORD UberDiabloSpawnRadius;
|
||||||
|
|
||||||
|
extern bool active_UberDiabloRushTweekAI;
|
||||||
|
extern bool active_UberBaalTeleportTweekAI;
|
||||||
|
extern bool active_UberBaalChillingArmorTweekAI;
|
||||||
|
extern int uberBaalChillingArmorTimer;
|
||||||
|
|
||||||
void Install_UberQuest();
|
void Install_UberQuest();
|
||||||
void resetQuestState();
|
void resetQuestState();
|
||||||
|
@ -8,7 +8,8 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
__inline void updateServer(WORD p) {if (!onRealm) D2SendToServer3(0x3A, p);};
|
void updateServer(WORD p);
|
||||||
|
|
||||||
void Install_UpdateServer();
|
void Install_UpdateServer();
|
||||||
|
|
||||||
/*================================= END OF FILE =================================*/
|
/*================================= END OF FILE =================================*/
|
@ -39,7 +39,7 @@ BYTE loadDll[] = {
|
|||||||
0x74,0x04, //JE SHORT d2gfx.6FA7BDC1
|
0x74,0x04, //JE SHORT d2gfx.6FA7BDC1
|
||||||
0x6A,0x00, //PUSH 0
|
0x6A,0x00, //PUSH 0
|
||||||
0xEB,0x13, //JMP SHORT d2gfx.6FA7BDC1
|
0xEB,0x13, //JMP SHORT d2gfx.6FA7BDC1
|
||||||
0x68,0x10,0x27,0x00,0x00, //PUSH 2710 ;Init Ordinal(10000)
|
0x68,0x10,0x27,0x00,0x00, //PUSH 2710 ;Init Ordinal(10000)
|
||||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
|
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
|
||||||
0x85,0xC0, //TEST EAX,EAX
|
0x85,0xC0, //TEST EAX,EAX
|
||||||
@ -67,7 +67,7 @@ BYTE freeDll[] = {
|
|||||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
||||||
0x85,0xC0, //TEST EAX,EAX
|
0x85,0xC0, //TEST EAX,EAX
|
||||||
0x75,0x13, //JNZ SHORT d2gfx.6FA7BDEF
|
0x75,0x13, //JNZ SHORT d2gfx.6FA7BDEF
|
||||||
0x68,0x11,0x27,0x00,0x00, //PUSH 2711 ;Release Ordinal(10001)
|
0x68,0x11,0x27,0x00,0x00, //PUSH 2711 ;Release Ordinal(10001)
|
||||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
||||||
0x85,0xC0, //TEST EAX,EAX
|
0x85,0xC0, //TEST EAX,EAX
|
||||||
@ -265,7 +265,7 @@ int main(int argc, char * argv[])
|
|||||||
{
|
{
|
||||||
msgBox(boxName, MB_OK | MB_ICONEXCLAMATION,
|
msgBox(boxName, MB_OK | MB_ICONEXCLAMATION,
|
||||||
"Current version of LoD (%s) isn't compatible with PlugY.\n\n"
|
"Current version of LoD (%s) isn't compatible with PlugY.\n\n"
|
||||||
"Please, install a patch between 1.09 and 1.13d or 1.14.",
|
"Please, install a patch between 1.09 and 1.13d or 1.14d.",
|
||||||
GetVersionString(version));
|
GetVersionString(version));
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
@ -1,63 +1,63 @@
|
|||||||
//Script de ressources g<EFBFBD>n<EFBFBD>r<EFBFBD> par Microsoft Visual C++.
|
//Script de ressources généré par Microsoft Visual C++.
|
||||||
//
|
//
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
#define APSTUDIO_READONLY_SYMBOLS
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// G<EFBFBD>n<EFBFBD>r<EFBFBD> <20> partir de la ressource TEXTINCLUDE 2.
|
// Généré à partir de la ressource TEXTINCLUDE 2.
|
||||||
//
|
//
|
||||||
#ifndef APSTUDIO_INVOKED
|
#ifndef APSTUDIO_INVOKED
|
||||||
#include "targetver.h"
|
#include "targetver.h"
|
||||||
#endif
|
#endif
|
||||||
#define APSTUDIO_HIDDEN_SYMBOLS
|
#define APSTUDIO_HIDDEN_SYMBOLS
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#undef APSTUDIO_HIDDEN_SYMBOLS
|
#undef APSTUDIO_HIDDEN_SYMBOLS
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// French (France) resources
|
// French (France) resources
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
|
||||||
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
|
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Version
|
// Version
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,0,6,0
|
FILEVERSION 1,0,6,0
|
||||||
PRODUCTVERSION 1,0,6,0
|
PRODUCTVERSION 1,0,6,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
#else
|
#else
|
||||||
FILEFLAGS 0x0L
|
FILEFLAGS 0x0L
|
||||||
#endif
|
#endif
|
||||||
FILEOS 0x40004L
|
FILEOS 0x40004L
|
||||||
FILETYPE 0x1L
|
FILETYPE 0x1L
|
||||||
FILESUBTYPE 0x0L
|
FILESUBTYPE 0x0L
|
||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "StringFileInfo"
|
BLOCK "StringFileInfo"
|
||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "040c04b0"
|
BLOCK "040c04b0"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Yohann Nicolas"
|
VALUE "CompanyName", "Yohann Nicolas"
|
||||||
VALUE "FileDescription", "PlugY patcher"
|
VALUE "FileDescription", "PlugY patcher"
|
||||||
VALUE "FileVersion", "1.0.6.0"
|
VALUE "FileVersion", "1.0.6.0"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2017"
|
VALUE "LegalCopyright", "Copyright (C) 2017"
|
||||||
VALUE "OriginalFilename", "PlugYInstall.exe"
|
VALUE "OriginalFilename", "PlugYInstall.exe"
|
||||||
VALUE "ProductName", "PlugY, The Survival Kit"
|
VALUE "ProductName", "PlugY, The Survival Kit"
|
||||||
VALUE "ProductVersion", "12.00"
|
VALUE "ProductVersion", "14.00"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "Translation", 0x40c, 1200
|
VALUE "Translation", 0x40c, 1200
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
#endif // French (France) resources
|
#endif // French (France) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
Binary file not shown.
@ -1,302 +1,302 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="9,00"
|
Version="9,00"
|
||||||
Name="PlugYInstall"
|
Name="PlugYInstall"
|
||||||
ProjectGUID="{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}"
|
ProjectGUID="{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}"
|
||||||
RootNamespace="PlugYInstall"
|
RootNamespace="PlugYInstall"
|
||||||
Keyword="Win32Proj"
|
Keyword="Win32Proj"
|
||||||
TargetFrameworkVersion="196613"
|
TargetFrameworkVersion="196613"
|
||||||
>
|
>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
Name="Win32"
|
Name="Win32"
|
||||||
/>
|
/>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
<ToolFiles>
|
<ToolFiles>
|
||||||
</ToolFiles>
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="1"
|
ConfigurationType="1"
|
||||||
CharacterSet="2"
|
CharacterSet="2"
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreBuildEventTool"
|
Name="VCPreBuildEventTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCXMLDataGeneratorTool"
|
Name="VCXMLDataGeneratorTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCMIDLTool"
|
Name="VCMIDLTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
DebugInformationFormat="4"
|
DebugInformationFormat="4"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCManagedResourceCompilerTool"
|
Name="VCManagedResourceCompilerTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreLinkEventTool"
|
Name="VCPreLinkEventTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCALinkTool"
|
Name="VCALinkTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCManifestTool"
|
Name="VCManifestTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCXDCMakeTool"
|
Name="VCXDCMakeTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCBscMakeTool"
|
Name="VCBscMakeTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCFxCopTool"
|
Name="VCFxCopTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCAppVerifierTool"
|
Name="VCAppVerifierTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="1"
|
ConfigurationType="1"
|
||||||
CharacterSet="2"
|
CharacterSet="2"
|
||||||
WholeProgramOptimization="1"
|
WholeProgramOptimization="1"
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreBuildEventTool"
|
Name="VCPreBuildEventTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCXMLDataGeneratorTool"
|
Name="VCXMLDataGeneratorTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCMIDLTool"
|
Name="VCMIDLTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
Optimization="2"
|
||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||||
RuntimeLibrary="2"
|
RuntimeLibrary="2"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
DebugInformationFormat="3"
|
DebugInformationFormat="3"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCManagedResourceCompilerTool"
|
Name="VCManagedResourceCompilerTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreLinkEventTool"
|
Name="VCPreLinkEventTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
EnableCOMDATFolding="2"
|
EnableCOMDATFolding="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCALinkTool"
|
Name="VCALinkTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCManifestTool"
|
Name="VCManifestTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCXDCMakeTool"
|
Name="VCXDCMakeTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCBscMakeTool"
|
Name="VCBscMakeTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCFxCopTool"
|
Name="VCFxCopTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCAppVerifierTool"
|
Name="VCAppVerifierTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
CommandLine="copy "$(TargetPath)" "..\PlugYInstaller\PatchD2gfxDll.exe"
"
|
CommandLine="copy "$(TargetPath)" "..\PlugYInstaller\PatchD2gfxDll.exe"
"
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Restore|Win32"
|
Name="Restore|Win32"
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="1"
|
ConfigurationType="1"
|
||||||
CharacterSet="2"
|
CharacterSet="2"
|
||||||
WholeProgramOptimization="1"
|
WholeProgramOptimization="1"
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreBuildEventTool"
|
Name="VCPreBuildEventTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCXMLDataGeneratorTool"
|
Name="VCXMLDataGeneratorTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCMIDLTool"
|
Name="VCMIDLTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
Optimization="2"
|
||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;RESTORE"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;RESTORE"
|
||||||
RuntimeLibrary="2"
|
RuntimeLibrary="2"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
DebugInformationFormat="3"
|
DebugInformationFormat="3"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCManagedResourceCompilerTool"
|
Name="VCManagedResourceCompilerTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreLinkEventTool"
|
Name="VCPreLinkEventTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
OutputFile="$(OutDir)\RestoreD2gfxDll.exe"
|
OutputFile="$(OutDir)\RestoreD2gfxDll.exe"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
EnableCOMDATFolding="2"
|
EnableCOMDATFolding="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCALinkTool"
|
Name="VCALinkTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCManifestTool"
|
Name="VCManifestTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCXDCMakeTool"
|
Name="VCXDCMakeTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCBscMakeTool"
|
Name="VCBscMakeTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCFxCopTool"
|
Name="VCFxCopTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCAppVerifierTool"
|
Name="VCAppVerifierTool"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
CommandLine="copy "$(TargetPath)" "..\PlugYInstaller\RestoreD2gfxDll.exe"
"
|
CommandLine="copy "$(TargetPath)" "..\PlugYInstaller\RestoreD2gfxDll.exe"
"
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
<References>
|
<References>
|
||||||
</References>
|
</References>
|
||||||
<Files>
|
<Files>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Fichiers sources"
|
Name="Fichiers sources"
|
||||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\PlugYInstall.cpp"
|
RelativePath=".\PlugYInstall.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Commons"
|
Name="Commons"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\Commons\VersionInfo.cpp"
|
RelativePath="..\Commons\VersionInfo.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Fichiers d'en-tête"
|
Name="Fichiers d'en-tête"
|
||||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\PlugYInstall.h"
|
RelativePath=".\PlugYInstall.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\Resource.h"
|
RelativePath=".\Resource.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\targetver.h"
|
RelativePath=".\targetver.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Commons"
|
Name="Commons"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\Commons\VersionInfo.h"
|
RelativePath="..\Commons\VersionInfo.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Fichiers de ressources"
|
Name="Fichiers de ressources"
|
||||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\PlugYInstall.rc"
|
RelativePath=".\PlugYInstall.rc"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
</Files>
|
</Files>
|
||||||
<Globals>
|
<Globals>
|
||||||
</Globals>
|
</Globals>
|
||||||
</VisualStudioProject>
|
</VisualStudioProject>
|
||||||
|
@ -5,13 +5,13 @@
|
|||||||
; ;
|
; ;
|
||||||
; by Yohann Nicolas ;
|
; by Yohann Nicolas ;
|
||||||
; ;
|
; ;
|
||||||
; version 12.00 ;
|
; version 14.00 ;
|
||||||
; ;
|
; ;
|
||||||
;--------------------------------------------------------------------------------------;
|
;--------------------------------------------------------------------------------------;
|
||||||
|
|
||||||
; See PlugY_The_Survival_Kit_-_Readme.txt file for more documentation.
|
; See PlugY_The_Survival_Kit_-_Readme.txt file for more documentation.
|
||||||
; Voir le fichier PlugY_The_Survival_Kit_-_LisezMoi.txt pour plus d'information.
|
; Voir le fichier PlugY_The_Survival_Kit_-_LisezMoi.txt pour plus d'information.
|
||||||
; Siehe PlugY_The_Survival_Kit_-_Liesmich.txt für weitere Informationen
|
; Siehe PlugY_The_Survival_Kit_-_Liesmich.txt für weitere Informationen
|
||||||
|
|
||||||
[LAUNCHING]
|
[LAUNCHING]
|
||||||
Param=
|
Param=
|
||||||
@ -49,7 +49,10 @@ SelectedLanguage=ENG
|
|||||||
|
|
||||||
[SAVEPATH]
|
[SAVEPATH]
|
||||||
ActiveSavePathChange=0
|
ActiveSavePathChange=0
|
||||||
SavePath=Save\Mod PlugY\
|
SavePath=Mod PlugY
|
||||||
|
|
||||||
|
ActiveAutoBackup=1
|
||||||
|
MaxBackupPerCharacter=5
|
||||||
|
|
||||||
|
|
||||||
[MAIN SCREEN]
|
[MAIN SCREEN]
|
||||||
@ -68,8 +71,16 @@ ActiveMultiPageStash=1
|
|||||||
NbPagesPerIndex=10
|
NbPagesPerIndex=10
|
||||||
NbPagesPerIndex2=100
|
NbPagesPerIndex2=100
|
||||||
MaxPersonnalPages=0
|
MaxPersonnalPages=0
|
||||||
|
AutoRenameStashPage=1
|
||||||
|
PersonalNormalPageColor=0
|
||||||
|
PersonalIndexPageColor=12
|
||||||
|
PersonalMainIndexPageColor=9
|
||||||
|
SharedNormalPageColor=4
|
||||||
|
SharedIndexPageColor=8
|
||||||
|
SharedMainIndexPageColor=1
|
||||||
|
|
||||||
ActiveSharedStash=1
|
ActiveSharedStash=1
|
||||||
|
ActiveSharedStashInMultiPlayer=0
|
||||||
SeparateHardcoreStash=1
|
SeparateHardcoreStash=1
|
||||||
OpenSharedStashOnLoading=0
|
OpenSharedStashOnLoading=0
|
||||||
DisplaySharedSetItemNameInGreen=1
|
DisplaySharedSetItemNameInGreen=1
|
||||||
@ -81,13 +92,13 @@ ActiveSharedGold=1
|
|||||||
ActiveStatsUnassignment=1
|
ActiveStatsUnassignment=1
|
||||||
KeyUsed=18
|
KeyUsed=18
|
||||||
|
|
||||||
ActiveShiftClickLimit=0
|
ActiveShiftClickLimit=1
|
||||||
LimitValueToShiftClick=5
|
LimitValueToShiftClick=10
|
||||||
|
|
||||||
|
|
||||||
[SKILLS POINTS]
|
[SKILLS POINTS]
|
||||||
ActiveSkillsUnassignment=1
|
ActiveSkillsUnassignment=1
|
||||||
ActiveSkillsUnassignmentOneByOne=0
|
ActiveSkillsUnassignmentOneForOne=0
|
||||||
|
|
||||||
|
|
||||||
[WORLD EVENT]
|
[WORLD EVENT]
|
||||||
@ -107,6 +118,24 @@ TimeBeforeAutoSellMax=1200
|
|||||||
|
|
||||||
[UBER QUEST]
|
[UBER QUEST]
|
||||||
ActiveUberQuest=1
|
ActiveUberQuest=1
|
||||||
|
UberMephistoX=25130
|
||||||
|
UberMephistoY=5143
|
||||||
|
UberDiabloX=25139
|
||||||
|
UberDiabloY=5139
|
||||||
|
UberBaalX=25139
|
||||||
|
UberBaalY=5135
|
||||||
|
|
||||||
|
ActiveUberMinions=1
|
||||||
|
UberMephistoSpawnPercent=80
|
||||||
|
UberMephistoSpawnRadius=30
|
||||||
|
UberBaalSpawnPercent=30
|
||||||
|
UberBaalSpawnRadius=30
|
||||||
|
UberDiabloSpawnPercent=30
|
||||||
|
UberDiabloSpawnRadius=30
|
||||||
|
ActiveUberDiabloRushTweekAI=1
|
||||||
|
ActiveUberBaalTeleportTweekAI=1
|
||||||
|
ActiveUberBaalChillingArmorTweekAI=1
|
||||||
|
UberBaalChillingArmorTimer=6000
|
||||||
|
|
||||||
|
|
||||||
[INTERFACE]
|
[INTERFACE]
|
||||||
@ -117,15 +146,14 @@ SelectMainPageOnOpenning=1
|
|||||||
[EXTRA]
|
[EXTRA]
|
||||||
ActiveLaunchAnyNumberOfLOD=1
|
ActiveLaunchAnyNumberOfLOD=1
|
||||||
AlwaysRegenMapInSP=0
|
AlwaysRegenMapInSP=0
|
||||||
NBPlayersByDefault=0
|
NBPlayersByDefault=1
|
||||||
ActiveDisplayItemLevel=1
|
ActiveDisplayItemLevel=1
|
||||||
AlwaysDisplayLifeAndManaValues=0
|
AlwaysDisplayLifeAndManaValues=0
|
||||||
EnabledTXTFilesWhenMSExcelOpenIt=0
|
EnabledTXTFilesWhenMSExcelOpenIt=0
|
||||||
ActiveDisplayBaseStatsValue=1
|
ActiveDisplayBaseStatsValue=1
|
||||||
ActiveLadderRunewords=1
|
ActiveLadderRunewords=1
|
||||||
ActiveCowPortalWhenCowKingWasKilled=1
|
ActiveCowPortalWhenCowKingWasKilled=1
|
||||||
|
ActiveDoNotCloseNihlathakPortal=1
|
||||||
|
MoveCainNearHarrogathWaypoint=1
|
||||||
; More features later... :)
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
@ -1,8 +1,9 @@
|
|||||||
Unicode True
|
; File created by Yohann NICOLAS.
|
||||||
|
Unicode True
|
||||||
|
|
||||||
!include "MUI2.nsh"
|
!include "MUI2.nsh"
|
||||||
|
|
||||||
!define VERSION "12.00"
|
!define VERSION "v14.00"
|
||||||
!define D2FILES "."
|
!define D2FILES "."
|
||||||
!define NAME "PlugY, The Survival Kit"
|
!define NAME "PlugY, The Survival Kit"
|
||||||
!define MOD_DIR "Mod PlugY"
|
!define MOD_DIR "Mod PlugY"
|
||||||
@ -10,6 +11,7 @@
|
|||||||
!define UNINSTALL_FILE "PlugY Uninstaller.exe"
|
!define UNINSTALL_FILE "PlugY Uninstaller.exe"
|
||||||
|
|
||||||
!define MUI_COMPONENTSPAGE_SMALLDESC
|
!define MUI_COMPONENTSPAGE_SMALLDESC
|
||||||
|
!define MUI_ICON "..\PlugYRun\PlugY.ico"
|
||||||
!define MUI_HEADERIMAGE
|
!define MUI_HEADERIMAGE
|
||||||
!define MUI_HEADERIMAGE_BITMAP "PlugYInstallerHeader.bmp"
|
!define MUI_HEADERIMAGE_BITMAP "PlugYInstallerHeader.bmp"
|
||||||
!define MUI_LANGDLL_REGISTRY_ROOT HKLM
|
!define MUI_LANGDLL_REGISTRY_ROOT HKLM
|
||||||
@ -25,8 +27,8 @@
|
|||||||
!define MUI_ABORTWARNING
|
!define MUI_ABORTWARNING
|
||||||
;!define MUI_UNABORTWARNING
|
;!define MUI_UNABORTWARNING
|
||||||
|
|
||||||
Name "${NAME} v${VERSION}"
|
Name "${NAME} ${VERSION}"
|
||||||
OutFile "PlugY_The_Survival_Kit_v${VERSION}.exe"
|
OutFile "PlugY_The_Survival_Kit_${VERSION}_Installer.exe"
|
||||||
InstallDirRegKey HKLM "${REGKEY}" "InstallPath"
|
InstallDirRegKey HKLM "${REGKEY}" "InstallPath"
|
||||||
|
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
@ -46,66 +48,79 @@ InstallDirRegKey HKLM "${REGKEY}" "InstallPath"
|
|||||||
;--------------------------------
|
;--------------------------------
|
||||||
; Languages
|
; Languages
|
||||||
!insertmacro MUI_LANGUAGE "English"
|
!insertmacro MUI_LANGUAGE "English"
|
||||||
!insertmacro MUI_LANGUAGE "German"
|
|
||||||
!insertmacro MUI_LANGUAGE "French"
|
!insertmacro MUI_LANGUAGE "French"
|
||||||
|
!insertmacro MUI_LANGUAGE "German"
|
||||||
!insertmacro MUI_LANGUAGE "Russian"
|
!insertmacro MUI_LANGUAGE "Russian"
|
||||||
|
!insertmacro MUI_LANGUAGE "TradChinese"
|
||||||
|
|
||||||
LangString DESC_CORE ${LANG_ENGLISH} "Core files.$\nPlugY.dll will be installed in Diablo II directory."
|
LangString DESC_CORE ${LANG_ENGLISH} "Core files.$\nPlugY.dll will be installed in Diablo II directory."
|
||||||
LangString DESC_CORE ${LANG_GERMAN} "Hauptdateien.$\nPlugY.dll wird in das Installationsverzeichnis von Diablo II installiert."
|
|
||||||
LangString DESC_CORE ${LANG_FRENCH} "Fichiers nécessaires.$\nPlugY.dll sera installé dans le répertoire de Diablo II."
|
LangString DESC_CORE ${LANG_FRENCH} "Fichiers nécessaires.$\nPlugY.dll sera installé dans le répertoire de Diablo II."
|
||||||
|
LangString DESC_CORE ${LANG_GERMAN} "Hauptdateien.$\nPlugY.dll wird in das Installationsverzeichnis von Diablo II installiert."
|
||||||
LangString DESC_CORE ${LANG_RUSSIAN} "Основные файлы.$\nPlugY.dll должен быть установлен в каталог Diablo II."
|
LangString DESC_CORE ${LANG_RUSSIAN} "Основные файлы.$\nPlugY.dll должен быть установлен в каталог Diablo II."
|
||||||
|
LangString DESC_CORE ${LANG_TRADCHINESE} "核心檔案。$\nPlugY.dll 將被安裝於 Diablo II 目錄。"
|
||||||
LangString DESC_DESKTOP_SHORTCUTS ${LANG_ENGLISH} "Add shortcut on Desktop to launch Diablo II with ${NAME}."
|
LangString DESC_DESKTOP_SHORTCUTS ${LANG_ENGLISH} "Add shortcut on Desktop to launch Diablo II with ${NAME}."
|
||||||
LangString DESC_DESKTOP_SHORTCUTS ${LANG_GERMAN} "Fügt eine Verknüpfung auf dem Desktop mit dem Namen ${NAME} hinzu mit der Diablo II gestartet werden kann."
|
|
||||||
LangString DESC_DESKTOP_SHORTCUTS ${LANG_FRENCH} "Ajoute un raccourci pour démarrer Diablo II avec ${NAME}."
|
LangString DESC_DESKTOP_SHORTCUTS ${LANG_FRENCH} "Ajoute un raccourci pour démarrer Diablo II avec ${NAME}."
|
||||||
|
LangString DESC_DESKTOP_SHORTCUTS ${LANG_GERMAN} "Fügt eine Verknüpfung auf dem Desktop mit dem Namen ${NAME} hinzu mit der Diablo II gestartet werden kann."
|
||||||
LangString DESC_DESKTOP_SHORTCUTS ${LANG_RUSSIAN} "Добавить ярлык на рабочий стол для запуска Diablo II с ${NAME}."
|
LangString DESC_DESKTOP_SHORTCUTS ${LANG_RUSSIAN} "Добавить ярлык на рабочий стол для запуска Diablo II с ${NAME}."
|
||||||
|
LangString DESC_DESKTOP_SHORTCUTS ${LANG_TRADCHINESE} "在桌面新增捷徑以藉由 ${NAME} 執行 Diablo II。"
|
||||||
LangString DESC_MENU_SHORTCUTS ${LANG_ENGLISH} "Add shortcuts in start menu."
|
LangString DESC_MENU_SHORTCUTS ${LANG_ENGLISH} "Add shortcuts in start menu."
|
||||||
LangString DESC_MENU_SHORTCUTS ${LANG_GERMAN} "Fügt Verknüpfungen im Startmenü hinzu."
|
|
||||||
LangString DESC_MENU_SHORTCUTS ${LANG_FRENCH} "Ajoute des raccourcis dans le menu démarrer."
|
LangString DESC_MENU_SHORTCUTS ${LANG_FRENCH} "Ajoute des raccourcis dans le menu démarrer."
|
||||||
|
LangString DESC_MENU_SHORTCUTS ${LANG_GERMAN} "Fügt Verknüpfungen im Startmenü hinzu."
|
||||||
LangString DESC_MENU_SHORTCUTS ${LANG_RUSSIAN} "Добавить ярлыки в главное меню."
|
LangString DESC_MENU_SHORTCUTS ${LANG_RUSSIAN} "Добавить ярлыки в главное меню."
|
||||||
|
LangString DESC_MENU_SHORTCUTS ${LANG_TRADCHINESE} "新增「開始」功能表捷徑"
|
||||||
LangString DESC_UNINSTALLER ${LANG_ENGLISH} "Create a Windows uninstall program.$\nAdding registry keys in Windows."
|
LangString DESC_UNINSTALLER ${LANG_ENGLISH} "Create a Windows uninstall program.$\nAdding registry keys in Windows."
|
||||||
LangString DESC_UNINSTALLER ${LANG_GERMAN} "Erzeugt ein Deinstallationsprogramm.$\nWindows Registrierungseinträge werden erstellt."
|
|
||||||
LangString DESC_UNINSTALLER ${LANG_FRENCH} "Crée un programme Windows de désinstallation.$\nAjoute des clés de registres dans Windows."
|
LangString DESC_UNINSTALLER ${LANG_FRENCH} "Crée un programme Windows de désinstallation.$\nAjoute des clés de registres dans Windows."
|
||||||
|
LangString DESC_UNINSTALLER ${LANG_GERMAN} "Erzeugt ein Deinstallationsprogramm.$\nWindows Registrierungseinträge werden erstellt."
|
||||||
LangString DESC_UNINSTALLER ${LANG_RUSSIAN} "Создать в Windows деинстллятор программы.$\nДобавляет ключи реестра в Windows."
|
LangString DESC_UNINSTALLER ${LANG_RUSSIAN} "Создать в Windows деинстллятор программы.$\nДобавляет ключи реестра в Windows."
|
||||||
|
LangString DESC_UNINSTALLER ${LANG_TRADCHINESE} "建立 Windows 解除安裝程式。$\n加入 Windows 登錄訊息。"
|
||||||
LangString DESC_PATCH_FILE ${LANG_ENGLISH} "Patcher to run PlugY without PlugY.exe. Before use it, you MUST read the readme."
|
LangString DESC_PATCH_FILE ${LANG_ENGLISH} "Patcher to run PlugY without PlugY.exe. Before use it, you MUST read the readme."
|
||||||
|
LangString DESC_PATCH_FILE ${LANG_FRENCH} "Patcheur pour lancer PlugY sans PlugY.exe. Avant de l'utiliser, vous DEVEZ lire le LISEZ-MOI."
|
||||||
LangString DESC_PATCH_FILE ${LANG_GERMAN} "Patcher um PlugY ohne PlugY.exe zu starten.$\nDie LiesMich-Datei MUSS vor Benutzung gelesen werden."
|
LangString DESC_PATCH_FILE ${LANG_GERMAN} "Patcher um PlugY ohne PlugY.exe zu starten.$\nDie LiesMich-Datei MUSS vor Benutzung gelesen werden."
|
||||||
LangString DESC_PATCH_FILE ${LANG_FRENCH} "D2gfx.dll patcheur pour lancer PlugY sans PlugY.exe. Avant de l'utiliser, vous DEVEZ lire le LISEZ-MOI."
|
|
||||||
LangString DESC_PATCH_FILE ${LANG_RUSSIAN} "Применить патч для запуска PlugY без PlugY.exe. Подробнее смотреть в файле Readme."
|
LangString DESC_PATCH_FILE ${LANG_RUSSIAN} "Применить патч для запуска PlugY без PlugY.exe. Подробнее смотреть в файле Readme."
|
||||||
|
LangString DESC_PATCH_FILE ${LANG_TRADCHINESE} "更改遊戲檔案以不藉由 PlugY.exe 而執行 PlugY。使用前,您「必須」閱讀「讀我檔案」。"
|
||||||
LangString SECTION_NAME_CORE ${LANG_ENGLISH} "${NAME} (required)"
|
LangString SECTION_NAME_CORE ${LANG_ENGLISH} "${NAME} (required)"
|
||||||
LangString SECTION_NAME_CORE ${LANG_GERMAN} "${NAME} (benötigt)"
|
|
||||||
LangString SECTION_NAME_CORE ${LANG_FRENCH} "${NAME} (nécessaire)"
|
LangString SECTION_NAME_CORE ${LANG_FRENCH} "${NAME} (nécessaire)"
|
||||||
|
LangString SECTION_NAME_CORE ${LANG_GERMAN} "${NAME} (benötigt)"
|
||||||
LangString SECTION_NAME_CORE ${LANG_RUSSIAN} "${NAME} (требуется)"
|
LangString SECTION_NAME_CORE ${LANG_RUSSIAN} "${NAME} (требуется)"
|
||||||
|
LangString SECTION_NAME_CORE ${LANG_TRADCHINESE} "${NAME} (必要)"
|
||||||
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_ENGLISH} "Desktop Shortcut"
|
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_ENGLISH} "Desktop Shortcut"
|
||||||
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_GERMAN} "Desktopverknüpfung"
|
|
||||||
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_FRENCH} "Raccourci sur le bureau"
|
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_FRENCH} "Raccourci sur le bureau"
|
||||||
|
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_GERMAN} "Desktopverknüpfung"
|
||||||
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_RUSSIAN} "Ярлык на рабочем столе"
|
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_RUSSIAN} "Ярлык на рабочем столе"
|
||||||
|
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_TRADCHINESE} "桌面捷徑"
|
||||||
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_ENGLISH} "Start menu Shortcuts"
|
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_ENGLISH} "Start menu Shortcuts"
|
||||||
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_GERMAN} "Startmenüverknüpfungen"
|
|
||||||
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_FRENCH} "Raccourcis dans le Menu démarrer"
|
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_FRENCH} "Raccourcis dans le Menu démarrer"
|
||||||
|
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_GERMAN} "Startmenüverknüpfungen"
|
||||||
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_RUSSIAN} "Ярлыки в в главном меню"
|
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_RUSSIAN} "Ярлыки в в главном меню"
|
||||||
|
LangString SECTION_NAME_STARTMENU_SHORTCUTS ${LANG_TRADCHINESE} "「開始」功能表捷徑"
|
||||||
LangString SECTION_NAME_UNINSTALLER ${LANG_ENGLISH} "Uninstaller (add keys registers)"
|
LangString SECTION_NAME_UNINSTALLER ${LANG_ENGLISH} "Uninstaller (add keys registers)"
|
||||||
LangString SECTION_NAME_UNINSTALLER ${LANG_GERMAN} "Deinstallationsprogramm (Fügt Windows Registrierungseinträge hinzu)"
|
|
||||||
LangString SECTION_NAME_UNINSTALLER ${LANG_FRENCH} "Dé-installeur (ajoute clés de registre)"
|
LangString SECTION_NAME_UNINSTALLER ${LANG_FRENCH} "Dé-installeur (ajoute clés de registre)"
|
||||||
LangString SECTION_NAME_UNINSTALLER ${LANG_RUSSIAN} "Деинсталлятор (добавляет ключи реестра)"
|
LangString SECTION_NAME_UNINSTALLER ${LANG_GERMAN} "Deinstallationsprogramm (Fügt Windows Registrierungseinträge hinzu)"
|
||||||
|
LangString SECTION_NAME_UNINSTALLER ${LANG_RUSSIAN} "Деинсталлятор (добавляет ключи реестра)"
|
||||||
|
LangString SECTION_NAME_UNINSTALLER ${LANG_TRADCHINESE} "移除工具 (加入登錄訊息)"
|
||||||
LangString SECTION_PATCH_FILE ${LANG_ENGLISH} "File Patcher (advanced user only)"
|
LangString SECTION_PATCH_FILE ${LANG_ENGLISH} "File Patcher (advanced user only)"
|
||||||
|
LangString SECTION_PATCH_FILE ${LANG_FRENCH} "Patcheur de fichier (utilisateur avancé uniquement)"
|
||||||
LangString SECTION_PATCH_FILE ${LANG_GERMAN} "Datei Patcher (Für erfahrene Nutzer)"
|
LangString SECTION_PATCH_FILE ${LANG_GERMAN} "Datei Patcher (Für erfahrene Nutzer)"
|
||||||
LangString SECTION_PATCH_FILE ${LANG_FRENCH} "Patcheur de D2gfx.dll (utilisateur avancé uniquement)"
|
|
||||||
LangString SECTION_PATCH_FILE ${LANG_RUSSIAN} "Патч для Patcher (для опытных пользователей)"
|
LangString SECTION_PATCH_FILE ${LANG_RUSSIAN} "Патч для Patcher (для опытных пользователей)"
|
||||||
|
LangString SECTION_PATCH_FILE ${LANG_TRADCHINESE} "檔案級補釘 (限高級用戶)"
|
||||||
|
|
||||||
LangString README_FILENAME ${LANG_ENGLISH} "PlugY_The_Survival_Kit_-_Readme.txt"
|
LangString README_FILENAME ${LANG_ENGLISH} "PlugY_The_Survival_Kit_-_Readme.txt"
|
||||||
LangString README_FILENAME ${LANG_GERMAN} "PlugY_The_Survival_Kit_-_Liesmich.txt"
|
|
||||||
LangString README_FILENAME ${LANG_FRENCH} "PlugY_The_Survival_Kit_-_LisezMoi.txt"
|
LangString README_FILENAME ${LANG_FRENCH} "PlugY_The_Survival_Kit_-_LisezMoi.txt"
|
||||||
|
LangString README_FILENAME ${LANG_GERMAN} "PlugY_The_Survival_Kit_-_Liesmich.txt"
|
||||||
LangString README_FILENAME ${LANG_RUSSIAN} "PlugY_The_Survival_Kit_-_Readme.txt"
|
LangString README_FILENAME ${LANG_RUSSIAN} "PlugY_The_Survival_Kit_-_Readme.txt"
|
||||||
|
LangString README_FILENAME ${LANG_TRADCHINESE} "PlugY_The_Survival_Kit_-_讀我檔案"
|
||||||
|
|
||||||
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_ENGLISH} "Error : Diablo II install directory not found.$\nPlease re-install your copy of Diablo II - Lord of Destruction."
|
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_ENGLISH} "Error : Diablo II install directory not found.$\nPlease re-install your copy of Diablo II - Lord of Destruction."
|
||||||
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_GERMAN} "Fehler : Diablo II Installationsverzeichnis nicht gefunden.$\nBitte installiere Diablo II - Lord of Destruction neu."
|
|
||||||
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_FRENCH} "Erreur : Le répertoire d'installation de Diablo II n'a pas été trouvé.$\nVeuillez ré-installer votre copie de Diablo II - Lord of Destruction."
|
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_FRENCH} "Erreur : Le répertoire d'installation de Diablo II n'a pas été trouvé.$\nVeuillez ré-installer votre copie de Diablo II - Lord of Destruction."
|
||||||
|
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_GERMAN} "Fehler : Diablo II Installationsverzeichnis nicht gefunden.$\nBitte installiere Diablo II - Lord of Destruction neu."
|
||||||
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_RUSSIAN} "Ошибка : каталог с установленной игрой Diablo II не найден.$\nПожалуйста переустановите вашу копию Diablo II - Lord of Destruction."
|
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_RUSSIAN} "Ошибка : каталог с установленной игрой Diablo II не найден.$\nПожалуйста переустановите вашу копию Diablo II - Lord of Destruction."
|
||||||
|
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_TRADCHINESE} "錯誤: 找不到 Diablo II 安裝目錄$\n請重新安裝「暗黑破壞神II:毀滅之王」"
|
||||||
|
|
||||||
Var D2Path
|
Var D2Path
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
; Initialisation
|
; Initialisation
|
||||||
Function .onInit
|
Function .onInit
|
||||||
!define MUI_LANGDLL_WINDOWTITLE "${NAME} v${VERSION}"
|
!define MUI_LANGDLL_WINDOWTITLE "${NAME} ${VERSION}"
|
||||||
!define MUI_LANGDLL_INFO "Select your language:"
|
!define MUI_LANGDLL_INFO "Select your language:"
|
||||||
!insertmacro MUI_LANGDLL_DISPLAY
|
!insertmacro MUI_LANGDLL_DISPLAY
|
||||||
!undef MUI_LANGDLL_WINDOWTITLE
|
!undef MUI_LANGDLL_WINDOWTITLE
|
||||||
@ -154,7 +169,8 @@ Section "!$(SECTION_NAME_CORE)" Core
|
|||||||
File "${D2FILES}\PlugY_The_Survival_Kit_-_Readme.txt"
|
File "${D2FILES}\PlugY_The_Survival_Kit_-_Readme.txt"
|
||||||
File "${D2FILES}\PlugY_The_Survival_Kit_-_LisezMoi.txt"
|
File "${D2FILES}\PlugY_The_Survival_Kit_-_LisezMoi.txt"
|
||||||
File "${D2FILES}\PlugY_The_Survival_Kit_-_Liesmich.txt"
|
File "${D2FILES}\PlugY_The_Survival_Kit_-_Liesmich.txt"
|
||||||
setOutPath "$D2Path\PlugY"
|
File "${D2FILES}\PlugY_The_Survival_Kit_-_讀我檔案.txt"
|
||||||
|
setOutPath "$INSTDIR\PlugY"
|
||||||
File "${D2FILES}\PlugY\EmptyPage.dc6"
|
File "${D2FILES}\PlugY\EmptyPage.dc6"
|
||||||
File "${D2FILES}\PlugY\PlugYDefault.ini"
|
File "${D2FILES}\PlugY\PlugYDefault.ini"
|
||||||
File "${D2FILES}\PlugY\PlugYFixed.ini"
|
File "${D2FILES}\PlugY\PlugYFixed.ini"
|
||||||
@ -204,7 +220,6 @@ Section $(SECTION_NAME_UNINSTALLER) Uninstaller
|
|||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
Section $(SECTION_PATCH_FILE) PatchFile
|
Section $(SECTION_PATCH_FILE) PatchFile
|
||||||
SectionIn 1
|
|
||||||
SetOutPath $D2Path
|
SetOutPath $D2Path
|
||||||
File "${D2FILES}\PatchD2File.exe"
|
File "${D2FILES}\PatchD2File.exe"
|
||||||
File "${D2FILES}\RestoreD2File.exe"
|
File "${D2FILES}\RestoreD2File.exe"
|
||||||
@ -233,6 +248,7 @@ Section "Uninstall" Uninstall
|
|||||||
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_Readme.txt"
|
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_Readme.txt"
|
||||||
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_LisezMoi.txt"
|
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_LisezMoi.txt"
|
||||||
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_Liesmich.txt"
|
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_Liesmich.txt"
|
||||||
|
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_讀我檔案.txt"
|
||||||
Delete "$D2Path\PlugY\EmptyPage.dc6"
|
Delete "$D2Path\PlugY\EmptyPage.dc6"
|
||||||
Delete "$D2Path\PlugY\PlugYDefault.ini"
|
Delete "$D2Path\PlugY\PlugYDefault.ini"
|
||||||
Delete "$D2Path\PlugY\PlugYFixed.ini"
|
Delete "$D2Path\PlugY\PlugYFixed.ini"
|
||||||
|
Binary file not shown.
@ -6,13 +6,17 @@
|
|||||||
; ;
|
; ;
|
||||||
; by Yohann Nicolas ;
|
; by Yohann Nicolas ;
|
||||||
; ;
|
; ;
|
||||||
; version 12.00 ;
|
; version 14.00 ;
|
||||||
; ;
|
; ;
|
||||||
;--------------------------------------------------------------------------------------;
|
;--------------------------------------------------------------------------------------;
|
||||||
|
|
||||||
; See PlugY_The_Survival_Kit_-_Readme.txt file for more documentation.
|
; See PlugY_The_Survival_Kit_-_Readme.txt file for more documentation.
|
||||||
; Voir le fichier PlugY_The_Survival_Kit_-_LisezMoi.txt pour plus d'information.
|
; Voir le fichier PlugY_The_Survival_Kit_-_LisezMoi.txt pour plus d'information.
|
||||||
; Siehe PlugY_The_Survival_Kit_-_Liesmich.txt f<>r weitere Informationen
|
; Siehe PlugY_The_Survival_Kit_-_Liesmich.txt für weitere Informationen
|
||||||
|
|
||||||
|
[LAUNCHING]
|
||||||
|
Param=
|
||||||
|
Library=PlugY.dll
|
||||||
|
|
||||||
|
|
||||||
[GENERAL]
|
[GENERAL]
|
||||||
@ -51,7 +55,10 @@ AvailableLanguages=ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS
|
|||||||
|
|
||||||
[SAVEPATH]
|
[SAVEPATH]
|
||||||
ActiveSavePathChange=0
|
ActiveSavePathChange=0
|
||||||
SavePath=Save\
|
SavePath=
|
||||||
|
|
||||||
|
ActiveAutoBackup=0
|
||||||
|
MaxBackupPerCharacter=5
|
||||||
|
|
||||||
|
|
||||||
[MAIN SCREEN]
|
[MAIN SCREEN]
|
||||||
@ -70,8 +77,16 @@ ActiveMultiPageStash=0
|
|||||||
NbPagesPerIndex=10
|
NbPagesPerIndex=10
|
||||||
NbPagesPerIndex2=100
|
NbPagesPerIndex2=100
|
||||||
MaxPersonnalPages=0
|
MaxPersonnalPages=0
|
||||||
|
AutoRenameStashPage=0
|
||||||
|
PersonalNormalPageColor=0
|
||||||
|
PersonalIndexPageColor=12
|
||||||
|
PersonalMainIndexPageColor=9
|
||||||
|
SharedNormalPageColor=4
|
||||||
|
SharedIndexPageColor=8
|
||||||
|
SharedMainIndexPageColor=1
|
||||||
|
|
||||||
ActiveSharedStash=0
|
ActiveSharedStash=0
|
||||||
|
ActiveSharedStashInMultiPlayer=0
|
||||||
SeparateHardcoreStash=1
|
SeparateHardcoreStash=1
|
||||||
OpenSharedStashOnLoading=0
|
OpenSharedStashOnLoading=0
|
||||||
SharedStashFilename=SharedStashSave
|
SharedStashFilename=SharedStashSave
|
||||||
@ -81,18 +96,40 @@ ActiveSharedGold=1
|
|||||||
|
|
||||||
PosXPreviousBtn=-1
|
PosXPreviousBtn=-1
|
||||||
PosYPreviousBtn=-1
|
PosYPreviousBtn=-1
|
||||||
|
PosWPreviousBtn=32
|
||||||
|
PosHPreviousBtn=32
|
||||||
PosXNextBtn=-1
|
PosXNextBtn=-1
|
||||||
PosYNextBtn=-1
|
PosYNextBtn=-1
|
||||||
|
PosWNextBtn=32
|
||||||
|
PosHNextBtn=32
|
||||||
PosXSharedBtn=-1
|
PosXSharedBtn=-1
|
||||||
PosYSharedBtn=-1
|
PosYSharedBtn=-1
|
||||||
|
PosWSharedBtn=32
|
||||||
|
PosHSharedBtn=32
|
||||||
PosXPreviousIndexBtn=-1
|
PosXPreviousIndexBtn=-1
|
||||||
PosYPreviousIndexBtn=-1
|
PosYPreviousIndexBtn=-1
|
||||||
|
PosWPreviousIndexBtn=32
|
||||||
|
PosHPreviousIndexBtn=32
|
||||||
PosXNextIndexBtn=-1
|
PosXNextIndexBtn=-1
|
||||||
PosYNextIndexBtn=-1
|
PosYNextIndexBtn=-1
|
||||||
|
PosWNextIndexBtn=32
|
||||||
|
PosHNextIndexBtn=32
|
||||||
PosXPutGoldBtn=-1
|
PosXPutGoldBtn=-1
|
||||||
PosYPutGoldBtn=-1
|
PosYPutGoldBtn=-1
|
||||||
|
PosWPutGoldBtn=32
|
||||||
|
PosHPutGoldBtn=32
|
||||||
PosXTakeGoldBtn=-1
|
PosXTakeGoldBtn=-1
|
||||||
PosYTakeGoldBtn=-1
|
PosYTakeGoldBtn=-1
|
||||||
|
PosWTakeGoldBtn=32
|
||||||
|
PosHTakeGoldBtn=32
|
||||||
|
PosXStashNameField=-1
|
||||||
|
PosYStashNameField=-1
|
||||||
|
PosWStashNameField=175
|
||||||
|
PosHStashNameField=20
|
||||||
|
PosXStashGoldField=-1
|
||||||
|
PosYStashGoldField=-1
|
||||||
|
PosWStashGoldField=152
|
||||||
|
PosHStashGoldField=18
|
||||||
|
|
||||||
|
|
||||||
[STATS POINTS]
|
[STATS POINTS]
|
||||||
@ -110,7 +147,7 @@ StatPerLevelUp=5
|
|||||||
|
|
||||||
[SKILLS POINTS]
|
[SKILLS POINTS]
|
||||||
ActiveSkillsUnassignment=0
|
ActiveSkillsUnassignment=0
|
||||||
ActiveSkillsUnassignmentOneByOne=0
|
ActiveSkillsUnassignmentOneForOne=0
|
||||||
PosXUnassignSkillBtn=-1
|
PosXUnassignSkillBtn=-1
|
||||||
PosYUnassignSkillBtn=-1
|
PosYUnassignSkillBtn=-1
|
||||||
|
|
||||||
@ -137,6 +174,24 @@ TimeBeforeAutoSellMax=1200
|
|||||||
|
|
||||||
[UBER QUEST]
|
[UBER QUEST]
|
||||||
ActiveUberQuest=0
|
ActiveUberQuest=0
|
||||||
|
UberMephistoX=25130
|
||||||
|
UberMephistoY=5143
|
||||||
|
UberDiabloX=25139
|
||||||
|
UberDiabloY=5139
|
||||||
|
UberBaalX=25139
|
||||||
|
UberBaalY=5135
|
||||||
|
|
||||||
|
ActiveUberMinions=1
|
||||||
|
UberMephistoSpawnPercent=80
|
||||||
|
UberMephistoSpawnRadius=30
|
||||||
|
UberBaalSpawnPercent=30
|
||||||
|
UberBaalSpawnRadius=30
|
||||||
|
UberDiabloSpawnPercent=30
|
||||||
|
UberDiabloSpawnRadius=30
|
||||||
|
ActiveUberDiabloRushTweekAI=1
|
||||||
|
ActiveUberBaalTeleportTweekAI=1
|
||||||
|
ActiveUberBaalChillingArmorTweekAI=1
|
||||||
|
UberBaalChillingArmorTimer=6000
|
||||||
|
|
||||||
|
|
||||||
[INTERFACE]
|
[INTERFACE]
|
||||||
@ -155,8 +210,7 @@ EnabledTXTFilesWhenMSExcelOpenIt=0
|
|||||||
ActiveDisplayBaseStatsValue=0
|
ActiveDisplayBaseStatsValue=0
|
||||||
ActiveLadderRunewords=0
|
ActiveLadderRunewords=0
|
||||||
ActiveCowPortalWhenCowKingWasKilled=0
|
ActiveCowPortalWhenCowKingWasKilled=0
|
||||||
|
ActiveDoNotCloseNihlathakPortal=0
|
||||||
|
MoveCainNearHarrogathWaypoint=0
|
||||||
; More features later... :)
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
@ -6,7 +6,7 @@
|
|||||||
; ;
|
; ;
|
||||||
; by Yohann Nicolas ;
|
; by Yohann Nicolas ;
|
||||||
; ;
|
; ;
|
||||||
; version 12.00 ;
|
; version 14.00 ;
|
||||||
; ;
|
; ;
|
||||||
;--------------------------------------------------------------------------------------;
|
;--------------------------------------------------------------------------------------;
|
||||||
|
|
||||||
|
@ -40,3 +40,5 @@ item_absorbfire_percent 1 2 25 175 1 6 142 0
|
|||||||
item_absorbcold_percent 1 2 25 160 3 6 148 0
|
item_absorbcold_percent 1 2 25 160 3 6 148 0
|
||||||
item_absorblight_percent 1 2 25 145 9 6 144 0
|
item_absorblight_percent 1 2 25 145 9 6 144 0
|
||||||
item_poisonlengthresist 1 2 25 130 2 6 110 0
|
item_poisonlengthresist 1 2 25 130 2 6 110 0
|
||||||
|
player breakpoints 1 3 25 445 1 10000 0
|
||||||
|
mercenaries breakpoints 1 4 25 445 1 10001 0
|
||||||
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: 撤銷加點, +Shift: %d 點",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt:撤銷加點, +Shift: 所有剩余点",
|
|
||||||
"STR_STATS_BASE_MIN": "基礎:%d (最低:%d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "撤销分配所有技能點",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "上一頁 (+Shift: 第一頁)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "下一頁 (+Shift: 最後非空頁)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "切換到個人儲物箱",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "切換到共享儲物箱",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "向前索引 : %d 頁 (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "向後索引 : %d 頁 (+Shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "存入金幣",
|
|
||||||
"STR_TAKE_GOLD": "取出金幣",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "個人儲物箱:第 %u 頁",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "共享儲物箱:第 %u 頁",
|
|
||||||
"STR_NO_SELECTED_PAGE": "沒有選擇的頁面",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "共享金幣",
|
|
||||||
"STR_PREVIOUS_PAGE": "上一頁",
|
|
||||||
"STR_NEXT_PAGE": "下一頁",
|
|
||||||
"STR_ITEM_LEVEL": "物品等級",
|
|
||||||
"STR_COW_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "",
|
|
||||||
"STR_AND": "",
|
|
||||||
"STR_RECHARGE": "",
|
|
||||||
"STR_DESTROY_FILLERS": "",
|
|
||||||
"STR_REMOVE_FILLERS": "",
|
|
||||||
"STR_REGENERATE": "",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "",
|
|
||||||
"STR_ETHERAL": "",
|
|
||||||
"STR_NOT_ETHERAL": "",
|
|
||||||
"STR_NOT_RUNEWORD": "",
|
|
||||||
"STR_BASIC": "",
|
|
||||||
"STR_EXCEPTIONAL": "",
|
|
||||||
"STR_ELITE": "",
|
|
||||||
"STR_CRACKED": "",
|
|
||||||
"STR_NORMAL": "",
|
|
||||||
"STR_SUPERIOR": "",
|
|
||||||
"STR_MAGIC": "",
|
|
||||||
"STR_SET": "",
|
|
||||||
"STR_RARE": "",
|
|
||||||
"STR_UNIQUE": "",
|
|
||||||
"STR_CRAFTED": "",
|
|
||||||
"STR_TEMPERED": "",
|
|
||||||
"STR_ITEM": "",
|
|
||||||
"STR_ITEM_SAME_TYPE": "",
|
|
||||||
"STR_INCLUDE_UPGRADED": "",
|
|
||||||
"STR_WITHOUT_SOCKET": "",
|
|
||||||
"STR_WITH_SOCKETS": "",
|
|
||||||
"STR_WITH_N_SOCKETS": "",
|
|
||||||
"STR_ONLY_N_H": "",
|
|
||||||
"STR_ONLY_HELL": "",
|
|
||||||
"STR_ONLY_CLASS": "",
|
|
||||||
"TYPE_shie": "",
|
|
||||||
"TYPE_tors": "",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "",
|
|
||||||
"TYPE_book": "",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "",
|
|
||||||
"TYPE_bow": "",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "",
|
|
||||||
"TYPE_hamm": "",
|
|
||||||
"TYPE_knif": "",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "",
|
|
||||||
"TYPE_ques": "",
|
|
||||||
"TYPE_body": "",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "",
|
|
||||||
"TYPE_mele": "",
|
|
||||||
"TYPE_miss": "",
|
|
||||||
"TYPE_thro": "",
|
|
||||||
"TYPE_comb": "",
|
|
||||||
"TYPE_armo": "",
|
|
||||||
"TYPE_shld": "",
|
|
||||||
"TYPE_misc": "",
|
|
||||||
"TYPE_sock": "",
|
|
||||||
"TYPE_seco": "",
|
|
||||||
"TYPE_rod": "",
|
|
||||||
"TYPE_misl": "",
|
|
||||||
"TYPE_blun": "",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "",
|
|
||||||
"TYPE_amaz": "",
|
|
||||||
"TYPE_barb": "",
|
|
||||||
"TYPE_necr": "",
|
|
||||||
"TYPE_pala": "",
|
|
||||||
"TYPE_sorc": "",
|
|
||||||
"TYPE_assn": "",
|
|
||||||
"TYPE_drui": "",
|
|
||||||
"TYPE_h2h": "",
|
|
||||||
"TYPE_h2h2": "",
|
|
||||||
"TYPE_orb": "",
|
|
||||||
"TYPE_head": "",
|
|
||||||
"TYPE_ashd": "",
|
|
||||||
"TYPE_phlm": "",
|
|
||||||
"TYPE_pelt": "",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "",
|
|
||||||
"TYPE_aspe": "",
|
|
||||||
"TYPE_ajav": "",
|
|
||||||
"TYPE_mboq": "",
|
|
||||||
"TYPE_mxbq": "",
|
|
||||||
"TYPE_gem0": "",
|
|
||||||
"TYPE_gem1": "",
|
|
||||||
"TYPE_gem2": "",
|
|
||||||
"TYPE_gem3": "",
|
|
||||||
"TYPE_gem4": ""
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: Zurücksetzen, +Shift: um %d Punkte",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: Zurücksetzen, +Shift: Alle verbleibenden Punkte",
|
|
||||||
"STR_STATS_BASE_MIN": "Basiswert: %d (Min: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "Alle Fertigkeitspunkte zurücksetzen",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "Vorherige Seite (+Shift: Erste Seite)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "Nächste Seite (+Shift: Letzte nicht leere Seite )",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "Wechselt zum persönlichen Goldschatz",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "Wechselt zum gemeinsamen Goldschatz",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "Vorheriger Index: in %d Seiten (+shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "Nächster Index: in %d Seiten (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "Gib Gold",
|
|
||||||
"STR_TAKE_GOLD": "Nehme Gold",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "Persönliche Seite n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "Gemeinsame Seite n°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "Keine ausgewählte Seite",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "Gemeinsames Gold",
|
|
||||||
"STR_PREVIOUS_PAGE": "Vorherige Seite",
|
|
||||||
"STR_NEXT_PAGE": "Nächste Seite",
|
|
||||||
"STR_ITEM_LEVEL": "Gegenstandsstufe",
|
|
||||||
"STR_COW_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "",
|
|
||||||
"STR_AND": "",
|
|
||||||
"STR_RECHARGE": "",
|
|
||||||
"STR_DESTROY_FILLERS": "",
|
|
||||||
"STR_REMOVE_FILLERS": "",
|
|
||||||
"STR_REGENERATE": "",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "",
|
|
||||||
"STR_ETHERAL": "",
|
|
||||||
"STR_NOT_ETHERAL": "",
|
|
||||||
"STR_NOT_RUNEWORD": "",
|
|
||||||
"STR_BASIC": "",
|
|
||||||
"STR_EXCEPTIONAL": "",
|
|
||||||
"STR_ELITE": "",
|
|
||||||
"STR_CRACKED": "",
|
|
||||||
"STR_NORMAL": "",
|
|
||||||
"STR_SUPERIOR": "",
|
|
||||||
"STR_MAGIC": "",
|
|
||||||
"STR_SET": "",
|
|
||||||
"STR_RARE": "",
|
|
||||||
"STR_UNIQUE": "",
|
|
||||||
"STR_CRAFTED": "",
|
|
||||||
"STR_TEMPERED": "",
|
|
||||||
"STR_ITEM": "",
|
|
||||||
"STR_ITEM_SAME_TYPE": "",
|
|
||||||
"STR_INCLUDE_UPGRADED": "",
|
|
||||||
"STR_WITHOUT_SOCKET": "",
|
|
||||||
"STR_WITH_SOCKETS": "",
|
|
||||||
"STR_WITH_N_SOCKETS": "",
|
|
||||||
"STR_ONLY_N_H": "",
|
|
||||||
"STR_ONLY_HELL": "",
|
|
||||||
"STR_ONLY_CLASS": "",
|
|
||||||
"TYPE_shie": "",
|
|
||||||
"TYPE_tors": "",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "",
|
|
||||||
"TYPE_book": "",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "",
|
|
||||||
"TYPE_bow": "",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "",
|
|
||||||
"TYPE_hamm": "",
|
|
||||||
"TYPE_knif": "",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "",
|
|
||||||
"TYPE_ques": "",
|
|
||||||
"TYPE_body": "",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "",
|
|
||||||
"TYPE_mele": "",
|
|
||||||
"TYPE_miss": "",
|
|
||||||
"TYPE_thro": "",
|
|
||||||
"TYPE_comb": "",
|
|
||||||
"TYPE_armo": "",
|
|
||||||
"TYPE_shld": "",
|
|
||||||
"TYPE_misc": "",
|
|
||||||
"TYPE_sock": "",
|
|
||||||
"TYPE_seco": "",
|
|
||||||
"TYPE_rod": "",
|
|
||||||
"TYPE_misl": "",
|
|
||||||
"TYPE_blun": "",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "",
|
|
||||||
"TYPE_amaz": "",
|
|
||||||
"TYPE_barb": "",
|
|
||||||
"TYPE_necr": "",
|
|
||||||
"TYPE_pala": "",
|
|
||||||
"TYPE_sorc": "",
|
|
||||||
"TYPE_assn": "",
|
|
||||||
"TYPE_drui": "",
|
|
||||||
"TYPE_h2h": "",
|
|
||||||
"TYPE_h2h2": "",
|
|
||||||
"TYPE_orb": "",
|
|
||||||
"TYPE_head": "",
|
|
||||||
"TYPE_ashd": "",
|
|
||||||
"TYPE_phlm": "",
|
|
||||||
"TYPE_pelt": "",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "",
|
|
||||||
"TYPE_aspe": "",
|
|
||||||
"TYPE_ajav": "",
|
|
||||||
"TYPE_mboq": "",
|
|
||||||
"TYPE_mxbq": "",
|
|
||||||
"TYPE_gem0": "",
|
|
||||||
"TYPE_gem1": "",
|
|
||||||
"TYPE_gem2": "",
|
|
||||||
"TYPE_gem3": "",
|
|
||||||
"TYPE_gem4": ""
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: Unassign, +Shift: by %d points",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: Unassign, +Shift: all remaining points",
|
|
||||||
"STR_STATS_BASE_MIN": "Base: %d (Min: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "Unassign all skills points",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "Previous Page (+Shift: First Page)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "Next Page (+Shift: Last not empty Page)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "Toggle to Personal Stash",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "Toggle to Shared Stash",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "Previous Index : by %d Pages (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "Next Index : by %d Pages (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "Put Gold",
|
|
||||||
"STR_TAKE_GOLD": "Take Gold",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "Personal Page n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "Shared Page n°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "No selected page",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "Shared Gold",
|
|
||||||
"STR_PREVIOUS_PAGE": "Previous Page",
|
|
||||||
"STR_NEXT_PAGE": "Next Page",
|
|
||||||
"STR_ITEM_LEVEL": "Item Level",
|
|
||||||
"STR_COW_PORTAL": "Cow Portal",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "Pandemonium Portal",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "Pandemonium Final Portal",
|
|
||||||
"STR_FULL": "Fully",
|
|
||||||
"STR_REPAIR": "Repair",
|
|
||||||
"STR_AND": "and",
|
|
||||||
"STR_RECHARGE": "Recharge",
|
|
||||||
"STR_DESTROY_FILLERS": "Destroys Fillers",
|
|
||||||
"STR_REMOVE_FILLERS": "Remove Fillers",
|
|
||||||
"STR_REGENERATE": "Regenerate",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "Upgrade to Exceptional",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "Upgrade to Elite",
|
|
||||||
"STR_ETHERAL": "Ethereal",
|
|
||||||
"STR_NOT_ETHERAL": "Not Ethereal",
|
|
||||||
"STR_NOT_RUNEWORD": "Not Runeword",
|
|
||||||
"STR_BASIC": "Basic",
|
|
||||||
"STR_EXCEPTIONAL": "Exceptional",
|
|
||||||
"STR_ELITE": "Elite",
|
|
||||||
"STR_CRACKED": "Cracked",
|
|
||||||
"STR_NORMAL": "Normal",
|
|
||||||
"STR_SUPERIOR": "Superior",
|
|
||||||
"STR_MAGIC": "Magic",
|
|
||||||
"STR_SET": "Set",
|
|
||||||
"STR_RARE": "Rare",
|
|
||||||
"STR_UNIQUE": "Unique",
|
|
||||||
"STR_CRAFTED": "Crafted",
|
|
||||||
"STR_TEMPERED": "Tempered",
|
|
||||||
"STR_ITEM": "Item",
|
|
||||||
"STR_ITEM_SAME_TYPE": "Item of the same type",
|
|
||||||
"STR_INCLUDE_UPGRADED": "(or upgraded)",
|
|
||||||
"STR_WITHOUT_SOCKET": "without Socket",
|
|
||||||
"STR_WITH_SOCKETS": "with Sockets",
|
|
||||||
"STR_WITH_N_SOCKETS": "with %u Sockets",
|
|
||||||
"STR_ONLY_N_H": "(Nightmare and Hell only)",
|
|
||||||
"STR_ONLY_HELL": "(Hell only)",
|
|
||||||
"STR_ONLY_CLASS": "%hs only",
|
|
||||||
"TYPE_shie": "Shield (Not Class Specific)",
|
|
||||||
"TYPE_tors": "Body Armor",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "Potion",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "Charm",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "Gloves",
|
|
||||||
"TYPE_book": "Book",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "Gem",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "Scroll",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "Staff",
|
|
||||||
"TYPE_bow": "Bow",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "Sword",
|
|
||||||
"TYPE_hamm": "Hammer",
|
|
||||||
"TYPE_knif": "Knife",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "Polearm",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "Missile Potion",
|
|
||||||
"TYPE_ques": "Quest Item",
|
|
||||||
"TYPE_body": "Body Part",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "Weapon",
|
|
||||||
"TYPE_mele": "Melee Weapon",
|
|
||||||
"TYPE_miss": "Missile Weapon",
|
|
||||||
"TYPE_thro": "Throwing Weapon",
|
|
||||||
"TYPE_comb": "Combo Weapon",
|
|
||||||
"TYPE_armo": "Armor",
|
|
||||||
"TYPE_shld": "Any Shield",
|
|
||||||
"TYPE_misc": "Miscellaneous",
|
|
||||||
"TYPE_sock": "Socket Filler",
|
|
||||||
"TYPE_seco": "Second Hand Item",
|
|
||||||
"TYPE_rod": "Staff or Rod",
|
|
||||||
"TYPE_misl": "Missile",
|
|
||||||
"TYPE_blun": "Blunt weapon",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "Class Specific",
|
|
||||||
"TYPE_amaz": "Amazon Item",
|
|
||||||
"TYPE_barb": "Barbarian Item",
|
|
||||||
"TYPE_necr": "Necromancer Item",
|
|
||||||
"TYPE_pala": "Paladin Item",
|
|
||||||
"TYPE_sorc": "Sorceress Item",
|
|
||||||
"TYPE_assn": "Assassin Item",
|
|
||||||
"TYPE_drui": "Druid Item",
|
|
||||||
"TYPE_h2h": "Claw",
|
|
||||||
"TYPE_h2h2": "Assassin Claw",
|
|
||||||
"TYPE_orb": "Orb",
|
|
||||||
"TYPE_head": "Voodoo Heads",
|
|
||||||
"TYPE_ashd": "Paladin Shield",
|
|
||||||
"TYPE_phlm": "Barbarian Helm",
|
|
||||||
"TYPE_pelt": "Druid Helm",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "Rune",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "Amazon Bow",
|
|
||||||
"TYPE_aspe": "Amazon Spear",
|
|
||||||
"TYPE_ajav": "Amazon Javelin",
|
|
||||||
"TYPE_mboq": "Magic Arrows",
|
|
||||||
"TYPE_mxbq": "Magic Bolts",
|
|
||||||
"TYPE_gem0": "Chipped Gem",
|
|
||||||
"TYPE_gem1": "Flawed Gem",
|
|
||||||
"TYPE_gem2": "Normal Gem",
|
|
||||||
"TYPE_gem3": "Flawless Gem",
|
|
||||||
"TYPE_gem4": "Perfect Gem"
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: Desasignar, +Shift: %d Puntos",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: Desasignar, +Shift: Puntos Restantes",
|
|
||||||
"STR_STATS_BASE_MIN": "Base: %d (Min: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "Desasignar Todos los Puntos de Habilidades",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "Página Anterior (+Shift: Primera Página)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "Página Siguiente (+Shift: Última Página Ocupada)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "Ver Alijo Personal",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "Ver Alijo Común",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "Retroceder: %d Páginas (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "Avanzar: %d Páginas (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "Guardar Oro",
|
|
||||||
"STR_TAKE_GOLD": "Retirar Oro",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "Página Personal n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "Página Común n°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "Sin Página Activa***",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "Oro Común",
|
|
||||||
"STR_PREVIOUS_PAGE": "Página Anterior",
|
|
||||||
"STR_NEXT_PAGE": "Página Siguiente",
|
|
||||||
"STR_ITEM_LEVEL": "Nivel de Objeto",
|
|
||||||
"STR_COW_PORTAL": "Portal de Las Vacas",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "Portal del Pandemonium***",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "Portal Final del Pandemonium***",
|
|
||||||
"STR_FULL": "Completamente***",
|
|
||||||
"STR_REPAIR": "Reparar",
|
|
||||||
"STR_AND": "y",
|
|
||||||
"STR_RECHARGE": "Recargar",
|
|
||||||
"STR_DESTROY_FILLERS": "Eliminar Objetos Embebido",
|
|
||||||
"STR_REMOVE_FILLERS": "Remover Objetos Embebido",
|
|
||||||
"STR_REGENERATE": "Regenerar",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "Mejorar a Excepcional",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "Mejorar a Élite",
|
|
||||||
"STR_ETHERAL": "Etéreo",
|
|
||||||
"STR_NOT_ETHERAL": "No Etéreo",
|
|
||||||
"STR_NOT_RUNEWORD": "No Rúnico",
|
|
||||||
"STR_BASIC": "Básico",
|
|
||||||
"STR_EXCEPTIONAL": "Excepcional",
|
|
||||||
"STR_ELITE": "Élite",
|
|
||||||
"STR_CRACKED": "Agrietado",
|
|
||||||
"STR_NORMAL": "Normal",
|
|
||||||
"STR_SUPERIOR": "Superior",
|
|
||||||
"STR_MAGIC": "Mágico",
|
|
||||||
"STR_SET": "Set",
|
|
||||||
"STR_RARE": "Raro",
|
|
||||||
"STR_UNIQUE": "Único",
|
|
||||||
"STR_CRAFTED": "Hecho a Mano",
|
|
||||||
"STR_TEMPERED": "Templado",
|
|
||||||
"STR_ITEM": "Objeto",
|
|
||||||
"STR_ITEM_SAME_TYPE": "Objeto del Mismo Tipo",
|
|
||||||
"STR_INCLUDE_UPGRADED": "(o mejorado)",
|
|
||||||
"STR_WITHOUT_SOCKET": "sin Huecos",
|
|
||||||
"STR_WITH_SOCKETS": "con Huecos",
|
|
||||||
"STR_WITH_N_SOCKETS": "con %u Huecos",
|
|
||||||
"STR_ONLY_N_H": "(solo Pasadilla e Infierno)",
|
|
||||||
"STR_ONLY_HELL": "(solo Infierno)",
|
|
||||||
"STR_ONLY_CLASS": "%hs solamente",
|
|
||||||
"TYPE_shie": "Escudo (No Propietario de Clase)",
|
|
||||||
"TYPE_tors": "Armadura",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "Poción",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "Hechizo",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "Guantes",
|
|
||||||
"TYPE_book": "Tomo",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "Gema",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "Pergamino",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "Bastón",
|
|
||||||
"TYPE_bow": "Arco",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "Espada",
|
|
||||||
"TYPE_hamm": "Martillo",
|
|
||||||
"TYPE_knif": "Cuchillo",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "Pica",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "Poción Arrojadiza",
|
|
||||||
"TYPE_ques": "Objeto de Búsqueda",
|
|
||||||
"TYPE_body": "Parte Corporal",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "Arma",
|
|
||||||
"TYPE_mele": "Arma Cuerpo a Cuerpo",
|
|
||||||
"TYPE_miss": "Arma a Distancia",
|
|
||||||
"TYPE_thro": "Arma Arrojadiza",
|
|
||||||
"TYPE_comb": "Arma de Choque",
|
|
||||||
"TYPE_armo": "Armadura",
|
|
||||||
"TYPE_shld": "Escudo",
|
|
||||||
"TYPE_misc": "Misceláneo",
|
|
||||||
"TYPE_sock": "Embebible",
|
|
||||||
"TYPE_seco": "Clase Inferior",
|
|
||||||
"TYPE_rod": "Bastón o Cetro",
|
|
||||||
"TYPE_misl": "Proyectil",
|
|
||||||
"TYPE_blun": "Arma Contundente",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "Propietario a Clase",
|
|
||||||
"TYPE_amaz": "Objeto de Amazona",
|
|
||||||
"TYPE_barb": "Objeto de Bárbaro",
|
|
||||||
"TYPE_necr": "Objeto de Nigromante",
|
|
||||||
"TYPE_pala": "Objeto de Paladín",
|
|
||||||
"TYPE_sorc": "Objeto de Hechicera",
|
|
||||||
"TYPE_assn": "Objeto de Asesina",
|
|
||||||
"TYPE_drui": "Objeto de Druida",
|
|
||||||
"TYPE_h2h": "Garra",
|
|
||||||
"TYPE_h2h2": "Garra de Asesina",
|
|
||||||
"TYPE_orb": "Orbe",
|
|
||||||
"TYPE_head": "Cabezas Voodoo",
|
|
||||||
"TYPE_ashd": "Escudo de Paladín",
|
|
||||||
"TYPE_phlm": "Casco de Bárbaro",
|
|
||||||
"TYPE_pelt": "Casco de Druida",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "Runa",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "Arco de Amazona",
|
|
||||||
"TYPE_aspe": "Lanza de Amazona",
|
|
||||||
"TYPE_ajav": "Javalina de Amazona",
|
|
||||||
"TYPE_mboq": "Flechas Mágicas",
|
|
||||||
"TYPE_mxbq": "Saetas Mágicas",
|
|
||||||
"TYPE_gem0": "Gema Astillada",
|
|
||||||
"TYPE_gem1": "Gema Defectuosa",
|
|
||||||
"TYPE_gem2": "Gema Normal",
|
|
||||||
"TYPE_gem3": "Gema Impecable",
|
|
||||||
"TYPE_gem4": "Gema Perfecta"
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: Désallocation, +Shift: par %d points",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: Désallocation, +Shift: Tous les points restants",
|
|
||||||
"STR_STATS_BASE_MIN": "Base: %d (Min: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "Désalloue tous les points d'aptitudes",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "Page précédente (+Shift: Première page)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "Page suivante (+Shift: Dernière page non vide)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "Voir coffre personnel",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "Voir coffre partagé",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "Index précédent : par %d pages (+shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "Index suivant : par %d pages (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "Déposer de l'or",
|
|
||||||
"STR_TAKE_GOLD": "Prendre de l'or",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "Page personnel n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "Page partagée n°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "Aucune page sélectionnée",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "Or partagé",
|
|
||||||
"STR_PREVIOUS_PAGE": "Page précédente",
|
|
||||||
"STR_NEXT_PAGE": "Page suivante",
|
|
||||||
"STR_ITEM_LEVEL": "Niveau d'objet",
|
|
||||||
"STR_COW_PORTAL": "Portail des vaches",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "Portail du Pandemonium",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "Portail du Pandemonium Final",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "Répare",
|
|
||||||
"STR_AND": "et",
|
|
||||||
"STR_RECHARGE": "Recharge",
|
|
||||||
"STR_DESTROY_FILLERS": "Détruit les objets enchassés.",
|
|
||||||
"STR_REMOVE_FILLERS": "Enléve les objets enchassés.",
|
|
||||||
"STR_REGENERATE": "Régénére",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "Amélioration en Exceptionnel",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "Amélioration en Élite",
|
|
||||||
"STR_ETHERAL": "Éthéré",
|
|
||||||
"STR_NOT_ETHERAL": "Non Éthéré",
|
|
||||||
"STR_NOT_RUNEWORD": "Pas de mots runiques",
|
|
||||||
"STR_BASIC": "Basique",
|
|
||||||
"STR_EXCEPTIONAL": "Exceptionnal",
|
|
||||||
"STR_ELITE": "Élite",
|
|
||||||
"STR_CRACKED": "Abimée",
|
|
||||||
"STR_NORMAL": "Normal",
|
|
||||||
"STR_SUPERIOR": "Supérieur",
|
|
||||||
"STR_MAGIC": "Magique",
|
|
||||||
"STR_SET": "d'Ensemble",
|
|
||||||
"STR_RARE": "Rare",
|
|
||||||
"STR_UNIQUE": "Unique",
|
|
||||||
"STR_CRAFTED": "Créé",
|
|
||||||
"STR_TEMPERED": "Tempéré",
|
|
||||||
"STR_ITEM": "Objet",
|
|
||||||
"STR_ITEM_SAME_TYPE": "Object du même type",
|
|
||||||
"STR_INCLUDE_UPGRADED": "(ou améliorée)",
|
|
||||||
"STR_WITHOUT_SOCKET": "sans Chasse",
|
|
||||||
"STR_WITH_SOCKETS": "avec Chasses",
|
|
||||||
"STR_WITH_N_SOCKETS": "avec %u Chasse",
|
|
||||||
"STR_ONLY_N_H": "(Cauchemard uniquement)",
|
|
||||||
"STR_ONLY_HELL": "(Enfer uniquement)",
|
|
||||||
"STR_ONLY_CLASS": "%hs uniquement",
|
|
||||||
"TYPE_shie": "Boulier (sauf spécifique aux classes)",
|
|
||||||
"TYPE_tors": "Plastron",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "Potion",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "Charme",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "Gants",
|
|
||||||
"TYPE_book": "Livre",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "Gemme",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "Manuscrit",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "Baton",
|
|
||||||
"TYPE_bow": "Arc",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "Épée",
|
|
||||||
"TYPE_hamm": "Marteau",
|
|
||||||
"TYPE_knif": "Couteau",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "Arme d'hast",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "Potion à lançer",
|
|
||||||
"TYPE_ques": "Objet de quête",
|
|
||||||
"TYPE_body": "Partie de corps",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "Arme",
|
|
||||||
"TYPE_mele": "Arme de mélée",
|
|
||||||
"TYPE_miss": "Arme à distance",
|
|
||||||
"TYPE_thro": "Arme de jet",
|
|
||||||
"TYPE_comb": "Arme de combo",
|
|
||||||
"TYPE_armo": "Armure",
|
|
||||||
"TYPE_shld": "Bouclier",
|
|
||||||
"TYPE_misc": "Divers",
|
|
||||||
"TYPE_sock": "Objet à enchasser",
|
|
||||||
"TYPE_seco": "Main gauche",
|
|
||||||
"TYPE_rod": "Bâton ou barre",
|
|
||||||
"TYPE_misl": "Missile",
|
|
||||||
"TYPE_blun": "Arme contandante",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "Spécifique classe",
|
|
||||||
"TYPE_amaz": "Objet d'Amazone",
|
|
||||||
"TYPE_barb": "Objet de Barbare",
|
|
||||||
"TYPE_necr": "Objet Nécromancien",
|
|
||||||
"TYPE_pala": "Objet de Paladin",
|
|
||||||
"TYPE_sorc": "Objet de Sorcière",
|
|
||||||
"TYPE_assn": "Objet d'Assassin",
|
|
||||||
"TYPE_drui": "Objet de Druide",
|
|
||||||
"TYPE_h2h": "Griffe",
|
|
||||||
"TYPE_h2h2": "Griffe d'Assassin",
|
|
||||||
"TYPE_orb": "Orbe",
|
|
||||||
"TYPE_head": "Tête de Voodoo",
|
|
||||||
"TYPE_ashd": "Bouclier de Paladin",
|
|
||||||
"TYPE_phlm": "Heaumme de Barbare",
|
|
||||||
"TYPE_pelt": "Heaumme de Druide",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "Rune",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "Arc d'Amazone",
|
|
||||||
"TYPE_aspe": "Lance d'Amazone",
|
|
||||||
"TYPE_ajav": "Javeline d'Amazone",
|
|
||||||
"TYPE_mboq": "Fléche d'Amazone",
|
|
||||||
"TYPE_mxbq": "Trait d'arbalète",
|
|
||||||
"TYPE_gem0": "Gemme taillée",
|
|
||||||
"TYPE_gem1": "Gemme fissurée",
|
|
||||||
"TYPE_gem2": "Gemme normale",
|
|
||||||
"TYPE_gem3": "Gemme sans défaut",
|
|
||||||
"TYPE_gem4": "Gemme parfaite"
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: Rimuovi, +Shift: Assegna %d punti",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: Rimuovi, +Shift: Assegna tutti i punti rimanenti",
|
|
||||||
"STR_STATS_BASE_MIN": "Base: %d (Min: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "Rimuovi tutte le abilità",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "Pagina Precedente (+Shift: Prima Pagina)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "Pagina Successiva (+Shift: Ultima Pagina non vuota)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "Vai all'Inventario Personale",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "Vai all'Inventario Condiviso",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "Schermata Precedente : Indietro di %d Pagine (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "Schermata Successiva : Avanti di %d Pagine (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "Immetti Oro",
|
|
||||||
"STR_TAKE_GOLD": "Ritira Oro",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "Pagina Personale n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "Pagina Condivisa n°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "Nessuna pagina selezionata",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "Oro Condiviso",
|
|
||||||
"STR_PREVIOUS_PAGE": "Pagina Precedente",
|
|
||||||
"STR_NEXT_PAGE": "Pagina Successiva",
|
|
||||||
"STR_ITEM_LEVEL": "Nivel de objeto",
|
|
||||||
"STR_COW_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "",
|
|
||||||
"STR_AND": "",
|
|
||||||
"STR_RECHARGE": "",
|
|
||||||
"STR_DESTROY_FILLERS": "",
|
|
||||||
"STR_REMOVE_FILLERS": "",
|
|
||||||
"STR_REGENERATE": "",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "",
|
|
||||||
"STR_ETHERAL": "",
|
|
||||||
"STR_NOT_ETHERAL": "",
|
|
||||||
"STR_NOT_RUNEWORD": "",
|
|
||||||
"STR_BASIC": "",
|
|
||||||
"STR_EXCEPTIONAL": "",
|
|
||||||
"STR_ELITE": "",
|
|
||||||
"STR_CRACKED": "",
|
|
||||||
"STR_NORMAL": "",
|
|
||||||
"STR_SUPERIOR": "",
|
|
||||||
"STR_MAGIC": "",
|
|
||||||
"STR_SET": "",
|
|
||||||
"STR_RARE": "",
|
|
||||||
"STR_UNIQUE": "",
|
|
||||||
"STR_CRAFTED": "",
|
|
||||||
"STR_TEMPERED": "",
|
|
||||||
"STR_ITEM": "",
|
|
||||||
"STR_ITEM_SAME_TYPE": "",
|
|
||||||
"STR_INCLUDE_UPGRADED": "",
|
|
||||||
"STR_WITHOUT_SOCKET": "",
|
|
||||||
"STR_WITH_SOCKETS": "",
|
|
||||||
"STR_WITH_N_SOCKETS": "",
|
|
||||||
"STR_ONLY_N_H": "",
|
|
||||||
"STR_ONLY_HELL": "",
|
|
||||||
"STR_ONLY_CLASS": "",
|
|
||||||
"TYPE_shie": "",
|
|
||||||
"TYPE_tors": "",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "",
|
|
||||||
"TYPE_book": "",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "",
|
|
||||||
"TYPE_bow": "",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "",
|
|
||||||
"TYPE_hamm": "",
|
|
||||||
"TYPE_knif": "",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "",
|
|
||||||
"TYPE_ques": "",
|
|
||||||
"TYPE_body": "",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "",
|
|
||||||
"TYPE_mele": "",
|
|
||||||
"TYPE_miss": "",
|
|
||||||
"TYPE_thro": "",
|
|
||||||
"TYPE_comb": "",
|
|
||||||
"TYPE_armo": "",
|
|
||||||
"TYPE_shld": "",
|
|
||||||
"TYPE_misc": "",
|
|
||||||
"TYPE_sock": "",
|
|
||||||
"TYPE_seco": "",
|
|
||||||
"TYPE_rod": "",
|
|
||||||
"TYPE_misl": "",
|
|
||||||
"TYPE_blun": "",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "",
|
|
||||||
"TYPE_amaz": "",
|
|
||||||
"TYPE_barb": "",
|
|
||||||
"TYPE_necr": "",
|
|
||||||
"TYPE_pala": "",
|
|
||||||
"TYPE_sorc": "",
|
|
||||||
"TYPE_assn": "",
|
|
||||||
"TYPE_drui": "",
|
|
||||||
"TYPE_h2h": "",
|
|
||||||
"TYPE_h2h2": "",
|
|
||||||
"TYPE_orb": "",
|
|
||||||
"TYPE_head": "",
|
|
||||||
"TYPE_ashd": "",
|
|
||||||
"TYPE_phlm": "",
|
|
||||||
"TYPE_pelt": "",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "",
|
|
||||||
"TYPE_aspe": "",
|
|
||||||
"TYPE_ajav": "",
|
|
||||||
"TYPE_mboq": "",
|
|
||||||
"TYPE_mxbq": "",
|
|
||||||
"TYPE_gem0": "",
|
|
||||||
"TYPE_gem1": "",
|
|
||||||
"TYPE_gem2": "",
|
|
||||||
"TYPE_gem3": "",
|
|
||||||
"TYPE_gem4": ""
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: 振分けの取消し, +Shift: %d pt",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: 振分けの取消し, +Shift: 残るptの全部",
|
|
||||||
"STR_STATS_BASE_MIN": "基本: %d (最小: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "スキルptの振り分けを全て取り消し",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "前のページ (+Shift: 最初のページ)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "次のページ (+Shift: アイテムがある最後のページ)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "個人収納箱に切り替える",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "共用収納箱に切り替える",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "前に一括ページ切替 : %d ページ (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "次に一括ページ切替 : %d ページ (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "ゴールドを預ける",
|
|
||||||
"STR_TAKE_GOLD": "ゴールドを取り出す",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "個人収納箱 n° %u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "共用収納箱 n° %u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "選択されるページがない",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "共有ゴールド",
|
|
||||||
"STR_PREVIOUS_PAGE": "前のページ",
|
|
||||||
"STR_NEXT_PAGE": "次のページ",
|
|
||||||
"STR_ITEM_LEVEL": "アイテム・レベル",
|
|
||||||
"STR_COW_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "",
|
|
||||||
"STR_AND": "",
|
|
||||||
"STR_RECHARGE": "",
|
|
||||||
"STR_DESTROY_FILLERS": "",
|
|
||||||
"STR_REMOVE_FILLERS": "",
|
|
||||||
"STR_REGENERATE": "",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "",
|
|
||||||
"STR_ETHERAL": "",
|
|
||||||
"STR_NOT_ETHERAL": "",
|
|
||||||
"STR_NOT_RUNEWORD": "",
|
|
||||||
"STR_BASIC": "",
|
|
||||||
"STR_EXCEPTIONAL": "",
|
|
||||||
"STR_ELITE": "",
|
|
||||||
"STR_CRACKED": "",
|
|
||||||
"STR_NORMAL": "",
|
|
||||||
"STR_SUPERIOR": "",
|
|
||||||
"STR_MAGIC": "",
|
|
||||||
"STR_SET": "",
|
|
||||||
"STR_RARE": "",
|
|
||||||
"STR_UNIQUE": "",
|
|
||||||
"STR_CRAFTED": "",
|
|
||||||
"STR_TEMPERED": "",
|
|
||||||
"STR_ITEM": "",
|
|
||||||
"STR_ITEM_SAME_TYPE": "",
|
|
||||||
"STR_INCLUDE_UPGRADED": "",
|
|
||||||
"STR_WITHOUT_SOCKET": "",
|
|
||||||
"STR_WITH_SOCKETS": "",
|
|
||||||
"STR_WITH_N_SOCKETS": "",
|
|
||||||
"STR_ONLY_N_H": "",
|
|
||||||
"STR_ONLY_HELL": "",
|
|
||||||
"STR_ONLY_CLASS": "",
|
|
||||||
"TYPE_shie": "",
|
|
||||||
"TYPE_tors": "",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "",
|
|
||||||
"TYPE_book": "",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "",
|
|
||||||
"TYPE_bow": "",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "",
|
|
||||||
"TYPE_hamm": "",
|
|
||||||
"TYPE_knif": "",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "",
|
|
||||||
"TYPE_ques": "",
|
|
||||||
"TYPE_body": "",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "",
|
|
||||||
"TYPE_mele": "",
|
|
||||||
"TYPE_miss": "",
|
|
||||||
"TYPE_thro": "",
|
|
||||||
"TYPE_comb": "",
|
|
||||||
"TYPE_armo": "",
|
|
||||||
"TYPE_shld": "",
|
|
||||||
"TYPE_misc": "",
|
|
||||||
"TYPE_sock": "",
|
|
||||||
"TYPE_seco": "",
|
|
||||||
"TYPE_rod": "",
|
|
||||||
"TYPE_misl": "",
|
|
||||||
"TYPE_blun": "",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "",
|
|
||||||
"TYPE_amaz": "",
|
|
||||||
"TYPE_barb": "",
|
|
||||||
"TYPE_necr": "",
|
|
||||||
"TYPE_pala": "",
|
|
||||||
"TYPE_sorc": "",
|
|
||||||
"TYPE_assn": "",
|
|
||||||
"TYPE_drui": "",
|
|
||||||
"TYPE_h2h": "",
|
|
||||||
"TYPE_h2h2": "",
|
|
||||||
"TYPE_orb": "",
|
|
||||||
"TYPE_head": "",
|
|
||||||
"TYPE_ashd": "",
|
|
||||||
"TYPE_phlm": "",
|
|
||||||
"TYPE_pelt": "",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "",
|
|
||||||
"TYPE_aspe": "",
|
|
||||||
"TYPE_ajav": "",
|
|
||||||
"TYPE_mboq": "",
|
|
||||||
"TYPE_mxbq": "",
|
|
||||||
"TYPE_gem0": "",
|
|
||||||
"TYPE_gem1": "",
|
|
||||||
"TYPE_gem2": "",
|
|
||||||
"TYPE_gem3": "",
|
|
||||||
"TYPE_gem4": ""
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: 할당, +Shift: %d 포인트로",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: 할당, +Shift: 남아있는 모든 포인트를",
|
|
||||||
"STR_STATS_BASE_MIN": "기본: %d (최소: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "모든 스킬 포인트를 해제 할당",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "이전 페이지 (+Shift: 첫 페이지)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "다음 페이지 (+Shift: 마지막 비어 있지 않은 페이지)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "개인 은닉로 전환",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "공유 은닉로 전환",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "이전 색인 : %d 페이지로 (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "다음 인덱스 : %d 페이지로 (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "골드 넣어",
|
|
||||||
"STR_TAKE_GOLD": "금을",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "개인 페이지 n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "공유 페이지 n°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "없음 선택한 페이지가 없습니다",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "공유 골드",
|
|
||||||
"STR_PREVIOUS_PAGE": "이전 페이지",
|
|
||||||
"STR_NEXT_PAGE": "다음 페이지",
|
|
||||||
"STR_ITEM_LEVEL": "아이템 레벨",
|
|
||||||
"STR_COW_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "",
|
|
||||||
"STR_AND": "",
|
|
||||||
"STR_RECHARGE": "",
|
|
||||||
"STR_DESTROY_FILLERS": "",
|
|
||||||
"STR_REMOVE_FILLERS": "",
|
|
||||||
"STR_REGENERATE": "",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "",
|
|
||||||
"STR_ETHERAL": "",
|
|
||||||
"STR_NOT_ETHERAL": "",
|
|
||||||
"STR_NOT_RUNEWORD": "",
|
|
||||||
"STR_BASIC": "",
|
|
||||||
"STR_EXCEPTIONAL": "",
|
|
||||||
"STR_ELITE": "",
|
|
||||||
"STR_CRACKED": "",
|
|
||||||
"STR_NORMAL": "",
|
|
||||||
"STR_SUPERIOR": "",
|
|
||||||
"STR_MAGIC": "",
|
|
||||||
"STR_SET": "",
|
|
||||||
"STR_RARE": "",
|
|
||||||
"STR_UNIQUE": "",
|
|
||||||
"STR_CRAFTED": "",
|
|
||||||
"STR_TEMPERED": "",
|
|
||||||
"STR_ITEM": "",
|
|
||||||
"STR_ITEM_SAME_TYPE": "",
|
|
||||||
"STR_INCLUDE_UPGRADED": "",
|
|
||||||
"STR_WITHOUT_SOCKET": "",
|
|
||||||
"STR_WITH_SOCKETS": "",
|
|
||||||
"STR_WITH_N_SOCKETS": "",
|
|
||||||
"STR_ONLY_N_H": "",
|
|
||||||
"STR_ONLY_HELL": "",
|
|
||||||
"STR_ONLY_CLASS": "",
|
|
||||||
"TYPE_shie": "",
|
|
||||||
"TYPE_tors": "",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "",
|
|
||||||
"TYPE_book": "",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "",
|
|
||||||
"TYPE_bow": "",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "",
|
|
||||||
"TYPE_hamm": "",
|
|
||||||
"TYPE_knif": "",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "",
|
|
||||||
"TYPE_ques": "",
|
|
||||||
"TYPE_body": "",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "",
|
|
||||||
"TYPE_mele": "",
|
|
||||||
"TYPE_miss": "",
|
|
||||||
"TYPE_thro": "",
|
|
||||||
"TYPE_comb": "",
|
|
||||||
"TYPE_armo": "",
|
|
||||||
"TYPE_shld": "",
|
|
||||||
"TYPE_misc": "",
|
|
||||||
"TYPE_sock": "",
|
|
||||||
"TYPE_seco": "",
|
|
||||||
"TYPE_rod": "",
|
|
||||||
"TYPE_misl": "",
|
|
||||||
"TYPE_blun": "",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "",
|
|
||||||
"TYPE_amaz": "",
|
|
||||||
"TYPE_barb": "",
|
|
||||||
"TYPE_necr": "",
|
|
||||||
"TYPE_pala": "",
|
|
||||||
"TYPE_sorc": "",
|
|
||||||
"TYPE_assn": "",
|
|
||||||
"TYPE_drui": "",
|
|
||||||
"TYPE_h2h": "",
|
|
||||||
"TYPE_h2h2": "",
|
|
||||||
"TYPE_orb": "",
|
|
||||||
"TYPE_head": "",
|
|
||||||
"TYPE_ashd": "",
|
|
||||||
"TYPE_phlm": "",
|
|
||||||
"TYPE_pelt": "",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "",
|
|
||||||
"TYPE_aspe": "",
|
|
||||||
"TYPE_ajav": "",
|
|
||||||
"TYPE_mboq": "",
|
|
||||||
"TYPE_mxbq": "",
|
|
||||||
"TYPE_gem0": "",
|
|
||||||
"TYPE_gem1": "",
|
|
||||||
"TYPE_gem2": "",
|
|
||||||
"TYPE_gem3": "",
|
|
||||||
"TYPE_gem4": ""
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: Przypisywanie, +Shift: o %d punkty",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: Przypisywanie, +Shift: wszystkie pozostałe punkty",
|
|
||||||
"STR_STATS_BASE_MIN": "Podstawowe %d Min.: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "Un przydzielić wszystkie punkty umiejętności",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "Poprzednia strona (+Shift: pierwsza strona)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "Następna strona (+Shift: Ostatnio nie pusta strona)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "Przełącz do osobistego pierś",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "Przełącz się na wspólnym pierś",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "Poprzednie Index : przez %d Pages (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "Następny Index : przez d% Strony (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "Put złoto",
|
|
||||||
"STR_TAKE_GOLD": "Weź złoto",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "Strona osobista n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "Wspólna strona n°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "Nie wybrano stronę",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "Wspólna Złoto",
|
|
||||||
"STR_PREVIOUS_PAGE": "Poprzednia strona",
|
|
||||||
"STR_NEXT_PAGE": "Następna strona",
|
|
||||||
"STR_ITEM_LEVEL": "Poziom przedmiotu",
|
|
||||||
"STR_COW_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "",
|
|
||||||
"STR_AND": "",
|
|
||||||
"STR_RECHARGE": "",
|
|
||||||
"STR_DESTROY_FILLERS": "",
|
|
||||||
"STR_REMOVE_FILLERS": "",
|
|
||||||
"STR_REGENERATE": "",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "",
|
|
||||||
"STR_ETHERAL": "",
|
|
||||||
"STR_NOT_ETHERAL": "",
|
|
||||||
"STR_NOT_RUNEWORD": "",
|
|
||||||
"STR_BASIC": "",
|
|
||||||
"STR_EXCEPTIONAL": "",
|
|
||||||
"STR_ELITE": "",
|
|
||||||
"STR_CRACKED": "",
|
|
||||||
"STR_NORMAL": "",
|
|
||||||
"STR_SUPERIOR": "",
|
|
||||||
"STR_MAGIC": "",
|
|
||||||
"STR_SET": "",
|
|
||||||
"STR_RARE": "",
|
|
||||||
"STR_UNIQUE": "",
|
|
||||||
"STR_CRAFTED": "",
|
|
||||||
"STR_TEMPERED": "",
|
|
||||||
"STR_ITEM": "",
|
|
||||||
"STR_ITEM_SAME_TYPE": "",
|
|
||||||
"STR_INCLUDE_UPGRADED": "",
|
|
||||||
"STR_WITHOUT_SOCKET": "",
|
|
||||||
"STR_WITH_SOCKETS": "",
|
|
||||||
"STR_WITH_N_SOCKETS": "",
|
|
||||||
"STR_ONLY_N_H": "",
|
|
||||||
"STR_ONLY_HELL": "",
|
|
||||||
"STR_ONLY_CLASS": "",
|
|
||||||
"TYPE_shie": "",
|
|
||||||
"TYPE_tors": "",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "",
|
|
||||||
"TYPE_book": "",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "",
|
|
||||||
"TYPE_bow": "",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "",
|
|
||||||
"TYPE_hamm": "",
|
|
||||||
"TYPE_knif": "",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "",
|
|
||||||
"TYPE_ques": "",
|
|
||||||
"TYPE_body": "",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "",
|
|
||||||
"TYPE_mele": "",
|
|
||||||
"TYPE_miss": "",
|
|
||||||
"TYPE_thro": "",
|
|
||||||
"TYPE_comb": "",
|
|
||||||
"TYPE_armo": "",
|
|
||||||
"TYPE_shld": "",
|
|
||||||
"TYPE_misc": "",
|
|
||||||
"TYPE_sock": "",
|
|
||||||
"TYPE_seco": "",
|
|
||||||
"TYPE_rod": "",
|
|
||||||
"TYPE_misl": "",
|
|
||||||
"TYPE_blun": "",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "",
|
|
||||||
"TYPE_amaz": "",
|
|
||||||
"TYPE_barb": "",
|
|
||||||
"TYPE_necr": "",
|
|
||||||
"TYPE_pala": "",
|
|
||||||
"TYPE_sorc": "",
|
|
||||||
"TYPE_assn": "",
|
|
||||||
"TYPE_drui": "",
|
|
||||||
"TYPE_h2h": "",
|
|
||||||
"TYPE_h2h2": "",
|
|
||||||
"TYPE_orb": "",
|
|
||||||
"TYPE_head": "",
|
|
||||||
"TYPE_ashd": "",
|
|
||||||
"TYPE_phlm": "",
|
|
||||||
"TYPE_pelt": "",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "",
|
|
||||||
"TYPE_aspe": "",
|
|
||||||
"TYPE_ajav": "",
|
|
||||||
"TYPE_mboq": "",
|
|
||||||
"TYPE_mxbq": "",
|
|
||||||
"TYPE_gem0": "",
|
|
||||||
"TYPE_gem1": "",
|
|
||||||
"TYPE_gem2": "",
|
|
||||||
"TYPE_gem3": "",
|
|
||||||
"TYPE_gem4": ""
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: Quita, +Shift: por %d puntos",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: Quita, +Shift: Todos los puntos restantes",
|
|
||||||
"STR_STATS_BASE_MIN": "Base: %d (Min: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "Quita todos los puntos de habilidades",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "Pagina anterior (+Shift: Primera Pagina)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "Pagina Siguiente (+Shift: Ultima pagina non vacia)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "Ver el cofre personal",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "Ver el cofre compartido",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "Indice anterior : por %d paginas (+shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "Indice siguiente : por %d paginas (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "Poner oro",
|
|
||||||
"STR_TAKE_GOLD": "Tomar oro",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "Pagina personal n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "Pagina personal n°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "Ninguna pagina seleccionada",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "Oro compartido",
|
|
||||||
"STR_PREVIOUS_PAGE": "Pagina anterior",
|
|
||||||
"STR_NEXT_PAGE": "Pagina siguiente",
|
|
||||||
"STR_ITEM_LEVEL": "Nível do item",
|
|
||||||
"STR_COW_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "",
|
|
||||||
"STR_AND": "",
|
|
||||||
"STR_RECHARGE": "",
|
|
||||||
"STR_DESTROY_FILLERS": "",
|
|
||||||
"STR_REMOVE_FILLERS": "",
|
|
||||||
"STR_REGENERATE": "",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "",
|
|
||||||
"STR_ETHERAL": "",
|
|
||||||
"STR_NOT_ETHERAL": "",
|
|
||||||
"STR_NOT_RUNEWORD": "",
|
|
||||||
"STR_BASIC": "",
|
|
||||||
"STR_EXCEPTIONAL": "",
|
|
||||||
"STR_ELITE": "",
|
|
||||||
"STR_CRACKED": "",
|
|
||||||
"STR_NORMAL": "",
|
|
||||||
"STR_SUPERIOR": "",
|
|
||||||
"STR_MAGIC": "",
|
|
||||||
"STR_SET": "",
|
|
||||||
"STR_RARE": "",
|
|
||||||
"STR_UNIQUE": "",
|
|
||||||
"STR_CRAFTED": "",
|
|
||||||
"STR_TEMPERED": "",
|
|
||||||
"STR_ITEM": "",
|
|
||||||
"STR_ITEM_SAME_TYPE": "",
|
|
||||||
"STR_INCLUDE_UPGRADED": "",
|
|
||||||
"STR_WITHOUT_SOCKET": "",
|
|
||||||
"STR_WITH_SOCKETS": "",
|
|
||||||
"STR_WITH_N_SOCKETS": "",
|
|
||||||
"STR_ONLY_N_H": "",
|
|
||||||
"STR_ONLY_HELL": "",
|
|
||||||
"STR_ONLY_CLASS": "",
|
|
||||||
"TYPE_shie": "",
|
|
||||||
"TYPE_tors": "",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "",
|
|
||||||
"TYPE_book": "",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "",
|
|
||||||
"TYPE_bow": "",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "",
|
|
||||||
"TYPE_hamm": "",
|
|
||||||
"TYPE_knif": "",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "",
|
|
||||||
"TYPE_ques": "",
|
|
||||||
"TYPE_body": "",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "",
|
|
||||||
"TYPE_mele": "",
|
|
||||||
"TYPE_miss": "",
|
|
||||||
"TYPE_thro": "",
|
|
||||||
"TYPE_comb": "",
|
|
||||||
"TYPE_armo": "",
|
|
||||||
"TYPE_shld": "",
|
|
||||||
"TYPE_misc": "",
|
|
||||||
"TYPE_sock": "",
|
|
||||||
"TYPE_seco": "",
|
|
||||||
"TYPE_rod": "",
|
|
||||||
"TYPE_misl": "",
|
|
||||||
"TYPE_blun": "",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "",
|
|
||||||
"TYPE_amaz": "",
|
|
||||||
"TYPE_barb": "",
|
|
||||||
"TYPE_necr": "",
|
|
||||||
"TYPE_pala": "",
|
|
||||||
"TYPE_sorc": "",
|
|
||||||
"TYPE_assn": "",
|
|
||||||
"TYPE_drui": "",
|
|
||||||
"TYPE_h2h": "",
|
|
||||||
"TYPE_h2h2": "",
|
|
||||||
"TYPE_orb": "",
|
|
||||||
"TYPE_head": "",
|
|
||||||
"TYPE_ashd": "",
|
|
||||||
"TYPE_phlm": "",
|
|
||||||
"TYPE_pelt": "",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "",
|
|
||||||
"TYPE_aspe": "",
|
|
||||||
"TYPE_ajav": "",
|
|
||||||
"TYPE_mboq": "",
|
|
||||||
"TYPE_mxbq": "",
|
|
||||||
"TYPE_gem0": "",
|
|
||||||
"TYPE_gem1": "",
|
|
||||||
"TYPE_gem2": "",
|
|
||||||
"TYPE_gem3": "",
|
|
||||||
"TYPE_gem4": ""
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: Вычесть, +Shift: по %d очка",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: Вычесть, +Shift: все оставшиеся очки",
|
|
||||||
"STR_STATS_BASE_MIN": "Базовое: %d (Мин.: %d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "Сбросить все навыки",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "Предыдущая страница (+Shift: первая страница)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "Последняя страница (+Shift: последняя непустая страница)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "Переключить на личный сундук",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "Переключить на общий сундук",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "Переход назад на %d страниц (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "Переход вперед : на %d страниц (+shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "Добавить золото",
|
|
||||||
"STR_TAKE_GOLD": "Забрать золото",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "Личная страница n°%u",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "Общая страница N°%u",
|
|
||||||
"STR_NO_SELECTED_PAGE": "Нет указанной страницы",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "Общее золото",
|
|
||||||
"STR_PREVIOUS_PAGE": "Предыдущая страница",
|
|
||||||
"STR_NEXT_PAGE": "Следующая страница",
|
|
||||||
"STR_ITEM_LEVEL": "Уровень предмета",
|
|
||||||
"STR_COW_PORTAL": "Коровий портал",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "Адский Портал",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "Финальный Адский Портал",
|
|
||||||
"STR_FULL": "Полностью",
|
|
||||||
"STR_REPAIR": "Починенный",
|
|
||||||
"STR_AND": "и",
|
|
||||||
"STR_RECHARGE": "Перезаряженный",
|
|
||||||
"STR_DESTROY_FILLERS": "Очистка ячеек",
|
|
||||||
"STR_REMOVE_FILLERS": "Извлечение предметов из ячеек",
|
|
||||||
"STR_REGENERATE": "Восстановленный",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "Улучшение до исключительной версии",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "Улучшение до элитной версии",
|
|
||||||
"STR_ETHERAL": "Эфирный",
|
|
||||||
"STR_NOT_ETHERAL": "Не эфирный",
|
|
||||||
"STR_NOT_RUNEWORD": "Без рунного слова",
|
|
||||||
"STR_BASIC": "Простой",
|
|
||||||
"STR_EXCEPTIONAL": "Исключительный",
|
|
||||||
"STR_ELITE": "Элитный",
|
|
||||||
"STR_CRACKED": "Сломанный",
|
|
||||||
"STR_NORMAL": "Нормальный",
|
|
||||||
"STR_SUPERIOR": "Превосходный",
|
|
||||||
"STR_MAGIC": "Магический",
|
|
||||||
"STR_SET": "Наборный",
|
|
||||||
"STR_RARE": "Редкий",
|
|
||||||
"STR_UNIQUE": "Уникальный",
|
|
||||||
"STR_CRAFTED": "Создаваемый",
|
|
||||||
"STR_TEMPERED": "Закаленный",
|
|
||||||
"STR_ITEM": "Предмет",
|
|
||||||
"STR_ITEM_SAME_TYPE": "Предмет того же типа",
|
|
||||||
"STR_INCLUDE_UPGRADED": "(или выше уровнем)",
|
|
||||||
"STR_WITHOUT_SOCKET": "без ячеек",
|
|
||||||
"STR_WITH_SOCKETS": "с ячейками",
|
|
||||||
"STR_WITH_N_SOCKETS": "c %u ячейками",
|
|
||||||
"STR_ONLY_N_H": "(только на уровнях Кошмар и Ад)",
|
|
||||||
"STR_ONLY_HELL": "(только на уровне Ад)",
|
|
||||||
"STR_ONLY_CLASS": "только %hs",
|
|
||||||
"TYPE_shie": "Щит (без привязки к классу)",
|
|
||||||
"TYPE_tors": "Нательная броня",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "Зелье",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "Талисман",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "Перчатки",
|
|
||||||
"TYPE_book": "Книга",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "Драгоценный камень",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "Свиток",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "Посох",
|
|
||||||
"TYPE_bow": "Лук",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "Меч",
|
|
||||||
"TYPE_hamm": "Молот",
|
|
||||||
"TYPE_knif": "Нож",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "Алебарада",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "Зелье стрельбы",
|
|
||||||
"TYPE_ques": "Квестовая вещь",
|
|
||||||
"TYPE_body": "Часть тела",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "Оружие",
|
|
||||||
"TYPE_mele": "Оружие ближнего боя",
|
|
||||||
"TYPE_miss": "Оружие дальнего боя",
|
|
||||||
"TYPE_thro": "Метательное оружие",
|
|
||||||
"TYPE_comb": "Ударно-метательное оружие",
|
|
||||||
"TYPE_armo": "Броня",
|
|
||||||
"TYPE_shld": "Любой щит",
|
|
||||||
"TYPE_misc": "Любой предмет",
|
|
||||||
"TYPE_sock": "Предмет для ячеек",
|
|
||||||
"TYPE_seco": "Предмет для левой руки",
|
|
||||||
"TYPE_rod": "Посохи и Жезлы",
|
|
||||||
"TYPE_misl": "Снаряд",
|
|
||||||
"TYPE_blun": "Тупое оружие",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "С привязкой к классу",
|
|
||||||
"TYPE_amaz": "Предмет для амазонки",
|
|
||||||
"TYPE_barb": "Предмет для варвара",
|
|
||||||
"TYPE_necr": "Предмет для некроманта",
|
|
||||||
"TYPE_pala": "Предмет для паладина",
|
|
||||||
"TYPE_sorc": "Предмет для волшебницы",
|
|
||||||
"TYPE_assn": "Предмет для ассасины",
|
|
||||||
"TYPE_drui": "Предмет для друида",
|
|
||||||
"TYPE_h2h": "Коготь",
|
|
||||||
"TYPE_h2h2": "Коготь ассасины",
|
|
||||||
"TYPE_orb": "Сфера",
|
|
||||||
"TYPE_head": "Голова Вуду",
|
|
||||||
"TYPE_ashd": "Щит паладина",
|
|
||||||
"TYPE_phlm": "Шлем варвара",
|
|
||||||
"TYPE_pelt": "Шлем друида",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "Руна",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "Лук амазонки",
|
|
||||||
"TYPE_aspe": "Копье амазонки",
|
|
||||||
"TYPE_ajav": "Дротик амазонки",
|
|
||||||
"TYPE_mboq": "Магические стрелы",
|
|
||||||
"TYPE_mxbq": "Магические арбалетные стрелы",
|
|
||||||
"TYPE_gem0": "Надколотый драгоценный камень",
|
|
||||||
"TYPE_gem1": "Мутный драгоценный камень",
|
|
||||||
"TYPE_gem2": "Нормальный драгоценный камень",
|
|
||||||
"TYPE_gem3": "Безупречный драгоценный камень",
|
|
||||||
"TYPE_gem4": "Идеальный драгоценный камень"
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
{
|
|
||||||
"STR_STATS_UNASSIGN_WITH_LIMIT": "+Alt: 撤销加点, +Shift: %d 点",
|
|
||||||
"STR_STATS_UNASSIGN_WITHOUT_LIMIT": "+Alt: 撤消加点, +Shift:所有剩余点",
|
|
||||||
"STR_STATS_BASE_MIN": "基础:%d (最低:%d)",
|
|
||||||
"STR_SKILLS_UNASSIGN": "撤销所有技能加点",
|
|
||||||
"STR_STASH_PREVIOUS_PAGE": "上一页 (+Shift: 第一页)",
|
|
||||||
"STR_STASH_NEXT_PAGE": "下一页 (+Shift: 最后非空页)",
|
|
||||||
"STR_TOGGLE_TO_PERSONAL": "切换到个人储物箱",
|
|
||||||
"STR_TOGGLE_TO_SHARED": "切换到共享储物箱",
|
|
||||||
"STR_STASH_PREVIOUS_INDEX": "向前索引 : %d 页 (+Shift: %d)",
|
|
||||||
"STR_STASH_NEXT_INDEX": "向前索引 : %d 页 (+Shift: %d)",
|
|
||||||
"STR_PUT_GOLD": "存入金币",
|
|
||||||
"STR_TAKE_GOLD": "取出金币",
|
|
||||||
"STR_PERSONAL_PAGE_NUMBER": "个人储物箱:第 %u 页",
|
|
||||||
"STR_SHARED_PAGE_NUMBER": "共享储物箱:第 %u 页",
|
|
||||||
"STR_NO_SELECTED_PAGE": "没有选择的页面",
|
|
||||||
"STR_SHARED_GOLD_QUANTITY": "共享金币",
|
|
||||||
"STR_PREVIOUS_PAGE": "上一页",
|
|
||||||
"STR_NEXT_PAGE": "下一页",
|
|
||||||
"STR_ITEM_LEVEL": "物品等级",
|
|
||||||
"STR_COW_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_PORTAL": "",
|
|
||||||
"STR_PANDEMONIUM_FINAL_PORTAL": "",
|
|
||||||
"STR_FULL": "",
|
|
||||||
"STR_REPAIR": "",
|
|
||||||
"STR_AND": "",
|
|
||||||
"STR_RECHARGE": "",
|
|
||||||
"STR_DESTROY_FILLERS": "",
|
|
||||||
"STR_REMOVE_FILLERS": "",
|
|
||||||
"STR_REGENERATE": "",
|
|
||||||
"STR_UPGRADE_TO_EXCEPTIONAL": "",
|
|
||||||
"STR_UPGRADE_TO_ELITE": "",
|
|
||||||
"STR_ETHERAL": "",
|
|
||||||
"STR_NOT_ETHERAL": "",
|
|
||||||
"STR_NOT_RUNEWORD": "",
|
|
||||||
"STR_BASIC": "",
|
|
||||||
"STR_EXCEPTIONAL": "",
|
|
||||||
"STR_ELITE": "",
|
|
||||||
"STR_CRACKED": "",
|
|
||||||
"STR_NORMAL": "",
|
|
||||||
"STR_SUPERIOR": "",
|
|
||||||
"STR_MAGIC": "",
|
|
||||||
"STR_SET": "",
|
|
||||||
"STR_RARE": "",
|
|
||||||
"STR_UNIQUE": "",
|
|
||||||
"STR_CRAFTED": "",
|
|
||||||
"STR_TEMPERED": "",
|
|
||||||
"STR_ITEM": "",
|
|
||||||
"STR_ITEM_SAME_TYPE": "",
|
|
||||||
"STR_INCLUDE_UPGRADED": "",
|
|
||||||
"STR_WITHOUT_SOCKET": "",
|
|
||||||
"STR_WITH_SOCKETS": "",
|
|
||||||
"STR_WITH_N_SOCKETS": "",
|
|
||||||
"STR_ONLY_N_H": "",
|
|
||||||
"STR_ONLY_HELL": "",
|
|
||||||
"STR_ONLY_CLASS": "",
|
|
||||||
"TYPE_shie": "",
|
|
||||||
"TYPE_tors": "",
|
|
||||||
"TYPE_gold": "Gold",
|
|
||||||
"TYPE_bowq": "aqv",
|
|
||||||
"TYPE_xboq": "cqv",
|
|
||||||
"TYPE_play": "ear",
|
|
||||||
"TYPE_herb": "hrb",
|
|
||||||
"TYPE_poti": "",
|
|
||||||
"TYPE_ring": "rin",
|
|
||||||
"TYPE_elix": "elx",
|
|
||||||
"TYPE_amul": "amu",
|
|
||||||
"TYPE_char": "",
|
|
||||||
"TYPE_boot": "lbt",
|
|
||||||
"TYPE_glov": "",
|
|
||||||
"TYPE_book": "",
|
|
||||||
"TYPE_belt": "mbl",
|
|
||||||
"TYPE_gem": "",
|
|
||||||
"TYPE_torc": "tch",
|
|
||||||
"TYPE_scro": "",
|
|
||||||
"TYPE_scep": "scp",
|
|
||||||
"TYPE_wand": "wnd",
|
|
||||||
"TYPE_staf": "",
|
|
||||||
"TYPE_bow": "",
|
|
||||||
"TYPE_axe": "axe",
|
|
||||||
"TYPE_club": "clb",
|
|
||||||
"TYPE_swor": "",
|
|
||||||
"TYPE_hamm": "",
|
|
||||||
"TYPE_knif": "",
|
|
||||||
"TYPE_spea": "spr",
|
|
||||||
"TYPE_pole": "",
|
|
||||||
"TYPE_xbow": "mxb",
|
|
||||||
"TYPE_mace": "mac",
|
|
||||||
"TYPE_helm": "hlm",
|
|
||||||
"TYPE_tpot": "",
|
|
||||||
"TYPE_ques": "",
|
|
||||||
"TYPE_body": "",
|
|
||||||
"TYPE_key": "key",
|
|
||||||
"TYPE_tkni": "tkf",
|
|
||||||
"TYPE_taxe": "tax",
|
|
||||||
"TYPE_jave": "jav",
|
|
||||||
"TYPE_weap": "",
|
|
||||||
"TYPE_mele": "",
|
|
||||||
"TYPE_miss": "",
|
|
||||||
"TYPE_thro": "",
|
|
||||||
"TYPE_comb": "",
|
|
||||||
"TYPE_armo": "",
|
|
||||||
"TYPE_shld": "",
|
|
||||||
"TYPE_misc": "",
|
|
||||||
"TYPE_sock": "",
|
|
||||||
"TYPE_seco": "",
|
|
||||||
"TYPE_rod": "",
|
|
||||||
"TYPE_misl": "",
|
|
||||||
"TYPE_blun": "",
|
|
||||||
"TYPE_jewl": "jew",
|
|
||||||
"TYPE_clas": "",
|
|
||||||
"TYPE_amaz": "",
|
|
||||||
"TYPE_barb": "",
|
|
||||||
"TYPE_necr": "",
|
|
||||||
"TYPE_pala": "",
|
|
||||||
"TYPE_sorc": "",
|
|
||||||
"TYPE_assn": "",
|
|
||||||
"TYPE_drui": "",
|
|
||||||
"TYPE_h2h": "",
|
|
||||||
"TYPE_h2h2": "",
|
|
||||||
"TYPE_orb": "",
|
|
||||||
"TYPE_head": "",
|
|
||||||
"TYPE_ashd": "",
|
|
||||||
"TYPE_phlm": "",
|
|
||||||
"TYPE_pelt": "",
|
|
||||||
"TYPE_cloa": "cloak",
|
|
||||||
"TYPE_rune": "",
|
|
||||||
"TYPE_circ": "circlet",
|
|
||||||
"TYPE_hpot": "hp3",
|
|
||||||
"TYPE_mpot": "mp3",
|
|
||||||
"TYPE_rpot": "rvs",
|
|
||||||
"TYPE_spot": "vps",
|
|
||||||
"TYPE_apot": "yps",
|
|
||||||
"TYPE_wpot": "wms",
|
|
||||||
"TYPE_scha": "cm1",
|
|
||||||
"TYPE_mcha": "cm2",
|
|
||||||
"TYPE_lcha": "cm3",
|
|
||||||
"TYPE_abow": "",
|
|
||||||
"TYPE_aspe": "",
|
|
||||||
"TYPE_ajav": "",
|
|
||||||
"TYPE_mboq": "",
|
|
||||||
"TYPE_mxbq": "",
|
|
||||||
"TYPE_gem0": "",
|
|
||||||
"TYPE_gem1": "",
|
|
||||||
"TYPE_gem2": "",
|
|
||||||
"TYPE_gem3": "",
|
|
||||||
"TYPE_gem4": ""
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
import os
|
|
||||||
import json
|
|
||||||
import codecs
|
|
||||||
import shutil
|
|
||||||
|
|
||||||
files = ["ENG.json", "ESP.json", "DEU.json", "FRA.json", "POR.json", "ITA.json", "JPN.json", "KOR.json", "SIN.json", "CHI.json", "POL.json", "RUS.json"]
|
|
||||||
translations = {}
|
|
||||||
|
|
||||||
for file in files:
|
|
||||||
lang = os.path.splitext(file)[0]
|
|
||||||
with open(file) as json_file:
|
|
||||||
data = json.load(json_file)
|
|
||||||
for key, value in data.items():
|
|
||||||
if (key in translations):
|
|
||||||
t = translations[key]
|
|
||||||
else:
|
|
||||||
t = {}
|
|
||||||
t[lang] = value
|
|
||||||
translations[key] = t
|
|
||||||
json_file.close()
|
|
||||||
|
|
||||||
with codecs.open("../LocalizedStrings.ini", "w", encoding="utf16") as ini_file:
|
|
||||||
ini_file.write(';UTF16\r\n')
|
|
||||||
ini_file.write(';--------------------------------------------------------------------------------------;\r\n')
|
|
||||||
ini_file.write('; ;\r\n')
|
|
||||||
ini_file.write('; "PlugY, The Survival Kit" ;\r\n')
|
|
||||||
ini_file.write('; Localized String File ;\r\n')
|
|
||||||
ini_file.write('; ;\r\n')
|
|
||||||
ini_file.write('; by Yohann Nicolas ;\r\n')
|
|
||||||
ini_file.write('; ;\r\n')
|
|
||||||
ini_file.write('; version 11.02 ;\r\n')
|
|
||||||
ini_file.write('; ;\r\n')
|
|
||||||
ini_file.write(';--------------------------------------------------------------------------------------;\r\n')
|
|
||||||
ini_file.write('\r\n')
|
|
||||||
|
|
||||||
for key, langs in translations.items():
|
|
||||||
ini_file.write("[{}]\r\n".format(key))
|
|
||||||
for lang, value in langs.items():
|
|
||||||
ini_file.write("{}={}\r\n".format(lang, value))
|
|
||||||
ini_file.write("\r\n")
|
|
||||||
|
|
||||||
ini_file.close()
|
|
@ -4,21 +4,19 @@
|
|||||||
; ;
|
; ;
|
||||||
; von Yohann Nicolas ;
|
; von Yohann Nicolas ;
|
||||||
; ;
|
; ;
|
||||||
; version 12.00 ;
|
; version 14.00 ;
|
||||||
; ;
|
; ;
|
||||||
;--------------------------------------------------------------------------------------;
|
;--------------------------------------------------------------------------------------;
|
||||||
|
|
||||||
Offizielle website: http://plugy.free.fr
|
Offizielle website : http://plugy.free.fr
|
||||||
Ihr dürft gerne spenden, falls ihr möchtet.
|
Ihr dürft gerne spenden, falls ihr möchtet.
|
||||||
|
|
||||||
|
|
||||||
WARNUNG:
|
******** WARNUNG ********
|
||||||
- Dieses Plug-In ist NUR für LOD 1.09 bis 1.13d und 1.14d!
|
- Dieses Plug-In ist NUR für LOD 1.09 bis 1.13d und 1.14d!
|
||||||
- Dieses Plug-In ist NICHT das closed Battle.net!
|
- Dieses Plug-In ist NICHT das closed Battle.net!
|
||||||
- Alle Dateien können sich seit der letzten Version verändert haben, benutzt keine alten Dateien!
|
- Alle Dateien können sich seit der letzten Version verändert haben, benutzt keine alten Dateien!
|
||||||
- PlugY.ini wurde stark verändert, bitte nehmt die Neue!
|
- Mit LOD 1.14 wurde der Speicherort der Spielstände geändert. Bitte verschiebt die Spielstände manuell.
|
||||||
- Bitte lest im PlugY-Forum:
|
|
||||||
http://d2mods.info/forum/viewforum.php?f=133
|
|
||||||
|
|
||||||
|
|
||||||
******** ALLE FUNKTIONEN ********
|
******** ALLE FUNKTIONEN ********
|
||||||
@ -27,54 +25,103 @@ Jedes Feature kann via PlugY.ini an/ausgeschaltet werden (siehe "Kommentare aus
|
|||||||
- Nahezu unbegrenzter Speicherplatz im Goldschatz.
|
- Nahezu unbegrenzter Speicherplatz im Goldschatz.
|
||||||
- Gemeinsam genutzter Speicherplatz im Goldschatz.
|
- Gemeinsam genutzter Speicherplatz im Goldschatz.
|
||||||
- Die Ladder-Only Runenwörter können für den Singleplayer aktiviert werden.
|
- Die Ladder-Only Runenwörter können für den Singleplayer aktiviert werden.
|
||||||
- Lokaler World Event! (nicht 1.09)
|
- Lokales World Event und Überquest im Singleplayer und via TCP/IP
|
||||||
- Lokaler Uber Quest! (nicht 1.09 und 1.10)
|
- Das Portal zum Kuh-Level bleibt geöffnet, wenn der Kuhkönig in dieser Schwierigkeit getötet wurde.
|
||||||
- Zurücksetzen von Fertigkeitspunkten
|
- Das Portal zu Nihlathak bleibt geöffnet, wenn der Wegpunkt in dieser Schwierigkeit aktiviert wurde.
|
||||||
|
- Deckard Cain steht jetzt in Harrogath am Wegpunkt.
|
||||||
- Man kann die Skill- und Statuspunkte zurücksetzen.
|
- Man kann die Skill- und Statuspunkte zurücksetzen.
|
||||||
- Man kann die gewählte Sprache verändern
|
- Automatisches Backup von Spielständen vor dem eigentlichen Speichern.
|
||||||
- Man kann einstellen das im Einzelspieler-Modus die Karte mit jedem Spiel erneuert wird
|
- Man kann die gewählte Sprache verändern.
|
||||||
- Man kann /players X automatisch ausführen lassen
|
- Man kann einstellen das im Einzelspieler-Modus die Karte mit jedem Spiel erneuert wird.
|
||||||
- Es gibt eine weitere Charakter Anzeige Seite mit zusätzlichen Informationen
|
- Man kann /players X automatisch ausführen lassen.
|
||||||
- Anzeige des Itemlevel in der Gegenstandsinfo
|
- Es gibt weitere Charakter Anzeige Seiten mit zusätzlichen Informationen.
|
||||||
|
- Anzeige des Itemlevel in der Gegenstandsinfo.
|
||||||
- Man kann beliebig oft Diablo II auf dem gleichen Computer starten.
|
- Man kann beliebig oft Diablo II auf dem gleichen Computer starten.
|
||||||
- Der Goldschatz hat 10x10 Felder.
|
- Die Truhe hat 10x10 Felder.
|
||||||
- Man kann das "SAVE" Verzeichnis ändern.
|
- Man kann das save Verzeichnis ändern.
|
||||||
- Man kann die Versionsanzeige im Hauptbildschirm anpassen.
|
- Man kann eine permanente Anzeige der Mana und Lebensanzeige aktivieren.
|
||||||
- Diablo kann nun auf Text-Dateien laden die von Microsoft Excel geöffnet sind.
|
- Diablo kann nun auf Text-Dateien laden die von Microsoft Excel geöffnet sind. (Standardmäßig deaktiviert).
|
||||||
- Folgende Befehle hinzugefügt (siehe "Kommentare aus der Konfigurationsdatei"):
|
- Die Basiswerte der Statuspunkte werden angezeigt (Ohne Boni von magischen Gegenständen).
|
||||||
/save: Speichert das Spiel ohne es zu beenden.
|
- Das Spiel kann im Fenstermodus gestartet werden.
|
||||||
/page 1: Zeigt die normale Spielerinfo-Seite (Die Spielerinfo-Seite muss geöffnet sein).
|
- Folgende Befehle hinzugefügt (siehe "Kommentare aus der Konfigurationsdatei") :
|
||||||
/page 2: Zeigt die extra Spielerinfo-Seite (Die Spielerinfo-Seite muss geöffnet sein).
|
/lockmouse : Begrenzt den Mauszeiger auf das Fenster.
|
||||||
/page 3: Zeigt die Resistenzen Spielerinfo-Seite (Die Spielerinfo-Seite muss geöffnet sein).
|
|
||||||
/page 4: (Beta) Zeigt alle verfügbaren Runenwörter (Die Spielerinfo-Seite muss geöffnet sein).
|
|
||||||
/lockmouse: Begrenzt den Mauszeiger auf das Fenster.
|
|
||||||
/lock: Siehe /lockmouse.
|
/lock: Siehe /lockmouse.
|
||||||
/unlockmouse: Entfernt die Begrenzung des Mauszeigers auf das Fenster.
|
/unlockmouse: Entfernt die Begrenzung des Mauszeigers auf das Fenster.
|
||||||
/unlock: Siehe /unlockmouse.
|
/unlock: Siehe /unlockmouse.
|
||||||
/renamechar newname: Speichert und benennt den Char um.
|
/renamepage name: Benennt die aktuelle Truhenseite um (# als Seitenzahl verwenden).
|
||||||
/renamepage name: Benennt die aktuelle Truhenseite um.
|
/rp name : Siehe /renamepage.
|
||||||
/setindex: Fügt einen Index für die aktuelle Truhenseite hinzu.
|
/setindex: Fügt einen Index für die aktuelle Truhenseite hinzu.
|
||||||
/setmainindex: Fügt einen Haupt-Index für die aktuelle Truhenseite hinzu.
|
/setmainindex: Fügt einen Haupt-Index für die aktuelle Truhenseite hinzu.
|
||||||
/resetindex: Entfernt den Index von der aktuellen Truhenseite
|
/resetindex: Entfernt den Index von der aktuellen Truhenseite
|
||||||
/insertpage: Fügt eine neue Truhenseite hinter der aktuellen ein.
|
/insertpage: Fügt eine neue Truhenseite hinter der aktuellen ein.
|
||||||
|
/ip : Siehe /insertpage.
|
||||||
/deletepage: Löscht die aktuelle Truhenseite, sofern sie leer ist.
|
/deletepage: Löscht die aktuelle Truhenseite, sofern sie leer ist.
|
||||||
/swap page: Tauscht den Inhalt der aktuellen Truhenseite mit einer anderen.
|
/dp : Siehe /deletepage.
|
||||||
/toggle page: Tauscht den Inhalt der aktuellen Truhenseite mit einer anderen aus der alternativen Truhe (Gemeinsam/Persönlich).
|
/swappage page: Tauscht den Inhalt der aktuellen Truhenseite mit einer anderen.
|
||||||
|
/sp page : Siehe /swappage.
|
||||||
|
/togglepage page : Tauscht den Inhalt der aktuellen Truhenseite mit einer anderen aus der alternativen Truhe (Gemeinsam/Persönlich).
|
||||||
|
/tp page : Siehe /togglepage.
|
||||||
/dlm: Aktiviert/Deaktiviert die permanente Anzeige der Mana und Lebensanzeige.
|
/dlm: Aktiviert/Deaktiviert die permanente Anzeige der Mana und Lebensanzeige.
|
||||||
/dml: Siehe /dlm.
|
/dml: Siehe /dlm.
|
||||||
/dl: Aktiviert/Deaktiviert die permanente Anzeige der Lebensanzeige.
|
/dl: Aktiviert/Deaktiviert die permanente Anzeige der Lebensanzeige.
|
||||||
/dm: Aktiviert/Deaktiviert die permanente Anzeige der Manaanzeige.
|
/dm: Aktiviert/Deaktiviert die permanente Anzeige der Manaanzeige.
|
||||||
|
/page 1 : Zeigt die normale Spielerinfo-Seite (Die Spielerinfo-Seite muss geöffnet sein).
|
||||||
|
/page 2 : Zeigt die extra Spielerinfo-Seite (Die Spielerinfo-Seite muss geöffnet sein).
|
||||||
|
/page 3 : Zeigt die Resistenzen Spielerinfo-Seite (Die Spielerinfo-Seite muss geöffnet sein).
|
||||||
|
/page 4 : Zeigt die Spieler-Breakpoint-Seite (Die Spielerinfo-Seite muss geöffnet sein).
|
||||||
|
/page 5 : Zeigt die Söldner-Breakpoint-Seite (Die Spielerinfo-Seite muss geöffnet sein).
|
||||||
|
/page 6 : (Beta) Zeigt alle verfügbaren Runenwörter (Die Spielerinfo-Seite muss geöffnet sein).
|
||||||
|
/save: (Beta) Speichert das Spiel ohne es zu beenden.
|
||||||
/listcube: (Beta) Erstellt eine "cube.txt" Datei im Savegame-Verzeichnis mit allen Würfelrezepten.
|
/listcube: (Beta) Erstellt eine "cube.txt" Datei im Savegame-Verzeichnis mit allen Würfelrezepten.
|
||||||
|
/renamechar newname: (Beta) Speichert und benennt den Char um.
|
||||||
|
|
||||||
|
|
||||||
v12.00 Änderungen:
|
v14.00 Änderungen :
|
||||||
Kompatibilität mit 1.14d (Vielen Dank an haxifix)
|
- Kompatibilität mit 1.14d (Vielen Dank an Haxifix)
|
||||||
|
- Automatisches Backup von Spielständen vor dem eigentlichen Speichern
|
||||||
|
- Das Portal zu Nihlathak bleibt geöffnet, wenn der Wegpunkt in dieser Schwierigkeit aktiviert wurde.
|
||||||
|
- Deckard Cain steht jetzt in Harrogath am Wegpunkt.
|
||||||
|
- Die Startpositionen von UberDiablo, UberBaal und UberMephisto in Uber Tristram wurden korrigiert.
|
||||||
|
- UberDiablo, UberBaal and UberMephisto beschwören jetzt Monster (LOD 1.13c oder höher). (Vielen Dank an SnapChip)
|
||||||
|
- Die AIs von UberDiablo, UberBaal und UberMephisto wurden korrigiert (LOD 1.13c oder höher). (Vielen Dank an SnapChip)
|
||||||
|
- Spieler (/page 4) und Söldner (/page 5)-Breakpoint-Seiten hinuzgefügt.
|
||||||
|
- Die gemeinsame Truhe wird im Multiplayer jetzt standardmäßig deaktiviert.
|
||||||
|
- Die Farbe des Seitennamens spiegelt jetzt den Index der Seite wieder.
|
||||||
|
- Die Maximale Länge von Seitennamen wurde von 15 auf 20 Zeichen erhöht.
|
||||||
|
- Automatisches Umbenennen von Seiten kann aktiviert werden.
|
||||||
|
- Der Indextyp von Seiten kann per Klick auf den Seitennamen angepasst werden.
|
||||||
|
- Seiten können per Shift-Klick umbenannt werden.
|
||||||
|
- Der /swap Befehl wurde zu /swappage umbenannt.
|
||||||
|
- Der /toggle Befehl wurde zu /togglepage umbenannt.
|
||||||
|
- Der /rp Befehl wurde als Abkürzung für /renamepage hinzugefügt.
|
||||||
|
- Der /ip Befehl wurde als Abkürzung für /insertpage hinzugefügt.
|
||||||
|
- Der /dp Befehl wurde als Abkürzung für /deletepage hinzugefügt.
|
||||||
|
- Der /sp Befehl wurde als Abkürzung für /swappage hinzugefügt.
|
||||||
|
- Der /tp Befehl wurde als Abkürzung für /togglepage hinzugefügt.
|
||||||
|
- Der relative Pfad für die SavePath Einstellung geht nun von D2 Savegame-Verzeichnis aus und nicht vom Installations-Verzeichnis.
|
||||||
|
- Der PlugY Ordner muss jetzt im gleichen Verzeichnis sein, wie die PlugY.ini (also ggf. im Mod Verzeichnis).
|
||||||
|
- Die Ladezeiten von PlugY und der unendlichen Truhe wurden verbessert.
|
||||||
|
- Die TriggerAtEachSOJSoldMin Einstellung wurde korrigiert.
|
||||||
|
- Ein Crash beim /swappage Befehl wenn die Zielseite noch nicht existiert wurde korrigiert.
|
||||||
|
- Ein Crash beim Umbenennen von Seiten wurde korrigiert. (Vielen Dank an SnapChip)
|
||||||
|
- Probleme mit der NBPlayersByDefault Einstellung bei aktivierter MultiStash wurden korrigiert.
|
||||||
|
- Ein Crash wurde behoben wenn SkillsUnassignment, StatsUnassignment, NewStatsInterface, BigStash und MultiPageStash deaktiviert waren.
|
||||||
|
- Die ActiveSkillsUnassignmentOneForOne Einstellung wurde korrigiert (Einstellung für Mods).
|
||||||
|
- Crash in der Polnischen Version korrigiert.
|
||||||
|
- Die seltsame Nachricht, die manchmal beim Spielstart erschien wenn NBPlayersByDefault aktiviert war, wurde behoben.
|
||||||
|
- Die Kompatibilitätsprobleme zwischen der NBPlayersByDefault Einstellung und D2MultiRes wurden behoben.
|
||||||
|
- Mehr Optionen für die zusätzlichen Truhen-Buttons hinzugefügt (Einstellung für Mods).
|
||||||
|
- Chinese Übersetzung aktualisiert. (Vielen Dank an Nagahaku Lonegirl)
|
||||||
|
- Übersetzungsfehler in diversen Sprachen korrigiert.
|
||||||
|
|
||||||
v11.02 Änderungen:
|
v12.00 Änderungen :
|
||||||
Befehl /setmainindex hinzugefügt: Fügt einen Haupt-Index für die aktuelle Truhenseite hinzu (Shift + vorheriger/nächster Index Button springen zum nächsten Haupt-Index)
|
- Inoffizielle Version mit Unterstützung für LOD 1.14d
|
||||||
Der aktuelle /players x Wert wird am Spielstand gespeichert und beim nächsten Spiel wieder angewandt. NBPlayersByDefault muss dafür in der PlugY.ini auf 0 konfiguriert sein.
|
|
||||||
|
|
||||||
v11.01 Änderungen:
|
v11.02 Änderungen :
|
||||||
|
- Befehl /setmainindex hinzugefügt: Fügt einen Haupt-Index für die aktuelle Truhenseite hinzu (Shift + vorheriger/nächster Index Button springen zum nächsten Haupt-Index)
|
||||||
|
- Der aktuelle /players x Wert wird am Spielstand gespeichert und beim nächsten Spiel wieder angewandt. NBPlayersByDefault muss dafür in der PlugY.ini auf 0 konfiguriert sein.
|
||||||
|
|
||||||
|
v11.01 Änderungen :
|
||||||
- Kompatibilität mit 1.13d (Vielen Dank an L'Autour)
|
- Kompatibilität mit 1.13d (Vielen Dank an L'Autour)
|
||||||
- Befehl /unlockmouse hinzugefügt: Entfernt die Begrenzung des Mauszeigers auf das Fenster
|
- Befehl /unlockmouse hinzugefügt: Entfernt die Begrenzung des Mauszeigers auf das Fenster
|
||||||
- Befehl /unlock hinzugefügt: Siehe /unlockmouse
|
- Befehl /unlock hinzugefügt: Siehe /unlockmouse
|
||||||
@ -88,10 +135,10 @@ v11.01 Änderungen:
|
|||||||
- Der Befehl /rename wurde zu /renamechar umbenannt.
|
- Der Befehl /rename wurde zu /renamechar umbenannt.
|
||||||
- Der unvollständige Befehl /reload wurde entfernt.
|
- Der unvollständige Befehl /reload wurde entfernt.
|
||||||
|
|
||||||
v11.00 Änderungen:
|
v11.00 Änderungen :
|
||||||
- Inoffizielle Version mit Unterstützung für LOD 1.13d
|
- Inoffizielle Version mit Unterstützung für LOD 1.13d
|
||||||
|
|
||||||
v10.01 Änderungen:
|
v10.01 Änderungen :
|
||||||
- Fenstermodus Konfiguration hinzugefügt.
|
- Fenstermodus Konfiguration hinzugefügt.
|
||||||
- Der Mauszeiger kann auf das Fenster begrenzt werden (Fenstermodus).
|
- Der Mauszeiger kann auf das Fenster begrenzt werden (Fenstermodus).
|
||||||
- Der Fensterrahmen kann entfernt werden (Fenstermodus).
|
- Der Fensterrahmen kann entfernt werden (Fenstermodus).
|
||||||
@ -102,31 +149,31 @@ v10.01 Änderungen:
|
|||||||
- Befehl "/toggle page" hinzugefügt, der den Inhalt der aktuellen Truhenseite mit einer anderen aus der alternativen Truhe (Gemeinsam/Persönlich) tauscht.
|
- Befehl "/toggle page" hinzugefügt, der den Inhalt der aktuellen Truhenseite mit einer anderen aus der alternativen Truhe (Gemeinsam/Persönlich) tauscht.
|
||||||
- Befehl "/rename newname" hinzugefügt mit dem der Char umbenannt werden kann. Dieses Feature ist noch im Betastatus und um die Spielerinfo-Seite zu aktualisieren muss das Spiel verlassen werden.
|
- Befehl "/rename newname" hinzugefügt mit dem der Char umbenannt werden kann. Dieses Feature ist noch im Betastatus und um die Spielerinfo-Seite zu aktualisieren muss das Spiel verlassen werden.
|
||||||
|
|
||||||
v10.00 Änderungen:
|
v10.00 Änderungen :
|
||||||
- Battle.net LogIn via Hauptmenü deaktiviert.
|
- Battle.net LogIn via Hauptmenü deaktiviert.
|
||||||
- PlugY funktioniert nun auch mit LoD 1.13c Versionen.
|
- PlugY funktioniert nun auch mit LoD 1.13c Versionen.
|
||||||
- Fix shortcut in start menu
|
- Fix shortcut in start menu
|
||||||
|
|
||||||
v9.00 Änderungen:
|
v9.00 Änderungen :
|
||||||
- PlugY funktioniert nun auch mit LoD 1.12 Versionen.
|
- PlugY funktioniert nun auch mit LoD 1.12 Versionen.
|
||||||
- Ein paar Bugs behoben.
|
- Ein paar Bugs behoben.
|
||||||
- Eine neue Möglichkeit zum Skills neuverteilen in Mods hinzugefügt.
|
- Eine neue Möglichkeit zum Skills neuverteilen in Mods hinzugefügt.
|
||||||
|
|
||||||
v8.00 Änderungen:
|
v8.00 Änderungen :
|
||||||
- Einfachere Installation: Neuer Installer.
|
- Einfachere Installation : Neuer Installer.
|
||||||
- Das Portal zum Cow-Level kann nun geöffnet werden auch wenn der Spieler den Cow-King in der aktuellen Schwierigkeit bereits getötet hat.
|
- Das Portal zum Cow-Level kann nun geöffnet werden auch wenn der Spieler den Cow-King in der aktuellen Schwierigkeit bereits getötet hat.
|
||||||
- Die wirkliche Versionsnummer wird angezeigt (v 1.09d oder v 1.11b statt v 1.09 oder v 1.11)
|
- Die wirkliche Versionsnummer wird angezeigt (v 1.09d oder v 1.11b statt v 1.09 oder v 1.11)
|
||||||
- Die Möglichkeit hinzugefügt den Skill-Neuverteilungs-Button zu verschieben (für Modder).
|
- Die Möglichkeit hinzugefügt den Skill-Neuverteilungs-Button zu verschieben (für Modder).
|
||||||
- Behoben: Absturz wenn man einem Superunique Monster in Lod v1.11 begegnet ist.
|
- Behoben : Absturz wenn man einem Superunique Monster in Lod v1.11 begegnet ist.
|
||||||
- Behoben: Verlorene Skillpunkte beim neu verteilen in Mods mit speziellen Skills.
|
- Behoben : Verlorene Skillpunkte beim neu verteilen in Mods mit speziellen Skills.
|
||||||
- Multiplayer: Die Truhendaten werden jetzt korrekt gespeichert wenn es einen Disconnect oder einen Fehler während des Speicherns gibt.
|
- Multiplayer : Die Truhendaten werden jetzt korrekt gespeichert wenn es einen Disconnect oder einen Fehler während des Speicherns gibt.
|
||||||
- Die "check load memory failed" Meldung, wenn die D2gfx.dll gepacht war, wurde entfernt.
|
- Die "check load memory failed" Meldung, wenn die D2gfx.dll gepacht war, wurde entfernt.
|
||||||
|
|
||||||
v7.01b Änderungen:
|
v7.01b Änderungen :
|
||||||
- Behoben: Die Ladder-only Runenwort Features in den LoD-Versionen 1.11 und 1.10.
|
- Behoben: Die Ladder-only Runenwort Features in den LoD-Versionen 1.11 und 1.10.
|
||||||
- Behoben: Seltsame Zeichen in manchen Texten.
|
- Behoben : Seltsame Zeichen in manchen Texten.
|
||||||
|
|
||||||
v7.01 Änderungen:
|
v7.01 Änderungen :
|
||||||
- Die Ladder-Only Runenwörter können für den Singleplayer aktiviert werden.
|
- Die Ladder-Only Runenwörter können für den Singleplayer aktiviert werden.
|
||||||
- Fehler bei der AI des Überbaals behoben
|
- Fehler bei der AI des Überbaals behoben
|
||||||
- Die Parameter in der PlugY.ini standardmäßig entfernt (wie -w um im Fenster zu starten)
|
- Die Parameter in der PlugY.ini standardmäßig entfernt (wie -w um im Fenster zu starten)
|
||||||
@ -134,108 +181,108 @@ v7.01 Änderungen:
|
|||||||
- Eine eigene EXE wurde hinzugefügt um PlugY zu starten (es werden keine LoD-Dateien mehr verändert)
|
- Eine eigene EXE wurde hinzugefügt um PlugY zu starten (es werden keine LoD-Dateien mehr verändert)
|
||||||
- Spanische und Polnische Übersetzung hinzugefügt.
|
- Spanische und Polnische Übersetzung hinzugefügt.
|
||||||
|
|
||||||
V7.00 Änderungen:
|
V7.00 Änderungen :
|
||||||
- PlugY funktioniert nun auch mit LoD 1.11b Versionen.
|
- PlugY funktioniert nun auch mit LoD 1.11b Versionen.
|
||||||
- Den Basiswert für jeden Stat im Mausübertext hinzugefügt.
|
- Den Basiswert für jeden Stat im Mausübertext hinzugefügt.
|
||||||
- Behoben: Unendliche Statuspunkte bei der Neuverteilung
|
- Behoben: Unendliche Statuspunkte bei der Neuverteilung
|
||||||
- Behoben: Einige Features blieben auch im Battle.net aktiviert
|
- Behoben: Einige Features blieben auch im Battle.net aktiviert
|
||||||
- Italienische Übersetzung hinzugefügt.
|
- Italienische Übersetzung hinzugefügt.
|
||||||
|
|
||||||
v6.01b Änderungen:
|
v6.01b Änderungen :
|
||||||
- Fehler mit dem Popups der Statuspunktvergabe-Buttons behoben.
|
- Fehler mit dem Popups der Statuspunktvergabe-Buttons behoben.
|
||||||
|
|
||||||
v6.01 Änderungen:
|
v6.01 Änderungen :
|
||||||
- Behoben: unique carry1 items verschwinden nicht wenn sie in LoD 1.10 gecubt werden
|
- Behoben : unique carry1 items verschwinden nicht wenn sie in LoD 1.10 gecubt werden
|
||||||
- Schlüssel und Uber-Organe werden nicht mehr entfernt wenn man das rote Portal außerhalb von Harrogath öffnen wollte.
|
- Schlüssel und Uber-Organe werden nicht mehr entfernt wenn man das rote Portal außerhalb von Harrogath öffnen wollte.
|
||||||
- Fehler in der Versionsanzeige wegen einem Konflikt mit D2Mod behoben.
|
- Fehler in der Versionsanzeige wegen einem Konflikt mit D2Mod behoben.
|
||||||
|
|
||||||
V6.00 Änderungen:
|
V6.00 Änderungen :
|
||||||
- PlugY funktioniert nun auch mit LoD 1.11 Versionen
|
- PlugY funktioniert nun auch mit LoD 1.11 Versionen
|
||||||
- Freischaltung des über-Quests außerhalb von der Realm (LoD 1.11 only).
|
- Freischaltung des über-Quests außerhalb von der Realm (LoD 1.11 only).
|
||||||
- PlugY Start-Absturz behoben, wenn die LoD Installation unsauber war
|
- PlugY Start-Absturz behoben, wenn die LoD Installation unsauber war
|
||||||
- Kleine Fehler behoben, und kleine Verbesserungen eingebaut
|
- Kleine Fehler behoben, und kleine Verbesserungen eingebaut
|
||||||
- "/save"-Befehl hinzugefügt um das Spiel zu speichern ohne es zu verlassen (nur LoD 1.11).
|
- "/save"-Befehl hinzugefügt um das Spiel zu speichern ohne es zu verlassen (nur LoD 1.11).
|
||||||
|
|
||||||
v5.06 Änderungen:
|
v5.06 Änderungen :
|
||||||
- Knopf for gemeinsamen Goldvorrat hinzugefügt.
|
- Knopf for gemeinsamen Goldvorrat hinzugefügt.
|
||||||
- Gemeinsamer Goldvorrat in Multiplayer hinzugefügt.
|
- Gemeinsamer Goldvorrat in Multiplayer hinzugefügt.
|
||||||
- Befehl "/DisplayLifeMana" ersetzt durch "/dlm".
|
- Befehl "/DisplayLifeMana" ersetzt durch "/dlm".
|
||||||
- Diverse Fehler behoben.
|
- Diverse Fehler behoben.
|
||||||
|
|
||||||
v5.05 Änderungen:
|
v5.05 Änderungen :
|
||||||
- Standard Hintergrundfarbe im Status Interface geändert
|
- Standard Hintergrundfarbe im Status Interface geändert
|
||||||
- Gemeinsames Gold per Kommando hinzugefügt.
|
- Gemeinsames Gold per Kommando hinzugefügt.
|
||||||
- Kommando "/DisplayLifeAndMana" ist nun "/DisplayLifeMana".
|
- Kommando "/DisplayLifeAndMana" ist nun "/DisplayLifeMana".
|
||||||
- Möglichkeit die Namen von Setgegenständen in Grün bei Mouseover in der gemeinsamen Kiste anzuzeigen
|
- Möglichkeit die Namen von Setgegenständen in Grün bei Mouseover in der gemeinsamen Kiste anzuzeigen
|
||||||
- Multiplayer Fehler behoben, indem der gesamte Prozess neu programmiert wurde
|
- Multiplayer Fehler behoben, indem der gesamte Prozess neu programmiert wurde
|
||||||
|
|
||||||
v5.04 Änderungen:
|
v5.04 Änderungen :
|
||||||
- Behoben: Status/Skill Punkte per Levelup bug.
|
- Behoben : Status/Skill Punkte per Levelup bug.
|
||||||
- Behoben: Multiplayer bugs.
|
- Behoben : Multiplayer bugs.
|
||||||
- PlugY/PlugYDefault.ini sind jetzt vollständig.
|
- PlugY/PlugYDefault.ini sind jetzt vollständig.
|
||||||
|
|
||||||
v5.03 Änderungen:
|
v5.03 Änderungen :
|
||||||
- Behoben: Bug der manchmal zwischen den Hardcore und Softcore gemeinsamen Truhen gewechselt hat.
|
- Behoben : Bug der manchmal zwischen den Hardcore und Softcore gemeinsamen Truhen gewechselt hat.
|
||||||
- Farbänderung der Schrift in den Extra-Seiten möglich.
|
- Farbänderung der Schrift in den Extra-Seiten möglich.
|
||||||
- Standardwerte in den Extra-Seiten geändert.
|
- Standardwerte in den Extra-Seiten geändert.
|
||||||
- EnabledTXTFilesWhenMSExcelOpenIt in der PlugY.ini ist nun standardmäßig aktiviert.
|
- EnabledTXTFilesWhenMSExcelOpenIt in der PlugY.ini ist nun standardmäßig aktiviert.
|
||||||
|
|
||||||
v5.02 Änderungen:
|
v5.02 Änderungen :
|
||||||
- Behoben: Bug der das Verschwinden von Gegenständen hervorgerufen hat.
|
- Behoben : Bug der das Verschwinden von Gegenständen hervorgerufen hat.
|
||||||
|
|
||||||
v5.01 Änderungen:
|
v5.01 Änderungen :
|
||||||
- Behoben: Größere bugs bei der gemeinsamen Truhe.
|
- Behoben : Größere bugs bei der gemeinsamen Truhe.
|
||||||
- Behoben: ActiveLogFile ist jetzt in der PlugY.ini standardmäßig deaktiviert.
|
- Behoben: ActiveLogFile ist jetzt in der PlugY.ini standardmäßig deaktiviert.
|
||||||
- Behoben: Bug der auftrat wenn die gemeinsame Truhe deaktiviert war.
|
- Behoben : Bug der auftrat wenn die gemeinsame Truhe deaktiviert war.
|
||||||
|
|
||||||
|
|
||||||
v5.00 Änderungen:
|
v5.00 Änderungen :
|
||||||
- PlugY funktioniert jetzt mit den LoD Versionen 1.09, 1.09b, 1.09d, inklusive zusätzlicher Mods!
|
- PlugY funktioniert jetzt mit den LoD Versionen 1.09, 1.09b, 1.09d, inklusive zusätzlicher Mods !
|
||||||
- PlugY kann jetzt das D2ModSystem (D2Mod.dll) laden.
|
- PlugY kann jetzt das D2ModSystem (D2Mod.dll) laden.
|
||||||
- Diablo kann nun auf Text-Dateien laden die von Microsoft Excel geöffnet sind.
|
- Diablo kann nun auf Text-Dateien laden die von Microsoft Excel geöffnet sind.
|
||||||
- Das World Event Monster kann jetzt verändert werden.
|
- Das World Event Monster kann jetzt verändert werden.
|
||||||
- Neue Einstellungsmöglichkeiten für Modder.
|
- Neue Einstellungsmöglichkeiten für Modder.
|
||||||
- Behebt größere Bugs im Multiplayer: Fingerprints zurückgesetzt, unidentifizierte Items Bug, etc.
|
- Behebt größere Bugs im Multiplayer : Fingerprints zurückgesetzt, unidentifizierte Items Bug, etc.
|
||||||
- Behoben: Schreibfehler in der PlugY.ini (Commands).
|
- Behoben : Schreibfehler in der PlugY.ini (Commands).
|
||||||
- Behoben: Keine weiteren Groß- und Kleinschreibungs Beschränkung für die Commands im Spiel.
|
- Behoben : Keine weiteren Groß- und Kleinschreibungs Beschränkung für die Commands im Spiel.
|
||||||
- Behoben: Character Seiten Auswahl beim öffnen.
|
- Behoben : Character Seiten Auswahl beim öffnen.
|
||||||
- Behoben: Ersetzt die Anzeige von "Kritischer Schlag"/"Tödlicher Schlag" nur mit "Tödlicher Schlag".
|
- Behoben: Ersetzt die Anzeige von "Kritischer Schlag"/"Tödlicher Schlag" nur mit "Tödlicher Schlag".
|
||||||
- Behoben: Das Erscheinen des Diablo Klones am Spielstart.
|
- Behoben : Das Erscheinen des Diablo Klones am Spielstart.
|
||||||
- Behoben: Andere kleine Bugs.
|
- Behoben : Andere kleine Bugs.
|
||||||
|
|
||||||
v4.04 Änderungen:
|
v4.04 Änderungen :
|
||||||
- Behoben: Anzeige-bug wenn StatPerLevelUp aktiviert war.
|
- Behoben : Anzeige-bug wenn StatPerLevelUp aktiviert war.
|
||||||
- Behoben: Fehler bei der Speicherprozedur wenn die Festplatte voll war.
|
- Behoben : Fehler bei der Speicherprozedur wenn die Festplatte voll war.
|
||||||
- Neues Konfigurations-System für Modder.
|
- Neues Konfigurations-System für Modder.
|
||||||
- Man kann auswählen, ob die Mana und Lebens Anzeige immer über den Kugeln erscheint.
|
- Man kann auswählen, ob die Mana und Lebens Anzeige immer über den Kugeln erscheint.
|
||||||
|
|
||||||
v4.03 Änderungen
|
v4.03 Änderungen
|
||||||
- Behoben: Wenn man einen "carry1" - einzigartigen Gegenstand (einzigartiger Zauber) in den Würfel steckt
|
- Behoben: Wenn man einen "carry1" - einzigartigen Gegenstand (einzigartiger Zauber) in den Würfel steckt
|
||||||
- Man kann direkt zur ersten und letzten Seite der Kiste gehen (shift + klick auf Nächste/Vorherige Seite)
|
- Man kann direkt zur ersten und letzten Seite der Kiste gehen (shift + Klick auf Nächste/Vorherige Seite)
|
||||||
- Zweiten Index hinzugefügt (shift + Klick auf den Index Knopf)
|
- Zweiten Index hinzugefügt (shift + Klick auf den Index Knopf)
|
||||||
- Weitere Status Informationen hinzugefügt (Jetzt 2 Seiten)
|
- Weitere Status Informationen hinzugefügt (Jetzt 2 Seiten)
|
||||||
- Vorherige Seite - Button hinzugefügt auf der Hauptstatusseite (nur in 800x600)
|
- Vorherige Seite - Button hinzugefügt auf der Hauptstatusseite (nur in 800x600)
|
||||||
- Button für die zusätzlichen Status Seiten an die gleiche Stelle verschoben, wie die original Buttons (nur in 800x600)
|
- Button für die zusätzlichen Status Seiten an die gleiche Stelle verschoben, wie die original Buttons (nur in 800x600)
|
||||||
- Man kann auswählen, ob die zuletzt angezeigte Seite erscheint, oder die Hauptseite
|
- Man kann auswählen, ob die zuletzt angezeigte Seite erscheint, oder die Hauptseite
|
||||||
|
|
||||||
v4.02b Änderungen:
|
v4.02b Änderungen :
|
||||||
- Behoben: Alle Funktionen bleiben im offenen Battle.net eingeschaltet.
|
- Behoben : Alle Funktionen bleiben im offenen Battle.net eingeschaltet.
|
||||||
|
|
||||||
v4.02 Änderungen:
|
v4.02 Änderungen :
|
||||||
- Behoben: Das vergessene "d" in "SeparateHardcoreStash=1" in der PlugY.ini ergänzt
|
- Behoben : Das vergessene "d" in "SeparateHardcoreStash=1" in der PlugY.ini ergänzt
|
||||||
- Behoben: Standardmäßig wird die Sprache in der PlugY.ini nicht geändert.
|
- Behoben: Standardmäßig wird die Sprache in der PlugY.ini nicht geändert.
|
||||||
- Behoben: Item Level sollte nun in allen Konfigurationen von PlugY korrekt angezeigt werden.
|
- Behoben : Item Level sollte nun in allen Konfigurationen von PlugY korrekt angezeigt werden.
|
||||||
- Behoben: No more conflict with Battle.net (BigStash disabled on realms)
|
- Behoben : No more conflict with Battle.net (BigStash disabled on realms)
|
||||||
- Weitere Daten auf der zusätzlichen Statusseite eingefügt.
|
- Weitere Daten auf der zusätzlichen Statusseite eingefügt.
|
||||||
|
|
||||||
v4.01 Änderungen:
|
v4.01 Änderungen :
|
||||||
- Behoben: NbPlayers Schalter stellte immer 8 Spieler ein.
|
- Behoben: NbPlayers Schalter stellte immer 8 Spieler ein.
|
||||||
- Zusätzliche Daten auf der neuen Status Seite hinzugefügt.
|
- Zusätzliche Daten auf der neuen Status Seite hinzugefügt.
|
||||||
|
|
||||||
v4.00b Änderungen:
|
v4.00b Änderungen :
|
||||||
- Behoben: Problem wenn MSVCR70.dll nicht gefunden wurde.
|
- Behoben : Problem wenn MSVCR70.dll nicht gefunden wurde.
|
||||||
|
|
||||||
v4.00 Änderungen:
|
v4.00 Änderungen :
|
||||||
- Wechsel der ausgewählten Sprache (in MODs, default und verfügbare Sprachen).
|
- Wechsel der ausgewählten Sprache (in MODs, default und verfügbare Sprachen).
|
||||||
- Generiere die Karte im Einzelspieler immer neu, wie im MultiSpieler.
|
- Generiere die Karte im Einzelspieler immer neu, wie im MultiSpieler.
|
||||||
- Man kann einstellen das im Einzelspieler-Modus die Karte mit jedem Spiel erneuert wird
|
- Man kann einstellen das im Einzelspieler-Modus die Karte mit jedem Spiel erneuert wird
|
||||||
@ -245,47 +292,47 @@ v4.00 Änderungen:
|
|||||||
- Der World Event Gegenstand kann ausgewählt werden
|
- Der World Event Gegenstand kann ausgewählt werden
|
||||||
- Beliebig viele carry1 Gegenstände (wie Annihilus) können in die Kiste getan werden
|
- Beliebig viele carry1 Gegenstände (wie Annihilus) können in die Kiste getan werden
|
||||||
- Behoben: Man kann nicht mehr als einen carry1 Gegenstand in andere Seiten legen außer in die Kistenhauptseite
|
- Behoben: Man kann nicht mehr als einen carry1 Gegenstand in andere Seiten legen außer in die Kistenhauptseite
|
||||||
- Behoben: Anzeigefehler von gesockelten Gegenständen in der Kiste
|
- Behoben : Anzeigefehler von gesockelten Gegenständen in der Kiste
|
||||||
- Behoben: Leerzeichenfehler in PlugY.ini behoben
|
- Behoben : Leerzeichenfehler in PlugY.ini behoben
|
||||||
- Behoben: Diablo Clone kann nicht mehr in Normal und Albtraum erscheinen
|
- Behoben : Diablo Clone kann nicht mehr in Normal und Albtraum erscheinen
|
||||||
- Behoben: Zerstörung von zusätzlichen Minions wenn man Fertigkeitspunkte zurücksetzt
|
- Behoben: Zerstörung von zusätzlichen Minions wenn man Fertigkeitspunkte zurücksetzt
|
||||||
|
|
||||||
v3.02 Änderungen:
|
v3.02 Änderungen :
|
||||||
- Fehler im Bereich Statuspunkte pro LevelUp behoben
|
- Fehler im Bereich Statuspunkte pro LevelUp behoben
|
||||||
- Fehler behoben der verhinderte das bei abgeschalteter gemeinsamer Kiste ein Charakter nicht geladen werden konnte.
|
- Fehler behoben der verhinderte das bei abgeschalteter gemeinsamer Kiste ein Charakter nicht geladen werden konnte.
|
||||||
- Fehler behoben der es erlaubte Werte zu setzen, ohne das Fertigkeiten pro LevelUp aktiviert waren.
|
- Fehler behoben der es erlaubte Werte zu setzen, ohne das Fertigkeiten pro LevelUp aktiviert waren.
|
||||||
|
|
||||||
v3.01 Änderungen:
|
v3.01 Änderungen :
|
||||||
- Man kann die Statuspunkte ändern, die man beim LevelUp bekommt.
|
- Man kann die Statuspunkte ändern, die man beim LevelUp bekommt.
|
||||||
- Problem mit fehlerhafter Menge der Fertigkeitspunkte beim zurücksetzen behoben.
|
- Problem mit fehlerhafter Menge der Fertigkeitspunkte beim zurücksetzen behoben.
|
||||||
- Konfigurationsparameter für den World Event hinzugefügt
|
- Konfigurationsparameter für den World Event hinzugefügt
|
||||||
- Standardmäßig wird nur in Hölle der World Event Zähler gezeigt "X SOJ verkauft".
|
- Standardmäßig wird nur in Hölle der World Event Zähler gezeigt "X SOJ verkauft".
|
||||||
|
|
||||||
v3.00 Änderungen:
|
v3.00 Änderungen :
|
||||||
- Lokaler World Event!
|
- Lokaler World Event !
|
||||||
- Zurücksetzen von Fertigkeitspunkten
|
- Zurücksetzen von Fertigkeitspunkten
|
||||||
|
|
||||||
v2.05 Änderungen:
|
v2.05 Änderungen :
|
||||||
- Wichtiger Fix: Alle Fehler die einen Start von Diablo2 verhinderten sind entfernt
|
- Wichtiger Fix: Alle Fehler die einen Start von Diablo2 verhinderten sind entfernt
|
||||||
|
|
||||||
v2.04 Änderungen:
|
v2.04 Änderungen :
|
||||||
- Das zurücksetzen der Statuspunkte, sowie die Fertigkeiten pro LevelUp werden abgeschaltet, wenn man sich in ein Realm-Spiel einklinkt (wie bei der Goldkiste die Knöpfe)
|
- Das zurücksetzen der Statuspunkte, sowie die Fertigkeiten pro LevelUp werden abgeschaltet, wenn man sich in ein Realm-Spiel einklinkt (wie bei der Goldkiste die Knöpfe)
|
||||||
- Es wird eine Fehlermeldung angezeigt, anstelle eines Absturzes, wenn PlugY.dll nicht gefunden werden kann
|
- Es wird eine Fehlermeldung angezeigt, anstelle eines Absturzes, wenn PlugY.dll nicht gefunden werden kann
|
||||||
- Einige Fehler in der Installationsroutine behoben
|
- Einige Fehler in der Installationsroutine behoben
|
||||||
- Einen Fehler bezüglich der verschwindenden Knöpfe behoben
|
- Einen Fehler bezüglich der verschwindenden Knöpfe behoben
|
||||||
- Abspeicher-Problem unter Win95/98/Me behoben
|
- Abspeicher-Problem unter Win95/98/Me behoben
|
||||||
|
|
||||||
v2.03b Änderungen:
|
v2.03b Änderungen :
|
||||||
- Anzeige der PlugY Version nur im Hauptbild
|
- Anzeige der PlugY Version nur im Hauptbild
|
||||||
|
|
||||||
v2.03 Änderungen:
|
v2.03 Änderungen :
|
||||||
- Wichtigster Fix: Die Abspeicher-Routine geändert, damit bei einem Spiel-Absturz keine Items in der Kiste verloren gehen, und der Charakter korrupt wird.
|
- Wichtigster Fix : Die Abspeicher-Routine geändert, damit bei einem Spiel-Absturz keine Items in der Kiste verloren gehen, und der Charakter korrupt wird.
|
||||||
- Kein Absturz des Host Spiels, wenn ein Charakter nicht ins Spiel kann.
|
- Kein Absturz des Host Spiels, wenn ein Charakter nicht ins Spiel kann.
|
||||||
- Ausgegrauter Status-Knopf bei mehr als 255 Status-Punkten gefixed.
|
- Ausgegrauter Status-Knopf bei mehr als 255 Status-Punkten gefixed.
|
||||||
- Die Versionsanzeige auf der Hauptseite geändert (PlugY Version jetzt rechts, und Farben sind nun möglich)
|
- Die Versionsanzeige auf der Hauptseite geändert (PlugY Version jetzt rechts, und Farben sind nun möglich)
|
||||||
- Charaktere ohne PlugY können nun an Spielen teilnehmen die gehosted werden von PlugY-Spielern.
|
- Charaktere ohne PlugY können nun an Spielen teilnehmen die gehosted werden von PlugY-Spielern.
|
||||||
|
|
||||||
v2.02 Änderungen:
|
v2.02 Änderungen :
|
||||||
- PlugY nutzt die D2win.dll nicht mehr zum laden.
|
- PlugY nutzt die D2win.dll nicht mehr zum laden.
|
||||||
- PlugY enthält einen Patcher/Ent-Patcher um die D2gfx.dll so zu verändern, das PlugY gestartet wird.
|
- PlugY enthält einen Patcher/Ent-Patcher um die D2gfx.dll so zu verändern, das PlugY gestartet wird.
|
||||||
- PlugY kann von SVRs D2Mod System gestartet werden.
|
- PlugY kann von SVRs D2Mod System gestartet werden.
|
||||||
@ -296,7 +343,7 @@ v.2.01 Änderungen
|
|||||||
- Fertigkeitsfehler beim LevelUp behoben.
|
- Fertigkeitsfehler beim LevelUp behoben.
|
||||||
- Anzeigefehler im Hauptbildschirm behoben.
|
- Anzeigefehler im Hauptbildschirm behoben.
|
||||||
|
|
||||||
v2.00 Änderungen:
|
v2.00 Änderungen :
|
||||||
- Deutsche Lokalisierung hinzugefügt.
|
- Deutsche Lokalisierung hinzugefügt.
|
||||||
- Die Anzahl der Fertigkeitspunkte beim erreichen des nächsten Levels ist einstellbar.
|
- Die Anzahl der Fertigkeitspunkte beim erreichen des nächsten Levels ist einstellbar.
|
||||||
- Man kann beliebig oft das Spiel Diablo II auf einem Computer starten.
|
- Man kann beliebig oft das Spiel Diablo II auf einem Computer starten.
|
||||||
@ -312,17 +359,17 @@ v2.00 Änderungen:
|
|||||||
- Der Fehler mir carry1 Gegenständen wurde behoben (Uniques die nur einmal getragen werden dürfen)
|
- Der Fehler mir carry1 Gegenständen wurde behoben (Uniques die nur einmal getragen werden dürfen)
|
||||||
- Weitere kleine Verbesserungen eingebaut.
|
- Weitere kleine Verbesserungen eingebaut.
|
||||||
|
|
||||||
v1.03 Änderungen:
|
v1.03 Änderungen :
|
||||||
- Französische Liesmich- und Ini-Datei hinzugefügt.
|
- Französische Liesmich- und Ini-Datei hinzugefügt.
|
||||||
- Fehler in D2Classic-Spielen entfernt (es gibt dort keine Seiten-Erweiterungen, dies ist kein Fehler)
|
- Fehler in D2Classic-Spielen entfernt (es gibt dort keine Seiten-Erweiterungen, dies ist kein Fehler)
|
||||||
- Fehler behoben, der beim laden mit vor LOD 1.10 generierten Charakteren auftrat.
|
- Fehler behoben, der beim laden mit vor LOD 1.10 generierten Charakteren auftrat.
|
||||||
(zB: ShadowMaster Charakter oder 1.09 oder D2Classic Charakter)
|
(zB: ShadowMaster Charakter oder 1.09 oder D2Classic Charakter)
|
||||||
|
|
||||||
v1.02 Änderungen:
|
v1.02 Änderungen :
|
||||||
- Dateinamen geändert wegen eines Fehlers mit dem IE und ZIP-Files
|
- Dateinamen geändert wegen eines Fehlers mit dem IE und ZIP-Files
|
||||||
- Man kann die Versions-Information im Hauptbildschirm ändern (siehe Ini-Datei).
|
- Man kann die Versions-Information im Hauptbildschirm ändern (siehe Ini-Datei).
|
||||||
|
|
||||||
v1.01 Änderungen:
|
v1.01 Änderungen :
|
||||||
- Französische Lokalisierung hinzugefügt (Französisches Liesmich.txt folgt)
|
- Französische Lokalisierung hinzugefügt (Französisches Liesmich.txt folgt)
|
||||||
- Dateinamen von "PlugY, The Survival Kit.ini" in "PlugY,The_Survival_Kit" geändert.
|
- Dateinamen von "PlugY, The Survival Kit.ini" in "PlugY,The_Survival_Kit" geändert.
|
||||||
- Installationsbeispiele im Liesmich hinzugefügt.
|
- Installationsbeispiele im Liesmich hinzugefügt.
|
||||||
@ -331,20 +378,21 @@ v1.01 Änderungen:
|
|||||||
(Man kann ihn weiterhin hinzufügen, sollte aber wissen, was man tut...)
|
(Man kann ihn weiterhin hinzufügen, sollte aber wissen, was man tut...)
|
||||||
- Paket von .rar auf .zip umgestellt
|
- Paket von .rar auf .zip umgestellt
|
||||||
|
|
||||||
v1.00 Funktionen (es können alle einfach ein- und ausgeschaltet werden):
|
v1.00 Funktionen (es können alle einfach ein- und ausgeschaltet werden) :
|
||||||
- Man kann den "Save"-Pfad anpassen.
|
- Man kann den "Save"-Pfad anpassen.
|
||||||
- Man kann jeden MOD starten, ohne die gesicherten Spielstände verschieben zu müssen.
|
- Man kann jeden MOD starten, ohne die gesicherten Spielstände verschieben zu müssen.
|
||||||
- Der Goldschatz kann auf 10x10 Felder erweitert werden.
|
- Der Goldschatz kann auf 10x10 Felder erweitert werden.
|
||||||
- Bis zu 4,294,967,296 Seiten im Goldschatz möglich (nahezu unbegrenzter Speicherplatz)!
|
- Bis zu 4,294,967,296 Seiten im Goldschatz möglich (nahezu unbegrenzter Speicherplatz) !
|
||||||
Achtung: Dies ist nur für LOD1.10 charaktere.
|
Achtung : Dies ist nur für LOD1.10 charaktere.
|
||||||
- Mit dem gemeinsamen Goldschatz kann man Gegenstände an andere Charaktere übergeben
|
- Mit dem gemeinsamen Goldschatz kann man Gegenstände an andere Charaktere übergeben
|
||||||
|
|
||||||
|
|
||||||
******** INHALT ********
|
******** INHALT ********
|
||||||
19 Dateien, 1 Ordner:
|
20 Dateien, 1 Ordner :
|
||||||
- PlugY_The_Survival_Kit_-_Readme.txt
|
- PlugY_The_Survival_Kit_-_Readme.txt
|
||||||
- PlugY_The_Survival_Kit_-_LisezMoi.txt
|
- PlugY_The_Survival_Kit_-_LisezMoi.txt
|
||||||
- PlugY_The_Survival_Kit_-_Liesmich.txt
|
- PlugY_The_Survival_Kit_-_Liesmich.txt
|
||||||
|
- PlugY_The_Survival_Kit_-_讀我檔案.txt
|
||||||
- PlugY.exe
|
- PlugY.exe
|
||||||
- PlugY.dll (in Diablo II directory)
|
- PlugY.dll (in Diablo II directory)
|
||||||
- PlugY.ini
|
- PlugY.ini
|
||||||
@ -359,37 +407,54 @@ v1.00 Funktionen (es können alle einfach ein- und ausgeschaltet werden):
|
|||||||
- PlugY\UnassignSkillsBtns.dc6
|
- PlugY\UnassignSkillsBtns.dc6
|
||||||
- PlugY\UnassignStatsBtns.dc6
|
- PlugY\UnassignStatsBtns.dc6
|
||||||
- PlugY\statsinterface.txt
|
- PlugY\statsinterface.txt
|
||||||
- PlugY Uninstaller.exe (with uninstaller option)
|
- PatchD2gfxDll.exe (in Diablo II directory with PatchFile option)
|
||||||
- PatchD2gfxDll.exe (in Diablo II directory with Patcher D2gfxDll option)
|
- RestoreD2gfxDll.exe (in Diablo II directory with PatchFile option)
|
||||||
- RestoreD2gfxDll.exe (in Diablo II directory with Patcher D2gfxDll option)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
******** INSTALLATION ********
|
******** INSTALLATION ********
|
||||||
Installation:
|
Installation :
|
||||||
- Entpacke alle Dateien in dein Diablo Verzeichnis.
|
- Entpacke alle Dateien in dein Diablo Verzeichnis.
|
||||||
- Kopiere die PlugY.ini und die PlugY.exe in das Verzeichnis in dem dein Mod ist.
|
- Kopiere die PlugY.ini und die PlugY.exe in das Verzeichnis in dem dein Mod ist.
|
||||||
- Bearbeite die PlugY.ini um die gewünschten Features zu de/aktivieren (dazu weiter unten).
|
- Bearbeite die PlugY.ini um die gewünschten Features zu de/aktivieren (dazu weiter unten).
|
||||||
- Run PlugY.exe and enjoy: -)
|
- Run PlugY.exe and enjoy :-)
|
||||||
|
|
||||||
Beispiel:
|
Beispiel :
|
||||||
Du hast LoD in folgendem Verzeichnis installiert: C:\Games\Diablo II\
|
Du hast LoD in folgendem Verzeichnis installiert : C:\Games\Diablo II\
|
||||||
Der Mod und PlugY befindet sich hier: D:\D2Mod\MyMod\
|
Der Mod und PlugY befindet sich hier : D:\D2Mod\MyMod\
|
||||||
Dann müssen die Einstellungen wie folgt lauten:
|
And the second mod is in : D:\D2Mod\MyMod2\
|
||||||
|
Dann müssen die Einstellungen wie folgt lauten :
|
||||||
C:\Games\Diablo II\PlugY.dll
|
C:\Games\Diablo II\PlugY.dll
|
||||||
C:\Games\Diablo II\PlugY\EmptyPage.dc6
|
D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6
|
||||||
C:\Games\Diablo II\PlugY\SharedGoldBtns.dc6
|
D:\D2Mod\MyMod\PlugY\PlugYFixed.ini
|
||||||
C:\Games\Diablo II\PlugY\StashBtns.dc6
|
D:\D2Mod\MyMod\PlugY\PlugYDefault.ini
|
||||||
C:\Games\Diablo II\PlugY\TradeStash.dc6
|
D:\D2Mod\MyMod\PlugY\EmptyPage.dc6
|
||||||
C:\Games\Diablo II\PlugY\StatsBackground.dc6
|
D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6
|
||||||
C:\Games\Diablo II\PlugY\UnassignSkillsBtns.dc6
|
D:\D2Mod\MyMod\PlugY\StashBtns.dc6
|
||||||
C:\Games\Diablo II\PlugY\UnassignStatsBtns.dc6
|
D:\D2Mod\MyMod\PlugY\TradeStash.dc6
|
||||||
C:\Games\Diablo II\PlugY\statsinterface.txt
|
D:\D2Mod\MyMod\PlugY\StatsBackground.dc6
|
||||||
C:\Games\Diablo II\PlugY\LocalizedStrings.ini
|
D:\D2Mod\MyMod\PlugY\UnassignSkillsBtns.dc6
|
||||||
|
D:\D2Mod\MyMod\PlugY\UnassignStatsBtns.dc6
|
||||||
|
D:\D2Mod\MyMod\PlugY\statsinterface.txt
|
||||||
|
D:\D2Mod\MyMod\PlugY\LocalizedStrings.ini
|
||||||
D:\D2Mod\MyMod\PlugY.ini
|
D:\D2Mod\MyMod\PlugY.ini
|
||||||
D:\D2Mod\MyMod\PlugY.exe
|
D:\D2Mod\MyMod\PlugY.exe
|
||||||
|
D:\D2Mod\MyMod2\PlugY\SharedGoldBtns.dc6
|
||||||
|
D:\D2Mod\MyMod2\PlugY\PlugYFixed.ini
|
||||||
|
D:\D2Mod\MyMod2\PlugY\PlugYDefault.ini
|
||||||
|
D:\D2Mod\MyMod2\PlugY\EmptyPage.dc6
|
||||||
|
D:\D2Mod\MyMod2\PlugY\SharedGoldBtns.dc6
|
||||||
|
D:\D2Mod\MyMod2\PlugY\StashBtns.dc6
|
||||||
|
D:\D2Mod\MyMod2\PlugY\TradeStash.dc6
|
||||||
|
D:\D2Mod\MyMod2\PlugY\StatsBackground.dc6
|
||||||
|
D:\D2Mod\MyMod2\PlugY\UnassignSkillsBtns.dc6
|
||||||
|
D:\D2Mod\MyMod2\PlugY\UnassignStatsBtns.dc6
|
||||||
|
D:\D2Mod\MyMod2\PlugY\statsinterface.txt
|
||||||
|
D:\D2Mod\MyMod2\PlugY\LocalizedStrings.ini
|
||||||
|
D:\D2Mod\MyMod2\PlugY.ini
|
||||||
|
D:\D2Mod\MyMod2\PlugY.exe
|
||||||
|
|
||||||
Deinstallation: Einfach alle PlugY-Dateien löschen
|
Deinstallation : Einfach alle PlugY-Dateien löschen
|
||||||
|
|
||||||
|
|
||||||
Wenn Probleme auftreten beim Ausführen der PlugY.exe benutze einfach die alte Installation (PlugY_Installer.exe).
|
Wenn Probleme auftreten beim Ausführen der PlugY.exe benutze einfach die alte Installation (PlugY_Installer.exe).
|
||||||
@ -405,6 +470,39 @@ Wenn das Spiel unter Windows 2000 nicht startet nimm auch die alte Installation.
|
|||||||
Hinweis: Man kann ebenfalls die PlugY.dll in das Mod Verzeichnis installieren und die dc6 Dateien in das mpq.
|
Hinweis: Man kann ebenfalls die PlugY.dll in das Mod Verzeichnis installieren und die dc6 Dateien in das mpq.
|
||||||
|
|
||||||
|
|
||||||
|
******************** FAQ ******************
|
||||||
|
Ich kann die PlugY.ini nicht finden ?
|
||||||
|
Öffne im Explorer Extras/Ordneroptionen/Anzeige und nimm den Haken raus bei Erweiterung bekannter Dateien ausblenden
|
||||||
|
Generell sehr sinnvoll, da man so leichter Viren identifiziert (zB virus.txt.exe da würde man sonst nur txt statt auch das exe sehen..) !
|
||||||
|
|
||||||
|
Wie kann ich gelegentlich im Battle.net spielen, wenn PlugY aktiviert ist ?
|
||||||
|
2 Möglichkeiten:
|
||||||
|
1) Starte PlugY_Uninstall.bat bevor Du Diablo2 startest und starte PlugY_Install.exe danach wenn Du wieder Einzelspieler spielen willst
|
||||||
|
2) Nutze die klassische Installation. (Vergiss nicht die PlugY.ini im Diablo2 Verzeichnis zu entfernen)
|
||||||
|
|
||||||
|
Tips: Erzeuge eine Verknüpfung und füge -skiptobnet im "Ziel" Feld mit einem Leerzeichen hinter dem Anführungszeichen hinzu, um direkt ins Battle.Net zu gelangen ohne die Videos.
|
||||||
|
|
||||||
|
Was tun wenn man "Bad Generic File" mit einem neuen Charakter bekommt ?
|
||||||
|
Dies passiert wenn man einen "schlechten" Gegenstand in der gemeinsamen Kiste hat
|
||||||
|
Eine mögliche Ursache ist das Du das SAVE Verzeichnis für mehrere MODs benutzt, in diesem Fall musst Du das SAVE Verzeichnis in der PlugY.ini ändern.
|
||||||
|
|
||||||
|
I sehe "sUnitItemInsertItemInvGridBase failed at 1046 in C:\projects\D2\head\Diablo2\Source\D2Client\UNIT\Item.cpp" in der D2YYMMDD.txt ?
|
||||||
|
Das sind nur Warnungen, die Ihr einfach ignorieren könnt
|
||||||
|
|
||||||
|
Ich habe einen anderen Fehler, was kann ich tun ?
|
||||||
|
1) Lies meinen Thread und poste eine Frage im PhrozenKeep member annoucement forum.
|
||||||
|
2) Wenn dir das nicht weitergeholfen hat, sende mir eine email (at ynicolas@worldonline.fr) mit "PlugY bug" im Betreff und schreib auf Englisch oder Französisch, da ich kein Deutsch spreche
|
||||||
|
Hänge bitte folgende Dateien an:
|
||||||
|
- PlugY.ini
|
||||||
|
- PlugY.log (dazu muss active_logfile=1 in der plugY.ini aktiviert sein)
|
||||||
|
- D2XXYYZZ.txt log Log Datei von Diablo
|
||||||
|
- Beantworte die Fragen: wann,wo,wie,warum,... passiert das, und evtl. mit welchem MOD ?
|
||||||
|
Danke
|
||||||
|
|
||||||
|
Warum sind die fingerprint auf meinen Gegenständen auf 0 zurückgesetzt?
|
||||||
|
- Anscheinend ein Bug, warnt mich bitte, falls ihr ihn habt.
|
||||||
|
|
||||||
|
|
||||||
******** KONFIGURATION ********
|
******** KONFIGURATION ********
|
||||||
|
|
||||||
Wie konfiguriert man dieses Plug-In für einen MOD:
|
Wie konfiguriert man dieses Plug-In für einen MOD:
|
||||||
@ -414,7 +512,7 @@ Wie konfiguriert man dieses Plug-In für einen MOD:
|
|||||||
- Als letztes aktiviert man noch die gewünschten Funktionen, wie zB: Gemeinsamer Goldschatz, Goldschatz-Zusatzseiten, usw.
|
- Als letztes aktiviert man noch die gewünschten Funktionen, wie zB: Gemeinsamer Goldschatz, Goldschatz-Zusatzseiten, usw.
|
||||||
- Nun kann man den MOD auf klassische Art starten (mit oder ohne "-direct -txt", je nach MOD).
|
- Nun kann man den MOD auf klassische Art starten (mit oder ohne "-direct -txt", je nach MOD).
|
||||||
|
|
||||||
D2Mod Konfiguration:
|
D2Mod Konfiguration :
|
||||||
Ihr könnt die Version des D2Mod-System (v1.02 und Folgende) nutzen um PlugY zu starten.
|
Ihr könnt die Version des D2Mod-System (v1.02 und Folgende) nutzen um PlugY zu starten.
|
||||||
- Startet PlugY_Uninstall.bat um alles zu deinstallieren
|
- Startet PlugY_Uninstall.bat um alles zu deinstallieren
|
||||||
- Fügt die Zeile "PlugY=PlugY.dll" in den [D2MOD] Abschnitt der D2Mod.ini ein.
|
- Fügt die Zeile "PlugY=PlugY.dll" in den [D2MOD] Abschnitt der D2Mod.ini ein.
|
||||||
@ -422,10 +520,10 @@ Ihr könnt die Version des D2Mod-System (v1.02 und Folgende) nutzen um PlugY zu
|
|||||||
Achtung,
|
Achtung,
|
||||||
- Gegenstände im Horadrim-Würfel werden immer im Spieler-Profil gespeichert. Wenn Ihr diese Gegenstände weitergeben wollt, müsst Ihr sie in den Goldschatz umpacken.
|
- Gegenstände im Horadrim-Würfel werden immer im Spieler-Profil gespeichert. Wenn Ihr diese Gegenstände weitergeben wollt, müsst Ihr sie in den Goldschatz umpacken.
|
||||||
|
|
||||||
Warnung:
|
Warnung :
|
||||||
- Editiere die Konfigurationsdatei nicht nachdem der MOD gestartet wurde.
|
- Editiere die Konfigurationsdatei nicht nachdem der MOD gestartet wurde.
|
||||||
- Prüfe bei Multiplayer-Spielen, dass alle die gleiche Konfiguration haben.
|
- Prüfe bei Multiplayer-Spielen, dass alle die gleiche Konfiguration haben.
|
||||||
- Erinnerung: PlugY funktioniert nicht auf REALM-Servern, es kann dort zum Crash kommen
|
- Erinnerung : PlugY funktioniert nicht auf REALM-Servern, es kann dort zum Crash kommen
|
||||||
|
|
||||||
|
|
||||||
*** Konfiguration für Modder ***
|
*** Konfiguration für Modder ***
|
||||||
@ -458,40 +556,7 @@ Anmerkung:
|
|||||||
|
|
||||||
Modder können mich erreichen, wenn sie Hilfe brauchen oder mehr Details über das Konfigurations-System haben möchten.
|
Modder können mich erreichen, wenn sie Hilfe brauchen oder mehr Details über das Konfigurations-System haben möchten.
|
||||||
|
|
||||||
WARNUNG: Vergesst nicht, dass wenn Konfigurations-System missbraucht wird werden die Benutzer auf alte PlugY Versionen zurückgreifen und ich werde kein andere Möglichkeit haben als es zu deaktivieren.
|
WARNUNG : Vergesst nicht, dass wenn Konfigurations-System missbraucht wird werden die Benutzer auf alte PlugY Versionen zurückgreifen und ich werde kein andere Möglichkeit haben als es zu deaktivieren.
|
||||||
|
|
||||||
|
|
||||||
******************** FAQ ******************
|
|
||||||
Ich kann die PlugY.ini nicht finden ?
|
|
||||||
Öffne im Explorer Extras/Ordneroptionen/Anzeige und nimm den Haken raus bei Erweiterung bekannter Dateien ausblenden
|
|
||||||
Generell sehr sinnvoll, da man so leichter Viren identifiziert (zB virus.txt.exe da würde man sonst nur txt statt auch das exe sehen..)!
|
|
||||||
|
|
||||||
Wie kann ich gelegentlich im Battle.net spielen, wenn PlugY aktiviert ist ?
|
|
||||||
2 Möglichkeiten:
|
|
||||||
1) Starte PlugY_Uninstall.bat bevor Du Diablo2 startest und starte PlugY_Install.exe danach wenn Du wieder Einzelspieler spielen willst
|
|
||||||
2) Nutze die klassische Installation. (Vergiss nicht die PlugY.ini im Diablo2 Verzeichnis zu entfernen)
|
|
||||||
|
|
||||||
Tips: Erzeuge eine Verknüpfung und füge -skiptobnet im "Ziel" Feld mit einem Leerzeichen hinter dem Anführungszeichen hinzu, um direkt ins Battle.Net zu gelangen ohne die Videos.
|
|
||||||
|
|
||||||
Was tun wenn man "Bad Generic File" mit einem neuen Charakter bekommt ?
|
|
||||||
Dies passiert wenn man einen "schlechten" Gegenstand in der gemeinsamen Kiste hat
|
|
||||||
Eine mögliche Ursache ist das Du das SAVE Verzeichnis für mehrere MODs benutzt, in diesem Fall musst Du das SAVE Verzeichnis in der PlugY.ini ändern.
|
|
||||||
|
|
||||||
I sehe "sUnitItemInsertItemInvGridBase failed at 1046 in C:\projects\D2\head\Diablo2\Source\D2Client\UNIT\Item.cpp" in der D2YYMMDD.txt ?
|
|
||||||
Das sind nur Warnungen, die Ihr einfach ignorieren könnt
|
|
||||||
|
|
||||||
Ich habe einen anderen Fehler, was kann ich tun ?
|
|
||||||
1) Lies meinen Thread und poste eine Frage im PhrozenKeep member annoucement forum.
|
|
||||||
2) Wenn dir das nicht weitergeholfen hat, sende mir eine email (at ynicolas@worldonline.fr) mit "PlugY bug" im Betreff und schreib auf Englisch oder Französisch, da ich kein Deutsch spreche
|
|
||||||
Hänge bitte folgende Dateien an:
|
|
||||||
- PlugY.ini
|
|
||||||
- PlugY.log (dazu muss active_logfile=1 in der plugY.ini aktiviert sein)
|
|
||||||
- D2XXYYZZ.txt log Log Datei von Diablo
|
|
||||||
- Beantworte die Fragen: wann,wo,wie,warum,... passiert das, und evtl. mit welchem MOD ?
|
|
||||||
Danke
|
|
||||||
|
|
||||||
Warum sind die fingerprint auf meinen Gegenständen auf 0 zurückgesetzt?
|
|
||||||
- Anscheinend ein Bug, warnt mich bitte, falls ihr ihn habt.
|
|
||||||
|
|
||||||
|
|
||||||
******** Kommentare aus der Konfigurationsdatei ********
|
******** Kommentare aus der Konfigurationsdatei ********
|
||||||
@ -504,11 +569,11 @@ Dieser Abschnitt beinhaltet Informationen für die PlugY.exe und funktioniert ni
|
|||||||
Füge Parameter hinzu um LoD mit der gewünschten Einstellung zu starten
|
Füge Parameter hinzu um LoD mit der gewünschten Einstellung zu starten
|
||||||
Parameter die der PlugY.exe hinzugefügt wurden werden auch an LoD weitergeleitet
|
Parameter die der PlugY.exe hinzugefügt wurden werden auch an LoD weitergeleitet
|
||||||
Standardmäßig werden keine Parameter ausgeführt
|
Standardmäßig werden keine Parameter ausgeführt
|
||||||
Die häufigsten Parameter sind (ohne Anführungszeichen):
|
Die häufigsten Parameter sind (ohne Anführungszeichen) :
|
||||||
"-w" Starte LoD im Fenstermodus. (See WINDOWED section instead)
|
"-w" Starte LoD im Fenstermodus. (See WINDOWED section instead)
|
||||||
"-direct" Die Dateien im data-Ordner werden anstatt der in den MPQ's enthaltenen verwendet
|
"-direct" Die Dateien im data-Ordner werden anstatt der in den MPQ's enthaltenen verwendet
|
||||||
"-txt" Wandelt beim Spielstart die txt-dateien im data-Ordner in bin-dateien um
|
"-txt" Wandelt beim Spielstart die txt-dateien im data-Ordner in bin-dateien um
|
||||||
Zwischen den folgenden {} sind Beispielparameter mit Erklärung:
|
Zwischen den folgenden {} sind Beispielparameter mit Erklärung :
|
||||||
Param= {-direct -txt -w: Diese 3 Befehle werden an das Spiel weitergeleitet}
|
Param= {-direct -txt -w: Diese 3 Befehle werden an das Spiel weitergeleitet}
|
||||||
|
|
||||||
Wähle die Dll aus die geladen werden soll.
|
Wähle die Dll aus die geladen werden soll.
|
||||||
@ -523,16 +588,16 @@ Beispiel:
|
|||||||
- ActivePlugin=0 (Deaktiviert, alle DLLs werden geladen außer PlugY.dll)
|
- ActivePlugin=0 (Deaktiviert, alle DLLs werden geladen außer PlugY.dll)
|
||||||
- ActivePlugin=1 (Aktiviert, Standard)
|
- ActivePlugin=1 (Aktiviert, Standard)
|
||||||
|
|
||||||
Erzeugen der Log-Datei "PlugY.log" im aktuellen Verzeichnis.
|
|
||||||
Beispiel:
|
|
||||||
- ActiveLogFile=0 (Deaktiviert, Standard, keine Informationen werden während des Spiels geschrieben)
|
|
||||||
- ActiveLogFile=1 (Aktiviert)
|
|
||||||
|
|
||||||
Aktiviert oder deaktiviert den Battle.net Zugang.
|
Aktiviert oder deaktiviert den Battle.net Zugang.
|
||||||
Beispiel:
|
Beispiel:
|
||||||
- DisableBattleNet=1 (Deaktiviert Battle.net access, Standard)
|
- DisableBattleNet=1 (Deaktiviert Battle.net access, Standard)
|
||||||
- DisableBattleNet=0 (Aktiviert Battle.net access)
|
- DisableBattleNet=0 (Aktiviert Battle.net access)
|
||||||
|
|
||||||
|
Erzeugen der Log-Datei "PlugY.log" im aktuellen Verzeichnis.
|
||||||
|
Beispiel:
|
||||||
|
- ActiveLogFile=0 (Deaktiviert, Standard, keine Informationen werden während des Spiels geschrieben)
|
||||||
|
- ActiveLogFile=1 (Aktiviert)
|
||||||
|
|
||||||
Laden von weiteren DLLs, wenn PlugY genutzt wird.
|
Laden von weiteren DLLs, wenn PlugY genutzt wird.
|
||||||
Trenne jeden DLL-Namen durch das Zeichen Pipe (|)
|
Trenne jeden DLL-Namen durch das Zeichen Pipe (|)
|
||||||
Alle Dateien im "DllToLoad"-Feld werden immer geladen.
|
Alle Dateien im "DllToLoad"-Feld werden immer geladen.
|
||||||
@ -544,29 +609,36 @@ Beispiele um zwei DLLs für einen MOD zu laden, und der Standard:
|
|||||||
|
|
||||||
|
|
||||||
Neue Kommandos in PlugY hinzugefügt, diese können während des Spiels genutzt werden
|
Neue Kommandos in PlugY hinzugefügt, diese können während des Spiels genutzt werden
|
||||||
/save: Save game without exit (LoD 1.11 minimum).
|
/lockmouse : Lock mouse cursor in the window.
|
||||||
/page 1: Show normal stats page (stats page must be opened, space not mandatory).
|
/lock : Same as /lockmouse.
|
||||||
/page 2: Show extra stats page (stats page must be opened, space not mandatory).
|
/unlockmouse : Unlock mouse cursor in the window.
|
||||||
/page 3: Show resistance stats page (stats page must be opened, space not mandatory).
|
/unlock : Same as /unlockmouse.
|
||||||
/page 4: (beta) Show available runewords (stats page must be opened, space not mandatory).
|
/renamepage name : Rename current page stash (use # for page nuymber).
|
||||||
/lockmouse: Lock mouse cursor in the window.
|
/rp name : Rename current page stash (use # for page nuymber).
|
||||||
/lock: Same as /lockmouse.
|
/setindex : Set current stash page as index.
|
||||||
/unlockmouse: Unlock mouse cursor in the window.
|
/setmainindex : Set current stash page as main index.
|
||||||
/unlock: Same as /unlockmouse.
|
/resetindex : Remove index flag on the current stash page.
|
||||||
/renamechar newname: Rename your character and save it. (You must exit the game to update the stats page.)
|
/insertpage : Insert a new page after the current page.
|
||||||
/renamepage name: Rename current page stash (MultiStash activated).
|
/ip : Insert a new page after the current page.
|
||||||
/setindex: Set current stash page as index (prev/next index button go to an index if exists) (MultiStash activated).
|
/deletepage : Delete current page if empty.
|
||||||
/setmainindex: Set current stash page as main index (shift + prev/next index button go to an main index if exists) (MultiStash activated).
|
/dp : Delete current page if empty.
|
||||||
/resetindex: Remove index flag on the current stash page (MultiStash activated).
|
/swappage page : Swap the content of current stash page with the content of another page.
|
||||||
/insertpage: Insert a new page after the current page (MultiStash activated).
|
/sp page : Swap the content of current stash page with the content of another page.
|
||||||
/deletepage: Delete current page if empty (MultiStash activated).
|
/togglepage page : Swap the content of current stash page with the content of another page in opposing stash shared/personal.
|
||||||
/swap page: Swap the content of current stash page with the content of another page (space not mandatory) (MultiStash activated).
|
/tp page : Swap the content of current stash page with the content of another page in opposing stash shared/personal.
|
||||||
/toggle page: Swap the content of current stash page with the content of another page in opposing stash shared/personal (space not mandatory) (MultiStash activated).
|
/dlm : Toggle always display mana and life mode.
|
||||||
/dlm: Toggle always display mana and life mode. (Since 1.13c, you can click on the bottom of each orbs)
|
/dml : Same as /dlm.
|
||||||
/dml: Same as /dlm.
|
/dl : Toggle always display life mode.
|
||||||
/dl: Toggle always display life mode. (Since 1.13c, you can click on the bottom of the orb)
|
/dm : Toggle always display mana mode.
|
||||||
/dm: Toggle always display mana mode. (Since 1.13c, you can click on the bottom of the orb)
|
/page 1 : Show normal stats page (stats page must be opened).
|
||||||
/listcube: (beta) Create a "cube.txt" file in current directory containing all cube's receipts (LoD 1.10 minimum).
|
/page 2 : Show extra stats page (stats page must be opened).
|
||||||
|
/page 3 : Show resistance stats page (stats page must be opened).
|
||||||
|
/page 4 : Show player breakpoints (stats page must be opened).
|
||||||
|
/page 5 : Show mercenaries breakpoints (stats page must be opened).
|
||||||
|
/page 6 : (beta) Show available runewords (stats page must be opened).
|
||||||
|
/save : (beta) Save game without exit.
|
||||||
|
/listcube : (beta) Create a "cube.txt" file in save directory containing all cube's receipts.
|
||||||
|
/renamechar newname : (beta) Rename your character and save it.
|
||||||
- ActiveCommands=0 (0=Aus; 1=Ein)
|
- ActiveCommands=0 (0=Aus; 1=Ein)
|
||||||
|
|
||||||
Beendet D2, wenn PlugY nicht alle Features installieren konnte.
|
Beendet D2, wenn PlugY nicht alle Features installieren konnte.
|
||||||
@ -620,22 +692,33 @@ Hier werden alle Charaktere und der gemeinsame Goldschatz gespeichert.
|
|||||||
Man kann feste Pfade benutzen
|
Man kann feste Pfade benutzen
|
||||||
Beispiele:
|
Beispiele:
|
||||||
- ActiveSavePathChange=0 {0:Disabled; 1:Aktiviert, man muss "SavePath" ausfüllen}
|
- ActiveSavePathChange=0 {0:Disabled; 1:Aktiviert, man muss "SavePath" ausfüllen}
|
||||||
- SavePath=Save\ {Save\MyMod\ or D:\Save Games\diablo II\Current Mod\}
|
- SavePath=Save\ {Save\MyMod\ or D:\Save Games\diablo II\Current Mod\}
|
||||||
|
|
||||||
|
Active autobackup save file just before the save.
|
||||||
|
The backup will be store in a folder name "backup" in the save folder.
|
||||||
|
- ActiveAutoBackup=0 {0:Disabled; 1:Enabled}
|
||||||
|
- MaxBackupPerCharacter=5 {5: Number of backup to keep before delete; 0:No backup purge}
|
||||||
|
|
||||||
|
|
||||||
[MAIN SCREEN]
|
[MAIN SCREEN]
|
||||||
Hier kann man die Versionsinfo des Hauptbildschirms ändern (Original ist: v 1.10)
|
Hier kann man die Versionsinfo des Hauptbildschirms ändern (Original ist : v 1.10)
|
||||||
Die Farbcodes sind Integer,identisch zu den D2 Farben.
|
Die Farbcodes sind Integer,identisch zu den D2 Farben.
|
||||||
Beispiele:
|
Beispiele :
|
||||||
- ActiveVersionTextChange=0 {0:Deaktiviert; 1=Aktiviert}
|
- ActiveVersionTextChange=0 {0:Deaktiviert; 1=Aktiviert}
|
||||||
- VersionText=v 1.10 {Aktuelle Mod Version (Text links unten): Textlänge maximal 23 Zeichen}
|
- VersionText=v 1.10 {Aktuelle Mod Version (Text links unten) :Textlänge maximal 23 Zeichen}
|
||||||
- ColorOfVersionText=0 {0:Weiss; 1:Rot; 4:Gold; usw.}
|
- ColorOfVersionText=0 {0:Weiss; 1:Rot; 4:Gold; usw.}
|
||||||
- ActivePrintPlugYVersion=1 {0:Deaktiviert; 1=Aktiviert (Text rechts unten) )
|
- ActivePrintPlugYVersion=1 {0:Deaktiviert; 1=Aktiviert (Text rechts unten) )
|
||||||
- ColorOfPlugYVersion=4 {0:Weiss; 1:Rot; 4:Gold; usw.}
|
- ColorOfPlugYVersion=4 {0:Weiss; 1:Rot; 4:Gold; usw.}
|
||||||
|
|
||||||
|
|
||||||
[STASH]
|
[STASH]
|
||||||
Es gibt zwei Goldschatzkisten mit Mehrfach-Seiten:
|
Größenänderung des Goldschatz auf 10x10 Felder.
|
||||||
|
Benutze PlugY\TradeStash.dc6 um das Hintergrundbild zu ändern.
|
||||||
|
Beispiel:
|
||||||
|
- ActiveBigStash=0 (Deaktiviert, Standard, original Goldkistengröße aus der MPQ wird benutzt)
|
||||||
|
- ActiveBigStash=1 (Aktiviert)
|
||||||
|
|
||||||
|
Es gibt zwei Goldschatzkisten mit Mehrfach-Seiten :
|
||||||
- eine persönliche die nur der Spieler sieht ;
|
- eine persönliche die nur der Spieler sieht ;
|
||||||
- eine gemeinsame die jeder Spieler sieht.
|
- eine gemeinsame die jeder Spieler sieht.
|
||||||
Benutzt den "Goldschatz"-Knopf um zwischen den beiden Kisten zu wechseln (unten links).
|
Benutzt den "Goldschatz"-Knopf um zwischen den beiden Kisten zu wechseln (unten links).
|
||||||
@ -647,29 +730,36 @@ Startet NIEMALS mehrere Spiele auf einem PC die den gleichen Speicherort für de
|
|||||||
Beispiele für den Mehrfachseiten-Goldschatz:
|
Beispiele für den Mehrfachseiten-Goldschatz:
|
||||||
- ActiveMultiPageStash=0 (Deaktiviert, Standard)
|
- ActiveMultiPageStash=0 (Deaktiviert, Standard)
|
||||||
- ActiveMultiPageStash=1 (Aktiviert)
|
- ActiveMultiPageStash=1 (Aktiviert)
|
||||||
- NbPagesPerIndex=10 (Standard, Index Seiten sind: 1,10,20,30,...,max)
|
- NbPagesPerIndex=10 (Standard, Index Seiten sind :1,10,20,30,...,max)
|
||||||
- NbPagesPerIndex=5 (Index Seiten sind: 1,5,10,15,...,max)
|
- NbPagesPerIndex=5 (Index Seiten sind :1,5,10,15,...,max)
|
||||||
- NbPagesPerIndex2=100 {50: Index Seite (+shift) ist 1, 50, 100, 150,...max)
|
- NbPagesPerIndex2=100 {50: Index Seite (+shift) ist 1, 50, 100, 150,...max)
|
||||||
|
Beispiel Konfiguration des persönlichen Goldschatz :
|
||||||
Beispiel Konfiguration des persönlichen Goldschatz:
|
|
||||||
- MaxPersonnalPages=0 (Standard, nahezu unbegrenzte Speicherseiten in dem persönlichen Goldschatz)
|
- MaxPersonnalPages=0 (Standard, nahezu unbegrenzte Speicherseiten in dem persönlichen Goldschatz)
|
||||||
- MaxPersonnalPages=1000 (Maximum von 1000 persönlichen Speicherseiten)
|
- MaxPersonnalPages=1000 (Maximum von 1000 persönlichen Speicherseiten)
|
||||||
|
|
||||||
Beispiel Konfiguration des gemeinsamen Goldschatz:
|
- AutoRenameStashPage=0 {0:Disabled; 1:Enabled automatic renaming page}
|
||||||
|
- PersonalNormalPageColor=0 {0:Color of the personal stash name without index (see * for color list)}
|
||||||
|
- PersonalIndexPageColor=12 {0:Color of the personal stash name with index (see * for color list)}
|
||||||
|
- PersonalMainIndexPageColor=9 {0:Color of the personal stash name with main index (see * for color list)}
|
||||||
|
- SharedNormalPageColor=4 {0:Color of the shared stash name without index (see * for color list)}
|
||||||
|
- SharedIndexPageColor=8 {0:Color of the shared stash name with index (see * for color list)
|
||||||
|
- SharedMainIndexPageColor=1 {0:Color of the shared stash name with main index (see * for color list)}
|
||||||
|
|
||||||
|
Beispiel Konfiguration des gemeinsamen Goldschatz :
|
||||||
- ActiveSharedStash=0 (Deaktiviert, Standard)
|
- ActiveSharedStash=0 (Deaktiviert, Standard)
|
||||||
- ActiveSharedStash=1 (Aktiviert, nur wenn auch ActiveMultiPageStash=1 ist, sonst deaktiviert)
|
- ActiveSharedStash=1 (Aktiviert, nur wenn auch ActiveMultiPageStash=1 ist, sonst deaktiviert)
|
||||||
- MaxSharedPages=0 (Standard, nahezu unbegrenzte Speicherseiten in dem gemeinsamen Goldschatz)
|
- ActiveSharedStashInMultiPlayer=0 {0:Disabled; 1:Enabled shared stash in multiplayer. Use only with different save folders.}
|
||||||
- MaxSharedPages=50000 (Maximum von 50000 gemeinsamen Speicherseiten)
|
|
||||||
- SeparateHardcoreStash=1 {0:HC und SC teilen sich die selbe Truhe; 1:HC und SC haben getrennte Truhen}
|
- SeparateHardcoreStash=1 {0:HC und SC teilen sich die selbe Truhe; 1:HC und SC haben getrennte Truhen}
|
||||||
- OpenSharedStashOnLoading=0 {0:Deaktiviert; 1:Standardmäßig wird die gemeinsame Truhe geöffnet statt der persönlichen}
|
- OpenSharedStashOnLoading=0 {0:Deaktiviert; 1:Standardmäßig wird die gemeinsame Truhe geöffnet statt der persönlichen}
|
||||||
- SharedStashFilename=MeinGemeinsamerGoldSchatz {Die Datei heißt dann: _LOD_MeinGemeinsamerGoldSchatz.sss}
|
- SharedStashFilename=MeinGemeinsamerGoldSchatz {Die Datei heißt dann: _LOD_MeinGemeinsamerGoldSchatz.sss}
|
||||||
|
- displaySharedSetItemNameInGreen=1 {0:Disabled; 1:Enabled, set items in stash are their name displayed in green on other sets items.}
|
||||||
|
- MaxSharedPages=0 (Standard, nahezu unbegrenzte Speicherseiten in dem gemeinsamen Goldschatz)
|
||||||
|
- MaxSharedPages=50000 (Maximum von 50000 gemeinsamen Speicherseiten)
|
||||||
- ActiveSharedGold=1 {0:Deaktiviert; 1:Schaltet die Kommandos frei, um Gold in der gemeinsame Kiste nutzen zu können (siehe Kommando-Abschnitt)}
|
- ActiveSharedGold=1 {0:Deaktiviert; 1:Schaltet die Kommandos frei, um Gold in der gemeinsame Kiste nutzen zu können (siehe Kommando-Abschnitt)}
|
||||||
|
- PosXPreviousBtn=-1 {-1: Default position, 50: Put the button at the position 50 in absiss}
|
||||||
Größenänderung des Goldschatz auf 10x10 Felder.
|
Same for PosYPreviousBtn, PosXNextBtn, PosYNextBtn, PosXSharedBtn, PosYSharedBtn, PosXPreviousIndexBtn, PosYPreviousIndexBtn, PosXNextIndexBtn, PosYNextIndexBtn, PosXPutGoldBtn, PosYPutGoldBtn, PosXTakeGoldBtn, PosYTakeGoldBtn, PosXStashNameField, PosYStashNameField, PosXStashGoldField, PosYStashGoldField.
|
||||||
Benutze PlugY\TradeStash.dc6 um das Hintergrundbild zu ändern.
|
- PosWPreviousBtn=32 {32: Width of the button}
|
||||||
Beispiel:
|
Same for PosHPreviousBtn, PosWNextBtn, PosHNextBtn, PosWSharedBtn, PosHSharedBtn, PosWPreviousIndexBtn, PosHPreviousIndexBtn, PosWNextIndexBtn, PosHNextIndexBtn, PosWPutGoldBtn, PosHPutGoldBtn, PosWTakeGoldBtn, PosHTakeGoldBtn, PosWStashNameField, PosHStashNameField, PosWStashGoldField, PosHStashGoldField.
|
||||||
- ActiveBigStash=0 (Deaktiviert, Standard, original Goldkistengröße aus der MPQ wird benutzt)
|
|
||||||
- ActiveBigStash=1 (Aktiviert)
|
|
||||||
|
|
||||||
|
|
||||||
[STATS POINTS]
|
[STATS POINTS]
|
||||||
@ -690,6 +780,8 @@ Beispiel:
|
|||||||
- ActiveShiftClickLimit=0 (Deaktiviert, Standard)
|
- ActiveShiftClickLimit=0 (Deaktiviert, Standard)
|
||||||
- ActiveShiftClickLimit=1 (Aktiviert)
|
- ActiveShiftClickLimit=1 (Aktiviert)
|
||||||
- LimitValueToShiftClick=5 (Standard, es werden maximal 5 Statuspunkte auf einmal verändert)
|
- LimitValueToShiftClick=5 (Standard, es werden maximal 5 Statuspunkte auf einmal verändert)
|
||||||
|
- PosXUnassignSkillBtn=-1 {-1: Default position, 50: X position of the button set to 50.}
|
||||||
|
- PosYUnassignSkillBtn=-1 {-1: Default position, 50: Y position of the button set to 50.}
|
||||||
|
|
||||||
|
|
||||||
[STAT ON LEVEL UP]
|
[STAT ON LEVEL UP]
|
||||||
@ -697,24 +789,24 @@ ACHTUNG: CHEAT, NICHT IM NORMALEN SPIEL BENUTZEN.
|
|||||||
Ändert die Anzahl der Statuspunkte beim LevelUp
|
Ändert die Anzahl der Statuspunkte beim LevelUp
|
||||||
Beispiel:
|
Beispiel:
|
||||||
- ActiveStatPerLevelUp=0 {0:Deaktiviert; 1:Aktiviert}
|
- ActiveStatPerLevelUp=0 {0:Deaktiviert; 1:Aktiviert}
|
||||||
- StatPerLevelUp=11 {0:keine Statuspunkte beim LevelUp; 11:elf Punkte beim LevelUp}
|
- StatPerLevelUp=11 {0:keine Statuspunkte beim LevelUp; 11:elf Punkte beim LevelUp}
|
||||||
|
|
||||||
|
|
||||||
[SKILLS POINTS]
|
[SKILLS POINTS]
|
||||||
Kann genutzt werden um versehentlich gesetzte Fertigkeitspunkte zu korrigieren
|
Kann genutzt werden um versehentlich gesetzte Fertigkeitspunkte zu korrigieren
|
||||||
Klickt auf den Knopf auf der Fertigkeits-Seite, um alle Punkte zurückzusetzen .
|
Klickt auf den Knopf auf der Fertigkeits-Seite, um alle Punkte zurückzusetzen .
|
||||||
Hinweis: überprüft die wahren "Kosten" für jede Fertigkeit (kann größer als 1 sein in einem MOD)
|
Hinweis: überprüft die wahren "Kosten" für jede Fertigkeit (kann größer als 1 sein in einem MOD)
|
||||||
Im folgenden die Standardwerte und in {} einige Beispiel Werte mit Beschreibungen:
|
Im folgenden die Standardwerte und in {} einige Beispiel Werte mit Beschreibungen:
|
||||||
- ActiveSkillsUnassignment=0 {0: Ausgeschaltet ; 1: Eingeschaltet }
|
- ActiveSkillsUnassignment=0 {0: Ausgeschaltet ; 1: Eingeschaltet }
|
||||||
- ActiveSkillsUnassignmentOneByOne=0 {0:Normal; 1:Das Zurücksetzen wird für jeden Punkt einzeln durchgeführt (für Mods).}
|
- ActiveSkillsUnassignmentOneForOne=0 {0:Normal; 1:Das Zurücksetzen wird für jeden Punkt einzeln durchgeführt (für Mods).}
|
||||||
- PosXUnassignSkillBtn=-1 {-1: Standardposition, 50: Platziert den Knopf an der X-Position 50}
|
- PosXUnassignSkillBtn=-1 {-1: Standardposition, 50: Platziert den Knopf an der X-Position 50}
|
||||||
- PosYUnassignSkillBtn=-1 {-1: Standardposition, 50: Platziert den Knopf an der Y-Position 50}
|
- PosYUnassignSkillBtn=-1 {-1: Standardposition, 50: Platziert den Knopf an der Y-Position 50}
|
||||||
|
|
||||||
|
|
||||||
[SKILL ON LEVEL UP]
|
[SKILL ON LEVEL UP]
|
||||||
WARNING: CHEAT, DON'T USE IN NORMAL GAME.
|
WARNING : CHEAT, NICHT IM NORMALEN SPIEL BENUTZEN.
|
||||||
Ändert die Menge der Fertigkeitspunkte beim LevelUp.
|
Ändert die Menge der Fertigkeitspunkte beim LevelUp.
|
||||||
Beispiel:
|
Beispiel :
|
||||||
- ActiveSkillPerLevelUp=0 (Deaktiviert, Standard)
|
- ActiveSkillPerLevelUp=0 (Deaktiviert, Standard)
|
||||||
- ActiveSkillPerLevelUp=1 (Aktiviert)
|
- ActiveSkillPerLevelUp=1 (Aktiviert)
|
||||||
- SkillPerLevelUp=0 (man bekommt keinen Punkt beim LevelUp)
|
- SkillPerLevelUp=0 (man bekommt keinen Punkt beim LevelUp)
|
||||||
@ -724,18 +816,18 @@ Beispiel:
|
|||||||
|
|
||||||
[WORLD EVENT]
|
[WORLD EVENT]
|
||||||
Aktiviert den lokalen World Event
|
Aktiviert den lokalen World Event
|
||||||
World Event kann nur in Hölle und nur einmal pro Spiel aktiviert werden.
|
World Event kann nur in Hölle und nur einmal pro Spiel aktiviert werden.
|
||||||
World Event wird alle 75-125 verkauften SOJ aktivert
|
WorldEvent wird alle 75-125 verkauften SOJ aktivert
|
||||||
Der Verkauf eines echten SOJ erhöht den Zähler um 100
|
Der Verkauf eines echten SOJ erhöht den Zähler um 100
|
||||||
Bei Start eines D2 Spiels ist der SOJ Zähler zwischen 200-3000
|
Bei Start eines D2 Spiels ist der SOJ Zähler zwischen 200-3000
|
||||||
Der SOJ Zähler wird alle 10-20 Minuten um 1 erhöht, auch wenn man nicht in einem Spiel ist.
|
Der SOJ Zähler wird alle 10-20 Minuten um 1 erhöht, auch wenn man nicht in einem Spiel ist.
|
||||||
When der World Event ausgelöst wird, und man nicht in einem Spiel ist, verliert man ihn.
|
When der World Event ausgelöst wird, und man nicht in einem Spiel ist, verliert man ihn.
|
||||||
Hinweis 1: Es besteht eine Chance von 1/12 einen WE in der ersten Spielstunde zu erhalten
|
Hinweis 1: Es besteht eine Chance von 1/12 einen WE in der ersten Spielstunde zu erhalten
|
||||||
Hinweis 2: Von Beginn eines neuen Spiels kommt der nächste WE wird innerhalb weniger Sekunden bis 41:40 Stunden danach
|
Hinweis 2: Von Beginn eines neuen Spiels kommt der nächste WE wird innerhalb weniger Sekunden bis 41:40 Stunden danach
|
||||||
Im folgenden die Standardwerte und in {} einige Beispiel Werte mit Beschreibungen:
|
Im folgenden die Standardwerte und in {} einige Beispiel Werte mit Beschreibungen:
|
||||||
- ActiveWorldEvent=0 {0: Ausgeschaltet ; 1: Eingeschaltet }
|
- ActiveWorldEvent=0 {0: Ausgeschaltet ; 1: Eingeschaltet }
|
||||||
- ShowCounterInAllDifficulty=0 {0:Zeige die Meldung "SOJ verkauft" nur in Hölle; 1:Zeige es in allen Schwierigkeitsgraden}
|
- ShowCounterInAllDifficulty=0 {0:Zeige die Meldung "SOJ verkauft" nur in Hölle; 1:Zeige es in allen Schwierigkeitsgraden}
|
||||||
- ItemsToSell=The Stone of Jordan {r01: rune EL; cap,rar,upg: Jede cap/war hat/shako rare}
|
- ItemsToSell=The Stone of Jordan {r01: rune EL; cap,rar,upg: Jede cap/war hat/shako rare}
|
||||||
- MonsterID=333 {333: DiabloKlon erscheint}
|
- MonsterID=333 {333: DiabloKlon erscheint}
|
||||||
- OwnSOJSoldChargeFor=100 {100:Wenn Du einen SOJ verkaufst wird der SOJ Zähler um 100 erhöht}
|
- OwnSOJSoldChargeFor=100 {100:Wenn Du einen SOJ verkaufst wird der SOJ Zähler um 100 erhöht}
|
||||||
- InititalSOJSoldMin=200 {200:Der SOJ Zähler ist mindestens bei 200 wenn Du D2 startest}
|
- InititalSOJSoldMin=200 {200:Der SOJ Zähler ist mindestens bei 200 wenn Du D2 startest}
|
||||||
@ -754,6 +846,23 @@ Dies muss jeweils in Harrogath erfolgen
|
|||||||
Notiz: Dieser Quest wird in einer späteren PlugY Version mehr dem Verhalten im Battle.net angepasst
|
Notiz: Dieser Quest wird in einer späteren PlugY Version mehr dem Verhalten im Battle.net angepasst
|
||||||
Warnung: Aktuell sind die über-Monster direkt neben dem Portal, also sei vorsichtig, wenn Du durch das Portal gehst!
|
Warnung: Aktuell sind die über-Monster direkt neben dem Portal, also sei vorsichtig, wenn Du durch das Portal gehst!
|
||||||
ActiveUberQuest=0 {0:Deaktiviert; 1:Aktiviert}
|
ActiveUberQuest=0 {0:Deaktiviert; 1:Aktiviert}
|
||||||
|
UberMephistoX=25130 {25130:X position of Uber Mephisto}
|
||||||
|
UberMephistoY=5143 {5143:Y position of Uber Mephisto}
|
||||||
|
UberDiabloX=25139 {25139:X position of Uber Diablo}
|
||||||
|
UberDiabloY=5139 {5139:Y position of Uber Diablo}
|
||||||
|
UberBaalX=25139 {25139:X position of Uber Baal}
|
||||||
|
UberBaalY=5135 {5135:Y position of Uber Baal}
|
||||||
|
ActiveUberMinions=1 {0:Disabled; 1:Enabled Uber minions in Tristram}
|
||||||
|
UberMephistoSpawnPercent=80 {80:Percent chance of Uber Mephisto to spawn a minion}
|
||||||
|
UberMephistoSpawnRadius=30 {30:Radius of Uber Mephisto to spawn a minion}
|
||||||
|
UberBaalSpawnPercent=30 {30:Percent chance of Uber Baal to spawn a minion}
|
||||||
|
UberBaalSpawnRadius=30 {30:Radius of Uber Baal to spawn a minion}
|
||||||
|
UberDiabloSpawnPercent=30 {30:Percent chance of Uber Diablo to spawn a minion}
|
||||||
|
UberDiabloSpawnRadius=30 {30:Radius of Uber Diablo to spawn a minion}
|
||||||
|
ActiveUberDiabloRushTweekAI=1 {0:Disabled; 1:Enabled Uber Diablo Rush tweek}
|
||||||
|
ActiveUberBaalTeleportTweekAI=1 {0:Disabled; 1:Enabled Uber Baal Teleport tweek}
|
||||||
|
ActiveUberBaalChillingArmorTweekAI=1 {0:Disabled; 1:Enabled Uber Baal Chilling Armor tweek}
|
||||||
|
UberBaalChillingArmorTimer=6000 {6000:Timer between Uber Baal casting Chilling Armor}
|
||||||
|
|
||||||
|
|
||||||
[INTERFACE]
|
[INTERFACE]
|
||||||
@ -771,7 +880,7 @@ Unterdrückt den Hintergrund von Schaltflächen, wenn der MOD diese bereits änd
|
|||||||
[EXTRA]
|
[EXTRA]
|
||||||
Man kann LOD beliebig oft auf einem Computer starten.
|
Man kann LOD beliebig oft auf einem Computer starten.
|
||||||
Zum Beispiel können Modder Multiplayer-Spiele auf einem PC testen.
|
Zum Beispiel können Modder Multiplayer-Spiele auf einem PC testen.
|
||||||
Warnung:
|
Warnung :
|
||||||
Startet keine Spiele mit dem gleichen Speicherort (SavePath), wenn Ihr den gemeinsamen Goldschatz aktiviert habt.
|
Startet keine Spiele mit dem gleichen Speicherort (SavePath), wenn Ihr den gemeinsamen Goldschatz aktiviert habt.
|
||||||
Benutzt nicht zweimal den gleichen Charakter zur gleichen Zeit.
|
Benutzt nicht zweimal den gleichen Charakter zur gleichen Zeit.
|
||||||
- ActiveLaunchAnyNumberOfLOD=0 {0:Deaktiviert ; 1: Aktiviert}
|
- ActiveLaunchAnyNumberOfLOD=0 {0:Deaktiviert ; 1: Aktiviert}
|
||||||
@ -796,13 +905,37 @@ Das wird ermöglicht indem die Spalte "Server" in der runes.txt deaktiviert wird
|
|||||||
Benutze diese Spalte also nicht in deinem Mod wenn diese Funktion aktiviert ist.
|
Benutze diese Spalte also nicht in deinem Mod wenn diese Funktion aktiviert ist.
|
||||||
- ActiveLadderRunewords=0 {0:Deaktiviert; 1:Aktiviert}
|
- ActiveLadderRunewords=0 {0:Deaktiviert; 1:Aktiviert}
|
||||||
|
|
||||||
|
Enabled the ability to open the Cow Portal in a difficulty where the player have already killed the Cow King.
|
||||||
|
- ActiveCowPortalWhenCowKingWasKilled=0 {0:Disabled; 1:Enabled}
|
||||||
|
|
||||||
Weitere Funktionen folgen...: )
|
Prevent Nihlathak's portal from closing.
|
||||||
|
- ActiveDoNotCloseNihlathakPortal=0 {0:Disabled; 1:Enabled}
|
||||||
|
|
||||||
|
Move Cain near Harrogath waypoint.
|
||||||
|
- MoveCainNearHarrogathWaypoint=0 {0:Disabled; 1:Enabled}
|
||||||
|
|
||||||
Wenn Ihr Anregungen habt, Fehler findet oder Konflikte mit MODs feststellt, schickt eine eMail an ynicolas@worldonline.fr mit "DiabloII" als Betreffzeile!
|
Wenn Ihr Anregungen habt, Fehler findet oder Konflikte mit MODs feststellt, schickt eine eMail an ynicolas@worldonline.fr mit "DiabloII" als Betreffzeile!
|
||||||
Zur Korrektur der deutschen Übersetzung bitte eine eMail an ChaosEnergy@planetdiablo.com
|
Zur Korrektur der deutschen Übersetzung bitte eine eMail an ChaosEnergy@planetdiablo.com
|
||||||
|
|
||||||
|
* Color list values (color code greater than 12 is black in 1.14d fullscreen):
|
||||||
|
- Invisible: 6
|
||||||
|
- Dark gray: 5
|
||||||
|
- Gray: 16
|
||||||
|
- Light gray: 15
|
||||||
|
- White: 0,
|
||||||
|
- Bright white: 18
|
||||||
|
- Gold: 4
|
||||||
|
- Dark yellow: 7
|
||||||
|
- Yellow: 9
|
||||||
|
- Orange: 8
|
||||||
|
- Darkest green: 10
|
||||||
|
- Dark green: 12
|
||||||
|
- Green: 2
|
||||||
|
- Blue: 3
|
||||||
|
- Purple: 11
|
||||||
|
- Red: 1
|
||||||
|
- Crystal red: 19
|
||||||
|
|
||||||
|
|
||||||
******** Dank geht an: ********
|
******** Dank geht an: ********
|
||||||
- Blizzard für Diablo2 und Lord of Destruction.
|
- Blizzard für Diablo2 und Lord of Destruction.
|
||||||
@ -816,13 +949,14 @@ Zur Korrektur der deutschen Übersetzung bitte eine eMail an ChaosEnergy@planetd
|
|||||||
- ItalianPlayer für Italienisch Übersetzung.
|
- ItalianPlayer für Italienisch Übersetzung.
|
||||||
- Alle Mitglieder des ProzenKeep Chat und Forum für Ihre Informationen und das Feedback.
|
- Alle Mitglieder des ProzenKeep Chat und Forum für Ihre Informationen und das Feedback.
|
||||||
- PhrozenKeep für alle Dinge die sie mit uns teilen (inklusive meinen ;)
|
- PhrozenKeep für alle Dinge die sie mit uns teilen (inklusive meinen ;)
|
||||||
- Übersetzung:
|
- Übersetzung :
|
||||||
* Englisch: Yohann, Jurica.
|
* Englisch: Yohann, Jurica.
|
||||||
* Französisch: Yohann
|
* Französisch: Yohann
|
||||||
* Deutsch: ChaosEnergy, TheMasterCaster.
|
* Deutsch: ChaosEnergy, TheMasterCaster, ChaosMarc.
|
||||||
* Italienisch: ItalianPlayer
|
* Italienisch: ItalianPlayer
|
||||||
* Spanish: Acrerune
|
* Spanish: Acrerune
|
||||||
* Polnisch: Serdel
|
* Polnisch: Serdel
|
||||||
* Russisch: L'Autour
|
* Russisch: L'Autour
|
||||||
|
* Chinesisch: Nagahaku
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------------;
|
;--------------------------------------------------------------------------------------;
|
@ -4,97 +4,141 @@
|
|||||||
; ;
|
; ;
|
||||||
; par Yohann Nicolas ;
|
; par Yohann Nicolas ;
|
||||||
; ;
|
; ;
|
||||||
; version 12.00 ;
|
; version 14.00 ;
|
||||||
; ;
|
; ;
|
||||||
;--------------------------------------------------------------------------------------;
|
;--------------------------------------------------------------------------------------;
|
||||||
|
|
||||||
|
Site officiel : http://plugy.free.fr
|
||||||
Site officiel: http://plugy.free.fr
|
|
||||||
Vous pouvez y faire un don si vous le souhaitez.
|
Vous pouvez y faire un don si vous le souhaitez.
|
||||||
|
|
||||||
|
|
||||||
******** ATTENTION ********
|
******** ATTENTION ********
|
||||||
- Ce plugin fonctionne sur LoD version 1.09 à 1.13d et 1.14d et sur leurs mods.
|
- Ce plugin fonctionne sur LoD version 1.09 à 1.13d et 1.14d et sur leurs mods.
|
||||||
- Ce plugin ne fonctionne pas sur les royaumes Battle.net.
|
- Ce plugin ne fonctionne pas sur sur Battle.net et les autres royaumes.
|
||||||
- Tous les fichiers ont changés depuis les versions précédentes, donc déinstaller toutes les versions précédentes.
|
|
||||||
- PlugY.ini a été modifié depuis les versions précédentes, utiliser celui fourni dans cette archive.
|
- PlugY.ini a été modifié depuis les versions précédentes, utiliser celui fourni dans cette archive.
|
||||||
- N'oubliez pas de lire les forums:
|
- LOD 1.14 change le répertoire de sauvegarde, vous devez donc déplacer vos fichiers de sauvegardes de PlugY manuellement.
|
||||||
http://forum.judgehype.com/judgehype/ModsetModding/liste_sujet-1.htm
|
|
||||||
http://d2mods.info/forum/viewforum.php?f=133 (anglais)
|
|
||||||
|
|
||||||
|
|
||||||
******** CARACTERISTIQUES ********
|
******** CARACTERISTIQUES ********
|
||||||
Toutes ces fonctions peuvent être activé/désactivé via PlugY.ini (voir "COMMENTAIRES SUR LE FICHIER DE CONFIGURATION")
|
Toutes ces fonctions peuvent être activé/désactivé via PlugY.ini (voir "COMMENTAIRES SUR LE FICHIER DE CONFIGURATION")
|
||||||
- Désactive l'accès à Battle.net
|
- Désactive l'accès à Battle.net
|
||||||
- Espace de stockage infini dans le coffre!
|
- Espace de stockage infini dans le coffre.
|
||||||
- Espace de stockage partagé dans le coffre!
|
- Espace de stockage partagé dans le coffre.
|
||||||
- Active les mots runiques du ladder en dehors des royaumes.
|
- Active les mots runiques du ladder pour le monojoueur et le TCP/IP.
|
||||||
- World Event et Uber Quest en Local pour le monojoueur et le multijoueur hors royaumes!
|
- World Event et Uber Quest en Local pour le monojoueur et le TCP/IP.
|
||||||
- Permet d'ouvrir le portail vers le Cow Level même quand on a tuer le Cow King dans cette difficulté.
|
- Permet d'ouvrir le portail vers le Cow Level même quand on a tuer le Cow King dans cette difficulté.
|
||||||
- Désalloue les points de capacités(skills) et de statistiques précédemment allouées.
|
- Empéche la fermeture du portail de Nihlathak.
|
||||||
|
- Déplace Deckar Cain à coté du portail d'Harrogath.
|
||||||
|
- Désalloue les points de capacités et de caractèristiques précédemment allouées.
|
||||||
|
- Crée un backup des fichiers de sauvegarde avant de sauvegarder.
|
||||||
- Change la langue du jeu.
|
- Change la langue du jeu.
|
||||||
- Régénère toujours la carte en monojoueur comme en multijoueur.
|
- Régénère toujours la carte en monojoueur comme en multijoueur.
|
||||||
- Exécute automatiquement la comande /players X au lancement d'une partie.
|
- Exécute automatiquement la comande /players X au lancement d'une partie.
|
||||||
- Ajoute des pages supplémentaires pour l'affichage de plus de statistiques du perso comme le %MF.
|
- Ajoute des pages supplémentaires pour l'affichage de plus de statistiques.
|
||||||
- Affiche le niveau de l'objet dans son popup.
|
- Affiche le niveau de l'objet dans son popup.
|
||||||
- Permet de lancer autant de fois que l'on veut Diablo II sur le même ordinateur.
|
- Permet de lancer autant de fois que l'on veut Diablo II sur le même ordinateur.
|
||||||
- Le coffre contient 10x10 cases.
|
- Le coffre contient 10x10 cases.
|
||||||
- Change le répertoire de sauvegarde.
|
- Change le répertoire de sauvegarde.
|
||||||
- Affiche toujours les valeurs numériques de mana et de vie au-dessus des globes correspondants.
|
- Affiche toujours les valeurs numériques de mana et de vie au-dessus des globes correspondants.
|
||||||
- D2 peut charger tout les fichiers, même ceux ouvert par Microsoft Excel (désactivé par defaut).
|
- D2 peut charger tout les fichiers, même ceux ouvert par Microsoft Excel (désactivé par defaut).
|
||||||
- Affiche la valeur courante des caracs (sans les bonus magiques).
|
- Affiche la valeur courante des caractéristiques (sans les bonus magiques).
|
||||||
- Localisé en français, anglais, allemand, italien, espagnol et polonais.
|
- Permet de lancer en mode fenêtré.
|
||||||
- Ajout des commandes suivantes (voir "COMMENTAIRES SUR LE FICHIER DE CONFIGURATION"):
|
- Ajout des commandes suivantes (voir "COMMENTAIRES SUR LE FICHIER DE CONFIGURATION") :
|
||||||
/save: Sauvegarde la partie sans quitter.
|
/lockmouse : Bloque le curseur de la souris dans la fenêtre.
|
||||||
/page 1: Affiche la page des stats de base (la page des stats doit être ouverte).
|
/lock : Identique à /lockmouse.
|
||||||
/page 2: Affiche la page des stats en plus (la page des stats doit être ouverte).
|
/unlockmouse : Libère le curseur de la souris de la fenêtre.
|
||||||
/page 3: Affiche la page des stats de resistances (la page des stats doit être ouverte).
|
/unlock : Identique à /unlockmouse.
|
||||||
/page 4: (bêta) Affiche la page des mots runiques actifs (la page des stats doit être ouverte).
|
/renamepage name : Renomme la page courante du coffre (utiliser # pour le numéro de page).
|
||||||
/lockmouse: Bloque le curseur de la souris dans la fenêtre.
|
/rp name : Renomme la page courante du coffre (utiliser # pour le numéro de page).
|
||||||
/lock: Identique à /lockmouse.
|
/setindex : La page courante devient un index.
|
||||||
/unlockmouse: Libère le curseur de la souris de la fenêtre.
|
/setmainindex : La page courante devient un index principal.
|
||||||
/unlock: Identique à /unlockmouse.
|
/resetindex : Retire la page courante des index.
|
||||||
/renamechar newname: Renomme la personnage et le sauvegarde.
|
/insertpage : Insère une nouvelle page après la page courante.
|
||||||
/renamepage name: Renomme la page courante du coffre.
|
/ip : Insère une nouvelle page après la page courante.
|
||||||
/setindex: La page courante devient un index.
|
/deletepage : Supprime la page courante si elle est vide.
|
||||||
/setmainindex: La page courante devient un index principal.
|
/dp : Supprime la page courante si elle est vide.
|
||||||
/resetindex: Retire la page courante des index.
|
/swappage page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page".
|
||||||
/insertpage: Insère une nouvelle page après la page courante.
|
/sp page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page".
|
||||||
/deletepage: Supprime la page courante si elle est vide.
|
/togglepage page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé partagé/personnel.
|
||||||
/swap page: Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page".
|
/tp page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé partagé/personnel.
|
||||||
/toggle page: Echanger le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé partagé/personnel (espace non obligatoire).
|
/dlm : Inverse le mode d'affichage: Toujours afficher les valeurs de vie et de mana.
|
||||||
/dlm: Inverse le mode d'affichage: Toujours afficher les valeurs de vie et de mana.
|
/dml : Identique à /dlm.
|
||||||
/dml: Identique à /dlm.
|
/dl : Identique à /dlm.
|
||||||
/dl: Inverse le mode d'affichage: Toujours afficher les valeurs de vie.
|
/dm : Identique à /dlm.
|
||||||
/dm: Inverse le mode d'affichage: Toujours afficher les valeurs de mana.
|
/page 1 : Affiche la page des stats de base (la page des stats doit être ouverte).
|
||||||
/listcube: (bêta) Crée un fichier "cube.txt" dans le répertoire de sauvegarde contenant toutes les formules actives du cube.
|
/page 2 : Affiche la page des stats en plus (la page des stats doit être ouverte).
|
||||||
|
/page 3 : Affiche la page des stats de resistances (la page des stats doit être ouverte).
|
||||||
|
/page 4 : Affiche les palliers pour le joueur (la page des stats doit être ouverte).
|
||||||
|
/page 5 : Affiche les palliers pour le mercenaire (la page des stats doit être ouverte).
|
||||||
|
/page 6 : (beta) Affiche la page des mots runiques actifs (la page des stats doit être ouverte).
|
||||||
|
/save : (beta) Sauvegarde la partie sans quitter.
|
||||||
|
/listcube : (beta) Crée un fichier "cube.txt" dans le répertoire de sauvegarde contenant toutes les formules du cube.
|
||||||
|
/renamechar newname : (beta) Renomme la personnage et le sauvegarde.
|
||||||
|
|
||||||
|
|
||||||
|
Changements apportés par la v14.00:
|
||||||
|
- Ajout de la compatibilité avec la version 1.13d de LOD. (merci à Haxifix)
|
||||||
|
- Crée un backup des fichiers de sauvegardes avant de sauvegarder.
|
||||||
|
- Empéche la fermeture du portail de Nihlathak.
|
||||||
|
- Déplace Deckar Cain à coté du portail d'Harrogath.
|
||||||
|
- Modifie les points de départs de UberDiablo, UberBaal and UberMephisto dans Uber Tritram.
|
||||||
|
- UberDiablo, UberBaal and UberMephisto peuvent invoquer des monstres (Nécessite LOD 1.13c ou plus). (Merci à SnapChip)
|
||||||
|
- Update UberDiablo, UberBaal and UberMephisto AI (Nécessite LOD 1.13c or higher). (Merci à SnapChip)
|
||||||
|
- Ajout des seuils pour le joueur et les mercenaires dans les pages de stats 4 et 5.
|
||||||
|
- Par défaut désactive le coffre partagé en multijoueur.
|
||||||
|
- Change la couleur du nom de la page du coffre en fonction du statut d'index.
|
||||||
|
- Augmente la taille maximal des noms de page dans le coffre de 15 à 20 caractères.
|
||||||
|
- Active le nommage automatique des pages.
|
||||||
|
- Cliquer sur le nom d'une page du coffre pour changer son type d'index.
|
||||||
|
- Shift + clic sur le nom d'une page du coffre pour le renommer.
|
||||||
|
- Renomme la commande /swap en /swappage.
|
||||||
|
- Renomme la commande /toggle en /togglepage.
|
||||||
|
- Ajout de la commande /rp comme racourci pour /renamepage.
|
||||||
|
- Ajout de la commande /ip comme racourci pour /insertpage.
|
||||||
|
- Ajout de la commande /dp comme racourci pour /deletepage.
|
||||||
|
- Ajout de la commande /sp comme racourci pour /swappage.
|
||||||
|
- Ajout de la commande /tp comme racourci pour /togglepage.
|
||||||
|
- Le répertoire relatif pour SavePath est maiontyenant le répertoire de sauvegarde de D2 au lieu du répertoire d'installation.
|
||||||
|
- Maintenant le répertoire PlugY doit être dans le même répertoire que PlugY.ini (c'est-à-dire dans le répertoire du mod).
|
||||||
|
- Améliore les temps de chargement de PlugY et de chargement du coffre.
|
||||||
|
- Corrige le nombre minimum de SOJ à vendre pour le World Event.
|
||||||
|
- Corrige le crash de la commande /swappage quand la page cible n'avait pas été créé.
|
||||||
|
- Corrige un crash possible lors de l'allocation du nom d'une page de coffre. (mmerci à SnapChip)
|
||||||
|
- Corrige NBPlayersByDefault quand le coffre multiple est désactivé.
|
||||||
|
- Corrige le crash qaund SkillsUnassignment, StatsUnassignment, NewStatsInterface, BigStash et MultiPageStash était désactivés.
|
||||||
|
- Corrige le fonctionnalité ActiveSkillsUnassignmentOneForOne (option pour les mods).
|
||||||
|
- Corrige un crash dans la version polonaise.
|
||||||
|
- Corrige le message anormal appraissant parfois au démarage d'une partie avezc l'option NBPlayersByDefault.
|
||||||
|
- Correce le problème de compatibilité entre l'option NBPlayersByDefault et le mod D2MultiRes.
|
||||||
|
- Plus de paramètres pour les bouttons du coffre dans PlugY.ini (option pour les mods).
|
||||||
|
- Mise à jour de la traduction chinoise. (Merci à Nagahaku)
|
||||||
|
- Correction de certaines traductions dans différentes langues.
|
||||||
|
|
||||||
Changements apportés par la v12.00:
|
Changements apportés par la v12.00:
|
||||||
- Ajout de la compatibilité avec la version 1.14d de LOD. (merci à haxifix)
|
- Version non officielle ajoutant la compatibilité pour LoD 1.14d
|
||||||
|
|
||||||
Changements apportés par la v11.02:
|
Changements apportés par la v11.02 :
|
||||||
- Ajout de la commande /setmainindex: La page courante devient un index principal.
|
- Ajout de la commande /setmainindex : La page courante devient un index principal.
|
||||||
- Le nombre de joueurs simulé grace à la commande /players est sauvegardé avec le joueur et réactivé lors du chargement d'une partie. NBPlayersByDefault doit être différent de 0 dans PlugY.ini.
|
- Le nombre de joueurs simulé grace à la commande /players est sauvegardé avec le joueur et réactivé lors du chargement d'une partie. NBPlayersByDefault doit être différent de 0 dans PlugY.ini.
|
||||||
|
|
||||||
Changements apportés par la v11.01:
|
Changements apportés par la v11.01 :
|
||||||
- Ajout de la compatibilité avec la version 1.13d de LOD. (merci à L'Autour)
|
- Ajout de la compatibilité avec la version 1.13d de LOD. (merci à L'Autour)
|
||||||
- Ajout de la commande /unlockmouse: Libère le curseur de la souris de la fenêtre.
|
- Ajout de la commande /unlockmouse : Libère le curseur de la souris de la fenêtre.
|
||||||
- Ajout de la commande /unlock: Identique à /unlockmouse.
|
- Ajout de la commande /unlock : Identique à /unlockmouse.
|
||||||
- Ajout de la commande /renamepage name: Renomme la page courante du coffre.
|
- Ajout de la commande /renamepage name : Renomme la page courante du coffre.
|
||||||
- Ajout de la commande /setindex: La page courante devient un index.
|
- Ajout de la commande /setindex : La page courante devient un index.
|
||||||
- Ajout de la commande /resetindex: Retire la page courante des index.
|
- Ajout de la commande /resetindex : Retire la page courante des index.
|
||||||
- Ajout de la commande /insertpage: Insère une nouvelle page après la page courante.
|
- Ajout de la commande /insertpage : Insère une nouvelle page après la page courante.
|
||||||
- Ajout de la commande /deletepage: Supprime la page courante si elle est vide.
|
- Ajout de la commande /deletepage : Supprime la page courante si elle est vide.
|
||||||
- Ajout de la localisation en russe ainsi qu'une traduction Google pour les langue non traduite. (merci à L'Autour)
|
- Ajout de la localisation en russe ainsi qu'une traduction Google pour les langue non traduite. (merci à L'Autour)
|
||||||
- Ajout d'une option dans PlugY.ini pour sélectionner le coffre partagé (au lieu du personnel) lors du chargement d'un persos.
|
- Ajout d'une option dans PlugY.ini pour sélectionner le coffre partagé (au lieu du personnel) lors du chargement d'un persos.
|
||||||
- Renomme la commande /rename en /renamechar.
|
- Renomme la commande /rename en /renamechar.
|
||||||
- Suppression de la commande non terminé: /reload.
|
- Suppression de la commande non terminé : /reload.
|
||||||
|
|
||||||
Changements apportés par la v11.00:
|
Changements apportés par la v11.00 :
|
||||||
- Version non officielle ajoutant le support pour LoD 1.13d
|
- Version non officielle ajoutant la compatibilité pour LoD 1.13d
|
||||||
|
|
||||||
Changements apportés par la v10.01:
|
Changements apportés par la v10.01 :
|
||||||
- Ajout du mode fenêtré.
|
- Ajout du mode fenêtré.
|
||||||
- Peut bloquer le curseur de la souris dans la fenêtre. (mode fenêtré).
|
- Peut bloquer le curseur de la souris dans la fenêtre. (mode fenêtré).
|
||||||
- Peut supprimer les bordure de la fenêtre (mode fenêtré).
|
- Peut supprimer les bordure de la fenêtre (mode fenêtré).
|
||||||
@ -105,42 +149,42 @@ Changements apportés par la v10.01:
|
|||||||
- Ajout de la commande "/toggle page" pour échanger le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé (partagé/personnel).
|
- Ajout de la commande "/toggle page" pour échanger le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé (partagé/personnel).
|
||||||
- Ajout de la commande "/rename newname" pour renommer son personnage. Cette fonctionnalité est en bêta et vous devez quitter la partie pour mettre à jour la page des stats.
|
- Ajout de la commande "/rename newname" pour renommer son personnage. Cette fonctionnalité est en bêta et vous devez quitter la partie pour mettre à jour la page des stats.
|
||||||
|
|
||||||
Changements apportés par la v10.00:
|
Changements apportés par la v10.00 :
|
||||||
- Désactive l'accès à Battle.net par le bouton du menu principal.
|
- Désactive l'accès à Battle.net par le bouton du menu principal.
|
||||||
- PlugY fonctionne aussi la version 1.13c de LOD.
|
- PlugY fonctionne aussi la version 1.13c de LOD.
|
||||||
- Corrige le raccourci dans le menu démarrer.
|
- Corrige le raccourci dans le menu démarrer.
|
||||||
|
|
||||||
Changements apportés par la v9.00:
|
Changements apportés par la v9.00 :
|
||||||
- PlugY fonctionne aussi la version 1.12 de LOD.
|
- PlugY fonctionne aussi la version 1.12 de LOD.
|
||||||
- Corrige différents bugs.
|
- Corrige différents bugs.
|
||||||
- Ajout d'une option pour le déassignement des skill dans les mods.
|
- Ajout d'une option pour le déassignement des skill dans les mods.
|
||||||
|
|
||||||
Changements apportés par la v8.00:
|
Changements apportés par la v8.00 :
|
||||||
- Installation plus aisée: Nouvel installeur.
|
- Installation plus aisée : Nouvel installeur.
|
||||||
- Permet d'ouvrir le portail vers le Cow Level même quand on a tuer le Cow King dans cette difficulté.
|
- Permet d'ouvrir le portail vers le Cow Level même quand on a tuer le Cow King dans cette difficulté.
|
||||||
- Affiche la version courante de LoD avec la lettre de sous-version (1.11b, 1.09d) dans le menu principal.
|
- Affiche la version courante de LoD avec la lettre de sous-version (1.11b, 1.09d) dans le menu principal.
|
||||||
- Ajout de la possibilité de déplacer le boutton de skills comme les boutons du stash. (pour moddeurs)
|
- Ajout de la possibilité de déplacer le boutton de skills comme les boutons du stash. (pour moddeurs)
|
||||||
- Corrige le crash quand le joueur rencontrait un monstre superunique avec LoD 1.11.
|
- Corrige le crash quand le joueur rencontrait un monstre superunique avec LoD 1.11.
|
||||||
- Corrige la perte de points de skills quand on les désassign dans un mod qui contient des skills spéciaux?
|
- Corrige la perte de points de skills quand on les désassign dans un mod qui contient des skills spéciaux?
|
||||||
- Multiplayer: Sauvegarde les fichiers du stash (avec les données du client comme avec les versions d'avant 5.00) quand il y a une déconnection ou une erreur apparait durant la procédure de sauvegarde.
|
- Multiplayer : Sauvegarde les fichiers du stash (avec les données du client comme avec les versions d'avant 5.00) quand il y a une déconnection ou une erreur apparait durant la procédure de sauvegarde.
|
||||||
- Remove the "check load memory failed" message when D2gfx.dll was patched.
|
- Supprime le message "check load memory failed" quand D2gfx.dll a été modifié.
|
||||||
|
|
||||||
Changements apportés par la v7.02:
|
Changements apportés par la v7.02 :
|
||||||
- Corrige la perte de points de skills quand on les désalloue dans les mods contenant des skills spéciaux.
|
- Corrige la perte de points de skills quand on les désalloue dans les mods contenant des skills spéciaux.
|
||||||
|
|
||||||
Changements apportés par la v7.01b:
|
Changements apportés par la v7.01b :
|
||||||
- Corrige l'activation des mots runiques du ladder dans les versions 1.11 and 1.10 de LoD.
|
- Corrige l'activation des mots runiques du ladder dans les versions 1.11 and 1.10 de LoD.
|
||||||
- Corrige les caractères étranges de quelques texts.
|
- Corrige les caractères étranges de quelques texts.
|
||||||
|
|
||||||
Changements apportés par la v7.01:
|
Changements apportés par la v7.01 :
|
||||||
- Active les mots runiques du ladder en dehors des royaumes.
|
- Active les mots runiques du ladder en dehors des royaumes.
|
||||||
- Corrige le bug avec l'IA de Uber Baal.
|
- Corrige le bug avec l'IA de Uber Baal.
|
||||||
- Retire les options de paramètres mis par defaut dans PlugY.ini (comme le mode fenêtré)
|
- Retire les options de paramètres mis par defaut dans PlugY.ini (comme le mode fenêtré)
|
||||||
- Affiche la valeur courante des caracs (sans les bonus magiques) même quand la désallocation des caracs est désactivée.
|
- Affiche la valeur courante des caracs (sans les bonus magiques) même quand la désallocation des caracs est désactivée.
|
||||||
- Ajout d'un exécutable pour lancer Plugy (plus aucun fichier de LoD modifié). (RAPPEL)
|
- Ajout d'un exécutable pour lancer Plugy (plus aucun fichier de LoD modifié). (RAPPEL)
|
||||||
- Traduction en espagnol et polonais.
|
- Traduction en espagnol et polonais.
|
||||||
|
|
||||||
Changements apportés par la v7.00:
|
Changements apportés par la v7.00 :
|
||||||
- PlugY fonctionne aussi la version 1.11b de LOD.
|
- PlugY fonctionne aussi la version 1.11b de LOD.
|
||||||
- Ajout d'un exécutable pour lancer Plugy (plus aucun fichier de LoD modifié).
|
- Ajout d'un exécutable pour lancer Plugy (plus aucun fichier de LoD modifié).
|
||||||
- Ajout des valeurs de base des caracs sur les bouttons d'allocations.
|
- Ajout des valeurs de base des caracs sur les bouttons d'allocations.
|
||||||
@ -148,60 +192,60 @@ Changements apportés par la v7.00:
|
|||||||
- Corrige les fonctions qui restais active sur Battle.net.
|
- Corrige les fonctions qui restais active sur Battle.net.
|
||||||
- Traduction en italien.
|
- Traduction en italien.
|
||||||
|
|
||||||
Changements apportés par la v6.01b:
|
Changements apportés par la v6.01b :
|
||||||
- Correction d'un bug avec l'affichage du popup sur les bouttons d'assignement des points de stats.
|
- Correction d'un bug avec l'affichage du popup sur les bouttons d'assignement des points de stats.
|
||||||
|
|
||||||
Changements apportés par la v6.01:
|
Changements apportés par la v6.01 :
|
||||||
- Corrige le bug qui cause la disparition des items "carry1" du stash quand ils sont cubbés dans LoD 1.10
|
- Corrige le bug qui cause la disparition des items "carry1" du stash quand ils sont cubbés dans LoD 1.10
|
||||||
- Clés et organes des uber ne sont plus détruit quant on essaie d'ouvrir le portail en dehors d'Harrogath.
|
- Clés et organes des uber ne sont plus détruit quant on essaie d'ouvrir le portail en dehors d'Harrogath.
|
||||||
- Corrige le conflit avec D2Mod pour l'affichage de la version.
|
- Corrige le conflit avec D2Mod pour l'affichage de la version.
|
||||||
|
|
||||||
Changements apportés par la v6.00:
|
Changements apportés par la v6.00 :
|
||||||
- PlugY fonctionne aussi la version 1.11 de LOD.
|
- PlugY fonctionne aussi la version 1.11 de LOD.
|
||||||
- Active la Uber Quest hors des Royaumes. (uniquement LoD 1.11).
|
- Active la Uber Quest hors des Royaumes. (uniquement LoD 1.11).
|
||||||
- Corrige le crash au lancement de PlugY si l'installation de LoD n'est pas clean.
|
- Corrige le crash au lancement de PlugY si l'installation de LoD n'est pas clean.
|
||||||
- Corrige quelques bugs mineurs et ajoute des améliorations mineurs.
|
- Corrige quelques bugs mineurs et ajoute des améliorations mineurs.
|
||||||
- Ajoute la commande "/save" pour sauvegarder la partie sans quitter (uniquement LoD 1.11).
|
- Ajoute la commande "/save" pour sauvegarder la partie sans quitter (uniquement LoD 1.11).
|
||||||
|
|
||||||
Changements apportés par la v5.06:
|
Changements apportés par la v5.06 :
|
||||||
- Ajoute des bouttons pour le partage de l'or.
|
- Ajoute des bouttons pour le partage de l'or.
|
||||||
- Active l'or partagé en multijoueur.
|
- Active l'or partagé en multijoueur.
|
||||||
- La commande "/DisplayLifeMana" est remplacée par "/dlm".
|
- La commande "/DisplayLifeMana" est remplacée par "/dlm".
|
||||||
- Corrige quelques bugs.
|
- Corrige quelques bugs.
|
||||||
|
|
||||||
Changements apportés par la v5.05:
|
Changements apportés par la v5.05 :
|
||||||
- Corrige les couleurs par défauts dans l'interface des stats.
|
- Corrige les couleurs par défauts dans l'interface des stats.
|
||||||
- Ajoute de l'or partagée via des commandes.
|
- Ajoute de l'or partagée via des commandes.
|
||||||
- La commande "/DisplayLifeAndMana" deviens "/DisplayLifeMana".
|
- La commande "/DisplayLifeAndMana" deviens "/DisplayLifeMana".
|
||||||
- Possiblité d'afficher ou non les nom des objets de set dans le popup quand ceux-ci sont dans le coffre partagée.
|
- Possiblité d'afficher ou non les nom des objets de set dans le popup quand ceux-ci sont dans le coffre partagée.
|
||||||
- Correction des bugs du multiplayer (réécriture de ces fonctions).
|
- Correction des bugs du multiplayer (réécriture de ces fonctions).
|
||||||
|
|
||||||
Changements apportés par la v5.04:
|
Changements apportés par la v5.04 :
|
||||||
- Corrige Stat/Skill points par levelup
|
- Corrige Stat/Skill points par levelup
|
||||||
- Corrige des bugs en Multiplayer.
|
- Corrige des bugs en Multiplayer.
|
||||||
- PlugY/PlugYDefault.ini completé.
|
- PlugY/PlugYDefault.ini completé.
|
||||||
|
|
||||||
Changements apportés par la v5.03:
|
Changements apportés par la v5.03 :
|
||||||
- Corrige le bug qui échange quelques fois les coffres partagés Hardcore et Softcore.
|
- Corrige le bug qui échange quelques fois les coffres partagés Hardcore et Softcore.
|
||||||
- Ajoute de la couleur sur les nouvelles pages de stats.
|
- Ajoute de la couleur sur les nouvelles pages de stats.
|
||||||
- Change les valeurs par défaut des nouvelles pages de stats.
|
- Change les valeurs par défaut des nouvelles pages de stats.
|
||||||
- Mets EnabledTXTFilesWhenMSExcelOpenIt=1 dans le fichier PlugY.ini.
|
- Mets EnabledTXTFilesWhenMSExcelOpenIt=1 dans le fichier PlugY.ini.
|
||||||
|
|
||||||
Changements apportés par la v5.02:
|
Changements apportés par la v5.02 :
|
||||||
- Corrige la correction d'un bug précédent qui engendre la disparition d'objets.
|
- Corrige la correction d'un bug précédent qui engendre la disparition d'objets.
|
||||||
|
|
||||||
Changements apportés par la v5.01:
|
Changements apportés par la v5.01 :
|
||||||
- Corrige les bugs importants dans la gestion du stash.
|
- Corrige les bugs importants dans la gestion du stash.
|
||||||
- Remets ActiveLogFile=0 par défaut dans le fichier PlugY.ini.
|
- Remets ActiveLogFile=0 par défaut dans le fichier PlugY.ini.
|
||||||
- Corrige: Bug quand le stash partagé est désactivé.
|
- Corrige : Bug quand le stash partagé est désactivé.
|
||||||
|
|
||||||
Changements apportés par la v5.00:
|
Changements apportés par la v5.00 :
|
||||||
- PlugY fonctionne sur les mods des versions 1.09, 1.09b, 1.09d et 1.10 de LOD.
|
- PlugY fonctionne sur les mods des versions 1.09, 1.09b, 1.09d et 1.10 de LOD.
|
||||||
- PlugY peut lancer D2Mod.dll.
|
- PlugY peut lancer D2Mod.dll.
|
||||||
- D2 peut ouvrir tous les fichiers même quand ils sont déjà ouverts dans Microsoft Excel.
|
- D2 peut ouvrir tous les fichiers même quand ils sont déjà ouverts dans Microsoft Excel.
|
||||||
- Le monstre du World Event peut être changé.
|
- Le monstre du World Event peut être changé.
|
||||||
- Plusieurs trucs pour les moddeurs.
|
- Plusieurs trucs pour les moddeurs.
|
||||||
- Importante Correction en Multijoueur: fingerprints à 0, objets non identifié buggé, etc.
|
- Importante Correction en Multijoueur : fingerprints à 0, objets non identifié buggé, etc.
|
||||||
- Correction d'une erreur de syntaxe dans PlugY.ini (Commands).
|
- Correction d'une erreur de syntaxe dans PlugY.ini (Commands).
|
||||||
- Les commandes ne sont plus dépendantes de la casse des caractères.
|
- Les commandes ne sont plus dépendantes de la casse des caractères.
|
||||||
- Corrige le bug dans la sélection automatique de la principale page de stats.
|
- Corrige le bug dans la sélection automatique de la principale page de stats.
|
||||||
@ -209,13 +253,13 @@ Changements apportés par la v5.00:
|
|||||||
- Corrige la génération de DiabloClone au démarrage d'une nouvelle partie.
|
- Corrige la génération de DiabloClone au démarrage d'une nouvelle partie.
|
||||||
- Corrige plusieurs autres bugs.
|
- Corrige plusieurs autres bugs.
|
||||||
|
|
||||||
Changements apportés par la v4.04:
|
Changements apportés par la v4.04 :
|
||||||
- Corrige le bug d'affichage quand statPerLevelUp est activé
|
- Corrige le bug d'affichage quand statPerLevelUp est activé
|
||||||
- Corrige le bug de sauvegarde quand le disque dur est plein.
|
- Corrige le bug de sauvegarde quand le disque dur est plein.
|
||||||
- Nouveau système de configuration pour les moddeurs.
|
- Nouveau système de configuration pour les moddeurs.
|
||||||
- Affiche toujours les valeurs numériques de mana et de vie au-dessus des globes correspondants.
|
- Affiche toujours les valeurs numériques de mana et de vie au-dessus des globes correspondants.
|
||||||
|
|
||||||
Changements apportés par la v4.03:
|
Changements apportés par la v4.03 :
|
||||||
- Corrige le bug des objets uniques carry1 (charme unique) quand on drop le cube.
|
- Corrige le bug des objets uniques carry1 (charme unique) quand on drop le cube.
|
||||||
- Possibilité d'aller directement à la première ou dernière page du coffre (shift + clic sur précédent/suivant).
|
- Possibilité d'aller directement à la première ou dernière page du coffre (shift + clic sur précédent/suivant).
|
||||||
- Utilisation d'un second index dans le coffre (shift + clic sur boutons d'index)
|
- Utilisation d'un second index dans le coffre (shift + clic sur boutons d'index)
|
||||||
@ -224,24 +268,24 @@ Changements apportés par la v4.03:
|
|||||||
- Déplace les boutons des pages de stats supplémentaire aux même emplacements que ceux de la page principale (uniquement en 800x600).
|
- Déplace les boutons des pages de stats supplémentaire aux même emplacements que ceux de la page principale (uniquement en 800x600).
|
||||||
- Possibilité de choisir si la page affichée quand on ouvre la page des stats est la page principale ou celle sélectionnée précédemment
|
- Possibilité de choisir si la page affichée quand on ouvre la page des stats est la page principale ou celle sélectionnée précédemment
|
||||||
|
|
||||||
Changements apportés par la v4.02b:
|
Changements apportés par la v4.02b :
|
||||||
- Les fonctionnalités restent activées sur Battle.net ouvert.
|
- Les fonctionnalités restent activées sur Battle.net ouvert.
|
||||||
|
|
||||||
Changements apportés par la v4.02:
|
Changements apportés par la v4.02 :
|
||||||
- Corrige le conflit avec Battle.net (BigStash désactivé sur les royaumes)
|
- Corrige le conflit avec Battle.net (BigStash désactivé sur les royaumes)
|
||||||
- Corrige l'oublie du "d" de "SeparateHardcoreStash=1" de PlugY.ini
|
- Corrige l'oublie du "d" de "SeparateHardcoreStash=1" de PlugY.ini
|
||||||
- Corrige la valeur par défaut dans PlugY.ini, du changement de langage.
|
- Corrige la valeur par défaut dans PlugY.ini, du changement de langage.
|
||||||
- Corrige l'activation de l'affichage de l'item level pour toutes les configurations de PlugY.
|
- Corrige l'activation de l'affichage de l'item level pour toutes les configurations de PlugY.
|
||||||
- Ajouts d'infos sur la 2ème page de stats.
|
- Ajouts d'infos sur la 2ème page de stats.
|
||||||
|
|
||||||
Changements apportés par la v4.01:
|
Changements apportés par la v4.01 :
|
||||||
- Corrige le bug du MSVCR70.dll non trouvé.
|
- Corrige le bug du MSVCR70.dll non trouvé.
|
||||||
- Ajouts d'infos sur la 2ème page de stats.
|
- Ajouts d'infos sur la 2ème page de stats.
|
||||||
|
|
||||||
Changements apportés par la v4.00b:
|
Changements apportés par la v4.00b :
|
||||||
- Corrige le bug du MSVCR70.dll non trouvé.
|
- Corrige le bug du MSVCR70.dll non trouvé.
|
||||||
|
|
||||||
Changements apportés par la v4.00:
|
Changements apportés par la v4.00 :
|
||||||
- Meilleure optimisation du code.
|
- Meilleure optimisation du code.
|
||||||
- Ajoute des pages supplémentaires pour l'affichage de plus de statistiques du perso comme le %MF.
|
- Ajoute des pages supplémentaires pour l'affichage de plus de statistiques du perso comme le %MF.
|
||||||
- Change la langue du jeu (et pour les modders: les langues accessibles et la langue par défaut).
|
- Change la langue du jeu (et pour les modders: les langues accessibles et la langue par défaut).
|
||||||
@ -252,34 +296,34 @@ Changements apportés par la v4.00:
|
|||||||
- Change la méthode d'installation (peut être installé directement sur linux maintenant)
|
- Change la méthode d'installation (peut être installé directement sur linux maintenant)
|
||||||
- Les objets qui déclenche le WorldEvent peut-être changé.
|
- Les objets qui déclenche le WorldEvent peut-être changé.
|
||||||
- Plusieurs objets "carry1" (comme l'Annihilus) peuvent être mis dans le coffre.
|
- Plusieurs objets "carry1" (comme l'Annihilus) peuvent être mis dans le coffre.
|
||||||
- Corrige: Impossibilité de mettre plusieurs même objets "carry1" dans d'autre page que le coffre.
|
- Corrige : Impossibilité de mettre plusieurs même objets "carry1" dans d'autre page que le coffre.
|
||||||
- Corrige: Le bug d'affiche des objets sertis dans le coffre.
|
- Corrige : Le bug d'affiche des objets sertis dans le coffre.
|
||||||
- Corrige: Le bug des espaces dans PlugY.ini.
|
- Corrige : Le bug des espaces dans PlugY.ini.
|
||||||
- Corrige: Diablo Clone ne peut pas apparaître en mode normal et cauchemar.
|
- Corrige : Diablo Clone ne peut pas apparaître en mode normal et cauchemar.
|
||||||
- Corrige: Détruit les minions(par exemple les squelettes) en trop près la désallocation si on a un bonus +x dans cette skill.
|
- Corrige : Détruit les minions(par exemple les squelettes) en trop près la désallocation si on a un bonus +x dans cette skill.
|
||||||
|
|
||||||
Changements apportés par la v3.02:
|
Changements apportés par la v3.02 :
|
||||||
- Corrige: le changement du nombre de points de Stats reçus à chaque gain de niveau.
|
- Corrige : le changement du nombre de points de Stats reçus à chaque gain de niveau.
|
||||||
- Corrige: Quand le coffre partagé est désactivé vous pouvez charger vos persos.
|
- Corrige : Quand le coffre partagé est désactivé vous pouvez charger vos persos.
|
||||||
- Corrige: Vous pouvez changer les paramètres du World Event sans activer les skill reçus à chaque gain de niveau.
|
- Corrige : Vous pouvez changer les paramètres du World Event sans activer les skill reçus à chaque gain de niveau.
|
||||||
|
|
||||||
Changements apportés par la v3.01:
|
Changements apportés par la v3.01 :
|
||||||
- Change le nombre de points de Stats reçus à chaque gain de niveau.
|
- Change le nombre de points de Stats reçus à chaque gain de niveau.
|
||||||
- Corrige les bugs qui donnent des points supplémentaires quand on désallouent les skills.
|
- Corrige les bugs qui donnent des points supplémentaires quand on désallouent les skills.
|
||||||
- Ajoutent les paramètres du WorldEvent dans le fichier de configuration.
|
- Ajoutent les paramètres du WorldEvent dans le fichier de configuration.
|
||||||
- Par défaut, Le WorldEvent AFFICHE "X SOJ vendu" uniquement dans la difficulté enfer.
|
- Par défaut, Le WorldEvent AFFICHE "X SOJ vendu" uniquement dans la difficulté enfer.
|
||||||
|
|
||||||
Changements apportés par la v3.00:
|
Changements apportés par la v3.00 :
|
||||||
- World Event en Local pour le monojoueur et le multijoueur hors royaumes!
|
- World Event en Local pour le monojoueur et le multijoueur hors royaumes !
|
||||||
- Désalloue les points de capacités(skills) précédemment allouées.
|
- Désalloue les points de capacités(skills) précédemment allouées.
|
||||||
- Nouvelle image de fond pour le coffre.
|
- Nouvelle image de fond pour le coffre.
|
||||||
- On peut changer le nom du fichier de sauvegarde.
|
- On peut changer le nom du fichier de sauvegarde.
|
||||||
- L'affichage du numero de page pour le coffre partagé est en rouge maintenant.
|
- L'affichage du numero de page pour le coffre partagé est en rouge maintenant.
|
||||||
|
|
||||||
Changements apportés par la v2.05:
|
Changements apportés par la v2.05 :
|
||||||
- Correction importante: Le bug qui faisais que D2 ne démarrais est définitivement corrigé.
|
- Correction importante : Le bug qui faisais que D2 ne démarrais est définitivement corrigé.
|
||||||
|
|
||||||
Changements apportés par la v2.04:
|
Changements apportés par la v2.04 :
|
||||||
- La désallocation des points de stats, les points de skills gagnés à chaque niveau
|
- La désallocation des points de stats, les points de skills gagnés à chaque niveau
|
||||||
sont quand on se connecte à un royaume automatiquement désactivés (comme le stash).
|
sont quand on se connecte à un royaume automatiquement désactivés (comme le stash).
|
||||||
- Ouvre un message d'erreur quand PlugY.dll n'est pas trouvé.
|
- Ouvre un message d'erreur quand PlugY.dll n'est pas trouvé.
|
||||||
@ -287,11 +331,11 @@ Changements apportés par la v2.04:
|
|||||||
- Corrige le bug d'affichage des boutons.
|
- Corrige le bug d'affichage des boutons.
|
||||||
- Corrige la sauvegarde sous win95/98/Me.
|
- Corrige la sauvegarde sous win95/98/Me.
|
||||||
|
|
||||||
Changements apportés par la v2.03b:
|
Changements apportés par la v2.03b :
|
||||||
- Affiche la version de PlugY uniquement à l'écran principal.
|
- Affiche la version de PlugY uniquement à l'écran principal.
|
||||||
|
|
||||||
Changements apportés par la v2.03:
|
Changements apportés par la v2.03 :
|
||||||
- Correction importante: Les fonctions de sauvegardes sont plus sécurisées et débuggées.
|
- Correction importante : Les fonctions de sauvegardes sont plus sécurisées et débuggées.
|
||||||
- Le serveur ne plante plus quand un personnage refusé tente de joindre la partie.
|
- Le serveur ne plante plus quand un personnage refusé tente de joindre la partie.
|
||||||
- Les boutons de désallocation ne deviennent plus gris quand les points de stats de base dépassent 255.
|
- Les boutons de désallocation ne deviennent plus gris quand les points de stats de base dépassent 255.
|
||||||
- Change l'affichage des versions sur le menu principal (changement des couleurs + la version de PlugY à droite).
|
- Change l'affichage des versions sur le menu principal (changement des couleurs + la version de PlugY à droite).
|
||||||
@ -299,10 +343,11 @@ Changements apportés par la v2.03:
|
|||||||
|
|
||||||
|
|
||||||
******** CONTENU ********
|
******** CONTENU ********
|
||||||
19 fichiers, 1 répertoire:
|
20 fichiers, 1 répertoire :
|
||||||
- PlugY_The_Survival_Kit_-_Readme.txt
|
- PlugY_The_Survival_Kit_-_Readme.txt
|
||||||
- PlugY_The_Survival_Kit_-_LisezMoi.txt
|
- PlugY_The_Survival_Kit_-_LisezMoi.txt
|
||||||
- PlugY_The_Survival_Kit_-_Liesmich.txt
|
- PlugY_The_Survival_Kit_-_Liesmich.txt
|
||||||
|
- PlugY_The_Survival_Kit_-_讀我檔案.txt
|
||||||
- PlugY.exe
|
- PlugY.exe
|
||||||
- PlugY.dll (in Diablo II directory)
|
- PlugY.dll (in Diablo II directory)
|
||||||
- PlugY.ini
|
- PlugY.ini
|
||||||
@ -317,31 +362,28 @@ Changements apportés par la v2.03:
|
|||||||
- PlugY\UnassignSkillsBtns.dc6
|
- PlugY\UnassignSkillsBtns.dc6
|
||||||
- PlugY\UnassignStatsBtns.dc6
|
- PlugY\UnassignStatsBtns.dc6
|
||||||
- PlugY\statsinterface.txt
|
- PlugY\statsinterface.txt
|
||||||
- PlugY Uninstaller.exe (avec l'option dé-installeur)
|
- PatchD2File.exe (dans le répertoire de Diablo II avec l'option PatchFile)
|
||||||
- PatchD2gfxDll.exe (dans le répertoire de Diablo II avec l'option Patcheur D2gfxDll)
|
- RestoreD2File.exe (dans le répertoire de Diablo II avec l'option PatchFile)
|
||||||
- RestoreD2gfxDll.exe (dans le répertoire de Diablo II avec l'option Patcheur D2gfxDll)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
******** INSTALLATION ********
|
******** INSTALLATION ********
|
||||||
Installation normale:
|
Installation normale :
|
||||||
- Suivre les directives de l'installeur.
|
- Suivre les directives de l'installeur.
|
||||||
|
|
||||||
note: Vous pouvez choisir le répertoire de "Diablo II" comme répertoire d'installation.
|
note : Vous pouvez choisir le répertoire de "Diablo II" comme répertoire d'installation.
|
||||||
|
|
||||||
Installation dans un autre mod
|
Installation dans un autre mod
|
||||||
- Copier PlugY.ini, PlugY.exe et PlugY folder (+son sontenu) dans le répertoire du mod ciblé.
|
- Copier PlugY.ini, PlugY.exe et le répertoire PlugY\ (+son sontenu) dans le répertoire du mod ciblé.
|
||||||
- Editer PlugY.ini pour configurer les options (voir section plus bas).
|
- Editer PlugY.ini pour configurer les options (voir section plus bas).
|
||||||
- Lancer le jeu PlugY.exe et amusez-vous:)
|
- Lancer le jeu PlugY.exe.
|
||||||
|
|
||||||
note: Vous pouvez déplacer le répertoire "PlugY" dans celui de "Diablo II" et il sera vu par toutes les installation.
|
|
||||||
|
|
||||||
|
|
||||||
Exemple:
|
Exemple :
|
||||||
Si vous avez installé Lord of Destruction ici: C:\Jeux\Diablo II\Diablo II.exe
|
Si vous avez installé Lord of Destruction dans : C:\Jeux\Diablo II\
|
||||||
Et que le mod ciblé se trouve dans: D:\D2Mod\MyMod\
|
Et que le mod ciblé se trouve dans : D:\D2Mod\MyMod\
|
||||||
Et qu'un second mod se trouve dans: D:\D2Mod\MyMod2\
|
Et qu'un second mod se trouve dans : D:\D2Mod\MyMod2\
|
||||||
Alors la configuration classique est ceci:
|
Alors la nouvelle configuration est :
|
||||||
C:\Jeux\Diablo II\PlugY.dll
|
C:\Jeux\Diablo II\PlugY.dll
|
||||||
D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6
|
D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6
|
||||||
D:\D2Mod\MyMod\PlugY\PlugYFixed.ini
|
D:\D2Mod\MyMod\PlugY\PlugYFixed.ini
|
||||||
@ -373,95 +415,62 @@ Alors la configuration classique est ceci:
|
|||||||
D:\D2Mod\MyMod2\PlugY.exe
|
D:\D2Mod\MyMod2\PlugY.exe
|
||||||
|
|
||||||
|
|
||||||
Désinstallation: Run uninstaller ou si vous n'avez pas activé cette options, supprimer semplement tous les fichiers de PlugY.
|
Désinstallation : Exécuter le désinstalleur ou supprimer simplement tous les fichiers de PlugY.
|
||||||
NOTE: Vous pouvez aussi déplacer PlugY.dll dans le répertoire du mod mais vous devez le supprimer du répertoire de D2.
|
Note : Vous pouvez aussi déplacer PlugY.dll dans le répertoire du mod mais vous devez le supprimer du répertoire de D2.
|
||||||
Note: Le répertoire "PlugY" et son contenu peut être placé dans un mpq.
|
Note : Le répertoire "PlugY" et son contenu peut être placé dans un mpq.
|
||||||
|
|
||||||
------- D2gfx Patcher:
|
------- D2File Patcher
|
||||||
|
|
||||||
If you have problem when you run PlugY.exe then use PatchD2gfxDll.exe. (It happend sometimes with Windows 2000)
|
|
||||||
- Go in Diablo II directory.
|
|
||||||
- Do a backup of D2gfx.dll (in the case, you remove PlugY before restore it)
|
|
||||||
- Run PatchD2gfxDll.exe (which patches D2gfx.dll for launch PlugY, you can backup this file before)
|
|
||||||
- Create a shortcut: Enter target mod directory in "start in" field of properties->shortcut. (unless you install PlugY in Diablo II directory)
|
|
||||||
- Launch with the shorcut!
|
|
||||||
|
|
||||||
Before uninstall PlugY Restore your D2gfx.dll with your backup file or run RestoreD2gfxDll.exe.
|
|
||||||
|
|
||||||
|
|
||||||
Si vous avez des problème pour éxécuter PlugY.exe alors utiliser PatchD2gfxDll.exe. (Ca arrive quelque fois avec Windows 2000)
|
|
||||||
- Aller dans le répertoire de Diablo II.
|
|
||||||
- Faîtes un une sauvegarde du fichier D2gfx.dll (dans le cas, où vous supprimiez PlugY avant de le restaurer).
|
|
||||||
- Lancer PatchD2gfxDll.exe (qui patchera D2gfx.dll pour lancer PlugY)
|
|
||||||
- Créer un raccourci de Diablo II.exe, entrer le répertoire du mod voulu dans "démarrer dans" de propriété->raccourci. (sauf si vous avez installé PlugY dans le répertoire de Diablo II)
|
|
||||||
- Lancer Diablo II!
|
|
||||||
|
|
||||||
|
Si vous avez des problème pour éxécuter PlugY.exe alors utiliser PatchD2File.exe. (Ca arrive quelque fois avec Windows 2000)
|
||||||
|
- Sauvegarder D2gfx.dll ou game.exe.
|
||||||
|
- Exécuter PatchD2File.exe qui modifie D2gfx.dll ou game.exe.
|
||||||
|
- Créer un raccourci de Diablo II.exe, entrer le répertoire du mod voulu dans "démarrer dans" de propriété->raccourci.
|
||||||
|
- Lancer le jeu avec le raccourci !
|
||||||
|
|
||||||
|
|
||||||
******************** FAQ ******************
|
******************** FAQ ******************
|
||||||
|
|
||||||
=> Je ne troue pas le fichier PlugY.ini, où est-il ?
|
=> Je ne trouve pas le fichier PlugY.ini, où est-il ?
|
||||||
De kingpin (traduit de l'anglais):
|
Dans l'explorateur Windows, aller dans outils->Options des dossiers->affichage.
|
||||||
Microsoft a dans Windows caché les extensions des fichiers connu. Ceci pour être
|
Cocher "Afficher les fichiers et répertoires cachés"
|
||||||
sûr que les nouveaux utilisateurs ne supprime pas ces fichiers par accidents. Vous
|
Décocher "Masquer les extensions des fichiers dont le type est connu".
|
||||||
pouvez bien sûr le désactiver en ouvrant votre l'explorateur Windows, aller dans
|
Le fichier PlugY.ini devrait être visible.
|
||||||
outils->Options des dossiers->affichage, Décocher "Masquer les extensions des
|
|
||||||
fichiers dont le type est connu". Alors, vous verrez le fichier sûrement le fichier ini.
|
|
||||||
|
|
||||||
|
|
||||||
=> Comment jouer sur Battle.net avec PlugY installé ?
|
=> Comment jouer sur Battle.net avec PlugY installé ?
|
||||||
PlugY automatiquement désactive tous quand on va en fermé.
|
PlugY ne permet pas d'aller sur Battle.net.
|
||||||
Mais il est recommandé de toujours retirer tous les programmes tiers quand on a va sur les royaumes.
|
|
||||||
Note: Quand bigStash est activé, vous devez redémarrer D2 pour jouer en solo/multi/ouvert après avoir jouer en fermé (et vice versa).
|
|
||||||
Astuce: Créer un raccourci et ajouter -skiptobnet à la fin du champ "cible" pour aller directement sur Battle.net.
|
|
||||||
|
|
||||||
|
|
||||||
=> Que faire si j'ai une erreur comme "Bad Generic File" au chargement d'un nouveau joueur ?
|
=> Que faire si j'ai une erreur comme "Bad Generic File" au chargement d'un nouveau joueur ?
|
||||||
Ceci peut apparaître quand vous avez de mauvais objets dans le fichier du coffre partagé.
|
Ceci peut apparaître quand vous avez de mauvais objets dans le fichier du coffre partagé.
|
||||||
Une cause possible est l'utilisation du même répertoire de sauvegarde pour des mods différents,
|
Une cause possible est l'utilisation du même répertoire de sauvegarde pour des mods différents.
|
||||||
il suffit alors de changer ce répertoire dans PlugY.ini.
|
Si c'est le cas, il suffit de changer ce répertoire dans PlugY.ini.
|
||||||
|
Vous pouvez aussi déplacer _LOD_SharedStashSave.sss et _LOD_HC_SharedStashSave.sss dans un autre répertoire.
|
||||||
|
|
||||||
=> Je vois "sUnitItemInsertItemInvGridBase failed at 1046 in C:\projects\D2\head\Diablo2\Source\D2Client\UNIT\Item.cpp" dans D2YYMMDD.txt, que dois-je faire ?
|
|
||||||
Ceci est juste un avertissement sans conséquence sur le jeu, ne vous inquiéter pas.
|
|
||||||
|
|
||||||
|
|
||||||
=> J'ai un autre bug, que dois-je faire ?
|
|
||||||
1) Aller sur les forums de Phrozen-keep et Judgehype et lire les forums.
|
|
||||||
|
|
||||||
2) Faîtes des recherche sur google, demander à des amis, etc. mais ne me demander pas, je n'ai plus le temps pour faire le support de PlugY.
|
|
||||||
Si un jour, j'ai assez de temps, (comme pour la version 8.00) je lirai les forums pour connaitre les problèmes les plus communs.
|
|
||||||
|
|
||||||
|
=> IL y a "sUnitItemInsertItemInvGridBase failed at 1046 in C:\projects\D2\head\Diablo2\Source\D2Client\UNIT\Item.cpp" dans D2YYMMDD.txt, que dois-je faire ?
|
||||||
|
Ceci est juste un avertissement sans conséquence sur le jeu.
|
||||||
|
|
||||||
|
|
||||||
******** CONFIGURATION ********
|
******** CONFIGURATION ********
|
||||||
|
|
||||||
Configuration pour un mod précis:
|
Configuration pour un mod précis :
|
||||||
- Copier PlugY.ini dans le répertoire du mod choisi (le répertoire d'où vous le lancez le mod, voir dans propriétés du raccourci).
|
- Copier PlugY.ini, PlugY.exe et le répertoire PlugY dans le répertoire du mod choisi.
|
||||||
- Dans la plupart dans cas changer le répertoire de sauvegarde.
|
- Modifier le répertoire de sauvegarde dans plugY.ini.
|
||||||
- Ajouter toutes les dll supplémentaires dans PlugY.ini si besoin est.
|
|
||||||
- Finalement activer ou désactiver les options que vous souhaitez comme MultiPageStash, SharedStash, etc.
|
|
||||||
- Maintenant vous pouvez lancez le mod de manière classique.
|
|
||||||
|
|
||||||
D2Mod configuration:
|
D2Mod configuration :
|
||||||
Ajouter simplement le nom de la dll dans PlugY.ini, par exemple: "DllToLoad=D2Mod.dll"
|
Ajouter simplement le nom de la dll dans PlugY.ini, par exemple : "DllToLoad=D2Mod.dll"
|
||||||
|
|
||||||
Notes:
|
Attention :
|
||||||
- Les objets dans le Cube sont toujours sauvegardés dans le personnage, si vous voulez les partager vous devez les retirer du cube.
|
- Les objets dans le Cube sont toujours sauvegardés dans le personnage, si vous voulez les partager vous devez les retirer du cube.
|
||||||
|
- Faite attention à la compatibilité si vous modifiez la configuration entre 2 parties.
|
||||||
Attention:
|
- Dans des parties Multijoueurs, vérifier que tout le monde à la même configuration dans PlugY.ini.
|
||||||
- Ne pas éditer le fichier de configuration après avoir utilisé le mod.
|
|
||||||
- Dans des parties Multiplayers, vérifier qu'il y a la même configuration sur le serveur et les clients.
|
|
||||||
- Rappel: PlugY ne fonctionne pas sur les royaumes.
|
|
||||||
|
|
||||||
|
|
||||||
Lire le readme pour les moddeurs.
|
Lire le fichier readme.txt pour plus d'information sur le modding.
|
||||||
|
|
||||||
|
|
||||||
******** COMMENTAIRES SUR LE FICHIER DE CONFIGURATION ********
|
******** COMMENTAIRES SUR LE FICHIER DE CONFIGURATION ********
|
||||||
|
|
||||||
Toutes les valeurs par Défaut signifie que si on supprime cette ligne, PlugY utilise cette valeur.
|
La configuration dans PlugY.ini n'est pas la configuration par défaut.
|
||||||
Les valeurs dans PlugY.ini (inclus dans le zip) est un exemple de configuration, pas les valeurs par défaut.
|
|
||||||
|
|
||||||
[LAUNCHING]
|
[LAUNCHING]
|
||||||
Cette section contient les informations de PlugY.exe et ne fonctionne pas dans les fichiers PlugYDefault.ini et PlugYFixed.ini.
|
Cette section contient les informations de PlugY.exe et ne fonctionne pas dans les fichiers PlugYDefault.ini et PlugYFixed.ini.
|
||||||
@ -469,70 +478,77 @@ Cette section contient les informations de PlugY.exe et ne fonctionne pas dans l
|
|||||||
Ajoute les paramètres transmis à LoD par sa ligne de commande.
|
Ajoute les paramètres transmis à LoD par sa ligne de commande.
|
||||||
Les paramètres passé à PlugY.exe sont aussi transmis à LoD par sa ligne de commande.
|
Les paramètres passé à PlugY.exe sont aussi transmis à LoD par sa ligne de commande.
|
||||||
Par défaut aucun paramèters ne sont transmis.
|
Par défaut aucun paramèters ne sont transmis.
|
||||||
Les paramètres les plus courant sont (sans les guillemets):
|
Les paramètres les plus courant sont (sans les guillemets) :
|
||||||
"-w" lance la LoD en version fenêtrée. (Voir la section WINDOWED à la place)
|
"-w" lance la LoD en version fenêtrée. (Voir la section WINDOWED à la place)
|
||||||
"-direct" utilise les fichiers du répertoire à la place des mpq.
|
"-direct" utilise les fichiers du répertoire à la place des mpq.
|
||||||
"-txt" recompile les fichiers .txt avant d'antrée dans une partie.
|
"-txt" recompile les fichiers .txt avant d'antrée dans une partie.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
Param= {-direct -txt -w: Ces 3 commandes sont passés à LoD par la ligne de commande}
|
Param= {-direct -txt -w: Ces 3 commandes sont passés à LoD par la ligne de commande}
|
||||||
|
|
||||||
|
|
||||||
Sélectionne la dll à charger.
|
Sélectionne la dll à charger.
|
||||||
Le répertoire courant est celui utilisé par D2 (comme modifier le champ "démarrer dans" d'un raccourci).
|
Le répertoire courant est celui utilisé par D2 (comme modifier le champ "démarrer dans" d'un raccourci).
|
||||||
Si auncune dll n'est spécifié, LoD est chargé sans PlugY.
|
Si auncune dll n'est spécifié, LoD est chargé sans PlugY.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
Library= {PlugY.dll: Charger PlugY.dll}
|
Library= {PlugY.dll: Charger PlugY.dll}
|
||||||
|
|
||||||
|
|
||||||
[GENERAL]
|
[GENERAL]
|
||||||
Active ou désactive PlugY
|
Active ou désactive PlugY
|
||||||
Les dll des champs "DllToLoad" ne sont plus chargés quand ActivePlugin=0.
|
Les dll des champs "DllToLoad" ne sont plus chargés quand ActivePlugin=0.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActivePlugin=0 {0:Charge aucunes fonctions; 1:Plugin activé}
|
- ActivePlugin=0 {0:Charge aucunes fonctions; 1:Plugin activé}
|
||||||
|
|
||||||
Active ou désactive l'accès à BattleNet.
|
Active ou désactive l'accès à BattleNet.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- DisableBattleNet=1 {0:accès à Battle.net activé; 1:accès à Battle.net désctivé}
|
- DisableBattleNet=1 {0:accès à Battle.net activé; 1:accès à Battle.net désctivé}
|
||||||
|
|
||||||
Enregistre le log dans le fichier "The PlugY.log" dans le répertoire courant.
|
Enregistre le log dans le fichier "The PlugY.log" dans le répertoire courant.
|
||||||
Cette fonction peut ralentir le jeu.
|
Cette fonction peut ralentir le jeu.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveLogFile=0 {0:Désactivé, aucune information n'est écrite pendant le jeu; 1:toujours activé}
|
- ActiveLogFile=0 {0:Désactivé, aucune information n'est écrite pendant le jeu; 1:toujours activé}
|
||||||
|
|
||||||
Charge les dll supplémentaires du mod pour les utiliser en même temps que PlugY.
|
Charge les dll supplémentaires du mod pour les utiliser en même temps que PlugY.
|
||||||
Séparer chaque dll par le caractère pipe (|)
|
Séparer chaque dll par le caractère pipe (|)
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- DllToLoad= {(vide): rien à charger; D2extra.dll|myDll.dll: Charge D2extra.dll et myDll.dll}
|
- DllToLoad= {(vide): rien à charger; D2extra.dll|myDll.dll: Charge D2extra.dll et myDll.dll}
|
||||||
- DllToLoad2= {(vide): Même chose que DlltoLoad}
|
- DllToLoad2= {(vide): Même chose que DlltoLoad}
|
||||||
|
|
||||||
Active les nouvelles commandes de PlugY.
|
Active les nouvelles commandes de PlugY.
|
||||||
/save: Sauvegarde la partie sans quitter (LoD 1.11 minimum).
|
/lockmouse : Bloque le curseur de la souris dans la fenêtre.
|
||||||
/page 1: Affiche la page des stats de base (la page des stats doit être ouverte)(espace non obligatoire).
|
/lock : Identique à /lockmouse.
|
||||||
/page 2:Affiche la page des stats en plus (la page des stats doit être ouverte).
|
/unlockmouse : Libère le curseur de la souris de la fenêtre.
|
||||||
/page 3: Show resistance stats page Affiche la page des stats de resistances (la page des stats doit être ouverte)(espace non obligatoire).
|
/unlock : Identique à /unlockmouse.
|
||||||
/page 4: (bêta) Affiche la page des mots runiques actifs (la page des stats doit être ouverte)(espace non obligatoire).
|
/renamepage name : Renomme la page courante du coffre (utiliser # pour le numéro de page).
|
||||||
/lockmouse: Bloque le curseur de la souris dans la fenêtre.
|
/rp name : Renomme la page courante du coffre (utiliser # pour le numéro de page).
|
||||||
/lock: Identique à /lockmouse.
|
/setindex : La page courante devient un index.
|
||||||
/unlockmouse: Libère le curseur de la souris de la fenêtre.
|
/setmainindex : La page courante devient un index principal.
|
||||||
/unlock: Identique à /unlockmouse.
|
/resetindex : Retire la page courante des index.
|
||||||
/renamechar newname: Renomme la personnage et le sauvegarde. (Vous devez quittez la partie pour mettre à jour la page des stats).
|
/insertpage : Insère une nouvelle page après la page courante.
|
||||||
/renamepage name: Renomme la page courante du coffre (MultiStash activé).
|
/ip : Insère une nouvelle page après la page courante.
|
||||||
/setindex: La page courante devient un index (Les boutons d'index vont jusqu'au prochain index s'il en existe un) (MultiStash activé).
|
/deletepage : Supprime la page courante si elle est vide.
|
||||||
/setmainindex: La page courante devient un index principal (Les boutons d'index +shift vont jusqu'au prochain index s'il en existe un) (MultiStash activé).
|
/dp : Supprime la page courante si elle est vide.
|
||||||
/resetindex: Retire la page courante des index (MultiStash activé).
|
/swappage page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page".
|
||||||
/insertpage: Insère une nouvelle page après la page courante (MultiStash activé).
|
/sp page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page".
|
||||||
/deletepage: Supprime la page courante si elle est vide (MultiStash activé).
|
/togglepage page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé partagé/personnel.
|
||||||
/swap page: Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page" (espace non obligatoire) (MultiStash activé).
|
/tp page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé partagé/personnel.
|
||||||
/toggle page: Echanger le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé partagé/personnel (espace non obligatoire) (MultiStash activé).
|
/dlm : Inverse le mode d'affichage: Toujours afficher les valeurs de vie et de mana.
|
||||||
/dlm: Inverse le mode d'affichage: Toujours afficher les valeurs de vie et de mana. (Depuis LoD 1.13c, vous pouvez cliquer sur la partie inférieure des orbes)
|
/dml : Identique à /dlm.
|
||||||
/dml: Identique à /dlm.
|
/dl : Identique à /dlm.
|
||||||
/dl: Inverse le mode d'affichage: Toujours afficher les valeurs de vie. (Depuis LoD 1.13c, vous pouvez cliquer sur la partie inférieure des orbes)
|
/dm : Identique à /dlm.
|
||||||
/dm: Inverse le mode d'affichage: Toujours afficher les valeurs de mana. (Depuis LoD 1.13c, vous pouvez cliquer sur la partie inférieure des orbes)
|
/page 1 : Affiche la page des stats de base (la page des stats doit être ouverte).
|
||||||
/listcube: (bêta) Crée un fichier "cube.txt" dans le répertoire de sauvegarde contenant toutes les formules actives du cube. (LoD 1.10 minimum).
|
/page 2 : Affiche la page des stats en plus (la page des stats doit être ouverte).
|
||||||
|
/page 3 : Affiche la page des stats de resistances (la page des stats doit être ouverte).
|
||||||
|
/page 4 : Affiche les palliers pour le joueur (la page des stats doit être ouverte).
|
||||||
|
/page 5 : Affiche les palliers pour le mercenaire (la page des stats doit être ouverte).
|
||||||
|
/page 6 : (beta) Affiche la page des mots runiques actifs (la page des stats doit être ouverte).
|
||||||
|
/save : (beta) Sauvegarde la partie sans quitter.
|
||||||
|
/listcube : (beta) Crée un fichier "cube.txt" dans le répertoire de sauvegarde contenant toutes les formules du cube.
|
||||||
|
/renamechar newname : (beta) Renomme la personnage et le sauvegarde.
|
||||||
- ActiveCommands=0 {0:Désactivé; 1:Activé}
|
- ActiveCommands=0 {0:Désactivé; 1:Activé}
|
||||||
|
|
||||||
Quitte D2, si PlugY if PlugY échoue lors de l'installation de toutes les fonctions.
|
Quitte D2, si PlugY échoue à installer toutes les fonctions.
|
||||||
Désactivez-le seulement si vous savez ce que vous faites.
|
Désactivez-le uniquement si vous savez ce que vous faites.
|
||||||
- ActiveCheckMemory=1 {0:Désactivé; 1:Activé}
|
- ActiveCheckMemory=1 {0:Désactivé; 1:Activé}
|
||||||
|
|
||||||
Active les fonctions cachés ou non finis. (ne pas utiliser)
|
Active les fonctions cachés ou non finis. (ne pas utiliser)
|
||||||
@ -567,11 +583,11 @@ Verrouiller le curseur da la souris dans la fenêtre en mode fenêtré.
|
|||||||
Change la langue du jeu.
|
Change la langue du jeu.
|
||||||
Vous devez avoir les fichiers de langue choisi.
|
Vous devez avoir les fichiers de langue choisi.
|
||||||
Toutes les versions de D2 et LOD contiennent les fichiers en anglais (sauf les voix).
|
Toutes les versions de D2 et LOD contiennent les fichiers en anglais (sauf les voix).
|
||||||
Toutes les langues possibles: ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS
|
Toutes les langues possibles : ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS
|
||||||
- ActiveChangeLanguage=0 {0:Désactivé; 1:Activé}
|
- ActiveChangeLanguage=0 {0:Désactivé; 1:Activé}
|
||||||
- SelectedLanguage=ENG {FRA: Français sélectionné}
|
- SelectedLanguage=ENG {FRA: Français sélectionné}
|
||||||
|
|
||||||
Pour les moddeurs qui veulent limités les languages accessibles etle language par défauts:
|
Pour les moddeurs qui veulent limités les languages accessibles etle language par défauts :
|
||||||
- ActiveLanguageManagement=0 {0:Désactivé; 1:Activé}
|
- ActiveLanguageManagement=0 {0:Désactivé; 1:Activé}
|
||||||
- DefaultLanguage=ENG {empty:Langue par défault de D2; FRA: Le français est la langue par défaut}
|
- DefaultLanguage=ENG {empty:Langue par défault de D2; FRA: Le français est la langue par défaut}
|
||||||
- AvailableLanguages=ENG|FRA {ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS}
|
- AvailableLanguages=ENG|FRA {ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS}
|
||||||
@ -580,17 +596,22 @@ Pour les moddeurs qui veulent limités les languages accessibles etle language p
|
|||||||
[SAVEPATH]
|
[SAVEPATH]
|
||||||
Mettez dans cette variable le chemin d'accès des fichiers de sauvegarde.
|
Mettez dans cette variable le chemin d'accès des fichiers de sauvegarde.
|
||||||
Vous pouvez aussi bien utiliser un chemin absolu ou relatif.
|
Vous pouvez aussi bien utiliser un chemin absolu ou relatif.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveSavePathChange=0 {0:Désactivé; 1=Activé, vous devez initialiser "SavePath"}
|
- ActiveSavePathChange=0 {0:Désactivé; 1=Activé, vous devez initialiser "SavePath"}
|
||||||
- SavePath=Save\ {Save\MyMod\ ou D:\Save Games\diablo II\Current Mod\}
|
- SavePath=Save\ {Save\MyMod\ ou D:\Save Games\diablo II\Current Mod\}
|
||||||
|
|
||||||
|
ACtive le backup des fichiers de sauvegardes avant la sauvegarde.
|
||||||
|
Les fichiers de backup sont sauvegardé dans un répertoire nommé "backup" dans le répertoire de sauvegarde.
|
||||||
|
- ActiveAutoBackup=0 {0:Désactivé; 1:Activé}
|
||||||
|
- MaxBackupPerCharacter=5 {5: Nombre de backup à conserver avant suppression; 0:Pas de purge des backups}
|
||||||
|
|
||||||
|
|
||||||
[MAIN SCREEN]
|
[MAIN SCREEN]
|
||||||
Change le texte affiché dans le menu principal (premier menu) (à la place de "v 1.10")
|
Change le texte affiché dans le menu principal (premier menu) (à la place de "v 1.10")
|
||||||
Les couleurs sont des entiers faisant référence aux couleurs définies de D2.
|
Les couleurs sont des entiers faisant référence aux couleurs définies de D2.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveVersionTextChange=0 {0:Désactivé; 1=Activé}
|
- ActiveVersionTextChange=0 {0:Désactivé; 1=Activé}
|
||||||
- VersionText= {Vide: Affiche la version courante de LoD avec la lettre de sous-version (1.11b, 1.09d) ; Nom du Mod:Texte avec une longueur maximale d'environ 23 caractères (ex: v 1.11b)}
|
- VersionText= {Vide: Affiche la version courante de LoD avec la lettre de sous-version (1.11b, 1.09d) ; Nom du Mod:Texte avec une longueur maximale d'environ 23 caractères (ex : v 1.11b)}
|
||||||
- ColorOfVersionText=0 {0:blanc; 1:rouge; 4:or; etc.}
|
- ColorOfVersionText=0 {0:blanc; 1:rouge; 4:or; etc.}
|
||||||
- ActivePrintPlugYVersion=1 {0:Désactivé; 1=Activé)
|
- ActivePrintPlugYVersion=1 {0:Désactivé; 1=Activé)
|
||||||
- ColorOfPlugYVersion=4 {0:blanc; 1:rouge; 4:or; etc.}
|
- ColorOfPlugYVersion=4 {0:blanc; 1:rouge; 4:or; etc.}
|
||||||
@ -600,54 +621,68 @@ Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs signifi
|
|||||||
Ajuste le coffre pour avoir 10x10 cases.
|
Ajuste le coffre pour avoir 10x10 cases.
|
||||||
Quand bigStash est activé, vou devez redémarrer D2 pour jouer en solo/multi/ouvert après avoir jouer en fermé (et vice versa).
|
Quand bigStash est activé, vou devez redémarrer D2 pour jouer en solo/multi/ouvert après avoir jouer en fermé (et vice versa).
|
||||||
Utilise PlugY\TradeStash.dc6 pour changer l'image de fond.
|
Utilise PlugY\TradeStash.dc6 pour changer l'image de fond.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveBigStash=0 {0:Taille du coffre par défaut utilisé; 1:Activé, coffre utilise 10x10 cases}
|
- ActiveBigStash=0 {0:Taille du coffre par défaut utilisé; 1:Activé, coffre utilise 10x10 cases}
|
||||||
|
|
||||||
Utilisez cette fonction pour partager et garder tous vos objets.:)
|
Utilisez cette fonction pour partager et garder tous vos objets. :)
|
||||||
Il y a 2 coffres à pages multiples possibles:
|
Il y a 2 coffres à pages multiples possibles :
|
||||||
- un personnel accessible uniquement par le personnage;
|
- un personnel accessible uniquement par le personnage;
|
||||||
- un partagé entre tous vos personnages.
|
- un partagé entre tous vos personnages.
|
||||||
Utilisez le bouton "Voir coffre..." pour changer de coffre.
|
Utilisez le bouton "Voir coffre..." pour changer de coffre.
|
||||||
Utilisez les boutons fléchés (et le bouton shift) pour passer d'une page à l'autre.
|
Utilisez les boutons fléchés (et le bouton shift) pour passer d'une page à l'autre.
|
||||||
Définition: La dernière page est la dernière page qui contient un objet.
|
Définition : La dernière page est la dernière page qui contient un objet.
|
||||||
Ces coffres à pages multiples ne fonctionne pas avec des personnages Diablo II classiques ou sur les royaumes.
|
Ces coffres à pages multiples ne fonctionne pas avec des personnages Diablo II classiques ou sur les royaumes.
|
||||||
Vous pouvez changez le nom du fichier partagé.
|
Vous pouvez changez le nom du fichier partagé.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveMultiPageStash=0 {0:Désactivé; 1:Activé}
|
- ActiveMultiPageStash=0 {0:Désactivé; 1:Activé}
|
||||||
- NbPagesPerIndex=10 {10: Les pages indexées sont 1,10,20,30,...,max}
|
- NbPagesPerIndex=10 {10: Les pages indexées sont 1,10,20,30,...,max}
|
||||||
- NbPagesPerIndex2=100 {50: Les pages indexées (+shift) sont 1,50,100,150,...,max}
|
- NbPagesPerIndex2=100 {50: Les pages indexées (+shift) sont 1,50,100,150,...,max}
|
||||||
- MaxPersonnalPages=0 {0:Nombre de pages personnelles illimitées; 1000: Maximum de 1000 pages personnelles}
|
- MaxPersonnalPages=0 {0:Nombre de pages personnelles illimitées; 1000: Maximum de 1000 pages personnelles}
|
||||||
|
- AutoRenameStashPage=0 {0:Désactivé; 1:Active le nommage automatique des pages de coffre.}
|
||||||
|
- PersonalNormalPageColor=0 {0:Couleur du nom des pages de coffre personnel sans index (voir * pour la liste des couleurs)}
|
||||||
|
- PersonalIndexPageColor=12 {0:Couleur du nom des pages de coffre personnel avec index (voir * pour la liste des couleurs)}
|
||||||
|
- PersonalMainIndexPageColor=9 {0:Couleur du nom des pages de coffre personnel principal (voir * pour la liste des couleurs)}
|
||||||
|
- SharedNormalPageColor=4 {0:Couleur du nom des pages de coffre partagé sans index (voir * pour la liste des couleurs)}
|
||||||
|
- SharedIndexPageColor=8 {0:Couleur du nom des pages de coffre partagé avec index (voir * pour la liste des couleurs)
|
||||||
|
- SharedMainIndexPageColor=1 {0:Couleur du nom des pages de coffre partagé principal (voir * pour la liste des couleurs)}
|
||||||
|
|
||||||
- ActiveSharedStash=0 {0:Désactivé; 1:Activé si ActiveMultiPageStash=1}
|
- ActiveSharedStash=0 {0:Désactivé; 1:Activé si ActiveMultiPageStash=1}
|
||||||
|
- ActiveSharedStashInMultiPlayer=0 {0:Désactivé; 1:Active le coffre partagé en multijoueur. A utiliser uniquement avec des répertoires de sauvegarde différent.}
|
||||||
- OpenSharedStashOnLoading=0 {0:Désactivé; 1:Sélectionne le coffre partagée (au lieu du personnel) au chargement du perso}
|
- OpenSharedStashOnLoading=0 {0:Désactivé; 1:Sélectionne le coffre partagée (au lieu du personnel) au chargement du perso}
|
||||||
- SeparateHardcoreStash=1 {0:Même coffre partagé en HC et SC; 1:utilise 2 coffres différents}
|
- SeparateHardcoreStash=1 {0:Même coffre partagé en HC et SC; 1:utilise 2 coffres différents}
|
||||||
- SharedStashFilename=SharedStashSave {xxx: Le nom du fichier sera _LOD_xxx.sss}
|
- SharedStashFilename=SharedStashSave {xxx : Le nom du fichier sera _LOD_xxx.sss}
|
||||||
- displaySharedSetItemNameInGreen=1 {0:Désactivé; 1:Activé, Les noms des objets de sets dans le stash sont affichés en vert sur les autres objets de sets.}
|
- displaySharedSetItemNameInGreen=1 {0:Désactivé; 1:Activé, Les noms des objets de sets dans le stash sont affichés en vert sur les autres objets de sets.}
|
||||||
- MaxSharedPages=0 {0:Nombre de pages partagées illimitées; 5000: Maximum de 5000 pages partagées )
|
- MaxSharedPages=0 {0:Nombre de pages partagées illimitées; 5000: Maximum de 5000 pages partagées )
|
||||||
- ActiveSharedGold=1 {0:Désactivé; 1:Activé, utiliser les commands pour y ajouter ou retirer de l'or (voir Command section)}
|
- ActiveSharedGold=1 {0:Désactivé; 1:Activé, utiliser les commands pour y ajouter ou retirer de l'or (voir Command section)}
|
||||||
- PosXPreviousBtn=-1 {-1: Position par défaut, 50: Déplace le bouton à la position 50 en abscisse}
|
- PosXPreviousBtn=-1 {-1: Position par défaut, 50: Déplace le bouton à la position 50 en abscisse}
|
||||||
Idem pour PosYPreviousBtn, PosXNextBtn, PosYNextBtn, PosXSharedBtn, PosYSharedBtn, PosXPreviousIndexBtn, PosYPreviousIndexBtn, PosXNextIndexBtn, PosYNextIndexBtn, PosXPutGoldBtn, PosYPutGoldBtn, PosXTakeGoldBtn, PosYTakeGoldBtn.
|
Idem pour PosYPreviousBtn, PosXNextBtn, PosYNextBtn, PosXSharedBtn, PosYSharedBtn, PosXPreviousIndexBtn, PosYPreviousIndexBtn, PosXNextIndexBtn, PosYNextIndexBtn, PosXPutGoldBtn, PosYPutGoldBtn, PosXTakeGoldBtn, PosYTakeGoldBtn, PosXStashNameField, PosYStashNameField, PosXStashGoldField, PosYStashGoldField.
|
||||||
|
- PosWPreviousBtn=32 {32: Largeur du boutton}
|
||||||
|
Idem pour PosHPreviousBtn, PosWNextBtn, PosHNextBtn, PosWSharedBtn, PosHSharedBtn, PosWPreviousIndexBtn, PosHPreviousIndexBtn, PosWNextIndexBtn, PosHNextIndexBtn, PosWPutGoldBtn, PosHPutGoldBtn, PosWTakeGoldBtn, PosHTakeGoldBtn, PosWStashNameField, PosHStashNameField, PosWStashGoldField, PosHStashGoldField.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[STATS POINTS]
|
[STATS POINTS]
|
||||||
Utiles pour réparer des erreurs dans l'allocation de points de caractéristiques.
|
Utiles pour réparer des erreurs dans l'allocation de points de caractéristiques.
|
||||||
Par exemple 30 points d'énergie pour un barbare!
|
Par exemple 30 points d'énergie pour un barbare !
|
||||||
Sur la page des statistiques, appuyer sur la touche sélectionnée et cliquer sur le bouton "moins".
|
Sur la page des statistiques, appuyer sur la touche sélectionnée et cliquer sur le bouton "moins".
|
||||||
Sélectionner une touche en changeant la valeur de KeyUsed (devriez choisi 17 ou 18)
|
Sélectionner une touche en changeant la valeur de KeyUsed (devriez choisi 17 ou 18)
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveStatsUnassignment=0 {0:Désactivé; 1:Activé, appuyer sur la touche sélectionnée en cliquant}
|
- ActiveStatsUnassignment=0 {0:Désactivé; 1:Activé, appuyer sur la touche sélectionnée en cliquant}
|
||||||
- KeyUsed=18 {17:touche Contrôle sélectionnée; 18:touche Alt sélecttionnée}
|
- KeyUsed=18 {17:touche Contrôle sélectionnée; 18:touche Alt sélecttionnée}
|
||||||
|
|
||||||
Utilisez la touche shift pour allouer/désallouer tous les points possibles en un click.
|
Utilisez la touche shift pour allouer/désallouer tous les points possibles en un click.
|
||||||
Vous pouvez limiter le nombre de points alloué/désalloué.
|
Vous pouvez limiter le nombre de points alloué/désalloué.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveShiftCkickLimit=0 {0:Désactivé; 1:Activé}
|
- ActiveShiftCkickLimit=0 {0:Désactivé; 1:Activé}
|
||||||
- LimitValueToShiftClick=5 (10: Alloue ou désalloue les points de stats 10 par 10}
|
- LimitValueToShiftClick=5 (10: Alloue ou désalloue les points de stats 10 par 10}
|
||||||
|
- PosXUnassignSkillBtn=-1 {-1: Position par défaut, 50: Déplace le bouton à la position 50 en abscisse.}
|
||||||
|
- PosYUnassignSkillBtn=-1 {-1: Position par défaut, 50: Déplace le bouton à la position 50 en abscisse.}
|
||||||
|
|
||||||
|
|
||||||
[STAT ON LEVEL UP]
|
[STAT ON LEVEL UP]
|
||||||
ATTENTION: CHEAT, NE PAS UTILISER EN PARTIE NORMAL.
|
ATTENTION : CHEAT, NE PAS UTILISER EN PARTIE NORMAL.
|
||||||
Change le nombre de points de Stats reçus lors d'un gain de niveau.
|
Change le nombre de points de Stats reçus lors d'un gain de niveau.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveStatPerLevelUp=0 {0:Désactivé; 1:Activé}
|
- ActiveStatPerLevelUp=0 {0:Désactivé; 1:Activé}
|
||||||
- StatPerLevelUp=5 {0:aucun points gagnés; 11:onze points gagnés}
|
- StatPerLevelUp=5 {0:aucun points gagnés; 11:onze points gagnés}
|
||||||
|
|
||||||
@ -655,9 +690,9 @@ Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs signifi
|
|||||||
[SKILLS POINTS]
|
[SKILLS POINTS]
|
||||||
Utiles pour réparer des erreurs dans l'allocation de points de skills.
|
Utiles pour réparer des erreurs dans l'allocation de points de skills.
|
||||||
Cliquer sur le bouton de la page des skills pour désallouer tous les points de skills.
|
Cliquer sur le bouton de la page des skills pour désallouer tous les points de skills.
|
||||||
note: Prends le coût réel de chaque skills (qui peut être plus grand que 1 dans les mods).
|
note : Prends le coût réel de chaque skills (qui peut être plus grand que 1 dans les mods).
|
||||||
Attention: Il y a peux de place où mettre se boutton sans bugs.
|
Attention : Il y a peux de place où mettre se boutton sans bugs.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveSkillsUnassignment=0 {0:Désactivé; 1:Activé}
|
- ActiveSkillsUnassignment=0 {0:Désactivé; 1:Activé}
|
||||||
- ActiveSkillsUnassignmentOneForOne=0 {0:Normal; 1:Force la déassignation 1 for 1 (pour mod spécifique).}
|
- ActiveSkillsUnassignmentOneForOne=0 {0:Normal; 1:Force la déassignation 1 for 1 (pour mod spécifique).}
|
||||||
- PosXUnassignSkillBtn=-1 {-1: Position par défaut, 50: Déplace le bouton à la position 50 en X}
|
- PosXUnassignSkillBtn=-1 {-1: Position par défaut, 50: Déplace le bouton à la position 50 en X}
|
||||||
@ -665,9 +700,9 @@ Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs signifi
|
|||||||
|
|
||||||
|
|
||||||
[SKILL ON LEVEL UP]
|
[SKILL ON LEVEL UP]
|
||||||
ATTENTION: CHEAT, NE PAS UTILISER EN PARTIE NORMAL.
|
ATTENTION : CHEAT, NE PAS UTILISER EN PARTIE NORMAL.
|
||||||
Change le nombre de points de skills reçus lors d'un gain de niveau.
|
Change le nombre de points de skills reçus lors d'un gain de niveau.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveSkillPerLevelUp=0 {0:Désactivé; 1:Activé}
|
- ActiveSkillPerLevelUp=0 {0:Désactivé; 1:Activé}
|
||||||
- SkillPerLevelUp=1 {0:aucun points gagnés; 3:trois points gagnés)
|
- SkillPerLevelUp=1 {0:aucun points gagnés; 3:trois points gagnés)
|
||||||
|
|
||||||
@ -679,7 +714,7 @@ Si le WorldEvent se déclenche et qu'on n'est pas dans une partie, on le perd.
|
|||||||
A partir du lancement de D2, le prochain WorldEvent peut s'enclencher entre quelques secondes et 41:40 heures après.
|
A partir du lancement de D2, le prochain WorldEvent peut s'enclencher entre quelques secondes et 41:40 heures après.
|
||||||
Gardez en mémoire avant d'éditer ces variables que le World Event devrait toujours être rare.
|
Gardez en mémoire avant d'éditer ces variables que le World Event devrait toujours être rare.
|
||||||
L'objet à vendre peut être changé, la valeur attendu est la même que les entrées du cube.
|
L'objet à vendre peut être changé, la valeur attendu est la même que les entrées du cube.
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveWorldEvent=0 {0:Désactivé; 1:Activé}
|
- ActiveWorldEvent=0 {0:Désactivé; 1:Activé}
|
||||||
- ShowCounterInAllDifficulty=0 {0:Affiche le message "SOJ vendu" seulement en mode enfer; 1:L'affiche dans tous les modes}
|
- ShowCounterInAllDifficulty=0 {0:Affiche le message "SOJ vendu" seulement en mode enfer; 1:L'affiche dans tous les modes}
|
||||||
- ItemsToSell=The Stone of Jordan {r01: rune EL; cap,rar,upg: N'importe quel Capuchon de mailles/Capuchon de guerre/shako rare}
|
- ItemsToSell=The Stone of Jordan {r01: rune EL; cap,rar,upg: N'importe quel Capuchon de mailles/Capuchon de guerre/shako rare}
|
||||||
@ -698,7 +733,7 @@ Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs signifi
|
|||||||
Active la Uber Quest en local.
|
Active la Uber Quest en local.
|
||||||
Fonctionne uniquement en Hell.
|
Fonctionne uniquement en Hell.
|
||||||
Vous devez cuber les 3 clés puis les 3 organs à Harrogath.
|
Vous devez cuber les 3 clés puis les 3 organs à Harrogath.
|
||||||
Note: Cette quête sera mise à jour plustard pour ressembler plus à celle des royaumes.
|
Note : Cette quête sera mise à jour plustard pour ressembler plus à celle des royaumes.
|
||||||
ActiveUberQuest=0 {0:Disabled; 1:Enabled}
|
ActiveUberQuest=0 {0:Disabled; 1:Enabled}
|
||||||
|
|
||||||
|
|
||||||
@ -716,10 +751,10 @@ Possibilité de ne pas afficher l'arrière plan des boutons (à utiliser si un m
|
|||||||
[EXTRA]
|
[EXTRA]
|
||||||
Vous pouvez lancer plusieurs parties Diablo II sur un seul ordinateur.
|
Vous pouvez lancer plusieurs parties Diablo II sur un seul ordinateur.
|
||||||
Par exemple, les moddeurs peuvent tester leurs mod avec des parties multijoueurs.
|
Par exemple, les moddeurs peuvent tester leurs mod avec des parties multijoueurs.
|
||||||
Attention:
|
Attention :
|
||||||
Ne pas lancer des parties avec le même chemin de sauvegarde quand vous utiliser le coffre partagé.
|
Ne pas lancer des parties avec le même chemin de sauvegarde quand vous utiliser le coffre partagé.
|
||||||
Ne pas utiliser le même personnage en même temps bien sûr!
|
Ne pas utiliser le même personnage en même temps bien sûr !
|
||||||
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations:
|
Ci-dessous, les valeurs par défauts et entre {} des exemples avec leurs significations :
|
||||||
- ActiveLaunchAnyNumberOfLOD=0 {0:Désactivé; 1:Activé}
|
- ActiveLaunchAnyNumberOfLOD=0 {0:Désactivé; 1:Activé}
|
||||||
|
|
||||||
Régénère la carte à chaque nouvelle partie (comme en multijoueur).
|
Régénère la carte à chaque nouvelle partie (comme en multijoueur).
|
||||||
@ -742,41 +777,60 @@ Affiche la valeur courante des caracs (sans les bonus magiques) quand la souris
|
|||||||
|
|
||||||
Active les mots runiques du ladder en dehors des royaumes.
|
Active les mots runiques du ladder en dehors des royaumes.
|
||||||
Ceci est fait par la mise à 0 de la colonne "server" du fichier runes.txt.
|
Ceci est fait par la mise à 0 de la colonne "server" du fichier runes.txt.
|
||||||
Donc n'utilisez pas cette colonne dans votre mod en même temps que cette fonction!
|
Donc n'utilisez pas cette colonne dans votre mod en même temps que cette fonction !
|
||||||
- ActiveLadderRunewords=0 {0:Désactivé; 1:Activé}
|
- ActiveLadderRunewords=0 {0:Désactivé; 1:Activé}
|
||||||
|
|
||||||
Active la capacit" d'ouvrir l portail vers le Cow Level dans la difficulté où le joueur à déjà tuer le Cow King.
|
Active la capacité d'ouvrir le portail vers le Cow Level dans la difficulté où le joueur à déjà tuer le Cow King.
|
||||||
- ActiveCowPortalWhenCowKingWasKilled=0 {0:Désactivé; 1:Activé}
|
- ActiveCowPortalWhenCowKingWasKilled=0 {0:Désactivé; 1:Activé}
|
||||||
|
|
||||||
|
Empéche la fermeture du portail de Nihlathak.
|
||||||
|
- ActiveDoNotCloseNihlathakPortal=0 {0:Désactivé; 1:Activé}
|
||||||
|
|
||||||
Plus d'options dans de futures versions...:)
|
Déplace Deckar Cain à coté du portail d'Harrogath.
|
||||||
|
- MoveCainNearHarrogathWaypoint=0 {0:Désactivé; 1:Activé}
|
||||||
|
|
||||||
|
|
||||||
Mon mail à ynicolas@worldonline.fr.
|
* Liste des codes couleurs (Les codes de couleur supérieur à 12 sont noirs en 1.14d plein écran):
|
||||||
Mais je ne fais plus le support de PlugY donc n'attendez pas de l'aide de ma part si vous avez des problèmes. A la place faites des recherches sur les forums.
|
- Invisible: 6
|
||||||
|
- Gris foncé: 5
|
||||||
|
- Gris: 16
|
||||||
|
- Gris clair: 15
|
||||||
|
- Blanc: 0,
|
||||||
|
- Branc vif: 18
|
||||||
|
- Or: 4
|
||||||
|
- Jaune foncé: 7
|
||||||
|
- Jaune: 9
|
||||||
|
- Orange: 8
|
||||||
|
- Vert très foncé: 10
|
||||||
|
- Vert foncé: 12
|
||||||
|
- Vert: 2
|
||||||
|
- Bleu: 3
|
||||||
|
- Violet: 11
|
||||||
|
- Rouge: 1
|
||||||
|
- Rouge vif: 19
|
||||||
|
|
||||||
|
|
||||||
PS: Désolé pour les fôtes mais je n'ai pas envie de corriger ;)
|
|
||||||
|
|
||||||
******** THANKS TO ********
|
******** THANKS TO ********
|
||||||
- Blizzard pour avoir fait Diablo II et Lord of Destruction.
|
- Blizzard pour avoir créé Diablo II et Lord of Destruction.
|
||||||
- Kingpin, Afj666, Joel, SVR, Myrdinn pour leurs aides.
|
- Kingpin, Afj666, Joel, SVR, Myrdinn pour leurs aides.
|
||||||
- Pralinor pour son aide dans la convertion en 1.12.
|
- Pralinor pour son aide dans la convertion en 1.12.
|
||||||
- L'Autour pour son aide dans la convertion en 1.13d.
|
- L'Autour pour son aide dans la convertion en 1.13d.
|
||||||
- ChaosEnergY pour ses beta tests et sa traduction en allemand.
|
- Haxifix pour son aide dans la convertion en 1.14d.
|
||||||
|
- SnapChip pour l'IA des Uber dans Tristram.
|
||||||
|
- ChaosEnergY pour ses tests.
|
||||||
- Char & Darque pour avoir corrigé mon anglais.
|
- Char & Darque pour avoir corrigé mon anglais.
|
||||||
- Shaitane, K&V, themastercaster, raspa et onyx pour leurs tests.
|
- Shaitane, K&V, themastercaster, raspa et onyx pour leurs tests.
|
||||||
- Golvmopp, Dark Spot in the Corner, Megalixir et Athara pour leurs aides.
|
- Golvmopp, Dark Spot in the Corner, Megalixir et Athara pour leurs aides.
|
||||||
- ItalianPlayer pour la traduction en italien.
|
- Tous les membres du chat et des forums de ProzenKeep.
|
||||||
- Tous les membres du Chat de ProzenKeep.
|
- L'équipe de PhrozenKeep.
|
||||||
- PhrozenKeep pour tout ce qu'ils partagent pour nous (y-compris le mien ;)
|
- Traduction :
|
||||||
- Traduction:
|
* Anglais : Yohann, Jurica.
|
||||||
* Anglais: Yohann, Jurica.
|
* Français : Yohann
|
||||||
* Français: Yohann
|
* Allemand : ChaosEnergy, TheMasterCaster, ChaosMarc.
|
||||||
* Allemand: ChaosEnergy, TheMasterCaster.
|
* Italien : ItalianPlayer
|
||||||
* Italien: ItalianPlayer
|
* Espagnol : Acrerune
|
||||||
* Espagnol: Acrerune
|
* Polonais : Serdel
|
||||||
* Polonais: Serdel
|
* Russe : L'Autour
|
||||||
* Russe: L'Autour
|
* Chinois: Nagahaku
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------------;
|
;--------------------------------------------------------------------------------------;
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user