📄 buff.cpp.svn-base
字号:
character->MagicStatus[j].Duration = thisskill->duration;
character->MagicStatus[j].Value = BuffValue.Value;
bflag = true;
}
}
break;
case A_STUN:
{
printf("User used stun skill\n");
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
0xff,
character->Status->Stun,
0, false, true);
unsigned tmp=RandNumber(1,100);
if(BuffValue.NewValue!=0 && (tmp < (Evalue+200)/7) )
{
printf("stunning was a success!\n");
UINT j = BuffValue.Position;
character->Status->Stun = j;
character->MagicStatus[j].Buff = thisskill->buff[i];
character->MagicStatus[j].BuffTime = clock();
character->MagicStatus[j].Duration = thisskill->duration;
character->MagicStatus[j].Value = BuffValue.Value;
bflag = true;
}
else printf("stunning failed: BuffValue.NewValue= %i, rand= %i, (Evalue+200)/700= %i \n", BuffValue.NewValue, tmp, (Evalue+200)/700);
}
break;
case A_POISON:
{
printf("User used poison skill\n");
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
0xff,
character->Status->Poison,
0, false, true);
if(BuffValue.NewValue!=0 && (RandNumber(1,100) < thisskill->success) /*(Evalue+200)/700) */)
{
printf("poisoning successful\n");
UINT j = BuffValue.Position;
character->Status->Poison = j;
character->MagicStatus[j].Buff = thisskill->buff[i];
character->MagicStatus[j].BuffTime = clock();
character->MagicStatus[j].Duration = thisskill->duration;
character->MagicStatus[j].Value = BuffValue.Value;
bflag = true;
}
}
break;
case A_MUTE:
{
printf("Player used mute skill\n");
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
0xff,
character->Status->Mute,
0, false, true);
unsigned tmp=RandNumber(1,100);
if(BuffValue.NewValue!=0 && (tmp < (Evalue+200)/7) )
{
printf("mute skill is a success\n");
UINT j = BuffValue.Position;
character->Status->Mute = j;
character->MagicStatus[j].Buff = thisskill->buff[i];
character->MagicStatus[j].BuffTime = clock();
character->MagicStatus[j].Duration = thisskill->duration;
character->MagicStatus[j].Value = BuffValue.Value;
bflag = true;
}
else printf("muting failed: BuffValue.NewValue= %i, rand= %i, (Evalue+200)/700= %i \n", BuffValue.NewValue, tmp, (Evalue+200)/700);
}
break;
}
return bflag;
}
// Get the new buffs values (character)
CBValue CWorldServer::GetBuffValue( CSkills* thisskill, CCharacter* character, UINT Evalue, UINT i, UINT up, UINT down, UINT CurrentValue, bool Buff, bool Status )
{
CBValue NewValue;
NewValue.Position = 0xff;
NewValue.NewValue = 0;
NewValue.Value = 0;
UINT Value = 0;
UINT NormalValue = 0;
UINT UpValue = 0;
UINT DownValue = 0;
if(up!=0xff)
{
UpValue = character->MagicStatus[up].Value;
NormalValue = CurrentValue - character->MagicStatus[up].Value;
if(Buff)
NewValue.Position = up;
}
else
{
if(Buff)
{
for(UINT z=0;z<15;z++)
{
if(character->MagicStatus[z].Buff==0)
{
NewValue.Position = z;
break;
}
}
if(NewValue.Position==0xff)
return NewValue;
NormalValue = CurrentValue;
}
}
if (!Status)
{
if( down!=0xff)
{
DownValue = character->MagicStatus[down].Value;
if( NormalValue!=0)
NormalValue += character->MagicStatus[down].Value;
else
NormalValue = CurrentValue + character->MagicStatus[up].Value;
if(!Buff)
NewValue.Position = down;
}
else
{
if(!Buff)
{
for(UINT z=15;z<30;z++)
{
if(character->MagicStatus[z].Buff==0)
{
NewValue.Position = z;
break;
}
}
if(NewValue.Position==0xff)
return NewValue;
NormalValue = CurrentValue;
}
}
}
else if ( down!=0xff )
{
NewValue.Position = down;
}
else
{
for(UINT z=15;z<30;z++)
{
if(character->MagicStatus[z].Buff==0)
{
NewValue.Position = z;
break;
}
}
if(NewValue.Position==0xff)
return NewValue;
NormalValue = CurrentValue;
}
if( thisskill->value2[i] > 0 )
{
Value = NormalValue * thisskill->value2[i] / 100;
}
if( thisskill->value1[i] > 0 )
{
Value += thisskill->value1[i];
if(thisskill->buff[i]==A_DASH || thisskill->buff[i]==MOV_SPEED) Value += (Evalue-15)/10;
else Value += (Evalue-15)/32;
}
if(Buff)
{
if( Value+CurrentValue-DownValue>=CurrentValue )
{
CurrentValue = NormalValue - DownValue + Value;
}
else
{
CurrentValue = 0;
}
}
else
{
CurrentValue = NormalValue + UpValue - Value;
}
NewValue.NewValue = CurrentValue;
NewValue.Value = Value;
return NewValue;
}
// Build Buffs to Show
unsigned int CWorldServer::BuildBuffs( CCharacter* character )
{
BYTE buff1 = 0;
BYTE buff2 = 0;
BYTE buff3 = 0;
BYTE buff4 = 0;
//Build Debuffs and Buffs
//Up
if(character->Status->Attack_up != 0xff)//A_ATTACK:
buff2 += ATTACK_UP;
if(character->Status->Defense_up != 0xff)//A_DEFENSE:
buff2 += DEFENSE_UP;
if(character->Status->Accury_up != 0xff)//A_ACCUR:
buff3 += HITRATE_UP;
if(character->Status->Dash_up != 0xff)//A_DASH:
buff1 += DASH_UP;
if(character->Status->Haste_up != 0xff)//A_HASTE:
buff2 += HASTE_UP;
if(character->Status->HP_up != 0xff)//A_HP:
buff1 += HP_UP;
if(character->Status->MP_up != 0xff)//A_MP:
buff1 += MP_UP;
if(character->Status->Critical_up != 0xff)//A_CRITICAL:
buff3 += CRITICAL_UP;
if(character->Status->Dodge_up != 0xff)//A_DODGE:
buff1 += DODGE_UP;
//Down
if(character->Status->Attack_down != 0xff) // A_ATTACK:
buff2 += ATTACK_DOWN;
if(character->Status->Defense_down != 0xff)//A_DEFENSE:
buff2 += DEFENSE_DOWN;
if(character->Status->Accury_down != 0xff)//A_ACCUR:
buff3 += HITRATE_DOWN;
if(character->Status->Dash_down != 0xff)//A_DASH:
buff1 += DASH_DOWN;
if(character->Status->Haste_down != 0xff)//A_HASTE:
buff2 += HASTE_DOWN;
if(character->Status->HP_down != 0xff)//A_HP:
buff1 += 0;
if(character->Status->MP_down != 0xff)//A_MP:
buff1 += 0;
if(character->Status->Critical_down != 0xff)//A_CRITICAL:
buff3 += CRITICAL_DOWN;
if(character->IsSummon( ))
buff4 += SUMMON;
if(character->Status->Stun != 0xff)
buff4+= STUN;
if(character->Status->Poison != 0xff)
buff1+= POISED;
if(character->Status->Mute != 0xff)
buff3+= MUTED;
return (buff1 * 0x01) + (buff2 * 0x100 ) + (buff3 * 0x10000) + (buff4 * 0x1000000);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -