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!

Pyke source

Joined
Jun 12, 2005
Messages
744
Reaction score
69
Hello guys,

I’m using pyke public source and looking how to fix some bugs. Ancient items when equip the blue effect in player doesn’t work until you unequip and equip ancient item plus other players don’t see ancient effect at all.
When drop event or golden mobs drop box of kundun, size of it is a little big.
Here's a video,
How can we solve this?
 
Joined
Aug 6, 2005
Messages
550
Reaction score
296
It's an error in the "PreviewCharSet". You need to OR a 0x01 to the byte of index 11, if a full ancient set is equipped.
Similar to this logic:
 
Upvote 0
Joined
Jun 12, 2005
Messages
744
Reaction score
69
It's an error in the "PreviewCharSet". You need to OR a 0x01 to the byte of index 11, if a full ancient set is equipped.
Similar to this logic:

I though so but i couldnt find where to edit. I looked in client source but no luck.



Any one willing to help solve this?
 
Upvote 0
Joined
Jun 12, 2005
Messages
744
Reaction score
69
In GameServer source/itemmanager.cpp i couldn't find something.
Only this

Code:
void CItemManager::UpdateInventoryViewport(int aIndex,int slot) // OK
{
	if(INVENTORY_WEAR_RANGE(slot) == 0)
	{
		return;
	}

	if(slot == 10 || slot == 11)
	{
		if(gSkillManager.SkillChangeUse(aIndex) != 0)
		{
			gObjViewportListProtocolCreate(&gObj[aIndex]);
			gObjectManager.CharacterUpdateMapEffect(&gObj[aIndex]);
		}
	}

	gObjectManager.CharacterMakePreviewCharSet(aIndex);

	this->GCItemChangeSend(aIndex,slot);
}

and definition in ObjectManager

Code:
void CObjectManager::CharacterMakePreviewCharSet(int aIndex) // OK
{
	LPOBJ lpObj = &gObj[aIndex];

	memset(lpObj->CharSet,0,sizeof(lpObj->CharSet));
	//------ cosas de pet
	memset(lpObj->PetCharSet, 0, sizeof(lpObj->PetCharSet));
	//-------------------

	lpObj->CharSet[0] = (lpObj->ChangeUp*16);
	lpObj->CharSet[0] -= (lpObj->CharSet[0]/32);
	lpObj->CharSet[0] += (lpObj->Class*32);

	lpObj->CharSet[0] = gObjFixClassPacket(lpObj->DBClass);//Mc
    lpObj->CharSet[0] |= CS_SET_CHANGEUP(lpObj->ChangeUp);//MC

	if(lpObj->ActionNumber == ACTION_SIT1)
	{
		lpObj->CharSet[0] |= 2;
	}
	
	if(lpObj->ActionNumber == ACTION_POSE1)
	{
		lpObj->CharSet[0] |= 3;
	}

	WORD TempInventory[INVENTORY_WEAR_SIZE];

	for(int n=0;n < INVENTORY_WEAR_SIZE;n++)
	{
		if(n == 0 || n == 1)
		{
			if(lpObj->Inventory[n].IsItem() == 0)
			{
				TempInventory[n] = 0xFFFF;
			}
			else
			{
				TempInventory[n] = lpObj->Inventory[n].m_Index;
			}
		}
		else
		{
			if(lpObj->Inventory[n].IsItem() == 0)
			{
				TempInventory[n] = 0x1FF;
			}
			else
			{
				TempInventory[n] = lpObj->Inventory[n].m_Index%MAX_ITEM_TYPE;
			}
		}
	}

	lpObj->CharSet[1] = TempInventory[0]%256;
	lpObj->CharSet[12] |= (TempInventory[0]/16) & 0xF0;

	lpObj->CharSet[2] = TempInventory[1]%256;
	lpObj->CharSet[13] |= (TempInventory[1]/16) & 0xF0;

	lpObj->CharSet[3] |= (TempInventory[2] & 0x0F) << 4;
	lpObj->CharSet[9] |= (TempInventory[2] & 0x10) << 3;
	lpObj->CharSet[13] |= (TempInventory[2] & 0x1E0) >> 5;

	lpObj->CharSet[3] |= (TempInventory[3] & 0x0F);
	lpObj->CharSet[9] |= (TempInventory[3] & 0x10) << 2;
	lpObj->CharSet[14] |= (TempInventory[3] & 0x1E0) >> 1;

	lpObj->CharSet[4] |= (TempInventory[4] & 0x0F) << 4;
	lpObj->CharSet[9] |= (TempInventory[4] & 0x10) << 1;
	lpObj->CharSet[14] |= (TempInventory[4] & 0x1E0) >> 5;

	lpObj->CharSet[4] |= (TempInventory[5] & 0x0F);
	lpObj->CharSet[9] |= (TempInventory[5] & 0x10);
	lpObj->CharSet[15] |= (TempInventory[5] & 0x1E0) >> 1;

	lpObj->CharSet[5] |= (TempInventory[6] & 0x0F) << 4;
	lpObj->CharSet[9] |= (TempInventory[6] & 0x10) >> 1;
	lpObj->CharSet[15] |= (TempInventory[6] & 0x1E0) >> 5;

	int level = 0;

	BYTE table[7] = {1,0,6,5,4,3,2};

	for(int n=0;n < 7;n++)
	{
		if(TempInventory[n] != 0x1FF && TempInventory[n] != 0xFFFF)
		{
			level |= ((lpObj->Inventory[n].m_Level-1)/2) << (n*3);

			lpObj->CharSet[10] |= ((lpObj->Inventory[n].m_NewOption & 0x3F)?2:0) << table[n];
			lpObj->CharSet[11] |= ((lpObj->Inventory[n].m_SetOption & 0x03)?2:0) << table[n];
		}
	}

	this->CharacterCalcAttribute(aIndex);

	if(lpObj->IsFullSetItem != 0)
	{
		lpObj->CharSet[11] |= 1;
	}

	lpObj->CharSet[6] = level >> 16;
	lpObj->CharSet[7] = level >> 8;
	lpObj->CharSet[8] = level;

	#if(GAMESERVER_UPDATE>=601)

	if(TempInventory[7] >= 0 && TempInventory[7] <= 2)
	{
		lpObj->CharSet[5] |= 4;
		lpObj->CharSet[9] |= TempInventory[7]+1;
	}
	else if(TempInventory[7] >= 3 && TempInventory[7] <= 6)
	{
		lpObj->CharSet[5] |= 8;
		lpObj->CharSet[9] |= TempInventory[7]-2;
	}
	else if(TempInventory[7] == 30)
	{
		lpObj->CharSet[5] |= 8;
		lpObj->CharSet[9] |= 5;
	}
	else if(TempInventory[7] >= 36 && TempInventory[7] <= 40)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[9] |= TempInventory[7]-35;
	}
	else if(TempInventory[7] == 41)
	{
		lpObj->CharSet[5] |= 4;
		lpObj->CharSet[9] |= 4;
	}
	else if(TempInventory[7] == 42)
	{
		lpObj->CharSet[5] |= 8;
		lpObj->CharSet[9] |= 6;
	}
	else if(TempInventory[7] == 43)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[9] |= 6;
	}
	else if(TempInventory[7] == 49)
	{
		lpObj->CharSet[5] |= 8;
		lpObj->CharSet[9] |= 7;
	}
	else if(TempInventory[7] == 50)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[9] |= 7;
	}
	else if(TempInventory[7] >= 130 && TempInventory[7] <= 135)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[17] |= (TempInventory[7]-129) << 5;
	}
	else if(TempInventory[7] >= 262 && TempInventory[7] <= 265)
	{
		lpObj->CharSet[5] |= 8;
		lpObj->CharSet[16] |= (TempInventory[7]-261) << 2;
	}
	else if(TempInventory[7] == 266)
	{
		lpObj->CharSet[5] |= 4;
		lpObj->CharSet[9] |= 5;
	}
	else if(TempInventory[7] == 267)
	{
		lpObj->CharSet[5] |= 4;
		lpObj->CharSet[9] |= 6;
	}
	else if(gCustomWing.CheckCustomWingByItem(GET_ITEM(12,TempInventory[7])) != 0)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[17] |= (gCustomWing.GetCustomWingIndex(GET_ITEM(12,TempInventory[7]))+1) << 1;
	}

	#else

	if(TempInventory[7] == 0x1FF)
	{
		lpObj->CharSet[5] |= 12;
	}
	else if(TempInventory[7] >= 0 && TempInventory[7] <= 2)
	{
		lpObj->CharSet[5] |= TempInventory[7] << 2;
	}
	else if(TempInventory[7] >= 3 && TempInventory[7] <= 6)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[9] |= TempInventory[7]-2;
	}
	else if(TempInventory[7] == 30)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[9] |= 5;
	}
	else if(TempInventory[7] >= 36 && TempInventory[7] <= 40)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[16] |= (TempInventory[7]-35) << 2;
	}
	else if(TempInventory[7] == 41)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[9] |= 6;
	}
	else if(TempInventory[7] == 42)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[16] |= 28;
	}
	else if(TempInventory[7] == 43)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[16] |= 24;
	}
	else if(TempInventory[7] >= 130 && TempInventory[7] <= 135)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[17] |= (TempInventory[7]-129) << 5;
	}
	else if(gCustomWing.CheckCustomWingByItem(GET_ITEM(12,TempInventory[7])) != 0)
	{
		lpObj->CharSet[5] |= 12;
		lpObj->CharSet[17] |= (gCustomWing.GetCustomWingIndex(GET_ITEM(12,TempInventory[7]))+1) << 1;
	}

	#endif

	if(TempInventory[8] == 0x1FF)
	{
		lpObj->CharSet[5] |= 3;
	}
	else if(TempInventory[8] >= 0 && TempInventory[8] <= 2)
	{
		lpObj->CharSet[5] |= TempInventory[8];
	}
	else if(TempInventory[8] == 3)
	{
		lpObj->CharSet[5] |= 3;
		lpObj->CharSet[10] |= 1;
	}
	else if(TempInventory[8] == 4)
	{
		lpObj->CharSet[5] |= 3;
		lpObj->CharSet[12] |= 1;
	}
	else if(TempInventory[8] == 37)
	{
		lpObj->CharSet[5] |= 3;
		lpObj->CharSet[10] &= 0xFE;
		lpObj->CharSet[12] &= 0xFE;
		lpObj->CharSet[12] |= 4;

		if((lpObj->Inventory[8].m_NewOption & 1) != 0)
		{
			lpObj->CharSet[16] |= 1;
		}
		else if((lpObj->Inventory[8].m_NewOption & 2) != 0)
		{
			lpObj->CharSet[16] |= 2;
		}
		else if((lpObj->Inventory[8].m_NewOption & 4) != 0)
		{
			lpObj->CharSet[17] |= 1;
		}
		//--- cosas de fenrrir
		else if((lpObj->Inventory[8].m_NewOption & 8) != 0)
		{
			lpObj->CharSet[16] |= 250 << 1;
		}
		else if((lpObj->Inventory[8].m_NewOption & 16) != 0)
		{
			lpObj->CharSet[16] |= 251 << 1;
		}
		else if((lpObj->Inventory[8].m_NewOption & 32) != 0)
		{
			lpObj->CharSet[16] |= 252 << 1;
		}
	}
	else if(TempInventory[8] == 64 || TempInventory[8] == 65 || TempInventory[8] == 67)
	{
		lpObj->CharSet[16] |= (TempInventory[8]-63) << 5;
	}
	else if(TempInventory[8] == 80)
	{
		lpObj->CharSet[16] |= 0xE0;
	}
	else if(TempInventory[8] == 106)
	{
		lpObj->CharSet[16] |= 0xA0;
	}
	else if(TempInventory[8] == 123)
	{
		lpObj->CharSet[16] |= 0x60;
	}
	//---------------------- cosas de pet
	else if (TempInventory[8] >= 147 && TempInventory[8] <= 257)
	{
		lpObj->PetCharSet[0] |= (TempInventory[8] - 146) << 1;
	}
	else if (TempInventory[8] >= 258 && TempInventory[8] <= 350)
	{
		lpObj->PetCharSet[1] |= (TempInventory[8] - 257) << 1;
	}
	else if (TempInventory[8] >= 351 && TempInventory[8] <= 450)
	{
		lpObj->PetCharSet[2] |= (TempInventory[8] - 350) << 1;
	}
	
	else if (TempInventory[8] >= 451 && TempInventory[8] <= 511)
	{
		lpObj->PetCharSet[3] |= (TempInventory[8] - 450) << 1;
	}
	//-----------------------------------------
	else if (TempInventory[8] >= 451 && TempInventory[8] <= 511) // xemu agregado
	{
		lpObj->PetCharSet[3] |= (TempInventory[8] - 450) << 1;
	}
	//-----------------------
}
 
Upvote 0
RaGEZONER Since 2004
Loyal Member
Joined
Jul 18, 2004
Messages
1,130
Reaction score
380
I just checked Pyke U30 files untouched, I didn't do anything with the source code yet just to see the problem of Ancient item as you reported. But it seem working fine here in my side without touching anything. Maybe you touch something that affects your ancient items on the source?

Proof:
or30n - Pyke source - RaGEZONE Forums

or30n - Pyke source - RaGEZONE Forums

or30n - Pyke source - RaGEZONE Forums

or30n - Pyke source - RaGEZONE Forums

or30n - Pyke source - RaGEZONE Forums

or30n - Pyke source - RaGEZONE Forums
 
Upvote 0
Joined
Jun 12, 2005
Messages
744
Reaction score
69









Read this my friend, https://forum.ragezone.com/f197/files-s6-upgrade-pyke-up30-1208581/

If i equip set items full the effect of ancient work but if i move doesnt work or re loggin.
 
Last edited:
Upvote 0
Joined
Aug 6, 2005
Messages
550
Reaction score
296
The client sometimes compensates stuff for the own player, so always check this on the second mu client.
The posted source looks correct, so I would assume it's something wrong with the configuration files, so that the server is not recognizing your equipped items as a complete ancient set.
 
Upvote 0
Joined
Jun 12, 2005
Messages
744
Reaction score
69
Second client?
Basically i didn't change anything! Thats the crazy one. I Just compile and run.
I cant understand.



Plus my configs for rave set look good to me.

Server: SetItemOption.txt
Code:
//Index   Name                                 Option1   Value1   Option2   Value2   Option3   Value3   Option4   Value4   Option5   Value5   Option6   Value6   Option7   Value7   Option8   Value8   Option9   Value9   Option10   Value10   Option11   Value11   Option12   Value12   FullOption1   FullValue1   FullOption2   FullValue2   FullOption3   FullValue3   FullOption4   FullValue4   FullOption5   FullValue5
1	  "Warrior"	                       0	 10	  * 	    * 	     19	       10	* 	  * 	   13	     20	      * 	* 	 14	   5	    * 	      *        10	 20	  * 	     * 	       1	  10	    * 	       * 	 15	       5	    17	          5	       0	     25	          * 	        * 	     * 	           *

Client ItemSetOption.bmd
Code:
1	"Warrior's"	0	10	-1	-1	19	10	-1	-1	13	20	-1	-1	14	5	-1	-1	10	20	-1	-1	1	10	-1	-1	-1	-1	-1	-1	15	5	17	5	0	25	-1	-1	-1	-1	0	0	0	0	0	0	0

I create warrior's set with mu editor and

When i equip all set items i notice:
Code:
Equip helm: +5 stamina
Equip armor: +10 strength +5 stamina
Equip pants: +5 stamina
Equip boots: +5 stamina
Equip gloves: +5 stamina
Equip ring: +5 agility

And some photos




Next i try rave's set

Server: SetItemOption.txt
Code:
10	  "Rave"		               19	 20	  * 	    * 	     20	       10	* 	  * 	   * 	     * 	      * 	* 	 * 	   * 	    * 	      *        * 	 * 	  * 	     * 	       * 	  * 	    * 	       * 	 23	       30	    21	          5	       * 	     * 	          * 	        * 	     * 	           *

Client ItemSetOption.bmd
Code:
10	"Rave's"	19	20	-1	-1	20	10	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	-1	23	30	21	5	-1	-1	-1	-1	-1	-1	0	0	0	0	0	0	0

I create rave's set with mu editor and

When i equip all set items i notice:

Code:
Equip helm: +5 stamina
Equip armor: +5 stamina
Equip pants: +5 stamina +5 energy

And some photos





Final results? After equipping full warrior's set the classic buff of the celestial circle rotating under the player has not been activated cause some options missing?
After equipping full rave's set the classic buff of the celestial circle rotating under the player has been activated BUT if you exit game and log in again or move the buff is missing until you open Character panel (C). If you move you have to open again Character Panel (C) to work. Even if i equip an item, not ancient just a normal item then the effect is activated.




I forgot to add morning star in warrior's set.
Now, warrior's set is complete. The classic buff of the celestial circle rotating under the player doesnt disable after move or re login.
But rave's set doesn't work.
 
Upvote 0
Back
Top