📄 petmail.c
字号:
tocharaindex = PETMAIL_CheckPlayerExist( index, 1);
if( tocharaindex == -1 ) {
warp = TRUE;
}else {
if( CHAR_getWorkInt( tocharaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE) {
int ret ;
int distance;
distance = NPC_Util_CharDistance( tocharaindex, index);
if( distance > CHAR_DEFAULTSEESIZ /2 ) {
warp = TRUE;
}else if( distance > 1 ){
int dir = NPC_Util_GetDirCharToChar( index, tocharaindex, 0);
if( dir != -1 ) {
dir = NPC_Util_SuberiWalk( index, dir);
}
if( dir != -1 ) {
ret = CHAR_walk( index, dir, 0);
if( ret != CHAR_WALKSUCCESSED) {
dir = -1;
}
}
if( dir == -1 ) {
warp = TRUE;
}
}else {
//andy_reEdit 2003/05/30
warp = TRUE;
/* CHAR_setInt( index, CHAR_MAILMODE,CHAR_PETMAIL_IDLE5);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_setInt( index, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL2);
PETMAIL_returnMail( index, tocharaindex);
*/
}
}
}
if( warp) {
CHAR_warpToSpecificPoint( index,
PETMAIL_SPOOLFLOOR,
PETMAIL_SPOOLX,PETMAIL_SPOOLX);
CHAR_setInt( index, CHAR_MAILMODE,CHAR_PETMAIL_IDLE4);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_setInt( index, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL2);
}
}
static void PETMAIL_IdleProc4( int index)
{
unsigned int t = CHAR_getInt( index, CHAR_PETMAILIDLETIME);
{
int tocharaindex;
int cnt;
tocharaindex = PETMAIL_CheckPlayerExist( index, 1);//寻找主人
if( tocharaindex != -1 ) {
if( CHAR_getWorkInt( tocharaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE &&
CHAR_getWorkInt( tocharaindex, CHAR_WORKTRADEMODE) == CHAR_TRADE_FREE ){
int fl, x, y, ch_x, ch_y;//回到主人身边
fl = CHAR_getInt( tocharaindex, CHAR_FLOOR);
ch_x = CHAR_getInt( tocharaindex, CHAR_X);
ch_y = CHAR_getInt( tocharaindex, CHAR_Y);
for( cnt = 0; cnt < 10; cnt ++ ) {
x = RAND( ch_x -1, ch_x + 1);
y = RAND( ch_y -1, ch_y + 1);
if( MAP_walkAble( index, fl,x,y)) {
break;
}
}
if( cnt == 10 ) {
x = ch_x; y = ch_y;
}
CHAR_setInt( index, CHAR_MAILMODE,CHAR_PETMAIL_IDLE5);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_warpToSpecificPoint( index,fl, x,y);
PETMAIL_returnMail( index, tocharaindex);
}
}else {
if( NowTime.tv_sec > t + PETMAIL_IDLE_RETURNOWNER ) {//检查等待主人时间
int itemindex;
CHAR_warpToSpecificPoint( index, //回到原先主人所在座标
CHAR_getInt( index, CHAR_PETMAILFROMFLOOR),
CHAR_getInt( index, CHAR_PETMAILFROMX),
CHAR_getInt( index, CHAR_PETMAILFROMY));
CHAR_setInt( index, CHAR_MAILMODE, CHAR_PETMAIL_IDLE5);//改变宠邮状态
CHAR_setInt( index, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL2);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
if( CHAR_getInt( index, CHAR_PETMAILIDLETIME) != -1 ) {
PETMAIL_deleteOffmsg( CHAR_getInt( index, CHAR_PETMAILBUFINDEX));
}
itemindex = CHAR_getItemIndex( index, CHAR_STARTITEMARRAY);//删除附带道具
if( ITEM_CHECKINDEX( itemindex ) ) {
CHAR_DropItem( index, CHAR_STARTITEMARRAY);
LogItem(
CHAR_getChar( index, CHAR_OWNERCHARANAME ),
CHAR_getChar( index, CHAR_OWNERCDKEY ),
itemindex,
"pm_returntimeout(宠邮->逾时删除道具)",
CHAR_getInt( index,CHAR_FLOOR),
CHAR_getInt( index,CHAR_X ),
CHAR_getInt( index,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
}
}
}
}
}
static void PETMAIL_IdleProc5( int index)
{
unsigned int t = CHAR_getInt( index, CHAR_PETMAILIDLETIME);
if( NowTime.tv_sec > t + PETMAIL_IDLEDISCARD) {
Char *ch;
CHAR_setInt( index, CHAR_MAILMODE, CHAR_PETMAIL_NONE);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, 0);
#ifdef _FIX_PETMAIL // WON ADD 修正宠邮
CHAR_setInt( index, CHAR_PUTPETTIME, NowTime.tv_sec );
#endif
#ifdef _PETMAIL_DEFNUMS
PETMAIL_delPetMailTotalnums( 1); //M PET 变自由宠
if( PetMailTotalnums < 0 ) PetMailTotalnums = 0;
#endif
ch = CHAR_getCharPointer( index);
if( ch != NULL ) {
strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
sizeof( ch->charfunctable[CHAR_LOOPFUNC]), "" );
CHAR_constructFunctable( index);
}
#ifdef _PET_LOSTPET
CHAR_CharSaveLostPet( index, 2);
LogPet(
"系统",
"Watchfunc",
CHAR_getChar( index, CHAR_NAME),
CHAR_getInt( index, CHAR_LV),
"timeout_lost(系统扣留-宠邮自由宠)",
CHAR_getInt( index, CHAR_FLOOR),
CHAR_getInt( index,CHAR_X ),
CHAR_getInt( index,CHAR_Y ),
CHAR_getChar( index, CHAR_UNIQUECODE) // shan 2001/12/14
);
print("系统扣留-宠邮自由宠:%s\n", CHAR_getUseName( index));
CHAR_CharaDelete( index);
#else
LogPet(
CHAR_getChar( index, CHAR_OWNERCHARANAME ),
CHAR_getChar( index, CHAR_OWNERCDKEY ),
CHAR_getChar( index, CHAR_NAME),
CHAR_getInt( index, CHAR_LV),
"FreePet(宠邮变回自由宠)",
CHAR_getInt( index,CHAR_FLOOR),
CHAR_getInt( index,CHAR_X ),
CHAR_getInt( index,CHAR_Y ),
CHAR_getChar( index, CHAR_UNIQUECODE)
);
#endif
}else {
int tocharaindex = PETMAIL_CheckPlayerExist( index, 1);
if( tocharaindex != -1 ) {
if( NPC_Util_CharDistance( tocharaindex, index ) > CHAR_DEFAULTSEESIZ/2) {
int fl, x, y, ch_x, ch_y;
int cnt;
fl = CHAR_getInt( tocharaindex, CHAR_FLOOR);
ch_x = CHAR_getInt( tocharaindex, CHAR_X);
ch_y = CHAR_getInt( tocharaindex, CHAR_Y);
for( cnt = 0; cnt < 10; cnt ++ ) {
x = RAND( ch_x -1, ch_x + 1);
y = RAND( ch_y -1, ch_y + 1);
if( MAP_walkAble( index, fl,x,y)) {
break;
}
}
if( cnt == 10 ) {
x = ch_x; y = ch_y;
}
CHAR_warpToSpecificPoint( index,fl, x,y);
}
}
}
}
static void PETMAIL_returnMail( int index, int tocharaindex)
{
char msgbuf[512];
int itemindex = CHAR_getItemIndex( index, CHAR_STARTITEMARRAY);
if( ITEM_CHECKINDEX( itemindex ) ) {
int ret = CHAR_addItemSpecificItemIndex( tocharaindex, itemindex);
if( ret < 0 || ret >= CHAR_MAXITEMHAVE){
CHAR_DropItem( index, CHAR_STARTITEMARRAY);
LogItem(
CHAR_getChar( tocharaindex, CHAR_NAME ),
CHAR_getChar( tocharaindex, CHAR_CDKEY ),
itemindex,
"pm_returnputground(宠邮->道具已满将道具放置地上)",
CHAR_getInt( index,CHAR_FLOOR),
CHAR_getInt( index,CHAR_X ),
CHAR_getInt( index,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
}else {
CHAR_setItemIndex( index, CHAR_STARTITEMARRAY, -1);
CHAR_sendItemDataOne( tocharaindex, ret);
}
}
#ifdef _PETMAIL_DEFNUMS
{
int petmailnums = CHAR_getWorkInt( tocharaindex, CHAR_PETMAILNUMS);
petmailnums--;
if( petmailnums < 0 ) petmailnums = 0;
CHAR_setWorkInt( tocharaindex, CHAR_PETMAILNUMS, petmailnums);
}
#endif
if( CHAR_getInt( index, CHAR_PETMAILBUFINDEX) != -1 ) {
snprintf( msgbuf, sizeof( msgbuf),
"%s 回来了!"
"似乎无法寄送信件。",
CHAR_getUseName( index));
CHAR_talkToCli( tocharaindex, -1, msgbuf, CHAR_COLORWHITE);
PETMAIL_deleteOffmsg( CHAR_getInt( index, CHAR_PETMAILBUFINDEX));
}else {
snprintf( msgbuf, sizeof( msgbuf),
"%s 回来了!", CHAR_getUseName( index));
CHAR_talkToCli( tocharaindex, -1, msgbuf, CHAR_COLORWHITE);
}
#ifdef _PETMAIL_DEFNUMS
CHAR_AutoPickupMailPet( tocharaindex, index);
#endif
}
#ifdef _PETMAIL_DEFNUMS
void CHAR_AutoPickupMailPet( int charaindex, int petindex )
{
int objindex;
int havepetindex;
char category[3];
Char *ch;
if( !CHAR_CHECKINDEX( charaindex ) ) return;
#ifdef _AVID_TRADETRYBUG //丢出宠物
if( CHAR_getWorkInt( charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){
CHAR_talkToCli( charaindex, -1, "交易状态中无法自动拾回邮件宠物!", CHAR_COLORYELLOW );
return;
}
#endif
if( !CHAR_CHECKINDEX( petindex ) ) return;
havepetindex = CHAR_getCharPetElement( charaindex);
if( havepetindex == -1 ) {
CHAR_talkToCli(charaindex,-1,"宠物栏已满!无法自动拾回邮件宠物!",CHAR_COLORYELLOW);
// WON ADD
LogPet(
CHAR_getChar( charaindex, CHAR_NAME ),
CHAR_getChar( charaindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"Pet_Full(宠物栏已满,无法拾起宠物)",
CHAR_getInt( charaindex,CHAR_FLOOR),
CHAR_getInt( charaindex,CHAR_X ),
CHAR_getInt( charaindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE)
);
return;
}
ch = CHAR_getCharPointer( petindex);
if( ch == NULL ) return;
objindex = CHAR_getWorkInt( petindex, CHAR_WORKOBJINDEX );
CHAR_ObjectDelete(objindex);
CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex);
CHAR_setCharPet( charaindex, havepetindex, petindex);
CHAR_setChar( petindex, CHAR_OWNERCDKEY, CHAR_getChar( charaindex, CHAR_CDKEY));
CHAR_setChar( petindex, CHAR_OWNERCHARANAME, CHAR_getChar( charaindex, CHAR_NAME));
snprintf( category,sizeof( category),"K%d",havepetindex);
CHAR_sendStatusString( charaindex, category);
snprintf( category,sizeof( category),"W%d",havepetindex);
CHAR_sendStatusString( charaindex, category);
CHAR_setInt( petindex, CHAR_PUTPETTIME, 0);
CHAR_setWorkInt( petindex, CHAR_WORKOBJINDEX, -1);
CHAR_setInt( petindex, CHAR_MAILMODE, CHAR_PETMAIL_NONE);
PETMAIL_delPetMailTotalnums( 1); // M PET 自动捡起
strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
sizeof( ch->charfunctable[CHAR_LOOPFUNC]),"");
CHAR_setInt( petindex, CHAR_LOOPINTERVAL, 0);
CHAR_constructFunctable( petindex);
CHAR_complianceParameter( petindex );
if( PetMailTotalnums < 0 ) PetMailTotalnums = 0;
{
char mesg[256];
char *p = NULL;
p = CHAR_getChar( petindex, CHAR_USERPETNAME);
if( strlen( p) == 0 ) {
p = CHAR_getChar( petindex, CHAR_NAME);
}
snprintf( mesg,sizeof(mesg), "拾回邮件宠物 %s", p);
CHAR_talkToCli(charaindex,-1,mesg,CHAR_COLORYELLOW);
}
LogPet(
CHAR_getChar( charaindex, CHAR_NAME ),
CHAR_getChar( charaindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"PickupMailPet(自动收回邮宠)",
CHAR_getInt( charaindex,CHAR_FLOOR),
CHAR_getInt( charaindex,CHAR_X ),
CHAR_getInt( charaindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE)
);
return;
}
#endif
int PETMAIL_getPetMailTotalnums()
{
#ifdef _PETMAIL_DEFNUMS
if( PetMailTotalnums < 0 ) PetMailTotalnums = 0;
if( PetMailTotalnums >= PETMAIL_DEFTOTALNUM ) PetMailTotalnums = PETMAIL_DEFTOTALNUM;
return PetMailTotalnums;
#else
return 0;
#endif
}
void PETMAIL_delPetMailTotalnums( int numflg)
{
#ifdef _PETMAIL_DEFNUMS
PetMailTotalnums = PetMailTotalnums - numflg;
if( PetMailTotalnums < 0 ) PetMailTotalnums = 0;
#endif
}
void PETMAIL_setPetMailTotalnums( int numflg)
{
PetMailTotalnums = numflg;
if( PetMailTotalnums < 0 ) PetMailTotalnums = 0;
if( PetMailTotalnums > PETMAIL_DEFTOTALNUM+10 ) PetMailTotalnums = PETMAIL_DEFTOTALNUM + 5;
}
int PETMAIL_CheckIsMyOffmsg( int fromindex, char *tocdkey, char *tocharaname)
{
int i, nums=0;
for( i = 0 ; i < PETMAIL_offmsg_max; i++ ) {
if( PETMAIL_offmsgbuf[i].use == 0 ) continue;
if( !strcmp( tocdkey, PETMAIL_offmsgbuf[i].destcd) &&
!strcmp( tocharaname, PETMAIL_offmsgbuf[i].destcharname) ){
nums++;
}
}
return nums;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -