?? npc_newnpcman.c
字號:
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) );
}
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_setChar( petindex, CHAR_NAME, PetNAME);
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{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -