chuyiwen_gmsv/char/petmail.c
chuyiwen bea5ac05b3 sq_gmsv_chuyiwen
sa_sever
2016-12-24 09:45:52 +09:00

1125 lines
35 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "version.h"
#include <stdio.h>
#include "configfile.h"
#include "buf.h"
#include "char_base.h"
#include "char.h"
#include "battle.h"
#include "handletime.h"
#include "map_deal.h"
#include "addressbook.h"
#include "lssproto_serv.h"
#include "pet.h"
#include "petmail.h"
#include "npcutil.h"
#include "log.h"
#define PETMAIL_BATTLETIMEOUT 660
#define PETMAIL_IDLETIMEOUT 30
#define PETMAIL_IDLETIME 10
#define PETMAIL_IDLE_RETURNOWNER (60*30)
//andy_edit
//#define PETMAIL_IDLEDISCARD (60*60) //Syu 修正宠邮等待时间为一小时
#define PETMAIL_IDLEDISCARD (60*3)
/* petmail 跨星系的等待时间 shan add */
#define PETMAIL_JS_TIMEOUT (2*60)
static int PETMAIL_getIdleTime( int index);
static void PETMAIL_sendPetmail( int index, int tocharaindex);
static void PETMAIL_IdleProc1( int index);
static void PETMAIL_IdleProc2( int index);
static void PETMAIL_IdleProc3( int index);
static void PETMAIL_IdleProc4( int index);
static void PETMAIL_IdleProc5( int index);
static void PETMAIL_ReturnWait( int index);
static void PETMAIL_returnMail( int index, int tocharaindex);
static int PETMAIL_offmsg_max;
#define PETMAILOFFMSGFILE "petmail.txt"
#define PETMAIL_DEFTOTALNUM 1000
static int PetMailTotalnums = 0;
BOOL PETMAIL_sendPetMail( int cindex, int aindex,
int havepetindex, int haveitemindex, char* text , int color )
{
char textbuffer[2048];
struct tm tm1;
Char *ch;
ADDRESSBOOK_entry *ae;
int petindex;
int itemindex =-1;
int tocharaindex,playernum,i;
//判断 人物 宠物 道具 对象名片
if( !CHAR_CHECKINDEX( cindex) )return FALSE;
if( haveitemindex != -1 ) {
itemindex = CHAR_getItemIndex( cindex, haveitemindex);
if( ITEM_CHECKINDEX( itemindex)) {
if( ITEM_getInt( itemindex, ITEM_CANPETMAIL) == 0 ) {
print( "err? crack?\n");
return FALSE;
}
if(ITEM_getInt( itemindex, ITEM_TIME)>0){
CHAR_talkToCli( cindex, -1, "限时道具不可邮寄。", CHAR_COLORYELLOW );
return FALSE;
}
}
}
petindex = CHAR_getCharPet( cindex, havepetindex);
if( petindex == -1 ) return FALSE;
ch = CHAR_getCharPointer( petindex);
if( ch == NULL ) return FALSE;
ae = CHAR_getAddressbookEntry( cindex , aindex );
if( ae == NULL )return FALSE;
if (CHAR_getWorkInt( cindex, CHAR_WORKSAFEMODE)==0)
{
CHAR_SafePassword(cindex);
return FALSE;
}
#ifdef _AVID_TRADETRYBUG //宠物邮件
if( CHAR_getWorkInt( cindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){
CHAR_talkToCli( cindex, -1, "交易状态中无法传递宠物邮件。", CHAR_COLORYELLOW );
return FALSE;
}
#endif
//骑乘
if (CHAR_getInt( cindex, CHAR_RIDEPET) == havepetindex ){
CHAR_talkToCli(cindex, -1, "骑乘中的宠物无法传递宠物邮件!", CHAR_COLORYELLOW);
return FALSE;
}
if( CHAR_getWorkInt( cindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE){
CHAR_talkToCli( cindex, -1, "战斗状态中无法传递宠物邮件。", CHAR_COLORYELLOW );
return FALSE;
}
if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1){
CHAR_talkToCli(cindex, -1, "家族守护兽无法传递邮件喔!", CHAR_COLORYELLOW);
return FALSE;
}
#ifdef _PETMAIL_LV
if(getPetMailCf()==1 && CHAR_getInt(petindex, CHAR_LV)>=getPetMailLv()){
char bufmsg[256];
sprintf(bufmsg,"本线邮寄仅限%d级以下宠物请勿用珍贵宠物进行邮寄。",getPetMailLv());
CHAR_talkToCli(cindex, -1, bufmsg, CHAR_COLORYELLOW);
return FALSE;
}
#endif
// Terry add fix can send mail to offline character 2004/2/5
if(ae->online == 0){
CHAR_talkToCli(cindex, -1, "该玩家不在线上!", CHAR_COLORYELLOW);
return FALSE;
}
playernum = CHAR_getPlayerMaxNum();
for(i = 0;i<playernum;i++){
if(CHAR_CHECKINDEX(i) &&
strcmp(CHAR_getChar(i,CHAR_CDKEY),ae->cdkey) == 0 &&
strcmp(CHAR_getChar(i,CHAR_NAME),ae->charname) == 0 ) break;
}
if(i == playernum){
CHAR_talkToCli(cindex, -1, "该玩家不在此星球上!", CHAR_COLORYELLOW);
return FALSE;
}
// end
#ifdef _MAP_TIME
if((CHAR_getInt(cindex,CHAR_FLOOR) >= 30017 && CHAR_getInt(cindex,CHAR_FLOOR) <= 30021)){
char msgbuf[512];
snprintf(msgbuf,sizeof(msgbuf),"此地区不得寄送道具!");
CHAR_talkToCli(cindex,-1,msgbuf,CHAR_COLORWHITE);
return FALSE;
}
if((CHAR_getInt(i,CHAR_FLOOR) >= 30017 && CHAR_getInt(i,CHAR_FLOOR) <= 30021)){
char msgbuf[512];
snprintf(msgbuf,sizeof(msgbuf),"对方所在地区不得收寄送道具!");
CHAR_talkToCli(cindex,-1,msgbuf,CHAR_COLORWHITE);
return FALSE;
}
#endif
// Syu Add 2003/05/30
if( ( CHAR_getInt(cindex,CHAR_FLOOR) >= 8200 && CHAR_getInt(cindex,CHAR_FLOOR) <= 8213 ) )
{
char msgbuf[512];
snprintf( msgbuf, sizeof( msgbuf), "英雄战场不得寄送道具!");
CHAR_talkToCli( cindex, -1, msgbuf, CHAR_COLORWHITE);
return FALSE;
}
#ifdef _PET_LIMITLEVEL
if( CHAR_getInt( petindex, CHAR_LIMITLEVEL) > 0 ) {
CHAR_talkToCli(cindex, -1, "特殊宠物不能传递邮件喔!", CHAR_COLORYELLOW);
return FALSE;
}
#endif
//如果是被限定的不可以邮寄的道具那么不可以寄
#ifdef _PETITEM__AMOI_E
if(ITEM_NOT_MAIL & ITEM_getInt(itemindex, ITEM_TYPEOFITEM)){
char buf[256];
sprintf( buf, "%s是不可以邮寄的哦!~", ITEM_getChar( itemindex, ITEM_NAME) );
CHAR_talkToCli( cindex, -1, buf, CHAR_COLORRED);
return FALSE;
}
#endif
#ifdef _PETMAIL_DEFNUMS
if( CHAR_getWorkInt( cindex, CHAR_PETMAILNUMS) > 6 ){
CHAR_talkToCli(cindex, -1, "邮件中宠物过多,暂时无法传递宠物邮件!", CHAR_COLORYELLOW);
return FALSE;
}else if( PETMAIL_CheckIsMyOffmsg( cindex, ae->cdkey, ae->charname) > 10 ){
CHAR_talkToCli(cindex, -1, "收件者目前邮件宠物超过10封暂时无法传递宠物邮件", CHAR_COLORYELLOW);
return FALSE;
}else if( CHAR_getWorkInt( cindex, CHAR_PETMAILSENDTIME) > (int)time( NULL)){
char Mess1[256];
sprintf( Mess1,"需等待%d秒才能再次寄送宠物邮件",
(int)time( NULL) - CHAR_getWorkInt( cindex, CHAR_PETMAILSENDTIME));
CHAR_talkToCli( cindex, -1, Mess1, CHAR_COLORYELLOW);
return FALSE;
}else if( PetMailTotalnums >= PETMAIL_DEFTOTALNUM ){
CHAR_talkToCli(cindex, -1, "目前系统邮件过多,请稍後再寄。", CHAR_COLORYELLOW);
return FALSE;
}else{
int nums = CHAR_getWorkInt( cindex, CHAR_PETMAILNUMS);
nums ++;
CHAR_setWorkInt( cindex, CHAR_PETMAILNUMS, nums);
CHAR_setWorkInt( cindex, CHAR_PETMAILSENDTIME, (int)time( NULL)+6);
PetMailTotalnums ++;
}
#endif
#ifdef _AVOIDATTACK_IN_PETMAIL_sendPetMail_textToLong
if( strlen(text) > 256 )
return FALSE;
#endif
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
snprintf( textbuffer, sizeof( textbuffer),
"%2d/%02d %2d:%02d|%s", tm1.tm_mon +1, tm1.tm_mday, tm1.tm_hour, tm1.tm_min, text);
{
int offmsgindex;
offmsgindex = PETMAIL_addOffmsg( cindex, ae->cdkey, ae->charname, text, color);
if( offmsgindex == -1 ) {
print( "offmsg buffer over\n");
return FALSE;
}
#ifdef _FIX_PETMAIL2 // WON ADD 修正宠邮2
if( !PET_dropPetFLXY( cindex, havepetindex, PETMAIL_SPOOLFLOOR, PETMAIL_SPOOLX,PETMAIL_SPOOLY) ){
CHAR_talkToCli( cindex, -1, "宠物邮件失败", CHAR_COLORYELLOW);
return FALSE;
}
#endif
CHAR_setInt( petindex, CHAR_FLOOR, CHAR_getInt( cindex, CHAR_FLOOR));
CHAR_setInt( petindex, CHAR_X, CHAR_getInt( cindex, CHAR_X));
CHAR_setInt( petindex, CHAR_Y, CHAR_getInt( cindex, CHAR_Y));
CHAR_sendPMEToArroundCharacter( cindex, petindex, 0, CHAR_getInt( petindex, CHAR_PETMAILEFFECT));
CHAR_setInt( petindex, CHAR_MAILMODE,CHAR_PETMAIL_IDLE2);
CHAR_setInt( petindex, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL2);
strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
sizeof( ch->charfunctable[CHAR_LOOPFUNC]), "PETMAIL_Loop");
CHAR_constructFunctable( petindex);
CHAR_setInt( petindex, CHAR_PETMAILBUFINDEX, offmsgindex);
CHAR_setInt( petindex, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_setInt( petindex, CHAR_PETMAILFROMFLOOR, CHAR_getInt( cindex, CHAR_FLOOR));
CHAR_setInt( petindex, CHAR_PETMAILFROMX, CHAR_getInt( cindex, CHAR_X));
CHAR_setInt( petindex, CHAR_PETMAILFROMY,CHAR_getInt( cindex, CHAR_Y));
//#ifdef _WON_PET_MAIL_LOG // WON ADD 增加寄宠邮的 LOG
// LogPet(
// CHAR_getChar( cindex, CHAR_NAME ),
// CHAR_getChar( cindex, CHAR_CDKEY ),
// CHAR_getChar( petindex, CHAR_NAME),
// CHAR_getInt( petindex, CHAR_LV),
// "Pet_Send_Mail(寄宠邮)",
// CHAR_getInt( cindex,CHAR_FLOOR),
// CHAR_getInt( cindex,CHAR_X ),
// CHAR_getInt( cindex,CHAR_Y ),
// CHAR_getChar( petindex, CHAR_UNIQUECODE)
// );
//#endif
if( haveitemindex != -1 ) {
CHAR_setItemIndex( cindex, haveitemindex, -1);
CHAR_setItemIndex( petindex, CHAR_STARTITEMARRAY, itemindex);
CHAR_sendItemDataOne( cindex, haveitemindex);
LogItem(
CHAR_getChar( cindex, CHAR_NAME ),
CHAR_getChar( cindex, CHAR_CDKEY ),
itemindex,
"pm_have(宠邮->寄送的道具)",
CHAR_getInt( cindex,CHAR_FLOOR),
CHAR_getInt( cindex,CHAR_X ),
CHAR_getInt( cindex,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
}
{
char token[256];
tocharaindex = PETMAIL_CheckPlayerExist( petindex, 0);
sprintf( token, "寄送宠物邮件(%s)给%s。",
CHAR_getUseName( petindex), CHAR_getUseName( tocharaindex) );
CHAR_talkToCli( cindex, -1, token, CHAR_COLORYELLOW);
}
return TRUE;
}
return FALSE;
}
static PETMAIL_offmsg * PETMAIL_offmsgbuf;
BOOL PETMAIL_initOffmsgBuffer( int count )
{
int size = sizeof( PETMAIL_offmsg )*count ;
FILE *fp;
char filename[256];
char line[2048];
int linenum = 0;
PETMAIL_offmsgbuf = (PETMAIL_offmsg*)allocateMemory( size );
if( PETMAIL_offmsgbuf == NULL ) return FALSE;
PetMailTotalnums = 0;
memset( PETMAIL_offmsgbuf, 0,size );
PETMAIL_offmsg_max = count;
snprintf( filename ,sizeof( filename ) ,"%s/%s", getStoredir(), PETMAILOFFMSGFILE);
fp = fopen( filename , "rt" );
if( fp == NULL ) return TRUE;
while( fgets( line, sizeof( line ), fp ) != NULL ){
char buf[1024];
int index;
if( !getStringFromIndexWithDelim( line, "|", 1, buf, sizeof( buf))) {
print( "read error line[%d]\n", linenum);
continue;
}
index = atoi( buf);
if( index >= PETMAIL_offmsg_max ) {
print( "index over offmsg_max [%d]\n", index);
continue;
}
if( PETMAIL_offmsgbuf[index].use == TRUE) {
print( "offmsg already use index[%d]\n", index);
continue;
}
if( !getStringFromIndexWithDelim( line, "|", 2, buf, sizeof( buf))) {
print( "read error line[%d]\n", linenum);
continue;
}
PETMAIL_offmsgbuf[index].send_tm = atoi( buf);
if( !getStringFromIndexWithDelim( line, "|", 3, buf, sizeof( buf))) {
print( "read error line[%d]\n", linenum);
continue;
}
PETMAIL_offmsgbuf[index].color = atoi( buf);
if( !getStringFromIndexWithDelim( line, "|", 4, buf, sizeof( buf))) {
print( "read error line[%d]\n", linenum);
continue;
}
strcpysafe( PETMAIL_offmsgbuf[index].text,
sizeof( PETMAIL_offmsgbuf[index].text),
buf);
if( !getStringFromIndexWithDelim( line, "|", 5, buf, sizeof( buf))) {
print( "read error line[%d]\n", linenum);
continue;
}
strcpysafe( PETMAIL_offmsgbuf[index].destcd,
sizeof( PETMAIL_offmsgbuf[index].destcd),
buf);
if( !getStringFromIndexWithDelim( line, "|", 6, buf, sizeof( buf))) {
print( "read error line[%d]\n", linenum);
continue;
}
makeStringFromEscaped(buf);
strcpysafe( PETMAIL_offmsgbuf[index].destcharname,
sizeof( PETMAIL_offmsgbuf[index].destcharname),
buf);
if( !getStringFromIndexWithDelim( line, "|", 7, buf, sizeof( buf))) {
print( "read error line[%d]\n", linenum);
continue;
}
strcpysafe( PETMAIL_offmsgbuf[index].srccd,
sizeof( PETMAIL_offmsgbuf[index].srccd),
buf);
if( !getStringFromIndexWithDelim( line, "|", 8, buf, sizeof( buf))) {
print( "read error line[%d]\n", linenum);
continue;
}
makeStringFromEscaped(buf);
strcpysafe( PETMAIL_offmsgbuf[index].srccharname,
sizeof( PETMAIL_offmsgbuf[index].srccharname),
buf);
linenum ++;
}
fclose( fp);
return TRUE;
}
BOOL PETMAIL_addOffmsg( int fromindex, char *tocdkey, char *tocharaname,
char *text , int color )
{
int i;
for( i = 0 ; i < PETMAIL_offmsg_max; i++ ) {
if( PETMAIL_offmsgbuf[i].use == 0 ) {
PETMAIL_offmsg *om = & PETMAIL_offmsgbuf[i];
om->use = 1;
time( & om->send_tm );
strcpysafe( om->srccd , sizeof( om->srccd ),
CHAR_getChar( fromindex, CHAR_CDKEY));
strcpysafe( om->srccharname , sizeof( om->srccharname ),
CHAR_getChar( fromindex, CHAR_NAME));
strcpysafe( om->destcd , sizeof( om->destcd ), tocdkey );
strcpysafe( om->destcharname , sizeof(om->destcharname), tocharaname);
strcpysafe( om->text , sizeof(om->text), text );
om->color = color;
return i;
}
}
return -1;
}
PETMAIL_offmsg *PETMAIL_getOffmsg( int offmsgindex)
{
if( offmsgindex < 0 || offmsgindex >= PETMAIL_offmsg_max ) return NULL;
return &PETMAIL_offmsgbuf[offmsgindex];
}
BOOL PETMAIL_deleteOffmsg( int offmsgindex)
{
if( offmsgindex < 0 || offmsgindex >= PETMAIL_offmsg_max ) return FALSE;
PETMAIL_offmsgbuf[offmsgindex].use = FALSE;
return TRUE;
}
void PETMAIL_proc( void )
{
int i;
static time_t PETMAIL_check_time_store = 0;
time_t t;
time( &t );
if( t < PETMAIL_check_time_store) return;
PETMAIL_check_time_store = t + PETMAIL_CHECK_OFFMSG_EXPIRE_INTERVAL;
for(i = 0; i < PETMAIL_offmsg_max ; i++){
if( PETMAIL_offmsgbuf[i].use && PETMAIL_offmsgbuf[i].send_tm < ( t - PETMAIL_OFFMSG_TIMEOUT )){
PETMAIL_offmsgbuf[i].use = FALSE;
}
}
}
BOOL storePetmail( void)
{
FILE *fp;
char filename[256];
char escapebuf1[ 64],escapebuf2[ 64];
int i;
/* 白央奶伙 毛菲户月 */
snprintf( filename ,sizeof( filename ) ,"%s/%s" ,
getStoredir(), PETMAILOFFMSGFILE);
fp = fopen( filename , "wt" );
if( fp == NULL ) return FALSE;
for(i = 0; i < PETMAIL_offmsg_max ; i++){
if( PETMAIL_offmsgbuf[i].use ){
fprintf( fp, "%d|%ud|%d|%s|%s|%s|%s|%s|",
i, (unsigned int)PETMAIL_offmsgbuf[i].send_tm,
PETMAIL_offmsgbuf[i].color,
PETMAIL_offmsgbuf[i].text,
PETMAIL_offmsgbuf[i].destcd,
makeEscapeString( PETMAIL_offmsgbuf[i].destcharname,
escapebuf1, sizeof( escapebuf1)),
PETMAIL_offmsgbuf[i].srccd,
makeEscapeString( PETMAIL_offmsgbuf[i].srccharname,
escapebuf2, sizeof( escapebuf2)));
}
}
fclose( fp);
return TRUE;
}
BOOL PETMAIL_CheckPlayerExist( int index, int mode)
{
int i;
char *searchcd = NULL;
char *searchname = NULL;
PETMAIL_offmsg *adof;
int playernum = CHAR_getPlayerMaxNum();
if( mode == 0 ) {
adof = PETMAIL_getOffmsg( CHAR_getInt( index, CHAR_PETMAILBUFINDEX));
if( adof == NULL ) return FALSE;
searchcd = adof->destcd;
searchname = adof->destcharname;
}
else if( mode == 1 ) {
searchcd = CHAR_getChar( index, CHAR_OWNERCDKEY);
searchname = CHAR_getChar( index, CHAR_OWNERCHARANAME);
if( searchcd == "\0" || searchname == "\0" ) return FALSE;
}
for( i = 0 ; i < playernum ; i ++) {
if( CHAR_CHECKINDEX( i) &&
strcmp( CHAR_getChar( i, CHAR_CDKEY), searchcd ) == 0 &&
strcmp( CHAR_getChar( i, CHAR_NAME), searchname) == 0 ) {
return i;
}
}
return -1;
}
void PETMAIL_Loopfunc( int index)
{
int mode = CHAR_getInt( index, CHAR_MAILMODE);
switch( mode ){
case CHAR_PETMAIL_IDLE1:
PETMAIL_IdleProc1( index);
break;
case CHAR_PETMAIL_IDLE2:
PETMAIL_IdleProc2( index);
break;
case CHAR_PETMAIL_RETURNWAIT://回来等待
PETMAIL_ReturnWait( index);
break;
case CHAR_PETMAIL_IDLE3:
PETMAIL_IdleProc3( index);
break;
case CHAR_PETMAIL_IDLE4://寻找主人
PETMAIL_IdleProc4( index);
break;
case CHAR_PETMAIL_IDLE5: //超过时间无法找到主人
PETMAIL_IdleProc5( index);
break;
default:
break;
}
}
static int PETMAIL_getIdleTime( int index)
{
#define PETMAIL_DIVRANGE 25 // 坌喃允月汹
#define PETMAIL_IDLELEVELRANGE 10 // 坌喃允月 区
#define PETMAIL_IDLEUNITTIME 3 // 棉厥
int d;
#ifdef _PETMAIL_TIME
int dex;
if(getPetMailTime()>0)
dex = getPetMailTime();
else
dex = CHAR_getWorkInt( index, CHAR_WORKQUICK);
#else
int dex = CHAR_getWorkInt( index, CHAR_WORKQUICK) ;
#endif
d = dex / PETMAIL_DIVRANGE;
if( d < 0 ) d = 0;
if( d > PETMAIL_IDLELEVELRANGE ) d = PETMAIL_IDLELEVELRANGE;
d = PETMAIL_IDLELEVELRANGE - d ;
return d * PETMAIL_IDLEUNITTIME;
#undef PETMAIL_DIVRANGE
#undef PETMAIL_IDLELEVELRANGE
#undef PETMAIL_IDLEUNITTIME
}
static void PETMAIL_sendPetmail( int index, int tocharaindex)
{
int index_to_my_info;
int itemindex,ret;
index_to_my_info = ADDRESSBOOK_getIndexInAddressbook( tocharaindex,
CHAR_getChar( index, CHAR_OWNERCDKEY),
CHAR_getChar( index, CHAR_OWNERCHARANAME));
if( index_to_my_info < 0 ) {
char msgbuf[512];
snprintf( msgbuf, sizeof( msgbuf),
"%s的%s 终於来了!"
"由於对方没有您的名片,所以信件被退回了。",
CHAR_getChar( index, CHAR_OWNERCHARANAME),
CHAR_getUseName( index));
CHAR_talkToCli( tocharaindex, -1, msgbuf, CHAR_COLORWHITE);
}
//Syu Add 06/16
else if( CHAR_getInt(tocharaindex,CHAR_FLOOR) >=8200 &&
CHAR_getInt(tocharaindex,CHAR_FLOOR) <= 8213 ){
char msgbuf[512];
snprintf( msgbuf, sizeof( msgbuf),
"英雄战场不得寄送道具!" );
CHAR_talkToCli( tocharaindex, -1, msgbuf, CHAR_COLORWHITE);
}
else {
struct tm tm1;
char textbuffer[2048];
char escapebuf[128];
int fd;
PETMAIL_offmsg *offmsg;
itemindex = CHAR_getItemIndex( index, CHAR_STARTITEMARRAY);
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_putground(宠邮->道具栏已满,放置地上)",
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);
LogItem(
CHAR_getChar( tocharaindex, CHAR_NAME ),
CHAR_getChar( tocharaindex, CHAR_CDKEY ),
itemindex,
"pm_getitem(宠邮->收到的道具)",
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)
);
}
offmsg = PETMAIL_getOffmsg(
CHAR_getInt( index, CHAR_PETMAILBUFINDEX));
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec),
sizeof( tm1));
snprintf( textbuffer, sizeof( textbuffer),
"%2d/%02d %2d:%02d|%s|%d|%d|%s|%d",
tm1.tm_mon +1, tm1.tm_mday, tm1.tm_hour, tm1.tm_min,
offmsg->text,
CHAR_getInt( index, CHAR_BASEIMAGENUMBER),
CHAR_getInt( index, CHAR_LV),
makeEscapeString( CHAR_getUseName( index), escapebuf,
sizeof( escapebuf)),
ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER)
);
fd = getfdFromCharaIndex( tocharaindex);
if( fd != -1 ) lssproto_MSG_send( fd , index_to_my_info ,
textbuffer , offmsg->color );
PETMAIL_deleteOffmsg( CHAR_getInt( index, CHAR_PETMAILBUFINDEX));
CHAR_setInt( index, CHAR_PETMAILBUFINDEX, -1);
CHAR_setInt( index, CHAR_PETSENDMAILCOUNT,
CHAR_getInt( index, CHAR_PETSENDMAILCOUNT) +1);
{
char *cdkey = CHAR_getChar( index, CHAR_CDKEY);
if( cdkey) printl( LOG_TALK, "CDKEY=%s\tTEXT=%s" , cdkey, offmsg->text );
else printl( LOG_TALK, "CDKEY=(null)\tTEXT=%s" , offmsg->text );
}
}
}
static void PETMAIL_IdleProc1( int index)
{
int tocharaindex;
int warp = FALSE;
tocharaindex = PETMAIL_CheckPlayerExist( index, 0);
if( !CHAR_CHECKINDEX( tocharaindex) ) {
warp = TRUE;
}else {
if( CHAR_getInt( tocharaindex, CHAR_FLOOR) == 8215 ){//客服活动 andy
warp = TRUE;
}else if( CHAR_getWorkInt( tocharaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){//交易中不收邮件
warp = TRUE;
}else if( CHAR_getWorkInt( tocharaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ){
int battleindex = CHAR_getWorkInt( tocharaindex, CHAR_WORKBATTLEINDEX );
if( !BATTLE_CHECKINDEX( battleindex ) || BattleArray[battleindex].flgTime > 60 ){
warp = TRUE;
}
}else {
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 {
PETMAIL_sendPetmail( index, tocharaindex);
CHAR_setInt( index, CHAR_MAILMODE,CHAR_PETMAIL_RETURNWAIT);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_setInt( index, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL2);
}
}
}
if( warp) {
if( CHAR_getInt( index, CHAR_FLOOR) != PETMAIL_SPOOLFLOOR) {
CHAR_warpToSpecificPoint( index,
PETMAIL_SPOOLFLOOR,
PETMAIL_SPOOLX,PETMAIL_SPOOLX);
CHAR_setInt( index, CHAR_MAILMODE,CHAR_PETMAIL_IDLE2);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_setInt( index, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL2);
}
}
}
static void PETMAIL_IdleProc2( int index)
{
unsigned int t = CHAR_getInt( index, CHAR_PETMAILIDLETIME);
if( NowTime.tv_sec > t + PETMAIL_getIdleTime( index)) {
int tocharaindex;
int cnt;
tocharaindex = PETMAIL_CheckPlayerExist( index, 0);
if( tocharaindex != -1 ) {
if( CHAR_getInt( tocharaindex, CHAR_FLOOR) == 8215 ){//客服活动 andy
}else if( CHAR_getWorkInt( tocharaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){//交易中不收邮件
}else if( CHAR_getWorkInt( tocharaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE){
}else {
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( tocharaindex, fl,x,y)) {
break;
}
}
if( cnt == 10 ) {
x = ch_x; y = ch_y;
}
CHAR_setInt( index, CHAR_MAILMODE,CHAR_PETMAIL_RETURNWAIT);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_warpToSpecificPoint( index,fl, x,y);
PETMAIL_sendPetmail( index, tocharaindex);
return;
}
}else{
if( NowTime.tv_sec > t + PETMAIL_IDLETIMEOUT ) {
PETMAIL_deleteOffmsg( CHAR_getInt( index, CHAR_PETMAILBUFINDEX));
CHAR_setInt( index, CHAR_MAILMODE, CHAR_PETMAIL_IDLE3);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_setInt( index, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL1);
}
return;
}
if( NowTime.tv_sec > t + PETMAIL_BATTLETIMEOUT ) {
PETMAIL_deleteOffmsg( CHAR_getInt( index, CHAR_PETMAILBUFINDEX));
CHAR_setInt( index, CHAR_MAILMODE, CHAR_PETMAIL_IDLE3);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_setInt( index, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL1);
}
}
}
static void PETMAIL_ReturnWait( int index)
{
unsigned int t = CHAR_getInt( index, CHAR_PETMAILIDLETIME);
if( NowTime.tv_sec > t + PETMAIL_IDLETIME) {
CHAR_setInt( index, CHAR_MAILMODE, CHAR_PETMAIL_IDLE3);
CHAR_setInt( index, CHAR_PETMAILIDLETIME, NowTime.tv_sec);
CHAR_setInt( index, CHAR_LOOPINTERVAL, PETMAIL_LOOPINTERVAL1);
}
}
static void PETMAIL_IdleProc3( int index)
{
int tocharaindex;
int warp = FALSE;
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;
}