Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Item Checksum process

RZA-PT | KilroyPT
Joined
Aug 27, 2007
Messages
936
Reaction score
85
Hey All,

Perhaps our more programming technical guys like @SheenBR or @gzuz or @drz can help,

I was wondering how the server calculates its checksum on items.
From the googling I could do i saw that the norm is to invert bits and keep the last bit in the (1) state. but that doesnt seem like it would work for the items here.

Anyone got a clue?
 

drz

Junior Spellweaver
Joined
Jun 7, 2013
Messages
145
Reaction score
71
They use different checksum by xor/xand multiple item values Like stats and Creation Datetime for tryto secure them Up. Just Check the source for finding Details about each checksum
 
Upvote 0
RZA-PT | KilroyPT
Joined
Aug 27, 2007
Messages
936
Reaction score
85
@drz i was looking in the source but couldnt really see where it was doing it, do you know where in the source it is?
 
Upvote 0

drz

Junior Spellweaver
Joined
Jun 7, 2013
Messages
145
Reaction score
71
I#m at work so cannot check the exact location. But, check the function CreateDefItem(...) there should be serveral calls in OnServer.cpp. This function creates a live item from item definition table.
 
Upvote 0
RZA-PT | KilroyPT
Joined
Aug 27, 2007
Messages
936
Reaction score
85
I think this is the checksum process (from sinitem.cpp)

Code:
int ItemTableCheckDelayTime = 0;/////////������ ���̺� ������ ���´� int cITEM::CheckItemTable(){	ItemTableCheckDelayTime++;	if(ItemTableCheckDelayTime < 70*10)return FALSE;	ItemTableCheckDelayTime = 0;		DWORD CheckSumItemDataADD = 0;		for(int j=0 ;  j <INVENTORY_MAX_POS  ; j++)	{		if(sInven[j].Position)		{			CheckSumItemDataADD += sInven[j].Position * j;		}	}	for(int i=0 ;  i < MAX_ITEM  ; i++)	{   		if(sItem[i].CODE)		{				CheckSumItemDataADD += sItem[i].CODE * i;			CheckSumItemDataADD += sItem[i].h * i;			CheckSumItemDataADD += sItem[i].w * i;			CheckSumItemDataADD += sItem[i].Class * i;			CheckSumItemDataADD += sItem[i].ItemPosition * i;		}	}	const DWORD CheckSumItemData = 3977515816;	//������ �߰��� üũ�� ������  //kyle	//DRZ_EDIT	/*	if( CheckSumItemData != CheckSumItemDataADD){              		SendSetHackUser(101); //��ŷ�� �Ϸ����ߴ� ���� ������ ��� TRUE ���� ����  //		SendSetHackUser2(4100,88); //��ŷ�� ������ �Ű��Ѵ� //		CheckSumItemData = CheckSumItemDataADD; //��ġ�� ���� ~~~	}	*/	return TRUE; }

Now i just have to work out how to utilise it haha
 
Upvote 0
Back
Top