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!

[Release] All Class Combo

Newbie Spellweaver
Joined
Jun 4, 2012
Messages
87
Reaction score
12
the effect of the rage fighter combo does not appear any solution
 
Last edited by a moderator:
Joined
Nov 4, 2012
Messages
928
Reaction score
545
@muonlinegr2

ComboSkillData.h
Code:
#pragma once

#define MAX_COMBO_INFO 128

struct COMBO_SKILL_INFO
{
	WORD Stage;
	WORD Skill;
	DWORD Delay;
};

class CComboSkillData
{
public:
	CComboSkillData();

	void Load(char* path);
	void SetInfo(COMBO_SKILL_INFO info);
	COMBO_SKILL_INFO* GetInfoBySkill(WORD skill);
	DWORD GetSkillDelay(WORD skill);
	int	GetSkillType(WORD skill);

private:
	int m_Count;
	COMBO_SKILL_INFO m_Info[MAX_COMBO_INFO];
};

extern CComboSkillData gComboSkillData;

ComboSkillData.cpp
Code:
#include "stdafx.h"
#include "ComboSkillData.h"
#include "MemScript.h"
#include "Util.h"

CComboSkillData gComboSkillData;

CComboSkillData::CComboSkillData(void)
{
	this->m_Count = 0;
}

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

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

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

	this->m_Count = 0;

	try
	{
		COMBO_SKILL_INFO info;

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

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

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

			info.Stage = lpMemScript->GetNumber();
			info.Skill = lpMemScript->GetAsNumber();
			info.Delay = lpMemScript->GetAsNumber();

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

	delete lpMemScript;
}

void CComboSkillData::SetInfo(COMBO_SKILL_INFO info)
{
	if(this->m_Count < 0 || this->m_Count >= MAX_COMBO_INFO)
	{
		return;
	}

	this->m_Info[this->m_Count++] = info;
}

COMBO_SKILL_INFO* CComboSkillData::GetInfoBySkill(WORD skill)
{
	for(int i = 0;i <= this->m_Count;i++)
	{
		if(this->m_Info[i].Skill == skill)
		{
			return &this->m_Info[i];
		}
	}

	return NULL;
}

int CComboSkillData::GetSkillType(WORD skill)
{
	COMBO_SKILL_INFO* lpInfo = this->GetInfoBySkill(skill);

	if(lpInfo != NULL)
	{
		return lpInfo->Stage;
	}

	return -1;
}

DWORD CComboSkillData::GetSkillDelay(WORD skill)
{
	COMBO_SKILL_INFO* lpInfo = this->GetInfoBySkill(skill);

	if(lpInfo != NULL)
	{
		return lpInfo->Delay;
	}

	return 0;
}

ServerInfo.cpp at CServerInfo::ReadSkillInfo()
Code:
gComboSkillData.Load(gPath.GetFullPath("Skill\\ComboSkill.txt"));

Change ComboSkil.cpp to this
Code:
#include "stdafx.h"
#include "ComboSkill.h"
#include "ComboSkillData.h"

CComboSkill gComboSkill;

void CComboSkill::Init()
{
	this->m_time		= 0;
	this->m_skill[0]	= 0xFFFF;
	this->m_skill[1]	= 0xFFFF;
	this->m_index		= -1;
}

bool CComboSkill::CheckCombo(WORD skill)
{
	int type		= gComboSkillData.GetSkillType(skill);
	DWORD delay		= gComboSkillData.GetSkillDelay(skill);

	if(type == -1)
	{
		this->Init();
		return 0;
	}

	if(type == 0)
	{
		this->m_time		= GetTickCount() + delay;
		this->m_skill[0]	= skill;
		this->m_index		= 0;
		return 0;
	}

	if(type == 1)
	{
		if(this->m_time < GetTickCount())
		{
			this->Init();
			return 0;
		}

		if(this->m_skill[0] == 0xFFFF)
		{
			this->Init();
			return 0;
		}

		if(this->m_index == 0)
		{
			this->m_time		= GetTickCount() + delay;
			this->m_skill[1]	= skill;
			this->m_index		= 1;
			return 0;
		}
		
		if(this->m_index == 1 && this->m_skill[1] != skill)
		{
			this->Init();
			return 1;
		}
	}

	this->Init();
	return 0;
}

Then do file

ComboSkill.txt (Put at Skill folder)
Code:
//	Stage	Skill	Delay		Comment
	0	19	3000		// [DK] Falling Slash
	0	20	3000		// [DK] Lunge
	0	21	3000		// [DK] Uppercut
	0	22	3000		// [DK] Cyclone
	0	23	3000		// [DK] Slash
	1	41	3000		// [DK] Twisting Slash
	1	42	3000		// [DK] Rageful Blow
	1	43	3000		// [DK] Death Stab
	1	232	3000		// [DK] Frozen Stab
	1	344	3000		// [DK] Blood Storm

	0	10	3000		// [DW] Hell Fire
	0	12	3000		// [DW] Aqua Beam
	0	13	3000		// [DW] Blast
	0	14	3000		// [DW] Inferno
	1	38	3000		// [DW] Decay
	1	39	3000		// [DW] Ice Storm
	1	40	3000		// [DW] Nova

	0	24	3000		// [FE] Triple Shot
	1	52	3000		// [FE] Penetration
	1	235	3000		// [FE] Five Shot

	0	55	3000		// [MG] Fire Slash
	0	56	3000		// [MG] Power Slash
	0	57	3000		// [MG] Spiral Slash
	1	73	3000		// [MG] Mana Rays
	1	236	3000		// [MG] Sword Slash
	1	237	3000		// [MG] Gigantic Storm

	0	61	3000		// [DL] Fire Brust
	0	66	3000		// [DL] Eletric Spark
	1	78	3000		// [DL] Fire Scream
	1	238	3000		// [DL] Birds
	1	62	3000		// [DL] Earth Quake

	0	214	3000		// [SU] Drain Life
	1	215	3000		// [SU] Chain Lightning
	1	223	3000		// [SU] Sahamutt
	1	224	3000		// [SU] Neil
	1	225	3000		// [SU] Ghost Phanton
	1	230	3000		// [SU] Red Storm
end

Ps.
I hope all can sell this leeched code to their n00b clients at a right price.
You are welcome
 
(づ。◕‿‿◕。)
Loyal Member
Joined
Jun 23, 2014
Messages
1,853
Reaction score
422
it should work fine in season 6, add this for RF combo.
Code:
  0   260 3000        // [RF] Large Ring Blower
   0   261 3000        // [RF] Upper beast
  0   270 3000        // [RF] Phoenix shot
  1   264 3000        // [RF] Dragon lore
  1   262 3000        // [RF] Chain Driver

you still have to code this part into the skills to use the combo with them.

Code:
cskillmager::skillname(some parameters here, bool combo)
{
     '
     '
     // skill code here
     '
     '
     gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,0,combo);


     if(combo != 0)
     {
	     this->GCSkillAttackSend(lpObj,SKILL_COMBO,index,1);
     }
     '
     '
     // skill code here
     '
     '
}
 
Last edited:
Junior Spellweaver
Joined
Apr 14, 2011
Messages
145
Reaction score
123
Code:
 .....

Code:
bool ComboSkill::CheckCombo(LPOBJ lpObj,int bIndex, CSkill* lpSkill)
{
	int type		= gComboSkillData.GetSkillType(lpSkill->m_skill);
	DWORD delay		= gComboSkillData.GetSkillDelay(lpSkill->m_skill);

	if(type == -1)
	{
		this->Init();
		return 0;
	}

	if(type == 0)
	{
		this->m_time		= GetTickCount() + delay;
		this->m_skill[0]	= lpSkill->m_skill;
		this->m_index		= 0;
		return 0;
	}

	if(type == 1)
	{
		if(this->m_time < GetTickCount())
		{
			this->Init();
			return 0;
		}

		if(this->m_skill[0] == 0xFFFF)
		{
			this->Init();
			return 0;
		}

		if(this->m_index == 0)
		{
			this->m_time		= GetTickCount() + delay;
			this->m_skill[1]	= lpSkill->m_skill;
			this->m_index		= 1;
			return 0;
		}
		
		if(this->m_index == 1 && this->m_skill[1] != lpSkill->m_skill)
		{
			[B][COLOR="#FF0000"]gAttack.Attack(lpObj, &gObj[bIndex], lpSkill, 0, 0, 0, 0, 1);[/COLOR][/B]
			[B][COLOR="#FF0000"]gSkillManager.GCSkillAttackSend(lpObj, SKILL_COMBO, bIndex, 1);[/COLOR][/B]
			this->Init();
			return 1;
		}
	}

	this->Init();
	return 0;
}

Code:
	if(gComboSkill.CheckCombo(lpObj, bIndex, lpSkill) != 0)
	{
		if(gServerInfo.m_CheckAutoComboHack == 0 || (GetTickCount()-lpObj->ComboTime) > ((DWORD)gServerInfo.m_CheckAutoComboHackTolerance))
		{
			combo = 1;
			lpObj->ComboTime = GetTickCount();
		}
	}
 
Joined
May 26, 2009
Messages
17,304
Reaction score
3,216
Is there anyone here has a released version of the file to be injected in MUEMU Season 6? Here's the file I am using http://forum.ragezone.com/f197/release-muemu-season6-original-fixed-1173557/ . Please help me how to do it. Thanks!

maybe this reply helps:

http://forum.ragezone.com/f193/help-class-combo-1156690-post8920744/#post8920744
rar password: SeedMaker


modify the muhelper:
Data \ Interface \ GFx \
replace with:

put at skill folder in server files ComboSkill.txt

Code:
//	Stage	Skill	Delay		Comment
	0	19	3000		// [DK] Falling Slash
	0	20	3000		// [DK] Lunge
	0	21	3000		// [DK] Uppercut
	0	22	3000		// [DK] Cyclone
	0	23	3000		// [DK] Slash
	1	41	3000		// [DK] Twisting Slash
	1	42	3000		// [DK] Rageful Blow
	1	43	3000		// [DK] Death Stab
	1	232	3000		// [DK] Frozen Stab
	1	344	3000		// [DK] Blood Storm

	0	10	3000		// [DW] Hell Fire
	0	12	3000		// [DW] Aqua Beam
	0	13	3000		// [DW] Blast
	0	14	3000		// [DW] Inferno
	1	38	3000		// [DW] Decay
	1	39	3000		// [DW] Ice Storm
	1	40	3000		// [DW] Nova

	0	24	3000		// [FE] Triple Shot
	1	52	3000		// [FE] Penetration
	1	235	3000		// [FE] Five Shot

	0	55	3000		// [MG] Fire Slash
	0	56	3000		// [MG] Power Slash
	0	57	3000		// [MG] Spiral Slash
	1	73	3000		// [MG] Mana Rays
	1	236	3000		// [MG] Sword Slash
	1	237	3000		// [MG] Gigantic Storm

	0	61	3000		// [DL] Fire Brust
	0	66	3000		// [DL] Eletric Spark
	1	78	3000		// [DL] Fire Scream
	1	238	3000		// [DL] Birds
	1	62	3000		// [DL] Earth Quake

	0	214	3000		// [SU] Drain Life
	1	215	3000		// [SU] Chain Lightning
	1	223	3000		// [SU] Sahamutt
	1	224	3000		// [SU] Neil
	1	225	3000		// [SU] Ghost Phanton
	1	230	3000		// [SU] Red Storm
end

different comboskill.cpp fix
Code:
#include "stdafx.h"
#include "ComboSkill.h"
#include "ComboSkillData.h"

CComboSkill gComboSkill;

void CComboSkill::Init()
{
	this->m_time		= 0;
	this->m_skill[0]	= 0xFFFF;
	this->m_skill[1]	= 0xFFFF;
	this->m_index		= -1;
}

bool CComboSkill::CheckCombo(WORD skill)
{
	int type		= gComboSkillData.GetSkillType(skill);
	DWORD delay		= gComboSkillData.GetSkillDelay(skill);

	if(type == -1)
	{
		this->Init();
		return 0;
	}

	if(type == 0)
	{
		this->m_time		= GetTickCount() + delay;
		this->m_skill[0]	= skill;
		this->m_index		= 0;
		return 0;
	}

	if(type == 1)
	{
		if(this->m_time < GetTickCount())
		{
			this->Init();
			return 0;
		}

		if(this->m_skill[0] == 0xFFFF)
		{
			this->Init();
			return 0;
		}

		if(this->m_index == 0)
		{
			this->m_time		= GetTickCount() + delay;
			this->m_skill[1]	= skill;
			this->m_index		= 1;
			return 0;
		}
		
		if(this->m_index == 1 && this->m_skill[1] != skill)
		{
			this->Init();
			return 1;
		}
	}

	this->Init();
	return 0;
}
 
Newbie Spellweaver
Joined
Jul 30, 2015
Messages
57
Reaction score
5
maybe this reply helps:

http://forum.ragezone.com/f193/help-class-combo-1156690-post8920744/#post8920744
rar password: SeedMaker


modify the muhelper:
Data \ Interface \ GFx \
replace with:

put at skill folder in server files ComboSkill.txt

Code:
//    Stage    Skill    Delay        Comment
    0    19    3000        // [DK] Falling Slash
    0    20    3000        // [DK] Lunge
    0    21    3000        // [DK] Uppercut
    0    22    3000        // [DK] Cyclone
    0    23    3000        // [DK] Slash
    1    41    3000        // [DK] Twisting Slash
    1    42    3000        // [DK] Rageful Blow
    1    43    3000        // [DK] Death Stab
    1    232    3000        // [DK] Frozen Stab
    1    344    3000        // [DK] Blood Storm

    0    10    3000        // [DW] Hell Fire
    0    12    3000        // [DW] Aqua Beam
    0    13    3000        // [DW] Blast
    0    14    3000        // [DW] Inferno
    1    38    3000        // [DW] Decay
    1    39    3000        // [DW] Ice Storm
    1    40    3000        // [DW] Nova

    0    24    3000        // [FE] Triple Shot
    1    52    3000        // [FE] Penetration
    1    235    3000        // [FE] Five Shot

    0    55    3000        // [MG] Fire Slash
    0    56    3000        // [MG] Power Slash
    0    57    3000        // [MG] Spiral Slash
    1    73    3000        // [MG] Mana Rays
    1    236    3000        // [MG] Sword Slash
    1    237    3000        // [MG] Gigantic Storm

    0    61    3000        // [DL] Fire Brust
    0    66    3000        // [DL] Eletric Spark
    1    78    3000        // [DL] Fire Scream
    1    238    3000        // [DL] Birds
    1    62    3000        // [DL] Earth Quake

    0    214    3000        // [SU] Drain Life
    1    215    3000        // [SU] Chain Lightning
    1    223    3000        // [SU] Sahamutt
    1    224    3000        // [SU] Neil
    1    225    3000        // [SU] Ghost Phanton
    1    230    3000        // [SU] Red Storm
end

different comboskill.cpp fix
Code:
#include "stdafx.h"
#include "ComboSkill.h"
#include "ComboSkillData.h"

CComboSkill gComboSkill;

void CComboSkill::Init()
{
    this->m_time        = 0;
    this->m_skill[0]    = 0xFFFF;
    this->m_skill[1]    = 0xFFFF;
    this->m_index        = -1;
}

bool CComboSkill::CheckCombo(WORD skill)
{
    int type        = gComboSkillData.GetSkillType(skill);
    DWORD delay        = gComboSkillData.GetSkillDelay(skill);

    if(type == -1)
    {
        this->Init();
        return 0;
    }

    if(type == 0)
    {
        this->m_time        = GetTickCount() + delay;
        this->m_skill[0]    = skill;
        this->m_index        = 0;
        return 0;
    }

    if(type == 1)
    {
        if(this->m_time < GetTickCount())
        {
            this->Init();
            return 0;
        }

        if(this->m_skill[0] == 0xFFFF)
        {
            this->Init();
            return 0;
        }

        if(this->m_index == 0)
        {
            this->m_time        = GetTickCount() + delay;
            this->m_skill[1]    = skill;
            this->m_index        = 1;
            return 0;
        }
        
        if(this->m_index == 1 && this->m_skill[1] != skill)
        {
            this->Init();
            return 1;
        }
    }

    this->Init();
    return 0;
}


Thanks Karli for this..

I would like to ask and confirm as well where can i put the different comboskill.cpp fix code? Thanks!
 
Initiate Mage
Joined
Jul 29, 2020
Messages
2
Reaction score
0
does this work with Season12 MuEMU if it does how i can enable it or where should i put those file direction please?
 
Back
Top