2016-12-24 08:45:52 +08:00
|
|
|
|
#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
|
2017-01-13 05:24:03 +08:00
|
|
|
|
//#define PETMAIL_IDLEDISCARD (60*60) //Syu 修正宠邮等待时间为一小时
|
2016-12-24 08:45:52 +08:00
|
|
|
|
#define PETMAIL_IDLEDISCARD (60*3)
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
/* petmail 跨星系的等待时间 shan add */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
#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;
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
//判断 人物 宠物 道具 对象名片
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli( cindex, -1, "限时道具不可邮寄。", CHAR_COLORYELLOW );
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
2017-01-13 05:24:03 +08:00
|
|
|
|
#ifdef _AVID_TRADETRYBUG //宠物邮件
|
2016-12-24 08:45:52 +08:00
|
|
|
|
if( CHAR_getWorkInt( cindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli( cindex, -1, "交易状态中无法传递宠物邮件。", CHAR_COLORYELLOW );
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2017-01-13 05:24:03 +08:00
|
|
|
|
//骑乘
|
2016-12-24 08:45:52 +08:00
|
|
|
|
if (CHAR_getInt( cindex, CHAR_RIDEPET) == havepetindex ){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(cindex, -1, "骑乘中的宠物无法传递宠物邮件!", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
if( CHAR_getWorkInt( cindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli( cindex, -1, "战斗状态中无法传递宠物邮件。", CHAR_COLORYELLOW );
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(cindex, -1, "家族守护兽无法传递邮件喔!", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
#ifdef _PETMAIL_LV
|
|
|
|
|
if(getPetMailCf()==1 && CHAR_getInt(petindex, CHAR_LV)>=getPetMailLv()){
|
|
|
|
|
char bufmsg[256];
|
2017-01-13 05:24:03 +08:00
|
|
|
|
sprintf(bufmsg,"本线邮寄仅限%d级以下宠物,请勿用珍贵宠物进行邮寄。",getPetMailLv());
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(cindex, -1, "该玩家不在线上!", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(cindex, -1, "该玩家不在此星球上!", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
// end
|
|
|
|
|
#ifdef _MAP_TIME
|
|
|
|
|
if((CHAR_getInt(cindex,CHAR_FLOOR) >= 30017 && CHAR_getInt(cindex,CHAR_FLOOR) <= 30021)){
|
|
|
|
|
char msgbuf[512];
|
2017-01-13 05:24:03 +08:00
|
|
|
|
snprintf(msgbuf,sizeof(msgbuf),"此地区不得寄送道具!");
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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];
|
2017-01-13 05:24:03 +08:00
|
|
|
|
snprintf(msgbuf,sizeof(msgbuf),"对方所在地区不得收寄送道具!");
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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];
|
2017-01-13 05:24:03 +08:00
|
|
|
|
snprintf( msgbuf, sizeof( msgbuf), "英雄战场不得寄送道具!");
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CHAR_talkToCli( cindex, -1, msgbuf, CHAR_COLORWHITE);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef _PET_LIMITLEVEL
|
|
|
|
|
if( CHAR_getInt( petindex, CHAR_LIMITLEVEL) > 0 ) {
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(cindex, -1, "特殊宠物不能传递邮件喔!", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2017-01-13 05:24:03 +08:00
|
|
|
|
//如果是被限定的不可以邮寄的道具那么不可以寄
|
2016-12-24 08:45:52 +08:00
|
|
|
|
#ifdef _PETITEM__AMOI_E
|
|
|
|
|
if(ITEM_NOT_MAIL & ITEM_getInt(itemindex, ITEM_TYPEOFITEM)){
|
|
|
|
|
char buf[256];
|
2017-01-13 05:24:03 +08:00
|
|
|
|
sprintf( buf, "%s是不可以邮寄的哦!~", ITEM_getChar( itemindex, ITEM_NAME) );
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CHAR_talkToCli( cindex, -1, buf, CHAR_COLORRED);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef _PETMAIL_DEFNUMS
|
|
|
|
|
if( CHAR_getWorkInt( cindex, CHAR_PETMAILNUMS) > 6 ){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(cindex, -1, "邮件中宠物过多,暂时无法传递宠物邮件!", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return FALSE;
|
|
|
|
|
}else if( PETMAIL_CheckIsMyOffmsg( cindex, ae->cdkey, ae->charname) > 10 ){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(cindex, -1, "收件者目前邮件宠物超过10封,暂时无法传递宠物邮件!", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return FALSE;
|
|
|
|
|
}else if( CHAR_getWorkInt( cindex, CHAR_PETMAILSENDTIME) > (int)time( NULL)){
|
|
|
|
|
char Mess1[256];
|
2017-01-13 05:24:03 +08:00
|
|
|
|
sprintf( Mess1,"需等待%d秒才能再次寄送宠物邮件!",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
(int)time( NULL) - CHAR_getWorkInt( cindex, CHAR_PETMAILSENDTIME));
|
|
|
|
|
CHAR_talkToCli( cindex, -1, Mess1, CHAR_COLORYELLOW);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}else if( PetMailTotalnums >= PETMAIL_DEFTOTALNUM ){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(cindex, -1, "目前系统邮件过多,请稍後再寄。", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
#ifdef _FIX_PETMAIL2 // WON ADD 修正宠邮2
|
2016-12-24 08:45:52 +08:00
|
|
|
|
if( !PET_dropPetFLXY( cindex, havepetindex, PETMAIL_SPOOLFLOOR, PETMAIL_SPOOLX,PETMAIL_SPOOLY) ){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli( cindex, -1, "宠物邮件失败", CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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));
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
//#ifdef _WON_PET_MAIL_LOG // WON ADD 增加寄宠邮的 LOG
|
2016-12-24 08:45:52 +08:00
|
|
|
|
// LogPet(
|
|
|
|
|
// CHAR_getChar( cindex, CHAR_NAME ),
|
|
|
|
|
// CHAR_getChar( cindex, CHAR_CDKEY ),
|
|
|
|
|
// CHAR_getChar( petindex, CHAR_NAME),
|
|
|
|
|
// CHAR_getInt( petindex, CHAR_LV),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
// "Pet_Send_Mail(寄宠邮)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
// 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,
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"pm_have(宠邮->寄送的道具)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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);
|
2017-01-13 05:24:03 +08:00
|
|
|
|
sprintf( token, "寄送宠物邮件(%s)给%s。",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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;
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
/* 白央奶伙 毛菲户月 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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;
|
2017-01-13 05:24:03 +08:00
|
|
|
|
case CHAR_PETMAIL_RETURNWAIT://回来等待
|
2016-12-24 08:45:52 +08:00
|
|
|
|
PETMAIL_ReturnWait( index);
|
|
|
|
|
break;
|
|
|
|
|
case CHAR_PETMAIL_IDLE3:
|
|
|
|
|
PETMAIL_IdleProc3( index);
|
|
|
|
|
break;
|
2017-01-13 05:24:03 +08:00
|
|
|
|
case CHAR_PETMAIL_IDLE4://寻找主人
|
2016-12-24 08:45:52 +08:00
|
|
|
|
PETMAIL_IdleProc4( index);
|
|
|
|
|
break;
|
2017-01-13 05:24:03 +08:00
|
|
|
|
case CHAR_PETMAIL_IDLE5: //超过时间无法找到主人
|
2016-12-24 08:45:52 +08:00
|
|
|
|
PETMAIL_IdleProc5( index);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int PETMAIL_getIdleTime( int index)
|
|
|
|
|
{
|
2017-01-18 16:09:08 +08:00
|
|
|
|
#define PETMAIL_DIVRANGE 25 // 分割する量
|
|
|
|
|
#define PETMAIL_IDLELEVELRANGE 10 // 分割する範囲
|
|
|
|
|
#define PETMAIL_IDLEUNITTIME 3 // 間隔
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"%s的%s 终於来了!"
|
|
|
|
|
"由於对方没有您的名片,所以信件被退回了。",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"英雄战场不得寄送道具!" );
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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,
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"pm_putground(宠邮->道具栏已满,放置地上)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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,
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"pm_getitem(宠邮->收到的道具)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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 {
|
2017-01-13 05:24:03 +08:00
|
|
|
|
if( CHAR_getInt( tocharaindex, CHAR_FLOOR) == 8215 ){//客服活动 andy
|
2016-12-24 08:45:52 +08:00
|
|
|
|
warp = TRUE;
|
2017-01-13 05:24:03 +08:00
|
|
|
|
}else if( CHAR_getWorkInt( tocharaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){//交易中不收邮件
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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 ) {
|
2017-01-13 05:24:03 +08:00
|
|
|
|
if( CHAR_getInt( tocharaindex, CHAR_FLOOR) == 8215 ){//客服活动 andy
|
|
|
|
|
}else if( CHAR_getWorkInt( tocharaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){//交易中不收邮件
|
2016-12-24 08:45:52 +08:00
|
|
|
|
}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;
|
2017-01-13 05:24:03 +08:00
|
|
|
|
tocharaindex = PETMAIL_CheckPlayerExist( index, 1);//寻找主人
|
2016-12-24 08:45:52 +08:00
|
|
|
|
if( tocharaindex != -1 ) {
|
|
|
|
|
if( CHAR_getWorkInt( tocharaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE &&
|
|
|
|
|
CHAR_getWorkInt( tocharaindex, CHAR_WORKTRADEMODE) == CHAR_TRADE_FREE ){
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
int fl, x, y, ch_x, ch_y;//回到主人身边
|
2016-12-24 08:45:52 +08:00
|
|
|
|
|
|
|
|
|
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 {
|
2017-01-13 05:24:03 +08:00
|
|
|
|
if( NowTime.tv_sec > t + PETMAIL_IDLE_RETURNOWNER ) {//检查等待主人时间
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int itemindex;
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_warpToSpecificPoint( index, //回到原先主人所在座标
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CHAR_getInt( index, CHAR_PETMAILFROMFLOOR),
|
|
|
|
|
CHAR_getInt( index, CHAR_PETMAILFROMX),
|
|
|
|
|
CHAR_getInt( index, CHAR_PETMAILFROMY));
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_setInt( index, CHAR_MAILMODE, CHAR_PETMAIL_IDLE5);//改变宠邮状态
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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));
|
|
|
|
|
}
|
2017-01-13 05:24:03 +08:00
|
|
|
|
itemindex = CHAR_getItemIndex( index, CHAR_STARTITEMARRAY);//删除附带道具
|
2016-12-24 08:45:52 +08:00
|
|
|
|
if( ITEM_CHECKINDEX( itemindex ) ) {
|
|
|
|
|
CHAR_DropItem( index, CHAR_STARTITEMARRAY);
|
|
|
|
|
|
|
|
|
|
LogItem(
|
|
|
|
|
CHAR_getChar( index, CHAR_OWNERCHARANAME ),
|
|
|
|
|
CHAR_getChar( index, CHAR_OWNERCDKEY ),
|
|
|
|
|
itemindex,
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"pm_returntimeout(宠邮->逾时删除道具)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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);
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
#ifdef _FIX_PETMAIL // WON ADD 修正宠邮
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CHAR_setInt( index, CHAR_PUTPETTIME, NowTime.tv_sec );
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef _PETMAIL_DEFNUMS
|
2017-01-13 05:24:03 +08:00
|
|
|
|
PETMAIL_delPetMailTotalnums( 1); //M PET 变自由宠
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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(
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"系统",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
"Watchfunc",
|
|
|
|
|
CHAR_getChar( index, CHAR_NAME),
|
|
|
|
|
CHAR_getInt( index, CHAR_LV),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"timeout_lost(系统扣留-宠邮自由宠)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CHAR_getInt( index, CHAR_FLOOR),
|
|
|
|
|
CHAR_getInt( index,CHAR_X ),
|
|
|
|
|
CHAR_getInt( index,CHAR_Y ),
|
|
|
|
|
CHAR_getChar( index, CHAR_UNIQUECODE) // shan 2001/12/14
|
|
|
|
|
);
|
2017-01-13 05:24:03 +08:00
|
|
|
|
print("系统扣留-宠邮自由宠:%s\n", CHAR_getUseName( index));
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"FreePet(宠邮变回自由宠)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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,
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"pm_returnputground(宠邮->道具已满将道具放置地上)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"%s 回来了!"
|
|
|
|
|
"似乎无法寄送信件。",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CHAR_getUseName( index));
|
|
|
|
|
CHAR_talkToCli( tocharaindex, -1, msgbuf, CHAR_COLORWHITE);
|
|
|
|
|
PETMAIL_deleteOffmsg( CHAR_getInt( index, CHAR_PETMAILBUFINDEX));
|
|
|
|
|
}else {
|
|
|
|
|
snprintf( msgbuf, sizeof( msgbuf),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"%s 回来了!", CHAR_getUseName( index));
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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;
|
2017-01-13 05:24:03 +08:00
|
|
|
|
#ifdef _AVID_TRADETRYBUG //丢出宠物
|
2016-12-24 08:45:52 +08:00
|
|
|
|
if( CHAR_getWorkInt( charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE ){
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli( charaindex, -1, "交易状态中无法自动拾回邮件宠物!", CHAR_COLORYELLOW );
|
2016-12-24 08:45:52 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
if( !CHAR_CHECKINDEX( petindex ) ) return;
|
|
|
|
|
havepetindex = CHAR_getCharPetElement( charaindex);
|
|
|
|
|
if( havepetindex == -1 ) {
|
|
|
|
|
|
2017-01-13 05:24:03 +08:00
|
|
|
|
CHAR_talkToCli(charaindex,-1,"宠物栏已满!无法自动拾回邮件宠物!",CHAR_COLORYELLOW);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
// WON ADD
|
|
|
|
|
LogPet(
|
|
|
|
|
CHAR_getChar( charaindex, CHAR_NAME ),
|
|
|
|
|
CHAR_getChar( charaindex, CHAR_CDKEY ),
|
|
|
|
|
CHAR_getChar( petindex, CHAR_NAME),
|
|
|
|
|
CHAR_getInt( petindex, CHAR_LV),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
"Pet_Full(宠物栏已满,无法拾起宠物)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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);
|
2017-01-13 05:24:03 +08:00
|
|
|
|
PETMAIL_delPetMailTotalnums( 1); // M PET 自动捡起
|
2016-12-24 08:45:52 +08:00
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
2017-01-13 05:24:03 +08:00
|
|
|
|
snprintf( mesg,sizeof(mesg), "拾回邮件宠物 %s", p);
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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),
|
2017-01-13 05:24:03 +08:00
|
|
|
|
// "PickupMailPet(自动收回邮宠)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
// 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|