Most visitors online was 12720 , on 2 May 2024
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature currently requires accessing the site using the built-in Safari browser.
How to start :w00t: ?
Build it to a dll and hook ?
It's for X-team Source files... edit/compile/run...
@seedmaker why post all the code and not only what you added, without any info and completely unreadable? why not post it in Source [MUEMU] ?
working perfect, thanks
Sorry about this i already release about this and this is the second time and the first is Full info with Video's
Sorry its becuase need a lot of code and Explanation's or what to put to work thats why i post all code xD Well if you need the code ican post it here
int CComboSkill::GetSkillType(WORD skill) // OK
{
if(skill == SKILL_FALLING_SLASH ||
skill == SKILL_LUNGE ||
skill == SKILL_UPPERCUT ||
skill == SKILL_CYCLONE ||
skill == SKILL_SLASH ||
[COLOR=#ff0000]skill == SKILL_FIRE_SLASH ||
skill == SKILL_TWISTER ||
skill == SKILL_POWER_SLASH ||
skill == SKILL_FLAME ||
skill == SKILL_DRAIN_LIFE ||
skill == SKILL_TRIPLE_SHOT ||
skill == SKILL_UPPER_BEAST ||
skill == SKILL_PHOENIX_SHOT ||
skill == SKILL_LARGE_RING_BLOWER ||
skill == SKILL_FIRE_BURST[/COLOR]
)
{
return 0;
}
else if(skill == SKILL_TWISTING_SLASH ||
skill == SKILL_RAGEFUL_BLOW ||
skill == SKILL_DEATH_STAB ||
skill == SKILL_FROZEN_STAB ||
skill == SKILL_BLOOD_STORM ||
[COLOR=#ff0000] skill == SKILL_LIGHTNING ||
skill == SKILL_DECAY ||
skill == SKILL_HELL_FIRE ||
skill == SKILL_INFERNO ||
skill == SKILL_RED_STORM ||
skill == SKILL_CHAIN_LIGHTNING ||
skill == SKILL_FIVE_SHOT ||
skill == SKILL_PENETRATION ||
skill == SKILL_DRAGON_LORE ||
skill == SKILL_CHAIN_DRIVER ||
skill == SKILL_FIRE_SCREAM ||
skill == SKILL_BIRDS [/COLOR]
)
{
return 1;
}
else
{
return -1;
}
}
[CODE]case SKILL_DECAY:
return this->SkillDecay(aIndex,bIndex,lpSkill,x,y,[COLOR=#ff0000]combo[/COLOR]);
case SKILL_RED_STORM:
return this->SkillRedStorm(aIndex,bIndex,lpSkill,[COLOR=#ff0000]combo[/COLOR]);
case SKILL_FIVE_SHOT:
return this->SkillFiveShot(aIndex,bIndex,lpSkill,angle,[COLOR=#ff0000]combo[/COLOR]);
case SKILL_BIRDS:
return this->SkillBirds(aIndex,bIndex,lpSkill,angle,[COLOR=#ff0000]combo[/COLOR]);
case SKILL_DRAGON_LORE:
return this->SkillDragonLore(aIndex,bIndex,lpSkill,[COLOR=#ff0000]combo[/COLOR]);
bool CSkillManager::SkillDecay(int aIndex,int bIndex,CSkill* lpSkill,BYTE x,BYTE y,[COLOR=#ff0000]bool combo[/COLOR]) // OK
{
LPOBJ lpObj = &gObj[aIndex];
if(this->CheckSkillRange(lpSkill->m_index,lpObj->X,lpObj->Y,x,y) == 0)
{
return 0;
}
int count = 0;
for(int n=0;n < MAX_VIEWPORT;n++)
{
if(lpObj->VpPlayer2[n].state == VIEWPORT_NONE)
{
continue;
}
int index = lpObj->VpPlayer2[n].index;
if(this->CheckSkillTarget(lpObj,index,bIndex,lpObj->VpPlayer2[n].type) == 0)
{
continue;
}
if(this->CheckSkillRadio(lpSkill->m_index,x,y,gObj[index].X,gObj[index].Y) == 0)
{
continue;
}
gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,0,0);
[COLOR=#ff0000]gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,0,combo);
if(combo != 0)
{
this->GCSkillAttackSend(lpObj,SKILL_COMBO,index,1);
}[/COLOR]
if(CHECK_SKILL_ATTACK_COUNT(count) == 0)
{
break;
}
}
return 1;
}
bool CSkillManager::SkillRedStorm(int aIndex,int bIndex,CSkill* lpSkill,[COLOR=#ff0000]bool combo[/COLOR]) // OK
{
LPOBJ lpObj = &gObj[aIndex];
int count = 0;
for(int n=0;n < MAX_VIEWPORT;n++)
{
if(lpObj->VpPlayer2[n].state == VIEWPORT_NONE)
{
continue;
}
int index = lpObj->VpPlayer2[n].index;
if(this->CheckSkillTarget(lpObj,index,bIndex,lpObj->VpPlayer2[n].type) == 0)
{
continue;
}
if(this->CheckSkillRadio(lpSkill->m_index,lpObj->X,lpObj->Y,gObj[index].X,gObj[index].Y) == 0)
{
continue;
}
gObjAddAttackProcMsgSendDelay(lpObj,50,index,250,lpSkill->m_index,0);
[COLOR=#ff0000]gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,0,combo);
if(combo != 0)
{
this->GCSkillAttackSend(lpObj,SKILL_COMBO,index,1);
}[/COLOR]
if(CHECK_SKILL_ATTACK_COUNT(count) == 0)
{
break;
}
}
return 1;
}
bool CSkillManager::SkillFiveShot(int aIndex,int bIndex,CSkill* lpSkill,BYTE angle,[COLOR=#ff0000]bool combo[/COLOR]) // OK
{
LPOBJ lpObj = &gObj[aIndex];
int SkillFrustrumX[4],SkillFrustrumY[4];
this->GetSkillFrustrum(SkillFrustrumX,SkillFrustrumY,angle,lpObj->X,lpObj->Y,6.0f,7.0f,2.0f,0.0f);
vec3_t Angle;
Vector(0.0f,6.0f,0.0f,Angle);
vec3_t p[4];
Vector(0.0f,0.0f,40.0f,p[0]);
Vector(0.0f,0.0f,20.0f,p[1]);
Vector(0.0f,0.0f,340.0f,p[2]);
Vector(0.0f,0.0f,320.0f,p[3]);
float Matrix[3][4];
vec3_t vFrustrum[5],vFrustrum2[5];
AngleMatrix(p[0],Matrix);
VectorRotate(Angle,Matrix,vFrustrum[0]);
AngleMatrix(p[1],Matrix);
VectorRotate(Angle,Matrix,vFrustrum[1]);
Vector(0.0f,6.0f,0.0f,vFrustrum[2]);
AngleMatrix(p[2],Matrix);
VectorRotate(Angle,Matrix,vFrustrum[3]);
AngleMatrix(p[3],Matrix);
VectorRotate(Angle,Matrix,vFrustrum[4]);
Vector(0.0f,0.0f,(vec_t)((angle*360)/255),p[0]);
AngleMatrix((float*)p,Matrix);
int ArrowFrustrum[5],ArrowFrustrumX[5],ArrowFrustrumY[5];
for(int n=0;n < 5;n++)
{
VectorRotate(vFrustrum[n],Matrix,vFrustrum2[n]);
ArrowFrustrumX[n] = (int)vFrustrum2[n][0]+lpObj->X;
ArrowFrustrumY[n] = (int)vFrustrum2[n][1]+lpObj->Y;
}
int count = 0;
for(int n=0;n < MAX_VIEWPORT;n++)
{
if(lpObj->VpPlayer2[n].state == VIEWPORT_NONE)
{
continue;
}
int index = lpObj->VpPlayer2[n].index;
if(this->CheckSkillTarget(lpObj,index,bIndex,lpObj->VpPlayer2[n].type) == 0)
{
continue;
}
if(this->CheckSkillRadio(lpSkill->m_index,lpObj->X,lpObj->Y,gObj[index].X,gObj[index].Y) == 0)
{
continue;
}
if(this->CheckSkillFrustrum(SkillFrustrumX,SkillFrustrumY,gObj[index].X,gObj[index].Y) == 0)
{
continue;
}
for(int i=0;i < 5;i++)
{
if((ArrowFrustrum[i]=((ArrowFrustrumX[i]-lpObj->X)*(gObj[index].Y-lpObj->Y))-((ArrowFrustrumY[i]-lpObj->Y)*(gObj[index].X-lpObj->X))) > -5 && ArrowFrustrum[i] < 5)
{
gAttack.Attack(lpObj,&gObj[index],lpSkill,1,0,0,0,0);
[COLOR=#ff0000]gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,0,combo);
if(combo != 0)
{
this->GCSkillAttackSend(lpObj,SKILL_COMBO,index,1);
}[/COLOR]
}
}
if(CHECK_SKILL_ATTACK_COUNT(count) == 0)
{
break;
}
}
return 1;
}
bool CSkillManager::SkillBirds(int aIndex,int bIndex,CSkill* lpSkill,BYTE angle,[COLOR=#ff0000]bool combo[/COLOR]) // OK
{
LPOBJ lpObj = &gObj[aIndex];
int SkillFrustrumX[4],SkillFrustrumY[4];
this->GetSkillFrustrum(SkillFrustrumX,SkillFrustrumY,angle,lpObj->X,lpObj->Y,1.5f,6.0f,1.5f,0.0f);
int count = 0;
for(int n=0;n < MAX_VIEWPORT;n++)
{
if(lpObj->VpPlayer2[n].state == VIEWPORT_NONE)
{
continue;
}
int index = lpObj->VpPlayer2[n].index;
if(this->CheckSkillTarget(lpObj,index,bIndex,lpObj->VpPlayer2[n].type) == 0)
{
continue;
}
if(this->CheckSkillRadio(lpSkill->m_index,lpObj->X,lpObj->Y,gObj[index].X,gObj[index].Y) == 0)
{
continue;
}
if(this->CheckSkillFrustrum(SkillFrustrumX,SkillFrustrumY,gObj[index].X,gObj[index].Y) == 0)
{
continue;
}
if(OBJECT_RANGE(bIndex) != 0 && index == bIndex)
{
gObjAddAttackProcMsgSendDelay(lpObj,50,index,200,lpSkill->m_index,0);
gObjAddAttackProcMsgSendDelay(lpObj,50,index,300,lpSkill->m_index,0);
}
else
{
gObjAddAttackProcMsgSendDelay(lpObj,50,index,200,lpSkill->m_index,0);
}
[COLOR=#ff0000]gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,0,combo);
if(combo != 0)
{
this->GCSkillAttackSend(lpObj,SKILL_COMBO,index,1);
}[/COLOR]
if(CHECK_SKILL_ATTACK_COUNT(count) == 0)
{
break;
}
}
return 1;
}
bool CSkillManager::SkillDragonLore(int aIndex,int bIndex,CSkill* lpSkill,[COLOR=#ff0000]bool combo[/COLOR]) // OK
{
#if(GAMESERVER_UPDATE>=601)
LPOBJ lpObj = &gObj[aIndex];
if(OBJECT_RANGE(bIndex) == 0)
{
return 0;
}
LPOBJ lpTarget = &gObj[bIndex];
if(this->CheckSkillRange(lpSkill->m_index,lpObj->X,lpObj->Y,lpTarget->X,lpTarget->Y) == 0)
{
return 0;
}
int count = 0;
for(int n=0;n < MAX_VIEWPORT;n++)
{
if(lpObj->VpPlayer2[n].state == VIEWPORT_NONE)
{
continue;
}
int index = lpObj->VpPlayer2[n].index;
if(this->CheckSkillTarget(lpObj,index,bIndex,lpObj->VpPlayer2[n].type) == 0)
{
continue;
}
if(this->CheckSkillRadio(lpSkill->m_index,lpTarget->X,lpTarget->Y,gObj[index].X,gObj[index].Y) == 0)
{
continue;
}
gAttack.Attack(lpObj,&gObj[index],lpSkill,1,0,0,1,0);
gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,2,0);
gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,3,0);
gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,4,0);
[COLOR=#ff0000]gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,0,combo);
if(combo != 0)
{
this->GCSkillAttackSend(lpObj,SKILL_COMBO,index,1);
}[/COLOR]
if(CHECK_SKILL_ATTACK_COUNT(count) == 0)
{
break;
}
}
return 1;
#else
return 0;
#endif
}
[CODE]bool SkillDecay(int aIndex,int bIndex,CSkill* lpSkill,BYTE x,BYTE y,[COLOR=#ff0000]bool combo[/COLOR]);
bool SkillRedStorm(int aIndex,int bIndex,CSkill* lpSkill,[COLOR=#ff0000]bool combo[/COLOR]);
bool SkillFiveShot(int aIndex,int bIndex,CSkill* lpSkill,BYTE angle,[COLOR=#ff0000]bool combo[/COLOR]);
bool SkillBirds(int aIndex,int bIndex,CSkill* lpSkill,BYTE angle,[COLOR=#ff0000]bool combo[/COLOR]);
bool SkillDragonLore(int aIndex,int bIndex,CSkill* lpSkill,[COLOR=#ff0000]bool combo[/COLOR]);
Oh iforgot -.- You need to Finnish the Quest "Dark Stone/Hero Status" or You can Edit in Data/Quest (maybe it's take a week to Config xD) or Edit in Source
Find or go to Line 931/ Line 989 Then edit 3 to 0
if(gQuest.CheckQuestListState(lpObj,3,QUEST_FINISH) != 0 && lpObj->ComboSkill.CheckCombo(lpSkill->m_skill) != 0)
Like this ?Make a check for characters like DL that do not have this quest, maybe for MG also is better than make this or just put gQuest.CheckQuestListState(lpObj,3,QUEST_FINISH) into CheckCombo(lpSkill->m_skill).
Also make a config to adjust combos in all chars is better than do it in sources directly
Like this ?
;==================================================; Character Combo Skill Damage Settings;==================================================ComboDamageConstA = 20ComboDamageConstB = 10
You must be registered to see links
Password : SeedMaker
// 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
0 51 3000 // [FE] Ice Arrow
1 52 3000 // [FE] Penetration
1 235 3000 // [FE] Five Shot
end
// To do a Ducking combo in game
// Use Stage 1 -> Stage 0 -> Stage 1 again
// BOOM!
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 0 51 3000 // [FE] Ice Arrow 1 52 3000 // [FE] Penetration 1 235 3000 // [FE] Five Shot end // To do a Ducking combo in game // Use Stage 1 -> Stage 0 -> Stage 1 again // BOOM!
Here is a example how that can be made.
Ps. i will try to post how fix it here
Nice maybe you should share your Work so maybe we can help each other
Sorry Bad English :/
Dunno if this one will work to Enable/Disable Combo by Common.dat
@walter29
try to test on Wizard
Find
bool CSkillManager::SkillDecay(int aIndex,int bIndex,CSkill* lpSkill,BYTE x,BYTE y,bool combo) // OK
Below
gAttack.Attack(lpObj,&gObj[index],lpSkill,0,0,0,0,0);
Add this
if (gServerInfo.m_ComboWiz == 1)
then you should add on ServerInfo.h ServerInfo.cpp (m_ComboWiz) then on what path you add this i sugest on Common.dat
ComboWiz = 1