📄 skill_lsw.cpp
字号:
g_pLogManager->SaveEventItemLostLog(EILT_INVALID_NAME, p.u.Event_Item_List.szChrName, i+1);
}
}
return;
}
// 牢亥狼 后沫 技扁
int blankcount = 0;
for(int a=0; a<3; a++)
{
for(int b=0; b<3; b++)
{
for(int c=0; c<8; c++)
{
if( !ch->inv[a][b][c].item_no )
{
blankcount++;
}
}
}
}
if(blankcount < 10) // 10沫 捞惑牢啊?
{
::OutMessage(ch,2,13);//烙矫,,牢亥配府 傍埃捞 面盒摹 臼嚼聪促.
// 酒捞袍捞 朝扼艾促. 肺弊 巢扁磊.
for(int i = 0; i < MAX_EVENT_USER_FILED; i++)
{
if(p.u.Event_Item_List.nIndex[i])
{
//i+1牢 牢郸胶狼 酒捞袍捞 朝酒艾促
g_pLogManager->SaveEventItemLostLog(EILT_NOTENOUGH_INVENTORY, p.u.Event_Item_List.szChrName, i+1);
}
}
return;
}
// 风橇甫 倒哥瘤鞭
for(int i = 0; i < MAX_EVENT_USER_FILED; i++)
{
if(p.u.Event_Item_List.item[i].item_no)
{
// 酒捞袍 瘤鞭窍磊
int a=0,b=0,c=0;
if(::SearchInv(ch->inv,a,b,c))//傍埃捞 乐备唱
{
POS pos;
SetItemPos(INV,a,b,c,&pos);//pos悸泼
ITEMATTR *pItem = ::GetItemByPOS(ch,pos);//酒捞袍 林家 罐绊
(*pItem) = p.u.Event_Item_List.item[i];
::SendServerEachItem( &pos, pItem,nUserCn);//焊郴扁
// DB俊辑 积己登绢 柯 酒捞袍捞聪 DB俊辑 父甸菌促绊 肺弊 巢扁磊
::SendItemEventLog( pItem, ch->GetServerID(), 0, SILT_MAKE_BY_DB, 1 );
}
}
}
}
//> BBD 040308 单阁栏肺何磐狼 捞亥飘酒捞袍 瘤鞭 览翠矫 妮登绰 窃荐
int LoadRaregroup()
{
HSTMT hStmt = NULL;
RETCODE retCode;
SDWORD cbValue;
SQLAllocStmt(hDBC, &hStmt);
retCode = SQLExecDirect(hStmt, (UCHAR *)"Select * from rare_group order by no", SQL_NTS);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
int i = 0;
retCode = SQLFetch(hStmt);
while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
if(i >= MAX_RARE_GROUP)
{
SQLFreeStmt(hStmt, SQL_DROP);
return 0;
}
retCode = SQLGetData(hStmt, 1, SQL_INTEGER , &RareGroup[0][i].no , 0, &cbValue);
retCode = SQLGetData(hStmt, 2, SQL_CHAR , RareGroup[0][i].name , 40, &cbValue);
retCode = SQLGetData(hStmt, 3, SQL_CHAR , RareGroup[0][i].rareset[0].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 4, SQL_INTEGER , &RareGroup[0][i].rareset[0].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 5, SQL_INTEGER , &RareGroup[0][i].rareset[0].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 6, SQL_CHAR , RareGroup[0][i].rareset[1].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 7, SQL_INTEGER , &RareGroup[0][i].rareset[1].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 8, SQL_INTEGER , &RareGroup[0][i].rareset[1].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 9, SQL_CHAR , RareGroup[0][i].rareset[2].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 10, SQL_INTEGER , &RareGroup[0][i].rareset[2].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 11, SQL_INTEGER , &RareGroup[0][i].rareset[2].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 12, SQL_CHAR , RareGroup[0][i].rareset[3].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 13, SQL_INTEGER , &RareGroup[0][i].rareset[3].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 14, SQL_INTEGER , &RareGroup[0][i].rareset[3].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 15, SQL_CHAR , RareGroup[0][i].rareset[4].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 16, SQL_INTEGER , &RareGroup[0][i].rareset[4].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 17, SQL_INTEGER , &RareGroup[0][i].rareset[4].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 18, SQL_CHAR , RareGroup[0][i].rareset[5].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 19, SQL_INTEGER , &RareGroup[0][i].rareset[5].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 20, SQL_INTEGER , &RareGroup[0][i].rareset[5].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 21, SQL_CHAR , RareGroup[0][i].rareset[6].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 22, SQL_INTEGER , &RareGroup[0][i].rareset[6].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 23, SQL_INTEGER , &RareGroup[0][i].rareset[6].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 24, SQL_CHAR , RareGroup[0][i].rareset[7].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 25, SQL_INTEGER , &RareGroup[0][i].rareset[7].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 26, SQL_INTEGER , &RareGroup[0][i].rareset[7].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 27, SQL_CHAR , RareGroup[0][i].group_buffer_1 , 40, &cbValue);
retCode = SQLGetData(hStmt, 28, SQL_CHAR , RareGroup[0][i].group_buffer_2 , 40, &cbValue);
retCode = SQLGetData(hStmt, 29, SQL_CHAR , RareGroup[0][i].group_buffer_3 , 40, &cbValue);
retCode = SQLGetData(hStmt, 30, SQL_INTEGER , &RareGroup[0][i].group_buffer_4 , 0, &cbValue);
retCode = SQLGetData(hStmt, 31, SQL_INTEGER , &RareGroup[0][i].group_buffer_5 , 0, &cbValue);
retCode = SQLGetData(hStmt, 32, SQL_INTEGER , &RareGroup[0][i].group_buffer_6 , 0, &cbValue);
retCode = SQLGetData(hStmt, 33, SQL_INTEGER , &RareGroup[0][i].group_buffer_7 , 0, &cbValue);
retCode = SQLGetData(hStmt, 34, SQL_INTEGER , &RareGroup[0][i].group_buffer_8 , 0, &cbValue);
retCode = SQLGetData(hStmt, 35, SQL_INTEGER , &RareGroup[0][i].group_buffer_9 , 0, &cbValue);
retCode = SQLGetData(hStmt, 36, SQL_INTEGER , &RareGroup[0][i].group_buffer_10 , 0, &cbValue);
i++;
retCode = SQLFetch(hStmt);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
}
else if( retCode == SQL_NO_DATA )
{
break;
}
else
{
SQLFreeStmt(hStmt, SQL_DROP);
return 0;
}
}
}
else
{
SQLFreeStmt(hStmt, SQL_DROP);
return 0;
}
SQLFreeStmt(hStmt, SQL_DROP); // 0308 YGI
return 1;
}
void RareGroupSet()
{
int i1 = 1,i2 = 1, i3 = 1, i4 = 1;
for (;i1 < MAX_RARE_GROUP;i1++)
{
const int iGroupSet = RareGroup[1][i1].group_buffer_10;
switch(iGroupSet)
{
case 2:
{
RareGroup[iGroupSet][i2] = RareGroup[1][i1];
i2++;
}break;
case 3:
{
RareGroup[iGroupSet][i3] = RareGroup[1][i1];
i3++;
}break;
case 4:
{
RareGroup[iGroupSet][i4] = RareGroup[1][i1];
i4++;
}break;
default:
continue;
break;
}
}
}
int LoadItemFunctionGroup()
{
HSTMT hStmt = NULL;
RETCODE retCode;
SDWORD cbValue;
SQLAllocStmt(hDBC, &hStmt);
retCode = SQLExecDirect(hStmt, (UCHAR *)"Select * from Function_group order by no", SQL_NTS);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
int i = 0;
retCode = SQLFetch(hStmt);
while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
if(i >= MAX_RARE_GROUP)
{
SQLFreeStmt(hStmt, SQL_DROP);
return 0;
}
retCode = SQLGetData(hStmt, 1, SQL_INTEGER , &RareGroup[1][i].no , 0, &cbValue);
retCode = SQLGetData(hStmt, 2, SQL_CHAR , RareGroup[1][i].name , 40, &cbValue);
retCode = SQLGetData(hStmt, 3, SQL_CHAR , RareGroup[1][i].rareset[0].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 4, SQL_INTEGER , &RareGroup[1][i].rareset[0].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 5, SQL_INTEGER , &RareGroup[1][i].rareset[0].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 6, SQL_CHAR , RareGroup[1][i].rareset[1].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 7, SQL_INTEGER , &RareGroup[1][i].rareset[1].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 8, SQL_INTEGER , &RareGroup[1][i].rareset[1].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 9, SQL_CHAR , RareGroup[1][i].rareset[2].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 10, SQL_INTEGER , &RareGroup[1][i].rareset[2].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 11, SQL_INTEGER , &RareGroup[1][i].rareset[2].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 12, SQL_CHAR , RareGroup[1][i].rareset[3].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 13, SQL_INTEGER , &RareGroup[1][i].rareset[3].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 14, SQL_INTEGER , &RareGroup[1][i].rareset[3].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 15, SQL_CHAR , RareGroup[1][i].rareset[4].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 16, SQL_INTEGER , &RareGroup[1][i].rareset[4].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 17, SQL_INTEGER , &RareGroup[1][i].rareset[4].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 18, SQL_CHAR , RareGroup[1][i].rareset[5].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 19, SQL_INTEGER , &RareGroup[1][i].rareset[5].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 20, SQL_INTEGER , &RareGroup[1][i].rareset[5].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 21, SQL_CHAR , RareGroup[1][i].rareset[6].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 22, SQL_INTEGER , &RareGroup[1][i].rareset[6].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 23, SQL_INTEGER , &RareGroup[1][i].rareset[6].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 24, SQL_CHAR , RareGroup[1][i].rareset[7].rare , 40, &cbValue);
retCode = SQLGetData(hStmt, 25, SQL_INTEGER , &RareGroup[1][i].rareset[7].rare_num , 0, &cbValue);
retCode = SQLGetData(hStmt, 26, SQL_INTEGER , &RareGroup[1][i].rareset[7].rare_rate , 0, &cbValue);
retCode = SQLGetData(hStmt, 27, SQL_CHAR , RareGroup[1][i].group_buffer_1 , 40, &cbValue);
retCode = SQLGetData(hStmt, 28, SQL_CHAR , RareGroup[1][i].group_buffer_2 , 40, &cbValue);
retCode = SQLGetData(hStmt, 29, SQL_CHAR , RareGroup[1][i].group_buffer_3 , 40, &cbValue);
retCode = SQLGetData(hStmt, 30, SQL_INTEGER , &RareGroup[1][i].group_buffer_4 , 0, &cbValue);
retCode = SQLGetData(hStmt, 31, SQL_INTEGER , &RareGroup[1][i].group_buffer_5 , 0, &cbValue);
retCode = SQLGetData(hStmt, 32, SQL_INTEGER , &RareGroup[1][i].group_buffer_6 , 0, &cbValue);
retCode = SQLGetData(hStmt, 33, SQL_INTEGER , &RareGroup[1][i].group_buffer_7 , 0, &cbValue);
retCode = SQLGetData(hStmt, 34, SQL_INTEGER , &RareGroup[1][i].group_buffer_8 , 0, &cbValue);
retCode = SQLGetData(hStmt, 35, SQL_INTEGER , &RareGroup[1][i].group_buffer_9 , 0, &cbValue);
retCode = SQLGetData(hStmt, 36, SQL_INTEGER , &RareGroup[1][i].group_buffer_10 , 0, &cbValue);
i++;
retCode = SQLFetch(hStmt);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
}
else if( retCode == SQL_NO_DATA )
{
break;
}
else
{
SQLFreeStmt(hStmt, SQL_DROP);
return 0;
}
}
}
else
{
SQLFreeStmt(hStmt, SQL_DROP);
return 0;
}
SQLFreeStmt(hStmt, SQL_DROP); // 0308 YGI
RareGroupSet();
return 1;
}
int LoadRareProbability()
{
HSTMT hStmt = NULL;
RETCODE retCode;
SDWORD cbValue;
SQLAllocStmt(hDBC, &hStmt);
retCode = SQLExecDirect(hStmt, (UCHAR *)"Select * from rare_probability order by num", SQL_NTS);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
int i = 0;
retCode = SQLFetch(hStmt);
while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
if(i >= MAX_RARE_PROBABILIY)
{
SQLFreeStmt(hStmt, SQL_DROP);
return false;
}
retCode = SQLGetData(hStmt, 1, SQL_C_LONG, &Rareprobability[i].num , 0, &cbValue);
retCode = SQLGetData(hStmt, 2, SQL_C_LONG, &Rareprobability[i].exp_rare_suc[0] , 0, &cbValue);
retCode = SQLGetData(hStmt, 3, SQL_C_LONG, &Rareprobability[i].exp_rare_suc[1] , 0, &cbValue);
retCode = SQLGetData(hStmt, 4, SQL_C_LONG, &Rareprobability[i].exp_rare_suc[2] , 0, &cbValue);
retCode = SQLGetData(hStmt, 5, SQL_C_LONG, &Rareprobability[i].exp_rare_suc[3] , 0, &cbValue);
retCode = SQLGetData(hStmt, 6, SQL_C_LONG, &Rareprobability[i].max_rare_day , 0, &cbValue);
retCode = SQLGetData(hStmt, 7, SQL_C_LONG, &Rareprobability[i].bonus_suc , 0, &cbValue);
retCode = SQLGetData(hStmt, 8, SQL_C_LONG, &Rareprobability[i].max_suc , 0, &cbValue);
retCode = SQLGetData(hStmt, 9, SQL_C_LONG, &Rareprobability[i].buffer_1 , 0, &cbValue);
retCode = SQLGetData(hStmt, 10, SQL_C_LONG, &Rareprobability[i].buffer_2 , 0, &cbValue);
retCode = SQLGetData(hStmt, 11, SQL_C_LONG, &Rareprobability[i].buffer_3 , 0, &cbValue);
retCode = SQLGetData(hStmt, 12, SQL_C_LONG, &Rareprobability[i].buffer_4 , 0, &cbValue);
retCode = SQLGetData(hStmt, 13, SQL_C_LONG, &Rareprobability[i].buffer_5 , 0, &cbValue);
retCode = SQLGetData(hStmt, 14, SQL_C_LONG, &Rareprobability[i].buffer_6 , 0, &cbValue);
retCode = SQLGetData(hStmt, 15, SQL_C_LONG, &Rareprobability[i].buffer_7 , 0, &cbValue);
retCode = SQLGetData(hStmt, 16, SQL_C_LONG, &Rareprobability[i].buffer_8 , 0, &cbValue);
retCode = SQLGetData(hStmt, 17, SQL_C_LONG, &Rareprobability[i].buffer_9 , 0, &cbValue);
retCode = SQLGetData(hStmt, 18, SQL_C_LONG, &Rareprobability[i].buffer_10 , 0, &cbValue);
i++;
retCode = SQLFetch(hStmt);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
}
else if( retCode == SQL_NO_DATA )
{
break;
}
else
{
SQLFreeStmt(hStmt, SQL_DROP);
return 0;
}
}
}
else
{
SQLFreeStmt(hStmt, SQL_DROP);
return 0;
}
SQLFreeStmt(hStmt, SQL_DROP); // 0308 YGI
return 1;
}
/*
{
DWORD skillexp : 20 ;//胶懦 版氰摹
DWORD makecount : 5 ;//父电 肮荐
DWORD day : 8 ;//历厘等 朝楼
DWORD month : 4 ;//历厘等 朝楼
DWORD year : 1 ;//历厘等 朝楼
}t_skillexp2, *LPSKILLEXP2;
typedef struct SkillExp3
{
DWORD skillexp : 8 ;//胶懦鸥涝
DWORD temp : 2 ;//胶懦鸥涝
DWORD year : 9 ;//斥档
DWORD day : 13 ;//朝楼
}t_SkillExp3,*LPSKILLEXP3;
*/
int TryRareItemAbleDay(int cn,int MySkillLevel,t_skillexp2 *skillexp2)
{
int mymax = Rareprobability[MySkillLevel].max_rare_day;
//朝楼 快急 八祸 //朝楼 %8 岿 %8 购啊%2
int day = g_day%8;
int month = g_mon%8;//0-11 鳖瘤
/*
盔蘑.
1.坷疵 朝楼捞搁 父甸 荐 乐促.登绢具
2.朝楼啊 瘤唱搁 馆靛矫 府悸 茄促.(CheckRareMakeCount)
*/
if(day!=skillexp2->day) {return 0;}//促弗 朝楼 扁涝 登绢 乐栏搁 屁变促~
else if( month!=skillexp2->month){return 0;}//促弗 崔 扁涝 登绢 乐栏搁 屁变促~
else//朝档 鞍绊 崔绊 鞍绊
{
if( mymax <= skillexp2->makecount )//钙胶俊 崔窍绰啊?
{
OutMessage(cn,2,257);
return 0;
}
else
{
skillexp2->makecount++;
//父甸荐 乐促 墨款飘 棵扼啊扼
return 1;
}
}
return 0;
}
int TryRareItem(const int cn, const int iSkillNo, CItem_Join join, const int iTryRare, const int iRareGruop, const int iMakeCount,const int iSuccess)//011031 lsw
{
if( iTryRare && (0 > iRareGruop || MAX_RARE_GROUP <= iRareGruop) ) return 0;
LPCHARLIST ch = &connections[cn].chrlst;
CItem *t ;
int iMotherSkillNo = SkillTbl[iSkillNo].MotherSkillType;
int TotalPercent = 0 ;
int NowPercent = 0 ;
int tempPercent = 0 ;
int RareType = 0 ;
int ItemLevel = join.skill1_minimum; // 版氰摹 敲矾胶
int MySkillLevel = ch->skillexp[iMotherSkillNo].skillexp/10000;
int iMaxExp = 0 ;
int iItemtakeExp = 0 ;
t = ItemUnit( join.item_id/1000, join.item_id%1000);
if(iTryRare && !t){ return 0; }
//磊脚狼 饭骇 焊促 臭栏搁 救登绊 鞍栏搁 等促
if(MySkillLevel < ItemLevel ) { return 0; }
unsigned int iSuccessRate = ch->skillexp[iMotherSkillNo].rare+Rareprobability[MySkillLevel-ItemLevel].bonus_suc;
const int iItemUpgradeType = (ItemMutantKind[t->GetItemKind()].upgrade_type -1);
bool bMultiEXP = false;
switch(t->GetItemKind())//抗寇利牢 酒捞袍 辆幅
{
case IK_POTION_BAG : // BBD 040213 器记冠胶
case IK_CANDLE:
case IK_POTION:
case IK_FOOD_MASS:
case IK_PLATE_FOOD:
case IK_DRINK:
case IK_GOOD_FOOD:
case IK_GOOD_POTION:
case IK_GOOD_CANDLE:
{
bMultiEXP = true;
if( 1 <= iItemUpgradeType && 3 >= iItemUpgradeType )
{
iItemtakeExp = Rareprobability[ItemLevel].exp_rare_suc[iItemUpgradeType];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -