mirror of
https://gitlab.com/hashborgir/plugy.git
synced 2024-10-05 17:16:03 +00:00
888 lines
29 KiB
Diff
888 lines
29 KiB
Diff
diff --git a/PlugY/InfinityStash.cpp b/PlugY/InfinityStash.cpp
|
|
index 22e9c35..ea09d36 100644
|
|
--- a/PlugY/InfinityStash.cpp
|
|
+++ b/PlugY/InfinityStash.cpp
|
|
@@ -26,6 +26,7 @@ bool active_sharedStash = false;
|
|
bool separateHardSoftStash = false;
|
|
bool active_sharedGold=false;
|
|
char* sharedStashFilename = NULL;
|
|
+DWORD saveFileStackSize = 0x2000;
|
|
|
|
typedef int (*TchangeToSelectedStash)(Unit* ptChar, Stash* newStash, DWORD bOnlyItems, DWORD bIsClient);
|
|
|
|
@@ -422,7 +423,7 @@ void saveStashList(Unit* ptChar, Stash* ptStash, BYTE** data, DWORD* maxSize, DW
|
|
|
|
while(ptStash)
|
|
{
|
|
- if (*curSize + 0x2000 > *maxSize)
|
|
+ if (*curSize + saveFileStackSize > *maxSize)
|
|
{
|
|
BYTE* oldData = *data;
|
|
*maxSize *= 2;
|
|
diff --git a/PlugY/Interface_Skills.cpp b/PlugY/Interface_Skills.cpp
|
|
index 90178f7..8a07c2a 100644
|
|
--- a/PlugY/Interface_Skills.cpp
|
|
+++ b/PlugY/Interface_Skills.cpp
|
|
@@ -49,9 +49,10 @@ Unit* STDCALL skillsPageMouseDown(sWinMessage* msg)
|
|
if (active_SkillsPoints && !onRealm && D2isLODGame() && isOnButtonUnassignSkill(D2GetMouseX(),D2GetMouseY()))
|
|
{
|
|
log_msg("push down left button unassign skill\n");
|
|
- btnSkillIsDown = 1;
|
|
+ //btnSkillIsDown = 1;
|
|
D2PlaySound(4,0,0,0,0);
|
|
freeMessage(msg);
|
|
+ updateServer(US_UNASSIGN_SKILLS);
|
|
return NULL;
|
|
}
|
|
return ptChar;
|
|
@@ -233,6 +234,7 @@ void Install_InterfaceSkills()
|
|
//6FAE1112 > C745 18 00000000 MOV DWORD PTR SS:[EBP+18],0
|
|
//004ABC1A |> C746 18 00000000 MOV DWORD PTR DS:[ESI+18],0
|
|
|
|
+ /* Conflicts with D2ExpRes
|
|
// Manage mouse up
|
|
mem_seek R8(D2Client, 7BC40, 7BC40, 78466, 17558, 8C078, 80248, 795F8, 30AA8, ABC96);
|
|
MEMJ_REF4( D2FreeWinMessage, caller_skillsPageMouseUp);//0xFFF93B0A
|
|
@@ -243,6 +245,7 @@ void Install_InterfaceSkills()
|
|
//6FB295F7 .^E9 8828F9FF JMP <JMP.&Storm.#511>
|
|
//6FAE0AA7 .^E9 E0B2FDFF JMP <JMP.&Storm.#511>
|
|
//004ABC95 |. E8 F645F7FF CALL Game.00420290
|
|
+ */
|
|
|
|
log_msg("\n");
|
|
|
|
diff --git a/PlugY/Interface_Stats.cpp b/PlugY/Interface_Stats.cpp
|
|
index 85e6029..1d3a4cf 100644
|
|
--- a/PlugY/Interface_Stats.cpp
|
|
+++ b/PlugY/Interface_Stats.cpp
|
|
@@ -13,6 +13,7 @@
|
|
#include "common.h"
|
|
#include <stdio.h>
|
|
|
|
+/*
|
|
static struct
|
|
{
|
|
union{
|
|
@@ -35,6 +36,7 @@ static struct
|
|
#define getYNextPageBtn() RY(D2GetResolution()?0x40:0x70)
|
|
#define getHNextPageBtn() 32
|
|
#define isOnNextPageBtn(x,y) isOnRect(x, y, getXNextPageBtn(), getYNextPageBtn(), getLNextPageBtn(), getHNextPageBtn())
|
|
+*/
|
|
|
|
|
|
|
|
@@ -49,7 +51,7 @@ void STDCALL printStatsPageBtns()
|
|
sDrawImageInfo data;
|
|
ZeroMemory(&data,sizeof(data));
|
|
|
|
- if (printBackgroundOnMainPage && D2GetResolution())
|
|
+ if (printBackgroundOnMainPage)
|
|
{
|
|
setImage(&data, statsBackgroundImages);
|
|
setFrame(&data, 1);
|
|
@@ -57,16 +59,14 @@ void STDCALL printStatsPageBtns()
|
|
}
|
|
|
|
setImage(&data, D2LoadBuySelBtn());
|
|
- if (D2GetResolution())
|
|
- {
|
|
- setFrame(&data, 12 + isDownBtn.previousPage);
|
|
- D2PrintImage(&data, getXPreviousPageBtn(), getYPreviousPageBtn(), -1, 5, 0);
|
|
- }
|
|
+ setFrame(&data, 12 + isDownBtn.previousPage);
|
|
+ D2PrintImage(&data, getXPreviousPageBtn(), getYPreviousPageBtn(), -1, 5, 0);
|
|
+
|
|
setFrame(&data, 14 + isDownBtn.nextPage);
|
|
D2PrintImage(&data, getXNextPageBtn(), getYNextPageBtn(), -1, 5, 0);
|
|
|
|
D2SetFont(1);
|
|
- if (D2GetResolution() && isOnPreviousPageBtn(mx,my)) //print popup "previous page"
|
|
+ if (isOnPreviousPageBtn(mx,my)) //print popup "previous page"
|
|
{
|
|
lpText = getLocalString(STR_PREVIOUS_PAGE);
|
|
D2PrintPopup(lpText, getXPreviousPageBtn()+getLPreviousPageBtn()/2, getYPreviousPageBtn()-getHPreviousPageBtn(), WHITE, 1);
|
|
@@ -84,6 +84,12 @@ Unit* STDCALL statsPageMouseDown(sWinMessage* msg)
|
|
|
|
if (!active_newInterfaces || !D2isLODGame() ) return ptChar;
|
|
|
|
+ if (statsLeftDown(msg)) {
|
|
+ freeMessage(msg);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ /*
|
|
if (D2GetResolution() && isOnPreviousPageBtn(msg->x,msg->y))
|
|
{
|
|
log_msg("push down left button previous page\n");
|
|
@@ -100,6 +106,7 @@ Unit* STDCALL statsPageMouseDown(sWinMessage* msg)
|
|
freeMessage(msg);
|
|
return NULL;
|
|
}
|
|
+ */
|
|
return ptChar;
|
|
}
|
|
|
|
@@ -110,6 +117,13 @@ Unit* STDCALL statsPageMouseUp(sWinMessage* msg)
|
|
|
|
if (!active_newInterfaces || !D2isLODGame() ) return ptChar;
|
|
|
|
+ if (statsLeftUp(msg)) {
|
|
+ isDownBtn.all=0;
|
|
+ freeMessage(msg);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ /*
|
|
if (D2GetResolution() && isOnPreviousPageBtn(msg->x,msg->y))
|
|
{
|
|
log_msg("push up left button previous page\n");
|
|
@@ -134,6 +148,7 @@ Unit* STDCALL statsPageMouseUp(sWinMessage* msg)
|
|
return NULL;
|
|
}
|
|
}
|
|
+ */
|
|
|
|
isDownBtn.all=0;
|
|
return ptChar;
|
|
diff --git a/PlugY/LocalizedStrings.cpp b/PlugY/LocalizedStrings.cpp
|
|
index 70595ee..3c76d87 100644
|
|
--- a/PlugY/LocalizedStrings.cpp
|
|
+++ b/PlugY/LocalizedStrings.cpp
|
|
@@ -51,7 +51,7 @@ LPCWSTR getLocalTypeString(DWORD code)
|
|
{
|
|
if (sLocalizedTypeStrings[i].code == code)
|
|
{
|
|
- log_msg("Code=%08X\n", code);
|
|
+ //log_msg("Code=%08X\n", code);
|
|
if (sLocalizedTypeStrings[i].itemStr)
|
|
return StripGender(D2GetStringFromString(sLocalizedTypeStrings[i].itemStr));
|
|
LPWSTR text = StripGender(sLocalizedTypeStrings[i].typeLocalizedString);
|
|
@@ -300,6 +300,8 @@ void loadLocalizedStrings(int language)
|
|
LOAD(STR_SHARED_GOLD_QUANTITY);
|
|
LOAD(STR_PREVIOUS_PAGE);
|
|
LOAD(STR_NEXT_PAGE);
|
|
+ LOAD(STR_PREVIOUS_RUNE);
|
|
+ LOAD(STR_NEXT_RUNE);
|
|
LOAD(STR_ITEM_LEVEL);
|
|
LOAD(STR_PAGE_TYPE_CHANGE);
|
|
|
|
diff --git a/PlugY/LocalizedStrings.h b/PlugY/LocalizedStrings.h
|
|
index 9fb08e7..0e7b83d 100644
|
|
--- a/PlugY/LocalizedStrings.h
|
|
+++ b/PlugY/LocalizedStrings.h
|
|
@@ -37,6 +37,8 @@ enum eStringList
|
|
STR_SHARED_GOLD_QUANTITY,
|
|
STR_PREVIOUS_PAGE,
|
|
STR_NEXT_PAGE,
|
|
+ STR_PREVIOUS_RUNE,
|
|
+ STR_NEXT_RUNE,
|
|
STR_ITEM_LEVEL,
|
|
STR_PAGE_TYPE_CHANGE,
|
|
//
|
|
diff --git a/PlugY/NewInterface_CubeListing.cpp b/PlugY/NewInterface_CubeListing.cpp
|
|
index 1c54331..d50c8bc 100644
|
|
--- a/PlugY/NewInterface_CubeListing.cpp
|
|
+++ b/PlugY/NewInterface_CubeListing.cpp
|
|
@@ -233,12 +233,6 @@ DWORD print(CubeMainBIN* curForm, LPWSTR buf, LPINT len, DWORD)//maxsize)
|
|
printInputItem(&curForm->input6, buf, len, &realNbInputs);
|
|
printInputItem(&curForm->input7, buf, len, &realNbInputs);
|
|
|
|
- if (realNbInputs != curForm->numinputs)
|
|
- {
|
|
- PRINT(BUF, L" *** ERROR : numInputs(%d) != realNbInputs(%d) ***", curForm->numinputs, realNbInputs);
|
|
- return 1;
|
|
- }
|
|
-
|
|
PRINT(BUF,L" => ");
|
|
int realNbOutputs=0;
|
|
|
|
@@ -269,6 +263,9 @@ DWORD print(CubeMainBIN* curForm, LPWSTR buf, LPINT len, DWORD)//maxsize)
|
|
// if (curForm->version == 100)
|
|
// sprintf(BUF, " [expansion only]");
|
|
|
|
+ if (realNbInputs != curForm->numinputs)
|
|
+ PRINT(BUF, L" *** ERROR : numInputs(%d) != realNbInputs(%d) ***", curForm->numinputs, realNbInputs);
|
|
+
|
|
return 1;
|
|
}
|
|
#undef BUF
|
|
diff --git a/PlugY/NewInterface_Runewords.cpp b/PlugY/NewInterface_Runewords.cpp
|
|
index 99d1f38..13efd9f 100644
|
|
--- a/PlugY/NewInterface_Runewords.cpp
|
|
+++ b/PlugY/NewInterface_Runewords.cpp
|
|
@@ -12,6 +12,7 @@
|
|
#include "common.h"
|
|
#include <stdio.h>
|
|
|
|
+/*
|
|
#define NB_RUNES_PER_PAGE 25
|
|
|
|
#define getXCloseBtn() 360
|
|
@@ -53,6 +54,7 @@ static struct
|
|
};
|
|
};
|
|
} isDownBtn;
|
|
+*/
|
|
|
|
|
|
void printRuneword(RunesBIN* runesData, DWORD pos)
|
|
@@ -64,7 +66,7 @@ void printRuneword(RunesBIN* runesData, DWORD pos)
|
|
D2SetFont(6);
|
|
DWORD nbPixel = D2GetPixelLen(lpText);
|
|
DWORD x1 = (nbPixel >= 195) ? 0 : 195-nbPixel;
|
|
- D2PrintString(lpText, x1, 10 + pos*20, GOLD, 0);//MILIEU(0x00,0x70,nbPixel)
|
|
+ D2PrintString(lpText, posXRunesList + RX(x1), posYRunesList + 10 + pos*20, GOLD, 0);//MILIEU(0x00,0x70,nbPixel)
|
|
|
|
typesList[0]=L'\0';
|
|
DWORD numItype=0;
|
|
@@ -80,7 +82,7 @@ void printRuneword(RunesBIN* runesData, DWORD pos)
|
|
}
|
|
nbPixel = D2GetPixelLen(typesList);
|
|
x1 = (nbPixel >= 195) ? 0 : 195-nbPixel;
|
|
- D2PrintString(typesList, x1, 20 + pos*20, WHITE, 0);//MILIEU(0x70,0xA0,nbPixel)
|
|
+ D2PrintString(typesList, posXRunesList + RX(x1), posYRunesList + 20 + pos*20, WHITE, 0);//MILIEU(0x70,0xA0,nbPixel)
|
|
|
|
runesList[0]=L'\0';
|
|
DWORD numRune=0;
|
|
@@ -115,7 +117,7 @@ void printRuneword(RunesBIN* runesData, DWORD pos)
|
|
}
|
|
|
|
// x1 = (nbPixel < 145) ? 155 : 300-nbPixel;
|
|
- D2PrintString(runesList, x1, y1 + pos*20, WHITE, 0);//MILIEU(0xD0,0xA0,nbPixel)
|
|
+ D2PrintString(runesList, posXRunesList + RX(x1), posYRunesList + y1 + pos*20, WHITE, 0);//MILIEU(0xD0,0xA0,nbPixel)
|
|
}
|
|
|
|
|
|
@@ -123,48 +125,58 @@ void printRuneword(RunesBIN* runesData, DWORD pos)
|
|
//6FB21FAA
|
|
void STDCALL printRunewordsPage()
|
|
{
|
|
- if (!D2isLODGame() || !D2GetResolution()) return D2PrintStatsPage();
|
|
+ if (!D2isLODGame()) return D2PrintStatsPage();
|
|
|
|
LPWSTR lpText;
|
|
- bDontPrintBorder = true;
|
|
+ bDontPrintBorder = D2GetResolution()? true : false;
|
|
|
|
//Init data for print image
|
|
sDrawImageInfo data;
|
|
ZeroMemory(&data,sizeof(data));
|
|
|
|
//print background
|
|
-/* setImage(&data, newStatsInterfaceImages);
|
|
+ fillRect(RX(0), RY(ResolutionY), 512, 768, 0, 5);
|
|
+ setImage(&data, newStatsInterfaceImages);
|
|
setFrame(&data, 0);
|
|
- D2PrintImage(&data, 0, 256, -1, 5, 0);
|
|
+ D2PrintImage(&data, RX(0), RY(ResolutionY-256), -1, 5, 0);
|
|
setFrame(&data, 1);
|
|
- D2PrintImage(&data, 256,256, -1, 5, 0);
|
|
+ D2PrintImage(&data, RX(256),RY(ResolutionY-256), -1, 5, 0);
|
|
setFrame(&data, 2);
|
|
- D2PrintImage(&data, 0, 512, -1, 5, 0);
|
|
+ D2PrintImage(&data, RX(0), RY(ResolutionY-256*2), -1, 5, 0);
|
|
setFrame(&data, 3);
|
|
- D2PrintImage(&data, 256,512, -1, 5, 0);
|
|
+ D2PrintImage(&data, RX(256),RY(ResolutionY-256*2), -1, 5, 0);
|
|
setFrame(&data, 4);
|
|
- D2PrintImage(&data, 0, 552, -1, 5, 0);
|
|
+ D2PrintImage(&data, RX(0), RY(ResolutionY-256*3), -1, 5, 0);
|
|
setFrame(&data, 5);
|
|
- D2PrintImage(&data, 256,552, -1, 5, 0);
|
|
-*/
|
|
- fillRect(0,0,400,552,0,5);
|
|
+ D2PrintImage(&data, RX(256),RY(ResolutionY-256*3), -1, 5, 0);
|
|
+
|
|
+ if (printBackgroundOnMainPage)
|
|
+ {
|
|
+ setImage(&data, statsBackgroundImages);
|
|
+ setFrame(&data, 1);
|
|
+ D2PrintImage(&data, getXPreviousPageBtn()-7, getYPreviousPageBtn()+8, -1, 5, 0);
|
|
+ D2PrintImage(&data, getXPrevRunesBtn()-7, getYPrevRunesBtn()+8, -1, 5, 0);
|
|
+ }
|
|
|
|
//print button close
|
|
setImage(&data, D2LoadBuySelBtn());
|
|
setFrame(&data, 10 + isDownBtn.close);
|
|
D2PrintImage(&data, getXCloseBtn(), getYCloseBtn(), -1, 5, 0);
|
|
|
|
+ //print previous page button
|
|
+ setFrame(&data, 12 + isDownBtn.previousPage);
|
|
+ D2PrintImage(&data, getXPreviousPageBtn(), getYPreviousPageBtn(), -1, 5, 0);
|
|
+
|
|
//print next page button
|
|
- setFrame(&data, isDownBtn.nextPage);
|
|
+ setFrame(&data, 14 + isDownBtn.nextPage);
|
|
D2PrintImage(&data, getXNextPageBtn(), getYNextPageBtn(), -1, 5, 0);
|
|
|
|
//print previous runes button
|
|
- setImage(&data, stashBtnsImages);
|
|
- setFrame(&data, isDownBtn.prevRunes);
|
|
+ setFrame(&data, 12 + isDownBtn.prevRunes);
|
|
D2PrintImage(&data, getXPrevRunesBtn(), getYPrevRunesBtn(), -1, 5, 0);
|
|
|
|
//print previous runes button
|
|
- setFrame(&data, 2 + isDownBtn.nextRunes);
|
|
+ setFrame(&data, 14 + isDownBtn.nextRunes);
|
|
D2PrintImage(&data, getXNextRunesBtn(), getYNextRunesBtn(), -1, 5, 0);
|
|
|
|
D2SetFont(6);
|
|
@@ -181,11 +193,11 @@ void STDCALL printRunewordsPage()
|
|
{
|
|
if (!runesData->Complete || runesData->Server) continue;
|
|
nbRunesCompleted++;
|
|
- if ( (curRunesPage * NB_RUNES_PER_PAGE < nbRunesCompleted) &&
|
|
- (nbRunesCompleted <= (curRunesPage+1) * NB_RUNES_PER_PAGE) )
|
|
+ if ( (curRunesPage * runesPerPage < nbRunesCompleted) &&
|
|
+ (nbRunesCompleted <= (curRunesPage+1) * runesPerPage) )
|
|
printRuneword(runesData, curNbRunes++);
|
|
}
|
|
- maxRunesPage = nbRunesCompleted ? (nbRunesCompleted-1) / NB_RUNES_PER_PAGE : 0;
|
|
+ maxRunesPage = nbRunesCompleted ? (nbRunesCompleted-1) / runesPerPage : 0;
|
|
|
|
|
|
//////////////////// POPUP PRINTING ////////////////////
|
|
@@ -197,11 +209,26 @@ void STDCALL printRunewordsPage()
|
|
{
|
|
D2PrintPopup(D2GetStringFromIndex(0x1030), getXCloseBtn()+getLCloseBtn()/2, getYCloseBtn()-getHCloseBtn(), WHITE, 1);
|
|
}
|
|
+ else if (isOnPreviousPageBtn(x,y)) //print popup "previous page"
|
|
+ {
|
|
+ lpText = getLocalString(STR_PREVIOUS_PAGE);
|
|
+ D2PrintPopup(lpText, getXPreviousPageBtn()+getLPreviousPageBtn()/2, getYPreviousPageBtn()-getHPreviousPageBtn(), WHITE, 1);
|
|
+ }
|
|
else if (isOnNextPageBtn(x,y)) // print popup "next page"
|
|
{
|
|
lpText = getLocalString(STR_NEXT_PAGE);
|
|
D2PrintPopup(lpText, getXNextPageBtn()+getLNextPageBtn()/2, getYNextPageBtn()-getHNextPageBtn(), WHITE, 1);
|
|
}
|
|
+ else if (isOnPrevRunesBtn(x,y)) // print popup "previous rune"
|
|
+ {
|
|
+ lpText = getLocalString(STR_PREVIOUS_RUNE);
|
|
+ D2PrintPopup(lpText, getXPrevRunesBtn()+getLPrevRunesBtn()/2, getYPrevRunesBtn()-getHPrevRunesBtn(), WHITE, 1);
|
|
+ }
|
|
+ else if (isOnNextRunesBtn(x,y)) // print popup "next rune"
|
|
+ {
|
|
+ lpText = getLocalString(STR_NEXT_RUNE);
|
|
+ D2PrintPopup(lpText, getXNextRunesBtn()+getLNextRunesBtn()/2, getYNextRunesBtn()-getHNextRunesBtn(), WHITE, 1);
|
|
+ }
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
diff --git a/PlugY/NewInterface_Stats.cpp b/PlugY/NewInterface_Stats.cpp
|
|
index 10fa32d..d73c5da 100644
|
|
--- a/PlugY/NewInterface_Stats.cpp
|
|
+++ b/PlugY/NewInterface_Stats.cpp
|
|
@@ -13,6 +13,7 @@
|
|
#include <stdio.h>
|
|
|
|
|
|
+/*
|
|
#define getXCloseBtn() 360
|
|
#define getLCloseBtn() 32
|
|
#define getYCloseBtn() (ResolutionY - 60)
|
|
@@ -92,6 +93,7 @@ void** ptD2AssignStatsPointsBtnImages = (void**)0x6FBB5BB4;
|
|
|
|
|
|
|
|
+/*
|
|
static struct
|
|
{
|
|
union{
|
|
@@ -111,6 +113,7 @@ static struct
|
|
};
|
|
};
|
|
} isDownBtn;
|
|
+*/
|
|
|
|
|
|
void print2Lines(WORD id, LPWSTR lpText, DWORD x, DWORD l, DWORD y)
|
|
diff --git a/PlugY/NewInterface_StatsPageTwo.cpp b/PlugY/NewInterface_StatsPageTwo.cpp
|
|
index dfdc8a1..6215dd6 100644
|
|
--- a/PlugY/NewInterface_StatsPageTwo.cpp
|
|
+++ b/PlugY/NewInterface_StatsPageTwo.cpp
|
|
@@ -12,6 +12,7 @@
|
|
#include "common.h"
|
|
#include <stdio.h>
|
|
|
|
+/*
|
|
#define getXCloseBtn() RX(0x110)
|
|
#define getLCloseBtn() 32
|
|
#define getYCloseBtn() RY(0x40)
|
|
@@ -29,11 +30,13 @@
|
|
#define getYNextPageBtn() RY(0x40)
|
|
#define getHNextPageBtn() 32
|
|
#define isOnNextPageBtn(x,y) isOnRect(x, y, getXNextPageBtn(), getYNextPageBtn(), getLNextPageBtn(), getHNextPageBtn())
|
|
+*/
|
|
|
|
const char * STATS_INTERFACE_FILENAME = "PlugY\\statsinterface.txt";
|
|
|
|
#define BUFSIZE 0x400
|
|
|
|
+/*
|
|
static struct
|
|
{
|
|
union{
|
|
@@ -45,6 +48,7 @@ static struct
|
|
};
|
|
};
|
|
} isDownBtn;
|
|
+*/
|
|
|
|
|
|
struct statsInterfaceBIN
|
|
@@ -337,8 +341,7 @@ void STDCALL printNewStatsPageTwo(int currentPage)
|
|
|
|
WCHAR text[BUFSIZE];
|
|
LPWSTR lpText;
|
|
- bDontPrintBorder = false;
|
|
-
|
|
+ bDontPrintBorder = D2GetResolution()? true : false;
|
|
Unit* ptChar = D2GetClientPlayer();
|
|
|
|
d2_assert(!ptChar, "Printing stats page : no character selected",__FILE__,__LINE__);
|
|
@@ -349,16 +352,20 @@ void STDCALL printNewStatsPageTwo(int currentPage)
|
|
ZeroMemory(&data,sizeof(data));
|
|
|
|
//print background
|
|
- fillRect(RX(0),RY(480),320,432,0,5);//552
|
|
+ fillRect(RX(0), RY(ResolutionY), 512, 768, 0, 5);
|
|
setImage(&data, newStatsInterfaceImages);
|
|
setFrame(&data, 0);
|
|
- D2PrintImage(&data, RX(0), RY(224), -1, 5, 0);
|
|
+ D2PrintImage(&data, RX(0), RY(ResolutionY-256), -1, 5, 0);
|
|
setFrame(&data, 1);
|
|
- D2PrintImage(&data, RX(256),RY(224), -1, 5, 0);//256
|
|
+ D2PrintImage(&data, RX(256),RY(ResolutionY-256), -1, 5, 0);
|
|
setFrame(&data, 2);
|
|
- D2PrintImage(&data, RX(0), RY(48), -1, 5, 0);//432
|
|
+ D2PrintImage(&data, RX(0), RY(ResolutionY-256*2), -1, 5, 0);
|
|
setFrame(&data, 3);
|
|
- D2PrintImage(&data, RX(256),RY(48), -1, 5, 0);
|
|
+ D2PrintImage(&data, RX(256),RY(ResolutionY-256*2), -1, 5, 0);
|
|
+ setFrame(&data, 4);
|
|
+ D2PrintImage(&data, RX(0), RY(ResolutionY-256*3), -1, 5, 0);
|
|
+ setFrame(&data, 5);
|
|
+ D2PrintImage(&data, RX(256),RY(ResolutionY-256*3), -1, 5, 0);
|
|
|
|
D2SetFont(1);
|
|
for (int i=0; i<nbStatsInterface; i++)
|
|
@@ -392,10 +399,12 @@ void STDCALL printNewStatsPageTwo(int currentPage)
|
|
D2PrintString(text, x, y, WHITE, 0);
|
|
*/
|
|
|
|
- //print background previous/next page buttons
|
|
- setImage(&data, statsBackgroundImages);
|
|
- setFrame(&data, D2GetResolution()?1:0);
|
|
- D2PrintImage(&data, getXPreviousPageBtn()-7, getYPreviousPageBtn()+8, -1, 5, 0);
|
|
+ if (printBackgroundOnMainPage) {
|
|
+ //print background previous/next page buttons
|
|
+ setImage(&data, statsBackgroundImages);
|
|
+ setFrame(&data, 1);
|
|
+ D2PrintImage(&data, getXPreviousPageBtn()-7, getYPreviousPageBtn()+8, -1, 5, 0);
|
|
+ }
|
|
|
|
//print button close
|
|
setImage(&data, D2LoadBuySelBtn());
|
|
diff --git a/PlugY/NewInterfaces.cpp b/PlugY/NewInterfaces.cpp
|
|
index 2bcb2f1..91003fb 100644
|
|
--- a/PlugY/NewInterfaces.cpp
|
|
+++ b/PlugY/NewInterfaces.cpp
|
|
@@ -22,11 +22,39 @@ bool active_newInterfaces=false;
|
|
bool selectMainPageOnOpenning=true;
|
|
bool printBackgroundOnMainPage=true;
|
|
|
|
+int posXNextPageBtn = -1;
|
|
+int posYNextPageBtn = -1;
|
|
+int posXPrevPageBtn = -1;
|
|
+int posYPrevPageBtn = -1;
|
|
+int posXClosePageBtn = -1;
|
|
+int posYClosePageBtn = -1;
|
|
+int posXNextRuneBtn = -1;
|
|
+int posYNextRuneBtn = -1;
|
|
+int posXPrevRuneBtn = -1;
|
|
+int posYPrevRuneBtn = -1;
|
|
+int posXRunesList = -1;
|
|
+int posYRunesList = -1;
|
|
+int runesPerPage = -1;
|
|
+
|
|
+DWORD getXNextPageBtn() {return RX(posXNextPageBtn);}
|
|
+DWORD getYNextPageBtn() {return RY(posYNextPageBtn);}
|
|
+DWORD getXPreviousPageBtn() {return RX(posXPrevPageBtn);}
|
|
+DWORD getYPreviousPageBtn() {return RY(posYPrevPageBtn);}
|
|
+DWORD getXCloseBtn() {return RX(posXClosePageBtn);}
|
|
+DWORD getYCloseBtn() {return RY(posYClosePageBtn);}
|
|
+DWORD getXNextRunesBtn() {return RX(posXNextRuneBtn);}
|
|
+DWORD getYNextRunesBtn() {return RY(posYNextRuneBtn);}
|
|
+DWORD getXPrevRunesBtn() {return RX(posXPrevRuneBtn);}
|
|
+DWORD getYPrevRunesBtn() {return RY(posYPrevRuneBtn);}
|
|
+
|
|
DWORD bDontPrintBorder=false;
|
|
|
|
int selectedPage=0;
|
|
int lastPage=0;
|
|
int extraHiddenPage=0;
|
|
+int curRunesPage=0;
|
|
+int maxRunesPage=0xFFFF;
|
|
+BtnState isDownBtn={0};
|
|
|
|
void GoNextStatPage()
|
|
{
|
|
@@ -44,8 +72,12 @@ void GoPreviousStatPage()
|
|
|
|
void GoStatPage(int page)
|
|
{
|
|
- if ( (page >= 0) && (page <= lastPage + (D2GetResolution()? extraHiddenPage : 0)) )
|
|
+ if ( (page >= 0) && (page <= (lastPage + extraHiddenPage)) )
|
|
selectedPage = page;
|
|
+ else if (page < 0)
|
|
+ selectedPage = lastPage + extraHiddenPage;
|
|
+ else
|
|
+ selectedPage = 0;
|
|
}
|
|
|
|
int GetCurrentPage()
|
|
@@ -83,6 +115,16 @@ DWORD STDCALL mouseCustomPageLeftDown(sWinMessage* msg)
|
|
DWORD STDCALL mouseCustomPageLeftUp(sWinMessage* msg)
|
|
{
|
|
if(onRealm) return -1;
|
|
+
|
|
+ if (selectedPage == 0) return -1;
|
|
+ if (!isOnStatsPage(msg->x,msg->y)) return 1;
|
|
+ statsLeftUp(msg);
|
|
+ D2CleanStatMouseUp();
|
|
+ freeMessage(msg);
|
|
+ isDownBtn.all=0;
|
|
+ return 0;
|
|
+
|
|
+ /*
|
|
if ( (selectedPage > 0) && (selectedPage <= lastPage) )
|
|
return mouseNewStatsPageTwoLeftUp(msg);
|
|
else if (selectedPage == lastPage+1)
|
|
@@ -91,6 +133,87 @@ DWORD STDCALL mouseCustomPageLeftUp(sWinMessage* msg)
|
|
return mouseNewStatsPageLeftUp(msg);
|
|
else
|
|
return -1;
|
|
+ */
|
|
+}
|
|
+
|
|
+DWORD STDCALL statsLeftDown(sWinMessage* msg)
|
|
+{
|
|
+ if (isOnCloseBtn(msg->x,msg->y) && selectedPage != 0)
|
|
+ {
|
|
+ log_msg("push down left button close\n");
|
|
+ isDownBtn.close = 1;
|
|
+ D2PlaySound(4,0,0,0,0);
|
|
+ return 1;
|
|
+ }
|
|
+ else if (isOnPreviousPageBtn(msg->x,msg->y))
|
|
+ {
|
|
+ log_msg("push down left button previous page\n");
|
|
+ isDownBtn.previousPage = 1;
|
|
+ D2PlaySound(4,0,0,0,0);
|
|
+ return 1;
|
|
+ }
|
|
+ else if (isOnNextPageBtn(msg->x,msg->y))
|
|
+ {
|
|
+ log_msg("push down left button next page\n");
|
|
+ isDownBtn.nextPage = 1;
|
|
+ D2PlaySound(4,0,0,0,0);
|
|
+ return 1;
|
|
+ }
|
|
+ else if (isOnPrevRunesBtn(msg->x,msg->y) && selectedPage == (lastPage + extraHiddenPage))
|
|
+ {
|
|
+ log_msg("push down left button prev runes\n");
|
|
+ isDownBtn.prevRunes = 1;
|
|
+ D2PlaySound(4,0,0,0,0);
|
|
+ return 1;
|
|
+ }
|
|
+ else if (isOnNextRunesBtn(msg->x,msg->y) && selectedPage == (lastPage + extraHiddenPage))
|
|
+ {
|
|
+ log_msg("push down left button next runes\n");
|
|
+ isDownBtn.nextRunes = 1;
|
|
+ D2PlaySound(4,0,0,0,0);
|
|
+ return 1;
|
|
+ }
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+DWORD STDCALL statsLeftUp(sWinMessage* msg)
|
|
+{
|
|
+ if (isOnCloseBtn(msg->x,msg->y) && selectedPage != 0)
|
|
+ {
|
|
+ log_msg("push up left button close\n");
|
|
+ if (isDownBtn.close)
|
|
+ D2TogglePage(2,1,0);
|
|
+ return 1;
|
|
+ }
|
|
+ else if (isOnPreviousPageBtn(msg->x,msg->y))
|
|
+ {
|
|
+ log_msg("push up left button previous page\n");
|
|
+ if (isDownBtn.previousPage)
|
|
+ GoStatPage(selectedPage-1);
|
|
+ return 1;
|
|
+ }
|
|
+ else if (isOnNextPageBtn(msg->x,msg->y))
|
|
+ {
|
|
+ log_msg("push up left button next page\n");
|
|
+ if (isDownBtn.nextPage)
|
|
+ GoStatPage(selectedPage+1);
|
|
+ return 1;
|
|
+ }
|
|
+ else if (isOnPrevRunesBtn(msg->x,msg->y) && selectedPage == (lastPage + extraHiddenPage))
|
|
+ {
|
|
+ log_msg("push up left button prev runes\n");
|
|
+ if (isDownBtn.prevRunes && curRunesPage)
|
|
+ curRunesPage--;
|
|
+ return 1;
|
|
+ }
|
|
+ else if (isOnNextRunesBtn(msg->x,msg->y) && selectedPage == (lastPage + extraHiddenPage))
|
|
+ {
|
|
+ log_msg("push up left button next runes\n");
|
|
+ if (isDownBtn.nextRunes && (curRunesPage < maxRunesPage))
|
|
+ curRunesPage++;
|
|
+ return 1;
|
|
+ }
|
|
+ return 0;
|
|
}
|
|
|
|
FCT_ASM ( caller_DontPrintBorder_114 )
|
|
@@ -474,6 +597,7 @@ void Install_NewInterfaces()
|
|
//00498636 |. 6A 48 PUSH 48
|
|
//00498638 |. 8D45 B8 LEA EAX,DWORD PTR SS:[EBP-48]
|
|
|
|
+ /* Conflicts with D2ExpRes
|
|
// Manage mouse down (Play sound)
|
|
mem_seek R8(D2Client, 2A9DC, 2A9CC, 312A5, 82736, 891B6, 6B116, BCD36, BF4D6, A7731);
|
|
memt_byte( 0x8D, 0xE8 ); // CALL
|
|
@@ -486,6 +610,7 @@ void Install_NewInterfaces()
|
|
//6FB6CD36 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
|
//6FB6F4D6 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
|
//004A7731 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
|
|
+ */
|
|
|
|
// Manage mouse up
|
|
mem_seek R8(D2Client, 2ABBB, 2ABAB, 3148D, 836D9, 8A159, 6C0B9, BDCB9, C0459, A78DA);
|
|
diff --git a/PlugY/Parameters.cpp b/PlugY/Parameters.cpp
|
|
index b4dc915..392c112 100644
|
|
--- a/PlugY/Parameters.cpp
|
|
+++ b/PlugY/Parameters.cpp
|
|
@@ -58,6 +58,7 @@ const char* S_dllFilenames2 = "DllToLoad2";
|
|
const char* S_active_Commands = "ActiveCommands";
|
|
const char* S_active_CheckMemory = "ActiveCheckMemory";
|
|
const char* S_active_othersFeatures = "ActiveAllOthersFeatures";
|
|
+const char* S_saveFileStackSize = "SaveFileStackSize";
|
|
|
|
const char* S_WINDOWED = "WINDOWED";
|
|
const char* S_ActiveWindowed = "ActiveWindowed";
|
|
@@ -214,6 +215,19 @@ const char* S_INTERFACE = "INTERFACE";
|
|
const char* S_active_newInterfaces = "ActiveNewStatsInterface";
|
|
const char* S_selectMainPageOnOpenning = "SelectMainPageOnOpenning";
|
|
const char* S_printBackgroundOnMainPage = "PrintButtonsBackgroundOnMainStatsPage";
|
|
+const char* S_posXNextPageBtn = "PosXNextPageBtn";
|
|
+const char* S_posYNextPageBtn = "PosYNextPageBtn";
|
|
+const char* S_posXPrevPageBtn = "PosXPrevPageBtn";
|
|
+const char* S_posYPrevPageBtn = "PosYPrevPageBtn";
|
|
+const char* S_posXClosePageBtn = "PosXClosePageBtn";
|
|
+const char* S_posYClosePageBtn = "PosYClosePageBtn";
|
|
+const char* S_posXNextRuneBtn = "PosXNextRuneBtn";
|
|
+const char* S_posYNextRuneBtn = "PosYNextRuneBtn";
|
|
+const char* S_posXPrevRuneBtn = "PosXPrevRuneBtn";
|
|
+const char* S_posYPrevRuneBtn = "PosYPrevRuneBtn";
|
|
+const char* S_posXRunesList = "PosXRunesList";
|
|
+const char* S_posYRunesList = "PosYRunesList";
|
|
+const char* S_runesPerPage = "RunesPerPage";
|
|
|
|
const char* S_EXTRA = "EXTRA";
|
|
const char* S_active_RunLODs = "ActiveLaunchAnyNumberOfLOD";
|
|
@@ -316,6 +330,10 @@ void init_General(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDefaultFi
|
|
active_othersFeatures = atoi(buffer) != 0;
|
|
log_msg("active_othersFeatures\t\t= %u\n", active_othersFeatures);
|
|
|
|
+ GET_PRIVATE_PROFILE_STRING(S_GENERAL, S_saveFileStackSize, "8192");
|
|
+ saveFileStackSize = atoi(buffer);
|
|
+ log_msg("SaveFileStackSize\t\t\t= %u\n", saveFileStackSize);
|
|
+
|
|
log_msg("\n");
|
|
}
|
|
|
|
@@ -1032,6 +1050,52 @@ void init_NewInterfaces(INIFile* iniFile, INIFile* iniFixedFile, INIFile* iniDef
|
|
GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_printBackgroundOnMainPage, "1");
|
|
printBackgroundOnMainPage = atoi(buffer) != 0;
|
|
log_msg("printBackgroundOnMainPage\t= %u\n", printBackgroundOnMainPage);
|
|
+
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posXNextPageBtn, "161");
|
|
+ posXNextPageBtn = atoi(buffer);
|
|
+ log_msg("posXNextPageBtn\t= %d\n", posXNextPageBtn);
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posYNextPageBtn, "64");
|
|
+ posYNextPageBtn = atoi(buffer);
|
|
+ log_msg("posYNextPageBtn\t= %d\n", posYNextPageBtn);
|
|
+
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posXPrevPageBtn, "119");
|
|
+ posXPrevPageBtn = atoi(buffer);
|
|
+ log_msg("posXPrevPageBtn\t= %d\n", posXPrevPageBtn);
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posYPrevPageBtn, "64");
|
|
+ posYPrevPageBtn = atoi(buffer);
|
|
+ log_msg("posYPrevPageBtn\t= %d\n", posYPrevPageBtn);
|
|
+
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posXClosePageBtn, "360");
|
|
+ posXClosePageBtn = atoi(buffer);
|
|
+ log_msg("posXClosePageBtn\t= %d\n", posXClosePageBtn);
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posYClosePageBtn, "64");
|
|
+ posYClosePageBtn = atoi(buffer);
|
|
+ log_msg("posYClosePageBtn\t= %d\n", posYClosePageBtn);
|
|
+
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posXNextRuneBtn, "302");
|
|
+ posXNextRuneBtn = atoi(buffer);
|
|
+ log_msg("posXNextRuneBtn\t= %d\n", posXNextRuneBtn);
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posYNextRuneBtn, "64");
|
|
+ posYNextRuneBtn = atoi(buffer);
|
|
+ log_msg("posYNextRuneBtn\t= %d\n", posYNextRuneBtn);
|
|
+
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posXPrevRuneBtn, "260");
|
|
+ posXPrevRuneBtn = atoi(buffer);
|
|
+ log_msg("posXPrevRuneBtn\t= %d\n", posXPrevRuneBtn);
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posYPrevRuneBtn, "64");
|
|
+ posYPrevRuneBtn = atoi(buffer);
|
|
+ log_msg("posYPrevRuneBtn\t= %d\n", posYPrevRuneBtn);
|
|
+
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posXRunesList, "50");
|
|
+ posXRunesList = atoi(buffer);
|
|
+ log_msg("posXRunesList\t= %d\n", posXRunesList);
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_posYRunesList, "45");
|
|
+ posYRunesList = atoi(buffer);
|
|
+ log_msg("posYRunesList\t= %d\n", posYRunesList);
|
|
+
|
|
+ GET_PRIVATE_PROFILE_STRING(S_INTERFACE, S_runesPerPage, "30");
|
|
+ runesPerPage = atoi(buffer);
|
|
+ log_msg("runesPerPage\t= %d\n", runesPerPage);
|
|
}
|
|
log_msg("\n");
|
|
}
|
|
diff --git a/PlugY/infinityStash.h b/PlugY/infinityStash.h
|
|
index 0ca6b4d..123705d 100644
|
|
--- a/PlugY/infinityStash.h
|
|
+++ b/PlugY/infinityStash.h
|
|
@@ -18,6 +18,7 @@ extern bool active_sharedStash;
|
|
extern bool active_sharedGold;
|
|
extern bool separateHardSoftStash;
|
|
extern char* sharedStashFilename;
|
|
+extern DWORD saveFileStackSize;
|
|
|
|
extern bool displaySharedSetItemNameInGreen;
|
|
extern int posXPreviousBtn;
|
|
diff --git a/PlugY/newInterfaces.h b/PlugY/newInterfaces.h
|
|
index de51f26..c4c4ff3 100644
|
|
--- a/PlugY/newInterfaces.h
|
|
+++ b/PlugY/newInterfaces.h
|
|
@@ -9,20 +9,94 @@
|
|
#include "common.h"
|
|
|
|
#define MILIEU(X,L,N) (X + ((N<L)? (L-N)/2 : 0))
|
|
-#define isOnStatsPage(x,y) ((x<400) && (y<553))
|
|
+#define isOnStatsPage(x,y) (x<RX(512))
|
|
|
|
extern DWORD bDontPrintBorder;
|
|
+extern int selectedPage;
|
|
extern int extraHiddenPage;
|
|
+extern int curRunesPage;
|
|
+extern int maxRunesPage;
|
|
|
|
void GoNextStatPage();
|
|
void GoPreviousStatPage();
|
|
void GoStatPage(int page);
|
|
int GetCurrentPage();
|
|
|
|
+struct BtnState
|
|
+{
|
|
+ union{
|
|
+ DWORD all;
|
|
+ struct{
|
|
+ DWORD AssSTR:1;
|
|
+ DWORD AssDEX:1;
|
|
+ DWORD AssVIT:1;
|
|
+ DWORD AssENE:1;
|
|
+ DWORD UnaSTR:1;
|
|
+ DWORD UnaDEX:1;
|
|
+ DWORD UnaVIT:1;
|
|
+ DWORD UnaENE:1;
|
|
+ DWORD close:1;
|
|
+ DWORD previousPage:1;
|
|
+ DWORD nextPage:1;
|
|
+ DWORD prevRunes:1;
|
|
+ DWORD nextRunes:1;
|
|
+ };
|
|
+ };
|
|
+};
|
|
+extern BtnState isDownBtn;
|
|
+
|
|
extern bool active_newInterfaces;
|
|
extern bool selectMainPageOnOpenning;
|
|
extern bool printBackgroundOnMainPage;
|
|
|
|
+extern int posXNextPageBtn;
|
|
+extern int posYNextPageBtn;
|
|
+extern int posXPrevPageBtn;
|
|
+extern int posYPrevPageBtn;
|
|
+extern int posXClosePageBtn;
|
|
+extern int posYClosePageBtn;
|
|
+extern int posXNextRuneBtn;
|
|
+extern int posYNextRuneBtn;
|
|
+extern int posXPrevRuneBtn;
|
|
+extern int posYPrevRuneBtn;
|
|
+extern int posXRunesList;
|
|
+extern int posYRunesList;
|
|
+extern int runesPerPage;
|
|
+
|
|
+DWORD getXNextPageBtn();
|
|
+DWORD getYNextPageBtn();
|
|
+DWORD getXPreviousPageBtn();
|
|
+DWORD getYPreviousPageBtn();
|
|
+DWORD getXCloseBtn();
|
|
+DWORD getYCloseBtn();
|
|
+DWORD getXNextRunesBtn();
|
|
+DWORD getYNextRunesBtn();
|
|
+DWORD getXPrevRunesBtn();
|
|
+DWORD getYPrevRunesBtn();
|
|
+
|
|
+#define getLCloseBtn() 32
|
|
+#define getHCloseBtn() 32
|
|
+#define isOnCloseBtn(x,y) isOnRect(x, y, getXCloseBtn(), getYCloseBtn(), getLCloseBtn(), getHCloseBtn())
|
|
+
|
|
+#define getLPreviousPageBtn() 32
|
|
+#define getHPreviousPageBtn() 32
|
|
+#define isOnPreviousPageBtn(x,y) isOnRect(x, y, getXPreviousPageBtn(), getYPreviousPageBtn(), getLPreviousPageBtn(), getHPreviousPageBtn())
|
|
+
|
|
+#define getLNextPageBtn() 32
|
|
+#define getHNextPageBtn() 32
|
|
+#define isOnNextPageBtn(x,y) isOnRect(x, y, getXNextPageBtn(), getYNextPageBtn(), getLNextPageBtn(), getHNextPageBtn())
|
|
+
|
|
+#define getLPrevRunesBtn() 32
|
|
+#define getHPrevRunesBtn() 32
|
|
+#define isOnPrevRunesBtn(x,y) isOnRect(x, y, getXPrevRunesBtn(), getYPrevRunesBtn(), getLPrevRunesBtn(), getHPrevRunesBtn())
|
|
+
|
|
+#define getLNextRunesBtn() 32
|
|
+#define getHNextRunesBtn() 32
|
|
+#define isOnNextRunesBtn(x,y) isOnRect(x, y, getXNextRunesBtn(), getYNextRunesBtn(), getLNextRunesBtn(), getHNextRunesBtn())
|
|
+
|
|
+DWORD STDCALL statsLeftDown(sWinMessage* msg);
|
|
+DWORD STDCALL statsLeftUp(sWinMessage* msg);
|
|
+
|
|
void Install_NewInterfaces();
|
|
|
|
/*================================= END OF FILE =================================*/
|
|
\ No newline at end of file
|
|
diff --git a/PlugY/parameters.h b/PlugY/parameters.h
|
|
index d426c99..1cf884c 100644
|
|
--- a/PlugY/parameters.h
|
|
+++ b/PlugY/parameters.h
|
|
@@ -6,7 +6,7 @@
|
|
=================================================================*/
|
|
#pragma once
|
|
|
|
-#define PLUGY_VERSION "14.03"
|
|
+#define PLUGY_VERSION "14.03 HD"
|
|
|
|
enum TargetMod
|
|
{
|