1 Commits
11.00 ... 10.01

Author SHA1 Message Date
ChaosMarc
94b7f1f9bb updated from 10.00 to 10.01 by Yohann 2017-01-11 08:44:46 +01:00
81 changed files with 2759 additions and 6256 deletions

View File

@@ -1,6 +1,5 @@
/*====================================================================== /*======================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Declares the type for a STDCALL or FASTCALL function pointer Declares the type for a STDCALL or FASTCALL function pointer
called N with arguments list P, returning R, namedInDLL D and at @A called N with arguments list P, returning R, namedInDLL D and at @A
@@ -149,68 +148,68 @@
//F7(STD, D2Common,00000,00000,00000,00000,10001,00000,00000, DWORD, D2GetActIDFromLevel, (DWORD levelID)); //F7(STD, D2Common,00000,00000,00000,00000,10001,00000,00000, DWORD, D2GetActIDFromLevel, (DWORD levelID));
F7(STD, D2Common,00000,00000,00000,10188,11084,11109,10346,10907, DWORD, D2Common11084, (Room* ptRoom, DWORD zero)); F7(STD, D2Common,00000,00000,00000,10188,11084,11109,10346, DWORD, D2Common11084, (Room* ptRoom, DWORD zero));
F7(STD, D2Common,10057,10057,10057,10332,11021,10511,10826,10691, DWORD, D2GetLevelID, (Room* ptRoom)); F7(STD, D2Common,10057,10057,10057,10332,11021,10511,10826, DWORD, D2GetLevelID, (Room* ptRoom));
F7(STD, D2Common,10138,10138,10138,10623,10491,11043,10654,10716, Room*, D2GetDropRoom, (Room* ptRoom, Position*, Position*, DWORD, DWORD, DWORD, DWORD)); F7(STD, D2Common,10138,10138,10138,10623,10491,11043,10654, Room*, D2GetDropRoom, (Room* ptRoom, Position*, Position*, DWORD, DWORD, DWORD, DWORD));
//F7(STD, D2Common,10149,10149,10149,00000,00000,00000,00000, Inventory*, D2GetInventory, (Unit* ptUnit)); //F7(STD, D2Common,10149,10149,10149,00000,00000,00000,00000, Inventory*, D2GetInventory, (Unit* ptUnit));
F7(STD, D2Common,10242,10242,10242,00000,00000,00000,00000,00000, Unit*, D2Common10242, (Inventory* ptInventory, Unit* ptItem, DWORD bIsClient)); F7(STD, D2Common,10242,10242,10242,00000,00000,00000,00000, Unit*, D2Common10242, (Inventory* ptInventory, Unit* ptItem, DWORD bIsClient));
F7(STD, D2Common,10246,10246,10246,10855,10813,10289,10133,10402, Unit*, D2CanPutItemInInv, (Inventory* ptInventory, Unit* ptItem, DWORD p3, DWORD zero, Unit* ptUnit, const char* file, DWORD line)); F7(STD, D2Common,10246,10246,10246,10855,10813,10289,10133, Unit*, D2CanPutItemInInv, (Inventory* ptInventory, Unit* ptItem, DWORD p3, DWORD zero, Unit* ptUnit, const char* file, DWORD line));
F7(STD, D2Common,10243,10243,10243,10461,10827,10936,10646,10490, Unit*, D2InvRemoveItem, (Inventory* ptInventory, Unit* ptItem)); F7(STD, D2Common,10243,10243,10243,10461,10827,10936,10646, Unit*, D2InvRemoveItem, (Inventory* ptInventory, Unit* ptItem));
F7(STD, D2Common,10249,10249,10249,10880,11068,10436,11107,10963, 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 F7(STD, D2Common,10249,10249,10249,10880,11068,10436,11107, 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
F7(STD, D2Common,10250,10250,10250,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,10250,10250,10250,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, Unit*, D2GetItemFromBodyLoc, (Inventory* ptInventory, DWORD bodyloc)); //F7(STD, D2Common,10257,10257,10257,00000,00000,00000,00000, Unit*, D2GetItemFromBodyLoc, (Inventory* ptInventory, DWORD bodyloc));
F7(STD, D2Common,10273,10273,10273,00000,00000,00000,00000,00000, DWORD, D2Common10273, (Inventory* ptInventory, void* unknow)); F7(STD, D2Common,10273,10273,10273,00000,00000,00000,00000, DWORD, D2Common10273, (Inventory* ptInventory, void* unknow));
F7(STD, D2Common,10277,10277,10277,10402,10535,11151,10460,11040, Unit*, D2InventoryGetFirstItem, (Inventory* ptInventory)); F7(STD, D2Common,10277,10277,10277,10402,10535,11151,10460, Unit*, D2InventoryGetFirstItem, (Inventory* ptInventory));
F7(STD, D2Common,10304,10304,10304,10934,11140,10770,10464,10879, Unit*, D2UnitGetNextItem, (Unit* ptItem)); F7(STD, D2Common,10304,10304,10304,10934,11140,10770,10464, Unit*, D2UnitGetNextItem, (Unit* ptItem));
F7(STD, D2Common,10305,10305,10305,11095,10748,10852,11147,10897, Unit*, D2GetRealItem, (Unit* ptUnit)); F7(STD, D2Common,10305,10305,10305,11095,10748,10852,11147, Unit*, D2GetRealItem, (Unit* ptUnit));
//F7(STD, D2Common,10321,10321,10321,00000,00000,00000,00000, SkillData*, D2GetLeftSkill, (Unit* ptChar)); //F7(STD, D2Common,10321,10321,10321,00000,00000,00000,00000, SkillData*, D2GetLeftSkill, (Unit* ptChar));
//F7(STD, D2Common,10322,10322,10322,00000,00000,00000,00000, SkillData*, D2GetRightSkill, (Unit* ptChar)); //F7(STD, D2Common,10322,10322,10322,00000,00000,00000,00000, SkillData*, D2GetRightSkill, (Unit* ptChar));
F7(STD, D2Common,10326,10326,00000,00000,00000,00000,00000,00000, DWORD, D2GetPosX, (Unit* ptUnit));//NOT IN 1.10 F7(STD, D2Common,10326,10326,00000,00000,00000,00000,00000, DWORD, D2GetPosX, (Unit* ptUnit));//NOT IN 1.10
//F7(STD, D2Common,10328,10328,10328,00000,00000,00000,00000, void, D2SetPosX, (Unit* ptUnit, DWORD pos)); //F7(STD, D2Common,10328,10328,10328,00000,00000,00000,00000, void, D2SetPosX, (Unit* ptUnit, DWORD pos));
F7(STD, D2Common,10329,10329,00000,00000,00000,00000,00000,00000, DWORD, D2GetPosY, (Unit* ptUnit));//NOT IN 1.10 F7(STD, D2Common,10329,10329,00000,00000,00000,00000,00000, DWORD, D2GetPosY, (Unit* ptUnit));//NOT IN 1.10
//F7(STD, D2Common,10331,10331,10331,00000,00000,00000,00000, void, D2SetPosY, (Unit* ptUnit, DWORD pos)); //F7(STD, D2Common,10331,10331,10331,00000,00000,00000,00000, void, D2SetPosY, (Unit* ptUnit, DWORD pos));
F7(STD, D2Common,10332,10332,10332,11080,10056,10543,10141,11166, void, D2GetPosition, (Unit* ptUnit, Position* pos)); F7(STD, D2Common,10332,10332,10332,11080,10056,10543,10141, void, D2GetPosition, (Unit* ptUnit, Position* pos));
F7(STD, D2Common,10339,10339,10339,10455,10864,10941,11060,11025, DWORD, D2GetMaxGoldBank, (Unit* ptUnit)); F7(STD, D2Common,10339,10339,10339,10455,10864,10941,11060, DWORD, D2GetMaxGoldBank, (Unit* ptUnit));
F7(STD, D2Common,10342,10342,10342,10172,10933,10366,10331,10846, Room*, D2GetRoom, (Unit* ptUnit)); F7(STD, D2Common,10342,10342,10342,10172,10933,10366,10331, Room*, D2GetRoom, (Unit* ptUnit));
//F7(STD, D2Common,10348,10348,10348,00000,00000,00000,00000, void, D2SetUnitMode, (Unit* ptUnit, DWORD mode)); //F7(STD, D2Common,10348,10348,10348,00000,00000,00000,00000, void, D2SetUnitMode, (Unit* ptUnit, DWORD mode));
//F7(STD, D2Common,10394,10394,10394,00000,00000,00000,00000, ObjectsBIN*,D2GetObjectsBIN, (Unit* ptObject)); //F7(STD, D2Common,10394,10394,10394,00000,00000,00000,00000, ObjectsBIN*,D2GetObjectsBIN, (Unit* ptObject));
F7(STD, D2Common,10420,10420,10420,10218,10079,11097,10356,10404, PlayerData*,D2InitPlayerData, (Unit* ptChar)); F7(STD, D2Common,10420,10420,10420,10218,10079,11097,10356, PlayerData*,D2InitPlayerData, (Unit* ptChar));
//F7(STD, D2Common,10421,10421,10421,10914,10329,00000,00000, DWORD, D2FreePlayerData, (DWORD game1C, Unit* ptChar)); //F7(STD, D2Common,10421,10421,10421,10914,10329,00000,00000, DWORD, D2FreePlayerData, (DWORD game1C, Unit* ptChar));
F7(STD, D2Common,10424,10424,10424,10562,10800,10860,10920,11103, PlayerData*,D2GetPlayerData, (Unit* ptChar)); F7(STD, D2Common,10424,10424,10424,10562,10800,10860,10920, PlayerData*,D2GetPlayerData, (Unit* ptChar));
F7(STD, D2Common,10431,10431,10431,00000,00000,00000,00000,00000, DWORD, D2GetDefence, (Unit* ptChar)); F7(STD, D2Common,10431,10431,10431,00000,00000,00000,00000, DWORD, D2GetDefence, (Unit* ptChar));
F7(STD, D2Common,10433,10433,10433,00000,00000,00000,00000,00000, DWORD, D2GetChanceToBlock, (Unit* ptChar, DWORD isLODGame)); F7(STD, D2Common,10433,10433,10433,00000,00000,00000,00000, DWORD, D2GetChanceToBlock, (Unit* ptChar, DWORD isLODGame));
F7(STD, D2Common,10439,10439,10439,10343,11131,10729,10049,11159, DWORD, D2GetMaxGold, (Unit* ptUnit)); F7(STD, D2Common,10439,10439,10439,10343,11131,10729,10049, DWORD, D2GetMaxGold, (Unit* ptUnit));
F7(STD, D2Common,00000,00000,00000,10440,10572,10481,11090,10193, DWORD, D2Common10572, (Unit* ptObject, DWORD value)); F7(STD, D2Common,00000,00000,00000,10440,10572,10481,11090, DWORD, D2Common10572, (Unit* ptObject, DWORD value));
//F7(STD, D2Common,10463,10463,10463,00000,00000,00000,00000, DWORD, D2SetStatWithNoTest, ( Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex)); //F7(STD, D2Common,10463,10463,10463,00000,00000,00000,00000, DWORD, D2SetStatWithNoTest, ( Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
//F7(STD, D2Common,10464,10464,10464,00000,00000,00000,00000, void, D2AddStat, (Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex)); //F7(STD, D2Common,10464,10464,10464,00000,00000,00000,00000, void, D2AddStat, (Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
//F7(STD, D2Common,10465,10465,10465,00000,00000,00000,00000, DWORD, D2SetStat, (Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex)); //F7(STD, D2Common,10465,10465,10465,00000,00000,00000,00000, DWORD, D2SetStat, (Stats* ptStats, DWORD statID, DWORD statValue, DWORD statIndex));
//F7(STD, D2Common,10466,10466,10466,00000,00000,00000,00000, int, D2GetStat, (Stats* ptStats, DWORD statID, DWORD statIndex)); //F7(STD, D2Common,10466,10466,10466,00000,00000,00000,00000, int, D2GetStat, (Stats* ptStats, DWORD statID, DWORD statIndex));
//F7(STD, D2Common,10470,10470,10470,00000,00000,00000,00000, Stats*, D2AllocNewStats, (DWORD nUnitId, DWORD flags, DWORD uk18, DWORD nUnitType, DWORD nItemNum)); //F7(STD, D2Common,10470,10470,10470,00000,00000,00000,00000, Stats*, D2AllocNewStats, (DWORD nUnitId, DWORD flags, DWORD uk18, DWORD nUnitType, DWORD nItemNum));
F7(STD, D2Common,00000,00000,00000,10471,11160,10866,10258,10040, BYTE, D2GetObjectFlags, (Unit* ptObject)); F7(STD, D2Common,00000,00000,00000,10471,11160,10866,10258, BYTE, D2GetObjectFlags, (Unit* ptObject));
F7(STD, D2Common,00000,00000,00000,10572,11048,10150,10111,10033, void, D2SetObjectFlags, (Unit* ptObject, BYTE flags)); F7(STD, D2Common,00000,00000,00000,10572,11048,10150,10111, void, D2SetObjectFlags, (Unit* ptObject, BYTE flags));
//F7(STD, D2Common,10471,10471,10471,00000,00000,00000,00000, DWORD, D2Common10471, (void*)); //F7(STD, D2Common,10471,10471,10471,00000,00000,00000,00000, DWORD, D2Common10471, (void*));
//F7(STD, D2Common,10472,10472,10472,00000,00000,00000,00000, DWORD, D2Common10472, (void*)); //F7(STD, D2Common,10472,10472,10472,00000,00000,00000,00000, DWORD, D2Common10472, (void*));
//F7(STD, D2Common,10475,10475,10475,00000,00000,00000,00000, void, D2UpdateDisabledStat, (Stats* ptCharStats, Stats* ptStats, DWORD one)); //F7(STD, D2Common,10475,10475,10475,00000,00000,00000,00000, void, D2UpdateDisabledStat, (Stats* ptCharStats, Stats* ptStats, DWORD one));
//F7(STD, D2Common,10481,10481,10481,00000,00000,00000,00000, void*, D2Common10481, (Unit* ptUnit, DWORD flags)); //F7(STD, D2Common,10481,10481,10481,00000,00000,00000,00000, void*, D2Common10481, (Unit* ptUnit, DWORD flags));
//F7(STD, D2Common,10484,10484,10484,00000,00000,00000,00000, Stats*, D2GetAffixStats, (Unit* ptItem, DWORD, DWORD)); //F7(STD, D2Common,10484,10484,10484,00000,00000,00000,00000, Stats*, D2GetAffixStats, (Unit* ptItem, DWORD, DWORD));
//F7(STD, D2Common,10485,10485,10485,00000,00000,00000,00000, void, D2FreeStats, (Stats* ptStats)); //F7(STD, D2Common,10485,10485,10485,00000,00000,00000,00000, void, D2FreeStats, (Stats* ptStats));
F7(STD, D2Common,10487,10487,10487,00000,00000,00000,00000,00000, DWORD, D2isInState, (Unit* ptChar, DWORD isLODGame)); F7(STD, D2Common,10487,10487,10487,00000,00000,00000,00000, DWORD, D2isInState, (Unit* ptChar, DWORD isLODGame));
//F7(STD, D2Common,10517,10517,10517,00000,00000,00000,00000, void, D2SetPlayerStat, (Unit* ptChar, DWORD statID, int amount, DWORD index)); //F7(STD, D2Common,10517,10517,10517,00000,00000,00000,00000, void, D2SetPlayerStat, (Unit* ptChar, DWORD statID, int amount, DWORD index));
F7(STD, D2Common,10518,10518,10518,10109,10627,10762,10551,10645, void, D2AddPlayerStat, (Unit* ptChar, DWORD statID, int amount, DWORD index));//ONLY 1.11b F7(STD, D2Common,10518,10518,10518,10109,10627,10762,10551, void, D2AddPlayerStat, (Unit* ptChar, DWORD statID, int amount, DWORD index));//ONLY 1.11b
F7(STD, D2Common,10519,10519,10519,11092,10061,10658,10973,10550, int, D2GetPlayerStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b F7(STD, D2Common,10519,10519,10519,11092,10061,10658,10973, int, D2GetPlayerStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b
//F7(STD, D2Common,10520,10520,10520,00000,00000,00000,00000, int, D2GetPlayerStat20, (Unit* ptChar, DWORD statID, DWORD index)); //F7(STD, D2Common,10520,10520,10520,00000,00000,00000,00000, int, D2GetPlayerStat20, (Unit* ptChar, DWORD statID, DWORD index));
F7(STD, D2Common,10521,10521,10521,10733,10550,10494,10587,10216, int, D2GetPlayerBaseStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b F7(STD, D2Common,10521,10521,10521,10733,10550,10494,10587, int, D2GetPlayerBaseStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b
//F7(STD, D2Common,10527,10527,10527,00000,00000,00000,00000, DWORD, D2Common10527, (Unit* ptUnit)); //F7(STD, D2Common,10527,10527,10527,00000,00000,00000,00000, DWORD, D2Common10527, (Unit* ptUnit));
F7(STD, D2Common,10539,10539,10539,00000,00000,00000,00000,00000, DWORD, D2haveDefenceBonus, (Unit* ptChar)); F7(STD, D2Common,10539,10539,10539,00000,00000,00000,00000, DWORD, D2haveDefenceBonus, (Unit* ptChar));
F7(STD, D2Common,10540,10540,10540,00000,00000,00000,00000,00000, DWORD, D2haveFireResBonus, (Unit* ptChar)); F7(STD, D2Common,10540,10540,10540,00000,00000,00000,00000, DWORD, D2haveFireResBonus, (Unit* ptChar));
F7(STD, D2Common,10541,10541,10541,00000,00000,00000,00000,00000, DWORD, D2haveColdResBonus, (Unit* ptChar)); F7(STD, D2Common,10541,10541,10541,00000,00000,00000,00000, DWORD, D2haveColdResBonus, (Unit* ptChar));
F7(STD, D2Common,10542,10542,10542,00000,00000,00000,00000,00000, DWORD, D2haveLightResBonus, (Unit* ptChar)); F7(STD, D2Common,10542,10542,10542,00000,00000,00000,00000, DWORD, D2haveLightResBonus, (Unit* ptChar));
F7(STD, D2Common,10543,10543,10543,00000,00000,00000,00000,00000, DWORD, D2havePoisonResBonus, (Unit* ptChar)); F7(STD, D2Common,10543,10543,10543,00000,00000,00000,00000, DWORD, D2havePoisonResBonus, (Unit* ptChar));
F7(STD, D2Common,10546,10546,10546,00000,00000,00000,00000,00000, DWORD, D2haveDefenceMalus, (Unit* ptChar)); F7(STD, D2Common,10546,10546,10546,00000,00000,00000,00000, DWORD, D2haveDefenceMalus, (Unit* ptChar));
F7(STD, D2Common,10547,10547,10547,00000,00000,00000,00000,00000, DWORD, D2haveFireResMalus, (Unit* ptChar)); F7(STD, D2Common,10547,10547,10547,00000,00000,00000,00000, DWORD, D2haveFireResMalus, (Unit* ptChar));
F7(STD, D2Common,10548,10548,10548,00000,00000,00000,00000,00000, DWORD, D2haveColdResMalus, (Unit* ptChar)); F7(STD, D2Common,10548,10548,10548,00000,00000,00000,00000, DWORD, D2haveColdResMalus, (Unit* ptChar));
F7(STD, D2Common,10549,10549,10549,00000,00000,00000,00000,00000, DWORD, D2haveLightResMalus, (Unit* ptChar)); F7(STD, D2Common,10549,10549,10549,00000,00000,00000,00000, DWORD, D2haveLightResMalus, (Unit* ptChar));
F7(STD, D2Common,10550,10550,10550,00000,00000,00000,00000,00000, DWORD, D2havePoisonResMalus, (Unit* ptChar)); F7(STD, D2Common,10550,10550,10550,00000,00000,00000,00000, DWORD, D2havePoisonResMalus, (Unit* ptChar));
//F7(STD, D2Common,10552,10552,10552,00000,00000,00000,00000, DWORD, D2Common10552, (Unit* ptUnit)); //F7(STD, D2Common,10552,10552,10552,00000,00000,00000,00000, DWORD, D2Common10552, (Unit* ptUnit));
//F7(STD, D2Common,10567,10567,10567,00000,00000,00000,00000, DWORD, D2CanBeBroken, (Unit* ptItem)); //F7(STD, D2Common,10567,10567,10567,00000,00000,00000,00000, DWORD, D2CanBeBroken, (Unit* ptItem));
//F7(STD, D2Common,10573,10573,10573,00000,00000,00000,00000, void, D2CopyStats, (Stats* ptDestStats, Stats* ptSrcStats)); //F7(STD, D2Common,10573,10573,10573,00000,00000,00000,00000, void, D2CopyStats, (Stats* ptDestStats, Stats* ptSrcStats));
@@ -218,35 +217,35 @@ F7(STD, D2Common,10550,10550,10550,00000,00000,00000,00000,00000, DWORD, D2hav
//F7(STD, D2Common,10575,10575,10575,00000,00000,00000,00000, void, D2FreeBinFiles, ()); //F7(STD, D2Common,10575,10575,10575,00000,00000,00000,00000, void, D2FreeBinFiles, ());
//F7(STD, D2Common,10576,10576,10576,00000,00000,00000,00000, void, D2LoadBinFiles, (DWORD zero1, DWORD zero2, bool)); //F7(STD, D2Common,10576,10576,10576,00000,00000,00000,00000, void, D2LoadBinFiles, (DWORD zero1, DWORD zero2, bool));
//F7(STD, D2Common,00000,00000,00000,10651,10651,00000,00000, DWORD, D2CheckQuestState, (void* ptQuest, DWORD index, DWORD value)); //F7(STD, D2Common,00000,00000,00000,10651,10651,00000,00000, DWORD, D2CheckQuestState, (void* ptQuest, DWORD index, DWORD value));
F7(STD, D2Common,10578,10578,10578,10653,10496,10244,10849,10037, void*, D2CompileTxtFile, (DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength)); F7(STD, D2Common,10578,10578,10578,10653,10496,10244,10849, void*, D2CompileTxtFile, (DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength));
F7(STD, D2Common,10600,10600,10600,10573,10262,10887,10695,10994, ItemsBIN*, D2GetItemsBIN, (DWORD itemID)); F7(STD, D2Common,10600,10600,10600,10573,10262,10887,10695, ItemsBIN*, D2GetItemsBIN, (DWORD itemID));
//F7(STD, D2Common,10601,10601,10601,00000,00000,00000,00000, ItemsBIN*, D2GetByCodeItemStatsBIN, (DWORD code, DWORD* itemID)); //F7(STD, D2Common,10601,10601,10601,00000,00000,00000,00000, ItemsBIN*, D2GetByCodeItemStatsBIN, (DWORD code, DWORD* itemID));
//F7(STD, D2Common,10604,10604,10604,00000,00000,00000,00000, AffixBIN*, D2GetAffixBIN, (int affixID)); //F7(STD, D2Common,10604,10604,10604,00000,00000,00000,00000, AffixBIN*, D2GetAffixBIN, (int affixID));
F7(STD, D2Common,10616,10616,10616,10500,10523,10774,10806,10619, GemsBIN*, D2GetGemsBIN, (DWORD gemID)); F7(STD, D2Common,10616,10616,10616,10500,10523,10774,10806, GemsBIN*, D2GetGemsBIN, (DWORD gemID));
F7(STD, D2Common,11232,11232,11232,10746,10258,10913,10783,10393, CubeMainBIN*,D2GetCubeMainBIN, (DWORD cubemainID)); F7(STD, D2Common,11232,11232,11232,10746,10258,10913,10783, CubeMainBIN*,D2GetCubeMainBIN, (DWORD cubemainID));
F7(STD, D2Common,11233,11233,11233,10639,11135,10390,10675,10235, int, D2GetNbCubeMainBIN, ()); F7(STD, D2Common,11233,11233,11233,10639,11135,10390,10675, int, D2GetNbCubeMainBIN, ());
//F7(STD, D2Common,10737,10737,10737,00000,00000,00000,00000, LevelsBIN*, D2GetLevelsBIN, (DWORD levelID)); //F7(STD, D2Common,10737,10737,10737,00000,00000,00000,00000, LevelsBIN*, D2GetLevelsBIN, (DWORD levelID));
F7(STD, D2Common,10628,10628,10628,00000,00000,00000,00000,00000, DWORD, D2GetNextLevelXP, (DWORD classID, DWORD level)); F7(STD, D2Common,10628,10628,10628,00000,00000,00000,00000, DWORD, D2GetNextLevelXP, (DWORD classID, DWORD level));
F7(STD, D2Common,10629,10629,10629,00000,00000,00000,00000,00000, DWORD, D2GetMaxLevel, (DWORD classID)); F7(STD, D2Common,10629,10629,10629,00000,00000,00000,00000, DWORD, D2GetMaxLevel, (DWORD classID));
F7(STD, D2Common,10655,10655,10655,10655,10309,10297,10218,10694, DifficultyLevelsBIN*, D2GetDifficultyLevelsBIN, (DWORD difficultyLevel)); F7(STD, D2Common,10655,10655,10655,10655,10309,10297,10218, DifficultyLevelsBIN*, D2GetDifficultyLevelsBIN, (DWORD difficultyLevel));
//F7(STD, D2Common,10659,10659,10659,00000,00000,00000,00000, TreasureClassBIN*, D2GetTreasureClassBIN, (WORD id, DWORD uk)); //F7(STD, D2Common,10659,10659,10659,00000,00000,00000,00000, TreasureClassBIN*, D2GetTreasureClassBIN, (WORD id, DWORD uk));
//F7(STD, D2Common,10668,10668,10668,10450,10953,00000,00000, SuperUniqueBIN*, D2GetSuperUniqueBIN, (WORD id)); //F7(STD, D2Common,10668,10668,10668,10450,10953,00000,00000, SuperUniqueBIN*, D2GetSuperUniqueBIN, (WORD id));
F7(STD, D2Common,10695,10695,10695,10927,10899,10276,10106,10911, DWORD, D2GetItemQuality, (Unit* ptItem)); F7(STD, D2Common,10695,10695,10695,10927,10899,10276,10106, DWORD, D2GetItemQuality, (Unit* ptItem));
F7(STD, D2Common,10707,10707,10707,10911,10303,10989,10202,10458, DWORD, D2TestFlags, (Unit* ptUnit, DWORD flags, DWORD line, const char* file)); F7(STD, D2Common,10707,10707,10707,10911,10303,10989,10202, DWORD, D2TestFlags, (Unit* ptUnit, DWORD flags, DWORD line, const char* file));
//F7(STD, D2Common,10708,10708,10708,00000,00000,00000,00000, void, D2SetFlags, (Unit* ptUnit, DWORD flags, DWORD bitNewValue)); //F7(STD, D2Common,10708,10708,10708,00000,00000,00000,00000, void, D2SetFlags, (Unit* ptUnit, DWORD flags, DWORD bitNewValue));
//F7(STD, D2Common,10709,10709,10709,00000,00000,00000,00000, DWORD, D2GetFlags, (Unit* ptUnit)); //F7(STD, D2Common,10709,10709,10709,00000,00000,00000,00000, DWORD, D2GetFlags, (Unit* ptUnit));
//F7(STD, D2Common,10711,10711,10711,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 //F7(STD, D2Common,10711,10711,10711,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
F7(STD, D2Common,10717,10717,10717,10898,10100,10410,10086,10008, DWORD, D2GetItemLevel, (Unit* ptItem)); F7(STD, D2Common,10717,10717,10717,10898,10100,10410,10086, DWORD, D2GetItemLevel, (Unit* ptItem));
F7(STD, D2Common,10719,10719,10719,10820,10505,10370,10020,10810, BYTE, D2ItemGetPage, (Unit* ptUnit)); F7(STD, D2Common,10719,10719,10719,10820,10505,10370,10020, BYTE, D2ItemGetPage, (Unit* ptUnit));
F7(STD, D2Common,10720,10720,10720,10485,10608,10223,10012,11026, void, D2ItemSetPage, (Unit* ptItem, BYTE page)); F7(STD, D2Common,10720,10720,10720,10485,10608,10223,10012, void, D2ItemSetPage, (Unit* ptItem, BYTE page));
F7(STD, D2Common,10731,10731,10731,11017,10890,10231,10744,10601, DWORD, D2CheckItemType, (Unit* ptItem, DWORD itype)); F7(STD, D2Common,10731,10731,10731,11017,10890,10231,10744, DWORD, D2CheckItemType, (Unit* ptItem, DWORD itype));
F7(STD, D2Common,10732,10732,10732,10692,10685,10280,10620,10075, int, D2GetUniqueID, (Unit* ptItem)); F7(STD, D2Common,10732,10732,10732,10692,10685,10280,10620, int, D2GetUniqueID, (Unit* ptItem));
F7(STD, D2Common,10734,10734,10734,00000,00000,00000,00000,00000, void, D2SetAnim, (Unit* ptUnit, int anim)); F7(STD, D2Common,10734,10734,10734,00000,00000,00000,00000, void, D2SetAnim, (Unit* ptUnit, int anim));
//F7(STD, D2Common,10749,10749,10749,00000,00000,00000,00000, void, D2GetWidthHeight, (Unit* ptItem, BYTE* Width, BYTE* Height); //F7(STD, D2Common,10749,10749,10749,00000,00000,00000,00000, void, D2GetWidthHeight, (Unit* ptItem, BYTE* Width, BYTE* Height);
//F7(STD, D2Common,10751,10751,10751,00000,00000,00000,00000, DWORD, D2GetItemType, (Unit* ptUnit)); //F7(STD, D2Common,10751,10751,10751,00000,00000,00000,00000, DWORD, D2GetItemType, (Unit* ptUnit));
//F7(STD, D2Common,10757,10757,10757,00000,00000,00000,00000, DWORD, D2GetItemLevelReq, (Unit* ptChar, Unit* ptItem)); //F7(STD, D2Common,10757,10757,10757,00000,00000,00000,00000, DWORD, D2GetItemLevelReq, (Unit* ptChar, Unit* ptItem));
F7(STD, D2Common,10619,10619,10619,10687,10877,10321,11032,10981, int*, D2GetNbRunesBIN, ());//return the point on th number F7(STD, D2Common,10619,10619,10619,10687,10877,10321,11032, int*, D2GetNbRunesBIN, ());//return the point on th number
F7(STD, D2Common,10620,10620,10620,10775,10296,10622,10006,10405, RunesBIN*, D2GetRunesBIN, (int runesID)); F7(STD, D2Common,10620,10620,10620,10775,10296,10622,10006, RunesBIN*, D2GetRunesBIN, (int runesID));
//F7(STD, D2Common,10792,10792,10792,00000,00000,00000,00000, DWORD, D2CanBeRare, (Unit* ptItem)); //F7(STD, D2Common,10792,10792,10792,00000,00000,00000,00000, DWORD, D2CanBeRare, (Unit* ptItem));
//F7(STD, D2Common,10810,10810,10810,00000,00000,00000,00000, BYTE, D2CheckHasInv, (Unit* ptItem)); //F7(STD, D2Common,10810,10810,10810,00000,00000,00000,00000, BYTE, D2CheckHasInv, (Unit* ptItem));
//F7(STD, D2Common,10813,10813,10813,00000,00000,00000,00000, DWORD, D2GetStaffMods, (Unit* ptItem)); //F7(STD, D2Common,10813,10813,10813,00000,00000,00000,00000, DWORD, D2GetStaffMods, (Unit* ptItem));
@@ -255,35 +254,35 @@ F7(STD, D2Common,10620,10620,10620,10775,10296,10622,10006,10405, RunesBIN*, D2
//F7(STD, D2Common,10855,10855,10855,00000,00000,00000,00000, void, D2AddAffix, (DWORD, DWORD, Unit* ptItem, AffixBIN* ptAffix, DWORD, DWORD)); //F7(STD, D2Common,10855,10855,10855,00000,00000,00000,00000, void, D2AddAffix, (DWORD, DWORD, Unit* ptItem, AffixBIN* ptAffix, DWORD, DWORD));
//F7(STD, D2Common,10872,10872,10872,00000,00000,00000,00000, DWORD, D2WarpPlayer, (Path* ptPath, Unit* ptChar, Room* ptRoom, DWORD x, DWORD y)); //F7(STD, D2Common,10872,10872,10872,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, WORD, D2GetItemVersion, (Unit* ptItem)); //F7(STD, D2Common,10875,10875,10875,00000,00000,00000,00000, WORD, D2GetItemVersion, (Unit* ptItem));
F7(STD, D2Common,11163,11163,11163,10880,11068,10436,11107,10963, DWORD, D2isEtheral, (Unit* ptItem));//ONLY UNTIL 1.10 F7(STD, D2Common,11163,11163,11163,10880,11068,10436,11107, DWORD, D2isEtheral, (Unit* ptItem));//ONLY UNTIL 1.10
F7(STD, D2Common,10881,10881,10881,10956,11156,10218,10987,10665, DWORD, D2SaveItem, (Unit* ptItem, saveBitField* data, DWORD startSize, DWORD p4, DWORD p5, DWORD p6)); F7(STD, D2Common,10881,10881,10881,10956,11156,10218,10987, DWORD, D2SaveItem, (Unit* ptItem, saveBitField* data, DWORD startSize, DWORD p4, DWORD p5, DWORD p6));
//F7(STD, D2Common,10916,10916,10916,00000,00000,00000,00000, void, DoNothing916, ()); //F7(STD, D2Common,10916,10916,10916,00000,00000,00000,00000, void, DoNothing916, ());
//F7(STD, D2Common,10940,10940,10940,10027,10105,10953,00000, void, D2Common10027, (Unit* ptChar, DWORD skillID)); //F7(STD, D2Common,10940,10940,10940,10027,10105,10953,00000, void, D2Common10027, (Unit* ptChar, DWORD skillID));
//F7(STD, D2Common,10950,10950,10950,00000,00000,00000,00000, SkillData*, D2GetSkillPointer, (Unit* ptChar, WORD SkillID)); //F7(STD, D2Common,10950,10950,10950,00000,00000,00000,00000, SkillData*, D2GetSkillPointer, (Unit* ptChar, WORD SkillID));
//F7(STD, D2Common,10952,10952,10952,10950,10256,10858,00000, SkillData*, D2IncSkillBaseLevel, (Unit* ptChar, DWORD skillID)); //F7(STD, D2Common,10952,10952,10952,10950,10256,10858,00000, SkillData*, D2IncSkillBaseLevel, (Unit* ptChar, DWORD skillID));
F7(STD, D2Common,10953,10953,10953,10099,10255,10210,10302,10335, void, D2SetSkillBaseLevel,(Unit* ptChar, DWORD skillID, DWORD slvl, DWORD bRemove, char*, DWORD)); F7(STD, D2Common,10953,10953,10953,10099,10255,10210,10302, void, D2SetSkillBaseLevel,(Unit* ptChar, DWORD skillID, DWORD slvl, DWORD bRemove, char*, DWORD));
//F7(STD, D2Common,10963,10963,10963,00000,00000,00000,00000, DWORD, D2GetSkillID, (SkillData* ptSkill, const char* file, DWORD line)); //F7(STD, D2Common,10963,10963,10963,00000,00000,00000,00000, DWORD, D2GetSkillID, (SkillData* ptSkill, const char* file, DWORD line));
//F7(FAST, D2Common,10966,10966,10966,00000,00000,00000,00000, SkillsBIN*, D2GetSkillsBIN, (SkillData* ptSkill)); //F7(FAST, D2Common,10966,10966,10966,00000,00000,00000,00000, SkillsBIN*, D2GetSkillsBIN, (SkillData* ptSkill));
F7(STD, D2Common,10968,10968,10968,10700,10109,10904,10306,10007, DWORD, D2GetSkillLevel, (Unit* ptChar, SkillData* ptSkill, DWORD includingBonus)); F7(STD, D2Common,10968,10968,10968,10700,10109,10904,10306, DWORD, D2GetSkillLevel, (Unit* ptChar, SkillData* ptSkill, DWORD includingBonus));
//F7(STD, D2Common,11023,11023,11023,00000,00000,00000,00000, DWORD, D2GetCriticalStrikeFromMasteries, (Unit* ptChar, Unit* ptItem, DWORD zero, DWORD two)); //F7(STD, D2Common,11023,11023,11023,00000,00000,00000,00000, DWORD, D2GetCriticalStrikeFromMasteries, (Unit* ptChar, Unit* ptItem, DWORD zero, DWORD two));
//F7(STD, D2Common,11007,11007,11007,00000,00000,00000,00000, bool, D2TestQuestState, (void* ptQuest, DWORD QuestID, DWORD QuestState)); //F7(STD, D2Common,11007,11007,11007,00000,00000,00000,00000, bool, D2TestQuestState, (void* ptQuest, DWORD QuestID, DWORD QuestState));
//F7(STD, D2Common,11041,11041,11041,00000,00000,00000,00000, int, D2GetPlayerSkillID, (DWORD playerID, DWORD skillNumber)); //F7(STD, D2Common,11041,11041,11041,00000,00000,00000,00000, int, D2GetPlayerSkillID, (DWORD playerID, DWORD skillNumber));
//F7(STD, D2Common,11042,11042,11042,00000,00000,00000,00000, int, D2GetNbSkillsPerPlayer, (DWORD playerID)); //F7(STD, D2Common,11042,11042,11042,00000,00000,00000,00000, int, D2GetNbSkillsPerPlayer, (DWORD playerID));
//F7(STD, D2Common,11269,11269,11269,00000,00000,00000,00000, DWORD, D2GetAllIndexFromStat, (Stats* ptStats, DWORD statID, D2Stat* allIndex, DWORD maxIndex)); //F7(STD, D2Common,11269,11269,11269,00000,00000,00000,00000, DWORD, D2GetAllIndexFromStat, (Stats* ptStats, DWORD statID, D2Stat* allIndex, DWORD maxIndex));
//F7(STD, D2Common,11270,11270,11270,00000,00000,00000,00000, DWORD, D2GetAllIndexFromStatID, (Unit* ptItem, DWORD statID, D2Stat* allIndex, DWORD)); //F7(STD, D2Common,11270,11270,11270,00000,00000,00000,00000, DWORD, D2GetAllIndexFromStatID, (Unit* ptItem, DWORD statID, D2Stat* allIndex, DWORD));
F7(STD, D2Common,11276,11276,11276,10254,10074,10111,10435,11081, DWORD, D2GetSkillCost, (Unit* ptChar, int skpoints, DWORD skillID, DWORD curSkillLevel));//not 10447 F7(STD, D2Common,11276,11276,11276,10254,10074,10111,10435, DWORD, D2GetSkillCost, (Unit* ptChar, int skpoints, DWORD skillID, DWORD curSkillLevel));//not 10447
A7(FAST, D2Common,00000,00000,82C80, 15D0, 1800, 1220, 12D0, 17B0, CharStatsBIN*, D2GetCharStatsBIN, (DWORD charID)); A7(FAST, D2Common,00000,00000,82C80, 15D0, 1800, 1220, 12D0, CharStatsBIN*, D2GetCharStatsBIN, (DWORD charID));
A7(FAST, D2Common,00000,00000,12410,5D7D0,1A100,116C0,1C020,5B0E0, DWORD, D2CompileCubeInput, (CubeInput* cubeinput, char* s, DWORD p1, DWORD p2)); A7(FAST, D2Common,00000,00000,12410,5D7D0,1A100,116C0,1C020, DWORD, D2CompileCubeInput, (CubeInput* cubeinput, char* s, DWORD p1, DWORD p2));
A7(FAST, D2Common,00000,00000,12910,5D210,19B40,11100,1BA60,5AB20, DWORD, D2CompileCubeOutput, (CubeOutput* cubeoutput, char* s, DWORD p1, DWORD p2)); A7(FAST, D2Common,00000,00000,12910,5D210,19B40,11100,1BA60, DWORD, D2CompileCubeOutput, (CubeOutput* cubeoutput, char* s, DWORD p1, DWORD p2));
A7(FAST, D2Common,00000,00000,2B1A0, 11F0, 1380, 1140, 1300, 1160, ItemTypesBIN*, D2GetItemTypesBIN, (DWORD itemTypesId)); A7(FAST, D2Common,00000,00000,2B1A0, 11F0, 1380, 1140, 1300, ItemTypesBIN*, D2GetItemTypesBIN, (DWORD itemTypesId));
//A7(FAST, D2Common,00000,00000,62FD0,00000,00000,00000,00000, void, D2EncodeValueCheckMax, (saveBitField* data, DWORD value, DWORD bitSize)); //A7(FAST, D2Common,00000,00000,62FD0,00000,00000,00000,00000, void, D2EncodeValueCheckMax, (saveBitField* data, DWORD value, DWORD bitSize));
A7(FAST, D2Common,00000,00000,642B0, 13F0, 12F0, 1540, 17A0, 17E0, ItemStatCostBIN*,D2GetItemStatCostBIN, (DWORD id)); A7(FAST, D2Common,00000,00000,642B0, 13F0, 12F0, 1540, 17A0, ItemStatCostBIN*,D2GetItemStatCostBIN, (DWORD id));
//A7(FAST, D2Common,00000,00000,764A0,00000,00000,00000,00000, void*, D2Common764A0, (Stats* ptStats, DWORD stat, ItemStatCostBIN* itemStatCost ,DWORD)); //A7(FAST, D2Common,00000,00000,764A0,00000,00000,00000,00000, void*, D2Common764A0, (Stats* ptStats, DWORD stat, ItemStatCostBIN* itemStatCost ,DWORD));
//A7(STD, D2Common,00000,00000,76E30,00000,00000,00000,00000, void, D2PreUpdateDisabledStat, (Stats* ptStats)); //A7(STD, D2Common,00000,00000,76E30,00000,00000,00000,00000, void, D2PreUpdateDisabledStat, (Stats* ptStats));
//A7(FAST, D2Common,00000,00000,76C10,00000,00000,00000,00000, void, D2ApplyStat,(Stats* ptCharStats, DWORD statId, DWORD value, Unit* ptItem)); //A7(FAST, D2Common,00000,00000,76C10,00000,00000,00000,00000, void, D2ApplyStat,(Stats* ptCharStats, DWORD statId, DWORD value, Unit* ptItem));
A7(FAST, D2Common,738A4,739B4,84268, 96E0, 98D0, 9900, 9900, B5E0, void*, D2ReadFile,(DWORD unused, char* filename, DWORD* size, const char*, DWORD)); A7(FAST, D2Common,738A4,739B4,84268, 96E0, 98D0, 9900, 9900, void*, D2ReadFile,(DWORD unused, char* filename, DWORD* size, const char*, DWORD));
//A7(FAST, D2Common,00000,00000, 94D0,00000,00000,00000,00000, void*, D2GetStringIDForTxtFile,(const char * string)); //A7(FAST, D2Common,00000,00000, 94D0,00000,00000,00000,00000, void*, D2GetStringIDForTxtFile,(const char * string));
A7(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870,80C40, void, D2LoadSuperuniques,(DWORD mempool));//FASCALL UNTIL 1.10 A7(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870, void, D2LoadSuperuniques,(DWORD mempool));//FASCALL UNTIL 1.10
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -308,24 +307,24 @@ A7(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870,80C40, void, D2Loa
//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
A7(FAST, D2Client, 1000, 1000, 1000,75D00,A9070,BEF70,2B420,A9480, void*, D2LoadImage, (const char* filename, DWORD filetype)); A7(FAST, D2Client, 1000, 1000, 1000,75D00,A9070,BEF70,2B420, void*, D2LoadImage, (const char* filename, DWORD filetype));
A7(FAST, D2Client, 1150, 1150, 1140,00000,00000,00000,00000,00000, void, D2FreeImage, (void* image));//6FAA1140 A7(FAST, D2Client, 1150, 1150, 1140,00000,00000,00000,00000, void, D2FreeImage, (void* image));//6FAA1140
A7(FAST, D2Client, D640, D630, DB50,73620,5E4E0,79670,147A0,B6890, void, D2SendMsgToAll,(BYTE* data));//1.11 and 1.11b by ESI !! A7(FAST, D2Client, D640, D630, DB50,73620,5E4E0,79670,147A0, void, D2SendMsgToAll,(BYTE* data));//1.11 and 1.11b by ESI !!
//A7(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000, int, D2GetAvgChanceMonsterWillHitYou, ());//6FAB5A80 //A7(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000, int, D2GetAvgChanceMonsterWillHitYou, ());//6FAB5A80
A7(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000,00000, DWORD, D2GetLastMonsterIDFight, ());//6FAB5A80 A7(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000, DWORD, D2GetLastMonsterIDFight, ());//6FAB5A80
A7(STD, D2Client,29800,297F0,2FD60,828A0,89320,6B280,BCEA0,BF640, void, D2PrintStatsPage, ()); A7(STD, D2Client,29800,297F0,2FD60,828A0,89320,6B280,BCEA0, void, D2PrintStatsPage, ());
//A7(FAST, D2Client,00000,00000,45990,00000,00000,00000,00000, Unit*, D245990, (Inventory*,DWORD idItem);//6FAE5990 //A7(FAST, D2Client,00000,00000,45990,00000,00000,00000,00000, Unit*, D245990, (Inventory*,DWORD idItem);//6FAE5990
A7(FAST, D2Client,4BB20,4BB20,521C0,B8CB0,21250,88EA0,54E10,2CE40, DWORD, D2PrintStat,(Unit* ptItem, Stats* ptStats, DWORD statID, DWORD statIndex, DWORD statValue, LPWSTR lpText));//statID=EAX, lpText=ESI 1.11b A7(FAST, D2Client,4BB20,4BB20,521C0,B8CB0,21250,88EA0,54E10, DWORD, D2PrintStat,(Unit* ptItem, Stats* ptStats, DWORD statID, DWORD statIndex, DWORD statValue, LPWSTR lpText));//statID=EAX, lpText=ESI 1.11b
A7(FAST, D2Client,85A60,84DE0,80430,9EEB0,62070,8B7A0,BF5F0,18820, LPWSTR, D2SetColorPopup, (LPWSTR popupText, DWORD color));//1.11 and 1.11b BY EDI A7(FAST, D2Client,85A60,84DE0,80430,9EEB0,62070,8B7A0,BF5F0, LPWSTR, D2SetColorPopup, (LPWSTR popupText, DWORD color));//1.11 and 1.11b BY EDI
//A7(FAST, D2Client,00000,00000,869F0,00000,00000,00000,00000, Unit*, D2ClientGetObject, (DWORD itemNum, DWORD type));//6FB269F0 //A7(FAST, D2Client,00000,00000,869F0,00000,00000,00000,00000, Unit*, D2ClientGetObject, (DWORD itemNum, DWORD type));//6FB269F0
A7(FAST, D2Client,B4360,B36E0,B5820,3ACC0,54210,31FA0,88A70,26270, DWORD, D2PlaySound, (DWORD id, DWORD, DWORD, DWORD, DWORD)); A7(FAST, D2Client,B4360,B36E0,B5820,3ACC0,54210,31FA0,88A70, DWORD, D2PlaySound, (DWORD id, DWORD, DWORD, DWORD, DWORD));
//A7(FAST, D2Client,B9970,B8CF0,BB0F0,00000,00000,00000,00000, void, D2FillRect,(DWORD x, DWORD y, DWORD Width, DWORD Height, DWORD color, DWORD transTbl)); //A7(FAST, D2Client,B9970,B8CF0,BB0F0,00000,00000,00000,00000, void, D2FillRect,(DWORD x, DWORD y, DWORD Width, DWORD Height, DWORD color, DWORD transTbl));
A7(FAST, D2Client,00000,00000,00000,00000,571C0,18450,46150,790D0, Unit*, D2GetCurrentNPC, ()); A7(FAST, D2Client,00000,00000,00000,00000,571C0,18450,46150, Unit*, D2GetCurrentNPC, ());
A7(FAST, D2Client,00000,00000,00000,73260,5DE40,791A0,143E0,B61F0, void, D2SendToServerXX,(DWORD size, BYTE * data));//by EBX A7(FAST, D2Client,00000,00000,00000,73260,5DE40,791A0,143E0, void, D2SendToServerXX,(DWORD size, BYTE * data));//by EBX
A7(FAST, D2Client,88940,87CC0,83260,A1F30,65690,8EF00,C2790,1C190, void, D2TogglePage, (DWORD a, DWORD b, DWORD c)); A7(FAST, D2Client,88940,87CC0,83260,A1F30,65690,8EF00,C2790, void, D2TogglePage, (DWORD a, DWORD b, DWORD c));
A7(FAST, D2Client,00000,00000,00000,A6520,710C0,A6640,8CD00,90C10, void, D2ClickOnStashButton, (DWORD x, DWORD y));//BY x=ESI y=EDI A7(FAST, D2Client,00000,00000,00000,A6520,710C0,A6640,8CD00, void, D2ClickOnStashButton, (DWORD x, DWORD y));//BY x=ESI y=EDI
A7(STD, D2Client,897B0,88B30,84110,9E3B0,621C0,8B8F0,BEAF0,18AA0, void*, D2LoadBuySelBtn, ()); A7(STD, D2Client,897B0,88B30,84110,9E3B0,621C0,8B8F0,BEAF0, void*, D2LoadBuySelBtn, ());
A7(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0,7DC60, void, D2ReloadGambleScreen, ()); A7(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0, void, D2ReloadGambleScreen, ());
//A7(FAST, D2Client,00000,00000,00000,00000,1FEB0,5CDD0,00000, void, D2OpenNPCMenu, (Unit* ptNPC));//by ESI //A7(FAST, D2Client,00000,00000,00000,00000,1FEB0,5CDD0,00000, void, D2OpenNPCMenu, (Unit* ptNPC));//by ESI
@@ -370,43 +369,43 @@ A7(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0,7DC60, void, D2Relo
//E2S(D2Game,E66D0, void, D2SaveGame, (Game* ptGame));//1.11b //E2S(D2Game,E66D0, void, D2SaveGame, (Game* ptGame));//1.11b
F7(FAST, D2Game,10059,10059,10059,10039,10007,10037,10049,10002, void, D2SetNbPlayers, (DWORD nbPlayers)); F7(FAST, D2Game,10059,10059,10059,10039,10007,10037,10049, void, D2SetNbPlayers, (DWORD nbPlayers));
//A7(FAST, D2Game,00000,00000,01DE0,00000,00000,00000,00000, void*, D2GetClientByClientID, (Game* ptGame, DWORD clientID));//6FC31DE0 //A7(FAST, D2Game,00000,00000,01DE0,00000,00000,00000,00000, void*, D2GetClientByClientID, (Game* ptGame, DWORD clientID));//6FC31DE0
A7(FAST, D2Game,00000,00000, 6C60,E3DA0,E8210,EB060,49930,E5070, void, D2AddClient, (DWORD clientID));//BY EAX A7(FAST, D2Game,00000,00000, 6C60,E3DA0,E8210,EB060,49930, void, D2AddClient, (DWORD clientID));//BY EAX
A7(STD, D2Game,00000,00000, 94E0,E0520,E49A0,A6360,2AAE0,BC700, Game*, D2GetGameByClientID, (DWORD clientID));//6FC394E0 A7(STD, D2Game,00000,00000, 94E0,E0520,E49A0,A6360,2AAE0, Game*, D2GetGameByClientID, (DWORD clientID));//6FC394E0
A7(FAST, D2Game,00000,00000, B0E0,DF250,E36D0,A5080,29820,BB510, void, D2BroadcastFunction, (Game* ptGame, void* fct, void* param));//00DAB0E0 A7(FAST, D2Game,00000,00000, B0E0,DF250,E36D0,A5080,29820, void, D2BroadcastFunction, (Game* ptGame, void* fct, void* param));//00DAB0E0
A7(FAST, D2Game, C380, C650, C710,41420,A0D50,7D220,8A3E0,DB780, DWORD, D2SendPacket, (void* ptNetClient, LPVOID pData, DWORD size));//EAX=ptNetClient [ESP]=pData A7(FAST, D2Game, C380, C650, C710,41420,A0D50,7D220,8A3E0, DWORD, D2SendPacket, (void* ptNetClient, LPVOID pData, DWORD size));//EAX=ptNetClient [ESP]=pData
A7(FAST, D2Game, D650, D920, DB50,44D00,A3F20,802E0,8D5F0,DD4F0, void, D2SetSkillBaseLevelOnClient, (void* ptClient, Unit* ptChar, DWORD skillID, DWORD sLvl, DWORD bRemove));//by EAX,ESI,EBX A7(FAST, D2Game, D650, D920, DB50,44D00,A3F20,802E0,8D5F0, 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, void, D2UpdateClientItem, (NetClient* ptNetClient, Unit* ptChar, Unit* ptItem,DWORD,DWORD,DWORD));//6FC3E6F0 //A7(FAST, D2Game,00000,00000,0E6F0,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, DWORD, D2UpdateInventory, (Game* ptGame, Unit* ptChar, void* ptNetClient, Inventory* pInventory));//6FC40FB0 //A7(FAST, D2Game,00000,00000,10FB0,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, DWORD, D2UpdateItem, (Unit* ptChar, Unit* ptItem, Unit* ptSocketedItem, void* ptNetClient));//6FC410E0 //A7(FAST, D2Game,00000,00000,110E0,00000,00000,00000,00000, DWORD, D2UpdateItem, (Unit* ptChar, Unit* ptItem, Unit* ptSocketedItem, void* ptNetClient));//6FC410E0
A7(STD, D2Game,00000,00000,00000,27230,109F0,AE930,A22E0,15F40, DWORD, D2LinkPortal, (Game* ptGame, Unit* ptObject, DWORD levelEndID, DWORD levelStartID)); A7(STD, D2Game,00000,00000,00000,27230,109F0,AE930,A22E0, DWORD, D2LinkPortal, (Game* ptGame, Unit* ptObject, DWORD levelEndID, DWORD levelStartID));
A7(FAST, D2Game,00000,00000,128F0,38D90,43E60,11FF0,D2070,B2F70, DWORD, D2VerifIfNotCarry1, (Unit* ptItem, ItemsBIN* itemsData, Unit* ptFirstItem));// BY EBX=itemsData EAX=ptFirstItem [ESP]=ptItem A7(FAST, D2Game,00000,00000,128F0,38D90,43E60,11FF0,D2070, 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, Unit*, D2CreateItem, (Game* ptGame, ItemGenerationData* itemGenerationData, DWORD));//6FC4ED80 //A7(FAST, D2Game,00000,00000,1ED80,00000,00000,00000,00000, Unit*, D2CreateItem, (Game* ptGame, ItemGenerationData* itemGenerationData, DWORD));//6FC4ED80
A7(FAST, D2Game,00000,00000,22070, 1090, 1DF0, 11F0, 1280, 1340, Room*, D2TestPositionInRoom, (Room* ptRoom, DWORD x, DWORD y)); A7(FAST, D2Game,00000,00000,22070, 1090, 1DF0, 11F0, 1280, Room*, D2TestPositionInRoom, (Room* ptRoom, DWORD x, DWORD y));
//A7(FAST, D2Game,00000,00000,22410,00000,00000,00000,00000, void, D2AddStaffModAffixes, (Unit* ptItem, ItemGenerationData* itemParam));//6FC52410 //A7(FAST, D2Game,00000,00000,22410,00000,00000,00000,00000, void, D2AddStaffModAffixes, (Unit* ptItem, ItemGenerationData* itemParam));//6FC52410
//A7(FAST, D2Game,00000,00000,22C00,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,22C00,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, WORD, D2GetRareAffixName, (Unit* ptItem, DWORD wantPrefix));//6FC53610 //A7(FAST, D2Game,00000,00000,23610,00000,00000,00000,00000, WORD, D2GetRareAffixName, (Unit* ptItem, DWORD wantPrefix));//6FC53610
//A7(FAST, D2Game,00000,00000,3AD10,00000,00000,00000,00000, DWORD, D2GetSuperUniqueMonsterID, (Game* ptGame, Unit* ptMonster));//6FC6AD10 //A7(FAST, D2Game,00000,00000,3AD10,00000,00000,00000,00000, DWORD, D2GetSuperUniqueMonsterID, (Game* ptGame, Unit* ptMonster));//6FC6AD10
A7(FAST, D2Game,00000,00000,3F220,4ABE0,EC7E0,40B90,24950,CDE20, DWORD, D2SpawnMonster, (Game* ptGame, Room* ptRoom, DWORD zero1, DWORD x, DWORD y, DWORD minusOne, DWORD superuniqueID, DWORD zero2));//wrong param A7(FAST, D2Game,00000,00000,3F220,4ABE0,EC7E0,40B90,24950, DWORD, D2SpawnMonster, (Game* ptGame, Room* ptRoom, DWORD zero1, DWORD x, DWORD y, DWORD minusOne, DWORD superuniqueID, DWORD zero2));//wrong param
A7(STD, D2Game,00000,00000,00000,D6D10,235C0, D410,200E0,59980, void, D2Game235C0, (Game* ptGame, Room* ptRoom)); A7(STD, D2Game,00000,00000,00000,D6D10,235C0, D410,200E0, void, D2Game235C0, (Game* ptGame, Room* ptRoom));
//A7(FAST, D2Game,00000,00000,4C7B0,00000,00000,00000,00000, Unit*, D2GetSkillItem, (Unit* ptChar));//6FC7C7B0 //A7(FAST, D2Game,00000,00000,4C7B0,00000,00000,00000,00000, Unit*, D2GetSkillItem, (Unit* ptChar));//6FC7C7B0
//A7(FAST, D2Game,00000,00000,5A500,00000,00000,00000,00000, DWORD, D2SavePlayer, (Game* ptGame, Unit* ptChar, char* playername, DWORD zero));//6FC8A500 //A7(FAST, D2Game,00000,00000,5A500,00000,00000,00000,00000, DWORD, D2SavePlayer, (Game* ptGame, Unit* ptChar, char* playername, DWORD zero));//6FC8A500
A7(FAST, D2Game,4F100,4F500,5B8A0,B9D70,25D50,44950,54810,3A4C0, DWORD, D2LoadInventory, (Game* ptGame, Unit* pChar, saveBitField* pdata, DWORD p2, DWORD maxSize, DWORD p4, DWORD *ptNbBytesRead));//6FC8B8A0 A7(FAST, D2Game,4F100,4F500,5B8A0,B9D70,25D50,44950,54810, DWORD, D2LoadInventory, (Game* ptGame, Unit* pChar, saveBitField* pdata, DWORD p2, DWORD maxSize, DWORD p4, DWORD *ptNbBytesRead));//6FC8B8A0
A7(FAST, D2Game,7BAE0,7BFD0,8BB00,97620,BEF80,93650,E03A0,6DC40, Unit*, D2GameGetObject, (Game* ptGame, DWORD type, DWORD itemNum));//6FCBBB00 A7(FAST, D2Game,7BAE0,7BFD0,8BB00,97620,BEF80,93650,E03A0, Unit*, D2GameGetObject, (Game* ptGame, DWORD type, DWORD itemNum));//6FCBBB00
//A7(FAST, D2Game,00000,00000,9F320,501C0,F1C50,F1A50,F3220, Unit*, D2GetOwnerMonster, (Unit* ptMonster)); //A7(FAST, D2Game,00000,00000,9F320,501C0,F1C50,F1A50,F3220, Unit*, D2GetOwnerMonster, (Unit* ptMonster));
//A7(FAST, D2Game,00000,00000,E08D0,00000,00000,00000,00000, void, D2UpdateSkillDataAfterUnassignment, (Game* ptGame, Unit* ptChar, DWORD skillID));//6FD108D0 //A7(FAST, D2Game,00000,00000,E08D0,00000,00000,00000,00000, void, D2UpdateSkillDataAfterUnassignment, (Game* ptGame, Unit* ptChar, DWORD skillID));//6FD108D0
A7(FAST, D2Game,00000,00000,00000,99760,C09E0,94E70,E1D90,6FE10, Unit*, D2CreateUnit, (DWORD type, DWORD id, DWORD x, DWORD y, Game* ptGame, Room* ptRoom, DWORD uk1, DWORD uk2, DWORD uk3)); A7(FAST, D2Game,00000,00000,00000,99760,C09E0,94E70,E1D90, Unit*, D2CreateUnit, (DWORD type, DWORD id, DWORD x, DWORD y, Game* ptGame, Room* ptRoom, DWORD uk1, DWORD uk2, DWORD uk3));
A7(FAST, D2Game,00000,00000,00000,9B480,34920,D1AA0,70180,941E0, void, D2OpenPandPortal, (Game* ptGame, Unit* ptChar)); A7(FAST, D2Game,00000,00000,00000,9B480,34920,D1AA0,70180, void, D2OpenPandPortal, (Game* ptGame, Unit* ptChar));
A7(FAST, D2Game,00000,00000,00000,9B470,34910,D1A90,70170,941D0, void, D2OpenPandFinalPortal, (Game* ptGame, Unit* ptChar)); A7(FAST, D2Game,00000,00000,00000,9B470,34910,D1A90,70170, void, D2OpenPandFinalPortal, (Game* ptGame, Unit* ptChar));
A7(FAST, D2Game,00000,00000,00000,84730,85AA0,DBE90,A9610,31920, void, D2MephIA, (Game* ptGame, Unit* ptMonster, DWORD*)); A7(FAST, D2Game,00000,00000,00000,84730,85AA0,DBE90,A9610, void, D2MephIA, (Game* ptGame, Unit* ptMonster, DWORD*));
A7(FAST, D2Game,00000,00000,00000,75980,D7BD0,CD0F0,85B60,4EAD0, void, D2DiabloIA, (Game* ptGame, Unit* ptMonster, DWORD*)); A7(FAST, D2Game,00000,00000,00000,75980,D7BD0,CD0F0,85B60, void, D2DiabloIA, (Game* ptGame, Unit* ptMonster, DWORD*));
A7(FAST, D2Game,00000,00000,00000,EAB20,2BC80,B3B90,B8610,C8850, void, D2BaalIA, (Game* ptGame, Unit* ptMonster, DWORD*)); A7(FAST, D2Game,00000,00000,00000,EAB20,2BC80,B3B90,B8610, void, D2BaalIA, (Game* ptGame, Unit* ptMonster, DWORD*));
A7(FAST, D2Game,00000,00000,00000,70320,D2D70,C2A90,7B4E0,49480, void, D2UberMephIA, (Game* ptGame, Unit* ptMonster, DWORD*)); A7(FAST, D2Game,00000,00000,00000,70320,D2D70,C2A90,7B4E0, void, D2UberMephIA, (Game* ptGame, Unit* ptMonster, DWORD*));
A7(FAST, D2Game,00000,00000,00000,7F200,7FE60,D6250,A39D0,2C3F0, void, D2UberDiabloIA, (Game* ptGame, Unit* ptMonster, DWORD*)); A7(FAST, D2Game,00000,00000,00000,7F200,7FE60,D6250,A39D0, void, D2UberDiabloIA, (Game* ptGame, Unit* ptMonster, DWORD*));
A7(FAST, D2Game,00000,00000,00000,E92B0,2A300,B2210,B6C80,C6EC0, void, D2UberBaalIA, (Game* ptGame, Unit* ptMonster, DWORD*)); A7(FAST, D2Game,00000,00000,00000,E92B0,2A300,B2210,B6C80, void, D2UberBaalIA, (Game* ptGame, Unit* ptMonster, DWORD*));
//A7(FAST, D2Game,00000,00000,00000,00000,92420,00000,00000, void, D2ReloadGambleScreenGame, (Unit* ptNPC, Game* ptGame, Unit* ptChar, DWORD, DWORD one)); //A7(FAST, D2Game,00000,00000,00000,00000,92420,00000,00000, void, D2ReloadGambleScreenGame, (Unit* ptNPC, Game* ptGame, Unit* ptChar, DWORD, DWORD one));
A7(STD, D2Game,00000,00000, 89C0,E2390,E66D0,A8090,2C830,BE660, void, D2SaveGame, (Game* ptGame) ); A7(STD, D2Game,00000,00000, 89C0,E2390,E66D0,A8090,2C830, void, D2SaveGame, (Game* ptGame) );
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -414,8 +413,8 @@ A7(STD, D2Game,00000,00000, 89C0,E2390,E66D0,A8090,2C830,BE660, void, D2SaveGa
//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
F7(STD, D2Net, 10005,10005,10005,10035,10020,10036,10024,10015, DWORD, D2SendToServer, (DWORD size, DWORD one, void* data));//(DWORD zero, void* data, DWORD size) for 1.10 and before F7(STD, D2Net, 10005,10005,10005,10035,10020,10036,10024, DWORD, D2SendToServer, (DWORD size, DWORD one, void* data));//(DWORD zero, void* data, DWORD size) for 1.10 and before
F7(STD, D2Net, 10006,10006,10006,10018,10018,10015,10002,10012, DWORD, D2SendToClient, (DWORD zero, DWORD clientID, void* data, DWORD size)); F7(STD, D2Net, 10006,10006,10006,10018,10018,10015,10002, DWORD, D2SendToClient, (DWORD zero, DWORD clientID, void* data, DWORD size));
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -440,25 +439,25 @@ F7(STD, D2Net, 10006,10006,10006,10018,10018,10015,10002,10012, DWORD, D2SendT
////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
F7(STD, Fog, 10023,10023,10023,00000,00000,00000,00000,00000, void, D2FogAssertOld, (const char* ptMessage, DWORD eip, DWORD line));//(STDCALL until 1.10) F7(STD, Fog, 10023,10023,10023,00000,00000,00000,00000, void, D2FogAssertOld, (const char* ptMessage, DWORD eip, DWORD line));//(STDCALL until 1.10)
F7(FAST, Fog, 00000,00000,00000,10024,10024,10024,10024,10024, void, D2FogAssert, (const char* ptMessage, DWORD eip, DWORD line)); F7(FAST, Fog, 00000,00000,00000,10024,10024,10024,10024, void, D2FogAssert, (const char* ptMessage, DWORD eip, DWORD line));
F7(FAST, Fog, 10042,10042,10042,10042,10042,10042,10042,10042, void*, D2FogMemAlloc, (DWORD dwMemSize, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero)); F7(FAST, Fog, 10042,10042,10042,10042,10042,10042,10042, void*, D2FogMemAlloc, (DWORD dwMemSize, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
F7(FAST, Fog, 10043,10043,10043,10043,10043,10043,10043,10043, void*, D2FogMemDeAlloc, (void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero)); F7(FAST, Fog, 10043,10043,10043,10043,10043,10043,10043, void*, D2FogMemDeAlloc, (void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
F7(FAST, Fog, 10045,10045,10045,10045,10045,10045,10045,10045, void*, D2AllocMem, (DWORD,DWORD dwMemSize, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero)); F7(FAST, Fog, 10045,10045,10045,10045,10045,10045,10045, void*, D2AllocMem, (DWORD,DWORD dwMemSize, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
F7(FAST, Fog, 10046,10046,10046,10046,10046,10046,10046,10046, void*, D2FreeMem, (DWORD,void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero)); F7(FAST, Fog, 10046,10046,10046,10046,10046,10046,10046, void*, D2FreeMem, (DWORD,void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
F7(FAST, Fog, 10102,10102,10102,10102,10102,10102,10102,10102, DWORD, D2MPQOpenFile, (char* ptPath, void** buf)); F7(FAST, Fog, 10102,10102,10102,10102,10102,10102,10102, DWORD, D2MPQOpenFile, (char* ptPath, void** buf));
F7(FAST, Fog, 10103,10103,10103,10103,10103,10103,10103,10103, DWORD, D2MPQCloseFile, (void* mpqfile)); F7(FAST, Fog, 10103,10103,10103,10103,10103,10103,10103, DWORD, D2MPQCloseFile, (void* mpqfile));
F7(FAST, Fog, 10104,10104,10104,10104,10104,10104,10104,10104, DWORD, D2MPQReadFile, (void* mpqfile, BYTE* buffer, DWORD nbToRead, DWORD* nbRead,DWORD,DWORD,DWORD)); F7(FAST, Fog, 10104,10104,10104,10104,10104,10104,10104, DWORD, D2MPQReadFile, (void* mpqfile, BYTE* buffer, DWORD nbToRead, DWORD* nbRead,DWORD,DWORD,DWORD));
F7(FAST, Fog, 10105,10105,10105,10105,10105,10105,10105,10105, DWORD, D2MPQGetSizeFile, (void* mpqfile, DWORD* toReset)); F7(FAST, Fog, 10105,10105,10105,10105,10105,10105,10105, DWORD, D2MPQGetSizeFile, (void* mpqfile, DWORD* toReset));
F7(FAST, Fog, 10115,10115,10115,10115,10115,10115,10115,10115, void, D2FogGetSavePath, (char* ptPath, DWORD maxsize)); F7(FAST, Fog, 10115,10115,10115,10115,10115,10115,10115, void, D2FogGetSavePath, (char* ptPath, DWORD maxsize));
F7(FAST, Fog, 10116,10116,10116,10116,10116,10116,10116,10116, void, D2FogGetInstallPath, (char* ptPath, DWORD maxsize)); F7(FAST, Fog, 10116,10116,10116,10116,10116,10116,10116, void, D2FogGetInstallPath, (char* ptPath, DWORD maxsize));
//F7(STD, Fog, 10126,10126,10126,10126,10126,10126,10126, DWORD, D2InitBitField, (saveBitField* data, BYTE* buf, DWORD bufsize));//6FF536C0 //F7(STD, Fog, 10126,10126,10126,10126,10126,10126,10126, DWORD, D2InitBitField, (saveBitField* data, BYTE* buf, DWORD bufsize));//6FF536C0
//F7(STD, Fog, 10127,10127,10127,10127,10127,10127,10127, DWORD, D2GetBitFieldSize, (saveBitField* data));//6FF536C0 //F7(STD, Fog, 10127,10127,10127,10127,10127,10127,10127, DWORD, D2GetBitFieldSize, (saveBitField* data));//6FF536C0
//F7(STD, Fog, 10128,10128,10128,10128,10128,10128,10128, void, D2EncodeValue, (saveBitField* data, DWORD value, DWORD bitSize));//6FF536C0 //F7(STD, Fog, 10128,10128,10128,10128,10128,10128,10128, void, D2EncodeValue, (saveBitField* data, DWORD value, DWORD bitSize));//6FF536C0
//F7(STD, Fog, 10130,10130,10130,10130,10130,10130,10130, DWORD, D2DecodeValue, (saveBitField* data,DWORD readingSize));//6FF53840 //F7(STD, Fog, 10130,10130,10130,10130,10130,10130,10130, DWORD, D2DecodeValue, (saveBitField* data,DWORD readingSize));//6FF53840
F7(STD, Fog, 10212,10212,10212,10212,10212,10212,10212,10212, void, D2Fog10212, (DWORD unknow)); F7(STD, Fog, 10212,10212,10212,10212,10212,10212,10212, void, D2Fog10212, (DWORD unknow));
//F7(STD, Fog, 10217,10217,10217,10217,10217,10217,10217, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840 //F7(STD, Fog, 10217,10217,10217,10217,10217,10217,10217, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840
F7(STD, Fog, 00000,00000,00000,10265,10265,10265,10265,10265, int, D2GetInstructionPointer, ()); F7(STD, Fog, 00000,00000,00000,10265,10265,10265,10265, int, D2GetInstructionPointer, ());
//Fog10213 getIndexFromLookupTable (&table,code,bool) //Fog10213 getIndexFromLookupTable (&table,code,bool)
@@ -477,12 +476,12 @@ F7(STD, Fog, 00000,00000,00000,10265,10265,10265,10265,10265, int, D2GetInstru
////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,10002,10004,10010,10011,10011, LPWSTR, D2GetStringFromString, (const char* ptString));//6FC13BC0 //F7(FAST, D2Lang, 10003,10003,10003,00000,00000,00000,00000, LPWSTR, D2GetStringFromString, (const char* ptString));//6FC13BC0
F7(FAST, D2Lang, 10004,10004,10004,10005,10000,10005,10003,10004, LPWSTR, D2GetStringFromIndex, (WORD dwIndexNum)); F7(FAST, D2Lang, 10004,10004,10004,10005,10000,10005,10003, LPWSTR, D2GetStringFromIndex, (WORD dwIndexNum));
//F7(STD, D2Lang, 10006,10006,10006,00000,00000,00000,00000, void, D2GetStringLang, (LPSTR ptLang, DWORD Zero));//6FC13FB0 //F7(STD, D2Lang, 10006,10006,10006,00000,00000,00000,00000, void, D2GetStringLang, (LPSTR ptLang, DWORD Zero));//6FC13FB0
F7(STD, D2Lang, 10007,10007,10007,10009,10013,10002,10009,10001, DWORD, D2GetLang, ());//14b 00522A20 F7(STD, D2Lang, 10007,10007,10007,10009,10013,10002,10009, DWORD, D2GetLang, ());
F7(STD, D2Lang, 10010,10010,10010,00000,00000,00000,00000,00000, DWORD, D2PrintBigNumber, (LPWSTR ptBuf , DWORD number, DWORD size));//6FC14210 F7(STD, D2Lang, 10010,10010,10010,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 //F7(STD, D2Lang, 10013,10013,10013,00000,00000,00000,00000, DWORD, D2GetStringAndIndexFromString, (const char* ptString , LPWSTR result));//6FC13960
//A7(FAST, D2Lang, 00000,00000,029B0,00000,00000,00000,00000, DWORD, D2UnicodeWidth, (DWORD MemLoc, WORD Size));//6FC129B0 //A7(FAST, D2Lang, 00000,00000,029B0,00000,00000,00000,00000, DWORD, D2UnicodeWidth, (DWORD MemLoc, WORD Size));//6FC129B0
//A7(FAST, D2Lang, 00000,00000,02E60,00000,00000,00000,00000, LPWSTR, D2GetStrFromIndex , (void* ptFile, void* ptMemLoc, DWORD dwIndexNum));//6FC12E60 //A7(FAST, D2Lang, 00000,00000,02E60,00000,00000,00000,00000, LPWSTR, D2GetStrFromIndex , (void* ptFile, void* ptMemLoc, DWORD dwIndexNum));//6FC12E60
//A7(FAST, D2Lang, 00000,00000,03640,00000,00000,00000,00000, TblHeader*, D2LoadTblFile, (LPCSTR lpszFileName));//6FC13640 //A7(FAST, D2Lang, 00000,00000,03640,00000,00000,00000,00000, TblHeader*, D2LoadTblFile, (LPCSTR lpszFileName));//6FC13640
@@ -498,9 +497,9 @@ F7(STD, D2Lang, 10013,10013,10013,00000,00000,00000,00000,10005, DWORD, D2GetS
//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, void, D2StormMPQCloseFile, (void* mpqfile)); //F7(STD, Storm, 253, 253, 253, 253, 253, 253, 000, void, D2StormMPQCloseFile, (void* mpqfile));
F7(STD, Storm, 268, 268, 268, 268, 268, 268, 268, 268, DWORD, D2StormMPQOpenFile, (DWORD zero, LPCSTR fileName, DWORD dwSearchScope, void** buffer)) F7(STD, Storm, 268, 268, 268, 268, 268, 268, 268, DWORD, D2StormMPQOpenFile, (DWORD zero, LPCSTR fileName, DWORD dwSearchScope, void** buffer))
F7(STD, Storm, 503, 503, 503, 503, 503, 503, 503, 503, void, D2Storm503, (DWORD, DWORD, DWORD)); F7(STD, Storm, 503, 503, 503, 503, 503, 503, 503, void, D2Storm503, (DWORD, DWORD, DWORD));
F7(STD, Storm, 511, 511, 511, 511, 511, 511, 511, 511, void, D2FreeWinMessage, (sWinMessage* msg)); F7(STD, Storm, 511, 511, 511, 511, 511, 511, 511, void, D2FreeWinMessage, (sWinMessage* msg));
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -512,12 +511,12 @@ F7(STD, Storm, 511, 511, 511, 511, 511, 511, 511, 511, void, D2FreeWin
//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
F7(STD, D2gfx, 10005,10005,10005,10000,10063,10043,10031,10012, DWORD, D2GetResolution,() ); F7(STD, D2gfx, 10005,10005,10005,10000,10063,10043,10031, DWORD, D2GetResolution,() );
//F7,STD, D2gfx, 10023,10023,10023,00000,00000,00000,00000, DWORD, D2CreateMainWindow,(DWORD,DWORD) ); //F7,STD, D2gfx, 10023,10023,10023,00000,00000,00000,00000, DWORD, D2CreateMainWindow,(DWORD,DWORD) );
//F7(STD, D2gfx, 10026,10026,10026,00000,00000,00000,00000, DWORD, D2ShowWindow,() ); //F7(STD, D2gfx, 10026,10026,10026,00000,00000,00000,00000, DWORD, D2ShowWindow,() );
//F7,STD, D2gfx, 10027,10027,10027,00000,00000,00000,00000, HWND, D2GetWindowHandle,() );//6FA749C0 //F7,STD, D2gfx, 10027,10027,10027,00000,00000,00000,00000, HWND, D2GetWindowHandle,() );//6FA749C0
F7(STD, D2gfx, 10055,10055,10055,10028,10000,10062,10014,10028, void, D2FillArea,(DWORD x1, DWORD y1, DWORD x2, DWORD y2, DWORD color, DWORD transTbl)); F7(STD, D2gfx, 10055,10055,10055,10028,10000,10062,10014, void, D2FillArea,(DWORD x1, DWORD y1, DWORD x2, DWORD y2, DWORD color, DWORD transTbl));
F7(STD, D2gfx, 10072,10072,10072,10047,10044,10024,10041,10042, void, D2PrintImage,(sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) ); F7(STD, D2gfx, 10072,10072,10072,10047,10044,10024,10041, void, D2PrintImage,(sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) );
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -531,36 +530,36 @@ F7(STD, D2gfx, 10072,10072,10072,10047,10044,10024,10041,10042, void, D2PrintI
//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
F7(FAST, D2Win, 10046,10046,10046,10061,10075,10015,10022,10051, void, D2PrintLineOnTextBox,(void* screen, char* s, DWORD color) ); F7(FAST, D2Win, 10046,10046,10046,10061,10075,10015,10022, void, D2PrintLineOnTextBox,(void* screen, char* s, DWORD color) );
F7(FAST, D2Win, 10117,10117,10117,10020,10064,10001,10150,10076, void, D2PrintString,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD bfalse) ); F7(FAST, D2Win, 10117,10117,10117,10020,10064,10001,10150, void, D2PrintString,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD bfalse) );
F7(FAST, D2Win, 10121,10121,10121,10034,10128,10132,10028,10150, DWORD, D2GetPixelLen,(LPWSTR s) ); F7(FAST, D2Win, 10121,10121,10121,10034,10128,10132,10028, DWORD, D2GetPixelLen,(LPWSTR s) );
F7(FAST, D2Win, 10127,10127,10127,10141,10170,10010,10184,10047, DWORD, D2SetFont,(DWORD fontID) ); F7(FAST, D2Win, 10127,10127,10127,10141,10170,10010,10184, DWORD, D2SetFont,(DWORD fontID) );
F7(FAST, D2Win, 10129,10129,10129,10118,10039,10031,10085,10137, void, D2PrintPopup,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD center) ); F7(FAST, D2Win, 10129,10129,10129,10118,10039,10031,10085, void, D2PrintPopup,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD center) );
F7(FAST, D2Win, 10131,10131,10131,00000,00000,00000,00000,00000, void, D2GetPixelRect,(LPWSTR s, DWORD* x, DWORD* y) );//6F8AB260 F7(FAST, D2Win, 10131,10131,10131,00000,00000,00000,00000, void, D2GetPixelRect,(LPWSTR s, DWORD* x, DWORD* y) );//6F8AB260
F7(FAST, D2Win, 10132,10132,10132,00000,00000,00000,00000,00000, DWORD, D2PrintTextPopup,(LPWSTR s, DWORD x, DWORD y, DWORD uk, DWORD type, DWORD color) );//6F8AB080 F7(FAST, D2Win, 10132,10132,10132,00000,00000,00000,00000, DWORD, D2PrintTextPopup,(LPWSTR s, DWORD x, DWORD y, DWORD uk, DWORD type, DWORD color) );//6F8AB080
F7(STD, D2Win, 10017,10017,10017,10147,10113,10098,10098,10164, void*, D2CreateTextBox,(DWORD* data) ); F7(STD, D2Win, 10017,10017,10017,10147,10113,10098,10098, 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
F7(STD, D2CMP, 10032,10032,10032,10021,10014,10106,10065,10020, DWORD, D2CMP10014, (void* image) ); F7(STD, D2CMP, 10032,10032,10032,10021,10014,10106,10065, DWORD, D2CMP10014, (void* image) );
//ONLY UNTIL 1.10 : //ONLY UNTIL 1.10 :
A7(FAST, D2Client, BA00, B9F0, C080,00000,00000,00000,00000,00000, DWORD, D2isLODGame, ());//6FAAC080 A7(FAST, D2Client, BA00, B9F0, C080,00000,00000,00000,00000, DWORD, D2isLODGame, ());//6FAAC080
A7(FAST, D2Client, 00000,00000, C090,00000,00000,00000,00000,00000, BYTE, D2GetDifficultyLevel, ());//6FAAC090 1.09 should be BA10 (b) BA00 (d) A7(FAST, D2Client, 00000,00000, C090,00000,00000,00000,00000, BYTE, D2GetDifficultyLevel, ());//6FAAC090 1.09 should be BA10 (b) BA00 (d)
A7(STD, D2Client, B6670,B59F0,B7BC0,00000,00000,00000,00000,00000, DWORD, D2GetMouseX, ());//6FB57BC0 A7(STD, D2Client, B6670,B59F0,B7BC0,00000,00000,00000,00000, DWORD, D2GetMouseX, ());//6FB57BC0
A7(STD, D2Client, B6680,B5A00,B7BD0,00000,00000,00000,00000,00000, DWORD, D2GetMouseY, ());//6FB57BD0 A7(STD, D2Client, B6680,B5A00,B7BD0,00000,00000,00000,00000, DWORD, D2GetMouseY, ());//6FB57BD0
A7(STD, D2Client, 8DC40,8CFC0,883D0,00000,00000,00000,00000,00000, Unit*, D2GetClientPlayer, ());//6FB283D0 A7(STD, D2Client, 8DC40,8CFC0,883D0,00000,00000,00000,00000, Unit*, D2GetClientPlayer, ());//6FB283D0
A7(FAST, D2Client, B920, B910, BF60,00000,00000,00000,00000,00000, void, D2CleanStatMouseUp, ());//6FAABF60 A7(FAST, D2Client, B920, B910, BF60,00000,00000,00000,00000, void, D2CleanStatMouseUp, ());//6FAABF60
A7(FAST, D2Client, D210, D200, D990,00000,00000,00000,00000,00000, void, D2SendToServer3, (BYTE type, WORD p));//6FAAD990 A7(FAST, D2Client, D210, D200, D990,00000,00000,00000,00000, void, D2SendToServer3, (BYTE type, WORD p));//6FAAD990
//A7(FAST, D2Client, 00000,00000, DA20,00000,00000,00000,00000, void, D2SendToServer5, (BYTE type, DWORD p));//6FAADA20 //A7(FAST, D2Client, 00000,00000, DA20,00000,00000,00000,00000, void, D2SendToServer5, (BYTE type, DWORD p));//6FAADA20
//A7(FAST, D2Client, 00000,00000, D9E0,00000,00000,00000,00000, void, D2SendToServer7, (BYTE type, WORD p1, WORD p2, WORD p3));//6FAAD9E0 //A7(FAST, D2Client, 00000,00000, D9E0,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, void, D2SendToServer9, (BYTE type, DWORD p1, DWORD p2));//6FAADA40 //A7(FAST, D2Client, 00000,00000, DA40,00000,00000,00000,00000, void, D2SendToServer9, (BYTE type, DWORD p1, DWORD p2));//6FAADA40
//A7(FAST, D2Client, 00000,00000, DA70,00000,00000,00000,00000, void, D2SendToServer13,(BYTE type, DWORD p1, DWORD p2, DWORD p3));//6FAADA70 //A7(FAST, D2Client, 00000,00000, DA70,00000,00000,00000,00000, void, D2SendToServer13,(BYTE type, DWORD p1, DWORD p2, DWORD p3));//6FAADA70
A7(FAST, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000,00000, NetClient*, D2GetClient, (Unit* ptUnit, char* lpszErrFile, DWORD ErrLine));//6FCBC2E0 A7(FAST, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000, NetClient*, D2GetClient, (Unit* ptUnit, char* lpszErrFile, DWORD ErrLine));//6FCBC2E0
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////// VARIABLES //////// //////// VARIABLES ////////
@@ -582,23 +581,22 @@ A7(FAST, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000,00000, NetClient*, D2
//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 //C7(D2Common,000000,000000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C, DataTables*,SgptDataTables); //03836A20 - 037A0000 //01EE6A20
C7(D2Client, D50E8, D40E0, D40F0, F5C60, F4FC8, DC6E4, DBC4C,F7038, DWORD, ResolutionY);//0x258 = 600 C7(D2Client, D50E8, D40E0, D40F0, F5C60, F4FC8, DC6E4, DBC4C, DWORD, ResolutionY);//0x258 = 600
C7(D2Client, D50EC, D40E4, D40F4, F5C5C, F4FC4, DC6E0, DBC48,F7034, DWORD, ResolutionX);//0x320 = 800 C7(D2Client, D50EC, D40E4, D40F4, F5C5C, F4FC4, DC6E0, DBC48, DWORD, ResolutionX);//0x320 = 800
C7(D2Client,125AD8,124958,11A74C,11BD28,11BEFC,11BD2C,11B9A4,11D358, DWORD, NegWindowStartY);//0xFFFFFFC4 = -60 C7(D2Client,125AD8,124958,11A74C,11BD28,11BEFC,11BD2C,11B9A4, DWORD, NegWindowStartY);//0xFFFFFFC4 = -60
C7(D2Client,125AD4,124954,11A748,11BD24,11BEF8,11BD28,11B9A0,11D354, DWORD, WindowStartX);//0x50 = 80 C7(D2Client,125AD4,124954,11A748,11BD24,11BEF8,11BD28,11B9A0, DWORD, WindowStartX);//0x50 = 80
//C7(D2Launch, 55818, 56088, 2CD5C,000000, 2CD5C,000000,000000, DWORD, GameTypeMode);//0x50 = 80 //6FA3CD5C-6FA10000 //C7(D2Launch, 55818, 56088, 2CD5C,000000, 2CD5C,000000,000000, DWORD, GameTypeMode);//0x50 = 80 //6FA3CD5C-6FA10000
C7(D2Game, F2A80, F2918,113FB8,111718,1115E0,1105E0,1107B8,1105E0, NetClient*, ClientTable); C7(D2Game, F2A80, F2918,113FB8,111718,1115E0,1105E0,1107B8, NetClient*, ClientTable);
//C7(D2Client,000000,000000,000000,000000,104225,000000,000000, DWORD, CurrentNPCNum); //C7(D2Client,000000,000000,000000,000000,104225,000000,000000, DWORD, CurrentNPCNum);
C7(D2Client,000000,000000,000000, FB3F4,11A2F4,10330C,119854,1087B4, DWORD, IsLodGame); C7(D2Client,000000,000000,000000, FB3F4,11A2F4,10330C,119854, DWORD, IsLodGame);
C7(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000,000000, BYTE, DifficultyLevel); C7(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000, BYTE, DifficultyLevel);
//C7(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000,11D1D8, BYTE, DifficultyLevel); C7(D2Client,000000,000000,000000,10A40C,11B414,101634,11B824, DWORD, MouseY);//0x258 = 600
C7(D2Client,000000,000000,000000,10A40C,11B414,101634,11B824,11C94C, DWORD, MouseY);//0x258 = 600 C7(D2Client,000000,000000,000000,10A410,11B418,101638,11B828, DWORD, MouseX);//0x320 = 800
C7(D2Client,000000,000000,000000,10A410,11B418,101638,11B828,11C950, DWORD, MouseX);//0x320 = 800 C7(D2Client,000000,000000,000000,11C4F0,11C1E0,11C3D0,11BBFC, Unit*, ptClientChar);
C7(D2Client,000000,000000,000000,11C4F0,11C1E0,11C3D0,11BBFC,11D050, Unit*, ptClientChar);
C7(D2Client, DB918, DA828,000000,000000,000000,000000,000000,000000, DWORD, NbStatDesc); C7(D2Client, DB918, DA828,000000,000000,000000,000000,000000, DWORD, NbStatDesc);
C7(D2Client, DAF98, D9EA8,000000,000000,000000,000000,000000,000000, DWORD, StatDescTable); C7(D2Client, DAF98, D9EA8,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);

View File

@@ -1,118 +0,0 @@
#include "VersionInfo.h"
#pragma comment(lib, "Version.Lib") //<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Delphi 7 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! :(
bool IsFile(char* sPath)
{
bool bFile = false;
HANDLE hFile = CreateFile
(
sPath,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
bFile = true;
}
return bFile;
}
bool GetAppVersion(char* FileName, TFileVersion* VerInfo){ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
VerInfo->full = -1;
if(!IsFile(FileName)){ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
return false; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20>-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
DWORD FSize = GetFileVersionInfoSize(FileName,NULL); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
if(FSize==0){ // <20><><EFBFBD><EFBFBD> 0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return false;
}
LPVOID pBlock = (char*)malloc(FSize); // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GetFileVersionInfo(FileName,NULL,FSize,pBlock); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LPVOID MS;
UINT LS;
try{
VerQueryValue(pBlock,"\\",&MS,&LS); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
catch(...){
return false; // <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
VS_FIXEDFILEINFO FixedFileInfo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
memmove(&FixedFileInfo, MS, LS); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD FileVersionMS = FixedFileInfo.dwFileVersionMS;
DWORD FileVersionLS = FixedFileInfo.dwFileVersionLS;
VerInfo->major = HIWORD(FileVersionMS) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VerInfo->minor = LOWORD(FileVersionMS); // <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VerInfo->revision = HIWORD(FileVersionLS);
VerInfo->subrevision = LOWORD(FileVersionLS);
return true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
#define SUBKEY "Software\\Blizzard Entertainment\\Diablo II"
#define GAMEFILE "\\Game.exe"
bool GetD2Path(char* buf, DWORD bufsize)
{
HKEY hKey;
DWORD type;
int res;
if (RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
res = RegQueryValueEx(hKey,"InstallPath",NULL,&type,(LPBYTE)buf,&bufsize);
RegCloseKey(hKey);
if (res!=ERROR_SUCCESS) return false;
} else if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
res = RegQueryValueEx(hKey,"InstallPath",NULL,&type,(LPBYTE)buf,&bufsize);
RegCloseKey(hKey);
if (res!=ERROR_SUCCESS) return false;
} else {
return false;
}
strcat(buf, GAMEFILE);
if (GetFileAttributes(buf) == INVALID_FILE_ATTRIBUTES)
return false;
return true;
};
int GetVerD2(TFileVersion GameVer)
{
if ((GameVer.major != 1)||(GameVer.minor != 0)) return -1;
switch (GameVer.revision)
{
case 9:
if (GameVer.subrevision == 20) return v109b;
if (GameVer.subrevision == 22) return v109d;
break;
case 10:
if (GameVer.subrevision == 39) return v110;
break;
case 11:
if (GameVer.subrevision == 45) return v111;
if (GameVer.subrevision == 46) return v111b;
break;
case 12:
if (GameVer.subrevision == 49) return v112;
break;
case 13:
if (GameVer.subrevision == 60) return v113c;
if (GameVer.subrevision == 64) return v113d;
break;
}
return -1;
}
int GetD2Version(char* PathGameExe)
{
TFileVersion GameVer = {-1};
if (! GetAppVersion(PathGameExe, &GameVer)) return -1;
int ver = GetVerD2(GameVer);
return ver;
}

View File

@@ -1,30 +0,0 @@
#include <windows.h>
union TFileVersion
{
__int64 full;
struct {
WORD subrevision;
WORD revision;
WORD minor;
WORD major;
};
WORD w[4];
};
enum eGameVersion
{
v109b=0,
v109d,
v110,
v111,
v111b,
v112,
v113c,
v113d,
v114a
};
bool GetAppVersion(char* FileName, TFileVersion* VerInfo); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool GetD2Path(char* buf, DWORD bufsize);
int GetD2Version(char* PathGameExe);

View File

@@ -44,11 +44,12 @@ enum UpdateServerConst
US_MAXGOLD, US_MAXGOLD,
US_PUTGOLD, US_PUTGOLD,
US_TAKEGOLD, US_TAKEGOLD,
US_TEST1, //For CB
//For CB US_TEST2, //For CB
US_TEST1, US_TEST3, //For CB
US_TEST2, US_TOGGLE,
US_TEST3 US_SWAP,
US_SWAPLAST = 0xFFFF
}; };
/*================================= END OF FILE =================================*/ /*================================= END OF FILE =================================*/

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Use a more big stash Use a more big stash
@@ -79,17 +78,16 @@ void Install_BigStash()
log_msg("Patch D2Common & D2Client for make 10x10 squares in the stash. (BigStash)\n"); log_msg("Patch D2Common & D2Client for make 10x10 squares in the stash. (BigStash)\n");
// modification of stash grid // modification of stash grid
mem_seek R7(D2Common, C9F3, CA03, 14ED3, 5FCB5, 2A505, 1BDB5, 82CA5, 6CC25); mem_seek R7(D2Common, C9F3, CA03, 14ED3, 5FCB5, 2A505, 1BDB5, 82CA5);
MEMC_REF4( D2CompileTxtFile, caller_modifStashGrid); 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
// modification of stash background // modification of stash background
mem_seek R7(D2Client, 45B1C, 45B1C, 4C61C, A643C, 749BC, A9D7C, 8CC1C, 943FC); mem_seek R7(D2Client, 45B1C, 45B1C, 4C61C, A643C, 749BC, A9D7C, 8CC1C);
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
@@ -97,7 +95,6 @@ void Install_BigStash()
//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
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Updating server. Updating server.
@@ -16,7 +15,6 @@
#include "newInterface_CubeListing.h" #include "newInterface_CubeListing.h"
#include "extraOptions.h" #include "extraOptions.h"
bool active_Commands=true; bool active_Commands=true;
bool active_listAllCubeFormula=true; bool active_listAllCubeFormula=true;
@@ -25,11 +23,18 @@ bool active_savegame=false;
#define MAX_CMD_SIZE 200 #define MAX_CMD_SIZE 200
const char * CMD_RENAME="/rename"; const char * CMD_RENAME="/rename";
const char * CMD_PAGENAME = "/pagename";
const char * CMD_LISTCUBEFORMULA="/listcube"; const char * CMD_LISTCUBEFORMULA="/listcube";
const char * CMD_SELECTPAGE="/page"; const char * CMD_SELECTPAGE="/page";
const char * CMD_SWAP = "/swap";
const char * CMD_TOGGLE = "/toggle";
const char * CMD_RELOAD="/reload"; const char * CMD_RELOAD="/reload";
const char * CMD_LOCK_MOUSE = "/lockmouse";
const char * CMD_LOCK_MOUSE2 = "/lock";
const char * CMD_STARTSAVE="/save"; const char * CMD_STARTSAVE="/save";
const char * CMD_MAXGOLD="/maxgold"; const char * CMD_MAXGOLD="/maxgold";
@@ -142,25 +147,94 @@ void updateSharedGold(DWORD goldAmount)
int STDCALL commands (char* ptText) int STDCALL commands (char* ptText)
{ {
//return 0;
Unit* ptChar = D2GetClientPlayer(); Unit* ptChar = D2GetClientPlayer();
//return 0;
char command[MAX_CMD_SIZE]; char command[MAX_CMD_SIZE];
ZeroMemory(command,MAX_CMD_SIZE); ZeroMemory(command,MAX_CMD_SIZE);
//return 0;
strncpy(command,ptText,MAX_CMD_SIZE-1); strncpy(command,ptText,MAX_CMD_SIZE-1);
//return 0; _strlwr(command);
strlwr(command);
if (!strncmp(command,CMD_RENAME,strlen(CMD_RENAME))) if (!strncmp(command, CMD_RENAME, strlen(CMD_RENAME)) && ptClientNameChar != NULL)
{
char* param = &command[strlen(CMD_RENAME)];
int len = strlen(param);
if (param[0] != ' ')
return 1;
param++;
len--;
if (len < 2 || len > 15)
return 0;
for (int i = 0; i < len; i++)
{
char c = param[i];
if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c == '_')))
return 1;
}
// Move current save file
{
char szCurrentFile[MAX_PATH];
char szNewFile[MAX_PATH];
//Get temporary savefile name.
D2FogGetSavePath(szCurrentFile, MAX_PATH);
D2FogGetSavePath(szNewFile, MAX_PATH);
strcat(szCurrentFile, ptChar->ptPlayerData->name);
strcat(szNewFile, param);
strcat(szCurrentFile, ".");
strcat(szNewFile, ".");
int curLen = strlen(szCurrentFile);
int newLen = strlen(szNewFile);
strcpy(&szCurrentFile[curLen], "d2s");
strcpy(&szNewFile[newLen], "d2s");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "d2x");
strcpy(&szNewFile[newLen], "d2x");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "key");
strcpy(&szNewFile[newLen], "key");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma0");
strcpy(&szNewFile[newLen], "ma0");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma1");
strcpy(&szNewFile[newLen], "ma1");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma2");
strcpy(&szNewFile[newLen], "ma2");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma3");
strcpy(&szNewFile[newLen], "ma3");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma4");
strcpy(&szNewFile[newLen], "ma4");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "map");
strcpy(&szNewFile[newLen], "map");
MoveFile(szCurrentFile, szNewFile);
}
// Update server
for (int i = 0; i <= len; i++)
{
updateServer(US_RENAME + (param[i] << 8));
}
// Update client
log_msg("Rename on Client : %s -> %s\n", ptChar->ptPlayerData->name, param);
strcpy(ptChar->ptPlayerData->name, param);
strcpy(ptClientNameChar, param);
updateServer(US_SAVE);
return 0;
}
if (!strncmp(command, CMD_PAGENAME,strlen(CMD_PAGENAME)))
{ {
if (!active_multiPageStash) return 1; if (!active_multiPageStash) return 1;
char* param = &command[strlen(CMD_RENAME)]; char* param = &command[strlen(CMD_PAGENAME)];
DWORD len = strlen(param); DWORD len = strlen(param);
if (len && (param[0] != ' ')) return 1;
Stash* ptStash = PCPY->currentStash; Stash* ptStash = PCPY->currentStash;
if (!ptStash) return 0; if (!ptStash) return 0;
if (len>1) if (len>1 && param[0] == ' ')
{ {
D2FogMemDeAlloc(ptStash->name,__FILE__,__LINE__,0); D2FogMemDeAlloc(ptStash->name,__FILE__,__LINE__,0);
ptStash->name = (char *)malloc(len);//D2FogMemAlloc(len,__FILE__,__LINE__,0); ptStash->name = (char *)malloc(len);//D2FogMemAlloc(len,__FILE__,__LINE__,0);
@@ -186,6 +260,32 @@ int STDCALL commands (char* ptText)
return 0; return 0;
} }
if (!strncmp(command, CMD_TOGGLE, strlen(CMD_TOGGLE)))
{
if (!active_sharedStash) return 1;
int page = atoi(&command[strlen(CMD_TOGGLE)]) - 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_SWAP, strlen(CMD_SWAP)))
{
if (!active_multiPageStash) return 1;
int page = atoi(&command[strlen(CMD_SWAP)]) - 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 + ((page & 0xFF) << 8));
return 0;
}
if (!strcmp(command,CMD_RELOAD)) if (!strcmp(command,CMD_RELOAD))
{ {
if (onRealm) return 1; if (onRealm) return 1;
@@ -193,10 +293,17 @@ int STDCALL commands (char* ptText)
return 0; return 0;
} }
if (!strcmp(command, CMD_LOCK_MOUSE) || !strcmp(command, CMD_LOCK_MOUSE2))
{
if (onRealm) return 1;
lockMouseCursor();
return 0;
}
if (!strcmp(command,CMD_STARTSAVE)) if (!strcmp(command,CMD_STARTSAVE))
{ {
if (onRealm) return 1; if (onRealm) return 1;
updateServer(US_STARTSAVE); updateServer(US_SAVE);
return 0; return 0;
} }
@@ -224,6 +331,7 @@ int STDCALL commands (char* ptText)
active_AlwaysDisplayLifeMana = !active_AlwaysDisplayLifeMana; active_AlwaysDisplayLifeMana = !active_AlwaysDisplayLifeMana;
return 0; return 0;
} }
return 1; return 1;
} }
@@ -251,19 +359,6 @@ MANAGESOUNDCHAOSDEBUG:
RETN 8 RETN 8
}} }}
FCT_ASM ( caller_Commands_113d )
TEST EAX,EAX
JE MANAGESOUNDCHAOSDEBUG
PUSH EDI
CALL commands
TEST EAX,EAX
JNZ MANAGESOUNDCHAOSDEBUG
ADD DWORD PTR SS:[ESP],7
MANAGESOUNDCHAOSDEBUG:
RETN 8
}}
void Install_Commands() void Install_Commands()
{ {
static int isInstalled = false; static int isInstalled = false;
@@ -277,9 +372,9 @@ void Install_Commands()
active_savegame = version_D2Common >= V111; active_savegame = version_D2Common >= V111;
// Run custom commmand // Run custom commmand
mem_seek R7(D2Client, 2C120, 2C110, 32BDD, C1EE6, 91C16, 86926, 70AE6, B1FD6); mem_seek R7(D2Client, 2C120, 2C110, 32BDD, C1EE6, 91C16, 86926, 70AE6);
memt_byte( 0x83, 0xE8 ); // CALL memt_byte( 0x83, 0xE8 ); // CALL
MEMT_REF4( 0xC08508C4 , version_D2Client == V113d ? caller_Commands_113d : version_D2Client >= V111 ? caller_Commands_111 : caller_Commands); MEMT_REF4( 0xC08508C4 , version_D2Client >= V111 ? caller_Commands_111 : caller_Commands);
//6FB71EE6 . 83C4 08 ADD ESP,8 //6FB71EE6 . 83C4 08 ADD ESP,8
//6FB71EE7 . 85C0 TEST EAX,EAX //6FB71EE7 . 85C0 TEST EAX,EAX
//6FB41C16 |. 83C4 08 ADD ESP,8 //6FB41C16 |. 83C4 08 ADD ESP,8
@@ -288,9 +383,9 @@ void Install_Commands()
//6FB36929 |. 85C0 TEST EAX,EAX //6FB36929 |. 85C0 TEST EAX,EAX
//6FB20AE6 |. 83C4 08 ADD ESP,8 //6FB20AE6 |. 83C4 08 ADD ESP,8
//6FB20AE9 |. 85C0 TEST EAX,EAX //6FB20AE9 |. 85C0 TEST EAX,EAX
//6FB20AE6 |. 83C4 08 ADD ESP,8
//6FB20AE9 |. 85C0 TEST EAX,EAX
//6FB61FD6 |. 83C4 08 ADD ESP,8
//6FB61FD9 |. 85C0 TEST EAX,EAX
log_msg("\n"); log_msg("\n");
isInstalled = true; isInstalled = true;

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
*Modified by L'Autour.
Common functions. Common functions.
@@ -9,12 +8,9 @@
#include "common.h" #include "common.h"
#include "error.h" #include "error.h"
#include "d2functions.h" #include "d2functions.h"
#include "INIfile.h"
#define sPlugyExt ".\\PlugY\\PlugYLocal.dll"
s_shifting shifting; s_shifting shifting;
bool isOnRect(DWORD x, DWORD y, DWORD x0, DWORD y0, DWORD l, DWORD h) bool isOnRect(DWORD x, DWORD y, DWORD x0, DWORD y0, DWORD l, DWORD h)
{return (x>=x0) && (x<x0+l) && (y>y0-h) && (y<=y0);} {return (x>=x0) && (x<x0+l) && (y>y0-h) && (y<=y0);}
@@ -26,142 +22,432 @@ void freeMessage(sWinMessage* msg)
D2FreeWinMessage(msg); D2FreeWinMessage(msg);
} }
//MS C++__fastcall(ecx,edx,) vs Delphi register(eax,edx,ecx) - :(
typedef int (__stdcall *p_UCS2toUTF8)(char*, int, LPWSTR, int); LPWSTR getString(LPWSTR eng, LPWSTR esp, LPWSTR deu, LPWSTR fra, LPWSTR por, LPWSTR ita, LPWSTR jpn, LPWSTR kor, LPWSTR sin, LPWSTR chi, LPWSTR pol, LPWSTR rus)
p_UCS2toUTF8 _UCS2toUTF8;
int UCS2toUTF8(char* dst, int maxdst, LPWSTR src, int lensrc)
{ {
if (_UCS2toUTF8 == NULL) return 0; switch(D2GetLang())
return _UCS2toUTF8(dst, maxdst, src, lensrc);
}
typedef int (__stdcall *p_UTF8toUCS2)(LPWSTR, int, char*, int);
p_UTF8toUCS2 _UTF8toUCS2;
int UTF8toUCS2(LPWSTR dst, int maxdst, char* src, int lensrc)
{ {
if (_UTF8toUCS2 == NULL) return 0; case LNG_ENG: return eng;
return _UTF8toUCS2(dst, maxdst, src, lensrc); case LNG_ESP: return esp;
case LNG_DEU: return deu;
case LNG_FRA: return fra;
case LNG_POR: return por;
case LNG_ITA: return ita;
case LNG_JPN: return jpn;
case LNG_KOR: return kor;
case LNG_SIN: return sin;
case LNG_CHI: return chi;
case LNG_POL: return pol;
case LNG_RUS: return rus;
case LNG_DEF:
default: return eng;
} }
typedef const LPWSTR(__fastcall *p_getTypeString)(DWORD, char**);
p_getTypeString _getTypeString;
const LPWSTR getTypeString(DWORD code, char** IdxStr)
{
if (_getTypeString == NULL) return L"#";
return _getTypeString(code, IdxStr);
} }
#define LANGUAGE(I,ENG,FRA,DEU,ITA,ESP,POL/*,CHI*/) case I : return getString(L##ENG,L##ESP,L##DEU,L##FRA,L##ENG,L##ITA,L##ENG,L##ENG,L##ENG,L##ENG,L##POL,L##ENG)
typedef LPWSTR(__fastcall *p_getTranslatedString)(int);
p_getTranslatedString _getTranslatedString;
LPWSTR getTranslatedString(int stringID) LPWSTR getTranslatedString(int stringID)
{ {
if (_getTranslatedString == NULL) return L"#"; switch(stringID)
return _getTranslatedString(stringID);
}
typedef int(__stdcall *p_wSprintStringLastGender)(LPWSTR, int, int);
p_wSprintStringLastGender _wSprintStringLastGender;
int wSprintStringLastGender(LPWSTR buf, int lenbuf,int stringID)
{ {
if (_wSprintStringLastGender == NULL) return 0; /* LANGUAGE2( STR_STATS_UNASSIGN_WITH_LIMIT,
return _wSprintStringLastGender(buf, lenbuf, stringID); "+Alt: ;,+Shift: %d \x70B9\x6570",//"+Alt: Unassign, +Shift: by %d points",
// "+Alt: \x91CD\x5206\x914D;,+Shift: %d \x70B9\x6570",//"+Alt: Unassign, +Shift: by %d points",
"+Alt: D<>sallocation, +Shift: par %d points,",
"+Alt: Zur<75>cksetzen, +Shift: um %d Punkte",
"+Alt: Rimuovi, +Shift: Assegna %d punti",
"+Alt: Quita, +Shift: por %d puntos",
"+Alt: \37325\20998\37197;,+Shift:%d \28857\25968");
*/
LANGUAGE( STR_STATS_UNASSIGN_WITH_LIMIT,
"+Alt: Unassign, +Shift: by %d points",
"+Alt: D<>sallocation, +Shift: par %d points",
"+Alt: Zur<75>cksetzen, +Shift: um %d Punkte",
"+Alt: Rimuovi, +Shift: Assegna %d punti",
"+Alt: Quita, +Shift: por %d puntos",
"+Alt: Odejmij, +Shift: %d punkt<6B>w");
// "+Alt: ????, +Shift: %d ??");
LANGUAGE( STR_STATS_UNASSIGN_WITHOUT_LIMIT,
"+Alt: Unassign, +Shift: all remaining points",
"+Alt: D<>sallocation, +Shift: Tous les points restants",
"+Alt: Zur<75>cksetzen, +Shift: Alle verbleibenden Punkte",
"+Alt: Rimuovi, +Shift: Assegna tutti i punti rimanenti",
"+Alt: Quita, +Shift: Todos los puntos restantes",
"+Alt: Odejmij, +Shift: wszystkie pozostale punkty");
// "+Alt: ????, +Shift: ???");
LANGUAGE( STR_STATS_BASE_MIN,
"Base: %d (Min: %d)",
"Base: %d (Min: %d)",
"Basiswert: %d (Min: %d)",
"Base: %d (Min: %d)",
"Base: %d (Min: %d)",
"Bazowo: %d (Minimum: %d)");
// "??: %d(??: %d)");
LANGUAGE( STR_SKILLS_UNASSIGN,
"Un-allocate all skills points",
"D<EFBFBD>salloue tous les points d'aptitudes",
"Alle Fertigkeitspunkte zur<75>cksetzen",
"Rimuovi tutte le abilit<69>",
"Quita todos los puntos de habilidades",
"Rozdaj od nowa wszystkie punkty umiejetnosci");
// "????????");
LANGUAGE( STR_STASH_PREVIOUS_PAGE,
"Previous Page (+shift: First Page)",
"Page pr<70>c<EFBFBD>dente (+shift: Premi<6D>re page)",
"Vorherige Seite (+shift: Erste Seite)",
"Pagina Precedente (+shift: Prima Pagina)",
"Pagina anterior (+shift: Primera Pagina)",
"Poprzednia Strona (+shift: Pierwsza Strona)");
// "??? (+shift: ??)");
LANGUAGE( STR_STASH_NEXT_PAGE,
"Next Page (+shift: Last not empty Page)",
"Page suivante (+shift: Derni<6E>re page non vide)",
"N<EFBFBD>chste Seite (+shift: Letzte nicht leere Seite )",
"Pagina Successiva (+shift: Ultima Pagina non vuota)",
"Pagina Siguiente (+shift: Ultima pagina non vacia)",
"Nastepna Strona (+shift: Ostatnia nie pusta Strona)");
// "??? (+shift: ?????");
LANGUAGE( STR_TOGGLE_TO_PERSONAL,
"Toggle to Personal Stash",
"Voir coffre personnel",
"Wechselt zum pers<72>nlichen Goldschatz",
"Vai all'Inventario Personale",
"Ver el cofre personal",
"Przejdz do Skrzyni Osobistej");
// "????????");
LANGUAGE( STR_TOGGLE_TO_SHARED,
"Toggle to Shared Stash",
"Voir coffre partag<61>",
"Wechselt zum gemeinsamen Goldschatz",
"Vai all'Inventario Condiviso",
"Ver el cofre compartido",
"Przejdz do Skrzyni Wsp<73>lnej");
// "????????");
LANGUAGE( STR_STASH_PREVIOUS_INDEX,
"Previous Index : by %d Pages (+Shift: %d)",
"Index pr<70>c<EFBFBD>dent : par %d pages (+shift: %d)",
"Vorheriger Index: in %d Seiten (+shift: %d)",
"Schermata Precedente : Indietro di %d Pagine (+Shift: %d)",
"Indice anterior : por %d paginas (+shift: %d)",
"Poprzednia Strona : po %d Stron (+Shift: %d)");
// "???? : %d ? (+Shift:%d)");
LANGUAGE( STR_STASH_NEXT_INDEX,
"Next Index : by %d Pages (+shift: %d)",
"Index suivant : par %d pages (+shift: %d)",
"N<EFBFBD>chster Index: in %d Seiten (+shift: %d)",
"Schermata Successiva : Avanti di %d Pagine (+shift: %d)",
"Indice siguiente : por %d paginas (+shift: %d)",
"Nastepna Strona : po %d Stron (+shift: %d)");
// "???? : %d ? (+shift:%d)");
LANGUAGE( STR_PUT_GOLD,
"Put Gold",
"Poser de l'Or",
"Gib Gold",
"Immetti Oro",
"Poner oro",
"Zdeponuj Zloto");
// "????");
LANGUAGE( STR_TAKE_GOLD,
"Take Gold",
"Prendre de l'Or",
"Nehme Gold",
"Ritira Oro",
"Tomar oro",
"Wyplac zloto");
// "????");
LANGUAGE( STR_PERSONAL_PAGE_NUMBER,
"Personal Page n<>%u",
"Page perso n<>%u",
"Pers<EFBFBD>nliche Seite n<>%u",
"Pagina Personale n<>%u",
"Pagina personal n<>%u",
"Strona Osobista n<>%u");
// "????? n<>%u");
LANGUAGE( STR_SHARED_PAGE_NUMBER,
"Shared Page n<>%u",
"Page partag<61>e n<>%u",
"Gemeinsame Seite n<>%u",
"Pagina Condivisa n<>%u",
"Pagina personal n<>%u",
"Strona Wsp<73>lna n<>%u");
// "????? n<>%u");
LANGUAGE( STR_NO_SELECTED_PAGE,
"No selected page",
"Aucune page s<>lectionn<6E>e",
"Keine ausgew<65>hlte Seite",
"Nessuna pagina selezionata",
"Ninguna pagina seleccionada",
"Nie zaznaczono strony");
// "????");
LANGUAGE( STR_SHARED_GOLD_QUANTITY,
"Shared Gold : %u",
"Or partag<61> : %u",
"Gemeinsamen Gold : %u",
"Oro Condiviso : %u",
"Oro compartido : %u",
"Wsp<EFBFBD>lne Zloto : %u");
// "????: %u");
LANGUAGE( STR_PREVIOUS_PAGE,
"Previous Page",
"Page pr<70>c<EFBFBD>dente",
"Vorherige Seite",
"Pagina Precedente",
"Pagina anterior",
"Poprzednia Strona");
// "???");
LANGUAGE( STR_NEXT_PAGE,
"Next Page",
"Page suivante",
"N<EFBFBD>chste Seite",
"Pagina Successiva",
"Pagina siguiente",
"Nastepna Strona");
// "???");
default : return L"";
} }
typedef LPWSTR(__fastcall *p_cutStringGender)(LPWSTR);
p_cutStringGender _cutStringGender;
LPWSTR cutStringGender(LPWSTR str)
{
if (_cutStringGender == NULL) return str;
return _cutStringGender(str);
}
typedef LPWSTR(__fastcall *p_setMonoString)(LPWSTR);
p_setMonoString _setMonoString;
LPWSTR setMonoString(LPWSTR str)
{
if (_setMonoString == NULL) return str;
return _setMonoString(str);
} }
typedef bool(__fastcall *p_initTranslatedString)(int); /*=================================================================*/
HINSTANCE PlugyLocalLib = NULL; const char* SNONE="";
const char* c_shie[3]={"Shield (Not Class Specific)",SNONE,SNONE};
const char* c_tors[3]={"Body Armor",SNONE,SNONE};
const char* c_gold[3]={"Gold",SNONE,SNONE};
const char* c_bowq[3]={"Arrow",SNONE,SNONE};
const char* c_xboq[3]={"Bolt",SNONE,SNONE};
const char* c_play[3]={"Ear",SNONE,SNONE};
const char* c_herb[3]={"Herb",SNONE,SNONE};
const char* c_poti[3]={"Potion",SNONE,SNONE};
const char* c_ring[3]={"Ring",SNONE,SNONE};
const char* c_elix[3]={"Elixir",SNONE,SNONE};
const char* c_amul[3]={"Amulet",SNONE,SNONE};
const char* c_char[3]={"Charm",SNONE,SNONE};
const char* c_boot[3]={"Boot",SNONE,SNONE};
const char* c_glov[3]={"Glove",SNONE,SNONE};
const char* c_book[3]={"Book",SNONE,SNONE};
const char* c_belt[3]={"Belt",SNONE,SNONE};
const char* c_gem[3]={"Gem",SNONE,SNONE};
const char* c_torc[3]={"Torch",SNONE,SNONE};
const char* c_scro[3]={"Scroll",SNONE,SNONE};
const char* c_scep[3]={"Scepter",SNONE,SNONE};
const char* c_wand[3]={"Wand",SNONE,SNONE};
const char* c_staf[3]={"Staff",SNONE,SNONE};
const char* c_bow[3]={"Bow",SNONE,SNONE};
const char* c_axe[3]={"Axe",SNONE,SNONE};
const char* c_club[3]={"Club",SNONE,SNONE};
const char* c_swor[3]={"Sword",SNONE,SNONE};
const char* c_hamm[3]={"Hammer",SNONE,SNONE};
const char* c_knif[3]={"Knife",SNONE,SNONE};
const char* c_spea[3]={"Spear",SNONE,SNONE};
const char* c_pole[3]={"Polearm",SNONE,SNONE};
const char* c_xbow[3]={"Crossbow",SNONE,SNONE};
const char* c_mace[3]={"Mace",SNONE,SNONE};
const char* c_helm[3]={"Helm",SNONE,SNONE};
bool initLocaleStrings() const char* c_tpot[3]={"Missile Potion",SNONE,SNONE};
const char* c_ques[3]={"Quest Item",SNONE,SNONE};
const char* c_body[3]={"Body Part",SNONE,SNONE};
const char* c_key[3]={"Key",SNONE,SNONE};
const char* c_tkni[3]={"Throwing Knife",SNONE,SNONE};
const char* c_taxe[3]={"Throwing Axe",SNONE,SNONE};
const char* c_jave[3]={"Javelin",SNONE,SNONE};
const char* c_weap[3]={"Weapon",SNONE,SNONE};
const char* c_mele[3]={"Melee Weapon",SNONE,SNONE};
const char* c_miss[3]={"Missile Weapon",SNONE,SNONE};
const char* c_thro[3]={"Throwing Weapon",SNONE,SNONE};
const char* c_comb[3]={"Combo Weapon",SNONE,SNONE};
const char* c_armo[3]={"Armor",SNONE,SNONE};
const char* c_shld[3]={"Any Shield",SNONE,SNONE};
const char* c_misc[3]={"Miscellaneous",SNONE,SNONE};
const char* c_sock[3]={"Socket Filler",SNONE,SNONE};
const char* c_seco[3]={"Second Hand Item",SNONE,SNONE};
const char* c_rod[3]={"Staves And Rods",SNONE,SNONE};
const char* c_misl[3]={"Missile",SNONE,SNONE};
const char* c_blun[3]={"Blunt",SNONE,SNONE};
const char* c_jewl[3]={"Jewel",SNONE,SNONE};
const char* c_clas[3]={"Class Specific",SNONE,SNONE};
const char* c_amaz[3]={"Amazon Item",SNONE,SNONE};
const char* c_barb[3]={"Barbarian Item",SNONE,SNONE};
const char* c_necr[3]={"Necromancer Item",SNONE,SNONE};
const char* c_pala[3]={"Paladin Item",SNONE,SNONE};
const char* c_sorc[3]={"Sorceress Item",SNONE,SNONE};
const char* c_assn[3]={"Assassin Item",SNONE,SNONE};
const char* c_drui[3]={"Druid Item",SNONE,SNONE};
const char* c_h2h[3]={"Claw",SNONE,SNONE};
const char* c_orb[3]={"Orb",SNONE,SNONE};
const char* c_head[3]={"Voodoo Heads",SNONE,SNONE};
const char* c_ashd[3]={"Paladin Shield",SNONE,SNONE};
const char* c_phlm[3]={"Barbarian Helm",SNONE,SNONE};
const char* c_pelt[3]={"Druid Helm",SNONE,SNONE};
const char* c_cloa[3]={"Cloak",SNONE,SNONE};
const char* c_rune[3]={"Rune",SNONE,SNONE};
const char* c_circ[3]={"Circlet",SNONE,SNONE};
const char* c_hpot[3]={"Healing Potion",SNONE,SNONE};
const char* c_mpot[3]={"Mana Potion",SNONE,SNONE};
const char* c_rpot[3]={"Rejuvenation potion",SNONE,SNONE};
const char* c_spot[3]={"Stamina Potion",SNONE,SNONE};
const char* c_apot[3]={"Antidote Potion",SNONE,SNONE};
const char* c_wpot[3]={"Thawing Potion",SNONE,SNONE};
const char* c_scha[3]={"Small Charm",SNONE,SNONE};
const char* c_mcha[3]={"Large Charm",SNONE,SNONE};
const char* c_lcha[3]={"Grand Charm",SNONE,SNONE};
const char* c_abow[3]={"Amazon Bow",SNONE,SNONE};
const char* c_aspe[3]={"Amazon Spear",SNONE,SNONE};
const char* c_ajav[3]={"Amazon Javelin",SNONE,SNONE};
const char* c_h2h2[3]={"Assassin Claw",SNONE,SNONE};
const char* c_mboq[3]={"Magic Arrow",SNONE,SNONE};
const char* c_mxbq[3]={"Magic Bolt",SNONE,SNONE};
const char* c_gem0[3]={"Chipped Gem",SNONE,SNONE};
const char* c_gem1[3]={"Flawed Gem",SNONE,SNONE};
const char* c_gem2[3]={"Normal Gem",SNONE,SNONE};
const char* c_gem3[3]={"Flawless Gem",SNONE,SNONE};
const char* c_gem4[3]={"Perfect Gem",SNONE,SNONE};
const char* c_gema[3]={"Amethyst",SNONE,SNONE};
const char* c_gemd[3]={"Diamond",SNONE,SNONE};
const char* c_geme[3]={"Emerald",SNONE,SNONE};
const char* c_gemr[3]={"Ruby",SNONE,SNONE};
const char* c_gems[3]={"Sapphire",SNONE,SNONE};
const char* c_gemt[3]={"Topaz",SNONE,SNONE};
const char* c_gemz[3]={"Skull",SNONE,SNONE};
const char* getTypeString (DWORD code)
{ {
p_initTranslatedString initTranslatedString; DWORD lang = 0;//D2GetLang();
if ((lang == LNG_FRA) || (lang == LNG_DEU)) lang--;
PlugyLocalLib = LoadLibrary(sPlugyExt); else lang = 0;
switch (code)
if (PlugyLocalLib != NULL)
{ {
log_msg("Loading PlugYLocal.dll\n"); case BIN('s','h','i','e') : return c_shie[0];
initTranslatedString = (p_initTranslatedString)GetProcAddress(PlugyLocalLib, "__fastcall initTranslatedString"); case BIN('t','o','r','s') : return c_tors[0];
if (NULL != initTranslatedString) case BIN('g','o','l','d') : return c_gold[0];
{ case BIN('b','o','w','q') : return c_bowq[0];
log_msg("Loading local strings from PlugYLocal.ini\n"); case BIN('x','b','o','q') : return c_xboq[0];
case BIN('p','l','a','y') : return c_play[0];
_UCS2toUTF8 = (p_UCS2toUTF8)GetProcAddress(PlugyLocalLib, "__stdcall UCS2toUTF8"); case BIN('h','e','r','b') : return c_herb[0];
_UTF8toUCS2 = (p_UTF8toUCS2)GetProcAddress(PlugyLocalLib, "__stdcall UTF8toUCS2"); case BIN('p','o','t','i') : return c_poti[0];
case BIN('r','i','n','g') : return c_ring[0];
_getTypeString = (p_getTypeString)GetProcAddress(PlugyLocalLib, "__fastcall getTypeString"); case BIN('e','l','i','x') : return c_elix[0];
_cutStringGender = (p_cutStringGender)GetProcAddress(PlugyLocalLib, "__fastcall cutStringGender"); case BIN('a','m','u','l') : return c_amul[0];
_wSprintStringLastGender = (p_wSprintStringLastGender)GetProcAddress(PlugyLocalLib, "__stdcall wSprintStringLastGender"); case BIN('c','h','a','r') : return c_char[0];
_setMonoString = (p_setMonoString)GetProcAddress(PlugyLocalLib, "__fastcall setMonoString"); case BIN('b','o','o','t') : return c_boot[0];
case BIN('g','l','o','v') : return c_glov[0];
_getTranslatedString = (p_getTranslatedString)GetProcAddress(PlugyLocalLib, "__fastcall getTranslatedString"); case BIN('b','o','o','k') : return c_book[0];
if ((NULL != _getTranslatedString) && case BIN('b','e','l','t') : return c_belt[0];
(NULL != _getTypeString)) case BIN('g','e','m',' ') : return c_gem[0];
{ case BIN('t','o','r','c') : return c_torc[0];
initTranslatedString(D2GetLang()); case BIN('s','c','r','o') : return c_scro[0];
return true; case BIN('s','c','e','p') : return c_scep[0];
case BIN('w','a','n','d') : return c_wand[0];
case BIN('s','t','a','f') : return c_staf[0];
case BIN('b','o','w',' ') : return c_bow[0];
case BIN('a','x','e',' ') : return c_axe[0];
case BIN('c','l','u','b') : return c_club[0];
case BIN('s','w','o','r') : return c_swor[0];
case BIN('h','a','m','m') : return c_hamm[0];
case BIN('k','n','i','f') : return c_knif[0];
case BIN('s','p','e','a') : return c_spea[0];
case BIN('p','o','l','e') : return c_pole[0];
case BIN('x','b','o','w') : return c_xbow[0];
case BIN('m','a','c','e') : return c_mace[0];
case BIN('h','e','l','m') : return c_helm[0];
case BIN('t','p','o','t') : return c_tpot[0];
case BIN('q','u','e','s') : return c_ques[0];
case BIN('b','o','d','y') : return c_body[0];
case BIN('k','e','y',' ') : return c_key[0];
case BIN('t','k','n','i') : return c_tkni[0];
case BIN('t','a','x','e') : return c_taxe[0];
case BIN('j','a','v','e') : return c_jave[0];
case BIN('w','e','a','p') : return c_weap[0];
case BIN('m','e','l','e') : return c_mele[0];
case BIN('m','i','s','s') : return c_miss[0];
case BIN('t','h','r','o') : return c_thro[0];
case BIN('c','o','m','b') : return c_comb[0];
case BIN('a','r','m','o') : return c_armo[0];
case BIN('s','h','l','d') : return c_shld[0];
case BIN('m','i','s','c') : return c_misc[0];
case BIN('s','o','c','k') : return c_sock[0];
case BIN('s','e','c','o') : return c_seco[0];
case BIN('r','o','d',' ') : return c_rod[0];
case BIN('m','i','s','l') : return c_misl[0];
case BIN('b','l','u','n') : return c_blun[0];
case BIN('j','e','w','l') : return c_jewl[0];
case BIN('c','l','a','s') : return c_clas[0];
case BIN('a','m','a','z') : return c_amaz[0];
case BIN('b','a','r','b') : return c_barb[0];
case BIN('n','e','c','r') : return c_necr[0];
case BIN('p','a','l','a') : return c_pala[0];
case BIN('s','o','r','c') : return c_sorc[0];
case BIN('a','s','s','n') : return c_assn[0];
case BIN('d','r','u','i') : return c_drui[0];
case BIN('h','2','h',' ') : return c_h2h[0];
case BIN('h','2','h','2') : return c_h2h2[0];
case BIN('o','r','b',' ') : return c_orb[0];
case BIN('h','e','a','d') : return c_head[0];
case BIN('a','s','h','d') : return c_ashd[0];
case BIN('p','h','l','m') : return c_phlm[0];
case BIN('p','e','l','t') : return c_pelt[0];
case BIN('c','l','o','a') : return c_cloa[0];
case BIN('r','u','n','e') : return c_rune[0];
case BIN('c','i','r','c') : return c_circ[0];
case BIN('h','p','o','t') : return c_hpot[0];
case BIN('m','p','o','t') : return c_mpot[0];
case BIN('r','p','o','t') : return c_rpot[0];
case BIN('s','p','o','t') : return c_spot[0];
case BIN('a','p','o','t') : return c_apot[0];
case BIN('w','p','o','t') : return c_wpot[0];
case BIN('s','c','h','a') : return c_scha[0];
case BIN('m','c','h','a') : return c_mcha[0];
case BIN('l','c','h','a') : return c_lcha[0];
case BIN('a','b','o','w') : return c_abow[0];
case BIN('a','s','p','e') : return c_aspe[0];
case BIN('a','j','a','v') : return c_ajav[0];
case BIN('m','b','o','q') : return c_mboq[0];
case BIN('m','x','b','q') : return c_mxbq[0];
case BIN('g','e','m','0') : return c_gem0[0];
case BIN('g','e','m','1') : return c_gem1[0];
case BIN('g','e','m','2') : return c_gem2[0];
case BIN('g','e','m','3') : return c_gem3[0];
case BIN('g','e','m','4') : return c_gem4[0];
case BIN('g','e','m','a') : return c_gema[0];
case BIN('g','e','m','d') : return c_gemd[0];
case BIN('g','e','m','e') : return c_geme[0];
case BIN('g','e','m','r') : return c_gemr[0];
case BIN('g','e','m','s') : return c_gems[0];
case BIN('g','e','m','t') : return c_gemt[0];
case BIN('g','e','m','z') : return c_gemz[0];
default: return NULL;
} }
log_msg("Failed loading local strings\n");
} }
if (FreeLibrary(PlugyLocalLib)) char* getTypeAString (WORD id, char* lpText, DWORD size)
{
PlugyLocalLib = NULL;
}
} else log_msg("Failed loading PlugYLocal.dll\n");
return false;
}
void freeLocaleStrings()
{
if (PlugyLocalLib == NULL) return;
FreeLibrary(PlugyLocalLib);
}
LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size)
{ {
ItemTypesBIN* itemTypeData = D2GetItemTypesBIN(id); ItemTypesBIN* itemTypeData = D2GetItemTypesBIN(id);
if (!itemTypeData) if (!itemTypeData)
{ {
wcsncpy(lpText, L"Bad Type", size); strncpy(lpText, "Bad Type", size);
return lpText; return lpText;
} }
char* idxstr;
LPWSTR string = getTypeString(itemTypeData->code, &idxstr);
if (idxstr) const char* string = getTypeString(itemTypeData->code);
{
LPWSTR string2 = D2GetStringFromString(idxstr);
if (string2)
{
wcsncpy(lpText, string2, size);
return lpText;
}
}
if (!string) if (!string)
{ {
struct { struct {
@@ -170,12 +456,34 @@ LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size)
} code; } code;
code.code = itemTypeData->code; code.code = itemTypeData->code;
code.zero = 0; code.zero = 0;
UTF8toUCS2(lpText,size, (char*)&code, 0xFFFF); strncpy(lpText, (char*)&code, size);
} else } else
wcsncpy(lpText, string, size); strncpy(lpText, string, size);
return lpText; return lpText;
} }
LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size)
{
ItemTypesBIN* itemTypeData = D2GetItemTypesBIN(id);
if (!itemTypeData)
{
mbstowcs(lpText, "Bad Type", size);
return lpText;
}
const char* string = getTypeString(itemTypeData->code);
if (!string)
{
struct {
DWORD code;
BYTE zero;
} code;
code.code = itemTypeData->code;
code.zero = 0;
mbstowcs(lpText, (char*)&code, size);
} else
mbstowcs(lpText, string, size);
return lpText;
}
/*================================= END OF FILE =================================*/ /*================================= END OF FILE =================================*/

View File

@@ -1,6 +1,5 @@
/*================================================ /*================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
*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.
@@ -17,9 +16,9 @@
#define E2S(F, A, R, N, P) T##N N; #define E2S(F, A, R, N, P) T##N N;
#define E2F(F, A, R, N, P) T##N N; #define E2F(F, A, R, N, P) T##N N;
#define E2C(F, A, T, N) T* pt##N; #define E2C(F, A, T, N) T* pt##N;
#define F7(X, Z, A,B,C,D,E,F,G,H, R, N, P) T##N N; #define F7(X, Z, A,B,C,D,E,F,G, R, N, P) T##N N;
#define A7(X, Z, A,B,C,D,E,F,G,H, R, N, P) T##N N; #define A7(X, Z, A,B,C,D,E,F,G, R, N, P) T##N N;
#define C7(Z, A,B,C,D,E,F,G,H, T, N) T* pt##N; #define C7(Z, A,B,C,D,E,F,G, T, N) T* pt##N;
#include "../Commons/D2Funcs.h" #include "../Commons/D2Funcs.h"
DataTables* SgptDataTables; DataTables* SgptDataTables;
@@ -617,12 +616,12 @@ bool 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 F7(X, Z, A,B,C,D,E,F,G,H, R, N, P) 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 F7(X, Z, A,B,C,D,E,F,G, R, N, P) setFctAddr((DWORD*)&N, (HMODULE)offset_##Z, (LPCSTR)((version_##Z == V113? G : (version_##Z == V112? F : version_##Z == V111b? E : (version_##Z == V111? D : (version_##Z == V110? C : (version_##Z == V109d? B : A)))))));
#define A7(X, Z, A,B,C,D,E,F,G,H, R, N, P) N = (T##N)R7(Z,A,B,C,D,E,F,G,H); #define A7(X, Z, A,B,C,D,E,F,G, R, N, P) N = (T##N)R7(Z,A,B,C,D,E,F,G);
#define C7(Z, A,B,C,D,E,F,G,H, T, N) pt##N = (T*)R7(Z,A,B,C,D,E,F,G,H); #define C7(Z, A,B,C,D,E,F,G, T, N) pt##N = (T*)R7(Z,A,B,C,D,E,F,G);
#include "../Commons/D2Funcs.h" #include "../Commons/D2Funcs.h"
SgptDataTables = *(DataTables**) R7(D2Common, 0000, 0000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C, A33F0); SgptDataTables = *(DataTables**) R7(D2Common, 0000, 0000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C);
if (version_D2Common < V110) if (version_D2Common < V110)
{ {
D2S(D2Common,10581, CharStatsBIN*, D2Common10581, (DWORD charID));//ONLY in 1.09 D2S(D2Common,10581, CharStatsBIN*, D2Common10581, (DWORD charID));//ONLY in 1.09
@@ -916,10 +915,10 @@ bool initD2functions()
D2GetClientPlayer = D2GetClientPlayer_111; D2GetClientPlayer = D2GetClientPlayer_111;
D2GetRealItem = D2GetRealItem_111; D2GetRealItem = D2GetRealItem_111;
D2CleanStatMouseUp = D2CleanStatMouseUp_111; D2CleanStatMouseUp = D2CleanStatMouseUp_111;
StatMouse1 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C004, 11C2F4, 11C040, 11C3DC, 11D224); StatMouse1 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C004, 11C2F4, 11C040, 11C3DC);
StatMouse2 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C008, 11C2F8, 11C044, 11C3E0, 11D228); StatMouse2 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C008, 11C2F8, 11C044, 11C3E0);
StatMouse3 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C020, 11C310, 11C05C, 11C3F8, 11D240); StatMouse3 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C020, 11C310, 11C05C, 11C3F8);
StatMouse4 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C024, 11C314, 11C060, 11C3FC, 11D244); StatMouse4 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C024, 11C314, 11C060, 11C3FC);
} else { } else {
D2SendToServer = (TD2SendToServer) D2SendToServer_1XX; D2SendToServer = (TD2SendToServer) D2SendToServer_1XX;
D2GetGameByClientID = (TD2GetGameByClientID) D2GetGameByClientID_1XX; D2GetGameByClientID = (TD2GetGameByClientID) D2GetGameByClientID_1XX;
@@ -947,16 +946,16 @@ bool initD2functions()
//////////////// STRUCTURE MANAGEMENT //////////////// //////////////// STRUCTURE MANAGEMENT ////////////////
//L'Autour - ??????
// shifting.ptPYPlayerData = V7(D2Common,118,118,F4,F4,F4,F4,F4); // shifting.ptPYPlayerData = V7(D2Common,118,118,F4,F4,F4,F4,F4);
shifting.ptPYPlayerData = *(DWORD*)((DWORD)D2InitPlayerData + V7(D2Common,5D,5D,5D,49,49,49,49,49)); shifting.ptPYPlayerData = *(DWORD*)((DWORD)D2InitPlayerData + V7(D2Common,5D,5D,5D,49,49,49,49));
shifting.ptSpecificData = V7(D2Common,70,70,14,14,14,14,14,14); shifting.ptSpecificData = V7(D2Common,70,70,14,14,14,14,14);
shifting.ptGame = V7(D2Common,A4,A4,80,80,80,80,80,80); shifting.ptGame = V7(D2Common,A4,A4,80,80,80,80,80);
shifting.ptClientGame = V7(D2Common,170,194,1A8,1A8,1A8,1A8,1A8,1A8); shifting.ptClientGame = V7(D2Common,170,194,1A8,1A8,1A8,1A8,1A8);
shifting.ptInventory = V7(D2Common,84,84,60,60,60,60,60,60); shifting.ptInventory = V7(D2Common,84,84,60,60,60,60,60);
shifting.ptSkills = V7(D2Common,CC,CC,A8,A8,A8,A8,A8,A8); shifting.ptSkills = V7(D2Common,CC,CC,A8,A8,A8,A8,A8);
shifting.ptImage = V7(D2Common,04,04,04,08,08,3C,34,34); shifting.ptImage = V7(D2Common,04,04,04,08,08,3C,34);
shifting.ptFrame = V7(D2Common,08,08,08,44,44,40,00,00); shifting.ptFrame = V7(D2Common,08,08,08,44,44,40,00);
return true; return true;
} }

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
@file D2wrapper.cpp @file D2wrapper.cpp
@brief Main Diablo II extra DLL handler. @brief Main Diablo II extra DLL handler.
@@ -32,27 +31,26 @@
#include "uberQuest.h" // Install_UberQuest() #include "uberQuest.h" // Install_UberQuest()
#include "extraOptions.h" // Install_AlwaysRegenMapInSP() #include "extraOptions.h" // Install_AlwaysRegenMapInSP()
#include "language.h" // Install_LanguageManagement() #include "language.h" // Install_LanguageManagement()
#include "../Commons/VersionInfo.h"
//-------------------------
int version_SmackW32=V113d; int version_SmackW32=V113;
int version_D2Common=V113d; int version_D2Common=V113;
int version_ijl11=V113d; int version_ijl11=V113;
int version_D2Gdi=V113d; int version_D2Gdi=V113;
int version_D2Win=V113d; int version_D2Win=V113;
int version_D2sound=V113d; int version_D2sound=V113;
int version_D2MCPCLI=V113d; int version_D2MCPCLI=V113;
int version_D2Launch=V113d; int version_D2Launch=V113;
int version_D2gfx=V113d; int version_D2gfx=V113;
int version_D2Client=V113d; int version_D2Client=V113;
int version_D2Net=V113d; int version_D2Net=V113;
int version_D2Lang=V113d; int version_D2Lang=V113;
int version_D2Game=V113d; int version_D2Game=V113;
int version_D2CMP=V113d; int version_D2CMP=V113;
int version_Bnclient=V113d; int version_Bnclient=V113;
int version_Fog=V113d; int version_Fog=V113;
int version_Storm=V113d; int version_Storm=V113;
//-------------------------
DWORD offset_SmackW32=NULL; DWORD offset_SmackW32=NULL;
DWORD offset_D2Common=NULL; DWORD offset_D2Common=NULL;
@@ -377,7 +375,6 @@ bool initD2version()
} }
*/ */
/*
void getVersion(DWORD addr, int* ver, DWORD v109b, DWORD v109d, DWORD v110, DWORD v111, DWORD v111b, DWORD v112, DWORD v113, const char * filename) void getVersion(DWORD addr, int* ver, DWORD v109b, DWORD v109d, DWORD v110, DWORD v111, DWORD v111b, DWORD v112, DWORD v113, const char * filename)
{ {
log_msg("version of %s\t",filename); log_msg("version of %s\t",filename);
@@ -435,47 +432,6 @@ bool initD2version()
log_msg("\n\n"); log_msg("\n\n");
return true; return true;
} }
*/
const char sD2Ver[8][7] = {{"v1.09b"},{"v1.09d"},{"v1.10 "},{"v1.11 "},{"v1.11b"},{"v1.12 "},{"v1.13c"},{"v1.13d"}};
bool initD2version()
{
char currentpath[MAX_PATH];
if (! GetD2Path(currentpath, MAX_PATH))
{
log_msg("Path to Game.exe not found");
return false;
}
log_msg("***** Get Game.exe version *****\n");
int ver = GetD2Version(currentpath);
if (ver == -1) return false;
//--------------------
version_SmackW32=ver;
version_D2Common=ver;
version_ijl11=ver;
version_D2Gdi=ver;
version_D2Win=ver;
version_D2sound=ver;
version_D2MCPCLI=ver;
version_D2Launch=ver;
version_D2gfx=ver;
version_D2Client=ver;
version_D2Net=ver;
version_D2Lang=ver;
version_D2Game=ver;
version_D2CMP=ver;
version_Bnclient=ver;
version_Fog=ver;
version_Storm=ver;
//-------------------
log_msg("version Game.exe - ");
log_msg(sD2Ver[ver]);
log_msg("\n");
return true;
}
//////////////////////////////////// EXPORTS FUNCTIONS //////////////////////////////////// //////////////////////////////////// EXPORTS FUNCTIONS ////////////////////////////////////
extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName) extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
@@ -489,12 +445,7 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
loadD2Libraries(); loadD2Libraries();
if (!initD2version()) if (!initD2version()) return NULL;
{
log_msg("wrong G ame.exe version\n");
return NULL;
}
if (!initD2functions()) return NULL; if (!initD2functions()) return NULL;
@@ -519,7 +470,7 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
if (active_VersionTextChange) if (active_VersionTextChange)
Install_VersionChange(); Install_VersionChange();
if (active_PrintPlugYVersion) if (active_PrintPlugYVersion || active_Windowed)
Install_PrintPlugYVersion(); Install_PrintPlugYVersion();
if (active_StatsPoints) if (active_StatsPoints)
@@ -588,10 +539,6 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
unhookLibraries(); unhookLibraries();
log_msg("\n*****Loading locale strings.*****\n");
initLocaleStrings();
log_msg("\n\n\n");
initCustomLibraries(); initCustomLibraries();
log_msg("***** ENTERING DIABLO II *****\n\n" ); log_msg("***** ENTERING DIABLO II *****\n\n" );
@@ -608,7 +555,6 @@ extern "C" __declspec(dllexport) bool __stdcall Release()
log_msg("\n***** ENDING DIABLO II *****\n\n" ); log_msg("\n***** ENDING DIABLO II *****\n\n" );
freeCustomLibraries(); freeCustomLibraries();
freeLocaleStrings();
freeD2Libraries(); freeD2Libraries();
return true; return true;
} }

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
More little options. More little options.
@@ -11,10 +10,11 @@
#include "d2functions.h" #include "d2functions.h"
#include <stdio.h> #include <stdio.h>
int active_RunLODs = false; int active_Windowed = true;
int active_alwaysRegenMapInSP = false;
DWORD nbPlayersCommandByDefault = 1;
int active_DisplayItemLevel = false; int active_DisplayItemLevel = false;
DWORD nbPlayersCommandByDefault = 0;
int active_alwaysRegenMapInSP = false;
int active_RunLODs = false;
int active_AlwaysDisplayLifeMana = false; int active_AlwaysDisplayLifeMana = false;
int active_EnabledTXTFilesWithMSExcel = false; int active_EnabledTXTFilesWithMSExcel = false;
int active_DisplayBaseStatsValue = false; int active_DisplayBaseStatsValue = false;
@@ -23,13 +23,95 @@ int active_EnabledCowPortalWhenCowKingWasKill = false;
/****************************************************************************************************/ /****************************************************************************************************/
int setWindowedOptionsDone = false;
int active_RemoveBorder = true;
int active_WindowOnTop = true;
int active_Maximized = true;
int active_SetWindowPos = true;
int windowedX = 240;
int windowedY = 0;
int windowedWidth = 1440;
int windowedHeight = 1080;
int active_LockMouseOnStartup = true;
void lockMouseCursor(int width, int height)
{
RECT clientRect;
RECT rect;
HWND hwnd = GetActiveWindow();
GetClientRect(hwnd, &clientRect);
GetWindowRect(hwnd, &rect);
int shiftX = (rect.right - rect.left - clientRect.right) / 2;
int shiftY = rect.bottom - rect.top - clientRect.bottom - shiftX;
log_msg("Windows size : %i, %i, %i, %i\n", rect.left, rect.top, rect.right, rect.bottom);
rect.left += shiftX;
rect.right = rect.left + width;
rect.top += shiftY;
rect.bottom = rect.top + height;
//no resize : 560, 231, 1360, 831
//resized : 240, 0, 1040, 600
log_msg("Lock Mouse Cursor : %i, %i, %i, %i\n", rect.left, rect.top, rect.right, rect.bottom);
ClipCursor(&rect);
}
void lockMouseCursor() { lockMouseCursor(ResolutionX, ResolutionY); }
void SetWindowedOptions()
{
if (setWindowedOptionsDone)
return;
HWND hwnd = GetActiveWindow();
RECT clientRect;
GetClientRect(hwnd, &clientRect);
if (active_RemoveBorder)
{
LONG lStyle = GetWindowLong(hwnd, GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
SetWindowLong(hwnd, GWL_STYLE, lStyle);
SetWindowPos(hwnd, NULL, 0, 0, clientRect.right, clientRect.bottom, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOOWNERZORDER);
}
if (active_Maximized && !active_SetWindowPos)
{
RECT screen;
GetWindowRect(GetDesktopWindow(), &screen);
log_msg("Screen size : %i, %i, %i, %i\n", screen.left, screen.top, screen.right, screen.bottom);
int w = screen.bottom * clientRect.right / clientRect.bottom;
int h = w * clientRect.bottom / clientRect.right;
if (screen.right < w)
{
h = screen.right * clientRect.bottom / clientRect.right;
w = h * clientRect.right / clientRect.bottom;
}
windowedX = (screen.right - w) / 2;
windowedY = (screen.bottom - h) / 2;
windowedWidth = w;
windowedHeight = h;
}
if (active_SetWindowPos || active_Maximized)
{
if (active_WindowOnTop)
SetWindowPos(hwnd, HWND_TOPMOST, windowedX, windowedY, windowedWidth, windowedHeight, SWP_FRAMECHANGED);
else
SetWindowPos(hwnd, NULL, windowedX, windowedY, windowedWidth, windowedHeight, SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOOWNERZORDER);
} else if (active_WindowOnTop)
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, clientRect.right, clientRect.bottom, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE);
if (active_LockMouseOnStartup)
lockMouseCursor(clientRect.right, clientRect.bottom);
setWindowedOptionsDone = true;
}
/****************************************************************************************************/
void STDCALL displayItemlevel(LPWSTR popup, Unit* ptItem) 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];
//swprintf(text, L"Item Level: %u\n", D2GetItemLevel(ptItem)); swprintf(text, L"Item Level: %u\n", D2GetItemLevel(ptItem));
swprintf(text, getTranslatedString(STR_ITEM_LEVEL), D2GetItemLevel(ptItem));
wcscat(text,L"\n");
D2SetColorPopup(text,WHITE); D2SetColorPopup(text,WHITE);
wcscat(popup,text); wcscat(popup,text);
} }
@@ -142,18 +224,17 @@ void Install_DisplayItemLevel()
log_msg("Patch D2Client for display item popup. (DisplayPopup)\n"); log_msg("Patch D2Client for display item popup. (DisplayPopup)\n");
// print the text in the final buffer // print the text in the final buffer
mem_seek R7(D2Client, 3D47C, 3D47C, 438A1, ADD0A, 789DA, AE0AA, 941C0, 98590); mem_seek R7(D2Client, 3D47C, 3D47C, 438A1, ADD0A, 789DA, AE0AA, 941C0);
memt_byte( 0x68 , 0xE8); memt_byte( 0x68 , 0xE8);
MEMT_REF4( 0x100, 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 >= V113 ? 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
// print the text in the final buffer (for set items) // print the text in the final buffer (for set items)
mem_seek R7(D2Client, 3C452, 3C452, 427BE, AC773, 77773, ACEB3, 92FE3, 973B3); mem_seek R7(D2Client, 3C452, 3C452, 427BE, AC773, 77773, ACEB3, 92FE3);
memt_byte( 0x68 , 0xE8); memt_byte( 0x68 , 0xE8);
MEMT_REF4( 0x100, version_D2Client >= V111 ? caller_displayItemlevelSet_111 : version_D2Client == V110 ? caller_displayItemlevelSet : caller_displayItemlevelSet_9); MEMT_REF4( 0x100, version_D2Client >= V111 ? caller_displayItemlevelSet_111 : version_D2Client == V110 ? caller_displayItemlevelSet : caller_displayItemlevelSet_9);
//6FAE27BE . 68 00010000 PUSH 100 //6FAE27BE . 68 00010000 PUSH 100
@@ -161,7 +242,6 @@ void Install_DisplayItemLevel()
//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
log_msg("\n"); log_msg("\n");
@@ -213,12 +293,12 @@ void Install_SendPlayersCommand()
log_msg("Patch D2Client for init default nb /players. (SendPlayersCommand)\n"); log_msg("Patch D2Client for init default nb /players. (SendPlayersCommand)\n");
infoEnabledSendPlayersCommand = (DWORD*)R7(D2Client, 111D60, 110BC0, 107960, 11BFBC, 11C2AC, 11BFF8, 11C394, 11D1DC); infoEnabledSendPlayersCommand = (DWORD*)R7(D2Client, 111D60, 110BC0, 107960, 11BFBC, 11C2AC, 11BFF8, 11C394);
if ( version_D2Client >= V110 ) if ( version_D2Client >= V110 )
msgNBPlayersString = (char*)R7(D2Client, 0000, 0000, D8448, D06A8, D4748, D4680, D4E00, D470C); msgNBPlayersString = (char*)R7(D2Client, 0000, 0000, D8448, D06A8, D4748, D4680, D4E00);
// Set nb Player to default // Set nb Player to default
mem_seek R7(D2Client, 8723B, 865BB, 81B8B, A3602, 66A02, 90162, C39F2, 1D3F2);//6FB1C7B7-6FAA0000 mem_seek R7(D2Client, 8723B, 865BB, 81B8B, A3602, 66A02, 90162, C39F2);//6FB1C7B7-6FAA0000
MEMJ_REF4( D2GetResolution , caller_SendPlayersCommand); 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>
@@ -227,7 +307,6 @@ void Install_SendPlayersCommand()
//6FB16A01 |. E8 AA65FAFF CALL <JMP.&D2gfx.#10063> //6FB16A01 |. E8 AA65FAFF CALL <JMP.&D2gfx.#10063>
//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>
log_msg("\n"); log_msg("\n");
@@ -245,14 +324,13 @@ void Install_AlwaysRegenMapInSP()
log_msg("Patch D2Game for always regenerate maps in Single player. (AlwaysRegenMapInSP)\n"); log_msg("Patch D2Game for always regenerate maps in Single player. (AlwaysRegenMapInSP)\n");
// Always regenerate maps in Single player // Always regenerate maps in Single player
mem_seek R7(D2Game, 517ED, 51BFA, 5DE88, 6235D, 2966D, 1E1FE, ED3BE, 26D7E); mem_seek R7(D2Game, 517ED, 51BFA, 5DE88, 6235D, 2966D, 1E1FE, ED3BE);
memt_byte( 0x74 , 0xEB); // JMP SHORT D2Game.01FE2368 memt_byte( 0x74 , 0xEB); // JMP SHORT D2Game.01FE2368
//6FC8DE88 |. 74 09 JE SHORT D2Game.6FC8DE93 //6FC8DE88 |. 74 09 JE SHORT D2Game.6FC8DE93
//01FE235D |. 74 09 JE SHORT D2Game.01FE2368 //01FE235D |. 74 09 JE SHORT D2Game.01FE2368
//01F9966D |. 74 09 JE SHORT D2Game.01F99678 //01F9966D |. 74 09 JE SHORT D2Game.01F99678
//6FC3E1FE |. 74 09 JE SHORT D2Game.6FC3E209 //6FC3E1FE |. 74 09 JE SHORT D2Game.6FC3E209
//6FD0D3BE |. 74 09 JE SHORT D2Game.6FD0D3C9 //6FD0D3BE |. 74 09 JE SHORT D2Game.6FD0D3C9
//6FC46D7E |. 74 09 JE SHORT D2Game.6FC46D89
log_msg("\n"); log_msg("\n");
@@ -269,12 +347,11 @@ void Install_RunLODs()
log_msg("Patch D2gfx for launch any number of Diablo II game in the same computer. (RunLODs)\n"); log_msg("Patch D2gfx for launch any number of Diablo II game in the same computer. (RunLODs)\n");
// execute if it's our packet else continue // execute if it's our packet else continue
mem_seek R7(D2gfx, 447C, 447C, 446A, 84CF, 84AF, 894F, 85BF, B6B0); mem_seek R7(D2gfx, 447C, 447C, 446A, 84CF, 84AF, 894F, 85BF);
memt_byte( 0x74, 0xEB ); // JMP SHORT D2gfx.6FA884F6 memt_byte( 0x74, 0xEB ); // JMP SHORT D2gfx.6FA884F6
//6FA884AF |. 74 45 JE SHORT D2gfx.6FA884F6 //6FA884AF |. 74 45 JE SHORT D2gfx.6FA884F6
//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
log_msg("\n"); log_msg("\n");
@@ -389,9 +466,9 @@ void Install_AlwaysDisplayLifeMana()
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 >= V113c ) if ( version_D2Client >= V113 )
{ {
mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2764A, 6D6FA); mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2764A);
memt_byte( 0x0F , 0x90); memt_byte( 0x0F , 0x90);
memt_byte( 0x8C , 0xE8); memt_byte( 0x8C , 0xE8);
MEMT_REF4( 0x000000BC, caller_AlwaysDisplayLife_113); MEMT_REF4( 0x000000BC, caller_AlwaysDisplayLife_113);
@@ -401,13 +478,9 @@ void Install_AlwaysDisplayLifeMana()
//6FAD7659 |. A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C] //6FAD7659 |. A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C]
//6FAD7667 |. 0F8C A4000000 JL D2Client.6FAD7711 //6FAD7667 |. 0F8C A4000000 JL D2Client.6FAD7711
//--
//6FB1D717 |. 0F8C A4000000 JL D2Client.6FB1D7C1
} else { } else {
// Always display life. // Always display life.
mem_seek R7(D2Client, 58B32, 58B32, 5F102, 2D713, B5DF3, 81733, 0000, 0000); mem_seek R7(D2Client, 58B32, 58B32, 5F102, 2D713, B5DF3, 81733, 0000);
memt_byte( 0xA1 , 0xE8); memt_byte( 0xA1 , 0xE8);
MEMT_REF4( ptResolutionY , version_D2Client >= V111 ? caller_AlwaysDisplayLife_111 : caller_AlwaysDisplayLife); MEMT_REF4( ptResolutionY , version_D2Client >= V111 ? caller_AlwaysDisplayLife_111 : caller_AlwaysDisplayLife);
//6FADD713 |. A1 605CBA6F MOV EAX,DWORD PTR DS:[6FBA5C60] //6FADD713 |. A1 605CBA6F MOV EAX,DWORD PTR DS:[6FBA5C60]
@@ -417,13 +490,13 @@ void Install_AlwaysDisplayLifeMana()
// Always display mana. // Always display mana.
if ( version_D2Client >= V113c ) if ( version_D2Client >= V113 )
{ {
//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 R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2770C, 6D7BC); mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2770C);
memt_byte( 0xA1 , 0xE8); memt_byte( 0xA1 , 0xE8);
MEMT_REF4( ptResolutionY , caller_AlwaysDisplayMana_113); MEMT_REF4( ptResolutionY , caller_AlwaysDisplayMana_113);
//6FAD770C |> A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C] //6FAD770C |> A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C]
@@ -437,12 +510,10 @@ void Install_AlwaysDisplayLifeMana()
//6FAD77CA |. 5B POP EBX //6FAD77CA |. 5B POP EBX
//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]
} }
else if ( version_D2Client >= V110 ) else if ( version_D2Client >= V110 )
{ {
mem_seek R7(D2Client, 0000, 0000, 5F1E6, 2D7FB, B5EDB, 8181B, 0000, 0000); mem_seek R7(D2Client, 0000, 0000, 5F1E6, 2D7FB, B5EDB, 8181B, 0000);
memt_byte( 0x5F , 0xE8); memt_byte( 0x5F , 0xE8);
MEMT_REF4( 0x815B5D5E , caller_AlwaysDisplayMana); MEMT_REF4( 0x815B5D5E , caller_AlwaysDisplayMana);
memt_byte( 0xC4 , 0x90); // NOP memt_byte( 0xC4 , 0x90); // NOP
@@ -467,7 +538,7 @@ void Install_AlwaysDisplayLifeMana()
//6FB3181F |. 81C4 5C020000 ADD ESP,25C //6FB3181F |. 81C4 5C020000 ADD ESP,25C
//6FB31825 |. C3 RETN //6FB31825 |. C3 RETN
} else { } else {
mem_seek R7(D2Client, 58C09, 58C09, 0000, 0000, 0000, 0000, 0000, 0000); mem_seek R7(D2Client, 58C09, 58C09, 0000, 0000, 0000, 0000, 0000);
memt_byte( 0xE9 , 0xE8); memt_byte( 0xE9 , 0xE8);
MEMT_REF4( 0x000000C2 , caller_AlwaysDisplayMana_9); MEMT_REF4( 0x000000C2 , caller_AlwaysDisplayMana_9);
//6FAF8C09 . E9 C2000000 JMP D2Client.6FAF8CD0 //6FAF8C09 . E9 C2000000 JMP D2Client.6FAF8CD0
@@ -552,25 +623,23 @@ void Install_DisplayBaseStatsValue()
log_msg("Patch D2Client for display base stats value. (DisplayBaseStatsValue)\n"); log_msg("Patch D2Client for display base stats value. (DisplayBaseStatsValue)\n");
// Always print stat button images. // Always print stat button images.
mem_seek R7(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5, BF955); mem_seek R7(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5);
memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088 memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088
memt_byte( 0x4C, V7(D2Client, 12, 12, 13, 13, 13, 13, 13, 13) ); memt_byte( 0x4C, V7(D2Client, 12, 12, 13, 13, 13, 13, 13) );
memt_byte( 0x24, 0x90 ); // NOP memt_byte( 0x24, 0x90 ); // NOP
memt_byte( V7(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C, 1C), 0x90 ); // NOP (V109d:0x20 , V110:0x14 memt_byte( V7(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C), 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]
mem_seek R7(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E, BF9DE); mem_seek R7(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E);
MEMJ_REF4( D2PrintImage, caller_displayBaseStatsValue); 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>
log_msg("\n"); log_msg("\n");
@@ -598,14 +667,13 @@ 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 R7(D2Common, 0000, 0000, 1E965, 61762, 43A72, 5D492, 724B2, 63782); mem_seek R7(D2Common, 0000, 0000, 1E965, 61762, 43A72, 5D492, 724B2);
MEMC_REF4( D2CompileTxtFile, compileRunesTxt); 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
log_msg("\n"); log_msg("\n");
@@ -623,7 +691,7 @@ void Install_EnabledCowPortalWhenCowKingWasKill()
log_msg("Patch D2Game for enabled the opening of Cow Portal when player have already kill the cow king in that difficulty. (EnabledCowPortalWhenCowKingWasKill)\n"); log_msg("Patch D2Game for enabled the opening of Cow Portal when player have already kill the cow king in that difficulty. (EnabledCowPortalWhenCowKingWasKill)\n");
mem_seek R7(D2Game, 5DFF7, 5E457, 6C5E7 , B1278, 5DB68, 75C68, 67508, EBE8); mem_seek R7(D2Game, 5DFF7, 5E457, 6C5E7 , B1278, 5DB68, 75C68, 67508);
memt_byte( 0x85 , 0x33); // XOR EAX,EAX memt_byte( 0x85 , 0x33); // XOR EAX,EAX
//6FC8DFF7 . 85C0 TEST EAX,EAX //6FC8DFF7 . 85C0 TEST EAX,EAX
//6FC8E457 . 85C0 TEST EAX,EAX //6FC8E457 . 85C0 TEST EAX,EAX
@@ -632,7 +700,6 @@ void Install_EnabledCowPortalWhenCowKingWasKill()
//01FEDB68 |. 85C0 TEST EAX,EAX //01FEDB68 |. 85C0 TEST EAX,EAX
//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
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Updating server. Updating server.
@@ -102,7 +101,7 @@ void Install_VariableOnRealm()
log_msg("Patch D2Launch for set not on realm variable. (VariableonRealm)\n"); log_msg("Patch D2Launch for set not on realm variable. (VariableonRealm)\n");
// click on Battle.net button // click on Battle.net button
mem_seek R7(D2Launch, 8195, 81A5, 9915, 129E5, 18AA5, 17D15, 19295, 11C65); mem_seek R7(D2Launch, 8195, 81A5, 9915, 129E5, 18AA5, 17D15, 19295);
memt_byte( 0x81, 0xE8 ); // CALL memt_byte( 0x81, 0xE8 ); // CALL
MEMT_REF4( 0x000400EC, caller_BnetBtnPress); MEMT_REF4( 0x000400EC, caller_BnetBtnPress);
memt_byte( 0x00, 0x90 ); // NOP memt_byte( 0x00, 0x90 ); // NOP
@@ -115,7 +114,7 @@ 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 R7(D2Launch, 87B9, 87C9, 9F99, 11329, 17409, 16659, 17B8E, 1053E); mem_seek R7(D2Launch, 87B9, 87C9, 9F99, 11329, 17409, 16659, 17B8E);
if (version_D2Launch == V109b || version_D2Launch == V109d || version_D2Launch == V110) if (version_D2Launch == V109b || version_D2Launch == V109d || version_D2Launch == V110)
{ {
memt_byte( 0xBD, 0xE8 ); // CALL memt_byte( 0xBD, 0xE8 ); // CALL
@@ -127,7 +126,7 @@ void Install_VariableOnRealm()
} }
// click on SinglePlayer button // click on SinglePlayer button
mem_seek R7(D2Launch, D1F6, D1E6, EC16, B726, 117E6, 10A56, 11F36, A906); mem_seek R7(D2Launch, D1F6, D1E6, EC16, B726, 117E6, 10A56, 11F36);
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
@@ -136,7 +135,7 @@ void Install_VariableOnRealm()
{ {
log_msg("\nPatch D2Game for fixing ptClient removing bug. (VariableonRealm)\n"); log_msg("\nPatch D2Game for fixing ptClient removing bug. (VariableonRealm)\n");
//Bug crash ptClient search fix (for Megalixir Mod). //Bug crash ptClient search fix (for Megalixir Mod).
mem_seek R7(D2Game, 0000, 0000, 2B97, 0000, 0000, 0000, 0000, 0000); mem_seek R7(D2Game, 0000, 0000, 2B97, 0000, 0000, 0000, 0000);
memt_byte( 0x39 ,0xE8); memt_byte( 0x39 ,0xE8);
MEMT_REF4( 0x8B0C7429 , caller_fixClientRemovingBug); MEMT_REF4( 0x8B0C7429 , caller_fixClientRemovingBug);
memt_byte( 0xC1 ,0x90); memt_byte( 0xC1 ,0x90);

View File

@@ -37,7 +37,7 @@ static char *strstri(char *text, char *string)
{ {
while(*text) while(*text)
{ {
if(strnicmp(string, text, len) == 0) if(_strnicmp(string, text, len) == 0)
{ {
found = text; found = text;
break; break;
@@ -280,7 +280,7 @@ int INIFile::GetPrivateProfileString(const char *section, const char *key, const
if((m_cache) && (section && key && dest && size)) if((m_cache) && (section && key && dest && size))
{ {
if(stricmp(section, m_currentSection) != 0) if(_stricmp(section, m_currentSection) != 0)
{ {
strncpy(m_currentSection, section, MAX_SECTIONNAME_LENGTH); strncpy(m_currentSection, section, MAX_SECTIONNAME_LENGTH);
@@ -343,7 +343,7 @@ BOOL INIFile::WritePrivateProfileString(char *section, char *key, char *string)
{ {
if(!section || !key || !string) return false; if(!section || !key || !string) return false;
if(stricmp(section, m_currentSection) != 0) if(_stricmp(section, m_currentSection) != 0)
{ {
if(m_cacheWritePos == 0) if(m_cacheWritePos == 0)
m_cacheWritePos += sprintf((m_cache + m_cacheWritePos), "[%s]\r\n", section); m_cacheWritePos += sprintf((m_cache + m_cacheWritePos), "[%s]\r\n", section);

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Gestion of the infinity and shared Stash. Gestion of the infinity and shared Stash.
@@ -27,7 +26,7 @@ bool separateHardSoftStash = false;
bool active_sharedGold=false; bool active_sharedGold=false;
char* sharedStashFilename = NULL; char* sharedStashFilename = NULL;
typedef int (*TchangeToSelectedStash)(Unit* ptChar, Stash* newStash, DWORD bIsClient); typedef int (*TchangeToSelectedStash)(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient);
Unit* firstClassicStashItem(Unit* ptChar) Unit* firstClassicStashItem(Unit* ptChar)
{ {
@@ -81,7 +80,7 @@ Stash* newStash(DWORD id)
d2_assert( id == 0xFFFFFFFF , "trop de stash", __FILE__, __LINE__); d2_assert( id == 0xFFFFFFFF , "trop de stash", __FILE__, __LINE__);
Stash* stash = (Stash*)malloc(sizeof(Stash));//D2AllocMem(memPool, sizeof(Stash),__FILE__,__LINE__,0); Stash* stash = (Stash*)malloc(sizeof(Stash));//D2AllocMem(memPool, sizeof(Stash),__FILE__,__LINE__,0);
d2_assert(!stash , "pb de generation de stash", __FILE__, __LINE__); d2_assert(!stash , "pb de g<EFBFBD>n<EFBFBD>ration de stash", __FILE__, __LINE__);
ZeroMemory(stash, sizeof(Stash)); ZeroMemory(stash, sizeof(Stash));
stash->id = id; stash->id = id;
@@ -131,11 +130,11 @@ Stash* getStash(Unit* ptChar, DWORD isShared, DWORD id)//WORKS
} }
int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bIsClient) int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient)
{ {
if (!newStash) return 0; if (!newStash) return 0;
log_msg("changeToSelectedStash ID:%d\tshared:%d\tclient:%d\n",newStash->id,newStash->id,bIsClient); 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;
@@ -176,7 +175,6 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bIsClient)
} }
// add items of new stash // add items of new stash
PCPY->currentStash = newStash;
ptItem = newStash->ptListItem; ptItem = newStash->ptListItem;
while (ptItem) while (ptItem)
{ {
@@ -184,16 +182,20 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bIsClient)
D2Common10242(PCInventory, D2GetRealItem(ptItem), 1); D2Common10242(PCInventory, D2GetRealItem(ptItem), 1);
ptItem = D2UnitGetNextItem(ptItem); ptItem = D2UnitGetNextItem(ptItem);
} }
newStash->ptListItem = NULL; if (bOnlyItems)
newStash->ptListItem = PCPY->currentStash->ptListItem;
else
PCPY->currentStash = newStash;
PCPY->currentStash->ptListItem = NULL;
return 1; return 1;
} }
int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bIsClient) int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient)
{ {
if (!newStash) return 0; if (!newStash) return 0;
log_msg("changeToSelectedStash ID:%d\tshared:%d\tclient:%d\n",newStash->id,newStash->id,bIsClient); 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;
@@ -221,14 +223,17 @@ int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bIsClient)
} }
// add items of new stash // add items of new stash
PCPY->currentStash = newStash;
ptItem = newStash->ptListItem; ptItem = newStash->ptListItem;
while (ptItem) while (ptItem)
{ {
D2InvAddItem(PCInventory, ptItem, ptItem->path->x, ptItem->path->y, 0xC, bIsClient, 4); D2InvAddItem(PCInventory, ptItem, ptItem->path->x, ptItem->path->y, 0xC, bIsClient, 4);
ptItem = D2UnitGetNextItem(ptItem); ptItem = D2UnitGetNextItem(ptItem);
} }
newStash->ptListItem = NULL; if (bOnlyItems)
newStash->ptListItem = PCPY->currentStash->ptListItem;
else
PCPY->currentStash = newStash;
PCPY->currentStash->ptListItem = NULL;
return 1; return 1;
} }
@@ -278,7 +283,7 @@ DWORD loadStashList(Unit* ptChar, BYTE data[], DWORD maxSize, DWORD* curSize, bo
while (curStash < nbStash) while (curStash < nbStash)
{ {
newStash = addStash(ptChar, isShared); newStash = addStash(ptChar, isShared);
changeToSelectedStash(ptChar, newStash, 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++;
@@ -384,20 +389,20 @@ void updateSelectedStashClient(Unit* ptChar)//WORKS
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags)//WORKS void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags)//WORKS
{ {
log_msg("setSelectedStashClient ID:%d, isShared:%d, flags:%08X\n", stashId, stashFlags&1, 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, stashId); Stash* newStash = getStash(ptChar, (stashFlags & 1) == 1, stashId);
if (!newStash) do if (!newStash) do
newStash = addStash(ptChar, stashFlags&1); newStash = addStash(ptChar, (stashFlags & 1) == 1);
while (newStash->id < stashId); while (newStash->id < stashId);
changeToSelectedStash(ptChar, newStash, 1); changeToSelectedStash(ptChar, newStash, (stashFlags & 2) == 2, 1);
PCPY->flags = flags; PCPY->flags = flags;
} }
void selectStash(Unit* ptChar, Stash* newStash)//WORKS void selectStash(Unit* ptChar, Stash* newStash)//WORKS
{ {
changeToSelectedStash(ptChar, newStash, 0); changeToSelectedStash(ptChar, newStash, 0, 0);
updateSelectedStashClient(ptChar); updateSelectedStashClient(ptChar);
} }
@@ -424,6 +429,35 @@ void toggleToSharedStash(Unit* ptChar)
} }
} }
void swapStash(Unit* ptChar, Stash* curStash, Stash* swpStash)
{
if (!ptChar || !curStash || !swpStash || curStash == swpStash)
return;
changeToSelectedStash(ptChar, swpStash, 1, 0);
updateClient(ptChar, UC_SELECT_STASH, swpStash->id, swpStash->flags | 2, PCPY->flags);
}
void toggleStash(Unit* ptChar, DWORD page)
{
log_msg("toggle stash page = %u\n", page);
Stash* curStash = PCPY->currentStash;
Stash* swpStash = curStash->isShared ? PCPY->selfStash : PCPY->sharedStash;
swapStash(ptChar, curStash, swpStash);
}
void swapStash(Unit* ptChar, DWORD page, bool toggle)
{
log_msg("swap stash page = %u\n", page);
Stash* curStash = PCPY->currentStash;
Stash* swpStash = curStash->isShared == toggle ? PCPY->selfStash : PCPY->sharedStash;
for (DWORD i = 0; i < page; i++)
{
if (curStash->nextStash == NULL)
addStash(ptChar, swpStash->isShared);
swpStash = swpStash->nextStash;
}
swapStash(ptChar, curStash, swpStash);
}
void selectPreviousStash(Unit* ptChar) void selectPreviousStash(Unit* ptChar)
{ {
@@ -805,45 +839,42 @@ void Install_MultiPageStash()
log_msg("Patch D2Game for carry1 unique item. (MultiPageStash)\n"); log_msg("Patch D2Game for carry1 unique item. (MultiPageStash)\n");
// Cannot put 2 items carry1 in inventory // Cannot put 2 items carry1 in inventory
mem_seek R7(D2Game, 0000, 0000, 55050, 57CA3, 2FE63, 99B03, CF1E3, 6B013); mem_seek R7(D2Game, 0000, 0000, 55050, 57CA3, 2FE63, 99B03, CF1E3);
MEMJ_REF4( D2ItemSetPage , version_D2Game >= V111 ? caller_carry1Limit_111 : caller_carry1Limit); 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>
// Cannot put 2 items carry1 in inventory by swapping // Cannot put 2 items carry1 in inventory by swapping
mem_seek R7(D2Game, 0000, 0000, 558D9, 58968, 310E8, 9B6E8, D10C8, 6BC78); mem_seek R7(D2Game, 0000, 0000, 558D9, 58968, 310E8, 9B6E8, D10C8);
MEMJ_REF4( D2ItemGetPage , version_D2Game >= V112 ? caller_carry1LimitSwap_112 : version_D2Game >= V111 ? caller_carry1LimitSwap_111 : caller_carry1LimitSwap); 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>
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 R7(D2Game, 0000, 0000, 0000, 3D935, 49FD5, 17AD5, D7B75, B7B15); mem_seek R7(D2Game, 0000, 0000, 0000, 3D935, 49FD5, 17AD5, D7B75);
MEMJ_REF4( D2CanPutItemInInv , caller_carry1LimitWhenDrop_111); 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>
} else { } else {
// Cannot put 2 items carry1 in inventory when drop cube // Cannot put 2 items carry1 in inventory when drop cube
mem_seek R7(D2Game, 0000, 0000, 14341, 0000, 0000, 0000, 0000, 0000); mem_seek R7(D2Game, 0000, 0000, 14341, 0000, 0000, 0000, 0000);
memt_byte( 0xBA ,0xE8); memt_byte( 0xBA ,0xE8);
MEMT_REF4( 0x00000806 , caller_carry1LimitWhenDrop); MEMT_REF4( 0x00000806 , caller_carry1LimitWhenDrop);
//6FC44341 |. BA 06080000 |MOV EDX,806 //6FC44341 |. BA 06080000 |MOV EDX,806
} }
// 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 R7(D2Game, 0000, 0000, 1299E, 38E3B, 43F0B, 1209B, D211B, B301B); mem_seek R7(D2Game, 0000, 0000, 1299E, 38E3B, 43F0B, 1209B, D211B);
memt_byte( 0x8B ,0xE8); memt_byte( 0x8B ,0xE8);
MEMT_REF4( version_D2Game >= V111 ? 0x850C2474 : 0x85102444 , version_D2Game >= V111 ? caller_carry1OutOfStash_111 : caller_carry1OutOfStash); MEMT_REF4( version_D2Game >= V111 ? 0x850C2474 : 0x85102444 , version_D2Game >= V111 ? caller_carry1OutOfStash_111 : caller_carry1OutOfStash);
memt_byte( version_D2Game >= V111 ? 0xF6 : 0xC0 ,0x90); memt_byte( version_D2Game >= V111 ? 0xF6 : 0xC0 ,0x90);
@@ -857,8 +888,6 @@ void Install_MultiPageStash()
//6FC3209F |. 85F6 |TEST ESI,ESI //6FC3209F |. 85F6 |TEST ESI,ESI
//6FCF211B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C] //6FCF211B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C]
//6FCF211F |. 85F6 |TEST ESI,ESI //6FCF211F |. 85F6 |TEST ESI,ESI
//6FCD301B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C]
//6FCD301F |. 85F6 |TEST ESI,ESI
log_msg("\n"); log_msg("\n");
} }

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Interface functions Interface functions
@@ -141,7 +140,7 @@ void Install_InterfaceSkills()
log_msg("Patch D2Client for skills interface. (InterfaceSkills)\n"); log_msg("Patch D2Client for skills interface. (InterfaceSkills)\n");
// Print new buttons images // Print new buttons images
mem_seek R7(D2Client, 7AC20, 7AC20, 77073, 16190, 8A9C0, 7F320, 77F20, 2F380); mem_seek R7(D2Client, 7AC20, 7AC20, 77073, 16190, 8A9C0, 7F320, 77F20);
memt_byte( 0x5F, 0xE9 ); // JMP caller_printBtns memt_byte( 0x5F, 0xE9 ); // JMP caller_printBtns
if ( version_D2Client >= V111 ) { if ( version_D2Client >= V111 ) {
MEMT_REF4( 0xCCC35B5E, caller_printSkillsPageBtns_111); MEMT_REF4( 0xCCC35B5E, caller_printSkillsPageBtns_111);
@@ -165,11 +164,6 @@ void Install_InterfaceSkills()
//6FB27F22 |. 5B POP EBX //6FB27F22 |. 5B POP EBX
//6FB27F23 \. C3 RETN //6FB27F23 \. C3 RETN
//6FB27F24 CC INT3 //6FB27F24 CC INT3
//6FADF380 |> 5F POP EDI
//6FADF381 |. 5E POP ESI
//6FADF382 |. 5B POP EBX
//6FADF383 \. C3 RETN
//6FADF384 CC INT3
} else { } else {
MEMT_REF4( 0x835B5D5E, caller_printSkillsPageBtns); MEMT_REF4( 0x835B5D5E, caller_printSkillsPageBtns);
memt_byte( 0xC4, 0x90 ); // NOP memt_byte( 0xC4, 0x90 ); // NOP
@@ -186,7 +180,7 @@ void Install_InterfaceSkills()
if (posXUnassignSkillBtn==-1 && posYUnassignSkillBtn==-1) if (posXUnassignSkillBtn==-1 && posYUnassignSkillBtn==-1)
{ {
// Don't print "Skill Points Remaining" // Don't print "Skill Points Remaining"
mem_seek R7(D2Client, 7AC30, 7AC30, 77080, 16294, 8AC74, 7ECF4, 78334, 2F7E4); mem_seek R7(D2Client, 7AC30, 7AC30, 77080, 16294, 8AC74, 7ECF4, 78334);
memt_byte( 0xB9, 0xE8 ); memt_byte( 0xB9, 0xE8 );
MEMT_REF4( 0x00001083, version_D2Client >= V111 ? caller_DontPrintSkillPointsRemaining_111 : caller_DontPrintSkillPointsRemaining); MEMT_REF4( 0x00001083, version_D2Client >= V111 ? caller_DontPrintSkillPointsRemaining_111 : caller_DontPrintSkillPointsRemaining);
//6FB17080 /$ B9 83100000 MOV ECX,1083 //6FB17080 /$ B9 83100000 MOV ECX,1083
@@ -194,11 +188,10 @@ void Install_InterfaceSkills()
//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
} }
// Manage mouse down (Play sound) // Manage mouse down (Play sound)
mem_seek R7(D2Client, 7BBD1, 7BBD1, 780E4, 17BC2, 8C6E2, 808B2, 79C62, 31112); mem_seek R7(D2Client, 7BBD1, 7BBD1, 780E4, 17BC2, 8C6E2, 808B2, 79C62);
memt_byte( 0xC7, 0xE8 ); // CALL caller_skillsPageMouseDown memt_byte( 0xC7, 0xE8 ); // CALL caller_skillsPageMouseDown
MEMT_REF4( version_D2Client >= V111 ? 0x00001845 : 0x00001843, version_D2Client >= V111 ? caller_skillsPageMouseDown_111 : caller_skillsPageMouseDown); MEMT_REF4( version_D2Client >= V111 ? 0x00001845 : 0x00001843, version_D2Client >= V111 ? caller_skillsPageMouseDown_111 : caller_skillsPageMouseDown);
memt_byte( 0x00, 0x90 ); // NOP memt_byte( 0x00, 0x90 ); // NOP
@@ -206,19 +199,17 @@ void Install_InterfaceSkills()
//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 000000>MOV DWORD PTR SS:[EBP+18],0
//6FB29C62 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0 //6FB29C62 > C745 18 000000>MOV DWORD PTR SS:[EBP+18],0
//6FAE1112 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
// Manage mouse up // Manage mouse up
mem_seek R7(D2Client, 7BC40, 7BC40, 78466, 17558, 8C078, 80248, 795F8, 30AA8); mem_seek R7(D2Client, 7BC40, 7BC40, 78466, 17558, 8C078, 80248, 795F8);
MEMJ_REF4( D2FreeWinMessage, caller_skillsPageMouseUp);//0xFFF93B0A 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>
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Interface stats page functions Interface stats page functions
@@ -451,47 +450,43 @@ void Install_InterfaceStash()
log_msg("Patch D2Client for stash interface. (InterfaceStash)\n"); log_msg("Patch D2Client for stash interface. (InterfaceStash)\n");
// Print button images // Print button images
mem_seek R7(D2Client, 39060, 39060, 3F399, B1006, 7DF86, B3656, 99A56, 9DE26); mem_seek R7(D2Client, 39060, 39060, 3F399, B1006, 7DF86, B3656, 99A56);
MEMC_REF4( D2LoadBuySelBtn, printBtns); 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
// print page number // print page number
mem_seek R7(D2Client, 3903C, 3903C, 3F375, B0FE3, 7DF63, B3633, 99A33, 9DE03); mem_seek R7(D2Client, 3903C, 3903C, 3F375, B0FE3, 7DF63, B3633, 99A33);
MEMJ_REF4( D2PrintString, printPageNumber); 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 91F4F6FF CALL <JMP.&D2Win.#10150> //6FB49A32 |. E8 4739F7FF CALL <JMP.&D2Win.#10150>
//6FB4DE02 |. E8 4739F7FF CALL <JMP.&D2Win.#10076>
// Manage mouse down (Play sound) // Manage mouse down (Play sound)
mem_seek R7(D2Client, 45091, 45091, 4BBA1, B4666, 7FDD6, B54A6, 9B8A6, 9FC76); mem_seek R7(D2Client, 45091, 45091, 4BBA1, B4666, 7FDD6, B54A6, 9B8A6);
MEMC_REF4( version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V111 ? caller_manageBtnDown_111 : caller_manageBtnDown); 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
// Manage mouse up // Manage mouse up
mem_seek R7(D2Client, 455F9, 455F9, 4C0F9, B57B9, 7FC09, B52D9, 9B6D9, 9FAA9); mem_seek R7(D2Client, 455F9, 455F9, 4C0F9, B57B9, 7FC09, B52D9, 9B6D9);
MEMC_REF4( version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V111 ? caller_manageBtnUp_111 : caller_manageBtnUp); 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
// init state of button on open stash page // init state of button on open stash page
mem_seek R7(D2Client, 45B3A, 45B3A, 4C63A, A645A, 749DA, A9D9A, 8CC3A, 9441A); mem_seek R7(D2Client, 45B3A, 45B3A, 4C63A, A645A, 749DA, A9D9A, 8CC3A);
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 );
@@ -502,27 +497,24 @@ void Install_InterfaceStash()
//6FB249DA |> 81C4 04010000 ADD ESP,104 //6FB249DA |> 81C4 04010000 ADD ESP,104
//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
// 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 R7(D2Client, 3F098, 3F098, 45997, A71F4, 71F64, A7314, 8D434, 91A24); mem_seek R7(D2Client, 3F098, 3F098, 45997, A71F4, 71F64, A7314, 8D434);
MEMJ_REF4( D2InventoryGetFirstItem, initGetNextItemForSet); 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>
// 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 R7(D2Client, 3F0FA, 3F0FA, 45A1C, A728B, 71FFB, A73AB, 8D4CB, 91ABB); mem_seek R7(D2Client, 3F0FA, 3F0FA, 45A1C, A728B, 71FFB, A73AB, 8D4CB);
MEMJ_REF4( D2UnitGetNextItem, getNextItemForSet); 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>
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Interface functions Interface functions
@@ -246,7 +245,7 @@ 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
mem_seek R7(D2Client, 2A7BE, 2A7AE, 30F86, 83636, 8A0B6, 6C016, BDC16, C03B6); mem_seek R7(D2Client, 2A7BE, 2A7AE, 30F86, 83636, 8A0B6, 6C016, BDC16);
memt_byte( 0x5F, 0xE9 ); // JMP memt_byte( 0x5F, 0xE9 ); // JMP
MEMT_REF4( 0x815B5D5E, version_D2Client >= V111 ? caller_printStatsPageBtns_111: version_D2Client == V110 ? caller_printStatsPageBtns : caller_printStatsPageBtns_9); 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
@@ -279,41 +278,34 @@ void Install_InterfaceStats()
//6FB6DC19 |. 5B POP EBX //6FB6DC19 |. 5B POP EBX
//6FB6DC1A |. 81C4 70030000 ADD ESP,370 //6FB6DC1A |. 81C4 70030000 ADD ESP,370
//6FB6DC20 \. C3 RETN //6FB6DC20 \. C3 RETN
//6FB703B6 |. 5F POP EDI
//6FB703B7 |. 5E POP ESI
//6FB703B8 |. 5D POP EBP
//6FB703B9 |. 5B POP EBX
//6FB703BA |. 81C4 70030000 ADD ESP,370
//6FB703<30>0 \. C3 RETN
if ( version_D2Client >= V111 ) if ( version_D2Client >= V111 )
{ {
// Manage mouse down (Play sound) // Manage mouse down (Play sound)
mem_seek R7(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, BCDC8, BF568); mem_seek R7(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, BCDC8);
memt_byte( 0xA1, 0xE8 ); memt_byte( 0xA1, 0xE8 );
MEMT_REF4( ptptClientChar, caller_statsPageMouseDown); 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]
//6FB6CDC8 . A1 FCBBBC6F MOV EAX,DWORD PTR DS:[6FBCBBFC] //6FB6CDC8 . A1 FCBBBC6F MOV EAX,DWORD PTR DS:[6FBCBBFC]
//6FB6F568 . A1 50D0BC6F MOV EAX,DWORD PTR DS:[6FBCD050]
// Manage mouse up // Manage mouse up
mem_seek R7(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, BDE33, C05D3); mem_seek R7(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, BDE33);
memt_byte( 0xA1, 0xE8 ); memt_byte( 0xA1, 0xE8 );
MEMT_REF4( ptptClientChar, caller_statsPageMouseUp); 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]
//6FB6DE33 . A1 FCBBBC6F MOV EAX,DWORD PTR DS:[6FBCBBFC] //6FB6DE33 . A1 FCBBBC6F MOV EAX,DWORD PTR DS:[6FBCBBFC]
//6FB705D3 . A1 50D0BC6F MOV EAX,DWORD PTR DS:[6FBCD050]
} else { } else {
// Manage mouse down (Play sound) // Manage mouse down (Play sound)
mem_seek R7(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, 0000, 0000); mem_seek R7(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, 0000);
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 R7(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, 0000, 0000); mem_seek R7(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, 0000);
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
} }

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Load Player Custom Data. Load Player Custom Data.
@@ -477,7 +476,7 @@ void Install_LoadPlayerData()
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 R7(D2Game, 5046F, 5086F, 5CB0F, BB8ED, 278CD, 465BD, 5638D, 3BCCD); mem_seek R7(D2Game, 5046F, 5086F, 5CB0F, BB8ED, 278CD, 465BD, 5638D);
memt_byte( 0x8B, 0xE8); // CALL caller_LoadSPPlayerCustomData memt_byte( 0x8B, 0xE8); // CALL caller_LoadSPPlayerCustomData
MEMT_REF4( 0x75F685F0 , caller_LoadSPPlayerCustomData); MEMT_REF4( 0x75F685F0 , caller_LoadSPPlayerCustomData);
memt_byte( 0x16, 0x90); // NOP memt_byte( 0x16, 0x90); // NOP
@@ -496,12 +495,9 @@ void Install_LoadPlayerData()
//6FC7638D |> 8BF0 MOV ESI,EAX //6FC7638D |> 8BF0 MOV ESI,EAX
//6FC7638F |. 85F6 TEST ESI,ESI //6FC7638F |. 85F6 TEST ESI,ESI
//6FC76391 |. 75 16 JNZ SHORT D2Game.6FC763A9 //6FC76391 |. 75 16 JNZ SHORT D2Game.6FC763A9
//6FC5BCCD |> 8BF0 MOV ESI,EAX
//6FC5BCCF |. 85F6 TEST ESI,ESI
//6FC5BCD1 |. 75 16 JNZ SHORT D2Game.6FC5BCE9
// Load MP player custom data. // Load MP player custom data.
mem_seek R7(D2Game, 50790, 50B90, 5CC66, BB777, 27757, 46447, 56217, 3BB57); mem_seek R7(D2Game, 50790, 50B90, 5CC66, BB777, 27757, 46447, 56217);
memt_byte( 0x83, 0xE8); memt_byte( 0x83, 0xE8);
MEMT_REF4( version_D2Game >= V111 ? 0x2174003B : version_D2Game == V110 ? 0x4674003F : 0x1D74003F, version_D2Game >= V111 ? caller_LoadMPPlayerCustomData_111 : version_D2Game == V110 ? caller_LoadMPPlayerCustomData: caller_LoadMPPlayerCustomData_9); MEMT_REF4( version_D2Game >= V111 ? 0x2174003B : version_D2Game == V110 ? 0x4674003F : 0x1D74003F, 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
@@ -514,21 +510,18 @@ void Install_LoadPlayerData()
//6FC6644A |. 74 21 JE SHORT D2Game.6FC6646D //6FC6644A |. 74 21 JE SHORT D2Game.6FC6646D
//6FC76217 |> 833B 00 CMP DWORD PTR DS:[EBX],0 //6FC76217 |> 833B 00 CMP DWORD PTR DS:[EBX],0
//6FC7621A |. 74 21 JE SHORT D2Game.6FC7623D //6FC7621A |. 74 21 JE SHORT D2Game.6FC7623D
//6FC5BB57 |> 833B 00 CMP DWORD PTR DS:[EBX],0
//6FC5BB5A |. 74 21 JE SHORT D2Game.6FC5BB7D
// Send save files to Server. // Send save files to Server.
mem_seek R7(D2Client, CF42, CF32, D5A2, 733FC, 5DFDC, 7933C, 1457C, B638C); mem_seek R7(D2Client, CF42, CF32, D5A2, 733FC, 5DFDC, 7933C, 1457C);
MEMJ_REF4( D2FogGetSavePath, version_D2Game >= V111 ? caller_SendSaveFiles_111 : caller_SendSaveFiles); 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>
// Receive save files from client. // Receive save files from client.
mem_seek R7(D2Game, 183A, 183A, 191A, 376E9, 703D9, 624D9, CAF39, D53E9); mem_seek R7(D2Game, 183A, 183A, 191A, 376E9, 703D9, 624D9, CAF39);
memt_byte( 0x8B ,0xE8); memt_byte( 0x8B ,0xE8);
if ( version_D2Game >= V111 ) { if ( version_D2Game >= V111 ) {
MEMT_REF4( 0xB60F005D, caller_ReceiveSaveFiles_111); MEMT_REF4( 0xB60F005D, caller_ReceiveSaveFiles_111);
@@ -542,8 +535,6 @@ void Install_LoadPlayerData()
//6FC824DC |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4] //6FC824DC |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4]
//6FCEAF39 |. 8B5D 00 MOV EBX,DWORD PTR SS:[EBP] //6FCEAF39 |. 8B5D 00 MOV EBX,DWORD PTR SS:[EBP]
//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]
//6FCF53EC |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+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]
@@ -552,7 +543,7 @@ void Install_LoadPlayerData()
if ( version_Fog <= V109d ) if ( version_Fog <= V109d )
{ {
mem_seek R7(Fog, 47DE, 45AE, 0000, 0000, 0000, 0000, 0000, 0000); mem_seek R7(Fog, 47DE, 45AE, 0000, 0000, 0000, 0000, 0000);
memt_byte( 0x8B ,0xE8); memt_byte( 0x8B ,0xE8);
MEMT_REF4( 0x891C2444, version_Fog == V109b? caller_BugFix109b : caller_BugFix109d); MEMT_REF4( 0x891C2444, version_Fog == V109b? caller_BugFix109b : caller_BugFix109d);
memt_byte( 0x44 ,0x90); memt_byte( 0x44 ,0x90);

View File

@@ -1,7 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Add "plugY v1.00" on screen. Add "plugY v1.00" on screen.
@@ -10,6 +8,7 @@
#include "common.h" #include "common.h"
#include "error.h" #include "error.h"
#include "d2functions.h" #include "d2functions.h"
#include "extraOptions.h"
#include <stdio.h> #include <stdio.h>
char* versionText = ""; char* versionText = "";
@@ -21,6 +20,10 @@ BYTE colorOfPlugYVersion = 4;
DWORD newTextBoxData[]={4,0x237,0x243,0xC8,0x14,0,0,0,0,0,0,2};//type,x,y,l,h,?,?,?,?,?,?,?(0,257,C8,28) DWORD newTextBoxData[]={4,0x237,0x243,0xC8,0x14,0,0,0,0,0,0,2};//type,x,y,l,h,?,?,?,?,?,?,?(0,257,C8,28)
void STDCALL printPlugYVersion(void** childrens, DWORD* sgnNumChildren) void STDCALL printPlugYVersion(void** childrens, DWORD* sgnNumChildren)
{
if (active_Windowed)
SetWindowedOptions();
if (active_PrintPlugYVersion)
{ {
char buf[20]; char buf[20];
void* textbox = D2CreateTextBox(newTextBoxData); void* textbox = D2CreateTextBox(newTextBoxData);
@@ -29,6 +32,7 @@ void STDCALL printPlugYVersion(void** childrens, DWORD* sgnNumChildren)
sprintf(buf, "PlugY %s", PLUGY_VERSION); sprintf(buf, "PlugY %s", PLUGY_VERSION);
D2PrintLineOnTextBox(textbox, buf, colorOfPlugYVersion); D2PrintLineOnTextBox(textbox, buf, colorOfPlugYVersion);
} }
}
FCT_ASM ( caller_printPlugYVersion ) FCT_ASM ( caller_printPlugYVersion )
POP ESI POP ESI
@@ -48,7 +52,7 @@ void Install_PrintPlugYVersion()
log_msg("Patch D2Launch to print PlugY version. (PrintPlugYVersion)\n"); log_msg("Patch D2Launch to print PlugY version. (PrintPlugYVersion)\n");
// Print PlugY version. // Print PlugY version.
mem_seek R7(D2Launch, 7F5D, 7F7D, 9639, 117C7, 178A7, 16AF7, 18061, 10A11); mem_seek R7(D2Launch, 7F5D, 7F7D, 9639, 117C7, 178A7, 16AF7, 18061);
MEMJ_REF4( D2CreateTextBox, caller_printPlugYVersion); 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>
@@ -56,7 +60,6 @@ void Install_PrintPlugYVersion()
//6FA56B1F |. E8 1A2EFFFF CALL <JMP.&D2Win.#10098> //6FA56B1F |. E8 1A2EFFFF CALL <JMP.&D2Win.#10098>
//6FA56AF6 |. E8 432EFFFF CALL <JMP.&D2Win.#10098> //6FA56AF6 |. E8 432EFFFF CALL <JMP.&D2Win.#10098>
//6FA58060 |. E8 ED18FFFF CALL <JMP.&D2Win.#10098> //6FA58060 |. E8 ED18FFFF CALL <JMP.&D2Win.#10098>
//6FA50A10 |. E8 218FFFFF CALL <JMP.&D2Win.#10164>
log_msg("\n"); log_msg("\n");
@@ -94,7 +97,7 @@ void Install_VersionChange()// BUG WITH 2MOD if D2Mod started before PlugY ????
// Print LoD/Mod version. // Print LoD/Mod version.
if (version_D2Launch >= V110) if (version_D2Launch >= V110)
{ {
mem_seek R7(D2Launch, 00000, 00000, 9723, 1189B, 1797B, 16BCB, 18134, 10AE4);//6FA19721-6FA10000 mem_seek R7(D2Launch, 00000, 00000, 9723, 1189B, 1797B, 16BCB, 18134);//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
@@ -108,17 +111,14 @@ void Install_VersionChange()// BUG WITH 2MOD if D2Mod started before PlugY ????
//6FA56BCF |. 8BCF MOV ECX,EDI //6FA56BCF |. 8BCF MOV ECX,EDI
//6FA58134 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10] //6FA58134 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
//6FA58138 |. 8BCF MOV ECX,EDI //6FA58138 |. 8BCF MOV ECX,EDI
//6FA50AE4 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
//6FA50AE8 |. 8BCF MOV ECX,EDI
} else { } else {
mem_seek R7(D2Launch, 801B, 803B, 972A, 118A2, 17982, 16BD2, 1813B, 10AEB); mem_seek R7(D2Launch, 801B, 803B, 972A, 118A2, 17982, 16BD2, 1813B);
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>
//6FA57981 |. E8 781EFFFF CALL <JMP.&D2Win.#10075> //6FA57981 |. E8 781EFFFF CALL <JMP.&D2Win.#10075>
//6FA56BD1 |. E8 EA2CFFFF CALL <JMP.&D2Win.#10015> //6FA56BD1 |. E8 EA2CFFFF CALL <JMP.&D2Win.#10015>
//6FA5813A |. E8 8F17FFFF CALL <JMP.&D2Win.#10022> //6FA5813A |. E8 8F17FFFF CALL <JMP.&D2Win.#10022>
//6FA50AEA |. E8 DF8CFFFF CALL <JMP.&D2Win.#10051>
} }
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Modified by L'Autour.
Cube Listing functions Cube Listing functions
@@ -15,98 +14,62 @@
const char* CUBEFORMULA_FILE = "cube.txt"; const char* CUBEFORMULA_FILE = "cube.txt";
const LPWSTR STRING_ERROR= L"***Error***"; const char * STRING_ERROR="***Error***";
#define lenbuf 512 #define BUF (&buf[strlen(buf)])
#define lenbufi 256
#define BUF &buf[cntbuf], lenbuf-cntbuf
bool InNoSocket; //~~~~~
/* /*
6FC9275F |. E8 ECCCFFFF |CALL D2Game.6FC8F450 ; \D2Game.6FC8F450 6FC9275F |. E8 ECCCFFFF |CALL D2Game.6FC8F450 ; \D2Game.6FC8F450
*/ */
void printOutput(CubeOutput* output, WCHAR* buf, BYTE* nbOutputs) void printOutput(CubeOutput* output, char* buf, BYTE* nbOutputs)
{ {
if (!output->outputType) if (!output->outputType)
return; return;
int cntbuf = wcslen(buf);
if (*nbOutputs) if (*nbOutputs)
cntbuf += swprintf(BUF,L" + "); sprintf(BUF," + ");
*nbOutputs += 1; *nbOutputs += 1;
if (output->outputType == 1) { if (output->outputType == 1) {
swprintf(BUF,getTranslatedString(STR_COW_PORTAL)); sprintf(BUF,"Cow Portal");
return; return;
} else if (output->outputType == 2) { } else if (output->outputType == 2) {
swprintf(BUF,getTranslatedString(STR_PANDEMONIUM_PORTAL)); sprintf(BUF,"Pandemonium Portal");
return; return;
} else if (output->outputType == 3) { } else if (output->outputType == 3) {
swprintf(BUF,getTranslatedString(STR_PANDEMONIUM_FINAL_PORTAL)); sprintf(BUF,"Pandemonium Final Portal");
return; return;
} }
if ((output->quantityOrNbSockets>1) && !output->haveSockets) if ((output->quantityOrNbSockets>1) && !output->haveSockets)
{ sprintf(BUF,"%u ", output->quantityOrNbSockets);
if (output->quantityOrNbSockets == 255)
{cntbuf += swprintf(BUF,getTranslatedString(STR_FULL));}
else
{cntbuf += swprintf(BUF,L"%u ", output->quantityOrNbSockets);}
}
//-------------------------------------------------------------------------------
WCHAR itembuf[lenbufi];
LPWSTR itemstr = &itembuf[0];
if (!(output->isSpecificItem))
{
ItemsBIN* items; LPWSTR string;
switch (output->outputType)
{
case 0xFC:
items = D2GetItemsBIN(output->ID);
wcsncpy(itemstr, D2GetStringFromIndex(items->NameStr), lenbufi);
break;
case 0xFD:
getTypeUString(output->ID, itemstr, lenbufi);
break;
case 0xFE: wcsncpy(itemstr, getTranslatedString(STR_ITEM),lenbufi);break;
case 0xFF: wcsncpy(itemstr, getTranslatedString(STR_ITEM_SAME_TYPE),lenbufi);break;
default: swprintf(BUF,STRING_ERROR);return;
}
itemstr = cutStringGender(itemstr);
}
//-------------------------------------------------------------------------------
if (output->repair) if (output->repair)
cntbuf += wSprintStringLastGender(BUF, STR_REPAIR); sprintf(BUF,"repair ");
if ((output->repair)&&(output->recharge))
cntbuf += wSprintStringLastGender(BUF, STR_AND);
if (output->recharge) if (output->recharge)
cntbuf += wSprintStringLastGender(BUF, STR_RECHARGE); sprintf(BUF,"recharge ");
if (output->isEthereal) if (output->isEthereal)
cntbuf += wSprintStringLastGender(BUF, STR_ETHERAL); sprintf(BUF,"ethereal ");
if (output->destroysFillers) if (output->destroysFillers)
cntbuf += wSprintStringLastGender(BUF, STR_DESTROY_FILLERS); sprintf(BUF,"destroys Fillers ");
if (output->removeFillers) if (output->removeFillers)
cntbuf += wSprintStringLastGender(BUF, STR_REMOVE_FILLERS); sprintf(BUF,"remove Fillers ");
if (output->regeneratesUnique) if (output->regeneratesUnique)
cntbuf += wSprintStringLastGender(BUF, STR_REGENERATE); sprintf(BUF,"regenerate ");
if (output->upgradeToExceptional) if (output->upgradeToExceptional)
cntbuf += wSprintStringLastGender(BUF, STR_EXCEPTIONAL); sprintf(BUF,"exceptional ");
if (output->upgradeToElite) if (output->upgradeToElite)
cntbuf += wSprintStringLastGender(BUF, STR_ELITE); sprintf(BUF,"elite ");
if (output->isSpecificItem) { if (output->isSpecificItem) {
@@ -114,163 +77,131 @@ void printOutput(CubeOutput* output, WCHAR* buf, BYTE* nbOutputs)
{ {
UniqueItemsBIN* uniqueItems = SgptDataTables->uniqueItems + output->specificID-1; UniqueItemsBIN* uniqueItems = SgptDataTables->uniqueItems + output->specificID-1;
LPWSTR string = D2GetStringFromIndex(uniqueItems->uniqueNameId); LPWSTR string = D2GetStringFromIndex(uniqueItems->uniqueNameId);
cntbuf += swprintf(BUF,string); wcstombs(BUF, string, wcslen(string)+1);
} else if (output->quality == ITEMQUALITY_SET) { } else if (output->quality == ITEMQUALITY_SET) {
SetItemsBIN* setItems = SgptDataTables->setItems + output->specificID-1; SetItemsBIN* setItems = SgptDataTables->setItems + output->specificID-1;
LPWSTR string = D2GetStringFromIndex(setItems->setNameId); LPWSTR string = D2GetStringFromIndex(setItems->setNameId);
cntbuf += swprintf(BUF,string); wcstombs(BUF, string, wcslen(string)+1);
} else { } else {
swprintf(BUF,STRING_ERROR);return; sprintf(BUF,STRING_ERROR);return;
} }
} else { } else {
switch (output->quality) switch (output->quality)
{ {
case 1:cntbuf += wSprintStringLastGender(BUF, STR_CRACKED);break; case 1:sprintf(BUF,"Cracked ");break;
case 2:cntbuf += wSprintStringLastGender(BUF, STR_NORMAL);break; case 2:sprintf(BUF,"Normal ");break;
case 3:cntbuf += wSprintStringLastGender(BUF, STR_SUPERIOR);break; case 3:sprintf(BUF,"Superior ");break;
case 4:cntbuf += wSprintStringLastGender(BUF, STR_MAGIC);break; case 4:sprintf(BUF,"Magic ");break;
case 5:cntbuf += wSprintStringLastGender(BUF, STR_SET);break; case 5:sprintf(BUF,"Set ");break;
case 6:cntbuf += wSprintStringLastGender(BUF, STR_RARE);break; case 6:sprintf(BUF,"Rare ");break;
case 7:cntbuf += wSprintStringLastGender(BUF, STR_UNIQUE);break; case 7:sprintf(BUF,"Unique ");break;
case 8:cntbuf += wSprintStringLastGender(BUF, STR_CRAFTED);break; case 8:sprintf(BUF,"Crafted ");break;
case 9:cntbuf += wSprintStringLastGender(BUF, STR_TEMPERED);break; case 9:sprintf(BUF,"Tempered ");break;
} /* }
ItemsBIN* items;LPWSTR string; ItemsBIN* items;LPWSTR string;
switch (output->outputType) switch (output->outputType)
{ {
case 0xFC: case 0xFC:
items = D2GetItemsBIN(output->ID); items = D2GetItemsBIN(output->ID);
string = D2GetStringFromIndex(items->NameStr); string = D2GetStringFromIndex(items->NameStr);
cntbuf += swprintf(BUF,string); wcstombs(BUF, string, wcslen(string)+1);
break; break;
case 0xFD: case 0xFD:
getTypeUString(output->ID,BUF); getTypeAString(output->ID,BUF,50);
// WCHAR string[50];
// getTypeString(input->ID,string,50);
// wcstombs(BUF, string, wcslen(string)+1);
break; break;
case 0xFE: cntbuf += swprintf(BUF,getTranslatedString(STR_ITEM));break; case 0xFE: sprintf(BUF,"Item");break;
case 0xFF: cntbuf += swprintf(BUF,getTranslatedString(STR_ITEM_SAME_TYPE));break; case 0xFF: sprintf(BUF,"Item of the same type");break;
default: cntbuf += swprintf(BUF,STRING_ERROR);return; default: sprintf(BUF,STRING_ERROR);return;
} */
cntbuf += swprintf(BUF,setMonoString(itemstr));
}
if ((output->haveSockets==1)||InNoSocket)
{
if(output->quantityOrNbSockets>1)
{
swprintf(BUF,getTranslatedString(STR_WITH_N_SOCKETS), output->quantityOrNbSockets);
} else
{
swprintf(BUF,getTranslatedString(STR_WITH_SOCKET));
} }
} }
if ((output->quantityOrNbSockets>1) && (output->haveSockets==1))
sprintf(BUF," with %u sockets", output->quantityOrNbSockets);
} }
void printInput(CubeInput* input, WCHAR* buf, BYTE* nbInputs)//maxsize) void printInput(CubeInput* input, char* buf, BYTE* nbInputs)//maxsize)
{ {
if (!input->byItemID && !input->byItemTypeID) if (!input->byItemID && !input->byItemTypeID)
return; return;
int cntbuf = wcslen(buf);
if (*nbInputs) if (*nbInputs)
cntbuf += swprintf(BUF,L" + "); sprintf(BUF," + ");
BYTE nb = input->quantity > 0 ? input->quantity : 1; BYTE nb = input->quantity > 0 ? input->quantity : 1;
*nbInputs += nb; *nbInputs += nb;
if (nb>1) if (nb>1)
cntbuf += swprintf(BUF,L"%u ", nb); sprintf(BUF,"%u ", nb);
WCHAR itembuf[lenbufi];
LPWSTR itemstr = &itembuf[0];
//-------------------------------------------------------------------------------
if (!(input->isSpecificItem))
{
if (input->byItemTypeID) {
getTypeUString(input->ID, itemstr, lenbufi);
} else if (input->ID == 0xFFFF) {
wcsncpy(itemstr, getTranslatedString(STR_ITEM), lenbufi);
} else {
ItemsBIN* items = D2GetItemsBIN(input->ID);
wcsncpy(itemstr, D2GetStringFromIndex(items->NameStr), lenbufi);
}
itemstr = cutStringGender(itemstr);
}
//-------------------------------------------------------------------------------
if (input->isEthereal) if (input->isEthereal)
cntbuf += wSprintStringLastGender(BUF, STR_ETHERAL); sprintf(BUF,"ethereal ");
if (input->isNotEthereal) if (input->isNotEthereal)
cntbuf += wSprintStringLastGender(BUF, STR_NOT_ETHERAL); sprintf(BUF,"not ethereal ");
if (input->isNotRuneword) if (input->isNotRuneword)
cntbuf += wSprintStringLastGender(BUF, STR_NOT_RUNEWORD); sprintf(BUF,"not runeword ");
if (input->isBasic) if (input->isBasic)
cntbuf += wSprintStringLastGender(BUF, STR_BASIC); sprintf(BUF,"basic ");
if (input->isExceptional) if (input->isExceptional)
cntbuf += wSprintStringLastGender(BUF, STR_EXCEPTIONAL); sprintf(BUF,"exceptional ");
if (input->isElite) if (input->isElite)
cntbuf += wSprintStringLastGender(BUF, STR_ELITE); sprintf(BUF,"elite ");
if (input->isSpecificItem) { if (input->isSpecificItem) {
if (input->quality == ITEMQUALITY_UNIQUE) if (input->quality == ITEMQUALITY_UNIQUE)
{ {
UniqueItemsBIN* uniqueItems = SgptDataTables->uniqueItems + input->specificID-1; UniqueItemsBIN* uniqueItems = SgptDataTables->uniqueItems + input->specificID-1;
LPWSTR string = D2GetStringFromIndex(uniqueItems->uniqueNameId); LPWSTR string = D2GetStringFromIndex(uniqueItems->uniqueNameId);
cntbuf += swprintf(BUF,string); wcstombs(BUF, string, wcslen(string)+1);
} else if (input->quality == ITEMQUALITY_SET) { } else if (input->quality == ITEMQUALITY_SET) {
SetItemsBIN* setItems = SgptDataTables->setItems + input->specificID-1; SetItemsBIN* setItems = SgptDataTables->setItems + input->specificID-1;
LPWSTR string = D2GetStringFromIndex(setItems->setNameId); LPWSTR string = D2GetStringFromIndex(setItems->setNameId);
cntbuf += swprintf(BUF,string); wcstombs(BUF, string, wcslen(string)+1);
} else { } else {
swprintf(BUF,STRING_ERROR);return; sprintf(BUF,STRING_ERROR);return;
} }
} else { } else {
switch (input->quality) switch (input->quality)
{ {
case 1:sprintf(BUF,"Cracked ");break;
case 1:cntbuf += wSprintStringLastGender(BUF, STR_CRACKED);break; case 2:sprintf(BUF,"Normal ");break;
case 2:cntbuf += wSprintStringLastGender(BUF, STR_NORMAL);break; case 3:sprintf(BUF,"Superior ");break;
case 3:cntbuf += wSprintStringLastGender(BUF, STR_SUPERIOR);break; case 4:sprintf(BUF,"Magic ");break;
case 4:cntbuf += wSprintStringLastGender(BUF, STR_MAGIC);break; case 5:sprintf(BUF,"Set ");break;
case 5:cntbuf += wSprintStringLastGender(BUF, STR_SET);break; case 6:sprintf(BUF,"Rare ");break;
case 6:cntbuf += wSprintStringLastGender(BUF, STR_RARE);break; case 7:sprintf(BUF,"Unique ");break;
case 7:cntbuf += wSprintStringLastGender(BUF, STR_UNIQUE);break; case 8:sprintf(BUF,"Crafted ");break;
case 8:cntbuf += wSprintStringLastGender(BUF, STR_CRAFTED);break; case 9:sprintf(BUF,"Tempered ");break;
case 9:cntbuf += wSprintStringLastGender(BUF, STR_TEMPERED);break; }
}/*
if (input->byItemTypeID) { if (input->byItemTypeID) {
getTypeUString(input->ID,BUF); getTypeAString(input->ID,BUF,50);
} else if (input->ID == 0xFFFF) { } else if (input->ID == 0xFFFF) {
cntbuf += swprintf(BUF,getTranslatedString(STR_ITEM)); sprintf(BUF,"Item");
} else { } else {
ItemsBIN* items = D2GetItemsBIN(input->ID); ItemsBIN* items = D2GetItemsBIN(input->ID);
LPWSTR string = D2GetStringFromIndex(items->NameStr); LPWSTR string = D2GetStringFromIndex(items->NameStr);
cntbuf += swprintf(BUF,string); wcstombs(BUF, string, wcslen(string)+1);
}*/ }
cntbuf += swprintf(BUF,itemstr);
} }
if (input->includeUpgradedVersions && !input->isElite) if (input->includeUpgradedVersions && !input->isElite)
cntbuf += swprintf(BUF,getTranslatedString(STR_OR_UPGRADED)); sprintf(BUF,"(or upgraded) ");
if (input->haveNoSocket) if (input->haveNoSocket)
{ sprintf(BUF," with no socket");
cntbuf += swprintf(BUF,getTranslatedString(STR_WITHOUT_SOCKET));
InNoSocket = true;//~~~~~
}
if (input->haveSockets) if (input->haveSockets)
swprintf(BUF,getTranslatedString(STR_WITH_SOCKET)); sprintf(BUF," with sockets");
} }
DWORD print(CubeMainBIN* curForm, WCHAR* buf, DWORD)//maxsize) DWORD print(CubeMainBIN* curForm, char* buf, DWORD)//maxsize)
{ {
if (!buf || !curForm || !curForm->enabled) return 0; if (!buf || !curForm || !curForm->enabled) return 0;
InNoSocket = false; //~~~~~
BYTE realNbInputs=0; BYTE realNbInputs=0;
printInput(&curForm->input1, buf, &realNbInputs); printInput(&curForm->input1, buf, &realNbInputs);
printInput(&curForm->input2, buf, &realNbInputs); printInput(&curForm->input2, buf, &realNbInputs);
@@ -280,15 +211,14 @@ DWORD print(CubeMainBIN* curForm, WCHAR* buf, DWORD)//maxsize)
printInput(&curForm->input6, buf, &realNbInputs); printInput(&curForm->input6, buf, &realNbInputs);
printInput(&curForm->input7, buf, &realNbInputs); printInput(&curForm->input7, buf, &realNbInputs);
int cntbuf = wcslen(buf);
if (realNbInputs != curForm->numinputs) if (realNbInputs != curForm->numinputs)
{ {
cntbuf += swprintf(BUF,L" *** ERROR : numInputs(%d) != realNbInputs(%d) ***", curForm->numinputs, realNbInputs); sprintf(BUF," *** ERROR : numInputs(%d) != realNbInputs(%d) ***", curForm->numinputs, realNbInputs);
return 1; return 1;
} }
cntbuf += swprintf(BUF,L" => "); sprintf(BUF," => ");
BYTE realNbOutputs=0; BYTE realNbOutputs=0;
printOutput(&curForm->output1, buf, &realNbOutputs); printOutput(&curForm->output1, buf, &realNbOutputs);
printOutput(&curForm->output2, buf, &realNbOutputs); printOutput(&curForm->output2, buf, &realNbOutputs);
@@ -296,24 +226,24 @@ DWORD print(CubeMainBIN* curForm, WCHAR* buf, DWORD)//maxsize)
// if (curForm->ladder) // if (curForm->ladder)
// cntbuf += swprintf(BUF," [ladder only]"); // sprintf(BUF," [ladder only]");
if (curForm->minDiff == 1) if (curForm->minDiff == 1)
cntbuf += swprintf(BUF,getTranslatedString(STR_ONLY_N_H)); sprintf(BUF," [Nightmare and Hell only]");
else if (curForm->minDiff == 2) else if (curForm->minDiff == 2)
cntbuf += swprintf(BUF,getTranslatedString(STR_ONLY_HELL)); sprintf(BUF," [Hell only]");
if (curForm->playerClass != 0xFF) if (curForm->playerClass != 0xFF)
{ {
CharStatsBIN* charStats = D2GetCharStatsBIN(curForm->playerClass); CharStatsBIN* charStats = D2GetCharStatsBIN(curForm->playerClass);
cntbuf += swprintf(BUF, getTranslatedString(STR_ONLY_CLASS), charStats->name); sprintf(BUF, " [%s only]", charStats->name);
} }
if ((curForm->op>0) && (curForm->op!=28)) if ((curForm->op>0) && (curForm->op!=28))
cntbuf += swprintf(BUF, L" [op%d(%d,%d)]", curForm->op, curForm->param, curForm->value); sprintf(BUF, " [op%d(%d,%d)]", curForm->op, curForm->param, curForm->value);
// if (curForm->version == 100) // if (curForm->version == 100)
// cntbuf += swprintf(BUF, " [expansion only]"); // sprintf(BUF, " [expansion only]");
return 1; return 1;
} }
@@ -338,24 +268,12 @@ void listAllCubeFormula()
int nbLines = D2GetNbCubeMainBIN();//SgptDataTables->nbCubemain int nbLines = D2GetNbCubeMainBIN();//SgptDataTables->nbCubemain
log_msg("nbLines : %d\n",nbLines); log_msg("nbLines : %d\n",nbLines);
WCHAR buf[lenbuf]; char buf[300];
char bufa[lenbuf];
if (D2GetLang() != LNG_DEU)
{
bufa[0] = (char)0xEF;
bufa[1] = (char)0xBB;
bufa[2] = (char)0xBF;
bufa[3] = (char)0x00;
fprintf(file,"%s",bufa);
}
for (int i=0; i<nbLines; i++) for (int i=0; i<nbLines; i++)
{ {
buf[0]=NULL; buf[0]=NULL;
DWORD res = print(D2GetCubeMainBIN(i), buf, lenbuf);//SgptDataTables->cubemain + i; DWORD res = print(D2GetCubeMainBIN(i), buf, 300);//SgptDataTables->cubemain + i;
UCS2toUTF8(&bufa[0], lenbuf, &buf[0], lenbuf); if (res) fprintf(file,"%4u: %s\n",i,buf);
if (res) fprintf(file,"%4u: %s\n",i,bufa);
if (res) fflush(file); if (res) fflush(file);
} }

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Interface functions Interface functions
@@ -70,7 +69,6 @@ void STDCALL printCustomPage()
DWORD STDCALL mouseCustomPageLeftDown(sWinMessage* msg) DWORD STDCALL mouseCustomPageLeftDown(sWinMessage* msg)
{ {
if(onRealm) return -1; if(onRealm) return -1;
if ( (selectedPage > 0) && (selectedPage<=lastPage) ) if ( (selectedPage > 0) && (selectedPage<=lastPage) )
return mouseNewStatsPageTwoLeftDown(msg); return mouseNewStatsPageTwoLeftDown(msg);
@@ -312,7 +310,7 @@ void Install_NewInterfaces()
if ( version_D2Client >= V111 ) if ( version_D2Client >= V111 )
{ {
//Reset selectedPage variable on opening stats page //Reset selectedPage variable on opening stats page
mem_seek R7(D2Client, 0000, 0000, 0000, 4B79E, 8F73E, 55E0E, 65F5E, C41FE); mem_seek R7(D2Client, 0000, 0000, 0000, 4B79E, 8F73E, 55E0E, 65F5E);
memt_byte( 0x83, 0xE8 ); // CALL caller_resetSelectedPage memt_byte( 0x83, 0xE8 ); // CALL caller_resetSelectedPage
MEMT_REF4( 0x1F7426F8, caller_resetSelectedPageByToolBar); MEMT_REF4( 0x1F7426F8, caller_resetSelectedPageByToolBar);
//6FAFB79E > 83F8 26 CMP EAX,26 //6FAFB79E > 83F8 26 CMP EAX,26
@@ -323,10 +321,8 @@ void Install_NewInterfaces()
//6FB05E11 . 74 1F JE SHORT D2Client.6FB05E32 //6FB05E11 . 74 1F JE SHORT D2Client.6FB05E32
//6FB15F5E > 83F8 26 CMP EAX,26 //6FB15F5E > 83F8 26 CMP EAX,26
//6FB15F61 . 74 1F JE SHORT D2Client.6FB15F82 //6FB15F61 . 74 1F JE SHORT D2Client.6FB15F82
//6FB741FE > 83F8 26 CMP EAX,26
//6FB74201 . 74 1F JE SHORT D2Client.6FB05E32
mem_seek R7(D2Client, 0000, 0000, 0000, 1E55A, 6A8FA, A31DA, 3C5EA, 3E39A); mem_seek R7(D2Client, 0000, 0000, 0000, 1E55A, 6A8FA, A31DA, 3C5EA);
memt_byte( 0x55, 0xE8 ); // CALL caller_resetSelectedPage memt_byte( 0x55, 0xE8 ); // CALL caller_resetSelectedPage
MEMT_REF4( 0xD53BED33, caller_resetSelectedPageByKey); MEMT_REF4( 0xD53BED33, caller_resetSelectedPageByKey);
//6FACE55A . 55 PUSH EBP //6FACE55A . 55 PUSH EBP
@@ -341,9 +337,7 @@ void Install_NewInterfaces()
//6FAEC5EA . 55 PUSH EBP //6FAEC5EA . 55 PUSH EBP
//6FAEC5EB . 33ED XOR EBP,EBP //6FAEC5EB . 33ED XOR EBP,EBP
//6FAEC5ED . 3BD5 CMP EDX,EBP //6FAEC5ED . 3BD5 CMP EDX,EBP
//6FAEE39A . 55 PUSH EBP
//6FAEE39B . 33ED XOR EBP,EBP
//6FAEE39D . 3BD5 CMP EDX,EBP
//For Toggle fct : (not used for open the stat page) //For Toggle fct : (not used for open the stat page)
// mem_seek R7(D2Client, 88B58, 87ED8, 83478, A1FBE, 6571E, 8EF8E, 0000);//((DWORD)D2TogglePage+0x218); // mem_seek R7(D2Client, 88B58, 87ED8, 83478, A1FBE, 6571E, 8EF8E, 0000);//((DWORD)D2TogglePage+0x218);
@@ -361,7 +355,7 @@ void Install_NewInterfaces()
//6FB3EF92 |. 3928 CMP DWORD PTR DS:[EAX],EBP //6FB3EF92 |. 3928 CMP DWORD PTR DS:[EAX],EBP
} else { } else {
//Reset selectedPage variable on opening stats page //Reset selectedPage variable on opening stats page
mem_seek R7(D2Client, 88B58, 87ED8, 83478, A1FBE, 6571E, 8EF8E, 0000, 0000);//((DWORD)D2TogglePage+0x218); mem_seek R7(D2Client, 88B58, 87ED8, 83478, A1FBE, 6571E, 8EF8E, 0000);//((DWORD)D2TogglePage+0x218);
memt_byte( 0x85, 0xE8 ); // CALL caller_resetSelectedPage memt_byte( 0x85, 0xE8 ); // CALL caller_resetSelectedPage
MEMT_REF4( 0xC2940FC0, caller_resetSelectedPage); MEMT_REF4( 0xC2940FC0, caller_resetSelectedPage);
//6FB23478 |. 85C0 TEST EAX,EAX //6FB23478 |. 85C0 TEST EAX,EAX
@@ -371,17 +365,16 @@ void Install_NewInterfaces()
} }
// Print custom page // Print custom page
mem_seek R7(D2Client, 87697, 86A17, 81FAB, A3759, 66B59, 902B9, C3B49, 1D549); mem_seek R7(D2Client, 87697, 86A17, 81FAB, A3759, 66B59, 902B9, C3B49);
MEMC_REF4( D2PrintStatsPage, printCustomPage); 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
// Don't print Border // Don't print Border
mem_seek R7(D2Client, 58EF6, 58EF6, 5F4C6, 2D366, B5A46, 82166, 271C6, 6D2B6); mem_seek R7(D2Client, 58EF6, 58EF6, 5F4C6, 2D366, B5A46, 82166, 271C6);
memt_byte( 0xB9, 0xE8 ); // CALL caller_DontPrintBorder memt_byte( 0xB9, 0xE8 ); // CALL caller_DontPrintBorder
MEMT_REF4( 0x00000012, version_D2Client >= V111 ? caller_DontPrintBorder_111 : caller_DontPrintBorder); MEMT_REF4( 0x00000012, version_D2Client >= V111 ? caller_DontPrintBorder_111 : caller_DontPrintBorder);
//6FAFF4C6 > B9 12000000 MOV ECX,12 //6FAFF4C6 > B9 12000000 MOV ECX,12
@@ -389,10 +382,9 @@ void Install_NewInterfaces()
//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
// Manage mouse down (Play sound) // Manage mouse down (Play sound)
mem_seek R7(D2Client, 2A9DC, 2A9CC, 312A5, 82736, 891B6, 6B116, BCD36, BF4D6); mem_seek R7(D2Client, 2A9DC, 2A9CC, 312A5, 82736, 891B6, 6B116, BCD36);
memt_byte( 0x8D, 0xE8 ); // CALL memt_byte( 0x8D, 0xE8 ); // CALL
MEMT_REF4( 0x00008088, version_D2Client >= V111 ? caller_mouseCustomPageLeftDown_111 : version_D2Client == V110 ? caller_mouseCustomPageLeftDown : caller_mouseCustomPageLeftDown_9); MEMT_REF4( 0x00008088, version_D2Client >= V111 ? caller_mouseCustomPageLeftDown_111 : version_D2Client == V110 ? caller_mouseCustomPageLeftDown : caller_mouseCustomPageLeftDown_9);
memt_byte( 0x00, 0x90 ); // NOP memt_byte( 0x00, 0x90 ); // NOP
@@ -401,10 +393,9 @@ void Install_NewInterfaces()
//6FB391B6 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80] //6FB391B6 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
//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]
// Manage mouse up // Manage mouse up
mem_seek R7(D2Client, 2ABBB, 2ABAB, 3148D, 836D9, 8A159, 6C0B9, BDCB9, C0459); mem_seek R7(D2Client, 2ABBB, 2ABAB, 3148D, 836D9, 8A159, 6C0B9, BDCB9);
memt_byte( 0xA1, 0xE8 ); // CALL caller_mouseCustomPageLeftUp memt_byte( 0xA1, 0xE8 ); // CALL caller_mouseCustomPageLeftUp
MEMT_REF4( ptWindowStartX, version_D2Client >= V111 ? caller_mouseCustomPageLeftUp_111 : version_D2Client == V110 ? caller_mouseCustomPageLeftUp : caller_mouseCustomPageLeftUp_9); MEMT_REF4( ptWindowStartX, 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]
@@ -412,7 +403,6 @@ void Install_NewInterfaces()
//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]
// 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

View File

@@ -60,6 +60,18 @@ const char* S_active_CheckMemory = "ActiveCheckMemory";
const char* S_active_Commands = "ActiveCommands"; const char* S_active_Commands = "ActiveCommands";
const char* S_active_othersFeatures = "ActiveAllOthersFeatures"; const char* S_active_othersFeatures = "ActiveAllOthersFeatures";
const char* S_WINDOWED = "WINDOWED";
const char* S_ActiveWindowed = "ActiveWindowed";
const char* S_RemoveBorder = "RemoveBorder";
const char* S_WindowOnTop = "WindowOnTop";
const char* S_Maximized = "Maximized";
const char* S_SetWindowPos = "SetWindowPos";
const char* S_X = "X";
const char* S_Y = "Y";
const char* S_Width = "Width";
const char* S_Height = "Height";
const char* S_LockMouseOnStartup = "LockMouseOnStartup";
const char* S_LANGUAGE = "LANGUAGE"; const char* S_LANGUAGE = "LANGUAGE";
const char* S_active_ChangeLanguage = "ActiveChangeLanguage"; const char* S_active_ChangeLanguage = "ActiveChangeLanguage";
const char* S_selectedLanguage = "SelectedLanguage"; const char* S_selectedLanguage = "SelectedLanguage";
@@ -210,7 +222,7 @@ void init_General(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFi
{ {
GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_active_DisableBattleNet, "0"); GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_active_DisableBattleNet, "0");
active_DisableBattleNet = atoi(buffer) != 0; active_DisableBattleNet = atoi(buffer) != 0;
log_msg("active_DisableBattleNet\t\t\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;
@@ -242,6 +254,51 @@ void init_General(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFi
log_msg("\n"); log_msg("\n");
} }
void init_Windowed(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
{
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_ActiveWindowed, "0");
active_Windowed = atoi(buffer) != 0;
log_msg("active_Windowed\t\t\t\t= %d\n", active_Windowed);
if (active_Windowed)
{
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_RemoveBorder, "0");
active_RemoveBorder = atoi(buffer) != 0;
log_msg("active_RemoveBorder\t\t\t= %d\n", active_RemoveBorder);
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_WindowOnTop, "0");
active_WindowOnTop = atoi(buffer) != 0;
log_msg("active_WindowOnTop\t\t\t= %d\n", active_WindowOnTop);
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_Maximized, "0");
active_Maximized = atoi(buffer) != 0;
log_msg("active_Maximized\t\t\t= %d\n", active_Maximized);
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_SetWindowPos, "0");
active_SetWindowPos = atoi(buffer) != 0;
log_msg("active_MoveAndResizeWindow\t= %d\n", active_SetWindowPos);
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_X, "0");
windowedX = atoi(buffer);
log_msg("windowedX\t\t\t\t\t= %d\n", windowedX);
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_Y, "0");
windowedY = atoi(buffer);
log_msg("windowedY\t\t\t\t\t= %d\n", windowedY);
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_Width, "0");
windowedWidth = atoi(buffer);
log_msg("windowedWidth\t\t\t\t= %d\n", windowedWidth);
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_Height, "0");
windowedHeight = atoi(buffer);
log_msg("windowedHeight\t\t\t\t= %d\n", windowedHeight);
GET_PRIVATE_PROFILE_STRING(S_WINDOWED, S_LockMouseOnStartup, "0");
active_LockMouseOnStartup = atoi(buffer) != 0;
log_msg("active_LockMouseOnStartup\t= %d\n\n", active_LockMouseOnStartup);
}
}
void init_ActiveLanguage(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize) void init_ActiveLanguage(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFile, char* buffer, DWORD maxSize)
{ {
GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_active_ChangeLanguage, "0"); GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_active_ChangeLanguage, "0");
@@ -251,7 +308,7 @@ void init_ActiveLanguage(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDe
if (active_ChangeLanguage) if (active_ChangeLanguage)
{ {
GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_selectedLanguage, "ENG"); GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_selectedLanguage, "ENG");
strupr(buffer); _strupr(buffer);
switch (*(DWORD*)buffer) switch (*(DWORD*)buffer)
{ {
case BIN('E','N','G',0) : selectedLanguage=LNG_ENG;break; case BIN('E','N','G',0) : selectedLanguage=LNG_ENG;break;
@@ -281,7 +338,7 @@ void init_ActiveLanguage(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDe
if (active_LanguageManagement) if (active_LanguageManagement)
{ {
GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_defaultLanguage, "ENG"); GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_defaultLanguage, "ENG");
strupr(buffer); _strupr(buffer);
switch (*(DWORD*)buffer) switch (*(DWORD*)buffer)
{ {
case BIN('E','N','G',0) : defaultLanguage=LNG_ENG;break; case BIN('E','N','G',0) : defaultLanguage=LNG_ENG;break;
@@ -302,7 +359,7 @@ void init_ActiveLanguage(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDe
GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_availableLanguages, "ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS"); GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_availableLanguages, "ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS");
availableLanguages.all = 0; availableLanguages.all = 0;
strupr(buffer); _strupr(buffer);
char* curString = strtok(buffer,"|"); char* curString = strtok(buffer,"|");
while (curString) while (curString)
{ {
@@ -783,6 +840,7 @@ void loadParameters()
if (active_plugin) if (active_plugin)
{ {
init_General(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE); init_General(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
init_Windowed(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
init_ActiveLanguage(iniFile, iniFixedFile, iniDefaultFile, buffer,BUFSIZE); init_ActiveLanguage(iniFile, iniFixedFile, iniDefaultFile, buffer,BUFSIZE);
init_SavePath(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE); init_SavePath(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
init_VersionText(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE); init_VersionText(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Adding custom data. Adding custom data.
Save and load infinity & shared Stash Save and load infinity & shared Stash
@@ -271,19 +270,18 @@ void Install_PlayerCustomData()
log_msg("Patch D2Game & D2Client & D2Common for Player's custom data. (PlayerCustomData)\n"); log_msg("Patch D2Game & D2Client & D2Common for Player's custom data. (PlayerCustomData)\n");
// Initialize custom data. // Initialize custom data.
mem_seek( 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 == V113 ? offset_D2Common + 0x309BE : version_D2Client == V112 ? offset_D2Common + 0x585EE : version_D2Client == V111b ? offset_D2Common + 0x5BFCE : version_D2Common == V111 ? offset_D2Common + 0x4ED5E :(DWORD)D2InitPlayerData + 0x62 );
MEMJ_REF4( D2AllocMem, init_PlayerCustomData); 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>
if ( version_D2Game >= V111 ) if ( version_D2Game >= V111 )
{ {
// update item // update item
mem_seek R7(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 9BB91, 75C81); mem_seek R7(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 9BB91);
memt_byte( 0x8B ,0xE8); // CALL memt_byte( 0x8B ,0xE8); // CALL
MEMT_REF4( 0x52182454, caller_updateItem_111); 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]
@@ -294,10 +292,8 @@ void Install_PlayerCustomData()
//6FC7F2A5 |. 52 |PUSH EDX ; /Arg1 //6FC7F2A5 |. 52 |PUSH EDX ; /Arg1
//6FCBBB91 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18] //6FCBBB91 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
//6FCBBB95 |. 52 |PUSH EDX //6FCBBB95 |. 52 |PUSH EDX
//6FC95C81 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
//6FC95C85 |. 52 |PUSH EDX
mem_seek R7(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 9BBF1, 75CE1); mem_seek R7(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 9BBF1);
memt_byte( 0x8B ,0xE8); // CALL memt_byte( 0x8B ,0xE8); // CALL
MEMT_REF4( 0x52182454, caller_updateItemB_111); 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]
@@ -308,21 +304,19 @@ void Install_PlayerCustomData()
//6FC7F305 |. 52 ||PUSH EDX ; /Arg1 //6FC7F305 |. 52 ||PUSH EDX ; /Arg1
//6FCBBBF1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18] //6FCBBBF1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
//6FCBBBF5 |. 52 ||PUSH EDX //6FCBBBF5 |. 52 ||PUSH EDX
//6FC95CE1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
//6FC95CE5 |. 52 ||PUSH EDX
} else { } else {
// update item // update item
mem_seek R7(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 0000, 0000); mem_seek R7(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 0000);
MEMC_REF4( D2GameGetObject, version_D2Game == V110?caller_updateItem: caller_updateItem_9); MEMC_REF4( D2GameGetObject, version_D2Game == V110?caller_updateItem: caller_updateItem_9);
//6FC4100C |. E8 EFAA0700 |CALL D2Game.6FCBBB00 //6FC4100C |. E8 EFAA0700 |CALL D2Game.6FCBBB00
mem_seek R7(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 0000, 0000); mem_seek R7(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 0000);
MEMC_REF4( D2GameGetObject, version_D2Game == V110?caller_updateItem: caller_updateItem_9); MEMC_REF4( D2GameGetObject, version_D2Game == V110?caller_updateItem: caller_updateItem_9);
//6FC41057 |. E8 A4AA0700 ||CALL D2Game.6FCBBB00 //6FC41057 |. E8 A4AA0700 ||CALL D2Game.6FCBBB00
} }
// Update client on loading // Update client on loading
mem_seek R7(D2Game, 23EB, 2426, 25D4, 53482, C6A32, ED502, 4BF12, E7548);//6FC325D4-6FC30000 mem_seek R7(D2Game, 23EB, 2426, 25D4, 53482, C6A32, ED502, 4BF12);//6FC325D4-6FC30000
memt_byte( 0x5F ,0xE8); // CALL memt_byte( 0x5F ,0xE8); // CALL
MEMT_REF4( 0xC0335D5E , caller_updateClientPlayerOnLoading); MEMT_REF4( 0xC0335D5E , caller_updateClientPlayerOnLoading);
//6FC325D4 |> 5F POP EDI //6FC325D4 |> 5F POP EDI
@@ -345,65 +339,57 @@ void Install_PlayerCustomData()
//6FC6BF13 |. 5E POP ESI //6FC6BF13 |. 5E POP ESI
//6FC6BF14 |. 5D POP EBP //6FC6BF14 |. 5D POP EBP
//6FC6BF15 |. 33C0 XOR EAX,EAX //6FC6BF15 |. 33C0 XOR EAX,EAX
//6FD07548 |> 5F POP EDI
//6FD07549 |. 5E POP ESI
//6FD0754A |. 5D POP EBP
//6FD0754B |. 33C0 XOR EAX,EAX
// Free custom data. // Free custom data.
mem_seek R7(D2Common, 7055C, 7065C, 80483, 4F82D, 5C9CD, 5856D, 3093D, 1705D); mem_seek R7(D2Common, 7055C, 7065C, 80483, 4F82D, 5C9CD, 5856D, 3093D);
MEMJ_REF4( D2FreeMem, free_PlayerCustomData); 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>
// Free item in Stash (Server-side) // Free item in Stash (Server-side)
mem_seek R7(D2Game, 7D12B, 7D62B, 8D5A4, 99112, BFDB2, 94242, E1162, 6F7C2); mem_seek R7(D2Game, 7D12B, 7D62B, 8D5A4, 99112, BFDB2, 94242, E1162);
MEMJ_REF4( D2UnitGetNextItem, version_D2Game >= V111 ? callerServer_getNextItemToFree_111 : version_D2Game == V110 ? callerServer_getNextItemToFree : callerServer_getNextItemToFree_9);//0x0005E204 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>
// Free item in Stash (Client-side) // Free item in Stash (Client-side)
mem_seek R7(D2Client, 8EF8F, 8E30F, 89B32, 26404, 4C264, 1F2D4, A5C94, 621E4);//6FB29B31-6FAA0000 mem_seek R7(D2Client, 8EF8F, 8E30F, 89B32, 26404, 4C264, 1F2D4, A5C94);//6FB29B31-6FAA0000
MEMJ_REF4( D2UnitGetNextItem, version_D2Game >= V111 ? callerClient_getNextItemToFree_111 : version_D2Game == V110 ? callerClient_getNextItemToFree : callerClient_getNextItemToFree_9);//0x00040F34 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>
if ( version_D2Common >= V110 ) if ( version_D2Common >= V110 )
{ {
// Test if it's already removed from inventory // Test if it's already removed from inventory
mem_seek R7(D2Common, 0000, 0000, 4E689, 26E33, 42133, 6AE93, 21B23, 3B393); mem_seek R7(D2Common, 0000, 0000, 4E689, 26E33, 42133, 6AE93, 21B23);
memt_byte( 0x0D , 0x07); memt_byte( 0x0D , 0x07);
//01D2E688 75 0D JNZ SHORT D2Common.01D2E697 //01D2E688 75 0D JNZ SHORT D2Common.01D2E697
//6FD76E32 |. 74 0D JE SHORT D2Common.6FD76E41 //6FD76E32 |. 74 0D JE SHORT D2Common.6FD76E41
//6FD92132 |. 74 0D JE SHORT D2Common.6FD92141 //6FD92132 |. 74 0D JE SHORT D2Common.6FD92141
//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
} else { } else {
mem_seek R7(D2Game, 7D176, 7D676, 0000, 0000, 0000, 0000, 0000, 0000); mem_seek R7(D2Game, 7D176, 7D676, 0000, 0000, 0000, 0000, 0000);
memt_byte( 0x74 , 0x90);//MOV EAX,EDI memt_byte( 0x74 , 0x90);//MOV EAX,EDI
memt_byte( 0x35 , 0x90);//NOP memt_byte( 0x35 , 0x90);//NOP
//6FCAD176 |. 74 35 |JE SHORT D2Game.6FCAD1AD //6FCAD176 |. 74 35 |JE SHORT D2Game.6FCAD1AD
mem_seek R7(D2Client, 8F0CA, 8E44A, 0000, 0000, 0000, 0000, 0000, 0000); mem_seek R7(D2Client, 8F0CA, 8E44A, 0000, 0000, 0000, 0000, 0000);
memt_byte( 0x0F , 0x90);//MOV EAX,EDI memt_byte( 0x0F , 0x90);//MOV EAX,EDI
memt_byte( 0x84 , 0x90);//NOP memt_byte( 0x84 , 0x90);//NOP
memt_dword( 0x000000BF , 0x90909090);//NOP memt_dword( 0x000000BF , 0x90909090);//NOP
//6FB2F0CA |. 0F84 BF000000 |JE D2Client.6FB2F18F //6FB2F0CA |. 0F84 BF000000 |JE D2Client.6FB2F18F
mem_seek R7(D2Client, 8F13C, 8E4BC, 0000, 0000, 0000, 0000, 0000, 0000); mem_seek R7(D2Client, 8F13C, 8E4BC, 0000, 0000, 0000, 0000, 0000);
memt_byte( 0x74 , 0x90);//MOV EAX,EDI memt_byte( 0x74 , 0x90);//MOV EAX,EDI
memt_byte( 0x6F , 0x90);//NOP memt_byte( 0x6F , 0x90);//NOP
//6FB2F13C |. 74 6F |JE SHORT D2Client.6FB2F1AD //6FB2F13C |. 74 6F |JE SHORT D2Client.6FB2F1AD

Binary file not shown.

View File

@@ -1,22 +1,6 @@
/*================================================================= // PlugY.cpp : Defines the exported functions for the DLL application.
File created by Yohann NICOLAS. //
Main file of this DLL #include "stdafx.h"
=================================================================*/
#include <windows.h>
BOOL WINAPI DllMain(HANDLE /*hModule*/, DWORD dwReason, LPVOID /*lpReserved*/)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return true;
}
/*================================= END OF FILE =================================*/

Binary file not shown.

View File

@@ -1,17 +1,26 @@
Microsoft Visual Studio Solution File, Format Version 9.00 
# Visual Studio 2005 Microsoft Visual Studio Solution File, Format Version 12.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugY", "PlugY.vcproj", "{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}" # Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugY", "PlugY.vcxproj", "{5059AE94-61B0-4D07-A970-B670BBCB142C}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64
Release|Win32 = Release|Win32 Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}.Debug|Win32.ActiveCfg = Debug|Win32 {5059AE94-61B0-4D07-A970-B670BBCB142C}.Debug|x64.ActiveCfg = Debug|x64
{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}.Debug|Win32.Build.0 = Debug|Win32 {5059AE94-61B0-4D07-A970-B670BBCB142C}.Debug|x64.Build.0 = Debug|x64
{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}.Release|Win32.ActiveCfg = Release|Win32 {5059AE94-61B0-4D07-A970-B670BBCB142C}.Debug|x86.ActiveCfg = Debug|Win32
{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}.Release|Win32.Build.0 = Release|Win32 {5059AE94-61B0-4D07-A970-B670BBCB142C}.Debug|x86.Build.0 = Debug|Win32
{5059AE94-61B0-4D07-A970-B670BBCB142C}.Release|x64.ActiveCfg = Release|x64
{5059AE94-61B0-4D07-A970-B670BBCB142C}.Release|x64.Build.0 = Release|x64
{5059AE94-61B0-4D07-A970-B670BBCB142C}.Release|x86.ActiveCfg = Release|Win32
{5059AE94-61B0-4D07-A970-B670BBCB142C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

Binary file not shown.

View File

@@ -152,7 +152,6 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="opends60.lib" AdditionalDependencies="opends60.lib"
OutputFile="$(OutDir)\$(ProjectName).dll"
LinkIncremental="1" LinkIncremental="1"
GenerateDebugInformation="false" GenerateDebugInformation="false"
SubSystem="2" SubSystem="2"
@@ -183,7 +182,7 @@
/> />
<Tool <Tool
Name="VCPostBuildEventTool" Name="VCPostBuildEventTool"
CommandLine="copy $(TargetPath) &quot;..\PlugYInstaller\PlugY.dll&quot;&#x0D;&#x0A;copy $(TargetPath) &quot;D:\Games\Diablo II\PlugY.dll&quot;&#x0D;&#x0A;&#x0D;&#x0A;" CommandLine="copy $(TargetPath) &quot;..\PlugYInstaller\PlugY.dll&quot;&#x0D;&#x0A;copy $(TargetPath) &quot;D:\Jeux\Blizzard\Diablo II\PlugY.dll&quot;&#x0D;&#x0A;copy $(TargetPath) &quot;D:\www\PlugY.dll&quot;&#x0D;&#x0A;"
/> />
</Configuration> </Configuration>
</Configurations> </Configurations>
@@ -362,14 +361,6 @@
RelativePath="WorldEvent.cpp" RelativePath="WorldEvent.cpp"
> >
</File> </File>
<Filter
Name="Coomons"
>
<File
RelativePath="..\Commons\VersionInfo.cpp"
>
</File>
</Filter>
</Filter> </Filter>
<Filter <Filter
Name="Header Files" Name="Header Files"
@@ -447,10 +438,6 @@
RelativePath="loadPlayerData.h" RelativePath="loadPlayerData.h"
> >
</File> </File>
<File
RelativePath=".\LocaleStrings.h"
>
</File>
<File <File
RelativePath="mainScreen.h" RelativePath="mainScreen.h"
> >
@@ -574,10 +561,6 @@
RelativePath="..\Commons\updatingConst.h" RelativePath="..\Commons\updatingConst.h"
> >
</File> </File>
<File
RelativePath="..\Commons\VersionInfo.h"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter

267
PlugY/PlugY.vcxproj Normal file
View File

@@ -0,0 +1,267 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{5059AE94-61B0-4D07-A970-B670BBCB142C}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>PlugY</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PLUGY_EXPORTS;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;PLUGY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PLUGY_EXPORTS;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PostBuildEvent>
<Command>copy "$(TargetPath)" "..\PlugYInstaller\PlugY.dll"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;PLUGY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\Commons\d2BinFile.h" />
<ClInclude Include="..\Commons\d2constants.h" />
<ClInclude Include="..\Commons\D2Funcs.h" />
<ClInclude Include="..\Commons\d2StringTblStruct.h" />
<ClInclude Include="..\Commons\d2Struct.h" />
<ClInclude Include="..\Commons\D2UnitStruct.h" />
<ClInclude Include="..\Commons\updatingConst.h" />
<ClInclude Include="bigStash.h" />
<ClInclude Include="clientSaveFile.h" />
<ClInclude Include="commands.h" />
<ClInclude Include="common.h" />
<ClInclude Include="customData.h" />
<ClInclude Include="customLibraries.h" />
<ClInclude Include="d2functions.h" />
<ClInclude Include="error.h" />
<ClInclude Include="extendedSaveFile.h" />
<ClInclude Include="extraOptions.h" />
<ClInclude Include="globalVariable.h" />
<ClInclude Include="infinityStash.h" />
<ClInclude Include="INIfile.h" />
<ClInclude Include="interface_Skills.h" />
<ClInclude Include="interface_Stash.h" />
<ClInclude Include="interface_Stats.h" />
<ClInclude Include="language.h" />
<ClInclude Include="loadPlayerData.h" />
<ClInclude Include="mainScreen.h" />
<ClInclude Include="modifMemory.h" />
<ClInclude Include="newInterfaces.h" />
<ClInclude Include="newInterface_CubeListing.h" />
<ClInclude Include="newInterface_Runewords.h" />
<ClInclude Include="newInterface_Stats.h" />
<ClInclude Include="newInterface_StatsPageTwo.h" />
<ClInclude Include="othersFeatures.h" />
<ClInclude Include="parameters.h" />
<ClInclude Include="playerCustomData.h" />
<ClInclude Include="plugYFiles.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="savePath.h" />
<ClInclude Include="savePlayerData.h" />
<ClInclude Include="sharedSaveFile.h" />
<ClInclude Include="skillPerLevelUp.h" />
<ClInclude Include="skillsPoints.h" />
<ClInclude Include="statPerLevelUp.h" />
<ClInclude Include="statsPoints.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="uberQuest.h" />
<ClInclude Include="updateClient.h" />
<ClInclude Include="updateServer.h" />
<ClInclude Include="worldEvent.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="BigStash.cpp" />
<ClCompile Include="ClientSaveFile.cpp" />
<ClCompile Include="Commands.cpp" />
<ClCompile Include="Common.cpp" />
<ClCompile Include="CustomLibraries.cpp" />
<ClCompile Include="D2functions.cpp" />
<ClCompile Include="D2wrapper.cpp" />
<ClCompile Include="dllmain.cpp">
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</PrecompiledHeader>
</ClCompile>
<ClCompile Include="Error.cpp" />
<ClCompile Include="ExtendedSaveFile.cpp" />
<ClCompile Include="ExtraOptions.cpp" />
<ClCompile Include="GlobalVariable.cpp" />
<ClCompile Include="InfinityStash.cpp" />
<ClCompile Include="INIfile.cpp" />
<ClCompile Include="Interface_Skills.cpp" />
<ClCompile Include="Interface_Stash.cpp" />
<ClCompile Include="Interface_Stats.cpp" />
<ClCompile Include="Language.cpp" />
<ClCompile Include="LoadPlayerData.cpp" />
<ClCompile Include="MainScreen.cpp" />
<ClCompile Include="ModifMemory.cpp" />
<ClCompile Include="NewInterfaces.cpp" />
<ClCompile Include="NewInterface_CubeListing.cpp" />
<ClCompile Include="NewInterface_Runewords.cpp" />
<ClCompile Include="NewInterface_Stats.cpp" />
<ClCompile Include="NewInterface_StatsPageTwo.cpp" />
<ClCompile Include="OthersFeatures.cpp" />
<ClCompile Include="Parameters.cpp" />
<ClCompile Include="PlayerCustomData.cpp" />
<ClCompile Include="PlugY.cpp" />
<ClCompile Include="PlugYFiles.cpp" />
<ClCompile Include="SavePath.cpp" />
<ClCompile Include="SavePlayerData.cpp" />
<ClCompile Include="SharedSaveFile.cpp" />
<ClCompile Include="SkillPerLevelUp.cpp" />
<ClCompile Include="SkillsPoints.cpp" />
<ClCompile Include="StatPerLevelUp.cpp" />
<ClCompile Include="StatsPoints.cpp" />
<ClCompile Include="stdafx.cpp" />
<ClCompile Include="UberQuest.cpp" />
<ClCompile Include="UpdateClient.cpp" />
<ClCompile Include="UpdateServer.cpp" />
<ClCompile Include="WorldEvent.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="PlugY.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

308
PlugY/PlugY.vcxproj.filters Normal file
View File

@@ -0,0 +1,308 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Header Files\Commons">
<UniqueIdentifier>{f21d23d6-3719-4624-84e8-f488328334b7}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="stdafx.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="targetver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="resource.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="savePath.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="savePlayerData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="sharedSaveFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="skillPerLevelUp.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="skillsPoints.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="statPerLevelUp.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="statsPoints.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="uberQuest.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="updateClient.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="updateServer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="worldEvent.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="bigStash.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="clientSaveFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="commands.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="customData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="customLibraries.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="d2functions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="error.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="extendedSaveFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="extraOptions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="globalVariable.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="infinityStash.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="INIfile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="interface_Skills.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="interface_Stash.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="interface_Stats.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="language.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="loadPlayerData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="mainScreen.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="modifMemory.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="newInterface_CubeListing.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="newInterface_Runewords.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="newInterface_Stats.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="newInterface_StatsPageTwo.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="newInterfaces.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="othersFeatures.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="parameters.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="playerCustomData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="plugYFiles.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\Commons\d2BinFile.h">
<Filter>Header Files\Commons</Filter>
</ClInclude>
<ClInclude Include="..\Commons\d2constants.h">
<Filter>Header Files\Commons</Filter>
</ClInclude>
<ClInclude Include="..\Commons\D2Funcs.h">
<Filter>Header Files\Commons</Filter>
</ClInclude>
<ClInclude Include="..\Commons\d2StringTblStruct.h">
<Filter>Header Files\Commons</Filter>
</ClInclude>
<ClInclude Include="..\Commons\d2Struct.h">
<Filter>Header Files\Commons</Filter>
</ClInclude>
<ClInclude Include="..\Commons\D2UnitStruct.h">
<Filter>Header Files\Commons</Filter>
</ClInclude>
<ClInclude Include="..\Commons\updatingConst.h">
<Filter>Header Files\Commons</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PlugY.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="dllmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SavePlayerData.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SharedSaveFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SkillPerLevelUp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SkillsPoints.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="StatPerLevelUp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="StatsPoints.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UberQuest.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UpdateClient.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UpdateServer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WorldEvent.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BigStash.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ClientSaveFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Commands.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Common.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CustomLibraries.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="D2functions.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="D2wrapper.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Error.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ExtendedSaveFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ExtraOptions.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="GlobalVariable.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="InfinityStash.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="INIfile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Interface_Skills.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Interface_Stash.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Interface_Stats.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Language.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LoadPlayerData.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MainScreen.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ModifMemory.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NewInterface_CubeListing.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NewInterface_Runewords.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NewInterface_Stats.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NewInterface_StatsPageTwo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NewInterfaces.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="OthersFeatures.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Parameters.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PlayerCustomData.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PlugYFiles.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SavePath.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="PlugY.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Adding custom data. Adding custom data.
Save and load infinity & shared Stash Save and load infinity & shared Stash
@@ -89,7 +88,7 @@ void Install_PlugYFiles()
log_msg("Patch Storm to found custom file. (PlugYFiles)\n"); log_msg("Patch Storm to found custom file. (PlugYFiles)\n");
// Try in Diablo II\PlugY\ if file not found // Try in Diablo II\PlugY\ if file not found
mem_seek R7(Storm, 192C6, 19296, 18677, 2CC69, 14259, 121E9, 28D89, 2DA79);//( (DWORD)D2Storm268 + V7(Storm, 01A8, 01A8, 01AB, 0429, 0429, 0429, 0000) ); mem_seek R7(Storm, 192C6, 19296, 18677, 2CC69, 14259, 121E9, 28D89);//( (DWORD)D2Storm268 + V7(Storm, 01A8, 01A8, 01AB, 0429, 0429, 0429, 0000) );
memt_byte( 0xFF ,0x90); // NOP memt_byte( 0xFF ,0x90); // NOP
memt_byte( 0x15 ,0xE8); // CALL memt_byte( 0x15 ,0xE8); // CALL
MEMD_REF4( LeaveCriticalSection, version_Storm >= V111 ? caller_isModFile_111 : caller_isModFile); MEMD_REF4( LeaveCriticalSection, version_Storm >= V111 ? caller_isModFile_111 : caller_isModFile);
@@ -98,7 +97,6 @@ void Install_PlugYFiles()
//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
log_msg("\n" ); log_msg("\n" );
@@ -172,7 +170,7 @@ 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 R7(D2Client, 57E21, 57E21, 5E4B1, 2E101, B67E1, 82761, 27EAE, 6E0BE); mem_seek R7(D2Client, 57E21, 57E21, 5E4B1, 2E101, B67E1, 82761, 27EAE);
memt_byte( 0xB9 ,0xE8); memt_byte( 0xB9 ,0xE8);
MEMT_REF4( 0x0000000C , caller_loadCustomImages); MEMT_REF4( 0x0000000C , caller_loadCustomImages);
//6FAFE4B1 |. B9 0C000000 MOV ECX,0C //6FAFE4B1 |. B9 0C000000 MOV ECX,0C
@@ -180,10 +178,9 @@ void Install_PlugYImagesFiles()
//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
// Free custom images // Free custom images
mem_seek R7(D2Client, 57FA9, 57FA9, 5E639, 2D12D, B580D, 8158D, 26F8D, 6D07D); mem_seek R7(D2Client, 57FA9, 57FA9, 5E639, 2D12D, B580D, 8158D, 26F8D);
memt_byte( 0xB9 ,0xE8); memt_byte( 0xB9 ,0xE8);
MEMT_REF4( 0x0000000C , caller_freeCustomImages); MEMT_REF4( 0x0000000C , caller_freeCustomImages);
//6FAFE639 |> B9 0C000000 MOV ECX,0C //6FAFE639 |> B9 0C000000 MOV ECX,0C
@@ -191,7 +188,6 @@ void Install_PlugYImagesFiles()
//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
log_msg("\n" ); log_msg("\n" );
@@ -247,7 +243,7 @@ void Install_PlugYTxtFiles()
// lookupItemStatCost = (void*)R7(D2Common, A1D70, A1D70, AA1D8, 0000, 0000, 0000, 0000); // lookupItemStatCost = (void*)R7(D2Common, A1D70, A1D70, AA1D8, 0000, 0000, 0000, 0000);
// Load custom txt files // Load custom txt files
mem_seek R7(D2Common, 7F4B, 7F4B, 2F7D7, 76854, 37444, 81C44, 5D6E4, 855E4); mem_seek R7(D2Common, 7F4B, 7F4B, 2F7D7, 76854, 37444, 81C44, 5D6E4);
MEMC_REF4( D2LoadSuperuniques, version_D2Common >= V111 ? caller_loadTxtFiles_111 : caller_loadTxtFiles ); MEMC_REF4( D2LoadSuperuniques, version_D2Common >= V111 ? 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
@@ -256,10 +252,9 @@ void Install_PlugYTxtFiles()
//6FD87443 |. E8 58B6FFFF CALL D2Common.6FD82AA0 ; \D2Common.6FD82AA0 //6FD87443 |. E8 58B6FFFF CALL D2Common.6FD82AA0 ; \D2Common.6FD82AA0
//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
// Free custom txt files // Free custom txt files
mem_seek R7(D2Common, 79EC, 79EC, 10186, 332B3, 15AB3, 44E13, 5E8B3, FAA3); mem_seek R7(D2Common, 79EC, 79EC, 10186, 332B3, 15AB3, 44E13, 5E8B3);
MEMJ_REF4( D2Fog10212, caller_freeTxtFiles ); 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>
@@ -268,7 +263,6 @@ void Install_PlugYTxtFiles()
//6FD65AB2 |. E8 B537FFFF CALL <JMP.&Fog.#10212> //6FD65AB2 |. E8 B537FFFF CALL <JMP.&Fog.#10212>
//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>
log_msg("\n" ); log_msg("\n" );

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Changing the current save path. Changing the current save path.
@@ -124,7 +123,7 @@ void Install_ChangingSavePath()
if (version_Fog >= V111) if (version_Fog >= V111)
{ {
// Appel de notre fct d'ajout d'un sous-r<>pertoire // Appel de notre fct d'ajout d'un sous-r<>pertoire
mem_seek R7(Fog, 000, 000, 000, 185F6, 1C106, 1F086, 17F86, 1E146); mem_seek R7(Fog, 000, 000, 000, 185F6, 1C106, 1F086, 17F86);
memt_byte( 0x83 ,0xE8); // CALL changeSavePath memt_byte( 0x83 ,0xE8); // CALL changeSavePath
MEMT_REF4( 0x0575FFF8, changeSavePath_111); MEMT_REF4( 0x0575FFF8, changeSavePath_111);
//6FF685F6 . 83F8 FF CMP EAX,-1 //6FF685F6 . 83F8 FF CMP EAX,-1
@@ -135,21 +134,18 @@ void Install_ChangingSavePath()
//6FF6F089 . 75 05 JNZ SHORT Fog.6FF6F090 //6FF6F089 . 75 05 JNZ SHORT Fog.6FF6F090
//6FF67F86 . 83F8 FF CMP EAX,-1 //6FF67F86 . 83F8 FF CMP EAX,-1
//6FF67F89 . 75 05 JNZ SHORT Fog.6FF67F90 //6FF67F89 . 75 05 JNZ SHORT Fog.6FF67F90
//6FF6E146 . 83F8 FF CMP EAX,-1
//6FF6E149 . 75 05 JNZ SHORT Fog.6FF50F64
// Pour cr<63>er le bon chemin de sauvegarde // Pour cr<63>er le bon chemin de sauvegarde
mem_seek R7(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6, 1E166); mem_seek R7(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6);
MEMJ_REF4( D2Storm503, forCreateSavePath); 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>
// Remove registry update // Remove registry update
mem_seek R7(Fog, 000, 000, 000, 1861A, 1C12A, 1F0AA, 17FAA, 1E16A); mem_seek R7(Fog, 000, 000, 000, 1861A, 1C12A, 1F0AA, 17FAA);
memt_byte( 0x56 ,0xEB); // JMP SHORT fog.6FF6862C memt_byte( 0x56 ,0xEB); // JMP SHORT fog.6FF6862C
memt_byte( 0x6A ,0x10); // memt_byte( 0x6A ,0x10); //
memt_byte( 0x00 ,0x90); // NOP memt_byte( 0x00 ,0x90); // NOP
@@ -170,8 +166,6 @@ void Install_ChangingSavePath()
//6FF6F0B7 . E8 58DDFEFF CALL <JMP.&Storm.#425> //6FF6F0B7 . E8 58DDFEFF CALL <JMP.&Storm.#425>
//6FF67FAA . 56 PUSH ESI //6FF67FAA . 56 PUSH ESI
//6FF67FAB . 6A 00 PUSH 0 //6FF67FAB . 6A 00 PUSH 0
//6FF6E16A . 56 PUSH ESI
//6FF6E16B . 6A 00 PUSH 0
} else { } else {

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Save Player Custom Data. Save Player Custom Data.
@@ -522,17 +521,16 @@ void Install_SavePlayerData()
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 R7(D2Game, 4DF04, 4E304, 5A624, B9365, 25475, 44165, 53F35, 39835); mem_seek R7(D2Game, 4DF04, 4E304, 5A624, B9365, 25475, 44165, 53F35);
MEMJ_REF4( D2FogGetSavePath, 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);
//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>
//Send SaveFiles //Send SaveFiles
mem_seek R7(D2Game, 4DFFA, 4E3FA, 5A720, B92DB, 253EB, 440DB, 53EAB, 397AB); mem_seek R7(D2Game, 4DFFA, 4E3FA, 5A720, B92DB, 253EB, 440DB, 53EAB);
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 >= 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 >= V111 ? 0xC0850424 : version_D2Game != V109b ? 0xFF851024 : 0xF6851024, version_D2Game >= V111 ? caller_SendSaveFilesToSave_111 : version_D2Game != V109b ? caller_SendSaveFilesToSave : caller_SendSaveFilesToSave_9);
@@ -546,10 +544,8 @@ void Install_SavePlayerData()
//6FC640DF |. 85C0 TEST EAX,EAX //6FC640DF |. 85C0 TEST EAX,EAX
//6FC73EAB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4] //6FC73EAB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
//6FC73EAF |. 85C0 TEST EAX,EAX //6FC73EAF |. 85C0 TEST EAX,EAX
//6FC597AB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
//6FC597AF |. 85C0 TEST EAX,EAX
mem_seek R7(D2Game, 7993, 7A13, 7BBB, E2943, E6D83, A89D3, 2D173, BEDD3); mem_seek R7(D2Game, 7993, 7A13, 7BBB, E2943, E6D83, A89D3, 2D173);
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);
@@ -558,7 +554,6 @@ void Install_SavePlayerData()
//02056D83 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C] //02056D83 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
//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]
// 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
@@ -570,17 +565,16 @@ void Install_SavePlayerData()
if ( version_D2Game >= V111 ) if ( version_D2Game >= V111 )
{ {
//Received SaveFiles //Received SaveFiles
mem_seek R7(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 43946, 448E6); mem_seek R7(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 43946);
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]
//6FAE2076 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C] //6FAE2076 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
//6FB2BCD6 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C] //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]
// Save multiplayer player custom data. // Save multiplayer player custom data.
mem_seek R7(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, AC572, 829C2); mem_seek R7(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, AC572);
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
@@ -588,17 +582,16 @@ void Install_SavePlayerData()
//6FB6D7F2 |. 81F9 55AA55AA CMP ECX,AA55AA55 //6FB6D7F2 |. 81F9 55AA55AA CMP ECX,AA55AA55
//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
} else { } else {
//Received SaveFiles //Received SaveFiles
mem_seek R7(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 0000, 0000); mem_seek R7(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 0000);
memt_byte( 0x81 ,0x90); // NOP memt_byte( 0x81 ,0x90); // NOP
memt_byte( 0xEC ,0xE8); // CALL memt_byte( 0xEC ,0xE8); // CALL
MEMT_REF4( 0x000005F4, caller_ReceivedSaveFilesToSave); MEMT_REF4( 0x000005F4, caller_ReceivedSaveFilesToSave);
//6FAB1CB0 |$ 81EC F4050000 SUB ESP,5F4 //6FAB1CB0 |$ 81EC F4050000 SUB ESP,5F4
// Save multiplayer player custom data. // Save multiplayer player custom data.
mem_seek R7(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, 0000, 0000); mem_seek R7(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, 0000);
memt_byte( 0x8B ,0xE8); // CALL memt_byte( 0x8B ,0xE8); // CALL
MEMT_REF4( 0x04518B01, caller_SaveMPPlayerCustomData); MEMT_REF4( 0x04518B01, caller_SaveMPPlayerCustomData);
//6FAB1DBC |. 8B01 MOV EAX,DWORD PTR DS:[ECX] //6FAB1DBC |. 8B01 MOV EAX,DWORD PTR DS:[ECX]

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Change Skill win per level up. Change Skill win per level up.
@@ -37,14 +36,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 R7(D2Game, 42261, 42651, 4ED60, D7AE5, 79695, AA455, EB1E5, EDCA5); mem_seek R7(D2Game, 42261, 42651, 4ED60, D7AE5, 79695, AA455, EB1E5);
MEMJ_REF4( V2AddPlayerStat, version_D2Game >= V111 ? caller_changeSkillPerLevelUp_111 : caller_changeSkillPerLevelUp); 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>
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Change Stat win per level up. Change Stat win per level up.
@@ -35,14 +34,13 @@ 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 R7(D2Game, 42258, 42648, 4ED55, D7ADA, 7968A, AA44A, EB1DA, EDC9A); mem_seek R7(D2Game, 42258, 42648, 4ED55, D7ADA, 7968A, AA44A, EB1DA);
MEMJ_REF4( V2AddPlayerStat, version_D2Game >= V111 ? caller_changeStatPerLevelUp_111 : caller_changeStatPerLevelUp); 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>
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Unassign Stats Point for futher re-assignment. Unassign Stats Point for futher re-assignment.
@@ -332,29 +331,27 @@ void Install_StatsPoints()
//if ( version_D2Client < V113 ) //if ( version_D2Client < V113 )
{ {
// Always print stat button images. // Always print stat button images.
mem_seek R7(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5, BF955); mem_seek R7(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5);
memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088 memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088
memt_byte( 0x4C, V7(D2Client, 12, 12, 13, 13, 13, 13, 13, 13) ); memt_byte( 0x4C, V7(D2Client, 12, 12, 13, 13, 13, 13, 13) );
memt_byte( 0x24, 0x90 ); // NOP memt_byte( 0x24, 0x90 ); // NOP
memt_byte( V7(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C, 1C), 0x90 ); // NOP (V109d:0x20 , V110:0x14 memt_byte( V7(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C), 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]
//print our buttons //print our buttons
mem_seek R7(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E, BF9DE); mem_seek R7(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E);
MEMJ_REF4( D2PrintImage, caller_printUnassignStatsBtn); 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>
// Always manage push down. // Always manage push down.
mem_seek R7(D2Client, 2AA7B, 2AA6B, 3134D, 827D9, 89259, 6B1B9, BCDD9, BF579); mem_seek R7(D2Client, 2AA7B, 2AA6B, 3134D, 827D9, 89259, 6B1B9, BCDD9);
memt_byte( 0x74, 0x90 ); // NOP memt_byte( 0x74, 0x90 ); // NOP
memt_byte( 0x4E, 0x90 ); // NOP memt_byte( 0x4E, 0x90 ); // NOP
//6FAD134D 74 4E JE SHORT D2Client.6FAD139D //6FAD134D 74 4E JE SHORT D2Client.6FAD139D
@@ -362,12 +359,11 @@ void Install_StatsPoints()
//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
if ( version_D2Client >= V111 ) if ( version_D2Client >= V111 )
{ {
// On Push down. // On Push down.
mem_seek R7(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 6B224, BCE44, BF5E4); mem_seek R7(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 6B224, BCE44);
memt_byte( 0x6B, 0xE8 ); memt_byte( 0x6B, 0xE8 );
MEMT_REF4( 0x01BF0ED2, caller_pushDown_111); MEMT_REF4( 0x01BF0ED2, caller_pushDown_111);
memt_byte( 0x00, 0x6B ); // IMUL EDX,EDX,0E memt_byte( 0x00, 0x6B ); // IMUL EDX,EDX,0E
@@ -381,12 +377,10 @@ void Install_StatsPoints()
//6FB1B227 BF 01000000 MOV EDI,1 //6FB1B227 BF 01000000 MOV EDI,1
//6FB6CE44 > 6BD2 0E IMUL EDX,EDX,0E //6FB6CE44 > 6BD2 0E IMUL EDX,EDX,0E
//6FB6CE47 . BF 01000000 MOV EDI,1 //6FB6CE47 . BF 01000000 MOV EDI,1
//6FB6F5E4 > 6BD2 0E IMUL EDX,EDX,0E
//6FB6F5E7 . BF 01000000 MOV EDI,1
} else { } else {
// On Push down. // On Push down.
mem_seek R7(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 0000, 0000, 0000); mem_seek R7(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 0000, 0000);
memt_byte( 0x8D, 0xE8 ); // CALL memt_byte( 0x8D, 0xE8 ); // CALL
MEMT_REF4( 0x0000D504, caller_pushDown); MEMT_REF4( 0x0000D504, caller_pushDown);
memt_byte( 0x00, 0x90 ); // NOP memt_byte( 0x00, 0x90 ); // NOP
@@ -398,7 +392,7 @@ void Install_StatsPoints()
if ( version_D2Client >= V110 ) if ( version_D2Client >= V110 )
{ {
// Always manage push up. // Always manage push up.
mem_seek R7(D2Client, 0000, 0000, 3152E, 83869, 8A2E9, 6C249, BDE49, C05E9); mem_seek R7(D2Client, 0000, 0000, 3152E, 83869, 8A2E9, 6C249, BDE49);
memt_byte( 0x74, 0x90 ); // NOP memt_byte( 0x74, 0x90 ); // NOP
memt_byte( version_D2Client >= V111 ? 0x65 : 0x68, 0x90 ); // NOP memt_byte( version_D2Client >= V111 ? 0x65 : 0x68, 0x90 ); // NOP
//6FAD152E 74 68 JE SHORT D2Client.6FAD1598 //6FAD152E 74 68 JE SHORT D2Client.6FAD1598
@@ -406,10 +400,9 @@ void Install_StatsPoints()
//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
// Unassign stats point when ctrl is push. // Unassign stats point when ctrl is push.
mem_seek R7(D2Client, 0000, 0000, 315D3, 8391B, 8A39B, 6C2FB, BDEFB, C069B); mem_seek R7(D2Client, 0000, 0000, 315D3, 8391B, 8A39B, 6C2FB, BDEFB);
memt_byte( 0x66, 0xE8 ); // CALL memt_byte( 0x66, 0xE8 ); // CALL
MEMT_REF4( 0x077CC085, caller_UnassignStats); MEMT_REF4( 0x077CC085, caller_UnassignStats);
//6FAD15D3 . 66:85C0 TEST AX,AX //6FAD15D3 . 66:85C0 TEST AX,AX
@@ -422,25 +415,23 @@ void Install_StatsPoints()
//6FB1C2FE . 7C 07 JL SHORT D2Client.6FB1C307 //6FB1C2FE . 7C 07 JL SHORT D2Client.6FB1C307
//6FB6DEFB . 66:85C0 TEST AX,AX //6FB6DEFB . 66:85C0 TEST AX,AX
//6FB6DEFE . 7C 07 JL SHORT D2Client.6FB6DF07 //6FB6DEFE . 7C 07 JL SHORT D2Client.6FB6DF07
//6FB7069B . 66:85C0 TEST AX,AX
//6FB7069E . 7C 07 JL SHORT D2Client.6FB706A7
} else { } else {
// Always manage push up. // Always manage push up.
mem_seek R7(D2Client, 2AC55, 2AC45, 0000, 0000, 0000, 0000, 0000, 0000); mem_seek R7(D2Client, 2AC55, 2AC45, 0000, 0000, 0000, 0000, 0000);
memt_byte( 0x0F, 0x90 ); // NOP memt_byte( 0x0F, 0x90 ); // NOP
memt_byte( 0x84, 0x90 ); // NOP memt_byte( 0x84, 0x90 ); // NOP
memt_dword( 0x000000AE, 0x90909090 ); // NOP NOP NOP NOP memt_dword( 0x000000AE, 0x90909090 ); // NOP NOP NOP NOP
//6FACAC45 . 0F84 AE000000 JE D2Client.6FACACF9 //6FACAC45 . 0F84 AE000000 JE D2Client.6FACACF9
// Unassign stats point when ctrl is push. // Unassign stats point when ctrl is push.
mem_seek R7(D2Client, 2ACD9, 2ACC9, 0000, 0000, 0000, 0000, 0000, 0000); mem_seek R7(D2Client, 2ACD9, 2ACC9, 0000, 0000, 0000, 0000, 0000);
memt_byte( 0xB8, 0xE8 ); // CALL memt_byte( 0xB8, 0xE8 ); // CALL
MEMT_REF4( 0x00000001, caller_UnassignStats_9); MEMT_REF4( 0x00000001, caller_UnassignStats_9);
//6FACACC9 . B8 01000000 MOV EAX,1 //6FACACC9 . B8 01000000 MOV EAX,1
} }
// Set the id for the calling function. // Set the id for the calling function.
mem_seek R7(D2Client, 2AD02, 2ACF2, 31611, 8395E, 8A3DE, 6C33E, BDF3E, C06DE); mem_seek R7(D2Client, 2AD02, 2ACF2, 31611, 8395E, 8A3DE, 6C33E, BDF3E);
if ( version_D2Client >= V111 ) { if ( version_D2Client >= V111 ) {
memt_byte( 0x66, 0xE8 ); // CALL memt_byte( 0x66, 0xE8 ); // CALL
MEMT_REF4( 0x15244C89, caller_setValue_111); MEMT_REF4( 0x15244C89, caller_setValue_111);
@@ -448,7 +439,6 @@ void Install_StatsPoints()
//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 ; |
} else { } else {
MEMC_REF4( D2SendToServer3, caller_setValue); MEMC_REF4( D2SendToServer3, caller_setValue);
//6FAD1610 . E8 7BC3FDFF CALL D2Client.6FAAD990 //6FAD1610 . E8 7BC3FDFF CALL D2Client.6FAAD990
@@ -485,7 +475,7 @@ void Install_StatsLimitShiftClick()
log_msg("Patch D2Client for limit the assigment of stat points when shift is used. (LimitShift)\n"); log_msg("Patch D2Client for limit the assigment of stat points when shift is used. (LimitShift)\n");
// Limit the assigment of stat points. // Limit the assigment of stat points.
mem_seek R7(D2Client, 2ACD0, 2ACC0, 315CD, 83915, 8A395, 6C2F5, BDEF5, C0695); mem_seek R7(D2Client, 2ACD0, 2ACC0, 315CD, 83915, 8A395, 6C2F5, BDEF5);
memt_byte( 0xFF, 0x90 ); // NOP memt_byte( 0xFF, 0x90 ); // NOP
memt_byte( 0x15, 0xE8 ); // CALL memt_byte( 0x15, 0xE8 ); // CALL
MEMD_REF4( GetKeyState, version_D2Client >= V111 ? caller_LimitShift_111 : caller_LimitShift); MEMD_REF4( GetKeyState, version_D2Client >= V111 ? caller_LimitShift_111 : caller_LimitShift);
@@ -494,7 +484,6 @@ void Install_StatsLimitShiftClick()
//6FB3A395 . FF15 08F1B76F CALL DWORD PTR DS:[<&USER32.GetKeyState>] //6FB3A395 . FF15 08F1B76F CALL DWORD PTR DS:[<&USER32.GetKeyState>]
//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
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Uber Quest Management. Uber Quest Management.
@@ -328,45 +327,42 @@ void Install_UberQuest()
DWORD oldProtection; DWORD oldProtection;
// open Red Portal // open Red Portal
VirtualProtect((LPVOID)R7(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0, FA2C4), 8, PAGE_EXECUTE_READWRITE, &oldProtection); VirtualProtect((LPVOID)R7(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0), 8, PAGE_EXECUTE_READWRITE, &oldProtection);
mem_seek R7(D2Game, 0000, 0000, 0000, FA480, FA7B8, FA228, FA5F0, FA2C4); mem_seek R7(D2Game, 0000, 0000, 0000, FA480, FA7B8, FA228, FA5F0);
MEMT_DWORD( D2OpenPandPortal , openPandPortal); MEMT_DWORD( D2OpenPandPortal , openPandPortal);
MEMT_DWORD( D2OpenPandFinalPortal , openPandFinalPortal); 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 VirtualProtect((LPVOID)R7(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0), 8, oldProtection, &oldProtection);
VirtualProtect((LPVOID)R7(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0, FA2C4), 8, oldProtection, &oldProtection);
// manage uberIA (fct table at 0209E7E8) // manage uberIA (fct table at 0209E7E8)
VirtualProtect((LPVOID)(R7(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788, 10ED00) + 145*0x10), 0x30, PAGE_EXECUTE_READWRITE, &oldProtection); VirtualProtect((LPVOID)(R7(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788) + 145*0x10), 0x30, PAGE_EXECUTE_READWRITE, &oldProtection);
mem_seek R7(D2Game, 0000, 0000, 0000, 10F100, 10F5E8, 10F870, 10F0A0, 10F618); mem_seek R7(D2Game, 0000, 0000, 0000, 10F100, 10F5E8, 10F870, 10F0A0);
MEMT_DWORD( D2UberBaalIA , uberBaalIA); MEMT_DWORD( D2UberBaalIA , uberBaalIA);
mem_seek R7(D2Game, 0000, 0000, 0000, 10F110, 10F5F8, 10F880, 10F0B0, 10F628); mem_seek R7(D2Game, 0000, 0000, 0000, 10F110, 10F5F8, 10F880, 10F0B0);
MEMT_DWORD( D2UberMephIA , uberMephIA); MEMT_DWORD( D2UberMephIA , uberMephIA);
mem_seek R7(D2Game, 0000, 0000, 0000, 10F120, 10F608, 10F890, 10F0C0, 10F638); mem_seek R7(D2Game, 0000, 0000, 0000, 10F120, 10F608, 10F890, 10F0C0);
MEMT_DWORD( D2UberDiabloIA , uberDiabloIA); MEMT_DWORD( D2UberDiabloIA , uberDiabloIA);
VirtualProtect((LPVOID)(R7(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788, 10ED00) + 145*0x10), 0x30, oldProtection, &oldProtection); VirtualProtect((LPVOID)(R7(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788) + 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
// 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);
// MEMJ_REF4( D2WarpPlayer , spawnUber); // MEMJ_REF4( D2WarpPlayer , spawnUber);
//02028DAC |. E8 491CF7FF CALL <JMP.&D2Common.#10872> //02028DAC |. E8 491CF7FF CALL <JMP.&D2Common.#10872>
mem_seek R7(D2Game, 0000, 0000, 0000, E26E2, E6B52, A850B, 2CCAB, BE9AB); mem_seek R7(D2Game, 0000, 0000, 0000, E26E2, E6B52, A850B, 2CCAB);
MEMC_REF4( D2Game235C0 , spawnUber); 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
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Updating client. Updating client.
@@ -36,7 +35,6 @@ void updateClient(Unit* ptChar, DWORD mFunc, DWORD p1, DWORD p2, DWORD p3)
D2SendPacket(ptNetClient, &packet, sizeof(DataPacket)); D2SendPacket(ptNetClient, &packet, sizeof(DataPacket));
} }
DWORD FASTCALL handleClientUpdate(DataPacket* packet) DWORD FASTCALL handleClientUpdate(DataPacket* packet)
{ {
log_msg("[CLIENT] Received custom message: %d with param: %08X , %08X , %08X\n",packet->mFunc,packet->mParam1,packet->mParam2,packet->mParam3); log_msg("[CLIENT] Received custom message: %d with param: %08X , %08X , %08X\n",packet->mFunc,packet->mParam1,packet->mParam2,packet->mParam3);
@@ -75,14 +73,13 @@ void Install_UpdateClient()
log_msg("Patch D2Client for received Item packet. (UpdateClient)\n"); log_msg("Patch D2Client for received Item packet. (UpdateClient)\n");
// execute if it's our packet else continue // execute if it's our packet else continue
mem_seek R7(D2Client, 14236, 14226, 145B6, 9C6B6, BFE86, 66E06, AE896, 84D96); mem_seek R7(D2Client, 14236, 14226, 145B6, 9C6B6, BFE86, 66E06, AE896);
MEMT_REF4( version_D2Client >= V111 ? 0x000000CF : 0x000000D6, version_D2Client >= V111 ? caller_handleClientUpdate_111 : caller_handleClientUpdate); MEMT_REF4( version_D2Client >= V111 ? 0x000000CF : 0x000000D6, 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
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Updating server. Updating server.
@@ -16,11 +15,16 @@
#include "infinityStash.h" #include "infinityStash.h"
#include "commands.h" #include "commands.h"
int renameIndex = 0;
char renameString[16];
DWORD PageSwap;
int STDCALL handleServerUpdate(Unit* ptChar, WORD param) int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
{ {
log_msg("Received custom message: %X\n", param); int type = param & 0xFF;
switch(param & 0xFF) DWORD arg = (param & 0xFF00) >> 8;
log_msg("Received custom message: type=%i, arg=%i\n", type, arg);
switch(type)
{ {
case US_UNASSIGN_STR_POINT : UnassignStrPoint( ptChar ); return 1; case US_UNASSIGN_STR_POINT : UnassignStrPoint( ptChar ); return 1;
case US_UNASSIGN_ENE_POINT : UnassignEnePoint( ptChar ); return 1; case US_UNASSIGN_ENE_POINT : UnassignEnePoint( ptChar ); return 1;
@@ -43,17 +47,36 @@ int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
case US_SELECT_PREVIOUS_INDEX2: selectPreviousIndex2Stash( ptChar ); return 1; case US_SELECT_PREVIOUS_INDEX2: selectPreviousIndex2Stash( ptChar ); return 1;
case US_SELECT_NEXT_INDEX2 : selectNextIndex2Stash( ptChar ); return 1; case US_SELECT_NEXT_INDEX2 : selectNextIndex2Stash( ptChar ); return 1;
case US_STARTSAVE : savePlayers( ptChar ); return 1; case US_SAVE : savePlayers( ptChar ); return 1;
case US_MAXGOLD : maxGold(ptChar); return 1; case US_MAXGOLD : maxGold(ptChar); return 1;
case US_PUTGOLD : putGold(ptChar, 0); return 1; case US_PUTGOLD : putGold(ptChar, 0); return 1;
case US_TAKEGOLD : takeGold(ptChar, 0); return 1; case US_TAKEGOLD : takeGold(ptChar, 0); return 1;
default : return 0; case US_SWAP3 : PageSwap = arg << 24; return 1;
case US_SWAP2 : PageSwap |= arg << 16; return 1;
case US_SWAP1 : PageSwap |= arg << 8; return 1;
case US_SWAP0: swapStash(ptChar, PageSwap | arg, false); PageSwap = 0; return 1;
case US_SWAP0_TOGGLE : swapStash(ptChar, PageSwap | arg, true); PageSwap = 0; return 1;
case US_RENAME :
if (renameIndex == 0)
for (int i = 0; i < 16; i++)
renameString[i] = 0;
renameString[renameIndex++] = (char)arg;
if (arg == 0)
{
renameIndex = 0;
log_msg("Rename on Server : %s -> %s\n", ptChar->ptPlayerData->name, renameString);
strcpy(ptChar->ptPlayerData->name, renameString);
strcpy(ptChar->ptPlayerData->ptNetClient->name, renameString);
}
return 1;
default :
return 0;
} }
} }
FCT_ASM( caller_handleServerUpdate) FCT_ASM( caller_handleServerUpdate)
PUSH EAX PUSH ESI
PUSH EBX PUSH EBX
CALL handleServerUpdate CALL handleServerUpdate
TEST EAX,EAX TEST EAX,EAX
@@ -101,7 +124,7 @@ void Install_UpdateServer()
log_msg("Patch D2Game for received button click message. (UpdateServer)\n"); log_msg("Patch D2Game for received button click message. (UpdateServer)\n");
// manage button click message from Client. // manage button click message from Client.
mem_seek R7(D2Game, 4A702, 4AAC2, 56EA2, 54AE3, 2C773, 975C3, CC983, 676C3); mem_seek R7(D2Game, 4A702, 4AAC2, 56EA2, 54AE3, 2C773, 975C3, CC983);
if (version_D2Game >= V111) { if (version_D2Game >= V111) {
memt_byte( 0xC1, 0x57 ); // PUSH EDI memt_byte( 0xC1, 0x57 ); // PUSH EDI
memt_byte( 0xEE, 0xE8 ); // CALL caller_handleServerUpdate memt_byte( 0xEE, 0xE8 ); // CALL caller_handleServerUpdate

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
World Event Management. World Event Management.
@@ -232,44 +231,40 @@ void Install_WorldEvent()
log_msg("Patch D2Game for active World Event. (WorldEvent)\n"); log_msg("Patch D2Game for active World Event. (WorldEvent)\n");
// spawn DClone // spawn DClone
mem_seek R7(D2Game, 0000, 0000, 3F720, 4BCB1, ECF10, 41570, 25280, CFBD0); mem_seek R7(D2Game, 0000, 0000, 3F720, 4BCB1, ECF10, 41570, 25280);
MEMC_REF4( V2SpawnMonster , version_D2Game >= V111b ? (DWORD)caller_spawnDClone_111b : version_D2Game == V111 ? (DWORD)caller_spawnDClone_111 : (DWORD)spawnDClone); 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
// verify if the item sold is a trigger of WE // verify if the item sold is a trigger of WE
mem_seek R7(D2Game, 0000, 0000, 977D0, 8E799, 92859, 84499, BFB29, 72BE9); mem_seek R7(D2Game, 0000, 0000, 977D0, 8E799, 92859, 84499, BFB29);
MEMJ_REF4( D2TestFlags , verifIfWEItem); 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>
// management of the WorldEvent // management of the WorldEvent
mem_seek R7(D2Game, 0000, 0000, 3CE0, 51F01, C5681, EBF41, 4A791, E5F51); mem_seek R7(D2Game, 0000, 0000, 3CE0, 51F01, C5681, EBF41, 4A791);
MEMC_REF4( V2GetGameByClientID , version_D2Game >= V111 ? (DWORD)WEManagement : (DWORD)caller_WEManagement_1XX); 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
// add client for the WorldEvent // add client for the WorldEvent
mem_seek R7(D2Game, 0000, 0000, 1AEF, 3786A, 7055A, 6265F, CB0BF, D556F); mem_seek R7(D2Game, 0000, 0000, 1AEF, 3786A, 7055A, 6265F, CB0BF);
MEMC_REF4( D2AddClient , version_D2Game >= V111 ? caller_addClientForWE_111 : caller_addClientForWE); 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
log_msg("\n"); log_msg("\n");

View File

@@ -1,6 +1,5 @@
/*============================================== /*==============================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
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.
@@ -55,8 +54,8 @@ extern s_shifting shifting;
#define PCPY ((PYPlayerData*)((DWORD)PCPlayerData+shifting.ptPYPlayerData)) //->ptPYPlayerData #define PCPY ((PYPlayerData*)((DWORD)PCPlayerData+shifting.ptPYPlayerData)) //->ptPYPlayerData
#define PCSkills (*(Skills**)((DWORD)(ptChar)+shifting.ptSkills)) //->ptSkills #define PCSkills (*(Skills**)((DWORD)(ptChar)+shifting.ptSkills)) //->ptSkills
#define R7(Z,A,B,C,D,E,F,G,H) (offset_##Z + (version_##Z == V113d? 0x##H : (version_##Z == V113c? 0x##G : (version_##Z == V112? 0x##F : (version_##Z == V111b? 0x##E : (version_##Z == V111? 0x##D : (version_##Z == V110? 0x##C : (version_##Z == V109d? 0x##B : 0x##A)))))))) #define R7(Z,A,B,C,D,E,F,G) (offset_##Z + (version_##Z == V113? 0x##G : (version_##Z == V112? 0x##F : (version_##Z == V111b? 0x##E : (version_##Z == V111? 0x##D : (version_##Z == V110? 0x##C : (version_##Z == V109d? 0x##B : 0x##A)))))))
#define V7(Z,A,B,C,D,E,F,G,H) (version_##Z == V113d? 0x##H : (version_##Z == V113c? 0x##G : (version_##Z == V112? 0x##F : (version_##Z == V111b? 0x##E : (version_##Z == V111? 0x##D : (version_##Z == V110? 0x##C : (version_##Z == V109d? 0x##B : 0x##A))))))) #define V7(Z,A,B,C,D,E,F,G) (version_##Z == V113? 0x##G : (version_##Z == V112? 0x##F : (version_##Z == V111b? 0x##E : (version_##Z == V111? 0x##D : (version_##Z == V110? 0x##C : (version_##Z == V109d? 0x##B : 0x##A))))))
// Convert 4 char code in a DWORD code // Convert 4 char code in a DWORD code
@@ -75,9 +74,7 @@ enum eFileVersion
V111, V111,
V111b, V111b,
V112, V112,
V113c, V113
V113d,
V114a
}; };
extern int version_SmackW32; extern int version_SmackW32;
@@ -121,19 +118,7 @@ extern DWORD offset_Storm;
extern const char* S_CloneBattles; extern const char* S_CloneBattles;
extern const char* S_DarkAlliance; extern const char* S_DarkAlliance;
int UCS2toUTF8(char* dst, int maxdst, LPWSTR src, int lensrc);
int UTF8toUCS2(LPWSTR dst, int maxdst, char* src, int lensrc);
bool initLocaleStrings();
void freeLocaleStrings();
const LPWSTR getTypeString (DWORD code, char** IdxStr);
LPWSTR getTranslatedString(int stringID); LPWSTR getTranslatedString(int stringID);
int wSprintStringLastGender(LPWSTR buf, int lenbuf,int stringID);
LPWSTR cutStringGender(LPWSTR str);
LPWSTR setMonoString(LPWSTR str);
enum eStringList enum eStringList
{ {
STR_STATS_UNASSIGN_WITH_LIMIT=0, STR_STATS_UNASSIGN_WITH_LIMIT=0,
@@ -153,47 +138,12 @@ enum eStringList
STR_TAKE_GOLD, STR_TAKE_GOLD,
STR_SHARED_GOLD_QUANTITY, STR_SHARED_GOLD_QUANTITY,
STR_PREVIOUS_PAGE, STR_PREVIOUS_PAGE,
STR_NEXT_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_WITH_N_SOCKETS,
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_OR_UPGRADED,
STR_WITHOUT_SOCKET,
STR_WITH_SOCKET,
STR_ONLY_N_H,
STR_ONLY_HELL,
STR_ONLY_CLASS
}; };
bool isOnRect(DWORD x, DWORD y, DWORD x0, DWORD y0, DWORD l, DWORD h); bool isOnRect(DWORD x, DWORD y, DWORD x0, DWORD y0, DWORD l, DWORD h);
void freeMessage(sWinMessage* msg); void freeMessage(sWinMessage* msg);
LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size); LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size);
//char* getTypeAString (WORD id, char* lpText, DWORD size); char* getTypeAString (WORD id, char* lpText, DWORD size);
/*================================= END OF FILE =================================*/ /*================================= END OF FILE =================================*/

View File

@@ -1,6 +1,5 @@
/*================================================ /*================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
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.
@@ -16,9 +15,9 @@
#define E2S(F, A, R, N, P) typedef R (STDCALL *T##N) P; extern T##N N; #define E2S(F, A, R, N, P) typedef R (STDCALL *T##N) P; extern T##N N;
#define E2F(F, A, R, N, P) typedef R (FASTCALL *T##N) P; extern T##N N; #define E2F(F, A, R, N, P) typedef R (FASTCALL *T##N) P; extern T##N N;
#define E2C(F, A, T, N) extern T* pt##N; #define E2C(F, A, T, N) extern T* pt##N;
#define F7(X, Z, A,B,C,D,E,F,G,H, R, N, P) typedef R (X##CALL *T##N) P; extern T##N N; #define F7(X, Z, A,B,C,D,E,F,G, R, N, P) typedef R (X##CALL *T##N) P; extern T##N N;
#define A7(X, Z, A,B,C,D,E,F,G,H, R, N, P) typedef R (X##CALL *T##N) P; extern T##N N; #define A7(X, Z, A,B,C,D,E,F,G, R, N, P) typedef R (X##CALL *T##N) P; extern T##N N;
#define C7(Z, A,B,C,D,E,F,G,H, T, N) extern T* pt##N; #define C7(Z, A,B,C,D,E,F,G, T, N) extern T* pt##N;
#include "../Commons/D2Funcs.h" #include "../Commons/D2Funcs.h"
extern DataTables* SgptDataTables; extern DataTables* SgptDataTables;

19
PlugY/dllmain.cpp Normal file
View File

@@ -0,0 +1,19 @@
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

View File

@@ -8,24 +8,38 @@
#ifndef __EXTRAOPTIONS_H__INCLUDED #ifndef __EXTRAOPTIONS_H__INCLUDED
#define __EXTRAOPTIONS_H__INCLUDED #define __EXTRAOPTIONS_H__INCLUDED
extern int active_RunLODs; extern int active_Windowed;
extern int active_alwaysRegenMapInSP; extern int active_LockMouseCursor;
extern DWORD nbPlayersCommandByDefault;
extern int active_DisplayItemLevel; extern int active_DisplayItemLevel;
extern DWORD nbPlayersCommandByDefault;
extern int active_alwaysRegenMapInSP;
extern int active_RunLODs;
extern int active_AlwaysDisplayLifeMana; extern int active_AlwaysDisplayLifeMana;
extern int active_EnabledTXTFilesWithMSExcel; extern int active_EnabledTXTFilesWithMSExcel;
extern int active_DisplayBaseStatsValue; extern int active_DisplayBaseStatsValue;
extern int active_LadderRunewords; extern int active_LadderRunewords;
extern int active_EnabledCowPortalWhenCowKingWasKill; extern int active_EnabledCowPortalWhenCowKingWasKill;
void Install_RunLODs(); extern int active_RemoveBorder;
void Install_AlwaysRegenMapInSP(); extern int active_WindowOnTop;
void Install_SendPlayersCommand(); extern int active_Maximized;
extern int active_SetWindowPos;
extern int windowedX;
extern int windowedY;
extern int windowedWidth;
extern int windowedHeight;
extern int active_LockMouseOnStartup;
void Install_DisplayItemLevel(); void Install_DisplayItemLevel();
void Install_SendPlayersCommand();
void Install_AlwaysRegenMapInSP();
void Install_RunLODs();
void Install_AlwaysDisplayLifeMana(); void Install_AlwaysDisplayLifeMana();
void Install_EnabledTXTFilesWithMSExcel(); void Install_EnabledTXTFilesWithMSExcel();
void Install_DisplayBaseStatsValue(); void Install_DisplayBaseStatsValue();
void Install_LadderRunewords(); void Install_LadderRunewords();
void Install_EnabledCowPortalWhenCowKingWasKill(); void Install_EnabledCowPortalWhenCowKingWasKill();
void SetWindowedOptions();
void lockMouseCursor();
#endif #endif

View File

@@ -33,6 +33,7 @@ void selectPrevious2Stash(Unit* ptChar);
void selectNext2Stash(Unit* ptChar); void selectNext2Stash(Unit* ptChar);
void selectPreviousIndex2Stash(Unit* ptChar); void selectPreviousIndex2Stash(Unit* ptChar);
void selectNextIndex2Stash(Unit* ptChar); void selectNextIndex2Stash(Unit* ptChar);
void swapStash(Unit* ptChar, DWORD page, bool toggle);
void selectStash(Unit* ptChar, Stash* newStash); void selectStash(Unit* ptChar, Stash* newStash);
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags); void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags);

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Modified by 1.13d by L'Autour.
Loading parameters from ini file. Loading parameters from ini file.
@@ -8,7 +7,7 @@
#pragma once #pragma once
#define PLUGY_VERSION "11.00" #define PLUGY_VERSION "10.01"
#define LOG_FILE "PlugY.log" #define LOG_FILE "PlugY.log"

View File

@@ -1,13 +1,12 @@
//{{NO_DEPENDENCIES}} //{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file. // Microsoft Visual C++ generated include file.
// Used by PlugY.rc // Used by PlugY.rc
//
// Next default values for new objects // Next default values for new objects
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101

8
PlugY/stdafx.cpp Normal file
View File

@@ -0,0 +1,8 @@
// stdafx.cpp : source file that includes just the standard includes
// PlugY.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file

16
PlugY/stdafx.h Normal file
View File

@@ -0,0 +1,16 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
// TODO: reference additional headers your program requires here

8
PlugY/targetver.h Normal file
View File

@@ -0,0 +1,8 @@
#pragma once
// Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
#include <SDKDDKVer.h>

Binary file not shown.

View File

@@ -1,6 +1,5 @@
/*================================================================= /*=================================================================
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
Patch D2gfx.dll to install PlugY. Patch D2gfx.dll to install PlugY.
@@ -8,46 +7,41 @@
#include <windows.h> #include <windows.h>
#include <stdio.h> #include <stdio.h>
#include "../Commons/VersionInfo.h"
const char* boxNameInstall = "Installation of PlugY, The Survival Kit Installation"; const char* boxNameInstall = "Installation of PlugY, The Survival Kit Installation";
const char* boxNameUnInstall = "Uninstall PlugY, The Survival Kit "; const char* boxNameUnInstall = "Uninstall PlugY, The Survival Kit ";
int CALL_LOAD[8] = {0x389B,0x389B,0x3870,0x8B23,0xB423,0x8F63,0xB423,0xAA03}; int CALL_LOAD[7] = {0x389B,0x389B,0x3870,0x8B23,0xB423,0x8F63,0xB423};
BYTE callNewLoad[8][6]={{0xE8,0x60,0x85,0x00,0x00,0x90},// JMP 6FA7BE00-6FA738A0 ;install loadlibrary BYTE callNewLoad[7][6]={{0xE8,0x60,0x85,0x00,0x00,0x90},// JMP 6FA7BE00-6FA738A0 ;install loadlibrary
{0xE8,0x60,0x85,0x00,0x00,0x90},// JMP 6FA7BE00-6FA738A0 ;install loadlibrary {0xE8,0x60,0x85,0x00,0x00,0x90},// JMP 6FA7BE00-6FA738A0 ;install loadlibrary
{0xE8,0x8B,0x85,0x00,0x00,0x90},// JMP 6FA7BE00-6FA73875 ;install loadlibrary {0xE8,0x8B,0x85,0x00,0x00,0x90},// JMP 6FA7BE00-6FA73875 ;install loadlibrary
{0xE8,0xD8,0x42,0x00,0x00,0x90},// JMP 6FA8CE00-6FA88B28 ;install loadlibrary {0xE8,0xD8,0x42,0x00,0x00,0x90},// JMP 6FA8CE00-6FA88B28 ;install loadlibrary
{0xE8,0xD8,0x19,0x00,0x00,0x90},// JMP 6FA8CE00-6FA8B428 ;install loadlibrary {0xE8,0xD8,0x19,0x00,0x00,0x90},// JMP 6FA8CE00-6FA8B428 ;install loadlibrary
{0xE8,0x98,0x3E,0x00,0x00,0x90},// JMP 6FA8CE00-6FA88F68 ;install loadlibrary {0xE8,0x98,0x3E,0x00,0x00,0x90},// JMP 6FA8CE00-6FA88F68 ;install loadlibrary
{0xE8,0xD8,0x19,0x00,0x00,0x90},// JMP 6FA8CE00-6FA8B428 ;install loadlibrary {0xE8,0xD8,0x19,0x00,0x00,0x90}};// JMP 6FA8CE00-6FA8B428 ;install loadlibrary
{0xE8,0xF8,0x23,0x00,0x00,0x90}};// JMP 6FA8CE00-6FA8B428 ;install loadlibrary BYTE callOldLoad[7][6]={{0xFF,0x15,0x3C,0xC0,0xA7,0x6F},
BYTE callOldLoad[8][6]={{0xFF,0x15,0x3C,0xC0,0xA7,0x6F},
{0xFF,0x15,0x3C,0xC0,0xA7,0x6F}, {0xFF,0x15,0x3C,0xC0,0xA7,0x6F},
{0xFF,0x15,0x40,0xC0,0xA7,0x6F}, {0xFF,0x15,0x40,0xC0,0xA7,0x6F},
{0xFF,0x15,0x1C,0xD1,0xA8,0x6F}, {0xFF,0x15,0x1C,0xD1,0xA8,0x6F},
{0xFF,0x15,0x1C,0xD1,0xA8,0x6F}, {0xFF,0x15,0x1C,0xD1,0xA8,0x6F},
{0xFF,0x15,0x1C,0xD1,0xA8,0x6F}, {0xFF,0x15,0x1C,0xD1,0xA8,0x6F},
{0xFF,0x15,0x1C,0xD1,0xA8,0x6F},
{0xFF,0x15,0x1C,0xD1,0xA8,0x6F}}; {0xFF,0x15,0x1C,0xD1,0xA8,0x6F}};
int CALL_FREE[8] = {0x3A8C,0x3A8C,0x3A6D,0x8ACA,0xB3CA,0x8F0A,0xB3CA,0xA9AA}; int CALL_FREE[7] = {0x3A8C,0x3A8C,0x3A6D,0x8ACA,0xB3CA,0x8F0A,0xB3CA};
BYTE callNewFree[8][6]={{0xE8,0xAF,0x83,0x00,0x00,0x90}, // JMP 6FA7BE40-6FA73A91 ;install freelibrary BYTE callNewFree[7][6]={{0xE8,0xAF,0x83,0x00,0x00,0x90}, // JMP 6FA7BE40-6FA73A91 ;install freelibrary
{0xE8,0xAF,0x83,0x00,0x00,0x90}, // JMP 6FA7BE40-6FA73A91 ;install freelibrary {0xE8,0xAF,0x83,0x00,0x00,0x90}, // JMP 6FA7BE40-6FA73A91 ;install freelibrary
{0xE8,0xD2,0x83,0x00,0x00,0x90}, // JMP 6FA7BE44-6FA73A72 ;install freelibrary {0xE8,0xD2,0x83,0x00,0x00,0x90}, // JMP 6FA7BE44-6FA73A72 ;install freelibrary
{0xE8,0x75,0x43,0x00,0x00,0x90}, // JMP 6FA8CE44-6FA88ACF ;install freelibrary {0xE8,0x75,0x43,0x00,0x00,0x90}, // JMP 6FA8CE44-6FA88ACF ;install freelibrary
{0xE8,0x75,0x1A,0x00,0x00,0x90}, // JMP 6FA8CE44-6FA8B3CF ;install freelibrary {0xE8,0x75,0x1A,0x00,0x00,0x90}, // JMP 6FA8CE44-6FA8B3CF ;install freelibrary
{0xE8,0x35,0x3F,0x00,0x00,0x90}, // JMP 6FA8CE44-6FA88F0F ;install freelibrary {0xE8,0x35,0x3F,0x00,0x00,0x90}, // JMP 6FA8CE44-6FA88F0F ;install freelibrary
{0xE8,0x75,0x1A,0x00,0x00,0x90}, // JMP 6FA8CE44-6FA8B3CF ;install freelibrary {0xE8,0x75,0x1A,0x00,0x00,0x90}};// JMP 6FA8CE44-6FA8B3CF ;install freelibrary
{0xE8,0x95,0x24,0x00,0x00,0x90}};// JMP 6FA8CE44-6FA8B3CF ;install freelibrary BYTE callOldFree[7][6]={{0xFF,0x15,0x44,0xC0,0xA7,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
BYTE callOldFree[8][6]={{0xFF,0x15,0x44,0xC0,0xA7,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
{0xFF,0x15,0x44,0xC0,0xA7,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] {0xFF,0x15,0x44,0xC0,0xA7,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
{0xFF,0x15,0x48,0xC0,0xA7,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] {0xFF,0x15,0x48,0xC0,0xA7,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
{0xFF,0x15,0x2C,0xD1,0xA8,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] {0xFF,0x15,0x2C,0xD1,0xA8,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
{0xFF,0x15,0x2C,0xD1,0xA8,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] {0xFF,0x15,0x2C,0xD1,0xA8,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
{0xFF,0x15,0x2C,0xD1,0xA8,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] {0xFF,0x15,0x2C,0xD1,0xA8,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
{0xFF,0x15,0x2C,0xD1,0xA8,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] {0xFF,0x15,0x2C,0xD1,0xA8,0x6F}};// CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
{0xFF,0x15,0x24,0xD1,0xA8,0x6F}};// CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
int CALLER_LOADPLUGY = 0xBE00;//6FA7BE00-6FA70000 int CALLER_LOADPLUGY = 0xBE00;//6FA7BE00-6FA70000
BYTE caller_LoadPlugY[]={ BYTE caller_LoadPlugY[]={
@@ -114,9 +108,9 @@ enum eFileVersion
V111b, V111b,
V112, V112,
V113c, V113c,
V113d UNKNOW
}; };
/*
int getVersion(FILE *dll) int getVersion(FILE *dll)
{ {
int ver; int ver;
@@ -149,7 +143,7 @@ int getVersion(FILE *dll)
ver = UNKNOW; ver = UNKNOW;
return ver; return ver;
} }
*/
void updateData(int version) void updateData(int version)
{ {
@@ -170,7 +164,6 @@ void updateData(int version)
case V111b: case V111b:
case V112: case V112:
case V113c: case V113c:
case V113d:
CALLER_LOADPLUGY += 0x1000; CALLER_LOADPLUGY += 0x1000;
CALLER_FREEPLUGY += 0x1000; CALLER_FREEPLUGY += 0x1000;
S_INIT += 0x1000; S_INIT += 0x1000;
@@ -179,16 +172,9 @@ void updateData(int version)
*(DWORD*)(&caller_LoadPlugY[6]) = 0x6FA8D11C; *(DWORD*)(&caller_LoadPlugY[6]) = 0x6FA8D11C;
*(DWORD*)(&caller_LoadPlugY[18]) = 0x6FA8D11C; *(DWORD*)(&caller_LoadPlugY[18]) = 0x6FA8D11C;
*(DWORD*)(&caller_LoadPlugY[39]) = 0x6FA8D120; *(DWORD*)(&caller_LoadPlugY[39]) = 0x6FA8D120;
if (version == V113d)
{
*(DWORD*)(&caller_FreePlugY[6]) = 0x6FA8D124;
*(DWORD*)(&caller_FreePlugY[48]) = 0x6FA8D124;
} else
{
*(DWORD*)(&caller_FreePlugY[6]) = 0x6FA8D12C; *(DWORD*)(&caller_FreePlugY[6]) = 0x6FA8D12C;
*(DWORD*)(&caller_FreePlugY[48]) = 0x6FA8D12C;
}
*(DWORD*)(&caller_FreePlugY[36]) = 0x6FA8D120; *(DWORD*)(&caller_FreePlugY[36]) = 0x6FA8D120;
*(DWORD*)(&caller_FreePlugY[48]) = 0x6FA8D12C;
caller_LoadPlugY[13] += 0x10; caller_LoadPlugY[13] += 0x10;
caller_LoadPlugY[14]++; caller_LoadPlugY[14]++;
caller_LoadPlugY[25]++; caller_LoadPlugY[25]++;
@@ -206,18 +192,6 @@ void updateData(int version)
////////////////////////////// EXPORTED FUNCTIONS ////////////////////////////// ////////////////////////////// EXPORTED FUNCTIONS //////////////////////////////
int GetD2Ver()
{
char currentpath[MAX_PATH];
if (! GetD2Path(currentpath, MAX_PATH))
{
MessageBox(0,"Can't find path to Game.exe.",
boxNameInstall, MB_OK|MB_ICONEXCLAMATION);
exit(0);;
}
return GetD2Version(currentpath);
}
void Patch() void Patch()
{ {
if (MessageBox(0,"This programm will modify the D2gfx.dll file of the current directory.\n" if (MessageBox(0,"This programm will modify the D2gfx.dll file of the current directory.\n"
@@ -241,12 +215,9 @@ void Patch()
exit(0); exit(0);
} }
//int version = getVersion(dll); int version = getVersion(dll);
int version = GetD2Ver(); if (version == UNKNOW)
//if (version == UNKNOW)
if (version == -1)
{ {
MessageBox(0,"Bad version of D2gfx.dll.\n" MessageBox(0,"Bad version of D2gfx.dll.\n"
"You can try to uninstall any previous version of PlugY, The Survival Kit then retry.\n" "You can try to uninstall any previous version of PlugY, The Survival Kit then retry.\n"
@@ -370,11 +341,9 @@ void Unpatch()
exit(0); exit(0);
} }
//int version = getVersion(dll); int version = getVersion(dll);
int version = GetD2Ver();
//if (version == UNKNOW) if (version == UNKNOW)
if (version == -1)
{ {
MessageBox(0,"Bad version of D2gfx.dll.\n" MessageBox(0,"Bad version of D2gfx.dll.\n"
"You can try to uninstall any previous version of PlugY, The Survival Kit then retry.\n" "You can try to uninstall any previous version of PlugY, The Survival Kit then retry.\n"

View File

@@ -65,8 +65,8 @@ LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,5,0 FILEVERSION 1,0,4,0
PRODUCTVERSION 1,0,5,0 PRODUCTVERSION 1,0,4,0
FILEFLAGSMASK 0x17L FILEFLAGSMASK 0x17L
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@@ -81,10 +81,10 @@ BEGIN
BEGIN BEGIN
BLOCK "040c04b0" BLOCK "040c04b0"
BEGIN BEGIN
VALUE "FileVersion", "1.05" VALUE "FileVersion", "1.04"
VALUE "OriginalFilename", "PlugY_Install.exe" VALUE "OriginalFilename", "PlugY_Install.exe"
VALUE "ProductName", "PlugY Installation" VALUE "ProductName", "PlugY Installation"
VALUE "ProductVersion", "1.05" VALUE "ProductVersion", "1.04"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

Binary file not shown.

View File

@@ -269,14 +269,6 @@
RelativePath="PlugYInstall.cpp" RelativePath="PlugYInstall.cpp"
> >
</File> </File>
<Filter
Name="Commons"
>
<File
RelativePath="..\Commons\VersionInfo.cpp"
>
</File>
</Filter>
</Filter> </Filter>
<Filter <Filter
Name="Header Files" Name="Header Files"
@@ -286,14 +278,6 @@
RelativePath="resource.h" RelativePath="resource.h"
> >
</File> </File>
<Filter
Name="Commons"
>
<File
RelativePath="..\Commons\VersionInfo.h"
>
</File>
</Filter>
</Filter> </Filter>
<Filter <Filter
Name="Resource Files" Name="Resource Files"

View File

@@ -5,7 +5,7 @@
; ; ; ;
; by Yohann Nicolas ; ; by Yohann Nicolas ;
; ; ; ;
; version 10.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
@@ -28,6 +28,19 @@ ActiveCommands=1
ActiveCheckMemory=1 ActiveCheckMemory=1
[WINDOWED]
ActiveWindowed=0
RemoveBorder=1
WindowOnTop=1
Maximized=1
SetWindowPos=0
X=0
Y=0
Width=0
Height=0
LockMouseOnStartup=1
[LANGUAGE] [LANGUAGE]
;ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS ;ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS
ActiveChangeLanguage=0 ActiveChangeLanguage=0

View File

@@ -1,8 +1,8 @@
; File created by Yohann NICOLAS. ; File created by Yohann NICOLAS.
; Modified by L'Autour. !include "LogicLib.nsh"
!include "MUI2.nsh" !include "MUI2.nsh"
!define VERSION "11.00" !define VERSION "10.01"
!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"
@@ -12,14 +12,14 @@
!define MUI_COMPONENTSPAGE_SMALLDESC !define MUI_COMPONENTSPAGE_SMALLDESC
!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" !define MUI_LANGDLL_REGISTRY_KEY "SOFTWARE\${NAME}"
;!define MUI_LANGDLL_REGISTRY_KEY "SOFTWARE\${NAME}" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
;!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
!define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_UNFINISHPAGE_NOAUTOCLOSE !define MUI_UNFINISHPAGE_NOAUTOCLOSE
!define MUI_FINISHPAGE_SHOWREADME "$(README_FILENAME)" !define MUI_FINISHPAGE_SHOWREADME "$(README_FILENAME)"
!define MUI_FINISHPAGE_RUN "PlugY.exe" !define MUI_FINISHPAGE_RUN ;"PlugY.exe"
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchPlugY"
!define MUI_FINISHPAGE_RUN_NOTCHECKED !define MUI_FINISHPAGE_RUN_NOTCHECKED
!define MUI_FINISHPAGE_NOREBOOTSUPPORT !define MUI_FINISHPAGE_NOREBOOTSUPPORT
!define MUI_ABORTWARNING !define MUI_ABORTWARNING
@@ -27,7 +27,7 @@
Name "${NAME} v${VERSION}" Name "${NAME} v${VERSION}"
OutFile "PlugY_The_Survival_Kit_v${VERSION}.exe" OutFile "PlugY_The_Survival_Kit_v${VERSION}.exe"
InstallDirRegKey HKCU "${REGKEY}" "InstallPath" InstallDirRegKey HKLM "${REGKEY}" "InstallPath"
;-------------------------------- ;--------------------------------
; Pages ; Pages
@@ -47,66 +47,48 @@ InstallDirRegKey HKCU "${REGKEY}" "InstallPath"
; Languages ; Languages
!insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "Russian"
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_FRENCH} "Fichiers n<>cessaires.$\nPlugY.dll sera install<6C> dans le r<>pertoire de Diablo II." LangString DESC_CORE ${LANG_FRENCH} "Fichiers n<>cessaires.$\nPlugY.dll sera install<6C> dans le r<>pertoire de Diablo II."
LangString DESC_CORE ${LANG_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.$\nPlugY.dll <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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_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_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Diablo II <20> ${NAME}."
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_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_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>."
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_FRENCH} "Cr<EFBFBD>e un programme Windows de d<>sinstallation.$\nAjoute des cl<63>s de registres dans Windows." LangString DESC_UNINSTALLER ${LANG_FRENCH} "Cr<EFBFBD>e un programme Windows de d<>sinstallation.$\nAjoute des cl<63>s de registres dans Windows."
LangString DESC_UNINSTALLER ${LANG_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Windows <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.$\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Windows."
LangString DESC_PATCH_D2GFX ${LANG_ENGLISH} "D2gfx.dll patcher to run PlugY without PlugY.exe. Before use it, you MUST read the readme." LangString DESC_PATCH_D2GFX ${LANG_ENGLISH} "D2gfx.dll patcher to run PlugY without PlugY.exe. Before use it, you MUST read the readme."
LangString DESC_PATCH_D2GFX ${LANG_FRENCH} "D2gfx.dll patcheur pour lancer PlugY sans PlugY.exe. Avant de l'utiliser, vous DEVEZ lire le LISEZ-MOI." LangString DESC_PATCH_D2GFX ${LANG_FRENCH} "D2gfx.dll patcheur pour lancer PlugY sans PlugY.exe. Avant de l'utiliser, vous DEVEZ lire le LISEZ-MOI."
LangString DESC_PATCH_D2GFX ${LANG_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> D2gfx.dll <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PlugY <20><><EFBFBD> PlugY.exe. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> Readme."
LangString SECTION_NAME_CORE ${LANG_ENGLISH} "${NAME} (required)" LangString SECTION_NAME_CORE ${LANG_ENGLISH} "${NAME} (required)"
LangString SECTION_NAME_CORE ${LANG_FRENCH} "${NAME} (n<>cessaire)" LangString SECTION_NAME_CORE ${LANG_FRENCH} "${NAME} (n<>cessaire)"
LangString SECTION_NAME_CORE ${LANG_RUSSIAN} "${NAME} (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)"
LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_ENGLISH} "Desktop Shortcut" LangString SECTION_NAME_DESKTOP_SHORTCUT ${LANG_ENGLISH} "Desktop Shortcut"
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_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"
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_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_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
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_FRENCH} "D<EFBFBD>-installeur (ajoute cl<63>s de registre)" LangString SECTION_NAME_UNINSTALLER ${LANG_FRENCH} "D<EFBFBD>-installeur (ajoute cl<63>s de registre)"
LangString SECTION_NAME_UNINSTALLER ${LANG_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)"
LangString SECTION_PATCH_D2GFX ${LANG_ENGLISH} "D2gfx.dll Patcher (advanced user only)" LangString SECTION_PATCH_D2GFX ${LANG_ENGLISH} "D2gfx.dll Patcher (advanced user only)"
LangString SECTION_PATCH_D2GFX ${LANG_FRENCH} "Patcheur de D2gfx.dll (utilisateur avanc<6E> uniquement)" LangString SECTION_PATCH_D2GFX ${LANG_FRENCH} "Patcheur de D2gfx.dll (utilisateur avanc<6E> uniquement)"
LangString SECTION_PATCH_D2GFX ${LANG_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> D2gfx.dll Patcher (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)"
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_FRENCH} "PlugY_The_Survival_Kit_-_LisezMoi.txt" LangString README_FILENAME ${LANG_FRENCH} "PlugY_The_Survival_Kit_-_LisezMoi.txt"
LangString README_FILENAME ${LANG_RUSSIAN} "PlugY_The_Survival_Kit_-_Readme.txt"
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_FRENCH} "Erreur : Le r<>pertoire d'installation de Diablo II n'a pas <20>t<EFBFBD> trouv<75>.$\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 <20>t<EFBFBD> trouv<75>.$\nVeuillez r<>-installer votre copie de Diablo II - Lord of Destruction."
LangString ERROR_NO_D2_DIRECTORY_FOUND ${LANG_RUSSIAN} "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Diablo II <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.$\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Diablo II - Lord of Destruction."
;!insertmacro MUI_RESERVEFILE_LANGDLL
Var D2Path Var D2Path
;-------------------------------- ;--------------------------------
; Initialisation ; Initialisation
Function .onInit Function .onInit
!define MUI_LANGDLL_WINDOWTITLE "${NAME} v${VERSION}" !define MUI_LANGDLL_WINDOWTITLE "${NAME} v${VERSION}"
!define MUI_LANGDLL_INFO "Select your language:$\nChoisissez votre langue:$\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>:" !define MUI_LANGDLL_INFO "Select your language:$\nChoisissez votre langue:"
!insertmacro MUI_LANGDLL_DISPLAY !insertmacro MUI_LANGDLL_DISPLAY
!undef MUI_LANGDLL_WINDOWTITLE !undef MUI_LANGDLL_WINDOWTITLE
!undef MUI_LANGDLL_INFO !undef MUI_LANGDLL_INFO
ReadRegStr $D2Path HKLM "SOFTWARE\Blizzard Entertainment\Diablo II" "InstallPath" ReadRegStr $D2Path HKLM "SOFTWARE\Blizzard Entertainment\Diablo II" "InstallPath"
${If} $D2Path == ""
ReadRegStr $D2Path HKCU "SOFTWARE\Blizzard Entertainment\Diablo II" "InstallPath"
${If} $D2Path == "" ${If} $D2Path == ""
MessageBox MB_OK $(ERROR_NO_D2_DIRECTORY_FOUND) MessageBox MB_OK $(ERROR_NO_D2_DIRECTORY_FOUND)
Abort Abort
${EndIf} ${EndIf}
${EndIf}
${If} $INSTDIR == "" ${If} $INSTDIR == ""
StrLen $0 $D2Path StrLen $0 $D2Path
@@ -125,6 +107,11 @@ Function Un.onInit
ReadRegStr $D2Path HKLM "${REGKEY}" "PlugYDllPath" ReadRegStr $D2Path HKLM "${REGKEY}" "PlugYDllPath"
FunctionEnd FunctionEnd
Function LaunchPlugY
SetOutPath "$INSTDIR"
ExecShell "" "$INSTDIR\PlugY.exe"
FunctionEnd
;-------------------------------- ;--------------------------------
; Custom Page ; Custom Page
;Function OptionsPage ;Function OptionsPage
@@ -170,9 +157,7 @@ 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"
;File "${D2FILES}\PlugY_The_Survival_Kit_-_<><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.txt" setOutPath "$INSTDIR\PlugY"
CreateDirectory "$D2Path\PlugY"
setOutPath "$D2Path\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"
@@ -183,8 +168,6 @@ Section "!$(SECTION_NAME_CORE)" Core
File "${D2FILES}\PlugY\TradeStash.dc6" File "${D2FILES}\PlugY\TradeStash.dc6"
File "${D2FILES}\PlugY\UnassignSkillsBtns.dc6" File "${D2FILES}\PlugY\UnassignSkillsBtns.dc6"
File "${D2FILES}\PlugY\UnassignStatsBtns.dc6" File "${D2FILES}\PlugY\UnassignStatsBtns.dc6"
File "${D2FILES}\PlugY\PlugYLocal.dll"
File "${D2FILES}\PlugY\PlugYLocal.ini"
SectionEnd SectionEnd
Section "$(SECTION_NAME_DESKTOP_SHORTCUT)" DesktopShortcuts Section "$(SECTION_NAME_DESKTOP_SHORTCUT)" DesktopShortcuts
@@ -197,7 +180,7 @@ Section $(SECTION_NAME_STARTMENU_SHORTCUTS) MenuShortcuts
SectionIn 1 SectionIn 1
CreateDirectory "$SMPROGRAMS\${NAME}" CreateDirectory "$SMPROGRAMS\${NAME}"
SetOutPath $INSTDIR SetOutPath $INSTDIR
CreateShortCut "$SMPROGRAMS\${NAME}\Uninstall.lnk" "$INSTDIR\${UNINSTALL_FILE}" "" "$INSTDIR\${UNINSTALL_FILE}" 0 CreateShortCut "$SMPROGRAMS\${NAME}\Uninstaller.lnk" "$INSTDIR\${UNINSTALL_FILE}" "" "$INSTDIR\${UNINSTALL_FILE}" 0
CreateShortCut "$SMPROGRAMS\${NAME}\${NAME}.lnk" "$INSTDIR\PlugY.exe" "" "$INSTDIR\PlugY.exe" 0 CreateShortCut "$SMPROGRAMS\${NAME}\${NAME}.lnk" "$INSTDIR\PlugY.exe" "" "$INSTDIR\PlugY.exe" 0
SectionEnd SectionEnd
@@ -209,13 +192,13 @@ Section $(SECTION_NAME_UNINSTALLER) Uninstaller
WriteUninstaller "${UNINSTALL_FILE}" WriteUninstaller "${UNINSTALL_FILE}"
; Write the installation path into the registry ; Write the installation path into the registry
WriteRegStr HKLM "${REGKEY}" "InstallPath" "$INSTDIR" WriteRegStr HKLM "${REGKEY}" "InstallPath" $INSTDIR
WriteRegStr HKLM "${REGKEY}" "PlugYDllPath" "$D2Path" WriteRegStr HKLM "${REGKEY}" "PlugYDllPath" "$D2Path"
; Write the uninstall keys for Windows ; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "InstallLocation" "$$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "InstallLocation" "$$INSTDIR"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayName" "${NAME}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayName" "${NAME}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "HelpLink" "http://djaftal.chez-alice.fr/" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "HelpLink" "http://plugy.free.fr"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayVersion" "${VERSION}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "UninstallString" '"$INSTDIR\${UNINSTALL_FILE}"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "UninstallString" '"$INSTDIR\${UNINSTALL_FILE}"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "NoModify" 1
@@ -246,11 +229,11 @@ Section "Uninstall" Uninstall
Delete "$D2Path\RestoreD2gfxDll.exe" Delete "$D2Path\RestoreD2gfxDll.exe"
Delete "$INSTDIR\PlugY.exe" Delete "$INSTDIR\PlugY.exe"
Delete "$INSTDIR\PlugY.log" Delete "$INSTDIR\PlugY.log"
Delete "$INSTDIR\BnetLog.txt"
Delete "$INSTDIR\PlugY.ini" Delete "$INSTDIR\PlugY.ini"
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_-_<><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.txt"
Delete "$INSTDIR\PlugY\EmptyPage.dc6" Delete "$INSTDIR\PlugY\EmptyPage.dc6"
Delete "$INSTDIR\PlugY\PlugYDefault.ini" Delete "$INSTDIR\PlugY\PlugYDefault.ini"
Delete "$INSTDIR\PlugY\PlugYFixed.ini" Delete "$INSTDIR\PlugY\PlugYFixed.ini"
@@ -261,8 +244,6 @@ Section "Uninstall" Uninstall
Delete "$INSTDIR\PlugY\TradeStash.dc6" Delete "$INSTDIR\PlugY\TradeStash.dc6"
Delete "$INSTDIR\PlugY\UnassignSkillsBtns.dc6" Delete "$INSTDIR\PlugY\UnassignSkillsBtns.dc6"
Delete "$INSTDIR\PlugY\UnassignStatsBtns.dc6" Delete "$INSTDIR\PlugY\UnassignStatsBtns.dc6"
Delete "$INSTDIR\PlugY\PlugYLocal.dll"
Delete "$INSTDIR\PlugY\PlugYLocal.ini"
RMDir "$INSTDIR\PlugY" RMDir "$INSTDIR\PlugY"
Delete "$INSTDIR\${UNINSTALL_FILE}" Delete "$INSTDIR\${UNINSTALL_FILE}"
RMDir "$INSTDIR" RMDir "$INSTDIR"

View File

@@ -5,7 +5,7 @@
; ; ; ;
; by Yohann Nicolas ; ; by Yohann Nicolas ;
; ; ; ;
; version 10.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
@@ -25,6 +25,19 @@ ActiveCheckMemory=1
ActiveAllOthersFeatures=0 ActiveAllOthersFeatures=0
[WINDOWED]
ActiveWindowed=0
RemoveBorder=0
WindowOnTop=0
Maximized=0
SetWindowPos=0
X=0
Y=0
Width=0
Height=0
LockMouseOnStartup=0
[LANGUAGE] [LANGUAGE]
;ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS ;ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS
ActiveChangeLanguage=0 ActiveChangeLanguage=0

View File

@@ -6,7 +6,7 @@
; ; ; ;
; by Yohann Nicolas ; ; by Yohann Nicolas ;
; ; ; ;
; version 10.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
@@ -16,6 +16,8 @@
[GENERAL] [GENERAL]
[WINDOWED]
[LANGUAGE] [LANGUAGE]
[SAVEPATH] [SAVEPATH]

File diff suppressed because it is too large Load Diff

View File

@@ -3,8 +3,8 @@
; "PlugY, The Survival Kit" ; ; "PlugY, The Survival Kit" ;
; ; ; ;
; von Yohann Nicolas ; ; von Yohann Nicolas ;
; (Modifizierung durch L'Autour) ; ; ;
; version 11.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
@@ -13,13 +13,15 @@ You can make a donation if you want.
WARNUNG: WARNUNG:
- Dieses Plug-In ist NUR f<>r LOD 1.09 zu 1.13d ! - Dieses Plug-In ist NUR f<>r LOD 1.09 zu 1.13c !
- 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<65>ndert haben, benutzt keine alten Dateien! - Alle Dateien k<>nnen sich seit der letzten Version ver<65>ndert haben, benutzt keine alten Dateien!
- Bitte benutzt eine neue D2gfx.dll bevor ihr das PlugY benutzt (Kann man auf http://d2mods.com downloaden) - Bitte benutzt eine neue D2gfx.dll bevor ihr das PlugY benutzt (Kann man auf http://d2mods.com downloaden)
- PlugY.ini wurde stark ver<65>ndert, bitte nehmt die Neue! - PlugY.ini wurde stark ver<65>ndert, bitte nehmt die Neue!
- Vergesst nicht den Teil: "Kommentare zur Konfigurations-Datei" zu lesen. - Vergesst nicht den Teil: "Kommentare zur Konfigurations-Datei" zu lesen.
- Bitte lest im PlugY-Forum: http://d2mods.info/forum/viewforum.php?f=133 - Bitte lest im PlugY-Forum:
http://d2mods.info/forum/viewforum.php?f=133
******** ALLE FUNKTIONEN ******** ******** ALLE FUNKTIONEN ********
- Disable access to Battle.net via main menu button. - Disable access to Battle.net via main menu button.
@@ -40,27 +42,49 @@ WARNUNG:
- Man kann das "SAVE" Verzeichnis <20>ndern. - Man kann das "SAVE" Verzeichnis <20>ndern.
- Man kann die Versionsanzeige im Hauptbildschirm anpassen. - Man kann die Versionsanzeige im Hauptbildschirm anpassen.
- Diablo kann nun auf Text-Dateien laden die von Microsoft Excel ge<67>ffnet sind. - Diablo kann nun auf Text-Dateien laden die von Microsoft Excel ge<67>ffnet sind.
- Lokalisiert in Englisch, Franzosisch, Deutsch, Italienisch, Spanisch, Polnisch, *Portugiesisch, Japanisch, Koreanisch, Chinesisch, Polnisch, *Russisch. - Lokalisiert in Englisch, Franz<EFBFBD>sisch, Deutsch, Italienisch, Spanisch, Polnisch.
(* - hat informelle Lokalisierung des Spiels verlangt.) - Add following commands (the corresponding functions must be enabled in PlugY.ini) :
/save : Save game without exit.
/reload : Reload gamble page.
/page 1 : Show normal stats page (stats page must be opened, space not mandatory).
/page 2 : Show extra stats page (stats page must be opened, space not mandatory).
/page 3 : Show resistance stats page (stats page must be opened, space not mandatory).
/page 4 : (beta) Show available runewords (stats page must be opened, space not mandatory).
/lockmouse : Lock mouse cursor in the window.
/lock : same as /lockmouse.
/pagename name : (beta) Rename current page stash (the new name isn't saved).
/swap page : Swap the content of current stash page with the content of another page (space not mandatory).
/toggle page : Swap the content of current stash page with the content of another page in opposing stash shared/personal (space not mandatory).
/dlm : Toggle always display mana and life mode. (Since 1.13c, you can click on the bottom of each orbs)
/dml : Same as /dlm.
/dl : Toggle always display life mode. (Since 1.13c, you can click on the bottom of the orb)
/dm : Toggle always display mana mode. (Since 1.13c, you can click on the bottom of the orb)
/rename newname : (beta) rename your character and save it. (You must exit the game to update the stats page.)
/listcube : (beta) Create a "cube.txt" file in current directory containing all cube's receipts.
/maxgold : CHEAT don't use in normal game. Set personnal stash, shared stash and character to max gold.
v11.00 <20>nderungen : v10.01 <20>nderungen :
- PlugY funktioniert nun auch mit LoD 1.13d Versionen. - Add windowed mode.
- Voller support fur verschiedene sprachen im spiel. - Can lock mouse cursor in the window (windowed mode).
- Can remove border (windowed mode).
- Can resize or maximize window (windowed mode).
- Can fix window above any others windows including taskbar (windowed mode).
- Can lock mouse cursor in the windows on startup and with command "/lockmouse" or "/lock" (windowed mode).
- Add command "/swap page" to swap the content of current stash page with the content of another page.
- Add command "/toggle page" to swap the content of current stash page with the content of another page in opposing stash shared/personal.
- Add command "/rename newname" to rename your character. This feature is still in beta and you must exit the game to update the stats page.
v10.00 <20>nderungen : v10.00 <20>nderungen :
- Disable access to Battle.net via main menu button. - Disable access to Battle.net via main menu button.
- 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 <20>nderungen : v9.00 <20>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<65>gt. - Eine neue M<>glichkeit zum Skills neuverteilen in Mods hinzugef<65>gt.
v8.00 <20>nderungen : v8.00 <20>nderungen :
- Einfachere Installation : Neuer Installer. - Einfachere Installation : Neuer Installer.
- Das Portal zum Cow-Level kann nun ge<67>ffnet werden auch wenn der Spieler den Cow-King in der aktuellen Schwierigkeit bereits get<65>tet hat. - Das Portal zum Cow-Level kann nun ge<67>ffnet werden auch wenn der Spieler den Cow-King in der aktuellen Schwierigkeit bereits get<65>tet hat.
@@ -71,12 +95,10 @@ v8.00
- 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 gepachtt war, wurde entfernt. - Die "check load memory failed" Meldung, wenn die D2gfx.dll gepachtt war, wurde entfernt.
v7.01b <20>nderungen : v7.01b <20>nderungen :
- Behoben : Die Ladder-only Runenwortfeatures in den LoD-Versionen 1.11 und 1.10. - Behoben : Die Ladder-only Runenwortfeatures in den LoD-Versionen 1.11 und 1.10.
- Behoben : Seltsame Zeichen in manchen Texten. - Behoben : Seltsame Zeichen in manchen Texten.
v7.01 <20>nderungen : v7.01 <20>nderungen :
- Die Ladder-Only Runenw<6E>rter k<>nnen f<>r den Singleplayer aktivert werden. - Die Ladder-Only Runenw<6E>rter k<>nnen f<>r den Singleplayer aktivert werden.
- Fehler bei der AI des <20>berbaals behoben - Fehler bei der AI des <20>berbaals behoben
@@ -85,7 +107,6 @@ v7.01
- Eine eigene EXE wurde hinzugef<65>gt um PlugY zu starten (es werden keine LoD-Dateien mehr ver<65>ndert) - Eine eigene EXE wurde hinzugef<65>gt um PlugY zu starten (es werden keine LoD-Dateien mehr ver<65>ndert)
- Spanische und Polnische <20>bersetzung hinzugef<65>gt. - Spanische und Polnische <20>bersetzung hinzugef<65>gt.
V7.00 <20>nderungen : V7.00 <20>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<75>bertext hinzugef<65>gt. - Den Basiswert f<>r jeden Stat im Maus<75>bertext hinzugef<65>gt.
@@ -93,17 +114,14 @@ V7.00
- Behoben: Einige Features blieben auch im Battle.net aktiviert - Behoben: Einige Features blieben auch im Battle.net aktiviert
- Italienische <20>bersetzung hinzugef<65>gt. - Italienische <20>bersetzung hinzugef<65>gt.
v6.01b <20>nderungen : v6.01b <20>nderungen :
- Fehler mit dem Popups der Statuspunktvergabe-Buttons behoben. - Fehler mit dem Popups der Statuspunktvergabe-Buttons behoben.
v6.01 <20>nderungen : v6.01 <20>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<68>ssel und Uber-Organe werden nicht mehr entfernt wenn man das rote Portal ausserhalb von Harrogath <20>ffnen wollte. - Schl<68>ssel und Uber-Organe werden nicht mehr entfernt wenn man das rote Portal ausserhalb von Harrogath <20>ffnen wollte.
- Fehler in der Versionsanzeige wegen einem Konflikt mit D2Mod behoben. - Fehler in der Versionsanzeige wegen einem Konflikt mit D2Mod behoben.
V6.00 <20>nderungen : V6.00 <20>nderungen :
- PlugY funktioniert nun auch mit LoD 1.11 Versionen - PlugY funktioniert nun auch mit LoD 1.11 Versionen
- Freischaltung des <20>ber-Quests ausserhalb von der Realm (LoD 1.11 only). - Freischaltung des <20>ber-Quests ausserhalb von der Realm (LoD 1.11 only).
@@ -111,14 +129,12 @@ V6.00
- Kleine Fehler behoben, und kleine Verbesserungen eingebaut - Kleine Fehler behoben, und kleine Verbesserungen eingebaut
- "/save"-Befehl hinzugef<65>gt um das Spiel zu speichern ohne es zu verlassen (nur LoD 1.11). - "/save"-Befehl hinzugef<65>gt um das Spiel zu speichern ohne es zu verlassen (nur LoD 1.11).
v5.06 <20>nderungen : v5.06 <20>nderungen :
- Kn<4B>pf for gemeinsamen Goldvorrat hinzugef<65>gt. - Kn<4B>pf for gemeinsamen Goldvorrat hinzugef<65>gt.
- Gemeinsamer Goldvorrat in Multiplayer hinzugef<65>gt. - Gemeinsamer Goldvorrat in Multiplayer hinzugef<65>gt.
- Befehl "/DisplayLifeMana" ersetzt durch "/dlm". - Befehl "/DisplayLifeMana" ersetzt durch "/dlm".
- Diverse Fehler behoben. - Diverse Fehler behoben.
v5.05 <20>nderungen : v5.05 <20>nderungen :
- Standard Hintergrundfarbe im Status Interface ge<67>ndert - Standard Hintergrundfarbe im Status Interface ge<67>ndert
- Gemeinsames Gold per Kommando hinzugef<65>gt. - Gemeinsames Gold per Kommando hinzugef<65>gt.
@@ -126,24 +142,20 @@ v5.05
- M<>glichkeit die Namen von Setgegenst<73>nd in Gr<47>n bei Mouseover in der gemeinsamen Kiste anzuzeigen - M<>glichkeit die Namen von Setgegenst<73>nd in Gr<47>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 <20>nderungen : v5.04 <20>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<73>ndig. - PlugY/PlugYDefault.ini sind jetzt vollst<73>ndig.
v5.03 <20>nderungen : v5.03 <20>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<72>nderung der Schrift in den Extra-Seiten m<>glich. - Farb<72>nderung der Schrift in den Extra-Seiten m<>glich.
- Standartwerte in den Extra-Seiten ge<67>ndert. - Standartwerte in den Extra-Seiten ge<67>ndert.
- EnabledTXTFilesWhenMSExcelOpenIt in der PlugY.ini ist nun standartm<74><6D>ig aktiviert. - EnabledTXTFilesWhenMSExcelOpenIt in der PlugY.ini ist nun standartm<74><6D>ig aktiviert.
v5.02 <20>nderungen : v5.02 <20>nderungen :
- Behoben : Bug der das Verschwinden von Gegenst<73>nden hervorgerufen hat. - Behoben : Bug der das Verschwinden von Gegenst<73>nden hervorgerufen hat.
v5.01 <20>nderungen : v5.01 <20>nderungen :
- Behoben : Gr<47><72>ere bugs bei der gemeinsamen Truhe. - Behoben : Gr<47><72>ere bugs bei der gemeinsamen Truhe.
- Behoben : ActiveLogFile ist jetzt in der PlugY.ini standartm<74><6D>ig deaktiviert. - Behoben : ActiveLogFile ist jetzt in der PlugY.ini standartm<74><6D>ig deaktiviert.
@@ -164,14 +176,12 @@ v5.00
- 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 <20>nderungen : v4.04 <20>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<73>hlen, ob die Mana und Lebens Anzeige immer <20>ber den Kugeln erscheint. - Man kann ausw<73>hlen, ob die Mana und Lebens Anzeige immer <20>ber den Kugeln erscheint.
v4.03 <20>nderungen v4.03 <20>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)
@@ -181,11 +191,9 @@ v4.03
- Button f<>r die zus<75>tzlichen Status Seiten an die gleiche Stelle verschoben, wie die original Buttons (nur in 800x600) - Button f<>r die zus<75>tzlichen Status Seiten an die gleiche Stelle verschoben, wie die original Buttons (nur in 800x600)
- Man kann ausw<73>hlen, ob die zuletzt angezeigte Seite erscheint, oder die Hauptseite - Man kann ausw<73>hlen, ob die zuletzt angezeigte Seite erscheint, oder die Hauptseite
v4.02b <20>nderungen : v4.02b <20>nderungen :
- Behoben : Alle Funktionen bleiben im offenen Battle.net eingeschaltet. - Behoben : Alle Funktionen bleiben im offenen Battle.net eingeschaltet.
v4.02 <20>nderungen : v4.02 <20>nderungen :
- Behoben : Das vergessene "d" in "SeparateHardcoreStash=1" in der PlugY.ini erg<72>nzt - Behoben : Das vergessene "d" in "SeparateHardcoreStash=1" in der PlugY.ini erg<72>nzt
- Behoben : Standardm<64>ssig wird dei Sprache in der PlugY.ini nicht ge<67>ndert. - Behoben : Standardm<64>ssig wird dei Sprache in der PlugY.ini nicht ge<67>ndert.
@@ -215,29 +223,24 @@ v4.00
- Behoben : Diablo Clone kann nicht mehr in Normal und Albtraum erscheinen - Behoben : Diablo Clone kann nicht mehr in Normal und Albtraum erscheinen
- Behoben : Zerst<73>rung von zus<75>tzlichen Minions wenn man Fertigkeitspukte zur<75>cksetzt - Behoben : Zerst<73>rung von zus<75>tzlichen Minions wenn man Fertigkeitspukte zur<75>cksetzt
v3.02 <20>nderungen : v3.02 <20>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 Charkter nicht geladen werden konnte. - Fehler behoben der verhinderte das bei abgeschalteter gemeinsamer Kiste ein Charkter 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 <20>nderungen : v3.01 <20>nderungen :
- Man kann die Statuspunkte <20>ndern, die man beim LevelUp bekommt. - Man kann die Statuspunkte <20>ndern, die man beim LevelUp bekommt.
- Problem mit fehlerhafter Menge der Fertigkeitspunkte beim zur<75>cksetzen behoben. - Problem mit fehlerhafter Menge der Fertigkeitspunkte beim zur<75>cksetzen behoben.
- Konfigurationsparameter f<>r den World Event hinzugef<65>gt - Konfigurationsparameter f<>r den World Event hinzugef<65>gt
- Standardm<64>ssig wird nur inH<6E>lle der World Event Z<>hler gezeigt "X SOJ verkauft". - Standardm<64>ssig wird nur inH<6E>lle der World Event Z<>hler gezeigt "X SOJ verkauft".
v3.00 <20>nderungen : v3.00 <20>nderungen :
- Lokaler World Event ! - Lokaler World Event !
- Zur<75>cksetzen von Fertigkeitspunkten - Zur<75>cksetzen von Fertigkeitspunkten
v2.05 <20>nderungen : v2.05 <20>nderungen :
- Wichtiger Ffix : Alle Fehler die einen Start von Diablo2 verhinderten sind entfernt - Wichtiger Ffix : Alle Fehler die einen Start von Diablo2 verhinderten sind entfernt
v2.04 <20>nderungen : v2.04 <20>nderungen :
- Das zur<75>cksetzen der Statuspunkte, sowie die Fertigkeiten pro LevelUp werden abgeschaltet, wenn man sich in ein Realm-Spiel einklinkt (wie bei der Goldkiste die Kn<4B>pfe) - Das zur<75>cksetzen der Statuspunkte, sowie die Fertigkeiten pro LevelUp werden abgeschaltet, wenn man sich in ein Realm-Spiel einklinkt (wie bei der Goldkiste die Kn<4B>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
@@ -245,11 +248,9 @@ v2.04
- Einen Fehler bez<65>glich der verschwindenden Kn<4B>pfe behoben - Einen Fehler bez<65>glich der verschwindenden Kn<4B>pfe behoben
- Abspeicher-Problem unter Win95/98/Me behoben - Abspeicher-Problem unter Win95/98/Me behoben
v2.03b <20>nderungen : v2.03b <20>nderungen :
- Anzeige der PlugY Version nur im Hauptbild - Anzeige der PlugY Version nur im Hauptbild
v2.03 <20>nderungen : v2.03 <20>nderungen :
- Wichtigster Fix : Die Abspeicher-Routine ge<67>ndert, damit bei einem Spiel-Absturz keine Items in der Kiste verloren gehen, und der Charakter korrupt wird. - Wichtigster Fix : Die Abspeicher-Routine ge<67>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.
@@ -257,7 +258,6 @@ v2.03
- Die Versionsanzeige auf der Hauptseite ge<67>ndert (PlugY Version jetzt rechts, und Farben sind nun m<>glich) - Die Versionsanzeige auf der Hauptseite ge<67>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-Spilern. - Charaktere ohne PlugY k<>nnen nun an Spielen teilnehmen die gehosted werden von PlugY-Spilern.
v2.02 <20>nderungen : v2.02 <20>nderungen :
- PlugY nutzt die D2win.dll nicht mehr zum laden. - PlugY nutzt die D2win.dll nicht mehr zum laden.
- PlugY enth<74>lt einen Patcher/Ent-Patcher um die D2gfx.dll so zu ver<65>ndern, das PlugY gestartet wird. - PlugY enth<74>lt einen Patcher/Ent-Patcher um die D2gfx.dll so zu ver<65>ndern, das PlugY gestartet wird.
@@ -265,12 +265,10 @@ v2.02
- Die Goldkistenerweiterung wird bei Realm Spielen automatisch abgeschaltet. - Die Goldkistenerweiterung wird bei Realm Spielen automatisch abgeschaltet.
- Index Button Fehler behoben. - Index Button Fehler behoben.
v.2.01 <20>nderungen v.2.01 <20>nderungen
- Fertigkeitsfehler beim LevelUp behoben. - Fertigkeitsfehler beim LevelUp behoben.
- Anzeigefehler im Hauptbildschirm behoben. - Anzeigefehler im Hauptbildschirm behoben.
v2.00 <20>nderungen : v2.00 <20>nderungen :
- Deutsche Lokalisierung hinzugef<65>gt. - Deutsche Lokalisierung hinzugef<65>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.
@@ -287,19 +285,16 @@ v2.00
- Der Fehler mir carry1 Gegenst<73>nden wurde behoben (Uniques die nur einaml getragen werden d<>rfen) - Der Fehler mir carry1 Gegenst<73>nden wurde behoben (Uniques die nur einaml getragen werden d<>rfen)
- Weitere kleine Verbesserungen eingebaut. - Weitere kleine Verbesserungen eingebaut.
v1.03 <20>nderungen : v1.03 <20>nderungen :
- Franz<6E>sische Liesmich- und Ini-Datei hinzugef<65>gt. - Franz<6E>sische Liesmich- und Ini-Datei hinzugef<65>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 <20>nderungen : v1.02 <20>nderungen :
- Dateinamen ge<67>ndert wegen eines Fehlers mit dem IE und ZIP-Files - Dateinamen ge<67>ndert wegen eines Fehlers mit dem IE und ZIP-Files
- Man kann die Versions-Information im Hauptbildschirm <20>ndern (siehe Ini-Datei). - Man kann die Versions-Information im Hauptbildschirm <20>ndern (siehe Ini-Datei).
v1.01 <20>nderungen : v1.01 <20>nderungen :
- Franz<6E>sische Lokalisierung hinzugef<65>gt (Franz<6E>sisches Liesmich.txt folgt) - Franz<6E>sische Lokalisierung hinzugef<65>gt (Franz<6E>sisches Liesmich.txt folgt)
- Dateinamen von "PlugY, The Survival Kit.ini" in "PlugY,The_Survival_Kit" ge<67>ndert. - Dateinamen von "PlugY, The Survival Kit.ini" in "PlugY,The_Survival_Kit" ge<67>ndert.
@@ -309,7 +304,6 @@ v1.01
(Man kann ihn weiterhin hinzuf<75>gen, sollte aber wissen, was man tut...) (Man kann ihn weiterhin hinzuf<75>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<73>nde verschieben zu m<>ssen. - Man kann jeden MOD starten, ohne die gesicherten Spielst<73>nde verschieben zu m<>ssen.
@@ -327,8 +321,6 @@ v1.00 Funktionen (es k
- PlugY.exe - PlugY.exe
- PlugY.dll (in Diablo II directory) - PlugY.dll (in Diablo II directory)
- PlugY.ini - PlugY.ini
- Plugy\PlugYLocal.dll
- Plugy\PlugYLocal.ini
- PlugY\PlugYFixed.ini - PlugY\PlugYFixed.ini
- PlugY\PlugYDefault.ini - PlugY\PlugYDefault.ini
- PlugY\EmptyPage.dc6 - PlugY\EmptyPage.dc6
@@ -346,11 +338,6 @@ v1.00 Funktionen (es k
******** INSTALLATION ******** ******** INSTALLATION ********
- The officials sites are :
http://djaftal.chez-alice.fr/
http://d2mods.info/forum/viewforum.php?f=133
http://diablo2.judgehype.com/index.php?page=telechargements
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.
@@ -362,8 +349,6 @@ 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 : 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\PlugYLocal.dll
C:\Games\Diablo II\PlugY\PlugYLocal.ini
C:\Games\Diablo II\PlugY\EmptyPage.dc6 C:\Games\Diablo II\PlugY\EmptyPage.dc6
C:\Games\Diablo II\PlugY\SharedGoldBtns.dc6 C:\Games\Diablo II\PlugY\SharedGoldBtns.dc6
C:\Games\Diablo II\PlugY\StashBtns.dc6 C:\Games\Diablo II\PlugY\StashBtns.dc6
@@ -540,6 +525,30 @@ Nur Ausschalten wenn du weist was du machst.
- ActiveCheckMemory=1 - ActiveCheckMemory=1
[WINDOWED]
Launch in windowed mode.
- ActiveWindowed=0 {0:Disabled; 1:Enabled}
Remove border in windowed mode.
- RemoveBorder=0 {0:Disabled; 1:Enabled}
Set window at most top (above taskbar) in windowed mode.
- WindowOnTop=0 {0:Disabled; 1:Enabled}
Maximized and center window (keep ratio 4/3) in windowed mode (if SetWindowPos=0).
- Maximized=0 {0:Disabled; 1:Enabled}
Set position and size of the window in windowed mode.
- SetWindowPos=0 {0:Disabled; 1:Enabled}
- X=0 {0:Window Position X}
- Y=0 {0:Window Position Y}
- Width=0 {0:Window Width}
- Height=0 {0:Window Height}
Lock cursor mouse in the window in windowed mode.
- LockMouseOnStartup=0 {0:Disabled; 1:Enabled}
[LANGUAGE] [LANGUAGE]
Wechselt die ausgew<65>hlte Sprache Wechselt die ausgew<65>hlte Sprache
Ihr m<>sst die Dateien der Sprache besitzen!!! Ihr m<>sst die Dateien der Sprache besitzen!!!
@@ -759,10 +768,6 @@ Zur Korrektur der deutschen
* Deutch : ChaosEnergy, TheMasterCaster. * Deutch : ChaosEnergy, TheMasterCaster.
* Italienisch : ItalianPlayer * Italienisch : ItalianPlayer
* Spanish : Acrerune * Spanish : Acrerune
* Polnisch : Serdel + https://translate.google.com * Polnisch : Serdel
* Russisch: L'Autour.
* Portugiesisch: https://translate.google.com ;--------------------------------------------------------------------------------------;
* Japanisch: https://translate.google.com
* Koreanisch: https://translate.google.com
* Chinesisch: https://translate.google.com
~~~~~~~~~~~~.

View File

@@ -3,8 +3,8 @@
; "PlugY, The Survival Kit" ; ; "PlugY, The Survival Kit" ;
; ; ; ;
; par Yohann Nicolas ; ; par Yohann Nicolas ;
; (modification par L'Autour) ; ; ;
; version 11.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
@@ -14,7 +14,7 @@ Vous pouvez y faire un don si vous le souhaitez.
******** ATTENTION ******** ******** ATTENTION ********
- Ce plugin fonctionne sur LoD version 1.09 <20> 1.13d et sur leurs mods. - Ce plugin fonctionne sur LoD version 1.09 <20> 1.13c et sur leurs mods.
- Ce plugin ne fonctionne pas sur les royaumes (Battle.net ou priv<69>). - Ce plugin ne fonctionne pas sur les royaumes (Battle.net ou priv<69>).
- Tous les fichiers ont chang<6E>s depuis les versions pr<70>c<EFBFBD>dentes, donc d<>installer toutes les versions pr<70>c<EFBFBD>dentes. - Tous les fichiers ont chang<6E>s depuis les versions pr<70>c<EFBFBD>dentes, donc d<>installer toutes les versions pr<70>c<EFBFBD>dentes.
- S'il vous plait, utilis<69> le D2gfx.dll non modifi<66> avant de rapporter une erreur. - S'il vous plait, utilis<69> le D2gfx.dll non modifi<66> avant de rapporter une erreur.
@@ -28,8 +28,8 @@ Vous pouvez y faire un don si vous le souhaitez.
******** CARACTERISTIQUES ******** ******** CARACTERISTIQUES ********
- D<>sactive l'acc<63>s <20> Battle.net - D<>sactive l'acc<63>s <20> Battle.net
- Espace de stockage infini dans le coffre (jusqu'<27> 4 294 967 296 pages personnelles!) - Espace de stockage infini dans le coffre !
- Espace de stockage partag<61> dans le coffre (jusqu'<27> 4 294 967 296 pages partag<61>es aussi!) - Espace de stockage partag<61> dans le coffre !
- Active les mots runiques du ladder en dehors des royaumes. - Active les mots runiques du ladder en dehors des royaumes.
- 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 multijoueur hors royaumes !
- Permet d'ouvrir le portail vers le Cow Level m<>me quand on a tuer le Cow King dans cette difficult<6C>. - Permet d'ouvrir le portail vers le Cow Level m<>me quand on a tuer le Cow King dans cette difficult<6C>.
@@ -46,23 +46,48 @@ Vous pouvez y faire un don si vous le souhaitez.
- D2 peut charger tout les fichiers, m<>me ceux ouvert par Microsoft Excel (d<>sactiv<69> par defaut). - D2 peut charger tout les fichiers, m<>me ceux ouvert par Microsoft Excel (d<>sactiv<69> par defaut).
- Affiche la valeur courante des caracs (sans les bonus magiques). - Affiche la valeur courante des caracs (sans les bonus magiques).
- Localis<69> en fran<61>ais, anglais, allemand, italien, espagnol et polonais. - Localis<69> en fran<61>ais, anglais, allemand, italien, espagnol et polonais.
- Ajout des commandes suivantes (les fonctions correspondantes doivent <20>tre activ<69>es dans PlugY.ini) :
/save : Sauvegarde la partie sans quitter.
/reload : Recharge la page des paris.
/page 1 : Affiche la page des stats de base (la page des stats doit <20>tre ouverte, espace non obligatoire).
/page 2 : Affiche la page des stats en plus (la page des stats doit <20>tre ouverte, espace non obligatoire).
/page 3 : Affiche la page des stats de resistances (la page des stats doit <20>tre ouverte, espace non obligatoire).
/page 4 : (b<>ta) Affiche la page des mots runiques actifs (la page des stats doit <20>tre ouverte, espace non obligatoire).
/lockmouse : Bloque le curseur de la souris dans la fen<65>tre.
/lock : Identique <20> /lockmouse.
/pagename name : (b<>ta) Renomme la page courante du coffre (Ce nouveau nom n'est pas sauvegard<72>).
/swap page : Echange le contenu de la page actuelle du coffre avec le contenu d'une autre "page" (espace non obligatoire).
/toggle page : Echanger le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre oppos<6F> partag<61>/personnel (espace non obligatoire).
/dlm : Inverse le mode d'affichage: Toujours afficher les valeurs de vie et de mana. (Depuis 1.13c, on peut clicker sur le bas de l'orbe)
/dml : Identique <20> /dlm.
/dl : Inverse le mode d'affichage: Toujours afficher les valeurs de vie. (Depuis 1.13c, on peut clicker sur le bas de l'orbe)
/dm : Inverse le mode d'affichage: Toujours afficher les valeurs de mana. (Depuis 1.13c, on peut clicker sur le bas de l'orbe)
/rename newname : (b<>ta) Renomme la personnage et le sauvegarde (Vous devez quitter la partie pour la mise <20> jour de la page des stats).
/listcube : (b<>ta) Cr<43>e un fichier "cube.txt" dans le r<>pertoire courant contenant toutes les formules actives du cube.
/maxgold : CHEAT ne pas utiliser en partie normal. Remplit le coffre personnel, celui partag<61>e et le personnage au maximum d'or.
Changements apport<72>s par la v11.00 :
- PlugY fonctionne aussi la version 1.13c de LOD. Changements apport<72>s par la v10.01 :
- Plein soutien en faveur d'autres langues dans le jeu. - Ajout du mode fen<65>tr<74>.
- Peut bloquer le curseur de la souris dans la fen<65>tre. (mode fen<65>tr<74>).
- Peut supprimer les bordure de la fen<65>tre (mode fen<65>tr<74>).
- Peut redimensionner ou maximiser la fen<65>tre (mode fen<65>tr<74>).
- Peut mettre la fen<65>tre au-dessus de toutes les autres fen<65>tres, y compris la barre des t<>ches (mode fen<65>tr<74>).
- Permet de verrouiller le curseur de la souris dans les fen<65>tres au d<>marrage et avec la commande "/lockmouse" ou "/lock" (mode fen<65>tr<74>).
- Ajout de la commande "/swap page" pour <20>changer le contenu de la page actuelle du coffre avec le contenu d'une autre "page".
- Ajout de la commande "/toggle page" pour <20>changer le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre oppos<6F> (partag<61>/personnel).
- Ajout de la commande "/rename newname" pour renommer son personnage. Cette fonctionnalit<69> est en b<>ta et vous devez quitter la partie pour mettre <20> jour la page des stats.
Changements apport<72>s par la v10.00 : Changements apport<72>s par la v10.00 :
- D<>sactive l'acc<63>s <20> Battle.net par le bouton du menu principal. - D<>sactive l'acc<63>s <20> 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<72>s par la v9.00 : Changements apport<72>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<66>rents bugs. - Corrige diff<66>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<72>s par la v8.00 : Changements apport<72>s par la v8.00 :
- Installation plus ais<69>e : Nouvel installeur. - Installation plus ais<69>e : Nouvel installeur.
- Permet d'ouvrir le portail vers le Cow Level m<>me quand on a tuer le Cow King dans cette difficult<6C>. - Permet d'ouvrir le portail vers le Cow Level m<>me quand on a tuer le Cow King dans cette difficult<6C>.
@@ -73,16 +98,13 @@ Changements apport
- Multiplayer : Sauvegarde les fichiers du stash (avec les donn<6E>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<6F>dure de sauvegarde. - Multiplayer : Sauvegarde les fichiers du stash (avec les donn<6E>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<6F>dure de sauvegarde.
- Remove the "check load memory failed" message when D2gfx.dll was patched. - Remove the "check load memory failed" message when D2gfx.dll was patched.
Changements apport<72>s par la v7.02 : Changements apport<72>s par la v7.02 :
- Corrige la perte de points de skills quand on les d<>salloue dans les mods contenant des skills sp<73>ciaux. - Corrige la perte de points de skills quand on les d<>salloue dans les mods contenant des skills sp<73>ciaux.
Changements apport<72>s par la v7.01b : Changements apport<72>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<63>res <20>tranges de quelques texts. - Corrige les caract<63>res <20>tranges de quelques texts.
Changements apport<72>s par la v7.01 : Changements apport<72>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.
@@ -91,7 +113,6 @@ Changements apport
- Ajout d'un ex<65>cutable pour lancer Plugy (plus aucun fichier de LoD modifi<66>). (RAPPEL) - Ajout d'un ex<65>cutable pour lancer Plugy (plus aucun fichier de LoD modifi<66>). (RAPPEL)
- Traduction en espagnol et polonais. - Traduction en espagnol et polonais.
Changements apport<72>s par la v7.00 : Changements apport<72>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<65>cutable pour lancer Plugy (plus aucun fichier de LoD modifi<66>). - Ajout d'un ex<65>cutable pour lancer Plugy (plus aucun fichier de LoD modifi<66>).
@@ -100,17 +121,14 @@ Changements apport
- 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<72>s par la v6.01b : Changements apport<72>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<72>s par la v6.01 : Changements apport<72>s par la v6.01 :
- Corrige le bug qui cause la disparition des items "carry1" du stash quand ils sont cubb<62>s dans LoD 1.10 - Corrige le bug qui cause la disparition des items "carry1" du stash quand ils sont cubb<62>s dans LoD 1.10
- Cl<43>s et organes des uber ne sont plus d<>truit quant on essaie d'ouvrir le portail en dehors d'Harrogath. - Cl<43>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<72>s par la v6.00 : Changements apport<72>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).
@@ -118,14 +136,12 @@ Changements apport
- Corrige quelques bugs mineurs et ajoute des am<61>liorations mineurs. - Corrige quelques bugs mineurs et ajoute des am<61>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<72>s par la v5.06 : Changements apport<72>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<61> en multijoueur. - Active l'or partag<61> en multijoueur.
- La commande "/DisplayLifeMana" est remplac<61>e par "/dlm". - La commande "/DisplayLifeMana" est remplac<61>e par "/dlm".
- Corrige quelques bugs. - Corrige quelques bugs.
Changements apport<72>s par la v5.05 : Changements apport<72>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<61>e via des commandes. - Ajoute de l'or partag<61>e via des commandes.
@@ -133,30 +149,25 @@ Changements apport
- Possiblit<69> d'afficher ou non les nom des objets de set dans le popup quand ceux-ci sont dans le coffre partag<61>e. - Possiblit<69> d'afficher ou non les nom des objets de set dans le popup quand ceux-ci sont dans le coffre partag<61>e.
- Correction des bugs du multiplayer (r<><72>criture de ces fonctions). - Correction des bugs du multiplayer (r<><72>criture de ces fonctions).
Changements apport<72>s par la v5.04 : Changements apport<72>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<65>. - PlugY/PlugYDefault.ini complet<65>.
Changements apport<72>s par la v5.03 : Changements apport<72>s par la v5.03 :
- Corrige le bug qui <20>change quelques fois les coffres partag<61>s Hardcore et Softcore. - Corrige le bug qui <20>change quelques fois les coffres partag<61>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<72>s par la v5.02 : Changements apport<72>s par la v5.02 :
- Corrige la correction d'un bug pr<70>c<EFBFBD>dent qui engendre la disparition d'objets. - Corrige la correction d'un bug pr<70>c<EFBFBD>dent qui engendre la disparition d'objets.
Changements apport<72>s par la v5.01 : Changements apport<72>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<61> est d<>sactiv<69>. - Corrige : Bug quand le stash partag<61> est d<>sactiv<69>.
Changements apport<72>s par la v5.00 : Changements apport<72>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.
@@ -171,14 +182,12 @@ Changements apport
- Corrige la g<>n<EFBFBD>ration de DiabloClone au d<>marrage d'une nouvelle partie. - Corrige la g<>n<EFBFBD>ration de DiabloClone au d<>marrage d'une nouvelle partie.
- Corrige plusieurs autres bugs. - Corrige plusieurs autres bugs.
Changements apport<72>s par la v4.04 : Changements apport<72>s par la v4.04 :
- Corrige le bug d'affichage quand statPerLevelUp est activ<69> - Corrige le bug d'affichage quand statPerLevelUp est activ<69>
- Corrige le bug de sauvegarde quand le disque dur est plein. - Corrige le bug de sauvegarde quand le disque dur est plein.
- Nouveau syst<73>me de configuration pour les moddeurs. - Nouveau syst<73>me de configuration pour les moddeurs.
- Affiche toujours les valeurs num<75>riques de mana et de vie au-dessus des globes correspondants. - Affiche toujours les valeurs num<75>riques de mana et de vie au-dessus des globes correspondants.
Changements apport<72>s par la v4.03 : Changements apport<72>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<69> d'aller directement <20> la premi<6D>re ou derni<6E>re page du coffre (shift + clic sur pr<70>c<EFBFBD>dent/suivant). - Possibilit<69> d'aller directement <20> la premi<6D>re ou derni<6E>re page du coffre (shift + clic sur pr<70>c<EFBFBD>dent/suivant).
@@ -186,13 +195,11 @@ Changements apport
- Ajouts d'infos sur les pages de stats suppl<70>mentaires (2 pages maintenant). - Ajouts d'infos sur les pages de stats suppl<70>mentaires (2 pages maintenant).
- Ajoute un bouton "page pr<70>c<EFBFBD>dente" sur la principale page de stats (uniquement en 800x600). - Ajoute un bouton "page pr<70>c<EFBFBD>dente" sur la principale page de stats (uniquement en 800x600).
- D<>place les boutons des pages de stats suppl<70>mentaire aux m<>me emplacements que ceux de la page principale (uniquement en 800x600). - D<>place les boutons des pages de stats suppl<70>mentaire aux m<>me emplacements que ceux de la page principale (uniquement en 800x600).
- Possibilit<69> de choisir si la page affich<63>e quand on ouvre la page des stats est la page principale ou celle s<>lectionn<6E>e pr<70>c<EFBFBD>demment. - Possibilit<69> de choisir si la page affich<63>e quand on ouvre la page des stats est la page principale ou celle s<>lectionn<6E>e pr<70>c<EFBFBD>demment
Changements apport<72>s par la v4.02b : Changements apport<72>s par la v4.02b :
- Les fonctionnalit<69>s restent activ<69>es sur Battle.net ouvert. - Les fonctionnalit<69>s restent activ<69>es sur Battle.net ouvert.
Changements apport<72>s par la v4.02 : Changements apport<72>s par la v4.02 :
- Corrige le conflit avec Battle.net (BigStash d<>sactiv<69> sur les royaumes) - Corrige le conflit avec Battle.net (BigStash d<>sactiv<69> 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
@@ -200,16 +207,13 @@ Changements apport
- 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<72>s par la v4.01 : Changements apport<72>s par la v4.01 :
- Corrige le bug du MSVCR70.dll non trouv<75>. - Corrige le bug du MSVCR70.dll non trouv<75>.
- Ajouts d'infos sur la 2<>me page de stats. - Ajouts d'infos sur la 2<>me page de stats.
Changements apport<72>s par la v4.00b : Changements apport<72>s par la v4.00b :
- Corrige le bug du MSVCR70.dll non trouv<75>. - Corrige le bug du MSVCR70.dll non trouv<75>.
Changements apport<72>s par la v4.00 : Changements apport<72>s par la v4.00 :
- Meilleure optimisation du code. - Meilleure optimisation du code.
- Ajoute des pages suppl<70>mentaires pour l'affichage de plus de statistiques du perso comme le %MF. - Ajoute des pages suppl<70>mentaires pour l'affichage de plus de statistiques du perso comme le %MF.
@@ -227,20 +231,17 @@ Changements apport
- Corrige : Diablo Clone ne peut pas appara<72>tre en mode normal et cauchemar. - Corrige : Diablo Clone ne peut pas appara<72>tre en mode normal et cauchemar.
- Corrige : D<>truit les minions(par exemple les squelettes) en trop pr<70>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<70>s la d<>sallocation si on a un bonus +x dans cette skill.
Changements apport<72>s par la v3.02 : Changements apport<72>s par la v3.02 :
- Corrige : le changement du nombre de points de Stats re<72>us <20> chaque gain de niveau. - Corrige : le changement du nombre de points de Stats re<72>us <20> chaque gain de niveau.
- Corrige : Quand le coffre partag<61> est d<>sactiv<69> vous pouvez charger vos persos. - Corrige : Quand le coffre partag<61> est d<>sactiv<69> vous pouvez charger vos persos.
- Corrige : Vous pouvez changer les param<61>tres du World Event sans activer les skill re<72>us <20> chaque gain de niveau. - Corrige : Vous pouvez changer les param<61>tres du World Event sans activer les skill re<72>us <20> chaque gain de niveau.
Changements apport<72>s par la v3.01 : Changements apport<72>s par la v3.01 :
- Change le nombre de points de Stats re<72>us <20> chaque gain de niveau. - Change le nombre de points de Stats re<72>us <20> chaque gain de niveau.
- Corrige les bugs qui donnent des points suppl<70>mentaires quand on d<>sallouent les skills. - Corrige les bugs qui donnent des points suppl<70>mentaires quand on d<>sallouent les skills.
- Ajoutent les param<61>tres du WorldEvent dans le fichier de configuration. - Ajoutent les param<61>tres du WorldEvent dans le fichier de configuration.
- Par d<>faut, Le WorldEvent AFFICHE "X SOJ vendu" uniquement dans la difficult<6C> enfer. - Par d<>faut, Le WorldEvent AFFICHE "X SOJ vendu" uniquement dans la difficult<6C> enfer.
Changements apport<72>s par la v3.00 : Changements apport<72>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<69>s(skills) pr<70>c<EFBFBD>demment allou<6F>es. - D<>salloue les points de capacit<69>s(skills) pr<70>c<EFBFBD>demment allou<6F>es.
@@ -248,7 +249,6 @@ Changements apport
- 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<61> est en rouge maintenant. - L'affichage du numero de page pour le coffre partag<61> est en rouge maintenant.
Changements apport<72>s par la v2.05 : Changements apport<72>s par la v2.05 :
- Correction importante : Le bug qui faisais que D2 ne d<>marrais est d<>finitivement corrig<69>. - Correction importante : Le bug qui faisais que D2 ne d<>marrais est d<>finitivement corrig<69>.
@@ -279,8 +279,6 @@ Changements apport
- PlugY.exe - PlugY.exe
- PlugY.dll (in Diablo II directory) - PlugY.dll (in Diablo II directory)
- PlugY.ini - PlugY.ini
- Plugy\PlugYLocal.dll
- Plugy\PlugYLocal.ini
- PlugY\PlugYFixed.ini - PlugY\PlugYFixed.ini
- PlugY\PlugYDefault.ini - PlugY\PlugYDefault.ini
- PlugY\EmptyPage.dc6 - PlugY\EmptyPage.dc6
@@ -298,19 +296,13 @@ Changements apport
******** INSTALLATION ******** ******** INSTALLATION ********
Les sites de t<>l<EFBFBD>chargement officiel sont :
http://djaftal.chez-alice.fr/
http://d2mods.info/forum/viewforum.php?f=133
http://diablo2.judgehype.com/index.php?page=telechargements
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 er PlugY folder (+son sontenu) dans le r<>pertoire du mod cibl<62>. - Copier PlugY.ini, PlugY.exe et PlugY folder (+son sontenu) dans le r<>pertoire du mod cibl<62>.
- 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 et amusez-vous :)
@@ -319,12 +311,10 @@ note : Vous pouvez d
Exemple : Exemple :
Si vous avez install<6C> Lord of Destruction ici : C:\Jeux\Diablo II\Diablo II.exe Si vous avez install<6C> Lord of Destruction ici : C:\Jeux\Diablo II\Diablo II.exe
Et que le mod cibl<62> se trouve l<EFBFBD> : D:\D2Mod\MyMod\ Et que le mod cibl<62> se trouve dans : D:\D2Mod\MyMod\
Et que un second mod se trouve l<EFBFBD> : D:\D2Mod\MyMod2\ Et qu'un second mod se trouve dans : D:\D2Mod\MyMod2\
Alors la configuration classique est ceci : Alors la configuration classique est ceci :
C:\Jeux\Diablo II\PlugY.dll C:\Jeux\Diablo II\PlugY.dll
D:\D2Mod\MyMod\Plugy\PlugYLocal.dll
D:\D2Mod\MyMod\Plugy\PlugYLocal.ini
D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6 D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6
D:\D2Mod\MyMod\PlugY\PlugYFixed.ini D:\D2Mod\MyMod\PlugY\PlugYFixed.ini
D:\D2Mod\MyMod\PlugY\PlugYDefault.ini D:\D2Mod\MyMod\PlugY\PlugYDefault.ini
@@ -499,6 +489,30 @@ Active les fonctions cach
- ActiveAllOthersFeatures=0 {0:D<>sactiv<69>; 1:Activ<69>} - ActiveAllOthersFeatures=0 {0:D<>sactiv<69>; 1:Activ<69>}
[WINDOWED]
Lancement en mode fen<65>tr<74>.
- ActiveWindowed=0 {0:D<>sactiv<69>; 1:Activ<69>}
Supprime le cadre de la fen<65>tre en mode fen<65>tr<74>.
- RemoveBorder=0 {0:D<>sactiv<69>; 1:Activ<69>}
Met la fen<65>tre au plus haut (au-dessus de la barre des t<>ches) en mode fen<65>tr<74>.
- WindowOnTop=0 {0:D<>sactiv<69>; 1:Activ<69>}
Fen<EFBFBD>tre centr<74>e et maximis<69>e (ratio maintenu <20> 4/3) en mode fen<65>tr<74> (si SetWindowPos = 0).
- Maximized=0 {0:D<>sactiv<69>; 1:Activ<69>}
D<EFBFBD>finie la position et la taille de la fen<65>tre en mode fen<65>tr<74>.
- SetWindowPos=0 {0:D<>sactiv<69>; 1:Activ<69>}
- X=0 {0:Position X de la fen<65>tre}
- Y=0 {0:Position Y de la fen<65>tre}
- Width=0 {0:Largeur de la fen<65>tre}
- Height=0 {0:Hauteur de la fen<65>tre}
Verrouiller le curseur da la souris dans la fen<65>tre en mode fen<65>tr<74>.
- LockMouseOnStartup=0 {0:D<>sactiv<69>; 1:Activ<69>}
[LANGUAGE] [LANGUAGE]
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.
@@ -708,10 +722,6 @@ PS : D
* Allemand : ChaosEnergy, TheMasterCaster. * Allemand : ChaosEnergy, TheMasterCaster.
* Italien : ItalianPlayer * Italien : ItalianPlayer
* Espagnol : Acrerune * Espagnol : Acrerune
* Polonais : Serdel + https://translate.google.com * Polonais : Serdel
* Russian: Around.
* Portuguese: https://translate.google.com ;--------------------------------------------------------------------------------------;
* Japanese: https://translate.google.com
* Korean: https://translate.google.com
* Chinese: https://translate.google.com
~~~~~~~~~~~~

View File

@@ -3,28 +3,30 @@
; "PlugY, The Survival Kit" ; ; "PlugY, The Survival Kit" ;
; ; ; ;
; by Yohann Nicolas ; ; by Yohann Nicolas ;
; (modification by L'Autour) ; ; ;
; version 11.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
Official website for version 10.00: http://plugy.free.fr Official website : http://plugy.free.fr
You can make a donation if you want. You can make a donation if you want.
******** WARNING ******** ******** WARNING ********
- This plug-in works with LoD version 1.09 to 1.13d and mods based on. - This plug-in works with LoD version 1.09 to 1.13c and mods based on.
- This plug-in doesn't work on realms (Battle.net or private). - This plug-in doesn't work on realms (Battle.net or private).
- All files may be changed since previous version, so uninstall any previous version. - All files may be changed since previous version, so uninstall any previous version.
- Please, use a clean D2dfx.dll before report any crash on starting LoD. - Please, use a clean D2dfx.dll before report any crash on starting LoD.
- PlugY.ini has changed since previous version, use the one in this package. - PlugY.ini has changed since previous version, use the one in this package.
- Don't forget to read the part named "COMMENTS ON THE CONFIGURATION FILE". - Don't forget to read the part named "COMMENTS ON THE CONFIGURATION FILE".
- Don't forget to read the PlugY forum at : http://d2mods.info/forum/viewforum.php?f=133 - Don't forget to read the PlugY forum at :
http://d2mods.info/forum/viewforum.php?f=133
******** FEATURES ******** ******** FEATURES ********
- Disable access to Battle.net. - Disable access to Battle.net.
- Infinite storage space in the stash (up to 4,294,967,296 personal pages!) - Infinite storage space in the stash.
- Shared storage space in the stash (up to 4,294,967,296 shared pages too!) - Shared storage space in the stash.
- Enabled the ladder only runewords out of realms. - Enabled the ladder only runewords out of realms.
- Local World Event and Uber Quest for singleplayer and multiplayer off-realm ! - Local World Event and Uber Quest for singleplayer and multiplayer off-realm !
- 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.
@@ -40,27 +42,50 @@ You can make a donation if you want.
- 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 stats current value (without magical bonus) like Magic/gold find or maximum resistances.
- PlugY is localized in English, French, German, Italian, Spanish, Polish, *Portuguese, Japanese, Korean, Chinese, Polish, *Russian. - Can launch game in windowed mode with some options (lock mouse/resize/on top/noborder).
(* - required informal localization of the game.) - PlugY is localized in English, French, German, Italian, Spanish, Polish.
- Add following commands (the corresponding functions must be enabled in PlugY.ini) :
/save : Save game without exit.
/reload : Reload gamble page.
/page 1 : Show normal stats page (stats page must be opened, space not mandatory).
/page 2 : Show extra stats page (stats page must be opened, space not mandatory).
/page 3 : Show resistance stats page (stats page must be opened, space not mandatory).
/page 4 : (beta) Show available runewords (stats page must be opened, space not mandatory).
/lockmouse : Lock mouse cursor in the window.
/lock : same as /lockmouse.
/pagename name : (beta) Rename current page stash (the new name isn't saved).
/swap page : Swap the content of current stash page with the content of another page (space not mandatory).
/toggle page : Swap the content of current stash page with the content of another page in opposing stash shared/personal (space not mandatory).
/dlm : Toggle always display mana and life mode. (Since 1.13c, you can click on the bottom of each orbs)
/dml : Same as /dlm.
/dl : Toggle always display life mode. (Since 1.13c, you can click on the bottom of the orb)
/dm : Toggle always display mana mode. (Since 1.13c, you can click on the bottom of the orb)
/rename newname : (beta) rename your character and save it. (You must exit the game to update the stats page.)
/listcube : (beta) Create a "cube.txt" file in current directory containing all cube's receipts.
/maxgold : CHEAT don't use in normal game. Set personnal stash, shared stash and character to max gold.
v11.00 changes : v10.01 changes :
- PlugY works for 1.13d version of LoD too. - Add windowed mode.
- A complete support of all languages in game. - Can lock mouse cursor in the window (windowed mode).
- Can remove border (windowed mode).
- Can resize or maximize window (windowed mode).
- Can fix window above any others windows including taskbar (windowed mode).
- Can lock mouse cursor in the windows on startup and with command "/lockmouse" or "/lock" (windowed mode).
- Add command "/swap page" to swap the content of current stash page with the content of another page.
- Add command "/toggle page" to swap the content of current stash page with the content of another page in opposing stash shared/personal.
- Add command "/rename newname" to rename your character. This feature is still in beta and you must exit the game to update the stats page.
v10.00 changes : v10.00 changes :
- Disable access to Battle.net via main menu button. - Disable access to Battle.net via main menu button.
- PlugY works for 1.13c version of LoD too. - PlugY works for 1.13c version of LoD too.
- Fix shortcut in start menu - Fix shortcut in start menu
v9.00 changes : v9.00 changes :
- PlugY works for 1.12 version of LoD too. - PlugY works for 1.12 version of LoD too.
- Fix somes bugs. - Fix somes bugs.
- Add option for unassign skill for mods. - Add option for unassign skill for mods.
v8.00 changes : v8.00 changes :
- Easier installation : New installer. - Easier installation : New installer.
- 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.
@@ -71,12 +96,10 @@ v8.00 changes :
- Multiplayer : Save stash files (with client's data like version before 5.00) when a deconnection or error happend during saving process. - Multiplayer : Save stash files (with client's data like version before 5.00) when a deconnection or error happend during saving process.
- Remove the "check load memory failed" message when D2gfx.dll was patched. - Remove the "check load memory failed" message when D2gfx.dll was patched.
v7.01b changes : v7.01b changes :
- Fix the ladder only runewords features in versions 1.11 and 1.10 of LoD. - Fix the ladder only runewords features in versions 1.11 and 1.10 of LoD.
- Fix wierd characters in some text. - Fix wierd characters in some text.
v7.01 changes : v7.01 changes :
- Enabled the ladder only runewords out of realms. - Enabled the ladder only runewords out of realms.
- Fixed Uber Baal AI. - Fixed Uber Baal AI.
@@ -85,7 +108,6 @@ v7.01 changes :
- Add an executable to launch PlugY (no more LoD's files modified) (RECALL) - Add an executable to launch PlugY (no more LoD's files modified) (RECALL)
- Translation into spanish and polish. - Translation into spanish and polish.
v7.00 changes : v7.00 changes :
- PlugY works for 1.11b version of LoD too. - PlugY works for 1.11b version of LoD too.
- Add an executable to launch PlugY (no more LoD's files modified) - Add an executable to launch PlugY (no more LoD's files modified)
@@ -94,17 +116,14 @@ v7.00 changes :
- Fix features which stayed enabled on Battle.net. - Fix features which stayed enabled on Battle.net.
- Translation into italian. - Translation into italian.
v6.01b changes : v6.01b changes :
- Bug fix with the display of popup on stat assignment buttons. - Bug fix with the display of popup on stat assignment buttons.
v6.01 changes : v6.01 changes :
- Major fix : unique carry1 items don't disappear when they are cubbed in LoD 1.10 - Major fix : unique carry1 items don't disappear when they are cubbed in LoD 1.10
- Keys and Uber organs aren't destroyed when we try to open a Red Porpal out of Harrogath. - Keys and Uber organs aren't destroyed when we try to open a Red Porpal out of Harrogath.
- Fix conflict with D2Mod for the version display. - Fix conflict with D2Mod for the version display.
v6.00 changes : v6.00 changes :
- PlugY works for 1.11 version of LoD too ! - PlugY works for 1.11 version of LoD too !
- Enabled Uber Quest off realm (LoD 1.11 only). - Enabled Uber Quest off realm (LoD 1.11 only).
@@ -112,14 +131,12 @@ v6.00 changes :
- Fixed some minor bugs and added some minor improvements. - Fixed some minor bugs and added some minor improvements.
- Added command "/save" to save the game without exit (LoD 1.11 only). - Added command "/save" to save the game without exit (LoD 1.11 only).
v5.06 changes : v5.06 changes :
- Added buttons for shared gold. - Added buttons for shared gold.
- Enabled shared gold in multiplayer. - Enabled shared gold in multiplayer.
- Command "/DisplayLifeMana" is replaced by "/dlm". - Command "/DisplayLifeMana" is replaced by "/dlm".
- Fixed some bugs. - Fixed some bugs.
v5.05 changes : v5.05 changes :
- Fixed bad default color in interface stats. - Fixed bad default color in interface stats.
- Added Shared gold via commands. - Added Shared gold via commands.
@@ -127,30 +144,25 @@ v5.05 changes :
- Display green set item name in popup when it's in the shared stash. - Display green set item name in popup when it's in the shared stash.
- Fixed multiplayer bugs by redoing multiplayer procedure. - Fixed multiplayer bugs by redoing multiplayer procedure.
v5.04 changes : v5.04 changes :
- Fixed : Stat/Skill points per level-up bug. - Fixed : Stat/Skill points per level-up bug.
- Fixed : Multiplayer bugs. - Fixed : Multiplayer bugs.
- PlugY/PlugYDefault.ini completed. - PlugY/PlugYDefault.ini completed.
v5.03 changes : v5.03 changes :
- Fixed : Bug which sometimes swaps Hardcore and Softcore shared stash. - Fixed : Bug which sometimes swaps Hardcore and Softcore shared stash.
- Added color on extra stats page. - Added color on extra stats page.
- Changed default values on extra stats page. - Changed default values on extra stats page.
- Set EnabledTXTFilesWhenMSExcelOpenIt=1 in PlugY.ini file. - Set EnabledTXTFilesWhenMSExcelOpenIt=1 in PlugY.ini file.
v5.02 changes : v5.02 changes :
- Fixed : Previous bug fix which caused items to disappear. - Fixed : Previous bug fix which caused items to disappear.
v5.01 changes : v5.01 changes :
- Fixed : Major bugs in stash management. - Fixed : Major bugs in stash management.
- Fixed : Set back PlugY.ini with ActiveLogFile=0 by default. - Fixed : Set back PlugY.ini with ActiveLogFile=0 by default.
- Fixed : bug when shared stash is disabled. - Fixed : bug when shared stash is disabled.
v5.00 changes : v5.00 changes :
- PlugY works for 1.09, 1.09b, 1.09d versions of LoD, including mods based on these releases ! - PlugY works for 1.09, 1.09b, 1.09d versions of LoD, including mods based on these releases !
- PlugY can load D2Mod.dll. - PlugY can load D2Mod.dll.
@@ -165,14 +177,12 @@ v5.00 changes :
- Fixed : The spawn of DiabloClone at starting of a new game - Fixed : The spawn of DiabloClone at starting of a new game
- Fixed : Some other small bugs. - Fixed : Some other small bugs.
v4.04 changes : v4.04 changes :
- Fixed : Display bug when statPerLevelUp enabled. - Fixed : Display bug when statPerLevelUp enabled.
- Fixed : Bug in saving procedure when the disk is full. - Fixed : Bug in saving procedure when the disk is full.
- New configuration system for modders. - New configuration system for modders.
- Always display Mana and Life values above the globes. - Always display Mana and Life values above the globes.
v4.03 changes : v4.03 changes :
- Fixed : "carry 1" unique item (unique charm) when we drop the cube. - Fixed : "carry 1" unique item (unique charm) when we drop the cube.
- Can go directly to first or last page of stash (shift + click on next/previous). - Can go directly to first or last page of stash (shift + click on next/previous).
@@ -182,7 +192,6 @@ v4.03 changes :
- Moved buttons in extra stats pages to same place as in main stats page (only in 800x600). - Moved buttons in extra stats pages to same place as in main stats page (only in 800x600).
- Can choose whether the main (first) page or the last selected page is displayed on opening the stats page. - Can choose whether the main (first) page or the last selected page is displayed on opening the stats page.
v4.02b changes : v4.02b changes :
- Fixed : Features stay enabled in open Battle.net - Fixed : Features stay enabled in open Battle.net
@@ -194,16 +203,13 @@ v4.02 changes :
- Fixed : Item level display enabled correctly for all configurations of PlugY. - Fixed : Item level display enabled correctly for all configurations of PlugY.
- Added data in the extra stats page. - Added data in the extra stats page.
v4.01 changes : v4.01 changes :
- Fixed : NbPlayers always set to 8 when active. - Fixed : NbPlayers always set to 8 when active.
- Added data in the extra stats page. - Added data in the extra stats page.
v4.00b changes : v4.00b changes :
- Fixed : MSVCR70.dll not found bug. - Fixed : MSVCR70.dll not found bug.
v4.00 changes : v4.00 changes :
- Better optimization of the code. - Better optimization of the code.
- Added some pages for displaying more characters stats like %MF. - Added some pages for displaying more characters stats like %MF.
@@ -221,20 +227,17 @@ v4.00 changes :
- Fixed : Diablo Clone can't spawn in normal and nightmare difficulty. - Fixed : Diablo Clone can't spawn in normal and nightmare difficulty.
- Fixed : Destruction of extra minions after unassignment if you have +x bonus to the skill. - Fixed : Destruction of extra minions after unassignment if you have +x bonus to the skill.
v3.02 changes : v3.02 changes :
- Fixed : Change the number of stats points gained when player gains a level. - Fixed : Change the number of stats points gained when player gains a level.
- Fixed : When the shared stash is disabled, you can load a game with your character. - Fixed : When the shared stash is disabled, you can load a game with your character.
- Fixed : You can change parameters of World Event without activating skill per level up. - Fixed : You can change parameters of World Event without activating skill per level up.
v3.01 changes : v3.01 changes :
- Change the number of stats points gained when player gains a level. - Change the number of stats points gained when player gains a level.
- Fixed bugs which give extra points when skills points are unassigned. - Fixed bugs which give extra points when skills points are unassigned.
- Added parameters for the WorldEvent in configuration file. - Added parameters for the WorldEvent in configuration file.
- By default, World Event only SHOWS "X SOJ Sold" in hell difficulty. - By default, World Event only SHOWS "X SOJ Sold" in hell difficulty.
v3.00 changes : v3.00 changes :
- Local World Event for singleplayer and multiplayer off-realm ! - Local World Event for singleplayer and multiplayer off-realm !
- Unassign assigned skills points. - Unassign assigned skills points.
@@ -242,11 +245,9 @@ v3.00 changes :
- Can change the filename of the shared savefile. - Can change the filename of the shared savefile.
- Shared stash page number display are in red now. - Shared stash page number display are in red now.
v2.05 changes : v2.05 changes :
- major fix : bugs which cause D2 not to start are finally removed. - major fix : bugs which cause D2 not to start are finally removed.
v2.04 changes : v2.04 changes :
- Unassign stats points, skills on level up are disabled when you connect to realm (like stash). - Unassign stats points, skills on level up are disabled when you connect to realm (like stash).
- Open a error message box instead of crash when PlugY.dll isn't found by D2. - Open a error message box instead of crash when PlugY.dll isn't found by D2.
@@ -254,11 +255,9 @@ v2.04 changes :
- Fixed bug display of buttons. - Fixed bug display of buttons.
- Fixed win95/98/Me saving. - Fixed win95/98/Me saving.
v2.03b changes : v2.03b changes :
- Show PlugY version only in main screen. - Show PlugY version only in main screen.
v2.03 changes : v2.03 changes :
- Major fix : Correct and secure the saving procedure. - Major fix : Correct and secure the saving procedure.
- No more crash of the host game when a character is unable to enter the game. - No more crash of the host game when a character is unable to enter the game.
@@ -266,7 +265,6 @@ v2.03 changes :
- Change version printing on main screen (change color & PlugY version in right corner) - Change version printing on main screen (change color & PlugY version in right corner)
- Character without PlugY can join game host with PlugY enabled. - Character without PlugY can join game host with PlugY enabled.
v2.02 changes : v2.02 changes :
- PlugY doesn't use D2win.dll to launch PlugY anymore. - PlugY doesn't use D2win.dll to launch PlugY anymore.
- PlugY includes a patcher/unpatcher for editing D2gfx.dll to launch PlugY. - PlugY includes a patcher/unpatcher for editing D2gfx.dll to launch PlugY.
@@ -274,12 +272,10 @@ v2.02 changes :
- The infinite storage sytem is automatically disabled on a realm game. - The infinite storage sytem is automatically disabled on a realm game.
- Fixed index button bugs. - Fixed index button bugs.
v2.01 changes : v2.01 changes :
- Fixed skill per level up bug - Fixed skill per level up bug
- Fixed bug display of text in the main menu - Fixed bug display of text in the main menu
v2.00 changes : v2.00 changes :
- Localized in German. - Localized in German.
- Change the number of Skills points gained when player gains a level. - Change the number of Skills points gained when player gains a level.
@@ -296,7 +292,6 @@ v2.00 changes :
- Removed the bug of "carry 1" - Removed the bug of "carry 1"
- Add other small improvements... :) - Add other small improvements... :)
v1.03 changes : v1.03 changes :
- Added French readme and ini files. - Added French readme and ini files.
- Removed bugs in D2Classic game (there is no multipage, it's not a bug) - Removed bugs in D2Classic game (there is no multipage, it's not a bug)
@@ -306,12 +301,10 @@ v1.03 changes :
* must read : You can start any mods without moving SAVES files * must read : You can start any mods without moving SAVES files
(you need to move dll files with classic script). (you need to move dll files with classic script).
v1.02 changes : v1.02 changes :
- Re-changed name files due to an IE bug with colon in zip file. - Re-changed name files due to an IE bug with colon in zip file.
- Ability to change the version text print in the main menu (see ini file). - Ability to change the version text print in the main menu (see ini file).
v1.01 changes : v1.01 changes :
- Localized for french version (wait for an french readme.txt) - Localized for french version (wait for an french readme.txt)
- Changed filename from "PlugY, The Survival Kit.ini" to "PlugY,The_Survival_Kit". - Changed filename from "PlugY, The Survival Kit.ini" to "PlugY,The_Survival_Kit".
@@ -321,7 +314,6 @@ v1.01 changes :
(you can add it if you want but need to know what are you doing...) (you can add it if you want but need to know what are you doing...)
- Released in .zip file instead of .rar - Released in .zip file instead of .rar
v1.00 features (can all be easily enabled or disabled) : v1.00 features (can all be easily enabled or disabled) :
- You can change the save path directory. - You can change the save path directory.
- You can start any mods without moving saves files. - You can start any mods without moving saves files.
@@ -333,15 +325,13 @@ v1.00 features (can all be easily enabled or disabled) :
******** CONTENTS ******** ******** CONTENTS ********
21 files, 1 folder : 19 files, 1 folder :
- 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.exe - PlugY.exe
- PlugY.dll (in Diablo II directory) - PlugY.dll (in Diablo II directory)
- PlugY.ini - PlugY.ini
- Plugy\PlugYLocal.dll
- Plugy\PlugYLocal.ini
- PlugY\PlugYFixed.ini - PlugY\PlugYFixed.ini
- PlugY\PlugYDefault.ini - PlugY\PlugYDefault.ini
- PlugY\EmptyPage.dc6 - PlugY\EmptyPage.dc6
@@ -359,12 +349,6 @@ v1.00 features (can all be easily enabled or disabled) :
******** INSTALLATION ******** ******** INSTALLATION ********
- The officials sites are :
http://djaftal.chez-alice.fr/
http://d2mods.info/forum/viewforum.php?f=133
http://diablo2.judgehype.com/index.php?page=telechargements
Normal Installation : Normal Installation :
- Follow directive installer. - Follow directive installer.
@@ -383,8 +367,6 @@ And the mod to add this plug-in is here : D:\D2Mod\MyMod\
And the second mod to add this plug-in is here : D:\D2Mod\MyMod2\ And the second mod to add this plug-in is here : D:\D2Mod\MyMod2\
So the new installation is : So the new installation is :
C:\Games\Diablo II\PlugY.dll C:\Games\Diablo II\PlugY.dll
D:\D2Mod\MyMod\Plugy\PlugYLocal.dll
D:\D2Mod\MyMod\Plugy\PlugYLocal.ini
D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6 D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6
D:\D2Mod\MyMod\PlugY\PlugYFixed.ini D:\D2Mod\MyMod\PlugY\PlugYFixed.ini
D:\D2Mod\MyMod\PlugY\PlugYDefault.ini D:\D2Mod\MyMod\PlugY\PlugYDefault.ini
@@ -556,17 +538,14 @@ Following are default values, between {} are some examples values with descripti
- ActivePlugin=0 {0:Don't load any features; 1:Plugin enabled} - ActivePlugin=0 {0:Don't load any features; 1:Plugin enabled}
Enable or disable BattleNet Access. Enable or disable BattleNet Access.
Following are default values, between {} are some examples values with descriptions :
- DisableBattleNet=1 {0:Battle.net access enable; 1:Battle.net access disable} - DisableBattleNet=1 {0:Battle.net access enable; 1:Battle.net access disable}
Create a log file "PlugY.log" in the current directory. Create a log file "PlugY.log" in the current directory.
This feature can slow down your game. This feature can slow down your game.
Following are default values, between {} are some examples values with descriptions :
- ActiveLogFile=0 {0:No information is written while playing; 1:Always enabled} - ActiveLogFile=0 {0:No information is written while playing; 1:Always enabled}
Load dll of a specific mod for used PlugY in same time. Load dll of a specific mod for used PlugY in same time.
Separate each dll file name by the character pipe (|) Separate each dll file name by the character pipe (|)
Following are default values, between {} are some examples values with descriptions :
- DllToLoad= {(empty): load nothing; D2extra.dll|myDll.dll: Load both D2extra.dll and myDll.dll} - DllToLoad= {(empty): load nothing; D2extra.dll|myDll.dll: Load both D2extra.dll and myDll.dll}
- DllToLoad2= {(empty): Same as DlltoLoad} - DllToLoad2= {(empty): Same as DlltoLoad}
@@ -584,6 +563,30 @@ Activate hidden or not-finished feature. (don't use it)
- ActiveAllOthersFeatures=0 {0:Disabled; 1:Enabled} - ActiveAllOthersFeatures=0 {0:Disabled; 1:Enabled}
[WINDOWED]
Launch in windowed mode.
- ActiveWindowed=0 {0:Disabled; 1:Enabled}
Remove border in windowed mode.
- RemoveBorder=0 {0:Disabled; 1:Enabled}
Set window at most top (above taskbar) in windowed mode.
- WindowOnTop=0 {0:Disabled; 1:Enabled}
Maximized and center window (keep ratio 4/3) in windowed mode (if SetWindowPos=0).
- Maximized=0 {0:Disabled; 1:Enabled}
Set position and size of the window in windowed mode.
- SetWindowPos=0 {0:Disabled; 1:Enabled}
- X=0 {0:Window Position X}
- Y=0 {0:Window Position Y}
- Width=0 {0:Window Width}
- Height=0 {0:Window Height}
Lock cursor mouse in the window in windowed mode.
- LockMouseOnStartup=0 {0:Disabled; 1:Enabled}
[LANGUAGE] [LANGUAGE]
Change the selected language. Change the selected language.
You must have files of the selected language. You must have files of the selected language.
@@ -665,6 +668,7 @@ Following are default values, between {} are some examples values with descripti
[STAT ON LEVEL UP] [STAT ON LEVEL UP]
WARNING : CHEAT, DON'T USE IN NORMAL GAME.
Change the number of Stats Points you receive when your character gains a level. Change the number of Stats Points you receive when your character gains a level.
Following are default values, between {} are some examples values with descriptions : Following are default values, between {} are some examples values with descriptions :
- ActiveStatPerLevelUp=0 {0:Disabled; 1:Enabled} - ActiveStatPerLevelUp=0 {0:Disabled; 1:Enabled}
@@ -684,6 +688,7 @@ Following are default values, between {} are some examples values with descripti
[SKILL ON LEVEL UP] [SKILL ON LEVEL UP]
WARNING : CHEAT, DON'T USE IN NORMAL GAME.
Change the number of Skills Points you receive when your character gains a level. Change the number of Skills Points you receive when your character gains a level.
Following are default values, between {} are some examples values with descriptions : Following are default values, between {} are some examples values with descriptions :
- ActiveSkillPerLevelUp=0 {0:Disabled; 1:Enabled} - ActiveSkillPerLevelUp=0 {0:Disabled; 1:Enabled}
@@ -789,14 +794,10 @@ PS : Sorry for english faults ;)
- PhrozenKeep team for all stuff they shared for us (including mine ;) - PhrozenKeep team for all stuff they shared for us (including mine ;)
- Translation : - Translation :
* English : Yohann, Jurica. * English : Yohann, Jurica.
* French : Yohann. * French : Yohann
* German : ChaosEnergy, TheMasterCaster. * German : ChaosEnergy, TheMasterCaster.
* Italian : ItalianPlayer * Italian : ItalianPlayer
* Spanish : Acrerune * Spanish : Acrerune
* Polish : Serdel + https://translate.google.com * Polish : Serdel
* Russian: L'Autour.
* Portuguese: https://translate.google.com ;--------------------------------------------------------------------------------------;
* Japanese: https://translate.google.com
* Korean: https://translate.google.com
* Chinese: https://translate.google.com
~~~~~~~~~~~~

View File

@@ -1,36 +0,0 @@
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"c:\program files\borland\delphi7\Projects\Bpl"
-LN"c:\program files\borland\delphi7\Projects\Bpl"
-DKOL_MCK

View File

@@ -1,143 +0,0 @@
[FileVersion]
Version=7.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
NamespacePrefix=
SymbolDeprecated=1
SymbolLibrary=1
SymbolPlatform=1
UnitLibrary=1
UnitPlatform=1
UnitDeprecated=1
HResultCompat=1
HidingMember=1
HiddenVirtual=1
Garbage=1
BoundsError=1
ZeroNilCompat=1
StringConstTruncated=1
ForLoopVarVarPar=1
TypedConstVarPar=1
AsgToTypedConst=1
CaseLabelRange=1
ForVariable=1
ConstructingAbstract=1
ComparisonFalse=1
ComparisonTrue=1
ComparingSignedUnsigned=1
CombiningSignedUnsigned=1
UnsupportedConstruct=1
FileOpen=1
FileOpenUnitSrc=1
BadGlobalSymbol=1
DuplicateConstructorDestructor=1
InvalidDirective=1
PackageNoLink=1
PackageThreadVar=1
ImplicitImport=1
HPPEMITIgnored=1
NoRetVal=1
UseBeforeDef=1
ForLoopVarUndef=1
UnitNameMismatch=1
NoCFGFileFound=1
MessageDirective=1
ImplicitVariants=1
UnicodeToLocale=1
LocaleToUnicode=1
ImagebaseMultiple=1
SuspiciousTypecast=1
PrivatePropAccessor=1
UnsafeType=1
UnsafeCode=1
UnsafeCast=1
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=vcl;rtl;vclx;vclactnband
Conditionals=KOL_MCK
DebugSourceDirs=D:\Games\Diablo II\PlugY
UsePackages=0
[Parameters]
RunParams=
HostApplication=D:\Games\Diablo II\Game.exe
Launcher=
UseLauncher=0
DebugCWD=D:\Games\Diablo II
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1033
CodePage=1252
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=PlugYLocal.dll
ProductName=PlugyLocal for PlugY
ProductVersion=11.0.0.0
[HistoryLists\hlDebugSourcePath]
Count=1
Item0=D:\Games\Diablo II\PlugY
[HistoryLists\hlConditionals]
Count=1
Item0=KOL_MCK
[HistoryLists\hlUnitAliases]
Count=1
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[HistoryLists\hlOutputDirectorry]
Count=1
Item0=D:\Games\Diablo II\PlugY

View File

@@ -1,823 +0,0 @@
library PlugYLocal;
//Created by L'Autour
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
KOL;
//SysUtils,
//Classes;
{$R *.res}
type
TLocalStr = record
name: AnsiString;
value: WideString;
end;
TStrType = record
k: AnsiString;
s: WideString;
case Byte of
0: (dw: Cardinal);
1: (c: array[0..3] of AnsiChar);
end;
const
NamePlugyLocal = 'Plugy\PlugYLocal.ini';
MaxStr = 52;
MaxLng = 11;
MaxType = 97;
MaxIdxType = 41;
sLng: array[0..MaxLng] of AnsiString =
('ENG','ESP','DEU','FRA','POR','ITA','JPN','KOR','SIN','CHI','POL','RUS');
var
Gender: WideString = '';
StrTypes: array[0..MaxType + 1] of TStrType = (
(k: ''; s: 'Shield (Not Class Specific)'; c: ('s','h','i','e')),
(k: ''; s: 'Body Armor'; c: ('t','o','r','s')),
(k: 'Gold'; s: 'Gold'; c: ('g','o','l','d')),
(k: 'aqv'; s: 'Arrows'; c: ('b','o','w','q')),
(k: 'cqv'; s: 'Bolts'; c: ('x','b','o','q')),
(k: 'ear'; s: 'Ear'; c: ('p','l','a','y')),
(k: 'hrb'; s: 'Herb'; c: ('h','e','r','b')),
(k: ''; s: 'Potion'; c: ('p','o','t','i')),
(k: 'rin'; s: 'Ring'; c: ('r','i','n','g')),
(k: 'elx'; s: 'Elixir'; c: ('e','l','i','x')),
(k: 'amu'; s: 'Amulet'; c: ('a','m','u','l')),
(k: ''; s: 'Charm'; c: ('c','h','a','r')),
(k: 'lbt'; s: 'Boots'; c: ('b','o','o','t')),
(k: ''; s: 'Gloves'; c: ('g','l','o','v')),
(k: ''; s: 'Book'; c: ('b','o','o','k')),
(k: 'mbl'; s: 'Belt'; c: ('b','e','l','t')),
(k: ''; s: 'Gem'; c: ('g','e','m',' ')),
(k: 'tch'; s: 'Torch'; c: ('t','o','r','c')),
(k: ''; s: 'Scroll'; c: ('s','c','r','o')),
(k: 'scp'; s: 'Scepter'; c: ('s','c','e','p')),
(k: 'wnd'; s: 'Wand'; c: ('w','a','n','d')),
(k: ''; s: 'Staff'; c: ('s','t','a','f')),
(k: ''; s: 'Bow'; c: ('b','o','w',' ')),
(k: 'axe'; s: 'Axe'; c: ('a','x','e',' ')),
(k: 'clb'; s: 'Club'; c: ('c','l','u','b')),
(k: ''; s: 'Sword'; c: ('s','w','o','r')),
(k: ''; s: 'Hammer'; c: ('h','a','m','m')),
(k: ''; s: 'Knife'; c: ('k','n','i','f')),
(k: 'spr'; s: 'Spear'; c: ('s','p','e','a')),
(k: ''; s: 'Polearm'; c: ('p','o','l','e')),
(k: 'mxb'; s: 'Crossbow'; c: ('x','b','o','w')),
(k: 'mac'; s: 'Mace'; c: ('m','a','c','e')),
(k: 'hlm'; s: 'Helm'; c: ('h','e','l','m')),
(k: ''; s: 'Missile Potion'; c: ('t','p','o','t')),
(k: ''; s: 'Quest Item'; c: ('q','u','e','s')),
(k: ''; s: 'Body Part'; c: ('b','o','d','y')),
(k: 'key'; s: 'Key'; c: ('k','e','y',' ')),
(k: 'tkf'; s: 'Throwing Knife'; c: ('t','k','n','i')),
(k: 'tax'; s: 'Throwing Axe'; c: ('t','a','x','e')),
(k: 'jav'; s: 'Javelin'; c: ('j','a','v','e')),
(k: ''; s: 'Weapon'; c: ('w','e','a','p')),
(k: ''; s: 'Melee Weapon'; c: ('m','e','l','e')),
(k: ''; s: 'Missile Weapon'; c: ('m','i','s','s')),
(k: ''; s: 'Throwing Weapon'; c: ('t','h','r','o')),
(k: ''; s: 'Combo Weapon'; c: ('c','o','m','b')),
(k: ''; s: 'Armor'; c: ('a','r','m','o')),
(k: ''; s: 'Any Shield'; c: ('s','h','l','d')),
(k: ''; s: 'Miscellaneous'; c: ('m','i','s','c')),
(k: ''; s: 'Socket Filler'; c: ('s','o','c','k')),
(k: ''; s: 'Second Hand Item'; c: ('s','e','c','o')),
(k: ''; s: 'Staves And Rods'; c: ('r','o','d',' ')),
(k: ''; s: 'Missile'; c: ('m','i','s','l')),
(k: ''; s: 'Blunt'; c: ('b','l','u','n')),
(k: 'jew'; s: 'Jewel'; c: ('j','e','w','l')),
(k: ''; s: 'Class Specific'; c: ('c','l','a','s')),
(k: ''; s: 'Amazon Item'; c: ('a','m','a','z')),
(k: ''; s: 'Barbarian Item'; c: ('b','a','r','b')),
(k: ''; s: 'Necromancer Item'; c: ('n','e','c','r')),
(k: ''; s: 'Paladin Item'; c: ('p','a','l','a')),
(k: ''; s: 'Sorceress Item'; c: ('s','o','r','c')),
(k: ''; s: 'Assassin Item'; c: ('a','s','s','n')),
(k: ''; s: 'Druid Item'; c: ('d','r','u','i')),
(k: ''; s: 'Claw'; c: ('h','2','h',' ')),
(k: ''; s: 'Assassin Claw'; c: ('h','2','h','2')),
(k: ''; s: 'Orb'; c: ('o','r','b',' ')),
(k: ''; s: 'Voodoo Heads'; c: ('h','e','a','d')),
(k: ''; s: 'Paladin Shield'; c: ('a','s','h','d')),
(k: ''; s: 'Barbarian Helm'; c: ('p','h','l','m')),
(k: ''; s: 'Druid Helm'; c: ('p','e','l','t')),
(k: 'cloak'; s: 'Cloak'; c: ('c','l','o','a')),
(k: ''; s: 'Rune'; c: ('r','u','n','e')),
(k: 'circlet'; s: 'Circlet'; c: ('c','i','r','c')),
(k: 'hp3'; s: 'Healing Potion'; c: ('h','p','o','t')),
(k: 'mp3'; s: 'Mana Potion'; c: ('m','p','o','t')),
(k: 'rvs'; s: 'Rejuvenation potion'; c: ('r','p','o','t')),
(k: 'vps'; s: 'Stamina Potion'; c: ('s','p','o','t')),
(k: 'yps'; s: 'Antidote Potion'; c: ('a','p','o','t')),
(k: 'wms'; s: 'Thawing Potion'; c: ('w','p','o','t')),
(k: 'cm1'; s: 'Small Charm'; c: ('s','c','h','a')),
(k: 'cm2'; s: 'Large Charm'; c: ('m','c','h','a')),
(k: 'cm3'; s: 'Grand Charm'; c: ('l','c','h','a')),
(k: ''; s: 'Amazon Bow'; c: ('a','b','o','w')),
(k: ''; s: 'Amazon Spear'; c: ('a','s','p','e')),
(k: ''; s: 'Amazon Javelin'; c: ('a','j','a','v')),
(k: ''; s: 'Magic Arrows'; c: ('m','b','o','q')),
(k: ''; s: 'Magic Bolts'; c: ('m','x','b','q')),
(k: ''; s: 'Chipped Gem'; c: ('g','e','m','0')),
(k: ''; s: 'Flawed Gem'; c: ('g','e','m','1')),
(k: ''; s: 'Normal Gem'; c: ('g','e','m','2')),
(k: ''; s: 'Flawless Gem'; c: ('g','e','m','3')),
(k: ''; s: 'Perfect Gem'; c: ('g','e','m','4')),
(k: 'gsv'; s: 'Amethyst'; c: ('g','e','m','a')),
(k: 'gsw'; s: 'Diamond'; c: ('g','e','m','d')),
(k: 'gsg'; s: 'Emerald'; c: ('g','e','m','e')),
(k: 'gsr'; s: 'Ruby'; c: ('g','e','m','r')),
(k: 'gsb'; s: 'Sapphire'; c: ('g','e','m','s')),
(k: 'gsy'; s: 'Topaz'; c: ('g','e','m','t')),
(k: 'sku'; s: 'Skull'; c: ('g','e','m','z')),
(k: ''; s: '???'; dw: 0));
LocalStrings: array[0..MaxStr + 1] of TLocalStr = (
(name: 'STR_STATS_UNASSIGN_WITH_LIMIT'; value: '+Alt: Unassign, +Shift: by %d points'),
(name: 'STR_STATS_UNASSIGN_WITHOUT_LIMIT'; value: '+Alt: Unassign, +Shift: all remaining points'),
(name: 'STR_STATS_BASE_MIN'; value: 'Base: %d (Min: %d)'),
(name: 'STR_SKILLS_UNASSIGN'; value: 'Un-allocate all skills points'),
(name: 'STR_STASH_PREVIOUS_PAGE'; value: 'Previous Page (+shift: First Page)'),
(name: 'STR_STASH_NEXT_PAGE'; value: 'Next Page (+shift: Last not empty Page'),
(name: 'STR_TOGGLE_TO_PERSONAL'; value: 'Toggle to Personal Stash'),
(name: 'STR_TOGGLE_TO_SHARED'; value: 'Toggle to Shared Stash'),
(name: 'STR_STASH_PREVIOUS_INDEX'; value: 'Previous Index : by %d Pages (+Shift: %d)'),
(name: 'STR_STASH_NEXT_INDEX'; value: 'Next Index : by %d Pages (+shift: %d)'),
(name: 'STR_PERSONAL_PAGE_NUMBER'; value: 'Personal Page n<>%u'),
(name: 'STR_SHARED_PAGE_NUMBER'; value: 'Shared Page n<>%u'),
(name: 'STR_NO_SELECTED_PAGE'; value: 'No selected page'),
(name: 'STR_PUT_GOLD'; value: 'Put Gold'),
(name: 'STR_TAKE_GOLD'; value: 'Take Gold'),
(name: 'STR_SHARED_GOLD_QUANTITY'; value: 'Shared Gold : %u'),
(name: 'STR_PREVIOUS_PAGE'; value: 'Previous Page'),
(name: 'STR_NEXT_PAGE'; value: 'Next Page'),
(name: 'STR_ITEM_LEVEL'; value: 'Item Level: %u'),
(name: 'STR_COW_PORTAL'; value: 'Cow Portal'),
(name: 'STR_PANDEMONIUM_PORTAL'; value: 'Pandemonium Portal'),
(name: 'STR_PANDEMONIUM_FINAL_PORTAL'; value: 'Pandemonium Final Portal'),
(name: 'STR_FULL'; value: 'Fully '),
(name: 'STR_REPAIR'; value: 'Repair '),
(name: 'STR_AND'; value: 'and '),
(name: 'STR_RECHARGE'; value: 'Recharge '),
(name: 'STR_DESTROY_FILLERS'; value: 'Destroys Fillers '),
(name: 'STR_REMOVE_FILLERS'; value: 'Remove Fillers '),
(name: 'STR_REGENERATE'; value: 'Regenerate '),
(name: 'STR_WITH_N_SOCKETS'; value: ' with %u Sockets'),
(name: 'STR_ETHERAL'; value: 'Ethereal '),
(name: 'STR_NOT_ETHERAL'; value: 'Not Ethereal '),
(name: 'STR_NOT_RUNEWORD'; value: 'Not Runeword '),
(name: 'STR_BASIC'; value: 'Basic '),
(name: 'STR_EXCEPTIONAL'; value: 'Exceptional '),
(name: 'STR_ELITE'; value: 'Elite '),
(name: 'STR_CRACKED'; value: 'Cracked '),
(name: 'STR_NORMAL'; value: 'Normal '),
(name: 'STR_SUPERIOR'; value: 'Superior '),
(name: 'STR_MAGIC'; value: 'Magic '),
(name: 'STR_SET'; value: 'Set '),
(name: 'STR_RARE'; value: 'Rare '),
(name: 'STR_UNIQUE'; value: 'Unique '),
(name: 'STR_CRAFTED'; value: 'Crafted '),
(name: 'STR_TEMPERED'; value: 'Tempered '),
(name: 'STR_ITEM'; value: 'Item'),
(name: 'STR_ITEM_SAME_TYPE'; value: 'Item of the same type'),
(name: 'STR_OR_UPGRADED'; value: ' (or upgraded)'),
(name: 'STR_WITHOUT_SOCKET'; value: ' without Sockets'),
(name: 'STR_WITH_SOCKET'; value: ' with Sockets'),
(name: 'STR_ONLY_N_H'; value: ' (Nightmare and Hell only)'),
(name: 'STR_ONLY_HELL'; value: ' (Hell only)'),
(name: 'STR_ONLY_CLASS'; value: ' (%s only)'),
(name: ''; value: '<unknown string>')
);
IniName: AnsiString;
//MS C++__fastcall(ecx,edx) vs Delphi register(eax,edx,ecx) - :(
function InitTranslatedString(_EAX: Integer;_EDX: Integer; iLng: Integer): Boolean; register;
var
IniFile: PIniFile;
CurLng: AnsiString;
S: UTF8String;
i: Integer;
begin
Result := False;
if not FileExists(IniName) then Exit;
if (iLng < 0)or(iLng > MaxLng) then iLng := 0;
CurLng := sLng[iLng];
IniFile := OpenIniFile(IniName);
IniFile.Mode := ifmRead;
for i := 0 to MaxStr do
begin
IniFile.Section := LocalStrings[i].name;
S := IniFile.ValueString(CurLng, '');
if S <> '' then LocalStrings[i].value := UTF8Decode(S);
end;
for i := 0 to MaxType do
begin
IniFile.Section := StrTypes[i].c;
S := IniFile.ValueString(CurLng, '');
if S <> '' then
begin
StrTypes[i].s := UTF8Decode(S);
StrTypes[i].k := '';
end;
end;
Result := True;
end;
//MS C++__fastcall(ecx,edx) vs Delphi register(eax,edx,ecx) - :(
function GetTranslatedString(_EAX: Integer;_EDX: Integer; Idx: Integer): PWideChar; register;
begin
if (Idx < 0)or(Idx > MaxStr) then Idx := MaxStr + 1;
Result := @LocalStrings[Idx].Value[1];
end;
//MS C++__fastcall(ecx,edx) vs Delphi register(eax,edx,ecx) - :(
function GetTypeString(_EAX: Integer;out IdxStr: PAnsiChar; Code: Cardinal): PWideChar; register;
var
i: Integer;
begin
i := 0;
while i <= MaxType do
begin
if Code = StrTypes[i].dw then Break;
Inc(i);
end;
if StrTypes[i].k = '' then
IdxStr := nil
else
IdxStr := PAnsiChar(StrTypes[i].k);
Result := PWideChar(StrTypes[i].s);
end;
function WSprintStringLastGender(buf: PWideChar; lenbuf: Integer; Idx: Integer): Integer; stdcall;
var
i, p, L: Integer;
S: WideString;
begin
S := GetTranslatedString(0,0,Idx);
if Gender <> '' then
begin
p := Pos(Gender, S);
if p <> 0 then
begin
L := Length(S);
p := p + Length(Gender);
for i := p to L do
if S[i] = '[' then Break;
S := Copy(S, p, i - p);
end;
end;
Result := Min(lenbuf - 1, Length(S));
for i := 1 to Result do
buf[i-1] := S[i];
buf[Result + 1] := #$0000;
end;
//MS C++__fastcall(ecx,edx) vs Delphi register(eax,edx,ecx) - :(
function SetMonoString(_EAX: Integer;_EDX: Integer; InStr: PWideChar): PWideChar; register;
var
StrList: PWStrList;
i: Integer;
S: WideString;
begin
Result := InStr;
if Result = nil then Exit;
StrList := NewWStrList;
StrList.Text := InStr;
i := Strlist.Count - 1;
if i = 0 then Exit;
S := StrList.Items[i];
while i > 0 do
begin
Dec(i);
S := S + '. ' + StrList.Items[i];
end;
Move(S[1], InStr[0], Length(S) shl 1);
end;
//MS C++__fastcall(ecx,edx) vs Delphi register(eax,edx,ecx) - :(
function CutStringGender(_EAX: Integer;_EDX: Integer; InStr: PWideChar): PWideChar; register;
var
i, j: Integer;
begin
Result := InStr;
Gender := '';
if (InStr = nil)or(InStr[0] <> '[') then Exit;
i := 1;
while (InStr[i] <> #$0000) do
begin
if InStr[i] = ']' then
begin
if (i < 2)or(InStr[i+1] = #$0000) then Exit;
SetLength(Gender, i + 1);
for j := 0 to i do
Gender[j+1] := InStr[j];
Result := @InStr[i+1];
Exit;
end;
Inc(i);
end;
end;
{
const
NcColor = 14;
LenCode = 9;
type
TTextColor = array[0..LenCode - 1] of AnsiChar;
const
cColor: array[0..NcColor - 1] of TTextColor = (
('\','w','h','i','t','e',';',#00,#00),
('\','g','r','e','y',';',#00,#00,#00),
('\','r','e','d',';',#00,#00,#00,#00),
('\','g','r','e','e','n',';',#00,#00),
('\','b','l','u','e',';',#00,#00,#00),
('\','g','o','l','d',';',#00,#00,#00),
('\','d','g','r','e','y',';',#00,#00),
('\','b','l','a','c','k',';',#00,#00),
('\','t','a','n',';',#00,#00,#00,#00),
('\','o','r','a','n','g','e',';',#00),
('\','y','e','l','l','o','w',';',#00),
('\','d','g','r','e','e','n',';',#00),
('\','p','u','r','p','l','e',';',#00),
('\','c','o','l','o','r',';',#00,#00));
//lengths of strings in cColor table, without '\'
cColLength: array[0..NcColor-1] of Byte = (6,5,4,6,5,5,6,6,4,7,7,7,7,6);
pColor: PAnsiChar = @cColor[NcColor-1][1];
var
SaveToTbl: Byte = 0;
//ANSI convert ColorApi to ColorCode
//optional UCS2 convert '\n' to $0A
function ColorApi2ColorCode(Src: PAnsiChar; Dst: PAnsiChar;
SourceChars: Integer): Integer;
//EAX: Src
//EDX: Dst
//ECX: Length Src
//Result: OutLength -> EAX
asm
//backup
PUSHF
CLD //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PUSH ESI
PUSH EDI
PUSH EBX
PUSH EBP
PUSH EDX //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MOV EDI, Dst
TEST Src, Src //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JZ @Exit
MOV ESI, Src
// <20> ECX <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Src
@NextChar:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> EAX
XOR EAX, EAX
LODSB //MOV AL, [ESI]+
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
TEST AL, AL
JZ @Exit
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '\'
CMP AL, '\'
JE @Slash
@CopyChar:
//normal chars
STOSB //MOV [EDI]+, AL
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
@Loop:
LOOP @NextChar
@Exit:
MOV BYTE PTR [EDI], $00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
POP EAX //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XCHG EAX, EDI
//get length of Dst
SUB EAX, EDI
//restore
POP EBP
POP EBX
POP EDI
POP ESI
POPF
RET
@Slash:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMP ECX, 1
JB @CopyChar // if ECX < 1
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LODSB //MOV AL, [ESI]+
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMP AL, 'n'
JNZ @TestColor
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ECX
DEC ECX
//test Save2Tbl
CMP SaveToTbl, 0
JNZ @UnixReturn
//save '\n'
MOV AL, '\'
STOSB //MOV [EDI]+, AL
MOV AL, 'n'
JMP @CopyChar
@UnixReturn:
//save UnixNewLine
MOV AL, $0A
JMP @CopyChar
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
@TestColor:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//CMP MacroColorView, $00
//JE @StoreSlash
//backup
PUSH ECX
PUSH EDI
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ESI
DEC ESI
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MOV EBX, ESI
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
MOV EAX, NcColor
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD> '')
MOV EBP, pColor
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> '\' <20>
//(-1, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EAX)
LEA EDX, [cColLength - 1]
@CmpStr:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MOV EDI, EBP
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MOVZX ECX, BYTE PTR [EDX + EAX]
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
//(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD> Src <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
REPE CMPSB
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
JZ @ColorCode
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MOV ESI, EBX
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SUB EBP, LenCode
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
DEC EAX
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
JA @CmpStr //if EAX > 0
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '\' <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//restore
POP EDI
POP ECX
@StoreSlash:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '\'
MOV AL, '\'
JMP @CopyChar
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F> AL <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> cColor
@ColorCode:
//restore
POP EDI
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> ColorCode
MOVZX EDX, BYTE PTR [EDX + EAX]//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADD AL, $2E //1..14 + $2E = $2F..$3C
//backup EAX
MOV ECX, EAX
//save ColorCode
MOV AX, $63FF
STOSW //MOVD [EDI]+, AX
//restore EAX
MOV EAX, ECX
//test \color;
CMP AL, $3C
JE @FullColorCode
//add number to ColorCode
STOSB //MOVD [EDI]+, AL
@FullColorCode:
//restore ECX
POP ECX
SUB ECX, EDX //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ECX <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JZ @Exit //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ESI <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JMP @NextChar //ECX >= 1
end;
//MS C++__fastcall(ecx,edx) vs Delphi register(eax,edx,ecx) - :(
procedure ReplaceColorCode(_EAX: Integer;_EDX: Integer; Str: PAnsiChar); register;
var
i, L, n: Integer;
begin
L := Length(Str);
n := ColorApi2ColorCode(Str, Str, L);
Dec(L);
for i := n to L do
begin
//Str[i] := ' ';
end;
//MsgOK(Str);
end;
}
//Decode string from UCS2 to UTF8
//WideCharToMultiByte not support CP_UTF8 in Windows 95
function UCS2ToUTF8(Dest: PAnsiChar; MaxDestBytes: Integer;
Source: PWideChar; SourceChars: Integer): Integer;
//EAX: @Dest
//EDX: MaxDestBytes
//ECX: @Source
//(ESP): SourceChars;
//Result: DestChars of @Dest -> EAX
asm
//backup
PUSHF
CLD //set (ESI)+
PUSH EBX
PUSH ESI
PUSH EDI
PUSH Dest //backup @Dst
MOV EDI, Dest
TEST Source, Source //test NULL string
JZ @Exit
MOV ESI, Source
MOV ECX, SourceChars
@NextChar:
//test length of Dst
DEC EDX
JLE @Exit
//get next char to EAX
XOR EAX, EAX
LODSW //MOV AX, [ESI]+
//test NULL char (end of string)
TEST EAX, EAX
JZ @Exit
//decode UCS2 to UTF8
@Ucs2ToUtf8:
//test UCS2-char in $0000..$007F
CMP AX, $007F
JA @11xxxxxx //if AX > $7F
//UTF8-char: 0xxxxxxx
//AH = 00000000; AL = 0xxxxxxx
@0xxxxxxx:
//save UTF8-char
STOSB //MOVB [EDI]+, AL
//end Loop
@Loop:
LOOP @NextChar
JMP @Exit
@11xxxxxx:
//test length of Dst
DEC EDX
JLE @Exit
//test UCS2-char in $0080..$07FF
CMP AX, $07FF
JA @1110xxxx //if AX > $07FF
//UTF8-char: 110xxxxx 10xxxxxx
//AH = 00000xxx; AL = xxxxxxxx
//get first byte UTF8-char to AL
ROR AX, 6 //AH = xxxxxx00; AL = 000xxxxx
//get second byte UTF8-char to AH
SHR AH, 2 //AH = 00xxxxxx
OR AX, $80C0 //AH = 10xxxxxx; AL = 110xxxxx
//save UTF8-char
STOSW //MOVW [EDI]+, AX
JMP @Loop
//UTF8-char: 1110xxxx 10xxxxxx 10xxxxxx
@1110xxxx:
//test length of Dst
DEC EDX
JLE @Exit
//save lobyte of UCS2-char
MOV BL, AL
//AH = xxxxxxxx; AL = xxxxxxxx
//get first byte UTF8-char UTF8 to AL
ROL AX, 4 //AL = ????xxxx; AH = xxxxxx??
AND AL, $0F //AL = 0000xxxx
//get second byte UTF8-char to AH
SHR AH, 2 //AH = 00xxxxxx
OR AX, $80E0 //AH = 10xxxxxx; AL = 1110xxxx
//save first bytes UTF8-char
STOSW //MOVW [EDI]+, AX
//get second byte UTF8-char to AL
XCHG EAX, EBX //??xxxxxx
AND AL, $3F //00xxxxxx
OR AL, $80 //10xxxxxx
//save third byte UTF8-char
JMP @0xxxxxxx
@Exit:
MOV BYTE PTR [EDI], $00 //set end-char of Dst
POP EAX //restore @Dst
XCHG EAX, EDI
//get length of Dst to Result
SUB EAX, EDI
//restore
POP EDI
POP ESI
POP EBX
POPF
end;
function _UCS2ToUTF8(Dest: PAnsiChar; MaxDestBytes: Integer;
Source: PWideChar; SourceChars: Integer): Integer; stdcall;
begin
Result := UCS2ToUTF8(Dest, MaxDestBytes, Source, SourceChars);
end;
//Decode string from UTF8 to UCS2
function UTF8ToUCS2(Dest: PWideChar; MaxDestBytes: Integer;
Source: PAnsiChar; SourceChars: Integer): Integer;
//EAX: @Dest
//EDX: MaxDestBytes
//ECX: @Source
//(ESP): SourceChars;
//Result: DestChars of @Dest -> EAX
//if errors then
//Result: -(DestChars of @Dest) -> EAX
asm
//backup
PUSHF
CLD //set (ESI)+
PUSH EBX
PUSH ESI
PUSH EDI
PUSH Dest //backup @Dst
MOV EDI, Dest
TEST Source, Source //test NULL string
JZ @Exit
MOV ESI, Source
MOV ECX, SourceChars
@NextChar:
//test length of Dst
SUB EDX, 2
JLE @Exit
//get next char to EAX
XOR EAX, EAX
LODSB //MOV AL, [ESI]+
//test NULL char (end of string)
TEST AL, AL
JZ @Exit
//decode UTF8 to UCS2
@Utf8ToUcs2:
//test first byte UTF8 = 0xxxxxxx
TEST AL, $80
JNZ @1xxxxxxx
//UTF8: 0xxxxxxx (AH = 0)
@SaveU16:
STOSW //MOVW [EDI]+, EAX
@Loop:
LOOP @NextChar
JMP @Exit
@1xxxxxxx:
//test first byte UTF8 = 10xxxxxx
TEST AL, $40 //01000000
JZ @Exit //Error UTF8: 10xxxxxx
//test first byte UTF8 = 1111xxxx
CMP AL, $F0 //11110000
JAE @Exit //Error UTF8 to UCS2: 1111xxxx ( if AL >= $F0)
//test exist second byte UTF8
JECXZ @Exit // DEC ECX; if ECX = 0
//backup first byte UTF8
MOV AH, AL //11xxxxxx
//load second byte UTF8
LODSB //MOV AL, [ESI]+
//test second byte UTF8 = 10xxxxxx
TEST AL, $40 //01000000
JNE @Exit //Error UTF8: 10xxxxxx
//test second byte UTF8 = 110xxxxx
TEST AH, $20 //00100000
JNZ @1110xxxx //third byte UTF8
//UTF8: 110xxxxx 10xxxxxx
//backup first byte UTF8
MOV BL, AH //110xxxxx
//get high byte UCS2
SHR AH, 2 //00110xxx
AND AX, $073F //AH: 00000xxx; AL: 00xxxxxx
//get low byte USC2
SHL BL, 6 //xx000000
OR AL, BL //xxxxxxxx
//AX: 00000xxx:xxxxxxxx
JMP @SaveU16
@1110xxxx:
//test exist third byte UTF8
JeCXZ @Exit // DEC ECX; if ECX = 0
//backup second byte UTF8
MOV BL, AL //10xxxxxx
//load third byte UTF8
LODSB //MOV AL, [ESI]+
//test third byte UTF8 = 10xxxxxx
CMP AL, $C0 //11000000
JAE @Exit //Error UTF8: 11xxxxxx ( if AL >= $C0)
//UTF8: 1110xxxx 10xxxxxx 10xxxxxx
//get bytes UCS2 <20><>: xx00000:0000xxxx
AND BX, $003F //DX := 00000000:00xxxxxx
ROR BX, 2 //BL := 0000xxxx; BH := xx000000
//get low byte UTF8
AND AL, $3F //00xxxxxx
OR AL, BH //xxxxxxxx
//get high byte UCS2
SHL AH, 4 //xxxx0000
OR AH, BL //xxxxxxxx
JMP @SaveU16
@Exit:
XOR EAX, EAX
MOV [EDI],AX //set end-char of Dst
POP EAX //restore @Dst
XCHG EAX, EDI
//get length of Dst to Result
SUB EAX, EDI
SHR EAX, 1
//restore
POP EDI
POP ESI
POP EBX
POPF
end ; //asm
function _UTF8ToUCS2(Dest: PWideChar; MaxDestBytes: Integer;
Source: PAnsiChar; SourceChars: Integer): Integer; stdcall;
begin
Result := UTF8ToUCS2(Dest, MaxDestBytes, Source, SourceChars);
end;
exports
_UCS2ToUTF8 name '__stdcall UCS2toUTF8',
_UTF8ToUCS2 name '__stdcall UTF8toUCS2',
//ReplaceColorCode name 'replaceColorCode',
SetMonoString name '__fastcall setMonoString',
WSprintStringLastGender name '__stdcall wSprintStringLastGender',
CutStringGender name '__fastcall cutStringGender',
GetTypeString name '__fastcall getTypeString',
GetTranslatedString name '__fastcall getTranslatedString',
InitTranslatedString name '__fastcall initTranslatedString';
var
i, j: Integer;
S: UTF8String;
b: Boolean;
begin
IniName := GetStartDir + NamePlugyLocal;
if FileExists(IniName) then Exit;
S := #$EF#$BB#$BF';UTF8';
for i := 0 to MaxStr do
begin
S := S + #$0D#$0A'[' + LocalStrings[i].name + ']'#$0D#$0A + sLng[0] + '="'
+ LocalStrings[i].value + '"'#$0D#$0A;
for j := 1 to MaxLng do
S := S + sLng[j] + '='#$0D#$0A;
end;
for i := 0 to MaxType do
begin
S := S + #$0D#$0A;
b := (StrTypes[i].k <> '');
if b then
S := S + ';';
S := S + '[' + StrTypes[i].c + ']'#$0D#$0A;
if b then
S := S + ';';
S := S + sLng[0] + '="' + StrTypes[i].s + '"'#$0D#$0A;
if not b then
begin
for j := 1 to MaxLng do
S := S + sLng[j] + '='#$0D#$0A;
end;
end;
StrSaveToFile(IniName, S);
end.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@@ -1,18 +1,8 @@
/* /*
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
*/ */
#include <windows.h> #include "stdafx.h"
#include <stdio.h> #include "PlugYRun.h"
#include <Psapi.h>
#include "../Commons/VersionInfo.h"
//#using <mscorlib.dll>
//#using <System.dll>
//using namespace EnvDTE;
//using namespace System;
//using namespace System::Diagnostics;
//using namespace System::ComponentModel;
//using namespace System.Diagnostics;
/* /*
0012C458 00000000 |ModuleFileName = NULL 0012C458 00000000 |ModuleFileName = NULL
0012C45C 0012C908 |CommandLine = ""C:\Jeux\Diablo II\Game.exe"" 0012C45C 0012C908 |CommandLine = ""C:\Jeux\Diablo II\Game.exe""
@@ -24,24 +14,26 @@
0012C474 0012DF94 |CurrentDir = "C:\Jeux\Diablo II\" 0012C474 0012DF94 |CurrentDir = "C:\Jeux\Diablo II\"
0012C478 0012C6BC |pStartupInfo = 0012C6BC 0012C478 0012C6BC |pStartupInfo = 0012C6BC
0012C47C 0012C5CC \pProcessInfo = 0012C5CC 0012C47C 0012C5CC \pProcessInfo = 0012C5CC
$ ==> >44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D............... $ ==> >44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
$+10 >1A 13 03 00 08 00 00 00 14 13 04 00 00 00 00 00 ......... $+10 >1A 13 03 00 08 00 00 00 14 13 04 00 00 00 00 00
$+20 >01 00 00 00 0C C7 12 00 34 87 D1 77 81 00 00 00 ....<2E>.4<EFBFBD><EFBFBD>w<EFBFBD>... $+20 >01 00 00 00 0C C7 12 00 34 87 D1 77 81 00 00 00
$+30 >0A 00 00 00 00 00 00 00 00 00 00 00 89 F6 D4 77 ............<2E><><EFBFBD>w $+30 >0A 00 00 00 00 00 00 00 00 00 00 00 89 F6 D4 77
$+40 >CD AB BA DC 00 00 00 00 ͫ<><CDAB>.... $+40 >CD AB BA DC 00 00 00 00
//0xE9,0x1C,0xD1,0xA8,0x6F 0xE9,0x1C,0xD1,0xA8,0x6F
*/ */
#define MAX_LOADSTRING 100
#define SUBKEY "Software\\Blizzard Entertainment\\Diablo II" #define SUBKEY "Software\\Blizzard Entertainment\\Diablo II"
#define GAMEFILE "\\Game.exe" #define GAMEFILE "Game.exe "
#define INIFILE "\\PlugY.ini" #define INIFILE "PlugY.ini"
#define LAUNCHING "LAUNCHING" #define LAUNCHING "LAUNCHING"
#define LOD_VERSION "LodVersionFolder" #define LOD_VERSION "LodVersionFolder"
#define PARAM "Param" #define PARAM "Param"
#define WINDOWED "Windowed"
#define ACTIVE_WINDOWED "ActiveWindowed"
#define LIBRARY_NAME "Library" #define LIBRARY_NAME "Library"
BYTE loadDll[] = { BYTE loadDll[] = {
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4] 0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA 0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA
@@ -104,7 +96,6 @@ BYTE freeDll[]={
//LPCSTR dllName = "PlugY.dll"; //LPCSTR dllName = "PlugY.dll";
LPCSTR initFctName = "_Init@4"; LPCSTR initFctName = "_Init@4";
LPCSTR releaseFctName = "_Release@0"; LPCSTR releaseFctName = "_Release@0";
static bool versionXP; static bool versionXP;
typedef int(__stdcall* tDebugActiveProcessStop)(DWORD); typedef int(__stdcall* tDebugActiveProcessStop)(DWORD);
@@ -113,31 +104,28 @@ tDebugActiveProcessStop debugActiveProcessStop;
void assertion(LPCSTR msg) void assertion(LPCSTR msg)
{ {
MessageBox(0, msg, "PlugYRun", MB_OK|MB_ICONASTERISK); MessageBox(0, msg, "PlugY", MB_OK | MB_ICONASTERISK);
exit(1); exit(1);
} }
bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd, int ver) bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
{ {
BYTE buf[200]; BYTE buf[200];
DWORD pos = 0; DWORD pos = 0;
SIZE_T nb = 0; SIZE_T nb = 0;
SIZE_T nb2=0; DWORD version;
//DWORD version;
int res; int res;
// Get Version and needed addresses. // Get Version and needed addresses.
/* res = ReadProcessMemory(h,(LPVOID)(addr+0x110),&version,4,&nb);//0x80 res = ReadProcessMemory(h, (LPVOID)(addr + 0x110), &version, 4, &nb);//0x80
if (!res || (nb != 4)) assertion("Read to get current d2gfx version in memory failed"); if (!res || (nb != 4)) assertion("Read to get current d2gfx version in memory failed");
*/
DWORD loadCallerAddr = addr; DWORD loadCallerAddr = addr;
DWORD freeCallerAddr = addr; DWORD freeCallerAddr = addr;
DWORD loadLibraryAddr = addr; DWORD loadLibraryAddr = addr;
DWORD freeLibraryAddr = addr; DWORD freeLibraryAddr = addr;
DWORD getProcAddressAddr = addr; DWORD getProcAddressAddr = addr;
// GET_VERSION(D2gfx, 110, 000054EB, 00001000, 0000C000, 42E6C22A, 43028B19);//110 // GET_VERSION(D2gfx, 110, 000054EB, 00001000, 0000C000, 42E6C22A, 43028B19);//110
/*
switch (version) switch (version)
{ {
case 0x000054EB://1.09b 0x00949FA8: case 0x000054EB://1.09b 0x00949FA8:
@@ -176,7 +164,7 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd, int ver)
freeLibraryAddr += 0xD12C; freeLibraryAddr += 0xD12C;
getProcAddressAddr += 0xD120; getProcAddressAddr += 0xD120;
break; break;
case 0x00000000://1.13 case 0x00000000://1.13c
loadCallerAddr += 0xB423; loadCallerAddr += 0xB423;
freeCallerAddr += 0xB3CA; freeCallerAddr += 0xB3CA;
loadLibraryAddr += 0xD11C; loadLibraryAddr += 0xD11C;
@@ -185,67 +173,8 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd, int ver)
break; break;
default: default:
assertion("Wrong version of the library D2gfx.dll"); assertion("Wrong version of the library D2gfx.dll");
}*/
switch (ver)
{
case v109b:
case v109d:
loadCallerAddr += 0x389B;
freeCallerAddr += 0x3A8C;
loadLibraryAddr += 0xC03C;
freeLibraryAddr += 0xC044;
getProcAddressAddr += 0xC038;
break;
case v110:
loadCallerAddr += 0x3870;
freeCallerAddr += 0x3A6D;
loadLibraryAddr += 0xC040;
freeLibraryAddr += 0xC048;
getProcAddressAddr += 0xC03C;
break;
case v111:
loadCallerAddr += 0x8B23;
freeCallerAddr += 0x8ACA;
loadLibraryAddr += 0xD11C;
freeLibraryAddr += 0xD12C;
getProcAddressAddr += 0xD120;
break;
case v111b:
loadCallerAddr += 0xB423;
freeCallerAddr += 0xB3CA;
loadLibraryAddr += 0xD11C;
freeLibraryAddr += 0xD12C;
getProcAddressAddr += 0xD120;
break;
case v112:
loadCallerAddr += 0x8F63;
freeCallerAddr += 0x8F0A;
loadLibraryAddr += 0xD11C;
freeLibraryAddr += 0xD12C;
getProcAddressAddr += 0xD120;
break;
case v113c:
loadCallerAddr += 0xB423;
freeCallerAddr += 0xB3CA;
loadLibraryAddr += 0xD11C;
freeLibraryAddr += 0xD12C;
getProcAddressAddr += 0xD120;
break;
case v113d:
loadCallerAddr += 0xAA03;
freeCallerAddr += 0xA9AA;
loadLibraryAddr += 0xD11C;
freeLibraryAddr += 0xD124;
getProcAddressAddr += 0xD120;
break;
default:
return false;//assertion("Wrong version of the Game.exe");
} }
//const char sD2Ver[8][7] = {{"v1.09b"},{"v1.09d"},{"v1.10 "},{"v1.11 "},{"v1.11b"},{"v1.12 "},{"v1.13c"},{"v1.13d"}};
//assertion(sD2Ver[version]);
//Verify if memory are ok. //Verify if memory are ok.
bool alreadyInstalled = false; bool alreadyInstalled = false;
res = ReadProcessMemory(h, (LPVOID)loadCallerAddr, buf, 6, &nb); res = ReadProcessMemory(h, (LPVOID)loadCallerAddr, buf, 6, &nb);
@@ -393,40 +322,65 @@ bool isD2gfx(HANDLE hProcess, LPVOID dllAdr)
return true; return true;
} }
bool getWinReg(char* buf, DWORD bufsize) bool isGameLoaded(HANDLE hProcess, LPVOID baseAdr)
{
SIZE_T nbRead;
BYTE buf[BUF_SIZE];
ReadProcessMemory(hProcess, baseAdr, buf, BUF_SIZE, &nbRead);
if (nbRead < 0x40) return false;
int offsetPESignature = *(DWORD*)(buf + 0x3C);
if (offsetPESignature + 0x5C >= BUF_SIZE) return false;
DWORD baseOfCode = *(DWORD*)(buf + offsetPESignature + 0x34);
DWORD SizeOfImage = *(DWORD*)(buf + offsetPESignature + 0x50);
DWORD CheckSum = *(DWORD*)(buf + offsetPESignature + 0x58);
if ((baseOfCode==0x00400000) && (SizeOfImage == 0x005A5000) && (CheckSum == 0x00374101)) return true;//1.14c
return false;
}
bool getWinReg(LPSTR buf, DWORD bufsize)
{ {
HKEY hKey; HKEY hKey;
DWORD type; DWORD type;
int res; int res;
DWORD len = bufsize;
if (RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { if (RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
res = RegQueryValueEx(hKey,"InstallPath",NULL,&type,(LPBYTE)buf,&bufsize); res = RegQueryValueEx(hKey, "InstallPath", NULL, &type, (LPBYTE)buf, &len);
RegCloseKey(hKey); RegCloseKey(hKey);
if (res != ERROR_SUCCESS) return false; if (res != ERROR_SUCCESS) return false;
} else if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { }
res = RegQueryValueEx(hKey,"InstallPath",NULL,&type,(LPBYTE)buf,&bufsize); else if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
res = RegQueryValueEx(hKey, "InstallPath", NULL, &type, (LPBYTE)buf, &len);
RegCloseKey(hKey); RegCloseKey(hKey);
if (res != ERROR_SUCCESS) return false; if (res != ERROR_SUCCESS) return false;
} else { }
else {
return false; return false;
} }
strcat(buf, GAMEFILE); if (len <= 1)
if (GetFileAttributes(buf) == INVALID_FILE_ATTRIBUTES)
return false; return false;
if (buf[len - 2] != '\\')
{
if (len >= bufsize)
return false;
buf[len - 1] = '\\';
buf[len] = NULL;
}
return true; return true;
} }
bool launchNormal(char* command, char* currentDirectory) bool launchNormal(LPSTR commandLine, LPSTR currentDirectory)
{ {
STARTUPINFO si; STARTUPINFO si;
PROCESS_INFORMATION pi; PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si)); ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si); si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi)); ZeroMemory(&pi, sizeof(pi));
BOOL success = CreateProcess(0, command, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS BOOL success = CreateProcess(NULL, commandLine, NULL, NULL, false, 0, NULL, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
return success ? true : false; return success ? true : false;
} }
bool launchGame98(char* command, char* currentDirectory, char* libraryName, int ver) bool launchGame98(LPSTR commandLine, LPSTR currentDirectory, LPSTR libraryName)
{ {
// MessageBox(0, "LAUNCH 98", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "LAUNCH 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
STARTUPINFO si; STARTUPINFO si;
@@ -434,7 +388,7 @@ bool launchGame98(char* command, char* currentDirectory, char* libraryName, int
ZeroMemory(&si, sizeof(si)); ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si); si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi)); ZeroMemory(&pi, sizeof(pi));
BOOL success = CreateProcess(0, command, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS BOOL success = CreateProcess(0, commandLine, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
if (!success) return false; if (!success) return false;
DWORD ret; DWORD ret;
// MessageBox(0, "LAUNCH 98 while", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "LAUNCH 98 while", "PlugYRun", MB_OK|MB_ICONASTERISK);
@@ -449,14 +403,14 @@ bool launchGame98(char* command, char* currentDirectory, char* libraryName, int
if (isD2gfx(pi.hProcess, (LPVOID)0x6FA80000)) if (isD2gfx(pi.hProcess, (LPVOID)0x6FA80000))
{ {
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
installPlugY(pi.hProcess, 0x6FA80000, libraryName, 1, ver); installPlugY(pi.hProcess, 0x6FA80000, libraryName, 1);
ResumeThread(pi.hThread); ResumeThread(pi.hThread);
return true; return true;
} }
if (isD2gfx(pi.hProcess, (LPVOID)0x6FA70000)) if (isD2gfx(pi.hProcess, (LPVOID)0x6FA70000))
{ {
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
installPlugY(pi.hProcess, 0x6FA70000, libraryName, 0, ver); installPlugY(pi.hProcess, 0x6FA70000, libraryName, 0);
ResumeThread(pi.hThread); ResumeThread(pi.hThread);
return true; return true;
} }
@@ -466,8 +420,7 @@ bool launchGame98(char* command, char* currentDirectory, char* libraryName, int
return true; return true;
} }
bool launchGameXP(LPSTR commandLine, LPSTR currentDirectory, LPSTR libraryName)
bool launchGameXP(char* command, char* currentDirectory, char* libraryName, int ver)
{ {
// MessageBox(0, "LAUNCH XP", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "LAUNCH XP", "PlugYRun", MB_OK|MB_ICONASTERISK);
STARTUPINFO si; STARTUPINFO si;
@@ -475,11 +428,10 @@ bool launchGameXP(char* command, char* currentDirectory, char* libraryName, int
ZeroMemory(&si, sizeof(si)); ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si); si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi)); ZeroMemory(&pi, sizeof(pi));
BOOL success = CreateProcess(0, command, 0, 0, false, DEBUG_PROCESS, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS BOOL success = CreateProcess(0, commandLine, 0, 0, false, DEBUG_PROCESS, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
if (!success) return false; if (!success) return false;
DEBUG_EVENT DebugEvent; DEBUG_EVENT DebugEvent;
DWORD status; DWORD status;
// MessageBox(0, "START WAITING", "PlugYRun", MB_OK|MB_ICONASTERISK);
while (WaitForDebugEvent(&DebugEvent, INFINITE)) while (WaitForDebugEvent(&DebugEvent, INFINITE))
{ {
status = DBG_CONTINUE; status = DBG_CONTINUE;
@@ -489,33 +441,35 @@ bool launchGameXP(char* command, char* currentDirectory, char* libraryName, int
CloseHandle(DebugEvent.u.CreateThread.hThread); CloseHandle(DebugEvent.u.CreateThread.hThread);
break; break;
case CREATE_PROCESS_DEBUG_EVENT: case CREATE_PROCESS_DEBUG_EVENT:
if (isGameLoaded(pi.hProcess, DebugEvent.u.CreateProcessInfo.lpBaseOfImage))
{
//installPlugYOnGame(pi.hProcess, (DWORD)DebugEvent.u.CreateProcessInfo.lpBaseOfImage, libraryName, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll == 0x6FA8000);
CloseHandle(DebugEvent.u.CreateProcessInfo.hFile);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
debugActiveProcessStop(DebugEvent.dwProcessId);
return true;
}
break; break;
case EXIT_PROCESS_DEBUG_EVENT: case EXIT_PROCESS_DEBUG_EVENT:
// MessageBox(0, "EXIT", "PlugY", MB_OK|MB_ICONASTERISK);
exit(0); exit(0);
case EXCEPTION_DEBUG_EVENT: case EXCEPTION_DEBUG_EVENT:
if (DebugEvent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_ACCESS_VIOLATION) if (DebugEvent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
MessageBox(0, "EXCEPTION_ACCESS_VIOLATION", "PlugY", MB_OK | MB_ICONASTERISK); MessageBox(0, "EXCEPTION_ACCESS_VIOLATION", "PlugY", MB_OK | MB_ICONASTERISK);
// status = DBG_EXCEPTION_NOT_HANDLED;
break; break;
case LOAD_DLL_DEBUG_EVENT: case LOAD_DLL_DEBUG_EVENT:
// if (!GetModuleBaseName(pi.hProcess,(HMODULE)DebugEvent.u.LoadDll.lpBaseOfDll,buf,100))
// MessageBox(0, "ERROR", "PlugYRun", MB_OK|MB_ICONASTERISK);
// sprintf(buf,"%08X : %d",DebugEvent.u.LoadDll.lpBaseOfDll,GetLastError());
// MessageBox(0, buf, "PlugYRun", MB_OK|MB_ICONASTERISK);
// if (!strcmp(buf,"d2gfx.dll"))
// if ((LPVOID)GetModuleHandle("D2gfx.dll") == DebugEvent.u.LoadDll.lpBaseOfDll)//pi.hProcess,,buf,bufSize);
if (isD2gfx(pi.hProcess, DebugEvent.u.LoadDll.lpBaseOfDll)) if (isD2gfx(pi.hProcess, DebugEvent.u.LoadDll.lpBaseOfDll))
{ {
// MessageBox(0, "INSTALL XP", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "INSTALL XP", "PlugYRun", MB_OK|MB_ICONASTERISK);
installPlugY(pi.hProcess, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll, libraryName, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll == 0x6FA8000, ver); installPlugY(pi.hProcess, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll, libraryName, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll == 0x6FA8000);
CloseHandle(DebugEvent.u.LoadDll.hFile); CloseHandle(DebugEvent.u.LoadDll.hFile);
CloseHandle(pi.hProcess); CloseHandle(pi.hProcess);
CloseHandle(pi.hThread); CloseHandle(pi.hThread);
debugActiveProcessStop(DebugEvent.dwProcessId); debugActiveProcessStop(DebugEvent.dwProcessId);
// MessageBox(0, "INSTALL XP end", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "INSTALL XP end", "PlugYRun", MB_OK|MB_ICONASTERISK);
return true; return true;
} else }
else
CloseHandle(DebugEvent.u.LoadDll.hFile); CloseHandle(DebugEvent.u.LoadDll.hFile);
break; break;
} }
@@ -525,205 +479,87 @@ bool launchGameXP(char* command, char* currentDirectory, char* libraryName, int
return true; return true;
} }
int APIENTRY WinMain(_In_ HINSTANCE hInstance,
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) _In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow)
{ {
char currrentDirectory[MAX_PATH]; char currrentDirectory[MAX_PATH];
char iniFileName[MAX_PATH]; char iniFileName[MAX_PATH];
char command[MAX_PATH+50]; char command[MAX_PATH + 256];
int ver;
// MessageBox(NULL,"START","PlugYRun",MB_OK);
// Get Current Directory. // Get Current Directory.
if (!GetCurrentDirectory(MAX_PATH-1,currrentDirectory)) if (!GetCurrentDirectory(sizeof(currrentDirectory), currrentDirectory))
assertion("Current directory not found"); assertion("Current directory not found");
int len = strlen(currrentDirectory); int len = strlen(currrentDirectory);
if (len && currrentDirectory[len-1] != '\\') if (len == 0)
assertion("Current directory not found");
if (currrentDirectory[len - 1] != '\\')
{ {
currrentDirectory[len+1]=NULL; if (len >= MAX_PATH - 1)
currrentDirectory[len]='\\'; assertion("Path length too long");
currrentDirectory[len++] = '\\';
currrentDirectory[len] = NULL;
} }
// Get ini full path name. // Get ini full path name.
strcpy(iniFileName, currrentDirectory); strcpy(iniFileName, currrentDirectory);
if (len + strlen(INIFILE) >= sizeof(iniFileName))
assertion("Path length too long");
strcat(iniFileName, INIFILE); strcat(iniFileName, INIFILE);
//Get current directory. // Get game.exe path.
strcpy(command, currrentDirectory); strcpy(command, currrentDirectory);
int cmdLen = len + strlen(GAMEFILE);
if (cmdLen >= sizeof(command))
assertion("Path length too long");
strcat(command, GAMEFILE);
if (GetFileAttributes(command) == INVALID_FILE_ATTRIBUTES)
{
if (!getWinReg(command, sizeof(command)))
return 1;
cmdLen = strlen(command) + strlen(GAMEFILE);
if (cmdLen >= sizeof(command))
assertion("Path length too long");
strcat(command, GAMEFILE); strcat(command, GAMEFILE);
if (GetFileAttributes(command) == INVALID_FILE_ATTRIBUTES) if (GetFileAttributes(command) == INVALID_FILE_ATTRIBUTES)
if (!getWinReg(command, MAX_PATH+50)) return false;
return 1; }
ver = GetD2Version(command);
if (ver == -1) assertion("Wrong version of the Game.exe");
strcat(command, " ");
// Add params. // Add params.
int paramLen = strlen(lpCmdLine);
if (paramLen > 0)
{
cmdLen += paramLen + 1;
if (cmdLen > sizeof(command))
assertion("Path length too long");
strcat(command, lpCmdLine); strcat(command, lpCmdLine);
len = strlen(command); strcat(command, " ");
GetPrivateProfileString(LAUNCHING,PARAM,"",&command[len],MAX_PATH-len,iniFileName); }
int windowed = GetPrivateProfileInt(WINDOWED, ACTIVE_WINDOWED, 0, iniFileName);
//copyLodVersionFiles(); if (windowed)
{
cmdLen += paramLen + 3;
if (cmdLen > sizeof(command))
assertion("Path length too long");
strcat(command, "-w ");
}
GetPrivateProfileString(LAUNCHING, PARAM, NULL, command + cmdLen, sizeof(command) - cmdLen, iniFileName);
char libraryName[50]; char libraryName[50];
if (!GetPrivateProfileString(LAUNCHING, LIBRARY_NAME, "", libraryName, 50, iniFileName) || !libraryName[0]) if (!GetPrivateProfileString(LAUNCHING, LIBRARY_NAME, "", libraryName, 50, iniFileName) || !libraryName[0])
return !launchNormal(command, currrentDirectory); return !launchNormal(command, currrentDirectory);
// MessageBox(NULL,command,"PlugYRun",MB_OK); // Launch LoD and install PlugY
HMODULE module = GetModuleHandle("Kernel32.dll"); HMODULE module = GetModuleHandle("Kernel32.dll");
if (module) if (module)
{ {
debugActiveProcessStop = (tDebugActiveProcessStop)GetProcAddress(module, "DebugActiveProcessStop"); debugActiveProcessStop = (tDebugActiveProcessStop)GetProcAddress(module, "DebugActiveProcessStop");
if (debugActiveProcessStop) if (debugActiveProcessStop)
return !launchGameXP(command, currrentDirectory, libraryName, ver); return !launchGameXP(command, currrentDirectory, libraryName);
} }
return !launchGame98(command, currrentDirectory, libraryName, ver); return !launchGame98(command, currrentDirectory, libraryName);
} }
/* else if (GetVersion() & 0x80000000)
{
versionXP=false;
} else {
versionXP=true;
}*/
//HINSTANCE
// CreateProcessInternalA
// HMODULE HPlugY = LoadLibrary("C:\\Jeux\\Diablo II\\PlugY.dll");
// if (!HPlugY) return 0;
// DuplicateHandle
// GetCurrentProcess();
/* typedef void* (__stdcall* Tinit)(LPSTR IniName);
Tinit init = (Tinit)GetProcAddress(HPlugY,"_Init@4");
if (!init) return 0;
init(0);*/
/*
6FC2BD50 /$ 81EC 08010000 SUB ESP,108
6FC2BD56 |. 53 PUSH EBX
6FC2BD57 |. 8A9C24 1801000>MOV BL,BYTE PTR SS:[ESP+118]
6FC2BD5E |. F6C3 10 TEST BL,10
6FC2BD61 |. 55 PUSH EBP
6FC2BD62 |. 56 PUSH ESI
6FC2BD63 |. C707 00000000 MOV DWORD PTR DS:[EDI],0
6FC2BD69 |. C74424 0C 0000>MOV DWORD PTR SS:[ESP+C],0
6FC2BD71 |. BE F3030000 MOV ESI,3F3
6FC2BD76 |. C64424 10 00 MOV BYTE PTR SS:[ESP+10],0
6FC2BD7B |. 75 25 JNZ SHORT storm.6FC2BDA2
6FC2BD7D |. F6C3 02 TEST BL,2
6FC2BD80 |. 68 04010000 PUSH 104
6FC2BD85 |. 74 0C JE SHORT storm.6FC2BD93
6FC2BD87 |. 68 146AC36F PUSH storm.6FC36A14 ; ASCII "Software\Battle.net\"
6FC2BD8C |. 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
6FC2BD90 |. 50 PUSH EAX
6FC2BD91 |. EB 0A JMP SHORT storm.6FC2BD9D
6FC2BD93 |> 68 F069C36F PUSH storm.6FC369F0 ; ASCII "Software\Blizzard Entertainment\"
6FC2BD98 |. 8D4C24 18 LEA ECX,DWORD PTR SS:[ESP+18]
6FC2BD9C |. 51 PUSH ECX
6FC2BD9D |> E8 EE07FEFF CALL storm.#501
6FC2BDA2 |> 8B9424 1801000>MOV EDX,DWORD PTR SS:[ESP+118]
6FC2BDA9 |. 68 04010000 PUSH 104
6FC2BDAE |. 52 PUSH EDX
6FC2BDAF |. 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
6FC2BDB3 |. 50 PUSH EAX
6FC2BDB4 |. E8 6705FEFF CALL storm.#503
6FC2BDB9 |. F6C3 04 TEST BL,4
6FC2BDBC |. 8B2D 1030C36F MOV EBP,DWORD PTR DS:[<&ADVAPI32.RegQuer>; advapi32.RegQueryValueExA
6FC2BDC2 |. 75 5D JNZ SHORT storm.6FC2BE21
6FC2BDC4 |. 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
6FC2BDC8 |. 51 PUSH ECX ; /pHandle
6FC2BDC9 |. 68 19000200 PUSH 20019 ; |Access = KEY_READ
6FC2BDCE |. 6A 00 PUSH 0 ; |Reserved = 0
6FC2BDD0 |. 8D5424 1C LEA EDX,DWORD PTR SS:[ESP+1C] ; |
6FC2BDD4 |. 52 PUSH EDX ; |Subkey
6FC2BDD5 |. 68 01000080 PUSH 80000001 ; |hKey = HKEY_CURRENT_USER
6FC2BDDA |. FF15 0830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA
002281A4 80000001 |hKey = HKEY_CURRENT_USER
002281A8 002281C8 |Subkey = "Software\Blizzard Entertainment\Diablo II"
002281AC 00000000 |Reserved = 0
002281B0 00020019 |Access = KEY_READ
002281B4 002281C4 \pHandle = 002281C4
6FC2BDE0 |. 8BF0 MOV ESI,EAX
6FC2BDE2 |. 85F6 TEST ESI,ESI
6FC2BDE4 |. 75 3B JNZ SHORT storm.6FC2BE21
6FC2BDE6 |. 8B8C24 2801000>MOV ECX,DWORD PTR SS:[ESP+128]
6FC2BDED |. 8B9424 2401000>MOV EDX,DWORD PTR SS:[ESP+124]
6FC2BDF4 |. 8B8424 2C01000>MOV EAX,DWORD PTR SS:[ESP+12C]
6FC2BDFB |. 57 PUSH EDI ; /pBufSize
6FC2BDFC |. 51 PUSH ECX ; |Buffer
6FC2BDFD |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14] ; |
6FC2BE01 |. 52 PUSH EDX ; |pValueType
6FC2BE02 |. 8907 MOV DWORD PTR DS:[EDI],EAX ; |
6FC2BE04 |. 8B8424 2801000>MOV EAX,DWORD PTR SS:[ESP+128] ; |
6FC2BE0B |. 56 PUSH ESI ; |Reserved
6FC2BE0C |. 50 PUSH EAX ; |ValueName
6FC2BE0D |. 51 PUSH ECX ; |hKey
6FC2BE0E |. FFD5 CALL EBP ; \RegQueryValueExA
002281A0 00000124 |hKey = 124
002281A4 6FF77B88 |ValueName = "InstallPath"
002281A8 00000000 |Reserved = NULL
002281AC 002282FC |pValueType = 002282FC
002281B0 00228320 |Buffer = 00228320
002281B4 00228300 \pBufSize = 00228300
6FC2BE10 |. 8B5424 0C MOV EDX,DWORD PTR SS:[ESP+C]
6FC2BE14 |. 52 PUSH EDX ; /hKey
6FC2BE15 |. 8BF0 MOV ESI,EAX ; |
6FC2BE17 |. FF15 1830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
002281B4 00000124 \hKey = 00000124 (window)
6FC2BE1D |. 85F6 TEST ESI,ESI
6FC2BE1F |. 74 62 JE SHORT storm.6FC2BE83
6FC2BE21 |> F6C3 01 TEST BL,1
6FC2BE24 |. 75 59 JNZ SHORT storm.6FC2BE7F
6FC2BE26 |. 8D4424 0C LEA EAX,DWORD PTR SS:[ESP+C]
6FC2BE2A |. 50 PUSH EAX ; /pHandle
6FC2BE2B |. 68 19000200 PUSH 20019 ; |Access = KEY_READ
6FC2BE30 |. 6A 00 PUSH 0 ; |Reserved = 0
6FC2BE32 |. 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C] ; |
6FC2BE36 |. 51 PUSH ECX ; |Subkey
6FC2BE37 |. 68 02000080 PUSH 80000002 ; |hKey = HKEY_LOCAL_MACHINE
6FC2BE3C |. FF15 0830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA
6FC2BE42 |. 8BF0 MOV ESI,EAX
6FC2BE44 |. 85F6 TEST ESI,ESI
6FC2BE46 |. 75 4C JNZ SHORT storm.6FC2BE94
6FC2BE48 |. 8B8424 2801000>MOV EAX,DWORD PTR SS:[ESP+128]
6FC2BE4F |. 8B8C24 2401000>MOV ECX,DWORD PTR SS:[ESP+124]
6FC2BE56 |. 8B9424 2C01000>MOV EDX,DWORD PTR SS:[ESP+12C]
6FC2BE5D |. 57 PUSH EDI
6FC2BE5E |. 50 PUSH EAX
6FC2BE5F |. 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
6FC2BE63 |. 51 PUSH ECX
6FC2BE64 |. 8917 MOV DWORD PTR DS:[EDI],EDX
6FC2BE66 |. 8B9424 2801000>MOV EDX,DWORD PTR SS:[ESP+128]
6FC2BE6D |. 56 PUSH ESI
6FC2BE6E |. 52 PUSH EDX
6FC2BE6F |. 50 PUSH EAX
6FC2BE70 |. FFD5 CALL EBP
6FC2BE72 |. 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C]
6FC2BE76 |. 51 PUSH ECX ; /hKey
6FC2BE77 |. 8BF0 MOV ESI,EAX ; |
6FC2BE79 |. FF15 1830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
6FC2BE7F |> 85F6 TEST ESI,ESI
6FC2BE81 |. 75 11 JNZ SHORT storm.6FC2BE94
6FC2BE83 |> 5E POP ESI
6FC2BE84 |. 5D POP EBP
6FC2BE85 |. B8 01000000 MOV EAX,1
6FC2BE8A |. 5B POP EBX
6FC2BE8B |. 81C4 08010000 ADD ESP,108
6FC2BE91 |. C2 1800 RETN 18
6FC2BE94 |> 56 PUSH ESI ; /Error
6FC2BE95 |. FF15 2832C36F CALL DWORD PTR DS:[<&KERNEL32.SetLastErr>; \SetLastError
6FC2BE9B |. 5E POP ESI
6FC2BE9C |. 5D POP EBP
6FC2BE9D |. 33C0 XOR EAX,EAX
6FC2BE9F |. 5B POP EBX
6FC2BEA0 |. 81C4 08010000 ADD ESP,108
6FC2BEA6 \. C2 1800 RETN 18
*/
///////////////////////// END OF FILE ///////////////////////

3
PlugYRun/PlugYRun.h Normal file
View File

@@ -0,0 +1,3 @@
#pragma once
#include "resource.h"

Binary file not shown.

View File

@@ -1,17 +1,26 @@
Microsoft Visual Studio Solution File, Format Version 9.00 
# Visual Studio 2005 Microsoft Visual Studio Solution File, Format Version 12.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugYRun", "PlugYRun.vcproj", "{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}" # Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugYRun", "PlugYRun.vcxproj", "{73941C80-3185-4FC1-A248-A6C6E4B39BCB}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64
Release|Win32 = Release|Win32 Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Debug|Win32.ActiveCfg = Debug|Win32 {73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Debug|x64.ActiveCfg = Debug|x64
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Debug|Win32.Build.0 = Debug|Win32 {73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Debug|x64.Build.0 = Debug|x64
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Release|Win32.ActiveCfg = Release|Win32 {73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Debug|x86.ActiveCfg = Debug|Win32
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Release|Win32.Build.0 = Release|Win32 {73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Debug|x86.Build.0 = Debug|Win32
{73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Release|x64.ActiveCfg = Release|x64
{73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Release|x64.Build.0 = Release|x64
{73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Release|x86.ActiveCfg = Release|Win32
{73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

Binary file not shown.

View File

@@ -174,7 +174,7 @@
/> />
<Tool <Tool
Name="VCPostBuildEventTool" Name="VCPostBuildEventTool"
CommandLine="copy $(TargetPath) &quot;..\PlugYInstaller\PlugY.exe&quot;&#x0D;&#x0A;copy $(TargetPath) &quot;D:\Games\Diablo II\Mod PlugY\PlugY.exe&quot;&#x0D;&#x0A;&#x0D;&#x0A;" CommandLine="copy $(TargetPath) &quot;..\PlugYInstaller\PlugY.exe&quot;"
/> />
</Configuration> </Configuration>
</Configurations> </Configurations>
@@ -189,14 +189,6 @@
RelativePath="PlugYRun.cpp" RelativePath="PlugYRun.cpp"
> >
</File> </File>
<Filter
Name="Commons"
>
<File
RelativePath="..\Commons\VersionInfo.cpp"
>
</File>
</Filter>
</Filter> </Filter>
<Filter <Filter
Name="Header Files" Name="Header Files"
@@ -206,14 +198,6 @@
RelativePath="resource.h" RelativePath="resource.h"
> >
</File> </File>
<Filter
Name="Commons"
>
<File
RelativePath="..\Commons\VersionInfo.h"
>
</File>
</Filter>
</Filter> </Filter>
<Filter <Filter
Name="Resource Files" Name="Resource Files"

168
PlugYRun/PlugYRun.vcxproj Normal file
View File

@@ -0,0 +1,168 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{73941C80-3185-4FC1-A248-A6C6E4B39BCB}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>PlugYRun</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<TargetName>PlugY</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PostBuildEvent>
<Command>copy "$(TargetPath)" "..\PlugYInstaller\PlugY.exe"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="PlugYRun.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="PlugYRun.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="PlugYRun.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="PlugY.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="stdafx.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="targetver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Resource.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="PlugYRun.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PlugYRun.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="PlugYRun.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<Image Include="PlugY.ico">
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
</Project>

Binary file not shown.

8
PlugYRun/stdafx.cpp Normal file
View File

@@ -0,0 +1,8 @@
// stdafx.cpp : source file that includes just the standard includes
// PlugYRun.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file

21
PlugYRun/stdafx.h Normal file
View File

@@ -0,0 +1,21 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here

8
PlugYRun/targetver.h Normal file
View File

@@ -0,0 +1,8 @@
#pragma once
// Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
#include <SDKDDKVer.h>