chuyiwen_gmsv/npc/npc_newnpcman.c
2017-01-14 00:37:03 +09:00

1192 lines
35 KiB
C
Raw Permalink 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 <string.h>
#include <math.h>
#include "char.h"
#include "object.h"
#include "char_base.h"
#include "npcutil.h"
#include "lssproto_serv.h"
#include "enemy.h"
#include "log.h"
#include "battle.h"
#include "readmap.h"
#include "handletime.h"
#include "npc_eventaction.h"
#include "npc_newnpcman.h"
#include "pet.h"
#define NEWNPCMAN_STANDBY 5000
#define NEWNPCMAN_WAITTIME 150
enum {
WINDOW_START=1,
WINDOW_SELECT1,
WINDOW_SELECT2,
WINDOW_SELECT3,
WINDOW_SELECTLOSTPET,
WINDOW_DEFIND,
WINDOW_WARP,
WINDOW_END,
NPC_PROGRAMEGINEER_START=1,
NPC_PROGRAMEGINEER_SELECT1,
NPC_PROGRAMEGINEER_SELECT2,
NPC_PROGRAMEGINEER_SELECT3,
NPC_PROGRAMEGINEER_SELECTLOSTPET,
NPC_PROGRAMEGINEER_DEFIND,
NPC_PROGRAMEGINEER_END,
};
enum {
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT1,
/*
NPC_WORK_ROUTETOY = CHAR_NPCWORKINT2,
NPC_WORK_ROUTEPOINT = CHAR_NPCWORKINT3,
NPC_WORK_ROUNDTRIP = CHAR_NPCWORKINT4,
NPC_WORK_MODE = CHAR_NPCWORKINT5,
NPC_WORK_CURRENTROUTE = CHAR_NPCWORKINT6,
NPC_WORK_ROUTEMAX = CHAR_NPCWORKINT7,
NPC_WORK_WAITTIME = CHAR_NPCWORKINT8,
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT9,
NPC_WORK_SEFLG = CHAR_NPCWORKINT10,
*/
};
/*
char UserBBIs[12][256]={
"小矮子", "赛亚人", "辫子男孩", "酷哥", "熊皮男", "大个",
"小矮妹", "熊皮妹", "帽子妹", "短法发夹妹", "手套女", "辣妹" };
char PetBBIs[4][256]={//格鲁西斯 贝鲁卡 金格萨贝鲁 贝鲁伊卡
"格鲁西斯-红虎", "贝鲁卡-绿虎", "金格萨贝鲁-金虎", "贝鲁伊卡-黄虎" };
int PlayerBBI[6*2][4]={
{ 100000, 100005, 100010, 100015 }, //小矮子
{ 100025, 100030, 100035, 100020 }, //赛亚人
{ 100055, 100050, 100045, 100040 }, //辫子男孩
{ 100060, 100065, 100070, 100075 }, //酷哥
{ 100095, 100085, 100090, 100080 }, //熊皮男
{ 100100, 100115, 100110, 100115 }, //大个
{ 100135, 100120, 100125, 100130 }, //小矮妹
{ 100145, 100140, 100150, 100155 }, //熊皮妹
{ 100165, 100170, 100160, 100175 }, //帽子妹
{ 100190, 100195, 100185, 100180 }, //短发发夹妹
{ 100200, 100210, 100215, 100205 }, //手套女
{ 100230, 100225, 100220, 100235 } //辣妹
};
*/
static int checkPc[48][3];
static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg);
void NPC_reCheckMyPetUnusual( int meindex, int toindex);//检查宠物异常
BOOL CHECK_ReplacePET( int toindex); //更换宠物
void NPC_reCheckItemPilenum( int meindex, int toindex);//还原铁枪三堆叠
BOOL CHECK_ITEMEQUIT( int toindex);//更换灵力铠
BOOL CHECK_PETBBI( int toindex);//修正宠物图号
#ifdef _PET_LOSTPET
BOOL NPC_reFindMyLostPet( int meindex, int toindex, char *buf);
BOOL NPC_getLostPetString( int meindex, int toindex);
BOOL NPC_backupLostPetString( int toindex);
static char petstring[7][2048]={"","","","","","",""};
#endif
BOOL NPC_NewNpcManInit( int meindex )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("TRANSER_MAN: GetArgStrErr!!");
return FALSE;
}
{
int i;
for( i=0; i<48; i++){
if( i == 0 ){
checkPc[i][0]=30000;
checkPc[i][1]=30024;
checkPc[i][2]=100000;
}else{
checkPc[i][0] = checkPc[i-1][0] + 25;
checkPc[i][1] = checkPc[i-1][1] + 25;
checkPc[i][2] = checkPc[i-1][2] + 5;
}
// print("ANDY checkPc:%d[%d,%d,%d]\n", i, checkPc[i][0], checkPc[i][1], checkPc[i][2]);
}
}
CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_NEWNPCMAN);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
return TRUE;
}
void NPC_NewNpcManLoop( int meindex)
{
}
void NPC_NewNpcManTalked( int meindex , int talkerindex , char *msg , int color )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )
return;
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE)
return;
}
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("TRANSER_MAN: GetArgStrErr!!");
return;
}
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
if( CHAR_getInt( talkerindex, CHAR_BASEBASEIMAGENUMBER) != 101578 ){
NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT1, 0);
return;
}
NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_START, 0);
}
static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[256];
int buttontype = 0, windowtype = 0, windowno = 0;
int fd = getfdFromCharaIndex( toindex);
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
if(NPC_Util_isFaceToFace( meindex ,toindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( toindex, meindex, 1) == FALSE)
return;
}
memset( npcarg, 0, sizeof( npcarg));
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
return;
}
memset( token, 0, sizeof( token));
switch( num) {
case WINDOW_START:
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "START_MSG", token, sizeof( token) ) == NULL) {
return;
}
buttontype = WINDOW_BUTTONTYPE_YESNO;
windowno = NPC_PROGRAMEGINEER_DEFIND;
break;
case WINDOW_SELECT1:
sprintf(token," 请选择"
"\n 《修正宠物异常》"
"\n 《修正宠物图号》"
"\n 《更换灵力铠》"
#ifdef _PET_LOSTPET
"\n 《领回遗失宠物》"
#endif
// "\n 《还原铁枪三堆叠》"
);
windowtype = WINDOW_MESSAGETYPE_SELECT;
buttontype = WINDOW_BUTTONTYPE_CANCEL;
windowno = NPC_PROGRAMEGINEER_SELECT2;
break;
case WINDOW_SELECT2:
switch( flg){
case 1://修正宠物异常
NPC_reCheckMyPetUnusual( meindex, toindex);
CHAR_talkToCli( toindex, -1, "身上宠物检查完毕!", CHAR_COLORYELLOW);
return;
break;
case 2://修正宠物图号
CHECK_PETBBI( toindex);
return;
break;
case 3://更换灵力铠
if( CHECK_ITEMEQUIT( toindex) == TRUE ){
CHAR_talkToCli( toindex, -1, "检查完毕!", CHAR_COLORYELLOW);
}
return;
break;
case 4:
#ifdef _PET_LOSTPET
if( NPC_reFindMyLostPet( meindex, toindex, token) == FALSE ){
CHAR_talkToCli( toindex, -1, "查无资料!", CHAR_COLORYELLOW);
return;
}
windowtype = WINDOW_MESSAGETYPE_SELECT;
buttontype = WINDOW_BUTTONTYPE_CANCEL;
windowno = NPC_PROGRAMEGINEER_SELECTLOSTPET;
#endif
break;
case 5: //还原铁枪三堆叠
// NPC_reCheckItemPilenum( meindex, toindex);
return;
break;
}
break;
/*
case WINDOW_SELECT3:
{
int petnum, petindex;
petnum = atoi( data)-1;
if( petnum >= CHAR_MAXPETHAVE || petnum < 0 ) return;
petindex = CHAR_getCharPet( talker, petsel);
if( !CHAR_CHECKINDEX(petindex) ) return;
break;
}
*/
case WINDOW_SELECTLOSTPET:
#ifdef _PET_LOSTPET
{
int ret, i, ti, ltime, cost;
Char ch;
char msgbuf[256];
char petstring1[2048];
int havepetelement = CHAR_getCharPetElement( toindex);
ti = flg;
if( havepetelement < 0 ){
CHAR_talkToCli( toindex, -1, "宠物栏位已满!", CHAR_COLORYELLOW);
return;
}
if( NPC_getLostPetString( meindex, toindex) == FALSE ) {
CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW);
return;
}
if( getStringFromIndexWithDelim( petstring[ti-1], "#", 2, petstring1, sizeof( petstring1)) == FALSE ){
CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW);
return;
}else{
char buf1[256];
if( getStringFromIndexWithDelim( petstring[ti-1], "|", 6, buf1, sizeof( buf1)) == FALSE ) return;
ltime = atoi(buf1);
ltime = time( NULL) - ltime;
ltime = ltime/(60*60*24);
if( getStringFromIndexWithDelim( petstring[ti-1], "|", 4, buf1, sizeof( buf1)) == FALSE ) return;
cost = atoi( buf1);
cost = cost + (ltime*10000);
if( CHAR_getInt( toindex, CHAR_GOLD) < cost ) {
sprintf( buf1, "宠物已寄放%d天共需%d石币才可领回。", ltime, cost);
CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW);
return;
}
}
ret = CHAR_makePetFromStringToArg( petstring1, &ch, -2);
strcpy( petstring[ti-1], "");
if( ret ) {
char buf1[256];
int petindex = PET_initCharOneArray( &ch );
if( !CHAR_CHECKINDEX( petindex) ){
CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW);
return;
}
print("ANDY petindex:%d[%s]\n", petindex, CHAR_getChar( petindex, CHAR_NAME) );
CHAR_complianceParameter( petindex );
CHAR_setInt( petindex, CHAR_HP, CHAR_getWorkInt( petindex, CHAR_WORKMAXHP));
CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, toindex);
CHAR_setCharPet( toindex, havepetelement, petindex);
CHAR_setChar( petindex, CHAR_OWNERCDKEY,
CHAR_getChar( toindex, CHAR_CDKEY));
CHAR_setChar( petindex, CHAR_OWNERCHARANAME,
CHAR_getChar( toindex, CHAR_NAME));
if( NPC_backupLostPetString( toindex) == FALSE ){
print("ANDY err backup petstring !!\n");
return;
}
sprintf( buf1, "LostPGet:%d", cost);
LogPet(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
buf1,
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
sprintf( buf1, "领取宠物%s。", CHAR_getUseName( petindex));
CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW);
for( i = 0; i < CHAR_MAXPETHAVE; i++){
int petindex = CHAR_getCharPet( toindex, i);
if( !CHAR_CHECKINDEX( petindex) )
continue;
CHAR_complianceParameter( petindex );
snprintf( msgbuf, sizeof( msgbuf ), "K%d", i );
CHAR_sendStatusString( toindex, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", i );
CHAR_sendStatusString( toindex, msgbuf );
}
CHAR_DelGold( toindex, cost);
}else{
CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW);
return;
}
return;
}
#endif
return;
break;
case WINDOW_DEFIND:
{
int i;
int face = CHAR_getInt( toindex, CHAR_FACEIMAGENUMBER);
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECK_MSG", token, sizeof( token) ) == NULL) {
return;
}
for( i=0; i<48; i++){
if( face >= checkPc[i][0] && face < checkPc[i][1] )
break;
}
if( i >= 48 )return;
CHAR_setWorkInt( toindex, CHAR_WORKNPCMETAMO, meindex);
CHAR_setInt( toindex, CHAR_BASEIMAGENUMBER, checkPc[i][2]);
CHAR_complianceParameter( toindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( toindex , CHAR_P_STRING_BASEBASEIMAGENUMBER);
buttontype = WINDOW_BUTTONTYPE_YESNO;
windowno = NPC_PROGRAMEGINEER_END;
}
break;
case WINDOW_END:
{
CHAR_setWorkInt( toindex, CHAR_WORKNPCMETAMO, -1);
CHAR_setInt( toindex, CHAR_BASEBASEIMAGENUMBER,
CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) );
CHAR_complianceParameter( toindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( toindex , CHAR_P_STRING_BASEBASEIMAGENUMBER);
return;
}
break;
}
lssproto_WN_send( fd, windowtype, buttontype, windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);
}
void NPC_NewNpcManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE)
return;
}
if( select == WINDOW_BUTTONTYPE_CANCEL || select == WINDOW_BUTTONTYPE_NO){
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
CHAR_setWorkInt( talkerindex, CHAR_WORKNPCMETAMO, -1);
return;
}
switch( seqno) {
case NPC_TRANSERMAN_START:
break;
case NPC_PROGRAMEGINEER_SELECT1:
NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT1, atoi( data));
break;
case NPC_PROGRAMEGINEER_SELECT2:
NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT2, atoi( data));
break;
case NPC_PROGRAMEGINEER_SELECT3:
NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT3, atoi( data));
break;
case NPC_PROGRAMEGINEER_SELECTLOSTPET:
NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECTLOSTPET, atoi( data));
break;
case NPC_PROGRAMEGINEER_DEFIND:
NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_DEFIND, atoi( data));
break;
case NPC_PROGRAMEGINEER_END:
NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_END, atoi( data));
break;
}
}
BOOL CHECK_ITEMEQUIT( int toindex)
{
int i, itemindex;
char token[256];
for (i = CHAR_STARTITEMARRAY; i < CHAR_MAXITEMHAVE; i ++) {
itemindex = CHAR_getItemIndex( toindex, i);
if( ITEM_getInt( itemindex, ITEM_ID) == 19646 ){
CHAR_DelItem( toindex, i);
itemindex = -1;
itemindex = ITEM_makeItemAndRegist( 1292);
if( !ITEM_CHECKINDEX( itemindex) ){
}else{
int ret = CHAR_addItemSpecificItemIndex( toindex, itemindex);
if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {
ITEM_endExistItemsOne( itemindex);
continue;
}
sprintf( token,"拿到%s", ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW );
CHAR_sendItemDataOne( toindex, ret);
continue;
}
}
if( ITEM_getInt( itemindex, ITEM_ID) == 1292 &&
ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE) > 0 ){
ITEM_setInt( itemindex, ITEM_MAXDAMAGECRUSHE, 0);
ITEM_setInt( itemindex, ITEM_DAMAGECRUSHE, 0);
sprintf(token,"修正%s损坏度", ITEM_getChar( itemindex, ITEM_NAME));
CHAR_sendItemDataOne( toindex, i);
CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW);
}
}
// 寄放店
for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++) {
if( ITEM_getInt( itemindex, ITEM_ID) == 1292 &&
ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE) > 0 ){
ITEM_setInt( itemindex, ITEM_MAXDAMAGECRUSHE, 0);
ITEM_setInt( itemindex, ITEM_DAMAGECRUSHE, 0);
sprintf(token,"修正寄放店中%s损坏度", ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW);
}
}
return TRUE;
}
BOOL CHECK_PETBBI( int toindex)
{
int i, petindex, PetID;
BOOL Finds = FALSE;
char token[256];
for( i=0; i < CHAR_MAXPETHAVE; i++) {
int parry, array, PetBBI;
petindex = CHAR_getCharPet( toindex, i);
if( !CHAR_CHECKINDEX( petindex) ) continue;
PetID = CHAR_getInt( petindex, CHAR_PETID);
array = ENEMY_getEnemyArrayFromTempNo( PetID);
if( !ENEMY_CHECKINDEX( array)) continue;
parry = ENEMYTEMP_getEnemyTempArray( array);
PetBBI = ENEMYTEMP_getInt( parry, E_T_IMGNUMBER);
if( CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER) != PetBBI ||
CHAR_getInt( petindex, CHAR_BASEIMAGENUMBER) != PetBBI ){
CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, PetBBI);
CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, PetBBI);
sprintf( token, "修正%s图号", CHAR_getUseName( petindex));
CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW);
Finds = TRUE;
}
CHAR_setInt( petindex, CHAR_EARTHAT, ENEMYTEMP_getInt( parry, E_T_EARTHAT) );
CHAR_setInt( petindex, CHAR_WATERAT, ENEMYTEMP_getInt( parry, E_T_WATERAT) );
CHAR_setInt( petindex, CHAR_FIREAT, ENEMYTEMP_getInt( parry, E_T_FIREAT) );
CHAR_setInt( petindex, CHAR_WINDAT, ENEMYTEMP_getInt( parry, E_T_WINDAT) );
char tempname[128];
if(strstr(CHAR_getChar(petindex,CHAR_NAME),"*")!=NULL)
sprintf(tempname,"*%s",ENEMYTEMP_getChar( parry, E_T_NAME));
else
sprintf(tempname,"%s",ENEMYTEMP_getChar( parry, E_T_NAME));
CHAR_setChar( petindex, CHAR_NAME, tempname);
CHAR_setChar( petindex, CHAR_USERPETNAME , "");
}
for( i=0; i<CHAR_MAXPETHAVE; i++){
char szPet[128];
petindex = CHAR_getCharPet(toindex, i);
if( !CHAR_CHECKINDEX( petindex) )continue;
CHAR_complianceParameter( petindex );
snprintf( szPet, sizeof( szPet ), "K%d", i);
CHAR_sendStatusString( toindex, szPet );
snprintf( szPet, sizeof( szPet ), "W%d", i);
CHAR_sendStatusString( toindex, szPet );
}
if( Finds == FALSE ){
sprintf( token, "没有错误图号的宠物");
CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW);
}
return Finds;
}
void NPC_reCheckMyPetUnusual( int meindex, int toindex)//检查宠物异常
{
char *buf=NULL;
int petindex,i;
for( i=0; i<CHAR_MAXPETHAVE; i++) {
petindex = CHAR_getCharPet( toindex, i);
if( !CHAR_CHECKINDEX( petindex) )continue;
if( (buf=CHAR_getChar( petindex, CHAR_NAME)) == NULL ||
strlen( buf) <= 0 ){
char *PetNAME;
int array, parry, petID;
petID = CHAR_getInt( petindex, CHAR_PETID);
array = ENEMY_getEnemyArrayFromTempNo( petID);
if( !ENEMY_CHECKINDEX( array)){
print("ANDY Pet(ID:%d) err Array:%d (file:%s %d) !! \n",
petID, array, __FILE__, __LINE__ );
continue;
}
parry = ENEMYTEMP_getEnemyTempArray( array);
if( (PetNAME = ENEMYTEMP_getChar( parry, E_T_NAME)) == NULL ||
strlen( PetNAME) <= 0 ){
print("ANDY Pet(ID:%d) Array:%d err Name:%s (file:%s %d) !! \n",
petID, array, (PetNAME==NULL)?"NULL":PetNAME, __FILE__, __LINE__ );
continue;
}
char tempname[128];
if(strstr(CHAR_getChar(petindex,CHAR_NAME),"*")!=NULL)
sprintf(tempname,"*%s",ENEMYTEMP_getChar( parry, E_T_NAME));
else
sprintf(tempname,"%s",ENEMYTEMP_getChar( parry, E_T_NAME));
CHAR_setChar( petindex, CHAR_NAME, tempname);
CHAR_setChar( petindex, CHAR_USERPETNAME , "");
//andy_log
print("ANDY Pet(ID:%d) Name -> %s (%s:%s)(file:%s %d) !! \n",
petID, PetNAME, CHAR_getUseName( toindex),
CHAR_getChar( toindex, CHAR_CDKEY), __FILE__, __LINE__ );
}
}
for( i=0; i<CHAR_MAXPETHAVE; i++){
char szPet[256];
petindex = CHAR_getCharPet(toindex, i);
if( !CHAR_CHECKINDEX( petindex) )continue;
CHAR_complianceParameter( petindex );
snprintf( szPet, sizeof( szPet ), "K%d", i);
CHAR_sendStatusString( toindex, szPet );
snprintf( szPet, sizeof( szPet ), "W%d", i);
CHAR_sendStatusString( toindex, szPet );
}
}
//更换宠物
BOOL CHECK_ReplacePET( int toindex)
{
int i, petindex;
BOOL Finds = FALSE;
char szPet[256];
if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return FALSE;
for( i=0; i<CHAR_MAXPETHAVE; i++) {
int array, ret;
petindex = CHAR_getCharPet( toindex, i);
if( !CHAR_CHECKINDEX( petindex) )continue;
if( CHAR_getInt( petindex, CHAR_PETID) != 1133 ) continue;
if( CHAR_getInt( petindex, CHAR_SLOT) != 7 ) continue;
if( CHAR_getInt( petindex, CHAR_TRANSMIGRATION ) > 0 )continue;
if( i == CHAR_getInt( toindex, CHAR_DEFAULTPET) ) {
int fd = getfdFromCharaIndex( toindex);
CHAR_setInt( toindex, CHAR_DEFAULTPET, -1);
lssproto_KS_send( fd, -1, TRUE);
}
snprintf( szPet,sizeof( szPet), "交出%s。", CHAR_getUseName( petindex) );
CHAR_talkToCli( toindex, -1, szPet, CHAR_COLORYELLOW);
LogPet(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"TenseiDel",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE)
);
Finds = TRUE;
CHAR_setCharPet( toindex, i, -1);
CHAR_endCharOneArray( petindex );
array = ENEMY_getEnemyArrayFromTempNo( 1133);
if( !ENEMY_CHECKINDEX( array)) continue;
ret = ENEMY_createPetFromEnemyIndex( toindex, array);
if( !CHAR_CHECKINDEX( ret ) ) continue;
snprintf( szPet, sizeof( szPet), "拿到%s。", CHAR_getUseName( ret) );
CHAR_talkToCli( toindex, -1, szPet, CHAR_COLORWHITE);
LogPet(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
CHAR_getChar( ret, CHAR_NAME),
CHAR_getInt( ret, CHAR_LV),
"TenseiGet",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
CHAR_getChar( ret, CHAR_UNIQUECODE)
);
}
for( i=0; i<CHAR_MAXPETHAVE; i++){
petindex = CHAR_getCharPet(toindex, i);
if( !CHAR_CHECKINDEX( petindex) )continue;
CHAR_complianceParameter( petindex );
snprintf( szPet, sizeof( szPet ), "K%d", i);
CHAR_sendStatusString( toindex, szPet );
snprintf( szPet, sizeof( szPet ), "W%d", i);
CHAR_sendStatusString( toindex, szPet );
}
return Finds;
}
//还原铁枪三堆叠
void NPC_reCheckItemPilenum( int meindex, int toindex)
{
int i, itemindex;
for( i=0; i<CHAR_MAXITEMHAVE; i++){
itemindex = CHAR_getItemIndex( toindex , i );
if( !ITEM_CHECKINDEX( itemindex) ) continue;//ITEM_USEPILENUMS
if( ITEM_getInt( itemindex, ITEM_ID) != 20284 ) continue;
//if( ITEM_getInt( itemindex, ITEM_CANBEPILE) != 1 ) continue;
if( ITEM_getInt( itemindex, ITEM_USEPILENUMS) > 1 ){
int itemID, pilenum=1, newindex;
itemID = ITEM_getInt( itemindex, ITEM_ID);
if( !ITEM_CHECKITEMTABLE( itemID) ) continue;
pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS);
while( pilenum > 1 ){
int ti = CHAR_findEmptyItemBox( toindex);
if( ti == -1 ){
CHAR_sendItemDataOne( toindex, i);
CHAR_talkToCli( toindex, -1, "道具栏位已满。", CHAR_COLORYELLOW);
return;
}
newindex = ITEM_makeItemAndRegist( itemID);
if( !ITEM_CHECKINDEX( newindex) ) break;
CHAR_setItemIndex( toindex , ti, newindex);
CHAR_sendItemDataOne( toindex, ti);
pilenum--;
ITEM_setInt( itemindex, ITEM_USEPILENUMS, pilenum);
}
if( ITEM_getInt( itemindex, ITEM_CANBEPILE) != ITEMTBL_getInt( itemID, ITEM_CANBEPILE) )
ITEM_setInt( itemindex, ITEM_CANBEPILE, ITEMTBL_getInt( itemID, ITEM_CANBEPILE) );
CHAR_sendItemDataOne( toindex, i);
}
}
CHAR_talkToCli( toindex, -1, "铁枪三处理完毕。", CHAR_COLORYELLOW);
}
#ifdef _PET_LOSTPET
BOOL NPC_reFindMyLostPet( int meindex, int toindex, char *buf)
{
//地上0 溜宠 1 宠邮 2
FILE *fp = NULL;
char *CdKey=NULL;
int lv=0, cost, ltime, count=0, i, type;
char filename[256], line[2048], buf1[256];
char petname[256], typebuf[256];
char buf2[10][256]={"\n","\n","\n","\n","\n",
"\n","\n","\n","\n","\n" };
CdKey = CHAR_getChar( toindex, CHAR_CDKEY );
if( CdKey == NULL ) return FALSE;
sprintf( filename, "lostpet/%s.txt", CdKey);
strcpy( buf, "==宠物遗失纪录==\n");
if( (fp=fopen( filename, "r")) == NULL ) return FALSE;
while( fgets( line , sizeof( line ) , fp ) && count < 7){
if( line == NULL ) continue;
if( getStringFromIndexWithDelim( line, "|", 1, buf1, sizeof( buf1)) == FALSE ) continue;
if( strcmp( CHAR_getChar( toindex, CHAR_CDKEY ), buf1 )) continue;
if( getStringFromIndexWithDelim( line, "|", 6, buf1, sizeof( buf1)) == FALSE ) continue;
ltime = atoi(buf1);
ltime = time( NULL) - ltime;
ltime = ltime/(60*60*24);
if( ltime > 14 ) continue;//续放14天
if( getStringFromIndexWithDelim( line, "|", 2, petname, sizeof( petname)) == FALSE ) continue;
if( getStringFromIndexWithDelim( line, "|", 3, buf1, sizeof( buf1)) == FALSE ) continue;
lv = atoi( buf1);
if( getStringFromIndexWithDelim( line, "|", 4, buf1, sizeof( buf1)) == FALSE ) continue;
cost = atoi( buf1);
if( getStringFromIndexWithDelim( line, "#", 3, buf1, sizeof( buf1)) == FALSE ) continue;
type = atoi( buf1);
if( type == 1 ){
strcpy( typebuf, "溜宠");
}else if( type == 2 ){
strcpy( typebuf, "宠邮");
}else{
strcpy( typebuf, "地上");
}
sprintf( buf2[count++], "%s LV:%d石币:%d(%d天%s)\n", petname, lv, cost, ltime, typebuf);
}
fclose( fp);
for( i=0; i<7; i++){
strcat( buf, buf2[i]);
}
if( count == 0 ) return FALSE;
return TRUE;
}
BOOL NPC_getLostPetString( int meindex, int toindex)
{
FILE *fp = NULL;
char *CdKey=NULL;
int count=0, i, ltime;
char filename[256], line[2048], buf1[256];
for( i=0; i<7; i++)
strcpy( petstring[i], "");
CdKey = CHAR_getChar( toindex, CHAR_CDKEY );
if( CdKey == NULL ) return FALSE;
sprintf( filename, "lostpet/%s.txt", CdKey);
if( (fp=fopen( filename, "r")) == NULL ) return FALSE;
while( fgets( line , sizeof( line ) , fp ) && count < 7){
if(strlen( line) <= 0 ) continue;
// if( getStringFromIndexWithDelim( line, "#", 2, buf1, sizeof( buf1)) == FALSE ) return FALSE;
// Terry fix 读取时没有判断时间 2004/09/22
if(getStringFromIndexWithDelim(line,"|",6,buf1,sizeof(buf1)) == FALSE) continue;
ltime = atoi(buf1);
ltime = time( NULL) - ltime;
ltime = ltime/(60*60*24);
if(ltime > 14) continue;//续放14天
// Terry end
strcpy( petstring[count++], line);
}
fclose( fp);
return TRUE;
}
BOOL NPC_backupLostPetString( int toindex)
{
FILE *fp = NULL;
char *CdKey=NULL;
int i, count=0;
char filename[256];
CdKey = CHAR_getChar( toindex, CHAR_CDKEY );
if( CdKey == NULL ) return FALSE;
sprintf( filename, "lostpet/%s.txt", CdKey);
if( (fp=fopen( filename, "w")) == NULL ) return FALSE;
for( i=0; i<7; i++){
if( strlen( petstring[i]) <= 0 ) continue;
fprintf( fp, "%s", petstring[i]);
count++;
}
fclose( fp);
if( count == 0 )
remove( filename);
return TRUE;
}
/*
#ifdef _NEW_WARPMAN
#include "npc_newnpcman.h"
#define NEWNPCMAN_STANDBY 5000
#define NEWNPCMAN_WAITTIME 150
enum{
NPC_NEWNPCMAN_START=21,
NPC_NEWNPCMAN_MAN,
NPC_NEWNPCMAN_END,
};
enum {
NEWNPC_START = 1,
NEWNPC_MAN,
NEWNPC_END,
};
enum {
NPC_WORK_INDEX = CHAR_NPCWORKINT1,
NPC_WORK_WORKTYPE = CHAR_NPCWORKINT2,
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT3,
};
BOOL CHECK_YEARPET( int toindex);
static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg);
int NPC_NewNpcManDelPet(int meindex,int talker, int petsel);
BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid);
//可换四种宠
static int Re_Pet[4];
// shan
char uStr[128]="";
BOOL NPC_NewNpcManInit( int meindex )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf1[256],buf2[256];
int k=1;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) {
print("GambleBank:GetArgStrErr");
return FALSE;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL ) {
return FALSE;
}
while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE ) {
Re_Pet[k-1] = atoi( buf2);
if( Re_Pet[k-1] < 0 )
return FALSE;
k++;
if( (k-1) >= arraysizeof( Re_Pet) )
break;
}
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_NEWNPCMAN );
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NEWNPCMAN_STANDBY);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return TRUE;
}
void NPC_NewNpcManLoop( int meindex)
{
//test
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf1[256],buf2[256];
int k=1;
int fulltime = NEWNPCMAN_WAITTIME;
if( (CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + fulltime) > NowTime.tv_sec )
return;
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
//test
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) {
print("GambleBank:GetArgStrErr");
return;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL ) {
return;
}
while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE ) {
Re_Pet[k-1] = atoi( buf2);
if( Re_Pet[k-1] < 0 )
return;
k++;
if( (k-1) >= arraysizeof( Re_Pet) )
break;
}
//test end
}
void NPC_NewNpcManTalked( int meindex , int talkerindex , char *msg , int color )
{
char buf1[256];
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;
}
if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) >= 0 ) {
sprintf( buf1,"%s","我正忙着呢!");
print("\n NPC_WORK_INDEX = %d ", CHAR_getWorkInt( meindex , NPC_WORK_INDEX));
CHAR_talkToCli( talkerindex, meindex, buf1, CHAR_COLORYELLOW);
return;
}else {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, talkerindex);
print("\n start : NPC_WORK_INDEX = talkerindex");
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_START, 0);
}
}
static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[256];
char token_str[][56]={"ERROR_MSG","START_MSG","END_MSG","ERROR_ALL"};
int buttontype = 0, windowtype = 0, windowno = 0;
int fd = getfdFromCharaIndex( toindex);
int petno = 718, petid =1479;
int type_str = 0;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) {
print("GambleBank:GetArgStrErr");
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return ;
}
if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) != toindex ) {
sprintf( token,"%s","我正忙着呢!");
CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW);
return;
}
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
print("\n switch( num=%d)", num);
switch( num) {
case NEWNPC_START:
type_str = 1;
buttontype = WINDOW_BUTTONTYPE_OKCANCEL;
windowno = NPC_NEWNPCMAN_START;
break;
case NEWNPC_MAN:
{
if( CHECK_YEARPET( toindex) == TRUE ) {
type_str = 1;
windowtype = WINDOW_MESSAGETYPE_PETSELECT;
buttontype = WINDOW_BUTTONTYPE_CANCEL;
windowno = NPC_NEWNPCMAN_MAN;
}else {
type_str = 3;
buttontype = WINDOW_BUTTONTYPE_OK;
windowno = NPC_NEWNPCMAN_END;
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
}
}
break;
case NEWNPC_END:
type_str = 0;
if( flg <= CHAR_MAXPETHAVE && flg >= 0 ) {
petno = flg;
if( ( petid = NPC_NewNpcManDelPet( meindex, toindex, petno)) >= 0 ) {
if( NPC_NewNpcManAddPet( meindex, toindex, petid) == TRUE ) {
type_str = 2;
}
}
}
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
buttontype = WINDOW_BUTTONTYPE_OK;
windowno = NPC_NEWNPCMAN_END;
break;
}
if(NPC_Util_GetStrFromStrWithDelim( npcarg, token_str[ type_str], token,sizeof( token) ) == NULL) {
print("token_str[%d] err !", type_str);
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return;
}
lssproto_WN_send( fd, windowtype, buttontype, windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);
}
void NPC_NewNpcManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;
}
print("\n seqno=%d, select=%d", seqno, select);
switch( seqno) {
case NPC_NEWNPCMAN_START:
if( select != WINDOW_BUTTONTYPE_YES && select != WINDOW_BUTTONTYPE_OK ) {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return;
}
if(select==WINDOW_BUTTONTYPE_CANCEL) {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
}else {
NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_MAN, -1);
}
break;
case NPC_NEWNPCMAN_MAN:
{
int petnum;
petnum = atoi( data)-1;
print("\n petnum=%d", petnum);
if(select==WINDOW_BUTTONTYPE_CANCEL) {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
}else {
NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_END, petnum);
}
}
break;
case NPC_NEWNPCMAN_END:
break;
}
}
int NPC_NewNpcManDelPet(int meindex,int talker, int petsel)
{
int defpet;
int fd = getfdFromCharaIndex( talker );
char msgbuf[64], szPet[128];
int k=0;
int petindex=-1;
petindex = CHAR_getCharPet( talker, petsel);
if( !CHAR_CHECKINDEX(petindex) )
return -1;
for( k=0;k<arraysizeof( Re_Pet); k++) {
if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] )
break;
}
if( k == arraysizeof( Re_Pet) ) {
return -1;
}else {
print("\n FIND [%d,%d] & DEL !!", k, Re_Pet[k]);
}
if( CHAR_getWorkInt( CONNECT_getCharaindex( fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE )
return -1;
defpet = CHAR_getInt( talker, CHAR_DEFAULTPET);
if(defpet == petsel) {
CHAR_setInt( talker, CHAR_DEFAULTPET, -1);
lssproto_KS_send( fd, -1, TRUE);
}
snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME));
// shan
if(CHAR_getChar( petindex, CHAR_UNIQUECODE)!=NULL){
strncpy(uStr, CHAR_getChar( petindex, CHAR_UNIQUECODE), sizeof( STRING32));
}else{
strncpy(uStr, "Pet_Unicode_null", sizeof( STRING32));
}
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE);
LogPet(
CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"TenseiDel",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE)
);
CHAR_setCharPet( talker, petsel, -1);
CHAR_endCharOneArray( petindex );
snprintf( szPet, sizeof( szPet ), "K%d", petsel);
CHAR_sendStatusString( talker, szPet );
return Re_Pet[k];
}
BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid)
{
int ret;
char msgbuf[64];
int enemynum;
int i,j;
int petindex, petindex2;
//检查宠物栏是否有空位
for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) {
petindex = CHAR_getCharPet( talker, i);
if( petindex == -1 )
break;
}
if( i == CHAR_MAXPETHAVE ) {
snprintf( msgbuf,sizeof( msgbuf), "宠物已满!!");
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE);
return FALSE;
}
enemynum = ENEMY_getEnemyNum();
for( i = 0; i < enemynum; i ++ ) {
//if( ENEMY_getInt( i, ENEMY_ID ) == petid )
if( ENEMY_getInt( i, ENEMY_TEMPNO ) == petid ) {
print("\n ADD FIND [%d,%d]", i, ENEMY_getInt( i, ENEMY_TEMPNO ));
break;
}
}
if( i == enemynum )
return FALSE;
ret = ENEMY_createPetFromEnemyIndex( talker, i);
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {
if( CHAR_getCharPet( talker, i ) == ret )
break;
}
if( i == CHAR_MAXPETHAVE )
i = 0;
if( CHAR_CHECKINDEX( ret ) == TRUE ){
CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV ));
}
petindex2 = CHAR_getCharPet(talker, i);
if( !CHAR_CHECKINDEX( petindex2) )
return FALSE;
snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME));
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE);
for(j = 0; j < CHAR_MAXPETHAVE; j++){
petindex = CHAR_getCharPet(talker, j);
if( !CHAR_CHECKINDEX( petindex) )
continue;
CHAR_complianceParameter( petindex );
snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );
CHAR_sendStatusString( talker, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );
CHAR_sendStatusString( talker, msgbuf );
}
// shan
CHAR_setChar(petindex2, CHAR_UNIQUECODE, uStr);
LogPet(
CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex2, CHAR_NAME),
CHAR_getInt( petindex2, CHAR_LV),
"TenseiGet",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex2, CHAR_UNIQUECODE)
);
return TRUE;
}
BOOL CHECK_YEARPET( int toindex)
{
int i,k,petindex=-1;
for( i=0;i<CHAR_MAXPETHAVE;i++) {
petindex = CHAR_getCharPet( toindex, i);
if( !CHAR_CHECKINDEX(petindex) )
continue;
for( k=0;k<arraysizeof( Re_Pet); k++) {
if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] ) {
print("\n check yearpet find it");
return TRUE;
}
}
}
return FALSE;
}
#endif
*/
#endif