void NPC_PetDate(int meindex,int talker,int select,char *token) { int petindex; int cost; char *petname; char buf[1024]; /*--·¥¡õÛͼ°âÙÓå¼À--*/ CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANT,select); petindex = CHAR_getCharPet( talker, select-1); if( !CHAR_CHECKINDEX(petindex) ) return; NPC_MaxGoldOver( meindex, talker, NPC_PETSHOP_MSG_REALY, buf); cost=NPC_GetCost(meindex,talker,petindex); petname = CHAR_getUseName( petindex); sprintf(token,"\nÊÇ[%s]û´í°É£¿""%s" "\n\n ÂòÂô¼Û¸ñ %d STONE\n" ,petname,buf,cost); }
void NPC_DepotPet_List( int meindex, int toindex, char *token, int *buttontype, int select) { // ¨àʸ¡õ³âؤÐ×Ô»¼°µæÐÑ #define LINENUM 5 char buf[1024]; int i; int startnum, endnum; int petindex = -1; // òØ»þ¼°Ê¸¡õ³â int page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT); int limit; limit = CHAR_MAXDEPOTPETHAVE; endnum = (page + select+1)*LINENUM ; startnum = endnum - LINENUM; *buttontype = WINDOW_BUTTONTYPE_CANCEL; // ¸þʸ¡õ³âÆ©°ï£Û if( endnum >= limit ) { endnum = limit; if( page +select!= 0 ) *buttontype |= WINDOW_BUTTONTYPE_PREV; } else if( endnum <= LINENUM ) { endnum = LINENUM; *buttontype |= WINDOW_BUTTONTYPE_NEXT; } else { *buttontype |= WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT; } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, page +select); strcpy( token, "2\n====== ÇëÑ¡ÔñÒª´Ó²Ö¿âÈ¡³öµÄ³èÎï ======\n\n"); for( i = startnum; i < endnum; i ++ ) { petindex = CHAR_getDepotPetIndex( toindex, i); if( CHAR_CHECKINDEX( petindex) ) { snprintf( buf, sizeof( buf), "LV.%3d MaxHP %3d %s\n", CHAR_getInt( petindex, CHAR_LV), CHAR_getWorkInt( petindex, CHAR_WORKMAXHP), CHAR_getUseName( petindex) ); } else { strcpy( buf, "\n"); } strcat( token, buf); } // Æݼ°ÓòòÛëƩÍÍ»¯£Ý ¾®ÔÈÐ×ÈÕÆݳßʾÕý¼þëäúÔ if( i != limit ) { petindex = CHAR_getDepotPetIndex( toindex, i); if( !CHAR_CHECKINDEX( petindex)) { *buttontype &= ~WINDOW_BUTTONTYPE_NEXT; } } //print("\n DepotPet_List:%s ", token); }
void NPC_getDrawPet( int meindex, int toindex, char *token, int *buttontype, int select) { // ¨àʸ¡õ³âؤÐ×Ô»¼°µæÐÑ #define LINENUM 5 char buf[1024]; int i; int startnum, endnum; int petindex = -1; // òØ»þ¼°Ê¸¡õ³â int page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT); int limit; //andy_reEdit 2003/09/18 limit = (CHAR_getInt(toindex,CHAR_TRANSMIGRATION)*2)+5; endnum = (page + select+1)*LINENUM ; startnum = endnum - LINENUM; *buttontype = WINDOW_BUTTONTYPE_CANCEL; // ¸þʸ¡õ³âÆ©°ï£Û if( endnum >= limit ) { endnum = limit; if( page +select!= 0 ) *buttontype |= WINDOW_BUTTONTYPE_PREV; } else if( endnum <= LINENUM ) { endnum = LINENUM; *buttontype |= WINDOW_BUTTONTYPE_NEXT; } else { *buttontype |= WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT; } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, page +select); strcpy( token, "2\n====== ÇëÑ¡Ôñ³èÎï ======\n\n"); for( i = startnum; i < endnum; i ++ ) { petindex = CHAR_getCharPoolPet( toindex, i); if( CHAR_CHECKINDEX( petindex) ) { snprintf( buf, sizeof( buf), "LV.%3d MaxHP %3d %s\n", CHAR_getInt( petindex, CHAR_LV), CHAR_getWorkInt( petindex, CHAR_WORKMAXHP), CHAR_getUseName( petindex) ); } else { strcpy( buf, "\n"); } strcat( token, buf); } // Æݼ°ÓòòÛëƩÍÍ»¯£Ý ¾®ÔÈÐ×ÈÕÆݳßʾÕý¼þëäúÔ if( i != limit ) { petindex = CHAR_getCharPoolPet( toindex, i); if( !CHAR_CHECKINDEX( petindex)) { *buttontype &= ~WINDOW_BUTTONTYPE_NEXT; } } }
void NPC_PetDate3(int meindex,int talker,int select,char *token) { int poolindex; int petindex; char *petname; poolindex = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) * 5 + select - 1; CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANT,poolindex ); petindex = CHAR_getCharPoolPet( talker, poolindex); if( !CHAR_CHECKINDEX(petindex) ) return; petname = CHAR_getUseName( petindex); sprintf(token,"\nÁì»Ø[%s]", petname); }
void NPC_DepotPet_AskGet(int meindex,int talker,int select,char *token) { int depotindex; int petindex; char *petname; depotindex = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) * 5 + select - 1; CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANT,depotindex ); petindex = CHAR_getDepotPetIndex( talker, depotindex); if( !CHAR_CHECKINDEX(petindex) ) return; petname = CHAR_getUseName( petindex); sprintf(token,"\nÁì»Ø[%s]", petname); }
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_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_PetDate2(int meindex,int talker,int select,char *token) { int petindex; char *petname; CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANT,select); petindex = CHAR_getCharPet( talker, select-1); if( !CHAR_CHECKINDEX(petindex) ) return; petname = CHAR_getUseName( petindex); sprintf(token,"\n¼Ä·Å[%s]" "\n\n ¼Ä·Å¼Û¸ñ %d stone\n" ,petname, NPC_GETPOOLCOST( talker) ); }
static int player_useChatMagic( int charaindex, char* data, int isDebug) { char magicname[256]; int ret; CHATMAGICFUNC func; ret = getStringFromIndexWithDelim( data, " ", 1, magicname, sizeof( magicname)); if( ret == FALSE)return FALSE; func = CHAR_getChatMagicFuncPointer(magicname,isDebug); if( func ){ LogGM( CHAR_getUseName( charaindex), CHAR_getChar( charaindex, CHAR_CDKEY), data, CHAR_getInt( charaindex, CHAR_FLOOR), CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y) ); func( charaindex, data + strlen( magicname)+1); return TRUE; }else{ return FALSE; } }
//¸ü»»³èÎï 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; }
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); #if 0 // ÐÞÕý±£Êͽð cost = cost + (ltime*100); cost = (cost>10000)?10000:cost; #else cost = cost + (ltime*10000); #endif 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); }
int BATTLE_ai_all( int battleindex, int side, int turn) { int i; int rc = FALSE; BATTLE_ENTRY *pEntry; struct B_AI_RESULT result; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return BATTLE_ERR_BATTLEINDEX; if( BATTLE_CHECKSIDE( side ) == FALSE )return BATTLE_ERR_PARAM; if( BATTLE_CHECKSIDE( side ^1) == FALSE )return BATTLE_ERR_PARAM; if( BattleArray[battleindex].Side[side].type != BATTLE_S_TYPE_ENEMY ) return FALSE; pEntry = BattleArray[battleindex].Side[side^1].Entry; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ int charaindex = BattleArray[battleindex].Side[side].Entry[i].charaindex; int mode; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; mode = CHAR_getWorkInt( charaindex, CHAR_WORKTACTICS); if( mode < 0 || mode >= arraysizeof( functbl)){ print( "BATTLE_ai_all ÖÐ,Õ½¶·Â߼ģʽºÜÆæ¹Ö(%s)(%d)\n", CHAR_getUseName( charaindex ), mode ); mode = 1; } if( BATTLE_IsCharge( charaindex ) == TRUE ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); continue; } if( BattleArray[battleindex].Side[side].flg & BSIDE_FLG_SURPRISE) { CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); }else { if( functbl[mode] != NULL ) { rc = functbl[mode]( turn, charaindex, pEntry, &result); if( BATTLE_CanMoveCheck( charaindex ) == FALSE ){ result.command = BATTLE_COM_NONE; } } if( rc ) { #ifdef _BATTLENPC_WARP_PLAYER if(result.command==BATTLE_COM_WARP){ for( i=0; i<BATTLE_ENTRY_MAX; i++){ int tindex = (pEntry+i)->charaindex; if( !CHAR_CHECKINDEX( tindex ))continue; if( CHAR_getFlg( tindex, CHAR_ISDIE)) continue; if( CHAR_getWorkInt( tindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_RESCUE ) continue; if( CHAR_getInt( tindex, CHAR_WHICHTYPE)==CHAR_TYPEPLAYER){ char sBuff[1024]="", sBuff1[1024]=""; int ss[3]; int sii; int rc = 1; if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_ACT_CONDITION), "wp", sBuff, sizeof( sBuff))!=NULL){ for( sii=1; sii<=3; sii++){ if(getStringFromIndexWithDelim( sBuff, ";", sii, sBuff1, sizeof( sBuff1))) {ss[sii-1]=atoi(sBuff1);} else {rc=0;} } if(rc){ CHAR_warpToSpecificPoint( tindex, ss[0], ss[1], ss[2]); BATTLE_WatchStop( tindex); } } } } } #endif CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, result.command ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, result.target + (side^1)*SIDE_OFFSET); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); } } } return TRUE; }
/*---------------------------------------------------------------------- * ¾¿Í¤ò²óÉü * °ú¿ô * charaindex int ¼«Ê¬¤Îindex * toindex int ²óÉü¤¹¤ë¿Í¤Îindex * magicindex int ËâË¡¤Îindex *---------------------------------------------------------------------*/ int MAGIC_OtherRecovery_Field( int charaindex, int toindex, int magicindex) { char *magicarg; float power; int workhp; int prevhp; char msgbuf[64]; #ifdef _TYPE_TOXICATION if( CHAR_CanCureFlg( charaindex, "HP") == FALSE )return FALSE; #endif magicarg = MAGIC_getChar( magicindex, MAGIC_OPTION ); power = atoi( magicarg ); power = RAND( (power*0.9), (power*1.1) ); #ifndef _MAGIC_REHPAI power *= GetRecoveryRate( toindex ); #endif prevhp = CHAR_getInt( toindex, CHAR_HP ); workhp = prevhp + (int)power; CHAR_setInt( toindex, CHAR_HP, min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) ) ); if( CHAR_getInt( toindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { if( charaindex != toindex ) { CHAR_send_P_StatusString( toindex, CHAR_P_STRING_HP); } } CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_HP|CHAR_P_STRING_MP); if( charaindex != toindex) { CHAR_PartyUpdate( charaindex, CHAR_N_STRING_MP); CHAR_PartyUpdate( toindex, CHAR_N_STRING_HP); } else { CHAR_PartyUpdate( charaindex, CHAR_N_STRING_MP|CHAR_N_STRING_HP); } if( CHAR_getInt( toindex, CHAR_WHICHTYPE) == CHAR_TYPEPET ){ int i; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { int workindex = CHAR_getCharPet( charaindex, i ); if( workindex == toindex ){ CHAR_send_K_StatusString( charaindex, i, CHAR_K_STRING_HP); } } } if( charaindex != toindex) { snprintf( msgbuf, sizeof( msgbuf), "%sªº@¤[¤O¦^´_%d", CHAR_getUseName( toindex ), min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXHP)) - prevhp); CHAR_talkToCli( charaindex, -1, msgbuf, CHAR_COLORWHITE); if( CHAR_getInt( toindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { snprintf( msgbuf, sizeof( msgbuf), "ÂÇ¥Ñ%s@¤[¤O¦^´_%d", CHAR_getUseName( charaindex ), min( workhp,CHAR_getWorkInt( toindex, CHAR_WORKMAXHP)) - prevhp); CHAR_talkToCli( toindex, -1, msgbuf, CHAR_COLORWHITE); } } else { snprintf( msgbuf, sizeof( msgbuf), "@¤[¤O¦^´_%d", min( workhp,CHAR_getWorkInt( charaindex, CHAR_WORKMAXHP)) - prevhp); CHAR_talkToCli( charaindex, -1, msgbuf, CHAR_COLORWHITE); } return TRUE; }
/*------------------------------------------------------------ * 啖 允月[ * 娄醒 * index int 平乓仿及奶件犯永弁旦 * dir int 轾 * 忒曰袄 * CHAR_WALKRET ------------------------------------------------------------*/ static CHAR_WALKRET CHAR_walk_move( int charaindex, int dir ) { int i; int fx,fy,ff; int ox,oy,of; int objbuf[128]; int objbufindex=0; int notover=FALSE; int retvalue=CHAR_WALKSUCCESSED; if( !CHAR_CHECKINDEX( charaindex )) return CHAR_WALKSYSTEMERROR; ox = CHAR_getInt(charaindex,CHAR_X); oy = CHAR_getInt(charaindex,CHAR_Y); of = CHAR_getInt(charaindex,CHAR_FLOOR); CHAR_getCoordinationDir( dir,ox,oy,1,&fx,&fy); ff = of; if( CHAR_getInt( charaindex,CHAR_WHICHTYPE ) == CHAR_TYPEENEMY ){ RECT walkr; POINT nextp; int npccreateindex; npccreateindex = CHAR_getInt( charaindex,CHAR_NPCCREATEINDEX ); if( CHAR_isInvincibleArea( ff,fx,fy)) { CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALKEXTEND; goto CHAR_AFTERWALK; } if( NPC_isBoundarySet( npccreateindex ) && NPC_createGetRECT( npccreateindex,&walkr ) == TRUE ) { nextp.x = fx; nextp.y = fy; if( PointInRect( &walkr,&nextp ) == FALSE ){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALKEXTEND; goto CHAR_AFTERWALK; } }else{ ; } } if( CHAR_getFlg( charaindex, CHAR_ISBIG ) == 1 ){ static POINT offset[5]={ { 0,-1}, {-1, 0}, { 0, 0}, { 1, 0}, { 0, 1}, }; int k; for( k=0 ; k<5; k++ ){ if( !MAP_walkAble( charaindex, ff, fx+offset[k].x, fy+offset[k].y )){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALK1357; goto CHAR_AFTERWALK; } } }else{ if( CHAR_getDX(dir)*CHAR_getDY(dir) == 0 ){ if( !MAP_walkAble( charaindex,ff, fx, fy ) ){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALK1357; goto CHAR_AFTERWALK; } }else{ int xflg,yflg; if( !MAP_walkAble( charaindex,ff, fx, fy ) ){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALK1357; goto CHAR_AFTERWALK; } xflg = MAP_walkAble( charaindex,of, ox+CHAR_getDX(dir), oy ); yflg = MAP_walkAble( charaindex,of, ox, oy+CHAR_getDY(dir) ); if( !xflg || !yflg ) { CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALK1357; goto CHAR_AFTERWALK; } } } objbufindex = CHAR_getSameCoordinateObjects( objbuf, arraysizeof( objbuf ), ff,fx,fy ); for( i = 0 ; i < objbufindex ; i ++ ){ int objindex= objbuf[i]; switch( OBJECT_getType(objindex) ){ case OBJTYPE_CHARA: if( !CHAR_getFlg( OBJECT_getIndex(objindex),CHAR_ISOVERED) ){ if(!CHAR_CHECKINDEX(OBJECT_getIndex(objindex))){ printf("自动删除一个问题对象!"); endObjectOne(objindex); break; } notover= TRUE; } break; case OBJTYPE_ITEM: if( !ITEM_getInt( OBJECT_getIndex(objindex), ITEM_ISOVERED ) ) notover= TRUE; break; case OBJTYPE_GOLD: break; default: break; } } if( notover == TRUE ){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALKHITOBJECT; }else{ for( i = 0 ; i < objbufindex ; i ++ ){ typedef void (*PREOFUNC)(int,int); PREOFUNC pfunc=NULL; int objindex=objbuf[i]; switch( OBJECT_getType(objindex) ){ case OBJTYPE_CHARA: pfunc = (PREOFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex), CHAR_PREOVERFUNC); break; case OBJTYPE_ITEM: pfunc = (PREOFUNC)ITEM_getFunctionPointer( OBJECT_getIndex(objindex), ITEM_PREOVERFUNC); break; case OBJTYPE_GOLD: break; default: break; } if( pfunc )pfunc( OBJECT_getIndex(objindex),charaindex ); } CHAR_setInt(charaindex,CHAR_X,fx); CHAR_setInt(charaindex,CHAR_Y,fy); CHAR_setInt(charaindex,CHAR_FLOOR,ff); CHAR_setInt(charaindex,CHAR_DIR,dir); { int objindex; int ox,oy,of; objindex = CHAR_getWorkInt( charaindex,CHAR_WORKOBJINDEX ); of = OBJECT_setFloor(objindex, CHAR_getInt(charaindex,CHAR_FLOOR)); ox = OBJECT_setX(objindex,CHAR_getInt(charaindex,CHAR_X)); oy = OBJECT_setY(objindex,CHAR_getInt(charaindex,CHAR_Y)); if( !MAP_objmove( objindex, of,ox,oy,ff,fx,fy ) ){ /* 仇氏卅氏升丹仄方丹手卅中 */ fprint( "ERROR MAP_OBJMOVE objindex=%d(%s)\n",objindex, CHAR_getUseName( charaindex ) ); } } CHAR_setInt(charaindex,CHAR_WALKCOUNT, CHAR_getInt(charaindex,CHAR_WALKCOUNT) + 1 ); for( i = 0 ; i < objbufindex ; i ++ ){ typedef void (*POSTOFUNC)(int,int); POSTOFUNC pfunc=NULL; int objindex=objbuf[i]; switch( OBJECT_getType(objindex) ){ case OBJTYPE_CHARA: pfunc = (POSTOFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex), CHAR_POSTOVERFUNC); break; case OBJTYPE_ITEM: pfunc = (POSTOFUNC)ITEM_getFunctionPointer( OBJECT_getIndex(objindex), ITEM_POSTOVERFUNC); break; case OBJTYPE_GOLD: break; default: break; } if( pfunc )pfunc( OBJECT_getIndex(objindex),charaindex ); } objbufindex = CHAR_getSameCoordinateObjects(objbuf, arraysizeof(objbuf), of, ox, oy ); for( i=0 ;i<objbufindex;i++){ typedef void (*OFFFUNC)(int,int); OFFFUNC ofunc=NULL; int objindex = objbuf[i]; switch( OBJECT_getType( objindex ) ){ case OBJTYPE_CHARA: ofunc = (OFFFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex), CHAR_OFFFUNC); break; case OBJTYPE_ITEM: /* 卞窒手仄卅中 */ break; case OBJTYPE_GOLD: /* 卞窒手仄卅中 */ break; default: break; } if( ofunc )ofunc( OBJECT_getIndex(objindex), charaindex ); } } CHAR_AFTERWALK: if( retvalue == CHAR_WALK1357 || retvalue == CHAR_WALKHITOBJECT ){ { int opt[2] = { ox, oy}; CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX), CHAR_ACTWALK,opt,2,TRUE ); } CHAR_setWorkChar( charaindex, CHAR_WORKWALKARRAY, ""); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX), CHAR_ACTWARP,NULL,0,TRUE); } }else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){ BOOL flg = FALSE; int par; int count; CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1 ); if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE ){ CHAR_sendCharaAtWalk( charaindex, of,ox,oy,CHAR_getDX(dir), CHAR_getDY(dir)); } { int opt[2] = { ox, oy}; CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX), CHAR_ACTWALK,opt,2,TRUE ); } if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) { CHAR_sendMapAtWalk( charaindex, of, ox,oy, CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y)); } count = CHAR_getWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT); if( count > 0 ) { CHAR_setWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT, count -1); if( count -1 == 0 ) { CHAR_talkToCli( charaindex, -1, "道具的效力已到。", CHAR_COLORWHITE); } } par = ENCOUNT_getEncountPercentMin( charaindex, of,ox,oy); if( par != -1 ) { if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN) != par ){ flg = TRUE; CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, par); } } par = ENCOUNT_getEncountPercentMax( charaindex, of,ox,oy); if( par != -1 ) { if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX) != par ){ flg = TRUE; CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX, par); } } // Arminius 7.12 login announce /* { int enfd = getfdFromCharaIndex( charaindex ); if (CONNECT_get_announced(enfd)==0) { // Robin 0720 //AnnounceToPlayer(charaindex); AnnounceToPlayerWN( enfd ); CONNECT_set_announced(enfd,1); } } */ // Arminius 6.22 check Encounter // Nuke 0622: Provide No Enemy function { int enfd = getfdFromCharaIndex( charaindex ); int eqen = getEqNoenemy( enfd ); // Arminius 7.2: Ra's amulet int noen = getNoenemy(enfd); // Arminius 7.31 cursed stone if (getStayEncount(enfd)>0) { clearStayEncount(enfd); } //print("\n enfd=%d,eqen=%d,noen=%d", enfd, eqen, noen); // Arminius 7.2 Ra's amulet if (eqen>=200) { noen=1; } else if (eqen>=120) { if ((ff==100)||(ff==200)||(ff==300)||(ff==400)||(ff==500)) noen=1; } else if (eqen>=80) { if ((ff==100)||(ff==200)||(ff==300)||(ff==400)) noen=1; } else if (eqen>=40) { if ((ff==100)||(ff==200)) noen=1; } //print("\n noen=%d", noen); if (noen==0) { int maxep = CHAR_getWorkInt(charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX); int minep = CHAR_getWorkInt(charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN); int cep = CONNECT_get_CEP(enfd); if (cep<minep) cep=minep; if (cep>maxep) cep=maxep; if (CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE)==BATTLE_CHARMODE_NONE) { int entflag=1; { int objindex,index; OBJECT obj; for ( obj = MAP_getTopObj( ff, fx, fy); obj; obj = NEXT_OBJECT( obj)) { objindex = GET_OBJINDEX( obj); if (OBJECT_getType( objindex) == OBJTYPE_CHARA) { int etype; index = OBJECT_getIndex( objindex); if (!CHAR_CHECKINDEX( index)) continue; if( CHAR_getInt( index, CHAR_WHICHTYPE) == CHAR_TYPENPCENEMY && CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE) == CHAR_EVENT_ENEMY ) { CHAR_setInt( charaindex, CHAR_X, ox); CHAR_setInt( charaindex, CHAR_Y, oy); lssproto_XYD_send( getfdFromCharaIndex(charaindex), CHAR_getInt( charaindex, CHAR_X ), CHAR_getInt( charaindex, CHAR_Y ), CHAR_getInt( charaindex, CHAR_DIR ) ); break; } etype = CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE); if (etype!=CHAR_EVENT_NONE) { if (etype==CHAR_EVENT_WARP) entflag=0; } } } } #ifdef _ENEMY_ACTION if( rand()%(120*getEnemyAction()) < cep ){ #else if (rand()%120<cep){ // Arminius 6.28 lower encounter prob. #endif if (entflag) { #ifdef _Item_MoonAct if( getEqRandenemy( enfd) > 0 ) { int Rnum=0; int RandEnemy = getEqRandenemy( enfd); Rnum = RAND(0,100); if( Rnum > RandEnemy ) { #endif //encounter!! cep = minep; lssproto_EN_recv(enfd, CHAR_getInt(charaindex,CHAR_X), CHAR_getInt(charaindex,CHAR_Y)); #ifdef _Item_MoonAct } }else{ cep = minep; lssproto_EN_recv(enfd, CHAR_getInt(charaindex,CHAR_X), CHAR_getInt(charaindex,CHAR_Y)); } #endif } } else { if (cep<maxep) cep++; } } CONNECT_set_CEP(enfd, cep); } } if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE )!= CHAR_PARTY_CLIENT ){ CHAR_setFlg( charaindex, CHAR_ISWARP, 0); } } else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ||
static int CHAR_useChatMagic(int charaindex, char *data, int isDebug) { char magicname[256]; int ret; int i; int gmLevel = 0, magicLevel; CHATMAGICFUNC func; #ifdef _GMRELOAD extern struct GMINFO gminfo[GMMAXNUM]; #else #endif char *p = CHAR_getChar(charaindex, CHAR_CDKEY); if(!p) { fprint("err nothing cdkey\n"); return FALSE; } if(getChatMagicCDKeyCheck() == 1) { //第一次确认GM帐号 if(CHAR_getWorkInt(charaindex, CHAR_WORKFLG) & WORKFLG_DEBUGMODE) { gmLevel = CHAR_getWorkInt(charaindex, CHAR_WORKGMLEVEL); } else { #ifdef _GMRELOAD for(i = 0; i < GMMAXNUM; i++) { if(strcmp(p, gminfo[i].cdkey) == 0) { gmLevel = gminfo[i].level; CHAR_setWorkInt(charaindex, CHAR_WORKGMLEVEL, gmLevel); break; } } #else #endif if(i >= GMMAXNUM) { for(i = 0; i < DEBUGCDKEYNUM; i++) { if(DebugCDKey[i].use && strcmp(p, DebugCDKey[i].cdkey) == 0) { break; } } if(i >= DEBUGCDKEYNUM) return FALSE; } } } else { gmLevel = 3; CHAR_setWorkInt(charaindex, CHAR_WORKGMLEVEL, gmLevel); } ret = getStringFromIndexWithDelim(data, " ", 1, magicname, sizeof(magicname)); if(ret == FALSE)return FALSE; // Robin 0618 chaeck GM Level magicLevel = CHAR_getChatMagicFuncLevel(magicname, isDebug); if(gmLevel < magicLevel) return FALSE; func = CHAR_getChatMagicFuncPointer(magicname, isDebug); if(func) { LogGM(CHAR_getUseName(charaindex), CHAR_getChar(charaindex, CHAR_CDKEY), data, CHAR_getInt(charaindex, CHAR_FLOOR), CHAR_getInt(charaindex, CHAR_X), CHAR_getInt(charaindex, CHAR_Y)); func(charaindex, data + strlen(magicname) + 1); return TRUE; } else { return FALSE; } }
void PET_Watchfunc( int objmeindex, int objmoveindex, CHAR_ACTION act, int x, int y, int dir, int* opt, int optlen ) { int pindex; int petindex; int petputtime; if( OBJECT_getType(objmoveindex) != OBJTYPE_CHARA ) return; pindex = OBJECT_getIndex( objmoveindex); if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) return; petindex = OBJECT_getIndex( objmeindex); petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME); if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) { //宠邮不处理 }else if( CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){ if( NowTime.tv_sec >= (petputtime + 60*60) ) { int ownerindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX); if( CHAR_CHECKINDEX( ownerindex) ){ if( CHAR_pickupFollowPet( ownerindex, petindex ) ) { return; } CHAR_talkToCli( ownerindex, -1, "溜宠太久,宠物走失了!!", CHAR_COLORYELLOW ); } #ifdef _PET_LOSTPET CHAR_CharSaveLostPet( petindex, 1); LogPet( "系统", "Watchfunc", CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "timeout_lost(系统扣留-溜宠自由宠)", CHAR_getInt( petindex, CHAR_FLOOR), CHAR_getInt( petindex,CHAR_X ), CHAR_getInt( petindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); print("系统扣留-溜宠自由宠:%s\n", CHAR_getUseName( petindex)); CHAR_CharaDelete( petindex); #else CHAR_setInt( petindex, CHAR_PUTPETTIME, NowTime.tv_sec); CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWMODE, CHAR_PETFOLLOW_NONE); LogPet( CHAR_getChar( pindex, CHAR_NAME ), CHAR_getChar( pindex, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "timeout_lost(溜宠太久,宠物走失))", CHAR_getInt( pindex,CHAR_FLOOR), CHAR_getInt( pindex,CHAR_X ), CHAR_getInt( pindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); #endif return; } }else{ PET_CHECKFreePetIsIt( petindex); } if( CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE3 || CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE2){ if( act == CHAR_ACTATTACK) { if( NPC_Util_isFaceToChara( pindex,petindex,1 ) == TRUE ) { int action[2] = { CHAR_ACTDAMAGE, CHAR_ACTGUARD}; CHAR_sendWatchEvent( objmeindex, action[RAND(0,1)], NULL,0,FALSE); CHAR_setWorkInt( petindex, CHAR_WORKACTION, act); } } }else if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) { ; }else if( CHAR_getWorkInt( petindex, CHAR_WORKFIXAI) >= 100 ) { int workpindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX); if( act == CHAR_ACTWALK && CHAR_CHECKINDEX( workpindex) && workpindex == pindex ){ dir = NPC_Util_GetDirCharToChar( petindex, pindex, 0); if( dir != -1 ) { if( CHAR_getInt( petindex, CHAR_DIR) != dir ) { CHAR_setInt( petindex, CHAR_DIR, dir); CHAR_sendWatchEvent( CHAR_getWorkInt( petindex, CHAR_WORKOBJINDEX), CHAR_ACTTURN,NULL,0,TRUE); } } }else if( NPC_Util_isFaceToFace( petindex, pindex, 2 ) == TRUE ) { switch( act) { case CHAR_ACTATTACK: case CHAR_ACTDAMAGE: case CHAR_ACTDOWN: case CHAR_ACTSTAND: case CHAR_ACTACTIONWALK: case CHAR_ACTGUARD: case CHAR_ACTACTIONSTAND: CHAR_sendWatchEvent( objmeindex, act, NULL,0,FALSE); CHAR_setWorkInt( petindex, CHAR_WORKACTION, act); break; default: break; } } }else { } return; }