• Unfortunately, we have experienced significant hard drive damage that requires urgent maintenance and rebuilding. The forum will be a state of read only until we install our new drives and rebuild all the configurations needed. Please follow our Facebook pagefor updates, or we will be back up shortly! (The forum could go offline at any given time due to the nature of the failed drives whilst awaiting the upgrades.)

[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
423
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,312
Reaction score
3,222
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