📄 skill_lsw.cpp
字号:
iIsCracked = 1;//MyLog(0,"诀臂 坷扁绰 吭绰单 钧蹲茄芭 酒捞袍父 哗狙绊 昏力..");
}
}
if(t->GetRbutton() ==DIVIDE_ITEM)
{
if( DIVIDE_ITEM_UPGRDEABLE_MIN > i->attr[IATTR_DURATION]
|| DIVIDE_ITEM_UPGRDEABLE_MAX < i->attr[IATTR_DURATION])
{
iIsCracked = 1;
}
max += i->attr[IATTR_DURATION];
}
else
{
GetItemDuration( *i, nowtemp, maxtemp);
now += nowtemp;
max += maxtemp;
}
resourcelimit[iSourceItemMuch] = i->attr[IATTR_LIMIT] ;
iSourceItemMuch++;
}
for(int addcount = 0;addcount <4;addcount++)
{
if(AddItem[addcount])//酒捞袍 逞滚啊 乐栏搁
{
if( AddItem[addcount] == i->item_no )
{
if(!a[addcount])
{
a[addcount] = i->item_no;
al[addcount]= i->attr[IATTR_LIMIT];
HaveResource[addcount] = 1;
}
}
}
else// AddItem //夸备 酒捞袍捞 绝扁 锭巩俊 府家胶 乐绰吧肺 眉农
{
HaveResource[addcount] = 1;
}
}
::SendItemEventLog( i, cn, 0, SILT_RESOURCE_BY_SKILL, 1); //YGI acer
::DeleteItem( i );//酒捞袍捞 乐菌扁 锭巩俊 瘤款促
}
}
if(iIsCracked){why |= 0x0001;}
if(!iSourceItemMuch ){why |= 0x0002;}
if( !HaveResource[0] || !HaveResource[1]
|| !HaveResource[2] || !HaveResource[3])
{
why |= 0x0004;
}//夸备 窍绰 酒捞袍捞 绝促 (AddItem 捞 0 捞搁 磊悼栏肺 1眉农 窍聪鳖 || 甫 敬促
if(!ItemGrade[TempSokSung.grade+1].iAble)
{//弥措肺 诀弊饭捞靛 啊瓷茄 殿鞭牢啊?
why |= 0x0008;//诀臂 阂啊
}
else
{//殿鞭 诀弊饭捞靛啊 啊瓷
//酒捞袍 逞滚客 俺荐甫 啊瘤绊
const int iItemKind = t->GetItemKind();
if (MAX_ITEM_MUTANT_KIND < iItemKind )
{
why |= 0x1000;//酒捞袍 墨牢靛 抛捞喉 坷滚 曼炼
}
int iKind = ItemMutantKind[iItemKind].upgrade_type ;
if( !iKind )
{
iKind = 1;//快急 皋葛府 坷滚 曼炼 救窍霸 窍扁 困秦辑 1肺 霖促
why |= 0x0100;
}//诀弊饭捞靛 救登绰 酒捞袍 墨牢靛促
const int PerpectMuch = ItemGrade[TempSokSung.grade+1].ResourceAmount[iKind-1];//1 老锭父 啊瓷 窍聪鳖 1阑 哗搁 0阑 牢郸胶肺 镜 荐 乐促
if( PerpectMuch <= 0)
{//夸备 肮荐啊 绝促..
why |= 0x0010;
}
if( PerpectMuch )
{//己傍伏阑 惶绰促
iSuccessRate = float(iSourceItemMuch)/float(PerpectMuch);
iSuccessRate *= 100;
if(iSuccessRate >= 100)
{
iSuccessRate = 100;
}
else
{
iSuccessRate /= 2;//肮荐啊 葛磊扼搁 1/5 肺 临咯 滚赴促
}
}
}
//菩哦 焊尘 霖厚
t_packet packet;
packet.h.header.type = CMD_SKILL_RARE_UPGRADE_RESULT;
packet.h.header.size = sizeof( t_SkillRareUpgradeResult);
ZeroMemory(&packet.u.SkillRareUpgradeResult,sizeof( t_SkillRareUpgradeResult));//皋葛府 檬扁拳 登菌澜
const int iNowSuccess = (rand()%100);
packet.u.SkillRareUpgradeResult.iSuccess = iNowSuccess;
if( iSuccessRate > iNowSuccess)
{ //己傍沁栏搁 甸绢哎 贸府
if (!why)//角菩 捞蜡啊 悸泼 登瘤 臼酒具 临 荐 乐促
{
if ( DIVIDE_ITEM == t->GetRbutton())
{
resultdur = (float)max/(float)iSourceItemMuch * (float)(1.100);
}
else
{
now = (float)now/(float)iSourceItemMuch * (float)(1.100);
max = (float)max/(float)iSourceItemMuch * (float)(1.100);
if(!now) {now = 1;}//捞凡 版快啊 乐衬??
if(!max) {max = 1;}
resultdur = MAKELONG( now, max);
}
if( ItemMgr.MakeRareAttr(iResultSok ,TempSokSung.grade+1,TempSokSung.soksung1,0,0,0,bIsDynamicRare))
{
SourceItem.attr[IATTR_RARE_MAIN] = iResultSok;
SourceItem.attr[IATTR_DURATION] = resultdur;
}
else
{
why |= 0x2000;//饭绢 炼扒捞 粱 捞惑茄啊焊促
}
packet.u.SkillRareUpgradeResult.iSuccess = 100 ;
packet.u.SkillRareUpgradeResult.SourceItem = SourceItem ;
if(!resultdur )
{//郴备档啊 绝绢??
why |= 0x0040;
}
int a,b,c;
if(!why)// 茄锅歹 巩力 绝捞 吭促搁
{
if( ::SearchInv( ch->inv, a, b, c ))//某腐磐 牢亥配府俊 酒捞袍阑 持绢霖促
{
POS pos;
::SetItemPos( INV, a, b, c, &pos );
ch->inv[a][b][c] = SourceItem;
::SendServerEachItem( &pos , &SourceItem , ch->GetServerID());
t_packet bbspacket;
//傈眉 傍瘤
bbspacket.h.header.type = CMD_RARE_UPGRADE_BBS_MAP_TO_MAP;
::memcpy( bbspacket.u.RareUpgradeBBSMapToMap.name, ch->Name,20);
bbspacket.h.header.size = sizeof(t_RareUpgradeBBSMapToMap );
bbspacket.u.RareUpgradeBBSMapToMap.Item = SourceItem ;
::SendNationPacket( &bbspacket, ch->name_status.nation );
bbspacket.h.header.type = CMD_RARE_UPGRADE_BBS;
g_pUserManager->SendPacket(&bbspacket); // CSD-CN-031213
}
else
{
why |= 0x0080;//磊府啊 绝窜促.. 富捞 登唱..
}
}
}
}
else
{
why |=0x0020;//己傍伏 锭巩俊 角菩
}
Send_RareItemMakeLog( cn,SourceItem.item_no,0,
TempSokSung.grade+1,TempSokSung.soksung1,TempSokSung.soksung2,TempSokSung.soksung3,a[0],al[0],a[1],al[1],SourceItem.attr[IATTR_LIMIT],now,max,why,2002,
resourcelimit[0],resourcelimit[1],resourcelimit[2],
resourcelimit[3],resourcelimit[4],resourcelimit[5]);//搬苞 扁废
::QueuePacket(connections, cn, &packet, 1);
return;
}
void RecvCMD_SKILL_MASTER_MULTI_RARE_MAKE(const int cn, t_packet *p)
{
t_SkillMasterMultiRareMake *pSMMRM = &p->u.Hwoa.rang.SMMultiRareMake;
LPCHARLIST ch = ::CheckServerId(cn);
if(!ch){return;}
const int iSkillNo = pSMMRM->iSkillNo;
const int iNowSkillNo = GMMgr.IsSkillMaster(ch);
if(!iNowSkillNo){return;}//扁己 酒聪促//罐疽绰单 促福芭唱 窍促
if (!ch->IsPayedUser())
{
return;
}
//酒捞袍 眉农
ITEMATTR RecvSrcItem[2]; //罐篮芭
RecvSrcItem[0]= pSMMRM->MRS.SrcData[0].attr;
RecvSrcItem[1]= pSMMRM->MRS.SrcData[1].attr;
ITEMATTR NowSrcItem[2];
NowSrcItem[0] = *GetItemByPOS(ch,pSMMRM->MRS.SrcData[0].pos);
NowSrcItem[1] = *GetItemByPOS(ch,pSMMRM->MRS.SrcData[1].pos);
if(memcmp(RecvSrcItem,NowSrcItem,sizeof(ItemAttr))){return;}//辑滚客 努扼捞攫飘啊 促辅聪促.
if(RecvSrcItem[0].item_no != RecvSrcItem[0].item_no){return;}//酒捞袍 锅龋啊 促福搁 钦磨 荐 绝嚼聪促.
const int iResultItemNo = pSMMRM->MRS.SrcData[0].attr.item_no;
CItem * t = ItemUnit( iResultItemNo);
if( !t ){return;}
if(DIVIDE_ITEM == t->GetRbutton())
{
const int iPriCt = NowSrcItem[0].attr[IATTR_MUCH];
const int iSecCt = NowSrcItem[1].attr[IATTR_MUCH];
if( DIVIDE_ITEM_UPGRDEABLE_MIN > iPriCt
|| DIVIDE_ITEM_UPGRDEABLE_MAX < iPriCt
|| DIVIDE_ITEM_UPGRDEABLE_MIN > iSecCt
|| DIVIDE_ITEM_UPGRDEABLE_MAX < iSecCt )
{
::OutMessage(cn,2,266);//021120 lsw
return;
}
}
RareMain RecvRare1 = *(RareMain*)&NowSrcItem[0].attr[IATTR_RARE_MAIN];
RareMain RecvRare2 = *(RareMain*)&NowSrcItem[1].attr[IATTR_RARE_MAIN];
if(RecvRare1.soksung2 ||RecvRare1.soksung3
|| RecvRare2.soksung2 ||RecvRare2.soksung3)
{
::OutMessage(cn,2,511);//021120 lsw
return;
}
if(RecvRare1.soksung1 == RecvRare2.soksung1)
{
::OutMessage(cn,2,890);//021120 lsw
return;
}
const int iGrade = (RecvRare1.grade+RecvRare2.grade)/2;//乞闭
if( 5 < iGrade )
{
::OutMessage(cn,2,881);//021212 lsw
return;
}
DWORD resultdur =0;
if( DIVIDE_ITEM == t->GetRbutton())
{
resultdur = (RecvSrcItem[0].attr[IATTR_MUCH]+RecvSrcItem[1].attr[IATTR_MUCH])*(float)(1.100)/2;
}
else
{
WORD max1= 0, now1= 0;
WORD max2= 0, now2= 0;
::GetItemDuration( RecvSrcItem[0], now1,max1);
::GetItemDuration( RecvSrcItem[1], now2,max2);
WORD now = (float)(now1+now2)*(float)(1.100)/2;
WORD max = (float)(max1+max2)*(float)(1.100)/2;
if(!now) {now = 1;}//捞凡 版快啊 乐衬??
if(!max) {max = 1;}
resultdur = MAKELONG( now, max);
}
ItemAttr ResultItem = ItemMgr.GenerateItem(iResultItemNo);//瘤鞭瞪 酒捞袍 悸泼
ResultItem.attr[IATTR_MUCH] = resultdur;//郴备档 悸泼
ItemMgr.MakeRareAttr(ResultItem.attr[IATTR_RARE_MAIN],iGrade,RecvRare1.soksung1,RecvRare2.soksung1,0,0,0);//钢萍 饭绢 父甸菌促
bool iIsHaveResource = true;
const ITEMMULTIRARE IMR = RareEM.GetIMR(iGrade);
{//犁丰狼 肮荐 眉农
for(int xx= 0;MAX_IMR_FIELD_CT>xx;xx++)
{//犁丰 眉农 茄促
int iNationAddCt = 0;
switch(ch->name_status.nation)
{
case NW_BY:{if(xx ==0){iNationAddCt = IMR.iAddCt;}}break;
case NW_ZY:{if(xx ==1){iNationAddCt = IMR.iAddCt;}}break;
case NW_YL:{if(xx ==2){iNationAddCt = IMR.iAddCt;}}break;
}
const int iNeedItemNo = IMR.aItemNo[xx];
const int iNeedItemCt = IMR.aItemCt[xx] + iNationAddCt;
if(iNeedItemNo && iNeedItemCt)
{
CItem *t = ::ItemUnit( iNeedItemNo );
if(!t){continue;}
const int iNowCt = ::CheckInventory(ch, iNeedItemNo, iNeedItemCt);//郴啊 盔茄 蔼俊辑 泅犁 搬苞甫 林聪鳖 -蔼捞 唱棵 荐 乐促
if(0 > iNowCt)//肮荐 葛磊扼匙 ぱぱ;.
{
iIsHaveResource = false;
}
}
}
}
if(!iIsHaveResource)
{
::MyLog(1,"RecvCMD_SKILL_MASTER_MULTI_RARE_MAKE ,iIsHaveResource Check Error");
return;
}//犁丰 葛磊扼 摹况扼
{//犁丰甫 昏力
POS &pos1 = pSMMRM->MRS.SrcData[0].pos;
ItemAttr *pItem1 = GetItemByPOS(ch,pos1);
::SendItemEventLog( pItem1, ch->GetServerID(), 0, SILT_MAKE_MULTI_RARE_RESOURCE, 1 ); //021209 lsw
::DeleteItem(pItem1);
::SendServerEachItem( &pos1, pItem1,ch->GetServerID());//焊郴扁
POS &pos2 = pSMMRM->MRS.SrcData[1].pos;
ItemAttr *pItem2 = GetItemByPOS(ch,pos2);
::SendItemEventLog( pItem2, ch->GetServerID(), 0, SILT_MAKE_MULTI_RARE_RESOURCE, 1 ); //021209 lsw
::DeleteItem(pItem2);
::SendServerEachItem( &pos2, pItem2,ch->GetServerID());//焊郴扁
for(int xx= 0;MAX_IMR_FIELD_CT>xx;xx++)//犁丰 猾促
{
int iNationAddCt = 0;
switch(ch->name_status.nation)
{
case NW_BY:{if(xx ==0){iNationAddCt = IMR.iAddCt;}}break;
case NW_ZY:{if(xx ==1){iNationAddCt = IMR.iAddCt;}}break;
case NW_YL:{if(xx ==2){iNationAddCt = IMR.iAddCt;}}break;
}
const int iNeedItemNo = IMR.aItemNo[xx];
const int iNeedItemCt = IMR.aItemCt[xx] + iNationAddCt;
if(iNeedItemNo && iNeedItemCt)
{
CItem *t = ItemUnit( iNeedItemNo );
if(!t){continue;}
const int iNowCt = ::CheckInventory(ch,iNeedItemNo,iNeedItemCt);//郴啊 盔茄 蔼俊辑 泅犁 搬苞甫 林聪鳖 -蔼捞 唱棵 荐 乐促
if(0 <=iNowCt)//肮荐啊 嘎栏搁 瘤况扼
{
::SendDeleteItemQuantity( ch, iNeedItemNo, iNeedItemCt ); // 漂沥 酒捞袍阑 漂沥 肮荐父怒 昏力 茄促.
}
}
}
}
int a=0,b=0,c=0;
if(::SearchInv(ch->inv,a,b,c))
{
const int iNow = rand()%100;
if(45 > iNow)
{
POS pos;
SetItemPos(INV,a,b,c,&pos);//pos悸泼
ITEMATTR *pItem = ::GetItemByPOS(ch,pos);//酒捞袍 林家 罐绊
(*pItem) = ResultItem;
::SendItemEventLog( pItem, ch->GetServerID(), 0, SILT_MAKE_MULTI_RARE_RESULT, 1 ); //021209 lsw
::SendServerEachItem( &pos, pItem,ch->GetServerID());//焊郴扁
::OutMessage(cn,2,901);//021120 lsw
}
else
{//皋技瘤 焊辰促
::OutMessage(cn,2,900);//021120 lsw
}
}
else
{//捞访 版快绰 绝绢夸
}
/*
Send_RareItemMakeLog( cn,SourceItem.item_no,0,
TempSokSung.grade+1,TempSokSung.soksung1,TempSokSung.soksung2,TempSokSung.soksung3,a[0],al[0],a[1],al[1],SourceItem.attr[IATTR_LIMIT],now,max,why,2002,
resourcelimit[0],resourcelimit[1],resourcelimit[2],
resourcelimit[3],resourcelimit[4],resourcelimit[5]);//搬苞 扁废
*/
// ::QueuePacket(connections, cn, &packet, 1);
return;
}
//<! BBD 040308 单阁栏肺何磐狼 捞亥飘酒捞袍 瘤鞭 览翠矫 妮登绰 窃荐
void RecvCMD_EVENTRAREITEM_RES(const int cn, t_packet &p)
{
const int MAX_EVENT_USER_FILED = 10;
int nUserCn = p.u.Event_Item_List.nCn;
CHARLIST *ch = CheckServerId(nUserCn);
if(!ch) // 某腐磐啊 蜡瓤茄啊?
{
// 酒捞袍捞 朝扼艾促. 肺弊 巢扁磊
for(int i = 0; i < MAX_EVENT_USER_FILED; i++)
{
if(p.u.Event_Item_List.nIndex[i])
{
//i+1牢 牢郸胶狼 酒捞袍捞 朝酒艾促
g_pLogManager->SaveEventItemLostLog(EILT_INVALID_CONNECTION, p.u.Event_Item_List.szChrName, i+1);
}
}
return;
}
if(strcmp(p.u.Event_Item_List.szChrName, ch->Name))//捞抚捞 撇妨
{
// 酒捞袍捞 朝扼艾促. 肺弊 巢扁磊.
for(int i = 0; i < MAX_EVENT_USER_FILED; i++)
{
if(p.u.Event_Item_List.nIndex[i])
{
//i+1牢 牢郸胶狼 酒捞袍捞 朝酒艾促
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -