📄 rareeffectmgr.cpp
字号:
// RareEffectMgr.cpp: implementation of the CRareEffectMgr class.
//
//////////////////////////////////////////////////////////////////////
#include "..\stdafx.h"
#include "NationSys_Define.h"
#include "CItem.h"
#include "Scrp_exe.h"
#include "op_magic.h"
#include "mysql.h"
#include "SymbolItemMgr.h" // soto-1.02
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRareEffectMgr RareEM;
CRareEffectMgr::CRareEffectMgr()
{
}
CRareEffectMgr::~CRareEffectMgr()
{
}
int CRareEffectMgr::CorrectByStaticRare(void *a, void *d, int &iDmg)
{
CHARLIST *Caster = (CHARLIST*)a;
CHARLIST *Target = (CHARLIST*)d;
if(!Caster) {return 0;}
if(!Target) {return 0;}
if(!Caster->IsPlayer()) {return 0;}//敲饭捞绢啊 酒聪搁 利侩 阂啊
if(!Target->IsPlayer()) {return 0;}//敲饭捞绢啊 酒聪搁 利侩 阂啊
//笛促 混酒 乐绢具(hp啊 0捞惑 捞绢具) 龋免 等促
if( Caster->IsDead() || Target->IsDead() || !iDmg) { return 0; }//笛嫡俊 窍唱扼档 磷菌栏搁 //单固瘤啊 绝栏搁 (固胶啊 车栏搁)
const int iTempDmg = iDmg;
bool bManaSend = false, bHpSend = false, bHungrySend = false;
////////////////////////////////////////////////////////////////////////////////////////////////
// 锭赴磊俊 狼茄 贸府
{
if( Target->Spell == WIZARD_SPELL && (0 < Target->Mana) )//付唱啊 乐绢具 化绰促
{
const int nWitch = __min(iTempDmg * GetStaticRareWitch(Caster->StaticRare) / 1000 ,Caster->ManaMax-Caster->Mana);//单固瘤俊 厚肥 秦辑
const int nDevil = __min(Target->Mana* GetStaticRareDevil(Caster->StaticRare) / 100 ,Caster->ManaMax-Caster->Mana);
if (nWitch > 0 && rand()%101 < RARE_MP_STEAL_RAND)
{
//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
//软荐 且 荐 乐阑 锭
// if(nWitch < Target->Mana )//&& Caster->Mana < Caster->ManaMax )
{
Target->DecMana(nWitch);
Caster->IncMana(nWitch);
bManaSend = true;
}
}
if (nDevil > 0 && rand()%101 < RARE_MP_STEAL_RAND)
{
// if(nDevil < Target->Mana )//&& Caster->Mana < Caster->ManaMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
{
Target->DecMana(nDevil);
Caster->IncMana(nDevil);
bManaSend = true;
}
}
}
if( Target->Spell == PRIEST_SPELL && (0 < Target->Mana) )//付唱啊 乐绢具 化绰促
{
const int nEvil = __min(iTempDmg * GetStaticRareEvil(Caster->StaticRare) /1000,Caster->ManaMax-Caster->Mana);
const int nSatan = __min(Target->Mana * GetStaticRareSatan(Caster->StaticRare) /100,,Caster->ManaMax-Caster->Mana);
if (nEvil > 0 && rand()%101 < RARE_DIVINE_STEAL_RAND)
{
// if(nEvil < Target->Mana )//&& Caster->Mana < Caster->ManaMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
{
Target->DecMana(nEvil);
Caster->IncMana(nEvil);
bManaSend = true;
}
}
if (nSatan > 0 && rand()%101 < RARE_DIVINE_STEAL_RAND)
{
// if(nSatan < Target->Mana )//&& Caster->Mana < Caster->ManaMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
{
Target->DecMana(nSatan);
Caster->IncMana(nSatan);
bManaSend = true;
}
}
}
if( 0 < Target->Hp )//眉仿捞 乐绢具 化绰促
{ //HP 化绰 加己
const int nDesire = __min(iTempDmg *GetStaticRareDesire(Caster->StaticRare) /100, Caster->HpMax-Caster->Hp );
const int nRobber = __min(Target->Hp *GetStaticRareRobber(Caster->StaticRare) /100, Caster->HpMax-Caster->Hp );
if (nDesire > 0 && rand()%101 < RARE_HP_STEAL_RAND)
{
// if(nDesire < Target->Hp )//&& Caster->Hp < Caster->HpMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
{
Target->DecLife(nDesire);
Caster->IncLife(nDesire);
bHpSend = true;
}
}
if (nRobber > 0 && rand()%101 < RARE_HP_STEAL_RAND)
{
// if(nRobber < Target->Hp )//&& Caster->Hp < Caster->HpMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
{
Target->DecLife(nRobber);
Caster->IncLife(nRobber);
bHpSend = true;
}
}
}
if( 0 < Target->Hungry )//硅绊悄捞 乐绢具 化绰促
{//硅绊悄 霸捞瘤
const int nWeary = __min(iTempDmg *GetStaticRareWeary(Caster->StaticRare) /1000,Caster->HungryMax - Caster->Hungry);
const int nFatigue = __min(Target->Hungry*GetStaticRareFatigue(Caster->StaticRare)/100,Caster->HungryMax - Caster->Hungry);
if (nWeary > 0 && rand()%101 < RARE_HUNGRY_STEAL_RAND)
{
// if(nWeary < Target->Hungry )//&& Caster->Hungry < Caster->HungryMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
{
Target->DecHungry(nWeary);
Caster->IncHungry(nWeary);
bHungrySend = true;
}
}
if (nFatigue > 0 && rand()%101 < RARE_HUNGRY_STEAL_RAND)
{
// if(nFatigue < Target->Hungry )//&& Caster->Hungry < Caster->HungryMax)//化阑 剧捞 利捞 啊柳芭 焊促 利阑锭
{
Target->DecHungry(nFatigue);
Caster->IncHungry(nFatigue);
bHungrySend = true;
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
// 嘎篮磊俊 狼茄 贸府 (馆拜捞骨肺 Caster狼 蔼阑 临咯 霖促)
{
// if( 0 < Caster->Hp )//&& Caster->Spell == PRIEST_SPELL)
{ //馆拜
// const int nCounterattack = (Caster->Hp*GetStaticRareCounterattack(Target->StaticRare))/100;
const int nCounterattack = Caster->HpMax * GetStaticRareCounterattack(Target->StaticRare)/100;//HpMax俊辑
const int nStrike = (iTempDmg * GetStaticRareStrike(Target->StaticRare))/100;
if (nCounterattack > 0 && rand()%101 < RARE_COUNTERATTCK_RAND)
{
// if(nCounterattack < Caster->Hp )//馆拜樊捞 hp 焊促 利阑锭//锭赴仇
{
Caster->DecLife(nCounterattack);//锭赴仇捞 别捞绊
// Target->IncLife(nCounterattack);
bHpSend = true;
}
}
if (nStrike > 0 && rand()%101 < RARE_COUNTERATTCK_RAND)
{
// if(nStrike < Caster->Hp )//馆拜樊捞 hp 焊促 利阑锭//锭赴仇
{
Caster->DecLife(nStrike);
// Target->IncLife(nStrike);
bHpSend = true;
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
// 焊郴扁
{
if(bHpSend)//hp率俊 函拳啊 乐绰单 捞芭 锭巩俊 磷捞瘤 臼霸 窍扁 困秦辑
{
if( !Caster->Hp ) { Caster->Hp = 1; }
if( !Target->Hp ) { Target->Hp = 1; }
Caster->SendCharInfoBasic( HP, Caster->Hp );//020704 lsw
Target->SendCharInfoBasic( HP, Target->Hp );//020704 lsw
}
if(bManaSend)
{
Caster->SendCharInfoBasic( MP, Caster->Mana );//020704 lsw
Target->SendCharInfoBasic( MP, Target->Mana );//020704 lsw
}
if(bHungrySend)
{
Caster->SendCharInfoBasic( SP, Caster->Hungry );//020704 lsw
Target->SendCharInfoBasic( SP, Target->Hungry );//020704 lsw
}
}
return 0;
}
void CRareEffectMgr::ClearDynamicRareEffect(void* ch)
{
CHARLIST *caster = (CHARLIST*)ch;
memset( &(caster->DynamicRare), 0,sizeof(DYNAMICRAREEFFECT));
return;
}
void CRareEffectMgr::ClearRareEffect(void* ch)
{
CHARLIST *caster = (CHARLIST*)ch;
memset( &(caster->StaticRare), 0,sizeof(STATICRAREEFFECT));
return;
}
int CRareEffectMgr::ResetRareEffect(void* ch)//咯扁俊.. 馒侩 牢亥 捞繁 饭绢甫 持绢 临 荐啊 乐促 .
{
CHARLIST *caster = (CHARLIST*)ch;
bool bCanViewGhost =false;
bool bCanViewTrap =false;
bool bCanViewBomb =false;
////////////////////////////////////////////////////////////////////////////////////////////////////
// 努府绢 傈俊 贸府 且巴
if(GetStaticRareGhost(caster->StaticRare)){bCanViewGhost = true;}//杭荐 绝瘤父 饭绢锭巩俊 夯促
if(GetStaticRareLandmine(caster->StaticRare)){bCanViewBomb = true;}
if(GetStaticRareTraping(caster->StaticRare)){bCanViewTrap = true;}
////////////////////////////////////////////////////////////////////////////////////////////////////
ClearRareEffect(caster);//努府绢
////////////////////////////////////////////////////////////////////////////////////////////////////
// 馒侩 窍绊 乐绰 饭绢 捞棋飘
{
for(int i = 0; i <ITEM_EQUIP_MAX; i++)
{
const LPRareMain pRare = (LPRareMain)&caster->equip[i].attr[IATTR_RARE_MAIN];
const int iGrade = pRare->grade;
if( !iGrade || pRare->IsDynamicRare){continue;}//扁瓷 酒捞袍 嘿篮芭
const int iHighLv = pRare->iHighLevel;
const int iPri = pRare->soksung1;
const int iSec = pRare->soksung2;
const int iThi = pRare->soksung3;
switch(iHighLv)
{
case H_LV_NO_HIGH_ITEM://窍捞唱 焊烹 饭绢
{
ApplyStaticRareEffect(caster->StaticRare, iPri, iGrade);
ApplyStaticRareEffect(caster->StaticRare, iSec, iGrade);
ApplyStaticRareEffect(caster->StaticRare, iThi, iGrade);
}break;
case H_LV_HIGH_ITEM://窍捞
case H_LV_LEGEND_ITEM://饭傈靛 1
{//窍捞唱 饭傈靛绰 霉 加己阑 利侩 矫挪促
ApplyStaticRareEffect(caster->StaticRare, iPri, iGrade);
}break;
default:{}break;
}//switch(iHighLv)
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// 何措饭绢
const int iSqaudGrade = caster->SquadRare.grade;
if(iSqaudGrade)
{
const int iSqaudPriType = caster->SquadRare.soksung1;
const int iSqaudSecType = caster->SquadRare.soksung2;
const int iSqaudThiType = caster->SquadRare.soksung3;
ApplyStaticRareEffect(caster->StaticRare, iSqaudPriType , iSqaudGrade);
ApplyStaticRareEffect(caster->StaticRare, iSqaudSecType , iSqaudGrade);
ApplyStaticRareEffect(caster->StaticRare, iSqaudThiType , iSqaudGrade);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//饭傈靛 眉农
{
int aLegendGNo[ITEM_EQUIP_MAX] = {0,};
int aLegendGIndex[ITEM_EQUIP_MAX] = {0,};
for(int i = 0; i <ITEM_EQUIP_MAX; i++)
{
const LPRareMain pRare = (LPRareMain)&caster->equip[i].attr[IATTR_RARE_MAIN];
if( H_LV_LEGEND_ITEM != pRare->iHighLevel){continue;}//饭傈靛啊 酒匆 版快
aLegendGNo[i] = pRare->soksung2;
aLegendGIndex[i]= pRare->soksung3;
}
for(i = 0; i <ITEM_EQUIP_MAX; i++)//眉农秦辑 瞒绊 乐绰霸 饭傈靛 酒捞袍 捞扼搁
{
const int iGNo = aLegendGNo[i];
const int iGIndex = aLegendGIndex[i];
if(!iGNo || !iGIndex){continue;}
const int iNeeds = m_aItemLegend[iGNo].aSub[iGIndex].iNeeds;
int iLegendResult = 0;
for(int aa = 0; aa <ITEM_EQUIP_MAX; aa++)// needs 眉农饶 促矫 8俺甫 八祸秦辑 悸飘啊 登菌绰瘤 夯促
{
if( aLegendGNo[aa] == iGNo //郴 公扁啊 iGNo啊 鞍绊
&& aLegendGIndex[aa] == iGIndex)//牢郸胶档 老摹 茄促搁
{
int iCmpKey = 0;
switch(aa)
{
case WT_WEAPON: {iCmpKey = LEGEND_NEED_WEAPON;}break;
case WT_SHIELD: {iCmpKey = LEGEND_NEED_SHIELD;}break;
case WT_HELMET: {iCmpKey = LEGEND_NEED_HELMET;}break;
case WT_ARMOR: {iCmpKey = LEGEND_NEED_ARMOR;}break;
case WT_NECK: {iCmpKey = LEGEND_NEED_NECK;}break;
case WT_SHOES: {iCmpKey = LEGEND_NEED_SHOES;}break;
case WT_UNIQUE1:{iCmpKey = LEGEND_NEED_UNIQUE;}break;
case WT_UNIQUE2:{iCmpKey = LEGEND_NEED_UNIQUE;}break;
}
if( iNeeds & iCmpKey)//泅犁 聪靛啊 aa甫 夸备 窍搁
{
iLegendResult |= iCmpKey;//饭傈靛俊 悸泼阑 沁促
aLegendGNo[aa] = 0;//吝汗 眉农啊 救登霸 窍扁 困秦辑 瘤款促
aLegendGIndex[aa] = 0;//吝汗 眉农啊 救登霸 窍扁 困秦辑 瘤款促
}
}
}//for(int aa = 0; aa <ITEM_EQUIP_MAX; aa++)
if(iNeeds == iLegendResult)
{//促 谩匙.. 甭.
for(int a= 0; MAX_ITEM_LEGEND_SUB_BONUS_MAX>a;a++)
{
const int iBonus = m_aItemLegend[iGNo].aSub[iGIndex].aiBonus[a];//焊呈胶 1狼 巴阑 盲款促
for(int b = 0; MAX_ITEM_LEGEND_BONUS_KIND>b;b++)
{
ApplyStaticRareEffect(
caster->StaticRare,
m_aLegendBonus[iBonus].aiKind[b],
m_aLegendBonus[iBonus].aiGrade[b]);
}
}
}//(iNeeds == iLegendResult)
}//for(i = 0; i <ITEM_EQUIP_MAX; i++)//眉农秦辑 瞒绊 乐绰霸 饭傈靛 酒捞袍 捞扼搁
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// 鉴埃 利栏肺 悸泼 登绢具 窍绰巴
if( bCanViewGhost )//酒鳖 杭 荐 乐菌菌促
{
if(!GetStaticRareGhost(caster->StaticRare))//瘤陛篮 绊胶飘 饭绢啊 绝促
{//弊贰辑 给夯促
SkillMgr.SetCanViewGhost(caster,1);//郴何 俊辑 bCanViewGhost甫 false肺
}
}
else
{
if(GetStaticRareGhost(caster->StaticRare))//瘤陛篮 绊胶飘 饭绢啊 绝促
{
SkillMgr.SetCanViewGhost(caster,5);//郴何 俊辑 bCanViewGhost甫 true肺
}
}
if( bCanViewBomb )
{
if(!GetStaticRareLandmine(caster->StaticRare))//瘤陛篮 杭 荐 绝促
{
SkillMgr.SetCanViewBomb(caster,0);
}
}
else //酒鳖 给 好促
{
if(GetStaticRareLandmine(caster->StaticRare))//瘤陛篮 杭 荐 乐促
{
SkillMgr.SetCanViewBomb(caster,5);
}
}
if( bCanViewTrap )
{
if(GetStaticRareTraping(caster->StaticRare))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -