📄 buff.cpp.svn-base
字号:
/*
Rose Online Server Emulator
Copyright (C) 2006,2007 OSRose Team http://www.osrose.net
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
depeloped with Main erose/hrose source server + some change from the original eich source
*/
#include "worldserver.h"
// Add Player buffs
bool CWorldServer::AddBuffs( CSkills* thisskill, CCharacter* character, int Evalue )
{
bool bflag = false;
for(unsigned int i=0;i<3;i++)
{
if(thisskill->buff[i]!=0)
{
bflag = CheckABuffs( thisskill, character, Evalue, i );
}
}
return bflag;
}
// Add Player DeBuffs
bool CWorldServer::AddDeBuffs( CSkills* thisskill, CCharacter* character, int Evalue )
{
bool bflag = false;
for(unsigned int i=0;i<3;i++)
{
if(thisskill->buff[i]!=0)
{
bflag = CheckDBuffs( thisskill, character, Evalue, i );
}
}
return bflag;
}
// Add Player Dbuffs
bool CWorldServer::AddBuffs( CSkills* thisskill, CCharacter* character, int Evalue, bool bflag )
{
if(thisskill->buff[0]!=0)
{
CheckABuffs( thisskill, character, Evalue, 0 );
}
if(thisskill->buff[1]!=0 && thisskill->buff[2]==0)
{
CheckDBuffs( thisskill, character, Evalue, 1 );
}
else
{
CheckABuffs( thisskill, character, Evalue, 1 );
}
if(thisskill->buff[2]!=0)
{
CheckDBuffs( thisskill, character, Evalue, 2 );
}
return true;
}
// Add DeBuffs
bool CWorldServer::CheckABuffs( CSkills* thisskill, CCharacter* character, int Evalue ,int i)
{
bool bflag = false;
switch( thisskill->buff[i] )
{
case A_ATTACK:
{
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->Attack_up,
character->Status->Attack_down,
character->Stats->Attack_Power, true );
if(BuffValue.NewValue!=0)
{
UINT j = BuffValue.Position;
character->Stats->Attack_Power = BuffValue.NewValue;
character->Status->Attack_up = 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_DEFENSE:
{
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->Defense_up,
character->Status->Defense_down,
character->Stats->Defense, true );
if(BuffValue.NewValue!=0)
{
UINT j = BuffValue.Position;
character->Stats->Defense = BuffValue.NewValue;
character->Status->Defense_up = 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_ACCUR:
{
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->Accury_up,
character->Status->Accury_down,
character->Stats->Accury, true );
if(BuffValue.NewValue!=0)
{
UINT j = BuffValue.Position;
character->Stats->Accury = BuffValue.NewValue;
character->Status->Accury_up = 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_MRESIST:
{
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->Magic_Defense_up,
character->Status->Magic_Defense_down,
character->Stats->Magic_Defense, true );
if(BuffValue.NewValue!=0)
{
UINT j = BuffValue.Position;
character->Stats->Magic_Defense = BuffValue.NewValue;
character->Status->Magic_Defense_up = 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_DODGE:
{
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->Dodge_up,
character->Status->Dodge_down,
character->Stats->Dodge, true );
if(BuffValue.NewValue!=0)
{
UINT j = BuffValue.Position;
character->Stats->Dodge = BuffValue.NewValue;
character->Status->Dodge_up = 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_DASH:
{
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->Dash_up,
character->Status->Dash_down,
character->Stats->Move_Speed, true );
if(BuffValue.NewValue!=0)
{
UINT j = BuffValue.Position;
character->Stats->Move_Speed = BuffValue.NewValue;
character->Status->Dash_up = 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_HASTE:
{
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->Haste_up,
character->Status->Haste_down,
(UINT)character->Stats->Attack_Speed, true );
if(BuffValue.NewValue!=0)
{
UINT j = BuffValue.Position;
character->Stats->Attack_Speed = BuffValue.NewValue;
character->Status->Haste_up = 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_CRITICAL:
{
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->Critical_up,
character->Status->Critical_down,
character->Stats->Critical, true );
if(BuffValue.NewValue!=0)
{
UINT j = BuffValue.Position;
character->Stats->Critical = BuffValue.NewValue;
character->Status->Critical_up = 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_HP:
case A_MAX_HP:
{
if(thisskill->duration<=0)//is heal
{
if(character->Stats->HP<=0)
return true;
character->Stats->HP += (long int)thisskill->value1[i] + Evalue - 8;
if(character->Stats->HP > character->Stats->MaxHP )
character->Stats->HP = character->Stats->MaxHP;
return true;
}
CBValue BuffValue = GetBuffValue( thisskill, character, Evalue, i,
character->Status->HP_up,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -