void NPC_AlldomanWindowTalked(int meindex, int talkerindex, int seqno, int select,char *data) { char buf2[256]; char buf[256]; int i; int playernum = CHAR_getPlayerMaxNum(); //andy_log print( "seqno:%d\n", seqno); switch(seqno) { case NPC_ALLDOMAN_MAIN_WND: if ( select == WINDOW_BUTTONTYPE_NEXT ) { showpage ++ ; NPC_Alldoman_selectWindow(meindex , talkerindex , 4 ,""); } if ( select == WINDOW_BUTTONTYPE_OK ) { //CHAR_talkToCli(talkerindex,meindex,"看清楚了!",CHAR_COLORRED); showpage = 1 ; NPC_Alldoman_selectWindow(meindex , talkerindex, 5 ,""); } break; case NPC_ALLDOMAN_SELECT_WND: if(atoi(data)==2) { //CHAR_talkToCli(talkerindex,meindex,"1!",CHAR_COLORRED); if ( CHAR_getInt( talkerindex , CHAR_FLOOR ) != 8200 ) { CHAR_talkToCli(talkerindex,-1,"这里只能给真正的英雄刻写!",CHAR_COLORRED); break; } if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) > 132 || CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) <= 0 ) { CHAR_setWorkInt( talkerindex , CHAR_WORKHEROFLOOR , 0 ) ; CHAR_talkToCli(talkerindex,-1,"这里只能给真正的英雄刻写!",CHAR_COLORRED); break; } sprintf( buf2 , "你拿出了打败守灵者%3d的证明,试图将自己的姓名刻上石碑!" , CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) ); CHAR_talkToCli(talkerindex,-1,buf2,CHAR_COLORRED); if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) == 132 ) { sprintf( buf2 , "%s" , "尼斯大陆英雄" ) ; //到达顶层对全星系广播 sprintf( buf , "%s征服了英雄战场,由风之精灵将这个消息通知全世界,新的英雄诞生了!!" , CHAR_getChar( talkerindex, CHAR_NAME ) ); for( i = 0 ; i < playernum ; i++) { if( CHAR_getCharUse(i) != FALSE ) { CHAR_talkToCli( i, -1, buf, CHAR_COLORBLUE2); } } } else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 130 ) sprintf( buf2 , "%s" , "尼斯大陆战士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 125 ) sprintf( buf2 , "%s" , "尼斯大陆勇士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 120 ) sprintf( buf2 , "%s" , "萨伊那斯英雄" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 115 ) sprintf( buf2 , "%s" , "斯巴达战士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 110 ) sprintf( buf2 , "%s" , "萨姆吉尔战士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 100 ) sprintf( buf2 , "%s" , "玛丽那丝战士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 80 ) sprintf( buf2 , "%s" , "卡坦战士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 60 ) sprintf( buf2 , "%s" , "霍特尔战士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 40 ) sprintf( buf2 , "%s" , "降魔勇士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 20 ) sprintf( buf2 , "%s" , "圣灵勇士" ) ; else if ( CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) >= 1 ) sprintf( buf2 , "%s" , "初犊勇士" ) ; else sprintf( buf2 , " " ); saacproto_UpdataStele_send ( acfd , CHAR_getChar( talkerindex , CHAR_CDKEY ), CHAR_getChar( talkerindex , CHAR_NAME ) , buf2 , CHAR_getInt( talkerindex , CHAR_LV ) , CHAR_getInt( talkerindex , CHAR_TRANSMIGRATION) , 10 , CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR ) ) ; //清除WorkFloor CHAR_setWorkInt( talkerindex , CHAR_WORKHEROFLOOR , 0 ) ; } if(atoi(data)==4) { //CHAR_talkToCli(talkerindex,meindex,"2!",CHAR_COLORRED); showpage = 1 ; NPC_Alldoman_selectWindow(meindex , talkerindex, 6 ,""); } if(atoi(data)==6) { //CHAR_talkToCli(talkerindex,meindex,"3!",CHAR_COLORRED); } break; case NPC_ALLDOMAN_LIST_WND: if( select == WINDOW_BUTTONTYPE_OK ){ print("\nSyu log FloorWorkint => %d" , CHAR_getWorkInt( talkerindex , CHAR_WORKHEROFLOOR )); } if( select == WINDOW_BUTTONTYPE_PREV && showpage > 1 ) { showpage -- ; NPC_Alldoman_selectWindow(meindex , talkerindex, 6 ,"" ); } if( select == WINDOW_BUTTONTYPE_NEXT && showpage < totalpage ) { showpage ++ ; NPC_Alldoman_selectWindow(meindex , talkerindex, 6 ,""); } break; } }
static void NPC_MemberMan_selectWindow( int meindex, int toindex, int num,int select) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[256]; int buttontype = 0, windowtype = 0, windowno = 0; int fd = getfdFromCharaIndex( toindex); int runint; 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){ print("TRANSER_MAN: GetArgStrErr!!"); return; } memset( token, 0, sizeof( token)); switch( num) { case WINDOW_START: if( NPC_Util_GetStrFromStrWithDelim( npcarg, "START_MSG", token, sizeof( token) ) == NULL) { print("MemberMan Get START_MSG ERROR !"); return; } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, WINDOW_START); buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = NPC_TRANSERMAN_SELECT; break; case WINDOW_SELECT: runint = MemberMan_GetMenuStr( meindex, toindex, npcarg, token,WINDOW_SELECT); if( runint == 0 ) { print( "MemberMan GetMenu ERROR !!"); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; if (runint == 2)buttontype = WINDOW_BUTTONTYPE_NEXT | WINDOW_BUTTONTYPE_CANCEL; if (runint == 1)buttontype = WINDOW_BUTTONTYPE_CANCEL; windowno = CHAR_WINDOWTYPE_MEMBER_NEXT; break; case WINDOW_NEXT: runint = MemberMan_GetMenuStr( meindex, toindex, npcarg, token,WINDOW_NEXT); if( runint == 0 ) { print( "MemberMan GetMenu ERROR !!"); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; if (runint == 2)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT | WINDOW_BUTTONTYPE_CANCEL; if (runint == 1)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_CANCEL; windowno = CHAR_WINDOWTYPE_MEMBER_NEXT1; break; case WINDOW_NEXT1: runint = MemberMan_GetMenuStr( meindex, toindex, npcarg, token,WINDOW_NEXT1); if( runint == 0 ) { print( "MemberMan GetMenu ERROR !!"); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; if (runint == 2)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT | WINDOW_BUTTONTYPE_CANCEL; if (runint == 1)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_CANCEL; windowno = CHAR_WINDOWTYPE_MEMBER_NEXT2; break; case WINDOW_NEXT2: runint = MemberMan_GetMenuStr( meindex, toindex, npcarg, token,WINDOW_NEXT2); if( runint == 0 ) { print( "MemberMan GetMenu ERROR !!"); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; if (runint == 2)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT | WINDOW_BUTTONTYPE_CANCEL; if (runint == 1)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_CANCEL; windowno = CHAR_WINDOWTYPE_MEMBER_NEXT3; break; case WINDOW_NEXT3: runint = MemberMan_GetMenuStr( meindex, toindex, npcarg, token,WINDOW_NEXT3); if( runint == 0 ) { print( "MemberMan GetMenu ERROR !!"); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; if (runint == 2)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT | WINDOW_BUTTONTYPE_CANCEL; if (runint == 1)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_CANCEL; windowno = CHAR_WINDOWTYPE_MEMBER_NEXT4; break; case WINDOW_NEXT4: runint = MemberMan_GetMenuStr( meindex, toindex, npcarg, token,WINDOW_NEXT4); if( runint == 0 ) { print( "MemberMan GetMenu ERROR !!"); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; if (runint == 2)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT | WINDOW_BUTTONTYPE_CANCEL; if (runint == 1)buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_CANCEL; windowno = CHAR_WINDOWTYPE_MEMBER_NEXT5; break; case WINDOW_NEXT5: runint = MemberMan_GetMenuStr( meindex, toindex, npcarg, token,WINDOW_NEXT5); if( runint == 0 ) { print( "MemberMan GetMenu ERROR !!"); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; buttontype = WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_CANCEL; windowno = NPC_TRANSERMAN_WARP; break; case WINDOW_WARP: if( ActionNpc_CheckMenuFree( meindex, toindex, npcarg, select) == FALSE ){ memset( token, 0, sizeof( token)); if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FAIL_MSG", token, sizeof( token) ) != NULL) { CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW); } } return; case WINDOW_END: break; } lssproto_WN_send( fd, windowtype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }
void NPC_PetRaceMasterLoop( int meindex) { int floor = CHAR_getInt(meindex, CHAR_FLOOR); time_t t1; time(&t1); switch(CHAR_getWorkInt(meindex, NPC_WORK_STATE)) { case NPC_State_Init: // ´M§äÃdª«index NPC_findRacePetIndex(meindex, floor); break; case NPC_State_WaitDropStake: { char tmpbuf[256]; int statechangetime = CHAR_getWorkInt(meindex, NPC_WORK_STATECHANGE); if (t1 < statechangetime) { if (statechangetime - t1 <= 5) { CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPIV_LOOPTIME); snprintf(tmpbuf, sizeof(tmpbuf), "ÁÙ¦³%2d¬í´Nn¶}¶]¤F¡A½Ð¤j®a¿ãÅD¤Uª`¡I", (int)(statechangetime - t1) % 60); } else if (statechangetime - t1 <= 10) { CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPIII_LOOPTIME); snprintf(tmpbuf, sizeof(tmpbuf), "ÁÙ¦³%2d¬í´Nn¶}¶]¤F¡A½Ð¤j®a¿ãÅD¤Uª`¡I", (int)(statechangetime - t1) % 60); } else if (statechangetime - t1 <= 30) { CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPII_LOOPTIME); snprintf(tmpbuf, sizeof(tmpbuf), "ÁÙ¦³%2d¬í´Nn¶}¶]¤F¡A½Ð¤j®a¿ãÅD¤Uª`¡I", (int)(statechangetime - t1) % 60); } else snprintf(tmpbuf, sizeof(tmpbuf), "ÁÙ¦³%2d¤ÀÄÁ%2d¬í´Nn¶}¶]¤F¡A½Ð¤j®a¿ãÅD¤Uª`¡I", (int)(statechangetime - t1) / 60, (int)(statechangetime - t1) % 60); } if (t1 >= statechangetime) { #ifdef _DROPSTAKENEW #else float payrate1 = 0, payrate2 = 0, payrate3 = 0; int pet1gold = 0, pet2gold = 0, pet3gold = 0, totalgold = 0; int petindex1 = CHAR_getWorkInt(meindex, NPC_WORK_PET1); int petindex2 = CHAR_getWorkInt(meindex, NPC_WORK_PET2); int petindex3 = CHAR_getWorkInt(meindex, NPC_WORK_PET3); int randpet = CHAR_getWorkInt(meindex, NPC_WORK_PETGROUP); float droprate1 = 0, droprate2 = 0, droprate3 = 0, totaldroprate, Npayrate = PETRACESTDPAYRATE; #endif int i = 0; CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_PetRacing); // ³]©w¦a±¤£¥i¤Uª` SetCasinoMap(meindex, 0, FALSE); #ifdef _DROPSTAKENEW snprintf(tmpbuf, sizeof(tmpbuf), "½Ð¤j®a°±¤î¤Uª`¡AÃdª«Áɶ]¶}©lÅo¡I"); #else // §iª¾¤j®a½ß²v¡]¨ú±oÃdª«¤Uª`ª÷ÃBpºâ½ß²v¡^ GetCasinoMapGold(meindex, PET_RACE1, &pet1gold); GetCasinoMapGold(meindex, PET_RACE2, &pet2gold); GetCasinoMapGold(meindex, PET_RACE3, &pet3gold); totalgold = pet1gold + pet2gold + pet3gold; if (totalgold <= 0) { payrate1 = 2; payrate2 = 2; payrate3 = 2; } else { if (pet1gold <= PETRACESTDGOLD) pet1gold = PETRACESTDGOLD; if (pet2gold <= PETRACESTDGOLD) pet2gold = PETRACESTDGOLD; if (pet3gold <= PETRACESTDGOLD) pet3gold = PETRACESTDGOLD; totalgold = pet1gold + pet2gold + pet3gold; droprate1 = totalgold / pet1gold; droprate2 = totalgold / pet2gold; droprate3 = totalgold / pet3gold; totaldroprate = droprate1 + droprate2 + droprate3; if (totaldroprate / droprate1 > PETRACESTDPAYRATE) { payrate1 = 1; Npayrate -= 1; } if (totaldroprate / droprate2 > PETRACESTDPAYRATE) { payrate2 = 1; Npayrate -= 1; } if (totaldroprate / droprate3 > PETRACESTDPAYRATE) { payrate3 = 1; Npayrate -= 1; } if (payrate1 != 1) payrate1 = droprate1 / totaldroprate * Npayrate; if (payrate2 != 1) payrate2 = droprate2 / totaldroprate * Npayrate; if (payrate3 != 1) payrate3 = droprate3 / totaldroprate * Npayrate; } petracegra[randpet].payrate1 = payrate1; petracegra[randpet].payrate3 = payrate2; petracegra[randpet].payrate2 = payrate3; SetCasinoPayRate(meindex, PET_RACE1, payrate1); SetCasinoPayRate(meindex, PET_RACE2, payrate2); SetCasinoPayRate(meindex, PET_RACE3, payrate3); snprintf(tmpbuf, sizeof(tmpbuf), "½Ð¤j®a°±¤î¤Uª`¡AÃdª«Áɶ]¶}©lÅo¡I%sªº½ß²v¬°%5.2f¡F%sªº½ß²v¬°%5.2f¡F%sªº½ß²v¬°%5.2f", CHAR_getChar(petindex1, CHAR_NAME), payrate1, CHAR_getChar(petindex2, CHAR_NAME), payrate2, CHAR_getChar(petindex3, CHAR_NAME), payrate3); #endif CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_PETRACING_LOOPTIME); // ³]©wÃdª«ª¬ºA for (i = 0; i < PETRACEPETNUM; i++) { CHAR_setWorkInt(CHAR_getWorkInt(meindex, NPC_WORK_PET1 + i), NPC_WORK_STATE, NPC_State_Run); CHAR_setInt(CHAR_getWorkInt(meindex, NPC_WORK_PET1 + i), CHAR_LOOPINTERVAL, 1000); } } CHAR_talkToFloor(floor, meindex, tmpbuf, CHAR_COLORWHITE); } break; case NPC_State_PetRacing: if (CHAR_getWorkInt(meindex, NPC_WORK_PETGOAL) == PETRACEPETNUM) { char tmpbuf[256]; int winpetindex = CHAR_getWorkInt(meindex, NPC_WORK_WINPET); int petgroup = CHAR_getWorkInt(meindex, NPC_WORK_PETGROUP); snprintf(tmpbuf, sizeof(tmpbuf), "ÄvÁɵ²§ô¡A³Ó§QªºÃdª«¬O¡G%s\n", CHAR_getChar(winpetindex, CHAR_NAME)); CHAR_talkToFloor(floor, meindex, tmpbuf, CHAR_COLORYELLOW); // ³]©w¿éĹ¡A¥Hpºâ½ß²v if (CHAR_getWorkInt(meindex, NPC_WORK_PET1) == winpetindex) petracegra[petgroup].pet1win = petracegra[petgroup].pet1win + 1; else if (CHAR_getWorkInt(meindex, NPC_WORK_PET2) == winpetindex) petracegra[petgroup].pet2win = petracegra[petgroup].pet2win + 1; else if (CHAR_getWorkInt(meindex, NPC_WORK_PET3) == winpetindex) petracegra[petgroup].pet3win = petracegra[petgroup].pet3win + 1; CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_ShowWinPet); CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_SHOWWINPET_LOOPTIME); CHAR_setWorkInt(meindex, NPC_WORK_STATECHANGE, t1 + PETRACESHOWWINPET); // µo¼úª÷ NPC_givePriceToPlayer(meindex, floor, winpetindex); } break; case NPC_State_ShowWinPet: { int statechangetime = CHAR_getWorkInt(meindex, NPC_WORK_STATECHANGE); if (t1 >= statechangetime) { int randpet = RAND(0, arraysizeof(petracegra) - 1); int petindex1 = CHAR_getWorkInt(meindex, NPC_WORK_PET1); int petindex2 = CHAR_getWorkInt(meindex, NPC_WORK_PET2); int petindex3 = CHAR_getWorkInt(meindex, NPC_WORK_PET3); char tmpbuf[256]; CHAR_setWorkInt(meindex, NPC_WORK_PETGROUP, randpet); CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_WaitDropStake); CHAR_setWorkInt(meindex, NPC_WORK_WINPET, 0); CHAR_setWorkInt(meindex, NPC_WORK_PETGOAL, 0); CHAR_setWorkInt(meindex, NPC_WORK_STATECHANGE, t1 + PETRACEDROPSTAKETIME); CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPI_LOOPTIME); // ³]©w¦a±¥i¤Uª` SetCasinoMap(meindex, 0, TRUE); // ³]©wÃdª« CHAR_setWorkInt(petindex1, NPC_WORK_STATE, NPC_State_Wait); CHAR_setInt(petindex1, CHAR_LOOPINTERVAL, 1000); CHAR_setInt(petindex1, CHAR_BASEIMAGENUMBER, petracegra[randpet].pet1gra); CHAR_setChar(petindex1, CHAR_NAME, petracegra[randpet].pet1name); CHAR_setWorkInt(petindex2, NPC_WORK_STATE, NPC_State_Wait); CHAR_setInt(petindex2, CHAR_LOOPINTERVAL, 1000); CHAR_setInt(petindex2, CHAR_BASEIMAGENUMBER, petracegra[randpet].pet2gra); CHAR_setChar(petindex2, CHAR_NAME, petracegra[randpet].pet2name); CHAR_setWorkInt(petindex3, NPC_WORK_STATE, NPC_State_Wait); CHAR_setInt(petindex3, CHAR_LOOPINTERVAL, 1000); CHAR_setInt(petindex3, CHAR_BASEIMAGENUMBER, petracegra[randpet].pet3gra); CHAR_setChar(petindex3, CHAR_NAME, petracegra[randpet].pet3name); // ³]©wÃdª«ª¬ªp #ifdef _DROPSTAKENEW #else petracegra[randpet].payrate1 = 0; petracegra[randpet].payrate3 = 0; petracegra[randpet].payrate2 = 0; #endif { int state1 = RAND(0, 3); int state2 = RAND(0, 3); int state3 = RAND(0, 3); if (state1 == 0) sprintf(petracegra[randpet].state1, "¨}¦n"); else if (state1 == 1) sprintf(petracegra[randpet].state1, "´¶³q"); else if (state1 == 2) sprintf(petracegra[randpet].state1, "¤£¨Î"); else if (state1 == 3) sprintf(petracegra[randpet].state1, "¥¼ª¾"); if (state2 == 0) sprintf(petracegra[randpet].state2, "¨}¦n"); else if (state2 == 1) sprintf(petracegra[randpet].state2, "´¶³q"); else if (state2 == 2) sprintf(petracegra[randpet].state2, "¤£¨Î"); else if (state2 == 3) sprintf(petracegra[randpet].state2, "¥¼ª¾"); if (state3 == 0) sprintf(petracegra[randpet].state3, "¨}¦n"); else if (state3 == 1) sprintf(petracegra[randpet].state3, "´¶³q"); else if (state3 == 2) sprintf(petracegra[randpet].state3, "¤£¨Î"); else if (state3 == 3) sprintf(petracegra[randpet].state3, "¥¼ª¾"); } snprintf(tmpbuf, sizeof(tmpbuf), "Ãdª«Äv³t·Ç³Æ¤¤¡A½Ð¤j®a¿ãÅD¤Uª`¡I"); CHAR_talkToFloor(floor, meindex, tmpbuf, CHAR_COLORYELLOW); } } break; default: break; } }
void NPC_Duelranking_PrintRanking( char *data, int count_start, int fdid, int msgid2) { char message[1024]; char buf[2048]; int i; int cnt = 0; int button = 0; int fd = getfdFromFdid( fdid); if( fd == -1 ) return; message[0] = '\0'; snprintf( message, sizeof( message), " 世界的强者们\n\n" " Rank DuelPoint Lv Name\n\n" ); for( i = 1; ; i ++ ) { char rankdata[256]; char cdandname[64]; char charaname[32]; char rank[16]; char score[64]; char msgbuf[512]; char cdkey[32]; char lv[16]; char hosi[6]; if( !getStringFromIndexWithDelim( data, "|", i, rankdata, sizeof( rankdata))) { break; } if( !getStringFromIndexWithDelim( rankdata, ",", 2, rank, sizeof( rank)) ){ continue; } if( !getStringFromIndexWithDelim( rankdata, ",", 3, cdandname, sizeof( cdandname)) ){ continue; } makeStringFromEscaped( cdandname); if( !getStringFromIndexWithDelim( cdandname, "_", 1, cdkey, sizeof( cdkey)) ){ continue; } if( !getStringFromIndexWithDelim( cdandname, "_", 2, charaname, sizeof( charaname)) ){ continue; } if( !getStringFromIndexWithDelim( rankdata, ",", 4, score, sizeof( score)) ){ continue; } if( !getStringFromIndexWithDelim( rankdata, ",", 5, lv, sizeof( lv)) ){ lv[0] = '\0'; } { char *mycdkey = CHAR_getChar( CONNECT_getCharaindex(fd), CHAR_CDKEY); char *myname = CHAR_getChar( CONNECT_getCharaindex(fd), CHAR_NAME); char engnum[4][3] = { "st","nd","rd","th"}; int dsprank = atoi(rank); if( dsprank > 3) dsprank = 3; if( mycdkey != NULL && myname != NULL && strcmp( cdkey, mycdkey) == 0 && strcmp( charaname, myname) == 0 ) { strcpy( hosi, "★"); }else { strcpy( hosi, " "); } snprintf( msgbuf, sizeof( msgbuf), "%s %5d%s %10s %3s %s\n", hosi, atoi(rank)+1, engnum[dsprank], score, lv, charaname ); } strcatsafe( message, sizeof( message), msgbuf); cnt ++; } if( cnt == 0 ) { strcpy( message, "\n 没有其他的资料了。"); button = WINDOW_BUTTONTYPE_PREV|WINDOW_BUTTONTYPE_OK; }else if( cnt < NPC_DUELRANKING_WINDOWLINENUM ) { if( count_start >= NPC_DUELRANKING_WINDOWLINENUM) { button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV; }else { button = WINDOW_BUTTONTYPE_OK; } }else if( count_start == 0 ) { button = WINDOW_BUTTONTYPE_NEXT|WINDOW_BUTTONTYPE_OK; }else { button = WINDOW_BUTTONTYPE_NEXT|WINDOW_BUTTONTYPE_PREV|WINDOW_BUTTONTYPE_OK; } lssproto_WN_send( fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT, button, CHAR_WINDOWTYPE_DUELRANKING_TOPRANKING, msgid2, makeEscapeString( message, buf, sizeof(buf))); if( cnt == 0 ) { CHAR_setWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKSHOPRELEVANT, -1); }else { CHAR_setWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKSHOPRELEVANT, count_start); } }
static void NPC_FmRank_selectWindow( int meindex, int toindex, int num,int select) { int myfmindex=-1; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[256]; char buff[128]; int buttontype = 0, windowtype = 0, windowno = 0; int fd = getfdFromCharaIndex( toindex); 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){ print("TRANSER_MAN: GetArgStrErr!!"); return; } memset( token, 0, sizeof( token)); switch( num) { case WINDOW_START: sprintf(token, "3\n\n ★家族竞价排名管理员★\n\n" " 《加入排名系统》\n" " 《追加竞价点数》\n" " 《查看本族名次》\n" " 《查看前二十名》\n" " 《排名功能介绍》\n"); CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, WINDOW_START); windowtype = WINDOW_MESSAGETYPE_SELECT; buttontype = WINDOW_BUTTONTYPE_CANCEL; windowno = NPC_FMRANK_SELECT; break; case WINDOW_SELECT: windowtype = WINDOW_MESSAGETYPE_MESSAGE; if(select==1 || select == 2){ myfmindex = CHAR_getInt(toindex, CHAR_FMINDEX); if(myfmindex>0){ int myfmpoint = sasql_fmpoint_query(myfmindex); windowtype = WINDOW_MESSAGETYPE_MESSAGEANDLINEINPUT; if(myfmpoint>0){ sprintf(token, " ★家族竞价排名管理员★\n\n" "您的家族已经加入排名系统\n" "现在的竞价点数是:%d点!\n\n" "如需提升排名\n" "请在下方填写完追加点数后点【确定】",myfmpoint); buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = NPC_FMRANK_ADDPOINT; }else{ sprintf(token, " ★家族竞价排名管理员★\n\n" "您的家族还未加入排名系统!\n\n" "如需加入排名系统\n" "请在下方填写竞价点数后点【确定】"); buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = NPC_FMRANK_ADDFM; } }else{ sprintf(token, " ★家族竞价排名管理员★\n\n" "您还没有加入或者成立家族,请有家族后再进行此操作!"); buttontype = WINDOW_BUTTONTYPE_CANCEL; } }else if(select==3){ myfmindex = CHAR_getInt(toindex, CHAR_FMINDEX); if(myfmindex>0){ int myfmpoint = sasql_fmpoint_query(myfmindex); if(myfmpoint>0){ int myfmno = sasql_fmno_query(myfmindex); sprintf(token, " ★家族竞价排名管理员★\n\n" "您的家族已经加入排名系统\n\n" "现在的竞价点数是:%d点\n\n" "排名:第%d位!",myfmpoint,myfmno); buttontype = WINDOW_BUTTONTYPE_CANCEL; }else{ sprintf(token, " ★家族竞价排名管理员★\n\n" "您的家族还未加入排名系统!\n"); buttontype = WINDOW_BUTTONTYPE_CANCEL; } }else{ sprintf(token, " ★家族竞价排名管理员★\n\n" "您还没有加入或者成立家族,请有家族后再进行此操作!"); buttontype = WINDOW_BUTTONTYPE_CANCEL; } }else if(select==4){ CHAR_setWorkInt(toindex,CHAR_WORKLISTPAGE,1); sprintf(token, " ★前20名排名家族列表★\n"); fmrankcnt = sasql_fm_query(); if(fmrankcnt>0){ int fmshowmax; if(fmrankcnt>7) fmshowmax=7; else fmshowmax = fmrankcnt; int i; for(i=0;i<fmshowmax;i++){ sprintf(buff,"%d.%s 竞价点数:%d\n",i+1,fmrankname[i],fmrankpoint[i]); strcat(token,buff); } } if(fmrankcnt>7) buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_NEXT; else buttontype = WINDOW_BUTTONTYPE_CANCEL; windowno = NPC_FMRANK_TOP20; }else if(select==5){ sprintf(token, "\n1、采用竞价排名形式 【竞】\n" "2、只显示前20位家族 【价】\n" "3、插入在自然排名前 【排】\n" "4、最少出价为一百点 【名】\n" "5、刷新时间为15分钟 【系】\n" "6、每月最后一天清空 【统】\n"); buttontype = WINDOW_BUTTONTYPE_CANCEL; } break; case WINDOW_FMRANKTOP_NEXT: if(CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE)<1) return; windowtype = WINDOW_MESSAGETYPE_MESSAGE; sprintf(token, " ★前20名排名家族列表★\n"); if(fmrankcnt>0){ int fmshowmax; if(fmrankcnt<=7) return; if(CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE)==1){ if(fmrankcnt>14){ fmshowmax = 14; buttontype = WINDOW_BUTTONTYPE_PREV|WINDOW_BUTTONTYPE_NEXT; } else{ fmshowmax = fmrankcnt; buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_PREV; } }else if(CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE)==2){ if(fmrankcnt<=14) return; fmshowmax = fmrankcnt; buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_PREV; }else{ return; } int i; for(i=7*CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE);i<fmshowmax;i++){ sprintf(buff,"%d.%s 竞价点数:%d\n",i+1,fmrankname[i],fmrankpoint[i]); strcat(token,buff); } CHAR_setWorkInt(toindex,CHAR_WORKLISTPAGE,CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE)+1); windowno = NPC_FMRANK_TOP20; }else return; break; case WINDOW_FMRANKTOP_PREV: if(CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE)>3) return; windowtype = WINDOW_MESSAGETYPE_MESSAGE; sprintf(token, " ★前20名排名家族列表★\n"); if(fmrankcnt>0){ int fmshowmax; if(CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE)==3){ if(fmrankcnt<=14) return; fmshowmax = 14; buttontype = WINDOW_BUTTONTYPE_PREV|WINDOW_BUTTONTYPE_NEXT; }else if(CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE)==2){ if(fmrankcnt<=7) return; fmshowmax = 7; buttontype = WINDOW_BUTTONTYPE_CANCEL|WINDOW_BUTTONTYPE_NEXT; } int i; for(i=fmshowmax-7;i<fmshowmax;i++){ sprintf(buff,"%d.%s 竞价点数:%d\n",i+1,fmrankname[i],fmrankpoint[i]); strcat(token,buff); } CHAR_setWorkInt(toindex,CHAR_WORKLISTPAGE,CHAR_getWorkInt(toindex,CHAR_WORKLISTPAGE)-1); windowno = NPC_FMRANK_TOP20; }else return; break; } lssproto_WN_send( fd, windowtype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }
/********************************* * �ƾ�����ľ���ݼ��� *********************************/ void NPC_BodyLanTalked( int meindex , int talkerindex , char *szMes ,int color ) { char szP[256], szArg[4096]; int EventNo = -1,Pre_Event = -1; /* �����������帲�ƻ����� ɱ���� */ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* ��������� ���� */ if( NPC_Util_CharDistance( talkerindex, meindex ) > 2 ) { return; } // ¦�� ٯ if( NPC_Util_GetArgStr( meindex, szArg, sizeof( szArg ) ) == NULL ){ print( "npc_bodylan.c:û������(%s)\n", CHAR_getChar(meindex,CHAR_NPCARGUMENT) ); return ; }else{ // ��ì���� į�� if( NPC_Util_GetStrFromStrWithDelim( szArg, "EventNo", szP, sizeof( szP ) ) != NULL ){ EventNo = atoi(szP); } // ��� ۢ��ì���� į�� if( NPC_Util_GetStrFromStrWithDelim( szArg, "Pre_Event", szP, sizeof( szP ) ) != NULL ){ Pre_Event = atoi(szP); } } // ���� ۢ��ì���� į��ؤľ�� if( Pre_Event >= 0 ){ // ��ì�����帲�ƻ������ƻ����¾��������� if( NPC_EventCheckFlg( talkerindex, Pre_Event ) == FALSE ){ // ۢ��ì����ë����ʧ�ƻ���ئ�������ճ����� NPC_BodyLan_Window( meindex, talkerindex, BODYLAN_WIN_NOT_PREEVENT ); return; } } // ��ì���� į��ؤľ�� if( EventNo >= 0 ){ // ��ì�����帲�ƻ������ƻ����¾��������� if( NPC_EventCheckFlg( talkerindex, EventNo ) == TRUE ){ // �Ȼ������ճ����� NPC_BodyLan_Window( meindex, talkerindex, BODYLAN_WIN_ALREADY ); return; } } // �Գ����������������������Ȼ����� if( CHAR_getWorkInt( talkerindex, CHAR_WORKTRADER ) == meindex ){ // ���ձ���Ѩ������ �� �ƻ������� if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT ) >= CHAR_getWorkInt( meindex, BODYLAN_E_COMMANDNUM ) ){ // �� ����� ���� NPC_BodyLan_Window( meindex, talkerindex, BODYLAN_WIN_LAST_GOOD ); return; }else{ // �� NPC_BodyLan_Window( meindex, talkerindex, BODYLAN_WIN_LAST_NG ); return; } }else{ // �ٻ���ئ��ƥ������ // ��������������м��̼������͵�ë��������� CHAR_setWorkInt( talkerindex, CHAR_WORKTRADER, meindex ); // �ˡ��������� �پ��ձ������ CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 1 ); // �����˱������羮�������微ئؤ������ NPC_BodyLan_Window( meindex, talkerindex, BODYLAN_WIN_FIRST ); return; } }
void NPC_EventSetFlg(int talker,int shiftbit) { int point=0; int array; int shift; #ifdef _TEACHER_SYSTEM int iGetFame = 0; #endif /*-- -1���º�����绥ئ����ì���� -*/ if(shiftbit==-1) return; if(shiftbit<=255){ array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_ENDEVENT+array); // Arminius 8.24 prevent wash dp if (!(point & (1 << shift))) { // CoolFish: Family Adv 2001/8/4 AddFMAdv(talker, shiftbit); #ifdef _TEACHER_SYSTEM if(shiftbit < arraysizeof(FMAdvTbl)) iGetFame = FMAdvTbl[shiftbit]; #endif } #ifdef _TEACHER_SYSTEM iGetFame /= 20; // ��ʦ���ѧ������������ 5% (1/20) // ������õ�������û�д��0 if(iGetFame > 0){ // �����û�е�ʦ if(strlen(CHAR_getChar(talker,CHAR_TEACHER_ID)) > 0 && strlen(CHAR_getChar(talker,CHAR_TEACHER_NAME)) > 0){ int iPlayernum = CHAR_getPlayerMaxNum(),i; char szMsg[128]; // ��鵼ʦ�ڲ������� for(i=0;i<iPlayernum;i++){ if(CHAR_getCharUse(i) == FALSE) continue; if(strcmp(CHAR_getChar(talker,CHAR_TEACHER_ID),CHAR_getChar(i,CHAR_CDKEY)) == 0 && strcmp(CHAR_getChar(talker,CHAR_TEACHER_NAME),CHAR_getChar(i,CHAR_NAME)) == 0){ float fGetFame = (float)iGetFame/100; // ��ʦ������ CHAR_setWorkInt(i,CHAR_WORK_GET_TEACHER_FAME,CHAR_getWorkInt(i,CHAR_WORK_GET_TEACHER_FAME) + iGetFame); sprintf(szMsg,"���ѧ�� %s %.2f ������",CHAR_getChar(talker,CHAR_NAME),fGetFame); CHAR_talkToCli(i,-1,szMsg,CHAR_COLORYELLOW); break; } } } } #endif point = point | (1 << shift); CHAR_setInt( talker, CHAR_ENDEVENT+array, point); } else if(shiftbit<=510){ array = (shiftbit-255) / 32; shift = (shiftbit-255) % 32; point = CHAR_getInt( talker, CHAR_ENDEVENT9+array); point = point | (1 << shift); CHAR_setInt( talker, CHAR_ENDEVENT9+array, point); } }
void NPC_WarpManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; char buf[NPC_UTIL_GETARGSTR_BUFSIZE]; #ifdef _NEW_WARPMAN BOOL checkp=TRUE; char buf1[1024]; int talkNo = 1; BOOL tenflg=FALSE; #else int fl,x,y; #endif char buff2[256]; int fd = getfdFromCharaIndex( talkerindex ); if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) return; if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)))==NULL){ print("GetArgStrErr"); return ; } if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) < 1 ) { CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1); return; } #ifdef _NEW_WARPMAN if( seqno == NEW_WARPMAN ) { int eqnum=0; eqnum = CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT); sprintf(buf1,"%s", "NOFREE"); if( eqnum >= 0 ) { sprintf(buf1,"TALKEVENT%d", eqnum); } CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); while( getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf,sizeof( buf)) != FALSE){ if( strstr(buf, buf1) != NULL) { strcpy( npcarg1 , buf); npcarg = (char *)npcarg1; tenflg = TRUE; break; } talkNo++; } if( tenflg == FALSE ) { CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1); return; } }else { #endif if( select != WINDOW_BUTTONTYPE_YES ) { CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1); return; } if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE){ NPC_ERR_DiSP( meindex, talkerindex, 1); return; } #ifdef _NEW_WARPMAN } #else NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf)); GetRand_WarpPoint( buf, &fl, &x, &y ); #endif #ifdef _NEW_WARPMAN switch( seqno) { case WARP_MAN: if( select != WINDOW_BUTTONTYPE_YES ) return; if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ){ NPC_ERR_DiSP( meindex, talkerindex, 1); return; } #else if( select != WINDOW_BUTTONTYPE_YES) return; if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE) return; #endif #ifdef _NEW_WARPMAN break; case NEW_WARPMAN: if( select != WINDOW_BUTTONTYPE_YES ){ CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1); if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CancelMsg", buff2, sizeof( buff2) ) != NULL) { CHAR_talkToCli( talkerindex, meindex, buff2, CHAR_COLORYELLOW); } return; } checkp=TRUE; if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECKPARTY", buff2, sizeof( buff2) ) != NULL) { if( strstr( buff2, "FALSE") != NULL ) { checkp = FALSE; } } if( checkp==TRUE && NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ) { NPC_ERR_DiSP( meindex, talkerindex, 1); CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1); return; } break; case NEW_WARPMAN_END: return; break; } #endif if( Action_RunDoEventAction( meindex, talkerindex, npcarg) == FALSE ){ CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1); return; } CHAR_complianceParameter( talkerindex ); CHAR_send_P_StatusString( talkerindex , CHAR_P_STRING_ATK|CHAR_P_STRING_DEF| CHAR_P_STRING_CHARM|CHAR_P_STRING_QUICK| CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE| CHAR_P_STRING_WIND|CHAR_P_STRING_EARTH ); if( CHAR_getWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE){ return ; } if(CHAR_getWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD) <= 0){ CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE ); #ifdef _NEW_WARPMAN NPC_WarpMsg( meindex, talkerindex, npcarg); #else if( fl == 0 && x == 0 && y == 0 ) { }else { CHAR_warpToSpecificPoint(talkerindex, fl, x,y); } #endif }else { if(CHAR_getInt(talkerindex,CHAR_GOLD) < CHAR_getWorkInt(talkerindex,CHAR_WORKSHOPRELEVANTTRD)){ NPC_ERR_DiSP( meindex, talkerindex, 2); return ; } CHAR_DelGold( talkerindex, CHAR_getWorkInt(talkerindex,CHAR_WORKSHOPRELEVANTTRD )); CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE ); #ifdef _NEW_WARPMAN NPC_WarpMsg( meindex, talkerindex, npcarg); #else if( fl == 0 && x == 0 && y == 0 ) { }else { CHAR_warpToSpecificPoint(talkerindex, fl, x,y); } #endif } #ifdef _NEW_WARPMAN NPC_NpcWarpMsg( meindex, talkerindex, npcarg); #else }
BOOL NPC_WarpManInit( int meindex ) { char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; char buff2[256]; char buf[1024]; int fl,x,y; if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)))==NULL){ print("WarpMan:GetArgStrErr"); return FALSE; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN ); #ifdef _NEW_WARPMAN if( strstr( npcarg,"NEWWARPMAN") ) { //timeman 功能 CHAR_setWorkInt( meindex, NPC_TIME_MODE, 1); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buff2, sizeof( buff2)) != NULL ){ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 60*1000); } #ifdef _TREASURE_BOX CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_NONE); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_BOX", buff2, sizeof( buff2)) != NULL ){ if( strstr( buff2, "ON") != NULL ){ CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT); CHAR_setWorkInt( meindex, NPC_TIME_EVENTTIME, NowTime.tv_sec); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_ONBBI", buff2, sizeof( buff2)) != NULL ) CHAR_setWorkInt( meindex, NPC_TIME_EVENONBBI, atoi( buff2)); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_OFFDBBI", buff2, sizeof( buff2)) != NULL ) CHAR_setWorkInt( meindex, NPC_TIME_EVENOFFDBBI, atoi( buff2)); CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0 ); } } #endif return TRUE; }else{ #endif if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){ char filename[256]; if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL ) print("\n Warpman Err -> file:%s", filename); return FALSE; } getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2)); fl=atoi(buff2); getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2)); x=atoi(buff2); getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2)); y=atoi(buff2); if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){ char filename[256]; NPC_Util_CheckAssignArgFile( meindex, filename); print( "\nWarp NPC: filename:%s\n 3.Invalid warpman ERR %d %d %d" , filename, fl , x , y ); return FALSE; } #ifdef _NEW_WARPMAN } #endif return TRUE; }
void NPC_WarpManTalked( int meindex , int talkerindex , char *szMes ,int color ) { char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; char token[256]; int RunType=-1; CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE ); 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((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)))==NULL){ print("GetArgStrErr"); return ; } #ifdef _NEW_WARPMAN if( strstr( npcarg,"NEWWARPMAN") ) { #ifdef _TREASURE_BOX if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_OPEN ) return; #endif NPC_NewWarpMan_selectWindow( meindex ,talkerindex, 0, -1, szMes); return; }else { if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE) {//有組隊 NPC_ERR_DiSP( meindex, talkerindex, 1); return; } RunType = CheckWarpMsg( meindex, talkerindex, npcarg , szMes); if( RunType !=0 ) { if( RunType == 1 ) { if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_msg", token, sizeof(token)) != NULL) { CHAR_talkToCli( talkerindex, meindex,token,CHAR_COLORWHITE); } } return; } } #else if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE) {//有組隊 NPC_ERR_DiSP( meindex, talkerindex, 1); return; } RunType = CheckWarpMsg( meindex, talkerindex, npcarg , szMes); if( RunType !=0 ) { if( RunType == 1 ) { if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_msg", token, sizeof(token)) != NULL) { CHAR_talkToCli( talkerindex, meindex,token,CHAR_COLORWHITE); } } return; } #endif CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD , 0 ); if(strstr(npcarg,"DR")!=NULL) { CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTSEC , -1 ); if(NPC_GetDuelPointCheck(meindex,talkerindex)==FALSE) return; }else{ NPC_WarpMan_selectWindow( meindex, talkerindex,0,-1); } }
static void NPC_WarpMan_selectWindow( int meindex, int toindex, int num,int select) { char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; char token[1024]; char buf[256]; char buf2[1024]; char buf3[256]; int fl=0 ; int money=100 ; int fd = getfdFromCharaIndex( toindex); char tmp[64]; if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)))==NULL){ print("GetArgStrErr"); CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0); return ; } if(NPC_PARTY_CHAECK( meindex, toindex) == FALSE) { NPC_ERR_DiSP( meindex, toindex, 1); return; } if( CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) != 0 ) { return; }else { CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 1); } if(strstr(npcarg,"%4d")!=NULL){ int flwork = 0; int work; NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf)); getStringFromIndexWithDelim(buf,",",1,buf3,sizeof(buf3)); work = atoi( buf3); fl = NPC_FloorUse( toindex, atoi(buf3)); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "Floor", buf3, sizeof( buf3)) != NULL){ flwork = NPC_FloorUseOtherFloor(work, buf3); } fl = fl +flwork; } NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf, sizeof( buf)); if( (NPC_ActionPassCheck(meindex,toindex,buf)==TRUE) || (strstr(buf,"ALLFREE")!=NULL) ){ if(NPC_Util_GetStrFromStrWithDelim( npcarg, "FreeMsg", buf2, sizeof( buf2))==NULL) return; CONNECT_set_pass(fd,TRUE); CONNECT_set_first_warp(fd,TRUE); if(strstr(buf2,"%4d") != NULL){ sprintf(token,buf2,fl); }else{ strcpy(token,buf2); } CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -1 ); CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 2); }else { if(NPC_Util_GetStrFromStrWithDelim( npcarg, "PayMsg", buf2, sizeof( buf2)) != NULL){ CONNECT_set_pass(fd,FALSE); CONNECT_set_first_warp(fd,FALSE); if(strstr(buf2,"%8d") != NULL){ NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp)); if(strstr(tmp,"LV")!=NULL){ int level; char buff2[32]; level = CHAR_getInt(toindex,CHAR_LV); getStringFromIndexWithDelim(tmp,"*",2,buff2,sizeof(buff2)); money = level*atoi(buff2); }else{ money=atoi(tmp); } if(strstr(buf2,"%4d") != NULL){ sprintf(token,buf2,fl,money); }else{ sprintf(token,buf2,money); } }else if(strstr(buf2,"%4d") != NULL){ sprintf(token,buf2,fl); NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp)); if( strstr( tmp,"-" ) != NULL){ money=10000001; lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); return ; } }else{ strcpy(token,buf2); NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp)); if( strstr( tmp,"-" ) != NULL){ money=10000001; lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); return ; }else{ money = atoi(tmp); } } if(CHAR_getInt(toindex,CHAR_FLOOR)==117){ money=CHAR_getInt(toindex,CHAR_GOLD); if (money>=10) money*=0.9; else if( money == 0 ) { CHAR_warpToSpecificPoint(toindex,117,225,13); return; } } CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , money ); CONNECT_set_pass(fd,TRUE); CONNECT_set_first_warp(fd,TRUE); }else if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", token,sizeof(token)) !=NULL){ CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -2 ); CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, -1); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); } } lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_YESNO, CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }
void NPC_FreePetSkillShopWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { int skill; int pet; int slot; int cost; int skillID=0; int petskillindex; char buf[64]; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char msg[512]; int petindex; char msgbuf[128]; double rate= 1.0; //#ifdef _STONEAGEA8XXX_S int petskCostFametemp=-1; //#endif if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){ print("GetArgStrErr"); return; } if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } if(NPC_Util_isFaceToFace(talkerindex,meindex,2 )==FALSE){ if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return; } if( CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return ; switch( seqno) { case SELECTSKILL_START: if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) != 2 ) { CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); return; } NPC_FreePetSkillShop_selectWindow( meindex, talkerindex, SKILL_WINDOW, -1); break; case SELECTSKILL_TEACH: if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) != 3 ) { CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); return; } makeStringFromEscaped( data); getStringFromIndexWithDelim(data,"|",1,buf,sizeof(buf)); skill=atoi(buf); getStringFromIndexWithDelim(data,"|",2,buf,sizeof(buf)); pet=atoi(buf); getStringFromIndexWithDelim(data,"|",3,buf,sizeof(buf)); slot=atoi(buf); getStringFromIndexWithDelim(data,"|",4,buf,sizeof(buf)); cost=atoi(buf); if( NPC_Util_GetStrFromStrWithDelim( argstr, "pet_skill", msg, sizeof( msg)) != NULL){ getStringFromIndexWithDelim(msg,",",skill,buf,sizeof(buf)); skillID=atoi(buf); } slot--; if( slot < 0 ) return; petindex = CHAR_getCharPet( talkerindex, pet-1); if( !CHAR_CHECKINDEX(petindex) ){ CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); return ; } if( NPC_Util_GetStrFromStrWithDelim( argstr, "skill_rate", msg, sizeof( msg)) != NULL){ rate = atof( msg); } #ifdef _STONEAGEA8XXX_S if( NPC_Util_GetStrFromStrWithDelim( argstr, "petskCostFame", msg, sizeof( msg)) != NULL){ getStringFromIndexWithDelim(msg,",",skill,buf,sizeof(buf)); petskCostFametemp = atoi(buf); } #endif petskillindex = PETSKILL_getPetskillArray( skillID ); if( !PETSKILL_CHECKINDEX( petskillindex)){ CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); return ; } cost = PETSKILL_getInt( petskillindex, PETSKILL_COST ); cost = cost * rate; //条件判断 if(CHAR_getInt(talkerindex,CHAR_GOLD) < cost && CHAR_getInt(talkerindex,CHAR_FAME)< petskCostFametemp){ CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); return; } if( NPC_CHECKFREEPETSKILL( talkerindex, petindex, skillID ) == TRUE ){ if( Action_RunDoEventAction( meindex, talkerindex, argstr) == FALSE ){ CHAR_talkToCli( talkerindex, -1, "所需物品不足!!", CHAR_COLORYELLOW); CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); return; } CHAR_setPetSkill( petindex, slot, skillID); CHAR_setInt( talkerindex, CHAR_GOLD, ( CHAR_getInt( talkerindex, CHAR_GOLD) - cost) ); #ifdef _STONEAGEA8XXX_S if (petskCostFametemp!=-1 && petskCostFametemp!=0){ CHAR_setInt( talkerindex, CHAR_FAME, ( CHAR_getInt( talkerindex, CHAR_FAME) - petskCostFametemp) ); snprintf( msgbuf, sizeof( msgbuf ), "扣除声望点数:%4.2f",petskCostFametemp/100); } #endif CHAR_talkToCli( talkerindex, -1, msgbuf, CHAR_COLORYELLOW); snprintf( msgbuf, sizeof( msgbuf ), "W%d",pet-1); CHAR_sendStatusString( talkerindex, msgbuf ); CHAR_sendStatusString( talkerindex, "P"); CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); //WARP if( NPC_SkillShopWarp( meindex, talkerindex) == TRUE ) return; }else { CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); CHAR_talkToCli( talkerindex, -1, "条件不足!!", CHAR_COLORYELLOW); } //ADD NPC_FreePetSkillShop_selectWindow( meindex, talkerindex, SKILL_WINDOW, -1); break; case SELECTSKILL_END: break; } return; }
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; }
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_DengonWindowTalked( int index, int talker, int seqno, int select, char *data) { char buf[DENGONFILEENTRYSIZE*MESSAGEINONEWINDOW*2]; int id; #define DENGONDISTANCE 3 if(NPC_Util_CharDistance(index,talker) > DENGONDISTANCE ) return; if( seqno == CHAR_WINDOWTYPE_DENGON) { int buttontype = 0; int maxid; switch( select ){ case WINDOW_BUTTONTYPE_NEXT: case WINDOW_BUTTONTYPE_PREV: id = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) + MESSAGEINONEWINDOW * (( select == WINDOW_BUTTONTYPE_NEXT) ? 1 : -1); maxid = CHAR_getWorkInt( index, CHAR_WORKDENGONMAXID ); if( id > maxid) id = maxid; else if( id < 2 ) id = 1; buttontype = WINDOW_BUTTONTYPE_OKCANCEL; if( id == maxid ) buttontype |= WINDOW_BUTTONTYPE_PREV; else if( id == 1 ) buttontype |= WINDOW_BUTTONTYPE_NEXT; else { buttontype |= WINDOW_BUTTONTYPE_PREV; buttontype |= WINDOW_BUTTONTYPE_NEXT; } CHAR_setWorkInt( talker, CHAR_WORKSHOPRELEVANT, id); if( NPC_DengonReadString( index, id, NPC_sendbuf ) ){ int fd; fd = getfdFromCharaIndex( talker ); if( fd == -1 )return; lssproto_WN_send(fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT, buttontype, CHAR_WINDOWTYPE_DENGON, CHAR_getWorkInt( index, CHAR_WORKOBJINDEX), makeEscapeString( NPC_sendbuf, buf, sizeof(buf))); } break; case WINDOW_BUTTONTYPE_OK: if( strlen( data) == 0 ) break; id = CHAR_getWorkInt(index, CHAR_WORKDENGONMAXID ); id++; NPC_DengonWriteString( index, talker, id, data ); CHAR_setWorkInt(index, CHAR_WORKDENGONMAXID, id ); CHAR_setWorkInt( talker, CHAR_WORKSHOPRELEVANT, id); if( NPC_DengonReadString( index, id, NPC_sendbuf ) ){ int fd; fd = getfdFromCharaIndex( talker ); if( fd == -1 )return; lssproto_WN_send(fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT, WINDOW_BUTTONTYPE_OKCANCEL| WINDOW_BUTTONTYPE_PREV, CHAR_WINDOWTYPE_DENGON, CHAR_getWorkInt( index, CHAR_WORKOBJINDEX), makeEscapeString( NPC_sendbuf, buf, sizeof(buf))); } break; default: break; } } }
/*----------------------------------------- -------------------------------------------*/ void NPC_WindowHealerWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { if( NPC_Util_CharDistance( talkerindex, meindex ) > (CHAR_getWorkInt(meindex,CHAR_WORK_RANGE)+4)) return; switch( seqno){ case CHAR_WINDOWTYPE_WINDOWHEALER_STARTMSG: if(atoi(data)==2) /*--蓟 仄凶嫩 1--*/ { NPC_WindowHealer_selectWindow( meindex, talkerindex, 1 ); }else if(atoi(data)==3){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 2 ); }else if(atoi(data)==4){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 6 ); }else if(atoi(data)==6){ if(NPC_PetHealerCheck( talkerindex)==TRUE){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 9 ); }else{ NPC_WindowHealer_selectWindow( meindex, talkerindex, 10 ); } }else if(select==WINDOW_BUTTONTYPE_CANCEL){ } break; case CHAR_WINDOWTYPE_WINDOWHEALER_HPMSG: if(select==WINDOW_BUTTONTYPE_OK){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); }else if(select==WINDOW_BUTTONTYPE_YES){ /*--云嗯及民尼永弁--*/ if(NPC_WindowMoneyCheck(meindex,talkerindex,1)==TRUE){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 3 ); }else{ NPC_WindowHealer_selectWindow( meindex, talkerindex, 8 ); } }else if(select==WINDOW_BUTTONTYPE_NO){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); } break; case CHAR_WINDOWTYPE_WINDOWHEALER_SPIRITMSG: if(select==WINDOW_BUTTONTYPE_OK){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); }else if(select==WINDOW_BUTTONTYPE_YES){ /*--云嗯及民尼永弁--*/ if(NPC_WindowMoneyCheck(meindex,talkerindex,2)==TRUE){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 4 ); }else{ NPC_WindowHealer_selectWindow( meindex, talkerindex, 8 ); } }else if(select==WINDOW_BUTTONTYPE_NO){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); } break; case CHAR_WINDOWTYPE_WINDOWHEALER_OKHPMSG: if(select==WINDOW_BUTTONTYPE_OK){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); } break; case CHAR_WINDOWTYPE_WINDOWHEALER_OKSPIRITMSG: if(select==WINDOW_BUTTONTYPE_OK){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); } break; /*--蝈荚汊今六月--*/ case CHAR_WINDOWTYPE_WINDOWHEALER_ALLMSG: if(select==WINDOW_BUTTONTYPE_OK){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); }else if(select==WINDOW_BUTTONTYPE_YES){ if(NPC_WindowMoneyCheck(meindex,talkerindex,3)==TRUE){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 7 ); }else{ NPC_WindowHealer_selectWindow( meindex, talkerindex, 8 ); } }else if(select==WINDOW_BUTTONTYPE_NO){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); } break; /*--蝈荚汊及瑛绊--*/ case CHAR_WINDOWTYPE_WINDOWHEALER_OKALLMSG: if(select==WINDOW_BUTTONTYPE_YES){ NPC_WindowHealer_selectWindow( meindex, talkerindex, 0 ); } break; } if(select==WINDOW_BUTTONTYPE_CANCEL && CHAR_getWorkInt( talkerindex, CHAR_WORKPARTYMODE ) == 2) { CHAR_sendWatchEvent( CHAR_getWorkInt( talkerindex, CHAR_WORKOBJINDEX), CHAR_ACTPLEASURE,NULL,0,TRUE); CHAR_setWorkInt( talkerindex, CHAR_WORKACTION, CHAR_ACTPLEASURE); } }
static void NPC_MakePair_selectWindow( int meindex, int toindex, int num,int select) { 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( Action_PartyCheck( meindex, toindex) == FALSE) { CHAR_talkToCli( toindex, meindex, "請一個一個來!", CHAR_COLORYELLOW); return; } memset( npcarg, 0, sizeof( npcarg)); if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("err NPC_MakePairMan: GetArgStrErr!!"); return; } memset( token, 0, sizeof( token)); switch( num) { case WINDOW_START: { char buf1[256]; if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf1, sizeof( buf1) ) != NULL) { if( NPC_ActionPassCheck( meindex, toindex, buf1) == FALSE ){ CHAR_talkToCli( toindex, meindex, "條件不足!", CHAR_COLORYELLOW); return; } } if( MakePairMan_GetMenuStr( meindex, toindex, npcarg, token) == FALSE ) { print( "err MakePairMan GetMenu ERROR !!\n"); return; } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 1); windowtype = WINDOW_MESSAGETYPE_SELECT; buttontype = WINDOW_BUTTONTYPE_CANCEL; windowno = WINDOW_TALKSTART; } break; case WINDOW_USER: { int male=0, female=0; CheckPairUsers( &male, &female); sprintf( token, "目前登錄急尋找對象的人數為:\n男生為 %d,女生為 %d。\n目前配對已有 %d對。", male, female, CHAR_getWorkInt( meindex, NPC_WORK_PAIRTEAMS)); buttontype = WINDOW_BUTTONTYPE_OKCANCEL; windowno = WINDOW_RETURN; } break; case WINDOW_SELECT://心理測驗 { int title = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT); int type; type = NPC_getTitleMsg( meindex, toindex, npcarg, token, title); if( type == 1 ){ buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = WINDOW_TALKSELECT; }else if( type == 2 ){ buttontype = WINDOW_BUTTONTYPE_OK; windowno = WINDOW_TALKEND; }else{ return; } } break; case WINDOW_PAIR: { if( CHAR_getWorkInt( toindex, CHAR_MYPAIRFLG) > 0){ CHAR_setWorkInt( toindex, CHAR_MYPAIRINDEX, -1); sprintf( token, "取消前一次的邀請。"); }else { char buf1[256]; if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf1, sizeof( buf1) ) != NULL) { if( NPC_ActionPassCheck( meindex, toindex, buf1) == FALSE ){ CHAR_talkToCli( toindex, meindex, "條件不足!", CHAR_COLORYELLOW); return; } } NPC_PairForage( meindex, toindex, npcarg, token); } buttontype = WINDOW_BUTTONTYPE_OK; windowno = WINDOW_TALKEND; } break; case WINDOW_PAIROK: //同意 if( CHAR_getWorkInt( toindex, CHAR_MYPAIRFLG) > 0){ int forindex = CHAR_getWorkInt( toindex, CHAR_MYPAIRINDEX); NPC_PairUserAndWarp( meindex, toindex, forindex, npcarg); } return; case WINDOW_PAIRNO://不同意 { int forindex = CHAR_getWorkInt( toindex, CHAR_MYPAIRINDEX); if( CHAR_CHECKINDEX( forindex) ){ if( CHAR_getWorkInt( forindex, CHAR_MYPAIRFLG) > 0 ){ CHAR_talkToCli( forindex, meindex, "對方拒絕邀請。", CHAR_COLORYELLOW); CHAR_setWorkInt( forindex, CHAR_MYPAIRINDEX, -1); CHAR_setWorkInt( forindex, CHAR_MYPAIRFLG, -1); } } CHAR_setWorkInt( toindex, CHAR_MYPAIRINDEX, -1); CHAR_setWorkInt( toindex, CHAR_MYPAIRFLG, -1); CHAR_talkToCli( toindex, meindex, "拒絕對方邀請。", CHAR_COLORYELLOW); return; } break; case WINDOW_WARP: break; case WINDOW_END: break; } lssproto_WN_send( fd, windowtype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }
/*----------------------------------------- * 弁仿奶失件玄井日忒匀化五凶凛卞裟太请今木月[ * -------------------------------------------*/ void NPC_FMPKCallManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { int datanum = -1, fl, x, y; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024], buff2[256]; int fd = getfdFromCharaIndex(talkerindex); if (fd == -1) return; if (NPC_Util_GetArgStr(meindex, npcarg, sizeof(npcarg)) == NULL) { print("GetArgStrErr"); return; } NPC_Util_GetStrFromStrWithDelim(npcarg, "WARP", buf, sizeof(buf)); getStringFromIndexWithDelim(buf, ",", 1, buff2, sizeof(buff2)); fl = atoi(buff2); getStringFromIndexWithDelim(buf, ",", 2, buff2, sizeof(buff2)); x = atoi(buff2); getStringFromIndexWithDelim(buf, ",", 3, buff2, sizeof(buff2)); y = atoi(buff2); makeStringFromEscaped( data); print("meindex:%d seqno:%d select:%d data:%s\n", meindex, seqno, select, data); datanum = atoi( data); switch( seqno){ /*--反元引曰及 --*/ case CHAR_WINDOWTYPE_FMPKCALLMAN_START: if (datanum == 1) NPC_FMPKCallMan_selectWindow(meindex, talkerindex, 1, -1); else if (datanum == 2) NPC_FMPKCallMan_selectWindow(meindex, talkerindex, 2, -1); break; case CHAR_WINDOWTYPE_FMPKCALLMAN_CALL: if (select == WINDOW_BUTTONTYPE_YES) { lssproto_WN_send(fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString("\n召唤中···请稍候!\n@#$%↑&*···", buf, sizeof(buf))); NPC_CallFMMember(meindex, CHAR_getInt(talkerindex, CHAR_FLOOR), CHAR_getInt(talkerindex, CHAR_FMINDEX), CHAR_getChar(talkerindex, CHAR_FMNAME), CHAR_getWorkInt(talkerindex, CHAR_WORKFMINDEXI)); } break; case CHAR_WINDOWTYPE_FMPKCALLMAN_COME: if (select == WINDOW_BUTTONTYPE_YES) { print("CHAR_WINDOWTYPE_FMPKCALLMAN_COME\n"); if (CHAR_getWorkInt(talkerindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return; if (CHAR_getWorkInt(talkerindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE) CHAR_DischargeParty(talkerindex, 0); CHAR_setWorkInt(talkerindex, CHAR_WORKWARPCHECK, FALSE); CHAR_setWorkInt(talkerindex, CHAR_WORKFMPKFLAG, 1); CHAR_warpToSpecificPoint(talkerindex, fl, x, y); } break; case CHAR_WINDOWTYPE_FMPKCALLMAN_LEAVE: if (select == WINDOW_BUTTONTYPE_YES) { int spfl = 0, spx = 0, spy = 0, i = 0, itemindex = 0; if (CHAR_getWorkInt(talkerindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return; if (CHAR_getWorkInt(talkerindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE) { lssproto_WN_send(fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString("\n无法以团队方式离开唷!\n请先解散团队!", buf, sizeof(buf))); return; } for (i = 0; i < CHAR_MAXITEMHAVE; i++) { itemindex = CHAR_getItemIndex(talkerindex, i); if (ITEM_CHECKINDEX(itemindex) == FALSE) continue; if (ITEM_getInt(itemindex, ITEM_DROPATLOGOUT) == TRUE) { lssproto_WN_send(fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString("\n您身上有贵重物品喔!\n为了避免在传送途中不小心损坏,\n请先将这类物品卸下,\n谢谢您的合作!", buf, sizeof(buf))); return; } } CHAR_setWorkInt(talkerindex, CHAR_WORKWARPCHECK, FALSE); CHAR_getElderPosition(CHAR_getInt(talkerindex, CHAR_LASTTALKELDER), &spfl, &spx, &spy); CHAR_warpToSpecificPoint(talkerindex, spfl, spx, spy); } break; default: break; } }
/*======================================= * watch �� *======================================*/ void NPC_BodyLanWatch( int objmeindex, int objmoveindex, CHAR_ACTION act, int x, int y, int dir, int* opt, int optlen ) { char szP[256], szArg[4096]; char buf[256]; int actindex; int meindex; int seqNo, needSeq; // ƽ�ҷ�������½���������� if( OBJECT_getType(objmoveindex) != OBJTYPE_CHARA ) return; actindex = OBJECT_getIndex(objmoveindex); // ������������½���������� if( CHAR_getInt( actindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) return; // ���м��̼������͵� meindex = OBJECT_getIndex(objmeindex); // ���м�INDEXë�� �ƻ����¾�����ئ��ľ���������� if( CHAR_getWorkInt( actindex, CHAR_WORKTRADER ) != meindex ){ return; } // ������ƥʧ�������ë�ƻ����¾� seqNo = CHAR_getWorkInt( actindex, CHAR_WORKSHOPRELEVANT ); // ئ������ �پ��� if( seqNo < 1 )seqNo = 1; // ¦�� ٯ if( NPC_Util_GetArgStr( meindex, szArg, sizeof( szArg ) ) == NULL ){ print( "npc_bodylan.c:û������(%s)\n", CHAR_getChar(meindex,CHAR_NPCARGUMENT) ); return ; } // �ˡ�������ë���� if( NPC_Util_GetStrFromStrWithDelim( szArg, "Act", szP, sizeof( szP ) ) == NULL ){ print( "npc_bodylan:������������δ�趨(%s)\n", szArg ); return; } // ۢئ�� if(getStringFromIndexWithDelim( szP, ",", seqNo, buf, sizeof( buf)) != FALSE ){ needSeq = atoi(buf); }else{ // ئ�⾮ئ�������� �پ��� CHAR_setWorkInt( actindex, CHAR_WORKSHOPRELEVANT, 1 ); // print( "����ͷ�ˡ��ص������\n", seqNo, needSeq ); // �Ͼ��������微������ return; } // ��� ۢئʧ����������������� if( needSeq == act ){ // �������ף۳�ľ�� �� // print( "�ɹ�\(%d������%d)\n", seqNo, needSeq ); seqNo ++; if( seqNo >= CHAR_getWorkInt( meindex, BODYLAN_E_COMMANDNUM ) ){ // print( "�ڴ˽�����\n" ); } // ���� ë���� CHAR_setWorkInt( actindex, CHAR_WORKSHOPRELEVANT, seqNo ); }else{ // �� ���������� �پ���֧Ի �� CHAR_setWorkInt( actindex, CHAR_WORKSHOPRELEVANT, 1 ); // print( "(%d������%d)\n", seqNo, needSeq ); } }
void NPC_PetShopWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { int datanum = -1; if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) { return; } //print("\n NPC_PetShopWindowTalked: data:%s seq:%d sel:%d ", data, seqno, select); makeStringFromEscaped( data); datanum = atoi( data); switch( seqno){ case CHAR_WINDOWTYPE_WINDOWPETSHOP_START: { int poolflg = CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG); if( ( datanum == 3 && poolflg) || // Âô³èÎï ( datanum == 2 && !poolflg ) ){ // ÁìÈ¡³èÎï NPC_PetShop_selectWindow( meindex, talkerindex, 1, -1 ); }else if( datanum == 1 && poolflg) { // ¼Ä·Å³èÎï if( CHAR_getCharPoolPetElement( talkerindex) != -1 ) { NPC_PetShop_selectWindow( meindex, talkerindex, 5, -1 ); } else { NPC_PetShop_selectWindow( meindex, talkerindex, 8, -1 ); } }else if( datanum == 2 && poolflg ) { // ÁìÈ¡³èÎï if( CHAR_getCharPetElement( talkerindex) != -1 ) { CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); NPC_PetShop_selectWindow( meindex, talkerindex, 9, 0); }else { NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 ); } } #ifdef _NPC_DEPOTPET else if( datanum == 4 ) { // ʹÓóèÎï²Ö¿â //print(" ʹÓóèÎï²Ö¿â "); CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); if( !CHAR_CheckDepotPet( talkerindex) ){ CHAR_GetDepotPet( meindex, talkerindex); CHAR_talkToCli( talkerindex, -1, "È¡µÃ³èÎÇëÉÔáᣡ", CHAR_COLORYELLOW); }else{ NPC_PoolPetShop_DepotPet_Menu( meindex, talkerindex); } } #endif } break; case CHAR_WINDOWTYPE_WINDOWPETSHOP_PETSELECT: if(select==WINDOW_BUTTONTYPE_CANCEL){ NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 ); }else{ NPC_PetShop_selectWindow( meindex, talkerindex, 2, datanum ); } break; case CHAR_WINDOWTYPE_WINDOWPETSHOP_PETSELECT2: if(select==WINDOW_BUTTONTYPE_CANCEL){ NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 ); }else{ NPC_PetShop_selectWindow( meindex, talkerindex, 6, datanum ); } break; case CHAR_WINDOWTYPE_WINDOWPETSHOP_MAIN: if(select==WINDOW_BUTTONTYPE_YES){ NPC_PetShop_selectWindow( meindex, talkerindex, 3,-1 ); }else{ NPC_PetShop_selectWindow( meindex, talkerindex,1,-1); } break; case CHAR_WINDOWTYPE_WINDOWPETSHOP_MAIN2: if(select==WINDOW_BUTTONTYPE_YES){ NPC_PetShop_selectWindow( meindex, talkerindex, 7,-1 ); }else { NPC_PetShop_selectWindow( meindex, talkerindex,5,-1); } break; case CHAR_WINDOWTYPE_WINDOWPETSHOP_ASKDRAW: if( select == WINDOW_BUTTONTYPE_YES){ if( CHAR_getCharPetElement( talkerindex) != -1 ) { NPC_PetShop_selectWindow( meindex, talkerindex, 11,-1 ); }else { NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 ); } }else { CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); NPC_PetShop_selectWindow( meindex, talkerindex, 9, 0); } break; case CHAR_WINDOWTYPE_WINDOWPETSHOP_GOLDOVER: if( select == WINDOW_BUTTONTYPE_YES){ NPC_PetShop_selectWindow( meindex, talkerindex, 4,-1 ); }else{ NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 ); } break; case CHAR_WINDOWTYPE_WINDOWPETSHOP_DRAWSELECT: if( select == WINDOW_BUTTONTYPE_PREV){ NPC_PetShop_selectWindow( meindex, talkerindex, 9, -1); }else if( select == WINDOW_BUTTONTYPE_NEXT) { NPC_PetShop_selectWindow( meindex, talkerindex, 9, 1); }else if( select != WINDOW_BUTTONTYPE_CANCEL) { if( CHAR_getCharPetElement( talkerindex) != -1 ) { NPC_PetShop_selectWindow( meindex, talkerindex, 10, datanum); }else { NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 ); } }else { NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 ); } break; #ifdef _NPC_DEPOTPET case CHAR_WINDOWTYPE_DEPOTPETSHOP_HANDLE: if( !CHAR_CheckDepotPet( talkerindex) ) return ; switch( datanum ) { case 1://·ÅÈë if( CHAR_findEmptyDepotPet( talkerindex) == -1 ){ CHAR_talkToCli( talkerindex, -1, "³èÎï²Ö¿âÒÑÂú£¡", CHAR_COLORYELLOW); return; } //NPC_DepotPet_Pet_printWindow( meindex, talkerindex); NPC_PetShop_selectWindow( meindex, talkerindex, 13, -1 ); break; case 2://È¡³ö if( CHAR_getCharPetElement( talkerindex) < 0 ) { CHAR_talkToCli( talkerindex, -1, "ÉíÉϳèÎïÀ¸Î»ÒÑÂú£¡", CHAR_COLORYELLOW); return; } NPC_PetShop_selectWindow( meindex, talkerindex, 14, 0); break; case 0: NPC_PetShop_selectWindow( meindex, talkerindex, 0, -1); break; } break; case CHAR_WINDOWTYPE_DEPOTPETSHOP_ADD: if(select==WINDOW_BUTTONTYPE_CANCEL){ NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 ); }else{ NPC_PetShop_selectWindow( meindex, talkerindex, 15, datanum ); } break; case CHAR_WINDOWTYPE_DEPOTPETSHOP_GET: if( select == WINDOW_BUTTONTYPE_PREV){ NPC_PetShop_selectWindow( meindex, talkerindex, 14, -1); }else if( select == WINDOW_BUTTONTYPE_NEXT) { NPC_PetShop_selectWindow( meindex, talkerindex, 14, 1); }else if( select != WINDOW_BUTTONTYPE_CANCEL) { if( CHAR_getCharPetElement( talkerindex) != -1 ) { NPC_PetShop_selectWindow( meindex, talkerindex, 16, datanum); }else { NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 ); } }else { NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 ); } break; case CHAR_WINDOWTYPE_DEPOTPETSHOP_ASKADD: // È·ÈÏ´æÈë²Ö¿â if(select==WINDOW_BUTTONTYPE_YES){ NPC_PetShop_selectWindow( meindex, talkerindex, 17,-1 ); }else { NPC_PetShop_selectWindow( meindex, talkerindex,13,-1); } break; case CHAR_WINDOWTYPE_DEPOTPETSHOP_ASKGET: // È·ÈÏÈ¡³ö²Ö¿â if( select == WINDOW_BUTTONTYPE_YES){ if( CHAR_getCharPetElement( talkerindex) != -1 ) { NPC_PetShop_selectWindow( meindex, talkerindex, 18,-1 ); }else { NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 ); } }else { CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0); NPC_PetShop_selectWindow( meindex, talkerindex, 14, 0); } break; #endif case CHAR_WINDOWTYPE_WINDOWPETSHOP_END: if( select == WINDOW_BUTTONTYPE_OK){ NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 ); } break; // CoolFish: Add 2001/7/4 default: break; } }
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; } }
int NPC_GetCost(int meindex,int talker,int petindex) { int cost; int levelcost; int level; int getlevel; int graNo; int rare; int charm=50; int petai; int i=1; double rate=1.0; int intrate; char buf[1024]; char buff2[128]; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("GetArgStrErr"); return FALSE; } getlevel=CHAR_getInt(petindex,CHAR_PETGETLV); level=CHAR_getInt(petindex,CHAR_LV); graNo=CHAR_getInt(petindex,CHAR_BASEBASEIMAGENUMBER); rare=CHAR_getInt(petindex,CHAR_RARE); if(getlevel==0) getlevel=1 ; /*--°Àó¸Ã«·Æ»§ÔÂ--*/ levelcost=(level*level)*10; getlevel=(getlevel*getlevel)*10; // Syu ADD ÐÞ¸ÄÂôתÉú³è½ðÇ®»á±ä¸ºµÄbug #ifdef _PET_2TRANS if( CHAR_getInt(petindex , CHAR_TRANSMIGRATION)>0) #else if( CHAR_getInt(petindex , CHAR_TRANSMIGRATION)==1) #endif getlevel=10; if(rare==0){ rare=1; }else if(rare==1){ rare=5; }else if(rare==2){ rare=8;} cost = ((levelcost-getlevel)+(level*PETCOST))*rare; intrate = CHAR_getWorkInt( meindex , CHAR_WORK_NOMALRATE); rate=(double) intrate / 1000; NPC_Util_GetStrFromStrWithDelim( npcarg, "special_pet", buf, sizeof( buf)); i=1; /*--µ©Ê¸ÆËÅÒ»ïÒÁ¡õÐþÆ¥»ÍÒ£½ñľÔÂʸÓÀÐþëà«Ô»ÇëÔÊ Ê¸ÓÀÐþ¼°Ï¶À÷´ ì« Ä¯)--*/ while( getStringFromIndexWithDelim(buf,",",i,buff2,sizeof(buff2)) !=FALSE ) { if(strstr( buff2, "-")==NULL){ if(graNo == atoi(buff2)){ intrate=CHAR_getWorkInt( meindex , CHAR_WORK_SPECIALRATE); rate=(double) intrate / 1000; break; } }else{ /*--ʧÄÌ Ø©»¥ 15-25 ¼°äßÆ¥à¼å©ÈÕľ»¯ÖÐÔÂèëÄþ--*/ int start; int end; int tmp; int graflg=0; char token2[128]; /*-"-"Æ¥à¼å©ÈÕľÐ×炙§¼°ÐÑ°ÀÎç ¼°ÐÑ°Àëäú --*/ getStringFromIndexWithDelim( buff2, "-", 1, token2, sizeof(token2)); start = atoi( token2); getStringFromIndexWithDelim( buff2, "-", 2 ,token2, sizeof(token2)); end = atoi( token2); /*-- į»¥ÝѱåئÔÈ»¯ÖÐÐ×ÈÕ£ý ľ׸ÒüÔÂ**/ if(start > end){ tmp=start; start=end; end=tmp; } end++; /*--"-"Æ¥à¼å©ÈÕľÐ×Ûм°Ê§ÄÌ Ø©Ê÷ ë ÔÂ--*/ if(start <= graNo && graNo < end){ intrate=CHAR_getWorkInt( meindex , CHAR_WORK_SPECIALRATE); rate=(double) intrate / 1000; graflg=1; break; } if(graflg ==1) break; } i++; } /*--ʸÓÀÐþ¼°ïá²Áպë ---*/ petai=CHAR_getWorkInt(petindex,CHAR_WORKFIXAI); /*-- ë±ØÓÀÐþ--*/ charm = CHAR_getWorkInt(talker,CHAR_WORKFIXCHARM); /*-- ¡Öïá²ÁÕº / ¨á */ charm = charm + petai; if(charm < 20){ charm = 20; } charm = charm / 2; cost = (int)cost*rate; rate=(double)charm/100; /*-- ïá²Á´Øê--*/ cost = cost * rate; /*--ÔÆàÅ뷤ʢ--*/ CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANTSEC,cost); return cost; }
/*------------------------------------------------------------ * °ÜÆ°¤¹¤ë¡£ * °ú¿ô * 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) ) 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, "¹D¨ãªº®Ä¤O¤w¨ì¡C", 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) { #ifdef _ESCAPE_RESET // ´cÄ_¸Ñ°£«á°k¶]®É¶¡«·sÂk¹s CHAR_setWorkInt( charaindex, CHAR_WORKLASTESCAPE, 0); #endif 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); #ifdef _PROFESSION_SKILL // WON ADD ¤Hª«Â¾·~§Þ¯à int temp=0; int p_cep = CHAR_getWorkInt(charaindex, CHAR_ENCOUNT_FIX); if( p_cep != 0 ){ if( CHAR_getWorkInt( charaindex, CHAR_ENCOUNT_NUM) < (int)time(NULL) ){ CHAR_talkToCli( charaindex, -1, "§Þ¯à®Ä¥Îµ²§ô¡C", CHAR_COLORYELLOW); CHAR_setWorkInt( charaindex, CHAR_ENCOUNT_FIX, 0); CHAR_setWorkInt( charaindex, CHAR_ENCOUNT_NUM, 0); } temp = cep * (100 + p_cep ) / 100; }else{ temp = cep; } #endif if (cep<minep) cep=minep; if (cep>maxep) cep=maxep; if (CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE)==BATTLE_CHARMODE_NONE) { int entflag; 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 _PROFESSION_SKILL // WON ADD ¤Hª«Â¾·~§Þ¯à if( rand()%120 < temp ){ #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 ||
BOOL NPC_FreePetSkillMakeStr(int meindex,int toindex,int select) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char msg[256]; double rate=1.0; int i=0; char token[NPC_UTIL_GETARGSTR_LINEMAX]; int fd = getfdFromCharaIndex( toindex); if(select==0){ sprintf(token,"0|0"); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_PETSKILLSHOP, WINDOW_BUTTONTYPE_NONE, CHAR_WINDOWTYPE_WINDOWPETSKILLSHOP, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); } if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){ print("GetArgStrErr"); return FALSE; } if( NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", msg, sizeof( msg)) == NULL){ print("\n CAN'T FIND main_msg !!"); return FALSE; } sprintf(token,"1|%s|%s", CHAR_getChar(meindex,CHAR_NAME), msg); if( NPC_Util_GetStrFromStrWithDelim( argstr, "skill_rate", msg, sizeof( msg)) != NULL){ rate=atof(msg); } if( NPC_Util_GetStrFromStrWithDelim( argstr, "pet_skill", msg, sizeof( msg)) != NULL) { int skillarray; int skillID; int cost; char token2[265]; char buf[64]; i=1; while( getStringFromIndexWithDelim(msg,",",i,buf,sizeof(buf)) !=FALSE ) { i++; skillID=atoi(buf); skillarray = PETSKILL_getPetskillArray( skillID); if( PETSKILL_CHECKINDEX( skillarray) == FALSE ) continue; if( PETSKILL_getInt( skillarray, PETSKILL_ILLEGAL) == 1) continue; cost = PETSKILL_getInt(skillarray,PETSKILL_COST); cost = (int)cost*rate; #ifdef _SA80 sprintf(token2,"|%s|%d|%s|0", PETSKILL_getChar(skillarray, PETSKILL_NAME), cost, PETSKILL_getChar(skillarray, PETSKILL_COMMENT)); #else sprintf(token2,"|%s|%d|%s", PETSKILL_getChar(skillarray, PETSKILL_NAME), cost, PETSKILL_getChar(skillarray, PETSKILL_COMMENT)); #endif strcat(token,token2); } } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 3); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_PETSKILLSHOP, WINDOW_BUTTONTYPE_NONE, SELECTSKILL_TEACH, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); return TRUE; }