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!

[Development] Source Mu Main 1.03.35 [Season 5.1 - Season 5.2]

Joined
Jun 13, 2006
Messages
40
Reaction score
2
Good, it's time to contrubute with something... this is my upgraded version of: 1.00.98 Original Webzen GameServer Sources to: 1.01.03, it's possible that this poop is not complete and etc, but at least is possible compile and have attached a detailed ChangeLog, maybe can be useful (to some person), less work or something how this...

GameServer 1.01.03 Rebuided-Partially Src:



PS: ChangeLog it's on source but anyways:





PS 2: Since I only add all features that I know of Season 6.1/6.2/6.3 but is unfinished... maybe is lacking Master Skill Tree Passive Buffs and etc shits.

Can you provide the 6.3 season corresponding to your source code and the 6.3 client patch you can log in? Thank you for sharing
 
Initiate Mage
Joined
Jul 28, 2021
Messages
30
Reaction score
4
Hi there.
I'm develop own client for linux platform.
I successed remove gfx (slaceform), in game shop, shop ui and more.. i'm look good work on clean opengl without winapi.
 
Joined
Jul 31, 2012
Messages
490
Reaction score
92
Hi, has anyone gotten a dexterity problem?

I tried to solve the problem and found a solution in the AttackSpeed ​​and MagicSpeed ​​settings.

PHP:
void SetAttackSpeed()
{
	float AttackSpeed1 = (CharacterAttribute->AttackSpeed/15) * 0.004f;	// ±â»ç, ŔϹݰř°Ý
	if (GetBaseClass(CharacterAttribute->Class) == CLASS_KNIGHT)
	{
		AttackSpeed1 = (CharacterAttribute->AttackSpeed/15) * 0.008f;
	}
	float MagicSpeed1  = (CharacterAttribute->MagicSpeed/15) * 0.004f;	// żäÁ¤
	float MagicSpeed2  = (CharacterAttribute->MagicSpeed/15) * 0.002f;	// ąý»ç
	float RageAttackSpeed = (CharacterAttribute->AttackSpeed/15) * 0.01f;
	if (GetBaseClass(CharacterAttribute->Class) == CLASS_WIZARD)
	{
		MagicSpeed2  = (CharacterAttribute->MagicSpeed/15) * 0.002f;	// ąý»ç
	}
	else if (GetBaseClass(CharacterAttribute->Class) == CLASS_SUMMONER)
	{
		MagicSpeed2  = (CharacterAttribute->MagicSpeed/15) * 0.02f;	// ąý»ç
	}

#ifndef _VS2008PORTING			// #ifndef
	int i;
#endif // _VS2008PORTING
	// ÁÖ¸Ô°ř°
 	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_FIST].PlaySpeed = 0.6f + AttackSpeed1;
	// ŔϹݰř°Ý
#ifdef _VS2008PORTING
	for(int i=PLAYER_ATTACK_SWORD_RIGHT1; i<=PLAYER_ATTACK_RIDE_CROSSBOW; i++)
#else // _VS2008PORTING
	for(i=PLAYER_ATTACK_SWORD_RIGHT1; i<=PLAYER_ATTACK_RIDE_CROSSBOW; i++)
#endif // _VS2008PORTING
	{
   		Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.25f + AttackSpeed1;
	}
	//˝şĹł°ř°Ý
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD1].PlaySpeed = 0.30f + AttackSpeed1; // ł»·ÁÂď±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD2].PlaySpeed = 0.30f + AttackSpeed1; // Â±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD3].PlaySpeed = 0.27f + AttackSpeed1; // żĂ·Áġ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD4].PlaySpeed = 0.30f + AttackSpeed1; // µą·Áġ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD5].PlaySpeed = 0.24f + AttackSpeed1; // şŁ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_WHEEL ].PlaySpeed = 0.24f + AttackSpeed1; // ȸżŔ¸®şŁ±â
#ifdef YDG_ADD_SKILL_RIDING_ANIMATIONS
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_WHEEL_UNI   ].PlaySpeed = 0.24f + AttackSpeed1;// ȸżŔ¸®şŁ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_WHEEL_DINO  ].PlaySpeed = 0.24f + AttackSpeed1;// ȸżŔ¸®şŁ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_WHEEL_FENRIR].PlaySpeed = 0.24f + AttackSpeed1;// ȸżŔ¸®şŁ±â
#endif	// YDG_ADD_SKILL_RIDING_ANIMATIONS

	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_ONETOONE].PlaySpeed = 0.25f + AttackSpeed1;	// şí·Îżě
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SPEAR].PlaySpeed = 0.30f + AttackSpeed1;	// âÂ±â

	// Ĺ» °Í Ĺş »óĹÂ
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_RIDER].PlaySpeed      = 0.3f + AttackSpeed1;	// ˝şĹĎ, ˝şĹĎÁ¦°Ĺ, Ĺő¸í, Ĺő¸íÇŘÁ¦, ¸¶łŞÁő°ˇ, ş¸Á¶¸¶ąý ŔĎ˝ĂÁ¦°Ĺ, ·ąŔ̵彸	
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_RIDER_FLY].PlaySpeed  = 0.3f + AttackSpeed1;	// ˝şĹĎ, ˝şĹĎÁ¦°Ĺ, Ĺő¸í, Ĺő¸íÇŘÁ¦, ¸¶łŞÁő°ˇ, ş¸Á¶¸¶ąý ŔĎ˝ĂÁ¦°Ĺ, ·ąŔ̵彸

	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_TWO_HAND_SWORD_TWO].PlaySpeed = 0.25f + AttackSpeed1;	// ĆÄżö˝˝·ˇ˝¬

	//Č°°ř°Ý
#ifdef _VS2008PORTING
	for(int i=PLAYER_ATTACK_BOW;i<=PLAYER_ATTACK_FLY_CROSSBOW;i++)
		Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
	for(int i=PLAYER_ATTACK_RIDE_BOW;i<=PLAYER_ATTACK_RIDE_CROSSBOW;i++)
		Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
#else // _VS2008PORTING
	for(i=PLAYER_ATTACK_BOW;i<=PLAYER_ATTACK_FLY_CROSSBOW;i++)
	    Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
	for(i=PLAYER_ATTACK_RIDE_BOW;i<=PLAYER_ATTACK_RIDE_CROSSBOW;i++)
	    Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
#endif // _VS2008PORTING
	//żäÁ¤¸¶ąý
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_ELF1].PlaySpeed = 0.25f + MagicSpeed1;

	//ŔϹݸ¶ąý
#ifdef _VS2008PORTING
	for(int i=PLAYER_SKILL_HAND1; i<=PLAYER_SKILL_WEAPON2; i++)
#else // _VS2008PORTING
	for(i=PLAYER_SKILL_HAND1; i<=PLAYER_SKILL_WEAPON2; i++)
#endif // _VS2008PORTING
	    Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.29f + MagicSpeed2;
	//±âŸ¸¶ąý
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_TELEPORT].PlaySpeed = 0.30f + MagicSpeed2; // Ľř°ŁŔ̵ż
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_FLASH   ].PlaySpeed = 0.40f + MagicSpeed2; // ľĆÄíľĆÇĂ·ˇ˝¬
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_INFERNO ].PlaySpeed = 0.60f + MagicSpeed2; // ŔÎĆ丣łë
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_HELL    ].PlaySpeed = 0.50f + MagicSpeed2; // ÇďĆÄŔĚľî
	Models[MODEL_PLAYER].Actions[PLAYER_RIDE_SKILL    ].PlaySpeed = 0.30f + MagicSpeed2; // Ĺ» °Í Ĺş »óĹÂżˇĽ­ ľ˛´Â ˝şĹł

	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_HELL_BEGIN].PlaySpeed			= 0.50f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_STRIKE].PlaySpeed            = 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_STRIKE].PlaySpeed       = 0.2f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_HORSE_SWORD].PlaySpeed  = 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_ATTACK_FLASH].PlaySpeed = 0.40f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_ATTACK_MAGIC].PlaySpeed = 0.3f + MagicSpeed2;

	//^ Ć渱 °řĽÓ °ü·Ă(Áßżä : °ř°Ý ĽÓµµżÍ °ü·Ă)
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK].PlaySpeed				= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_DARKLORD_STRIKE].PlaySpeed = 0.2f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_DARKLORD_SWORD].PlaySpeed	= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_DARKLORD_FLASH].PlaySpeed	= 0.40f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_TWO_SWORD].PlaySpeed		= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_MAGIC].PlaySpeed			= 0.37f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_CROSSBOW].PlaySpeed		= 0.30f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_SPEAR].PlaySpeed			= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_ONE_SWORD].PlaySpeed		= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_BOW].PlaySpeed			= 0.30f + AttackSpeed1;
	
	// Č°·Î ÇĎ´Ă·Î ÇâÇĎ´Â °ř°Ý
#ifdef _VS2008PORTING
	for ( int i=PLAYER_ATTACK_BOW_UP; i<=PLAYER_ATTACK_RIDE_CROSSBOW_UP; ++i )
#else // _VS2008PORTING
	for ( i=PLAYER_ATTACK_BOW_UP; i<=PLAYER_ATTACK_RIDE_CROSSBOW_UP; ++i )
#endif // _VS2008PORTING
	{
	    Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
	}

	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_ONE_FLASH].PlaySpeed = 0.4f + AttackSpeed1;	// ±â¸¶°Ë ŔĎĽ¶°ř°Ý
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RUSH].PlaySpeed		= 0.3f + AttackSpeed1;			// ±â»ç µą°Ý ˝şĹł.
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_DEATH_CANNON].PlaySpeed = 0.2f + AttackSpeed1;
	
	// ˝˝¸ł
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SLEEP].PlaySpeed			= 0.3f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SLEEP_UNI].PlaySpeed		= 0.3f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SLEEP_DINO].PlaySpeed		= 0.3f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SLEEP_FENRIR].PlaySpeed	= 0.3f + MagicSpeed2;

	// ¶óŔĚĆ®´× żŔşę
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_ORB].PlaySpeed			= 0.4f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_ORB_UNI].PlaySpeed		= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_ORB_DINO].PlaySpeed		= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_ORB_FENRIR].PlaySpeed	= 0.25f + MagicSpeed2;

	// ĂĽŔζóŔĚĆ®´×
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_CHAIN_LIGHTNING].PlaySpeed		= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_CHAIN_LIGHTNING_UNI].PlaySpeed	= 0.15f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_CHAIN_LIGHTNING_DINO].PlaySpeed	= 0.15f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_CHAIN_LIGHTNING_FENRIR].PlaySpeed = 0.15f + MagicSpeed2;

	// µĺ·ąŔζóŔĚÇÁ
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAIN_LIFE].PlaySpeed			= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAIN_LIFE_UNI].PlaySpeed		= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAIN_LIFE_DINO].PlaySpeed	= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAIN_LIFE_FENRIR].PlaySpeed	= 0.25f + MagicSpeed2;

#ifdef YDG_ADD_SKILL_GIGANTIC_STORM
	// ±â°ŁĆ˝˝şĹč
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIGANTICSTORM].PlaySpeed = 0.55f + MagicSpeed1;
	// ÇÁ·ąŔÓ˝şĆ®¶óŔĚĹ©
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_FLAMESTRIKE].PlaySpeed = 0.69f + MagicSpeed2;
#endif // YDG_ADD_SKILL_GIGANTIC_STORM
#ifdef YDG_ADD_SKILL_RIDING_ANIMATIONS
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIGANTICSTORM_UNI].PlaySpeed		= 0.55f + MagicSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIGANTICSTORM_DINO].PlaySpeed		= 0.55f + MagicSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIGANTICSTORM_FENRIR].PlaySpeed	= 0.55f + MagicSpeed1;
#endif	// YDG_ADD_SKILL_RIDING_ANIMATIONS
#ifdef YDG_ADD_SKILL_LIGHTNING_SHOCK
	// ¶óŔĚĆ®´×ĽîĹ©
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_SHOCK].PlaySpeed = 0.35f + MagicSpeed2;
#endif	// YDG_ADD_SKILL_LIGHTNING_SHOCK

	// ĽĹ¸Ő
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SUMMON].PlaySpeed			= 0.25f;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SUMMON_UNI].PlaySpeed		= 0.25f;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SUMMON_DINO].PlaySpeed	= 0.25f;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SUMMON_FENRIR].PlaySpeed	= 0.25f;
	
#ifdef CSK_ADD_SKILL_BLOWOFDESTRUCTION
	// Ćı«ŔÇ ŔĎ°Ý
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_BLOW_OF_DESTRUCTION].PlaySpeed = 0.3f;
#endif // CSK_ADD_SKILL_BLOWOFDESTRUCTION

#ifdef PJH_SEASON4_SPRITE_NEW_SKILL_RECOVER
	// ȸşą
	Models[MODEL_PLAYER].Actions[PLAYER_RECOVER_SKILL].PlaySpeed = 0.33f;
#endif //PJH_SEASON4_SPRITE_NEW_SKILL_RECOVER
#ifdef KJH_ADD_SKILL_SWELL_OF_MAGICPOWER		// ¸¶·ÂÁő´ë
	// ¸¶·ÂÁő´ë
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SWELL_OF_MP].PlaySpeed = 0.2f;		
#endif // KJH_ADD_SKILL_SWELL_OF_MAGICPOWER

	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_FURY_STRIKE].PlaySpeed = 0.38f;		// şĐłëŔÇŔĎ°Ý
    Models[MODEL_PLAYER].Actions[PLAYER_SKILL_VITALITY].PlaySpeed = 0.34f;					// ˝şŔŁ¶óŔĚÇÁ
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_HELL_START].PlaySpeed = 0.30f;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_TELEPORT].PlaySpeed = 0.28f;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_TELEPORT].PlaySpeed = 0.3f;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_DARKHORSE].PlaySpeed = 0.3f;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_DARKLORD_TELEPORT].PlaySpeed = 0.3f;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_REMOVAL].PlaySpeed	= 0.28f;

#ifdef WORLDCUP_ADD
	Models[MODEL_PLAYER].Actions[PLAYER_KOREA_HANDCLAP].PlaySpeed = 0.3f;
	Models[MODEL_PLAYER].Actions[PLAYER_POINT_DANCE].PlaySpeed = 0.4f;
#endif // WORLDCUP_ADD
#ifdef PBG_ADD_NEWCHAR_MONK_SKILL

	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_THRUST].PlaySpeed = 0.4f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_STAMP].PlaySpeed = 0.4f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIANTSWING].PlaySpeed = 0.4f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DARKSIDE_READY].PlaySpeed = 0.3f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DARKSIDE_ATTACK].PlaySpeed = 0.3f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAGONKICK].PlaySpeed = 0.4f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAGONLORE].PlaySpeed = 0.3f+RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_ATT_UP_OURFORCES].PlaySpeed = 0.35f;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_HP_UP_OURFORCES].PlaySpeed = 0.35f;
	Models[MODEL_PLAYER].Actions[PLAYER_RAGE_FENRIR_ATTACK_RIGHT].PlaySpeed	= 0.25f + RageAttackSpeed;
#endif //PBG_ADD_NEWCHAR_MONK_SKILL
}

This setting reduces the attack speed without compromising the animation speed.
The result is a debugged attack speed for all spells, leaving the original Player.bmd.

But beware! Players are not used to this speed.

It beautifully optimizes PvP and the speed of gaining experience.

If you have someone a better repair proposal, please. I'm listening.

To provide you with a complete fix for this problem.

ZzzCharacter.cpp
PHP:
void SetAttackSpeed()
{
	float AttackSpeed1 = (CharacterAttribute->AttackSpeed) * 0.004f;	// ±â»ç, ŔϹݰř°Ý
	if (GetBaseClass(CharacterAttribute->Class) == CLASS_KNIGHT)
	{
		AttackSpeed1 = (CharacterAttribute->AttackSpeed) * 0.008f;
	}
	float MagicSpeed1  = (CharacterAttribute->MagicSpeed) * 0.004f;	// żäÁ¤
	float MagicSpeed2  = (CharacterAttribute->MagicSpeed) * 0.002f;	// ąý»ç
	float RageAttackSpeed = (CharacterAttribute->AttackSpeed) * 0.01f;
	if (GetBaseClass(CharacterAttribute->Class) == CLASS_WIZARD)
	{
		MagicSpeed2  = (CharacterAttribute->MagicSpeed) * 0.002f;	// ąý»ç
	}
	else if (GetBaseClass(CharacterAttribute->Class) == CLASS_SUMMONER)
	{
		MagicSpeed2  = (CharacterAttribute->MagicSpeed) * 0.02f;	// ąý»ç
	}

	// -> Fix speed attack ELF & MG
	if (GetBaseClass(CharacterAttribute->Class) == CLASS_ELF)
	{
		AttackSpeed1 = (CharacterAttribute->AttackSpeed) * 0.008f;
	}

	if (GetBaseClass(CharacterAttribute->Class) == CLASS_DARK)
	{
		MagicSpeed1  = (CharacterAttribute->MagicSpeed) * 0.006f;	// żäÁ¤
	}
	//----------------------------------------------------------------------------------------
#ifndef _VS2008PORTING			// #ifndef
	int i;
#endif // _VS2008PORTING
	// ÁÖ¸Ô°ř°
 	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_FIST].PlaySpeed = 0.6f + AttackSpeed1;
	// ŔϹݰř°Ý
#ifdef _VS2008PORTING
	for(int i=PLAYER_ATTACK_SWORD_RIGHT1; i<=PLAYER_ATTACK_RIDE_CROSSBOW; i++)
#else // _VS2008PORTING
	for(i=PLAYER_ATTACK_SWORD_RIGHT1; i<=PLAYER_ATTACK_RIDE_CROSSBOW; i++)
#endif // _VS2008PORTING
	{
   		Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.25f + AttackSpeed1;
	}
	//˝şĹł°ř°Ý
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD1].PlaySpeed = 0.30f + AttackSpeed1; // ł»·ÁÂď±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD2].PlaySpeed = 0.30f + AttackSpeed1; // Â±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD3].PlaySpeed = 0.27f + AttackSpeed1; // żĂ·Áġ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD4].PlaySpeed = 0.30f + AttackSpeed1; // µą·Áġ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SWORD5].PlaySpeed = 0.24f + AttackSpeed1; // şŁ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_WHEEL ].PlaySpeed = 0.24f + AttackSpeed1; // ȸżŔ¸®şŁ±â
#ifdef YDG_ADD_SKILL_RIDING_ANIMATIONS
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_WHEEL_UNI   ].PlaySpeed = 0.24f + AttackSpeed1;// ȸżŔ¸®şŁ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_WHEEL_DINO  ].PlaySpeed = 0.24f + AttackSpeed1;// ȸżŔ¸®şŁ±â
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_WHEEL_FENRIR].PlaySpeed = 0.24f + AttackSpeed1;// ȸżŔ¸®şŁ±â
#endif	// YDG_ADD_SKILL_RIDING_ANIMATIONS

	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_ONETOONE].PlaySpeed = 0.25f + AttackSpeed1;	// şí·Îżě
    Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_SPEAR].PlaySpeed = 0.30f + AttackSpeed1;	// âÂ±â

	// Ĺ» °Í Ĺş »óĹÂ
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_RIDER].PlaySpeed      = 0.3f + AttackSpeed1;	// ˝şĹĎ, ˝şĹĎÁ¦°Ĺ, Ĺő¸í, Ĺő¸íÇŘÁ¦, ¸¶łŞÁő°ˇ, ş¸Á¶¸¶ąý ŔĎ˝ĂÁ¦°Ĺ, ·ąŔ̵彸	
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_RIDER_FLY].PlaySpeed  = 0.3f + AttackSpeed1;	// ˝şĹĎ, ˝şĹĎÁ¦°Ĺ, Ĺő¸í, Ĺő¸íÇŘÁ¦, ¸¶łŞÁő°ˇ, ş¸Á¶¸¶ąý ŔĎ˝ĂÁ¦°Ĺ, ·ąŔ̵彸

	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_TWO_HAND_SWORD_TWO].PlaySpeed = 0.25f + AttackSpeed1;	// ĆÄżö˝˝·ˇ˝¬

	//Č°°ř°Ý
#ifdef _VS2008PORTING
	for(int i=PLAYER_ATTACK_BOW;i<=PLAYER_ATTACK_FLY_CROSSBOW;i++)
		Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
	for(int i=PLAYER_ATTACK_RIDE_BOW;i<=PLAYER_ATTACK_RIDE_CROSSBOW;i++)
		Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
#else // _VS2008PORTING
	for(i=PLAYER_ATTACK_BOW;i<=PLAYER_ATTACK_FLY_CROSSBOW;i++)
	    Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
	for(i=PLAYER_ATTACK_RIDE_BOW;i<=PLAYER_ATTACK_RIDE_CROSSBOW;i++)
	    Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
#endif // _VS2008PORTING
	//żäÁ¤¸¶ąý
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_ELF1].PlaySpeed = 0.25f + MagicSpeed1;

	//ŔϹݸ¶ąý
#ifdef _VS2008PORTING
	for(int i=PLAYER_SKILL_HAND1; i<=PLAYER_SKILL_WEAPON2; i++)
#else // _VS2008PORTING
	for(i=PLAYER_SKILL_HAND1; i<=PLAYER_SKILL_WEAPON2; i++)
#endif // _VS2008PORTING
	    Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.29f + MagicSpeed2;
	//±âŸ¸¶ąý
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_TELEPORT].PlaySpeed = 0.30f + MagicSpeed2; // Ľř°ŁŔ̵ż
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_FLASH   ].PlaySpeed = 0.40f + MagicSpeed2; // ľĆÄíľĆÇĂ·ˇ˝¬
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_INFERNO ].PlaySpeed = 0.60f + MagicSpeed2; // ŔÎĆ丣łë
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_HELL    ].PlaySpeed = 0.50f + MagicSpeed2; // ÇďĆÄŔĚľî
	Models[MODEL_PLAYER].Actions[PLAYER_RIDE_SKILL    ].PlaySpeed = 0.30f + MagicSpeed2; // Ĺ» °Í Ĺş »óĹÂżˇĽ­ ľ˛´Â ˝şĹł

	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_HELL_BEGIN].PlaySpeed			= 0.50f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_STRIKE].PlaySpeed            = 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_STRIKE].PlaySpeed       = 0.2f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_HORSE_SWORD].PlaySpeed  = 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_ATTACK_FLASH].PlaySpeed = 0.40f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_ATTACK_MAGIC].PlaySpeed = 0.3f + MagicSpeed2;

	//^ Ć渱 °řĽÓ °ü·Ă(Áßżä : °ř°Ý ĽÓµµżÍ °ü·Ă)
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK].PlaySpeed				= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_DARKLORD_STRIKE].PlaySpeed = 0.2f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_DARKLORD_SWORD].PlaySpeed	= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_DARKLORD_FLASH].PlaySpeed	= 0.40f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_TWO_SWORD].PlaySpeed		= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_MAGIC].PlaySpeed			= 0.37f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_CROSSBOW].PlaySpeed		= 0.30f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_SPEAR].PlaySpeed			= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_ONE_SWORD].PlaySpeed		= 0.25f + AttackSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_BOW].PlaySpeed			= 0.30f + AttackSpeed1;
	
	// Č°·Î ÇĎ´Ă·Î ÇâÇĎ´Â °ř°Ý
#ifdef _VS2008PORTING
	for ( int i=PLAYER_ATTACK_BOW_UP; i<=PLAYER_ATTACK_RIDE_CROSSBOW_UP; ++i )
#else // _VS2008PORTING
	for ( i=PLAYER_ATTACK_BOW_UP; i<=PLAYER_ATTACK_RIDE_CROSSBOW_UP; ++i )
#endif // _VS2008PORTING
	{
	    Models[MODEL_PLAYER].Actions[i].PlaySpeed = 0.30f + AttackSpeed1;
	}

	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_ONE_FLASH].PlaySpeed = 0.4f + AttackSpeed1;	// ±â¸¶°Ë ŔĎĽ¶°ř°Ý
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RUSH].PlaySpeed		= 0.3f + AttackSpeed1;			// ±â»ç µą°Ý ˝şĹł.
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_DEATH_CANNON].PlaySpeed = 0.2f + AttackSpeed1;
	
	// ˝˝¸ł
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SLEEP].PlaySpeed			= 0.3f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SLEEP_UNI].PlaySpeed		= 0.3f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SLEEP_DINO].PlaySpeed		= 0.3f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SLEEP_FENRIR].PlaySpeed	= 0.3f + MagicSpeed2;

	// ¶óŔĚĆ®´× żŔşę
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_ORB].PlaySpeed			= 0.4f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_ORB_UNI].PlaySpeed		= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_ORB_DINO].PlaySpeed		= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_ORB_FENRIR].PlaySpeed	= 0.25f + MagicSpeed2;

	// ĂĽŔζóŔĚĆ®´×
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_CHAIN_LIGHTNING].PlaySpeed		= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_CHAIN_LIGHTNING_UNI].PlaySpeed	= 0.15f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_CHAIN_LIGHTNING_DINO].PlaySpeed	= 0.15f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_CHAIN_LIGHTNING_FENRIR].PlaySpeed = 0.15f + MagicSpeed2;

	// µĺ·ąŔζóŔĚÇÁ
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAIN_LIFE].PlaySpeed			= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAIN_LIFE_UNI].PlaySpeed		= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAIN_LIFE_DINO].PlaySpeed	= 0.25f + MagicSpeed2;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAIN_LIFE_FENRIR].PlaySpeed	= 0.25f + MagicSpeed2;

#ifdef YDG_ADD_SKILL_GIGANTIC_STORM
	// ±â°ŁĆ˝˝şĹč
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIGANTICSTORM].PlaySpeed = 0.55f + MagicSpeed1;
	// ÇÁ·ąŔÓ˝şĆ®¶óŔĚĹ©
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_FLAMESTRIKE].PlaySpeed = 0.69f + MagicSpeed2;
#endif // YDG_ADD_SKILL_GIGANTIC_STORM
#ifdef YDG_ADD_SKILL_RIDING_ANIMATIONS
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIGANTICSTORM_UNI].PlaySpeed		= 0.55f + MagicSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIGANTICSTORM_DINO].PlaySpeed		= 0.55f + MagicSpeed1;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIGANTICSTORM_FENRIR].PlaySpeed	= 0.55f + MagicSpeed1;
#endif	// YDG_ADD_SKILL_RIDING_ANIMATIONS
#ifdef YDG_ADD_SKILL_LIGHTNING_SHOCK
	// ¶óŔĚĆ®´×ĽîĹ©
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_LIGHTNING_SHOCK].PlaySpeed = 0.35f + MagicSpeed2;
#endif	// YDG_ADD_SKILL_LIGHTNING_SHOCK

	// ĽĹ¸Ő
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SUMMON].PlaySpeed			= 0.25f;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SUMMON_UNI].PlaySpeed		= 0.25f;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SUMMON_DINO].PlaySpeed	= 0.25f;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SUMMON_FENRIR].PlaySpeed	= 0.25f;
	
#ifdef CSK_ADD_SKILL_BLOWOFDESTRUCTION
	// Ćı«ŔÇ ŔĎ°Ý
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_BLOW_OF_DESTRUCTION].PlaySpeed = 0.3f;
#endif // CSK_ADD_SKILL_BLOWOFDESTRUCTION

#ifdef PJH_SEASON4_SPRITE_NEW_SKILL_RECOVER
	// ȸşą
	Models[MODEL_PLAYER].Actions[PLAYER_RECOVER_SKILL].PlaySpeed = 0.33f;
#endif //PJH_SEASON4_SPRITE_NEW_SKILL_RECOVER
#ifdef KJH_ADD_SKILL_SWELL_OF_MAGICPOWER		// ¸¶·ÂÁő´ë
	// ¸¶·ÂÁő´ë
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_SWELL_OF_MP].PlaySpeed = 0.2f;		
#endif // KJH_ADD_SKILL_SWELL_OF_MAGICPOWER

	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_SKILL_FURY_STRIKE].PlaySpeed = 0.38f;		// şĐłëŔÇŔĎ°Ý
    Models[MODEL_PLAYER].Actions[PLAYER_SKILL_VITALITY].PlaySpeed = 0.34f;					// ˝şŔŁ¶óŔĚÇÁ
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_HELL_START].PlaySpeed = 0.30f;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_TELEPORT].PlaySpeed = 0.28f;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_TELEPORT].PlaySpeed = 0.3f;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_DARKHORSE].PlaySpeed = 0.3f;
	Models[MODEL_PLAYER].Actions[PLAYER_FENRIR_ATTACK_DARKLORD_TELEPORT].PlaySpeed = 0.3f;
	Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_REMOVAL].PlaySpeed	= 0.28f;

#ifdef WORLDCUP_ADD
	Models[MODEL_PLAYER].Actions[PLAYER_KOREA_HANDCLAP].PlaySpeed = 0.3f;
	Models[MODEL_PLAYER].Actions[PLAYER_POINT_DANCE].PlaySpeed = 0.4f;
#endif // WORLDCUP_ADD
#ifdef PBG_ADD_NEWCHAR_MONK_SKILL

	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_THRUST].PlaySpeed = 0.4f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_STAMP].PlaySpeed = 0.4f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_GIANTSWING].PlaySpeed = 0.4f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DARKSIDE_READY].PlaySpeed = 0.3f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DARKSIDE_ATTACK].PlaySpeed = 0.3f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAGONKICK].PlaySpeed = 0.4f + RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_DRAGONLORE].PlaySpeed = 0.3f+RageAttackSpeed;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_ATT_UP_OURFORCES].PlaySpeed = 0.35f;
	Models[MODEL_PLAYER].Actions[PLAYER_SKILL_HP_UP_OURFORCES].PlaySpeed = 0.35f;
	Models[MODEL_PLAYER].Actions[PLAYER_RAGE_FENRIR_ATTACK_RIGHT].PlaySpeed	= 0.25f + RageAttackSpeed;
#endif //PBG_ADD_NEWCHAR_MONK_SKILL
}

ZzzInformation.cpp
PHP:
void CHARACTER_MACHINE::CalculateAttackSpeed()
{
	WORD Dexterity;
	///////////////////////////////////////////// Äł¸ŻĹÍ ±âş» ąÎø °č»ę /////////////////////////////////////////////
	Dexterity= Character.Dexterity+ Character.AddDexterity;

    int CharacterClass = GetBaseClass ( Character.Class );

	if ( CharacterClass==CLASS_ELF )    //  żäÁ¤.
    {
		Character.AttackSpeed = Dexterity/50;
        Character.MagicSpeed = Dexterity/50;
    }
	else if ( CharacterClass==CLASS_KNIGHT || CharacterClass==CLASS_DARK )  //  20 --> 18  ±â»ç. ¸¶°Ë»ç.
    {
        Character.AttackSpeed = Dexterity/15;
        Character.MagicSpeed = Dexterity/20;
    }
	
    else if ( CharacterClass==CLASS_DARK_LORD )
    {
		Character.AttackSpeed = Dexterity/10;
        Character.MagicSpeed = Dexterity/10;
    }
	else if (CharacterClass == CLASS_SUMMONER)
    {
		Character.AttackSpeed = Dexterity/20;
        Character.MagicSpeed = Dexterity/20;
    }
#ifdef PBG_ADD_NEWCHAR_MONK
	else if(CharacterClass == CLASS_RAGEFIGHTER)
	{
		Character.AttackSpeed = Dexterity/9;
        Character.MagicSpeed = Dexterity/9;
	}
#endif //PBG_ADD_NEWCHAR_MONK
	else  //  ąý»ç.
    {
        Character.AttackSpeed = Dexterity/20;
        Character.MagicSpeed = Dexterity/10;
    }

	Character.AttackSpeed = Character.AttackSpeed / 16.4f; // -> 16.8f (Fix 380lvl item)
	Character.MagicSpeed = Character.MagicSpeed / 16.4f; // -> 16.8f (Fix 380lvl item)

	if (Character.AttackSpeed == 0)
	{
		Character.AttackSpeed = 1;
	}
	if (Character.MagicSpeed == 0)
	{
		Character.MagicSpeed = 1;
	}
	......

In this way, items that increase the speed of the attack will also be included in the repair.

The repair is only up to 65,000 points in dexterity.
 
Last edited:
Joined
Jul 31, 2012
Messages
490
Reaction score
92
I will complete the Fire sream patch for DL ​​on the pet tomorrow.
If you find a problem with the speed of the attack, please let me know.
 
Experienced Elementalist
Joined
Apr 2, 2009
Messages
221
Reaction score
54
I will complete the Fire sream patch for DL ​​on the pet tomorrow.
If you find a problem with the speed of the attack, please let me know.

I like more the idea of downgrading the version, at least for a season 3 with interface, I would only have to work on the interface and maybe on the graphic engine a little bit.
 
Joined
Jul 31, 2012
Messages
490
Reaction score
92
I adapted the client for season 4. but without socket options. I also have a fully functional Rage Fighter character and NPC tasks. However, the speed of the attack must be solved without modification in player.bmd and without restrictions for players so that the server is safe against the use of AGI bug in the game.
 
Joined
Jul 31, 2012
Messages
490
Reaction score
92
For Fire Scream work while riding a pet.

PHP:
Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_STRIKE].PlaySpeed = 0.175f + AttackSpeed1; //-> Fire Scream

I use this
 
Experienced Elementalist
Joined
Apr 2, 2009
Messages
221
Reaction score
54
For Fire Scream work while riding a pet.

PHP:
Models[MODEL_PLAYER].Actions[PLAYER_ATTACK_RIDE_STRIKE].PlaySpeed = 0.175f + AttackSpeed1; //-> Fire Scream

I use this

I see you motivated, keep it up.
 
Initiate Mage
Joined
Jun 15, 2022
Messages
2
Reaction score
0
Thank you for sharing, I have practiced and succeeded
 
Experienced Elementalist
Joined
Apr 2, 2009
Messages
221
Reaction score
54
dsw_pool - [Development] Source Mu Main 1.03.35 [Season 5.1 - Season 5.2] - RaGEZONE Forums


S3 downgrade 30%
 
Banned
Banned
Joined
Sep 6, 2022
Messages
37
Reaction score
1
Got this working and adapted to cross-platform and rebuild to Unity, thanks for this my friend!
 
Initiate Mage
Joined
Jul 11, 2019
Messages
1
Reaction score
0
I pay for the files converted to multiplatform, whoever has the means to do this work, call me discord to negotiate the value.
Gabriel.fl#8198
 
Experienced Elementalist
Joined
Apr 2, 2009
Messages
221
Reaction score
54
Has someone already separated the chat from the system messages?

Code:
if (MsgType != TYPE_SYSTEM_MESSAGE)
			{
				CMessageText* pAllMsgText = new CMessageText;
				if (!pAllMsgText->Create(strID, strText1, MsgType))
					delete pAllMsgText;
				else
				{
					m_vecAllMsgs.push_back(pAllMsgText);
				}
			}


if (MsgType == TYPE_SYSTEM_MESSAGE)
			{
				nScrollLinesNew++;
			}else
			if( (GetCurrentMsgType() == TYPE_ALL_MESSAGE || GetCurrentMsgType() == MsgType) && MsgType != TYPE_SYSTEM_MESSAGE)
			{
				nScrollLines++;
			}

if (MsgType == TYPE_SYSTEM_MESSAGE)
	{
		pvecMsgs = GetMsgs(MsgType);
		if (pvecMsgs == NULL)
		{
			assert(!"Error chat 4");
			return;
		}
		if (nScrollLinesNew > 0 && ((pvecMsgs->size() - (m_iCurrentRenderEndLineMsg + 1) - nScrollLinesNew) < 3))
			m_iCurrentRenderEndLineMsg = pvecMsgs->size() - 1;
		else if (!m_bShowFrame)
			m_iCurrentRenderEndLineMsg = pvecMsgs->size() - 1;
		

	}

bool SEASON3B::CNewUIChatLogWindow::RenderMessagesNew()
{
	float fRenderPosX = m_WndPos.x, fRenderPosY = m_WndPos.y - m_WndSize.cy + SCROLL_TOP_BOTTOM_PART_HEIGHT;

	type_vector_msgs* pvecMsgs = GetMsgs(TYPE_SYSTEM_MESSAGE);
	if (pvecMsgs == NULL)
	{
		assert(!"empty chat!");
		return false;
	}
	int iRenderStartLine = 0;
	if (GetCurrentRenderEndLineMsg() >= m_nShowingLinesMsg)
	{
		iRenderStartLine = GetCurrentRenderEndLineMsg() - m_nShowingLinesMsg + 1;
	}
	else
	{
		fRenderPosY = fRenderPosY + FONT_LEADING + (SCROLL_MIDDLE_PART_HEIGHT * (m_nShowingLinesMsg - GetCurrentRenderEndLineMsg() - 1));
	}
	fRenderPosY -= 270;
	BYTE byAlpha = 150;
	if (m_bShowFrame) byAlpha = 100;
	EnableAlphaTest();
	for (int i = iRenderStartLine, s = 0; i <= GetCurrentRenderEndLineMsg(); i++, s++)
	{
		if (i < 0 && i >= (int)pvecMsgs->size()) break;

		bool bRenderMessage = true;
		g_pRenderText->SetFont(g_hFont);
		g_pRenderText->SetBgColor(0, 0, 0, 150);
		g_pRenderText->SetTextColor(100, 150, 255, 255);
		CMessageText* pMsgText = (*pvecMsgs)[i];
		if (bRenderMessage && !pMsgText->GetText().empty())
		{
			POINT ptRenderPos = { (long)fRenderPosX + (long)WND_LEFT_RIGHT_EDGE, (long)fRenderPosY + (long)FONT_LEADING + ((long)SCROLL_MIDDLE_PART_HEIGHT * (long)s) };


			if (!pMsgText->GetID().empty())
			{
				if (m_bPointedMessage == true && m_iPointedMessageIndex == i)
				{
					g_pRenderText->SetBgColor(30, 30, 30, 180);
					g_pRenderText->SetTextColor(255, 128, 255, 255);
				}
				std::string strIDUTF8 = "";
				g_pMultiLanguage->ConvertANSIToUTF8OrViceVersa(strIDUTF8, (pMsgText->GetID()).c_str());
				type_string strLine = strIDUTF8 + " : " + pMsgText->GetText();
				g_pRenderText->RenderText(ptRenderPos.x, ptRenderPos.y, strLine.c_str());
			}
			else
			{
				g_pRenderText->RenderText(ptRenderPos.x, ptRenderPos.y, pMsgText->GetText().c_str());
			}
		}
	}
	DisableAlphaBlend();

	return true;
}
 
Joined
Jul 31, 2012
Messages
490
Reaction score
92
Code:
if (MsgType != TYPE_SYSTEM_MESSAGE)
			{
				CMessageText* pAllMsgText = new CMessageText;
				if (!pAllMsgText->Create(strID, strText1, MsgType))
					delete pAllMsgText;
				else
				{
					m_vecAllMsgs.push_back(pAllMsgText);
				}
			}


if (MsgType == TYPE_SYSTEM_MESSAGE)
			{
				nScrollLinesNew++;
			}else
			if( (GetCurrentMsgType() == TYPE_ALL_MESSAGE || GetCurrentMsgType() == MsgType) && MsgType != TYPE_SYSTEM_MESSAGE)
			{
				nScrollLines++;
			}

if (MsgType == TYPE_SYSTEM_MESSAGE)
	{
		pvecMsgs = GetMsgs(MsgType);
		if (pvecMsgs == NULL)
		{
			assert(!"Error chat 4");
			return;
		}
		if (nScrollLinesNew > 0 && ((pvecMsgs->size() - (m_iCurrentRenderEndLineMsg + 1) - nScrollLinesNew) < 3))
			m_iCurrentRenderEndLineMsg = pvecMsgs->size() - 1;
		else if (!m_bShowFrame)
			m_iCurrentRenderEndLineMsg = pvecMsgs->size() - 1;
		

	}

bool SEASON3B::CNewUIChatLogWindow::RenderMessagesNew()
{
	float fRenderPosX = m_WndPos.x, fRenderPosY = m_WndPos.y - m_WndSize.cy + SCROLL_TOP_BOTTOM_PART_HEIGHT;

	type_vector_msgs* pvecMsgs = GetMsgs(TYPE_SYSTEM_MESSAGE);
	if (pvecMsgs == NULL)
	{
		assert(!"empty chat!");
		return false;
	}
	int iRenderStartLine = 0;
	if (GetCurrentRenderEndLineMsg() >= m_nShowingLinesMsg)
	{
		iRenderStartLine = GetCurrentRenderEndLineMsg() - m_nShowingLinesMsg + 1;
	}
	else
	{
		fRenderPosY = fRenderPosY + FONT_LEADING + (SCROLL_MIDDLE_PART_HEIGHT * (m_nShowingLinesMsg - GetCurrentRenderEndLineMsg() - 1));
	}
	fRenderPosY -= 270;
	BYTE byAlpha = 150;
	if (m_bShowFrame) byAlpha = 100;
	EnableAlphaTest();
	for (int i = iRenderStartLine, s = 0; i <= GetCurrentRenderEndLineMsg(); i++, s++)
	{
		if (i < 0 && i >= (int)pvecMsgs->size()) break;

		bool bRenderMessage = true;
		g_pRenderText->SetFont(g_hFont);
		g_pRenderText->SetBgColor(0, 0, 0, 150);
		g_pRenderText->SetTextColor(100, 150, 255, 255);
		CMessageText* pMsgText = (*pvecMsgs)[i];
		if (bRenderMessage && !pMsgText->GetText().empty())
		{
			POINT ptRenderPos = { (long)fRenderPosX + (long)WND_LEFT_RIGHT_EDGE, (long)fRenderPosY + (long)FONT_LEADING + ((long)SCROLL_MIDDLE_PART_HEIGHT * (long)s) };


			if (!pMsgText->GetID().empty())
			{
				if (m_bPointedMessage == true && m_iPointedMessageIndex == i)
				{
					g_pRenderText->SetBgColor(30, 30, 30, 180);
					g_pRenderText->SetTextColor(255, 128, 255, 255);
				}
				std::string strIDUTF8 = "";
				g_pMultiLanguage->ConvertANSIToUTF8OrViceVersa(strIDUTF8, (pMsgText->GetID()).c_str());
				type_string strLine = strIDUTF8 + " : " + pMsgText->GetText();
				g_pRenderText->RenderText(ptRenderPos.x, ptRenderPos.y, strLine.c_str());
			}
			else
			{
				g_pRenderText->RenderText(ptRenderPos.x, ptRenderPos.y, pMsgText->GetText().c_str());
			}
		}
	}
	DisableAlphaBlend();

	return true;
}

Can I ask you to share the files

NewUIChatLogWindow.h
NewUIChatLogWindow.cpp

For complete chat separation code?

Thank you
 
Back
Top