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

📄 buff.cpp.svn-base

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