⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buff.cpp.svn-base

📁 ROSE的源代码。了解的自己研究,编译通过
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
/*
    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 + -