Commit fce4d149 authored by Red Bot's avatar Red Bot

sync with live

parent f5e87912
......@@ -889,12 +889,12 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
if (debug)
{
RedirectIOToConsole();
svc_main(0, NULL, stop, port, ipaddr);
svc_main(0, NULL, stop, port, ipaddr, true);
}
else if (standalone)
{
RedirectIOToConsole();
svc_main(0, NULL, stop, port, ipaddr);
svc_main(0, NULL, stop, port, ipaddr, false);
}
#ifdef _DEBUG
else if (debugtest)
......@@ -927,7 +927,7 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
if (debug || standalone)
{
RedirectIOToConsole();
svc_main(0, NULL, stop, port, ipaddr);
svc_main(0, NULL, stop, port, ipaddr, debug);
}
#ifdef _DEBUG
else if (debugtest)
......
......@@ -30,6 +30,8 @@
#define snprintf _snprintf
#endif
extern bool gDebug;
Client::Client()
{
Init();
......@@ -665,6 +667,9 @@ void Client::HandleChannels(char * data)
channels.clear();
while (token!=NULL)
{
int len = strlen(token);
if (token[len - 1] == '\n')
token[len - 1] = 0;
channels.push_back(token);
token=strtok(NULL, " ");
}
......@@ -706,13 +711,13 @@ void Client::ProcessReadPacketBuffer()
if ((ret > 0) && (_strnicmp(data, "LOGIN=", 6) == 0) && (strchr(data, ';')!=NULL))
{
ret = rbuf->ReadUntil(data, MAX_BUF - 1, ';');
fprintf(stderr, "Debug Login: %s\r\n", data);
if (gDebug) fprintf(stderr, "Debug Login: %s\r\n", data);
command = false;
HandleLogin(data);
}
else
{
fprintf(stderr, "Debug: partial login, or invalid login: %s\n", data);
if (gDebug) fprintf(stderr, "Debug: partial login, or invalid login: %s\n", data);
}
/*
if (!authstart)
......@@ -744,7 +749,7 @@ void Client::ProcessReadPacketBuffer()
ret = MAX_BUF - 1;
if (rbuf->ReadLine(data, ret))
{
//fprintf(stderr, "Debug Command Data: %s", data);
if (gDebug) fprintf(stderr, "Debug Command Data: %s", data);
ProcessCommands(data);
command = false;
}
......@@ -761,7 +766,8 @@ void Client::ProcessReadPacketBuffer()
ret = MAX_BUF - 1;
if (rbuf->ReadLine(data, ret))
{
//fprintf(stderr, "Debug Data: %s", data);
if(gDebug) fprintf(stderr, "Debug Data: \"%s\"\n", data);
switch (data[0])
{
case '\t':
......
......@@ -44,7 +44,7 @@ VOID ServiceStart (DWORD dwArgc, LPTSTR *lpszArgv)
Sleep(1000);
port = GetPrivateProfileInt(_T("EQBCS"), _T("Port"), 2112, ini_path);
DWORD ret = GetPrivateProfileString(_T("EQBCS"), _T("Address"), _T("0.0.0.0"), (LPWSTR)&ipaddr, 2048, ini_path);
svc_main((int)dwArgc, lpszArgv, stop, port, ipaddr);
svc_main((int)dwArgc, lpszArgv, stop, port, ipaddr, false);
ServiceStop();
Sleep(1000);
ServiceStop();
......
......@@ -23,5 +23,5 @@ struct ScreenSaverSettings_T
int Send_Start_Pending();
int Send_Service_Running();
bool IsUserLoggedIn();
extern int svc_main(int argc, LPTSTR *argv, bool &stop, int port, TCHAR *addr);
extern int svc_main(int argc, LPTSTR *argv, bool &stop, int port, TCHAR *addr, bool debug);
#endif
\ No newline at end of file
......@@ -54,15 +54,17 @@ bool LoadConfig(const char *configpath);
void OnSignal(int fd, short event, void *arg);
bool InitWinSock();
BOOL CtrlHandler(DWORD fdwCtrlType);
bool gDebug = false;
//*
#ifndef WIN32
int main(int argc, char *argv[])
#else
int svc_main(int argc, LPTSTR *argv, bool &stop, int port, LPTSTR ipaddr)
int svc_main(int argc, LPTSTR *argv, bool &stop, int port, LPTSTR ipaddr, bool debug)
#endif
{
char addr[64] = { 0 };
gDebug = debug;
//event ev_signal;
//event *ev_sstimer;
event_enable_debug_mode();
......
No preview for this file type
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -6,10 +6,11 @@
// version information
//Version 1.10 Updated patterns - SwiftyMUSE Feb 21 2018
//Version 2.00 Removed patterns - SwiftyMUSE Apr 23 2018
//Version 2.01 WriteChatf CrashFix - Eqmule May 29 2018
#define PLUGIN_NAME "MQ2Camera" // Plugin Name
#define PLUGIN_DATE 20180423 // Plugin Date
#define PLUGIN_VERS 2.00 // Plugin Version
#define PLUGIN_VERS 2.01 // Plugin Version
#ifndef PLUGIN_API
#include "../MQ2Plugin.h"
......@@ -74,7 +75,7 @@ void SetCameraDistance(float distance)
float userValue = std::max(distance, s_origUserCameraMaxDistance);
SetCameraValue(UserCameraMaxDistance, userValue);
WriteChatf(PLUGIN_MSG "Camera max distance set to \ay%.2f\ax", distance);
WriteChatf("%s:: Camera max distance set to \ay%.2f\ax", PLUGIN_MSG, distance);
}
}
......@@ -126,7 +127,7 @@ void AttachCameraToSpawn(PSPAWNINFO pSpawn = NULL)
if (attaching)
{
WriteChatf(PLUGIN_MSG "Attaching camera to \ay%s", pSpawn->DisplayedName);
WriteChatf("%s:: Attaching camera to \ay%s", PLUGIN_MSG, pSpawn->DisplayedName);
}
}
}
......@@ -135,7 +136,7 @@ VOID Cmd_Camera(PSPAWNINFO pChar, PCHAR szLine)
{
if (!s_initialized)
{
WriteChatf(PLUGIN_MSG "Plugin is disabled due to initialization error.");
WriteChatf("%s:: Plugin is disabled due to initialization error.", PLUGIN_MSG);
return;
}
......@@ -162,10 +163,8 @@ VOID Cmd_Camera(PSPAWNINFO pChar, PCHAR szLine)
}
else if (!_stricmp(Command, "info"))
{
WriteChatf(PLUGIN_MSG "Zoom camera max distance: \ay%.2f\ax (default: %.2f)",
*ZoomCameraMaxDistance, s_origZoomCameraMaxDistance);
WriteChatf(PLUGIN_MSG "User camera max distance: \ay%.2f\ax (default: %.2f)",
*UserCameraMaxDistance, s_origUserCameraMaxDistance);
WriteChatf("%s:: Zoom camera max distance: \ay%.2f\ax (default: %.2f)", PLUGIN_MSG, *ZoomCameraMaxDistance, s_origZoomCameraMaxDistance);
WriteChatf("%s:: User camera max distance: \ay%.2f\ax (default: %.2f)", PLUGIN_MSG, *UserCameraMaxDistance, s_origUserCameraMaxDistance);
}
else if (!_stricmp(Command, "attach"))
{
......@@ -175,7 +174,7 @@ VOID Cmd_Camera(PSPAWNINFO pChar, PCHAR szLine)
if (pTarget)
AttachCameraToSpawn((PSPAWNINFO)pTarget);
else
WriteChatf(PLUGIN_MSG "\arNo target to attach camera to");
WriteChatf("%s:: \arNo target to attach camera to", PLUGIN_MSG);
}
// /camera attach id #
else if (!_stricmp(Param, "id"))
......@@ -187,7 +186,7 @@ VOID Cmd_Camera(PSPAWNINFO pChar, PCHAR szLine)
if (pSpawn)
AttachCameraToSpawn(pSpawn);
else
WriteChatf(PLUGIN_MSG "\arCould not find spawn id '%s'", Id);
WriteChatf("%s:: \arCould not find spawn id '%s'", PLUGIN_MSG, Id);
}
// /camera attach name_of_some_spawn
else if (strlen(Param) > 0)
......@@ -199,36 +198,36 @@ VOID Cmd_Camera(PSPAWNINFO pChar, PCHAR szLine)
if (pSpawn)
AttachCameraToSpawn(pSpawn);
else
WriteChatf(PLUGIN_MSG "\arCould not find spawn named '%s'", Param);
WriteChatf("%s:: \arCould not find spawn named '%s'", PLUGIN_MSG, Param);
}
else
{
WriteChatf(PLUGIN_MSG "Resetting camera");
WriteChatf("%s:: Resetting camera", PLUGIN_MSG);
AttachCameraToSpawn();
}
}
else if (!_stricmp(Command, "detach") || !_stricmp(Command, "reset"))
{
// reset the camera
WriteChatf(PLUGIN_MSG "Resetting camera");
WriteChatf("%s:: Resetting camera", PLUGIN_MSG);
AttachCameraToSpawn();
}
else
{
WriteChatf(PLUGIN_MSG "Usage:");
WriteChatf(PLUGIN_MSG "\ag/camera distance [ reset | <distance> ] [ save ]\ax - set camera max distance or reset to default. Specify 'save' to save the value");
WriteChatf(PLUGIN_MSG "\ag/camera info\ax - report current camera information");
WriteChatf(PLUGIN_MSG "\ag/camera attach [ target | id # | <spawn name> ]\ax - attach camera to another spawn");
WriteChatf(PLUGIN_MSG "\ag/camera detach\ax - Reset camera attachment");
WriteChatf("%s:: Usage:", PLUGIN_MSG);
WriteChatf("%s:: \ag/camera distance [ reset | <distance> ] [ save ]\ax - set camera max distance or reset to default. Specify 'save' to save the value", PLUGIN_MSG);
WriteChatf("%s:: \ag/camera info\ax - report current camera information", PLUGIN_MSG);
WriteChatf("%s:: \ag/camera attach [ target | id # | <spawn name> ]\ax - attach camera to another spawn", PLUGIN_MSG);
WriteChatf("%s:: \ag/camera detach\ax - Reset camera attachment", PLUGIN_MSG);
}
}
PLUGIN_API VOID InitializePlugin(VOID)
{
WriteChatf(PLUGIN_MSG "v2.00 by brainiac (\aohttps://github.com/brainiac/MQ2Camera\ax) updated by SwiftyMUSE");
WriteChatf("%s:: v2.00 by brainiac (\aohttps://github.com/brainiac/MQ2Camera\ax) updated by SwiftyMUSE", PLUGIN_MSG);
if (!InitValues()) {
WriteChatf(PLUGIN_MSG "\arFailed to initialize offsets. Plugin will not function.");
WriteChatf("%s:: \arFailed to initialize offsets. Plugin will not function.", PLUGIN_MSG);
EzCommand("/timed 1 /plugin mq2camera unload");
}
else {
......@@ -240,7 +239,7 @@ PLUGIN_API VOID InitializePlugin(VOID)
AddDetour((DWORD)UserCameraMaxDistance);
s_initialized = true;
WriteChatf(PLUGIN_MSG "Type \ag/camera\ax for more information");
WriteChatf("%s:: Type \ag/camera\ax for more information", PLUGIN_MSG);
float distance = LoadCameraDistance();
if (distance > 1.0)
......
This diff is collapsed.
......@@ -611,7 +611,9 @@ PLUGIN_API VOID OnDrawHUD(VOID)
}
}
if(bOkToCheck) {
ParseMacroParameter(GetCharInfo()->pSpawn, pElement->PreParsed);
if (PCHARINFO pChar = GetCharInfo()) {
ParseMacroParameter(pChar->pSpawn, pElement->PreParsed);
}
}
else {
pElement->PreParsed[0] = '\0';
......
......@@ -696,8 +696,6 @@ public:
};
int DynSize;
int MaxDynSize;
Node *Head;
Node *Tail;
int Count;
union
{
......@@ -782,4 +780,12 @@ public:
int ChunkAlloc;
bool bValid;
};
template <typename TNumBitsType, typename TElementType> class DynamicBitField
{
typedef TNumBitsType NumBitsType;
typedef TElementType ElementType;
NumBitsType NumBits;
ElementType Element;
ElementType* Elements;
};
#pragma pack(pop)
......@@ -1138,6 +1138,9 @@ FUNCTION_AT_ADDRESS( int CConfirmationDialog::WndNotification(class CXWnd *,unsi
#ifdef CContainerMgr__GetFreeContainerWnd_x
FUNCTION_AT_ADDRESS(class CContainerWnd * CContainerMgr::GetFreeContainerWnd(void),CContainerMgr__GetFreeContainerWnd);
#endif
#ifdef CContainerMgr__OpenExperimentContainer_x
FUNCTION_AT_ADDRESS(void CContainerMgr::OpenExperimentContainer(const VePointer<CONTENTS>& pCont, const ItemGlobalIndex& Location),CContainerMgr__OpenExperimentContainer);
#endif
#ifdef CContainerMgr__CContainerMgr_x
FUNCTION_AT_ADDRESS( CContainerMgr::CContainerMgr(void),CContainerMgr__CContainerMgr);
#endif
......@@ -6846,6 +6849,9 @@ FUNCTION_AT_ADDRESS( SpellManager::SpellManager(char *),SpellManager__SpellManag
#ifdef SpellManager__dSpellManager_x
FUNCTION_AT_ADDRESS( SpellManager::~SpellManager(void),SpellManager__dSpellManager);
#endif
#ifdef SpellManager__GetSpellByGroupAndRank_x
FUNCTION_AT_ADDRESS(const EQ_Spell* SpellManager::GetSpellByGroupAndRank(int Group, int SubGroup, int Rank, bool bLesserRanksOk),SpellManager__GetSpellByGroupAndRank);
#endif
#ifdef CStoryWnd__CStoryWnd_x
FUNCTION_AT_ADDRESS( CStoryWnd::CStoryWnd(class CXWnd *),CStoryWnd__CStoryWnd);
#endif
......
......@@ -369,6 +369,7 @@ class ZoneNPCLoadTextManager;
class CTextOverlay;
class PcZoneClient;
class CharacterZoneClient;
class CZoneGuideWnd;
// End forward class declarations
typedef struct _Personal_Loot
{
......@@ -1605,6 +1606,16 @@ EQLIB_OBJECT bool ItemGlobalIndex::IsValidIndex(void);
class CContainerMgr
{
public:
DWORD vfTable;
CContainerWnd *pContainerWnds[38];
ArrayClass<CContainerWnd*> ContainerWndsToDelete;
VePointer<CONTENTS> pWorldContainer;
DWORD WorldContainerSerialNumber;
int WorldContainerRealEstateID;
int WorldContainerRealEstateItemID;
DWORD Timer;
bool bShowDone;
EQLIB_OBJECT CContainerMgr::CContainerMgr(void);
EQLIB_OBJECT bool CContainerMgr::CloseAllContainers(void);
EQLIB_OBJECT class EQ_Item * CContainerMgr::GetWorldContainerItem(int);
......@@ -1621,6 +1632,7 @@ EQLIB_OBJECT CContainerMgr::~CContainerMgr(void);
//EQLIB_OBJECT void * CContainerMgr::`vector deleting destructor'(unsigned int);
// private
EQLIB_OBJECT class CContainerWnd * CContainerMgr::GetFreeContainerWnd(void);
EQLIB_OBJECT void CContainerMgr::OpenExperimentContainer(const VePointer<CONTENTS>& pCont, const ItemGlobalIndex& Location);
};
class CContainerWnd : public CSidlScreenWnd
......@@ -2573,10 +2585,26 @@ EQLIB_OBJECT void CGemsGameWnd::Update(void);
EQLIB_OBJECT void CGemsGameWnd::UpdateDisplay(void);
EQLIB_OBJECT void CGemsGameWnd::WriteHighScores(void);
};
class CGiveWnd : public CSidlScreenWnd
class WndEventHandler2
{
public:
UINT LastCheckTime;
};
class PopDialogHandler
{
public:
//this has a vftable
DWORD vfTable;
};
class CGiveWnd : public CSidlScreenWnd, public PopDialogHandler, public WndEventHandler2
{
public:
CButtonWnd *pMoneyButton[4];
CButtonWnd *TradeButton;
CButtonWnd *CancelButton;
CLabel *NPCNameLabel;
CInvSlotWnd *pInvSlotWnd[4];
EQLIB_OBJECT CGiveWnd::CGiveWnd(class CXWnd *);
EQLIB_OBJECT void CGiveWnd::Activate(void);
EQLIB_OBJECT void CGiveWnd::UpdateGiveDisplay(void);
......@@ -6104,9 +6132,25 @@ EQLIB_OBJECT void CTrackingWnd::UpdateTrackingControls(void);
EQLIB_OBJECT void CTrackingWnd::UpdateTrackingList(bool);
};
class CTradeWnd : public CSidlScreenWnd
class CTradeWnd : public CSidlScreenWnd, public WndEventHandler2
{
public:
UINT NextRefreshTime;
bool bInventoryWasOpen;
CButtonWnd *HisMoneyButton[4];
CButtonWnd *MyMoneyButton[4];
CButtonWnd *TradeButton;
CButtonWnd *CancelButton;
CLabel *HisNameLabel;
CLabel *MyNameLabel;
CInvSlotWnd *pInvSlotWnd[16];
long HisMoney[4];
long MyMoney[4];
ItemBaseContainer TradeItems;//16 items
bool bHisReadyTrade;
bool bMyReadyTrade;
bool bIsTrading;
EQLIB_OBJECT CTradeWnd::CTradeWnd(class CXWnd *);
EQLIB_OBJECT bool CTradeWnd::IsMyTradeSlot(int,bool *);
EQLIB_OBJECT void CTradeWnd::Activate(class EQPlayer *,bool);
......@@ -7975,85 +8019,85 @@ class CharacterZoneClient : virtual public CharacterBase
{
public:
/*0x2074*/ //virtual void vftableph(void) {};
/*0x2074*/ void *CharacterZoneClient_vfTable;
/*0x2420*/ void *CharacterZoneClient_vfTable;
union {
/*0x2078*/ PlayerClient *me;//just here for comparing the 2, todo: fix
/*0x2078*/ PSPAWNINFO me2;
};
/*0x207c*/ bool bUpdateStuff;
/*0x207c*/ bool bZoningStatProcessing;
/*0x2080*/ int ArmorClassBonus;
/*0x2084*/ int CurrWeight;
/*0x2088*/ int astHitPointSendPercent;
/*0x208c*/ int LastManaPointSendPercent;
/*0x2090*/ int LastEndurancePointSendPercent;
/*0x2094*/ int HPBonus;//vtable2+24
/*0x2098*/ int ManaBonus;//vtable2+28
/*0x209c*/ int EnduranceBonus;//vtable2+2c
/*0x20a0*/ int EnduranceCostPerSecond;
/*0x20a4*/ int CombatEffectsBonus;//vtable2+34 Combat Effects in UI
/*0x20a8*/ int ShieldingBonus;//vtable2+38 Melee Shielding in UI
/*0x20ac*/ int SpellShieldBonus;//vtable2+3c Spell Shielding in UI
/*0x20b0*/ int AvoidanceBonus;//vtable2+40 Avoidance in UI
/*0x20b4*/ int AccuracyBonus;//vtable2+44 Accuracy in UI
/*0x20b8*/ int StunResistBonus;//vtable2+48 Stun Resist in UI
/*0x20bc*/ int StrikeThroughBonus;//vtable2+4c Strike Through in UI
/*0x20c0*/ int DoTShieldBonus;//vtable2+50 Dot Shielding in UI
/*0x20c4*/ int DamageShieldMitigationBonus;//vtable2+54 Damage Shield Mitig in UI
/*0x20c8*/ int DamageShieldBonus;//vtable2+58 Damage Shielding in UI
/*0x20cc*/ TSafeArrayStatic<int, 9> ItemSkillMinDamageMod;
/*0x20f0*/ TSafeArrayStatic<int, 9> SkillMinDamageModBonus;
/*0x2114*/ DWORD HeroicSTRBonus;//vtable2+a4
/*0x2118*/ DWORD HeroicINTBonus;//vtable2+a8
/*0x211c*/ DWORD HeroicWISBonus;//vtable2+ac
/*0x2120*/ DWORD HeroicAGIBonus;//vtable2+b0
/*0x2124*/ DWORD HeroicDEXBonus;//vtable2+b4
/*0x2128*/ DWORD HeroicSTABonus;//vtable2+b8
/*0x212c*/ DWORD HeroicCHABonus;//vtable2+bc
/*0x2130*/ DWORD HeroicSvMagicBonus;//vtable2+c0
/*0x2134*/ DWORD HeroicSvFireBonus;//vtable2+c4
/*0x2138*/ DWORD HeroicSvColdBonus;//vtable2+c8
/*0x213c*/ DWORD HeroicSvDiseaseBonus;//vtable2+cc
/*0x2140*/ DWORD HeroicSvPoisonBonus;//vtable2+d0
/*0x2144*/ DWORD HeroicSvCorruptionBonus;//vtable2+d4
/*0x2148*/ DWORD HealAmountBonus;//vtable2+d8
/*0x214c*/ DWORD SpellDamageBonus;//vtable2+dc
/*0x2150*/ int ItemHealAmountDotMod;
/*0x2154*/ int ItemSpellDamageDotMod;
/*0x2158*/ DWORD ClairvoyanceBonus;//vtable2+e8
/*0x215c*/ DWORD AttackBonus;//vtable2+ec
/*0x2160*/ DWORD HPRegenBonus;//vtable2+f0
/*0x2164*/ DWORD ManaRegenBonus;//vtable2+f4
/*0x2168*/ DWORD EnduranceRegenBonus;//vtable2+f8
/*0x216c*/ DWORD AttackSpeed;//vtable2+fc
/*0x2170*/ int ItemPotionBelt;
/*0x2174*/ int NoBuffItemHitpointAdjustment;
/*0x2178*/ int NoBuffItemManaAdjustment;
/*0x217c*/ int NoBuffItemEnduranceAdjustment;
/*0x2180*/ int NoBuffItemBaseChanceProc;
/*0x2184*/ int NoBuffItemMinDamageMod;
/*0x2188*/ int NoBuffItemInnateSpellRune;
/*0x218c*/ int NoBuffItemAvoidance;
/*0x2190*/ int NoBuffItemToHit;
/*0x2194*/ int NoBuffItemResistStunChance;
/*0x2198*/ int NoBuffItemDotShieldingEffect;
/*0x219c*/ int NoBuffItemStrikeThroughChance;
/*0x21a0*/ int NoBuffItemAttack;
/*0x21a4*/ int NoBuffItemHitPointRegen;
/*0x21a8*/ int NoBuffItemManaRegen;
/*0x21ac*/ int NoBuffItemEnduranceRegen;
/*0x21b0*/ int NoBuffItemDamageShield;
/*0x21b4*/ int NoBuffItemDamageShieldMitigation;
/*0x21b8*/ int NoBuffItemHaste;
/*0x21bc*/ int NoBuffItemPotionBelt;
/*0x21c0*/ TSafeArrayStatic<int, 9> NoBuffItemSkillMinDamageMod;
/*0x21e4*/ bool bOutputHpRegen;
/*0x21e5*/ bool bInvulnerable;
/*0x21e6*/ bool bOnAVehicle;
/*0x21e8*/ SpellCache spellCache;//size 0x58
/*0x2240*/ HashListSet<int, 0x80> DoomEffectsBySlot;//size 0x18 + (0x80 * 4)
/*0x2458*/ UINT LastHitEval;
/*0x245c*/
/*0x2424*/ PlayerClient *me;//just here for comparing the 2, todo: fix
/*0x2424*/ PSPAWNINFO me2;
};
/*0x242c*/ bool bUpdateStuff;
/*0x242d*/ bool bZoningStatProcessing;
/*0x2430*/ DWORD ArmorClassBonus;//vtable2+10
/*0x2434*/ DWORD CurrWeight;//vtable2+14
/*0x2438*/ int astHitPointSendPercent;
/*0x243c*/ int LastManaPointSendPercent;
/*0x2440*/ int LastEndurancePointSendPercent;
/*0x2444*/ DWORD HPBonus;//vtable2+24
/*0x2448*/ DWORD ManaBonus;//vtable2+28
/*0x244c*/ DWORD EnduranceBonus;//vtable2+2c
/*0x2450*/ BYTE Unknown0x2458[0x4];
/*0x2454*/ DWORD CombatEffectsBonus;//vtable2+34 Combat Effects in UI
/*0x2458*/ DWORD ShieldingBonus;//vtable2+38 Melee Shielding in UI
/*0x245c*/ DWORD SpellShieldBonus;//vtable2+3c Spell Shielding in UI
/*0x2460*/ DWORD AvoidanceBonus;//vtable2+40 Avoidance in UI
/*0x2464*/ DWORD AccuracyBonus;//vtable2+44 Accuracy in UI
/*0x2468*/ DWORD StunResistBonus;//vtable2+48 Stun Resist in UI
/*0x246c*/ DWORD StrikeThroughBonus;//vtable2+4c Strike Through in UI
/*0x2470*/ DWORD DoTShieldBonus;//vtable2+50 Dot Shielding in UI
/*0x2474*/ DWORD DamageShieldMitigationBonus;//vtable2+54 Damage Shield Mitig in UI
/*0x2478*/ DWORD DamageShieldBonus;//vtable2+58 Damage Shielding in UI
/*0x247c*/ TSafeArrayStatic<int, 9> ItemSkillMinDamageMod;//size 0x24
/*0x24a0*/ TSafeArrayStatic<int, 9> SkillMinDamageModBonus;//size 0x24
/*0x24c4*/ DWORD HeroicSTRBonus;//vtable2+a4
/*0x24c8*/ DWORD HeroicINTBonus;//vtable2+a8
/*0x24cc*/ DWORD HeroicWISBonus;//vtable2+ac
/*0x24d0*/ DWORD HeroicAGIBonus;//vtable2+b0
/*0x24d4*/ DWORD HeroicDEXBonus;//vtable2+b4
/*0x24d8*/ DWORD HeroicSTABonus;//vtable2+b8
/*0x24dc*/ DWORD HeroicCHABonus;//vtable2+bc
/*0x24e0*/ DWORD HeroicSvMagicBonus;//vtable2+c0
/*0x24e4*/ DWORD HeroicSvFireBonus;//vtable2+c4
/*0x24e8*/ DWORD HeroicSvColdBonus;//vtable2+c8
/*0x24ec*/ DWORD HeroicSvDiseaseBonus;//vtable2+cc
/*0x24f0*/ DWORD HeroicSvPoisonBonus;//vtable2+d0
/*0x24f4*/ DWORD HeroicSvCorruptionBonus;//vtable2+d4
/*0x24f8*/ DWORD HealAmountBonus;//vtable2+d8
/*0x24fc*/ DWORD SpellDamageBonus;//vtable2+dc
/*0x2500*/ int ItemHealAmountDotMod;
/*0x2504*/ int ItemSpellDamageDotMod;
/*0x2508*/ DWORD ClairvoyanceBonus;//vtable2+e8
/*0x250c*/ DWORD AttackBonus;//vtable2+ec
/*0x2510*/ DWORD HPRegenBonus;//vtable2+f0
/*0x2514*/ DWORD ManaRegenBonus;//vtable2+f4
/*0x2518*/ DWORD EnduranceRegenBonus;//vtable2+f8
/*0x251c*/ DWORD AttackSpeed;//vtable2+fc
/*0x2520*/ //int ItemPotionBelt;
/*0x2520*/ int NoBuffItemHitpointAdjustment;
/*0x2524*/ int NoBuffItemManaAdjustment;
/*0x2528*/ int NoBuffItemEnduranceAdjustment;
/*0x252c*/ int NoBuffItemBaseChanceProc;
/*0x2530*/ int NoBuffItemMinDamageMod;
/*0x2534*/ int NoBuffItemInnateSpellRune;
/*0x2538*/ int NoBuffItemAvoidance;
/*0x253c*/ int NoBuffItemToHit;
/*0x2540*/ int NoBuffItemResistStunChance;
/*0x2544*/ int NoBuffItemDotShieldingEffect;
/*0x2548*/ int NoBuffItemStrikeThroughChance;
/*0x254c*/ int NoBuffItemAttack;
/*0x2550*/ int NoBuffItemHitPointRegen;
/*0x2554*/ int NoBuffItemManaRegen;
/*0x2558*/ int NoBuffItemEnduranceRegen;
/*0x255c*/ int NoBuffItemDamageShield;
/*0x2560*/ int NoBuffItemDamageShieldMitigation;
/*0x2564*/ int NoBuffItemHaste;
/*0x256c*/ //int NoBuffItemPotionBelt;
/*0x2568*/ TSafeArrayStatic<int, 9> NoBuffItemSkillMinDamageMod;//size 0x24
/*0x258c*/ bool bOutputHpRegen;
/*0x258d*/ bool bInvulnerable;
/*0x258e*/ bool bOnAVehicle;
/*0x2590*/ EQData::SpellCache spellCache;//size 0x58
/*0x25e8*/ HashListSet<int, 0x80> DoomEffectsBySlot;//size 0x10 + (0x80 * 4)
/*0x27f8*/ UINT LastHitEval;
/*0x27fc*/
EQLIB_OBJECT CharacterZoneClient::CharacterZoneClient(void);
EQLIB_OBJECT int CharacterZoneClient::CalcAffectChange(const EQ_Spell *spell, BYTE casterLevel, BYTE affextIndex, const EQ_Affect *theAffect, int EffectIndex = 0, PlayerZoneClient *pCaster = NULL,bool overrideChangeVal = false, int ChangeVal = -1,bool bCap = true);
......@@ -9282,6 +9326,7 @@ public:
/*0x03BB9C*/
/*0x00*/ EQLIB_OBJECT SpellManager::SpellManager(char *);
EQLIB_OBJECT const EQ_Spell* SpellManager::GetSpellByGroupAndRank(int Group, int SubGroup, int Rank = -1, bool bLesserRanksOk = false);
};
class ClientSpellManager : public SpellManager
{
......@@ -9702,6 +9747,145 @@ class PlayerPointManager
public:
EQLIB_OBJECT unsigned long PlayerPointManager::GetAltCurrency(unsigned long,unsigned long b=1);
};
enum eZoneGuideConnectionsView
{
eZGCV_None,
eZGCV_Selected,
eZGCV_PreviewPath,
eZGCV_ActivePath,
eZGCV_Disabled,
};
class ZoneGuideConnection
{
public:
EQZoneIndex DestZone;
int TransferTypeIndex;
int RequiredExpansions;//EQExpansionOwned