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
@ -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, 5AB20, DWORD, D2CompileCubeOutput, (CubeOutput* cubeoutput, 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,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));
|
||||||
//A7(FAST, D2Common,00000,00000,62FD0,00000,00000,00000,00000,00000, void, D2EncodeValueCheckMax, (saveBitField* data, DWORD value, DWORD bitSize));
|
//A8(FAST, D2Common,00000,00000,62FD0,00000,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));
|
||||||
//A7(FAST, D2Common,00000,00000,764A0,00000,00000,00000,00000,00000, void*, D2Common764A0, (Stats* ptStats, DWORD stat, ItemStatCostBIN* itemStatCost ,DWORD));
|
//A8(FAST, D2Common,00000,00000,764A0,00000,00000,00000,00000,00000,00000, void*, D2Common764A0, (Stats* ptStats, DWORD stat, ItemStatCostBIN* itemStatCost ,DWORD));
|
||||||
//A7(STD, D2Common,00000,00000,76E30,00000,00000,00000,00000,00000, void, D2PreUpdateDisabledStat, (Stats* ptStats));
|
//A8(STD, D2Common,00000,00000,76E30,00000,00000,00000,00000,00000,00000, void, D2PreUpdateDisabledStat, (Stats* ptStats));
|
||||||
//A7(FAST, D2Common,00000,00000,76C10,00000,00000,00000,00000,00000, void, D2ApplyStat,(Stats* ptCharStats, DWORD statId, DWORD value, Unit* ptItem));
|
//A8(FAST, D2Common,00000,00000,76C10,00000,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, /*116E46*/117079, void*, D2ReadFile,(DWORD unused, char* filename, DWORD* size, const char*, DWORD));
|
A8(FAST, D2Common,738A4,739B4,84268, 96E0, 98D0, 9900, 9900, B5E0,117079, void*, D2ReadFile,(DWORD mempool, char* filename, DWORD* size, const char*, DWORD));
|
||||||
//A7(FAST, D2Common,00000,00000, 94D0,00000,00000,00000,00000,00000, void*, D2GetStringIDForTxtFile,(const char * string));
|
//A8(FAST, D2Common,00000,00000, 94D0,00000,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,7 +506,7 @@ 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);
|
||||||
|
@ -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,17 +87,107 @@ 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.
|
||||||
@ -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
|
||||||
@ -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
|
||||||
@ -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
|
||||||
@ -404,7 +529,7 @@ struct Unit
|
|||||||
}; //+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;
|
||||||
|
@ -154,9 +154,20 @@ struct ObjectsBIN
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ExperienceBIN//size=0x20
|
||||||
|
{
|
||||||
|
DWORD Amazon;
|
||||||
|
DWORD Sorceress;
|
||||||
|
DWORD Necromancer;
|
||||||
|
DWORD Paladin;
|
||||||
|
DWORD Barbarian;
|
||||||
|
DWORD Druid;
|
||||||
|
DWORD Assassin;
|
||||||
|
DWORD ExpRatio;
|
||||||
|
};
|
||||||
|
|
||||||
struct LevelsBIN//size=0x220
|
struct LevelsBIN//size=0x220
|
||||||
{
|
{
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GemsBIN //size: 0xC0=192 (source : fct of dll)
|
struct GemsBIN //size: 0xC0=192 (source : fct of dll)
|
||||||
@ -206,7 +217,7 @@ struct GemsBIN //size: 0xC0=192 (source : fct of dll)
|
|||||||
DWORD shieldmod3max; //+BC
|
DWORD shieldmod3max; //+BC
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ItemsBIN //size: 0x1A8=424 (source : fct of dll) (nblines : 134 CA 8B) Gold:20B
|
struct ItemsBIN //size: 0x1A8=424 (source : fct of dll)
|
||||||
{
|
{
|
||||||
char FlippyFile[0x20]; //+00
|
char FlippyFile[0x20]; //+00
|
||||||
char InvFile[0x20]; //+20
|
char InvFile[0x20]; //+20
|
||||||
@ -380,33 +391,40 @@ struct RunesBIN //size: 0x120=288 (1.10 ok)
|
|||||||
|
|
||||||
struct CharStatsBIN //size= 0xC4=196
|
struct CharStatsBIN //size= 0xC4=196
|
||||||
{
|
{
|
||||||
WCHAR nameU[0x10];
|
WCHAR nameU[0x10]; //+00
|
||||||
char name[0x10];
|
char name[0x10]; //+20
|
||||||
BYTE baseSTR; //+20
|
BYTE baseSTR; //+30
|
||||||
BYTE baseDEX;
|
BYTE baseDEX; //+31
|
||||||
BYTE baseENE;
|
BYTE baseENE; //+32
|
||||||
BYTE baseVIT;
|
BYTE baseVIT; //+33
|
||||||
BYTE baseStamina;
|
BYTE baseStamina; //+34
|
||||||
BYTE HPAdd;
|
BYTE hpadd; //+35
|
||||||
BYTE percentStr;
|
BYTE percentStr; //+36
|
||||||
BYTE percentDex;
|
BYTE percentInt; //+37
|
||||||
BYTE percentInt;
|
BYTE percentDex; //+38
|
||||||
BYTE percentVit;
|
BYTE percentVit; //+39
|
||||||
WORD manaRegen;
|
BYTE manaRegen; //+3A
|
||||||
DWORD toHitFactor;
|
BYTE __3B; //+3B
|
||||||
BYTE walkVelocity;//+30
|
DWORD toHitFactor; //+3C
|
||||||
BYTE runVelocity;
|
BYTE walkVelocity; //+40
|
||||||
BYTE runDrain;
|
BYTE runVelocity; //+41
|
||||||
BYTE lifePerLevel;
|
BYTE runDrain; //+42
|
||||||
BYTE staminaPerLevel;
|
BYTE lifePerLevel; //+43
|
||||||
BYTE manaPerLevel;
|
BYTE staminaPerLevel; //+44
|
||||||
BYTE lifePerVitality;
|
BYTE manaPerLevel; //+45
|
||||||
BYTE staminaPerVitality;
|
BYTE lifePerVitality; //+46
|
||||||
BYTE manaPerMagic;
|
BYTE staminaPerVitality; //+47
|
||||||
BYTE blockFactor;
|
BYTE manaPerMagic; //+48
|
||||||
WORD startSkill;
|
BYTE blockFactor; //+49
|
||||||
DWORD baseWClass;
|
WORD __4A_startSkill; //+4A
|
||||||
DWORD unknown1[3];
|
DWORD baseWClass; //+4C
|
||||||
|
BYTE StatPerLevel; //+50
|
||||||
|
BYTE __51; //+51
|
||||||
|
WORD StrAllSkills; //+52
|
||||||
|
WORD StrSkillTab1; //+54
|
||||||
|
WORD StrSkillTab2; //+56
|
||||||
|
WORD StrSkillTab3; //+58
|
||||||
|
WORD StrClassOnly; //+5A
|
||||||
DWORD item1;
|
DWORD item1;
|
||||||
BYTE item1Loc;
|
BYTE item1Loc;
|
||||||
BYTE item1Count;
|
BYTE item1Count;
|
||||||
@ -553,19 +571,28 @@ struct UniqueItemsBIN //size=0x14C (332)
|
|||||||
struct {
|
struct {
|
||||||
BYTE ukf:2;
|
BYTE ukf:2;
|
||||||
BYTE carry1:1;
|
BYTE carry1:1;
|
||||||
|
BYTE ladder:1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
BYTE uk3[0x11F]; //+2D
|
BYTE uk3[0x11F]; //+2D
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SetsBIN //size=0x128 (source : fct of dll)
|
||||||
|
{
|
||||||
|
WORD setNum; //+00
|
||||||
|
WORD setNameIndex; //+02
|
||||||
|
BYTE uk3[0x124]; //+04
|
||||||
|
};
|
||||||
|
|
||||||
struct SetItemsBIN //size=0x1B8 (source : fct of dll)
|
struct SetItemsBIN //size=0x1B8 (source : fct of dll)
|
||||||
{
|
{
|
||||||
WORD setId; //+00
|
WORD setNum; //+00
|
||||||
char index[0x20]; //+02
|
char index[0x20]; //+02
|
||||||
BYTE uk1; //+04
|
BYTE uk1; //+04
|
||||||
WORD setNameId; //+24
|
WORD setNameId; //+24
|
||||||
BYTE uk2[0x192]; //+26
|
BYTE uk2[0x6]; //+26
|
||||||
|
WORD setId; //+2C
|
||||||
|
BYTE uk3[0x18A]; //+2E
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -895,7 +922,10 @@ struct MonStatsBIN //size=0x1A8 (424)
|
|||||||
{
|
{
|
||||||
BYTE uk1[0x6]; //+00
|
BYTE uk1[0x6]; //+00
|
||||||
WORD monsterNameID; //+06
|
WORD monsterNameID; //+06
|
||||||
BYTE uk2[0x1A0]; //+08
|
BYTE uk2[0x168]; //+08
|
||||||
|
WORD skill[8]; //+170
|
||||||
|
BYTE skillArg[8]; //+180
|
||||||
|
BYTE uk3[0x20]; //+188
|
||||||
}; //+1A8
|
}; //+1A8
|
||||||
|
|
||||||
struct ItemTypesBIN //size=0xE4 (228) (source : fct of dll)
|
struct ItemTypesBIN //size=0xE4 (228) (source : fct of dll)
|
||||||
@ -1179,7 +1209,10 @@ struct DataTables//01EE6A20 * 01FDA2D0 //second comments=1.11
|
|||||||
BYTE uk8[0x18]; //+BE0
|
BYTE uk8[0x18]; //+BE0
|
||||||
ItemTypesBIN* itemTypes; //+BF8
|
ItemTypesBIN* itemTypes; //+BF8
|
||||||
DWORD nbItemTypes; //+BFC
|
DWORD nbItemTypes; //+BFC
|
||||||
BYTE uk9[0x18]; //+C00
|
BYTE uk9[0x0C]; //+C00
|
||||||
|
SetsBIN* sets; //+C0C //1.11 and 1.10
|
||||||
|
DWORD nbSets; //+C10 //1.11 and 1.10
|
||||||
|
BYTE uk9b[0x4]; //+C14
|
||||||
SetItemsBIN* setItems; //+C18 //1.11 and 1.10
|
SetItemsBIN* setItems; //+C18 //1.11 and 1.10
|
||||||
DWORD nbSetItems; //+C1C //1.11 and 1.10
|
DWORD nbSetItems; //+C1C //1.11 and 1.10
|
||||||
BYTE uk10[0x4]; //+C20
|
BYTE uk10[0x4]; //+C20
|
||||||
|
@ -15,9 +15,9 @@ 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;
|
||||||
@ -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 */
|
||||||
|
@ -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
|
||||||
@ -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,
|
||||||
|
@ -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
|
//6FAEC61C |. 68 04010000 PUSH 104
|
||||||
//6FB5643C |. 68 04010000 PUSH 104
|
//6FB5643C |. 68 04010000 PUSH 104
|
||||||
//6FB249BC |. 68 04010000 PUSH 104
|
//6FB249BC |. 68 04010000 PUSH 104
|
||||||
//6FB59D7C |. 68 04010000 PUSH 104
|
//6FB59D7C |. 68 04010000 PUSH 104
|
||||||
//6FB3CC1C |. 68 04010000 PUSH 104
|
//6FB3CC1C |. 68 04010000 PUSH 104
|
||||||
//6FB443FC |. 68 04010000 PUSH 104
|
//6FB443FC |. 68 04010000 PUSH 104
|
||||||
|
//00489EB5 |. 68 04010000 PUSH 104 ; |Arg2 = 00000104
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
isInstalled = true;
|
isInstalled = true;
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
@ -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] == ' ')
|
|
||||||
{
|
{
|
||||||
param++;
|
if (!active_multiPageStash) return 1;
|
||||||
len--;
|
char* param = &ptText[strlen(CMD_SHORT_RENAME_PAGE)];
|
||||||
}
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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");
|
||||||
|
|
||||||
|
@ -59,9 +59,10 @@ 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;
|
||||||
|
TD2SpawnSuperUnique V2SpawnSuperUnique;
|
||||||
TD2SpawnMonster V2SpawnMonster;
|
TD2SpawnMonster V2SpawnMonster;
|
||||||
TD2VerifIfNotCarry1 V2VerifIfNotCarry1;
|
TD2VerifIfNotCarry1 V2VerifIfNotCarry1;
|
||||||
TD2GameGetObject V2GameGetObject;
|
TD2GameGetObject V2GameGetObject;
|
||||||
@ -81,8 +82,10 @@ TD2GetItemStatCostBIN V2GetItemStatCostBIN;
|
|||||||
TD2SendPacket V2SendPacket;
|
TD2SendPacket V2SendPacket;
|
||||||
TD2LoadInventory V2LoadInventory;
|
TD2LoadInventory V2LoadInventory;
|
||||||
TD2SaveGame V2SaveGame;
|
TD2SaveGame V2SaveGame;
|
||||||
|
TD2MonsterUseSkill V2MonsterUseSkill;
|
||||||
TD2LinkPortal V2LinkPortal;
|
TD2LinkPortal V2LinkPortal;
|
||||||
TD2Game235C0 V2Game235C0;
|
TD2Game235C0 V2Game235C0;
|
||||||
|
TD2ReadFile V2ReadFile;
|
||||||
|
|
||||||
//DWORD* ptNbStatDesc
|
//DWORD* ptNbStatDesc
|
||||||
//DWORD* ptStatDescTable;
|
//DWORD* ptStatDescTable;
|
||||||
@ -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 {
|
DWORD compileTxtFile114_1;
|
||||||
SUB ESP, 0x20C
|
DWORD compileTxtFile114_2;
|
||||||
// MOV EAX,DWORD PTR DS:[6FDF1464]
|
DWORD compileTxtFile114_3;
|
||||||
PUSH EBX
|
DWORD compileTxtFile114_5;
|
||||||
|
DWORD compileTxtFile114_6;
|
||||||
|
DWORD compileTxtFile114_7;
|
||||||
|
__declspec(naked) void* STDCALL compileTxtFile_114(DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength)
|
||||||
|
{_asm{
|
||||||
PUSH EBP
|
PUSH EBP
|
||||||
|
MOV EBP,ESP
|
||||||
|
SUB ESP,0x11C
|
||||||
|
PUSH EBX
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
PUSH EDI
|
PUSH EDI
|
||||||
MOV DWORD PTR SS : [ESP + 0x10], 0
|
|
||||||
MOV EBX, DWORD PTR SS : [ESP + 0x224]
|
|
||||||
|
|
||||||
|
MOV EAX,DWORD PTR SS:[EBP+0x10]
|
||||||
|
MOV ECX,DWORD PTR SS:[EBP+0x14]
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
LEA EAX, DWORD PTR SS : [ESP + 0x1A]
|
PUSH ESI
|
||||||
|
MOV ESI,DWORD PTR SS:[EBP+0x8]
|
||||||
|
PUSH EDI
|
||||||
|
MOV EDI,DWORD PTR SS:[EBP+0xC]
|
||||||
|
MOV DWORD PTR SS:[EBP-0x11C],ESI
|
||||||
|
MOV DWORD PTR SS:[EBP-0x10C],EDI
|
||||||
|
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
|
PUSH EAX
|
||||||
CALL DWORD PTR SS : [wsprintf]
|
MOV ECX,unused
|
||||||
MOV EDX, DWORD PTR SS : [ESP + 0x228]
|
MOV EDX,filename
|
||||||
ADD ESP, 8
|
CALL V2ReadFile
|
||||||
LEA EDX, DWORD PTR SS : [ESP + 0xE]
|
TEST EAX,EAX
|
||||||
PUSH EDX
|
|
||||||
PUSH EAX
|
|
||||||
LEA EDX, DWORD PTR SS : [ESP + 0x20]
|
|
||||||
CALL D2ReadFile
|
|
||||||
TEST EAX, EAX
|
|
||||||
JNZ continue_compileTxtFile
|
JNZ continue_compileTxtFile
|
||||||
PUSH __LINE__
|
PUSH __LINE__
|
||||||
CALL D2GetInstructionPointer
|
CALL D2GetInstructionPointer
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
PUSH S_errorReadTxtFile
|
PUSH S_errorReadTxtFile
|
||||||
CALL D2FogAssert
|
CALL D2FogAssert
|
||||||
ADD ESP, 0xC
|
ADD ESP,0xC
|
||||||
PUSH - 1
|
PUSH -1
|
||||||
CALL exit
|
CALL exit
|
||||||
continue_compileTxtFile :
|
continue_compileTxtFile:
|
||||||
MOV ECX, D2CompileTxtFile
|
// EAX : file
|
||||||
ADD ECX, 0x1EC
|
// ECX : -
|
||||||
JMP 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
|
||||||
@ -509,18 +546,16 @@ 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 ECX, DWORD PTR SS : [ESP]
|
LEA EDX,DWORD PTR SS:[ESP]
|
||||||
PUSH ECX
|
PUSH EDX
|
||||||
CALL D2SendToServerXX
|
CALL D2SendToServerXX
|
||||||
POP ECX
|
POP ECX
|
||||||
POP EBX
|
POP EBX
|
||||||
POP ESI
|
|
||||||
POP EDI
|
POP EDI
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
@ -539,19 +574,15 @@ 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 DWORD PTR SS : [ESP + 0x18]
|
|
||||||
PUSH EDX
|
PUSH EDX
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
CALL V2PrintStat
|
CALL V2PrintStat
|
||||||
POP ECX
|
|
||||||
POP EBX
|
|
||||||
POP ESI
|
POP ESI
|
||||||
RETN 0x10
|
RETN 0x10
|
||||||
}}
|
}}
|
||||||
@ -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,21 +633,21 @@ 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
|
RETN 8
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( D2CompileCubeOutput_111 )
|
//FCT_ASM ( D2CompileCubeOutput_111 )
|
||||||
PUSH EBX
|
// PUSH EBX
|
||||||
MOV EBX,ECX
|
// MOV EBX,ECX
|
||||||
PUSH EDX
|
// PUSH EDX
|
||||||
CALL V2CompileCubeOutput
|
// CALL V2CompileCubeOutput
|
||||||
POP EBX
|
// POP EBX
|
||||||
RETN 8
|
// RETN 8
|
||||||
}}
|
//}}
|
||||||
|
|
||||||
FCT_ASM ( D2BroadcastFunction_111 )
|
FCT_ASM ( D2BroadcastFunction_111 )
|
||||||
PUSH EDI
|
PUSH EDI
|
||||||
@ -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 )
|
|
||||||
|
FCT_ASM( D2SpawnSuperUnique_114 )
|
||||||
|
PUSH EBX
|
||||||
|
PUSH EDI
|
||||||
|
MOV EBX, DWORD PTR SS:[ESP+0x1C]
|
||||||
|
MOV EDI, ECX
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x20]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x1C]
|
||||||
|
PUSH EDX
|
||||||
|
CALL V2SpawnSuperUnique
|
||||||
|
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 ECX
|
||||||
MOV EBX, DWORD PTR SS : [ESP + 0x18]
|
PUSH DWORD PTR SS:[ESP+0x20]
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0x14]
|
PUSH DWORD PTR SS:[ESP+0x20]
|
||||||
MOV DWORD PTR SS : [ESP + 0x18], ECX
|
MOV EDX,DWORD PTR SS:[ESP+0x20]
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0x10]
|
MOV ECX,DWORD PTR SS:[ESP+0x1C]
|
||||||
MOV DWORD PTR SS : [ESP + 0x14], ECX
|
CALL V2SpawnMonster
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0xC]
|
RETN 0x18
|
||||||
MOV DWORD PTR SS : [ESP + 0x10], ECX
|
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0x8]
|
|
||||||
MOV DWORD PTR SS : [ESP + 0xC], ECX
|
|
||||||
MOV DWORD PTR SS : [ESP + 0x8], EDX
|
|
||||||
POP ECX
|
|
||||||
JMP V2SpawnMonster
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
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
|
|
||||||
MOV ECX, DWORD PTR SS : [ESP + 0xC]
|
|
||||||
MOV EDX, DWORD PTR SS : [ESP + 0x10]
|
|
||||||
POP EDX
|
|
||||||
POP ECX
|
POP ECX
|
||||||
RETN 0x8
|
POP EDX
|
||||||
|
PUSH EAX
|
||||||
|
JMP V2Game235C0
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
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) {
|
if (version_D2Client == V114d)
|
||||||
D2GetClientPlayer = D2GetClientPlayer_111;
|
{
|
||||||
D2GetClient = (TD2GetClient)D2GetClient_111;
|
D2SendToServer3 = (TD2SendToServer3) D2SendToServer3_114;
|
||||||
D2LoadImage = (TD2LoadImage)D2LoadImage_114;
|
D2PrintStat = (TD2PrintStat)D2PrintStat_114;
|
||||||
D2FreeImage = (TD2FreeImage)D2FreeImage_111;
|
D2SendPacket = (TD2SendPacket) D2SendPacket_114;
|
||||||
|
D2CompileCubeInput = (TD2CompileCubeInput) D2CompileCubeInput_114;
|
||||||
|
D2SpawnSuperUnique = (TD2SpawnSuperUnique) D2SpawnSuperUnique_114;
|
||||||
|
D2VerifIfNotCarry1 = (TD2VerifIfNotCarry1)D2VerifIfNotCarry1_111;
|
||||||
D2isLODGame = D2isLODGame_111;
|
D2isLODGame = D2isLODGame_111;
|
||||||
D2GetMouseX = D2GetMouseX_111;
|
D2GetMouseX = D2GetMouseX_111;
|
||||||
D2GetMouseY = D2GetMouseY_111;
|
D2GetMouseY = D2GetMouseY_111;
|
||||||
D2SendToServer3 = (TD2SendToServer3)D2SendToServer3_114;
|
|
||||||
D2SetSkillBaseLevelOnClient = (TD2SetSkillBaseLevelOnClient)D2SetSkillBaseLevelOnClient_114;
|
|
||||||
D2SendPacket = (TD2SendPacket)D2SendPacket_114;
|
|
||||||
D2GetGameByClientID = (TD2GetGameByClientID)D2GetGameByClientID_1XX;
|
|
||||||
D2SpawnMonster = (TD2SpawnMonster)D2SpawnMonster_114;
|
D2SpawnMonster = (TD2SpawnMonster)D2SpawnMonster_114;
|
||||||
D2CompileCubeInput = (TD2CompileCubeInput)D2CompileCubeInput_114;
|
|
||||||
D2CleanStatMouseUp = (TD2CleanStatMouseUp)D2CleanStatMouseUp_114;
|
|
||||||
D2LinkPortal = (TD2LinkPortal)D2LinkPortal_114;
|
D2LinkPortal = (TD2LinkPortal)D2LinkPortal_114;
|
||||||
D2Game235C0 = (TD2Game235C0)D2Game235C0_114;
|
D2Game235C0 = (TD2Game235C0) D2Game235C0_114;
|
||||||
D2PrintStat = (TD2PrintStat)D2PrintStat_114;
|
D2GetGameByClientID = (TD2GetGameByClientID) D2GetGameByClientID_1XX;
|
||||||
D2SaveGame = (TD2SaveGame)D2SaveGame_1XX;
|
D2SaveGame = (TD2SaveGame) D2SaveGame_1XX;
|
||||||
D2VerifIfNotCarry1 = (TD2VerifIfNotCarry1)D2VerifIfNotCarry1_111;
|
}
|
||||||
|
else if ( version_D2Client >= V111 )
|
||||||
StatMouse1 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C004, 11C2F4, 11C040, 11C3DC, 11D224, A0650);
|
{
|
||||||
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);
|
|
||||||
StatMouse4 = (DWORD*)R8(D2Client, 0000, 0000, 0000, 11C024, 11C314, 11C060, 11C3FC, 11D244, A065C);
|
|
||||||
} 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,9 +176,10 @@ 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_D2Client, offset_D2Client);
|
||||||
// hookLibrary(S_D2CMP, offset_D2CMP);
|
// hookLibrary(S_D2CMP, offset_D2CMP);
|
||||||
hookLibrary(S_D2Common, offset_D2Common);
|
hookLibrary(S_D2Common, offset_D2Common);
|
||||||
@ -198,9 +200,10 @@ 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_D2Client, offset_D2Client);
|
||||||
// unhookLibrary(S_D2CMP, offset_D2CMP);
|
// unhookLibrary(S_D2CMP, offset_D2CMP);
|
||||||
unhookLibrary(S_D2Common, offset_D2Common);
|
unhookLibrary(S_D2Common, offset_D2Common);
|
||||||
@ -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");
|
||||||
}
|
}
|
||||||
@ -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();
|
||||||
|
|
||||||
@ -510,17 +512,25 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
|||||||
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");
|
||||||
|
|
||||||
unhookLibraries();
|
unhookLibraries();
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -13,11 +13,11 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -28,13 +28,12 @@ void log_initfile()
|
|||||||
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( fLogFile == NULL )
|
||||||
|
return;
|
||||||
|
|
||||||
if( lLog != NULL )
|
|
||||||
{
|
|
||||||
fclose(lLog);
|
|
||||||
log_init = true;
|
log_init = true;
|
||||||
}
|
|
||||||
|
|
||||||
log_msg("<----------------------------------------------->\n"
|
log_msg("<----------------------------------------------->\n"
|
||||||
"\n"
|
"\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,12 +80,13 @@ 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;
|
||||||
|
@ -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];
|
||||||
@ -128,22 +127,6 @@ void writeExtendedSaveFile(char* name, BYTE* data, DWORD size)
|
|||||||
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,20 +31,18 @@ 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 EDI
|
|
||||||
POP EAX
|
POP EAX
|
||||||
POP ECX
|
POP ECX
|
||||||
POP EDX
|
POP EDX
|
||||||
@ -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 EDI
|
|
||||||
POP EAX
|
|
||||||
POP ECX
|
|
||||||
POP EDX
|
POP EDX
|
||||||
|
POP ECX
|
||||||
|
POP EAX
|
||||||
PUSH 0x100
|
PUSH 0x100
|
||||||
JMP EDX
|
JMP EAX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
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()
|
||||||
@ -251,13 +266,8 @@ void Install_SendPlayersCommand()
|
|||||||
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");
|
||||||
|
|
||||||
@ -291,6 +315,7 @@ void Install_AlwaysRegenMapInSP()
|
|||||||
//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,15 +347,18 @@ void Install_RunLODs()
|
|||||||
|
|
||||||
/****************************************************************************************************/
|
/****************************************************************************************************/
|
||||||
|
|
||||||
FCT_ASM(caller_AlwaysDisplayLife_114)
|
FCT_ASM (caller_AlwaysDisplayLife_114)
|
||||||
CMP onRealm, 0
|
JNZ displayLife
|
||||||
|
CMP onRealm,0
|
||||||
JNZ normalDisplayLife
|
JNZ normalDisplayLife
|
||||||
CMP active_AlwaysDisplayLifeMana, 0
|
CMP active_AlwaysDisplayLifeMana,0
|
||||||
JE normalDisplayLife
|
JE normalDisplayLife
|
||||||
CMP EAX, 0x1
|
displayLife:
|
||||||
RETN
|
POP EAX
|
||||||
normalDisplayLife :
|
ADD EAX,0x24
|
||||||
CMP DWORD PTR DS : [0x7BEFDC], EAX
|
JMP EAX
|
||||||
|
normalDisplayLife:
|
||||||
|
LEA EAX,DWORD PTR DS:[ESI-0x1E]
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -377,16 +406,17 @@ 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]
|
||||||
|
CMP ESI,EDI
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -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,7 +581,7 @@ 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
|
||||||
|
|
||||||
@ -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");
|
||||||
|
|
||||||
@ -716,14 +740,221 @@ 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");
|
||||||
|
|
||||||
|
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");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -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,16 +33,17 @@ 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
|
||||||
|
PUSH 2
|
||||||
CALL BtnPress
|
CALL BtnPress
|
||||||
POP EAX
|
POP EAX
|
||||||
SUB ESP, 0x3FC//400
|
SUB ESP,0x3FC//400
|
||||||
JMP DWORD PTR SS : [ESP + 0x3FC]
|
JMP DWORD PTR SS:[ESP+0x3FC]
|
||||||
disableBattleNet :
|
disableBattleNet:
|
||||||
POP EAX
|
POP EAX
|
||||||
POP EAX
|
POP EAX
|
||||||
RETN
|
RETN
|
||||||
@ -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
|
||||||
POP EDX
|
MOV ECX,DWORD PTR SS:[ESP]
|
||||||
POP EAX
|
ADD ECX,0xB9B0
|
||||||
MOV ECX, 0x006D39BC
|
JMP ECX
|
||||||
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,14 +148,16 @@ 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);
|
{
|
||||||
|
MEMT_REF4( 0x0000B9B0, caller_TCPIPBtnPress114);
|
||||||
|
//0042FFEB . E8 B0B90000 CALL Game.0043B9A0
|
||||||
} else {
|
} else {
|
||||||
memt_byte( 0xBE, 0xE8 ); // CALL
|
memt_byte( 0xBE, 0xE8 ); // CALL
|
||||||
MEMT_REF4( 0x00000040, caller_TCPIPBtnPress111);
|
MEMT_REF4( 0x00000040, caller_TCPIPBtnPress111);
|
||||||
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -20,6 +20,8 @@ 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,15 +66,13 @@ 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)
|
||||||
@ -87,36 +87,40 @@ Stash* newStash(DWORD 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;
|
||||||
|
stash->isMainIndex = 1;
|
||||||
|
}
|
||||||
|
|
||||||
log_msg("AddStash: stash->id=%d\tstash->isShared=%d\tstash->previous=%08X\tnbSelf=%d\tnbShared=%d\n",
|
log_msg("AddStash: stash->id=%d\tstash->isShared=%d\tnbSelf=%d\tnbShared=%d\n", stash->id, stash->isShared, PCPY->nbSelfPages, PCPY->nbSharedPages);
|
||||||
stash->id,stash->isShared,stash->previousStash,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,43 +280,80 @@ 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)
|
||||||
|
autoSetIndex(PCPY->selfStash);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newStash = addStash(ptChar, isShared, true, newStash);
|
||||||
|
PCPY->currentStash = newStash;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isShared)
|
||||||
|
{
|
||||||
|
if (PCPY->sharedStash)
|
||||||
|
autoSetIndex(PCPY->sharedStash);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newStash = addStash(ptChar, isShared, true, newStash);
|
||||||
if (!PCPY->currentStash)
|
if (!PCPY->currentStash)
|
||||||
PCPY->currentStash = newStash;
|
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,7 +531,7 @@ 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;
|
||||||
@ -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,22 +934,22 @@ 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
|
||||||
}}
|
}}
|
||||||
@ -826,18 +993,18 @@ 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
|
||||||
@ -923,17 +1090,17 @@ 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
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -982,16 +1149,16 @@ 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
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -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);
|
|
||||||
} 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>
|
//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,14 +1246,9 @@ 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 {
|
|
||||||
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]
|
//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]
|
||||||
@ -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");
|
||||||
}
|
}
|
||||||
|
@ -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,7 +122,7 @@ dontPrint:
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_skillsPageMouseDown_114 )
|
FCT_ASM ( caller_skillsPageMouseDown_114 )
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
CALL skillsPageMouseDown
|
CALL skillsPageMouseDown
|
||||||
RETN
|
RETN
|
||||||
@ -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");
|
||||||
|
|
||||||
|
@ -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)) {
|
||||||
|
if (active_sharedStash) {
|
||||||
lpText = getLocalString(PCPY->showSharedStash ? STR_TOGGLE_TO_PERSONAL : STR_TOGGLE_TO_SHARED);
|
lpText = getLocalString(PCPY->showSharedStash ? STR_TOGGLE_TO_PERSONAL : STR_TOGGLE_TO_SHARED);
|
||||||
D2PrintPopup(lpText, getXSharedBtn()+getLSharedBtn()/2, getYSharedBtn()-getHSharedBtn(), WHITE, 1);
|
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);
|
||||||
@ -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;
|
|
||||||
D2PrintPopup(popupText, RX(0xA8-max(x,x2)/2), RY(0x1CA), WHITE, 0);
|
|
||||||
} else
|
} else
|
||||||
D2PrintPopup(maxGoldText, RX(0xA8), RY(0x1CA), WHITE, 1);
|
D2PrintPopup(maxGoldText, getXStashGoldField() + posWStashGoldField/2, getYStashGoldField() - posHStashGoldField - 2, 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)
|
||||||
@ -350,22 +464,21 @@ 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
|
||||||
@ -403,22 +516,22 @@ 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:
|
||||||
@ -474,9 +587,11 @@ 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
|
||||||
|
MOV ESP,EBP
|
||||||
|
POP EBP
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -499,69 +614,58 @@ 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);
|
|
||||||
} else {
|
|
||||||
MEMC_REF4(version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V111 ? caller_manageBtnDown_111 : caller_manageBtnDown);
|
|
||||||
}
|
|
||||||
//6FAEBBA0 > E8 DB04FCFF CALL D2Client.6FAAC080
|
//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);
|
|
||||||
} else {
|
|
||||||
MEMC_REF4(version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V111 ? caller_manageBtnUp_111 : caller_manageBtnUp);
|
|
||||||
}
|
|
||||||
//6FAEC0F8 > E8 83FFFBFF CALL D2Client.6FAAC080
|
//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
|
||||||
|
MEMT_REF4( 0xCCC35DE5, initBtnsStates_114);
|
||||||
} else {
|
} else {
|
||||||
memt_byte(0x81, 0xE9); // CALL initBtnsStates
|
memt_byte( 0x81, 0xE9 ); // CALL initBtnsStates
|
||||||
MEMT_REF4(0x000104C4, initBtnsStates);
|
MEMT_REF4( 0x000104C4, initBtnsStates);
|
||||||
memt_byte(0x00, 0x90);
|
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
|
||||||
@ -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");
|
||||||
|
|
||||||
|
@ -139,12 +139,12 @@ 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
|
||||||
}}
|
}}
|
||||||
@ -180,15 +180,15 @@ FCT_ASM ( caller_printStatsPageBtns_9 )
|
|||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM( caller_statsPageMouseDown_114 )
|
|
||||||
PUSH DWORD PTR SS : [ESP + 0x18]
|
FCT_ASM ( caller_statsPageMouseDown_114 )
|
||||||
|
PUSH DWORD PTR SS:[ESP+0x18]
|
||||||
CALL statsPageMouseDown
|
CALL statsPageMouseDown
|
||||||
TEST EAX, EAX
|
TEST EAX,EAX
|
||||||
JE fin_statsPageMouseDown
|
JE fin_statsPageMouseDown
|
||||||
MOV EAX, DWORD PTR DS : [0x7A6A70]
|
JMP D2GetClientPlayer
|
||||||
RETN
|
fin_statsPageMouseDown:
|
||||||
fin_statsPageMouseDown :
|
ADD ESP,4
|
||||||
ADD ESP, 4
|
|
||||||
POP EDI
|
POP EDI
|
||||||
POP ESI
|
POP ESI
|
||||||
POP EBX
|
POP EBX
|
||||||
@ -226,14 +226,14 @@ 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
|
||||||
@ -285,16 +285,9 @@ void Install_InterfaceStats()
|
|||||||
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);
|
memt_byte( 0x5F, 0xE9 ); // JMP
|
||||||
MEMT_REF4(0xE58B5B5E, caller_printStatsPageBtns_114);
|
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);
|
||||||
} 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
|
//6FAD0F86 . 5F POP EDI
|
||||||
//6FAD0F87 . 5E POP ESI
|
//6FAD0F87 . 5E POP ESI
|
||||||
//6FAD0F88 . 5D POP EBP
|
//6FAD0F88 . 5D POP EBP
|
||||||
@ -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))
|
{
|
||||||
|
if ((*ptCurrentLanguage >= LNG_DEF) || !((1 << *ptCurrentLanguage) & availableLanguages.all))
|
||||||
*ptCurrentLanguage = defaultLanguage;
|
*ptCurrentLanguage = defaultLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
return *ptCurrentLanguage;
|
return *ptCurrentLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,7 +42,8 @@ void Install_LanguageManagement()
|
|||||||
|
|
||||||
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 =================================*/
|
@ -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,18 +54,18 @@ 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
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -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
|
||||||
|
//if (active_sharedStash)
|
||||||
|
{
|
||||||
log_msg("Send Shared Save File\n");
|
log_msg("Send Shared Save File\n");
|
||||||
dataShared = readSharedSaveFile(name, &sizeShared);
|
DWORD sizeShared = 0;
|
||||||
|
BYTE* dataShared = readSharedSaveFile(name, &sizeShared);
|
||||||
sendData(dataShared, sizeShared, true);
|
sendData(dataShared, sizeShared, true);
|
||||||
D2FogMemDeAlloc(dataShared,__FILE__,__LINE__,0);
|
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
|
RETN
|
||||||
JMP_LoadMPlayerCustomData :
|
JMP_LoadMPlayerCustomData:
|
||||||
SUB DWORD PTR SS : [ESP], 0x10
|
SUB DWORD PTR SS:[ESP],0x10
|
||||||
RETN
|
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,12 +448,12 @@ 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
|
||||||
@ -456,6 +461,7 @@ FCT_ASM( caller_ReceiveSaveFiles_114 )
|
|||||||
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);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2FogGetSavePath, version_D2Game >= V111 ? caller_SendSaveFiles_111 : caller_SendSaveFiles);
|
|
||||||
}
|
|
||||||
|
|
||||||
//6FAAD5A1 |. E8 88D10B00 CALL <JMP.&Fog.#10115>
|
//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]
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
sLocalizedStrings[id] = new WCHAR[len + 1];
|
||||||
|
for (; i<len; i++)
|
||||||
|
{
|
||||||
|
if (buffer[i] == L'\\' && buffer[i+1] == L'n')
|
||||||
|
{
|
||||||
|
sLocalizedStrings[id][j++] = L'\n';
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
sLocalizedStrings[id][j++] = buffer[i];
|
||||||
sLocalizedStrings[id] = new WCHAR[len + 1];
|
|
||||||
wcsncpy(sLocalizedStrings[id], buffer, len);
|
|
||||||
sLocalizedStrings[id][len] = NULL;
|
|
||||||
}
|
}
|
||||||
|
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 =================================*/
|
@ -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,14 +62,19 @@ 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);
|
||||||
|
if (version_D2Launch == V114d)
|
||||||
|
{
|
||||||
memt_byte(0xB9, 0xE8);
|
memt_byte(0xB9, 0xE8);
|
||||||
MEMT_REF4(0x00000115, caller_printPlugYVersion114);
|
MEMT_REF4(0x00000115, caller_printPlugYVersion114);
|
||||||
} else {
|
childrens = (void**)(offset_Game + 0x379350);
|
||||||
// Print PlugY version.
|
sgnNumChildren = (DWORD*)(offset_Game + 0x379944);
|
||||||
mem_seek R8(D2Launch, 7F5D, 7F7D, 9639, 117C7, 178A7, 16AF7, 18061, 10A11, 10A11);
|
//00433798 |. B9 15010000 MOV ECX,115
|
||||||
MEMJ_REF4(D2CreateTextBox, caller_printPlugYVersion);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MEMJ_REF4( D2CreateTextBox, caller_printPlugYVersion);
|
||||||
//6FA19638 |. E8 1BED0000 CALL <JMP.&D2Win.#10017>
|
//6FA19638 |. E8 1BED0000 CALL <JMP.&D2Win.#10017>
|
||||||
//6FA517C6 |. E8 6F81FFFF CALL <JMP.&D2Win.#10147>
|
//6FA517C6 |. E8 6F81FFFF CALL <JMP.&D2Win.#10147>
|
||||||
//6FA578A6 |. E8 D71FFFFF CALL <JMP.&D2Win.#10113>
|
//6FA578A6 |. E8 D71FFFFF CALL <JMP.&D2Win.#10113>
|
||||||
@ -93,7 +84,6 @@ void Install_PrintPlugYVersion()
|
|||||||
//6FA50A10 |. E8 218FFFFF CALL <JMP.&D2Win.#10164>
|
//6FA50A10 |. E8 218FFFFF CALL <JMP.&D2Win.#10164>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
isInstalled = true;
|
isInstalled = true;
|
||||||
@ -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
|
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(0xCE8BC055, caller_VersionChange_114);
|
MEMT_REF4(0xCE8BC055, caller_VersionChange_114);
|
||||||
//memt_byte(0xCE, 0x90); // NOP
|
//004337EA |. 8D55 C0 LEA EDX,DWORD PTR SS:[EBP-40] ; |
|
||||||
} else if (version_D2Launch >= V110)
|
//004337ED |. 8BCE MOV ECX,ESI ; |
|
||||||
|
}
|
||||||
|
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_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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
if (extraHiddenPage>1)
|
||||||
GoStatPage(GetCurrentPage()+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)
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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,9 +299,15 @@ 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;
|
||||||
|
case 10000:
|
||||||
|
printCharacterBreakpoints(ptChar, x, y, color, lpText);
|
||||||
|
return;
|
||||||
|
case 10001:
|
||||||
|
printMercBreakpoints(ptChar, x, y, color, lpText);
|
||||||
|
return;
|
||||||
default:
|
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
|
||||||
}
|
}
|
||||||
@ -284,7 +410,6 @@ 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();
|
||||||
|
@ -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
|
|
||||||
printBorder :
|
|
||||||
MOV ESI, DWORD PTR DS : [0x7BEF18]
|
|
||||||
RETN
|
RETN
|
||||||
|
printBorder:
|
||||||
|
POP ECX
|
||||||
|
PUSH 0x48
|
||||||
|
LEA EAX,DWORD PTR SS:[EBP-0x48]
|
||||||
|
JMP ECX
|
||||||
}}
|
}}
|
||||||
|
|
||||||
FCT_ASM ( caller_DontPrintBorder_111 )
|
FCT_ASM ( caller_DontPrintBorder_111 )
|
||||||
@ -132,24 +131,24 @@ 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
|
||||||
@ -225,24 +224,24 @@ 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
|
||||||
}}
|
}}
|
||||||
@ -317,10 +316,17 @@ end_mouseNewPageLUp:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
FCT_ASM( caller_resetSelectedPageByToolBar_114 )
|
FCT_ASM ( caller_resetSelected_114 )
|
||||||
|
CMP ECX,2
|
||||||
|
JNZ NO_RESET
|
||||||
MOV selectedPage, 0
|
MOV selectedPage, 0
|
||||||
MOV EDX, 2
|
NO_RESET:
|
||||||
RETN
|
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
|
||||||
@ -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)
|
|
||||||
{
|
|
||||||
//case V107: //"v 1.07"
|
|
||||||
//case V108: //"v 1.08"
|
|
||||||
//case V109: //"v 1.09"
|
|
||||||
case V109b: //"v 1.09"
|
|
||||||
case V109d: //"v 1.09"
|
|
||||||
//case V110: //"v 1.10"
|
|
||||||
//case V111: //"v 1.11"
|
|
||||||
case V111b: //"v 1.11"
|
|
||||||
//case V112: //"v 1.12"
|
|
||||||
case V113c: //"v 1.13"
|
|
||||||
case V113d: //"v 1.13"
|
|
||||||
case V114a: //"v 1.14"
|
|
||||||
//case V114b: //"v 1.14b"
|
|
||||||
//case V114c: //"v 1.14c"
|
|
||||||
//case V114d: //"v 1.14d"
|
|
||||||
strcpy(buffer, "v ");
|
strcpy(buffer, "v ");
|
||||||
strcat(buffer, GetVersionString(version_D2Game));
|
strcat(buffer, GetVersionString(version_D2Game));
|
||||||
break;
|
//switch(version_D2Game)
|
||||||
default:
|
//{
|
||||||
active_VersionTextChange=0;
|
////case V107: //"v 1.07"
|
||||||
}
|
////case V108: //"v 1.08"
|
||||||
|
////case V109: //"v 1.09"
|
||||||
|
//case V109b: //"v 1.09"
|
||||||
|
//case V109d: //"v 1.09"
|
||||||
|
////case V110: //"v 1.10"
|
||||||
|
////case V111: //"v 1.11"
|
||||||
|
//case V111b: //"v 1.11"
|
||||||
|
////case V112: //"v 1.12"
|
||||||
|
//case V113c: //"v 1.13"
|
||||||
|
//case V113d: //"v 1.13"
|
||||||
|
//case V114a: //"v 1.14"
|
||||||
|
////case V114b: //"v 1.14b"
|
||||||
|
////case V114c: //"v 1.14c"
|
||||||
|
////case V114d: //"v 1.14d"
|
||||||
|
// strcpy(buffer, "v ");
|
||||||
|
// strcat(buffer, GetVersionString(version_D2Game));
|
||||||
|
// 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,7 +561,7 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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,71 +592,179 @@ 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);
|
||||||
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPreviousBtn,"-1");
|
|
||||||
posXPreviousBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPreviousBtn,"-1");
|
|
||||||
posYPreviousBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXNextBtn,"-1");
|
|
||||||
posXNextBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYNextBtn,"-1");
|
|
||||||
posYNextBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXSharedBtn,"-1");
|
|
||||||
posXSharedBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYSharedBtn,"-1");
|
|
||||||
posYSharedBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPreviousIndexBtn,"-1");
|
|
||||||
posXPreviousIndexBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPreviousIndexBtn,"-1");
|
|
||||||
posYPreviousIndexBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXNextIndexBtn,"-1");
|
|
||||||
posXNextIndexBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYNextIndexBtn,"-1");
|
|
||||||
posYNextIndexBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPutGoldBtn,"-1");
|
|
||||||
posXPutGoldBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPutGoldBtn,"-1");
|
|
||||||
posYPutGoldBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXTakeGoldBtn,"-1");
|
|
||||||
posXTakeGoldBtn = atoi(buffer);
|
|
||||||
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYTakeGoldBtn,"-1");
|
|
||||||
posYTakeGoldBtn = atoi(buffer);
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (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");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_openSharedStashOnLoading, "0");
|
||||||
openSharedStashOnLoading = atoi(buffer) != 0;
|
openSharedStashOnLoading = atoi(buffer) != 0;
|
||||||
log_msg("openSharedStashOnLoading\t\t= %u\n", openSharedStashOnLoading);
|
log_msg("openSharedStashOnLoading\t\t= %u\n", openSharedStashOnLoading);
|
||||||
|
|
||||||
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_sharedStashFilename, "SharedStashSave");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_sharedStashFilename, "SharedStashSave");
|
||||||
sharedStashFilename = (char*)D2FogMemAlloc(strlen(buffer)+1,__FILE__,__LINE__,0);
|
sharedStashFilename = (char*)D2FogMemAlloc(strlen(buffer)+1,__FILE__,__LINE__,0);
|
||||||
strcpy(sharedStashFilename, buffer);
|
strcpy(sharedStashFilename, buffer);
|
||||||
log_msg("sharedStashFilename\t\t\t= %s\n", sharedStashFilename);
|
log_msg("sharedStashFilename\t\t\t= %s\n", sharedStashFilename);
|
||||||
|
|
||||||
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_displaySharedSetItemNameInGreen, "1");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_displaySharedSetItemNameInGreen, "1");
|
||||||
displaySharedSetItemNameInGreen = atoi(buffer) != 0;
|
displaySharedSetItemNameInGreen = atoi(buffer) != 0;
|
||||||
log_msg("displaySharedSetItemNameInGreen = %u\n", displaySharedSetItemNameInGreen);
|
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");
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_active_sharedGold, "1");
|
||||||
active_sharedGold = atoi(buffer) != 0;
|
active_sharedGold = atoi(buffer) != 0;
|
||||||
log_msg("active_sharedGold\t\t\t= %u\n", active_sharedGold);
|
log_msg("active_sharedGold\t\t\t= %u\n", active_sharedGold);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXPreviousBtn,"-1");
|
||||||
|
posXPreviousBtn = atoi(buffer);
|
||||||
|
log_msg("posXPreviousBtn\t\t\t= %d\n", posXPreviousBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPreviousBtn,"-1");
|
||||||
|
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");
|
||||||
|
posXNextBtn = atoi(buffer);
|
||||||
|
log_msg("posXNextBtn\t\t\t= %d\n", posXNextBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYNextBtn,"-1");
|
||||||
|
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");
|
||||||
|
posXSharedBtn = atoi(buffer);
|
||||||
|
log_msg("posXSharedBtn\t\t\t= %d\n", posXSharedBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYSharedBtn,"-1");
|
||||||
|
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");
|
||||||
|
posXPreviousIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posXPreviousIndexBtn\t\t\t= %d\n", posXPreviousIndexBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPreviousIndexBtn,"-1");
|
||||||
|
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");
|
||||||
|
posXNextIndexBtn = atoi(buffer);
|
||||||
|
log_msg("posXNextIndexBtn\t\t\t= %d\n", posXNextIndexBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYNextIndexBtn,"-1");
|
||||||
|
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");
|
||||||
|
posXPutGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posXPutGoldBtn\t\t\t= %d\n", posXPutGoldBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYPutGoldBtn,"-1");
|
||||||
|
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");
|
||||||
|
posXTakeGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posXTakeGoldBtn\t\t\t= %d\n", posXTakeGoldBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYTakeGoldBtn,"-1");
|
||||||
|
posYTakeGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posYTakeGoldBtn\t\t\t= %d\n", posYTakeGoldBtn);
|
||||||
|
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");
|
||||||
|
posHTakeGoldBtn = atoi(buffer);
|
||||||
|
log_msg("posHTakeGoldBtn\t\t\t= %d\n", posHTakeGoldBtn);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXStashNameField,"-1");
|
||||||
|
posXStashNameField = atoi(buffer);
|
||||||
|
log_msg("posXStashNameField\t\t\t= %d\n", posXStashNameField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYStashNameField,"-1");
|
||||||
|
posYStashNameField = atoi(buffer);
|
||||||
|
log_msg("posYStashNameField\t\t\t= %d\n", posYStashNameField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWStashNameField,"175");
|
||||||
|
posWStashNameField = atoi(buffer);
|
||||||
|
log_msg("posWStashNameField\t\t\t= %d\n", posWStashNameField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHStashNameField,"20");
|
||||||
|
posHStashNameField = atoi(buffer);
|
||||||
|
log_msg("posHStashNameField\t\t\t= %d\n", posHStashNameField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posXStashGoldField,"-1");
|
||||||
|
posXStashGoldField = atoi(buffer);
|
||||||
|
log_msg("posXStashGoldField\t\t\t= %d\n", posXStashGoldField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posYStashGoldField,"-1");
|
||||||
|
posYStashGoldField = atoi(buffer);
|
||||||
|
log_msg("posYStashGoldField\t\t\t= %d\n", posYStashGoldField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posWStashGoldField,"152");
|
||||||
|
posWStashGoldField = atoi(buffer);
|
||||||
|
log_msg("posWStashGoldField\t\t\t= %d\n", posWStashGoldField);
|
||||||
|
GET_PRIVATE_PROFILE_STRING(S_STASH, S_posHStashGoldField,"18");
|
||||||
|
posHStashGoldField = atoi(buffer);
|
||||||
|
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,15 +815,17 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (active_SkillsPoints)
|
||||||
|
{
|
||||||
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_posXUnassignSkillBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_posXUnassignSkillBtn,"-1");
|
||||||
posXUnassignSkillBtn = atoi(buffer);
|
posXUnassignSkillBtn = atoi(buffer);
|
||||||
log_msg("posXUnassignSkillBtn\t\t\t= %d\n", posXUnassignSkillBtn);
|
log_msg("posXUnassignSkillBtn\t\t\t= %d\n", posXUnassignSkillBtn);
|
||||||
@ -658,7 +833,7 @@ void init_SkillsPoints(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefa
|
|||||||
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_posYUnassignSkillBtn,"-1");
|
GET_PRIVATE_PROFILE_STRING(S_SKILLS_POINTS, S_posYUnassignSkillBtn,"-1");
|
||||||
posYUnassignSkillBtn = atoi(buffer);
|
posYUnassignSkillBtn = atoi(buffer);
|
||||||
log_msg("posXUnassignSkillBtn\t\t\t= %d\n", posYUnassignSkillBtn);
|
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)
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
@ -29,7 +29,9 @@ Stash* getStashFromItem(Unit* ptChar, Unit* ptItem)
|
|||||||
{
|
{
|
||||||
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;
|
||||||
@ -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 ****************************/
|
||||||
@ -163,29 +173,10 @@ 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);
|
|
||||||
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
|
RETN 4
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -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,13 +213,13 @@ 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
|
||||||
}}
|
}}
|
||||||
@ -260,9 +235,9 @@ 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
|
||||||
}}
|
}}
|
||||||
@ -288,9 +263,9 @@ 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
|
||||||
}}
|
}}
|
||||||
@ -320,7 +295,7 @@ 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();
|
||||||
@ -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);
|
|
||||||
} 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>
|
//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);
|
|
||||||
} 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>
|
//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,39 +1,18 @@
|
|||||||
|
|
||||||
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
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugY", "PlugY.vcxproj", "{EB63DF4E-A019-4522-A140-9E8C7350B331}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugYInstall", "..\PlugYInstall\PlugYInstall.vcxproj", "{66A1FF3D-F0DC-4D2D-BDB9-1A853A20C42D}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugYRun", "..\PlugYRun\PlugYRun.vcxproj", "{1DF62C54-02A0-4E13-A5DC-F975DFBE03FC}"
|
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Win32 = Debug|Win32
|
Debug|Win32 = Debug|Win32
|
||||||
Release|Win32 = Release|Win32
|
Release|Win32 = Release|Win32
|
||||||
Restore|Win32 = Restore|Win32
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Debug|Win32.ActiveCfg = Debug|Win32
|
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Debug|Win32.Build.0 = Debug|Win32
|
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{EB63DF4E-A019-4522-A140-9E8C7350B331}.Release|Win32.ActiveCfg = Release|Win32
|
{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}.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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
BIN
PlugY/PlugY.suo
BIN
PlugY/PlugY.suo
Binary file not shown.
@ -159,7 +159,7 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"
|
Name="VCPostBuildEventTool"
|
||||||
CommandLine="copy "$(TargetPath)" "..\PlugYInstaller\PlugY.dll"
"
|
CommandLine="copy "$(TargetPath)" "..\PlugYInstaller\PlugY.dll""
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
|
@ -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,18 +92,37 @@ 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 EDX
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
CALL isModFile
|
CALL isModFile_114
|
||||||
TEST EAX, EAX
|
POP EDX
|
||||||
|
TEST EAX,EAX
|
||||||
JE ISNOTMODDATA
|
JE ISNOTMODDATA
|
||||||
MOV EDX, 0x00100001
|
MOV EDX,1 // Active -direct command
|
||||||
JMP ALLDONE
|
ISNOTMODDATA:
|
||||||
ISNOTMODDATA :
|
LEA EAX,DWORD PTR SS:[EBP-0x108]
|
||||||
MOV EDX, DWORD PTR SS : [EBP + 0x10]
|
|
||||||
ALLDONE :
|
|
||||||
LEA EAX, DWORD PTR SS : [EBP - 0x108]
|
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -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" );
|
||||||
|
|
||||||
@ -158,23 +191,23 @@ void STDCALL loadCustomImages()
|
|||||||
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 )
|
||||||
|
PUSH ECX
|
||||||
CALL loadCustomImages
|
CALL loadCustomImages
|
||||||
POP EAX
|
POP ECX
|
||||||
PUSH 0x6CC8B8
|
JMP D2LoadResImage
|
||||||
JMP EAX
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
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);
|
{
|
||||||
|
MEMC_REF4( D2LoadResImage , caller_loadCustomImages_114);
|
||||||
|
//0049692E |. E8 8DB7FBFF CALL Game.004520C0
|
||||||
|
} else {
|
||||||
|
memt_byte( 0xB9 ,0xE8);
|
||||||
|
MEMT_REF4( 0x0000000C , caller_loadCustomImages);
|
||||||
//6FAFE4B1 |. B9 0C000000 MOV ECX,0C
|
//6FAFE4B1 |. B9 0C000000 MOV ECX,0C
|
||||||
//6FADE101 |. B9 0C000000 MOV ECX,0C
|
//6FADE101 |. B9 0C000000 MOV ECX,0C
|
||||||
//6FB667E1 |. B9 0C000000 MOV ECX,0C
|
//6FB667E1 |. B9 0C000000 MOV ECX,0C
|
||||||
//6FB32761 |. B9 0C000000 MOV ECX,0C
|
//6FB32761 |. B9 0C000000 MOV ECX,0C
|
||||||
//6FAD7EAE |. B9 0C000000 MOV ECX,0C
|
//6FAD7EAE |. B9 0C000000 MOV ECX,0C
|
||||||
//6FB1E0BE |. 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);
|
{
|
||||||
|
MEMC_REF4( D2FreeResImages , caller_freeCustomImages_114);
|
||||||
|
//00456DEC . E8 9FFB0300 CALL Game.00496990
|
||||||
|
} else {
|
||||||
|
memt_byte( 0xB9 ,0xE8);
|
||||||
|
MEMT_REF4( 0x0000000C , caller_freeCustomImages);
|
||||||
//6FAFE639 |> B9 0C000000 MOV ECX,0C
|
//6FAFE639 |> B9 0C000000 MOV ECX,0C
|
||||||
//6FADD12D |> B9 0C000000 MOV ECX,0C
|
//6FADD12D |> B9 0C000000 MOV ECX,0C
|
||||||
//6FB6580D |> B9 0C000000 MOV ECX,0C
|
//6FB6580D |> B9 0C000000 MOV ECX,0C
|
||||||
//6FB3158D |> B9 0C000000 MOV ECX,0C
|
//6FB3158D |> B9 0C000000 MOV ECX,0C
|
||||||
//6FAD6F8D |> B9 0C000000 MOV ECX,0C
|
//6FAD6F8D |> B9 0C000000 MOV ECX,0C
|
||||||
//6FB1D07D |> 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" );
|
||||||
|
|
||||||
|
@ -56,37 +56,41 @@ FCT_ASM( changeSavePath_114 )
|
|||||||
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
|
||||||
|
CALL DWORD PTR[GetFileAttributesA]
|
||||||
|
CMP EAX,-1
|
||||||
JE DONOT_JMP
|
JE DONOT_JMP
|
||||||
ADD DWORD PTR SS : [ESP], 5
|
ADD DWORD PTR SS:[ESP],0x5
|
||||||
DONOT_JMP :
|
RETN
|
||||||
|
DONOT_JMP:
|
||||||
|
ADD DWORD PTR SS:[ESP],0x1D
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -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,20 +180,21 @@ 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
|
||||||
|
if (version_Fog < V114a)
|
||||||
|
{
|
||||||
mem_seek R8(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6, 1E166, 71CA);
|
mem_seek R8(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6, 1E166, 71CA);
|
||||||
if (version_Fog == V114d) {
|
MEMJ_REF4( D2Storm503, forCreateSavePath);
|
||||||
MEMT_REF4(0x0000C582, forCreateSavePath_114);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(D2Storm503, forCreateSavePath);
|
|
||||||
}
|
|
||||||
//6FF68615 . E8 A246FFFF CALL <JMP.&Storm.#503>
|
//6FF68615 . E8 A246FFFF CALL <JMP.&Storm.#503>
|
||||||
//6FF6C125 . E8 C20BFFFF CALL <JMP.&Storm.#503>
|
//6FF6C125 . E8 C20BFFFF CALL <JMP.&Storm.#503>
|
||||||
//6FF6F0A5 . E8 34DDFEFF CALL <JMP.&Storm.#503>
|
//6FF6F0A5 . E8 34DDFEFF CALL <JMP.&Storm.#503>
|
||||||
//6FF67FA5 . E8 504EFFFF CALL <JMP.&Storm.#503>
|
//6FF67FA5 . E8 504EFFFF CALL <JMP.&Storm.#503>
|
||||||
//6FF6E165 . E8 6AEBFEFF CALL <JMP.&Storm.#503>
|
//6FF6E165 . E8 6AEBFEFF CALL <JMP.&Storm.#503>
|
||||||
|
//004071C9 |. E8 82C50000 CALL Game.00413750 ; \Game.00413750
|
||||||
|
}
|
||||||
|
|
||||||
// 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);
|
||||||
@ -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,7 +232,7 @@ 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>
|
||||||
|
@ -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,6 +160,11 @@ void STDCALL SaveSPPlayerCustomData(Unit* ptChar)
|
|||||||
|
|
||||||
log_msg("\n--- Start SaveSPPlayerCustomData ---\n");
|
log_msg("\n--- Start SaveSPPlayerCustomData ---\n");
|
||||||
|
|
||||||
|
NetClient* ptClient = D2GetClient(ptChar,__FILE__,__LINE__);
|
||||||
|
backupSaveFiles(PCPlayerData->name, ptClient->isHardCoreGame);
|
||||||
|
|
||||||
|
if (active_PlayerCustomData)
|
||||||
|
{
|
||||||
if (PCPY->selfStashIsOpened)
|
if (PCPY->selfStashIsOpened)
|
||||||
{
|
{
|
||||||
DWORD curSizeExt = 0;
|
DWORD curSizeExt = 0;
|
||||||
@ -38,27 +184,45 @@ void STDCALL SaveSPPlayerCustomData(Unit* ptChar)
|
|||||||
d2_assert(!dataShr, "Error : Memory allocation Shared SaveFile", __FILE__, __LINE__);
|
d2_assert(!dataShr, "Error : Memory allocation Shared SaveFile", __FILE__, __LINE__);
|
||||||
saveSharedSaveFile(ptChar, &dataShr, &maxSizeShr, &curSizeShr);
|
saveSharedSaveFile(ptChar, &dataShr, &maxSizeShr, &curSizeShr);
|
||||||
|
|
||||||
NetClient* ptClient = D2GetClient(ptChar,__FILE__,__LINE__);
|
|
||||||
writeSharedSaveFile(PCPlayerData->name, dataShr, curSizeShr, ptClient->isHardCoreGame );
|
writeSharedSaveFile(PCPlayerData->name, dataShr, curSizeShr, ptClient->isHardCoreGame );
|
||||||
D2FreeMem(PCGame->memoryPool, dataShr,__FILE__,__LINE__,0);
|
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]
|
||||||
|
TEST EAX,EAX
|
||||||
|
JE next
|
||||||
|
PUSH ECX
|
||||||
|
PUSH EDX
|
||||||
|
PUSH EDX
|
||||||
CALL SaveSPPlayerCustomData
|
CALL SaveSPPlayerCustomData
|
||||||
RETN
|
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)) )
|
||||||
|
{
|
||||||
|
log_msg("SaveMPPlayerCustomData - Saving can start\n");
|
||||||
if (ptChar)
|
if (ptChar)
|
||||||
{
|
{
|
||||||
writeExtendedSaveFile(PCPlayerData->name, receivedSaveFiles.dataExtended, receivedSaveFiles.sizeExtended);
|
writeExtendedSaveFile(PCPlayerData->name, receivedSaveFiles.dataExtended, receivedSaveFiles.sizeExtended);
|
||||||
D2FogMemDeAlloc(receivedSaveFiles.dataExtended,__FILE__,__LINE__,0);
|
D2FogMemDeAlloc(receivedSaveFiles.dataExtended,__FILE__,__LINE__,0);
|
||||||
if (active_sharedStash)
|
if (active_sharedStash)
|
||||||
|
{
|
||||||
writeSharedSaveFile(PCPlayerData->name, receivedSaveFiles.dataShared, receivedSaveFiles.sizeShared, (dataD2Savefile[0x24] & 4) == 4);//6FBAB9A4-6FAA0000
|
writeSharedSaveFile(PCPlayerData->name, receivedSaveFiles.dataShared, receivedSaveFiles.sizeShared, (dataD2Savefile[0x24] & 4) == 4);//6FBAB9A4-6FAA0000
|
||||||
D2FogMemDeAlloc(receivedSaveFiles.dataShared,__FILE__,__LINE__,0);
|
D2FogMemDeAlloc(receivedSaveFiles.dataShared,__FILE__,__LINE__,0);
|
||||||
|
}
|
||||||
ZeroMemory(&receivedSaveFiles,sizeof(receivedSaveFiles));
|
ZeroMemory(&receivedSaveFiles,sizeof(receivedSaveFiles));
|
||||||
}
|
}
|
||||||
log_msg("Receive Savefiles completed\n\n");
|
log_msg("SaveMPPlayerCustomData - Receive Savefiles completed\n\n");
|
||||||
} else {
|
} else {
|
||||||
if (ptChar)
|
if (ptChar)
|
||||||
{
|
{
|
||||||
log_box("Connection error : back up current save file then save with client data.");
|
log_box("Connection error : save with client data.");
|
||||||
backupSharedSaveFile();
|
|
||||||
backupExtendedSaveFile(PCPlayerData->name);
|
|
||||||
SaveSPPlayerCustomData(ptChar);
|
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,44 +706,45 @@ 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
|
||||||
|
//6FC64600 |. E8 3BFBFFFF CALL D2Game.6FC64140
|
||||||
|
//6FC743D0 |. E8 3BFBFFFF CALL D2Game.6FC73F10
|
||||||
|
//6FC59CD0 |. E8 3BFBFFFF CALL D2Game.6FC59810
|
||||||
|
//005324EB |. E8 50FDFFFF CALL Game.00532240 ; \Game.00532240
|
||||||
}
|
}
|
||||||
|
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>
|
//6FC8A623 E8 3E210900 CALL <JMP.&Fog.#10115>
|
||||||
//02039364 |. E8 3B0FF5FF CALL <JMP.&Fog.#10115>
|
//02039364 |. E8 3B0FF5FF CALL <JMP.&Fog.#10115>
|
||||||
//01F95474 |. E8 C34EFEFF CALL <JMP.&Fog.#10115>
|
//01F95474 |. E8 C34EFEFF CALL <JMP.&Fog.#10115>
|
||||||
//6FC64164 |. E8 EB61FCFF CALL <JMP.&Fog.#10115>
|
//6FC64164 |. E8 EB61FCFF CALL <JMP.&Fog.#10115>
|
||||||
//6FC73F34 |. E8 DD63FBFF CALL <JMP.&Fog.#10115>
|
//6FC73F34 |. E8 DD63FBFF CALL <JMP.&Fog.#10115>
|
||||||
//6FC59834 |. E8 FB0AFDFF CALL <JMP.&Fog.#10115>
|
//6FC59834 |. E8 FB0AFDFF CALL <JMP.&Fog.#10115>
|
||||||
|
//00532275 |. E8 D64DEDFF CALL Game.00407050
|
||||||
if (version_D2Game == V114d) {
|
|
||||||
// Save multiplayer player custom data.
|
|
||||||
mem_seek R8(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, AC572, 829C2, 5C565);
|
|
||||||
memt_byte(0x81, 0xE8); // CALL
|
|
||||||
MEMT_REF4(0x55AA55F9, caller_SaveMPPlayerCustomData_114);
|
|
||||||
memt_byte(0xAA, 0x90); // CALL
|
|
||||||
log_msg("\n");
|
|
||||||
isInstalled = true;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (active_PlayerCustomData)
|
||||||
|
{
|
||||||
//Send SaveFiles
|
//Send SaveFiles
|
||||||
mem_seek R8(D2Game, 4DFFA, 4E3FA, 5A720, B92DB, 253EB, 440DB, 53EAB, 397AB, 132398);
|
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 >= V111 ? 0x44 : version_D2Game != V109b ? 0x7C : 0x74 ,0xE8); // CALL
|
memt_byte( version_D2Game >= V114d ? 0xBD : version_D2Game >= V111 ? 0x44 : version_D2Game != V109b ? 0x7C : 0x74, 0xE8); // CALL
|
||||||
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);
|
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);
|
||||||
//6FC8A720 |. 8B7C24 10 MOV EDI,DWORD PTR SS:[ESP+10]
|
//6FC8A720 |. 8B7C24 10 MOV EDI,DWORD PTR SS:[ESP+10]
|
||||||
//6FC8A724 |. 85FF TEST EDI,EDI
|
//6FC8A724 |. 85FF TEST EDI,EDI
|
||||||
//020392DB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
//020392DB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||||
@ -613,8 +757,9 @@ void Install_SavePlayerData()
|
|||||||
//6FC73EAF |. 85C0 TEST EAX,EAX
|
//6FC73EAF |. 85C0 TEST EAX,EAX
|
||||||
//6FC597AB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
//6FC597AB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||||
//6FC597AF |. 85C0 TEST EAX,EAX
|
//6FC597AF |. 85C0 TEST EAX,EAX
|
||||||
|
//00532398 |. 8BBD F8DFFFFF MOV EDI,DWORD PTR SS:[EBP-2008]
|
||||||
|
|
||||||
mem_seek R8(D2Game, 7993, 7A13, 7BBB, E2943, E6D83, A89D3, 2D173, BEDD3, 138FEC/*12E110*/);
|
mem_seek R8(D2Game, 7993, 7A13, 7BBB, E2943, E6D83, A89D3, 2D173, BEDD3, 12E13E);
|
||||||
memt_byte( 0x8B ,0x90); // NOP
|
memt_byte( 0x8B ,0x90); // NOP
|
||||||
memt_byte( version_D2Game >= V110 ? 0x8E : 0x86 ,0xE8); // CALL
|
memt_byte( version_D2Game >= V110 ? 0x8E : 0x86 ,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 >= V110 ? 0x0000017C : version_D2Game == V109d ? 0x0000174 : 0x00000150, version_D2Game >= V110 ? caller_ManageNextPacketToSend : version_D2Game == V109d ? caller_ManageNextPacketToSend_9d : caller_ManageNextPacketToSend_9);
|
||||||
@ -624,18 +769,24 @@ void Install_SavePlayerData()
|
|||||||
//6FCC89D3 |. 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]
|
//6FC4D173 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
//6FCDEDD3 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
//6FCDEDD3 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
|
//0052E13E |> 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||||
|
|
||||||
// mem_seek R7(D2Game, 7B82, 7C05, 7DCF, 0000, 0000, 0000, 0000);//117FC, 117EC, 11DBC
|
// mem_seek R7(D2Game, 7B82, 7C05, 7DCF, 0000, 0000, 0000, 0000);//117FC, 117EC, 11DBC
|
||||||
// memt_byte( 0x8B ,0xE8); // CALL
|
// memt_byte( 0x8B ,0xE8); // CALL
|
||||||
// MEMT_REF4( (version_D2Game == V110) ? 0x50CD8BD3 : 0x50CF8BD3, (version_D2Game == V110) ? caller_SendSaveFilesToSave : caller_SendSaveFilesToSave_9);
|
// MEMT_REF4( (version_D2Game == V110) ? 0x50CD8BD3 : 0x50CF8BD3, (version_D2Game == V110) ? caller_SendSaveFilesToSave : caller_SendSaveFilesToSave_9);
|
||||||
//6FC37DCF |. 8BD3 |MOV EDX,EBX
|
//6FC37DCF |. 8BD3 |MOV EDX,EBX
|
||||||
//6FC37DD1 |. 8BCD |MOV ECX,EBP
|
//6FC37DD1 |. 8BCD |MOV ECX,EBP
|
||||||
//6FC37DD3 |. 50 |PUSH EAX
|
//6FC37DD3 |. 50 |PUSH EAX
|
||||||
|
|
||||||
if ( version_D2Game >= V111 )
|
|
||||||
{
|
|
||||||
//Received SaveFiles
|
//Received SaveFiles
|
||||||
mem_seek R8(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 43946, 448E6, 448E6);
|
mem_seek R8(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 43946, 448E6, 4C70D);
|
||||||
|
if ( version_D2Game >= V114a )
|
||||||
|
{
|
||||||
|
MEMC_REF4( D2ReceivePacket, caller_ReceivedSaveFilesToSave_114);
|
||||||
|
//0044C70C |. E8 3F010100 |CALL Game.0045C850
|
||||||
|
}
|
||||||
|
else if ( version_D2Game >= V111 )
|
||||||
|
{
|
||||||
memt_byte( 0x0F ,0xE8);
|
memt_byte( 0x0F ,0xE8);
|
||||||
MEMT_REF4( 0x0C2444B6, caller_ReceivedSaveFilesToSave_111);
|
MEMT_REF4( 0x0C2444B6, caller_ReceivedSaveFilesToSave_111);
|
||||||
//6FB39246 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
//6FB39246 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||||
@ -643,9 +794,19 @@ void Install_SavePlayerData()
|
|||||||
//6FB2BCD6 |. 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]
|
//6FAF3946 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||||
//6FAF48E6 |. 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 )
|
||||||
|
{
|
||||||
// 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
|
||||||
|
@ -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];
|
||||||
@ -157,40 +155,6 @@ void writeSharedSaveFile(char* name, BYTE* data, DWORD size, bool isHardcore)
|
|||||||
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;
|
||||||
|
@ -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
|
||||||
@ -37,17 +44,14 @@ void Install_SkillPerLevelUp()
|
|||||||
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);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(V2AddPlayerStat, version_D2Game >= V111 ? caller_changeSkillPerLevelUp_111 : caller_changeSkillPerLevelUp);
|
|
||||||
//6FC7ED5F |. E8 56CB0900 CALL <JMP.&D2Common.#10518>
|
//6FC7ED5F |. E8 56CB0900 CALL <JMP.&D2Common.#10518>
|
||||||
//02057AE4 |. E8 9F28F3FF CALL <JMP.&D2Common.#10109>
|
//02057AE4 |. E8 9F28F3FF CALL <JMP.&D2Common.#10109>
|
||||||
//01FE9694 |. E8 1B0DF9FF CALL <JMP.&D2Common.#10627>
|
//01FE9694 |. E8 1B0DF9FF CALL <JMP.&D2Common.#10627>
|
||||||
//6FCCA454 |. E8 5F01F6FF CALL <JMP.&D2Common.#10762>
|
//6FCCA454 |. E8 5F01F6FF CALL <JMP.&D2Common.#10762>
|
||||||
//6FD0B1E4 |. E8 E9F2F1FF CALL <JMP.&D2Common.#10551>
|
//6FD0B1E4 |. E8 E9F2F1FF CALL <JMP.&D2Common.#10551>
|
||||||
//6FD0DCA4 |. E8 FDC6F1FF CALL <JMP.&D2Common.#10645>
|
//6FD0DCA4 |. E8 FDC6F1FF CALL <JMP.&D2Common.#10645>
|
||||||
}
|
//005709D0 |. E8 DB680B00 CALL Game.006272B0 ; \Game.006272B0
|
||||||
|
|
||||||
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;
|
||||||
|
@ -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
|
||||||
@ -35,17 +42,14 @@ void Install_StatPerLevelUp()
|
|||||||
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);
|
|
||||||
} else {
|
|
||||||
MEMJ_REF4(V2AddPlayerStat, version_D2Game >= V111 ? caller_changeStatPerLevelUp_111 : caller_changeStatPerLevelUp);
|
|
||||||
//6FC7ED54 |. E8 61CB0900 CALL <JMP.&D2Common.#10518>
|
//6FC7ED54 |. E8 61CB0900 CALL <JMP.&D2Common.#10518>
|
||||||
//02057AD9 |. E8 AA28F3FF CALL <JMP.&D2Common.#10109>
|
//02057AD9 |. E8 AA28F3FF CALL <JMP.&D2Common.#10109>
|
||||||
//01FE9689 |. E8 260DF9FF CALL <JMP.&D2Common.#10627>
|
//01FE9689 |. E8 260DF9FF CALL <JMP.&D2Common.#10627>
|
||||||
//6FCCA449 |. E8 6A01F6FF CALL <JMP.&D2Common.#10762>
|
//6FCCA449 |. E8 6A01F6FF CALL <JMP.&D2Common.#10762>
|
||||||
//6FD0B1D9 |. E8 F4F2F1FF CALL <JMP.&D2Common.#10551>
|
//6FD0B1D9 |. E8 F4F2F1FF CALL <JMP.&D2Common.#10551>
|
||||||
//6FD0DC99 |. E8 08C7F1FF CALL <JMP.&D2Common.#10645>
|
//6FD0DC99 |. E8 08C7F1FF CALL <JMP.&D2Common.#10645>
|
||||||
}
|
//005709C5 |. E8 E6680B00 CALL Game.006272B0 ; \Game.006272B0
|
||||||
|
|
||||||
log_msg("\n");
|
log_msg("\n");
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
|
||||||
@ -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));
|
||||||
|
if (active_DisplayBaseStatsValue)
|
||||||
|
{
|
||||||
wcscat(text,L"\n");
|
wcscat(text,L"\n");
|
||||||
int len = wcslen(text);
|
int len = wcslen(text);
|
||||||
_snwprintf(text + len, sizeof(text) - len, getLocalString(STR_STATS_BASE_MIN), statValue, minValue);
|
_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,9 +254,9 @@ 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
|
||||||
@ -298,16 +302,16 @@ 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
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -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);
|
||||||
} else {
|
//004A7863 > 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
|
||||||
memt_byte(0x6B, 0xE8);
|
//004A7866 . 8D0CC5 0000000>LEA ECX,DWORD PTR DS:[EAX*8]
|
||||||
MEMT_REF4(0x01BF0ED2, caller_pushDown_111);
|
|
||||||
memt_byte(0x00, 0x6B); // IMUL EDX,EDX,0E
|
|
||||||
memt_byte(0x00, 0xD2);
|
|
||||||
memt_byte(0x00, 0x0E);
|
|
||||||
}
|
}
|
||||||
|
else if ( version_D2Client >= V111 )
|
||||||
|
{
|
||||||
|
// On Push down.
|
||||||
|
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");
|
||||||
|
|
||||||
|
@ -7,44 +7,10 @@
|
|||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
|
|
||||||
|
#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
|
||||||
@ -52,6 +18,53 @@ void* FASTCALL D2Game01F81090(Room* ptRoom, DWORD x, DWORD y);//0x1090
|
|||||||
#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,109 +221,238 @@ 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)
|
||||||
{
|
|
||||||
case LEVEL_ACT5_PANDEMONIUM1:
|
|
||||||
if (!questState.uber1Spawned)
|
|
||||||
{
|
|
||||||
Room* ptTargetRoom = selectRoom(PCGame, ptRoom, LEVEL_ACT5_PANDEMONIUM1);
|
|
||||||
D2SpawnMonster(PCGame, ptTargetRoom, 0, 0, 0, -1, 707, 0);
|
|
||||||
questState.uber1Spawned = 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LEVEL_ACT5_PANDEMONIUM2:
|
|
||||||
if (!questState.uber2Spawned)
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
void FASTCALL uberMephIA(Game* ptGame, Unit* ptMonster, DWORD* ptData)
|
|
||||||
{
|
{
|
||||||
D2MephIA(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)
|
||||||
|
{
|
||||||
|
//log_msg("GetNbMonsters ++ / type:%d - id:%d - mode:%d\n", unit->nUnitType, unit->nTxtFileNo, unit->mode);
|
||||||
|
nbMonsters++;
|
||||||
|
}
|
||||||
|
//else log_msg("GetNbMonsters no / type:%d - id:%d - mode:%d\n", unit->nUnitType, unit->nTxtFileNo, unit->mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nbMonsters;
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
POPAD
|
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@ -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(0x005FD200, uberBaalIA);
|
MEMT_DWORD( D2UberBaalAI , uberBaalAI);
|
||||||
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(0x005F81C0, uberMephIA);
|
MEMT_DWORD( D2UberMephAI , uberMephAI);
|
||||||
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(0x005E9DF0, uberDiabloIA);
|
MEMT_DWORD( D2UberDiabloAI , uberDiabloAI);
|
||||||
} 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 =================================*/
|
@ -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__);
|
||||||
|
|
||||||
@ -62,17 +62,21 @@ DWORD FASTCALL handleClientUpdate(DataPacket* packet)
|
|||||||
{
|
{
|
||||||
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
|
|
||||||
MOV ESP, EBP
|
|
||||||
POP EBP
|
POP EBP
|
||||||
RETN
|
RETN
|
||||||
}}
|
}}
|
||||||
@ -104,13 +108,14 @@ void Install_UpdateClient()
|
|||||||
|
|
||||||
// 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");
|
||||||
|
|
||||||
|
@ -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)
|
||||||
@ -63,24 +71,26 @@ int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
|
|||||||
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)
|
||||||
{
|
{
|
||||||
|
renameString[renameIndex] = NULL;
|
||||||
renameIndex = 0;
|
renameIndex = 0;
|
||||||
log_msg("Rename on Server : %s -> %s\n", ptChar->ptPlayerData->name, renameString);
|
log_msg("Rename on Server : %s -> %s\n", PCPlayerData->name, renameString);
|
||||||
strcpy(ptChar->ptPlayerData->name, renameString);
|
strcpy(PCPlayerData->name, renameString);
|
||||||
strcpy(ptChar->ptPlayerData->ptNetClient->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,22 +101,22 @@ 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
|
||||||
}}
|
}}
|
||||||
@ -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()
|
||||||
{
|
{
|
||||||
|
@ -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)
|
while (GetTickCount() - prevTicks >= nbTicksForNextSOJSold)
|
||||||
{
|
{
|
||||||
nbSOJSold++;
|
nbSOJSold++;
|
||||||
prevTicks = prevTicks + nbTicksForNextSOJSold;
|
prevTicks = prevTicks + nbTicksForNextSOJSold;
|
||||||
nbTicksForNextSOJSold = getTicksForNextSOJSold();
|
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,11 +126,6 @@ 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))
|
||||||
@ -139,8 +140,8 @@ DWORD STDCALL verifIfWEItem (Unit* ptItem, DWORD flags, DWORD line, const char*
|
|||||||
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
|
||||||
@ -227,8 +235,6 @@ FCT_ASM( caller_spawnDClone_114 )
|
|||||||
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);
|
|
||||||
} 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
|
//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");
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ extern s_shifting shifting;
|
|||||||
#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;
|
||||||
|
@ -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,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 =================================*/
|
@ -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.
|
||||||
|
|
||||||
Add "plugY v1.00" on screen.
|
Print PlugY version on screen.
|
||||||
|
|
||||||
=================================================================*/
|
=================================================================*/
|
||||||
#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();
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
=================================================================*/
|
=================================================================*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define PLUGY_VERSION "12.00"
|
#define PLUGY_VERSION "14.00"
|
||||||
|
|
||||||
enum TargetMod
|
enum TargetMod
|
||||||
{
|
{
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
|
|
||||||
#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 =================================*/
|
@ -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 =================================*/
|
@ -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,11 +1,11 @@
|
|||||||
//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"
|
||||||
@ -50,7 +50,7 @@ BEGIN
|
|||||||
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"
|
||||||
|
Binary file not shown.
@ -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_GERMAN} "Deinstallationsprogramm (Fügt Windows Registrierungseinträge hinzu)"
|
||||||
LangString SECTION_NAME_UNINSTALLER ${LANG_RUSSIAN} "Деинсталлятор (добавляет ключи реестра)"
|
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.
|
||||||
@ -622,20 +694,31 @@ 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]
|
||||||
@ -701,20 +793,20 @@ Beispiel:
|
|||||||
|
|
||||||
|
|
||||||
[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)
|
||||||
@ -725,7 +817,7 @@ 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.
|
||||||
@ -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,34 +149,34 @@ 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é)
|
||||||
@ -140,7 +184,7 @@ Changements apportés par la v7.01:
|
|||||||
- 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
BIN
PlugYInstaller/PlugY_The_Survival_Kit_-_讀我檔案.txt
Normal file
BIN
PlugYInstaller/PlugY_The_Survival_Kit_-_讀我檔案.txt
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
51
README.md
51
README.md
@ -4,49 +4,60 @@ PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction (1.09b - 1.1
|
|||||||
Extends Diablo II - Lord of Destruction by a number of useful features
|
Extends Diablo II - Lord of Destruction by a number of useful features
|
||||||
|
|
||||||
## FEATURES
|
## FEATURES
|
||||||
Each features can be turned on/off via PlugY.ini
|
Each features can be turned on/off via PlugY.ini (see "COMMENTS ON THE CONFIGURATION FILE")
|
||||||
* Disable access to Battle.net.
|
* Disable access to Battle.net.
|
||||||
* Infinite storage space in the stash.
|
* Infinite storage space in the stash.
|
||||||
* Shared storage space in the stash.
|
* Shared storage space in the stash.
|
||||||
* Enabled the ladder only runewords out of realms.
|
* Enable the ladder only runewords for singleplayer and TCP/IP game.
|
||||||
* Local World Event and Uber Quest for singleplayer and multiplayer off-realm !
|
* World Event and Uber Quest for singleplayer and TCP/IP game.
|
||||||
* Can open Cow Level Portal even when player have kill the Cow King in that difficulty.
|
* Can open Cow Level Portal even when player have kill the Cow King in that difficulty.
|
||||||
|
* Prevent Nihlathak's portal from closing.
|
||||||
|
* Move Deckard Cain near the waypoint in Harrogath.
|
||||||
* Unassign assigned skills and stats points.
|
* Unassign assigned skills and stats points.
|
||||||
|
* Auto backup save files before saving.
|
||||||
* Change the selected language.
|
* Change the selected language.
|
||||||
* Always regenerate maps in SinglePlayer like in MultiPlayer.
|
* Always regenerate maps in SinglePlayer like in MultiPlayer.
|
||||||
* Automatically execute /players X when you launch a new game.
|
* Automatically execute /players X when you launch a new game.
|
||||||
* Added some pages for display more characters stats like %MF.
|
* Added some pages for display more characters stats.
|
||||||
* Display item level in its popup.
|
* Display item level in its popup.
|
||||||
* Launch any number of Diablo II games on the same computer.
|
* Launch any number of Diablo II games on the same computer.
|
||||||
* Increase the stash to 10x10 squares.
|
* Increase the stash to 10x10 squares.
|
||||||
* Change the save path directory.
|
* Change the save path directory.
|
||||||
* Always display Mana and Life values above the globes.
|
* Always display Mana and Life values above the globes.
|
||||||
* D2 can load all files, even those opened with Microsoft Excel (disabled by default).
|
* D2 can load all files, even those opened with Microsoft Excel (disabled by default).
|
||||||
* Display the stats current value (without magical bonus) like Magic/gold find or maximum resistances.
|
* Display the current stats value (without magical bonus).
|
||||||
* Can launch game in windowed mode with some options (lock mouse/resize/on top/noborder).
|
* Can launch game in windowed mode.
|
||||||
* Add following commands:
|
* Add following commands (see "COMMENTS ON THE CONFIGURATION FILE") :
|
||||||
* /save : Save game without exit.
|
|
||||||
* /page 1 : Show normal stats page (stats page must be opened).
|
|
||||||
* /page 2 : Show extra stats page (stats page must be opened).
|
|
||||||
* /page 3 : Show resistance stats page (stats page must be opened).
|
|
||||||
* /page 4 : (beta) Show available runewords (stats page must be opened).
|
|
||||||
* /lockmouse : Lock mouse cursor in the window.
|
* /lockmouse : Lock mouse cursor in the window.
|
||||||
* /lock : Same as /lockmouse.
|
* /lock : Same as /lockmouse.
|
||||||
* /unlockmouse : Unlock mouse cursor in the window.
|
* /unlockmouse : Unlock mouse cursor in the window.
|
||||||
* /unlock : Same as /unlockmouse.
|
* /unlock : Same as /unlockmouse.
|
||||||
* /renamechar newname : Rename your character and save it.
|
* /renamepage name : Rename current page stash (use # for page number).
|
||||||
* /renamepage name : Rename current page stash.
|
* /rp name : See /renamepage.
|
||||||
* /setindex : Set current stash page as index
|
* /setindex : Set current stash page as index.
|
||||||
|
* /setmainindex : Set current stash page as main index.
|
||||||
* /resetindex : Remove index flag on the current stash page.
|
* /resetindex : Remove index flag on the current stash page.
|
||||||
* /insertpage : Insert a new page after the current page.
|
* /insertpage : Insert a new page after the current page.
|
||||||
|
* /ip : See /insertpage.
|
||||||
* /deletepage : Delete current page if empty.
|
* /deletepage : Delete current page if empty.
|
||||||
* /swap page : Swap the content of current stash page with the content of another page.
|
* /dp : See /deletepage.
|
||||||
* /toggle page : Swap the content of current stash page with the content of another page in opposing stash shared/personal.
|
* /swappage page : Swap the content of current stash page with the content of another page.
|
||||||
|
* /sp page : See /swappage.
|
||||||
|
* /togglepage page : Swap the content of current stash page with the content of another page in opposing stash shared/personal.
|
||||||
|
* /tp page : See /togglepage.
|
||||||
* /dlm : Toggle always display mana and life mode.
|
* /dlm : Toggle always display mana and life mode.
|
||||||
* /dml : Same as /dlm.
|
* /dml : See /dlm.
|
||||||
* /dl : Toggle always display life mode.
|
* /dl : See /dlm.
|
||||||
* /dm : Toggle always display mana mode.
|
* /dm : See /dlm.
|
||||||
|
* /page 1 : Show normal stats page (stats page must be opened).
|
||||||
|
* /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.
|
* /listcube : (beta) Create a "cube.txt" file in save directory containing all cube's receipts.
|
||||||
|
* /renamechar newname : (beta) Rename your character and save it.
|
||||||
|
|
||||||
## Contribute
|
## Contribute
|
||||||
If you want to update the translations please use the [POEditor project](https://poeditor.com/join/project/VnO1SKslPV) and create a bug-ticket nofifying me that you have done so. Please do not edit the LocalizedStrings.ini directly. If you absolutely don't want to use POEditor, edit the json files found at [PlugYInstaller/PlugY/translations](https://github.com/ChaosMarc/PlugY/tree/master/PlugYInstaller/PlugY/translations)
|
If you want to update the translations please use the [POEditor project](https://poeditor.com/join/project/VnO1SKslPV) and create a bug-ticket nofifying me that you have done so. Please do not edit the LocalizedStrings.ini directly. If you absolutely don't want to use POEditor, edit the json files found at [PlugYInstaller/PlugY/translations](https://github.com/ChaosMarc/PlugY/tree/master/PlugYInstaller/PlugY/translations)
|
||||||
|
Loading…
Reference in New Issue
Block a user