📄 citem.cpp
字号:
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// Item 积己
// Item 积己
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
int ItemGen_successrate( t_connection c[], int cn, int type, int tableno, int itemtype, int itemno )
{
CHARLIST *ch;
if( cn >= DRAGON_MAX_CONNECTIONS ) return 0;
if( cn < DRAGON_CONNECTIONS_START ) return 0;
ch = &c[cn].chrlst;
if( ch->bAlive != ALIVE_ ) return 0;
//---------------------------------------------------- Check Variables 裹困...
return 100;
}
/*
#define IATTR_DURATION 0
#define IATTR_LIMIT 1
#define IATTR_ATTR 2
#define IATTR_ID 3
#define IATTR_RESERVED0 4
#define IATTR_RESERVED1 5
#define IA2_HIDE 0x00000001
#define IA2_NOTMOVE 0x00000002
#define IA2_POISONED 0x00000004
#define IA2_OPENED 0x00000008
#define IA2_BROKEN 0x00000010
#define IA2_HOUSE 0x00000020
#define IA2_MAGIC 0x00000040
#define IA2_CANNOTUSE 0x00000080
#define IA2_NOIDENTIFIED 0x00000100
#define IA2_DOOR 0x00000200
#define IA2_BOX 0x00000400
#define IA2_CHAIR 0x00000800
#define IA2_TABLE 0x00001000
#define PLANT 0
#define MINERAL 1
#define HERB 2
#define COOK 3
#define POTION 4
#define TOOL 5
#define WEAPON 6
#define DISPOSABLE 7
#define ARMOR 8
#define ACCESSORY 9
#define ETC 10
#define MAP 11
*/
unsigned int ItemGen_Duration( int type, int no )
{
return 0;
}
unsigned int ItemGen_Limit( int type, int no )
{
return 0;
}
unsigned int ItemGen_Attr( int type, int no )
{
return 0;
}
unsigned int ItemGen_DbId( int type, int no )
{
return 0;
}
void RecvItemDoorOpenClose( int cn, t_item_door_open_close *p )
{
LPITEMLIST i;
int item_id = p->item_id;
if( item_id < 0 ) return;
if( item_id >= MAX_ITEM_LIST ) return;
i = &ItemList[ item_id ];
if( (i->attr[ IATTR_ATTR] & IA2_DOOR) == 0 ) return; // 巩捞 酒聪匙...
if( p->openclose == 0 ) // 凯绢林技夸..
{
if( i->attr[ IATTR_ATTR] & IA2_OPENED ) return; // 凯妨 乐栏搁 府畔.
//
// 咯扁辑 connections[cn].chrslt啊 凯荐 乐绰瘤 八荤茄促.
//
i->attr[ IATTR_ATTR] |= IA2_OPENED;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, item_id );
}
else // 摧酒林技夸.
{
if( (i->attr[ IATTR_ATTR] & IA2_OPENED) == 0 ) return; // 摧囚 乐栏搁 府畔.
//
// 咯扁辑 connections[cn].chrslt啊 摧阑荐 乐绰瘤 八荤茄促.
//
i->attr[ IATTR_ATTR] &= (~(IA2_OPENED) );
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, item_id );
}
}
void SendItemAttrChange( t_connection c[], int cn, int id, int attr )
{
t_packet packet;
packet.h.header.type = CMD_ITEM_ATTR_CHANGE;
{
packet.u.item_attr_change.item_id = id;
packet.u.item_attr_change.array = attr;
packet.u.item_attr_change.attr = ItemList[id].attr[ attr];
}
packet.h.header.size = sizeof( item_attr_change );
QueuePacket(c, cn, &packet, 1);
}
void SendItemFoot_On_Trap0( t_connection c[], int cn, int item_id )
{
t_packet packet;
connections[cn].chrlst.DecLife(ItemList[item_id ].attr[IATTR_DURATION]);
if (connections[cn].chrlst.IsDead() == true)
{
killCharacter( NULL, &connections[cn].chrlst );
SendCharacterCondition( &connections[cn].chrlst, 0);
}
packet.h.header.type = CMD_FOOT_ON_TRAP_0_ITEM;
packet.h.header.size = sizeof(t_server_foot_on_trap0);
packet.u.server_foot_on_trap0.idServer = WORD(cn);
packet.u.server_foot_on_trap0.idItem = WORD(item_id);
packet.u.server_foot_on_trap0.nLife = connections[cn].chrlst.Hp;
QueuePacket(c, cn, &packet, 1);
CastMe2Other( cn, &packet );
}
void SendItemFoot_On_Trap1( t_connection c[], int cn, int item_id )
{
t_packet packet;
connections[cn].chrlst.DecLife(ItemList[ item_id ].attr[IATTR_DURATION]);
if (connections[cn].chrlst.IsDead() == true)
{
killCharacter( NULL, &connections[cn].chrlst );
SendCharacterCondition( &connections[cn].chrlst, 0);
}
packet.h.header.type = CMD_FOOT_ON_TRAP_1_ITEM;
packet.h.header.size = sizeof(t_server_foot_on_trap1);
packet.u.server_foot_on_trap1.idServer = WORD(cn);
packet.u.server_foot_on_trap1.idItem= WORD(item_id);
packet.u.server_foot_on_trap1.nLife = connections[cn].chrlst.Hp;
QueuePacket(c, cn, &packet, 1);
CastMe2Other( cn, &packet );
}
// 010322 KHS
void CheckItemTimeElapsed( void )
{
static int count;
int s,e;
ITEMLIST *ii;
DWORD time;
time = g_curr_time;
if( count >= MAX_ITEM_LIST ) count = 0;
s = count;
count += ( MAX_ITEM_LIST/ 100 );
e = count;
if( e > MAX_ITEM_LIST ) e = MAX_ITEM_LIST; // 茄锅俊 MAX_ITEM_LIST/3沥档父 Check茄促. 辑滚 何淬阑 临捞扁 困秦.
for( int m = s ; m < e ; m ++)
{
if( ItemList[m].bAlive == 0 ) continue;
ii = &ItemList[m];
unsigned int attr2 = ii->attr[ IATTR_ATTR];
if( GetAttr2( attr2, IA2_BOX ) )
{
if( GetAttr2( attr2, IA2_OPENED ) )
{
if( time > ii->attr[ IATTR_LIMIT] ) // 柄柳第 倔付埃狼 矫埃捞 瘤车促.
{
ii->attr[ IATTR_ATTR] = IA2_NOTMOVE | IA2_BOX;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
continue;
}
}
}
else if( attr2 & IA2_FARM0 )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
DWORD time = ReturnHowLongTimeGrow( ii );
ii->attr[IATTR_ATTR ] &= ~(IA2_FARM0);
ii->attr[IATTR_ATTR ] |= IA2_FARM1;
ii->attr[IATTR_DURATION ] = g_curr_time + time;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
}
}else if( attr2 & IA2_FARM1 )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
DWORD time = ReturnHowLongTimeGrow( ii );
ii->attr[IATTR_ATTR ] &= ~(IA2_FARM1);
ii->attr[IATTR_ATTR ] |= IA2_FARM2;
ii->attr[IATTR_DURATION ] = g_curr_time + time;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
}
}else if( attr2 & IA2_FARM2 )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
DWORD time = ReturnHowLongTimeGrow( ii );
ii->attr[IATTR_ATTR ] &= ~(IA2_FARM2);
ii->attr[IATTR_ATTR ] |= IA2_FARM3;
ii->attr[IATTR_DURATION ] = g_curr_time + time;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
}
}else if( attr2 & IA2_FARM2 )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
DWORD time = ReturnHowLongTimeGrow( ii );
ii->attr[IATTR_ATTR ] &= ~(IA2_FARM2);
ii->attr[IATTR_ATTR ] |= IA2_FARM3;
ii->attr[IATTR_DURATION ] = g_curr_time + time;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
}
}else if( attr2 & IA2_FARM3 )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
DWORD time = ReturnHowLongTimeGrow( ii );
ii->attr[IATTR_ATTR ] &= ~(IA2_FARM3);
ii->attr[IATTR_ATTR ] |= IA2_FARM4;
ii->attr[IATTR_DURATION ] = g_curr_time + time;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
}
}else if( attr2 & IA2_FARM4 )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
DWORD time = ReturnHowLongTimeGrow( ii );
ii->attr[IATTR_ATTR ] &= ~(IA2_FARM4);
ii->attr[IATTR_ATTR ] |= IA2_FARM5;
ii->attr[IATTR_DURATION ] = g_curr_time + time;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
}
}else if( attr2 & IA2_FARM5 )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
DWORD time = ReturnHowLongTimeGrow( ii );
ii->attr[IATTR_ATTR ] &= ~(IA2_FARM5);
ii->attr[IATTR_ATTR ] |= IA2_FARM6;
ii->attr[IATTR_DURATION ] = g_curr_time + time;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
}
}else if( attr2 & IA2_FARM6 )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
DWORD time = ReturnHowLongTimeGrow( ii );
time += time;
ii->attr[IATTR_ATTR ] &= ~(IA2_FARM6);
ii->attr[IATTR_ATTR ] |= IA2_FARM7;
ii->attr[IATTR_DURATION ] = g_curr_time + time;
SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
}
}else if( attr2 & IA2_FARM7 ) // 荐犬阑 窍瘤 臼绊 矫埃捞 瘤唱搁 荤扼柳促.
{
//001214 zhh //荐犬窍绰 窜拌父 5窜拌啊 等促.(荐犬窍绰单 矫埃捞 何练窃)
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
RemoveItemList( m );
}
}
else if( attr2 & IA2_FIRE )
{
if( ii->attr[IATTR_DURATION] < g_curr_time )
{
ii->bAlive = REMOVE_;
SetArea( REMOVE_ITEM_AREA, m );
}
}
else if( attr2 & IA2_DOOR )
{
}
else if( attr2 & IA2_HOUSE )
{
}
else if( attr2 & IA2_CHAIR )
{
}
else if( attr2 & IA2_TABLE )
{
}
else if( attr2 & IA2_TRAPED0 )
{
if( g_curr_time - ii->birthday > TRAP_DELETE_TIME )//020315 lsw
{
ii->birthday = g_curr_time;
{
ii->bAlive = REMOVE_;
SetArea( REMOVE_ITEM_AREA, m );
}
}
}
else if( attr2 & IA2_TRAPED1 )
{
if( g_curr_time - ii->birthday > TRAP_DELETE_TIME )//020215 lsw
{
ii->birthday = g_curr_time;
{
ii->bAlive = REMOVE_;
SetArea( REMOVE_ITEM_AREA, m );
}
}
}
else if( ( GetAttr2( attr2, IA2_COLOSSUS_STONE ) )
|| ( GetAttr2( attr2, IA2_SCENARIO_POTAL ) ) ) // 020620 YGI
{
// 矫埃捞 瘤唱档 酒公繁 累诀阑 窍瘤 臼绰促.
}
else // 矫埃捞 版苞窍搁 磊悼栏肺 瘤况柳促.
{
int iLimitTime = 120;
if(!LocalMgr.IsAbleNation(KOREA))//030102 lsw Local
{
iLimitTime = 60;
}
if( g_curr_time - ii->birthday > iLimitTime )
{
ii->birthday = g_curr_time;
{
ii->bAlive = REMOVE_;
SetArea( REMOVE_ITEM_AREA, m );
}
}
}
}
}
//-----------------------------------------------------------------------
// 酒捞袍 积己 窃荐 ( 10/24 )
//-----------------------------------------------------------------------
/*
DWORD ItemAttr_Make_First( int type, int itemno, int success_rate )
{
switch( type )
{
case PLANT : return global_time + (21600 * 60);
case MINERAL :
case HERB :
case COOK : return global_time + (21600 * 60);
case POTION :
case TOOL :
case WEAPON :
case DISPOSABLE :
case ARMOR :
case ACCESSORY :
case ETC :
break;
}
return 0L;
}
*/
//////////////////////////////////////////////////////////////////////////
// 某腐磐 牢亥配府俊辑 后镑 茫扁, 绝栏搁 0阑 府畔
bool SearchInv( ItemAttr inv[3][3][8], int &a, int &b, int &c )
{
for( a=0; a<3; a++)
for( b=0; b<3; b++)
for( c=0; c<8; c++)
{
if( !inv[a][b][c].item_no ){return true;}
}
return false;
}
int SearchInv_invert( ItemAttr inv[3][3][8], int &a, int &b, int &c )
{
for( a=2; a >=0; a--)
for( b=2; a >=0; b--)
for( c=7; c >=0; c--)
{
if( !inv[a][b][c].item_no )
return 1;
}
return 0;
}
// add money 俊辑 荤侩且 MAX_MONEY焊促 累篮 捣苞 后傍埃阑 茫绰 窃荐 // 001030 YGI
int SearchMoneyItem( ItemAttr inv[3][3][8], int &a, int &b, int &c )
{
for( a=0; a<3; a++)
for( b=0; b<3; b++)
for( c=0; c<8; c++)
{
if( inv[a][b][c].item_no )
{
CItem *t = ItemUnit( inv[a][b][c] );
if( !t ) continue;
int iItemKind = IK_NEW_MONEY;
if(LocalMgr.IsChangeMoney())//030102 lsw
{
iItemKind = IK_NEW_MONEY;
}
else
{
iItemKind = IK_MONEY;
}
if( t->GetItemKind() == iItemKind )
{
if( inv[a][b][c].attr[IATTR_MUCH] < MAX_MONEY )
{
return 1;
}
}
}
else
{
return 1;
}
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -