updated from 10.00 to 10.01 by Yohann

This commit is contained in:
ChaosMarc 2017-01-11 08:44:46 +01:00
parent 32b737d55e
commit 94b7f1f9bb
41 changed files with 1830 additions and 619 deletions

View File

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

View File

@ -23,11 +23,18 @@ bool active_savegame=false;
#define MAX_CMD_SIZE 200 #define MAX_CMD_SIZE 200
const char * CMD_RENAME="/rename"; const char * CMD_RENAME="/rename";
const char * CMD_PAGENAME = "/pagename";
const char * CMD_LISTCUBEFORMULA="/listcube"; const char * CMD_LISTCUBEFORMULA="/listcube";
const char * CMD_SELECTPAGE="/page"; const char * CMD_SELECTPAGE="/page";
const char * CMD_SWAP = "/swap";
const char * CMD_TOGGLE = "/toggle";
const char * CMD_RELOAD="/reload"; const char * CMD_RELOAD="/reload";
const char * CMD_LOCK_MOUSE = "/lockmouse";
const char * CMD_LOCK_MOUSE2 = "/lock";
const char * CMD_STARTSAVE="/save"; const char * CMD_STARTSAVE="/save";
const char * CMD_MAXGOLD="/maxgold"; const char * CMD_MAXGOLD="/maxgold";
@ -145,18 +152,89 @@ int STDCALL commands (char* ptText)
char command[MAX_CMD_SIZE]; char command[MAX_CMD_SIZE];
ZeroMemory(command,MAX_CMD_SIZE); ZeroMemory(command,MAX_CMD_SIZE);
strncpy(command,ptText,MAX_CMD_SIZE-1); strncpy(command,ptText,MAX_CMD_SIZE-1);
strlwr(command); _strlwr(command);
if (!strncmp(command,CMD_RENAME,strlen(CMD_RENAME))) if (!strncmp(command, CMD_RENAME, strlen(CMD_RENAME)) && ptClientNameChar != NULL)
{
char* param = &command[strlen(CMD_RENAME)];
int len = strlen(param);
if (param[0] != ' ')
return 1;
param++;
len--;
if (len < 2 || len > 15)
return 0;
for (int i = 0; i < len; i++)
{
char c = param[i];
if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c == '_')))
return 1;
}
// Move current save file
{
char szCurrentFile[MAX_PATH];
char szNewFile[MAX_PATH];
//Get temporary savefile name.
D2FogGetSavePath(szCurrentFile, MAX_PATH);
D2FogGetSavePath(szNewFile, MAX_PATH);
strcat(szCurrentFile, ptChar->ptPlayerData->name);
strcat(szNewFile, param);
strcat(szCurrentFile, ".");
strcat(szNewFile, ".");
int curLen = strlen(szCurrentFile);
int newLen = strlen(szNewFile);
strcpy(&szCurrentFile[curLen], "d2s");
strcpy(&szNewFile[newLen], "d2s");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "d2x");
strcpy(&szNewFile[newLen], "d2x");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "key");
strcpy(&szNewFile[newLen], "key");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma0");
strcpy(&szNewFile[newLen], "ma0");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma1");
strcpy(&szNewFile[newLen], "ma1");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma2");
strcpy(&szNewFile[newLen], "ma2");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma3");
strcpy(&szNewFile[newLen], "ma3");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "ma4");
strcpy(&szNewFile[newLen], "ma4");
MoveFile(szCurrentFile, szNewFile);
strcpy(&szCurrentFile[curLen], "map");
strcpy(&szNewFile[newLen], "map");
MoveFile(szCurrentFile, szNewFile);
}
// Update server
for (int i = 0; i <= len; i++)
{
updateServer(US_RENAME + (param[i] << 8));
}
// Update client
log_msg("Rename on Client : %s -> %s\n", ptChar->ptPlayerData->name, param);
strcpy(ptChar->ptPlayerData->name, param);
strcpy(ptClientNameChar, param);
updateServer(US_SAVE);
return 0;
}
if (!strncmp(command, CMD_PAGENAME,strlen(CMD_PAGENAME)))
{ {
if (!active_multiPageStash) return 1; if (!active_multiPageStash) return 1;
char* param = &command[strlen(CMD_RENAME)]; char* param = &command[strlen(CMD_PAGENAME)];
DWORD len = strlen(param); DWORD len = strlen(param);
if (len && (param[0] != ' ')) return 1;
Stash* ptStash = PCPY->currentStash; Stash* ptStash = PCPY->currentStash;
if (!ptStash) return 0; if (!ptStash) return 0;
if (len>1) if (len>1 && param[0] == ' ')
{ {
D2FogMemDeAlloc(ptStash->name,__FILE__,__LINE__,0); D2FogMemDeAlloc(ptStash->name,__FILE__,__LINE__,0);
ptStash->name = (char *)malloc(len);//D2FogMemAlloc(len,__FILE__,__LINE__,0); ptStash->name = (char *)malloc(len);//D2FogMemAlloc(len,__FILE__,__LINE__,0);
@ -182,6 +260,32 @@ int STDCALL commands (char* ptText)
return 0; return 0;
} }
if (!strncmp(command, CMD_TOGGLE, strlen(CMD_TOGGLE)))
{
if (!active_sharedStash) return 1;
int page = atoi(&command[strlen(CMD_TOGGLE)]) - 1;
if (page < 0)
return 1;
updateServer(US_SWAP3 + ((page & 0xFF000000) >> 16));
updateServer(US_SWAP2 + ((page & 0xFF0000) >> 8));
updateServer(US_SWAP1 + (page & 0xFF00));
updateServer(US_SWAP0_TOGGLE + ((page & 0xFF) << 8));
return 0;
}
if (!strncmp(command, CMD_SWAP, strlen(CMD_SWAP)))
{
if (!active_multiPageStash) return 1;
int page = atoi(&command[strlen(CMD_SWAP)]) - 1;
if (page < 0)
return 1;
updateServer(US_SWAP3 + ((page & 0xFF000000) >> 16));
updateServer(US_SWAP2 + ((page & 0xFF0000) >> 8));
updateServer(US_SWAP1 + (page & 0xFF00));
updateServer(US_SWAP0 + ((page & 0xFF) << 8));
return 0;
}
if (!strcmp(command,CMD_RELOAD)) if (!strcmp(command,CMD_RELOAD))
{ {
if (onRealm) return 1; if (onRealm) return 1;
@ -189,10 +293,17 @@ int STDCALL commands (char* ptText)
return 0; return 0;
} }
if (!strcmp(command, CMD_LOCK_MOUSE) || !strcmp(command, CMD_LOCK_MOUSE2))
{
if (onRealm) return 1;
lockMouseCursor();
return 0;
}
if (!strcmp(command,CMD_STARTSAVE)) if (!strcmp(command,CMD_STARTSAVE))
{ {
if (onRealm) return 1; if (onRealm) return 1;
updateServer(US_STARTSAVE); updateServer(US_SAVE);
return 0; return 0;
} }

View File

@ -470,7 +470,7 @@ extern "C" __declspec(dllexport) void* __stdcall Init(LPSTR IniName)
if (active_VersionTextChange) if (active_VersionTextChange)
Install_VersionChange(); Install_VersionChange();
if (active_PrintPlugYVersion) if (active_PrintPlugYVersion || active_Windowed)
Install_PrintPlugYVersion(); Install_PrintPlugYVersion();
if (active_StatsPoints) if (active_StatsPoints)

View File

@ -10,10 +10,11 @@
#include "d2functions.h" #include "d2functions.h"
#include <stdio.h> #include <stdio.h>
int active_RunLODs = false; int active_Windowed = true;
int active_alwaysRegenMapInSP = false;
DWORD nbPlayersCommandByDefault = 1;
int active_DisplayItemLevel = false; int active_DisplayItemLevel = false;
DWORD nbPlayersCommandByDefault = 0;
int active_alwaysRegenMapInSP = false;
int active_RunLODs = false;
int active_AlwaysDisplayLifeMana = false; int active_AlwaysDisplayLifeMana = false;
int active_EnabledTXTFilesWithMSExcel = false; int active_EnabledTXTFilesWithMSExcel = false;
int active_DisplayBaseStatsValue = false; int active_DisplayBaseStatsValue = false;
@ -22,6 +23,90 @@ int active_EnabledCowPortalWhenCowKingWasKill = false;
/****************************************************************************************************/ /****************************************************************************************************/
int setWindowedOptionsDone = false;
int active_RemoveBorder = true;
int active_WindowOnTop = true;
int active_Maximized = true;
int active_SetWindowPos = true;
int windowedX = 240;
int windowedY = 0;
int windowedWidth = 1440;
int windowedHeight = 1080;
int active_LockMouseOnStartup = true;
void lockMouseCursor(int width, int height)
{
RECT clientRect;
RECT rect;
HWND hwnd = GetActiveWindow();
GetClientRect(hwnd, &clientRect);
GetWindowRect(hwnd, &rect);
int shiftX = (rect.right - rect.left - clientRect.right) / 2;
int shiftY = rect.bottom - rect.top - clientRect.bottom - shiftX;
log_msg("Windows size : %i, %i, %i, %i\n", rect.left, rect.top, rect.right, rect.bottom);
rect.left += shiftX;
rect.right = rect.left + width;
rect.top += shiftY;
rect.bottom = rect.top + height;
//no resize : 560, 231, 1360, 831
//resized : 240, 0, 1040, 600
log_msg("Lock Mouse Cursor : %i, %i, %i, %i\n", rect.left, rect.top, rect.right, rect.bottom);
ClipCursor(&rect);
}
void lockMouseCursor() { lockMouseCursor(ResolutionX, ResolutionY); }
void SetWindowedOptions()
{
if (setWindowedOptionsDone)
return;
HWND hwnd = GetActiveWindow();
RECT clientRect;
GetClientRect(hwnd, &clientRect);
if (active_RemoveBorder)
{
LONG lStyle = GetWindowLong(hwnd, GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
SetWindowLong(hwnd, GWL_STYLE, lStyle);
SetWindowPos(hwnd, NULL, 0, 0, clientRect.right, clientRect.bottom, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOOWNERZORDER);
}
if (active_Maximized && !active_SetWindowPos)
{
RECT screen;
GetWindowRect(GetDesktopWindow(), &screen);
log_msg("Screen size : %i, %i, %i, %i\n", screen.left, screen.top, screen.right, screen.bottom);
int w = screen.bottom * clientRect.right / clientRect.bottom;
int h = w * clientRect.bottom / clientRect.right;
if (screen.right < w)
{
h = screen.right * clientRect.bottom / clientRect.right;
w = h * clientRect.right / clientRect.bottom;
}
windowedX = (screen.right - w) / 2;
windowedY = (screen.bottom - h) / 2;
windowedWidth = w;
windowedHeight = h;
}
if (active_SetWindowPos || active_Maximized)
{
if (active_WindowOnTop)
SetWindowPos(hwnd, HWND_TOPMOST, windowedX, windowedY, windowedWidth, windowedHeight, SWP_FRAMECHANGED);
else
SetWindowPos(hwnd, NULL, windowedX, windowedY, windowedWidth, windowedHeight, SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOOWNERZORDER);
} else if (active_WindowOnTop)
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, clientRect.right, clientRect.bottom, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE);
if (active_LockMouseOnStartup)
lockMouseCursor(clientRect.right, clientRect.bottom);
setWindowedOptionsDone = true;
}
/****************************************************************************************************/
void STDCALL displayItemlevel(LPWSTR popup, Unit* ptItem) void STDCALL displayItemlevel(LPWSTR popup, Unit* ptItem)
{ {
if (onRealm && (selectModParam==MOD_NO)) return; if (onRealm && (selectModParam==MOD_NO)) return;
@ -135,7 +220,7 @@ void Install_DisplayItemLevel()
{ {
static int isInstalled = false; static int isInstalled = false;
if (isInstalled) return; if (isInstalled) return;
log_msg("Patch D2Client for display item popup. (DisplayPopup)\n"); log_msg("Patch D2Client for display item popup. (DisplayPopup)\n");
// print the text in the final buffer // print the text in the final buffer
@ -393,7 +478,6 @@ void Install_AlwaysDisplayLifeMana()
//6FAD7659 |. A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C] //6FAD7659 |. A1 4CBCB86F MOV EAX,DWORD PTR DS:[6FB8BC4C]
//6FAD7667 |. 0F8C A4000000 JL D2Client.6FAD7711 //6FAD7667 |. 0F8C A4000000 JL D2Client.6FAD7711
} else { } else {
// Always display life. // 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);

View File

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

View File

@ -26,7 +26,7 @@ bool separateHardSoftStash = false;
bool active_sharedGold=false; bool active_sharedGold=false;
char* sharedStashFilename = NULL; char* sharedStashFilename = NULL;
typedef int (*TchangeToSelectedStash)(Unit* ptChar, Stash* newStash, DWORD bIsClient); typedef int (*TchangeToSelectedStash)(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient);
Unit* firstClassicStashItem(Unit* ptChar) Unit* firstClassicStashItem(Unit* ptChar)
{ {
@ -130,11 +130,11 @@ Stash* getStash(Unit* ptChar, DWORD isShared, DWORD id)//WORKS
} }
int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bIsClient) int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient)
{ {
if (!newStash) return 0; if (!newStash) return 0;
log_msg("changeToSelectedStash ID:%d\tshared:%d\tclient:%d\n",newStash->id,newStash->id,bIsClient); log_msg("changeToSelectedStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n", newStash->id, newStash->isShared, bOnlyItems, bIsClient);
Stash* currentStash = PCPY->currentStash; Stash* currentStash = PCPY->currentStash;
if (currentStash == newStash) return 0; if (currentStash == newStash) return 0;
@ -175,7 +175,6 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bIsClient)
} }
// add items of new stash // add items of new stash
PCPY->currentStash = newStash;
ptItem = newStash->ptListItem; ptItem = newStash->ptListItem;
while (ptItem) while (ptItem)
{ {
@ -183,16 +182,20 @@ int changeToSelectedStash_9(Unit* ptChar, Stash* newStash, DWORD bIsClient)
D2Common10242(PCInventory, D2GetRealItem(ptItem), 1); D2Common10242(PCInventory, D2GetRealItem(ptItem), 1);
ptItem = D2UnitGetNextItem(ptItem); ptItem = D2UnitGetNextItem(ptItem);
} }
newStash->ptListItem = NULL; if (bOnlyItems)
newStash->ptListItem = PCPY->currentStash->ptListItem;
else
PCPY->currentStash = newStash;
PCPY->currentStash->ptListItem = NULL;
return 1; return 1;
} }
int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bIsClient) int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient)
{ {
if (!newStash) return 0; if (!newStash) return 0;
log_msg("changeToSelectedStash ID:%d\tshared:%d\tclient:%d\n",newStash->id,newStash->id,bIsClient); log_msg("changeToSelectedStash ID:%d\tshared:%d\tonlyItems:%d\tclient:%d\n",newStash->id,newStash->isShared, bOnlyItems,bIsClient);
Stash* currentStash = PCPY->currentStash; Stash* currentStash = PCPY->currentStash;
if (currentStash == newStash) return 0; if (currentStash == newStash) return 0;
@ -220,14 +223,17 @@ int changeToSelectedStash_10(Unit* ptChar, Stash* newStash, DWORD bIsClient)
} }
// add items of new stash // add items of new stash
PCPY->currentStash = newStash;
ptItem = newStash->ptListItem; ptItem = newStash->ptListItem;
while (ptItem) while (ptItem)
{ {
D2InvAddItem(PCInventory, ptItem, ptItem->path->x, ptItem->path->y, 0xC, bIsClient, 4); D2InvAddItem(PCInventory, ptItem, ptItem->path->x, ptItem->path->y, 0xC, bIsClient, 4);
ptItem = D2UnitGetNextItem(ptItem); ptItem = D2UnitGetNextItem(ptItem);
} }
newStash->ptListItem = NULL; if (bOnlyItems)
newStash->ptListItem = PCPY->currentStash->ptListItem;
else
PCPY->currentStash = newStash;
PCPY->currentStash->ptListItem = NULL;
return 1; return 1;
} }
@ -277,12 +283,12 @@ DWORD loadStashList(Unit* ptChar, BYTE data[], DWORD maxSize, DWORD* curSize, bo
while (curStash < nbStash) while (curStash < nbStash)
{ {
newStash = addStash(ptChar, isShared); newStash = addStash(ptChar, isShared);
changeToSelectedStash(ptChar, newStash, false); changeToSelectedStash(ptChar, newStash, 0, false);
DWORD ret = loadStash(ptChar, newStash, data, *curSize, 10000000, curSize); DWORD ret = loadStash(ptChar, newStash, data, *curSize, 10000000, curSize);
if (ret) return ret; if (ret) return ret;
curStash++; curStash++;
} }
if (!isShared && !PCPY->selfStash) if (!isShared && !PCPY->selfStash)
{ {
newStash = addStash(ptChar, isShared); newStash = addStash(ptChar, isShared);
@ -295,7 +301,7 @@ DWORD loadStashList(Unit* ptChar, BYTE data[], DWORD maxSize, DWORD* curSize, bo
if (!PCPY->currentStash) if (!PCPY->currentStash)
PCPY->currentStash = newStash; PCPY->currentStash = newStash;
} }
return 0; return 0;
} }
@ -383,20 +389,20 @@ void updateSelectedStashClient(Unit* ptChar)//WORKS
void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags)//WORKS void setSelectedStashClient(DWORD stashId, DWORD stashFlags, DWORD flags)//WORKS
{ {
log_msg("setSelectedStashClient ID:%d, isShared:%d, flags:%08X\n", stashId, stashFlags&1, flags); log_msg("setSelectedStashClient ID:%d, stashFlags:%d, flags:%08X\n", stashId, stashFlags, flags);
Unit* ptChar = D2GetClientPlayer(); Unit* ptChar = D2GetClientPlayer();
Stash* newStash = getStash(ptChar, stashFlags&1, stashId); Stash* newStash = getStash(ptChar, (stashFlags & 1) == 1, stashId);
if (!newStash) do if (!newStash) do
newStash = addStash(ptChar, stashFlags&1); newStash = addStash(ptChar, (stashFlags & 1) == 1);
while (newStash->id < stashId); while (newStash->id < stashId);
changeToSelectedStash(ptChar, newStash, 1); changeToSelectedStash(ptChar, newStash, (stashFlags & 2) == 2, 1);
PCPY->flags = flags; PCPY->flags = flags;
} }
void selectStash(Unit* ptChar, Stash* newStash)//WORKS void selectStash(Unit* ptChar, Stash* newStash)//WORKS
{ {
changeToSelectedStash(ptChar, newStash, 0); changeToSelectedStash(ptChar, newStash, 0, 0);
updateSelectedStashClient(ptChar); updateSelectedStashClient(ptChar);
} }
@ -423,6 +429,35 @@ void toggleToSharedStash(Unit* ptChar)
} }
} }
void swapStash(Unit* ptChar, Stash* curStash, Stash* swpStash)
{
if (!ptChar || !curStash || !swpStash || curStash == swpStash)
return;
changeToSelectedStash(ptChar, swpStash, 1, 0);
updateClient(ptChar, UC_SELECT_STASH, swpStash->id, swpStash->flags | 2, PCPY->flags);
}
void toggleStash(Unit* ptChar, DWORD page)
{
log_msg("toggle stash page = %u\n", page);
Stash* curStash = PCPY->currentStash;
Stash* swpStash = curStash->isShared ? PCPY->selfStash : PCPY->sharedStash;
swapStash(ptChar, curStash, swpStash);
}
void swapStash(Unit* ptChar, DWORD page, bool toggle)
{
log_msg("swap stash page = %u\n", page);
Stash* curStash = PCPY->currentStash;
Stash* swpStash = curStash->isShared == toggle ? PCPY->selfStash : PCPY->sharedStash;
for (DWORD i = 0; i < page; i++)
{
if (curStash->nextStash == NULL)
addStash(ptChar, swpStash->isShared);
swpStash = swpStash->nextStash;
}
swapStash(ptChar, curStash, swpStash);
}
void selectPreviousStash(Unit* ptChar) void selectPreviousStash(Unit* ptChar)
{ {

View File

@ -8,6 +8,7 @@
#include "common.h" #include "common.h"
#include "error.h" #include "error.h"
#include "d2functions.h" #include "d2functions.h"
#include "extraOptions.h"
#include <stdio.h> #include <stdio.h>
char* versionText = ""; char* versionText = "";
@ -20,12 +21,17 @@ 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) void STDCALL printPlugYVersion(void** childrens, DWORD* sgnNumChildren)
{ {
char buf[20]; if (active_Windowed)
void* textbox = D2CreateTextBox(newTextBoxData); SetWindowedOptions();
childrens[*sgnNumChildren]=textbox; if (active_PrintPlugYVersion)
d2_assert((*sgnNumChildren)++ >= 40,"sgnNumChildren < MAX_CHILDREN", __FILE__, __LINE__); {
sprintf(buf, "PlugY %s", PLUGY_VERSION); char buf[20];
D2PrintLineOnTextBox(textbox, buf, colorOfPlugYVersion); void* textbox = D2CreateTextBox(newTextBoxData);
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 ) FCT_ASM ( caller_printPlugYVersion )

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

267
PlugY/PlugY.vcxproj Normal file
View File

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

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

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

View File

@ -35,7 +35,6 @@ void updateClient(Unit* ptChar, DWORD mFunc, DWORD p1, DWORD p2, DWORD p3)
D2SendPacket(ptNetClient, &packet, sizeof(DataPacket)); D2SendPacket(ptNetClient, &packet, sizeof(DataPacket));
} }
DWORD FASTCALL handleClientUpdate(DataPacket* packet) DWORD FASTCALL handleClientUpdate(DataPacket* packet)
{ {
log_msg("[CLIENT] Received custom message: %d with param: %08X , %08X , %08X\n",packet->mFunc,packet->mParam1,packet->mParam2,packet->mParam3); log_msg("[CLIENT] Received custom message: %d with param: %08X , %08X , %08X\n",packet->mFunc,packet->mParam1,packet->mParam2,packet->mParam3);

View File

@ -15,11 +15,16 @@
#include "infinityStash.h" #include "infinityStash.h"
#include "commands.h" #include "commands.h"
int renameIndex = 0;
char renameString[16];
DWORD PageSwap;
int STDCALL handleServerUpdate(Unit* ptChar, WORD param) int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
{ {
log_msg("Received custom message: %X\n", param); int type = param & 0xFF;
switch(param & 0xFF) DWORD arg = (param & 0xFF00) >> 8;
log_msg("Received custom message: type=%i, arg=%i\n", type, arg);
switch(type)
{ {
case US_UNASSIGN_STR_POINT : UnassignStrPoint( ptChar ); return 1; case US_UNASSIGN_STR_POINT : UnassignStrPoint( ptChar ); return 1;
case US_UNASSIGN_ENE_POINT : UnassignEnePoint( ptChar ); return 1; case US_UNASSIGN_ENE_POINT : UnassignEnePoint( ptChar ); return 1;
@ -42,17 +47,36 @@ int STDCALL handleServerUpdate(Unit* ptChar, WORD param)
case US_SELECT_PREVIOUS_INDEX2: selectPreviousIndex2Stash( ptChar ); return 1; case US_SELECT_PREVIOUS_INDEX2: selectPreviousIndex2Stash( ptChar ); return 1;
case US_SELECT_NEXT_INDEX2 : selectNextIndex2Stash( ptChar ); return 1; case US_SELECT_NEXT_INDEX2 : selectNextIndex2Stash( ptChar ); return 1;
case US_STARTSAVE : savePlayers( ptChar ); return 1; case US_SAVE : savePlayers( ptChar ); return 1;
case US_MAXGOLD : maxGold(ptChar); return 1; case US_MAXGOLD : maxGold(ptChar); return 1;
case US_PUTGOLD : putGold(ptChar, 0); return 1; case US_PUTGOLD : putGold(ptChar, 0); return 1;
case US_TAKEGOLD : takeGold(ptChar, 0); return 1; case US_TAKEGOLD : takeGold(ptChar, 0); return 1;
default : return 0; case US_SWAP3 : PageSwap = arg << 24; return 1;
case US_SWAP2 : PageSwap |= arg << 16; return 1;
case US_SWAP1 : PageSwap |= arg << 8; return 1;
case US_SWAP0: swapStash(ptChar, PageSwap | arg, false); PageSwap = 0; return 1;
case US_SWAP0_TOGGLE : swapStash(ptChar, PageSwap | arg, true); PageSwap = 0; return 1;
case US_RENAME :
if (renameIndex == 0)
for (int i = 0; i < 16; i++)
renameString[i] = 0;
renameString[renameIndex++] = (char)arg;
if (arg == 0)
{
renameIndex = 0;
log_msg("Rename on Server : %s -> %s\n", ptChar->ptPlayerData->name, renameString);
strcpy(ptChar->ptPlayerData->name, renameString);
strcpy(ptChar->ptPlayerData->ptNetClient->name, renameString);
}
return 1;
default :
return 0;
} }
} }
FCT_ASM( caller_handleServerUpdate) FCT_ASM( caller_handleServerUpdate)
PUSH EAX PUSH ESI
PUSH EBX PUSH EBX
CALL handleServerUpdate CALL handleServerUpdate
TEST EAX,EAX TEST EAX,EAX

19
PlugY/dllmain.cpp Normal file
View File

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@
#pragma once #pragma once
#define PLUGY_VERSION "10.00" #define PLUGY_VERSION "10.01"
#define LOG_FILE "PlugY.log" #define LOG_FILE "PlugY.log"

View File

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

8
PlugY/stdafx.cpp Normal file
View File

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

16
PlugY/stdafx.h Normal file
View File

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

8
PlugY/targetver.h Normal file
View File

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

View File

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

View File

@ -2,7 +2,7 @@
!include "LogicLib.nsh" !include "LogicLib.nsh"
!include "MUI2.nsh" !include "MUI2.nsh"
!define VERSION "10.00" !define VERSION "10.01"
!define D2FILES "." !define D2FILES "."
!define NAME "PlugY, The Survival Kit" !define NAME "PlugY, The Survival Kit"
!define MOD_DIR "Mod PlugY" !define MOD_DIR "Mod PlugY"
@ -18,7 +18,8 @@
!define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_UNFINISHPAGE_NOAUTOCLOSE !define MUI_UNFINISHPAGE_NOAUTOCLOSE
!define MUI_FINISHPAGE_SHOWREADME "$(README_FILENAME)" !define MUI_FINISHPAGE_SHOWREADME "$(README_FILENAME)"
!define MUI_FINISHPAGE_RUN "PlugY.exe" !define MUI_FINISHPAGE_RUN ;"PlugY.exe"
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchPlugY"
!define MUI_FINISHPAGE_RUN_NOTCHECKED !define MUI_FINISHPAGE_RUN_NOTCHECKED
!define MUI_FINISHPAGE_NOREBOOTSUPPORT !define MUI_FINISHPAGE_NOREBOOTSUPPORT
!define MUI_ABORTWARNING !define MUI_ABORTWARNING
@ -106,6 +107,11 @@ Function Un.onInit
ReadRegStr $D2Path HKLM "${REGKEY}" "PlugYDllPath" ReadRegStr $D2Path HKLM "${REGKEY}" "PlugYDllPath"
FunctionEnd FunctionEnd
Function LaunchPlugY
SetOutPath "$INSTDIR"
ExecShell "" "$INSTDIR\PlugY.exe"
FunctionEnd
;-------------------------------- ;--------------------------------
; Custom Page ; Custom Page
;Function OptionsPage ;Function OptionsPage
@ -151,8 +157,7 @@ Section "!$(SECTION_NAME_CORE)" Core
File "${D2FILES}\PlugY_The_Survival_Kit_-_Readme.txt" File "${D2FILES}\PlugY_The_Survival_Kit_-_Readme.txt"
File "${D2FILES}\PlugY_The_Survival_Kit_-_LisezMoi.txt" File "${D2FILES}\PlugY_The_Survival_Kit_-_LisezMoi.txt"
File "${D2FILES}\PlugY_The_Survival_Kit_-_Liesmich.txt" File "${D2FILES}\PlugY_The_Survival_Kit_-_Liesmich.txt"
CreateDirectory "$D2Path\PlugY" setOutPath "$INSTDIR\PlugY"
setOutPath "$D2Path\PlugY"
File "${D2FILES}\PlugY\EmptyPage.dc6" File "${D2FILES}\PlugY\EmptyPage.dc6"
File "${D2FILES}\PlugY\PlugYDefault.ini" File "${D2FILES}\PlugY\PlugYDefault.ini"
File "${D2FILES}\PlugY\PlugYFixed.ini" File "${D2FILES}\PlugY\PlugYFixed.ini"
@ -175,7 +180,7 @@ Section $(SECTION_NAME_STARTMENU_SHORTCUTS) MenuShortcuts
SectionIn 1 SectionIn 1
CreateDirectory "$SMPROGRAMS\${NAME}" CreateDirectory "$SMPROGRAMS\${NAME}"
SetOutPath $INSTDIR SetOutPath $INSTDIR
CreateShortCut "$SMPROGRAMS\${NAME}\Uninstall.lnk" "$INSTDIR\${UNINSTALL_FILE}" "" "$INSTDIR\${UNINSTALL_FILE}" 0 CreateShortCut "$SMPROGRAMS\${NAME}\Uninstaller.lnk" "$INSTDIR\${UNINSTALL_FILE}" "" "$INSTDIR\${UNINSTALL_FILE}" 0
CreateShortCut "$SMPROGRAMS\${NAME}\${NAME}.lnk" "$INSTDIR\PlugY.exe" "" "$INSTDIR\PlugY.exe" 0 CreateShortCut "$SMPROGRAMS\${NAME}\${NAME}.lnk" "$INSTDIR\PlugY.exe" "" "$INSTDIR\PlugY.exe" 0
SectionEnd SectionEnd
@ -187,13 +192,13 @@ Section $(SECTION_NAME_UNINSTALLER) Uninstaller
WriteUninstaller "${UNINSTALL_FILE}" WriteUninstaller "${UNINSTALL_FILE}"
; Write the installation path into the registry ; Write the installation path into the registry
WriteRegStr HKLM "${REGKEY}" "InstallPath" "$INSTDIR" WriteRegStr HKLM "${REGKEY}" "InstallPath" $INSTDIR
WriteRegStr HKLM "${REGKEY}" "PlugYDllPath" "$D2Path" WriteRegStr HKLM "${REGKEY}" "PlugYDllPath" "$D2Path"
; Write the uninstall keys for Windows ; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "InstallLocation" "$$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "InstallLocation" "$$INSTDIR"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayName" "${NAME}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayName" "${NAME}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "HelpLink" "http://djaftal.chez-alice.fr/" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "HelpLink" "http://plugy.free.fr"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayVersion" "${VERSION}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "UninstallString" '"$INSTDIR\${UNINSTALL_FILE}"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "UninstallString" '"$INSTDIR\${UNINSTALL_FILE}"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "NoModify" 1
@ -224,6 +229,7 @@ Section "Uninstall" Uninstall
Delete "$D2Path\RestoreD2gfxDll.exe" Delete "$D2Path\RestoreD2gfxDll.exe"
Delete "$INSTDIR\PlugY.exe" Delete "$INSTDIR\PlugY.exe"
Delete "$INSTDIR\PlugY.log" Delete "$INSTDIR\PlugY.log"
Delete "$INSTDIR\BnetLog.txt"
Delete "$INSTDIR\PlugY.ini" Delete "$INSTDIR\PlugY.ini"
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_Readme.txt" Delete "$INSTDIR\PlugY_The_Survival_Kit_-_Readme.txt"
Delete "$INSTDIR\PlugY_The_Survival_Kit_-_LisezMoi.txt" Delete "$INSTDIR\PlugY_The_Survival_Kit_-_LisezMoi.txt"

View File

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

View File

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

View File

@ -1,10 +1,10 @@
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
; ; ; ;
; "PlugY, The Survival Kit" ; ; "PlugY, The Survival Kit" ;
; ; ; ;
; von Yohann Nicolas ; ; von Yohann Nicolas ;
; ; ; ;
; version 10.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
@ -20,7 +20,7 @@ WARNUNG:
- PlugY.ini wurde stark verändert, bitte nehmt die Neue! - PlugY.ini wurde stark verändert, bitte nehmt die Neue!
- Vergesst nicht den Teil: "Kommentare zur Konfigurations-Datei" zu lesen. - Vergesst nicht den Teil: "Kommentare zur Konfigurations-Datei" zu lesen.
- Bitte lest im PlugY-Forum: - Bitte lest im PlugY-Forum:
http://phrozenkeep.planetdiablo.gamespy.com/forum/viewforum.php?f=133 http://d2mods.info/forum/viewforum.php?f=133
******** ALLE FUNKTIONEN ******** ******** ALLE FUNKTIONEN ********
@ -43,20 +43,48 @@ WARNUNG:
- Man kann die Versionsanzeige im Hauptbildschirm anpassen. - Man kann die Versionsanzeige im Hauptbildschirm anpassen.
- Diablo kann nun auf Text-Dateien laden die von Microsoft Excel geöffnet sind. - Diablo kann nun auf Text-Dateien laden die von Microsoft Excel geöffnet sind.
- Lokalisiert in Englisch, Französisch, Deutsch, Italienisch, Spanisch, Polnisch. - Lokalisiert in Englisch, Franzö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.
v10.01 Ä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.
v10.00 Änderungen : v10.00 Änderungen :
- Disable access to Battle.net via main menu button. - Disable access to Battle.net via main menu button.
- PlugY funktioniert nun auch mit LoD 1.13c Versionen. - PlugY funktioniert nun auch mit LoD 1.13c Versionen.
- Fix shortcut in start menu - Fix shortcut in start menu
v9.00 Änderungen : v9.00 Änderungen :
- PlugY funktioniert nun auch mit LoD 1.12 Versionen. - PlugY funktioniert nun auch mit LoD 1.12 Versionen.
- Ein paar Bugs behoben. - Ein paar Bugs behoben.
- Eine neue Möglichkeit zum Skills neuverteilen in Mods hinzugefügt. - Eine neue Möglichkeit zum Skills neuverteilen in Mods hinzugefügt.
v8.00 Änderungen : v8.00 Änderungen :
- Einfachere Installation : Neuer Installer. - Einfachere Installation : Neuer Installer.
- Das Portal zum Cow-Level kann nun geöffnet werden auch wenn der Spieler den Cow-King in der aktuellen Schwierigkeit bereits getötet hat. - Das Portal zum Cow-Level kann nun geöffnet werden auch wenn der Spieler den Cow-King in der aktuellen Schwierigkeit bereits getötet hat.
@ -67,12 +95,10 @@ v8.00
- Multiplayer : Die Truhendaten werden jetzt korrekt gespeichert wenn es einen Disconnect oder einen Fehler während des Speicherns gibt. - Multiplayer : Die Truhendaten werden jetzt korrekt gespeichert wenn es einen Disconnect oder einen Fehler während des Speicherns gibt.
- Die "check load memory failed" Meldung, wenn die D2gfx.dll gepachtt war, wurde entfernt. - Die "check load memory failed" Meldung, wenn die D2gfx.dll gepachtt war, wurde entfernt.
v7.01b Änderungen : v7.01b Änderungen :
- Behoben : Die Ladder-only Runenwortfeatures in den LoD-Versionen 1.11 und 1.10. - Behoben : Die Ladder-only Runenwortfeatures in den LoD-Versionen 1.11 und 1.10.
- Behoben : Seltsame Zeichen in manchen Texten. - Behoben : Seltsame Zeichen in manchen Texten.
v7.01 Änderungen : v7.01 Änderungen :
- Die Ladder-Only Runenwörter können für den Singleplayer aktivert werden. - Die Ladder-Only Runenwörter können für den Singleplayer aktivert werden.
- Fehler bei der AI des Überbaals behoben - Fehler bei der AI des Überbaals behoben
@ -81,7 +107,6 @@ v7.01
- Eine eigene EXE wurde hinzugefügt um PlugY zu starten (es werden keine LoD-Dateien mehr verändert) - Eine eigene EXE wurde hinzugefügt um PlugY zu starten (es werden keine LoD-Dateien mehr verändert)
- Spanische und Polnische Übersetzung hinzugefügt. - Spanische und Polnische Übersetzung hinzugefügt.
V7.00 Änderungen : V7.00 Änderungen :
- PlugY funktioniert nun auch mit LoD 1.11b Versionen. - PlugY funktioniert nun auch mit LoD 1.11b Versionen.
- Den Basiswert für jeden Stat im Mausübertext hinzugefügt. - Den Basiswert für jeden Stat im Mausübertext hinzugefügt.
@ -89,17 +114,14 @@ V7.00
- Behoben: Einige Features blieben auch im Battle.net aktiviert - Behoben: Einige Features blieben auch im Battle.net aktiviert
- Italienische Übersetzung hinzugefügt. - Italienische Übersetzung hinzugefügt.
v6.01b Änderungen : v6.01b Änderungen :
- Fehler mit dem Popups der Statuspunktvergabe-Buttons behoben. - Fehler mit dem Popups der Statuspunktvergabe-Buttons behoben.
v6.01 Änderungen : v6.01 Änderungen :
- Behoben : unique carry1 items verschwinden nicht wenn sie in LoD 1.10 gecubt werden - Behoben : unique carry1 items verschwinden nicht wenn sie in LoD 1.10 gecubt werden
- Schlüssel und Uber-Organe werden nicht mehr entfernt wenn man das rote Portal ausserhalb von Harrogath öffnen wollte. - Schlüssel und Uber-Organe werden nicht mehr entfernt wenn man das rote Portal ausserhalb von Harrogath öffnen wollte.
- Fehler in der Versionsanzeige wegen einem Konflikt mit D2Mod behoben. - Fehler in der Versionsanzeige wegen einem Konflikt mit D2Mod behoben.
V6.00 Änderungen : V6.00 Änderungen :
- PlugY funktioniert nun auch mit LoD 1.11 Versionen - PlugY funktioniert nun auch mit LoD 1.11 Versionen
- Freischaltung des Über-Quests ausserhalb von der Realm (LoD 1.11 only). - Freischaltung des Über-Quests ausserhalb von der Realm (LoD 1.11 only).
@ -107,14 +129,12 @@ V6.00
- Kleine Fehler behoben, und kleine Verbesserungen eingebaut - Kleine Fehler behoben, und kleine Verbesserungen eingebaut
- "/save"-Befehl hinzugefügt um das Spiel zu speichern ohne es zu verlassen (nur LoD 1.11). - "/save"-Befehl hinzugefügt um das Spiel zu speichern ohne es zu verlassen (nur LoD 1.11).
v5.06 Änderungen : v5.06 Änderungen :
- Knöpf for gemeinsamen Goldvorrat hinzugefügt. - Knöpf for gemeinsamen Goldvorrat hinzugefügt.
- Gemeinsamer Goldvorrat in Multiplayer hinzugefügt. - Gemeinsamer Goldvorrat in Multiplayer hinzugefügt.
- Befehl "/DisplayLifeMana" ersetzt durch "/dlm". - Befehl "/DisplayLifeMana" ersetzt durch "/dlm".
- Diverse Fehler behoben. - Diverse Fehler behoben.
v5.05 Änderungen : v5.05 Änderungen :
- Standard Hintergrundfarbe im Status Interface geändert - Standard Hintergrundfarbe im Status Interface geändert
- Gemeinsames Gold per Kommando hinzugefügt. - Gemeinsames Gold per Kommando hinzugefügt.
@ -122,24 +142,20 @@ v5.05
- Möglichkeit die Namen von Setgegenständ in Grün bei Mouseover in der gemeinsamen Kiste anzuzeigen - Möglichkeit die Namen von Setgegenständ in Grün bei Mouseover in der gemeinsamen Kiste anzuzeigen
- Multiplayer Fehler behoben, indem der gesamte Prozess neu programmiert wurde - Multiplayer Fehler behoben, indem der gesamte Prozess neu programmiert wurde
v5.04 Änderungen : v5.04 Änderungen :
- Behoben : Status/Skill Punkte per Levelup bug. - Behoben : Status/Skill Punkte per Levelup bug.
- Behoben : Multiplayer bugs. - Behoben : Multiplayer bugs.
- PlugY/PlugYDefault.ini sind jetzt vollständig. - PlugY/PlugYDefault.ini sind jetzt vollständig.
v5.03 Änderungen : v5.03 Änderungen :
- Behoben : Bug der manchmal zwischen den Hardcore und Softcore gemeinsamen Truhen gewechselt hat. - Behoben : Bug der manchmal zwischen den Hardcore und Softcore gemeinsamen Truhen gewechselt hat.
- Farbänderung der Schrift in den Extra-Seiten möglich. - Farbänderung der Schrift in den Extra-Seiten möglich.
- Standartwerte in den Extra-Seiten geändert. - Standartwerte in den Extra-Seiten geändert.
- EnabledTXTFilesWhenMSExcelOpenIt in der PlugY.ini ist nun standartmäßig aktiviert. - EnabledTXTFilesWhenMSExcelOpenIt in der PlugY.ini ist nun standartmäßig aktiviert.
v5.02 Änderungen : v5.02 Änderungen :
- Behoben : Bug der das Verschwinden von Gegenständen hervorgerufen hat. - Behoben : Bug der das Verschwinden von Gegenständen hervorgerufen hat.
v5.01 Änderungen : v5.01 Änderungen :
- Behoben : Größere bugs bei der gemeinsamen Truhe. - Behoben : Größere bugs bei der gemeinsamen Truhe.
- Behoben : ActiveLogFile ist jetzt in der PlugY.ini standartmäßig deaktiviert. - Behoben : ActiveLogFile ist jetzt in der PlugY.ini standartmäßig deaktiviert.
@ -160,14 +176,12 @@ v5.00
- Behoben : Das Erscheinen des Diablo Klones am Spielstart. - Behoben : Das Erscheinen des Diablo Klones am Spielstart.
- Behoben : Andere kleine Bugs. - Behoben : Andere kleine Bugs.
v4.04 Änderungen : v4.04 Änderungen :
- Behoben : Anzeige-bug wenn StatPerLevelUp aktiviert war. - Behoben : Anzeige-bug wenn StatPerLevelUp aktiviert war.
- Behoben : Fehler bei der Speicherprozedur wenn die Festplatte voll war. - Behoben : Fehler bei der Speicherprozedur wenn die Festplatte voll war.
- Neues Konfigurations-System für Modder. - Neues Konfigurations-System für Modder.
- Man kann auswählen, ob die Mana und Lebens Anzeige immer über den Kugeln erscheint. - Man kann auswählen, ob die Mana und Lebens Anzeige immer über den Kugeln erscheint.
v4.03 Änderungen v4.03 Änderungen
- Behoben: Wenn man einen "carry1" - einzigartigen Gegenstand (einzigartiger Zauber) in den Würfel steckt - Behoben: Wenn man einen "carry1" - einzigartigen Gegenstand (einzigartiger Zauber) in den Würfel steckt
- Man kann direkt zur ersten und letzten Seite der Kiste gehen (shift + klick auf Nächste/Vorherige Seite) - Man kann direkt zur ersten und letzten Seite der Kiste gehen (shift + klick auf Nächste/Vorherige Seite)
@ -177,11 +191,9 @@ v4.03
- Button für die zusätzlichen Status Seiten an die gleiche Stelle verschoben, wie die original Buttons (nur in 800x600) - Button für die zusätzlichen Status Seiten an die gleiche Stelle verschoben, wie die original Buttons (nur in 800x600)
- Man kann auswählen, ob die zuletzt angezeigte Seite erscheint, oder die Hauptseite - Man kann auswählen, ob die zuletzt angezeigte Seite erscheint, oder die Hauptseite
v4.02b Änderungen : v4.02b Änderungen :
- Behoben : Alle Funktionen bleiben im offenen Battle.net eingeschaltet. - Behoben : Alle Funktionen bleiben im offenen Battle.net eingeschaltet.
v4.02 Änderungen : v4.02 Änderungen :
- Behoben : Das vergessene "d" in "SeparateHardcoreStash=1" in der PlugY.ini ergänzt - Behoben : Das vergessene "d" in "SeparateHardcoreStash=1" in der PlugY.ini ergänzt
- Behoben : Standardmässig wird dei Sprache in der PlugY.ini nicht geändert. - Behoben : Standardmässig wird dei Sprache in der PlugY.ini nicht geändert.
@ -211,29 +223,24 @@ v4.00
- Behoben : Diablo Clone kann nicht mehr in Normal und Albtraum erscheinen - Behoben : Diablo Clone kann nicht mehr in Normal und Albtraum erscheinen
- Behoben : Zerstörung von zusätzlichen Minions wenn man Fertigkeitspukte zurücksetzt - Behoben : Zerstörung von zusätzlichen Minions wenn man Fertigkeitspukte zurücksetzt
v3.02 Änderungen : v3.02 Änderungen :
- Fehler im Bereich Statuspunkte pro LevelUp behoben - Fehler im Bereich Statuspunkte pro LevelUp behoben
- Fehler behoben der verhinderte das bei abgeschalteter gemeinsamer Kiste ein Charkter nicht geladen werden konnte. - Fehler behoben der verhinderte das bei abgeschalteter gemeinsamer Kiste ein Charkter nicht geladen werden konnte.
- Fehler behoben der es erlaubte Werte zu setzen, ohne das Fertigkeiten pro LevelUp aktiviert waren. - Fehler behoben der es erlaubte Werte zu setzen, ohne das Fertigkeiten pro LevelUp aktiviert waren.
v3.01 Änderungen : v3.01 Änderungen :
- Man kann die Statuspunkte ändern, die man beim LevelUp bekommt. - Man kann die Statuspunkte ändern, die man beim LevelUp bekommt.
- Problem mit fehlerhafter Menge der Fertigkeitspunkte beim zurücksetzen behoben. - Problem mit fehlerhafter Menge der Fertigkeitspunkte beim zurücksetzen behoben.
- Konfigurationsparameter für den World Event hinzugefügt - Konfigurationsparameter für den World Event hinzugefügt
- Standardmässig wird nur inHölle der World Event Zähler gezeigt "X SOJ verkauft". - Standardmässig wird nur inHölle der World Event Zähler gezeigt "X SOJ verkauft".
v3.00 Änderungen : v3.00 Änderungen :
- Lokaler World Event ! - Lokaler World Event !
- Zurücksetzen von Fertigkeitspunkten - Zurücksetzen von Fertigkeitspunkten
v2.05 Änderungen : v2.05 Änderungen :
- Wichtiger Ffix : Alle Fehler die einen Start von Diablo2 verhinderten sind entfernt - Wichtiger Ffix : Alle Fehler die einen Start von Diablo2 verhinderten sind entfernt
v2.04 Änderungen : v2.04 Änderungen :
- Das zurücksetzen der Statuspunkte, sowie die Fertigkeiten pro LevelUp werden abgeschaltet, wenn man sich in ein Realm-Spiel einklinkt (wie bei der Goldkiste die Knöpfe) - Das zurücksetzen der Statuspunkte, sowie die Fertigkeiten pro LevelUp werden abgeschaltet, wenn man sich in ein Realm-Spiel einklinkt (wie bei der Goldkiste die Knöpfe)
- Es wird eine Fehlermeldung angezeigt, anstelle eines Absturzes, wenn PlugY.dll nicht gefunden werden kann - Es wird eine Fehlermeldung angezeigt, anstelle eines Absturzes, wenn PlugY.dll nicht gefunden werden kann
@ -241,11 +248,9 @@ v2.04
- Einen Fehler bezüglich der verschwindenden Knöpfe behoben - Einen Fehler bezüglich der verschwindenden Knöpfe behoben
- Abspeicher-Problem unter Win95/98/Me behoben - Abspeicher-Problem unter Win95/98/Me behoben
v2.03b Änderungen : v2.03b Änderungen :
- Anzeige der PlugY Version nur im Hauptbild - Anzeige der PlugY Version nur im Hauptbild
v2.03 Änderungen : v2.03 Änderungen :
- Wichtigster Fix : Die Abspeicher-Routine geändert, damit bei einem Spiel-Absturz keine Items in der Kiste verloren gehen, und der Charakter korrupt wird. - Wichtigster Fix : Die Abspeicher-Routine geändert, damit bei einem Spiel-Absturz keine Items in der Kiste verloren gehen, und der Charakter korrupt wird.
- Kein Absturz des Host Spiels, wenn ein Charakter nicht ins Spiel kann. - Kein Absturz des Host Spiels, wenn ein Charakter nicht ins Spiel kann.
@ -253,7 +258,6 @@ v2.03
- Die Versionsanzeige auf der Hauptseite geändert (PlugY Version jetzt rechts, und Farben sind nun möglich) - Die Versionsanzeige auf der Hauptseite geändert (PlugY Version jetzt rechts, und Farben sind nun möglich)
- Charaktere ohne PlugY können nun an Spielen teilnehmen die gehosted werden von PlugY-Spilern. - Charaktere ohne PlugY können nun an Spielen teilnehmen die gehosted werden von PlugY-Spilern.
v2.02 Änderungen : v2.02 Änderungen :
- PlugY nutzt die D2win.dll nicht mehr zum laden. - PlugY nutzt die D2win.dll nicht mehr zum laden.
- PlugY enthält einen Patcher/Ent-Patcher um die D2gfx.dll so zu verändern, das PlugY gestartet wird. - PlugY enthält einen Patcher/Ent-Patcher um die D2gfx.dll so zu verändern, das PlugY gestartet wird.
@ -261,12 +265,10 @@ v2.02
- Die Goldkistenerweiterung wird bei Realm Spielen automatisch abgeschaltet. - Die Goldkistenerweiterung wird bei Realm Spielen automatisch abgeschaltet.
- Index Button Fehler behoben. - Index Button Fehler behoben.
v.2.01 Änderungen v.2.01 Änderungen
- Fertigkeitsfehler beim LevelUp behoben. - Fertigkeitsfehler beim LevelUp behoben.
- Anzeigefehler im Hauptbildschirm behoben. - Anzeigefehler im Hauptbildschirm behoben.
v2.00 Änderungen : v2.00 Änderungen :
- Deutsche Lokalisierung hinzugefügt. - Deutsche Lokalisierung hinzugefügt.
- Die Anzahl der Fertigkeitspunkte beim erreichen des nächsten Levels ist einstellbar. - Die Anzahl der Fertigkeitspunkte beim erreichen des nächsten Levels ist einstellbar.
@ -283,19 +285,16 @@ v2.00
- Der Fehler mir carry1 Gegenständen wurde behoben (Uniques die nur einaml getragen werden dürfen) - Der Fehler mir carry1 Gegenständen wurde behoben (Uniques die nur einaml getragen werden dürfen)
- Weitere kleine Verbesserungen eingebaut. - Weitere kleine Verbesserungen eingebaut.
v1.03 Änderungen : v1.03 Änderungen :
- Französische Liesmich- und Ini-Datei hinzugefügt. - Französische Liesmich- und Ini-Datei hinzugefügt.
- Fehler in D2Classic-Spielen entfernt (es gibt dort keine Seiten-Erweiterungen, dies ist kein Fehler) - Fehler in D2Classic-Spielen entfernt (es gibt dort keine Seiten-Erweiterungen, dies ist kein Fehler)
- Fehler behoben, der beim laden mit vor LOD 1.10 generierten Charakteren auftrat. - Fehler behoben, der beim laden mit vor LOD 1.10 generierten Charakteren auftrat.
(zB: ShadowMaster Charakter oder 1.09 oder D2Classic Charakter) (zB: ShadowMaster Charakter oder 1.09 oder D2Classic Charakter)
v1.02 Änderungen : v1.02 Änderungen :
- Dateinamen geändert wegen eines Fehlers mit dem IE und ZIP-Files - Dateinamen geändert wegen eines Fehlers mit dem IE und ZIP-Files
- Man kann die Versions-Information im Hauptbildschirm ändern (siehe Ini-Datei). - Man kann die Versions-Information im Hauptbildschirm ändern (siehe Ini-Datei).
v1.01 Änderungen : v1.01 Änderungen :
- Französische Lokalisierung hinzugefügt (Französisches Liesmich.txt folgt) - Französische Lokalisierung hinzugefügt (Französisches Liesmich.txt folgt)
- Dateinamen von "PlugY, The Survival Kit.ini" in "PlugY,The_Survival_Kit" geändert. - Dateinamen von "PlugY, The Survival Kit.ini" in "PlugY,The_Survival_Kit" geändert.
@ -305,7 +304,6 @@ v1.01
(Man kann ihn weiterhin hinzufügen, sollte aber wissen, was man tut...) (Man kann ihn weiterhin hinzufügen, sollte aber wissen, was man tut...)
- Paket von .rar auf .zip umgestellt - Paket von .rar auf .zip umgestellt
v1.00 Funktionen (es können alle einfach ein- und ausgeschaltet werden) : v1.00 Funktionen (es können alle einfach ein- und ausgeschaltet werden) :
- Man kann den "Save"-Pfad anpassen. - Man kann den "Save"-Pfad anpassen.
- Man kann jeden MOD starten, ohne die gesicherten Spielstände verschieben zu müssen. - Man kann jeden MOD starten, ohne die gesicherten Spielstände verschieben zu müssen.
@ -340,11 +338,6 @@ v1.00 Funktionen (es k
******** INSTALLATION ******** ******** INSTALLATION ********
- The officials sites are :
http://djaftal.chez-alice.fr/
http://phrozenkeep.18v.biz/dload.php?action=category&cat_id=128
http://diablo2.judgehype.com/index.php?page=telechargements
Installation : Installation :
- Entpacke alle Dateien in dein Diablo Verzeichnis. - Entpacke alle Dateien in dein Diablo Verzeichnis.
- Kopiere die PlugY.ini und die PlugY.exe in das Verzeichnis in dem dein Mod ist. - Kopiere die PlugY.ini und die PlugY.exe in das Verzeichnis in dem dein Mod ist.
@ -532,6 +525,30 @@ Nur Ausschalten wenn du weist was du machst.
- ActiveCheckMemory=1 - ActiveCheckMemory=1
[WINDOWED]
Launch in windowed mode.
- ActiveWindowed=0 {0:Disabled; 1:Enabled}
Remove border in windowed mode.
- RemoveBorder=0 {0:Disabled; 1:Enabled}
Set window at most top (above taskbar) in windowed mode.
- WindowOnTop=0 {0:Disabled; 1:Enabled}
Maximized and center window (keep ratio 4/3) in windowed mode (if SetWindowPos=0).
- Maximized=0 {0:Disabled; 1:Enabled}
Set position and size of the window in windowed mode.
- SetWindowPos=0 {0:Disabled; 1:Enabled}
- X=0 {0:Window Position X}
- Y=0 {0:Window Position Y}
- Width=0 {0:Window Width}
- Height=0 {0:Window Height}
Lock cursor mouse in the window in windowed mode.
- LockMouseOnStartup=0 {0:Disabled; 1:Enabled}
[LANGUAGE] [LANGUAGE]
Wechselt die ausgewählte Sprache Wechselt die ausgewählte Sprache
Ihr müsst die Dateien der Sprache besitzen!!! Ihr müsst die Dateien der Sprache besitzen!!!
@ -753,4 +770,4 @@ Zur Korrektur der deutschen
* Spanish : Acrerune * Spanish : Acrerune
* Polnisch : Serdel * Polnisch : Serdel
~~~~~~~~~~~~ ;--------------------------------------------------------------------------------------;

View File

@ -4,7 +4,7 @@
; ; ; ;
; par Yohann Nicolas ; ; par Yohann Nicolas ;
; ; ; ;
; version 10.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
@ -23,13 +23,13 @@ Vous pouvez y faire un don si vous le souhaitez.
- Les moddeurs devraient lire la version anglaise de ce readme. - Les moddeurs devraient lire la version anglaise de ce readme.
- N'oubliez pas de lire les forums : - N'oubliez pas de lire les forums :
http://forum.judgehype.com/judgehype/ModsetModding/liste_sujet-1.htm http://forum.judgehype.com/judgehype/ModsetModding/liste_sujet-1.htm
http://phrozenkeep.planetdiablo.gamespy.com/forum/viewforum.php?f=133 (anglais) http://d2mods.info/forum/viewforum.php?f=133 (anglais)
******** CARACTERISTIQUES ******** ******** CARACTERISTIQUES ********
- Désactive l'accès à Battle.net - Désactive l'accès à Battle.net
- Espace de stockage infini dans le coffre (jusqu'à 4 294 967 296 pages personnelles!) - Espace de stockage infini dans le coffre !
- Espace de stockage partagé dans le coffre (jusqu'à 4 294 967 296 pages partagées aussi!) - Espace de stockage partagé dans le coffre !
- Active les mots runiques du ladder en dehors des royaumes. - Active les mots runiques du ladder en dehors des royaumes.
- World Event et Uber Quest en Local pour le monojoueur et le multijoueur hors royaumes ! - World Event et Uber Quest en Local pour le monojoueur et le multijoueur hors royaumes !
- Permet d'ouvrir le portail vers le Cow Level même quand on a tuer le Cow King dans cette difficulté. - Permet d'ouvrir le portail vers le Cow Level même quand on a tuer le Cow King dans cette difficulté.
@ -46,20 +46,48 @@ Vous pouvez y faire un don si vous le souhaitez.
- D2 peut charger tout les fichiers, même ceux ouvert par Microsoft Excel (désactivé par defaut). - D2 peut charger tout les fichiers, même ceux ouvert par Microsoft Excel (désactivé par defaut).
- Affiche la valeur courante des caracs (sans les bonus magiques). - Affiche la valeur courante des caracs (sans les bonus magiques).
- Localisé en français, anglais, allemand, italien, espagnol et polonais. - Localisé en français, anglais, allemand, italien, espagnol et polonais.
- Ajout des commandes suivantes (les fonctions correspondantes doivent être activé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 être ouverte, espace non obligatoire).
/page 2 : Affiche la page des stats en plus (la page des stats doit être ouverte, espace non obligatoire).
/page 3 : Affiche la page des stats de resistances (la page des stats doit être ouverte, espace non obligatoire).
/page 4 : (bêta) Affiche la page des mots runiques actifs (la page des stats doit être ouverte, espace non obligatoire).
/lockmouse : Bloque le curseur de la souris dans la fenêtre.
/lock : Identique à /lockmouse.
/pagename name : (bêta) Renomme la page courante du coffre (Ce nouveau nom n'est pas sauvegardé).
/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é partagé/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 à /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 à jour de la page des stats).
/listcube : (bêta) Cré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ée et le personnage au maximum d'or.
Changements apportés par la v10.01 :
- Ajout du mode fenêtré.
- Peut bloquer le curseur de la souris dans la fenêtre. (mode fenêtré).
- Peut supprimer les bordure de la fenêtre (mode fenêtré).
- Peut redimensionner ou maximiser la fenêtre (mode fenêtré).
- Peut mettre la fenêtre au-dessus de toutes les autres fenêtres, y compris la barre des tâches (mode fenêtré).
- Permet de verrouiller le curseur de la souris dans les fenêtres au démarrage et avec la commande "/lockmouse" ou "/lock" (mode fenêtré).
- Ajout de la commande "/swap page" pour échanger le contenu de la page actuelle du coffre avec le contenu d'une autre "page".
- Ajout de la commande "/toggle page" pour échanger le contenu de la page actuelle du coffre avec le contenu d'une autre "page" du coffre opposé (partagé/personnel).
- Ajout de la commande "/rename newname" pour renommer son personnage. Cette fonctionnalité est en bêta et vous devez quitter la partie pour mettre à jour la page des stats.
Changements apportés par la v10.00 : Changements apportés par la v10.00 :
- Désactive l'accès à Battle.net par le bouton du menu principal. - Désactive l'accès à Battle.net par le bouton du menu principal.
- PlugY fonctionne aussi la version 1.13c de LOD. - PlugY fonctionne aussi la version 1.13c de LOD.
- Corrige le raccourci dans le menu démarrer. - Corrige le raccourci dans le menu démarrer.
Changements apportés par la v9.00 : Changements apportés par la v9.00 :
- PlugY fonctionne aussi la version 1.12 de LOD. - PlugY fonctionne aussi la version 1.12 de LOD.
- Corrige différents bugs. - Corrige différents bugs.
- Ajout d'une option pour le déassignement des skill dans les mods. - Ajout d'une option pour le déassignement des skill dans les mods.
Changements apportés par la v8.00 : Changements apportés par la v8.00 :
- Installation plus aisée : Nouvel installeur. - Installation plus aisée : Nouvel installeur.
- Permet d'ouvrir le portail vers le Cow Level même quand on a tuer le Cow King dans cette difficulté. - Permet d'ouvrir le portail vers le Cow Level même quand on a tuer le Cow King dans cette difficulté.
@ -70,16 +98,13 @@ Changements apport
- Multiplayer : Sauvegarde les fichiers du stash (avec les données du client comme avec les versions d'avant 5.00) quand il y a une déconnection ou une erreur apparait durant la procédure de sauvegarde. - Multiplayer : Sauvegarde les fichiers du stash (avec les données du client comme avec les versions d'avant 5.00) quand il y a une déconnection ou une erreur apparait durant la procédure de sauvegarde.
- Remove the "check load memory failed" message when D2gfx.dll was patched. - Remove the "check load memory failed" message when D2gfx.dll was patched.
Changements apportés par la v7.02 : Changements apportés par la v7.02 :
- Corrige la perte de points de skills quand on les désalloue dans les mods contenant des skills spéciaux. - Corrige la perte de points de skills quand on les désalloue dans les mods contenant des skills spéciaux.
Changements apportés par la v7.01b : Changements apportés par la v7.01b :
- Corrige l'activation des mots runiques du ladder dans les versions 1.11 and 1.10 de LoD. - Corrige l'activation des mots runiques du ladder dans les versions 1.11 and 1.10 de LoD.
- Corrige les caractères étranges de quelques texts. - Corrige les caractères étranges de quelques texts.
Changements apportés par la v7.01 : Changements apportés par la v7.01 :
- Active les mots runiques du ladder en dehors des royaumes. - Active les mots runiques du ladder en dehors des royaumes.
- Corrige le bug avec l'IA de Uber Baal. - Corrige le bug avec l'IA de Uber Baal.
@ -88,7 +113,6 @@ Changements apport
- Ajout d'un exécutable pour lancer Plugy (plus aucun fichier de LoD modifié). (RAPPEL) - Ajout d'un exécutable pour lancer Plugy (plus aucun fichier de LoD modifié). (RAPPEL)
- Traduction en espagnol et polonais. - Traduction en espagnol et polonais.
Changements apportés par la v7.00 : Changements apportés par la v7.00 :
- PlugY fonctionne aussi la version 1.11b de LOD. - PlugY fonctionne aussi la version 1.11b de LOD.
- Ajout d'un exécutable pour lancer Plugy (plus aucun fichier de LoD modifié). - Ajout d'un exécutable pour lancer Plugy (plus aucun fichier de LoD modifié).
@ -97,17 +121,14 @@ Changements apport
- Corrige les fonctions qui restais active sur Battle.net. - Corrige les fonctions qui restais active sur Battle.net.
- Traduction en italien. - Traduction en italien.
Changements apportés par la v6.01b : Changements apportés par la v6.01b :
- Correction d'un bug avec l'affichage du popup sur les bouttons d'assignement des points de stats. - Correction d'un bug avec l'affichage du popup sur les bouttons d'assignement des points de stats.
Changements apportés par la v6.01 : Changements apportés par la v6.01 :
- Corrige le bug qui cause la disparition des items "carry1" du stash quand ils sont cubbés dans LoD 1.10 - Corrige le bug qui cause la disparition des items "carry1" du stash quand ils sont cubbés dans LoD 1.10
- Clés et organes des uber ne sont plus détruit quant on essaie d'ouvrir le portail en dehors d'Harrogath. - Clés et organes des uber ne sont plus détruit quant on essaie d'ouvrir le portail en dehors d'Harrogath.
- Corrige le conflit avec D2Mod pour l'affichage de la version. - Corrige le conflit avec D2Mod pour l'affichage de la version.
Changements apportés par la v6.00 : Changements apportés par la v6.00 :
- PlugY fonctionne aussi la version 1.11 de LOD. - PlugY fonctionne aussi la version 1.11 de LOD.
- Active la Uber Quest hors des Royaumes. (uniquement LoD 1.11). - Active la Uber Quest hors des Royaumes. (uniquement LoD 1.11).
@ -115,14 +136,12 @@ Changements apport
- Corrige quelques bugs mineurs et ajoute des améliorations mineurs. - Corrige quelques bugs mineurs et ajoute des améliorations mineurs.
- Ajoute la commande "/save" pour sauvegarder la partie sans quitter (uniquement LoD 1.11). - Ajoute la commande "/save" pour sauvegarder la partie sans quitter (uniquement LoD 1.11).
Changements apportés par la v5.06 : Changements apportés par la v5.06 :
- Ajoute des bouttons pour le partage de l'or. - Ajoute des bouttons pour le partage de l'or.
- Active l'or partagé en multijoueur. - Active l'or partagé en multijoueur.
- La commande "/DisplayLifeMana" est remplacée par "/dlm". - La commande "/DisplayLifeMana" est remplacée par "/dlm".
- Corrige quelques bugs. - Corrige quelques bugs.
Changements apportés par la v5.05 : Changements apportés par la v5.05 :
- Corrige les couleurs par défauts dans l'interface des stats. - Corrige les couleurs par défauts dans l'interface des stats.
- Ajoute de l'or partagée via des commandes. - Ajoute de l'or partagée via des commandes.
@ -130,30 +149,25 @@ Changements apport
- Possiblité d'afficher ou non les nom des objets de set dans le popup quand ceux-ci sont dans le coffre partagée. - Possiblité d'afficher ou non les nom des objets de set dans le popup quand ceux-ci sont dans le coffre partagée.
- Correction des bugs du multiplayer (réécriture de ces fonctions). - Correction des bugs du multiplayer (réécriture de ces fonctions).
Changements apportés par la v5.04 : Changements apportés par la v5.04 :
- Corrige Stat/Skill points par levelup - Corrige Stat/Skill points par levelup
- Corrige des bugs en Multiplayer. - Corrige des bugs en Multiplayer.
- PlugY/PlugYDefault.ini completé. - PlugY/PlugYDefault.ini completé.
Changements apportés par la v5.03 : Changements apportés par la v5.03 :
- Corrige le bug qui échange quelques fois les coffres partagés Hardcore et Softcore. - Corrige le bug qui échange quelques fois les coffres partagés Hardcore et Softcore.
- Ajoute de la couleur sur les nouvelles pages de stats. - Ajoute de la couleur sur les nouvelles pages de stats.
- Change les valeurs par défaut des nouvelles pages de stats. - Change les valeurs par défaut des nouvelles pages de stats.
- Mets EnabledTXTFilesWhenMSExcelOpenIt=1 dans le fichier PlugY.ini. - Mets EnabledTXTFilesWhenMSExcelOpenIt=1 dans le fichier PlugY.ini.
Changements apportés par la v5.02 : Changements apportés par la v5.02 :
- Corrige la correction d'un bug précédent qui engendre la disparition d'objets. - Corrige la correction d'un bug précédent qui engendre la disparition d'objets.
Changements apportés par la v5.01 : Changements apportés par la v5.01 :
- Corrige les bugs importants dans la gestion du stash. - Corrige les bugs importants dans la gestion du stash.
- Remets ActiveLogFile=0 par défaut dans le fichier PlugY.ini. - Remets ActiveLogFile=0 par défaut dans le fichier PlugY.ini.
- Corrige : Bug quand le stash partagé est désactivé. - Corrige : Bug quand le stash partagé est désactivé.
Changements apportés par la v5.00 : Changements apportés par la v5.00 :
- PlugY fonctionne sur les mods des versions 1.09, 1.09b, 1.09d et 1.10 de LOD. - PlugY fonctionne sur les mods des versions 1.09, 1.09b, 1.09d et 1.10 de LOD.
- PlugY peut lancer D2Mod.dll. - PlugY peut lancer D2Mod.dll.
@ -168,14 +182,12 @@ Changements apport
- Corrige la génération de DiabloClone au démarrage d'une nouvelle partie. - Corrige la génération de DiabloClone au démarrage d'une nouvelle partie.
- Corrige plusieurs autres bugs. - Corrige plusieurs autres bugs.
Changements apportés par la v4.04 : Changements apportés par la v4.04 :
- Corrige le bug d'affichage quand statPerLevelUp est activé - Corrige le bug d'affichage quand statPerLevelUp est activé
- Corrige le bug de sauvegarde quand le disque dur est plein. - Corrige le bug de sauvegarde quand le disque dur est plein.
- Nouveau système de configuration pour les moddeurs. - Nouveau système de configuration pour les moddeurs.
- Affiche toujours les valeurs numériques de mana et de vie au-dessus des globes correspondants. - Affiche toujours les valeurs numériques de mana et de vie au-dessus des globes correspondants.
Changements apportés par la v4.03 : Changements apportés par la v4.03 :
- Corrige le bug des objets uniques carry1 (charme unique) quand on drop le cube. - Corrige le bug des objets uniques carry1 (charme unique) quand on drop le cube.
- Possibilité d'aller directement à la première ou dernière page du coffre (shift + clic sur précédent/suivant). - Possibilité d'aller directement à la première ou dernière page du coffre (shift + clic sur précédent/suivant).
@ -183,13 +195,11 @@ Changements apport
- Ajouts d'infos sur les pages de stats supplémentaires (2 pages maintenant). - Ajouts d'infos sur les pages de stats supplémentaires (2 pages maintenant).
- Ajoute un bouton "page précédente" sur la principale page de stats (uniquement en 800x600). - Ajoute un bouton "page précédente" sur la principale page de stats (uniquement en 800x600).
- Déplace les boutons des pages de stats supplémentaire aux même emplacements que ceux de la page principale (uniquement en 800x600). - Déplace les boutons des pages de stats supplémentaire aux même emplacements que ceux de la page principale (uniquement en 800x600).
- Possibilité de choisir si la page affichée quand on ouvre la page des stats est la page principale ou celle sélectionnée précédemment. - Possibilité de choisir si la page affichée quand on ouvre la page des stats est la page principale ou celle sélectionnée précédemment
Changements apportés par la v4.02b : Changements apportés par la v4.02b :
- Les fonctionnalités restent activées sur Battle.net ouvert. - Les fonctionnalités restent activées sur Battle.net ouvert.
Changements apportés par la v4.02 : Changements apportés par la v4.02 :
- Corrige le conflit avec Battle.net (BigStash désactivé sur les royaumes) - Corrige le conflit avec Battle.net (BigStash désactivé sur les royaumes)
- Corrige l'oublie du "d" de "SeparateHardcoreStash=1" de PlugY.ini - Corrige l'oublie du "d" de "SeparateHardcoreStash=1" de PlugY.ini
@ -197,16 +207,13 @@ Changements apport
- Corrige l'activation de l'affichage de l'item level pour toutes les configurations de PlugY. - Corrige l'activation de l'affichage de l'item level pour toutes les configurations de PlugY.
- Ajouts d'infos sur la 2ème page de stats. - Ajouts d'infos sur la 2ème page de stats.
Changements apportés par la v4.01 : Changements apportés par la v4.01 :
- Corrige le bug du MSVCR70.dll non trouvé. - Corrige le bug du MSVCR70.dll non trouvé.
- Ajouts d'infos sur la 2ème page de stats. - Ajouts d'infos sur la 2ème page de stats.
Changements apportés par la v4.00b : Changements apportés par la v4.00b :
- Corrige le bug du MSVCR70.dll non trouvé. - Corrige le bug du MSVCR70.dll non trouvé.
Changements apportés par la v4.00 : Changements apportés par la v4.00 :
- Meilleure optimisation du code. - Meilleure optimisation du code.
- Ajoute des pages supplémentaires pour l'affichage de plus de statistiques du perso comme le %MF. - Ajoute des pages supplémentaires pour l'affichage de plus de statistiques du perso comme le %MF.
@ -224,20 +231,17 @@ Changements apport
- Corrige : Diablo Clone ne peut pas apparaître en mode normal et cauchemar. - Corrige : Diablo Clone ne peut pas apparaître en mode normal et cauchemar.
- Corrige : Détruit les minions(par exemple les squelettes) en trop près la désallocation si on a un bonus +x dans cette skill. - Corrige : Détruit les minions(par exemple les squelettes) en trop près la désallocation si on a un bonus +x dans cette skill.
Changements apportés par la v3.02 : Changements apportés par la v3.02 :
- Corrige : le changement du nombre de points de Stats reçus à chaque gain de niveau. - Corrige : le changement du nombre de points de Stats reçus à chaque gain de niveau.
- Corrige : Quand le coffre partagé est désactivé vous pouvez charger vos persos. - Corrige : Quand le coffre partagé est désactivé vous pouvez charger vos persos.
- Corrige : Vous pouvez changer les paramètres du World Event sans activer les skill reçus à chaque gain de niveau. - Corrige : Vous pouvez changer les paramètres du World Event sans activer les skill reçus à chaque gain de niveau.
Changements apportés par la v3.01 : Changements apportés par la v3.01 :
- Change le nombre de points de Stats reçus à chaque gain de niveau. - Change le nombre de points de Stats reçus à chaque gain de niveau.
- Corrige les bugs qui donnent des points supplémentaires quand on désallouent les skills. - Corrige les bugs qui donnent des points supplémentaires quand on désallouent les skills.
- Ajoutent les paramètres du WorldEvent dans le fichier de configuration. - Ajoutent les paramètres du WorldEvent dans le fichier de configuration.
- Par défaut, Le WorldEvent AFFICHE "X SOJ vendu" uniquement dans la difficulté enfer. - Par défaut, Le WorldEvent AFFICHE "X SOJ vendu" uniquement dans la difficulté enfer.
Changements apportés par la v3.00 : Changements apportés par la v3.00 :
- World Event en Local pour le monojoueur et le multijoueur hors royaumes ! - World Event en Local pour le monojoueur et le multijoueur hors royaumes !
- Désalloue les points de capacités(skills) précédemment allouées. - Désalloue les points de capacités(skills) précédemment allouées.
@ -245,7 +249,6 @@ Changements apport
- On peut changer le nom du fichier de sauvegarde. - On peut changer le nom du fichier de sauvegarde.
- L'affichage du numero de page pour le coffre partagé est en rouge maintenant. - L'affichage du numero de page pour le coffre partagé est en rouge maintenant.
Changements apportés par la v2.05 : Changements apportés par la v2.05 :
- Correction importante : Le bug qui faisais que D2 ne démarrais est définitivement corrigé. - Correction importante : Le bug qui faisais que D2 ne démarrais est définitivement corrigé.
@ -293,19 +296,13 @@ Changements apport
******** INSTALLATION ******** ******** INSTALLATION ********
Les sites de téléchargement officiel sont :
http://djaftal.chez-alice.fr/
http://phrozenkeep.18v.biz/dload.php?action=category&cat_id=128
http://diablo2.judgehype.com/index.php?page=telechargements
Installation normale : Installation normale :
- Suivre les directives de l'installeur. - Suivre les directives de l'installeur.
note : Vous pouvez choisir le répertoire de "Diablo II" comme répertoire d'installation. note : Vous pouvez choisir le répertoire de "Diablo II" comme répertoire d'installation.
Installation dans un autre mod Installation dans un autre mod
- Copier PlugY.ini, PlugY.exe er PlugY folder (+son sontenu) dans le répertoire du mod ciblé. - Copier PlugY.ini, PlugY.exe et PlugY folder (+son sontenu) dans le répertoire du mod ciblé.
- Editer PlugY.ini pour configurer les options (voir section plus bas). - Editer PlugY.ini pour configurer les options (voir section plus bas).
- Lancer le jeu PlugY.exe et amusez-vous :) - Lancer le jeu PlugY.exe et amusez-vous :)
@ -314,8 +311,8 @@ note : Vous pouvez d
Exemple : Exemple :
Si vous avez installé Lord of Destruction ici : C:\Jeux\Diablo II\Diablo II.exe Si vous avez installé Lord of Destruction ici : C:\Jeux\Diablo II\Diablo II.exe
Et que le mod ciblé se trouve : D:\D2Mod\MyMod\ Et que le mod ciblé se trouve dans : D:\D2Mod\MyMod\
Et que un second mod se trouve là : D:\D2Mod\MyMod2\ Et qu'un second mod se trouve dans : D:\D2Mod\MyMod2\
Alors la configuration classique est ceci : Alors la configuration classique est ceci :
C:\Jeux\Diablo II\PlugY.dll C:\Jeux\Diablo II\PlugY.dll
D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6 D:\D2Mod\MyMod\PlugY\SharedGoldBtns.dc6
@ -492,6 +489,30 @@ Active les fonctions cach
- ActiveAllOthersFeatures=0 {0:Désactivé; 1:Activé} - ActiveAllOthersFeatures=0 {0:Désactivé; 1:Activé}
[WINDOWED]
Lancement en mode fenêtré.
- ActiveWindowed=0 {0:Désactivé; 1:Activé}
Supprime le cadre de la fenêtre en mode fenêtré.
- RemoveBorder=0 {0:Désactivé; 1:Activé}
Met la fenêtre au plus haut (au-dessus de la barre des tâches) en mode fenêtré.
- WindowOnTop=0 {0:Désactivé; 1:Activé}
Fenêtre centrée et maximisée (ratio maintenu à 4/3) en mode fenêtré (si SetWindowPos = 0).
- Maximized=0 {0:Désactivé; 1:Activé}
Définie la position et la taille de la fenêtre en mode fenêtré.
- SetWindowPos=0 {0:Désactivé; 1:Activé}
- X=0 {0:Position X de la fenêtre}
- Y=0 {0:Position Y de la fenêtre}
- Width=0 {0:Largeur de la fenêtre}
- Height=0 {0:Hauteur de la fenêtre}
Verrouiller le curseur da la souris dans la fenêtre en mode fenêtré.
- LockMouseOnStartup=0 {0:Désactivé; 1:Activé}
[LANGUAGE] [LANGUAGE]
Change la langue du jeu. Change la langue du jeu.
Vous devez avoir les fichiers de langue choisi. Vous devez avoir les fichiers de langue choisi.
@ -702,4 +723,5 @@ PS : D
* Italien : ItalianPlayer * Italien : ItalianPlayer
* Espagnol : Acrerune * Espagnol : Acrerune
* Polonais : Serdel * Polonais : Serdel
~~~~~~~~~~~~
;--------------------------------------------------------------------------------------;

View File

@ -4,7 +4,7 @@
; ; ; ;
; by Yohann Nicolas ; ; by Yohann Nicolas ;
; ; ; ;
; version 10.00 ; ; version 10.01 ;
; ; ; ;
;--------------------------------------------------------------------------------------; ;--------------------------------------------------------------------------------------;
@ -20,13 +20,13 @@ You can make a donation if you want.
- PlugY.ini has changed since previous version, use the one in this package. - PlugY.ini has changed since previous version, use the one in this package.
- Don't forget to read the part named "COMMENTS ON THE CONFIGURATION FILE". - Don't forget to read the part named "COMMENTS ON THE CONFIGURATION FILE".
- Don't forget to read the PlugY forum at : - Don't forget to read the PlugY forum at :
http://phrozenkeep.planetdiablo.gamespy.com/forum/viewforum.php?f=133 http://d2mods.info/forum/viewforum.php?f=133
******** FEATURES ******** ******** FEATURES ********
- Disable access to Battle.net. - Disable access to Battle.net.
- Infinite storage space in the stash (up to 4,294,967,296 personal pages!) - Infinite storage space in the stash.
- Shared storage space in the stash (up to 4,294,967,296 shared pages too!) - Shared storage space in the stash.
- Enabled the ladder only runewords out of realms. - Enabled the ladder only runewords out of realms.
- Local World Event and Uber Quest for singleplayer and multiplayer off-realm ! - Local World Event and Uber Quest for singleplayer and multiplayer off-realm !
- Can open Cow Level Portal even when player have kill the Cow King in that difficulty. - Can open Cow Level Portal even when player have kill the Cow King in that difficulty.
@ -42,21 +42,50 @@ You can make a donation if you want.
- Always display Mana and Life values above the globes. - Always display Mana and Life values above the globes.
- D2 can load all files, even those opened with Microsoft Excel (disabled by default). - D2 can load all files, even those opened with Microsoft Excel (disabled by default).
- Display the stats current value (without magical bonus) like Magic/gold find or maximum resistances. - Display the stats current value (without magical bonus) like Magic/gold find or maximum resistances.
- 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. - 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.
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.
v10.00 changes : v10.00 changes :
- Disable access to Battle.net via main menu button. - Disable access to Battle.net via main menu button.
- PlugY works for 1.13c version of LoD too. - PlugY works for 1.13c version of LoD too.
- Fix shortcut in start menu - Fix shortcut in start menu
v9.00 changes : v9.00 changes :
- PlugY works for 1.12 version of LoD too. - PlugY works for 1.12 version of LoD too.
- Fix somes bugs. - Fix somes bugs.
- Add option for unassign skill for mods. - Add option for unassign skill for mods.
v8.00 changes : v8.00 changes :
- Easier installation : New installer. - Easier installation : New installer.
- Can open Cow Level Portal even when player have kill the Cow King in that difficulty. - Can open Cow Level Portal even when player have kill the Cow King in that difficulty.
@ -67,12 +96,10 @@ v8.00 changes :
- Multiplayer : Save stash files (with client's data like version before 5.00) when a deconnection or error happend during saving process. - Multiplayer : Save stash files (with client's data like version before 5.00) when a deconnection or error happend during saving process.
- Remove the "check load memory failed" message when D2gfx.dll was patched. - Remove the "check load memory failed" message when D2gfx.dll was patched.
v7.01b changes : v7.01b changes :
- Fix the ladder only runewords features in versions 1.11 and 1.10 of LoD. - Fix the ladder only runewords features in versions 1.11 and 1.10 of LoD.
- Fix wierd characters in some text. - Fix wierd characters in some text.
v7.01 changes : v7.01 changes :
- Enabled the ladder only runewords out of realms. - Enabled the ladder only runewords out of realms.
- Fixed Uber Baal AI. - Fixed Uber Baal AI.
@ -81,7 +108,6 @@ v7.01 changes :
- Add an executable to launch PlugY (no more LoD's files modified) (RECALL) - Add an executable to launch PlugY (no more LoD's files modified) (RECALL)
- Translation into spanish and polish. - Translation into spanish and polish.
v7.00 changes : v7.00 changes :
- PlugY works for 1.11b version of LoD too. - PlugY works for 1.11b version of LoD too.
- Add an executable to launch PlugY (no more LoD's files modified) - Add an executable to launch PlugY (no more LoD's files modified)
@ -90,17 +116,14 @@ v7.00 changes :
- Fix features which stayed enabled on Battle.net. - Fix features which stayed enabled on Battle.net.
- Translation into italian. - Translation into italian.
v6.01b changes : v6.01b changes :
- Bug fix with the display of popup on stat assignment buttons. - Bug fix with the display of popup on stat assignment buttons.
v6.01 changes : v6.01 changes :
- Major fix : unique carry1 items don't disappear when they are cubbed in LoD 1.10 - Major fix : unique carry1 items don't disappear when they are cubbed in LoD 1.10
- Keys and Uber organs aren't destroyed when we try to open a Red Porpal out of Harrogath. - Keys and Uber organs aren't destroyed when we try to open a Red Porpal out of Harrogath.
- Fix conflict with D2Mod for the version display. - Fix conflict with D2Mod for the version display.
v6.00 changes : v6.00 changes :
- PlugY works for 1.11 version of LoD too ! - PlugY works for 1.11 version of LoD too !
- Enabled Uber Quest off realm (LoD 1.11 only). - Enabled Uber Quest off realm (LoD 1.11 only).
@ -108,14 +131,12 @@ v6.00 changes :
- Fixed some minor bugs and added some minor improvements. - Fixed some minor bugs and added some minor improvements.
- Added command "/save" to save the game without exit (LoD 1.11 only). - Added command "/save" to save the game without exit (LoD 1.11 only).
v5.06 changes : v5.06 changes :
- Added buttons for shared gold. - Added buttons for shared gold.
- Enabled shared gold in multiplayer. - Enabled shared gold in multiplayer.
- Command "/DisplayLifeMana" is replaced by "/dlm". - Command "/DisplayLifeMana" is replaced by "/dlm".
- Fixed some bugs. - Fixed some bugs.
v5.05 changes : v5.05 changes :
- Fixed bad default color in interface stats. - Fixed bad default color in interface stats.
- Added Shared gold via commands. - Added Shared gold via commands.
@ -123,30 +144,25 @@ v5.05 changes :
- Display green set item name in popup when it's in the shared stash. - Display green set item name in popup when it's in the shared stash.
- Fixed multiplayer bugs by redoing multiplayer procedure. - Fixed multiplayer bugs by redoing multiplayer procedure.
v5.04 changes : v5.04 changes :
- Fixed : Stat/Skill points per level-up bug. - Fixed : Stat/Skill points per level-up bug.
- Fixed : Multiplayer bugs. - Fixed : Multiplayer bugs.
- PlugY/PlugYDefault.ini completed. - PlugY/PlugYDefault.ini completed.
v5.03 changes : v5.03 changes :
- Fixed : Bug which sometimes swaps Hardcore and Softcore shared stash. - Fixed : Bug which sometimes swaps Hardcore and Softcore shared stash.
- Added color on extra stats page. - Added color on extra stats page.
- Changed default values on extra stats page. - Changed default values on extra stats page.
- Set EnabledTXTFilesWhenMSExcelOpenIt=1 in PlugY.ini file. - Set EnabledTXTFilesWhenMSExcelOpenIt=1 in PlugY.ini file.
v5.02 changes : v5.02 changes :
- Fixed : Previous bug fix which caused items to disappear. - Fixed : Previous bug fix which caused items to disappear.
v5.01 changes : v5.01 changes :
- Fixed : Major bugs in stash management. - Fixed : Major bugs in stash management.
- Fixed : Set back PlugY.ini with ActiveLogFile=0 by default. - Fixed : Set back PlugY.ini with ActiveLogFile=0 by default.
- Fixed : bug when shared stash is disabled. - Fixed : bug when shared stash is disabled.
v5.00 changes : v5.00 changes :
- PlugY works for 1.09, 1.09b, 1.09d versions of LoD, including mods based on these releases ! - PlugY works for 1.09, 1.09b, 1.09d versions of LoD, including mods based on these releases !
- PlugY can load D2Mod.dll. - PlugY can load D2Mod.dll.
@ -161,14 +177,12 @@ v5.00 changes :
- Fixed : The spawn of DiabloClone at starting of a new game - Fixed : The spawn of DiabloClone at starting of a new game
- Fixed : Some other small bugs. - Fixed : Some other small bugs.
v4.04 changes : v4.04 changes :
- Fixed : Display bug when statPerLevelUp enabled. - Fixed : Display bug when statPerLevelUp enabled.
- Fixed : Bug in saving procedure when the disk is full. - Fixed : Bug in saving procedure when the disk is full.
- New configuration system for modders. - New configuration system for modders.
- Always display Mana and Life values above the globes. - Always display Mana and Life values above the globes.
v4.03 changes : v4.03 changes :
- Fixed : "carry 1" unique item (unique charm) when we drop the cube. - Fixed : "carry 1" unique item (unique charm) when we drop the cube.
- Can go directly to first or last page of stash (shift + click on next/previous). - Can go directly to first or last page of stash (shift + click on next/previous).
@ -178,7 +192,6 @@ v4.03 changes :
- Moved buttons in extra stats pages to same place as in main stats page (only in 800x600). - Moved buttons in extra stats pages to same place as in main stats page (only in 800x600).
- Can choose whether the main (first) page or the last selected page is displayed on opening the stats page. - Can choose whether the main (first) page or the last selected page is displayed on opening the stats page.
v4.02b changes : v4.02b changes :
- Fixed : Features stay enabled in open Battle.net - Fixed : Features stay enabled in open Battle.net
@ -190,16 +203,13 @@ v4.02 changes :
- Fixed : Item level display enabled correctly for all configurations of PlugY. - Fixed : Item level display enabled correctly for all configurations of PlugY.
- Added data in the extra stats page. - Added data in the extra stats page.
v4.01 changes : v4.01 changes :
- Fixed : NbPlayers always set to 8 when active. - Fixed : NbPlayers always set to 8 when active.
- Added data in the extra stats page. - Added data in the extra stats page.
v4.00b changes : v4.00b changes :
- Fixed : MSVCR70.dll not found bug. - Fixed : MSVCR70.dll not found bug.
v4.00 changes : v4.00 changes :
- Better optimization of the code. - Better optimization of the code.
- Added some pages for displaying more characters stats like %MF. - Added some pages for displaying more characters stats like %MF.
@ -217,20 +227,17 @@ v4.00 changes :
- Fixed : Diablo Clone can't spawn in normal and nightmare difficulty. - Fixed : Diablo Clone can't spawn in normal and nightmare difficulty.
- Fixed : Destruction of extra minions after unassignment if you have +x bonus to the skill. - Fixed : Destruction of extra minions after unassignment if you have +x bonus to the skill.
v3.02 changes : v3.02 changes :
- Fixed : Change the number of stats points gained when player gains a level. - Fixed : Change the number of stats points gained when player gains a level.
- Fixed : When the shared stash is disabled, you can load a game with your character. - Fixed : When the shared stash is disabled, you can load a game with your character.
- Fixed : You can change parameters of World Event without activating skill per level up. - Fixed : You can change parameters of World Event without activating skill per level up.
v3.01 changes : v3.01 changes :
- Change the number of stats points gained when player gains a level. - Change the number of stats points gained when player gains a level.
- Fixed bugs which give extra points when skills points are unassigned. - Fixed bugs which give extra points when skills points are unassigned.
- Added parameters for the WorldEvent in configuration file. - Added parameters for the WorldEvent in configuration file.
- By default, World Event only SHOWS "X SOJ Sold" in hell difficulty. - By default, World Event only SHOWS "X SOJ Sold" in hell difficulty.
v3.00 changes : v3.00 changes :
- Local World Event for singleplayer and multiplayer off-realm ! - Local World Event for singleplayer and multiplayer off-realm !
- Unassign assigned skills points. - Unassign assigned skills points.
@ -238,11 +245,9 @@ v3.00 changes :
- Can change the filename of the shared savefile. - Can change the filename of the shared savefile.
- Shared stash page number display are in red now. - Shared stash page number display are in red now.
v2.05 changes : v2.05 changes :
- major fix : bugs which cause D2 not to start are finally removed. - major fix : bugs which cause D2 not to start are finally removed.
v2.04 changes : v2.04 changes :
- Unassign stats points, skills on level up are disabled when you connect to realm (like stash). - Unassign stats points, skills on level up are disabled when you connect to realm (like stash).
- Open a error message box instead of crash when PlugY.dll isn't found by D2. - Open a error message box instead of crash when PlugY.dll isn't found by D2.
@ -250,11 +255,9 @@ v2.04 changes :
- Fixed bug display of buttons. - Fixed bug display of buttons.
- Fixed win95/98/Me saving. - Fixed win95/98/Me saving.
v2.03b changes : v2.03b changes :
- Show PlugY version only in main screen. - Show PlugY version only in main screen.
v2.03 changes : v2.03 changes :
- Major fix : Correct and secure the saving procedure. - Major fix : Correct and secure the saving procedure.
- No more crash of the host game when a character is unable to enter the game. - No more crash of the host game when a character is unable to enter the game.
@ -262,7 +265,6 @@ v2.03 changes :
- Change version printing on main screen (change color & PlugY version in right corner) - Change version printing on main screen (change color & PlugY version in right corner)
- Character without PlugY can join game host with PlugY enabled. - Character without PlugY can join game host with PlugY enabled.
v2.02 changes : v2.02 changes :
- PlugY doesn't use D2win.dll to launch PlugY anymore. - PlugY doesn't use D2win.dll to launch PlugY anymore.
- PlugY includes a patcher/unpatcher for editing D2gfx.dll to launch PlugY. - PlugY includes a patcher/unpatcher for editing D2gfx.dll to launch PlugY.
@ -270,12 +272,10 @@ v2.02 changes :
- The infinite storage sytem is automatically disabled on a realm game. - The infinite storage sytem is automatically disabled on a realm game.
- Fixed index button bugs. - Fixed index button bugs.
v2.01 changes : v2.01 changes :
- Fixed skill per level up bug - Fixed skill per level up bug
- Fixed bug display of text in the main menu - Fixed bug display of text in the main menu
v2.00 changes : v2.00 changes :
- Localized in German. - Localized in German.
- Change the number of Skills points gained when player gains a level. - Change the number of Skills points gained when player gains a level.
@ -292,7 +292,6 @@ v2.00 changes :
- Removed the bug of "carry 1" - Removed the bug of "carry 1"
- Add other small improvements... :) - Add other small improvements... :)
v1.03 changes : v1.03 changes :
- Added French readme and ini files. - Added French readme and ini files.
- Removed bugs in D2Classic game (there is no multipage, it's not a bug) - Removed bugs in D2Classic game (there is no multipage, it's not a bug)
@ -302,12 +301,10 @@ v1.03 changes :
* must read : You can start any mods without moving SAVES files * must read : You can start any mods without moving SAVES files
(you need to move dll files with classic script). (you need to move dll files with classic script).
v1.02 changes : v1.02 changes :
- Re-changed name files due to an IE bug with colon in zip file. - Re-changed name files due to an IE bug with colon in zip file.
- Ability to change the version text print in the main menu (see ini file). - Ability to change the version text print in the main menu (see ini file).
v1.01 changes : v1.01 changes :
- Localized for french version (wait for an french readme.txt) - Localized for french version (wait for an french readme.txt)
- Changed filename from "PlugY, The Survival Kit.ini" to "PlugY,The_Survival_Kit". - Changed filename from "PlugY, The Survival Kit.ini" to "PlugY,The_Survival_Kit".
@ -317,7 +314,6 @@ v1.01 changes :
(you can add it if you want but need to know what are you doing...) (you can add it if you want but need to know what are you doing...)
- Released in .zip file instead of .rar - Released in .zip file instead of .rar
v1.00 features (can all be easily enabled or disabled) : v1.00 features (can all be easily enabled or disabled) :
- You can change the save path directory. - You can change the save path directory.
- You can start any mods without moving saves files. - You can start any mods without moving saves files.
@ -353,12 +349,6 @@ v1.00 features (can all be easily enabled or disabled) :
******** INSTALLATION ******** ******** INSTALLATION ********
- The officials sites are :
http://djaftal.chez-alice.fr/
http://phrozenkeep.18v.biz/dload.php?action=category&cat_id=128
http://diablo2.judgehype.com/index.php?page=telechargements
Normal Installation : Normal Installation :
- Follow directive installer. - Follow directive installer.
@ -548,17 +538,14 @@ Following are default values, between {} are some examples values with descripti
- ActivePlugin=0 {0:Don't load any features; 1:Plugin enabled} - ActivePlugin=0 {0:Don't load any features; 1:Plugin enabled}
Enable or disable BattleNet Access. Enable or disable BattleNet Access.
Following are default values, between {} are some examples values with descriptions :
- DisableBattleNet=1 {0:Battle.net access enable; 1:Battle.net access disable} - DisableBattleNet=1 {0:Battle.net access enable; 1:Battle.net access disable}
Create a log file "PlugY.log" in the current directory. Create a log file "PlugY.log" in the current directory.
This feature can slow down your game. This feature can slow down your game.
Following are default values, between {} are some examples values with descriptions :
- ActiveLogFile=0 {0:No information is written while playing; 1:Always enabled} - ActiveLogFile=0 {0:No information is written while playing; 1:Always enabled}
Load dll of a specific mod for used PlugY in same time. Load dll of a specific mod for used PlugY in same time.
Separate each dll file name by the character pipe (|) Separate each dll file name by the character pipe (|)
Following are default values, between {} are some examples values with descriptions :
- DllToLoad= {(empty): load nothing; D2extra.dll|myDll.dll: Load both D2extra.dll and myDll.dll} - DllToLoad= {(empty): load nothing; D2extra.dll|myDll.dll: Load both D2extra.dll and myDll.dll}
- DllToLoad2= {(empty): Same as DlltoLoad} - DllToLoad2= {(empty): Same as DlltoLoad}
@ -576,6 +563,30 @@ Activate hidden or not-finished feature. (don't use it)
- ActiveAllOthersFeatures=0 {0:Disabled; 1:Enabled} - ActiveAllOthersFeatures=0 {0:Disabled; 1:Enabled}
[WINDOWED]
Launch in windowed mode.
- ActiveWindowed=0 {0:Disabled; 1:Enabled}
Remove border in windowed mode.
- RemoveBorder=0 {0:Disabled; 1:Enabled}
Set window at most top (above taskbar) in windowed mode.
- WindowOnTop=0 {0:Disabled; 1:Enabled}
Maximized and center window (keep ratio 4/3) in windowed mode (if SetWindowPos=0).
- Maximized=0 {0:Disabled; 1:Enabled}
Set position and size of the window in windowed mode.
- SetWindowPos=0 {0:Disabled; 1:Enabled}
- X=0 {0:Window Position X}
- Y=0 {0:Window Position Y}
- Width=0 {0:Window Width}
- Height=0 {0:Window Height}
Lock cursor mouse in the window in windowed mode.
- LockMouseOnStartup=0 {0:Disabled; 1:Enabled}
[LANGUAGE] [LANGUAGE]
Change the selected language. Change the selected language.
You must have files of the selected language. You must have files of the selected language.
@ -657,6 +668,7 @@ Following are default values, between {} are some examples values with descripti
[STAT ON LEVEL UP] [STAT ON LEVEL UP]
WARNING : CHEAT, DON'T USE IN NORMAL GAME.
Change the number of Stats Points you receive when your character gains a level. Change the number of Stats Points you receive when your character gains a level.
Following are default values, between {} are some examples values with descriptions : Following are default values, between {} are some examples values with descriptions :
- ActiveStatPerLevelUp=0 {0:Disabled; 1:Enabled} - ActiveStatPerLevelUp=0 {0:Disabled; 1:Enabled}
@ -676,6 +688,7 @@ Following are default values, between {} are some examples values with descripti
[SKILL ON LEVEL UP] [SKILL ON LEVEL UP]
WARNING : CHEAT, DON'T USE IN NORMAL GAME.
Change the number of Skills Points you receive when your character gains a level. Change the number of Skills Points you receive when your character gains a level.
Following are default values, between {} are some examples values with descriptions : Following are default values, between {} are some examples values with descriptions :
- ActiveSkillPerLevelUp=0 {0:Disabled; 1:Enabled} - ActiveSkillPerLevelUp=0 {0:Disabled; 1:Enabled}
@ -786,4 +799,5 @@ PS : Sorry for english faults ;)
* Italian : ItalianPlayer * Italian : ItalianPlayer
* Spanish : Acrerune * Spanish : Acrerune
* Polish : Serdel * Polish : Serdel
~~~~~~~~~~~~
;--------------------------------------------------------------------------------------;

View File

@ -1,16 +1,8 @@
/* /*
File created by Yohann NICOLAS. File created by Yohann NICOLAS.
*/ */
#include <windows.h> #include "stdafx.h"
#include <stdio.h> #include "PlugYRun.h"
#include <Psapi.h>
//#using <mscorlib.dll>
//#using <System.dll>
//using namespace EnvDTE;
//using namespace System;
//using namespace System::Diagnostics;
//using namespace System::ComponentModel;
//using namespace System.Diagnostics;
/* /*
0012C458 00000000 |ModuleFileName = NULL 0012C458 00000000 |ModuleFileName = NULL
0012C45C 0012C908 |CommandLine = ""C:\Jeux\Diablo II\Game.exe"" 0012C45C 0012C908 |CommandLine = ""C:\Jeux\Diablo II\Game.exe""
@ -22,115 +14,118 @@
0012C474 0012DF94 |CurrentDir = "C:\Jeux\Diablo II\" 0012C474 0012DF94 |CurrentDir = "C:\Jeux\Diablo II\"
0012C478 0012C6BC |pStartupInfo = 0012C6BC 0012C478 0012C6BC |pStartupInfo = 0012C6BC
0012C47C 0012C5CC \pProcessInfo = 0012C5CC 0012C47C 0012C5CC \pProcessInfo = 0012C5CC
$ ==> >44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D............... $ ==> >44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
$+10 >1A 13 03 00 08 00 00 00 14 13 04 00 00 00 00 00 ......... $+10 >1A 13 03 00 08 00 00 00 14 13 04 00 00 00 00 00
$+20 >01 00 00 00 0C C7 12 00 34 87 D1 77 81 00 00 00 ....Ç.4Ñw<EFBFBD>... $+20 >01 00 00 00 0C C7 12 00 34 87 D1 77 81 00 00 00
$+30 >0A 00 00 00 00 00 00 00 00 00 00 00 89 F6 D4 77 ............öÔw $+30 >0A 00 00 00 00 00 00 00 00 00 00 00 89 F6 D4 77
$+40 >CD AB BA DC 00 00 00 00 Í«ºÜ.... $+40 >CD AB BA DC 00 00 00 00
//0xE9,0x1C,0xD1,0xA8,0x6F 0xE9,0x1C,0xD1,0xA8,0x6F
*/ */
#define MAX_LOADSTRING 100
#define SUBKEY "Software\\Blizzard Entertainment\\Diablo II" #define SUBKEY "Software\\Blizzard Entertainment\\Diablo II"
#define GAMEFILE "\\Game.exe " #define GAMEFILE "Game.exe "
#define INIFILE "\\PlugY.ini" #define INIFILE "PlugY.ini"
#define LAUNCHING "LAUNCHING" #define LAUNCHING "LAUNCHING"
#define LOD_VERSION "LodVersionFolder" #define LOD_VERSION "LodVersionFolder"
#define PARAM "Param" #define PARAM "Param"
#define WINDOWED "Windowed"
#define ACTIVE_WINDOWED "ActiveWindowed"
#define LIBRARY_NAME "Library" #define LIBRARY_NAME "Library"
BYTE loadDll[]={ BYTE loadDll[] = {
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4] 0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA 0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA
0x50, //PUSH EAX 0x50, //PUSH EAX
0x68,0x80,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE80 ; ASCII "PlugY.dll" 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 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 0xA3,0xFC,0xEF,0xA8,0x6F, //MOV DWORD PTR DS:[6FA8EFFC],EAX
0x85,0xC0, //TEST EAX,EAX 0x85,0xC0, //TEST EAX,EAX
0x74,0x2F, //JE SHORT d2gfx.6FA7BE37 0x74,0x2F, //JE SHORT d2gfx.6FA7BE37
0x50, //PUSH EAX 0x50, //PUSH EAX
0x68,0x90,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE10 ;Init String 0x68,0x90,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE10 ;Init String
0x50, //PUSH EAX 0x50, //PUSH EAX
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress 0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
0x85,0xC0, //TEST EAX,EAX 0x85,0xC0, //TEST EAX,EAX
0x74,0x04, //JE SHORT d2gfx.6FA7BDC1 0x74,0x04, //JE SHORT d2gfx.6FA7BDC1
0x6A,0x00, //PUSH 0 0x6A,0x00, //PUSH 0
0xEB,0x13, //JMP SHORT d2gfx.6FA7BDC1 0xEB,0x13, //JMP SHORT d2gfx.6FA7BDC1
0x68,0x10,0x27,0x00,0x00, //PUSH 2710 ;Init Ordinal(10000) 0x68,0x10,0x27,0x00,0x00, //PUSH 2710 ;Init Ordinal(10000)
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4] 0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress 0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
0x85,0xC0, //TEST EAX,EAX 0x85,0xC0, //TEST EAX,EAX
0x74,0x02, //JE SHORT d2gfx.6FA7BDC1 0x74,0x02, //JE SHORT d2gfx.6FA7BDC1
0xFF,0xD0, //CALL EAX 0xFF,0xD0, //CALL EAX
0x58, //POP EAX 0x58, //POP EAX
0x58, //POP EAX 0x58, //POP EAX
0xC2,0x04,0x00, //RETN 4 0xC2,0x04,0x00, //RETN 4
0x59, //POP ECX 0x59, //POP ECX
0xB9,0x80,0xBE,0xA7,0x6F, //MOV ECX,d2gfx.6FA7BE80 ; ASCII "PlugY.dll" 0xB9,0x80,0xBE,0xA7,0x6F, //MOV ECX,d2gfx.6FA7BE80 ; ASCII "PlugY.dll"
0x83,0x04,0x24,0x10, //ADD DWORD PTR SS:[ESP],10 0x83,0x04,0x24,0x10, //ADD DWORD PTR SS:[ESP],10
0xC2,0x04,0x00, //RETN 4 0xC2,0x04,0x00, //RETN 4
0x00,0x00,0x00,0x00}; //HANDLE var; 0x00,0x00,0x00,0x00 }; //HANDLE var;
BYTE freeDll[]={ BYTE freeDll[] = {
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4] 0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] ; kernel32.FreeLibrary 0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] ; kernel32.FreeLibrary
0x50, //PUSH EAX 0x50, //PUSH EAX
0xA1,0xFC,0xEF,0xA8,0x6F, //MOV EAX,DWORD PTR DS:[6FA8EFFC] 0xA1,0xFC,0xEF,0xA8,0x6F, //MOV EAX,DWORD PTR DS:[6FA8EFFC]
0x85,0xC0, //TEST EAX,EAX 0x85,0xC0, //TEST EAX,EAX
0x74,0x2D, //JE SHORT d2gfx.6FA7BE74 0x74,0x2D, //JE SHORT d2gfx.6FA7BE74
0x50, //PUSH EAX 0x50, //PUSH EAX
0x68,0xA0,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE20 ;Release String 0x68,0xA0,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE20 ;Release String
0x50, //PUSH EAX 0x50, //PUSH EAX
//0x33,0xC0, //XOR EAX,EAX //0x33,0xC0, //XOR EAX,EAX
//0xA3,0xFC,0xEF,0xA8,0x6F, //MOV DWORD PTR DS:[6FA8EFFC],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 0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
0x85,0xC0, //TEST EAX,EAX 0x85,0xC0, //TEST EAX,EAX
0x75,0x13, //JNZ SHORT d2gfx.6FA7BDEF 0x75,0x13, //JNZ SHORT d2gfx.6FA7BDEF
0x68,0x11,0x27,0x00,0x00, //PUSH 2711 ;Release Ordinal(10001) 0x68,0x11,0x27,0x00,0x00, //PUSH 2711 ;Release Ordinal(10001)
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4] 0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress 0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
0x85,0xC0, //TEST EAX,EAX 0x85,0xC0, //TEST EAX,EAX
0x74,0x02, //JE SHORT d2gfx.6FA7BDEF 0x74,0x02, //JE SHORT d2gfx.6FA7BDEF
0xFF,0xD0, //CALL EAX 0xFF,0xD0, //CALL EAX
0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; kernel32.FreeLibrary 0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; kernel32.FreeLibrary
0x58, //POP EAX 0x58, //POP EAX
0xC2,0x04,0x00}; //RETN 4 0xC2,0x04,0x00 }; //RETN 4
//LPCSTR dllName = "PlugY.dll"; //LPCSTR dllName = "PlugY.dll";
LPCSTR initFctName = "_Init@4"; LPCSTR initFctName = "_Init@4";
LPCSTR releaseFctName = "_Release@0"; LPCSTR releaseFctName = "_Release@0";
static bool versionXP; static bool versionXP;
typedef int (__stdcall* tDebugActiveProcessStop)(DWORD); typedef int(__stdcall* tDebugActiveProcessStop)(DWORD);
tDebugActiveProcessStop debugActiveProcessStop; tDebugActiveProcessStop debugActiveProcessStop;
void assertion(LPCSTR msg) void assertion(LPCSTR msg)
{ {
MessageBox(0, msg, "PlugYRun", MB_OK|MB_ICONASTERISK); MessageBox(0, msg, "PlugY", MB_OK | MB_ICONASTERISK);
exit(1); exit(1);
} }
bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd) bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
{ {
BYTE buf[200]; BYTE buf[200];
DWORD pos=0; DWORD pos = 0;
SIZE_T nb=0; SIZE_T nb = 0;
DWORD version; DWORD version;
int res; int res;
// Get Version and needed addresses. // Get Version and needed addresses.
res = ReadProcessMemory(h,(LPVOID)(addr+0x110),&version,4,&nb);//0x80 res = ReadProcessMemory(h, (LPVOID)(addr + 0x110), &version, 4, &nb);//0x80
if (!res || (nb!=4)) assertion("Read to get current d2gfx version in memory failed"); if (!res || (nb != 4)) assertion("Read to get current d2gfx version in memory failed");
DWORD loadCallerAddr = addr; DWORD loadCallerAddr = addr;
DWORD freeCallerAddr = addr; DWORD freeCallerAddr = addr;
DWORD loadLibraryAddr = addr; DWORD loadLibraryAddr = addr;
DWORD freeLibraryAddr = addr; DWORD freeLibraryAddr = addr;
DWORD getProcAddressAddr = addr; DWORD getProcAddressAddr = addr;
// GET_VERSION(D2gfx, 110, 000054EB, 00001000, 0000C000, 42E6C22A, 43028B19);//110 // GET_VERSION(D2gfx, 110, 000054EB, 00001000, 0000C000, 42E6C22A, 43028B19);//110
switch (version) switch (version)
{ {
case 0x000054EB://1.09b 0x00949FA8: case 0x000054EB://1.09b 0x00949FA8:
@ -182,17 +177,17 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
//Verify if memory are ok. //Verify if memory are ok.
bool alreadyInstalled = false; bool alreadyInstalled = false;
res = ReadProcessMemory(h,(LPVOID)loadCallerAddr,buf,6,&nb); res = ReadProcessMemory(h, (LPVOID)loadCallerAddr, buf, 6, &nb);
if (!res || nb<6 ) assertion("Read memory failed for checking."); if (!res || nb<6) assertion("Read memory failed for checking.");
if (buf[0]!=0xFF || buf[1]!=0x15 || *(DWORD*)(buf+2) != loadLibraryAddr) 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) 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."); assertion("Checking library memory check failed.");
else else
alreadyInstalled = true; alreadyInstalled = true;
res = ReadProcessMemory(h,(LPVOID)freeCallerAddr,buf,6,&nb); res = ReadProcessMemory(h, (LPVOID)freeCallerAddr, buf, 6, &nb);
if (!res || nb<6 ) assertion("Read memory failed for checking."); if (!res || nb<6) assertion("Read memory failed for checking.");
if (buf[0]!=0xFF || buf[1]!=0x15 || *(DWORD*)(buf+2) != freeLibraryAddr) 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 (buf[0] != 0xE8 /*|| buf[1]!=0x75 || buf[2]!=0x1A*/ || buf[3] != 0x00 || buf[4] != 0x00 || buf[5] != 0x90)
if (!alreadyInstalled) if (!alreadyInstalled)
assertion("Checking library memory failed."); assertion("Checking library memory failed.");
@ -200,45 +195,45 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
return true; return true;
//Alloc custom memory data. //Alloc custom memory data.
DWORD memory = (DWORD)VirtualAllocEx(h,NULL,200,MEM_COMMIT,PAGE_EXECUTE_READWRITE); DWORD memory = (DWORD)VirtualAllocEx(h, NULL, 200, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
DWORD oldProtect=-1; DWORD oldProtect = -1;
if (!memory) if (!memory)
{ {
// MessageBox(0, "no memory", "RunPlugY.\n", MB_OK|MB_ICONASTERISK); // MessageBox(0, "no memory", "RunPlugY.\n", MB_OK|MB_ICONASTERISK);
memory = addr + 0xBE00 + isAdd*0x1000; memory = addr + 0xBE00 + isAdd * 0x1000;
if( !VirtualProtectEx(h,(LPVOID)memory, 200, PAGE_EXECUTE_READWRITE, &oldProtect) ) if (!VirtualProtectEx(h, (LPVOID)memory, 200, PAGE_EXECUTE_READWRITE, &oldProtect))
assertion("Failed to get memory pool for PlugY loading."); assertion("Failed to get memory pool for PlugY loading.");
} }
//Make memory data //Make memory data
int len; int len;
pos=0; pos = 0;
//Dll name //Dll name
DWORD dllNameAddr = memory+pos; DWORD dllNameAddr = memory + pos;
len = strlen(libraryName)+1; len = strlen(libraryName) + 1;
res = WriteProcessMemory(h,(LPVOID)dllNameAddr,libraryName,len,&nb); res = WriteProcessMemory(h, (LPVOID)dllNameAddr, libraryName, len, &nb);
if (!res || (nb!=len)) assertion("Write custom data in memory failed"); if (!res || (nb != len)) assertion("Write custom data in memory failed");
pos += pos%16 ? len + 16 - pos%16 : len; pos += pos % 16 ? len + 16 - pos % 16 : len;
//init name //init name
DWORD initNameAddr = memory+pos; DWORD initNameAddr = memory + pos;
len = strlen(initFctName)+1; len = strlen(initFctName) + 1;
res = WriteProcessMemory(h,(LPVOID)initNameAddr,initFctName,len,&nb); res = WriteProcessMemory(h, (LPVOID)initNameAddr, initFctName, len, &nb);
if (!res || (nb!=len)) assertion("Write custom data in memory failed"); if (!res || (nb != len)) assertion("Write custom data in memory failed");
pos += pos%16 ? len + 16 - pos%16 : len; pos += pos % 16 ? len + 16 - pos % 16 : len;
//release name //release name
DWORD releaseNameAddr = memory+pos; DWORD releaseNameAddr = memory + pos;
len = strlen(releaseFctName)+1; len = strlen(releaseFctName) + 1;
res = WriteProcessMemory(h,(LPVOID)releaseNameAddr,releaseFctName,len,&nb); res = WriteProcessMemory(h, (LPVOID)releaseNameAddr, releaseFctName, len, &nb);
if (!res || (nb!=len)) assertion("Write custom data in memory failed"); if (!res || (nb != len)) assertion("Write custom data in memory failed");
pos += pos%16 ? len + 16 - pos%16 : len; pos += pos % 16 ? len + 16 - pos % 16 : len;
//load fct //load fct
DWORD loadDllAddr = memory+pos; DWORD loadDllAddr = memory + pos;
DWORD handleAddr = loadDllAddr + sizeof(loadDll) - 4; DWORD handleAddr = loadDllAddr + sizeof(loadDll) - 4;
*(DWORD*)&loadDll[6] = loadLibraryAddr; *(DWORD*)&loadDll[6] = loadLibraryAddr;
*(DWORD*)&loadDll[12] = dllNameAddr; *(DWORD*)&loadDll[12] = dllNameAddr;
*(DWORD*)&loadDll[18] = loadLibraryAddr; *(DWORD*)&loadDll[18] = loadLibraryAddr;
*(DWORD*)&loadDll[23] = handleAddr; *(DWORD*)&loadDll[23] = handleAddr;
@ -247,42 +242,42 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
*(DWORD*)&loadDll[63] = getProcAddressAddr; *(DWORD*)&loadDll[63] = getProcAddressAddr;
*(DWORD*)&loadDll[80] = dllNameAddr; *(DWORD*)&loadDll[80] = dllNameAddr;
len = sizeof(loadDll); len = sizeof(loadDll);
res = WriteProcessMemory(h,(LPVOID)loadDllAddr,loadDll,len,&nb); res = WriteProcessMemory(h, (LPVOID)loadDllAddr, loadDll, len, &nb);
if (!res || (nb!=len)) assertion("Write custom data in memory failed"); if (!res || (nb != len)) assertion("Write custom data in memory failed");
pos += pos%16 ? len + 16 - pos%16 : len; pos += pos % 16 ? len + 16 - pos % 16 : len;
//free fct //free fct
DWORD freeDllAddr = memory+pos; DWORD freeDllAddr = memory + pos;
*(DWORD*)&freeDll[6] = freeLibraryAddr; *(DWORD*)&freeDll[6] = freeLibraryAddr;
*(DWORD*)&freeDll[12] = handleAddr; *(DWORD*)&freeDll[12] = handleAddr;
*(DWORD*)&freeDll[22] = releaseNameAddr; *(DWORD*)&freeDll[22] = releaseNameAddr;
// *(DWORD*)&freeDll[30] = handleAddr; // *(DWORD*)&freeDll[30] = handleAddr;
*(DWORD*)&freeDll[36-7] = getProcAddressAddr; *(DWORD*)&freeDll[36 - 7] = getProcAddressAddr;
*(DWORD*)&freeDll[55-7] = getProcAddressAddr; *(DWORD*)&freeDll[55 - 7] = getProcAddressAddr;
*(DWORD*)&freeDll[67-7] = freeLibraryAddr; *(DWORD*)&freeDll[67 - 7] = freeLibraryAddr;
len = sizeof(freeDll); len = sizeof(freeDll);
res = WriteProcessMemory(h,(LPVOID)freeDllAddr,freeDll,len,&nb); res = WriteProcessMemory(h, (LPVOID)freeDllAddr, freeDll, len, &nb);
if (!res || (nb!=len)) assertion("Write custom data in memory failed"); if (!res || (nb != len)) assertion("Write custom data in memory failed");
pos += pos%16 ? len + 16 - pos%16 : len; pos += pos % 16 ? len + 16 - pos % 16 : len;
//Patch load library //Patch load library
buf[0]=0x90; buf[0] = 0x90;
buf[1]=0xE8; buf[1] = 0xE8;
*(DWORD*)(buf+2) = (DWORD)loadDllAddr - (DWORD)loadCallerAddr-6; *(DWORD*)(buf + 2) = (DWORD)loadDllAddr - (DWORD)loadCallerAddr - 6;
len = 6; len = 6;
res = WriteProcessMemory(h,(LPVOID)loadCallerAddr,buf,len,&nb); res = WriteProcessMemory(h, (LPVOID)loadCallerAddr, buf, len, &nb);
if (!res || (nb!=len)) assertion("Write load library in memory failed"); if (!res || (nb != len)) assertion("Write load library in memory failed");
//Patch free library //Patch free library
*(DWORD*)(buf+2) = (DWORD)freeDllAddr - (DWORD)freeCallerAddr-6; *(DWORD*)(buf + 2) = (DWORD)freeDllAddr - (DWORD)freeCallerAddr - 6;
res = WriteProcessMemory(h,(LPVOID)freeCallerAddr,buf,len,&nb); res = WriteProcessMemory(h, (LPVOID)freeCallerAddr, buf, len, &nb);
if (!res || (nb!=len)) assertion("Write free library in memory failed"); if (!res || (nb != len)) assertion("Write free library in memory failed");
// sprintf(tmp,"mem = %08X (read = %d)",buf[0],nbRead); // sprintf(tmp,"mem = %08X (read = %d)",buf[0],nbRead);
// MessageBox(0, tmp, "RunPlugY.\n", MB_OK|MB_ICONASTERISK); // MessageBox(0, tmp, "RunPlugY.\n", MB_OK|MB_ICONASTERISK);
// if (oldProtect != -1) // if (oldProtect != -1)
// VirtualProtectEx(h,(LPVOID)memory, 200, oldProtect, &oldProtect); // VirtualProtectEx(h,(LPVOID)memory, 200, oldProtect, &oldProtect);
return true; return true;
} }
@ -294,21 +289,21 @@ bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
/*bool copyLodVersionFiles() /*bool copyLodVersionFiles()
{ {
BYTE folder[MAX_PATH]; BYTE folder[MAX_PATH];
if (!GetPrivateProfileString(LAUNCHING,LOD_VERSION,"",folder,MAX_PATH,INI_FILE)) if (!GetPrivateProfileString(LAUNCHING,LOD_VERSION,"",folder,MAX_PATH,INI_FILE))
return true; return true;
strcat(folder,"\\*"); strcat(folder,"\\*");
WIN32_FIND_DATA FindFileData; WIN32_FIND_DATA FindFileData;
HANDLE hFind = FindFirstFile(folder,&FindFileData); HANDLE hFind = FindFirstFile(folder,&FindFileData);
if (hFind==INVALID_HANDLE_VALUE) if (hFind==INVALID_HANDLE_VALUE)
return true; return true;
do { do {
// CopyFile(); // CopyFile();
} while (FindNextFile(hFind,&FindFileData); } while (FindNextFile(hFind,&FindFileData);
FindClose(hFind); FindClose(hFind);
return true; return true;
}*/ }*/
@ -317,342 +312,254 @@ bool isD2gfx(HANDLE hProcess, LPVOID dllAdr)
{ {
SIZE_T nbRead; SIZE_T nbRead;
BYTE buf[BUF_SIZE]; BYTE buf[BUF_SIZE];
ReadProcessMemory(hProcess,dllAdr,buf,BUF_SIZE, &nbRead); ReadProcessMemory(hProcess, dllAdr, buf, BUF_SIZE, &nbRead);
if (nbRead < 0x40) return false; if (nbRead < 0x40) return false;
int offsetPESignature = *(DWORD*)(buf+0x3C); int offsetPESignature = *(DWORD*)(buf + 0x3C);
if (offsetPESignature+38 >= BUF_SIZE) return false; if (offsetPESignature + 38 >= BUF_SIZE) return false;
DWORD baseOfCode = *(DWORD*)(buf+offsetPESignature + 0x34); DWORD baseOfCode = *(DWORD*)(buf + offsetPESignature + 0x34);
if ( ( baseOfCode != 0x6FA80000) && (baseOfCode != 0x6FA70000)) return false; if ((baseOfCode != 0x6FA80000) && (baseOfCode != 0x6FA70000)) return false;
return true; return true;
} }
bool getWinReg(char* buf, DWORD bufsize) bool isGameLoaded(HANDLE hProcess, LPVOID baseAdr)
{
SIZE_T nbRead;
BYTE buf[BUF_SIZE];
ReadProcessMemory(hProcess, baseAdr, buf, BUF_SIZE, &nbRead);
if (nbRead < 0x40) return false;
int offsetPESignature = *(DWORD*)(buf + 0x3C);
if (offsetPESignature + 0x5C >= BUF_SIZE) return false;
DWORD baseOfCode = *(DWORD*)(buf + offsetPESignature + 0x34);
DWORD SizeOfImage = *(DWORD*)(buf + offsetPESignature + 0x50);
DWORD CheckSum = *(DWORD*)(buf + offsetPESignature + 0x58);
if ((baseOfCode==0x00400000) && (SizeOfImage == 0x005A5000) && (CheckSum == 0x00374101)) return true;//1.14c
return false;
}
bool getWinReg(LPSTR buf, DWORD bufsize)
{ {
HKEY hKey; HKEY hKey;
DWORD type; DWORD type;
int res; int res;
DWORD len = bufsize;
if (RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { if (RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
res = RegQueryValueEx(hKey,"InstallPath",NULL,&type,(LPBYTE)buf,&bufsize); res = RegQueryValueEx(hKey, "InstallPath", NULL, &type, (LPBYTE)buf, &len);
RegCloseKey(hKey); RegCloseKey(hKey);
if (res!=ERROR_SUCCESS) return false; if (res != ERROR_SUCCESS) return false;
} else if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { }
res = RegQueryValueEx(hKey,"InstallPath",NULL,&type,(LPBYTE)buf,&bufsize); else if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
res = RegQueryValueEx(hKey, "InstallPath", NULL, &type, (LPBYTE)buf, &len);
RegCloseKey(hKey); RegCloseKey(hKey);
if (res!=ERROR_SUCCESS) return false; if (res != ERROR_SUCCESS) return false;
} else { }
else {
return false; return false;
} }
strcat(buf, GAMEFILE); if (len <= 1)
if (GetFileAttributes(buf) == INVALID_FILE_ATTRIBUTES)
return false; return false;
if (buf[len - 2] != '\\')
{
if (len >= bufsize)
return false;
buf[len - 1] = '\\';
buf[len] = NULL;
}
return true; return true;
} }
bool launchNormal(char* command, char* currentDirectory) bool launchNormal(LPSTR commandLine, LPSTR currentDirectory)
{ {
STARTUPINFO si; STARTUPINFO si;
PROCESS_INFORMATION pi; PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) ); ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si); si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) ); ZeroMemory(&pi, sizeof(pi));
BOOL success = CreateProcess(0, command, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS BOOL success = CreateProcess(NULL, commandLine, NULL, NULL, false, 0, NULL, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
return success?true:false; return success ? true : false;
} }
bool launchGame98(char* command, char* currentDirectory, char* libraryName) bool launchGame98(LPSTR commandLine, LPSTR currentDirectory, LPSTR libraryName)
{ {
// MessageBox(0, "LAUNCH 98", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "LAUNCH 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
STARTUPINFO si; STARTUPINFO si;
PROCESS_INFORMATION pi; PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) ); ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si); si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) ); ZeroMemory(&pi, sizeof(pi));
BOOL success = CreateProcess(0, command, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS BOOL success = CreateProcess(0, commandLine, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
if (!success) return false; if (!success) return false;
DWORD ret; DWORD ret;
// MessageBox(0, "LAUNCH 98 while", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "LAUNCH 98 while", "PlugYRun", MB_OK|MB_ICONASTERISK);
Sleep(10); Sleep(10);
while (true) while (true)
{ {
SuspendThread(pi.hThread);// == (DWORD)-1) SuspendThread(pi.hThread);// == (DWORD)-1)
//MessageBox(0, "Thread not suspended", "PlugYRun", MB_OK|MB_ICONASTERISK); //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); exit(0);
if (isD2gfx(pi.hProcess,(LPVOID)0x6FA80000)) if (isD2gfx(pi.hProcess, (LPVOID)0x6FA80000))
{ {
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
installPlugY(pi.hProcess, 0x6FA80000, libraryName, 1); installPlugY(pi.hProcess, 0x6FA80000, libraryName, 1);
ResumeThread(pi.hThread); ResumeThread(pi.hThread);
return true; return true;
} }
if (isD2gfx(pi.hProcess,(LPVOID)0x6FA70000)) if (isD2gfx(pi.hProcess, (LPVOID)0x6FA70000))
{ {
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
installPlugY(pi.hProcess, 0x6FA70000, libraryName, 0); installPlugY(pi.hProcess, 0x6FA70000, libraryName, 0);
ResumeThread(pi.hThread); ResumeThread(pi.hThread);
return true; return true;
} }
ResumeThread(pi.hThread); ResumeThread(pi.hThread);
// Sleep(10); // Sleep(10);
} }
return true; return true;
} }
bool launchGameXP(LPSTR commandLine, LPSTR currentDirectory, LPSTR libraryName)
bool launchGameXP(char* command, char* currentDirectory, char* libraryName)
{ {
// MessageBox(0, "LAUNCH XP", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "LAUNCH XP", "PlugYRun", MB_OK|MB_ICONASTERISK);
STARTUPINFO si; STARTUPINFO si;
PROCESS_INFORMATION pi; PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) ); ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si); si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) ); ZeroMemory(&pi, sizeof(pi));
BOOL success = CreateProcess(0, command, 0, 0, false, DEBUG_PROCESS, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS BOOL success = CreateProcess(0, commandLine, 0, 0, false, DEBUG_PROCESS, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
if (!success) return false; if (!success) return false;
DEBUG_EVENT DebugEvent; DEBUG_EVENT DebugEvent;
DWORD status; DWORD status;
// MessageBox(0, "START WAITING", "PlugYRun", MB_OK|MB_ICONASTERISK); while (WaitForDebugEvent(&DebugEvent, INFINITE))
while (WaitForDebugEvent(&DebugEvent,INFINITE))
{ {
status = DBG_CONTINUE; status = DBG_CONTINUE;
switch(DebugEvent.dwDebugEventCode) switch (DebugEvent.dwDebugEventCode)
{ {
case CREATE_THREAD_DEBUG_EVENT: case CREATE_THREAD_DEBUG_EVENT:
CloseHandle(DebugEvent.u.CreateThread.hThread); CloseHandle(DebugEvent.u.CreateThread.hThread);
break; break;
case CREATE_PROCESS_DEBUG_EVENT: case CREATE_PROCESS_DEBUG_EVENT:
if (isGameLoaded(pi.hProcess, DebugEvent.u.CreateProcessInfo.lpBaseOfImage))
{
//installPlugYOnGame(pi.hProcess, (DWORD)DebugEvent.u.CreateProcessInfo.lpBaseOfImage, libraryName, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll == 0x6FA8000);
CloseHandle(DebugEvent.u.CreateProcessInfo.hFile);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
debugActiveProcessStop(DebugEvent.dwProcessId);
return true;
}
break; break;
case EXIT_PROCESS_DEBUG_EVENT: case EXIT_PROCESS_DEBUG_EVENT:
// MessageBox(0, "EXIT", "PlugY", MB_OK|MB_ICONASTERISK);
exit(0); exit(0);
case EXCEPTION_DEBUG_EVENT: case EXCEPTION_DEBUG_EVENT:
if (DebugEvent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_ACCESS_VIOLATION) if (DebugEvent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
MessageBox(0, "EXCEPTION_ACCESS_VIOLATION", "PlugY", MB_OK|MB_ICONASTERISK); MessageBox(0, "EXCEPTION_ACCESS_VIOLATION", "PlugY", MB_OK | MB_ICONASTERISK);
// status = DBG_EXCEPTION_NOT_HANDLED;
break; break;
case LOAD_DLL_DEBUG_EVENT: case LOAD_DLL_DEBUG_EVENT:
// if (!GetModuleBaseName(pi.hProcess,(HMODULE)DebugEvent.u.LoadDll.lpBaseOfDll,buf,100)) if (isD2gfx(pi.hProcess, DebugEvent.u.LoadDll.lpBaseOfDll))
// 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); // MessageBox(0, "INSTALL XP", "PlugYRun", MB_OK|MB_ICONASTERISK);
installPlugY(pi.hProcess, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll, libraryName, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll == 0x6FA8000); installPlugY(pi.hProcess, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll, libraryName, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll == 0x6FA8000);
CloseHandle(DebugEvent.u.LoadDll.hFile); CloseHandle(DebugEvent.u.LoadDll.hFile);
CloseHandle(pi.hProcess); CloseHandle(pi.hProcess);
CloseHandle(pi.hThread); CloseHandle(pi.hThread);
debugActiveProcessStop(DebugEvent.dwProcessId); debugActiveProcessStop(DebugEvent.dwProcessId);
// MessageBox(0, "INSTALL XP end", "PlugYRun", MB_OK|MB_ICONASTERISK); // MessageBox(0, "INSTALL XP end", "PlugYRun", MB_OK|MB_ICONASTERISK);
return true; return true;
} else }
else
CloseHandle(DebugEvent.u.LoadDll.hFile); CloseHandle(DebugEvent.u.LoadDll.hFile);
break; break;
} }
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; return true;
} }
int APIENTRY WinMain(_In_ HINSTANCE hInstance,
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) _In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow)
{ {
char currrentDirectory[MAX_PATH]; char currrentDirectory[MAX_PATH];
char iniFileName[MAX_PATH]; char iniFileName[MAX_PATH];
char command[MAX_PATH+50]; char command[MAX_PATH + 256];
// MessageBox(NULL,"START","PlugYRun",MB_OK); // Get Current Directory.
//Get Current Directory. if (!GetCurrentDirectory(sizeof(currrentDirectory), currrentDirectory))
if (!GetCurrentDirectory(MAX_PATH-1,currrentDirectory))
assertion("Current directory not found"); assertion("Current directory not found");
int len = strlen(currrentDirectory); int len = strlen(currrentDirectory);
if (len && currrentDirectory[len-1] != '\\') if (len == 0)
assertion("Current directory not found");
if (currrentDirectory[len - 1] != '\\')
{ {
currrentDirectory[len+1]=NULL; if (len >= MAX_PATH - 1)
currrentDirectory[len]='\\'; assertion("Path length too long");
currrentDirectory[len++] = '\\';
currrentDirectory[len] = NULL;
} }
//Get ini full path name. // Get ini full path name.
strcpy(iniFileName,currrentDirectory); strcpy(iniFileName, currrentDirectory);
strcat(iniFileName,INIFILE); 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 current directory.
strcpy(command,currrentDirectory);
strcat(command,GAMEFILE);
if (GetFileAttributes(command) == INVALID_FILE_ATTRIBUTES) if (GetFileAttributes(command) == INVALID_FILE_ATTRIBUTES)
if (!getWinReg(command, MAX_PATH+50)) {
return 1; if (!getWinReg(command, sizeof(command)))
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. // Add params.
strcat(command,lpCmdLine); int paramLen = strlen(lpCmdLine);
len = strlen(command); if (paramLen > 0)
GetPrivateProfileString(LAUNCHING,PARAM,"",&command[len],MAX_PATH-len,iniFileName); {
cmdLen += paramLen + 1;
//copyLodVersionFiles(); if (cmdLen > sizeof(command))
assertion("Path length too long");
strcat(command, lpCmdLine);
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);
char libraryName[50]; char libraryName[50];
if (!GetPrivateProfileString(LAUNCHING,LIBRARY_NAME,"",libraryName,50,iniFileName) || !libraryName[0]) if (!GetPrivateProfileString(LAUNCHING, LIBRARY_NAME, "", libraryName, 50, iniFileName) || !libraryName[0])
return !launchNormal(command, currrentDirectory); return !launchNormal(command, currrentDirectory);
// MessageBox(NULL,command,"PlugYRun",MB_OK); // Launch LoD and install PlugY
HMODULE module = GetModuleHandle("Kernel32.dll"); HMODULE module = GetModuleHandle("Kernel32.dll");
if (module) if (module)
{ {
debugActiveProcessStop = (tDebugActiveProcessStop) GetProcAddress(module,"DebugActiveProcessStop"); debugActiveProcessStop = (tDebugActiveProcessStop)GetProcAddress(module, "DebugActiveProcessStop");
if (debugActiveProcessStop) if (debugActiveProcessStop)
return !launchGameXP(command, currrentDirectory, libraryName); return !launchGameXP(command, currrentDirectory, libraryName);
} }
return !launchGame98(command, currrentDirectory, libraryName); return !launchGame98(command, currrentDirectory, libraryName);
} }
/* else if (GetVersion() & 0x80000000)
{
versionXP=false;
} else {
versionXP=true;
}*/
//HINSTANCE
// CreateProcessInternalA
// HMODULE HPlugY = LoadLibrary("C:\\Jeux\\Diablo II\\PlugY.dll");
// if (!HPlugY) return 0;
// DuplicateHandle
// GetCurrentProcess();
/* typedef void* (__stdcall* Tinit)(LPSTR IniName);
Tinit init = (Tinit)GetProcAddress(HPlugY,"_Init@4");
if (!init) return 0;
init(0);*/
/*
6FC2BD50 /$ 81EC 08010000 SUB ESP,108
6FC2BD56 |. 53 PUSH EBX
6FC2BD57 |. 8A9C24 1801000>MOV BL,BYTE PTR SS:[ESP+118]
6FC2BD5E |. F6C3 10 TEST BL,10
6FC2BD61 |. 55 PUSH EBP
6FC2BD62 |. 56 PUSH ESI
6FC2BD63 |. C707 00000000 MOV DWORD PTR DS:[EDI],0
6FC2BD69 |. C74424 0C 0000>MOV DWORD PTR SS:[ESP+C],0
6FC2BD71 |. BE F3030000 MOV ESI,3F3
6FC2BD76 |. C64424 10 00 MOV BYTE PTR SS:[ESP+10],0
6FC2BD7B |. 75 25 JNZ SHORT storm.6FC2BDA2
6FC2BD7D |. F6C3 02 TEST BL,2
6FC2BD80 |. 68 04010000 PUSH 104
6FC2BD85 |. 74 0C JE SHORT storm.6FC2BD93
6FC2BD87 |. 68 146AC36F PUSH storm.6FC36A14 ; ASCII "Software\Battle.net\"
6FC2BD8C |. 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
6FC2BD90 |. 50 PUSH EAX
6FC2BD91 |. EB 0A JMP SHORT storm.6FC2BD9D
6FC2BD93 |> 68 F069C36F PUSH storm.6FC369F0 ; ASCII "Software\Blizzard Entertainment\"
6FC2BD98 |. 8D4C24 18 LEA ECX,DWORD PTR SS:[ESP+18]
6FC2BD9C |. 51 PUSH ECX
6FC2BD9D |> E8 EE07FEFF CALL storm.#501
6FC2BDA2 |> 8B9424 1801000>MOV EDX,DWORD PTR SS:[ESP+118]
6FC2BDA9 |. 68 04010000 PUSH 104
6FC2BDAE |. 52 PUSH EDX
6FC2BDAF |. 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
6FC2BDB3 |. 50 PUSH EAX
6FC2BDB4 |. E8 6705FEFF CALL storm.#503
6FC2BDB9 |. F6C3 04 TEST BL,4
6FC2BDBC |. 8B2D 1030C36F MOV EBP,DWORD PTR DS:[<&ADVAPI32.RegQuer>; advapi32.RegQueryValueExA
6FC2BDC2 |. 75 5D JNZ SHORT storm.6FC2BE21
6FC2BDC4 |. 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
6FC2BDC8 |. 51 PUSH ECX ; /pHandle
6FC2BDC9 |. 68 19000200 PUSH 20019 ; |Access = KEY_READ
6FC2BDCE |. 6A 00 PUSH 0 ; |Reserved = 0
6FC2BDD0 |. 8D5424 1C LEA EDX,DWORD PTR SS:[ESP+1C] ; |
6FC2BDD4 |. 52 PUSH EDX ; |Subkey
6FC2BDD5 |. 68 01000080 PUSH 80000001 ; |hKey = HKEY_CURRENT_USER
6FC2BDDA |. FF15 0830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA
002281A4 80000001 |hKey = HKEY_CURRENT_USER
002281A8 002281C8 |Subkey = "Software\Blizzard Entertainment\Diablo II"
002281AC 00000000 |Reserved = 0
002281B0 00020019 |Access = KEY_READ
002281B4 002281C4 \pHandle = 002281C4
6FC2BDE0 |. 8BF0 MOV ESI,EAX
6FC2BDE2 |. 85F6 TEST ESI,ESI
6FC2BDE4 |. 75 3B JNZ SHORT storm.6FC2BE21
6FC2BDE6 |. 8B8C24 2801000>MOV ECX,DWORD PTR SS:[ESP+128]
6FC2BDED |. 8B9424 2401000>MOV EDX,DWORD PTR SS:[ESP+124]
6FC2BDF4 |. 8B8424 2C01000>MOV EAX,DWORD PTR SS:[ESP+12C]
6FC2BDFB |. 57 PUSH EDI ; /pBufSize
6FC2BDFC |. 51 PUSH ECX ; |Buffer
6FC2BDFD |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14] ; |
6FC2BE01 |. 52 PUSH EDX ; |pValueType
6FC2BE02 |. 8907 MOV DWORD PTR DS:[EDI],EAX ; |
6FC2BE04 |. 8B8424 2801000>MOV EAX,DWORD PTR SS:[ESP+128] ; |
6FC2BE0B |. 56 PUSH ESI ; |Reserved
6FC2BE0C |. 50 PUSH EAX ; |ValueName
6FC2BE0D |. 51 PUSH ECX ; |hKey
6FC2BE0E |. FFD5 CALL EBP ; \RegQueryValueExA
002281A0 00000124 |hKey = 124
002281A4 6FF77B88 |ValueName = "InstallPath"
002281A8 00000000 |Reserved = NULL
002281AC 002282FC |pValueType = 002282FC
002281B0 00228320 |Buffer = 00228320
002281B4 00228300 \pBufSize = 00228300
6FC2BE10 |. 8B5424 0C MOV EDX,DWORD PTR SS:[ESP+C]
6FC2BE14 |. 52 PUSH EDX ; /hKey
6FC2BE15 |. 8BF0 MOV ESI,EAX ; |
6FC2BE17 |. FF15 1830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
002281B4 00000124 \hKey = 00000124 (window)
6FC2BE1D |. 85F6 TEST ESI,ESI
6FC2BE1F |. 74 62 JE SHORT storm.6FC2BE83
6FC2BE21 |> F6C3 01 TEST BL,1
6FC2BE24 |. 75 59 JNZ SHORT storm.6FC2BE7F
6FC2BE26 |. 8D4424 0C LEA EAX,DWORD PTR SS:[ESP+C]
6FC2BE2A |. 50 PUSH EAX ; /pHandle
6FC2BE2B |. 68 19000200 PUSH 20019 ; |Access = KEY_READ
6FC2BE30 |. 6A 00 PUSH 0 ; |Reserved = 0
6FC2BE32 |. 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C] ; |
6FC2BE36 |. 51 PUSH ECX ; |Subkey
6FC2BE37 |. 68 02000080 PUSH 80000002 ; |hKey = HKEY_LOCAL_MACHINE
6FC2BE3C |. FF15 0830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA
6FC2BE42 |. 8BF0 MOV ESI,EAX
6FC2BE44 |. 85F6 TEST ESI,ESI
6FC2BE46 |. 75 4C JNZ SHORT storm.6FC2BE94
6FC2BE48 |. 8B8424 2801000>MOV EAX,DWORD PTR SS:[ESP+128]
6FC2BE4F |. 8B8C24 2401000>MOV ECX,DWORD PTR SS:[ESP+124]
6FC2BE56 |. 8B9424 2C01000>MOV EDX,DWORD PTR SS:[ESP+12C]
6FC2BE5D |. 57 PUSH EDI
6FC2BE5E |. 50 PUSH EAX
6FC2BE5F |. 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
6FC2BE63 |. 51 PUSH ECX
6FC2BE64 |. 8917 MOV DWORD PTR DS:[EDI],EDX
6FC2BE66 |. 8B9424 2801000>MOV EDX,DWORD PTR SS:[ESP+128]
6FC2BE6D |. 56 PUSH ESI
6FC2BE6E |. 52 PUSH EDX
6FC2BE6F |. 50 PUSH EAX
6FC2BE70 |. FFD5 CALL EBP
6FC2BE72 |. 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C]
6FC2BE76 |. 51 PUSH ECX ; /hKey
6FC2BE77 |. 8BF0 MOV ESI,EAX ; |
6FC2BE79 |. FF15 1830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
6FC2BE7F |> 85F6 TEST ESI,ESI
6FC2BE81 |. 75 11 JNZ SHORT storm.6FC2BE94
6FC2BE83 |> 5E POP ESI
6FC2BE84 |. 5D POP EBP
6FC2BE85 |. B8 01000000 MOV EAX,1
6FC2BE8A |. 5B POP EBX
6FC2BE8B |. 81C4 08010000 ADD ESP,108
6FC2BE91 |. C2 1800 RETN 18
6FC2BE94 |> 56 PUSH ESI ; /Error
6FC2BE95 |. FF15 2832C36F CALL DWORD PTR DS:[<&KERNEL32.SetLastErr>; \SetLastError
6FC2BE9B |. 5E POP ESI
6FC2BE9C |. 5D POP EBP
6FC2BE9D |. 33C0 XOR EAX,EAX
6FC2BE9F |. 5B POP EBX
6FC2BEA0 |. 81C4 08010000 ADD ESP,108
6FC2BEA6 \. C2 1800 RETN 18
*/
///////////////////////// END OF FILE ///////////////////////

3
PlugYRun/PlugYRun.h Normal file
View File

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

Binary file not shown.

View File

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

168
PlugYRun/PlugYRun.vcxproj Normal file
View File

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

View File

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

Binary file not shown.

8
PlugYRun/stdafx.cpp Normal file
View File

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

21
PlugYRun/stdafx.h Normal file
View File

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

8
PlugYRun/targetver.h Normal file
View File

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