mirror of
https://gitlab.com/hashborgir/plugy.git
synced 2025-09-18 09:32:08 +00:00
Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5a1eb33f03 |
@@ -1,5 +1,6 @@
|
||||
/*======================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Declares the type for a STDCALL or FASTCALL function pointer
|
||||
called N with arguments list P, returning R, namedInDLL D and at @A
|
||||
@@ -148,68 +149,68 @@
|
||||
|
||||
|
||||
//F7(STD, D2Common,00000,00000,00000,00000,10001,00000,00000, DWORD, D2GetActIDFromLevel, (DWORD levelID));
|
||||
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, DWORD, D2GetLevelID, (Room* ptRoom));
|
||||
F7(STD, D2Common,10138,10138,10138,10623,10491,11043,10654, Room*, D2GetDropRoom, (Room* ptRoom, Position*, Position*, DWORD, DWORD, DWORD, DWORD));
|
||||
F7(STD, D2Common,00000,00000,00000,10188,11084,11109,10346,10907, DWORD, D2Common11084, (Room* ptRoom, DWORD zero));
|
||||
F7(STD, D2Common,10057,10057,10057,10332,11021,10511,10826,10691, 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,10149,10149,10149,00000,00000,00000,00000, Inventory*, D2GetInventory, (Unit* ptUnit));
|
||||
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, 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, Unit*, D2InvRemoveItem, (Inventory* ptInventory, Unit* ptItem));
|
||||
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, 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,10242,10242,10242,00000,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,10243,10243,10243,10461,10827,10936,10646,10490, 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,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,10257,10257,10257,00000,00000,00000,00000, Unit*, D2GetItemFromBodyLoc, (Inventory* ptInventory, DWORD bodyloc));
|
||||
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, Unit*, D2InventoryGetFirstItem, (Inventory* ptInventory));
|
||||
F7(STD, D2Common,10304,10304,10304,10934,11140,10770,10464, Unit*, D2UnitGetNextItem, (Unit* ptItem));
|
||||
F7(STD, D2Common,10305,10305,10305,11095,10748,10852,11147, Unit*, D2GetRealItem, (Unit* ptUnit));
|
||||
F7(STD, D2Common,10273,10273,10273,00000,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,10304,10304,10304,10934,11140,10770,10464,10879, Unit*, D2UnitGetNextItem, (Unit* ptItem));
|
||||
F7(STD, D2Common,10305,10305,10305,11095,10748,10852,11147,10897, Unit*, D2GetRealItem, (Unit* ptUnit));
|
||||
//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,10326,10326,00000,00000,00000,00000,00000, DWORD, D2GetPosX, (Unit* ptUnit));//NOT IN 1.10
|
||||
F7(STD, D2Common,10326,10326,00000,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,10329,10329,00000,00000,00000,00000,00000, DWORD, D2GetPosY, (Unit* ptUnit));//NOT IN 1.10
|
||||
F7(STD, D2Common,10329,10329,00000,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,10332,10332,10332,11080,10056,10543,10141, void, D2GetPosition, (Unit* ptUnit, Position* pos));
|
||||
F7(STD, D2Common,10339,10339,10339,10455,10864,10941,11060, DWORD, D2GetMaxGoldBank, (Unit* ptUnit));
|
||||
F7(STD, D2Common,10342,10342,10342,10172,10933,10366,10331, Room*, D2GetRoom, (Unit* ptUnit));
|
||||
F7(STD, D2Common,10332,10332,10332,11080,10056,10543,10141,11166, void, D2GetPosition, (Unit* ptUnit, Position* pos));
|
||||
F7(STD, D2Common,10339,10339,10339,10455,10864,10941,11060,11025, DWORD, D2GetMaxGoldBank, (Unit* ptUnit));
|
||||
F7(STD, D2Common,10342,10342,10342,10172,10933,10366,10331,10846, Room*, D2GetRoom, (Unit* ptUnit));
|
||||
//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,10420,10420,10420,10218,10079,11097,10356, PlayerData*,D2InitPlayerData, (Unit* ptChar));
|
||||
F7(STD, D2Common,10420,10420,10420,10218,10079,11097,10356,10404, PlayerData*,D2InitPlayerData, (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, PlayerData*,D2GetPlayerData, (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, DWORD, D2GetChanceToBlock, (Unit* ptChar, DWORD isLODGame));
|
||||
F7(STD, D2Common,10439,10439,10439,10343,11131,10729,10049, DWORD, D2GetMaxGold, (Unit* ptUnit));
|
||||
F7(STD, D2Common,00000,00000,00000,10440,10572,10481,11090, DWORD, D2Common10572, (Unit* ptObject, DWORD value));
|
||||
F7(STD, D2Common,10424,10424,10424,10562,10800,10860,10920,11103, PlayerData*,D2GetPlayerData, (Unit* ptChar));
|
||||
F7(STD, D2Common,10431,10431,10431,00000,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,10439,10439,10439,10343,11131,10729,10049,11159, DWORD, D2GetMaxGold, (Unit* ptUnit));
|
||||
F7(STD, D2Common,00000,00000,00000,10440,10572,10481,11090,10193, 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,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,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,00000,00000,00000,10471,11160,10866,10258, BYTE, D2GetObjectFlags, (Unit* ptObject));
|
||||
F7(STD, D2Common,00000,00000,00000,10572,11048,10150,10111, void, D2SetObjectFlags, (Unit* ptObject, BYTE flags));
|
||||
F7(STD, D2Common,00000,00000,00000,10471,11160,10866,10258,10040, BYTE, D2GetObjectFlags, (Unit* ptObject));
|
||||
F7(STD, D2Common,00000,00000,00000,10572,11048,10150,10111,10033, void, D2SetObjectFlags, (Unit* ptObject, BYTE flags));
|
||||
//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,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,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,10487,10487,10487,00000,00000,00000,00000, DWORD, D2isInState, (Unit* ptChar, DWORD isLODGame));
|
||||
F7(STD, D2Common,10487,10487,10487,00000,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,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, int, D2GetPlayerStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b
|
||||
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,10519,10519,10519,11092,10061,10658,10973,10550, 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,10521,10521,10521,10733,10550,10494,10587, int, D2GetPlayerBaseStat, (Unit* ptChar, DWORD statID, DWORD index));//ONLY 1.11b
|
||||
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,10527,10527,10527,00000,00000,00000,00000, DWORD, D2Common10527, (Unit* ptUnit));
|
||||
F7(STD, D2Common,10539,10539,10539,00000,00000,00000,00000, DWORD, D2haveDefenceBonus, (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, DWORD, D2haveColdResBonus, (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, DWORD, D2havePoisonResBonus, (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, DWORD, D2haveFireResMalus, (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, DWORD, D2haveLightResMalus, (Unit* ptChar));
|
||||
F7(STD, D2Common,10550,10550,10550,00000,00000,00000,00000, DWORD, D2havePoisonResMalus, (Unit* ptChar));
|
||||
F7(STD, D2Common,10539,10539,10539,00000,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,10541,10541,10541,00000,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,10543,10543,10543,00000,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,10547,10547,10547,00000,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,10549,10549,10549,00000,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,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,10573,10573,10573,00000,00000,00000,00000, void, D2CopyStats, (Stats* ptDestStats, Stats* ptSrcStats));
|
||||
@@ -217,35 +218,35 @@ F7(STD, D2Common,10550,10550,10550,00000,00000,00000,00000, DWORD, D2havePoiso
|
||||
//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,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, void*, D2CompileTxtFile, (DWORD unused, const char* filename, BINField* ptFields, DWORD* ptRecordCount, DWORD recordLength));
|
||||
F7(STD, D2Common,10600,10600,10600,10573,10262,10887,10695, ItemsBIN*, D2GetItemsBIN, (DWORD itemID));
|
||||
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,10600,10600,10600,10573,10262,10887,10695,10994, ItemsBIN*, D2GetItemsBIN, (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,10616,10616,10616,10500,10523,10774,10806, GemsBIN*, D2GetGemsBIN, (DWORD gemID));
|
||||
F7(STD, D2Common,11232,11232,11232,10746,10258,10913,10783, CubeMainBIN*,D2GetCubeMainBIN, (DWORD cubemainID));
|
||||
F7(STD, D2Common,11233,11233,11233,10639,11135,10390,10675, int, D2GetNbCubeMainBIN, ());
|
||||
F7(STD, D2Common,10616,10616,10616,10500,10523,10774,10806,10619, GemsBIN*, D2GetGemsBIN, (DWORD gemID));
|
||||
F7(STD, D2Common,11232,11232,11232,10746,10258,10913,10783,10393, CubeMainBIN*,D2GetCubeMainBIN, (DWORD cubemainID));
|
||||
F7(STD, D2Common,11233,11233,11233,10639,11135,10390,10675,10235, int, D2GetNbCubeMainBIN, ());
|
||||
//F7(STD, D2Common,10737,10737,10737,00000,00000,00000,00000, LevelsBIN*, D2GetLevelsBIN, (DWORD levelID));
|
||||
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, DWORD, D2GetMaxLevel, (DWORD classID));
|
||||
F7(STD, D2Common,10655,10655,10655,10655,10309,10297,10218, DifficultyLevelsBIN*, D2GetDifficultyLevelsBIN, (DWORD difficultyLevel));
|
||||
F7(STD, D2Common,10628,10628,10628,00000,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,10655,10655,10655,10655,10309,10297,10218,10694, DifficultyLevelsBIN*, D2GetDifficultyLevelsBIN, (DWORD difficultyLevel));
|
||||
//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,10695,10695,10695,10927,10899,10276,10106, DWORD, D2GetItemQuality, (Unit* ptItem));
|
||||
F7(STD, D2Common,10707,10707,10707,10911,10303,10989,10202, DWORD, D2TestFlags, (Unit* ptUnit, DWORD flags, DWORD line, const char* file));
|
||||
F7(STD, D2Common,10695,10695,10695,10927,10899,10276,10106,10911, 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,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,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, DWORD, D2GetItemLevel, (Unit* ptItem));
|
||||
F7(STD, D2Common,10719,10719,10719,10820,10505,10370,10020, BYTE, D2ItemGetPage, (Unit* ptUnit));
|
||||
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, DWORD, D2CheckItemType, (Unit* ptItem, DWORD itype));
|
||||
F7(STD, D2Common,10732,10732,10732,10692,10685,10280,10620, int, D2GetUniqueID, (Unit* ptItem));
|
||||
F7(STD, D2Common,10734,10734,10734,00000,00000,00000,00000, void, D2SetAnim, (Unit* ptUnit, int anim));
|
||||
F7(STD, D2Common,10717,10717,10717,10898,10100,10410,10086,10008, DWORD, D2GetItemLevel, (Unit* ptItem));
|
||||
F7(STD, D2Common,10719,10719,10719,10820,10505,10370,10020,10810, BYTE, D2ItemGetPage, (Unit* ptUnit));
|
||||
F7(STD, D2Common,10720,10720,10720,10485,10608,10223,10012,11026, 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,10732,10732,10732,10692,10685,10280,10620,10075, int, D2GetUniqueID, (Unit* ptItem));
|
||||
F7(STD, D2Common,10734,10734,10734,00000,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,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,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, RunesBIN*, D2GetRunesBIN, (int runesID));
|
||||
F7(STD, D2Common,10619,10619,10619,10687,10877,10321,11032,10981, 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,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,10813,10813,10813,00000,00000,00000,00000, DWORD, D2GetStaffMods, (Unit* ptItem));
|
||||
@@ -254,35 +255,35 @@ F7(STD, D2Common,10620,10620,10620,10775,10296,10622,10006, RunesBIN*, D2GetRun
|
||||
//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,10875,10875,10875,00000,00000,00000,00000, WORD, D2GetItemVersion, (Unit* ptItem));
|
||||
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, DWORD, D2SaveItem, (Unit* ptItem, saveBitField* data, DWORD startSize, DWORD p4, DWORD p5, DWORD p6));
|
||||
F7(STD, D2Common,11163,11163,11163,10880,11068,10436,11107,10963, 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,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,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,10953,10953,10953,10099,10255,10210,10302, void, D2SetSkillBaseLevel,(Unit* ptChar, DWORD skillID, DWORD slvl, DWORD bRemove, char*, DWORD));
|
||||
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,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(STD, D2Common,10968,10968,10968,10700,10109,10904,10306, DWORD, D2GetSkillLevel, (Unit* ptChar, SkillData* ptSkill, DWORD includingBonus));
|
||||
F7(STD, D2Common,10968,10968,10968,10700,10109,10904,10306,10007, 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,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,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,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, DWORD, D2GetSkillCost, (Unit* ptChar, int skpoints, DWORD skillID, DWORD curSkillLevel));//not 10447
|
||||
A7(FAST, D2Common,00000,00000,82C80, 15D0, 1800, 1220, 12D0, CharStatsBIN*, D2GetCharStatsBIN, (DWORD charID));
|
||||
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, DWORD, D2CompileCubeOutput, (CubeOutput* cubeoutput, char* s, DWORD p1, DWORD p2));
|
||||
A7(FAST, D2Common,00000,00000,2B1A0, 11F0, 1380, 1140, 1300, ItemTypesBIN*, D2GetItemTypesBIN, (DWORD itemTypesId));
|
||||
F7(STD, D2Common,11276,11276,11276,10254,10074,10111,10435,11081, 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,12410,5D7D0,1A100,116C0,1C020,5B0E0, 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,2B1A0, 11F0, 1380, 1140, 1300, 1160, 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,642B0, 13F0, 12F0, 1540, 17A0, ItemStatCostBIN*,D2GetItemStatCostBIN, (DWORD id));
|
||||
A7(FAST, D2Common,00000,00000,642B0, 13F0, 12F0, 1540, 17A0, 17E0, ItemStatCostBIN*,D2GetItemStatCostBIN, (DWORD id));
|
||||
//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(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, void*, D2ReadFile,(DWORD unused, char* filename, DWORD* size, const char*, DWORD));
|
||||
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,00000,00000, 94D0,00000,00000,00000,00000, void*, D2GetStringIDForTxtFile,(const char * string));
|
||||
A7(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870, void, D2LoadSuperuniques,(DWORD mempool));//FASCALL UNTIL 1.10
|
||||
A7(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870,80C40, void, D2LoadSuperuniques,(DWORD mempool));//FASCALL UNTIL 1.10
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -307,24 +308,24 @@ A7(STD, D2Common,1F500,1F510,29FA0,71EB0,32AA0,7D2A0,59870, void, D2LoadSuper
|
||||
//E2F(D2Client,5BA90, void, D2ReloadGambleScreen, ());//1.11b
|
||||
//E2F(D2Client,1FEB0, void, D2OpenNPCMenu, (Unit* ptNPC));//1.11b by ESI
|
||||
|
||||
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, void, D2FreeImage, (void* image));//6FAA1140
|
||||
A7(FAST, D2Client, D640, D630, DB50,73620,5E4E0,79670,147A0, void, D2SendMsgToAll,(BYTE* data));//1.11 and 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, 1150, 1150, 1140,00000,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(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000, int, D2GetAvgChanceMonsterWillHitYou, ());//6FAB5A80
|
||||
A7(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000, DWORD, D2GetLastMonsterIDFight, ());//6FAB5A80
|
||||
A7(STD, D2Client,29800,297F0,2FD60,828A0,89320,6B280,BCEA0, void, D2PrintStatsPage, ());
|
||||
A7(STD, D2Client,00000,00000,15A80,00000,00000,00000,00000,00000, DWORD, D2GetLastMonsterIDFight, ());//6FAB5A80
|
||||
A7(STD, D2Client,29800,297F0,2FD60,828A0,89320,6B280,BCEA0,BF640, void, D2PrintStatsPage, ());
|
||||
//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, 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, LPWSTR, D2SetColorPopup, (LPWSTR popupText, DWORD color));//1.11 and 1.11b BY EDI
|
||||
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,85A60,84DE0,80430,9EEB0,62070,8B7A0,BF5F0,18820, 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,B4360,B36E0,B5820,3ACC0,54210,31FA0,88A70, DWORD, D2PlaySound, (DWORD id, DWORD, DWORD, DWORD, DWORD));
|
||||
A7(FAST, D2Client,B4360,B36E0,B5820,3ACC0,54210,31FA0,88A70,26270, 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,00000,00000,00000,00000,571C0,18450,46150, Unit*, D2GetCurrentNPC, ());
|
||||
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, void, D2TogglePage, (DWORD a, DWORD b, DWORD c));
|
||||
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, void*, D2LoadBuySelBtn, ());
|
||||
A7(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0, void, D2ReloadGambleScreen, ());
|
||||
A7(FAST, D2Client,00000,00000,00000,00000,571C0,18450,46150,790D0, Unit*, D2GetCurrentNPC, ());
|
||||
A7(FAST, D2Client,00000,00000,00000,73260,5DE40,791A0,143E0,B61F0, 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,00000,00000,00000,A6520,710C0,A6640,8CD00,90C10, 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(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0,7DC60, void, D2ReloadGambleScreen, ());
|
||||
//A7(FAST, D2Client,00000,00000,00000,00000,1FEB0,5CDD0,00000, void, D2OpenNPCMenu, (Unit* ptNPC));//by ESI
|
||||
|
||||
|
||||
@@ -369,43 +370,43 @@ A7(FAST, D2Client,00000,00000,00000,8E480,5BA90,1CC00,4ABE0, void, D2ReloadGamb
|
||||
//E2S(D2Game,E66D0, void, D2SaveGame, (Game* ptGame));//1.11b
|
||||
|
||||
|
||||
F7(FAST, D2Game,10059,10059,10059,10039,10007,10037,10049, void, D2SetNbPlayers, (DWORD nbPlayers));
|
||||
F7(FAST, D2Game,10059,10059,10059,10039,10007,10037,10049,10002, 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, 6C60,E3DA0,E8210,EB060,49930, void, D2AddClient, (DWORD clientID));//BY EAX
|
||||
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, void, D2BroadcastFunction, (Game* ptGame, void* fct, void* param));//00DAB0E0
|
||||
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, void, D2SetSkillBaseLevelOnClient, (void* ptClient, Unit* ptChar, DWORD skillID, DWORD sLvl, DWORD bRemove));//by EAX,ESI,EBX
|
||||
A7(FAST, D2Game,00000,00000, 6C60,E3DA0,E8210,EB060,49930,E5070, void, D2AddClient, (DWORD clientID));//BY EAX
|
||||
A7(STD, D2Game,00000,00000, 94E0,E0520,E49A0,A6360,2AAE0,BC700, 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, C380, C650, C710,41420,A0D50,7D220,8A3E0,DB780, 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,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,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, DWORD, D2LinkPortal, (Game* ptGame, Unit* ptObject, DWORD levelEndID, DWORD levelStartID));
|
||||
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(STD, D2Game,00000,00000,00000,27230,109F0,AE930,A22E0,15F40, 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,1ED80,00000,00000,00000,00000, Unit*, D2CreateItem, (Game* ptGame, ItemGenerationData* itemGenerationData, DWORD));//6FC4ED80
|
||||
A7(FAST, D2Game,00000,00000,22070, 1090, 1DF0, 11F0, 1280, Room*, D2TestPositionInRoom, (Room* ptRoom, DWORD x, DWORD y));
|
||||
A7(FAST, D2Game,00000,00000,22070, 1090, 1DF0, 11F0, 1280, 1340, 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,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,3AD10,00000,00000,00000,00000, DWORD, D2GetSuperUniqueMonsterID, (Game* ptGame, Unit* ptMonster));//6FC6AD10
|
||||
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, void, D2Game235C0, (Game* ptGame, Room* ptRoom));
|
||||
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(STD, D2Game,00000,00000,00000,D6D10,235C0, D410,200E0,59980, 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,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, 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, Unit*, D2GameGetObject, (Game* ptGame, DWORD type, DWORD itemNum));//6FCBBB00
|
||||
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,7BAE0,7BFD0,8BB00,97620,BEF80,93650,E03A0,6DC40, 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,E08D0,00000,00000,00000,00000, void, D2UpdateSkillDataAfterUnassignment, (Game* ptGame, Unit* ptChar, DWORD skillID));//6FD108D0
|
||||
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, void, D2OpenPandPortal, (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, void, D2MephIA, (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, void, D2BaalIA, (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, void, D2UberDiabloIA, (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,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,9B480,34920,D1AA0,70180,941E0, 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,84730,85AA0,DBE90,A9610,31920, 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,EAB20,2BC80,B3B90,B8610,C8850, 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,7F200,7FE60,D6250,A39D0,2C3F0, 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,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, void, D2SaveGame, (Game* ptGame) );
|
||||
A7(STD, D2Game,00000,00000, 89C0,E2390,E66D0,A8090,2C830,BE660, void, D2SaveGame, (Game* ptGame) );
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -413,8 +414,8 @@ A7(STD, D2Game,00000,00000, 89C0,E2390,E66D0,A8090,2C830, void, D2SaveGame, (G
|
||||
//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
|
||||
|
||||
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, DWORD, D2SendToClient, (DWORD zero, DWORD clientID, void* data, DWORD size));
|
||||
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, 10006,10006,10006,10018,10018,10015,10002,10012, DWORD, D2SendToClient, (DWORD zero, DWORD clientID, void* data, DWORD size));
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -439,25 +440,25 @@ F7(STD, D2Net, 10006,10006,10006,10018,10018,10015,10002, DWORD, D2SendToClien
|
||||
////D2S(Fog,10217, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840
|
||||
//D2S(Fog,10265, int, D2GetInstructionPointer, ());//ONLY 1.11/1.11b NOT 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, void, D2FogAssert, (const char* ptMessage, DWORD eip, DWORD line));
|
||||
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, void*, D2FogMemDeAlloc, (void* ptMemLoc, 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, void*, D2FreeMem, (DWORD,void* ptMemLoc, LPCSTR lpszErrFile, DWORD ErrLine, DWORD Zero));
|
||||
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, DWORD, D2MPQCloseFile, (void* mpqfile));
|
||||
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, DWORD, D2MPQGetSizeFile, (void* mpqfile, DWORD* toReset));
|
||||
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, void, D2FogGetInstallPath, (char* ptPath, DWORD maxsize));
|
||||
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(FAST, Fog, 00000,00000,00000,10024,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, 10043,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, 10046,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, 10103,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, 10105,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, 10116,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, 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, 10130,10130,10130,10130,10130,10130,10130, DWORD, D2DecodeValue, (saveBitField* data,DWORD readingSize));//6FF53840
|
||||
F7(STD, Fog, 10212,10212,10212,10212,10212,10212,10212, void, D2Fog10212, (DWORD unknow));
|
||||
F7(STD, Fog, 10212,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, 00000,00000,00000,10265,10265,10265,10265, int, D2GetInstructionPointer, ());
|
||||
F7(STD, Fog, 00000,00000,00000,10265,10265,10265,10265,10265, int, D2GetInstructionPointer, ());
|
||||
//Fog10213 getIndexFromLookupTable (&table,code,bool)
|
||||
|
||||
|
||||
@@ -476,12 +477,12 @@ F7(STD, Fog, 00000,00000,00000,10265,10265,10265,10265, int, D2GetInstructionP
|
||||
////E2F(D2Lang,2CD0, DWORD, D2unicodenwidth, (char* ptChar, DWORD size));//6FC12CD0_unicodenwidth
|
||||
////E2S(D2Lang,1670, DWORD, D2swprintf, (DWORD bufSize, LPWSTR buf, LPWSTR string, ...));//6FC11670_sprintf
|
||||
|
||||
//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, LPWSTR, D2GetStringFromIndex, (WORD dwIndexNum));
|
||||
F7(FAST, D2Lang, 10003,10003,10003,10002,10004,10010,10011,10011, LPWSTR, D2GetStringFromString, (const char* ptString));//6FC13BC0
|
||||
F7(FAST, D2Lang, 10004,10004,10004,10005,10000,10005,10003,10004, LPWSTR, D2GetStringFromIndex, (WORD dwIndexNum));
|
||||
//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, DWORD, D2GetLang, ());
|
||||
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, DWORD, D2GetStringAndIndexFromString, (const char* ptString , LPWSTR result));//6FC13960
|
||||
F7(STD, D2Lang, 10007,10007,10007,10009,10013,10002,10009,10001, DWORD, D2GetLang, ());//14b 00522A20
|
||||
F7(STD, D2Lang, 10010,10010,10010,00000,00000,00000,00000,00000, DWORD, D2PrintBigNumber, (LPWSTR ptBuf , DWORD number, DWORD size));//6FC14210
|
||||
F7(STD, D2Lang, 10013,10013,10013,00000,00000,00000,00000,10005, DWORD, D2GetStringAndIndexFromString, (const char* ptString , LPWSTR result));//6FC13960
|
||||
//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,03640,00000,00000,00000,00000, TblHeader*, D2LoadTblFile, (LPCSTR lpszFileName));//6FC13640
|
||||
@@ -497,9 +498,9 @@ F7(STD, D2Lang, 10010,10010,10010,00000,00000,00000,00000, DWORD, D2PrintBigNu
|
||||
//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, 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, void, D2Storm503, (DWORD, DWORD, DWORD));
|
||||
F7(STD, Storm, 511, 511, 511, 511, 511, 511, 511, void, D2FreeWinMessage, (sWinMessage* msg));
|
||||
F7(STD, Storm, 268, 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, 511, 511, 511, 511, 511, 511, 511, 511, void, D2FreeWinMessage, (sWinMessage* msg));
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -511,12 +512,12 @@ F7(STD, Storm, 511, 511, 511, 511, 511, 511, 511, void, D2FreeWinMessa
|
||||
//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
|
||||
|
||||
F7(STD, D2gfx, 10005,10005,10005,10000,10063,10043,10031, DWORD, D2GetResolution,() );
|
||||
F7(STD, D2gfx, 10005,10005,10005,10000,10063,10043,10031,10012, DWORD, D2GetResolution,() );
|
||||
//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, 10027,10027,10027,00000,00000,00000,00000, HWND, D2GetWindowHandle,() );//6FA749C0
|
||||
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, void, D2PrintImage,(sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) );
|
||||
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, 10072,10072,10072,10047,10044,10024,10041,10042, void, D2PrintImage,(sDrawImageInfo* data, DWORD x, DWORD y, DWORD p4, DWORD p5, DWORD p6) );
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -530,36 +531,36 @@ F7(STD, D2gfx, 10072,10072,10072,10047,10044,10024,10041, void, D2PrintImage,(
|
||||
//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
|
||||
|
||||
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, void, D2PrintString,(LPWSTR s, DWORD x, DWORD y, DWORD color, DWORD bfalse) );
|
||||
F7(FAST, D2Win, 10121,10121,10121,10034,10128,10132,10028, DWORD, D2GetPixelLen,(LPWSTR s) );
|
||||
F7(FAST, D2Win, 10127,10127,10127,10141,10170,10010,10184, DWORD, D2SetFont,(DWORD fontID) );
|
||||
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, void, D2GetPixelRect,(LPWSTR s, DWORD* x, DWORD* y) );//6F8AB260
|
||||
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, void*, D2CreateTextBox,(DWORD* data) );
|
||||
F7(FAST, D2Win, 10046,10046,10046,10061,10075,10015,10022,10051, 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, 10121,10121,10121,10034,10128,10132,10028,10150, DWORD, D2GetPixelLen,(LPWSTR s) );
|
||||
F7(FAST, D2Win, 10127,10127,10127,10141,10170,10010,10184,10047, 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, 10131,10131,10131,00000,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(STD, D2Win, 10017,10017,10017,10147,10113,10098,10098,10164, void*, D2CreateTextBox,(DWORD* data) );
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//D2CMP : ????0000
|
||||
//D2S(D2CMP,10014, DWORD, D2CMP10014, (void* image) );//ONLY 1.11
|
||||
|
||||
F7(STD, D2CMP, 10032,10032,10032,10021,10014,10106,10065, DWORD, D2CMP10014, (void* image) );
|
||||
F7(STD, D2CMP, 10032,10032,10032,10021,10014,10106,10065,10020, DWORD, D2CMP10014, (void* image) );
|
||||
|
||||
|
||||
//ONLY UNTIL 1.10 :
|
||||
A7(FAST, D2Client, BA00, B9F0, C080,00000,00000,00000,00000, DWORD, D2isLODGame, ());//6FAAC080
|
||||
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, DWORD, D2GetMouseX, ());//6FB57BC0
|
||||
A7(STD, D2Client, B6680,B5A00,B7BD0,00000,00000,00000,00000, DWORD, D2GetMouseY, ());//6FB57BD0
|
||||
A7(STD, D2Client, 8DC40,8CFC0,883D0,00000,00000,00000,00000, Unit*, D2GetClientPlayer, ());//6FB283D0
|
||||
A7(FAST, D2Client, B920, B910, BF60,00000,00000,00000,00000, void, D2CleanStatMouseUp, ());//6FAABF60
|
||||
A7(FAST, D2Client, D210, D200, D990,00000,00000,00000,00000, void, D2SendToServer3, (BYTE type, WORD p));//6FAAD990
|
||||
A7(FAST, D2Client, BA00, B9F0, C080,00000,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(STD, D2Client, B6670,B59F0,B7BC0,00000,00000,00000,00000,00000, DWORD, D2GetMouseX, ());//6FB57BC0
|
||||
A7(STD, D2Client, B6680,B5A00,B7BD0,00000,00000,00000,00000,00000, DWORD, D2GetMouseY, ());//6FB57BD0
|
||||
A7(STD, D2Client, 8DC40,8CFC0,883D0,00000,00000,00000,00000,00000, Unit*, D2GetClientPlayer, ());//6FB283D0
|
||||
A7(FAST, D2Client, B920, B910, BF60,00000,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, 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, 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, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000, NetClient*, D2GetClient, (Unit* ptUnit, char* lpszErrFile, DWORD ErrLine));//6FCBC2E0
|
||||
A7(FAST, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000,00000, NetClient*, D2GetClient, (Unit* ptUnit, char* lpszErrFile, DWORD ErrLine));//6FCBC2E0
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////// VARIABLES ////////
|
||||
@@ -581,22 +582,23 @@ A7(FAST, D2Game, 7C2C0,7C7B0,8C2E0,00000,00000,00000,00000, NetClient*, D2GetCli
|
||||
//E2C(D2Client,11C1E0,Unit*, ptClientChar);//1.11b
|
||||
|
||||
//C7(D2Common,000000,000000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C, DataTables*,SgptDataTables); //03836A20 - 037A0000 //01EE6A20
|
||||
C7(D2Client, D50E8, D40E0, D40F0, F5C60, F4FC8, DC6E4, DBC4C, DWORD, ResolutionY);//0x258 = 600
|
||||
C7(D2Client, D50EC, D40E4, D40F4, F5C5C, F4FC4, DC6E0, DBC48, DWORD, ResolutionX);//0x320 = 800
|
||||
C7(D2Client,125AD8,124958,11A74C,11BD28,11BEFC,11BD2C,11B9A4, DWORD, NegWindowStartY);//0xFFFFFFC4 = -60
|
||||
C7(D2Client,125AD4,124954,11A748,11BD24,11BEF8,11BD28,11B9A0, DWORD, WindowStartX);//0x50 = 80
|
||||
C7(D2Client, D50E8, D40E0, D40F0, F5C60, F4FC8, DC6E4, DBC4C,F7038, DWORD, ResolutionY);//0x258 = 600
|
||||
C7(D2Client, D50EC, D40E4, D40F4, F5C5C, F4FC4, DC6E0, DBC48,F7034, DWORD, ResolutionX);//0x320 = 800
|
||||
C7(D2Client,125AD8,124958,11A74C,11BD28,11BEFC,11BD2C,11B9A4,11D358, DWORD, NegWindowStartY);//0xFFFFFFC4 = -60
|
||||
C7(D2Client,125AD4,124954,11A748,11BD24,11BEF8,11BD28,11B9A0,11D354, DWORD, WindowStartX);//0x50 = 80
|
||||
//C7(D2Launch, 55818, 56088, 2CD5C,000000, 2CD5C,000000,000000, DWORD, GameTypeMode);//0x50 = 80 //6FA3CD5C-6FA10000
|
||||
C7(D2Game, F2A80, F2918,113FB8,111718,1115E0,1105E0,1107B8, NetClient*, ClientTable);
|
||||
C7(D2Game, F2A80, F2918,113FB8,111718,1115E0,1105E0,1107B8,1105E0, NetClient*, ClientTable);
|
||||
//C7(D2Client,000000,000000,000000,000000,104225,000000,000000, DWORD, CurrentNPCNum);
|
||||
C7(D2Client,000000,000000,000000, FB3F4,11A2F4,10330C,119854, DWORD, IsLodGame);
|
||||
C7(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000, BYTE, DifficultyLevel);
|
||||
C7(D2Client,000000,000000,000000,10A40C,11B414,101634,11B824, DWORD, MouseY);//0x258 = 600
|
||||
C7(D2Client,000000,000000,000000,10A410,11B418,101638,11B828, DWORD, MouseX);//0x320 = 800
|
||||
C7(D2Client,000000,000000,000000,11C4F0,11C1E0,11C3D0,11BBFC, Unit*, ptClientChar);
|
||||
C7(D2Client,000000,000000,000000, FB3F4,11A2F4,10330C,119854,1087B4, DWORD, IsLodGame);
|
||||
C7(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000,000000, BYTE, DifficultyLevel);
|
||||
//C7(D2Client,000000,000000,10795C,11BFB8,11C2A8,11BFF4,000000,11D1D8, BYTE, DifficultyLevel);
|
||||
C7(D2Client,000000,000000,000000,10A40C,11B414,101634,11B824,11C94C, DWORD, MouseY);//0x258 = 600
|
||||
C7(D2Client,000000,000000,000000,10A410,11B418,101638,11B828,11C950, DWORD, MouseX);//0x320 = 800
|
||||
C7(D2Client,000000,000000,000000,11C4F0,11C1E0,11C3D0,11BBFC,11D050, Unit*, ptClientChar);
|
||||
|
||||
|
||||
C7(D2Client, DB918, DA828,000000,000000,000000,000000,000000, DWORD, NbStatDesc);
|
||||
C7(D2Client, DAF98, D9EA8,000000,000000,000000,000000,000000, DWORD, StatDescTable);
|
||||
C7(D2Client, DB918, DA828,000000,000000,000000,000000,000000,000000, DWORD, NbStatDesc);
|
||||
C7(D2Client, DAF98, D9EA8,000000,000000,000000,000000,000000,000000, DWORD, StatDescTable);
|
||||
|
||||
/* NEXT NOT TESTED IN 1.10 (1.09b fct)
|
||||
D2_STD(D2Common10066, void, D2RemoveFromRoom, (DrlgRoom1* hRoom, DWORD untitype, DWORD unitID), 0x6FD7CFD0);
|
||||
|
118
Commons/VersionInfo.cpp
Normal file
118
Commons/VersionInfo.cpp
Normal file
@@ -0,0 +1,118 @@
|
||||
#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;
|
||||
}
|
30
Commons/VersionInfo.h
Normal file
30
Commons/VersionInfo.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#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);
|
@@ -44,12 +44,11 @@ enum UpdateServerConst
|
||||
US_MAXGOLD,
|
||||
US_PUTGOLD,
|
||||
US_TAKEGOLD,
|
||||
US_TEST1, //For CB
|
||||
US_TEST2, //For CB
|
||||
US_TEST3, //For CB
|
||||
US_TOGGLE,
|
||||
US_SWAP,
|
||||
US_SWAPLAST = 0xFFFF
|
||||
|
||||
//For CB
|
||||
US_TEST1,
|
||||
US_TEST2,
|
||||
US_TEST3
|
||||
};
|
||||
|
||||
/*================================= END OF FILE =================================*/
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Use a more big stash
|
||||
|
||||
@@ -78,16 +79,17 @@ void Install_BigStash()
|
||||
log_msg("Patch D2Common & D2Client for make 10x10 squares in the stash. (BigStash)\n");
|
||||
|
||||
// modification of stash grid
|
||||
mem_seek R7(D2Common, C9F3, CA03, 14ED3, 5FCB5, 2A505, 1BDB5, 82CA5);
|
||||
mem_seek R7(D2Common, C9F3, CA03, 14ED3, 5FCB5, 2A505, 1BDB5, 82CA5, 6CC25);
|
||||
MEMC_REF4( D2CompileTxtFile, caller_modifStashGrid);
|
||||
//01B64ED2 |. E8 99AEFFFF CALL D2Common.#10578
|
||||
//6FDAFCB4 |. E8 A7C3FCFF CALL D2Common.#10653
|
||||
//6FD7A504 |. E8 5743FEFF CALL D2Common.#10496 ; \#10496
|
||||
//6FD6BDB4 |. E8 97600200 CALL D2Common.#10244 ; \#10244
|
||||
//6FDD2CA4 |. E8 97C2FDFF CALL D2Common.#10849 ; \#10849
|
||||
//6FDBCC24 |. E8 B7FEF9FF CALL D2Common.#10037 ; \#10037
|
||||
|
||||
// modification of stash background
|
||||
mem_seek R7(D2Client, 45B1C, 45B1C, 4C61C, A643C, 749BC, A9D7C, 8CC1C);
|
||||
mem_seek R7(D2Client, 45B1C, 45B1C, 4C61C, A643C, 749BC, A9D7C, 8CC1C, 943FC);
|
||||
memt_byte( 0x68, 0xE8 ); // CALL caller_changeTradeStash
|
||||
MEMT_REF4( 0x00000104, caller_changeTradeStash);
|
||||
//6FAEC61C |. 68 04010000 PUSH 104
|
||||
@@ -95,6 +97,7 @@ void Install_BigStash()
|
||||
//6FB249BC |. 68 04010000 PUSH 104
|
||||
//6FB59D7C |. 68 04010000 PUSH 104
|
||||
//6FB3CC1C |. 68 04010000 PUSH 104
|
||||
//6FB443FC |. 68 04010000 PUSH 104
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Updating server.
|
||||
|
||||
@@ -15,6 +16,7 @@
|
||||
#include "newInterface_CubeListing.h"
|
||||
#include "extraOptions.h"
|
||||
|
||||
|
||||
bool active_Commands=true;
|
||||
|
||||
bool active_listAllCubeFormula=true;
|
||||
@@ -23,18 +25,11 @@ bool active_savegame=false;
|
||||
#define MAX_CMD_SIZE 200
|
||||
|
||||
const char * CMD_RENAME="/rename";
|
||||
|
||||
const char * CMD_PAGENAME = "/pagename";
|
||||
const char * CMD_LISTCUBEFORMULA="/listcube";
|
||||
const char * CMD_SELECTPAGE="/page";
|
||||
const char * CMD_SWAP = "/swap";
|
||||
const char * CMD_TOGGLE = "/toggle";
|
||||
|
||||
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_MAXGOLD="/maxgold";
|
||||
@@ -147,94 +142,25 @@ void updateSharedGold(DWORD goldAmount)
|
||||
|
||||
int STDCALL commands (char* ptText)
|
||||
{
|
||||
//return 0;
|
||||
Unit* ptChar = D2GetClientPlayer();
|
||||
|
||||
//return 0;
|
||||
char command[MAX_CMD_SIZE];
|
||||
ZeroMemory(command,MAX_CMD_SIZE);
|
||||
//return 0;
|
||||
strncpy(command,ptText,MAX_CMD_SIZE-1);
|
||||
_strlwr(command);
|
||||
|
||||
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)))
|
||||
//return 0;
|
||||
strlwr(command);
|
||||
if (!strncmp(command,CMD_RENAME,strlen(CMD_RENAME)))
|
||||
{
|
||||
if (!active_multiPageStash) return 1;
|
||||
char* param = &command[strlen(CMD_PAGENAME)];
|
||||
char* param = &command[strlen(CMD_RENAME)];
|
||||
DWORD len = strlen(param);
|
||||
if (len && (param[0] != ' ')) return 1;
|
||||
|
||||
Stash* ptStash = PCPY->currentStash;
|
||||
if (!ptStash) return 0;
|
||||
if (len>1 && param[0] == ' ')
|
||||
if (len>1)
|
||||
{
|
||||
D2FogMemDeAlloc(ptStash->name,__FILE__,__LINE__,0);
|
||||
ptStash->name = (char *)malloc(len);//D2FogMemAlloc(len,__FILE__,__LINE__,0);
|
||||
@@ -260,32 +186,6 @@ int STDCALL commands (char* ptText)
|
||||
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 (onRealm) return 1;
|
||||
@@ -293,17 +193,10 @@ int STDCALL commands (char* ptText)
|
||||
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 (onRealm) return 1;
|
||||
updateServer(US_SAVE);
|
||||
updateServer(US_STARTSAVE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -331,7 +224,6 @@ int STDCALL commands (char* ptText)
|
||||
active_AlwaysDisplayLifeMana = !active_AlwaysDisplayLifeMana;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -359,6 +251,19 @@ MANAGESOUNDCHAOSDEBUG:
|
||||
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()
|
||||
{
|
||||
static int isInstalled = false;
|
||||
@@ -372,9 +277,9 @@ void Install_Commands()
|
||||
active_savegame = version_D2Common >= V111;
|
||||
|
||||
// Run custom commmand
|
||||
mem_seek R7(D2Client, 2C120, 2C110, 32BDD, C1EE6, 91C16, 86926, 70AE6);
|
||||
mem_seek R7(D2Client, 2C120, 2C110, 32BDD, C1EE6, 91C16, 86926, 70AE6, B1FD6);
|
||||
memt_byte( 0x83, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0xC08508C4 , version_D2Client >= V111 ? caller_Commands_111 : caller_Commands);
|
||||
MEMT_REF4( 0xC08508C4 , version_D2Client == V113d ? caller_Commands_113d : version_D2Client >= V111 ? caller_Commands_111 : caller_Commands);
|
||||
//6FB71EE6 . 83C4 08 ADD ESP,8
|
||||
//6FB71EE7 . 85C0 TEST EAX,EAX
|
||||
//6FB41C16 |. 83C4 08 ADD ESP,8
|
||||
@@ -383,9 +288,9 @@ void Install_Commands()
|
||||
//6FB36929 |. 85C0 TEST EAX,EAX
|
||||
//6FB20AE6 |. 83C4 08 ADD ESP,8
|
||||
//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");
|
||||
|
||||
isInstalled = true;
|
||||
|
534
PlugY/Common.cpp
534
PlugY/Common.cpp
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
*Modified by L'Autour.
|
||||
|
||||
Common functions.
|
||||
|
||||
@@ -8,9 +9,12 @@
|
||||
#include "common.h"
|
||||
#include "error.h"
|
||||
#include "d2functions.h"
|
||||
#include "INIfile.h"
|
||||
|
||||
#define sPlugyExt ".\\PlugY\\PlugYLocal.dll"
|
||||
s_shifting shifting;
|
||||
|
||||
|
||||
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);}
|
||||
|
||||
@@ -22,445 +26,120 @@ void freeMessage(sWinMessage* msg)
|
||||
D2FreeWinMessage(msg);
|
||||
}
|
||||
|
||||
//MS C++__fastcall(ecx,edx,) vs Delphi register(eax,edx,ecx) - :(
|
||||
|
||||
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)
|
||||
typedef int (__stdcall *p_UCS2toUTF8)(char*, int, LPWSTR, int);
|
||||
p_UCS2toUTF8 _UCS2toUTF8;
|
||||
|
||||
int UCS2toUTF8(char* dst, int maxdst, LPWSTR src, int lensrc)
|
||||
{
|
||||
switch(D2GetLang())
|
||||
{
|
||||
case LNG_ENG: return eng;
|
||||
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;
|
||||
}
|
||||
if (_UCS2toUTF8 == NULL) return 0;
|
||||
return _UCS2toUTF8(dst, maxdst, src, lensrc);
|
||||
}
|
||||
#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 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;
|
||||
return _UTF8toUCS2(dst, maxdst, src, lensrc);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
typedef LPWSTR(__fastcall *p_getTranslatedString)(int);
|
||||
p_getTranslatedString _getTranslatedString;
|
||||
|
||||
LPWSTR getTranslatedString(int stringID)
|
||||
{
|
||||
switch(stringID)
|
||||
{
|
||||
/* LANGUAGE2( STR_STATS_UNASSIGN_WITH_LIMIT,
|
||||
"+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 ??");
|
||||
if (_getTranslatedString == NULL) return L"#";
|
||||
return _getTranslatedString(stringID);
|
||||
}
|
||||
|
||||
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: ???");
|
||||
typedef int(__stdcall *p_wSprintStringLastGender)(LPWSTR, int, int);
|
||||
p_wSprintStringLastGender _wSprintStringLastGender;
|
||||
|
||||
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)");
|
||||
int wSprintStringLastGender(LPWSTR buf, int lenbuf,int stringID)
|
||||
{
|
||||
if (_wSprintStringLastGender == NULL) return 0;
|
||||
return _wSprintStringLastGender(buf, lenbuf, stringID);
|
||||
}
|
||||
|
||||
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");
|
||||
// "????????");
|
||||
typedef LPWSTR(__fastcall *p_cutStringGender)(LPWSTR);
|
||||
p_cutStringGender _cutStringGender;
|
||||
|
||||
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: ??)");
|
||||
LPWSTR cutStringGender(LPWSTR str)
|
||||
{
|
||||
if (_cutStringGender == NULL) return str;
|
||||
return _cutStringGender(str);
|
||||
}
|
||||
|
||||
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: ?????");
|
||||
typedef LPWSTR(__fastcall *p_setMonoString)(LPWSTR);
|
||||
p_setMonoString _setMonoString;
|
||||
|
||||
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"";
|
||||
}
|
||||
LPWSTR setMonoString(LPWSTR str)
|
||||
{
|
||||
if (_setMonoString == NULL) return str;
|
||||
return _setMonoString(str);
|
||||
}
|
||||
|
||||
|
||||
/*=================================================================*/
|
||||
typedef bool(__fastcall *p_initTranslatedString)(int);
|
||||
|
||||
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};
|
||||
HINSTANCE PlugyLocalLib = NULL;
|
||||
|
||||
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)
|
||||
bool initLocaleStrings()
|
||||
{
|
||||
DWORD lang = 0;//D2GetLang();
|
||||
if ((lang == LNG_FRA) || (lang == LNG_DEU)) lang--;
|
||||
else lang = 0;
|
||||
switch (code)
|
||||
p_initTranslatedString initTranslatedString;
|
||||
|
||||
PlugyLocalLib = LoadLibrary(sPlugyExt);
|
||||
|
||||
if (PlugyLocalLib != NULL)
|
||||
{
|
||||
case BIN('s','h','i','e') : return c_shie[0];
|
||||
case BIN('t','o','r','s') : return c_tors[0];
|
||||
case BIN('g','o','l','d') : return c_gold[0];
|
||||
case BIN('b','o','w','q') : return c_bowq[0];
|
||||
case BIN('x','b','o','q') : return c_xboq[0];
|
||||
case BIN('p','l','a','y') : return c_play[0];
|
||||
case BIN('h','e','r','b') : return c_herb[0];
|
||||
case BIN('p','o','t','i') : return c_poti[0];
|
||||
case BIN('r','i','n','g') : return c_ring[0];
|
||||
case BIN('e','l','i','x') : return c_elix[0];
|
||||
case BIN('a','m','u','l') : return c_amul[0];
|
||||
case BIN('c','h','a','r') : return c_char[0];
|
||||
case BIN('b','o','o','t') : return c_boot[0];
|
||||
case BIN('g','l','o','v') : return c_glov[0];
|
||||
case BIN('b','o','o','k') : return c_book[0];
|
||||
case BIN('b','e','l','t') : return c_belt[0];
|
||||
case BIN('g','e','m',' ') : return c_gem[0];
|
||||
case BIN('t','o','r','c') : return c_torc[0];
|
||||
case BIN('s','c','r','o') : return c_scro[0];
|
||||
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("Loading PlugYLocal.dll\n");
|
||||
initTranslatedString = (p_initTranslatedString)GetProcAddress(PlugyLocalLib, "__fastcall initTranslatedString");
|
||||
if (NULL != initTranslatedString)
|
||||
{
|
||||
log_msg("Loading local strings from PlugYLocal.ini\n");
|
||||
|
||||
_UCS2toUTF8 = (p_UCS2toUTF8)GetProcAddress(PlugyLocalLib, "__stdcall UCS2toUTF8");
|
||||
_UTF8toUCS2 = (p_UTF8toUCS2)GetProcAddress(PlugyLocalLib, "__stdcall UTF8toUCS2");
|
||||
|
||||
_getTypeString = (p_getTypeString)GetProcAddress(PlugyLocalLib, "__fastcall getTypeString");
|
||||
_cutStringGender = (p_cutStringGender)GetProcAddress(PlugyLocalLib, "__fastcall cutStringGender");
|
||||
_wSprintStringLastGender = (p_wSprintStringLastGender)GetProcAddress(PlugyLocalLib, "__stdcall wSprintStringLastGender");
|
||||
_setMonoString = (p_setMonoString)GetProcAddress(PlugyLocalLib, "__fastcall setMonoString");
|
||||
|
||||
_getTranslatedString = (p_getTranslatedString)GetProcAddress(PlugyLocalLib, "__fastcall getTranslatedString");
|
||||
if ((NULL != _getTranslatedString) &&
|
||||
(NULL != _getTypeString))
|
||||
{
|
||||
initTranslatedString(D2GetLang());
|
||||
return true;
|
||||
}
|
||||
log_msg("Failed loading local strings\n");
|
||||
}
|
||||
|
||||
if (FreeLibrary(PlugyLocalLib))
|
||||
{
|
||||
PlugyLocalLib = NULL;
|
||||
}
|
||||
} else log_msg("Failed loading PlugYLocal.dll\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
char* getTypeAString (WORD id, char* lpText, DWORD size)
|
||||
void freeLocaleStrings()
|
||||
{
|
||||
ItemTypesBIN* itemTypeData = D2GetItemTypesBIN(id);
|
||||
if (!itemTypeData)
|
||||
{
|
||||
strncpy(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;
|
||||
strncpy(lpText, (char*)&code, size);
|
||||
} else
|
||||
strncpy(lpText, string, size);
|
||||
|
||||
return lpText;
|
||||
if (PlugyLocalLib == NULL) return;
|
||||
FreeLibrary(PlugyLocalLib);
|
||||
}
|
||||
|
||||
LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size)
|
||||
@@ -468,10 +147,21 @@ LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size)
|
||||
ItemTypesBIN* itemTypeData = D2GetItemTypesBIN(id);
|
||||
if (!itemTypeData)
|
||||
{
|
||||
mbstowcs(lpText, "Bad Type", size);
|
||||
wcsncpy(lpText, L"Bad Type", size);
|
||||
return lpText;
|
||||
}
|
||||
const char* string = getTypeString(itemTypeData->code);
|
||||
char* idxstr;
|
||||
LPWSTR string = getTypeString(itemTypeData->code, &idxstr);
|
||||
|
||||
if (idxstr)
|
||||
{
|
||||
LPWSTR string2 = D2GetStringFromString(idxstr);
|
||||
if (string2)
|
||||
{
|
||||
wcsncpy(lpText, string2, size);
|
||||
return lpText;
|
||||
}
|
||||
}
|
||||
if (!string)
|
||||
{
|
||||
struct {
|
||||
@@ -480,10 +170,12 @@ LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size)
|
||||
} code;
|
||||
code.code = itemTypeData->code;
|
||||
code.zero = 0;
|
||||
mbstowcs(lpText, (char*)&code, size);
|
||||
UTF8toUCS2(lpText,size, (char*)&code, 0xFFFF);
|
||||
} else
|
||||
mbstowcs(lpText, string, size);
|
||||
|
||||
wcsncpy(lpText, string, size);
|
||||
return lpText;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*================================= END OF FILE =================================*/
|
@@ -1,5 +1,6 @@
|
||||
/*================================================
|
||||
File created by Yohann NICOLAS.
|
||||
*Add support 1.13d by L'Autour.
|
||||
|
||||
This file implements some common and useful
|
||||
function related to some Diablo II mechanisms.
|
||||
@@ -16,9 +17,9 @@
|
||||
#define E2S(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 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, R, N, P) T##N N;
|
||||
#define C7(Z, A,B,C,D,E,F,G, T, N) T* pt##N;
|
||||
#define F7(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,H, R, N, P) T##N N;
|
||||
#define C7(Z, A,B,C,D,E,F,G,H, T, N) T* pt##N;
|
||||
|
||||
#include "../Commons/D2Funcs.h"
|
||||
DataTables* SgptDataTables;
|
||||
@@ -616,12 +617,12 @@ bool initD2functions()
|
||||
#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 E2C(F, A, T, N) pt##N = (T*)(offset_##F + 0x##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, 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, T, N) pt##N = (T*)R7(Z,A,B,C,D,E,F,G);
|
||||
#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 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 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);
|
||||
|
||||
#include "../Commons/D2Funcs.h"
|
||||
SgptDataTables = *(DataTables**) R7(D2Common, 0000, 0000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C);
|
||||
SgptDataTables = *(DataTables**) R7(D2Common, 0000, 0000, 96A20, 9B74C, 9EE8C, 9B500, 99E1C, A33F0);
|
||||
if (version_D2Common < V110)
|
||||
{
|
||||
D2S(D2Common,10581, CharStatsBIN*, D2Common10581, (DWORD charID));//ONLY in 1.09
|
||||
@@ -915,10 +916,10 @@ bool initD2functions()
|
||||
D2GetClientPlayer = D2GetClientPlayer_111;
|
||||
D2GetRealItem = D2GetRealItem_111;
|
||||
D2CleanStatMouseUp = D2CleanStatMouseUp_111;
|
||||
StatMouse1 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C004, 11C2F4, 11C040, 11C3DC);
|
||||
StatMouse2 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C008, 11C2F8, 11C044, 11C3E0);
|
||||
StatMouse3 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C020, 11C310, 11C05C, 11C3F8);
|
||||
StatMouse4 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C024, 11C314, 11C060, 11C3FC);
|
||||
StatMouse1 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C004, 11C2F4, 11C040, 11C3DC, 11D224);
|
||||
StatMouse2 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C008, 11C2F8, 11C044, 11C3E0, 11D228);
|
||||
StatMouse3 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C020, 11C310, 11C05C, 11C3F8, 11D240);
|
||||
StatMouse4 = (DWORD*)R7(D2Client, 0000, 0000, 0000, 11C024, 11C314, 11C060, 11C3FC, 11D244);
|
||||
} else {
|
||||
D2SendToServer = (TD2SendToServer) D2SendToServer_1XX;
|
||||
D2GetGameByClientID = (TD2GetGameByClientID) D2GetGameByClientID_1XX;
|
||||
@@ -946,16 +947,16 @@ bool initD2functions()
|
||||
|
||||
|
||||
//////////////// STRUCTURE MANAGEMENT ////////////////
|
||||
|
||||
//L'Autour - ??????
|
||||
// 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));
|
||||
shifting.ptSpecificData = V7(D2Common,70,70,14,14,14,14,14);
|
||||
shifting.ptGame = V7(D2Common,A4,A4,80,80,80,80,80);
|
||||
shifting.ptClientGame = V7(D2Common,170,194,1A8,1A8,1A8,1A8,1A8);
|
||||
shifting.ptInventory = V7(D2Common,84,84,60,60,60,60,60);
|
||||
shifting.ptSkills = V7(D2Common,CC,CC,A8,A8,A8,A8,A8);
|
||||
shifting.ptImage = V7(D2Common,04,04,04,08,08,3C,34);
|
||||
shifting.ptFrame = V7(D2Common,08,08,08,44,44,40,00);
|
||||
shifting.ptPYPlayerData = *(DWORD*)((DWORD)D2InitPlayerData + V7(D2Common,5D,5D,5D,49,49,49,49,49));
|
||||
shifting.ptSpecificData = V7(D2Common,70,70,14,14,14,14,14,14);
|
||||
shifting.ptGame = V7(D2Common,A4,A4,80,80,80,80,80,80);
|
||||
shifting.ptClientGame = V7(D2Common,170,194,1A8,1A8,1A8,1A8,1A8,1A8);
|
||||
shifting.ptInventory = V7(D2Common,84,84,60,60,60,60,60,60);
|
||||
shifting.ptSkills = V7(D2Common,CC,CC,A8,A8,A8,A8,A8,A8);
|
||||
shifting.ptImage = V7(D2Common,04,04,04,08,08,3C,34,34);
|
||||
shifting.ptFrame = V7(D2Common,08,08,08,44,44,40,00,00);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
@file D2wrapper.cpp
|
||||
@brief Main Diablo II extra DLL handler.
|
||||
@@ -31,26 +32,27 @@
|
||||
#include "uberQuest.h" // Install_UberQuest()
|
||||
#include "extraOptions.h" // Install_AlwaysRegenMapInSP()
|
||||
#include "language.h" // Install_LanguageManagement()
|
||||
#include "../Commons/VersionInfo.h"
|
||||
|
||||
|
||||
int version_SmackW32=V113;
|
||||
int version_D2Common=V113;
|
||||
int version_ijl11=V113;
|
||||
int version_D2Gdi=V113;
|
||||
int version_D2Win=V113;
|
||||
int version_D2sound=V113;
|
||||
int version_D2MCPCLI=V113;
|
||||
int version_D2Launch=V113;
|
||||
int version_D2gfx=V113;
|
||||
int version_D2Client=V113;
|
||||
int version_D2Net=V113;
|
||||
int version_D2Lang=V113;
|
||||
int version_D2Game=V113;
|
||||
int version_D2CMP=V113;
|
||||
int version_Bnclient=V113;
|
||||
int version_Fog=V113;
|
||||
int version_Storm=V113;
|
||||
|
||||
//-------------------------
|
||||
int version_SmackW32=V113d;
|
||||
int version_D2Common=V113d;
|
||||
int version_ijl11=V113d;
|
||||
int version_D2Gdi=V113d;
|
||||
int version_D2Win=V113d;
|
||||
int version_D2sound=V113d;
|
||||
int version_D2MCPCLI=V113d;
|
||||
int version_D2Launch=V113d;
|
||||
int version_D2gfx=V113d;
|
||||
int version_D2Client=V113d;
|
||||
int version_D2Net=V113d;
|
||||
int version_D2Lang=V113d;
|
||||
int version_D2Game=V113d;
|
||||
int version_D2CMP=V113d;
|
||||
int version_Bnclient=V113d;
|
||||
int version_Fog=V113d;
|
||||
int version_Storm=V113d;
|
||||
//-------------------------
|
||||
|
||||
DWORD offset_SmackW32=NULL;
|
||||
DWORD offset_D2Common=NULL;
|
||||
@@ -375,6 +377,7 @@ 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)
|
||||
{
|
||||
log_msg("version of %s\t",filename);
|
||||
@@ -432,6 +435,47 @@ bool initD2version()
|
||||
log_msg("\n\n");
|
||||
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 ////////////////////////////////////
|
||||
|
||||
extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
||||
@@ -445,7 +489,12 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
||||
|
||||
loadD2Libraries();
|
||||
|
||||
if (!initD2version()) return NULL;
|
||||
if (!initD2version())
|
||||
{
|
||||
log_msg("wrong G ame.exe version\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if (!initD2functions()) return NULL;
|
||||
|
||||
@@ -470,7 +519,7 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
||||
if (active_VersionTextChange)
|
||||
Install_VersionChange();
|
||||
|
||||
if (active_PrintPlugYVersion || active_Windowed)
|
||||
if (active_PrintPlugYVersion)
|
||||
Install_PrintPlugYVersion();
|
||||
|
||||
if (active_StatsPoints)
|
||||
@@ -539,6 +588,10 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
|
||||
|
||||
unhookLibraries();
|
||||
|
||||
log_msg("\n*****Loading locale strings.*****\n");
|
||||
initLocaleStrings();
|
||||
log_msg("\n\n\n");
|
||||
|
||||
initCustomLibraries();
|
||||
|
||||
log_msg("***** ENTERING DIABLO II *****\n\n" );
|
||||
@@ -555,6 +608,7 @@ extern "C" __declspec(dllexport) bool __stdcall Release()
|
||||
log_msg("\n***** ENDING DIABLO II *****\n\n" );
|
||||
|
||||
freeCustomLibraries();
|
||||
freeLocaleStrings();
|
||||
freeD2Libraries();
|
||||
return true;
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
More little options.
|
||||
|
||||
@@ -10,11 +11,10 @@
|
||||
#include "d2functions.h"
|
||||
#include <stdio.h>
|
||||
|
||||
int active_Windowed = true;
|
||||
int active_DisplayItemLevel = false;
|
||||
DWORD nbPlayersCommandByDefault = 0;
|
||||
int active_alwaysRegenMapInSP = false;
|
||||
int active_RunLODs = false;
|
||||
int active_alwaysRegenMapInSP = false;
|
||||
DWORD nbPlayersCommandByDefault = 1;
|
||||
int active_DisplayItemLevel = false;
|
||||
int active_AlwaysDisplayLifeMana = false;
|
||||
int active_EnabledTXTFilesWithMSExcel = false;
|
||||
int active_DisplayBaseStatsValue = false;
|
||||
@@ -23,95 +23,13 @@ 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)
|
||||
{
|
||||
if (onRealm && (selectModParam==MOD_NO)) return;
|
||||
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);
|
||||
wcscat(popup,text);
|
||||
}
|
||||
@@ -224,17 +142,18 @@ void Install_DisplayItemLevel()
|
||||
log_msg("Patch D2Client for display item popup. (DisplayPopup)\n");
|
||||
|
||||
// print the text in the final buffer
|
||||
mem_seek R7(D2Client, 3D47C, 3D47C, 438A1, ADD0A, 789DA, AE0AA, 941C0);
|
||||
mem_seek R7(D2Client, 3D47C, 3D47C, 438A1, ADD0A, 789DA, AE0AA, 941C0, 98590);
|
||||
memt_byte( 0x68 , 0xE8);
|
||||
MEMT_REF4( 0x100, version_D2Client >= V113 ? caller_displayItemlevel_113 : version_D2Client >= V111 ? caller_displayItemlevel_111 : version_D2Client == V110 ? caller_displayItemlevel : caller_displayItemlevel_9);
|
||||
MEMT_REF4( 0x100, version_D2Client >= V113c ? caller_displayItemlevel_113 : version_D2Client >= V111 ? caller_displayItemlevel_111 : version_D2Client == V110 ? caller_displayItemlevel : caller_displayItemlevel_9);
|
||||
//6FAE38A1 . 68 00010000 PUSH 100
|
||||
//6FB5DD0A |. 68 00010000 PUSH 100
|
||||
//6FB289DA |. 68 00010000 PUSH 100
|
||||
//6FB5E0AA |. 68 00010000 PUSH 100
|
||||
//6FB441C0 |. 68 00010000 PUSH 100
|
||||
//6FB48590 |. 68 00010000 PUSH 100
|
||||
|
||||
// print the text in the final buffer (for set items)
|
||||
mem_seek R7(D2Client, 3C452, 3C452, 427BE, AC773, 77773, ACEB3, 92FE3);
|
||||
mem_seek R7(D2Client, 3C452, 3C452, 427BE, AC773, 77773, ACEB3, 92FE3, 973B3);
|
||||
memt_byte( 0x68 , 0xE8);
|
||||
MEMT_REF4( 0x100, version_D2Client >= V111 ? caller_displayItemlevelSet_111 : version_D2Client == V110 ? caller_displayItemlevelSet : caller_displayItemlevelSet_9);
|
||||
//6FAE27BE . 68 00010000 PUSH 100
|
||||
@@ -242,6 +161,7 @@ void Install_DisplayItemLevel()
|
||||
//6FB27773 |. 68 00010000 PUSH 100
|
||||
//6FB5CEB3 |. 68 00010000 PUSH 100
|
||||
//6FB42FE3 |. 68 00010000 PUSH 100
|
||||
//6FB473B3 |. 68 00010000 PUSH 100
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
@@ -293,12 +213,12 @@ void Install_SendPlayersCommand()
|
||||
|
||||
log_msg("Patch D2Client for init default nb /players. (SendPlayersCommand)\n");
|
||||
|
||||
infoEnabledSendPlayersCommand = (DWORD*)R7(D2Client, 111D60, 110BC0, 107960, 11BFBC, 11C2AC, 11BFF8, 11C394);
|
||||
infoEnabledSendPlayersCommand = (DWORD*)R7(D2Client, 111D60, 110BC0, 107960, 11BFBC, 11C2AC, 11BFF8, 11C394, 11D1DC);
|
||||
if ( version_D2Client >= V110 )
|
||||
msgNBPlayersString = (char*)R7(D2Client, 0000, 0000, D8448, D06A8, D4748, D4680, D4E00);
|
||||
msgNBPlayersString = (char*)R7(D2Client, 0000, 0000, D8448, D06A8, D4748, D4680, D4E00, D470C);
|
||||
|
||||
// Set nb Player to default
|
||||
mem_seek R7(D2Client, 8723B, 865BB, 81B8B, A3602, 66A02, 90162, C39F2);//6FB1C7B7-6FAA0000
|
||||
mem_seek R7(D2Client, 8723B, 865BB, 81B8B, A3602, 66A02, 90162, C39F2, 1D3F2);//6FB1C7B7-6FAA0000
|
||||
MEMJ_REF4( D2GetResolution , caller_SendPlayersCommand);
|
||||
//6FB2723A |. E8 7D8E0300 CALL <JMP.&D2gfx.#10005>
|
||||
//6FB265BA |. E8 7D8E0300 CALL <JMP.&D2gfx.#10005>
|
||||
@@ -307,6 +227,7 @@ void Install_SendPlayersCommand()
|
||||
//6FB16A01 |. E8 AA65FAFF CALL <JMP.&D2gfx.#10063>
|
||||
//6FB40161 |. E8 1ECFF7FF CALL <JMP.&D2gfx.#10043>
|
||||
//6FB739F1 |. E8 B896F4FF CALL <JMP.&D2gfx.#10031>
|
||||
//6FACD3F1 |. E8 EAFBFEFF CALL <JMP.&D2gfx.#10012>
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
@@ -324,13 +245,14 @@ void Install_AlwaysRegenMapInSP()
|
||||
log_msg("Patch D2Game for always regenerate maps in Single player. (AlwaysRegenMapInSP)\n");
|
||||
|
||||
// Always regenerate maps in Single player
|
||||
mem_seek R7(D2Game, 517ED, 51BFA, 5DE88, 6235D, 2966D, 1E1FE, ED3BE);
|
||||
mem_seek R7(D2Game, 517ED, 51BFA, 5DE88, 6235D, 2966D, 1E1FE, ED3BE, 26D7E);
|
||||
memt_byte( 0x74 , 0xEB); // JMP SHORT D2Game.01FE2368
|
||||
//6FC8DE88 |. 74 09 JE SHORT D2Game.6FC8DE93
|
||||
//01FE235D |. 74 09 JE SHORT D2Game.01FE2368
|
||||
//01F9966D |. 74 09 JE SHORT D2Game.01F99678
|
||||
//6FC3E1FE |. 74 09 JE SHORT D2Game.6FC3E209
|
||||
//6FD0D3BE |. 74 09 JE SHORT D2Game.6FD0D3C9
|
||||
//6FC46D7E |. 74 09 JE SHORT D2Game.6FC46D89
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
@@ -347,11 +269,12 @@ void Install_RunLODs()
|
||||
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
|
||||
mem_seek R7(D2gfx, 447C, 447C, 446A, 84CF, 84AF, 894F, 85BF);
|
||||
mem_seek R7(D2gfx, 447C, 447C, 446A, 84CF, 84AF, 894F, 85BF, B6B0);
|
||||
memt_byte( 0x74, 0xEB ); // JMP SHORT D2gfx.6FA884F6
|
||||
//6FA884AF |. 74 45 JE SHORT D2gfx.6FA884F6
|
||||
//6FA8894F |. 74 45 JE SHORT D2gfx.6FA88996
|
||||
//6FA885BF |. 74 45 JE SHORT D2gfx.6FA88606
|
||||
//6FA8B6B0 |. 74 45 JE SHORT D2gfx.6FA8B6F7
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
@@ -466,9 +389,9 @@ void Install_AlwaysDisplayLifeMana()
|
||||
|
||||
log_msg("Patch D2Client for always display life and mana. (ALwaysPrintLifeMana)\n");
|
||||
|
||||
if ( version_D2Client >= V113 )
|
||||
if ( version_D2Client >= V113c )
|
||||
{
|
||||
mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2764A);
|
||||
mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2764A, 6D6FA);
|
||||
memt_byte( 0x0F , 0x90);
|
||||
memt_byte( 0x8C , 0xE8);
|
||||
MEMT_REF4( 0x000000BC, caller_AlwaysDisplayLife_113);
|
||||
@@ -478,9 +401,13 @@ void Install_AlwaysDisplayLifeMana()
|
||||
//6FAD7659 |. A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C]
|
||||
|
||||
//6FAD7667 |. 0F8C A4000000 JL D2Client.6FAD7711
|
||||
//--
|
||||
//6FB1D717 |. 0F8C A4000000 JL D2Client.6FB1D7C1
|
||||
|
||||
|
||||
} else {
|
||||
// Always display life.
|
||||
mem_seek R7(D2Client, 58B32, 58B32, 5F102, 2D713, B5DF3, 81733, 0000);
|
||||
mem_seek R7(D2Client, 58B32, 58B32, 5F102, 2D713, B5DF3, 81733, 0000, 0000);
|
||||
memt_byte( 0xA1 , 0xE8);
|
||||
MEMT_REF4( ptResolutionY , version_D2Client >= V111 ? caller_AlwaysDisplayLife_111 : caller_AlwaysDisplayLife);
|
||||
//6FADD713 |. A1 605CBA6F MOV EAX,DWORD PTR DS:[6FBA5C60]
|
||||
@@ -490,13 +417,13 @@ void Install_AlwaysDisplayLifeMana()
|
||||
|
||||
|
||||
// Always display mana.
|
||||
if ( version_D2Client >= V113 )
|
||||
if ( version_D2Client >= V113c )
|
||||
{
|
||||
//mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 27711);
|
||||
//memt_byte( 0x8B , 0x90);
|
||||
//memt_byte( 0x0D , 0xE8);
|
||||
//MEMT_REF4( offset_D2Client + 0x11C4B4 , caller_AlwaysDisplayMana_113);
|
||||
mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2770C);
|
||||
mem_seek R7(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 2770C, 6D7BC);
|
||||
memt_byte( 0xA1 , 0xE8);
|
||||
MEMT_REF4( ptResolutionY , caller_AlwaysDisplayMana_113);
|
||||
//6FAD770C |> A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C]
|
||||
@@ -510,10 +437,12 @@ void Install_AlwaysDisplayLifeMana()
|
||||
//6FAD77CA |. 5B POP EBX
|
||||
//6FAD77CB |. 81C4 28030000 ADD ESP,328
|
||||
//6FAD77D1 \. C3 RETN
|
||||
//--
|
||||
//6FB1D7BC |> A1 3870BA6F MOV EAX,DWORD PTR DS:[6FB8BC4C]
|
||||
}
|
||||
else if ( version_D2Client >= V110 )
|
||||
{
|
||||
mem_seek R7(D2Client, 0000, 0000, 5F1E6, 2D7FB, B5EDB, 8181B, 0000);
|
||||
mem_seek R7(D2Client, 0000, 0000, 5F1E6, 2D7FB, B5EDB, 8181B, 0000, 0000);
|
||||
memt_byte( 0x5F , 0xE8);
|
||||
MEMT_REF4( 0x815B5D5E , caller_AlwaysDisplayMana);
|
||||
memt_byte( 0xC4 , 0x90); // NOP
|
||||
@@ -538,7 +467,7 @@ void Install_AlwaysDisplayLifeMana()
|
||||
//6FB3181F |. 81C4 5C020000 ADD ESP,25C
|
||||
//6FB31825 |. C3 RETN
|
||||
} else {
|
||||
mem_seek R7(D2Client, 58C09, 58C09, 0000, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(D2Client, 58C09, 58C09, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0xE9 , 0xE8);
|
||||
MEMT_REF4( 0x000000C2 , caller_AlwaysDisplayMana_9);
|
||||
//6FAF8C09 . E9 C2000000 JMP D2Client.6FAF8CD0
|
||||
@@ -623,23 +552,25 @@ void Install_DisplayBaseStatsValue()
|
||||
log_msg("Patch D2Client for display base stats value. (DisplayBaseStatsValue)\n");
|
||||
|
||||
// Always print stat button images.
|
||||
mem_seek R7(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5);
|
||||
mem_seek R7(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5, BF955);
|
||||
memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088
|
||||
memt_byte( 0x4C, V7(D2Client, 12, 12, 13, 13, 13, 13, 13) );
|
||||
memt_byte( 0x4C, V7(D2Client, 12, 12, 13, 13, 13, 13, 13, 13) );
|
||||
memt_byte( 0x24, 0x90 ); // NOP
|
||||
memt_byte( V7(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C), 0x90 ); // NOP (V109d:0x20 , V110:0x14
|
||||
memt_byte( V7(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C, 1C), 0x90 ); // NOP (V109d:0x20 , V110:0x14
|
||||
//6FAD0073 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
|
||||
//6FB32BBA > 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]
|
||||
//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);
|
||||
mem_seek R7(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E, BF9DE);
|
||||
MEMJ_REF4( D2PrintImage, caller_displayBaseStatsValue);
|
||||
//6FB32C53 . E8 82A3F8FF CALL <JMP.&D2gfx.#10047>
|
||||
//6FB396D3 . E8 D238F8FF CALL <JMP.&D2gfx.#10044>
|
||||
//6FB1B636 . E8 431AFAFF CALL <JMP.&D2gfx.#10024>
|
||||
//6FB6D23D |. E8 54FEF4FF |CALL <JMP.&D2gfx.#10041>
|
||||
//6FB6F9DD |. E8 54FEF4FF |CALL <JMP.&D2gfx.#10042>
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
@@ -667,13 +598,14 @@ void Install_LadderRunewords()
|
||||
|
||||
log_msg("Patch D2Common for enabled the ladder only runewords. (LadderRunewords)\n");
|
||||
|
||||
mem_seek R7(D2Common, 0000, 0000, 1E965, 61762, 43A72, 5D492, 724B2);
|
||||
mem_seek R7(D2Common, 0000, 0000, 1E965, 61762, 43A72, 5D492, 724B2, 63782);
|
||||
MEMC_REF4( D2CompileTxtFile, compileRunesTxt);
|
||||
//01B6E964 |. E8 0714FFFF CALL D2Common.#10578 ; \#10578
|
||||
//6FDB1761 |. E8 FAA8FCFF CALL D2Common.#10653 ; \#10653
|
||||
//6FD93A71 |. E8 EAADFCFF CALL D2Common.#10496 ; \#10496
|
||||
//6FDAD491 |. E8 BA49FEFF CALL D2Common.#10244 ; \#10244
|
||||
//6FDC24B1 |. E8 8ACAFEFF CALL D2Common.#10849 ; \#10849
|
||||
//6FDB3781 |. E8 5A93FAFF CALL D2Common.#10037 ; \#10037
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
@@ -691,7 +623,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");
|
||||
|
||||
mem_seek R7(D2Game, 5DFF7, 5E457, 6C5E7 , B1278, 5DB68, 75C68, 67508);
|
||||
mem_seek R7(D2Game, 5DFF7, 5E457, 6C5E7 , B1278, 5DB68, 75C68, 67508, EBE8);
|
||||
memt_byte( 0x85 , 0x33); // XOR EAX,EAX
|
||||
//6FC8DFF7 . 85C0 TEST EAX,EAX
|
||||
//6FC8E457 . 85C0 TEST EAX,EAX
|
||||
@@ -700,6 +632,7 @@ void Install_EnabledCowPortalWhenCowKingWasKill()
|
||||
//01FEDB68 |. 85C0 TEST EAX,EAX
|
||||
//6FC95C68 |. 85C0 TEST EAX,EAX
|
||||
//6FC87508 |. 85C0 TEST EAX,EAX
|
||||
//6FC2EBE8 |. 85C0 TEST EAX,EAX
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Updating server.
|
||||
|
||||
@@ -101,7 +102,7 @@ void Install_VariableOnRealm()
|
||||
log_msg("Patch D2Launch for set not on realm variable. (VariableonRealm)\n");
|
||||
|
||||
// click on Battle.net button
|
||||
mem_seek R7(D2Launch, 8195, 81A5, 9915, 129E5, 18AA5, 17D15, 19295);
|
||||
mem_seek R7(D2Launch, 8195, 81A5, 9915, 129E5, 18AA5, 17D15, 19295, 11C65);
|
||||
memt_byte( 0x81, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0x000400EC, caller_BnetBtnPress);
|
||||
memt_byte( 0x00, 0x90 ); // NOP
|
||||
@@ -114,7 +115,7 @@ void Install_VariableOnRealm()
|
||||
//6FA1EFFC . B8 01000000 MOV EAX,1
|
||||
|
||||
// click on TCP/IP button
|
||||
mem_seek R7(D2Launch, 87B9, 87C9, 9F99, 11329, 17409, 16659, 17B8E);
|
||||
mem_seek R7(D2Launch, 87B9, 87C9, 9F99, 11329, 17409, 16659, 17B8E, 1053E);
|
||||
if (version_D2Launch == V109b || version_D2Launch == V109d || version_D2Launch == V110)
|
||||
{
|
||||
memt_byte( 0xBD, 0xE8 ); // CALL
|
||||
@@ -126,7 +127,7 @@ void Install_VariableOnRealm()
|
||||
}
|
||||
|
||||
// click on SinglePlayer button
|
||||
mem_seek R7(D2Launch, D1F6, D1E6, EC16, B726, 117E6, 10A56, 11F36);
|
||||
mem_seek R7(D2Launch, D1F6, D1E6, EC16, B726, 117E6, 10A56, 11F36, A906);
|
||||
memt_byte( 0xBA, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0x00000400, caller_SinglePlayerBtnPress);
|
||||
//6FA4B726 . BA 00040000 MOV EDX,400
|
||||
@@ -135,7 +136,7 @@ void Install_VariableOnRealm()
|
||||
{
|
||||
log_msg("\nPatch D2Game for fixing ptClient removing bug. (VariableonRealm)\n");
|
||||
//Bug crash ptClient search fix (for Megalixir Mod).
|
||||
mem_seek R7(D2Game, 0000, 0000, 2B97, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(D2Game, 0000, 0000, 2B97, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0x39 ,0xE8);
|
||||
MEMT_REF4( 0x8B0C7429 , caller_fixClientRemovingBug);
|
||||
memt_byte( 0xC1 ,0x90);
|
||||
|
@@ -37,7 +37,7 @@ static char *strstri(char *text, char *string)
|
||||
{
|
||||
while(*text)
|
||||
{
|
||||
if(_strnicmp(string, text, len) == 0)
|
||||
if(strnicmp(string, text, len) == 0)
|
||||
{
|
||||
found = text;
|
||||
break;
|
||||
@@ -280,7 +280,7 @@ int INIFile::GetPrivateProfileString(const char *section, const char *key, const
|
||||
|
||||
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);
|
||||
|
||||
@@ -343,7 +343,7 @@ BOOL INIFile::WritePrivateProfileString(char *section, char *key, char *string)
|
||||
{
|
||||
if(!section || !key || !string) return false;
|
||||
|
||||
if(_stricmp(section, m_currentSection) != 0)
|
||||
if(stricmp(section, m_currentSection) != 0)
|
||||
{
|
||||
if(m_cacheWritePos == 0)
|
||||
m_cacheWritePos += sprintf((m_cache + m_cacheWritePos), "[%s]\r\n", section);
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Gestion of the infinity and shared Stash.
|
||||
|
||||
@@ -26,7 +27,7 @@ bool separateHardSoftStash = false;
|
||||
bool active_sharedGold=false;
|
||||
char* sharedStashFilename = NULL;
|
||||
|
||||
typedef int (*TchangeToSelectedStash)(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient);
|
||||
typedef int (*TchangeToSelectedStash)(Unit* ptChar, Stash* newStash, DWORD bIsClient);
|
||||
|
||||
Unit* firstClassicStashItem(Unit* ptChar)
|
||||
{
|
||||
@@ -80,7 +81,7 @@ Stash* newStash(DWORD id)
|
||||
d2_assert( id == 0xFFFFFFFF , "trop de stash", __FILE__, __LINE__);
|
||||
|
||||
Stash* stash = (Stash*)malloc(sizeof(Stash));//D2AllocMem(memPool, sizeof(Stash),__FILE__,__LINE__,0);
|
||||
d2_assert(!stash , "pb de g<EFBFBD>n<EFBFBD>ration de stash", __FILE__, __LINE__);
|
||||
d2_assert(!stash , "pb de generation de stash", __FILE__, __LINE__);
|
||||
ZeroMemory(stash, sizeof(Stash));
|
||||
stash->id = id;
|
||||
|
||||
@@ -130,11 +131,11 @@ Stash* getStash(Unit* ptChar, DWORD isShared, DWORD id)//WORKS
|
||||
}
|
||||
|
||||
|
||||
int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient)
|
||||
int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bIsClient)
|
||||
{
|
||||
if (!newStash) return 0;
|
||||
|
||||
log_msg("changeToSelectedStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n", newStash->id, newStash->isShared, bOnlyItems, bIsClient);
|
||||
log_msg("changeToSelectedStash ID:%d\tshared:%d\tclient:%d\n",newStash->id,newStash->id,bIsClient);
|
||||
|
||||
Stash* currentStash = PCPY->currentStash;
|
||||
if (currentStash == newStash) return 0;
|
||||
@@ -175,6 +176,7 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWO
|
||||
}
|
||||
|
||||
// add items of new stash
|
||||
PCPY->currentStash = newStash;
|
||||
ptItem = newStash->ptListItem;
|
||||
while (ptItem)
|
||||
{
|
||||
@@ -182,20 +184,16 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWO
|
||||
D2Common10242(PCInventory, D2GetRealItem(ptItem), 1);
|
||||
ptItem = D2UnitGetNextItem(ptItem);
|
||||
}
|
||||
if (bOnlyItems)
|
||||
newStash->ptListItem = PCPY->currentStash->ptListItem;
|
||||
else
|
||||
PCPY->currentStash = newStash;
|
||||
PCPY->currentStash->ptListItem = NULL;
|
||||
newStash->ptListItem = NULL;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient)
|
||||
int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bIsClient)
|
||||
{
|
||||
if (!newStash) return 0;
|
||||
|
||||
log_msg("changeToSelectedStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n",newStash->id,newStash->isShared, bOnlyItems,bIsClient);
|
||||
log_msg("changeToSelectedStash ID:%d\tshared:%d\tclient:%d\n",newStash->id,newStash->id,bIsClient);
|
||||
|
||||
Stash* currentStash = PCPY->currentStash;
|
||||
if (currentStash == newStash) return 0;
|
||||
@@ -223,17 +221,14 @@ int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DW
|
||||
}
|
||||
|
||||
// add items of new stash
|
||||
PCPY->currentStash = newStash;
|
||||
ptItem = newStash->ptListItem;
|
||||
while (ptItem)
|
||||
{
|
||||
D2InvAddItem(PCInventory, ptItem, ptItem->path->x, ptItem->path->y, 0xC, bIsClient, 4);
|
||||
ptItem = D2UnitGetNextItem(ptItem);
|
||||
}
|
||||
if (bOnlyItems)
|
||||
newStash->ptListItem = PCPY->currentStash->ptListItem;
|
||||
else
|
||||
PCPY->currentStash = newStash;
|
||||
PCPY->currentStash->ptListItem = NULL;
|
||||
newStash->ptListItem = NULL;
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -283,7 +278,7 @@ DWORD loadStashList(Unit* ptChar, BYTE data[], DWORD maxSize, DWORD* curSize, bo
|
||||
while (curStash < nbStash)
|
||||
{
|
||||
newStash = addStash(ptChar, isShared);
|
||||
changeToSelectedStash(ptChar, newStash, 0, false);
|
||||
changeToSelectedStash(ptChar, newStash, false);
|
||||
DWORD ret = loadStash(ptChar, newStash, data, *curSize, 10000000, curSize);
|
||||
if (ret) return ret;
|
||||
curStash++;
|
||||
@@ -389,20 +384,20 @@ void updateSelectedStashClient(Unit* ptChar)//WORKS
|
||||
|
||||
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags)//WORKS
|
||||
{
|
||||
log_msg("setSelectedStashClient ID:%d, stashFlags:%d, flags:%08X\n", stashId, stashFlags, flags);
|
||||
log_msg("setSelectedStashClient ID:%d, isShared:%d, flags:%08X\n", stashId, stashFlags&1, flags);
|
||||
Unit* ptChar = D2GetClientPlayer();
|
||||
Stash* newStash = getStash(ptChar, (stashFlags & 1) == 1, stashId);
|
||||
Stash* newStash = getStash(ptChar, stashFlags&1, stashId);
|
||||
if (!newStash) do
|
||||
newStash = addStash(ptChar, (stashFlags & 1) == 1);
|
||||
newStash = addStash(ptChar, stashFlags&1);
|
||||
while (newStash->id < stashId);
|
||||
changeToSelectedStash(ptChar, newStash, (stashFlags & 2) == 2, 1);
|
||||
changeToSelectedStash(ptChar, newStash, 1);
|
||||
PCPY->flags = flags;
|
||||
}
|
||||
|
||||
|
||||
void selectStash(Unit* ptChar, Stash* newStash)//WORKS
|
||||
{
|
||||
changeToSelectedStash(ptChar, newStash, 0, 0);
|
||||
changeToSelectedStash(ptChar, newStash, 0);
|
||||
updateSelectedStashClient(ptChar);
|
||||
}
|
||||
|
||||
@@ -429,35 +424,6 @@ 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)
|
||||
{
|
||||
@@ -839,42 +805,45 @@ void Install_MultiPageStash()
|
||||
log_msg("Patch D2Game for carry1 unique item. (MultiPageStash)\n");
|
||||
|
||||
// Cannot put 2 items carry1 in inventory
|
||||
mem_seek R7(D2Game, 0000, 0000, 55050, 57CA3, 2FE63, 99B03, CF1E3);
|
||||
mem_seek R7(D2Game, 0000, 0000, 55050, 57CA3, 2FE63, 99B03, CF1E3, 6B013);
|
||||
MEMJ_REF4( D2ItemSetPage , version_D2Game >= V111 ? caller_carry1Limit_111 : caller_carry1Limit);
|
||||
//6FC8504F . E8 94670900 CALL <JMP.&D2Common.#10720>
|
||||
//01FD7CA2 . E8 6329FBFF CALL <JMP.&D2Common.#10485>
|
||||
//01F9FE62 . E8 47A8FDFF CALL <JMP.&D2Common.#10608>
|
||||
//6FCB9B02 . E8 9709F7FF CALL <JMP.&D2Common.#10223>
|
||||
//6FCEF1E2 . E8 47B7F3FF CALL <JMP.&D2Common.#10012>
|
||||
//6FC8B012 . E8 13F7F9FF CALL <JMP.&D2Common.#11026>
|
||||
|
||||
// Cannot put 2 items carry1 in inventory by swapping
|
||||
mem_seek R7(D2Game, 0000, 0000, 558D9, 58968, 310E8, 9B6E8, D10C8);
|
||||
mem_seek R7(D2Game, 0000, 0000, 558D9, 58968, 310E8, 9B6E8, D10C8, 6BC78);
|
||||
MEMJ_REF4( D2ItemGetPage , version_D2Game >= V112 ? caller_carry1LimitSwap_112 : version_D2Game >= V111 ? caller_carry1LimitSwap_111 : caller_carry1LimitSwap);
|
||||
//6FC858D8 . E8 175F0900 CALL <JMP.&D2Common.#10719>
|
||||
//01FD8967 . E8 8E1DFBFF CALL <JMP.&D2Common.#10820>
|
||||
//01FA10E7 . E8 9A96FDFF CALL <JMP.&D2Common.#10505>
|
||||
//6FCBB6E7 . E8 CAEDF6FF CALL <JMP.&D2Common.#10370>
|
||||
//6FCF10C7 . E8 F895F3FF CALL <JMP.&D2Common.#10020>
|
||||
//6FC8BC77 . E8 22E9F9FF CALL <JMP.&D2Common.#10810>
|
||||
|
||||
if ( version_D2Game >= V111 )
|
||||
{
|
||||
// Cannot put 2 items carry1 in inventory when drop cube
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, 3D935, 49FD5, 17AD5, D7B75);
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, 3D935, 49FD5, 17AD5, D7B75, B7B15);
|
||||
MEMJ_REF4( D2CanPutItemInInv , caller_carry1LimitWhenDrop_111);
|
||||
//01FBD934 |. E8 5BD3FCFF |CALL <JMP.&D2Common.#10855>
|
||||
//01FB9FD4 |. E8 3912FCFF |CALL <JMP.&D2Common.#10813>
|
||||
//6FC37AD4 |. E8 0535FFFF |CALL <JMP.&D2Common.#10289>
|
||||
//6FCF7B74 |. E8 232FF3FF |CALL <JMP.&D2Common.#10133>
|
||||
//6FCD7B14 |. E8 7D32F5FF |CALL <JMP.&D2Common.#10402>
|
||||
} else {
|
||||
// Cannot put 2 items carry1 in inventory when drop cube
|
||||
mem_seek R7(D2Game, 0000, 0000, 14341, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(D2Game, 0000, 0000, 14341, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0xBA ,0xE8);
|
||||
MEMT_REF4( 0x00000806 , caller_carry1LimitWhenDrop);
|
||||
//6FC44341 |. BA 06080000 |MOV EDX,806
|
||||
}
|
||||
|
||||
// Verif only carry1 out of stash page when pick up an item
|
||||
mem_seek R7(D2Game, 0000, 0000, 1299E, 38E3B, 43F0B, 1209B, D211B);
|
||||
mem_seek R7(D2Game, 0000, 0000, 1299E, 38E3B, 43F0B, 1209B, D211B, B301B);
|
||||
memt_byte( 0x8B ,0xE8);
|
||||
MEMT_REF4( version_D2Game >= V111 ? 0x850C2474 : 0x85102444 , version_D2Game >= V111 ? caller_carry1OutOfStash_111 : caller_carry1OutOfStash);
|
||||
memt_byte( version_D2Game >= V111 ? 0xF6 : 0xC0 ,0x90);
|
||||
@@ -888,6 +857,8 @@ void Install_MultiPageStash()
|
||||
//6FC3209F |. 85F6 |TEST ESI,ESI
|
||||
//6FCF211B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C]
|
||||
//6FCF211F |. 85F6 |TEST ESI,ESI
|
||||
//6FCD301B |. 8B7424 0C |MOV ESI,DWORD PTR SS:[ESP+C]
|
||||
//6FCD301F |. 85F6 |TEST ESI,ESI
|
||||
|
||||
log_msg("\n");
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Interface functions
|
||||
|
||||
@@ -140,7 +141,7 @@ void Install_InterfaceSkills()
|
||||
log_msg("Patch D2Client for skills interface. (InterfaceSkills)\n");
|
||||
|
||||
// Print new buttons images
|
||||
mem_seek R7(D2Client, 7AC20, 7AC20, 77073, 16190, 8A9C0, 7F320, 77F20);
|
||||
mem_seek R7(D2Client, 7AC20, 7AC20, 77073, 16190, 8A9C0, 7F320, 77F20, 2F380);
|
||||
memt_byte( 0x5F, 0xE9 ); // JMP caller_printBtns
|
||||
if ( version_D2Client >= V111 ) {
|
||||
MEMT_REF4( 0xCCC35B5E, caller_printSkillsPageBtns_111);
|
||||
@@ -164,6 +165,11 @@ void Install_InterfaceSkills()
|
||||
//6FB27F22 |. 5B POP EBX
|
||||
//6FB27F23 \. C3 RETN
|
||||
//6FB27F24 CC INT3
|
||||
//6FADF380 |> 5F POP EDI
|
||||
//6FADF381 |. 5E POP ESI
|
||||
//6FADF382 |. 5B POP EBX
|
||||
//6FADF383 \. C3 RETN
|
||||
//6FADF384 CC INT3
|
||||
} else {
|
||||
MEMT_REF4( 0x835B5D5E, caller_printSkillsPageBtns);
|
||||
memt_byte( 0xC4, 0x90 ); // NOP
|
||||
@@ -180,7 +186,7 @@ void Install_InterfaceSkills()
|
||||
if (posXUnassignSkillBtn==-1 && posYUnassignSkillBtn==-1)
|
||||
{
|
||||
// Don't print "Skill Points Remaining"
|
||||
mem_seek R7(D2Client, 7AC30, 7AC30, 77080, 16294, 8AC74, 7ECF4, 78334);
|
||||
mem_seek R7(D2Client, 7AC30, 7AC30, 77080, 16294, 8AC74, 7ECF4, 78334, 2F7E4);
|
||||
memt_byte( 0xB9, 0xE8 );
|
||||
MEMT_REF4( 0x00001083, version_D2Client >= V111 ? caller_DontPrintSkillPointsRemaining_111 : caller_DontPrintSkillPointsRemaining);
|
||||
//6FB17080 /$ B9 83100000 MOV ECX,1083
|
||||
@@ -188,10 +194,11 @@ void Install_InterfaceSkills()
|
||||
//6FB3AC74 |. B9 83100000 MOV ECX,1083
|
||||
//6FB2ECF4 |. B9 83100000 MOV ECX,1083
|
||||
//6FB28334 |. B9 83100000 MOV ECX,1083
|
||||
//6FADF7E4 |. B9 83100000 MOV ECX,1083
|
||||
}
|
||||
|
||||
// Manage mouse down (Play sound)
|
||||
mem_seek R7(D2Client, 7BBD1, 7BBD1, 780E4, 17BC2, 8C6E2, 808B2, 79C62);
|
||||
mem_seek R7(D2Client, 7BBD1, 7BBD1, 780E4, 17BC2, 8C6E2, 808B2, 79C62, 31112);
|
||||
memt_byte( 0xC7, 0xE8 ); // CALL caller_skillsPageMouseDown
|
||||
MEMT_REF4( version_D2Client >= V111 ? 0x00001845 : 0x00001843, version_D2Client >= V111 ? caller_skillsPageMouseDown_111 : caller_skillsPageMouseDown);
|
||||
memt_byte( 0x00, 0x90 ); // NOP
|
||||
@@ -199,17 +206,19 @@ void Install_InterfaceSkills()
|
||||
//6FB180E4 > C743 18 00000000 MOV DWORD PTR DS:[EBX+18],0
|
||||
//6FAC7BC2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||
//6FB3C6E2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||
//6FB308B2 > C745 18 000000>MOV DWORD PTR SS:[EBP+18],0
|
||||
//6FB29C62 > C745 18 000000>MOV DWORD PTR SS:[EBP+18],0
|
||||
//6FB308B2 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||
//6FB29C62 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||
//6FAE1112 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
||||
|
||||
// Manage mouse up
|
||||
mem_seek R7(D2Client, 7BC40, 7BC40, 78466, 17558, 8C078, 80248, 795F8);
|
||||
mem_seek R7(D2Client, 7BC40, 7BC40, 78466, 17558, 8C078, 80248, 795F8, 30AA8);
|
||||
MEMJ_REF4( D2FreeWinMessage, caller_skillsPageMouseUp);//0xFFF93B0A
|
||||
//6FB18465 . E8 C07D0400 CALL <JMP.&Storm.#511>
|
||||
//6FAC7557 .^E9 4248FFFF JMP <JMP.&Storm.#511>
|
||||
//6FB3C077 .^E9 16FDF7FF JMP <JMP.&Storm.#511>
|
||||
//6FB30247 .^E9 2CBCF8FF JMP <JMP.&Storm.#511>
|
||||
//6FB295F7 .^E9 8828F9FF JMP <JMP.&Storm.#511>
|
||||
//6FAE0AA7 .^E9 E0B2FDFF JMP <JMP.&Storm.#511>
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Interface stats page functions
|
||||
|
||||
@@ -450,43 +451,47 @@ void Install_InterfaceStash()
|
||||
log_msg("Patch D2Client for stash interface. (InterfaceStash)\n");
|
||||
|
||||
// Print button images
|
||||
mem_seek R7(D2Client, 39060, 39060, 3F399, B1006, 7DF86, B3656, 99A56);
|
||||
mem_seek R7(D2Client, 39060, 39060, 3F399, B1006, 7DF86, B3656, 99A56, 9DE26);
|
||||
MEMC_REF4( D2LoadBuySelBtn, printBtns);
|
||||
//6FADF398 |. E8 734D0400 CALL D2Client.6FB24110
|
||||
//6FB61005 |. E8 A6D3FEFF CALL D2Client.6FB4E3B0
|
||||
//6FB2DF85 |. E8 3642FEFF CALL D2Client.6FB121C0
|
||||
//6FB63655 |. E8 9682FDFF CALL D2Client.6FB3B8F0
|
||||
//6FB49A55 |. E8 96500200 CALL D2Client.6FB6EAF0
|
||||
//6FB4DE25 |. E8 76ACF7FF CALL D2Client.6FAC8AA0
|
||||
|
||||
// print page number
|
||||
mem_seek R7(D2Client, 3903C, 3903C, 3F375, B0FE3, 7DF63, B3633, 99A33);
|
||||
mem_seek R7(D2Client, 3903C, 3903C, 3F375, B0FE3, 7DF63, B3633, 99A33, 9DE03);
|
||||
MEMJ_REF4( D2PrintString, printPageNumber);
|
||||
//6FADF374 |. E8 3FCC0800 CALL <JMP.&D2Win.#10117>
|
||||
//6FB60FE2 |. E8 99C2F5FF CALL <JMP.&D2Win.#10020>
|
||||
//6FB2DF62 |. E8 19F3F8FF CALL <JMP.&D2Win.#10064>
|
||||
//6FB63632 |. E8 299DF5FF CALL <JMP.&D2Win.#10001>
|
||||
//6FB49A32 |. E8 4739F7FF CALL <JMP.&D2Win.#10150>
|
||||
//6FB49A32 |. E8 91F4F6FF CALL <JMP.&D2Win.#10150>
|
||||
//6FB4DE02 |. E8 4739F7FF CALL <JMP.&D2Win.#10076>
|
||||
|
||||
// Manage mouse down (Play sound)
|
||||
mem_seek R7(D2Client, 45091, 45091, 4BBA1, B4666, 7FDD6, B54A6, 9B8A6);
|
||||
mem_seek R7(D2Client, 45091, 45091, 4BBA1, B4666, 7FDD6, B54A6, 9B8A6, 9FC76);
|
||||
MEMC_REF4( version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V111 ? caller_manageBtnDown_111 : caller_manageBtnDown);
|
||||
//6FAEBBA0 > E8 DB04FCFF CALL D2Client.6FAAC080
|
||||
//6FB64665 . E8 B61EFFFF CALL D2Client.6FB56520
|
||||
//6FB2FDD5 . E8 E612FFFF CALL D2Client.6FB210C0
|
||||
//6FB654A5 . E8 9611FFFF CALL D2Client.6FB56640
|
||||
//6FB4B8A5 . E8 5614FFFF CALL D2Client.6FB3CD00
|
||||
//6FB4FC75 . E8 960FFFFF CALL D2Client.6FB40C10
|
||||
|
||||
// Manage mouse up
|
||||
mem_seek R7(D2Client, 455F9, 455F9, 4C0F9, B57B9, 7FC09, B52D9, 9B6D9);
|
||||
mem_seek R7(D2Client, 455F9, 455F9, 4C0F9, B57B9, 7FC09, B52D9, 9B6D9, 9FAA9);
|
||||
MEMC_REF4( version_D2Client >= V111 ? (DWORD)D2ClickOnStashButton : (DWORD)D2isLODGame, version_D2Client >= V111 ? caller_manageBtnUp_111 : caller_manageBtnUp);
|
||||
//6FAEC0F8 > E8 83FFFBFF CALL D2Client.6FAAC080
|
||||
//6FB657B8 > E8 630DFFFF CALL D2Client.6FB56520
|
||||
//6FB2FC08 > E8 B314FFFF CALL D2Client.6FB210C0
|
||||
//6FB652D8 > E8 6313FFFF CALL D2Client.6FB56640
|
||||
//6FB4B6D8 > E8 2316FFFF CALL D2Client.6FB3CD00
|
||||
//6FB4FAA8 > E8 6311FFFF CALL D2Client.6FB40C10
|
||||
|
||||
// init state of button on open stash page
|
||||
mem_seek R7(D2Client, 45B3A, 45B3A, 4C63A, A645A, 749DA, A9D9A, 8CC3A);
|
||||
mem_seek R7(D2Client, 45B3A, 45B3A, 4C63A, A645A, 749DA, A9D9A, 8CC3A, 9441A);
|
||||
memt_byte( 0x81, 0xE9 ); // CALL initBtnsStates
|
||||
MEMT_REF4( 0x000104C4, initBtnsStates);
|
||||
memt_byte( 0x00, 0x90 );
|
||||
@@ -497,24 +502,27 @@ void Install_InterfaceStash()
|
||||
//6FB249DA |> 81C4 04010000 ADD ESP,104
|
||||
//6FB59D9A |> 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
|
||||
mem_seek R7(D2Client, 3F098, 3F098, 45997, A71F4, 71F64, A7314, 8D434);
|
||||
mem_seek R7(D2Client, 3F098, 3F098, 45997, A71F4, 71F64, A7314, 8D434, 91A24);
|
||||
MEMJ_REF4( D2InventoryGetFirstItem, initGetNextItemForSet);
|
||||
//6FAE5996 |. E8 D5500800 CALL <JMP.&D2Common.#10277>
|
||||
//6FB571F3 |. E8 D64EF6FF CALL <JMP.&D2Common.#10402>
|
||||
//6FB21F63 |. E8 96A1F9FF CALL <JMP.&D2Common.#10535>
|
||||
//6FB57313 |. E8 8250F6FF CALL <JMP.&D2Common.#11151>
|
||||
//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
|
||||
mem_seek R7(D2Client, 3F0FA, 3F0FA, 45A1C, A728B, 71FFB, A73AB, 8D4CB);
|
||||
mem_seek R7(D2Client, 3F0FA, 3F0FA, 45A1C, A728B, 71FFB, A73AB, 8D4CB, 91ABB);
|
||||
MEMJ_REF4( D2UnitGetNextItem, getNextItemForSet);
|
||||
//6FAE5A1B E8 4A500800 CALL <JMP.&D2Common.#10304>
|
||||
//6FB5728A |. E8 0B4FF6FF |CALL <JMP.&D2Common.#10934>
|
||||
//6FB21FFA |. E8 A1A1F9FF |CALL <JMP.&D2Common.#11140>
|
||||
//6FB573AA |. E8 7550F6FF |CALL <JMP.&D2Common.#10770>
|
||||
//6FB3D4CA |. E8 99F0F7FF |CALL <JMP.&D2Common.#10464>
|
||||
//6FB41ABA |. E8 A3A8F7FF |CALL <JMP.&D2Common.#10879>
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Interface functions
|
||||
|
||||
@@ -245,7 +246,7 @@ void Install_InterfaceStats()
|
||||
log_msg("Patch D2Client for stats interface. (InterfaceStats)\n");
|
||||
|
||||
// Print new buttons images
|
||||
mem_seek R7(D2Client, 2A7BE, 2A7AE, 30F86, 83636, 8A0B6, 6C016, BDC16);
|
||||
mem_seek R7(D2Client, 2A7BE, 2A7AE, 30F86, 83636, 8A0B6, 6C016, BDC16, C03B6);
|
||||
memt_byte( 0x5F, 0xE9 ); // JMP
|
||||
MEMT_REF4( 0x815B5D5E, version_D2Client >= V111 ? caller_printStatsPageBtns_111: version_D2Client == V110 ? caller_printStatsPageBtns : caller_printStatsPageBtns_9);
|
||||
//6FAD0F86 . 5F POP EDI
|
||||
@@ -278,34 +279,41 @@ void Install_InterfaceStats()
|
||||
//6FB6DC19 |. 5B POP EBX
|
||||
//6FB6DC1A |. 81C4 70030000 ADD ESP,370
|
||||
//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 )
|
||||
{
|
||||
// Manage mouse down (Play sound)
|
||||
mem_seek R7(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, BCDC8);
|
||||
mem_seek R7(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, BCDC8, BF568);
|
||||
memt_byte( 0xA1, 0xE8 );
|
||||
MEMT_REF4( ptptClientChar, caller_statsPageMouseDown);
|
||||
//6FB327C8 . A1 F0C4BC6F MOV EAX,DWORD PTR DS:[6FBCC4F0]
|
||||
//6FB39248 . A1 E0C1BC6F MOV EAX,DWORD PTR DS:[6FBCC1E0]
|
||||
//6FB1B1A8 . A1 D0C3BC6F MOV EAX,DWORD PTR DS:[6FBCC3D0]
|
||||
//6FB6CDC8 . A1 FCBBBC6F MOV EAX,DWORD PTR DS:[6FBCBBFC]
|
||||
//6FB6F568 . A1 50D0BC6F MOV EAX,DWORD PTR DS:[6FBCD050]
|
||||
|
||||
// Manage mouse up
|
||||
mem_seek R7(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, BDE33);
|
||||
mem_seek R7(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, BDE33, C05D3);
|
||||
memt_byte( 0xA1, 0xE8 );
|
||||
MEMT_REF4( ptptClientChar, caller_statsPageMouseUp);
|
||||
//6FB33853 . A1 F0C4BC6F MOV EAX,DWORD PTR DS:[6FBCC4F0]
|
||||
//6FB3A2D3 . A1 E0C1BC6F MOV EAX,DWORD PTR DS:[6FBCC1E0]
|
||||
//6FB1C233 . A1 D0C3BC6F MOV EAX,DWORD PTR DS:[6FBCC3D0]
|
||||
//6FB6DE33 . A1 FCBBBC6F MOV EAX,DWORD PTR DS:[6FBCBBFC]
|
||||
//6FB705D3 . A1 50D0BC6F MOV EAX,DWORD PTR DS:[6FBCD050]
|
||||
} else {
|
||||
// Manage mouse down (Play sound)
|
||||
mem_seek R7(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, 0000);
|
||||
mem_seek R7(D2Client, 2AA6D, 2AA5D, 3133D, 827C8, 89248, 6B1A8, 0000, 0000);
|
||||
MEMC_REF4( D2GetClientPlayer, caller_statsPageMouseDown);
|
||||
//6FAD133C . E8 8F700500 CALL D2Client.6FB283D0
|
||||
|
||||
// Manage mouse up
|
||||
mem_seek R7(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, 0000);
|
||||
mem_seek R7(D2Client, 2AC43, 2AC33, 3151A, 83853, 8A2D3, 6C233, 0000, 0000);
|
||||
MEMC_REF4( D2GetClientPlayer, version_D2Client == V110 ? caller_statsPageMouseUp : caller_statsPageMouseUp_9);//0x00056EB2
|
||||
//6FAD1519 . E8 B26E0500 CALL D2Client.6FB283D0
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Load Player Custom Data.
|
||||
|
||||
@@ -476,7 +477,7 @@ void Install_LoadPlayerData()
|
||||
log_msg("Patch D2Game & D2Client for load Player's custom data. (LoadPlayerData)\n");
|
||||
|
||||
// Load SP player custom data.
|
||||
mem_seek R7(D2Game, 5046F, 5086F, 5CB0F, BB8ED, 278CD, 465BD, 5638D);
|
||||
mem_seek R7(D2Game, 5046F, 5086F, 5CB0F, BB8ED, 278CD, 465BD, 5638D, 3BCCD);
|
||||
memt_byte( 0x8B, 0xE8); // CALL caller_LoadSPPlayerCustomData
|
||||
MEMT_REF4( 0x75F685F0 , caller_LoadSPPlayerCustomData);
|
||||
memt_byte( 0x16, 0x90); // NOP
|
||||
@@ -495,9 +496,12 @@ void Install_LoadPlayerData()
|
||||
//6FC7638D |> 8BF0 MOV ESI,EAX
|
||||
//6FC7638F |. 85F6 TEST ESI,ESI
|
||||
//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.
|
||||
mem_seek R7(D2Game, 50790, 50B90, 5CC66, BB777, 27757, 46447, 56217);
|
||||
mem_seek R7(D2Game, 50790, 50B90, 5CC66, BB777, 27757, 46447, 56217, 3BB57);
|
||||
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);
|
||||
//6FC8CC66 . 833F 00 CMP DWORD PTR DS:[EDI],0
|
||||
@@ -510,18 +514,21 @@ void Install_LoadPlayerData()
|
||||
//6FC6644A |. 74 21 JE SHORT D2Game.6FC6646D
|
||||
//6FC76217 |> 833B 00 CMP DWORD PTR DS:[EBX],0
|
||||
//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.
|
||||
mem_seek R7(D2Client, CF42, CF32, D5A2, 733FC, 5DFDC, 7933C, 1457C);
|
||||
mem_seek R7(D2Client, CF42, CF32, D5A2, 733FC, 5DFDC, 7933C, 1457C, B638C);
|
||||
MEMJ_REF4( D2FogGetSavePath, version_D2Game >= V111 ? caller_SendSaveFiles_111 : caller_SendSaveFiles);
|
||||
//6FAAD5A1 |. E8 88D10B00 CALL <JMP.&Fog.#10115>
|
||||
//6FB233FB |. E8 CA8AF9FF CALL <JMP.&Fog.#10115>
|
||||
//6FB0DFDB |. E8 C6DEFAFF CALL <JMP.&Fog.#10115>
|
||||
//6FB2933B |. E8 6A2CF9FF CALL <JMP.&Fog.#10115>
|
||||
//6FAC457B |. E8 187AFFFF CALL <JMP.&Fog.#10115>
|
||||
//6FB6638B |. E8 2E5BF5FF CALL <JMP.&Fog.#10115>
|
||||
|
||||
// Receive save files from client.
|
||||
mem_seek R7(D2Game, 183A, 183A, 191A, 376E9, 703D9, 624D9, CAF39);
|
||||
mem_seek R7(D2Game, 183A, 183A, 191A, 376E9, 703D9, 624D9, CAF39, D53E9);
|
||||
memt_byte( 0x8B ,0xE8);
|
||||
if ( version_D2Game >= V111 ) {
|
||||
MEMT_REF4( 0xB60F005D, caller_ReceiveSaveFiles_111);
|
||||
@@ -535,6 +542,8 @@ void Install_LoadPlayerData()
|
||||
//6FC824DC |. 0FB645 04 MOVZX EAX,BYTE PTR SS:[EBP+4]
|
||||
//6FCEAF39 |. 8B5D 00 MOV EBX,DWORD PTR SS:[EBP]
|
||||
//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 {
|
||||
MEMT_REF4( 0x04468A3E, caller_ReceiveSaveFiles);
|
||||
//6FC3191A |. 8B3E MOV EDI,DWORD PTR DS:[ESI]
|
||||
@@ -543,7 +552,7 @@ void Install_LoadPlayerData()
|
||||
|
||||
if ( version_Fog <= V109d )
|
||||
{
|
||||
mem_seek R7(Fog, 47DE, 45AE, 0000, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(Fog, 47DE, 45AE, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0x8B ,0xE8);
|
||||
MEMT_REF4( 0x891C2444, version_Fog == V109b? caller_BugFix109b : caller_BugFix109d);
|
||||
memt_byte( 0x44 ,0x90);
|
||||
|
@@ -1,5 +1,7 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
|
||||
Add "plugY v1.00" on screen.
|
||||
|
||||
@@ -8,7 +10,6 @@
|
||||
#include "common.h"
|
||||
#include "error.h"
|
||||
#include "d2functions.h"
|
||||
#include "extraOptions.h"
|
||||
#include <stdio.h>
|
||||
|
||||
char* versionText = "";
|
||||
@@ -21,17 +22,12 @@ DWORD newTextBoxData[]={4,0x237,0x243,0xC8,0x14,0,0,0,0,0,0,2};//type,x,y,l,h,?,
|
||||
|
||||
void STDCALL printPlugYVersion(void** childrens, DWORD* sgnNumChildren)
|
||||
{
|
||||
if (active_Windowed)
|
||||
SetWindowedOptions();
|
||||
if (active_PrintPlugYVersion)
|
||||
{
|
||||
char buf[20];
|
||||
void* textbox = D2CreateTextBox(newTextBoxData);
|
||||
childrens[*sgnNumChildren] = textbox;
|
||||
d2_assert((*sgnNumChildren)++ >= 40, "sgnNumChildren < MAX_CHILDREN", __FILE__, __LINE__);
|
||||
childrens[*sgnNumChildren]=textbox;
|
||||
d2_assert((*sgnNumChildren)++ >= 40,"sgnNumChildren < MAX_CHILDREN", __FILE__, __LINE__);
|
||||
sprintf(buf, "PlugY %s", PLUGY_VERSION);
|
||||
D2PrintLineOnTextBox(textbox, buf, colorOfPlugYVersion);
|
||||
}
|
||||
}
|
||||
|
||||
FCT_ASM ( caller_printPlugYVersion )
|
||||
@@ -52,7 +48,7 @@ void Install_PrintPlugYVersion()
|
||||
log_msg("Patch D2Launch to print PlugY version. (PrintPlugYVersion)\n");
|
||||
|
||||
// Print PlugY version.
|
||||
mem_seek R7(D2Launch, 7F5D, 7F7D, 9639, 117C7, 178A7, 16AF7, 18061);
|
||||
mem_seek R7(D2Launch, 7F5D, 7F7D, 9639, 117C7, 178A7, 16AF7, 18061, 10A11);
|
||||
MEMJ_REF4( D2CreateTextBox, caller_printPlugYVersion);
|
||||
//6FA19638 |. E8 1BED0000 CALL <JMP.&D2Win.#10017>
|
||||
//6FA517C6 |. E8 6F81FFFF CALL <JMP.&D2Win.#10147>
|
||||
@@ -60,6 +56,7 @@ void Install_PrintPlugYVersion()
|
||||
//6FA56B1F |. E8 1A2EFFFF CALL <JMP.&D2Win.#10098>
|
||||
//6FA56AF6 |. E8 432EFFFF CALL <JMP.&D2Win.#10098>
|
||||
//6FA58060 |. E8 ED18FFFF CALL <JMP.&D2Win.#10098>
|
||||
//6FA50A10 |. E8 218FFFFF CALL <JMP.&D2Win.#10164>
|
||||
|
||||
|
||||
log_msg("\n");
|
||||
@@ -97,7 +94,7 @@ void Install_VersionChange()// BUG WITH 2MOD if D2Mod started before PlugY ????
|
||||
// Print LoD/Mod version.
|
||||
if (version_D2Launch >= V110)
|
||||
{
|
||||
mem_seek R7(D2Launch, 00000, 00000, 9723, 1189B, 1797B, 16BCB, 18134);//6FA19721-6FA10000
|
||||
mem_seek R7(D2Launch, 00000, 00000, 9723, 1189B, 1797B, 16BCB, 18134, 10AE4);//6FA19721-6FA10000
|
||||
memt_byte( 0x8D, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0x8B102454 , caller_VersionChange_10);
|
||||
memt_byte( 0xCF, 0x90 ); // NOP
|
||||
@@ -111,14 +108,17 @@ void Install_VersionChange()// BUG WITH 2MOD if D2Mod started before PlugY ????
|
||||
//6FA56BCF |. 8BCF MOV ECX,EDI
|
||||
//6FA58134 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
|
||||
//6FA58138 |. 8BCF MOV ECX,EDI
|
||||
//6FA50AE4 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
|
||||
//6FA50AE8 |. 8BCF MOV ECX,EDI
|
||||
} else {
|
||||
mem_seek R7(D2Launch, 801B, 803B, 972A, 118A2, 17982, 16BD2, 1813B);
|
||||
mem_seek R7(D2Launch, 801B, 803B, 972A, 118A2, 17982, 16BD2, 1813B, 10AEB);
|
||||
MEMJ_REF4( D2PrintLineOnTextBox, versionChange);
|
||||
//6FA19729 |. E8 88EB0000 CALL <JMP.&D2Win.#10046>
|
||||
//6FA518A1 |. E8 267FFFFF CALL <JMP.&D2Win.#10061>
|
||||
//6FA57981 |. E8 781EFFFF CALL <JMP.&D2Win.#10075>
|
||||
//6FA56BD1 |. E8 EA2CFFFF CALL <JMP.&D2Win.#10015>
|
||||
//6FA5813A |. E8 8F17FFFF CALL <JMP.&D2Win.#10022>
|
||||
//6FA50AEA |. E8 DF8CFFFF CALL <JMP.&D2Win.#10051>
|
||||
}
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Modified by L'Autour.
|
||||
|
||||
Cube Listing functions
|
||||
|
||||
@@ -14,62 +15,98 @@
|
||||
|
||||
|
||||
const char* CUBEFORMULA_FILE = "cube.txt";
|
||||
const char * STRING_ERROR="***Error***";
|
||||
const LPWSTR STRING_ERROR= L"***Error***";
|
||||
|
||||
|
||||
#define BUF (&buf[strlen(buf)])
|
||||
|
||||
#define lenbuf 512
|
||||
#define lenbufi 256
|
||||
#define BUF &buf[cntbuf], lenbuf-cntbuf
|
||||
bool InNoSocket; //~~~~~
|
||||
|
||||
/*
|
||||
6FC9275F |. E8 ECCCFFFF |CALL D2Game.6FC8F450 ; \D2Game.6FC8F450
|
||||
|
||||
|
||||
*/
|
||||
void printOutput(CubeOutput* output, char* buf, BYTE* nbOutputs)
|
||||
void printOutput(CubeOutput* output, WCHAR* buf, BYTE* nbOutputs)
|
||||
{
|
||||
if (!output->outputType)
|
||||
return;
|
||||
|
||||
int cntbuf = wcslen(buf);
|
||||
|
||||
if (*nbOutputs)
|
||||
sprintf(BUF," + ");
|
||||
cntbuf += swprintf(BUF,L" + ");
|
||||
*nbOutputs += 1;
|
||||
|
||||
if (output->outputType == 1) {
|
||||
sprintf(BUF,"Cow Portal");
|
||||
swprintf(BUF,getTranslatedString(STR_COW_PORTAL));
|
||||
return;
|
||||
} else if (output->outputType == 2) {
|
||||
sprintf(BUF,"Pandemonium Portal");
|
||||
swprintf(BUF,getTranslatedString(STR_PANDEMONIUM_PORTAL));
|
||||
return;
|
||||
} else if (output->outputType == 3) {
|
||||
sprintf(BUF,"Pandemonium Final Portal");
|
||||
swprintf(BUF,getTranslatedString(STR_PANDEMONIUM_FINAL_PORTAL));
|
||||
return;
|
||||
}
|
||||
|
||||
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)
|
||||
sprintf(BUF,"repair ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_REPAIR);
|
||||
|
||||
if ((output->repair)&&(output->recharge))
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_AND);
|
||||
|
||||
if (output->recharge)
|
||||
sprintf(BUF,"recharge ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_RECHARGE);
|
||||
|
||||
if (output->isEthereal)
|
||||
sprintf(BUF,"ethereal ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_ETHERAL);
|
||||
|
||||
if (output->destroysFillers)
|
||||
sprintf(BUF,"destroys Fillers ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_DESTROY_FILLERS);
|
||||
|
||||
if (output->removeFillers)
|
||||
sprintf(BUF,"remove Fillers ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_REMOVE_FILLERS);
|
||||
|
||||
if (output->regeneratesUnique)
|
||||
sprintf(BUF,"regenerate ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_REGENERATE);
|
||||
|
||||
if (output->upgradeToExceptional)
|
||||
sprintf(BUF,"exceptional ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_EXCEPTIONAL);
|
||||
|
||||
if (output->upgradeToElite)
|
||||
sprintf(BUF,"elite ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_ELITE);
|
||||
|
||||
|
||||
if (output->isSpecificItem) {
|
||||
@@ -77,131 +114,163 @@ void printOutput(CubeOutput* output, char* buf, BYTE* nbOutputs)
|
||||
{
|
||||
UniqueItemsBIN* uniqueItems = SgptDataTables->uniqueItems + output->specificID-1;
|
||||
LPWSTR string = D2GetStringFromIndex(uniqueItems->uniqueNameId);
|
||||
wcstombs(BUF, string, wcslen(string)+1);
|
||||
cntbuf += swprintf(BUF,string);
|
||||
} else if (output->quality == ITEMQUALITY_SET) {
|
||||
SetItemsBIN* setItems = SgptDataTables->setItems + output->specificID-1;
|
||||
LPWSTR string = D2GetStringFromIndex(setItems->setNameId);
|
||||
wcstombs(BUF, string, wcslen(string)+1);
|
||||
cntbuf += swprintf(BUF,string);
|
||||
} else {
|
||||
sprintf(BUF,STRING_ERROR);return;
|
||||
swprintf(BUF,STRING_ERROR);return;
|
||||
}
|
||||
} else {
|
||||
switch (output->quality)
|
||||
{
|
||||
case 1:sprintf(BUF,"Cracked ");break;
|
||||
case 2:sprintf(BUF,"Normal ");break;
|
||||
case 3:sprintf(BUF,"Superior ");break;
|
||||
case 4:sprintf(BUF,"Magic ");break;
|
||||
case 5:sprintf(BUF,"Set ");break;
|
||||
case 6:sprintf(BUF,"Rare ");break;
|
||||
case 7:sprintf(BUF,"Unique ");break;
|
||||
case 8:sprintf(BUF,"Crafted ");break;
|
||||
case 9:sprintf(BUF,"Tempered ");break;
|
||||
}
|
||||
ItemsBIN* items;LPWSTR string;
|
||||
case 1:cntbuf += wSprintStringLastGender(BUF, STR_CRACKED);break;
|
||||
case 2:cntbuf += wSprintStringLastGender(BUF, STR_NORMAL);break;
|
||||
case 3:cntbuf += wSprintStringLastGender(BUF, STR_SUPERIOR);break;
|
||||
case 4:cntbuf += wSprintStringLastGender(BUF, STR_MAGIC);break;
|
||||
case 5:cntbuf += wSprintStringLastGender(BUF, STR_SET);break;
|
||||
case 6:cntbuf += wSprintStringLastGender(BUF, STR_RARE);break;
|
||||
case 7:cntbuf += wSprintStringLastGender(BUF, STR_UNIQUE);break;
|
||||
case 8:cntbuf += wSprintStringLastGender(BUF, STR_CRAFTED);break;
|
||||
case 9:cntbuf += wSprintStringLastGender(BUF, STR_TEMPERED);break;
|
||||
} /*
|
||||
ItemsBIN* items; LPWSTR string;
|
||||
switch (output->outputType)
|
||||
{
|
||||
case 0xFC:
|
||||
items = D2GetItemsBIN(output->ID);
|
||||
string = D2GetStringFromIndex(items->NameStr);
|
||||
wcstombs(BUF, string, wcslen(string)+1);
|
||||
cntbuf += swprintf(BUF,string);
|
||||
break;
|
||||
case 0xFD:
|
||||
getTypeAString(output->ID,BUF,50);
|
||||
// WCHAR string[50];
|
||||
// getTypeString(input->ID,string,50);
|
||||
// wcstombs(BUF, string, wcslen(string)+1);
|
||||
getTypeUString(output->ID,BUF);
|
||||
break;
|
||||
case 0xFE: sprintf(BUF,"Item");break;
|
||||
case 0xFF: sprintf(BUF,"Item of the same type");break;
|
||||
default: sprintf(BUF,STRING_ERROR);return;
|
||||
case 0xFE: cntbuf += swprintf(BUF,getTranslatedString(STR_ITEM));break;
|
||||
case 0xFF: cntbuf += swprintf(BUF,getTranslatedString(STR_ITEM_SAME_TYPE));break;
|
||||
default: cntbuf += swprintf(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, char* buf, BYTE* nbInputs)//maxsize)
|
||||
void printInput(CubeInput* input, WCHAR* buf, BYTE* nbInputs)//maxsize)
|
||||
{
|
||||
if (!input->byItemID && !input->byItemTypeID)
|
||||
return;
|
||||
|
||||
int cntbuf = wcslen(buf);
|
||||
|
||||
if (*nbInputs)
|
||||
sprintf(BUF," + ");
|
||||
cntbuf += swprintf(BUF,L" + ");
|
||||
|
||||
BYTE nb = input->quantity > 0 ? input->quantity : 1;
|
||||
*nbInputs += nb;
|
||||
if (nb>1)
|
||||
sprintf(BUF,"%u ", nb);
|
||||
cntbuf += swprintf(BUF,L"%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)
|
||||
sprintf(BUF,"ethereal ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_ETHERAL);
|
||||
|
||||
if (input->isNotEthereal)
|
||||
sprintf(BUF,"not ethereal ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_NOT_ETHERAL);
|
||||
|
||||
if (input->isNotRuneword)
|
||||
sprintf(BUF,"not runeword ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_NOT_RUNEWORD);
|
||||
|
||||
if (input->isBasic)
|
||||
sprintf(BUF,"basic ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_BASIC);
|
||||
|
||||
if (input->isExceptional)
|
||||
sprintf(BUF,"exceptional ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_EXCEPTIONAL);
|
||||
|
||||
if (input->isElite)
|
||||
sprintf(BUF,"elite ");
|
||||
cntbuf += wSprintStringLastGender(BUF, STR_ELITE);
|
||||
|
||||
if (input->isSpecificItem) {
|
||||
if (input->quality == ITEMQUALITY_UNIQUE)
|
||||
{
|
||||
UniqueItemsBIN* uniqueItems = SgptDataTables->uniqueItems + input->specificID-1;
|
||||
LPWSTR string = D2GetStringFromIndex(uniqueItems->uniqueNameId);
|
||||
wcstombs(BUF, string, wcslen(string)+1);
|
||||
cntbuf += swprintf(BUF,string);
|
||||
} else if (input->quality == ITEMQUALITY_SET) {
|
||||
SetItemsBIN* setItems = SgptDataTables->setItems + input->specificID-1;
|
||||
LPWSTR string = D2GetStringFromIndex(setItems->setNameId);
|
||||
wcstombs(BUF, string, wcslen(string)+1);
|
||||
cntbuf += swprintf(BUF,string);
|
||||
} else {
|
||||
sprintf(BUF,STRING_ERROR);return;
|
||||
swprintf(BUF,STRING_ERROR);return;
|
||||
}
|
||||
} else {
|
||||
switch (input->quality)
|
||||
{
|
||||
case 1:sprintf(BUF,"Cracked ");break;
|
||||
case 2:sprintf(BUF,"Normal ");break;
|
||||
case 3:sprintf(BUF,"Superior ");break;
|
||||
case 4:sprintf(BUF,"Magic ");break;
|
||||
case 5:sprintf(BUF,"Set ");break;
|
||||
case 6:sprintf(BUF,"Rare ");break;
|
||||
case 7:sprintf(BUF,"Unique ");break;
|
||||
case 8:sprintf(BUF,"Crafted ");break;
|
||||
case 9:sprintf(BUF,"Tempered ");break;
|
||||
}
|
||||
|
||||
case 1:cntbuf += wSprintStringLastGender(BUF, STR_CRACKED);break;
|
||||
case 2:cntbuf += wSprintStringLastGender(BUF, STR_NORMAL);break;
|
||||
case 3:cntbuf += wSprintStringLastGender(BUF, STR_SUPERIOR);break;
|
||||
case 4:cntbuf += wSprintStringLastGender(BUF, STR_MAGIC);break;
|
||||
case 5:cntbuf += wSprintStringLastGender(BUF, STR_SET);break;
|
||||
case 6:cntbuf += wSprintStringLastGender(BUF, STR_RARE);break;
|
||||
case 7:cntbuf += wSprintStringLastGender(BUF, STR_UNIQUE);break;
|
||||
case 8:cntbuf += wSprintStringLastGender(BUF, STR_CRAFTED);break;
|
||||
case 9:cntbuf += wSprintStringLastGender(BUF, STR_TEMPERED);break;
|
||||
}/*
|
||||
if (input->byItemTypeID) {
|
||||
getTypeAString(input->ID,BUF,50);
|
||||
getTypeUString(input->ID,BUF);
|
||||
} else if (input->ID == 0xFFFF) {
|
||||
sprintf(BUF,"Item");
|
||||
cntbuf += swprintf(BUF,getTranslatedString(STR_ITEM));
|
||||
} else {
|
||||
ItemsBIN* items = D2GetItemsBIN(input->ID);
|
||||
LPWSTR string = D2GetStringFromIndex(items->NameStr);
|
||||
wcstombs(BUF, string, wcslen(string)+1);
|
||||
}
|
||||
cntbuf += swprintf(BUF,string);
|
||||
}*/
|
||||
cntbuf += swprintf(BUF,itemstr);
|
||||
}
|
||||
if (input->includeUpgradedVersions && !input->isElite)
|
||||
sprintf(BUF,"(or upgraded) ");
|
||||
cntbuf += swprintf(BUF,getTranslatedString(STR_OR_UPGRADED));
|
||||
|
||||
if (input->haveNoSocket)
|
||||
sprintf(BUF," with no socket");
|
||||
{
|
||||
cntbuf += swprintf(BUF,getTranslatedString(STR_WITHOUT_SOCKET));
|
||||
InNoSocket = true;//~~~~~
|
||||
}
|
||||
|
||||
if (input->haveSockets)
|
||||
sprintf(BUF," with sockets");
|
||||
swprintf(BUF,getTranslatedString(STR_WITH_SOCKET));
|
||||
}
|
||||
|
||||
DWORD print(CubeMainBIN* curForm, char* buf, DWORD)//maxsize)
|
||||
DWORD print(CubeMainBIN* curForm, WCHAR* buf, DWORD)//maxsize)
|
||||
{
|
||||
if (!buf || !curForm || !curForm->enabled) return 0;
|
||||
|
||||
InNoSocket = false; //~~~~~
|
||||
BYTE realNbInputs=0;
|
||||
printInput(&curForm->input1, buf, &realNbInputs);
|
||||
printInput(&curForm->input2, buf, &realNbInputs);
|
||||
@@ -211,14 +280,15 @@ DWORD print(CubeMainBIN* curForm, char* buf, DWORD)//maxsize)
|
||||
printInput(&curForm->input6, buf, &realNbInputs);
|
||||
printInput(&curForm->input7, buf, &realNbInputs);
|
||||
|
||||
int cntbuf = wcslen(buf);
|
||||
|
||||
if (realNbInputs != curForm->numinputs)
|
||||
{
|
||||
sprintf(BUF," *** ERROR : numInputs(%d) != realNbInputs(%d) ***", curForm->numinputs, realNbInputs);
|
||||
cntbuf += swprintf(BUF,L" *** ERROR : numInputs(%d) != realNbInputs(%d) ***", curForm->numinputs, realNbInputs);
|
||||
return 1;
|
||||
}
|
||||
|
||||
sprintf(BUF," => ");
|
||||
cntbuf += swprintf(BUF,L" => ");
|
||||
BYTE realNbOutputs=0;
|
||||
printOutput(&curForm->output1, buf, &realNbOutputs);
|
||||
printOutput(&curForm->output2, buf, &realNbOutputs);
|
||||
@@ -226,24 +296,24 @@ DWORD print(CubeMainBIN* curForm, char* buf, DWORD)//maxsize)
|
||||
|
||||
|
||||
// if (curForm->ladder)
|
||||
// sprintf(BUF," [ladder only]");
|
||||
// cntbuf += swprintf(BUF," [ladder only]");
|
||||
|
||||
if (curForm->minDiff == 1)
|
||||
sprintf(BUF," [Nightmare and Hell only]");
|
||||
cntbuf += swprintf(BUF,getTranslatedString(STR_ONLY_N_H));
|
||||
else if (curForm->minDiff == 2)
|
||||
sprintf(BUF," [Hell only]");
|
||||
cntbuf += swprintf(BUF,getTranslatedString(STR_ONLY_HELL));
|
||||
|
||||
if (curForm->playerClass != 0xFF)
|
||||
{
|
||||
CharStatsBIN* charStats = D2GetCharStatsBIN(curForm->playerClass);
|
||||
sprintf(BUF, " [%s only]", charStats->name);
|
||||
cntbuf += swprintf(BUF, getTranslatedString(STR_ONLY_CLASS), charStats->name);
|
||||
}
|
||||
|
||||
if ((curForm->op>0) && (curForm->op!=28))
|
||||
sprintf(BUF, " [op%d(%d,%d)]", curForm->op, curForm->param, curForm->value);
|
||||
cntbuf += swprintf(BUF, L" [op%d(%d,%d)]", curForm->op, curForm->param, curForm->value);
|
||||
|
||||
// if (curForm->version == 100)
|
||||
// sprintf(BUF, " [expansion only]");
|
||||
// cntbuf += swprintf(BUF, " [expansion only]");
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -268,12 +338,24 @@ void listAllCubeFormula()
|
||||
int nbLines = D2GetNbCubeMainBIN();//SgptDataTables->nbCubemain
|
||||
log_msg("nbLines : %d\n",nbLines);
|
||||
|
||||
char buf[300];
|
||||
WCHAR buf[lenbuf];
|
||||
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++)
|
||||
{
|
||||
buf[0]=NULL;
|
||||
DWORD res = print(D2GetCubeMainBIN(i), buf, 300);//SgptDataTables->cubemain + i;
|
||||
if (res) fprintf(file,"%4u: %s\n",i,buf);
|
||||
DWORD res = print(D2GetCubeMainBIN(i), buf, lenbuf);//SgptDataTables->cubemain + i;
|
||||
UCS2toUTF8(&bufa[0], lenbuf, &buf[0], lenbuf);
|
||||
if (res) fprintf(file,"%4u: %s\n",i,bufa);
|
||||
if (res) fflush(file);
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Interface functions
|
||||
|
||||
@@ -69,6 +70,7 @@ void STDCALL printCustomPage()
|
||||
|
||||
DWORD STDCALL mouseCustomPageLeftDown(sWinMessage* msg)
|
||||
{
|
||||
|
||||
if(onRealm) return -1;
|
||||
if ( (selectedPage > 0) && (selectedPage<=lastPage) )
|
||||
return mouseNewStatsPageTwoLeftDown(msg);
|
||||
@@ -310,7 +312,7 @@ void Install_NewInterfaces()
|
||||
if ( version_D2Client >= V111 )
|
||||
{
|
||||
//Reset selectedPage variable on opening stats page
|
||||
mem_seek R7(D2Client, 0000, 0000, 0000, 4B79E, 8F73E, 55E0E, 65F5E);
|
||||
mem_seek R7(D2Client, 0000, 0000, 0000, 4B79E, 8F73E, 55E0E, 65F5E, C41FE);
|
||||
memt_byte( 0x83, 0xE8 ); // CALL caller_resetSelectedPage
|
||||
MEMT_REF4( 0x1F7426F8, caller_resetSelectedPageByToolBar);
|
||||
//6FAFB79E > 83F8 26 CMP EAX,26
|
||||
@@ -321,8 +323,10 @@ void Install_NewInterfaces()
|
||||
//6FB05E11 . 74 1F JE SHORT D2Client.6FB05E32
|
||||
//6FB15F5E > 83F8 26 CMP EAX,26
|
||||
//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);
|
||||
mem_seek R7(D2Client, 0000, 0000, 0000, 1E55A, 6A8FA, A31DA, 3C5EA, 3E39A);
|
||||
memt_byte( 0x55, 0xE8 ); // CALL caller_resetSelectedPage
|
||||
MEMT_REF4( 0xD53BED33, caller_resetSelectedPageByKey);
|
||||
//6FACE55A . 55 PUSH EBP
|
||||
@@ -337,7 +341,9 @@ void Install_NewInterfaces()
|
||||
//6FAEC5EA . 55 PUSH EBP
|
||||
//6FAEC5EB . 33ED XOR EBP,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)
|
||||
// mem_seek R7(D2Client, 88B58, 87ED8, 83478, A1FBE, 6571E, 8EF8E, 0000);//((DWORD)D2TogglePage+0x218);
|
||||
@@ -355,7 +361,7 @@ void Install_NewInterfaces()
|
||||
//6FB3EF92 |. 3928 CMP DWORD PTR DS:[EAX],EBP
|
||||
} else {
|
||||
//Reset selectedPage variable on opening stats 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, 0000);//((DWORD)D2TogglePage+0x218);
|
||||
memt_byte( 0x85, 0xE8 ); // CALL caller_resetSelectedPage
|
||||
MEMT_REF4( 0xC2940FC0, caller_resetSelectedPage);
|
||||
//6FB23478 |. 85C0 TEST EAX,EAX
|
||||
@@ -365,16 +371,17 @@ void Install_NewInterfaces()
|
||||
}
|
||||
|
||||
// Print custom page
|
||||
mem_seek R7(D2Client, 87697, 86A17, 81FAB, A3759, 66B59, 902B9, C3B49);
|
||||
mem_seek R7(D2Client, 87697, 86A17, 81FAB, A3759, 66B59, 902B9, C3B49, 1D549);
|
||||
MEMC_REF4( D2PrintStatsPage, printCustomPage);
|
||||
//6FB21FAA . E8 B1DDFAFF CALL D2Client.6FACFD60
|
||||
//6FB53758 . E8 43F1FDFF CALL D2Client.6FB328A0
|
||||
//6FB16B58 |. E8 C3270200 CALL D2Client.6FB39320
|
||||
//6FB402B8 |. E8 C3AFFDFF CALL D2Client.6FB1B280
|
||||
//6FB73B48 |. E8 5393FFFF CALL D2Client.6FB6CEA0
|
||||
//6FACD548 |. E8 F3200A00 CALL D2Client.6FB1B280
|
||||
|
||||
// Don't print Border
|
||||
mem_seek R7(D2Client, 58EF6, 58EF6, 5F4C6, 2D366, B5A46, 82166, 271C6);
|
||||
mem_seek R7(D2Client, 58EF6, 58EF6, 5F4C6, 2D366, B5A46, 82166, 271C6, 6D2B6);
|
||||
memt_byte( 0xB9, 0xE8 ); // CALL caller_DontPrintBorder
|
||||
MEMT_REF4( 0x00000012, version_D2Client >= V111 ? caller_DontPrintBorder_111 : caller_DontPrintBorder);
|
||||
//6FAFF4C6 > B9 12000000 MOV ECX,12
|
||||
@@ -382,9 +389,10 @@ void Install_NewInterfaces()
|
||||
//6FB65A46 |. B9 12000000 MOV ECX,12
|
||||
//6FB32166 |. B9 12000000 MOV ECX,12
|
||||
//6FAD71C6 |. B9 12000000 MOV ECX,12
|
||||
//6FB1D2B6 |. B9 12000000 MOV ECX,12
|
||||
|
||||
// Manage mouse down (Play sound)
|
||||
mem_seek R7(D2Client, 2A9DC, 2A9CC, 312A5, 82736, 891B6, 6B116, BCD36);
|
||||
mem_seek R7(D2Client, 2A9DC, 2A9CC, 312A5, 82736, 891B6, 6B116, BCD36, BF4D6);
|
||||
memt_byte( 0x8D, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0x00008088, version_D2Client >= V111 ? caller_mouseCustomPageLeftDown_111 : version_D2Client == V110 ? caller_mouseCustomPageLeftDown : caller_mouseCustomPageLeftDown_9);
|
||||
memt_byte( 0x00, 0x90 ); // NOP
|
||||
@@ -393,9 +401,10 @@ void Install_NewInterfaces()
|
||||
//6FB391B6 . 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]
|
||||
//6FB6F4D6 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
||||
|
||||
// Manage mouse up
|
||||
mem_seek R7(D2Client, 2ABBB, 2ABAB, 3148D, 836D9, 8A159, 6C0B9, BDCB9);
|
||||
mem_seek R7(D2Client, 2ABBB, 2ABAB, 3148D, 836D9, 8A159, 6C0B9, BDCB9, C0459);
|
||||
memt_byte( 0xA1, 0xE8 ); // CALL caller_mouseCustomPageLeftUp
|
||||
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]
|
||||
@@ -403,6 +412,7 @@ void Install_NewInterfaces()
|
||||
//6FB3A159 . A1 F8BEBC6F MOV EAX,DWORD PTR DS:[6FBCBEF8]
|
||||
//6FB1C0B9 . A1 28BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD28]
|
||||
//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
|
||||
|
@@ -60,18 +60,6 @@ const char* S_active_CheckMemory = "ActiveCheckMemory";
|
||||
const char* S_active_Commands = "ActiveCommands";
|
||||
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_active_ChangeLanguage = "ActiveChangeLanguage";
|
||||
const char* S_selectedLanguage = "SelectedLanguage";
|
||||
@@ -222,7 +210,7 @@ void init_General(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFi
|
||||
{
|
||||
GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_active_DisableBattleNet, "0");
|
||||
active_DisableBattleNet = atoi(buffer) != 0;
|
||||
log_msg("active_DisableBattleNet\t\t= %d\n", active_DisableBattleNet);
|
||||
log_msg("active_DisableBattleNet\t\t\t\t= %d\n", active_DisableBattleNet);
|
||||
|
||||
GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_active_logFile, "0");
|
||||
active_logFile = atoi(buffer)+1;
|
||||
@@ -254,51 +242,6 @@ void init_General(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFi
|
||||
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)
|
||||
{
|
||||
GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_active_ChangeLanguage, "0");
|
||||
@@ -308,7 +251,7 @@ void init_ActiveLanguage(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDe
|
||||
if (active_ChangeLanguage)
|
||||
{
|
||||
GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_selectedLanguage, "ENG");
|
||||
_strupr(buffer);
|
||||
strupr(buffer);
|
||||
switch (*(DWORD*)buffer)
|
||||
{
|
||||
case BIN('E','N','G',0) : selectedLanguage=LNG_ENG;break;
|
||||
@@ -338,7 +281,7 @@ void init_ActiveLanguage(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDe
|
||||
if (active_LanguageManagement)
|
||||
{
|
||||
GET_PRIVATE_PROFILE_STRING(S_LANGUAGE, S_defaultLanguage, "ENG");
|
||||
_strupr(buffer);
|
||||
strupr(buffer);
|
||||
switch (*(DWORD*)buffer)
|
||||
{
|
||||
case BIN('E','N','G',0) : defaultLanguage=LNG_ENG;break;
|
||||
@@ -359,7 +302,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");
|
||||
availableLanguages.all = 0;
|
||||
_strupr(buffer);
|
||||
strupr(buffer);
|
||||
char* curString = strtok(buffer,"|");
|
||||
while (curString)
|
||||
{
|
||||
@@ -840,7 +783,6 @@ void loadParameters()
|
||||
if (active_plugin)
|
||||
{
|
||||
init_General(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
|
||||
init_Windowed(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
|
||||
init_ActiveLanguage(iniFile, iniFixedFile, iniDefaultFile, buffer,BUFSIZE);
|
||||
init_SavePath(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
|
||||
init_VersionText(iniFile, iniFixedFile, iniDefaultFile, buffer, BUFSIZE);
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Adding custom data.
|
||||
Save and load infinity & shared Stash
|
||||
@@ -270,18 +271,19 @@ void Install_PlayerCustomData()
|
||||
log_msg("Patch D2Game & D2Client & D2Common for Player's custom data. (PlayerCustomData)\n");
|
||||
|
||||
// Initialize custom data.
|
||||
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 );
|
||||
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 );
|
||||
MEMJ_REF4( D2AllocMem, init_PlayerCustomData);
|
||||
//01BD0381 |. E8 C03F0000 CALL <JMP.&Fog.#10045>
|
||||
//6FD9ED5D |. E8 94A4FBFF CALL <JMP.&Fog.#10045>
|
||||
//6FDABFCD |. E8 34D2FAFF CALL <JMP.&Fog.#10045>
|
||||
//6FDA85ED |. E8 240CFBFF CALL <JMP.&Fog.#10045>
|
||||
//6FD809BD |. E8 6088FDFF CALL <JMP.&Fog.#10045>
|
||||
//6FD670DD |. E8 0C3EFFFF CALL <JMP.&Fog.#10045>
|
||||
|
||||
if ( version_D2Game >= V111 )
|
||||
{
|
||||
// update item
|
||||
mem_seek R7(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 9BB91);
|
||||
mem_seek R7(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 9BB91, 75C81);
|
||||
memt_byte( 0x8B ,0xE8); // CALL
|
||||
MEMT_REF4( 0x52182454, caller_updateItem_111);
|
||||
//0200BC71 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
|
||||
@@ -292,8 +294,10 @@ void Install_PlayerCustomData()
|
||||
//6FC7F2A5 |. 52 |PUSH EDX ; /Arg1
|
||||
//6FCBBB91 |> 8B5424 18 |MOV EDX,DWORD PTR SS:[ESP+18]
|
||||
//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);
|
||||
mem_seek R7(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 9BBF1, 75CE1);
|
||||
memt_byte( 0x8B ,0xE8); // CALL
|
||||
MEMT_REF4( 0x52182454, caller_updateItemB_111);
|
||||
//0200BCD1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
|
||||
@@ -304,19 +308,21 @@ void Install_PlayerCustomData()
|
||||
//6FC7F305 |. 52 ||PUSH EDX ; /Arg1
|
||||
//6FCBBBF1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
|
||||
//6FCBBBF5 |. 52 ||PUSH EDX
|
||||
//6FC95CE1 |> 8B5424 18 ||MOV EDX,DWORD PTR SS:[ESP+18]
|
||||
//6FC95CE5 |. 52 ||PUSH EDX
|
||||
|
||||
} else {
|
||||
// update item
|
||||
mem_seek R7(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 0000);
|
||||
mem_seek R7(D2Game, 10933, 10C03, 1100D, 8BC71, C3C51, 5F2A1, 0000, 0000);
|
||||
MEMC_REF4( D2GameGetObject, version_D2Game == V110?caller_updateItem: caller_updateItem_9);
|
||||
//6FC4100C |. E8 EFAA0700 |CALL D2Game.6FCBBB00
|
||||
mem_seek R7(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 0000);
|
||||
mem_seek R7(D2Game, 1097B, 10C4B, 11058, 8BCD1, C3CB1, 5F301, 0000, 0000);
|
||||
MEMC_REF4( D2GameGetObject, version_D2Game == V110?caller_updateItem: caller_updateItem_9);
|
||||
//6FC41057 |. E8 A4AA0700 ||CALL D2Game.6FCBBB00
|
||||
}
|
||||
|
||||
// Update client on loading
|
||||
mem_seek R7(D2Game, 23EB, 2426, 25D4, 53482, C6A32, ED502, 4BF12);//6FC325D4-6FC30000
|
||||
mem_seek R7(D2Game, 23EB, 2426, 25D4, 53482, C6A32, ED502, 4BF12, E7548);//6FC325D4-6FC30000
|
||||
memt_byte( 0x5F ,0xE8); // CALL
|
||||
MEMT_REF4( 0xC0335D5E , caller_updateClientPlayerOnLoading);
|
||||
//6FC325D4 |> 5F POP EDI
|
||||
@@ -339,57 +345,65 @@ void Install_PlayerCustomData()
|
||||
//6FC6BF13 |. 5E POP ESI
|
||||
//6FC6BF14 |. 5D POP EBP
|
||||
//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.
|
||||
mem_seek R7(D2Common, 7055C, 7065C, 80483, 4F82D, 5C9CD, 5856D, 3093D);
|
||||
mem_seek R7(D2Common, 7055C, 7065C, 80483, 4F82D, 5C9CD, 5856D, 3093D, 1705D);
|
||||
MEMJ_REF4( D2FreeMem, free_PlayerCustomData);
|
||||
//01BD0482 |. E8 C53E0000 CALL <JMP.&Fog.#10046>
|
||||
//6FD9F82C |. E8 E399FBFF CALL <JMP.&Fog.#10046>
|
||||
//6FDAC9CC |. E8 3BC8FAFF CALL <JMP.&Fog.#10046>
|
||||
//6FDA856C |. E8 E70CFBFF CALL <JMP.&Fog.#10046>
|
||||
//6FD8093C |. E8 E788FDFF CALL <JMP.&Fog.#10046>
|
||||
//6FD6705C |. E8 CF3EFFFF CALL <JMP.&Fog.#10046>
|
||||
|
||||
// Free item in Stash (Server-side)
|
||||
mem_seek R7(D2Game, 7D12B, 7D62B, 8D5A4, 99112, BFDB2, 94242, E1162);
|
||||
mem_seek R7(D2Game, 7D12B, 7D62B, 8D5A4, 99112, BFDB2, 94242, E1162, 6F7C2);
|
||||
MEMJ_REF4( D2UnitGetNextItem, version_D2Game >= V111 ? callerServer_getNextItemToFree_111 : version_D2Game == V110 ? callerServer_getNextItemToFree : callerServer_getNextItemToFree_9);//0x0005E204
|
||||
//6FCBD5A3 . E8 04E20500 CALL <JMP.&D2Common.#10304>
|
||||
//02019111 |. E8 5016F7FF |CALL <JMP.&D2Common.#10934>
|
||||
//0202FDB1 |. E8 30AAF4FF |CALL <JMP.&D2Common.#11140>
|
||||
//6FCB4241 |. E8 8862F7FF |CALL <JMP.&D2Common.#10770>
|
||||
//6FD01161 |. E8 6693F2FF |CALL <JMP.&D2Common.#10464>
|
||||
//6FC8F7C1 |. E8 44AEF9FF |CALL <JMP.&D2Common.#10879>
|
||||
|
||||
// Free item in Stash (Client-side)
|
||||
mem_seek R7(D2Client, 8EF8F, 8E30F, 89B32, 26404, 4C264, 1F2D4, A5C94);//6FB29B31-6FAA0000
|
||||
mem_seek R7(D2Client, 8EF8F, 8E30F, 89B32, 26404, 4C264, 1F2D4, A5C94, 621E4);//6FB29B31-6FAA0000
|
||||
MEMJ_REF4( D2UnitGetNextItem, version_D2Game >= V111 ? callerClient_getNextItemToFree_111 : version_D2Game == V110 ? callerClient_getNextItemToFree : callerClient_getNextItemToFree_9);//0x00040F34
|
||||
//6FB29B31 E8 340F0400 CALL <JMP.&D2Common.#10304>
|
||||
//6FAD6403 |. E8 925DFEFF |CALL <JMP.&D2Common.#10934>
|
||||
//6FAFC263 |. E8 38FFFBFF |CALL <JMP.&D2Common.#11140>
|
||||
//6FACF2D3 |. E8 4CD1FEFF |CALL <JMP.&D2Common.#10770>
|
||||
//6FB55C93 |. E8 D068F6FF |CALL <JMP.&D2Common.#10464>
|
||||
//6FB121E3 |. E8 7AA1FAFF |CALL <JMP.&D2Common.#10879>
|
||||
|
||||
if ( version_D2Common >= V110 )
|
||||
{
|
||||
// Test if it's already removed from inventory
|
||||
mem_seek R7(D2Common, 0000, 0000, 4E689, 26E33, 42133, 6AE93, 21B23);
|
||||
mem_seek R7(D2Common, 0000, 0000, 4E689, 26E33, 42133, 6AE93, 21B23, 3B393);
|
||||
memt_byte( 0x0D , 0x07);
|
||||
//01D2E688 75 0D JNZ SHORT D2Common.01D2E697
|
||||
//6FD76E32 |. 74 0D JE SHORT D2Common.6FD76E41
|
||||
//6FD92132 |. 74 0D JE SHORT D2Common.6FD92141
|
||||
//6FDBAE92 |. 74 0D JE SHORT D2Common.6FDBAEA1
|
||||
//6FD71B22 |. 74 0D JE SHORT D2Common.6FD71B31
|
||||
//6FD8B392 |. 74 0D JE SHORT D2Common.6FD8B3A1
|
||||
} else {
|
||||
mem_seek R7(D2Game, 7D176, 7D676, 0000, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(D2Game, 7D176, 7D676, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0x74 , 0x90);//MOV EAX,EDI
|
||||
memt_byte( 0x35 , 0x90);//NOP
|
||||
//6FCAD176 |. 74 35 |JE SHORT D2Game.6FCAD1AD
|
||||
|
||||
mem_seek R7(D2Client, 8F0CA, 8E44A, 0000, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(D2Client, 8F0CA, 8E44A, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0x0F , 0x90);//MOV EAX,EDI
|
||||
memt_byte( 0x84 , 0x90);//NOP
|
||||
memt_dword( 0x000000BF , 0x90909090);//NOP
|
||||
//6FB2F0CA |. 0F84 BF000000 |JE D2Client.6FB2F18F
|
||||
|
||||
mem_seek R7(D2Client, 8F13C, 8E4BC, 0000, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(D2Client, 8F13C, 8E4BC, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0x74 , 0x90);//MOV EAX,EDI
|
||||
memt_byte( 0x6F , 0x90);//NOP
|
||||
//6FB2F13C |. 74 6F |JE SHORT D2Client.6FB2F1AD
|
||||
|
BIN
PlugY/PlugY.aps
BIN
PlugY/PlugY.aps
Binary file not shown.
@@ -1,6 +1,22 @@
|
||||
// PlugY.cpp : Defines the exported functions for the DLL application.
|
||||
//
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
|
||||
#include "stdafx.h"
|
||||
Main file of this DLL
|
||||
|
||||
=================================================================*/
|
||||
|
||||
#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 =================================*/
|
BIN
PlugY/PlugY.rc
BIN
PlugY/PlugY.rc
Binary file not shown.
@@ -1,26 +1,17 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# 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}"
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugY", "PlugY.vcproj", "{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{5059AE94-61B0-4D07-A970-B670BBCB142C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{5059AE94-61B0-4D07-A970-B670BBCB142C}.Debug|x64.Build.0 = Debug|x64
|
||||
{5059AE94-61B0-4D07-A970-B670BBCB142C}.Debug|x86.ActiveCfg = Debug|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
|
||||
{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{F5E47DA0-4D85-41E4-954D-29237DF8AFCB}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
BIN
PlugY/PlugY.suo
BIN
PlugY/PlugY.suo
Binary file not shown.
@@ -152,6 +152,7 @@
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="opends60.lib"
|
||||
OutputFile="$(OutDir)\$(ProjectName).dll"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="2"
|
||||
@@ -182,7 +183,7 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="copy $(TargetPath) "..\PlugYInstaller\PlugY.dll"
copy $(TargetPath) "D:\Jeux\Blizzard\Diablo II\PlugY.dll"
copy $(TargetPath) "D:\www\PlugY.dll"
"
|
||||
CommandLine="copy $(TargetPath) "..\PlugYInstaller\PlugY.dll"
copy $(TargetPath) "D:\Games\Diablo II\PlugY.dll"

"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
@@ -361,6 +362,14 @@
|
||||
RelativePath="WorldEvent.cpp"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="Coomons"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\Commons\VersionInfo.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
@@ -438,6 +447,10 @@
|
||||
RelativePath="loadPlayerData.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\LocaleStrings.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="mainScreen.h"
|
||||
>
|
||||
@@ -561,6 +574,10 @@
|
||||
RelativePath="..\Commons\updatingConst.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Commons\VersionInfo.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
|
@@ -1,267 +0,0 @@
|
||||
<?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>
|
@@ -1,308 +0,0 @@
|
||||
<?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>
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Adding custom data.
|
||||
Save and load infinity & shared Stash
|
||||
@@ -88,7 +89,7 @@ void Install_PlugYFiles()
|
||||
log_msg("Patch Storm to found custom file. (PlugYFiles)\n");
|
||||
|
||||
// Try in Diablo II\PlugY\ if file not found
|
||||
mem_seek R7(Storm, 192C6, 19296, 18677, 2CC69, 14259, 121E9, 28D89);//( (DWORD)D2Storm268 + V7(Storm, 01A8, 01A8, 01AB, 0429, 0429, 0429, 0000) );
|
||||
mem_seek R7(Storm, 192C6, 19296, 18677, 2CC69, 14259, 121E9, 28D89, 2DA79);//( (DWORD)D2Storm268 + V7(Storm, 01A8, 01A8, 01AB, 0429, 0429, 0429, 0000) );
|
||||
memt_byte( 0xFF ,0x90); // NOP
|
||||
memt_byte( 0x15 ,0xE8); // CALL
|
||||
MEMD_REF4( LeaveCriticalSection, version_Storm >= V111 ? caller_isModFile_111 : caller_isModFile);
|
||||
@@ -97,6 +98,7 @@ void Install_PlugYFiles()
|
||||
//6FC04259 |. FF15 3832C36F 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
|
||||
//6FC1DA79 |. FF15 3C32C36F CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti>; \LeaveCriticalSection
|
||||
|
||||
|
||||
log_msg("\n" );
|
||||
@@ -170,7 +172,7 @@ void Install_PlugYImagesFiles()
|
||||
log_msg("Patch D2Client to load/free custom images. (PlugYImagesFiles)\n");
|
||||
|
||||
// Load custom images
|
||||
mem_seek R7(D2Client, 57E21, 57E21, 5E4B1, 2E101, B67E1, 82761, 27EAE);
|
||||
mem_seek R7(D2Client, 57E21, 57E21, 5E4B1, 2E101, B67E1, 82761, 27EAE, 6E0BE);
|
||||
memt_byte( 0xB9 ,0xE8);
|
||||
MEMT_REF4( 0x0000000C , caller_loadCustomImages);
|
||||
//6FAFE4B1 |. B9 0C000000 MOV ECX,0C
|
||||
@@ -178,9 +180,10 @@ void Install_PlugYImagesFiles()
|
||||
//6FB667E1 |. B9 0C000000 MOV ECX,0C
|
||||
//6FB32761 |. B9 0C000000 MOV ECX,0C
|
||||
//6FAD7EAE |. B9 0C000000 MOV ECX,0C
|
||||
//6FB1E0BE |. B9 0C000000 MOV ECX,0C
|
||||
|
||||
// Free custom images
|
||||
mem_seek R7(D2Client, 57FA9, 57FA9, 5E639, 2D12D, B580D, 8158D, 26F8D);
|
||||
mem_seek R7(D2Client, 57FA9, 57FA9, 5E639, 2D12D, B580D, 8158D, 26F8D, 6D07D);
|
||||
memt_byte( 0xB9 ,0xE8);
|
||||
MEMT_REF4( 0x0000000C , caller_freeCustomImages);
|
||||
//6FAFE639 |> B9 0C000000 MOV ECX,0C
|
||||
@@ -188,6 +191,7 @@ void Install_PlugYImagesFiles()
|
||||
//6FB6580D |> B9 0C000000 MOV ECX,0C
|
||||
//6FB3158D |> B9 0C000000 MOV ECX,0C
|
||||
//6FAD6F8D |> B9 0C000000 MOV ECX,0C
|
||||
//6FB1D07D |> B9 0C000000 MOV ECX,0C
|
||||
|
||||
log_msg("\n" );
|
||||
|
||||
@@ -243,7 +247,7 @@ void Install_PlugYTxtFiles()
|
||||
// lookupItemStatCost = (void*)R7(D2Common, A1D70, A1D70, AA1D8, 0000, 0000, 0000, 0000);
|
||||
|
||||
// Load custom txt files
|
||||
mem_seek R7(D2Common, 7F4B, 7F4B, 2F7D7, 76854, 37444, 81C44, 5D6E4);
|
||||
mem_seek R7(D2Common, 7F4B, 7F4B, 2F7D7, 76854, 37444, 81C44, 5D6E4, 855E4);
|
||||
MEMC_REF4( D2LoadSuperuniques, version_D2Common >= V111 ? caller_loadTxtFiles_111 : caller_loadTxtFiles );
|
||||
//6FD47F4A |. E8 B1750100 CALL D2Common.6FD5F500
|
||||
//6FD47F4A |. E8 C1750100 CALL D2Common.6FD5F510
|
||||
@@ -252,9 +256,10 @@ void Install_PlugYTxtFiles()
|
||||
//6FD87443 |. E8 58B6FFFF CALL D2Common.6FD82AA0 ; \D2Common.6FD82AA0
|
||||
//6FDD1C43 |. E8 58B6FFFF CALL D2Common.6FDCD2A0 ; \D2Common.6FDCD2A0
|
||||
//6FDAD6E3 |. E8 88C1FFFF CALL D2Common.6FDA9870 ; \D2Common.6FDA9870
|
||||
//6FDD55E3 |. E8 58B6FFFF CALL D2Common.6FDD0C40 ; \D2Common.6FDD0C40
|
||||
|
||||
// Free custom txt files
|
||||
mem_seek R7(D2Common, 79EC, 79EC, 10186, 332B3, 15AB3, 44E13, 5E8B3);
|
||||
mem_seek R7(D2Common, 79EC, 79EC, 10186, 332B3, 15AB3, 44E13, 5E8B3, FAA3);
|
||||
MEMJ_REF4( D2Fog10212, caller_freeTxtFiles );
|
||||
//6FD479EB . E8 C8C00600 CALL <JMP.&Fog.#10212>
|
||||
//6FD479EB . E8 C8C00600 CALL <JMP.&Fog.#10212>
|
||||
@@ -263,6 +268,7 @@ void Install_PlugYTxtFiles()
|
||||
//6FD65AB2 |. E8 B537FFFF CALL <JMP.&Fog.#10212>
|
||||
//6FD94E12 |. E8 1744FCFF CALL <JMP.&Fog.#10212>
|
||||
//6FDAE8B2 |. E8 8FA9FAFF CALL <JMP.&Fog.#10212>
|
||||
//6FD5FAA2 |. E8 5FB4FFFF CALL <JMP.&Fog.#10212>
|
||||
|
||||
log_msg("\n" );
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Changing the current save path.
|
||||
|
||||
@@ -123,7 +124,7 @@ void Install_ChangingSavePath()
|
||||
if (version_Fog >= V111)
|
||||
{
|
||||
// Appel de notre fct d'ajout d'un sous-r<>pertoire
|
||||
mem_seek R7(Fog, 000, 000, 000, 185F6, 1C106, 1F086, 17F86);
|
||||
mem_seek R7(Fog, 000, 000, 000, 185F6, 1C106, 1F086, 17F86, 1E146);
|
||||
memt_byte( 0x83 ,0xE8); // CALL changeSavePath
|
||||
MEMT_REF4( 0x0575FFF8, changeSavePath_111);
|
||||
//6FF685F6 . 83F8 FF CMP EAX,-1
|
||||
@@ -134,18 +135,21 @@ void Install_ChangingSavePath()
|
||||
//6FF6F089 . 75 05 JNZ SHORT Fog.6FF6F090
|
||||
//6FF67F86 . 83F8 FF CMP EAX,-1
|
||||
//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
|
||||
mem_seek R7(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6);
|
||||
mem_seek R7(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6, 1E166);
|
||||
MEMJ_REF4( D2Storm503, forCreateSavePath);
|
||||
//6FF68615 . E8 A246FFFF CALL <JMP.&Storm.#503>
|
||||
//6FF6C125 . E8 C20BFFFF CALL <JMP.&Storm.#503>
|
||||
//6FF6F0A5 . E8 34DDFEFF CALL <JMP.&Storm.#503>
|
||||
//6FF67FA5 . E8 504EFFFF CALL <JMP.&Storm.#503>
|
||||
//6FF6E165 . E8 6AEBFEFF CALL <JMP.&Storm.#503>
|
||||
|
||||
|
||||
// Remove registry update
|
||||
mem_seek R7(Fog, 000, 000, 000, 1861A, 1C12A, 1F0AA, 17FAA);
|
||||
mem_seek R7(Fog, 000, 000, 000, 1861A, 1C12A, 1F0AA, 17FAA, 1E16A);
|
||||
memt_byte( 0x56 ,0xEB); // JMP SHORT fog.6FF6862C
|
||||
memt_byte( 0x6A ,0x10); //
|
||||
memt_byte( 0x00 ,0x90); // NOP
|
||||
@@ -166,6 +170,8 @@ void Install_ChangingSavePath()
|
||||
//6FF6F0B7 . E8 58DDFEFF CALL <JMP.&Storm.#425>
|
||||
//6FF67FAA . 56 PUSH ESI
|
||||
//6FF67FAB . 6A 00 PUSH 0
|
||||
//6FF6E16A . 56 PUSH ESI
|
||||
//6FF6E16B . 6A 00 PUSH 0
|
||||
|
||||
} else {
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Save Player Custom Data.
|
||||
|
||||
@@ -521,16 +522,17 @@ void Install_SavePlayerData()
|
||||
log_msg("Patch D2Game & D2Client for save Player's custom data. (SavePlayerData)\n");
|
||||
|
||||
//Save single player custom data.
|
||||
mem_seek R7(D2Game, 4DF04, 4E304, 5A624, B9365, 25475, 44165, 53F35);
|
||||
mem_seek R7(D2Game, 4DF04, 4E304, 5A624, B9365, 25475, 44165, 53F35, 39835);
|
||||
MEMJ_REF4( D2FogGetSavePath, version_D2Game >= V111 ? caller_SaveSPPlayerCustomData_111 : version_D2Game != V109b ? caller_SaveSPPlayerCustomData : caller_SaveSPPlayerCustomData_9);
|
||||
//6FC8A623 E8 3E210900 CALL <JMP.&Fog.#10115>
|
||||
//02039364 |. E8 3B0FF5FF CALL <JMP.&Fog.#10115>
|
||||
//01F95474 |. E8 C34EFEFF CALL <JMP.&Fog.#10115>
|
||||
//6FC64164 |. E8 EB61FCFF CALL <JMP.&Fog.#10115>
|
||||
//6FC73F34 |. E8 DD63FBFF CALL <JMP.&Fog.#10115>
|
||||
//6FC59834 |. E8 FB0AFDFF CALL <JMP.&Fog.#10115>
|
||||
|
||||
//Send SaveFiles
|
||||
mem_seek R7(D2Game, 4DFFA, 4E3FA, 5A720, B92DB, 253EB, 440DB, 53EAB);
|
||||
mem_seek R7(D2Game, 4DFFA, 4E3FA, 5A720, B92DB, 253EB, 440DB, 53EAB, 397AB);
|
||||
memt_byte( 0x8B ,0x90); // NOP
|
||||
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);
|
||||
@@ -544,8 +546,10 @@ void Install_SavePlayerData()
|
||||
//6FC640DF |. 85C0 TEST EAX,EAX
|
||||
//6FC73EAB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||
//6FC73EAF |. 85C0 TEST EAX,EAX
|
||||
//6FC597AB |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
|
||||
//6FC597AF |. 85C0 TEST EAX,EAX
|
||||
|
||||
mem_seek R7(D2Game, 7993, 7A13, 7BBB, E2943, E6D83, A89D3, 2D173);
|
||||
mem_seek R7(D2Game, 7993, 7A13, 7BBB, E2943, E6D83, A89D3, 2D173, BEDD3);
|
||||
memt_byte( 0x8B ,0x90); // NOP
|
||||
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);
|
||||
@@ -554,6 +558,7 @@ void Install_SavePlayerData()
|
||||
//02056D83 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||
//6FCC89D3 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||
//6FC4D173 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||
//6FCDEDD3 |. 8B8E 7C010000 MOV ECX,DWORD PTR DS:[ESI+17C]
|
||||
|
||||
// mem_seek R7(D2Game, 7B82, 7C05, 7DCF, 0000, 0000, 0000, 0000);//117FC, 117EC, 11DBC
|
||||
// memt_byte( 0x8B ,0xE8); // CALL
|
||||
@@ -565,16 +570,17 @@ void Install_SavePlayerData()
|
||||
if ( version_D2Game >= V111 )
|
||||
{
|
||||
//Received SaveFiles
|
||||
mem_seek R7(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 43946);
|
||||
mem_seek R7(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 43946, 448E6);
|
||||
memt_byte( 0x0F ,0xE8);
|
||||
MEMT_REF4( 0x0C2444B6, caller_ReceivedSaveFilesToSave_111);
|
||||
//6FB39246 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||
//6FAE2076 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||
//6FB2BCD6 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||
//6FAF3946 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||
//6FAF48E6 |. 0FB64424 0C |MOVZX EAX,BYTE PTR SS:[ESP+C]
|
||||
|
||||
// Save multiplayer player custom data.
|
||||
mem_seek R7(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, AC572);
|
||||
mem_seek R7(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, AC572, 829C2);
|
||||
memt_byte( 0x81 ,0xE8); // CALL
|
||||
MEMT_REF4( 0x55AA55F9, caller_SaveMPPlayerCustomData_111);
|
||||
memt_byte( 0xAA ,0x90); // CALL
|
||||
@@ -582,16 +588,17 @@ void Install_SavePlayerData()
|
||||
//6FB6D7F2 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
||||
//6FB14A22 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
||||
//6FB5C572 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
||||
//6FB329C2 |. 81F9 55AA55AA CMP ECX,AA55AA55
|
||||
} else {
|
||||
//Received SaveFiles
|
||||
mem_seek R7(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 0000);
|
||||
mem_seek R7(D2Client, 116F0, 116E0, 11CB0, 89246, 32076, 7BCD6, 0000, 0000);
|
||||
memt_byte( 0x81 ,0x90); // NOP
|
||||
memt_byte( 0xEC ,0xE8); // CALL
|
||||
MEMT_REF4( 0x000005F4, caller_ReceivedSaveFilesToSave);
|
||||
//6FAB1CB0 |$ 81EC F4050000 SUB ESP,5F4
|
||||
|
||||
// Save multiplayer player custom data.
|
||||
mem_seek R7(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, 0000);
|
||||
mem_seek R7(D2Client, 117FC, 117EC, 11DBC, 99AE2, BD7F2, 64A22, 0000, 0000);
|
||||
memt_byte( 0x8B ,0xE8); // CALL
|
||||
MEMT_REF4( 0x04518B01, caller_SaveMPPlayerCustomData);
|
||||
//6FAB1DBC |. 8B01 MOV EAX,DWORD PTR DS:[ECX]
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Change Skill win per level up.
|
||||
|
||||
@@ -36,14 +37,14 @@ void Install_SkillPerLevelUp()
|
||||
|
||||
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);
|
||||
mem_seek R7(D2Game, 42261, 42651, 4ED60, D7AE5, 79695, AA455, EB1E5, EDCA5);
|
||||
MEMJ_REF4( V2AddPlayerStat, version_D2Game >= V111 ? caller_changeSkillPerLevelUp_111 : caller_changeSkillPerLevelUp);
|
||||
//6FC7ED5F |. E8 56CB0900 CALL <JMP.&D2Common.#10518>
|
||||
//02057AE4 |. E8 9F28F3FF CALL <JMP.&D2Common.#10109>
|
||||
//01FE9694 |. E8 1B0DF9FF CALL <JMP.&D2Common.#10627>
|
||||
//6FCCA454 |. E8 5F01F6FF CALL <JMP.&D2Common.#10762>
|
||||
//6FD0B1E4 |. E8 E9F2F1FF CALL <JMP.&D2Common.#10551>
|
||||
|
||||
//6FD0DCA4 |. E8 FDC6F1FF CALL <JMP.&D2Common.#10645>
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Change Stat win per level up.
|
||||
|
||||
@@ -34,13 +35,14 @@ void Install_StatPerLevelUp()
|
||||
|
||||
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);
|
||||
mem_seek R7(D2Game, 42258, 42648, 4ED55, D7ADA, 7968A, AA44A, EB1DA, EDC9A);
|
||||
MEMJ_REF4( V2AddPlayerStat, version_D2Game >= V111 ? caller_changeStatPerLevelUp_111 : caller_changeStatPerLevelUp);
|
||||
//6FC7ED54 |. E8 61CB0900 CALL <JMP.&D2Common.#10518>
|
||||
//02057AD9 |. E8 AA28F3FF CALL <JMP.&D2Common.#10109>
|
||||
//01FE9689 |. E8 260DF9FF CALL <JMP.&D2Common.#10627>
|
||||
//6FCCA449 |. E8 6A01F6FF CALL <JMP.&D2Common.#10762>
|
||||
//6FD0B1D9 |. E8 F4F2F1FF CALL <JMP.&D2Common.#10551>
|
||||
//6FD0DC99 |. E8 08C7F1FF CALL <JMP.&D2Common.#10645>
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Unassign Stats Point for futher re-assignment.
|
||||
|
||||
@@ -331,27 +332,29 @@ void Install_StatsPoints()
|
||||
//if ( version_D2Client < V113 )
|
||||
{
|
||||
// Always print stat button images.
|
||||
mem_seek R7(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5);
|
||||
mem_seek R7(D2Client, 29B12, 29B02, 30073, 82BBA, 8963A, 6B59A, BD1B5, BF955);
|
||||
memt_byte( 0x8B, 0xEB ); // JMP SHORT D2Client.6FAD0088
|
||||
memt_byte( 0x4C, V7(D2Client, 12, 12, 13, 13, 13, 13, 13) );
|
||||
memt_byte( 0x4C, V7(D2Client, 12, 12, 13, 13, 13, 13, 13, 13) );
|
||||
memt_byte( 0x24, 0x90 ); // NOP
|
||||
memt_byte( V7(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C), 0x90 ); // NOP (V109d:0x20 , V110:0x14
|
||||
memt_byte( V7(D2Client, 20, 20, 14, 1C, 1C, 1C, 1C, 1C), 0x90 ); // NOP (V109d:0x20 , V110:0x14
|
||||
//6FAD0073 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
|
||||
//6FB32BBA > 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]
|
||||
//6FB6D1B5 |> 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||
//6FB6F955 > 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
|
||||
|
||||
//print our buttons
|
||||
mem_seek R7(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E);
|
||||
mem_seek R7(D2Client, 29B9D, 29B8D, 300FD, 82C54, 896D4, 6B637, BD23E, BF9DE);
|
||||
MEMJ_REF4( D2PrintImage, caller_printUnassignStatsBtn);
|
||||
//6FB32C53 . E8 82A3F8FF CALL <JMP.&D2gfx.#10047>
|
||||
//6FB396D3 . E8 D238F8FF CALL <JMP.&D2gfx.#10044>
|
||||
//6FB1B636 . E8 431AFAFF CALL <JMP.&D2gfx.#10024>
|
||||
//6FB6D23D . E8 54FEF4FF CALL <JMP.&D2gfx.#10041>
|
||||
//6FB6F9DD . E8 ECD5F4FF CALL <JMP.&D2gfx.#10042>
|
||||
|
||||
// Always manage push down.
|
||||
mem_seek R7(D2Client, 2AA7B, 2AA6B, 3134D, 827D9, 89259, 6B1B9, BCDD9);
|
||||
mem_seek R7(D2Client, 2AA7B, 2AA6B, 3134D, 827D9, 89259, 6B1B9, BCDD9, BF579);
|
||||
memt_byte( 0x74, 0x90 ); // NOP
|
||||
memt_byte( 0x4E, 0x90 ); // NOP
|
||||
//6FAD134D 74 4E JE SHORT D2Client.6FAD139D
|
||||
@@ -359,11 +362,12 @@ void Install_StatsPoints()
|
||||
//6FB39259 . 74 4E JE SHORT D2Client.6FB392A9
|
||||
//6FB1B1B9 74 4E JE SHORT D2Client.6FB1B209
|
||||
//6FB6CDD9 . 74 4E JE SHORT D2Client.6FB6CE29
|
||||
//6FB6F579 . 74 4E JE SHORT D2Client.6FB6F5C9
|
||||
|
||||
if ( version_D2Client >= V111 )
|
||||
{
|
||||
// On Push down.
|
||||
mem_seek R7(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 6B224, BCE44);
|
||||
mem_seek R7(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 6B224, BCE44, BF5E4);
|
||||
memt_byte( 0x6B, 0xE8 );
|
||||
MEMT_REF4( 0x01BF0ED2, caller_pushDown_111);
|
||||
memt_byte( 0x00, 0x6B ); // IMUL EDX,EDX,0E
|
||||
@@ -377,10 +381,12 @@ void Install_StatsPoints()
|
||||
//6FB1B227 BF 01000000 MOV EDI,1
|
||||
//6FB6CE44 > 6BD2 0E IMUL EDX,EDX,0E
|
||||
//6FB6CE47 . BF 01000000 MOV EDI,1
|
||||
//6FB6F5E4 > 6BD2 0E IMUL EDX,EDX,0E
|
||||
//6FB6F5E7 . BF 01000000 MOV EDI,1
|
||||
|
||||
} else {
|
||||
// On Push down.
|
||||
mem_seek R7(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 0000, 0000);
|
||||
mem_seek R7(D2Client, 2AAE6, 2AAD6, 313B8, 82844, 892C4, 0000, 0000, 0000);
|
||||
memt_byte( 0x8D, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0x0000D504, caller_pushDown);
|
||||
memt_byte( 0x00, 0x90 ); // NOP
|
||||
@@ -392,7 +398,7 @@ void Install_StatsPoints()
|
||||
if ( version_D2Client >= V110 )
|
||||
{
|
||||
// Always manage push up.
|
||||
mem_seek R7(D2Client, 0000, 0000, 3152E, 83869, 8A2E9, 6C249, BDE49);
|
||||
mem_seek R7(D2Client, 0000, 0000, 3152E, 83869, 8A2E9, 6C249, BDE49, C05E9);
|
||||
memt_byte( 0x74, 0x90 ); // NOP
|
||||
memt_byte( version_D2Client >= V111 ? 0x65 : 0x68, 0x90 ); // NOP
|
||||
//6FAD152E 74 68 JE SHORT D2Client.6FAD1598
|
||||
@@ -400,9 +406,10 @@ void Install_StatsPoints()
|
||||
//6FB3A2E9 . 74 65 JE SHORT D2Client.6FB3A350
|
||||
//6FB1C249 74 65 JE SHORT D2Client.6FB1C2B0
|
||||
//6FB6DE49 . 74 65 JE SHORT D2Client.6FB6DEB0
|
||||
//6FB705E9 . 74 65 JE SHORT D2Client.6FB70650
|
||||
|
||||
// Unassign stats point when ctrl is push.
|
||||
mem_seek R7(D2Client, 0000, 0000, 315D3, 8391B, 8A39B, 6C2FB, BDEFB);
|
||||
mem_seek R7(D2Client, 0000, 0000, 315D3, 8391B, 8A39B, 6C2FB, BDEFB, C069B);
|
||||
memt_byte( 0x66, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0x077CC085, caller_UnassignStats);
|
||||
//6FAD15D3 . 66:85C0 TEST AX,AX
|
||||
@@ -415,23 +422,25 @@ void Install_StatsPoints()
|
||||
//6FB1C2FE . 7C 07 JL SHORT D2Client.6FB1C307
|
||||
//6FB6DEFB . 66:85C0 TEST AX,AX
|
||||
//6FB6DEFE . 7C 07 JL SHORT D2Client.6FB6DF07
|
||||
//6FB7069B . 66:85C0 TEST AX,AX
|
||||
//6FB7069E . 7C 07 JL SHORT D2Client.6FB706A7
|
||||
} else {
|
||||
// Always manage push up.
|
||||
mem_seek R7(D2Client, 2AC55, 2AC45, 0000, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(D2Client, 2AC55, 2AC45, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0x0F, 0x90 ); // NOP
|
||||
memt_byte( 0x84, 0x90 ); // NOP
|
||||
memt_dword( 0x000000AE, 0x90909090 ); // NOP NOP NOP NOP
|
||||
//6FACAC45 . 0F84 AE000000 JE D2Client.6FACACF9
|
||||
|
||||
// Unassign stats point when ctrl is push.
|
||||
mem_seek R7(D2Client, 2ACD9, 2ACC9, 0000, 0000, 0000, 0000, 0000);
|
||||
mem_seek R7(D2Client, 2ACD9, 2ACC9, 0000, 0000, 0000, 0000, 0000, 0000);
|
||||
memt_byte( 0xB8, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0x00000001, caller_UnassignStats_9);
|
||||
//6FACACC9 . B8 01000000 MOV EAX,1
|
||||
}
|
||||
|
||||
// Set the id for the calling function.
|
||||
mem_seek R7(D2Client, 2AD02, 2ACF2, 31611, 8395E, 8A3DE, 6C33E, BDF3E);
|
||||
mem_seek R7(D2Client, 2AD02, 2ACF2, 31611, 8395E, 8A3DE, 6C33E, BDF3E, C06DE);
|
||||
if ( version_D2Client >= V111 ) {
|
||||
memt_byte( 0x66, 0xE8 ); // CALL
|
||||
MEMT_REF4( 0x15244C89, caller_setValue_111);
|
||||
@@ -439,6 +448,7 @@ void Install_StatsPoints()
|
||||
//6FB3A3DE . 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 ; |
|
||||
//6FB706DE . 66:894C24 15 MOV WORD PTR SS:[ESP+15],CX ; |
|
||||
} else {
|
||||
MEMC_REF4( D2SendToServer3, caller_setValue);
|
||||
//6FAD1610 . E8 7BC3FDFF CALL D2Client.6FAAD990
|
||||
@@ -475,7 +485,7 @@ void Install_StatsLimitShiftClick()
|
||||
log_msg("Patch D2Client for limit the assigment of stat points when shift is used. (LimitShift)\n");
|
||||
|
||||
// Limit the assigment of stat points.
|
||||
mem_seek R7(D2Client, 2ACD0, 2ACC0, 315CD, 83915, 8A395, 6C2F5, BDEF5);
|
||||
mem_seek R7(D2Client, 2ACD0, 2ACC0, 315CD, 83915, 8A395, 6C2F5, BDEF5, C0695);
|
||||
memt_byte( 0xFF, 0x90 ); // NOP
|
||||
memt_byte( 0x15, 0xE8 ); // CALL
|
||||
MEMD_REF4( GetKeyState, version_D2Client >= V111 ? caller_LimitShift_111 : caller_LimitShift);
|
||||
@@ -484,6 +494,7 @@ void Install_StatsLimitShiftClick()
|
||||
//6FB3A395 . FF15 08F1B76F CALL DWORD PTR DS:[<&USER32.GetKeyState>]
|
||||
//6FB1C2F5 . FF15 10F1B76F 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");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Uber Quest Management.
|
||||
|
||||
@@ -327,42 +328,45 @@ void Install_UberQuest()
|
||||
DWORD oldProtection;
|
||||
|
||||
// open Red Portal
|
||||
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);
|
||||
VirtualProtect((LPVOID)R7(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0, FA2C4), 8, PAGE_EXECUTE_READWRITE, &oldProtection);
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, FA480, FA7B8, FA228, FA5F0, FA2C4);
|
||||
MEMT_DWORD( D2OpenPandPortal , openPandPortal);
|
||||
MEMT_DWORD( D2OpenPandFinalPortal , openPandFinalPortal);
|
||||
//0201E357 |. FFD0 |CALL EAX
|
||||
//01FA77E7 |. FFD0 |CALL EAX
|
||||
//6FCF3CC7 |. FFD0 |CALL EAX
|
||||
//6FC92437 |. FFD0 |CALL EAX
|
||||
VirtualProtect((LPVOID)R7(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0), 8, oldProtection, &oldProtection);
|
||||
//6FCB7127 |. FFD0 |CALL EAX
|
||||
VirtualProtect((LPVOID)R7(D2Game,0,0,0,FA480,FA7B8, FA228, FA5F0, FA2C4), 8, oldProtection, &oldProtection);
|
||||
|
||||
|
||||
// manage uberIA (fct table at 0209E7E8)
|
||||
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);
|
||||
VirtualProtect((LPVOID)(R7(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788, 10ED00) + 145*0x10), 0x30, PAGE_EXECUTE_READWRITE, &oldProtection);
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, 10F100, 10F5E8, 10F870, 10F0A0, 10F618);
|
||||
MEMT_DWORD( D2UberBaalIA , uberBaalIA);
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, 10F110, 10F5F8, 10F880, 10F0B0);
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, 10F110, 10F5F8, 10F880, 10F0B0, 10F628);
|
||||
MEMT_DWORD( D2UberMephIA , uberMephIA);
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, 10F120, 10F608, 10F890, 10F0C0);
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, 10F120, 10F608, 10F890, 10F0C0, 10F638);
|
||||
MEMT_DWORD( D2UberDiabloIA , uberDiabloIA);
|
||||
VirtualProtect((LPVOID)(R7(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788) + 145*0x10), 0x30, oldProtection, &oldProtection);
|
||||
VirtualProtect((LPVOID)(R7(D2Game,0,0,0,10E7E8,10ECD0,10EF58,10E788, 10ED00) + 145*0x10), 0x30, oldProtection, &oldProtection);
|
||||
//0202ADA7 |> B8 E8E70902 MOV EAX,D2Game.0209E7E8
|
||||
//01FD2BE7 |> B8 D0EC0702 MOV EAX,D2Game.0207ECD0
|
||||
//6FC3B597 |> B8 58EFD26F MOV EAX,D2Game.6FD2EF58
|
||||
//6FCBD157 |> B8 88E7D26F MOV EAX,D2Game.6FD2E788
|
||||
//6FC5C617 |> B8 00EDD26F MOV EAX,D2Game.6FD2ED00
|
||||
|
||||
// spawn Uber
|
||||
// mem_seek R7(D2Game, 0000, 0000, 0000, 98DAD, 0000, 0000, 0000);
|
||||
// MEMJ_REF4( D2WarpPlayer , spawnUber);
|
||||
//02028DAC |. E8 491CF7FF CALL <JMP.&D2Common.#10872>
|
||||
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, E26E2, E6B52, A850B, 2CCAB);
|
||||
mem_seek R7(D2Game, 0000, 0000, 0000, E26E2, E6B52, A850B, 2CCAB, BE9AB);
|
||||
MEMC_REF4( D2Game235C0 , spawnUber);
|
||||
//020726E1 |. E8 2A46FFFF ||CALL D2Game.02066D10
|
||||
//02056B51 |. E8 6ACAF3FF ||CALL D2Game.01F935C0
|
||||
//6FCC850A |. E8 014FF6FF ||CALL D2Game.6FC2D410
|
||||
//6FC4CCAA |. E8 3134FFFF ||CALL D2Game.6FC400E0
|
||||
//6FCDE9AA |. E8 D1AFF9FF ||CALL D2Game.6FC79980
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Updating client.
|
||||
|
||||
@@ -35,6 +36,7 @@ void updateClient(Unit* ptChar, DWORD mFunc, DWORD p1, DWORD p2, DWORD p3)
|
||||
D2SendPacket(ptNetClient, &packet, sizeof(DataPacket));
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
@@ -73,13 +75,14 @@ void Install_UpdateClient()
|
||||
log_msg("Patch D2Client for received Item packet. (UpdateClient)\n");
|
||||
|
||||
// execute if it's our packet else continue
|
||||
mem_seek R7(D2Client, 14236, 14226, 145B6, 9C6B6, BFE86, 66E06, AE896);
|
||||
mem_seek R7(D2Client, 14236, 14226, 145B6, 9C6B6, BFE86, 66E06, AE896, 84D96);
|
||||
MEMT_REF4( version_D2Client >= V111 ? 0x000000CF : 0x000000D6, version_D2Client >= V111 ? caller_handleClientUpdate_111 : caller_handleClientUpdate);
|
||||
//6FAB45B4 |. 0F87 D6000000 JA D2Client.6FAB4690
|
||||
//6FB4C6B4 |. 0F87 CF000000 JA D2Client.6FB4C789
|
||||
//6FB6FE84 |. 0F87 CF000000 JA D2Client.6FB6FF59
|
||||
//6FB16E04 |. 0F87 CF000000 JA D2Client.6FB16ED9
|
||||
//6FB5E894 |. 0F87 CF000000 JA D2Client.6FB5E969
|
||||
//6FB34D94 |. 0F87 CF000000 JA D2Client.6FB34E69
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Updating server.
|
||||
|
||||
@@ -15,16 +16,11 @@
|
||||
#include "infinityStash.h"
|
||||
#include "commands.h"
|
||||
|
||||
int renameIndex = 0;
|
||||
char renameString[16];
|
||||
DWORD PageSwap;
|
||||
|
||||
int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
|
||||
{
|
||||
int type = param & 0xFF;
|
||||
DWORD arg = (param & 0xFF00) >> 8;
|
||||
log_msg("Received custom message: type=%i, arg=%i\n", type, arg);
|
||||
switch(type)
|
||||
log_msg("Received custom message: %X\n", param);
|
||||
switch(param & 0xFF)
|
||||
{
|
||||
case US_UNASSIGN_STR_POINT : UnassignStrPoint( ptChar ); return 1;
|
||||
case US_UNASSIGN_ENE_POINT : UnassignEnePoint( ptChar ); return 1;
|
||||
@@ -47,36 +43,17 @@ int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
|
||||
case US_SELECT_PREVIOUS_INDEX2: selectPreviousIndex2Stash( ptChar ); return 1;
|
||||
case US_SELECT_NEXT_INDEX2 : selectNextIndex2Stash( ptChar ); return 1;
|
||||
|
||||
case US_SAVE : savePlayers( ptChar ); return 1;
|
||||
case US_STARTSAVE : savePlayers( ptChar ); return 1;
|
||||
|
||||
case US_MAXGOLD : maxGold(ptChar); return 1;
|
||||
case US_PUTGOLD : putGold(ptChar, 0); return 1;
|
||||
case US_TAKEGOLD : takeGold(ptChar, 0); return 1;
|
||||
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;
|
||||
default : return 0;
|
||||
}
|
||||
}
|
||||
|
||||
FCT_ASM( caller_handleServerUpdate)
|
||||
PUSH ESI
|
||||
PUSH EAX
|
||||
PUSH EBX
|
||||
CALL handleServerUpdate
|
||||
TEST EAX,EAX
|
||||
@@ -124,7 +101,7 @@ void Install_UpdateServer()
|
||||
log_msg("Patch D2Game for received button click message. (UpdateServer)\n");
|
||||
|
||||
// manage button click message from Client.
|
||||
mem_seek R7(D2Game, 4A702, 4AAC2, 56EA2, 54AE3, 2C773, 975C3, CC983);
|
||||
mem_seek R7(D2Game, 4A702, 4AAC2, 56EA2, 54AE3, 2C773, 975C3, CC983, 676C3);
|
||||
if (version_D2Game >= V111) {
|
||||
memt_byte( 0xC1, 0x57 ); // PUSH EDI
|
||||
memt_byte( 0xEE, 0xE8 ); // CALL caller_handleServerUpdate
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
World Event Management.
|
||||
|
||||
@@ -231,40 +232,44 @@ void Install_WorldEvent()
|
||||
log_msg("Patch D2Game for active World Event. (WorldEvent)\n");
|
||||
|
||||
// spawn DClone
|
||||
mem_seek R7(D2Game, 0000, 0000, 3F720, 4BCB1, ECF10, 41570, 25280);
|
||||
mem_seek R7(D2Game, 0000, 0000, 3F720, 4BCB1, ECF10, 41570, 25280, CFBD0);
|
||||
MEMC_REF4( V2SpawnMonster , version_D2Game >= V111b ? (DWORD)caller_spawnDClone_111b : version_D2Game == V111 ? (DWORD)caller_spawnDClone_111 : (DWORD)spawnDClone);
|
||||
//6FC6F71F |. E8 FCFAFFFF CALL D2Game.6FC6F220
|
||||
//01FCBCB0 |. E8 2BEFFFFF CALL D2Game.01FCABE0 ; \D2Game.01FCABE0
|
||||
//0205CF0F |. E8 CCF8FFFF CALL D2Game.0205C7E0 ; \D2Game.0205C7E0
|
||||
//6FC6156F |. E8 1CF6FFFF CALL D2Game.6FC60B90 ; \D2Game.6FC60B90
|
||||
//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
|
||||
mem_seek R7(D2Game, 0000, 0000, 977D0, 8E799, 92859, 84499, BFB29);
|
||||
mem_seek R7(D2Game, 0000, 0000, 977D0, 8E799, 92859, 84499, BFB29, 72BE9);
|
||||
MEMJ_REF4( D2TestFlags , verifIfWEItem);
|
||||
//6FCC77CF |. E8 32400500 CALL <JMP.&D2Common.#10707>
|
||||
//0200E798 |. E8 E9BDF7FF CALL <JMP.&D2Common.#10911>
|
||||
//02002858 |. E8 E57DF7FF CALL <JMP.&D2Common.#10303>
|
||||
//6FCA4498 |. E8 3B62F8FF CALL <JMP.&D2Common.#10989>
|
||||
//6FCDFB28 |. E8 77ADF4FF CALL <JMP.&D2Common.#10202>
|
||||
//6FC92BE8 |. E8 DD7AF9FF CALL <JMP.&D2Common.#10458>
|
||||
|
||||
// management of the WorldEvent
|
||||
mem_seek R7(D2Game, 0000, 0000, 3CE0, 51F01, C5681, EBF41, 4A791);
|
||||
mem_seek R7(D2Game, 0000, 0000, 3CE0, 51F01, C5681, EBF41, 4A791, E5F51);
|
||||
MEMC_REF4( V2GetGameByClientID , version_D2Game >= V111 ? (DWORD)WEManagement : (DWORD)caller_WEManagement_1XX);
|
||||
//6FC33CDF . E8 FC570000 CALL D2Game.6FC394E0
|
||||
//01FD1F00 |. E8 1BE60800 CALL D2Game.02060520
|
||||
//02035680 |. E8 1BF30100 CALL D2Game.020549A0
|
||||
//6FD0BF40 |. E8 1BA4FBFF CALL D2Game.6FCC6360
|
||||
//6FC6A790 |. E8 4B03FEFF CALL D2Game.6FC4AAE0
|
||||
//6FD05F50 |. E8 AB67FDFF CALL D2Game.6FCDC700
|
||||
|
||||
// add client for the WorldEvent
|
||||
mem_seek R7(D2Game, 0000, 0000, 1AEF, 3786A, 7055A, 6265F, CB0BF);
|
||||
mem_seek R7(D2Game, 0000, 0000, 1AEF, 3786A, 7055A, 6265F, CB0BF, D556F);
|
||||
MEMC_REF4( D2AddClient , version_D2Game >= V111 ? caller_addClientForWE_111 : caller_addClientForWE);
|
||||
//6FC31AEE |. E8 6D510000 CALL D2Game.6FC36C60
|
||||
//01FB7869 |. E8 32C50A00 CALL D2Game.02063DA0
|
||||
//01FE0559 |. E8 B27C0700 CALL D2Game.02058210
|
||||
//6FC8265E |. E8 FD890800 CALL D2Game.6FD0B060
|
||||
//6FCEB0BE |. E8 6DE8F7FF CALL D2Game.6FC69930
|
||||
//6FCF556E |. E8 FDFA0000 CALL D2Game.6FD05070
|
||||
|
||||
log_msg("\n");
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*==============================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
this file implements some common and useful
|
||||
function related to some Diablo II mechanisms.
|
||||
@@ -54,8 +55,8 @@ extern s_shifting shifting;
|
||||
#define PCPY ((PYPlayerData*)((DWORD)PCPlayerData+shifting.ptPYPlayerData)) //->ptPYPlayerData
|
||||
#define PCSkills (*(Skills**)((DWORD)(ptChar)+shifting.ptSkills)) //->ptSkills
|
||||
|
||||
#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) (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 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 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)))))))
|
||||
|
||||
|
||||
// Convert 4 char code in a DWORD code
|
||||
@@ -74,7 +75,9 @@ enum eFileVersion
|
||||
V111,
|
||||
V111b,
|
||||
V112,
|
||||
V113
|
||||
V113c,
|
||||
V113d,
|
||||
V114a
|
||||
};
|
||||
|
||||
extern int version_SmackW32;
|
||||
@@ -118,7 +121,19 @@ extern DWORD offset_Storm;
|
||||
extern const char* S_CloneBattles;
|
||||
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);
|
||||
int wSprintStringLastGender(LPWSTR buf, int lenbuf,int stringID);
|
||||
LPWSTR cutStringGender(LPWSTR str);
|
||||
LPWSTR setMonoString(LPWSTR str);
|
||||
|
||||
enum eStringList
|
||||
{
|
||||
STR_STATS_UNASSIGN_WITH_LIMIT=0,
|
||||
@@ -138,12 +153,47 @@ enum eStringList
|
||||
STR_TAKE_GOLD,
|
||||
STR_SHARED_GOLD_QUANTITY,
|
||||
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);
|
||||
void freeMessage(sWinMessage* msg);
|
||||
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 =================================*/
|
@@ -1,5 +1,6 @@
|
||||
/*================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
This file implements some common and useful
|
||||
function related to some Diablo II mechanisms.
|
||||
@@ -15,9 +16,9 @@
|
||||
#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 E2C(F, A, T, N) extern T* pt##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, R, N, P) typedef R (X##CALL *T##N) P; extern T##N N;
|
||||
#define C7(Z, A,B,C,D,E,F,G, 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 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 C7(Z, A,B,C,D,E,F,G,H, T, N) extern T* pt##N;
|
||||
|
||||
#include "../Commons/D2Funcs.h"
|
||||
extern DataTables* SgptDataTables;
|
||||
|
@@ -1,19 +0,0 @@
|
||||
// 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;
|
||||
}
|
||||
|
@@ -8,38 +8,24 @@
|
||||
#ifndef __EXTRAOPTIONS_H__INCLUDED
|
||||
#define __EXTRAOPTIONS_H__INCLUDED
|
||||
|
||||
extern int active_Windowed;
|
||||
extern int active_LockMouseCursor;
|
||||
extern int active_DisplayItemLevel;
|
||||
extern DWORD nbPlayersCommandByDefault;
|
||||
extern int active_alwaysRegenMapInSP;
|
||||
extern int active_RunLODs;
|
||||
extern int active_alwaysRegenMapInSP;
|
||||
extern DWORD nbPlayersCommandByDefault;
|
||||
extern int active_DisplayItemLevel;
|
||||
extern int active_AlwaysDisplayLifeMana;
|
||||
extern int active_EnabledTXTFilesWithMSExcel;
|
||||
extern int active_DisplayBaseStatsValue;
|
||||
extern int active_LadderRunewords;
|
||||
extern int active_EnabledCowPortalWhenCowKingWasKill;
|
||||
|
||||
extern int active_RemoveBorder;
|
||||
extern int active_WindowOnTop;
|
||||
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_SendPlayersCommand();
|
||||
void Install_AlwaysRegenMapInSP();
|
||||
void Install_RunLODs();
|
||||
void Install_AlwaysRegenMapInSP();
|
||||
void Install_SendPlayersCommand();
|
||||
void Install_DisplayItemLevel();
|
||||
void Install_AlwaysDisplayLifeMana();
|
||||
void Install_EnabledTXTFilesWithMSExcel();
|
||||
void Install_DisplayBaseStatsValue();
|
||||
void Install_LadderRunewords();
|
||||
void Install_EnabledCowPortalWhenCowKingWasKill();
|
||||
|
||||
void SetWindowedOptions();
|
||||
void lockMouseCursor();
|
||||
#endif
|
@@ -33,7 +33,6 @@ void selectPrevious2Stash(Unit* ptChar);
|
||||
void selectNext2Stash(Unit* ptChar);
|
||||
void selectPreviousIndex2Stash(Unit* ptChar);
|
||||
void selectNextIndex2Stash(Unit* ptChar);
|
||||
void swapStash(Unit* ptChar, DWORD page, bool toggle);
|
||||
|
||||
void selectStash(Unit* ptChar, Stash* newStash);
|
||||
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags);
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Modified by 1.13d by L'Autour.
|
||||
|
||||
Loading parameters from ini file.
|
||||
|
||||
@@ -7,7 +8,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define PLUGY_VERSION "10.01"
|
||||
#define PLUGY_VERSION "11.00"
|
||||
|
||||
#define LOG_FILE "PlugY.log"
|
||||
|
||||
|
@@ -1,12 +1,13 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by PlugY.rc
|
||||
//
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_RESOURCE_VALUE 106
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
|
@@ -1,8 +0,0 @@
|
||||
// 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
|
@@ -1,16 +0,0 @@
|
||||
// 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
|
@@ -1,8 +0,0 @@
|
||||
#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.
@@ -1,5 +1,6 @@
|
||||
/*=================================================================
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
|
||||
Patch D2gfx.dll to install PlugY.
|
||||
|
||||
@@ -7,41 +8,46 @@
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include "../Commons/VersionInfo.h"
|
||||
|
||||
const char* boxNameInstall = "Installation of PlugY, The Survival Kit Installation";
|
||||
const char* boxNameUnInstall = "Uninstall PlugY, The Survival Kit ";
|
||||
|
||||
int CALL_LOAD[7] = {0x389B,0x389B,0x3870,0x8B23,0xB423,0x8F63,0xB423};
|
||||
BYTE callNewLoad[7][6]={{0xE8,0x60,0x85,0x00,0x00,0x90},// JMP 6FA7BE00-6FA738A0 ;install loadlibrary
|
||||
int CALL_LOAD[8] = {0x389B,0x389B,0x3870,0x8B23,0xB423,0x8F63,0xB423,0xAA03};
|
||||
BYTE callNewLoad[8][6]={{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,0xD8,0x42,0x00,0x00,0x90},// JMP 6FA8CE00-6FA88B28 ;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,0xD8,0x19,0x00,0x00,0x90}};// JMP 6FA8CE00-6FA8B428 ;install loadlibrary
|
||||
BYTE callOldLoad[7][6]={{0xFF,0x15,0x3C,0xC0,0xA7,0x6F},
|
||||
{0xE8,0xD8,0x19,0x00,0x00,0x90},// JMP 6FA8CE00-6FA8B428 ;install loadlibrary
|
||||
{0xE8,0xF8,0x23,0x00,0x00,0x90}};// JMP 6FA8CE00-6FA8B428 ;install loadlibrary
|
||||
BYTE callOldLoad[8][6]={{0xFF,0x15,0x3C,0xC0,0xA7,0x6F},
|
||||
{0xFF,0x15,0x3C,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}};
|
||||
|
||||
int CALL_FREE[7] = {0x3A8C,0x3A8C,0x3A6D,0x8ACA,0xB3CA,0x8F0A,0xB3CA};
|
||||
BYTE callNewFree[7][6]={{0xE8,0xAF,0x83,0x00,0x00,0x90}, // JMP 6FA7BE40-6FA73A91 ;install freelibrary
|
||||
int CALL_FREE[8] = {0x3A8C,0x3A8C,0x3A6D,0x8ACA,0xB3CA,0x8F0A,0xB3CA,0xA9AA};
|
||||
BYTE callNewFree[8][6]={{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,0x75,0x43,0x00,0x00,0x90}, // JMP 6FA8CE44-6FA88ACF ;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,0x75,0x1A,0x00,0x00,0x90}};// JMP 6FA8CE44-6FA8B3CF ;install freelibrary
|
||||
BYTE callOldFree[7][6]={{0xFF,0x15,0x44,0xC0,0xA7,0x6F}, // CALL DWORD PTR DS:[<&KERNEL32.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[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,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,0x24,0xD1,0xA8,0x6F}};// CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>]
|
||||
|
||||
int CALLER_LOADPLUGY = 0xBE00;//6FA7BE00-6FA70000
|
||||
BYTE caller_LoadPlugY[]={
|
||||
@@ -108,9 +114,9 @@ enum eFileVersion
|
||||
V111b,
|
||||
V112,
|
||||
V113c,
|
||||
UNKNOW
|
||||
V113d
|
||||
};
|
||||
|
||||
/*
|
||||
int getVersion(FILE *dll)
|
||||
{
|
||||
int ver;
|
||||
@@ -143,7 +149,7 @@ int getVersion(FILE *dll)
|
||||
ver = UNKNOW;
|
||||
return ver;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
void updateData(int version)
|
||||
{
|
||||
@@ -164,6 +170,7 @@ void updateData(int version)
|
||||
case V111b:
|
||||
case V112:
|
||||
case V113c:
|
||||
case V113d:
|
||||
CALLER_LOADPLUGY += 0x1000;
|
||||
CALLER_FREEPLUGY += 0x1000;
|
||||
S_INIT += 0x1000;
|
||||
@@ -172,9 +179,16 @@ void updateData(int version)
|
||||
*(DWORD*)(&caller_LoadPlugY[6]) = 0x6FA8D11C;
|
||||
*(DWORD*)(&caller_LoadPlugY[18]) = 0x6FA8D11C;
|
||||
*(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[36]) = 0x6FA8D120;
|
||||
*(DWORD*)(&caller_FreePlugY[48]) = 0x6FA8D12C;
|
||||
}
|
||||
*(DWORD*)(&caller_FreePlugY[36]) = 0x6FA8D120;
|
||||
caller_LoadPlugY[13] += 0x10;
|
||||
caller_LoadPlugY[14]++;
|
||||
caller_LoadPlugY[25]++;
|
||||
@@ -192,6 +206,18 @@ void updateData(int version)
|
||||
|
||||
////////////////////////////// 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()
|
||||
{
|
||||
if (MessageBox(0,"This programm will modify the D2gfx.dll file of the current directory.\n"
|
||||
@@ -215,9 +241,12 @@ void Patch()
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int version = getVersion(dll);
|
||||
//int version = getVersion(dll);
|
||||
|
||||
if (version == UNKNOW)
|
||||
int version = GetD2Ver();
|
||||
|
||||
//if (version == UNKNOW)
|
||||
if (version == -1)
|
||||
{
|
||||
MessageBox(0,"Bad version of D2gfx.dll.\n"
|
||||
"You can try to uninstall any previous version of PlugY, The Survival Kit then retry.\n"
|
||||
@@ -341,9 +370,11 @@ void Unpatch()
|
||||
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"
|
||||
"You can try to uninstall any previous version of PlugY, The Survival Kit then retry.\n"
|
||||
|
@@ -65,8 +65,8 @@ LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,4,0
|
||||
PRODUCTVERSION 1,0,4,0
|
||||
FILEVERSION 1,0,5,0
|
||||
PRODUCTVERSION 1,0,5,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
@@ -81,10 +81,10 @@ BEGIN
|
||||
BEGIN
|
||||
BLOCK "040c04b0"
|
||||
BEGIN
|
||||
VALUE "FileVersion", "1.04"
|
||||
VALUE "FileVersion", "1.05"
|
||||
VALUE "OriginalFilename", "PlugY_Install.exe"
|
||||
VALUE "ProductName", "PlugY Installation"
|
||||
VALUE "ProductVersion", "1.04"
|
||||
VALUE "ProductVersion", "1.05"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
Binary file not shown.
@@ -269,6 +269,14 @@
|
||||
RelativePath="PlugYInstall.cpp"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="Commons"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\Commons\VersionInfo.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
@@ -278,6 +286,14 @@
|
||||
RelativePath="resource.h"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="Commons"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\Commons\VersionInfo.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
|
@@ -5,7 +5,7 @@
|
||||
; ;
|
||||
; by Yohann Nicolas ;
|
||||
; ;
|
||||
; version 10.01 ;
|
||||
; version 10.00 ;
|
||||
; ;
|
||||
;--------------------------------------------------------------------------------------;
|
||||
|
||||
@@ -28,19 +28,6 @@ ActiveCommands=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]
|
||||
;ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS
|
||||
ActiveChangeLanguage=0
|
||||
|
@@ -1,8 +1,8 @@
|
||||
; File created by Yohann NICOLAS.
|
||||
!include "LogicLib.nsh"
|
||||
; Modified by L'Autour.
|
||||
!include "MUI2.nsh"
|
||||
|
||||
!define VERSION "10.01"
|
||||
!define VERSION "11.00"
|
||||
!define D2FILES "."
|
||||
!define NAME "PlugY, The Survival Kit"
|
||||
!define MOD_DIR "Mod PlugY"
|
||||
@@ -12,14 +12,14 @@
|
||||
!define MUI_COMPONENTSPAGE_SMALLDESC
|
||||
!define MUI_HEADERIMAGE
|
||||
!define MUI_HEADERIMAGE_BITMAP "PlugYInstallerHeader.bmp"
|
||||
!define MUI_LANGDLL_REGISTRY_ROOT HKLM
|
||||
!define MUI_LANGDLL_REGISTRY_KEY "SOFTWARE\${NAME}"
|
||||
!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
|
||||
|
||||
;!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
|
||||
;!define MUI_LANGDLL_REGISTRY_KEY "SOFTWARE\${NAME}"
|
||||
;!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
|
||||
!define MUI_FINISHPAGE_NOAUTOCLOSE
|
||||
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
|
||||
!define MUI_FINISHPAGE_SHOWREADME "$(README_FILENAME)"
|
||||
!define MUI_FINISHPAGE_RUN ;"PlugY.exe"
|
||||
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchPlugY"
|
||||
!define MUI_FINISHPAGE_RUN "PlugY.exe"
|
||||
!define MUI_FINISHPAGE_RUN_NOTCHECKED
|
||||
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
|
||||
!define MUI_ABORTWARNING
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
Name "${NAME} v${VERSION}"
|
||||
OutFile "PlugY_The_Survival_Kit_v${VERSION}.exe"
|
||||
InstallDirRegKey HKLM "${REGKEY}" "InstallPath"
|
||||
InstallDirRegKey HKCU "${REGKEY}" "InstallPath"
|
||||
|
||||
;--------------------------------
|
||||
; Pages
|
||||
@@ -47,48 +47,66 @@ InstallDirRegKey HKLM "${REGKEY}" "InstallPath"
|
||||
; Languages
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
!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_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_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_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_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_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_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_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_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_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_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_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_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
|
||||
;--------------------------------
|
||||
; Initialisation
|
||||
Function .onInit
|
||||
!define MUI_LANGDLL_WINDOWTITLE "${NAME} v${VERSION}"
|
||||
!define MUI_LANGDLL_INFO "Select your language:$\nChoisissez votre langue:"
|
||||
!define MUI_LANGDLL_INFO "Select your language:$\nChoisissez votre langue:$\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>:"
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
!undef MUI_LANGDLL_WINDOWTITLE
|
||||
!undef MUI_LANGDLL_INFO
|
||||
ReadRegStr $D2Path HKLM "SOFTWARE\Blizzard Entertainment\Diablo II" "InstallPath"
|
||||
${If} $D2Path == ""
|
||||
ReadRegStr $D2Path HKCU "SOFTWARE\Blizzard Entertainment\Diablo II" "InstallPath"
|
||||
${If} $D2Path == ""
|
||||
MessageBox MB_OK $(ERROR_NO_D2_DIRECTORY_FOUND)
|
||||
Abort
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
|
||||
${If} $INSTDIR == ""
|
||||
StrLen $0 $D2Path
|
||||
@@ -107,11 +125,6 @@ Function Un.onInit
|
||||
ReadRegStr $D2Path HKLM "${REGKEY}" "PlugYDllPath"
|
||||
FunctionEnd
|
||||
|
||||
Function LaunchPlugY
|
||||
SetOutPath "$INSTDIR"
|
||||
ExecShell "" "$INSTDIR\PlugY.exe"
|
||||
FunctionEnd
|
||||
|
||||
;--------------------------------
|
||||
; Custom Page
|
||||
;Function OptionsPage
|
||||
@@ -157,7 +170,9 @@ Section "!$(SECTION_NAME_CORE)" Core
|
||||
File "${D2FILES}\PlugY_The_Survival_Kit_-_Readme.txt"
|
||||
File "${D2FILES}\PlugY_The_Survival_Kit_-_LisezMoi.txt"
|
||||
File "${D2FILES}\PlugY_The_Survival_Kit_-_Liesmich.txt"
|
||||
setOutPath "$INSTDIR\PlugY"
|
||||
;File "${D2FILES}\PlugY_The_Survival_Kit_-_<><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.txt"
|
||||
CreateDirectory "$D2Path\PlugY"
|
||||
setOutPath "$D2Path\PlugY"
|
||||
File "${D2FILES}\PlugY\EmptyPage.dc6"
|
||||
File "${D2FILES}\PlugY\PlugYDefault.ini"
|
||||
File "${D2FILES}\PlugY\PlugYFixed.ini"
|
||||
@@ -168,6 +183,8 @@ Section "!$(SECTION_NAME_CORE)" Core
|
||||
File "${D2FILES}\PlugY\TradeStash.dc6"
|
||||
File "${D2FILES}\PlugY\UnassignSkillsBtns.dc6"
|
||||
File "${D2FILES}\PlugY\UnassignStatsBtns.dc6"
|
||||
File "${D2FILES}\PlugY\PlugYLocal.dll"
|
||||
File "${D2FILES}\PlugY\PlugYLocal.ini"
|
||||
SectionEnd
|
||||
|
||||
Section "$(SECTION_NAME_DESKTOP_SHORTCUT)" DesktopShortcuts
|
||||
@@ -180,7 +197,7 @@ Section $(SECTION_NAME_STARTMENU_SHORTCUTS) MenuShortcuts
|
||||
SectionIn 1
|
||||
CreateDirectory "$SMPROGRAMS\${NAME}"
|
||||
SetOutPath $INSTDIR
|
||||
CreateShortCut "$SMPROGRAMS\${NAME}\Uninstaller.lnk" "$INSTDIR\${UNINSTALL_FILE}" "" "$INSTDIR\${UNINSTALL_FILE}" 0
|
||||
CreateShortCut "$SMPROGRAMS\${NAME}\Uninstall.lnk" "$INSTDIR\${UNINSTALL_FILE}" "" "$INSTDIR\${UNINSTALL_FILE}" 0
|
||||
CreateShortCut "$SMPROGRAMS\${NAME}\${NAME}.lnk" "$INSTDIR\PlugY.exe" "" "$INSTDIR\PlugY.exe" 0
|
||||
SectionEnd
|
||||
|
||||
@@ -192,13 +209,13 @@ Section $(SECTION_NAME_UNINSTALLER) Uninstaller
|
||||
WriteUninstaller "${UNINSTALL_FILE}"
|
||||
|
||||
; Write the installation path into the registry
|
||||
WriteRegStr HKLM "${REGKEY}" "InstallPath" $INSTDIR
|
||||
WriteRegStr HKLM "${REGKEY}" "InstallPath" "$INSTDIR"
|
||||
WriteRegStr HKLM "${REGKEY}" "PlugYDllPath" "$D2Path"
|
||||
|
||||
; Write the uninstall keys for Windows
|
||||
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}" "HelpLink" "http://plugy.free.fr"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "HelpLink" "http://djaftal.chez-alice.fr/"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayVersion" "${VERSION}"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "UninstallString" '"$INSTDIR\${UNINSTALL_FILE}"'
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "NoModify" 1
|
||||
@@ -229,11 +246,11 @@ Section "Uninstall" Uninstall
|
||||
Delete "$D2Path\RestoreD2gfxDll.exe"
|
||||
Delete "$INSTDIR\PlugY.exe"
|
||||
Delete "$INSTDIR\PlugY.log"
|
||||
Delete "$INSTDIR\BnetLog.txt"
|
||||
Delete "$INSTDIR\PlugY.ini"
|
||||
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_Readme.txt"
|
||||
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_LisezMoi.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\PlugYDefault.ini"
|
||||
Delete "$INSTDIR\PlugY\PlugYFixed.ini"
|
||||
@@ -244,6 +261,8 @@ Section "Uninstall" Uninstall
|
||||
Delete "$INSTDIR\PlugY\TradeStash.dc6"
|
||||
Delete "$INSTDIR\PlugY\UnassignSkillsBtns.dc6"
|
||||
Delete "$INSTDIR\PlugY\UnassignStatsBtns.dc6"
|
||||
Delete "$INSTDIR\PlugY\PlugYLocal.dll"
|
||||
Delete "$INSTDIR\PlugY\PlugYLocal.ini"
|
||||
RMDir "$INSTDIR\PlugY"
|
||||
Delete "$INSTDIR\${UNINSTALL_FILE}"
|
||||
RMDir "$INSTDIR"
|
||||
|
@@ -5,7 +5,7 @@
|
||||
; ;
|
||||
; by Yohann Nicolas ;
|
||||
; ;
|
||||
; version 10.01 ;
|
||||
; version 10.00 ;
|
||||
; ;
|
||||
;--------------------------------------------------------------------------------------;
|
||||
|
||||
@@ -25,19 +25,6 @@ ActiveCheckMemory=1
|
||||
ActiveAllOthersFeatures=0
|
||||
|
||||
|
||||
[WINDOWED]
|
||||
ActiveWindowed=0
|
||||
RemoveBorder=0
|
||||
WindowOnTop=0
|
||||
Maximized=0
|
||||
SetWindowPos=0
|
||||
X=0
|
||||
Y=0
|
||||
Width=0
|
||||
Height=0
|
||||
LockMouseOnStartup=0
|
||||
|
||||
|
||||
[LANGUAGE]
|
||||
;ENG|ESP|DEU|FRA|POR|ITA|JPN|KOR|SIN|CHI|POL|RUS
|
||||
ActiveChangeLanguage=0
|
||||
|
@@ -6,7 +6,7 @@
|
||||
; ;
|
||||
; by Yohann Nicolas ;
|
||||
; ;
|
||||
; version 10.01 ;
|
||||
; version 10.00 ;
|
||||
; ;
|
||||
;--------------------------------------------------------------------------------------;
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
[GENERAL]
|
||||
|
||||
[WINDOWED]
|
||||
|
||||
[LANGUAGE]
|
||||
|
||||
[SAVEPATH]
|
||||
|
1655
PlugYInstaller/PlugY/PlugYLocal.ini
Normal file
1655
PlugYInstaller/PlugY/PlugYLocal.ini
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,8 +3,8 @@
|
||||
; "PlugY, The Survival Kit" ;
|
||||
; ;
|
||||
; von Yohann Nicolas ;
|
||||
; ;
|
||||
; version 10.01 ;
|
||||
; (Modifizierung durch L'Autour) ;
|
||||
; version 11.00 ;
|
||||
; ;
|
||||
;--------------------------------------------------------------------------------------;
|
||||
|
||||
@@ -13,15 +13,13 @@ You can make a donation if you want.
|
||||
|
||||
|
||||
WARNUNG:
|
||||
- Dieses Plug-In ist NUR f<>r LOD 1.09 zu 1.13c !
|
||||
- Dieses Plug-In ist NUR f<>r LOD 1.09 zu 1.13d !
|
||||
- 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!
|
||||
- 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!
|
||||
- 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 ********
|
||||
- Disable access to Battle.net via main menu button.
|
||||
@@ -42,49 +40,27 @@ WARNUNG:
|
||||
- Man kann das "SAVE" Verzeichnis <20>ndern.
|
||||
- Man kann die Versionsanzeige im Hauptbildschirm anpassen.
|
||||
- Diablo kann nun auf Text-Dateien laden die von Microsoft Excel ge<67>ffnet sind.
|
||||
- Lokalisiert in Englisch, Franz<EFBFBD>sisch, Deutsch, Italienisch, Spanisch, Polnisch.
|
||||
- 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.
|
||||
- Lokalisiert in Englisch, Franzosisch, Deutsch, Italienisch, Spanisch, Polnisch, *Portugiesisch, Japanisch, Koreanisch, Chinesisch, Polnisch, *Russisch.
|
||||
(* - hat informelle Lokalisierung des Spiels verlangt.)
|
||||
|
||||
|
||||
v10.01 <20>nderungen :
|
||||
- Add windowed mode.
|
||||
- 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.
|
||||
v11.00 <20>nderungen :
|
||||
- PlugY funktioniert nun auch mit LoD 1.13d Versionen.
|
||||
- Voller support fur verschiedene sprachen im spiel.
|
||||
|
||||
|
||||
v10.00 <20>nderungen :
|
||||
- Disable access to Battle.net via main menu button.
|
||||
- PlugY funktioniert nun auch mit LoD 1.13c Versionen.
|
||||
- Fix shortcut in start menu
|
||||
|
||||
|
||||
v9.00 <20>nderungen :
|
||||
- PlugY funktioniert nun auch mit LoD 1.12 Versionen.
|
||||
- Ein paar Bugs behoben.
|
||||
- Eine neue M<>glichkeit zum Skills neuverteilen in Mods hinzugef<65>gt.
|
||||
|
||||
|
||||
v8.00 <20>nderungen :
|
||||
- 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.
|
||||
@@ -95,10 +71,12 @@ v8.00
|
||||
- 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.
|
||||
|
||||
|
||||
v7.01b <20>nderungen :
|
||||
- Behoben : Die Ladder-only Runenwortfeatures in den LoD-Versionen 1.11 und 1.10.
|
||||
- Behoben : Seltsame Zeichen in manchen Texten.
|
||||
|
||||
|
||||
v7.01 <20>nderungen :
|
||||
- Die Ladder-Only Runenw<6E>rter k<>nnen f<>r den Singleplayer aktivert werden.
|
||||
- Fehler bei der AI des <20>berbaals behoben
|
||||
@@ -107,6 +85,7 @@ v7.01
|
||||
- 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.
|
||||
|
||||
|
||||
V7.00 <20>nderungen :
|
||||
- PlugY funktioniert nun auch mit LoD 1.11b Versionen.
|
||||
- Den Basiswert f<>r jeden Stat im Maus<75>bertext hinzugef<65>gt.
|
||||
@@ -114,14 +93,17 @@ V7.00
|
||||
- Behoben: Einige Features blieben auch im Battle.net aktiviert
|
||||
- Italienische <20>bersetzung hinzugef<65>gt.
|
||||
|
||||
|
||||
v6.01b <20>nderungen :
|
||||
- Fehler mit dem Popups der Statuspunktvergabe-Buttons behoben.
|
||||
|
||||
|
||||
v6.01 <20>nderungen :
|
||||
- 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.
|
||||
- Fehler in der Versionsanzeige wegen einem Konflikt mit D2Mod behoben.
|
||||
|
||||
|
||||
V6.00 <20>nderungen :
|
||||
- PlugY funktioniert nun auch mit LoD 1.11 Versionen
|
||||
- Freischaltung des <20>ber-Quests ausserhalb von der Realm (LoD 1.11 only).
|
||||
@@ -129,12 +111,14 @@ V6.00
|
||||
- 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).
|
||||
|
||||
|
||||
v5.06 <20>nderungen :
|
||||
- Kn<4B>pf for gemeinsamen Goldvorrat hinzugef<65>gt.
|
||||
- Gemeinsamer Goldvorrat in Multiplayer hinzugef<65>gt.
|
||||
- Befehl "/DisplayLifeMana" ersetzt durch "/dlm".
|
||||
- Diverse Fehler behoben.
|
||||
|
||||
|
||||
v5.05 <20>nderungen :
|
||||
- Standard Hintergrundfarbe im Status Interface ge<67>ndert
|
||||
- Gemeinsames Gold per Kommando hinzugef<65>gt.
|
||||
@@ -142,20 +126,24 @@ v5.05
|
||||
- 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
|
||||
|
||||
|
||||
v5.04 <20>nderungen :
|
||||
- Behoben : Status/Skill Punkte per Levelup bug.
|
||||
- Behoben : Multiplayer bugs.
|
||||
- PlugY/PlugYDefault.ini sind jetzt vollst<73>ndig.
|
||||
|
||||
|
||||
v5.03 <20>nderungen :
|
||||
- Behoben : Bug der manchmal zwischen den Hardcore und Softcore gemeinsamen Truhen gewechselt hat.
|
||||
- Farb<72>nderung der Schrift in den Extra-Seiten m<>glich.
|
||||
- Standartwerte in den Extra-Seiten ge<67>ndert.
|
||||
- EnabledTXTFilesWhenMSExcelOpenIt in der PlugY.ini ist nun standartm<74><6D>ig aktiviert.
|
||||
|
||||
|
||||
v5.02 <20>nderungen :
|
||||
- Behoben : Bug der das Verschwinden von Gegenst<73>nden hervorgerufen hat.
|
||||
|
||||
|
||||
v5.01 <20>nderungen :
|
||||
- Behoben : Gr<47><72>ere bugs bei der gemeinsamen Truhe.
|
||||
- Behoben : ActiveLogFile ist jetzt in der PlugY.ini standartm<74><6D>ig deaktiviert.
|
||||
@@ -176,12 +164,14 @@ v5.00
|
||||
- Behoben : Das Erscheinen des Diablo Klones am Spielstart.
|
||||
- Behoben : Andere kleine Bugs.
|
||||
|
||||
|
||||
v4.04 <20>nderungen :
|
||||
- Behoben : Anzeige-bug wenn StatPerLevelUp aktiviert war.
|
||||
- Behoben : Fehler bei der Speicherprozedur wenn die Festplatte voll war.
|
||||
- Neues Konfigurations-System f<>r Modder.
|
||||
- Man kann ausw<73>hlen, ob die Mana und Lebens Anzeige immer <20>ber den Kugeln erscheint.
|
||||
|
||||
|
||||
v4.03 <20>nderungen
|
||||
- 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)
|
||||
@@ -191,9 +181,11 @@ v4.03
|
||||
- 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
|
||||
|
||||
|
||||
v4.02b <20>nderungen :
|
||||
- Behoben : Alle Funktionen bleiben im offenen Battle.net eingeschaltet.
|
||||
|
||||
|
||||
v4.02 <20>nderungen :
|
||||
- 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.
|
||||
@@ -223,24 +215,29 @@ v4.00
|
||||
- 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
|
||||
|
||||
|
||||
v3.02 <20>nderungen :
|
||||
- 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 es erlaubte Werte zu setzen, ohne das Fertigkeiten pro LevelUp aktiviert waren.
|
||||
|
||||
|
||||
v3.01 <20>nderungen :
|
||||
- Man kann die Statuspunkte <20>ndern, die man beim LevelUp bekommt.
|
||||
- Problem mit fehlerhafter Menge der Fertigkeitspunkte beim zur<75>cksetzen behoben.
|
||||
- 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".
|
||||
|
||||
|
||||
v3.00 <20>nderungen :
|
||||
- Lokaler World Event !
|
||||
- Zur<75>cksetzen von Fertigkeitspunkten
|
||||
|
||||
|
||||
v2.05 <20>nderungen :
|
||||
- Wichtiger Ffix : Alle Fehler die einen Start von Diablo2 verhinderten sind entfernt
|
||||
|
||||
|
||||
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)
|
||||
- Es wird eine Fehlermeldung angezeigt, anstelle eines Absturzes, wenn PlugY.dll nicht gefunden werden kann
|
||||
@@ -248,9 +245,11 @@ v2.04
|
||||
- Einen Fehler bez<65>glich der verschwindenden Kn<4B>pfe behoben
|
||||
- Abspeicher-Problem unter Win95/98/Me behoben
|
||||
|
||||
|
||||
v2.03b <20>nderungen :
|
||||
- Anzeige der PlugY Version nur im Hauptbild
|
||||
|
||||
|
||||
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.
|
||||
- Kein Absturz des Host Spiels, wenn ein Charakter nicht ins Spiel kann.
|
||||
@@ -258,6 +257,7 @@ v2.03
|
||||
- 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.
|
||||
|
||||
|
||||
v2.02 <20>nderungen :
|
||||
- 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.
|
||||
@@ -265,10 +265,12 @@ v2.02
|
||||
- Die Goldkistenerweiterung wird bei Realm Spielen automatisch abgeschaltet.
|
||||
- Index Button Fehler behoben.
|
||||
|
||||
|
||||
v.2.01 <20>nderungen
|
||||
- Fertigkeitsfehler beim LevelUp behoben.
|
||||
- Anzeigefehler im Hauptbildschirm behoben.
|
||||
|
||||
|
||||
v2.00 <20>nderungen :
|
||||
- Deutsche Lokalisierung hinzugef<65>gt.
|
||||
- Die Anzahl der Fertigkeitspunkte beim erreichen des n<>chsten Levels ist einstellbar.
|
||||
@@ -285,16 +287,19 @@ v2.00
|
||||
- Der Fehler mir carry1 Gegenst<73>nden wurde behoben (Uniques die nur einaml getragen werden d<>rfen)
|
||||
- Weitere kleine Verbesserungen eingebaut.
|
||||
|
||||
|
||||
v1.03 <20>nderungen :
|
||||
- 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 behoben, der beim laden mit vor LOD 1.10 generierten Charakteren auftrat.
|
||||
(zB: ShadowMaster Charakter oder 1.09 oder D2Classic Charakter)
|
||||
|
||||
|
||||
v1.02 <20>nderungen :
|
||||
- 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).
|
||||
|
||||
|
||||
v1.01 <20>nderungen :
|
||||
- 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.
|
||||
@@ -304,6 +309,7 @@ v1.01
|
||||
(Man kann ihn weiterhin hinzuf<75>gen, sollte aber wissen, was man tut...)
|
||||
- Paket von .rar auf .zip umgestellt
|
||||
|
||||
|
||||
v1.00 Funktionen (es k<>nnen alle einfach ein- und ausgeschaltet werden) :
|
||||
- Man kann den "Save"-Pfad anpassen.
|
||||
- Man kann jeden MOD starten, ohne die gesicherten Spielst<73>nde verschieben zu m<>ssen.
|
||||
@@ -321,6 +327,8 @@ v1.00 Funktionen (es k
|
||||
- PlugY.exe
|
||||
- PlugY.dll (in Diablo II directory)
|
||||
- PlugY.ini
|
||||
- Plugy\PlugYLocal.dll
|
||||
- Plugy\PlugYLocal.ini
|
||||
- PlugY\PlugYFixed.ini
|
||||
- PlugY\PlugYDefault.ini
|
||||
- PlugY\EmptyPage.dc6
|
||||
@@ -338,6 +346,11 @@ v1.00 Funktionen (es k
|
||||
|
||||
|
||||
******** 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 :
|
||||
- Entpacke alle Dateien in dein Diablo Verzeichnis.
|
||||
- Kopiere die PlugY.ini und die PlugY.exe in das Verzeichnis in dem dein Mod ist.
|
||||
@@ -349,6 +362,8 @@ Du hast LoD in folgendem Verzeichnis installiert : C:\Games\Diablo II\
|
||||
Der Mod und PlugY befindet sich hier : D:\D2Mod\MyMod\
|
||||
Dann m<>ssen die Einstellungen wie folgt lauten :
|
||||
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\SharedGoldBtns.dc6
|
||||
C:\Games\Diablo II\PlugY\StashBtns.dc6
|
||||
@@ -525,30 +540,6 @@ Nur Ausschalten wenn du weist was du machst.
|
||||
- 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]
|
||||
Wechselt die ausgew<65>hlte Sprache
|
||||
Ihr m<>sst die Dateien der Sprache besitzen!!!
|
||||
@@ -768,6 +759,10 @@ Zur Korrektur der deutschen
|
||||
* Deutch : ChaosEnergy, TheMasterCaster.
|
||||
* Italienisch : ItalianPlayer
|
||||
* Spanish : Acrerune
|
||||
* Polnisch : Serdel
|
||||
|
||||
;--------------------------------------------------------------------------------------;
|
||||
* Polnisch : Serdel + https://translate.google.com
|
||||
* Russisch: L'Autour.
|
||||
* Portugiesisch: https://translate.google.com
|
||||
* Japanisch: https://translate.google.com
|
||||
* Koreanisch: https://translate.google.com
|
||||
* Chinesisch: https://translate.google.com
|
||||
~~~~~~~~~~~~.
|
@@ -3,8 +3,8 @@
|
||||
; "PlugY, The Survival Kit" ;
|
||||
; ;
|
||||
; par Yohann Nicolas ;
|
||||
; ;
|
||||
; version 10.01 ;
|
||||
; (modification par L'Autour) ;
|
||||
; version 11.00 ;
|
||||
; ;
|
||||
;--------------------------------------------------------------------------------------;
|
||||
|
||||
@@ -14,7 +14,7 @@ Vous pouvez y faire un don si vous le souhaitez.
|
||||
|
||||
|
||||
******** ATTENTION ********
|
||||
- Ce plugin fonctionne sur LoD version 1.09 <20> 1.13c et sur leurs mods.
|
||||
- Ce plugin fonctionne sur LoD version 1.09 <20> 1.13d et sur leurs mods.
|
||||
- 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.
|
||||
- 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 ********
|
||||
- D<>sactive l'acc<63>s <20> Battle.net
|
||||
- Espace de stockage infini dans le coffre !
|
||||
- Espace de stockage partag<61> dans le coffre !
|
||||
- Espace de stockage infini dans le coffre (jusqu'<27> 4 294 967 296 pages personnelles!)
|
||||
- Espace de stockage partag<61> dans le coffre (jusqu'<27> 4 294 967 296 pages partag<61>es aussi!)
|
||||
- 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 !
|
||||
- Permet d'ouvrir le portail vers le Cow Level m<>me quand on a tuer le Cow King dans cette difficult<6C>.
|
||||
@@ -46,48 +46,23 @@ 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).
|
||||
- Affiche la valeur courante des caracs (sans les bonus magiques).
|
||||
- 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 v10.01 :
|
||||
- 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 v11.00 :
|
||||
- PlugY fonctionne aussi la version 1.13c de LOD.
|
||||
- Plein soutien en faveur d'autres langues dans le jeu.
|
||||
|
||||
Changements apport<72>s par la v10.00 :
|
||||
- D<>sactive l'acc<63>s <20> Battle.net par le bouton du menu principal.
|
||||
- PlugY fonctionne aussi la version 1.13c de LOD.
|
||||
- Corrige le raccourci dans le menu d<>marrer.
|
||||
|
||||
|
||||
Changements apport<72>s par la v9.00 :
|
||||
- PlugY fonctionne aussi la version 1.12 de LOD.
|
||||
- Corrige diff<66>rents bugs.
|
||||
- Ajout d'une option pour le d<>assignement des skill dans les mods.
|
||||
|
||||
|
||||
Changements apport<72>s par la v8.00 :
|
||||
- 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>.
|
||||
@@ -98,13 +73,16 @@ 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.
|
||||
- Remove the "check load memory failed" message when D2gfx.dll was patched.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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 les caract<63>res <20>tranges de quelques texts.
|
||||
|
||||
|
||||
Changements apport<72>s par la v7.01 :
|
||||
- Active les mots runiques du ladder en dehors des royaumes.
|
||||
- Corrige le bug avec l'IA de Uber Baal.
|
||||
@@ -113,6 +91,7 @@ Changements apport
|
||||
- Ajout d'un ex<65>cutable pour lancer Plugy (plus aucun fichier de LoD modifi<66>). (RAPPEL)
|
||||
- Traduction en espagnol et polonais.
|
||||
|
||||
|
||||
Changements apport<72>s par la v7.00 :
|
||||
- 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>).
|
||||
@@ -121,14 +100,17 @@ Changements apport
|
||||
- Corrige les fonctions qui restais active sur Battle.net.
|
||||
- Traduction en italien.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
- 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.
|
||||
|
||||
|
||||
Changements apport<72>s par la v6.00 :
|
||||
- PlugY fonctionne aussi la version 1.11 de LOD.
|
||||
- Active la Uber Quest hors des Royaumes. (uniquement LoD 1.11).
|
||||
@@ -136,12 +118,14 @@ Changements apport
|
||||
- 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).
|
||||
|
||||
|
||||
Changements apport<72>s par la v5.06 :
|
||||
- Ajoute des bouttons pour le partage de l'or.
|
||||
- Active l'or partag<61> en multijoueur.
|
||||
- La commande "/DisplayLifeMana" est remplac<61>e par "/dlm".
|
||||
- Corrige quelques bugs.
|
||||
|
||||
|
||||
Changements apport<72>s par la v5.05 :
|
||||
- Corrige les couleurs par d<>fauts dans l'interface des stats.
|
||||
- Ajoute de l'or partag<61>e via des commandes.
|
||||
@@ -149,25 +133,30 @@ 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.
|
||||
- Correction des bugs du multiplayer (r<><72>criture de ces fonctions).
|
||||
|
||||
|
||||
Changements apport<72>s par la v5.04 :
|
||||
- Corrige Stat/Skill points par levelup
|
||||
- Corrige des bugs en Multiplayer.
|
||||
- PlugY/PlugYDefault.ini complet<65>.
|
||||
|
||||
|
||||
Changements apport<72>s par la v5.03 :
|
||||
- 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.
|
||||
- Change les valeurs par d<>faut des nouvelles pages de stats.
|
||||
- Mets EnabledTXTFilesWhenMSExcelOpenIt=1 dans le fichier PlugY.ini.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Changements apport<72>s par la v5.01 :
|
||||
- Corrige les bugs importants dans la gestion du stash.
|
||||
- Remets ActiveLogFile=0 par d<>faut dans le fichier PlugY.ini.
|
||||
- Corrige : Bug quand le stash partag<61> est d<>sactiv<69>.
|
||||
|
||||
|
||||
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 peut lancer D2Mod.dll.
|
||||
@@ -182,12 +171,14 @@ Changements apport
|
||||
- Corrige la g<>n<EFBFBD>ration de DiabloClone au d<>marrage d'une nouvelle partie.
|
||||
- Corrige plusieurs autres bugs.
|
||||
|
||||
|
||||
Changements apport<72>s par la v4.04 :
|
||||
- Corrige le bug d'affichage quand statPerLevelUp est activ<69>
|
||||
- Corrige le bug de sauvegarde quand le disque dur est plein.
|
||||
- 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.
|
||||
|
||||
|
||||
Changements apport<72>s par la v4.03 :
|
||||
- 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).
|
||||
@@ -195,11 +186,13 @@ Changements apport
|
||||
- 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).
|
||||
- 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 :
|
||||
- Les fonctionnalit<69>s restent activ<69>es sur Battle.net ouvert.
|
||||
|
||||
|
||||
Changements apport<72>s par la v4.02 :
|
||||
- Corrige le conflit avec Battle.net (BigStash d<>sactiv<69> sur les royaumes)
|
||||
- Corrige l'oublie du "d" de "SeparateHardcoreStash=1" de PlugY.ini
|
||||
@@ -207,13 +200,16 @@ Changements apport
|
||||
- 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.
|
||||
|
||||
|
||||
Changements apport<72>s par la v4.01 :
|
||||
- Corrige le bug du MSVCR70.dll non trouv<75>.
|
||||
- Ajouts d'infos sur la 2<>me page de stats.
|
||||
|
||||
|
||||
Changements apport<72>s par la v4.00b :
|
||||
- Corrige le bug du MSVCR70.dll non trouv<75>.
|
||||
|
||||
|
||||
Changements apport<72>s par la v4.00 :
|
||||
- Meilleure optimisation du code.
|
||||
- Ajoute des pages suppl<70>mentaires pour l'affichage de plus de statistiques du perso comme le %MF.
|
||||
@@ -231,17 +227,20 @@ Changements apport
|
||||
- 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.
|
||||
|
||||
|
||||
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 : 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.
|
||||
|
||||
|
||||
Changements apport<72>s par la v3.01 :
|
||||
- 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.
|
||||
- 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.
|
||||
|
||||
|
||||
Changements apport<72>s par la v3.00 :
|
||||
- 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.
|
||||
@@ -249,6 +248,7 @@ Changements apport
|
||||
- On peut changer le nom du fichier de sauvegarde.
|
||||
- L'affichage du numero de page pour le coffre partag<61> est en rouge maintenant.
|
||||
|
||||
|
||||
Changements apport<72>s par la v2.05 :
|
||||
- Correction importante : Le bug qui faisais que D2 ne d<>marrais est d<>finitivement corrig<69>.
|
||||
|
||||
@@ -279,6 +279,8 @@ Changements apport
|
||||
- PlugY.exe
|
||||
- PlugY.dll (in Diablo II directory)
|
||||
- PlugY.ini
|
||||
- Plugy\PlugYLocal.dll
|
||||
- Plugy\PlugYLocal.ini
|
||||
- PlugY\PlugYFixed.ini
|
||||
- PlugY\PlugYDefault.ini
|
||||
- PlugY\EmptyPage.dc6
|
||||
@@ -296,13 +298,19 @@ Changements apport
|
||||
|
||||
|
||||
******** 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 :
|
||||
- Suivre les directives de l'installeur.
|
||||
|
||||
note : Vous pouvez choisir le r<>pertoire de "Diablo II" comme r<>pertoire d'installation.
|
||||
|
||||
Installation dans un autre mod
|
||||
- Copier PlugY.ini, PlugY.exe et PlugY folder (+son sontenu) dans le r<>pertoire du mod cibl<62>.
|
||||
- Copier PlugY.ini, PlugY.exe er PlugY folder (+son sontenu) dans le r<>pertoire du mod cibl<62>.
|
||||
- Editer PlugY.ini pour configurer les options (voir section plus bas).
|
||||
- Lancer le jeu PlugY.exe et amusez-vous :)
|
||||
|
||||
@@ -311,10 +319,12 @@ note : Vous pouvez d
|
||||
|
||||
Exemple :
|
||||
Si vous avez install<6C> Lord of Destruction ici : C:\Jeux\Diablo II\Diablo II.exe
|
||||
Et que le mod cibl<62> se trouve dans : D:\D2Mod\MyMod\
|
||||
Et qu'un second mod se trouve dans : D:\D2Mod\MyMod2\
|
||||
Et que le mod cibl<62> se trouve l<EFBFBD> : D:\D2Mod\MyMod\
|
||||
Et que un second mod se trouve l<EFBFBD> : D:\D2Mod\MyMod2\
|
||||
Alors la configuration classique est ceci :
|
||||
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\PlugYFixed.ini
|
||||
D:\D2Mod\MyMod\PlugY\PlugYDefault.ini
|
||||
@@ -489,30 +499,6 @@ Active les fonctions cach
|
||||
- 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]
|
||||
Change la langue du jeu.
|
||||
Vous devez avoir les fichiers de langue choisi.
|
||||
@@ -722,6 +708,10 @@ PS : D
|
||||
* Allemand : ChaosEnergy, TheMasterCaster.
|
||||
* Italien : ItalianPlayer
|
||||
* Espagnol : Acrerune
|
||||
* Polonais : Serdel
|
||||
|
||||
;--------------------------------------------------------------------------------------;
|
||||
* Polonais : Serdel + https://translate.google.com
|
||||
* Russian: Around.
|
||||
* Portuguese: https://translate.google.com
|
||||
* Japanese: https://translate.google.com
|
||||
* Korean: https://translate.google.com
|
||||
* Chinese: https://translate.google.com
|
||||
~~~~~~~~~~~~
|
@@ -3,30 +3,28 @@
|
||||
; "PlugY, The Survival Kit" ;
|
||||
; ;
|
||||
; by Yohann Nicolas ;
|
||||
; ;
|
||||
; version 10.01 ;
|
||||
; (modification by L'Autour) ;
|
||||
; version 11.00 ;
|
||||
; ;
|
||||
;--------------------------------------------------------------------------------------;
|
||||
|
||||
Official website : http://plugy.free.fr
|
||||
Official website for version 10.00: http://plugy.free.fr
|
||||
You can make a donation if you want.
|
||||
|
||||
|
||||
******** WARNING ********
|
||||
- This plug-in works with LoD version 1.09 to 1.13c and mods based on.
|
||||
- This plug-in works with LoD version 1.09 to 1.13d and mods based on.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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 ********
|
||||
- Disable access to Battle.net.
|
||||
- Infinite storage space in the stash.
|
||||
- Shared storage space in the stash.
|
||||
- Infinite storage space in the stash (up to 4,294,967,296 personal pages!)
|
||||
- Shared storage space in the stash (up to 4,294,967,296 shared pages too!)
|
||||
- Enabled the ladder only runewords out of realms.
|
||||
- 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.
|
||||
@@ -42,50 +40,27 @@ You can make a donation if you want.
|
||||
- Always display Mana and Life values above the globes.
|
||||
- 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.
|
||||
- Can launch game in windowed mode with some options (lock mouse/resize/on top/noborder).
|
||||
- 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.
|
||||
- PlugY is localized in English, French, German, Italian, Spanish, Polish, *Portuguese, Japanese, Korean, Chinese, Polish, *Russian.
|
||||
(* - required informal localization of the game.)
|
||||
|
||||
|
||||
v10.01 changes :
|
||||
- Add windowed mode.
|
||||
- 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.
|
||||
v11.00 changes :
|
||||
- PlugY works for 1.13d version of LoD too.
|
||||
- A complete support of all languages in game.
|
||||
|
||||
|
||||
v10.00 changes :
|
||||
- Disable access to Battle.net via main menu button.
|
||||
- PlugY works for 1.13c version of LoD too.
|
||||
- Fix shortcut in start menu
|
||||
|
||||
|
||||
v9.00 changes :
|
||||
- PlugY works for 1.12 version of LoD too.
|
||||
- Fix somes bugs.
|
||||
- Add option for unassign skill for mods.
|
||||
|
||||
|
||||
v8.00 changes :
|
||||
- Easier installation : New installer.
|
||||
- Can open Cow Level Portal even when player have kill the Cow King in that difficulty.
|
||||
@@ -96,10 +71,12 @@ 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.
|
||||
- Remove the "check load memory failed" message when D2gfx.dll was patched.
|
||||
|
||||
|
||||
v7.01b changes :
|
||||
- Fix the ladder only runewords features in versions 1.11 and 1.10 of LoD.
|
||||
- Fix wierd characters in some text.
|
||||
|
||||
|
||||
v7.01 changes :
|
||||
- Enabled the ladder only runewords out of realms.
|
||||
- Fixed Uber Baal AI.
|
||||
@@ -108,6 +85,7 @@ v7.01 changes :
|
||||
- Add an executable to launch PlugY (no more LoD's files modified) (RECALL)
|
||||
- Translation into spanish and polish.
|
||||
|
||||
|
||||
v7.00 changes :
|
||||
- PlugY works for 1.11b version of LoD too.
|
||||
- Add an executable to launch PlugY (no more LoD's files modified)
|
||||
@@ -116,14 +94,17 @@ v7.00 changes :
|
||||
- Fix features which stayed enabled on Battle.net.
|
||||
- Translation into italian.
|
||||
|
||||
|
||||
v6.01b changes :
|
||||
- Bug fix with the display of popup on stat assignment buttons.
|
||||
|
||||
|
||||
v6.01 changes :
|
||||
- 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.
|
||||
- Fix conflict with D2Mod for the version display.
|
||||
|
||||
|
||||
v6.00 changes :
|
||||
- PlugY works for 1.11 version of LoD too !
|
||||
- Enabled Uber Quest off realm (LoD 1.11 only).
|
||||
@@ -131,12 +112,14 @@ v6.00 changes :
|
||||
- Fixed some minor bugs and added some minor improvements.
|
||||
- Added command "/save" to save the game without exit (LoD 1.11 only).
|
||||
|
||||
|
||||
v5.06 changes :
|
||||
- Added buttons for shared gold.
|
||||
- Enabled shared gold in multiplayer.
|
||||
- Command "/DisplayLifeMana" is replaced by "/dlm".
|
||||
- Fixed some bugs.
|
||||
|
||||
|
||||
v5.05 changes :
|
||||
- Fixed bad default color in interface stats.
|
||||
- Added Shared gold via commands.
|
||||
@@ -144,25 +127,30 @@ v5.05 changes :
|
||||
- Display green set item name in popup when it's in the shared stash.
|
||||
- Fixed multiplayer bugs by redoing multiplayer procedure.
|
||||
|
||||
|
||||
v5.04 changes :
|
||||
- Fixed : Stat/Skill points per level-up bug.
|
||||
- Fixed : Multiplayer bugs.
|
||||
- PlugY/PlugYDefault.ini completed.
|
||||
|
||||
|
||||
v5.03 changes :
|
||||
- Fixed : Bug which sometimes swaps Hardcore and Softcore shared stash.
|
||||
- Added color on extra stats page.
|
||||
- Changed default values on extra stats page.
|
||||
- Set EnabledTXTFilesWhenMSExcelOpenIt=1 in PlugY.ini file.
|
||||
|
||||
|
||||
v5.02 changes :
|
||||
- Fixed : Previous bug fix which caused items to disappear.
|
||||
|
||||
|
||||
v5.01 changes :
|
||||
- Fixed : Major bugs in stash management.
|
||||
- Fixed : Set back PlugY.ini with ActiveLogFile=0 by default.
|
||||
- Fixed : bug when shared stash is disabled.
|
||||
|
||||
|
||||
v5.00 changes :
|
||||
- PlugY works for 1.09, 1.09b, 1.09d versions of LoD, including mods based on these releases !
|
||||
- PlugY can load D2Mod.dll.
|
||||
@@ -177,12 +165,14 @@ v5.00 changes :
|
||||
- Fixed : The spawn of DiabloClone at starting of a new game
|
||||
- Fixed : Some other small bugs.
|
||||
|
||||
|
||||
v4.04 changes :
|
||||
- Fixed : Display bug when statPerLevelUp enabled.
|
||||
- Fixed : Bug in saving procedure when the disk is full.
|
||||
- New configuration system for modders.
|
||||
- Always display Mana and Life values above the globes.
|
||||
|
||||
|
||||
v4.03 changes :
|
||||
- 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).
|
||||
@@ -192,6 +182,7 @@ v4.03 changes :
|
||||
- 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.
|
||||
|
||||
|
||||
v4.02b changes :
|
||||
- Fixed : Features stay enabled in open Battle.net
|
||||
|
||||
@@ -203,13 +194,16 @@ v4.02 changes :
|
||||
- Fixed : Item level display enabled correctly for all configurations of PlugY.
|
||||
- Added data in the extra stats page.
|
||||
|
||||
|
||||
v4.01 changes :
|
||||
- Fixed : NbPlayers always set to 8 when active.
|
||||
- Added data in the extra stats page.
|
||||
|
||||
|
||||
v4.00b changes :
|
||||
- Fixed : MSVCR70.dll not found bug.
|
||||
|
||||
|
||||
v4.00 changes :
|
||||
- Better optimization of the code.
|
||||
- Added some pages for displaying more characters stats like %MF.
|
||||
@@ -227,17 +221,20 @@ v4.00 changes :
|
||||
- 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.
|
||||
|
||||
|
||||
v3.02 changes :
|
||||
- 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 : You can change parameters of World Event without activating skill per level up.
|
||||
|
||||
|
||||
v3.01 changes :
|
||||
- Change the number of stats points gained when player gains a level.
|
||||
- Fixed bugs which give extra points when skills points are unassigned.
|
||||
- Added parameters for the WorldEvent in configuration file.
|
||||
- By default, World Event only SHOWS "X SOJ Sold" in hell difficulty.
|
||||
|
||||
|
||||
v3.00 changes :
|
||||
- Local World Event for singleplayer and multiplayer off-realm !
|
||||
- Unassign assigned skills points.
|
||||
@@ -245,9 +242,11 @@ v3.00 changes :
|
||||
- Can change the filename of the shared savefile.
|
||||
- Shared stash page number display are in red now.
|
||||
|
||||
|
||||
v2.05 changes :
|
||||
- major fix : bugs which cause D2 not to start are finally removed.
|
||||
|
||||
|
||||
v2.04 changes :
|
||||
- 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.
|
||||
@@ -255,9 +254,11 @@ v2.04 changes :
|
||||
- Fixed bug display of buttons.
|
||||
- Fixed win95/98/Me saving.
|
||||
|
||||
|
||||
v2.03b changes :
|
||||
- Show PlugY version only in main screen.
|
||||
|
||||
|
||||
v2.03 changes :
|
||||
- Major fix : Correct and secure the saving procedure.
|
||||
- No more crash of the host game when a character is unable to enter the game.
|
||||
@@ -265,6 +266,7 @@ v2.03 changes :
|
||||
- Change version printing on main screen (change color & PlugY version in right corner)
|
||||
- Character without PlugY can join game host with PlugY enabled.
|
||||
|
||||
|
||||
v2.02 changes :
|
||||
- PlugY doesn't use D2win.dll to launch PlugY anymore.
|
||||
- PlugY includes a patcher/unpatcher for editing D2gfx.dll to launch PlugY.
|
||||
@@ -272,10 +274,12 @@ v2.02 changes :
|
||||
- The infinite storage sytem is automatically disabled on a realm game.
|
||||
- Fixed index button bugs.
|
||||
|
||||
|
||||
v2.01 changes :
|
||||
- Fixed skill per level up bug
|
||||
- Fixed bug display of text in the main menu
|
||||
|
||||
|
||||
v2.00 changes :
|
||||
- Localized in German.
|
||||
- Change the number of Skills points gained when player gains a level.
|
||||
@@ -292,6 +296,7 @@ v2.00 changes :
|
||||
- Removed the bug of "carry 1"
|
||||
- Add other small improvements... :)
|
||||
|
||||
|
||||
v1.03 changes :
|
||||
- Added French readme and ini files.
|
||||
- Removed bugs in D2Classic game (there is no multipage, it's not a bug)
|
||||
@@ -301,10 +306,12 @@ v1.03 changes :
|
||||
* must read : You can start any mods without moving SAVES files
|
||||
(you need to move dll files with classic script).
|
||||
|
||||
|
||||
v1.02 changes :
|
||||
- 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).
|
||||
|
||||
|
||||
v1.01 changes :
|
||||
- Localized for french version (wait for an french readme.txt)
|
||||
- Changed filename from "PlugY, The Survival Kit.ini" to "PlugY,The_Survival_Kit".
|
||||
@@ -314,6 +321,7 @@ v1.01 changes :
|
||||
(you can add it if you want but need to know what are you doing...)
|
||||
- Released in .zip file instead of .rar
|
||||
|
||||
|
||||
v1.00 features (can all be easily enabled or disabled) :
|
||||
- You can change the save path directory.
|
||||
- You can start any mods without moving saves files.
|
||||
@@ -325,13 +333,15 @@ v1.00 features (can all be easily enabled or disabled) :
|
||||
|
||||
|
||||
******** CONTENTS ********
|
||||
19 files, 1 folder :
|
||||
21 files, 1 folder :
|
||||
- PlugY_The_Survival_Kit_-_Readme.txt
|
||||
- PlugY_The_Survival_Kit_-_LisezMoi.txt
|
||||
- PlugY_The_Survival_Kit_-_Liesmich.txt
|
||||
- PlugY.exe
|
||||
- PlugY.dll (in Diablo II directory)
|
||||
- PlugY.ini
|
||||
- Plugy\PlugYLocal.dll
|
||||
- Plugy\PlugYLocal.ini
|
||||
- PlugY\PlugYFixed.ini
|
||||
- PlugY\PlugYDefault.ini
|
||||
- PlugY\EmptyPage.dc6
|
||||
@@ -349,6 +359,12 @@ v1.00 features (can all be easily enabled or disabled) :
|
||||
|
||||
|
||||
******** 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 :
|
||||
- Follow directive installer.
|
||||
|
||||
@@ -367,6 +383,8 @@ 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\
|
||||
So the new installation is :
|
||||
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\PlugYFixed.ini
|
||||
D:\D2Mod\MyMod\PlugY\PlugYDefault.ini
|
||||
@@ -538,14 +556,17 @@ Following are default values, between {} are some examples values with descripti
|
||||
- ActivePlugin=0 {0:Don't load any features; 1:Plugin enabled}
|
||||
|
||||
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}
|
||||
|
||||
Create a log file "PlugY.log" in the current directory.
|
||||
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}
|
||||
|
||||
Load dll of a specific mod for used PlugY in same time.
|
||||
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}
|
||||
- DllToLoad2= {(empty): Same as DlltoLoad}
|
||||
|
||||
@@ -563,30 +584,6 @@ Activate hidden or not-finished feature. (don't use it)
|
||||
- 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]
|
||||
Change the selected language.
|
||||
You must have files of the selected language.
|
||||
@@ -668,7 +665,6 @@ Following are default values, between {} are some examples values with descripti
|
||||
|
||||
|
||||
[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.
|
||||
Following are default values, between {} are some examples values with descriptions :
|
||||
- ActiveStatPerLevelUp=0 {0:Disabled; 1:Enabled}
|
||||
@@ -688,7 +684,6 @@ Following are default values, between {} are some examples values with descripti
|
||||
|
||||
|
||||
[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.
|
||||
Following are default values, between {} are some examples values with descriptions :
|
||||
- ActiveSkillPerLevelUp=0 {0:Disabled; 1:Enabled}
|
||||
@@ -794,10 +789,14 @@ PS : Sorry for english faults ;)
|
||||
- PhrozenKeep team for all stuff they shared for us (including mine ;)
|
||||
- Translation :
|
||||
* English : Yohann, Jurica.
|
||||
* French : Yohann
|
||||
* French : Yohann.
|
||||
* German : ChaosEnergy, TheMasterCaster.
|
||||
* Italian : ItalianPlayer
|
||||
* Spanish : Acrerune
|
||||
* Polish : Serdel
|
||||
|
||||
;--------------------------------------------------------------------------------------;
|
||||
* Polish : Serdel + https://translate.google.com
|
||||
* Russian: L'Autour.
|
||||
* Portuguese: https://translate.google.com
|
||||
* Japanese: https://translate.google.com
|
||||
* Korean: https://translate.google.com
|
||||
* Chinese: https://translate.google.com
|
||||
~~~~~~~~~~~~
|
36
PlugYLocal/PlugYLocal.cfg
Normal file
36
PlugYLocal/PlugYLocal.cfg
Normal file
@@ -0,0 +1,36 @@
|
||||
-$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
|
143
PlugYLocal/PlugYLocal.dof
Normal file
143
PlugYLocal/PlugYLocal.dof
Normal file
@@ -0,0 +1,143 @@
|
||||
[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
|
823
PlugYLocal/PlugYLocal.dpr
Normal file
823
PlugYLocal/PlugYLocal.dpr
Normal file
@@ -0,0 +1,823 @@
|
||||
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.
|
1655
PlugYLocal/PlugYLocal.ini
Normal file
1655
PlugYLocal/PlugYLocal.ini
Normal file
File diff suppressed because it is too large
Load Diff
BIN
PlugYLocal/PlugYLocal.res
Normal file
BIN
PlugYLocal/PlugYLocal.res
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,8 +1,18 @@
|
||||
/*
|
||||
File created by Yohann NICOLAS.
|
||||
File created by Yohann NICOLAS.
|
||||
Add support 1.13d by L'Autour.
|
||||
*/
|
||||
#include "stdafx.h"
|
||||
#include "PlugYRun.h"
|
||||
#include <windows.h>
|
||||
#include <stdio.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
|
||||
0012C45C 0012C908 |CommandLine = ""C:\Jeux\Diablo II\Game.exe""
|
||||
@@ -14,118 +24,120 @@ File created by Yohann NICOLAS.
|
||||
0012C474 0012DF94 |CurrentDir = "C:\Jeux\Diablo II\"
|
||||
0012C478 0012C6BC |pStartupInfo = 0012C6BC
|
||||
0012C47C 0012C5CC \pProcessInfo = 0012C5CC
|
||||
$ ==> >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
|
||||
$+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
|
||||
$+40 >CD AB BA DC 00 00 00 00
|
||||
$ ==> >44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D...............
|
||||
$+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>...
|
||||
$+30 >0A 00 00 00 00 00 00 00 00 00 00 00 89 F6 D4 77 ............<2E><><EFBFBD>w
|
||||
$+40 >CD AB BA DC 00 00 00 00 ͫ<><CDAB>....
|
||||
|
||||
0xE9,0x1C,0xD1,0xA8,0x6F
|
||||
//0xE9,0x1C,0xD1,0xA8,0x6F
|
||||
*/
|
||||
|
||||
#define MAX_LOADSTRING 100
|
||||
#define SUBKEY "Software\\Blizzard Entertainment\\Diablo II"
|
||||
#define GAMEFILE "Game.exe "
|
||||
#define INIFILE "PlugY.ini"
|
||||
#define GAMEFILE "\\Game.exe"
|
||||
#define INIFILE "\\PlugY.ini"
|
||||
#define LAUNCHING "LAUNCHING"
|
||||
#define LOD_VERSION "LodVersionFolder"
|
||||
#define PARAM "Param"
|
||||
#define WINDOWED "Windowed"
|
||||
#define ACTIVE_WINDOWED "ActiveWindowed"
|
||||
#define LIBRARY_NAME "Library"
|
||||
|
||||
BYTE loadDll[] = {
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA
|
||||
0x50, //PUSH EAX
|
||||
0x68,0x80,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE80 ; ASCII "PlugY.dll"
|
||||
0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA
|
||||
0xA3,0xFC,0xEF,0xA8,0x6F, //MOV DWORD PTR DS:[6FA8EFFC],EAX
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x2F, //JE SHORT d2gfx.6FA7BE37
|
||||
0x50, //PUSH EAX
|
||||
0x68,0x90,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE10 ;Init String
|
||||
0x50, //PUSH EAX
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x04, //JE SHORT d2gfx.6FA7BDC1
|
||||
0x6A,0x00, //PUSH 0
|
||||
0xEB,0x13, //JMP SHORT d2gfx.6FA7BDC1
|
||||
0x68,0x10,0x27,0x00,0x00, //PUSH 2710 ;Init Ordinal(10000)
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x02, //JE SHORT d2gfx.6FA7BDC1
|
||||
0xFF,0xD0, //CALL EAX
|
||||
0x58, //POP EAX
|
||||
0x58, //POP EAX
|
||||
0xC2,0x04,0x00, //RETN 4
|
||||
0x59, //POP ECX
|
||||
0xB9,0x80,0xBE,0xA7,0x6F, //MOV ECX,d2gfx.6FA7BE80 ; ASCII "PlugY.dll"
|
||||
0x83,0x04,0x24,0x10, //ADD DWORD PTR SS:[ESP],10
|
||||
0xC2,0x04,0x00, //RETN 4
|
||||
0x00,0x00,0x00,0x00 }; //HANDLE var;
|
||||
|
||||
BYTE loadDll[]={
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA
|
||||
0x50, //PUSH EAX
|
||||
0x68,0x80,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE80 ; ASCII "PlugY.dll"
|
||||
0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA
|
||||
0xA3,0xFC,0xEF,0xA8,0x6F, //MOV DWORD PTR DS:[6FA8EFFC],EAX
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x2F, //JE SHORT d2gfx.6FA7BE37
|
||||
0x50, //PUSH EAX
|
||||
0x68,0x90,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE10 ;Init String
|
||||
0x50, //PUSH EAX
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x04, //JE SHORT d2gfx.6FA7BDC1
|
||||
0x6A,0x00, //PUSH 0
|
||||
0xEB,0x13, //JMP SHORT d2gfx.6FA7BDC1
|
||||
0x68,0x10,0x27,0x00,0x00, //PUSH 2710 ;Init Ordinal(10000)
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x02, //JE SHORT d2gfx.6FA7BDC1
|
||||
0xFF,0xD0, //CALL EAX
|
||||
0x58, //POP EAX
|
||||
0x58, //POP EAX
|
||||
0xC2,0x04,0x00, //RETN 4
|
||||
0x59, //POP ECX
|
||||
0xB9,0x80,0xBE,0xA7,0x6F, //MOV ECX,d2gfx.6FA7BE80 ; ASCII "PlugY.dll"
|
||||
0x83,0x04,0x24,0x10, //ADD DWORD PTR SS:[ESP],10
|
||||
0xC2,0x04,0x00, //RETN 4
|
||||
0x00,0x00,0x00,0x00}; //HANDLE var;
|
||||
|
||||
|
||||
BYTE freeDll[] = {
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] ; kernel32.FreeLibrary
|
||||
0x50, //PUSH EAX
|
||||
0xA1,0xFC,0xEF,0xA8,0x6F, //MOV EAX,DWORD PTR DS:[6FA8EFFC]
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x2D, //JE SHORT d2gfx.6FA7BE74
|
||||
0x50, //PUSH EAX
|
||||
0x68,0xA0,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE20 ;Release String
|
||||
0x50, //PUSH EAX
|
||||
//0x33,0xC0, //XOR EAX,EAX
|
||||
//0xA3,0xFC,0xEF,0xA8,0x6F, //MOV DWORD PTR DS:[6FA8EFFC],EAX
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x75,0x13, //JNZ SHORT d2gfx.6FA7BDEF
|
||||
0x68,0x11,0x27,0x00,0x00, //PUSH 2711 ;Release Ordinal(10001)
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x02, //JE SHORT d2gfx.6FA7BDEF
|
||||
0xFF,0xD0, //CALL EAX
|
||||
0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; kernel32.FreeLibrary
|
||||
0x58, //POP EAX
|
||||
0xC2,0x04,0x00 }; //RETN 4
|
||||
BYTE freeDll[]={
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] ; kernel32.FreeLibrary
|
||||
0x50, //PUSH EAX
|
||||
0xA1,0xFC,0xEF,0xA8,0x6F, //MOV EAX,DWORD PTR DS:[6FA8EFFC]
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x2D, //JE SHORT d2gfx.6FA7BE74
|
||||
0x50, //PUSH EAX
|
||||
0x68,0xA0,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE20 ;Release String
|
||||
0x50, //PUSH EAX
|
||||
//0x33,0xC0, //XOR EAX,EAX
|
||||
//0xA3,0xFC,0xEF,0xA8,0x6F, //MOV DWORD PTR DS:[6FA8EFFC],EAX
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x75,0x13, //JNZ SHORT d2gfx.6FA7BDEF
|
||||
0x68,0x11,0x27,0x00,0x00, //PUSH 2711 ;Release Ordinal(10001)
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x02, //JE SHORT d2gfx.6FA7BDEF
|
||||
0xFF,0xD0, //CALL EAX
|
||||
0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; kernel32.FreeLibrary
|
||||
0x58, //POP EAX
|
||||
0xC2,0x04,0x00}; //RETN 4
|
||||
|
||||
|
||||
//LPCSTR dllName = "PlugY.dll";
|
||||
//LPCSTR dllName = "PlugY.dll";
|
||||
LPCSTR initFctName = "_Init@4";
|
||||
LPCSTR releaseFctName = "_Release@0";
|
||||
|
||||
static bool versionXP;
|
||||
|
||||
typedef int(__stdcall* tDebugActiveProcessStop)(DWORD);
|
||||
typedef int (__stdcall* tDebugActiveProcessStop)(DWORD);
|
||||
tDebugActiveProcessStop debugActiveProcessStop;
|
||||
|
||||
|
||||
void assertion(LPCSTR msg)
|
||||
{
|
||||
MessageBox(0, msg, "PlugY", MB_OK | MB_ICONASTERISK);
|
||||
MessageBox(0, msg, "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
|
||||
bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd, int ver)
|
||||
{
|
||||
BYTE buf[200];
|
||||
DWORD pos = 0;
|
||||
SIZE_T nb = 0;
|
||||
DWORD version;
|
||||
DWORD pos=0;
|
||||
SIZE_T nb=0;
|
||||
SIZE_T nb2=0;
|
||||
//DWORD version;
|
||||
int res;
|
||||
|
||||
// Get Version and needed addresses.
|
||||
res = ReadProcessMemory(h, (LPVOID)(addr + 0x110), &version, 4, &nb);//0x80
|
||||
if (!res || (nb != 4)) assertion("Read to get current d2gfx version in memory failed");
|
||||
|
||||
// Get Version and needed addresses.
|
||||
/* res = ReadProcessMemory(h,(LPVOID)(addr+0x110),&version,4,&nb);//0x80
|
||||
if (!res || (nb!=4)) assertion("Read to get current d2gfx version in memory failed");
|
||||
*/
|
||||
DWORD loadCallerAddr = addr;
|
||||
DWORD freeCallerAddr = addr;
|
||||
DWORD loadLibraryAddr = addr;
|
||||
DWORD freeLibraryAddr = 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)
|
||||
{
|
||||
case 0x000054EB://1.09b 0x00949FA8:
|
||||
@@ -164,7 +176,7 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
|
||||
freeLibraryAddr += 0xD12C;
|
||||
getProcAddressAddr += 0xD120;
|
||||
break;
|
||||
case 0x00000000://1.13c
|
||||
case 0x00000000://1.13
|
||||
loadCallerAddr += 0xB423;
|
||||
freeCallerAddr += 0xB3CA;
|
||||
loadLibraryAddr += 0xD11C;
|
||||
@@ -173,21 +185,80 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
|
||||
break;
|
||||
default:
|
||||
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.
|
||||
bool alreadyInstalled = false;
|
||||
res = ReadProcessMemory(h, (LPVOID)loadCallerAddr, buf, 6, &nb);
|
||||
if (!res || nb<6) assertion("Read memory failed for checking.");
|
||||
if (buf[0] != 0xFF || buf[1] != 0x15 || *(DWORD*)(buf + 2) != loadLibraryAddr)
|
||||
if (buf[0] != 0xE8 /*|| buf[1]!=0xD8 || buf[2]!=0x19*/ || buf[3] != 0x00 || buf[4] != 0x00 || buf[5] != 0x90)
|
||||
res = ReadProcessMemory(h,(LPVOID)loadCallerAddr,buf,6,&nb);
|
||||
if (!res || nb<6 ) assertion("Read memory failed for checking.");
|
||||
if (buf[0]!=0xFF || buf[1]!=0x15 || *(DWORD*)(buf+2) != loadLibraryAddr)
|
||||
if (buf[0]!=0xE8 /*|| buf[1]!=0xD8 || buf[2]!=0x19*/ || buf[3]!=0x00 || buf[4]!=0x00 || buf[5]!=0x90)
|
||||
assertion("Checking library memory check failed.");
|
||||
else
|
||||
alreadyInstalled = true;
|
||||
res = ReadProcessMemory(h, (LPVOID)freeCallerAddr, buf, 6, &nb);
|
||||
if (!res || nb<6) assertion("Read memory failed for checking.");
|
||||
if (buf[0] != 0xFF || buf[1] != 0x15 || *(DWORD*)(buf + 2) != freeLibraryAddr)
|
||||
if (buf[0] != 0xE8 /*|| buf[1]!=0x75 || buf[2]!=0x1A*/ || buf[3] != 0x00 || buf[4] != 0x00 || buf[5] != 0x90)
|
||||
res = ReadProcessMemory(h,(LPVOID)freeCallerAddr,buf,6,&nb);
|
||||
if (!res || nb<6 ) assertion("Read memory failed for checking.");
|
||||
if (buf[0]!=0xFF || buf[1]!=0x15 || *(DWORD*)(buf+2) != freeLibraryAddr)
|
||||
if (buf[0]!=0xE8 /*|| buf[1]!=0x75 || buf[2]!=0x1A*/ || buf[3]!=0x00 || buf[4]!=0x00 || buf[5]!=0x90)
|
||||
if (!alreadyInstalled)
|
||||
assertion("Checking library memory failed.");
|
||||
|
||||
@@ -195,43 +266,43 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
|
||||
return true;
|
||||
|
||||
//Alloc custom memory data.
|
||||
DWORD memory = (DWORD)VirtualAllocEx(h, NULL, 200, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||
DWORD oldProtect = -1;
|
||||
DWORD memory = (DWORD)VirtualAllocEx(h,NULL,200,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
|
||||
DWORD oldProtect=-1;
|
||||
if (!memory)
|
||||
{
|
||||
// MessageBox(0, "no memory", "RunPlugY.\n", MB_OK|MB_ICONASTERISK);
|
||||
memory = addr + 0xBE00 + isAdd * 0x1000;
|
||||
if (!VirtualProtectEx(h, (LPVOID)memory, 200, PAGE_EXECUTE_READWRITE, &oldProtect))
|
||||
// MessageBox(0, "no memory", "RunPlugY.\n", MB_OK|MB_ICONASTERISK);
|
||||
memory = addr + 0xBE00 + isAdd*0x1000;
|
||||
if( !VirtualProtectEx(h,(LPVOID)memory, 200, PAGE_EXECUTE_READWRITE, &oldProtect) )
|
||||
assertion("Failed to get memory pool for PlugY loading.");
|
||||
}
|
||||
|
||||
//Make memory data
|
||||
int len;
|
||||
pos = 0;
|
||||
pos=0;
|
||||
|
||||
//Dll name
|
||||
DWORD dllNameAddr = memory + pos;
|
||||
len = strlen(libraryName) + 1;
|
||||
res = WriteProcessMemory(h, (LPVOID)dllNameAddr, libraryName, len, &nb);
|
||||
if (!res || (nb != len)) assertion("Write custom data in memory failed");
|
||||
pos += pos % 16 ? len + 16 - pos % 16 : len;
|
||||
DWORD dllNameAddr = memory+pos;
|
||||
len = strlen(libraryName)+1;
|
||||
res = WriteProcessMemory(h,(LPVOID)dllNameAddr,libraryName,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
//init name
|
||||
DWORD initNameAddr = memory + pos;
|
||||
len = strlen(initFctName) + 1;
|
||||
res = WriteProcessMemory(h, (LPVOID)initNameAddr, initFctName, len, &nb);
|
||||
if (!res || (nb != len)) assertion("Write custom data in memory failed");
|
||||
pos += pos % 16 ? len + 16 - pos % 16 : len;
|
||||
DWORD initNameAddr = memory+pos;
|
||||
len = strlen(initFctName)+1;
|
||||
res = WriteProcessMemory(h,(LPVOID)initNameAddr,initFctName,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
//release name
|
||||
DWORD releaseNameAddr = memory + pos;
|
||||
len = strlen(releaseFctName) + 1;
|
||||
res = WriteProcessMemory(h, (LPVOID)releaseNameAddr, releaseFctName, len, &nb);
|
||||
if (!res || (nb != len)) assertion("Write custom data in memory failed");
|
||||
pos += pos % 16 ? len + 16 - pos % 16 : len;
|
||||
DWORD releaseNameAddr = memory+pos;
|
||||
len = strlen(releaseFctName)+1;
|
||||
res = WriteProcessMemory(h,(LPVOID)releaseNameAddr,releaseFctName,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
//load fct
|
||||
DWORD loadDllAddr = memory + pos;
|
||||
DWORD loadDllAddr = memory+pos;
|
||||
DWORD handleAddr = loadDllAddr + sizeof(loadDll) - 4;
|
||||
*(DWORD*)&loadDll[6] = loadLibraryAddr;
|
||||
*(DWORD*)&loadDll[12] = dllNameAddr;
|
||||
@@ -242,42 +313,42 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
|
||||
*(DWORD*)&loadDll[63] = getProcAddressAddr;
|
||||
*(DWORD*)&loadDll[80] = dllNameAddr;
|
||||
len = sizeof(loadDll);
|
||||
res = WriteProcessMemory(h, (LPVOID)loadDllAddr, loadDll, len, &nb);
|
||||
if (!res || (nb != len)) assertion("Write custom data in memory failed");
|
||||
pos += pos % 16 ? len + 16 - pos % 16 : len;
|
||||
res = WriteProcessMemory(h,(LPVOID)loadDllAddr,loadDll,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
//free fct
|
||||
DWORD freeDllAddr = memory + pos;
|
||||
DWORD freeDllAddr = memory+pos;
|
||||
*(DWORD*)&freeDll[6] = freeLibraryAddr;
|
||||
*(DWORD*)&freeDll[12] = handleAddr;
|
||||
*(DWORD*)&freeDll[22] = releaseNameAddr;
|
||||
// *(DWORD*)&freeDll[30] = handleAddr;
|
||||
*(DWORD*)&freeDll[36 - 7] = getProcAddressAddr;
|
||||
*(DWORD*)&freeDll[55 - 7] = getProcAddressAddr;
|
||||
*(DWORD*)&freeDll[67 - 7] = freeLibraryAddr;
|
||||
// *(DWORD*)&freeDll[30] = handleAddr;
|
||||
*(DWORD*)&freeDll[36-7] = getProcAddressAddr;
|
||||
*(DWORD*)&freeDll[55-7] = getProcAddressAddr;
|
||||
*(DWORD*)&freeDll[67-7] = freeLibraryAddr;
|
||||
len = sizeof(freeDll);
|
||||
res = WriteProcessMemory(h, (LPVOID)freeDllAddr, freeDll, len, &nb);
|
||||
if (!res || (nb != len)) assertion("Write custom data in memory failed");
|
||||
pos += pos % 16 ? len + 16 - pos % 16 : len;
|
||||
res = WriteProcessMemory(h,(LPVOID)freeDllAddr,freeDll,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
|
||||
//Patch load library
|
||||
buf[0] = 0x90;
|
||||
buf[1] = 0xE8;
|
||||
*(DWORD*)(buf + 2) = (DWORD)loadDllAddr - (DWORD)loadCallerAddr - 6;
|
||||
buf[0]=0x90;
|
||||
buf[1]=0xE8;
|
||||
*(DWORD*)(buf+2) = (DWORD)loadDllAddr - (DWORD)loadCallerAddr-6;
|
||||
len = 6;
|
||||
res = WriteProcessMemory(h, (LPVOID)loadCallerAddr, buf, len, &nb);
|
||||
if (!res || (nb != len)) assertion("Write load library in memory failed");
|
||||
res = WriteProcessMemory(h,(LPVOID)loadCallerAddr,buf,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write load library in memory failed");
|
||||
|
||||
//Patch free library
|
||||
*(DWORD*)(buf + 2) = (DWORD)freeDllAddr - (DWORD)freeCallerAddr - 6;
|
||||
res = WriteProcessMemory(h, (LPVOID)freeCallerAddr, buf, len, &nb);
|
||||
if (!res || (nb != len)) assertion("Write free library in memory failed");
|
||||
*(DWORD*)(buf+2) = (DWORD)freeDllAddr - (DWORD)freeCallerAddr-6;
|
||||
res = WriteProcessMemory(h,(LPVOID)freeCallerAddr,buf,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write free library in memory failed");
|
||||
|
||||
// sprintf(tmp,"mem = %08X (read = %d)",buf[0],nbRead);
|
||||
// MessageBox(0, tmp, "RunPlugY.\n", MB_OK|MB_ICONASTERISK);
|
||||
// if (oldProtect != -1)
|
||||
// VirtualProtectEx(h,(LPVOID)memory, 200, oldProtect, &oldProtect);
|
||||
// sprintf(tmp,"mem = %08X (read = %d)",buf[0],nbRead);
|
||||
// MessageBox(0, tmp, "RunPlugY.\n", MB_OK|MB_ICONASTERISK);
|
||||
// if (oldProtect != -1)
|
||||
// VirtualProtectEx(h,(LPVOID)memory, 200, oldProtect, &oldProtect);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -289,21 +360,21 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
|
||||
|
||||
/*bool copyLodVersionFiles()
|
||||
{
|
||||
BYTE folder[MAX_PATH];
|
||||
if (!GetPrivateProfileString(LAUNCHING,LOD_VERSION,"",folder,MAX_PATH,INI_FILE))
|
||||
return true;
|
||||
strcat(folder,"\\*");
|
||||
WIN32_FIND_DATA FindFileData;
|
||||
HANDLE hFind = FindFirstFile(folder,&FindFileData);
|
||||
if (hFind==INVALID_HANDLE_VALUE)
|
||||
return true;
|
||||
BYTE folder[MAX_PATH];
|
||||
if (!GetPrivateProfileString(LAUNCHING,LOD_VERSION,"",folder,MAX_PATH,INI_FILE))
|
||||
return true;
|
||||
strcat(folder,"\\*");
|
||||
WIN32_FIND_DATA FindFileData;
|
||||
HANDLE hFind = FindFirstFile(folder,&FindFileData);
|
||||
if (hFind==INVALID_HANDLE_VALUE)
|
||||
return true;
|
||||
|
||||
do {
|
||||
do {
|
||||
// CopyFile();
|
||||
} while (FindNextFile(hFind,&FindFileData);
|
||||
} while (FindNextFile(hFind,&FindFileData);
|
||||
|
||||
FindClose(hFind);
|
||||
return true;
|
||||
FindClose(hFind);
|
||||
return true;
|
||||
}*/
|
||||
|
||||
|
||||
@@ -312,254 +383,347 @@ bool isD2gfx(HANDLE hProcess, LPVOID dllAdr)
|
||||
{
|
||||
SIZE_T nbRead;
|
||||
BYTE buf[BUF_SIZE];
|
||||
ReadProcessMemory(hProcess, dllAdr, buf, BUF_SIZE, &nbRead);
|
||||
ReadProcessMemory(hProcess,dllAdr,buf,BUF_SIZE, &nbRead);
|
||||
if (nbRead < 0x40) return false;
|
||||
int offsetPESignature = *(DWORD*)(buf + 0x3C);
|
||||
if (offsetPESignature + 38 >= BUF_SIZE) return false;
|
||||
DWORD baseOfCode = *(DWORD*)(buf + offsetPESignature + 0x34);
|
||||
if ((baseOfCode != 0x6FA80000) && (baseOfCode != 0x6FA70000)) return false;
|
||||
int offsetPESignature = *(DWORD*)(buf+0x3C);
|
||||
if (offsetPESignature+38 >= BUF_SIZE) return false;
|
||||
DWORD baseOfCode = *(DWORD*)(buf+offsetPESignature + 0x34);
|
||||
if ( ( baseOfCode != 0x6FA80000) && (baseOfCode != 0x6FA70000)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
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)
|
||||
bool getWinReg(char* buf, DWORD bufsize)
|
||||
{
|
||||
HKEY hKey;
|
||||
DWORD type;
|
||||
int res;
|
||||
DWORD len = bufsize;
|
||||
if (RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
|
||||
res = RegQueryValueEx(hKey, "InstallPath", NULL, &type, (LPBYTE)buf, &len);
|
||||
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, &len);
|
||||
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 {
|
||||
if (res!=ERROR_SUCCESS) return false;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
if (len <= 1)
|
||||
strcat(buf, GAMEFILE);
|
||||
if (GetFileAttributes(buf) == INVALID_FILE_ATTRIBUTES)
|
||||
return false;
|
||||
if (buf[len - 2] != '\\')
|
||||
{
|
||||
if (len >= bufsize)
|
||||
return false;
|
||||
buf[len - 1] = '\\';
|
||||
buf[len] = NULL;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool launchNormal(LPSTR commandLine, LPSTR currentDirectory)
|
||||
bool launchNormal(char* command, char* currentDirectory)
|
||||
{
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory(&pi, sizeof(pi));
|
||||
BOOL success = CreateProcess(NULL, commandLine, NULL, NULL, false, 0, NULL, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
return success ? true : false;
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
BOOL success = CreateProcess(0, command, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
return success?true:false;
|
||||
}
|
||||
|
||||
bool launchGame98(LPSTR commandLine, LPSTR currentDirectory, LPSTR libraryName)
|
||||
bool launchGame98(char* command, char* currentDirectory, char* libraryName, int ver)
|
||||
{
|
||||
// MessageBox(0, "LAUNCH 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
// MessageBox(0, "LAUNCH 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory(&pi, sizeof(pi));
|
||||
BOOL success = CreateProcess(0, commandLine, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
BOOL success = CreateProcess(0, command, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
if (!success) return false;
|
||||
DWORD ret;
|
||||
// MessageBox(0, "LAUNCH 98 while", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
// MessageBox(0, "LAUNCH 98 while", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
Sleep(10);
|
||||
while (true)
|
||||
{
|
||||
SuspendThread(pi.hThread);// == (DWORD)-1)
|
||||
//MessageBox(0, "Thread not suspended", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
|
||||
if (!GetExitCodeProcess(pi.hProcess, &ret) || (ret != STILL_ACTIVE))
|
||||
if (!GetExitCodeProcess(pi.hProcess,&ret) || (ret != STILL_ACTIVE))
|
||||
exit(0);
|
||||
if (isD2gfx(pi.hProcess, (LPVOID)0x6FA80000))
|
||||
if (isD2gfx(pi.hProcess,(LPVOID)0x6FA80000))
|
||||
{
|
||||
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
installPlugY(pi.hProcess, 0x6FA80000, libraryName, 1);
|
||||
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
installPlugY(pi.hProcess, 0x6FA80000, libraryName, 1, ver);
|
||||
ResumeThread(pi.hThread);
|
||||
return true;
|
||||
}
|
||||
if (isD2gfx(pi.hProcess, (LPVOID)0x6FA70000))
|
||||
if (isD2gfx(pi.hProcess,(LPVOID)0x6FA70000))
|
||||
{
|
||||
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
installPlugY(pi.hProcess, 0x6FA70000, libraryName, 0);
|
||||
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
installPlugY(pi.hProcess, 0x6FA70000, libraryName, 0, ver);
|
||||
ResumeThread(pi.hThread);
|
||||
return true;
|
||||
}
|
||||
ResumeThread(pi.hThread);
|
||||
// Sleep(10);
|
||||
// Sleep(10);
|
||||
}
|
||||
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;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory(&pi, sizeof(pi));
|
||||
BOOL success = CreateProcess(0, commandLine, 0, 0, false, DEBUG_PROCESS, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
BOOL success = CreateProcess(0, command, 0, 0, false, DEBUG_PROCESS, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
if (!success) return false;
|
||||
DEBUG_EVENT DebugEvent;
|
||||
DWORD status;
|
||||
while (WaitForDebugEvent(&DebugEvent, INFINITE))
|
||||
// MessageBox(0, "START WAITING", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
while (WaitForDebugEvent(&DebugEvent,INFINITE))
|
||||
{
|
||||
status = DBG_CONTINUE;
|
||||
switch (DebugEvent.dwDebugEventCode)
|
||||
switch(DebugEvent.dwDebugEventCode)
|
||||
{
|
||||
case CREATE_THREAD_DEBUG_EVENT:
|
||||
CloseHandle(DebugEvent.u.CreateThread.hThread);
|
||||
break;
|
||||
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;
|
||||
case EXIT_PROCESS_DEBUG_EVENT:
|
||||
// MessageBox(0, "EXIT", "PlugY", MB_OK|MB_ICONASTERISK);
|
||||
exit(0);
|
||||
case EXCEPTION_DEBUG_EVENT:
|
||||
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;
|
||||
case LOAD_DLL_DEBUG_EVENT:
|
||||
if (isD2gfx(pi.hProcess, DebugEvent.u.LoadDll.lpBaseOfDll))
|
||||
// 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))
|
||||
{
|
||||
// MessageBox(0, "INSTALL XP", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
installPlugY(pi.hProcess, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll, libraryName, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll == 0x6FA8000);
|
||||
// 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);
|
||||
CloseHandle(DebugEvent.u.LoadDll.hFile);
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
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;
|
||||
}
|
||||
else
|
||||
} else
|
||||
CloseHandle(DebugEvent.u.LoadDll.hFile);
|
||||
break;
|
||||
}
|
||||
ContinueDebugEvent(DebugEvent.dwProcessId, DebugEvent.dwThreadId, status);
|
||||
ContinueDebugEvent(DebugEvent.dwProcessId,DebugEvent.dwThreadId,status);
|
||||
}
|
||||
MessageBox(0, "ERROR : PlugY isn't installed", "PlugYRun", MB_OK | MB_ICONASTERISK);
|
||||
MessageBox(0, "ERROR : PlugY isn't installed", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
return true;
|
||||
}
|
||||
|
||||
int APIENTRY WinMain(_In_ HINSTANCE hInstance,
|
||||
_In_opt_ HINSTANCE hPrevInstance,
|
||||
_In_ LPSTR lpCmdLine,
|
||||
_In_ int nCmdShow)
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
char currrentDirectory[MAX_PATH];
|
||||
char iniFileName[MAX_PATH];
|
||||
char command[MAX_PATH + 256];
|
||||
char command[MAX_PATH+50];
|
||||
int ver;
|
||||
|
||||
// Get Current Directory.
|
||||
if (!GetCurrentDirectory(sizeof(currrentDirectory), currrentDirectory))
|
||||
// MessageBox(NULL,"START","PlugYRun",MB_OK);
|
||||
//Get Current Directory.
|
||||
if (!GetCurrentDirectory(MAX_PATH-1,currrentDirectory))
|
||||
assertion("Current directory not found");
|
||||
|
||||
int len = strlen(currrentDirectory);
|
||||
if (len == 0)
|
||||
assertion("Current directory not found");
|
||||
|
||||
if (currrentDirectory[len - 1] != '\\')
|
||||
if (len && currrentDirectory[len-1] != '\\')
|
||||
{
|
||||
if (len >= MAX_PATH - 1)
|
||||
assertion("Path length too long");
|
||||
currrentDirectory[len++] = '\\';
|
||||
currrentDirectory[len] = NULL;
|
||||
currrentDirectory[len+1]=NULL;
|
||||
currrentDirectory[len]='\\';
|
||||
}
|
||||
|
||||
// Get ini full path name.
|
||||
strcpy(iniFileName, currrentDirectory);
|
||||
if (len + strlen(INIFILE) >= sizeof(iniFileName))
|
||||
assertion("Path length too long");
|
||||
strcat(iniFileName, INIFILE);
|
||||
|
||||
// Get game.exe path.
|
||||
strcpy(command, currrentDirectory);
|
||||
int cmdLen = len + strlen(GAMEFILE);
|
||||
if (cmdLen >= sizeof(command))
|
||||
assertion("Path length too long");
|
||||
strcat(command, GAMEFILE);
|
||||
//Get ini full path name.
|
||||
strcpy(iniFileName,currrentDirectory);
|
||||
strcat(iniFileName,INIFILE);
|
||||
|
||||
//Get current directory.
|
||||
strcpy(command,currrentDirectory);
|
||||
strcat(command,GAMEFILE);
|
||||
if (GetFileAttributes(command) == INVALID_FILE_ATTRIBUTES)
|
||||
{
|
||||
if (!getWinReg(command, sizeof(command)))
|
||||
if (!getWinReg(command, MAX_PATH+50))
|
||||
return 1;
|
||||
cmdLen = strlen(command) + strlen(GAMEFILE);
|
||||
if (cmdLen >= sizeof(command))
|
||||
assertion("Path length too long");
|
||||
strcat(command, GAMEFILE);
|
||||
if (GetFileAttributes(command) == INVALID_FILE_ATTRIBUTES)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Add params.
|
||||
int paramLen = strlen(lpCmdLine);
|
||||
if (paramLen > 0)
|
||||
{
|
||||
cmdLen += paramLen + 1;
|
||||
if (cmdLen > sizeof(command))
|
||||
assertion("Path length too long");
|
||||
strcat(command, lpCmdLine);
|
||||
ver = GetD2Version(command);
|
||||
if (ver == -1) assertion("Wrong version of the Game.exe");
|
||||
strcat(command, " ");
|
||||
}
|
||||
int windowed = GetPrivateProfileInt(WINDOWED, ACTIVE_WINDOWED, 0, iniFileName);
|
||||
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);
|
||||
|
||||
//Add params.
|
||||
strcat(command,lpCmdLine);
|
||||
len = strlen(command);
|
||||
GetPrivateProfileString(LAUNCHING,PARAM,"",&command[len],MAX_PATH-len,iniFileName);
|
||||
|
||||
//copyLodVersionFiles();
|
||||
|
||||
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);
|
||||
|
||||
// Launch LoD and install PlugY
|
||||
// MessageBox(NULL,command,"PlugYRun",MB_OK);
|
||||
HMODULE module = GetModuleHandle("Kernel32.dll");
|
||||
if (module)
|
||||
{
|
||||
debugActiveProcessStop = (tDebugActiveProcessStop)GetProcAddress(module, "DebugActiveProcessStop");
|
||||
debugActiveProcessStop = (tDebugActiveProcessStop) GetProcAddress(module,"DebugActiveProcessStop");
|
||||
if (debugActiveProcessStop)
|
||||
return !launchGameXP(command, currrentDirectory, libraryName);
|
||||
return !launchGameXP(command, currrentDirectory, libraryName, ver);
|
||||
}
|
||||
return !launchGame98(command, currrentDirectory, libraryName);
|
||||
return !launchGame98(command, currrentDirectory, libraryName, ver);
|
||||
}
|
||||
|
||||
|
||||
/* 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 ///////////////////////
|
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "resource.h"
|
Binary file not shown.
@@ -1,26 +1,17 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# 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}"
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugYRun", "PlugYRun.vcproj", "{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Debug|x64.Build.0 = Debug|x64
|
||||
{73941C80-3185-4FC1-A248-A6C6E4B39BCB}.Debug|x86.ActiveCfg = Debug|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
|
||||
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
Binary file not shown.
@@ -174,7 +174,7 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="copy $(TargetPath) "..\PlugYInstaller\PlugY.exe""
|
||||
CommandLine="copy $(TargetPath) "..\PlugYInstaller\PlugY.exe"
copy $(TargetPath) "D:\Games\Diablo II\Mod PlugY\PlugY.exe"

"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
@@ -189,6 +189,14 @@
|
||||
RelativePath="PlugYRun.cpp"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="Commons"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\Commons\VersionInfo.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
@@ -198,6 +206,14 @@
|
||||
RelativePath="resource.h"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="Commons"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\Commons\VersionInfo.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
|
@@ -1,168 +0,0 @@
|
||||
<?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>
|
@@ -1,49 +0,0 @@
|
||||
<?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.
@@ -1,8 +0,0 @@
|
||||
// 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
|
@@ -1,21 +0,0 @@
|
||||
// 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
|
@@ -1,8 +0,0 @@
|
||||
#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>
|
Reference in New Issue
Block a user