📄 item.cpp
字号:
fread( &dx1, sizeof( int ), 1, fp );
fread( &dy1, sizeof( int ), 1, fp );
fread( &dx2, sizeof( int ), 1, fp );
fread( &dy2, sizeof( int ), 1, fp );
fread( &dx3, sizeof( int ), 1, fp );
fread( &dy3, sizeof( int ), 1, fp );
fread( &dx4, sizeof( int ), 1, fp );
fread( &dy4, sizeof( int ), 1, fp );
fread( &framecount, sizeof( int ), 1, fp );
i->getable = getable;
i->Anitype = anitype;
i->type = itemtype;
i->dirno = dir;
i->Where = where;
i->Sorttype = sorting;
i->shadow = shadow;
i->dx[0] = i->x + dx1 + i->offx, i->dy[0] = i->y + dy1 + i->offy;
i->dx[1] = i->x + dx2 + i->offx, i->dy[1] = i->y + dy2 + i->offy;
i->dx[2] = i->x + dx3 + i->offx, i->dy[2] = i->y + dy3 + i->offy;
i->dx[3] = i->x + dx4 + i->offx, i->dy[3] = i->y + dy4 + i->offy;
i->framecount = framecount;
i->dsx[0] = 0; i->dsy[1] = 0; i->ddx[0] = 0; i->ddy[1] = 0;
fread( i->dsx, sizeof( short), ITEM_FRAME_MAX_, fp );
fread( i->dsy, sizeof( short), ITEM_FRAME_MAX_, fp );
fread( i->ddx, sizeof( short), ITEM_FRAME_MAX_, fp );
fread( i->ddy, sizeof( short), ITEM_FRAME_MAX_, fp );
for( int kk = 0; kk < i->framecount ; kk ++)
{
i->dsx[kk] += i->x ;
i->dsy[kk] += i->y ;
i->ddx[kk] += i->x ;
i->ddy[kk] += i->y ;
if( kk == 0 ) t = AddItemSprite( i->no, type, kk );
else t = AddItemSprite( i->no * 100 + kk, type, kk );
i->spr[kk] = &t->sp;
}
fclose(fp );
return;
}
}
fclose(fp );
return;
}
else
{
sprintf( temp, "./object/%s/%s_toi2.txt", tempitemname, MapName );
fp = Fopen( temp,"rt" );
if( fp != NULL )
{
fgets( temp, FILENAME_MAX, fp);
fgets( temp, FILENAME_MAX, fp);
fgetpos( fp, &pos );
while( fgets( temp, FILENAME_MAX,fp ))
{
sscanf( temp, "%d ", &itemno );
if( itemno == i->no )
{
fsetpos( fp, &pos );
goto NEXT_;
}
fgetpos( fp, &pos );
}
fclose(fp);
return;
NEXT_:
//# 笼阑荐乐促 AnimationType Dir 嘛绰规过 嘛绰鉴辑 弊覆磊 DontBox 醚弊覆荐
//0 1 0 1 0 0 1 -20 0 0 -20 20 0 0 20 1 0
fscanf( fp, "%d %d %d %d %d %d %d %d %d %d "
"%d %d %d %d %d %d %d %d %d %d ",
&no,
&getable,
&anitype,
&itemtype,
&dir,
&where,
&sorting,
&shadow,
&light, &lightx, &lighty,
&dx1, &dy1, &dx2, &dy2, &dx3, &dy3, &dx4, &dy4,
&framecount );
i->getable = getable;
i->Anitype = anitype;
i->type = itemtype;
i->dirno = dir;
i->Where = where;
i->Sorttype = sorting;
i->shadow = shadow;
i->dx[0] = i->x + dx1 + i->offx, i->dy[0] = i->y + dy1 + i->offy;
i->dx[1] = i->x + dx2 + i->offx, i->dy[1] = i->y + dy2 + i->offy;
i->dx[2] = i->x + dx3 + i->offx, i->dy[2] = i->y + dy3 + i->offy;
i->dx[3] = i->x + dx4 + i->offx, i->dy[3] = i->y + dy4 + i->offy;
i->framecount = framecount;
i->dsx[0] = 0; i->dsy[1] = 0; i->ddx[0] = 0; i->ddy[1] = 0;
for( j = 0; j < i->framecount ; j ++)
{
fscanf( fp, "%d %d %d %d", &dsx, &dsy, &ddx, &ddy );
i->dsx[j] = dsx + i->x ;
i->dsy[j] = dsy + i->y ;
i->ddx[j] = ddx + i->x ;
i->ddy[j] = ddy + i->y ;
if( j == 0 )
{
t = AddItemSprite( i->no, type, j );
}
else
{
t = AddItemSprite( i->no * 100 + j, type, j );
}
i->spr[j] = &t->sp;
}
fclose(fp);
}
}
}
}
void AddItemList( LPITEMGROUND i )
{
LPITEMGROUND t, temp;
int mx, my;
if( i->no > 13000 )
{
mx = (i->x )/ TILE_SIZE;
my = (i->y )/ TILE_SIZE;
}
else
{
mx = (i->x )/ TILE_SIZE;
my = (i->y + 20)/ TILE_SIZE;
i->y += 20;
}
if( g_Item == NULL )
{
MemAlloc( g_Item, sizeof( ITEMGROUND ));
g_Item->server_id = i->server_id;
g_Item->no = i->no;
g_Item->sx = i->sx;
g_Item->sy = i->sy;
g_Item->offx = i->offx;
g_Item->offy = i->offy;
g_Item->x = i->x;
g_Item->y = i->y;
g_Item->mx = i->x / TILE_SIZE;
g_Item->my = i->y / TILE_SIZE;
g_Item->attr[0] = i->attr[0];
g_Item->attr[1] = i->attr[1];
g_Item->attr[2] = i->attr[2];
g_Item->attr[3] = i->attr[3];
g_Item->attr[4] = i->attr[4];
g_Item->attr[5] = i->attr[5];
LoadItem( g_Item );
g_Item->prev = NULL;
g_Item->next = NULL;
}
else
{
t = NULL;
MemAlloc( t, sizeof( ITEMGROUND ));
t->server_id= i->server_id;
t->no = i->no;
t->sx = i->sx;
t->sy = i->sy;
t->offx = i->offx;
t->offy = i->offy;
t->x = i->x;
t->y = i->y;
t->mx = i->x / TILE_SIZE;
t->my = i->y / TILE_SIZE;
t->attr[0] = i->attr[0];
t->attr[1] = i->attr[1];
t->attr[2] = i->attr[2];
t->attr[3] = i->attr[3];
t->attr[4] = i->attr[4];
t->attr[5] = i->attr[5];
LoadItem( t );
temp = g_Item;
temp->prev = t;
t->next = temp;
t->prev = NULL;
g_Item = t;
}
// Add等 Item俊 Animation沥府..
//-----------------------
if( g_Item->attr[2] & IA2_FARM0 ) g_Item->Anitype = ITEMANIMATION_FARM0;
if( g_Item->attr[2] & IA2_FARM1 ) g_Item->Anitype = ITEMANIMATION_FARM1;
if( g_Item->attr[2] & IA2_FARM2 ) g_Item->Anitype = ITEMANIMATION_FARM2;
if( g_Item->attr[2] & IA2_FARM3 ) g_Item->Anitype = ITEMANIMATION_FARM3;
if( g_Item->attr[2] & IA2_FARM4 ) g_Item->Anitype = ITEMANIMATION_FARM4;
if( g_Item->attr[2] & IA2_FARM5 ) g_Item->Anitype = ITEMANIMATION_FARM5;
if( g_Item->attr[2] & IA2_FARM6 ) g_Item->Anitype = ITEMANIMATION_FARM6;
if( g_Item->attr[2] & IA2_FARM7 ) g_Item->Anitype = ITEMANIMATION_FARM7;
if( g_Item->attr[2] & IA2_FIRE ) g_Item->Anitype = ITEMANIMATION_FIRE;
if( g_Item->attr[ IATTR_ATTR] & IA2_BOX )
{
g_Item->type = ITEMTYPE_BOX;
if( g_Item->attr[ IATTR_ATTR] & IA2_OPENED ) g_Item->Anitype = ITEMANIMATION_OPENED;
else g_Item->Anitype = ITEMANIMATION_CLOSED;
}
else if( g_Item->attr[ IATTR_ATTR] & IA2_DOOR )
{
g_Item->type = ITEMTYPE_DOOR;
if( g_Item->attr[ IATTR_ATTR] & IA2_OPENED ) g_Item->Anitype = ITEMANIMATION_OPENED;
else g_Item->Anitype = ITEMANIMATION_CLOSED;
}
else if( g_Item->attr[ IATTR_ATTR] & IA2_TRAPED1 ) g_Item->curframe = rand()%4+1;
else
{
CItem *t = ItemUnit( g_Item->no / 1000, g_Item->no % 1000 );
if( t )
{
if( t->GetMouse_MR_Effect() )
g_Item->Anitype = ITEMANIMATION_REPEAT;
}
}
}
void DeleteItemList( int server_id )
{
int i;
LPITEMGROUND t = g_Item;
while( t != NULL )
{
if( t->server_id == server_id )
{
if( t == g_Item )
{
t = g_Item->next;
for( i = 0 ; i < g_Item->framecount ; i ++)
DeleteItemSprite( g_Item->no * 100 + i );
MemFree( g_Item );
g_Item = t;
if( t != NULL ) g_Item->prev = NULL;
return;
}
else
{
if ( t->prev != NULL )
{
t->prev->next = t->next;
}
if( t->next != NULL )
{
t->next->prev = t->prev;
}
for( i = 0 ; i < t->framecount ; i ++)
DeleteItemSprite( t->no * 100 + i );
MemFree( t );
return;
}
}
t = t->next;
}
}
//
LPITEMGROUND FindItemList( int server_id )
{
LPITEMGROUND t;
t = g_Item;
while( t != NULL )
{
if( t->server_id == server_id )
{
return t;
}
t = t->next;
}
return NULL;
}
// 甘篮 例措谅钎...
LPITEMGROUND FindItemList( int x, int y )
{
LPITEMGROUND t;
t = g_Item;
while( t != NULL )
{
if( BoxAndDotCrash( x - 16, y-16, 32, 32, t->x, t->y ) )
{
return t;
}
t = t->next;
}
return NULL;
}
void DestroyItemList( void )
{
LPITEMGROUND t;
int i;
t = g_Item;
while( t != NULL )
{
t = g_Item->next;
for( i = 0 ; i < g_Item->framecount ; i ++)
DeleteItemSprite( g_Item->no * 100 + i );
MemFree( g_Item );
g_Item = t;
}
return;
}
//--------------- Item Animation...
void RecvItemAttrChange( t_item_attr_change *p )
{
LPITEMGROUND i = FindItemList( p->item_id );
if( i == NULL ) return;
int oldattr = i->attr[ p->array];
int attr = p->attr;
switch( p->array )
{
case IATTR_ATTR :
{
// 110 快府巩堪.wav
// 111 快府巩摧澜.wav
if( oldattr & IA2_DOOR )// 巩俊 包茄 加己 Check....
{
if( oldattr & IA2_OPENED ) // 凯啡栏搁..
{
if( ( attr & IA2_OPENED ) == 0 ) // 澜 摧栏鄂疙飞捞焙.
i->Anitype = ITEMANIMATION_CLOSING;
int distx=i->x-Hero->x; // LTS SOUND
int disty=i->y-Hero->y;
PlayListAutoSounds( 141,distx,disty,0 );
}
else
{
if( (attr & IA2_OPENED) && (i->Anitype != ITEMANIMATION_OPENED) ) // 澜 凯扼绰 疙飞捞焙.
i->Anitype = ITEMANIMATION_OPENNING;
int distx=i->x-Hero->x; // LTS SOUND
int disty=i->y-Hero->y;
PlayListAutoSounds( 140,distx,disty,0 );
}
}
else
if( oldattr & IA2_BOX )// Box俊 包茄 加己 Check..
{
if( oldattr & IA2_OPENED ) // 凯啡栏搁..
{
if( ( attr & IA2_OPENED ) == 0 ) // 澜 摧栏鄂疙飞捞焙.
i->Anitype = ITEMANIMATION_CLOSING;
int distx=i->x-Hero->x; // LTS SOUND
int disty=i->y-Hero->y;
PlayListAutoSounds( 149,distx,disty,0 );
}
else
{
if( (attr & IA2_OPENED) && (i->Anitype != ITEMANIMATION_OPENED) ) // 澜 凯扼绰 疙飞捞焙.
i->Anitype = ITEMANIMATION_OPENNING;
int distx=i->x-Hero->x; // LTS SOUND
int disty=i->y-Hero->y;
PlayListAutoSounds( 148,distx,disty,0 );
}
}
if( attr & IA2_FARM0 ) i->Anitype = ITEMANIMATION_FARM0;
if( attr & IA2_FARM1 ) i->Anitype = ITEMANIMATION_FARM1;
if( attr & IA2_FARM2 ) i->Anitype = ITEMANIMATION_FARM2;
if( attr & IA2_FARM3 ) i->Anitype = ITEMANIMATION_FARM3;
if( attr & IA2_FARM4 ) i->Anitype = ITEMANIMATION_FARM4;
if( attr & IA2_FARM5 ) i->Anitype = ITEMANIMATION_FARM5;
if( attr & IA2_FARM6 ) i->Anitype = ITEMANIMATION_FARM6;
if( attr & IA2_FARM7 ) i->Anitype = ITEMANIMATION_FARM7;
if( attr & IA2_FIRE ) i->Anitype = ITEMANIMATION_FIRE;
if( attr & IA2_TRAPED1 ) i->curframe = (rand()%4)+1;
if( !(attr & IA2_TRAPED1) ) i->curframe = 0;
}
break;
case IATTR_DURATION :
{
break;
}
}
i->attr[ p->array] = p->attr;
}
void SendItemDoorOpenClose( LPITEMGROUND i, int openclose )
{
t_packet p;
p.h.header.type = CMD_ITEM_DOOR_OPEN_CLOSE;
{
p.u.item_door_open_close.item_id = i->server_id;
p.u.item_door_open_close.openclose = openclose;
}
p.h.header.size = sizeof( t_item_door_open_close );
QueuePacket( &p, 1 );
}
void ToggleItemAnimation( LPITEMGROUND i )
{
if( SysInfo.notconectserver )
{
switch( i->Anitype )
{
case ITEMANIMATION_OPENED : i->Anitype = ITEMANIMATION_CLOSING;
break;
case ITEMANIMATION_CLOSED : i->Anitype = ITEMANIMATION_OPENNING;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -