PDA

View Full Version : |Source| Custom item stats - Increase attack dmg, defend value (season 6 - 1.04D)



djagripnos
26/04/2020, 08:54 AM
MAIN.DLL


CustomItemInfo.cpp


#include "stdafx.h"
#include "Defines.h"
#include "CustomItemInfo.h"
#include "InfoLog.h"

CCustomItemInfo gCustomItemInfo;

CCustomItemInfo::CCustomItemInfo() // OK
{
this->Init();
}

CCustomItemInfo::~CCustomItemInfo() // OK
{

}

void CCustomItemInfo::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_ITEM_INFO;n++)
{
this->m_CustomItemInfoEx[n].Index = -1;
}
}

void CCustomItemInfo::Load(CUSTOM_ITEM_INFO_EX* info) // OK
{
for(int n=0;n < MAX_CUSTOM_ITEM_INFO;n++)
{
this->SetInfo(info[n]);

}
}

void CCustomItemInfo::SetInfo(CUSTOM_ITEM_INFO_EX info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_ITEM_INFO)
{
return;
}

this->m_CustomItemInfoEx[info.Index] = info;
}

CUSTOM_ITEM_INFO_EX* CCustomItemInfo::GetInfo(int index) // OK
{
if(index < 0 || index >= MAX_CUSTOM_ITEM_INFO)
{
return 0;
}

if(this->m_CustomItemInfoEx[index].Index != index)
{
return 0;
}

return &this->m_CustomItemInfoEx[index];
}

CUSTOM_ITEM_INFO_EX* CCustomItemInfo::GetInfoByItem(int ItemIndex) // OK
{
for(int n=0;n < MAX_CUSTOM_ITEM_INFO;n++)
{
CUSTOM_ITEM_INFO_EX* lpInfo = this->GetInfo(n);

if(lpInfo == 0)
{
continue;
}

if(ITEM(lpInfo->ItemType,lpInfo->ItemIndex) == ItemIndex)
{
gInfoLog.Output(LOG_KILLERS,"item %d,%d",this->m_CustomItemInfoEx[n].ItemType,this->m_CustomItemInfoEx[n].ItemIndex);
return lpInfo;
}
}

return 0;
}

bool CCustomItemInfo::isCustomItem(int ItemIndex,float* ItemColor) // OK
{
return true;
}


CustomItemInfo.h


#pragma once

struct CUSTOM_ITEM_INFO_EX
{
int Index;
int ItemType;
int ItemIndex;
int DamageMin;
int DamageMax;
int Defense;
int MagicDefense;
};

class CCustomItemInfo
{
public:
CCustomItemInfo();
virtual ~CCustomItemInfo();
void Init();
void Load(CUSTOM_ITEM_INFO_EX* info);
void SetInfo(CUSTOM_ITEM_INFO_EX info);
CUSTOM_ITEM_INFO_EX* GetInfo(int index);
CUSTOM_ITEM_INFO_EX* GetInfoByItem(int ItemIndex);
bool isCustomItem(int ItemIndex,float* ItemColor);
public:
CUSTOM_ITEM_INFO_EX m_CustomItemInfoEx[MAX_CUSTOM_ITEM_INFO];
};

extern CCustomItemInfo gCustomItemInfo;

ItemInfoEx.cpp


#include "stdafx.h"
#include "ItemInfoEx.h"
#include "TMemory.h"
#include "Util.h"
#include "Defines.h"
#include "Import.h"
#include "Object.h"
#include "CustomItemInfo.h"
#include "InfoLog.h"

void SetNewOption(ObjectItem * lpItem, BYTE Option, BYTE Special, BYTE Value);

cItemInfoEx gItemInfoEx;

cItemInfoEx::cItemInfoEx() {

}

cItemInfoEx::~cItemInfoEx() {

}

void cItemInfoEx::Load() {

SetOp((LPVOID)0x58B77E, SetNewOption, ASM::CALL); //<- :c ?
SetOp((LPVOID)0x5C7833, SetNewOption, ASM::CALL); //<- :c ?
SetOp((LPVOID)0x5C7D71, SetNewOption, ASM::CALL); //<- :c ?
SetOp((LPVOID)0x5C7F1B, SetNewOption, ASM::CALL); //<- :c ?
SetOp((LPVOID)0x5C80BE, SetNewOption, ASM::CALL); //<- :c ?
SetOp((LPVOID)0x7E216A, SetNewOption, ASM::CALL); //<- :c ?
}

void SetNewOption(ObjectItem * lpItem, BYTE Option, BYTE Special, BYTE Value) {

pSetItemOption(lpItem, Option, Special, Value);

CUSTOM_ITEM_INFO_EX* Exdata = gCustomItemInfo.GetInfoByItem(lpItem->ItemID);

if (Exdata) {
lpItem->DamageMin = Exdata->DamageMin;
lpItem->DamageMax = Exdata->DamageMax;
lpItem->Defense = Exdata->Defense;
lpItem->MagicDefense = Exdata->MagicDefense;
DWORD v6 = 0;
DWORD v7 = 0;
DWORD v8 = 0;
DWORD v9 = 0;
DWORD v10 = 0;
DWORD v13 = 0;
DWORD v14 = 0;
int v16 = Special & 0x3F;
signed int v17 = *(WORD *)pGetItemAtt(lpItem->ItemID, 32) + 30;
char v22 = 0;
int v24 = (Option >> 3) & 0xF;

if (lpItem->ItemID >= 6147 && lpItem->ItemID <= 6150
|| lpItem->ItemID >= 6180 && lpItem->ItemID <= 6184
|| lpItem->ItemID >= 6186 && lpItem->ItemID <= 6187
|| lpItem->ItemID == 19
|| lpItem->ItemID == 2066
|| lpItem->ItemID == 2570
|| lpItem->ItemID == 1037
|| lpItem->ItemID == 6686
|| lpItem->ItemID >= 6274 && lpItem->ItemID <= 6278
|| lpItem->ItemID >= 6193 && lpItem->ItemID <= 6194
|| lpItem->ItemID == 6279
|| lpItem->ItemID == 2596)
{
v16 = 0;
}

if (Value % 4 == 1 || Value % 4 == 2)
{
v16 = 1;
v22 = 1;
}

signed int v18 = 0;

switch (lpItem->ItemID)
{
case 0x406:
v18 = 15;
break;
case 0x806:
v18 = 30;
break;
case 0xA07:
v18 = 25;
break;
}

if (Exdata->DamageMin > 0)
{
if (v16 > 0 && *(WORD *)pGetItemAtt(lpItem->ItemID, 32))
{
if (v18)
lpItem->DamageMin += v18;
else
lpItem->DamageMin += (25 * Exdata->DamageMin / *(WORD *)pGetItemAtt(lpItem->ItemID, 32)) + 5;
}
if (v22)
lpItem->DamageMin += v17 / 40 + 5;
if (v24 <= 9)
v14 = (Option >> 3) & 0xF;
else
v14 = 9;
lpItem->DamageMin += 3 * v14;
switch (v24)
{
case 15:
lpItem->DamageMin += 9;
case 14:
lpItem->DamageMin += 8;
case 13:
lpItem->DamageMin += 7;
case 12:
lpItem->DamageMin += 6;
case 11:
lpItem->DamageMin += 5;
case 10:
lpItem->DamageMin += 4;
break;
default:
break;
}
}
if (Exdata->DamageMax > 0)
{
if (v16 > 0 && *(WORD *)pGetItemAtt(lpItem->ItemID, 32))
{
if (v18)
lpItem->DamageMax += v18;
else
lpItem->DamageMax += (25 * Exdata->DamageMax / *(WORD *)pGetItemAtt(lpItem->ItemID, 32)) + 5;
}
if (v22)
lpItem->DamageMax += v17 / 40 + 5;
if (v24 <= 9)
v13 = (Option >> 3) & 0xF;
else
v13 = 9;
lpItem->DamageMax += 3 * v13;
switch (v24)
{
case 15:
lpItem->DamageMax += 9;
case 14:
lpItem->DamageMax += 8;
case 13:
lpItem->DamageMax += 7;
case 12:
lpItem->DamageMax += 6;
case 11:
lpItem->DamageMax += 5;
case 10:
lpItem->DamageMax += 4;
break;
default:
break;
}
}
if (lpItem->ItemID == 6686) //???
{
lpItem->Defense = 15;
}
if (Exdata->Defense > 0)
{
if (lpItem->ItemID < 3072 || lpItem->ItemID >= 3584)
{
if (v16 > 0 && *(WORD *)pGetItemAtt(lpItem->ItemID, 32))
lpItem->Defense += 12 * Exdata->Defense / *(WORD *)pGetItemAtt(lpItem->ItemID, 32) + *(WORD *)pGetItemAtt(lpItem->ItemID, 32) / 5 + 4;
if (v22)
lpItem->Defense += 3 * lpItem->Defense / v17 + v17 / 30 + 2;
if ((lpItem->ItemID < 6147 || lpItem->ItemID > 6150) && lpItem->ItemID != 6186)
{
if (lpItem->ItemID != 6686 && lpItem->ItemID != 6193)
{
if ((lpItem->ItemID < 6180 || lpItem->ItemID > 6184)
&& lpItem->ItemID != 6187
&& lpItem->ItemID != 6194)
{
if (v24 <= 9)
v7 = (Option >> 3) & 0xF;
else
v7 = 9;
lpItem->Defense += 3 * v7;
}
else
{
if (v24 <= 9)
v8 = (Option >> 3) & 0xF;
else
v8 = 9;
lpItem->Defense += 4 * v8;
}
}
else
{
if (v24 <= 9)
v9 = (Option >> 3) & 0xF;
else
v9 = 9;
lpItem->Defense += 2 * v9;
}
}
else
{
if (v24 <= 9)
v10 = (Option >> 3) & 0xF;
else
v10 = 9;
lpItem->Defense += 2 * v10;
}
if ((lpItem->ItemID < 6180 || lpItem->ItemID > 6184)
&& lpItem->ItemID != 6187
&& lpItem->ItemID != 6194)
{
switch (v24)
{
case 15:
lpItem->Defense += 9;
case 14:
lpItem->Defense += 8;
case 13:
lpItem->Defense += 7;
case 12:
lpItem->Defense += 6;
case 11:
lpItem->Defense += 5;
case 10:
lpItem->Defense += 4;
break;
default:
break;
}
}
else
{
switch (v24)
{
case 15:
lpItem->Defense += 10;
case 14:
lpItem->Defense += 9;
case 13:
lpItem->Defense += 8;
case 12:
lpItem->Defense += 7;
case 11:
lpItem->Defense += 6;
case 10:
lpItem->Defense += 5;
break;
default:
break;
}
}
}
else
{
lpItem->Defense += v24;
if (v22)
lpItem->Defense += (unsigned int)(20 * lpItem->Defense / v17) + 2;
}
}
if (Exdata->MagicDefense > 0)
{
if (v24 <= 9)
v6 = (Option >> 3) & 0xF;
else
v6 = 9;
lpItem->MagicDefense += 3 * v6;
switch (v24)
{
case 15:
lpItem->MagicDefense += 9;
case 14:
lpItem->MagicDefense += 8;
case 13:
lpItem->MagicDefense += 7;
case 12:
lpItem->MagicDefense += 6;
case 11:
lpItem->MagicDefense += 5;
case 10:
lpItem->MagicDefense += 4;
break;
default:
break;
}
}

}
}

ItemInfoEx.h


#define pGetItemAtt(id, offset) (*(DWORD*)0x8128AC0 + 84 * id + offset) //1.04D || 1.04E may be -0x150
#define pSetItemOption ((void(__cdecl*)(ObjectItem * lpItem, BYTE Option, BYTE Special, BYTE Value)) 0x58B910) //1.04D || 1.04E may be -0x150

class cItemInfoEx
{
public:
cItemInfoEx();
~cItemInfoEx();
void Load();
// ----
}; extern cItemInfoEx gItemInfoEx;

Protec.h


CUSTOM_ITEM_INFO_EX m_CustomItemInfo_Ex[MAX_CUSTOM_ITEM_INFO];


Main.cpp


#include "CustomItemInfo.h"
#include "ItemInfoEx.h"


gCustomItemInfo.Load(gProtect.m_MainInfo.m_CustomI temInfo_Ex);
gItemInfoEx.Load();


GetMainInfo

CustomItemInfo.cpp


#include "stdafx.h"
#include "CustomItemInfo.h"
#include "MemScript.h"
#include "InfoLog.h"

CCustomItemInfo gCustomItemInfo;

CCustomItemInfo::CCustomItemInfo() // OK
{
this->Init();
}

CCustomItemInfo::~CCustomItemInfo() // OK
{

}

void CCustomItemInfo::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_ITEM_INFO;n++)
{
this->m_CustomItemInfoEx[n].Index = -1;
}
}

void CCustomItemInfo::Load(char* path)
{
CMemScript* lpMemScript = new CMemScript;

if(lpMemScript == 0)
{
printf(MEM_SCRIPT_ALLOC_ERROR,path);
return;
}

if(lpMemScript->SetBuffer(path) == 0)
{
printf(lpMemScript->GetLastError());
delete lpMemScript;
return;
}

this->Init();

try
{
while(true)
{
if(lpMemScript->GetToken() == TOKEN_END)
{
break;
}

if(strcmp("end",lpMemScript->GetString()) == 0)
{
break;
}

CUSTOM_ITEM_INFO_EX info;

memset(&info,0,sizeof(info));

static int CustomItemIndexCount = 0;

info.Index = CustomItemIndexCount++;

info.ItemType = lpMemScript->GetNumber();

info.ItemIndex = lpMemScript->GetAsNumber();

info.DamageMin = lpMemScript->GetAsNumber();

info.DamageMax = lpMemScript->GetAsNumber();

info.Defense = lpMemScript->GetAsNumber();

info.MagicDefense = lpMemScript->GetAsNumber();

gInfoLog.Output(LOG_KILLERS,"Agregando Item (%d, %d) AtaqueMin: %d AtaqueMax: %d Defense: %d MagicDefense: %d",info.ItemType,info.ItemIndex,info.DamageMin,info. DamageMax,info.Defense,info.MagicDefense);

this->SetInfo(info);
}
}
catch(...)
{
printf(lpMemScript->GetLastError());
}

delete lpMemScript;
}

void CCustomItemInfo::SetInfo(CUSTOM_ITEM_INFO_EX info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_ITEM_INFO)
{
return;
}

this->m_CustomItemInfoEx[info.Index] = info;
}


CustomItemInfo.h


struct CUSTOM_ITEM_INFO_EX
{
int Index;
int ItemType;
int ItemIndex;
int DamageMin;
int DamageMax;
int Defense;
int MagicDefense;
};

class CCustomItemInfo
{
public:
CCustomItemInfo();
virtual ~CCustomItemInfo();
void Init();
void Load(char* path);
void SetInfo(CUSTOM_ITEM_INFO_EX info);
public:
CUSTOM_ITEM_INFO_EX m_CustomItemInfoEx[MAX_CUSTOM_ITEM_INFO];
};

extern CCustomItemInfo gCustomItemInfo;

GetMainInfo.cpp


CUSTOM_ITEM_INFO_EX m_CustomItemInfo_Ex[MAX_CUSTOM_ITEM_INFO];


gCustomItemInfo.Load("CustomItemInfoEx.txt");

memcpy(info.m_CustomItemInfo_Ex, gCustomItemInfo.m_CustomItemInfoEx, sizeof(info.m_CustomItemInfo_Ex));

CustomItemInfoEx.txt



//ItemType ItemIndex DamageMin DamageMax Defense MagicDefense
7 189 * * 273 0
0 42 252 263 * *
end