BOOL NPC_SkillShopWarp( int meindex, int talkindex) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char data[1024], buf1[256], buf2[256]; int i=1, j=1; BOOL EvFlg=FALSE; struct { int FLOOR; int X; int Y; }Points[MAXNPCPOINT]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("GetArgStrErr"); return FALSE; } for( i=0;i<MAXNPCPOINT;i++) { Points[i].FLOOR = -1; Points[i].X = -1; Points[i].Y = -1; } //WARP //NPC_POINT if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NPC_POINT", data, sizeof( data)) != NULL ) { int where=0; i=1; j=0; while( getStringFromIndexWithDelim( data, ";", i, buf1, sizeof( buf1)) != FALSE ) { i++; getStringFromIndexWithDelim( buf1, ",", 1, buf2, sizeof( buf2)); Points[j].FLOOR = atoi( buf2); getStringFromIndexWithDelim( buf1, ",", 2, buf2, sizeof( buf2)); Points[j].X = atoi( buf2); getStringFromIndexWithDelim( buf1, ",", 3, buf2, sizeof( buf2)); Points[j].Y = atoi( buf2); j++; if( j >= MAXNPCPOINT ) break; } where = RAND( 0, i-1); CHAR_warpToSpecificPoint( meindex, Points[where].FLOOR, Points[where].X, Points[where].Y); EvFlg = TRUE; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", data, sizeof( data)) != NULL ) { int P_Floor,P_X,P_Y; getStringFromIndexWithDelim( data, ",", 1, buf2, sizeof( buf2)); P_Floor = atoi( buf2); getStringFromIndexWithDelim( data, ",", 2, buf2, sizeof( buf2)); P_X = atoi( buf2); getStringFromIndexWithDelim( data, ",", 3, buf2, sizeof( buf2)); P_Y = atoi( buf2); CHAR_warpToSpecificPoint( talkindex, P_Floor, P_X, P_Y); EvFlg = TRUE; } return EvFlg; }
/************************************** * 戚及樺赭毛本永玄允月 **************************************/ static int NPC_AirSetPoint( int meindex, char *argstr) { char buf[4096]; char buf2[256]; char buf3[256]; int floor,warpx,warpy; int ret; char routetostring[64]; snprintf( routetostring, sizeof( routetostring), "routeto%d", CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE)); if( NPC_Util_GetStrFromStrWithDelim( argstr, routetostring,buf, sizeof(buf)) == NULL ) { print( "npcair:nothing route \n"); return FALSE; } ret = getStringFromIndexWithDelim( buf, ";", CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT), buf2, sizeof(buf2)); if( ret == FALSE ) return FALSE; // Arminius: add floor ret = getStringFromIndexWithDelim( buf2, ",", 1, buf3, sizeof(buf3)); if( ret == FALSE) return FALSE; floor = atoi(buf3); ret = getStringFromIndexWithDelim( buf2, ",", 2, buf3, sizeof(buf3)); if( ret == FALSE) return FALSE; CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOX, atoi( buf3)); warpx = atoi(buf3); ret = getStringFromIndexWithDelim( buf2, ",", 3, buf3, sizeof(buf3)); if( ret == FALSE) return FALSE; CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOY, atoi( buf3)); warpy = atoi(buf3); if (floor!=CHAR_getInt(meindex, CHAR_FLOOR)) { int i; CHAR_warpToSpecificPoint(meindex, floor, warpx, warpy); for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(toindex) ) { CHAR_warpToSpecificPoint(toindex, floor, warpx, warpy); } } CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOX, warpx); CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOY, warpy); } return TRUE; }
void NPC_PairUserAndWarp( int meindex, int toindex, int forindex, char *arg) { char buf1[256]; int fl=-1, x=-1, y=-1; if( !CHAR_CHECKINDEX( toindex)) return; CHAR_setWorkInt( toindex, CHAR_MYPAIRINDEX, -1); CHAR_setWorkInt( toindex, CHAR_MYPAIRFLG, -1); if( !CHAR_CHECKINDEX( forindex)) return; CHAR_setWorkInt( forindex, CHAR_MYPAIRINDEX, -1); CHAR_setWorkInt( forindex, CHAR_MYPAIRFLG, -1); if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return; if( CHAR_getWorkInt( forindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return; if( NPC_Util_GetStrFromStrWithDelim( arg, "PAIRTOPOINT", buf1, sizeof( buf1) ) != NULL){ char buf2[256]; if( getStringFromIndexWithDelim( buf1,",",1,buf2,sizeof( buf2)) != FALSE ) fl = atoi( buf2); if( getStringFromIndexWithDelim( buf1,",",2,buf2,sizeof( buf2)) != FALSE ) x = atoi( buf2); if( getStringFromIndexWithDelim( buf1,",",3,buf2,sizeof( buf2)) != FALSE ) y = atoi( buf2); } CHAR_DischargePartyNoMsg( toindex);//解散团队 CHAR_DischargePartyNoMsg( forindex);//解散团队 if( MAP_IsValidCoordinate( fl, x, y) != FALSE ){ CHAR_warpToSpecificPoint( toindex, fl, x, y); CHAR_warpToSpecificPoint( forindex, fl, x, y); } CHAR_JoinParty_Main( toindex, forindex); //lssproto_PR_send( fd, 0, 1); { int i; for( i=0; i<MAXPAIRNUMS; i++) { if( PairList[0][i].use > 0 ){ if( PairList[0][i].pindex == toindex || PairList[0][i].pindex == forindex ){ PairList[0][i].pindex = -1; PairList[0][i].use = -1; } } if( PairList[1][i].use > 0 ){ if( PairList[1][i].pindex == toindex || PairList[1][i].pindex == forindex ){ PairList[1][i].pindex = -1; PairList[1][i].use = -1; } } } } }
//********* �� �ݼ��� ********* static void NPC_BodyLan_Profit( int meindex, int playerindex ) { char szArg[4096], szP[256]; int fl, x, y, pmode, i, subindex, parent; // ¦�� ٯ 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, "Warp", szP, sizeof( szP ) ) != NULL ){ // �� �工������� ���� if( sscanf( szP, "%d,%d,%d", &fl, &x, &y ) == 3 ){ }else{ print( "npc_bodylan: ����ȡ�ռ�����(%s)\n", szP ); return; } // �ɡ� ū��ƥ�������Ҽ��ַ����� pmode = CHAR_getWorkInt( playerindex, CHAR_WORKPARTYMODE ); switch( pmode ){ case 1: // ���л��� parent = playerindex; break; case 2: // ���л��Ҽ����ë�� parent = CHAR_getWorkInt( playerindex, CHAR_WORKPARTYINDEX1 ); break; default: // �ɡ� ūԪ��ئ�����ף۷��з��귥���� CHAR_warpToSpecificPoint( playerindex, fl, x, y ); return; } // �幻������ for( i = 0; i < CHAR_PARTYMAX; i ++ ){ subindex = CHAR_getWorkInt( parent, CHAR_WORKPARTYINDEX1+i ); if( CHAR_CHECKINDEX( subindex ) == FALSE )continue; // �ɡ� ū�幻������ CHAR_warpToSpecificPoint( subindex, fl, x, y ); } } }
BOOL NPC_reloadNPC(void) { int i; int charnum = getFdnum()+ getPetcharnum()+getOtherscharnum(); for(i=0;i<charnum;i++){ if(!CHAR_CHECKINDEX(i)) continue; if(CHAR_getWorkInt(i,CHAR_WORKNPCTYPE)==1){ NPC_Util_NPCDelete(i); } } if(NPC_readNPCSettingFiles( getNpcdir(), getNpctemplatenum(), getNpccreatenum() )==TRUE) NPC_generateLoop( 1 ); if(getReloadNpcType()==1){ int j; int playernum = CHAR_getPlayerMaxNum(); for(j=0;j<playernum;j++){ if( CHAR_getCharUse(j) != FALSE ) { if(CHAR_getWorkInt(j,CHAR_WORK_OFFLINE)==0 && CHAR_getWorkInt(j,CHAR_WORKBATTLEMODE)==BATTLE_CHARMODE_NONE){ CHAR_warpToSpecificPoint(j,CHAR_getInt(j,CHAR_FLOOR),CHAR_getInt(j,CHAR_X),CHAR_getInt(j,CHAR_Y)); } } } } return TRUE; }
/*----------------------------------------- * �ͷ���ʧ��������߯�Ȼ������ݱ���̫���ľ�£� * -------------------------------------------*/ void NPC_FMPKManWindowTalked( 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]; 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_FMPKMAN_START: if (datanum == 1) NPC_FMPKMan_selectWindow(meindex, talkerindex, 1, -1); else if (datanum == 2) NPC_FMPKMan_selectWindow(meindex, talkerindex, 2, -1); break; case CHAR_WINDOWTYPE_FMPKMAN_VIEW: break; case CHAR_WINDOWTYPE_FMPKMAN_LEAVEPK: if (select == WINDOW_BUTTONTYPE_YES) { if (CHAR_getWorkInt(talkerindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return; // shan add if(NPC_PARTY_CHAECK1( meindex, talkerindex)==FALSE) { NPC_ERR_DiSP1( meindex, talkerindex, 1); return; } CHAR_setWorkInt(talkerindex, CHAR_WORKWARPCHECK, FALSE); CHAR_warpToSpecificPoint(talkerindex, fl, x, y); } break; default: break; } }
void Check_EnemyWarpMe( int meindex, char *args ) { char buf1[256]; int objindex,index; int nfl, nx, ny; OBJECT obj; memset( buf1, 0, sizeof( buf1)); if( NPC_Util_GetStrFromStrWithDelim( args, "REPLACEMENT", buf1, sizeof( buf1)) == NULL ) { return; } GetRand_WarpPoint( buf1, &nfl, &nx, &ny ); if( MAP_IsValidCoordinate( nfl, nx, ny ) == FALSE ){ char filename[256]; NPC_Util_CheckAssignArgFile( meindex, filename); print( "NPCENEMY REPLACEMENT: %s .Invalid POINT( %d, %d, %d)\n", filename, nfl, nx, ny ); return; } { int ofl, ox, oy; ofl = CHAR_getInt( meindex, CHAR_FLOOR ); ox = CHAR_getInt( meindex, CHAR_X ); oy = CHAR_getInt( meindex, CHAR_Y ); for ( obj=MAP_getTopObj( nfl, nx, ny); obj; obj=NEXT_OBJECT( obj) ) { objindex = GET_OBJINDEX( obj); if (OBJECT_getType( objindex) != OBJTYPE_CHARA) continue; index = OBJECT_getIndex( objindex); if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER && CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE) != CHAR_TYPEPET ) { CHAR_warpToSpecificPoint( index, ofl, ox, oy); CHAR_sendCToArroundCharacter( objindex); break; } } } objindex = CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX); CHAR_warpToSpecificPoint( meindex, nfl, nx, ny); CHAR_sendCToArroundCharacter( objindex); }
void MAPPOINT_MapWarpHandle( int charaindex, int ps, int ofl, int ox, int oy ) { int floor, x, y; if( MAPPOINT_getMapWarpGoal( ps, ofl, ox, oy, &floor, &x, &y) == -1 ){ //andy_log print( "获取传送点( %d, %d,%d,%d)错误!!\n", ps, ofl, ox, oy); return; } if( floor == 777 ) return; CHAR_warpToSpecificPoint( charaindex, floor, x, y); if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ) { int i; for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index) ) { CHAR_warpToSpecificPoint( index, floor, x, y); } } } }
void mproto_WARP_Recv(int fd,char* uid,int userfdid,int floor, int x, int y) { int fd_charaindex; int clifd=getfdFromFdid(userfdid); print("clifd =%d\n",clifd); if (clifd == -1) return ; if (uid == NULL ) return ; fd_charaindex=CONNECT_getCharaindex(clifd); if (!CHAR_CHECKINDEX(fd_charaindex)) return; CHAR_warpToSpecificPoint(fd_charaindex, floor, x, y); }
int NPC_Lua_NLG_Warp(lua_State *_NLL) { CheckEx(_NLL, 4); CheckIndexNull(_NLL, 1); int TM_Index = (int)lua_tointeger(_NLL, 1); int TM_Floor = (int)lua_tointeger(_NLL, 2); int TM_X = (int)lua_tointeger(_NLL, 3); int TM_Y = (int)lua_tointeger(_NLL, 4); BOOL TM_Ret = CHAR_warpToSpecificPoint(TM_Index, TM_Floor, TM_X, TM_Y); LRetBool(_NLL, TM_Ret); }
BOOL NPC_WarpAllMsg(int meindex,int toindex ) { int fl,x,y; int subindex=-1; int i; fl = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR ); x = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X ); y = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y ); if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) != 1 ) return FALSE; for( i = 0; i < CHAR_PARTYMAX; i ++ ){ subindex = CHAR_getWorkInt( toindex, CHAR_WORKPARTYINDEX1+i ); if( CHAR_CHECKINDEX( subindex ) == FALSE )continue; if( fl==0 && x==0 && y==0 ) { }else { CHAR_warpToSpecificPoint( subindex, fl, x, y ); } } return TRUE; }
static void NPC_WarpMan_selectWindow( int meindex, int toindex, int num,int select) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; 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(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==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 CHAR_Talk(int fd, int index, char *message, int color, int area) { char firstToken[64]; char messageeraseescape[512]; char *messagebody; int mesgvolume = 0; int lastvolume = 0; int fl, x, y; int stringlen; int micflg = 0; int fmindexi = CHAR_getWorkInt(index, CHAR_WORKFMINDEXI); int channel = CHAR_getWorkInt(index, CHAR_WORKFMCHANNEL); int quickchannel = CHAR_getWorkInt(index, CHAR_WORKFMCHANNELQUICK); { char *cdkey = CHAR_getChar(index, CHAR_CDKEY); char *charname = CHAR_getChar(index, CHAR_NAME); if(strlen(message) > 3) { if(CHAR_getWorkInt(index, CHAR_WORKFLG) & WORKFLG_DEBUGMODE) { // shan begin if(strstr(message, "[") && strstr(message, "]")) { } else { // original LogTalk(charname, cdkey, CHAR_getInt(index, CHAR_FLOOR), CHAR_getInt(index, CHAR_X), CHAR_getInt(index, CHAR_Y), message); } // end } } } //bg|0|r0|fc|d4B8|p0|bn|10|bt|10| // Nuke +1 08/27: For invalid message attack if(*message == 0) return; CHAR_getMessageBody(message, firstToken, sizeof(firstToken), &messagebody); // Nuke +1: For invalid message attack if(!messagebody) return; strcpysafe(messageeraseescape, sizeof(messageeraseescape), messagebody); makeStringFromEscaped(messageeraseescape); stringlen = strlen(messageeraseescape); if(stringlen <= 0) return; if(messageeraseescape[0] == '[' && messageeraseescape[stringlen - 1] == ']') { char gm[128]; char *pass = strstr(messageeraseescape + 1, getChatMagicPasswd()); // Arminius: limit ip +2 char* ip = CONNECT_get_userip(fd); messageeraseescape[stringlen - 1] = '\0'; // Arminius: limit ip if(pass == messageeraseescape + 1) { if(CHAR_useChatMagic(index, messageeraseescape + 1 + strlen(getChatMagicPasswd()) + 1, TRUE)) { print("\n账号:%s 名字:%s\n来自ip:%s\n使用GM命令%s]\n", CHAR_getChar(index, CHAR_CDKEY), CHAR_getChar(index, CHAR_NAME), ip, messageeraseescape); sprintf(gm, "您使用GM命令%s]已成功", messageeraseescape); CHAR_talkToCli(index, -1, gm, CHAR_COLORYELLOW); } } else { if(CHAR_getWorkInt(index, CHAR_WORKFLG) & WORKFLG_DEBUGMODE) { if(CHAR_useChatMagic(index, messageeraseescape + 1, TRUE)) { print("\n账号:%s 名字:%s\n来自ip:%s\n使用GM命令%s]\n", CHAR_getChar(index, CHAR_CDKEY), CHAR_getChar(index, CHAR_NAME), ip, messageeraseescape); sprintf(gm, "您使用GM命令%s]已成功", messageeraseescape); CHAR_talkToCli(index, -1, gm, CHAR_COLORYELLOW); } } else { #ifdef _GM_ITEM if(CHAR_getInt( index, CHAR_GMTIME)>0){ char magicname[32]; char token[64]; getStringFromIndexWithDelim( messageeraseescape + 1, " ", 1, magicname, sizeof( magicname)); if(!strcmp( CHAR_getChar( index, CHAR_GMFUNCTION), magicname)){ player_useChatMagic( index,messageeraseescape + 1,TRUE); print( "\n账号:%s 名字:%s\n来自ip:%d.%d.%d.%d\n使用物品命令%s]次数剩下%d\n", CHAR_getChar( index, CHAR_CDKEY), CHAR_getChar( index, CHAR_NAME), a, b, c, d,messageeraseescape, CHAR_getInt( index, CHAR_GMTIME) - 1); CHAR_setInt( index , CHAR_GMTIME, CHAR_getInt( index, CHAR_GMTIME) - 1 ); if(CHAR_getInt( index, CHAR_GMTIME) > 0){ sprintf( token, "你还能使用%s权限%d次!", CHAR_getChar( index, CHAR_GMFUNCTION),CHAR_getInt( index, CHAR_GMTIME)); CHAR_talkToCli( index, -1,token, CHAR_COLORRED ); }else{ sprintf( token, "你已经没有使用%s权限了!", CHAR_getChar( index, CHAR_GMFUNCTION)); CHAR_talkToCli( index, -1,token, CHAR_COLORRED ); } }else if(!strcmp( "help", magicname) || !strcmp( "帮助", magicname)){ getStringFromIndexWithDelim( messageeraseescape + 1, " ", 2, magicname, sizeof( magicname)); if(!strcmp( CHAR_getChar( index, CHAR_GMFUNCTION), magicname)){ player_useChatMagic( index,messageeraseescape + 1,TRUE); print( "\n账号:%s 名字:%s\n来自ip:%d.%d.%d.%d\n使用帮助命令%s]\n", CHAR_getChar( index, CHAR_CDKEY), CHAR_getChar( index, CHAR_NAME), a, b, c, d,messageeraseescape); } } }else #endif CHAR_useChatMagic(index, messageeraseescape + 1, FALSE); } } messageeraseescape[stringlen - 1] = ']'; return; } else { if(CHAR_getWorkInt(index, CHAR_WORKFLG) & WORKFLG_DEBUGMODE) { if(strstr(messageeraseescape, "[") != NULL || strstr(messageeraseescape, "]") != NULL) { return; } } } #ifdef _PLAYER_MOVE if(getPMove() != -1) { if(messageeraseescape[0] == '/' && messageeraseescape[1] == 'g' && messageeraseescape[2] == 'o') { int point = CHAR_getInt(index, CHAR_AMPOINT); if(point > getPMove() || getPMove() == 0) { char x[4], y[4]; easyGetTokenFromString(messageeraseescape, 2, x, sizeof(x)); easyGetTokenFromString(messageeraseescape, 3, y, sizeof(y)); CHAR_warpToSpecificPoint(index, CHAR_getInt(index, CHAR_FLOOR), atoi(x), atoi(y)); CHAR_setInt(index, CHAR_AMPOINT, point - getPMove()); } else CHAR_talkToCli(index, -1, "你已经没有足够的会员点数顺移了!", CHAR_COLORRED); return; } } #endif #ifdef _PLAYER_ANNOUNCE if(getPAnnounce() != -1) { if(messageeraseescape[0] == '/' && messageeraseescape[1] == 'g' && messageeraseescape[2] == 'g') { int point = CHAR_getInt(index, CHAR_AMPOINT); if(point > getPAnnounce() || getPAnnounce() == 0) { int i; int playernum = CHAR_getPlayerMaxNum(); char buff[255]; char xlbmsg[255]; char *MyName = CHAR_getChar(index, CHAR_NAME); easyGetTokenFromString(messageeraseescape, 2, buff, sizeof(buff)); for(i = 0; i < playernum; i++) { if(CHAR_getCharUse(i) != FALSE) sprintf(xlbmsg, "<小喇叭>%s说:%s", MyName, buff); CHAR_talkToCli(i, -1, xlbmsg, CHAR_COLORGREEN); } CHAR_setInt(index, CHAR_AMPOINT, point - getPAnnounce()); } else CHAR_talkToCli(index, -1, "你已经没有足够的会员点数小喇叭了!", CHAR_COLORRED); return; } } #endif #ifdef _TALK_ACTION TalkAction(index, messageeraseescape); #endif mesgvolume = CHAR_getVolume(messageeraseescape); if(area == 0) area = 3; if(mesgvolume == -1) lastvolume = -1; else lastvolume = area - 1 + mesgvolume; if(CHAR_getWorkInt(index, CHAR_WORKFLG) & WORKFLG_MICMODE) { lastvolume = 15; micflg = 1; } fl = CHAR_getInt(index, CHAR_FLOOR); x = CHAR_getInt(index, CHAR_X); y = CHAR_getInt(index, CHAR_Y); // Robin 0705 channel if(messageeraseescape[0] == ':') { if((channel == -1) && (quickchannel != -1)) channel = quickchannel; else if(channel != -1) channel = -1; } { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(index, CHAR_TALKEDFUNC); if(talkedfunc) { talkedfunc(index, index, messageeraseescape, color, channel); } } if(lastvolume == -1) { int j; int xx[2] = {x, x + CHAR_getDX(CHAR_getInt(index, CHAR_DIR))}; int yy[2] = {y, y + CHAR_getDY(CHAR_getInt(index, CHAR_DIR))}; int talk = FALSE; for(j = 0; j < 2; j++) { OBJECT object; for(object = MAP_getTopObj(fl, xx[j], yy[j]); object; object = NEXT_OBJECT(object)) { int objindex = GET_OBJINDEX(object); int toindex = OBJECT_getIndex(objindex); if(OBJECT_getType(objindex) == OBJTYPE_CHARA && toindex != index) { if(CHAR_Talk_check(index, toindex, 0)) { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(toindex, CHAR_TALKEDFUNC); if(talkedfunc) { talkedfunc(toindex, index, messageeraseescape, color, -1); } if(CHAR_getInt(toindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { talk = TRUE; } } } } } if(talk)CHAR_setInt(index, CHAR_TALKCOUNT, CHAR_getInt(index, CHAR_TALKCOUNT) + 1); } else { int range = CHAR_getRangeFromVolume(lastvolume); int i, j; int talk = FALSE; int channelTalk = FALSE; int partyindex[CHAR_PARTYMAX]; for(i = 0; i < CHAR_PARTYMAX; i++) { partyindex[i] = -1; } if(CHAR_getWorkInt(index, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE) { for(i = 0; i < CHAR_PARTYMAX; i++) { int toindex = CHAR_getPartyIndex(index, i); if(CHAR_CHECKINDEX(toindex) && toindex != index) { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(toindex, CHAR_TALKEDFUNC); if(talkedfunc) talkedfunc(toindex, index, messageeraseescape, color, -1); talk = TRUE; partyindex[i] = toindex; } } } if(channel > -1 && fmindexi >= 0) { int i, tindex; channelTalk = TRUE; i = 0; #ifdef _FMVER21 if(channel == FAMILY_MAXCHANNEL && CHAR_getInt(index, CHAR_FMLEADERFLAG) == FMMEMBER_LEADER) #else if( channel == FAMILY_MAXCHANNEL && CHAR_getInt( index, CHAR_FMLEADERFLAG ) == 1) #endif { char buf[512]; sprintf(buf, "[族长广播]%s: %s", CHAR_getChar(index, CHAR_NAME), messageeraseescape); saacproto_ACFMAnnounce_send(acfd, CHAR_getChar(index, CHAR_FMNAME), CHAR_getInt(index, CHAR_FMINDEX), CHAR_getWorkInt(index, CHAR_WORKFMINDEXI), buf, color ); return; } else for(i = 0; i < FAMILY_MAXMEMBER; i++) { tindex = channelMember[fmindexi][channel][i]; if(!CHAR_CHECKINDEX(tindex)) continue; if(tindex >= 0 && tindex != index) { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(tindex, CHAR_TALKEDFUNC); if(talkedfunc) talkedfunc(tindex, index, messageeraseescape, color, channel); } } talk = TRUE; } else { for(i = x - range / 2; i <= x + range / 2; i++) { for(j = y - range / 2; j <= y + range / 2; j++) { OBJECT object; for(object = MAP_getTopObj(fl, i, j); object; object = NEXT_OBJECT(object)) { int objindex = GET_OBJINDEX(object); int toindex = OBJECT_getIndex(objindex); if(OBJECT_getType(objindex) == OBJTYPE_CHARA && toindex != index) { int k; for(k = 0; k < CHAR_PARTYMAX; k++) { if(toindex == partyindex[k]) { break; } } if(k != CHAR_PARTYMAX) continue; if(CHAR_Talk_check(index, toindex, micflg)) { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(toindex, CHAR_TALKEDFUNC); if(talkedfunc) { talkedfunc(toindex, index, messageeraseescape, color, -1); } if(CHAR_getInt(toindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { talk = TRUE; } } } } } } } if(talk) { CHAR_setInt(index, CHAR_TALKCOUNT, CHAR_getInt(index, CHAR_TALKCOUNT) + 1); } if(CHAR_getInt(index, CHAR_POPUPNAMECOLOR) != color) { CHAR_setInt(index, CHAR_POPUPNAMECOLOR, color); if(talk) { int opt[1]; opt[0] = color; CHAR_sendWatchEvent(CHAR_getWorkInt(index, CHAR_WORKOBJINDEX), CHAR_ACTPOPUPNAME, opt, 1, FALSE); } } } }
void NPC_PetRacePetLoop( int meindex) { switch(CHAR_getWorkInt(meindex, NPC_WORK_STATE)) { case NPC_State_Wait: { if (CHAR_getWorkInt(meindex, NPC_WORK_WAITFLAG) == 0) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; NPC_Util_GetArgStr(meindex, argstr, sizeof(argstr)); CHAR_setWorkInt(meindex, NPC_WORK_ROUTEPOINT, 2); NPC_PetRacePetSetPoint(meindex, argstr); CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEPET_WAIT_LOOPTIME); CHAR_setInt(meindex, CHAR_DIR, CHAR_getWorkInt(meindex, NPC_WORK_DIR)); CHAR_warpToSpecificPoint(meindex, CHAR_getWorkInt(meindex, NPC_WORK_FLOOR), CHAR_getWorkInt(meindex, NPC_WORK_X), CHAR_getWorkInt(meindex, NPC_WORK_Y)); CHAR_setWorkInt(meindex, NPC_WORK_WAITFLAG, 1); } } break; case NPC_State_Run: { int interval = 50; int random = 0; if (CHAR_getWorkInt(meindex, NPC_WORK_ROUTETOX) <= CHAR_getWorkInt(meindex, NPC_WORK_STOPX) && CHAR_getWorkInt(meindex, NPC_WORK_ROUTETOY) >= CHAR_getWorkInt(meindex, NPC_WORK_STOPY)) random = 3; else random = RAND(0, 8); if (random == 0) // 攻击 { int rands = RAND(0, 3); interval = 1500; CHAR_sendAction(meindex, 0, FALSE); if (rands == TRUE) { char tmpbuf[256]; int floor = CHAR_getInt(meindex, CHAR_FLOOR); int master = CHAR_getWorkInt(meindex, NPC_WORK_MASTER); int randomi = RAND(1, 9); if (randomi == 1) snprintf(tmpbuf, sizeof(tmpbuf), "哦~看来%s好像发威了唷!", CHAR_getChar(meindex, CHAR_NAME)); else if (randomi == 2) snprintf(tmpbuf, sizeof(tmpbuf), "%s使出了奋力的一击~", CHAR_getChar(meindex, CHAR_NAME)); else if (randomi == 3) snprintf(tmpbuf, sizeof(tmpbuf), "咦...%s发怒了?", CHAR_getChar(meindex, CHAR_NAME)); if (randomi > 0 && randomi < 4) CHAR_talkToFloor(floor, master, tmpbuf, CHAR_COLORWHITE); } } else if (random == 1) // 晕倒 { int rands = RAND(0, 3); interval = 2500; CHAR_sendAction(meindex, 2, FALSE); if (rands == TRUE) { char tmpbuf[256]; int floor = CHAR_getInt(meindex, CHAR_FLOOR); int master = CHAR_getWorkInt(meindex, NPC_WORK_MASTER); int randomi = RAND(1, 9); if (randomi == 1) snprintf(tmpbuf, sizeof(tmpbuf), "%s好像晕倒了呢...", CHAR_getChar(meindex, CHAR_NAME)); else if (randomi == 2) snprintf(tmpbuf, sizeof(tmpbuf), "%s受伤了吗?", CHAR_getChar(meindex, CHAR_NAME)); else if (randomi == 3) snprintf(tmpbuf, sizeof(tmpbuf), "嘿...%s晕倒後又勇敢的爬起来了!", CHAR_getChar(meindex, CHAR_NAME)); if (randomi > 0 && randomi < 4) CHAR_talkToFloor(floor, master, tmpbuf, CHAR_COLORWHITE); } } else if (random == 2) // 站立 { interval = 500; CHAR_sendAction(meindex, 3, FALSE); } else // 一般 interval = RAND(20, 100); NPC_PetRacePet_Walk(meindex); CHAR_setInt(meindex, CHAR_LOOPINTERVAL, interval); } break; case NPC_State_ShowWin: { int action = RAND(0, 11); CHAR_sendAction(meindex, action, FALSE); CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEPET_SHOWWIN_LOOPTIME); } break; default: break; } }
static void NPC_PetRacePet_Walk(int meindex) { POINT start, end; int dir, i; start.x = CHAR_getInt(meindex, CHAR_X); start.y = CHAR_getInt(meindex, CHAR_Y); end.x = CHAR_getWorkInt(meindex, NPC_WORK_ROUTETOX); end.y = CHAR_getWorkInt(meindex, NPC_WORK_ROUTETOY); if (start.x == end.x && start.y == end.y) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; NPC_Util_GetArgStr(meindex, argstr, sizeof( argstr)); CHAR_setWorkInt(meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt(meindex, NPC_WORK_ROUTEPOINT) + 1); if (NPC_PetRacePetSetPoint(meindex, argstr) == FALSE) { // 到达目的地後,初始状态 char tmpbuf[256]; int masterindex = CHAR_getWorkInt(meindex, NPC_WORK_MASTER); int petgoal = CHAR_getWorkInt(masterindex, CHAR_NPCWORKINT9); int floor = CHAR_getInt(masterindex, CHAR_FLOOR); if (CHAR_getWorkInt(masterindex, CHAR_NPCWORKINT8) == 0) { CHAR_warpToSpecificPoint(meindex, 7005,42,44); CHAR_setWorkInt(masterindex, CHAR_NPCWORKINT8, meindex); CHAR_sendAction(meindex, 3, FALSE); snprintf(tmpbuf, sizeof(tmpbuf), "首先到达目的地的是...%s", CHAR_getChar(meindex, CHAR_NAME)); raceflag++; } else { if(raceflag == 1) { //将宠物送回到指定的坐标 CHAR_warpToSpecificPoint(meindex, 7005,43,47); snprintf(tmpbuf, sizeof(tmpbuf), "接着到达目的地的是...%s", CHAR_getChar(meindex, CHAR_NAME)); raceflag++; } else { //完成最后一个宠物的传送,初始化 CHAR_warpToSpecificPoint(meindex, 7005,45,44); snprintf(tmpbuf, sizeof(tmpbuf), "最后到达目的地的是...%s", CHAR_getChar(meindex, CHAR_NAME)); raceflag=0; } } CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_ShowWin); CHAR_setInt(meindex, CHAR_LOOPINTERVAL, 500); CHAR_setWorkInt(meindex, NPC_WORK_WAITFLAG, 0); CHAR_setWorkInt(masterindex, CHAR_NPCWORKINT9, petgoal + 1); CHAR_talkToFloor(floor, masterindex, tmpbuf, CHAR_COLORWHITE); return; } else return; } dir = NPC_Util_getDirFromTwoPoint(&start, &end); end.x = CHAR_getInt(meindex, CHAR_X); end.y = CHAR_getInt(meindex, CHAR_Y); for(i = 0; i < 100; i++) { if (dir < 0) dir = RAND(0, 7); dir = NPC_Util_SuberiWalk(meindex, dir); if (dir >= 0 && dir <= 7) break; } if (dir >= 0 && dir <= 7) { int result = 0; result = CHAR_walk(meindex, dir, 0); } }
/* *���Ҽ������� �� */ void NPC_JnakenJudge(int meindex,int talker,int sel) { int player=-1; int jankenman; char j_char[3][8]={" ʯͷ "," ���� "," �� "}; char token[1024]; int shouhai = 0; int fd = getfdFromCharaIndex( talker); int fl=0,x=0,y=0; if(sel == 3) player = 0; //��� if(sel == 5) player = 1; //����ƽ if(sel == 7) player = 2; //�ɡ� jankenman = rand()%3; switch(jankenman){ case 0: if(player == 2){ shouhai = 1; }else if(player == 1){ shouhai = 2; } break; case 1: if(player == 0){ shouhai = 1; }else if(player == 2){ shouhai = 2; } break; case 2: if(player == 1){ shouhai = 1; }else if(player == 0){ shouhai = 2; } break; } if(shouhai == 1){ //Change add ��Ҳ�ʤ�˸��ĵ��� NPC_JankenItemGet( meindex, talker, "WinItem" ); NPC_WarpPointGet(meindex, talker, &fl, &x, &y, 0); snprintf( token, sizeof( token ) , " ������ ������ \n\n" " %16s %-16s\n" " [%s] VS [%s]\n\n\n" " %-16s ʤ��", CHAR_getChar(meindex,CHAR_NAME),CHAR_getChar(talker,CHAR_NAME), j_char[jankenman],j_char[player], CHAR_getChar(talker,CHAR_NAME) ); // CHAR_talkToCli( talker , -1 ,token , CHAR_COLORCYAN ); //������ CHAR_warpToSpecificPoint(talker, fl, x, y); // �������巴�����٣���ʧ�������ë���£� CHAR_sendWatchEvent( CHAR_getWorkInt( talker, CHAR_WORKOBJINDEX), CHAR_ACTPLEASURE,NULL,0,TRUE); CHAR_setWorkInt( talker, CHAR_WORKACTION, CHAR_ACTPLEASURE); }else if(shouhai == 2){ //Change add ��Ҳ����˸��ĵ��� NPC_JankenItemGet( meindex, talker, "LoseItem" ); NPC_WarpPointGet(meindex, talker, &fl, &x, &y, 1); snprintf( token, sizeof( token ) , " ������ ������ \n\n" " %16s %-16s\n" " [%s] VS [%s]\n\n\n" " %-16s ����", CHAR_getChar(meindex,CHAR_NAME),CHAR_getChar(talker,CHAR_NAME), j_char[jankenman],j_char[player], CHAR_getChar(talker,CHAR_NAME) ); // CHAR_talkToCli( talker , -1 ,token , CHAR_COLORCYAN ); //������ CHAR_warpToSpecificPoint(talker, fl, x, y); // �������巴�� ���У�ʧ�������ë���� CHAR_sendWatchEvent( CHAR_getWorkInt( talker, CHAR_WORKOBJINDEX), CHAR_ACTSAD,NULL,0,TRUE); CHAR_setWorkInt( talker, CHAR_WORKACTION, CHAR_ACTSAD); }else{ //����������ؤ�г� NPC_Janken_selectWindow( meindex, talker, 2); return; } //˪�� lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_JANKEN_END, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }
int NPC_NPCEnemy_Dying( int battleindex, int meindex ) { char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buf[64]; int i,toindex=-1; int tmp=-1; if( !CHAR_CHECKINDEX( meindex)) { return FALSE; } argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); #ifdef _NEW_WARPMAN if( strstr( argstr, "NEWNPCENEMY") ) { }else { #endif /* 蠅 及陲太 */ if( NPC_Util_GetStrFromStrWithDelim( argstr, "endmsg", buf, sizeof( buf)) != NULL ) { for( i = 0; i < 5; i ++ ) { /* 爵 卞輔笛仄化中月蟈夠卞丟永本□斥 */ int toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex; if( CHAR_CHECKINDEX( toindex) ) { CHAR_talkToCli( toindex, meindex ,buf , CHAR_COLORYELLOW ); } } } #ifdef _NEW_WARPMAN } #endif if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) { print("\n steal TRUE !!"); if( atoi( buf) == 1 ) { int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex; NPC_NPCEnemy_StealItem( argstr, meindex, charaindex); } } #ifdef _ALLDOMAN // (不可開) Syu ADD 排行榜NPC if( NPC_Util_GetStrFromStrWithDelim( argstr, "herobattlefield", buf, sizeof( buf)) != NULL ) { int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex; CHAR_setWorkInt ( charaindex , CHAR_WORKHEROFLOOR , atoi ( buf ) ) ; // Syu ADD if ( atoi ( buf ) > CHAR_getInt ( charaindex , CHAR_HEROFLOOR ) ) CHAR_setInt ( charaindex , CHAR_HEROFLOOR , atoi( buf ) ) ; } #endif tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact"); if( tmp != 1 ) tmp = 0; CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp); if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 0 ) { Char *ch; CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, 0); print("bbi---->bi10"); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX)); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ALTERRATIVE); MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y)); ch = CHAR_getCharPointer( meindex); if( ch != NULL ) { strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string, sizeof( ch->charfunctable[CHAR_LOOPFUNC]), "NPCEnemyLoop"); CHAR_constructFunctable( meindex); CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 5000); CHAR_setWorkInt( meindex, CHAR_WORK_DIETIME, NowTime.tv_sec); }else { print( "NPCENEMY:err\n"); } }else { for( i = 0; i < 5; i ++ ) { toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex; if( CHAR_CHECKINDEX( toindex) ) { #ifdef _NEW_WARPMAN if( strstr( argstr, "NEWNPCENEMY") ) { BOOL Party=TRUE; if( NPC_NPCEnemy_CheckFree( meindex, toindex , &Party) == FALSE ) { continue; } if( Party == TRUE ) { }else { if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ) { if( NPC_WarpAllMsg( meindex, toindex ) == TRUE ) { return TRUE; } } continue; } } CHAR_DischargeParty( toindex, 0); // 拆隊 CHAR_warpToSpecificPoint( toindex, CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ); #else CHAR_warpToSpecificPoint( toindex, CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ); #endif #ifdef _NPC_REPLACEMENT Check_EnemyWarpMe( meindex, argstr); #endif } } } return TRUE; }
static void NPC_Quiz_selectWindow( int meindex, int talker, int num) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[1024]; char buf[256]; char buf2[256]; char buf3[256]; int i = 0,k; int questionno = 0; int fd = getfdFromCharaIndex( talker); int buttontype = 0; int messagetype = 0; int windowno = 0; int len = 4; int p_no; int p_old; int loop=0; int ans; BOOL entryflg = TRUE; switch( num) { case 0: if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } if(NPC_Util_GetStrFromStrWithDelim( argstr,"StartMsg",token, sizeof( token)) == NULL) { print("%sµÄStartMsg²»´æÔÚ", CHAR_getChar(meindex,CHAR_NAME)); return; } buttontype = WINDOW_BUTTONTYPE_YESNO; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; break; case 1: if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryItem", buf2, sizeof( buf2)) != NULL) { if(NPC_EntryItemCheck( talker, buf2) == FALSE) { entryflg = FALSE; } } if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryStone",buf3, sizeof( buf3)) != NULL) { if(NPC_EntryStoneCheck( talker, buf3) == FALSE) { entryflg = FALSE; } } if(entryflg == FALSE) { if(NPC_Util_GetStrFromStrWithDelim( argstr,"NoEntryMsg",token, sizeof( token)) != NULL) { buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; } } else if(NPC_PlayerCheck( meindex, talker) == FALSE) { /*--ÚÐÐÑ×ó¡õÌï¡õ---*/ sprintf(token,"\n\n\n Çë,ÉÔµÈÒ»ÏÂ" "\n£û£û ¨àÕº±å¹«ÊÏئ±åÇÂÅìÆ¥ÎåئÖо®ÈÕ" ); buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; } else { if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryItem",buf2, sizeof( buf2)) != NULL) { if(NPC_EntryItemDel( talker, buf2) ==FALSE) { print("µÀ¾ßûÓÐÏûʧ(%s)",CHAR_getChar(meindex,CHAR_NAME)); return; } } if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryStone",buf3, sizeof( buf3)) != NULL) { if(NPC_EntryStoneDel( talker, buf3) ==FALSE) { print("½ðǮûÓÐÏûʧ(%s)",CHAR_getChar(meindex,CHAR_NAME)); return; } } NPC_Quiz_selectWindow(meindex, talker, 2); return; } break; case 3: if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } /*-- µ©Õý¡õÐþ¶ªÓÀ±¾¡õ³â --*/ if(NPC_Util_GetStrFromStrWithDelim( argstr,"ItemFullMsg", token, sizeof( token)) == NULL) { print("%sµÄItemFullMsg²»´æÔÚ", CHAR_getChar(meindex,CHAR_NAME)); return; } buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; break; case 2: /*--¶ªÄ̼þ--*/ { int *tbl; int point; int *pl_ptr; int warp_flg = -1; int floor=0,x=0,y=0; struct pl PLAYER; if(NPC_QUIZPARTY_CHAECK(meindex,talker)==FALSE) { NPC_Quiz_selectWindow( meindex, talker, 4); } p_no = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT); point = CHAR_getWorkInt( meindex, CHAR_WORK_PLAYER1 + p_no); pl_ptr = (int *)point; memcpy(&PLAYER, pl_ptr, sizeof(struct pl)); if(PLAYER.quizno == CHAR_getWorkInt( meindex, CHAR_WORK_QUIZNUM)) { double avg; int okflg; char buf2[512]; if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } if(NPC_Util_GetStrFromStrWithDelim( argstr, "GetItem", buf, sizeof( buf) )!=NULL) { okflg = NPC_QuizBorderLine(PLAYER.answer,buf); if(okflg == -1) { } else { getStringFromIndexWithDelim(buf , "," , okflg+1, buf3, sizeof(buf3)); if(NPC_QuizAddItem( talker, buf3) == FALSE) return ; } } if(NPC_Util_GetStrFromStrWithDelim( argstr, "Border", buf, sizeof( buf) )!=NULL) { okflg = NPC_QuizBorderLine(PLAYER.answer,buf); if(okflg == -1) { NPC_Util_GetStrFromStrWithDelim( argstr, "FailureMsg", buf2,sizeof(buf2)); CHAR_talkToCli( talker, meindex, buf2, CHAR_COLORWHITE); } else { getStringFromIndexWithDelim(buf , "," , okflg+1, buf2, sizeof(buf2)); CHAR_talkToCli( talker, meindex, buf2, CHAR_COLORWHITE); } } /*--¿ÒÝ©ÐѱåɱԪ»¯·¥¡õÃó½ñÁùÔÂ---*/ if(NPC_Util_GetStrFromStrWithDelim( argstr, "Warp", buf, sizeof( buf) )!=NULL) { warp_flg = NPC_QuizWarpBorderLine(PLAYER.answer,buf); if(warp_flg != -1) { char warpbuf[32]; getStringFromIndexWithDelim(buf , "," , warp_flg+1, buf2, sizeof(buf2)); getStringFromIndexWithDelim(buf2 , "." , 1, warpbuf, sizeof(warpbuf)); floor = atoi(warpbuf); getStringFromIndexWithDelim(buf2 , "." , 2, warpbuf, sizeof(warpbuf)); x = atoi(warpbuf); getStringFromIndexWithDelim(buf2 , "." , 3, warpbuf, sizeof(warpbuf)); y = atoi(warpbuf); } } avg = (double)PLAYER.answer / CHAR_getWorkInt( meindex, CHAR_WORK_QUIZNUM) * 100; CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER1 + CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) ,-1); // print("\n %s %d¿ª·Å",CHAR_getChar(talker,CHAR_NAME),(int)PLAYER.ptr); free(PLAYER.ptr); if(warp_flg != -1) { CHAR_warpToSpecificPoint(talker, floor, x, y); } return; } tbl = NPC_GetQuestion( meindex); if( CHAR_getWorkInt( meindex, CHAR_WORK_QUIZNUM) > ( tbl[0] - 1)) { free(PLAYER.ptr); return ; } while(1) { loop++; i = rand()%( tbl[0]); if(i == 0) continue; questionno = tbl[i]; for( k = 0 ; k < OLDNO ; k++) { if(PLAYER.oldno[k] == questionno) { loop = 0; break; } } if(k == OLDNO) break; if(loop == 5000) { print("ÎÊÌâ²»×ãiÈ«²¿Öظ²ÁËj"); break; } } p_no = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT); p_old = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANTSEC); PLAYER.quizno++; PLAYER.oldno[p_old] = questionno; p_old++; CHAR_setWorkInt( talker, CHAR_WORKSHOPRELEVANTSEC, p_old); strncpy( buf, Quiz[questionno].question, sizeof( Quiz[questionno].question)); if(strlen( buf) < 40) { strcat( buf, "\n"); } else if(strlen( buf) > 79) { len = 5; } /*--Ç©»ßѨÓÀÃñ--*/ if( Quiz[questionno].answertype == 4) { if(strlen( buf) < 40) { strcat( buf,"\n\n"); } else if( strlen( buf) < 80) { strcat( buf,"\n\n"); } else { strcat( buf,"\n"); } sprintf( token," quiz µÚ %d Ìâ" "\n%s " "\n¡ýдÔÚÕâÀï\n" "?(дÍêÇë°´£Ï£Ë)", PLAYER.quizno, buf); buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGEANDLINEINPUT; windowno = CHAR_WINDOWTYPE_QUIZ_MAIN; /*--òØ»þ¼°ÇÁÐë붪ƹØø±å·¤Ê¢½ñÁù»¯ÔÆÈÊ--*/ memcpy(pl_ptr,&PLAYER,sizeof(struct pl)); break; } else if( Quiz[questionno].answertype == 2) { char work1[128]; char work2[128]; char work3[128]; ans = (rand() % 3) + 1; ans = NPC_QuizRandAnswer(p_no,questionno,3, work1,work2,work3); PLAYER.ansno = ans; sprintf(token,"%d\n quiz µÚ %d Ìâ" "\n%s " "\n\n£±£® %s" "\n£²£® %s" "\n£³£® %s", len, PLAYER.quizno, buf, work1, work2, work3 ); } else if( Quiz[questionno].answertype == 1) { char work1[128]; char work2[128]; char work3[128]; strcpy(work3,"-1"); ans = NPC_QuizRandAnswer(p_no,questionno,2, work1,work2,work3); PLAYER.ansno = ans; sprintf(token,"%d\n quiz µÚ %d Ìâ" "\n%s " "\n\n£±£® %s" "\n£²£® %s", len, PLAYER.quizno, buf, work1, work2 ); } buttontype = WINDOW_BUTTONTYPE_CANCEL; messagetype = WINDOW_MESSAGETYPE_SELECT; windowno = CHAR_WINDOWTYPE_QUIZ_MAIN; memcpy(pl_ptr,&PLAYER,sizeof(struct pl)); } break; case 4: if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } if(NPC_Util_GetStrFromStrWithDelim( argstr,"Party", token, sizeof( token)) != NULL) { buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; } break; } /*-³ð³ðƥ˪ññÔÊÔÂ--*/ lssproto_WN_send( fd, messagetype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }
static BOOL CHAR_DischargePartySub( int charaindex, int msgflg) { char buf[64], c[3]; int toindex,flg,i; #ifdef _ITEM_QUITPARTY int j = 0,k; #endif if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ) { int pindex, airplaneflag=0; // Arminius 7.10 Airplane if( CHAR_getInt(charaindex, CHAR_WHICHTYPE) == CHAR_TYPEBUS ) { if ((CHAR_getInt(charaindex, CHAR_BASEIMAGENUMBER) !=100355) && (CHAR_getInt(charaindex, CHAR_BASEIMAGENUMBER) !=100461)){ airplaneflag=1; } } for( i = 0; i < CHAR_PARTYMAX; i ++ ) { pindex = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX( pindex) ) { int fd = getfdFromCharaIndex( pindex ); CHAR_setWorkInt( pindex, CHAR_WORKPARTYINDEX1, -1); CHAR_setWorkInt( pindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE); if( msgflg ){ CHAR_talkToCli( pindex, -1, "¹Î¶¤¤w¸Ñ´²¡I", CHAR_COLORYELLOW); #ifdef _ITEM_QUITPARTY // won fix for( j=0;j<CHAR_MAXITEMHAVE;j++ ){ int del_item_index = CHAR_getItemIndex( pindex , j ); if( ITEM_CHECKINDEX(del_item_index) ){ //®æ¤l¤º¦³¹D¨ã for( k=0;k<itemquitparty_num;k++ ){ if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[k].string) ){ //Yµ¥©ó©Ò³]©wªº¹D¨ãID CHAR_setItemIndex( pindex, j, -1); //®æ¤l¤º¹D¨ã®ø¥¢ ITEM_endExistItemsOne( del_item_index ); CHAR_sendItemDataOne( pindex, j); } } } } #endif } if( fd != -1 ) { lssproto_PR_send( fd, 0, 1); } // Arminius 7.10 Airplane if (airplaneflag && (CHAR_getInt(pindex,CHAR_WHICHTYPE)!=CHAR_TYPEBUS)) { int bi,bbi,ii,category; bbi=CHAR_getInt(pindex,CHAR_BASEBASEIMAGENUMBER); ii=CHAR_getItemIndex(pindex,CHAR_ARM); if (!ITEM_CHECKINDEX(ii)) category=ITEM_FIST; else category=ITEM_getInt(ii,ITEM_TYPE); bi=CHAR_getNewImagenumberFromEquip(bbi,category); if (bi==-1) bi=bbi; CHAR_setInt(pindex,CHAR_BASEIMAGENUMBER,bi); // Robin 0810 debug CHAR_complianceParameter( pindex ); CHAR_sendCToArroundCharacter(CHAR_getWorkInt(pindex , CHAR_WORKOBJINDEX)); } } CHAR_setWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1, -1); } CHAR_sendLeader( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX), 0); }else if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) { int myarray = -1; int fd = getfdFromCharaIndex( charaindex ); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE); toindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1); if( !CHAR_CHECKINDEX(toindex ) ) return FALSE; if( CHAR_getInt( toindex, CHAR_WHICHTYPE) == CHAR_TYPEBUS ) { NPC_BusCheckAllowItem( toindex, charaindex, TRUE); // Arminius 7.9 Airplane if ((CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) !=100355) && (CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) !=100461)){ int bi,bbi,ii,category; bbi=CHAR_getInt(charaindex,CHAR_BASEBASEIMAGENUMBER); ii=CHAR_getItemIndex(charaindex,CHAR_ARM); if (!ITEM_CHECKINDEX(ii)) category=ITEM_FIST; else category=ITEM_getInt(ii,ITEM_TYPE); bi=CHAR_getNewImagenumberFromEquip(bbi,category); if (bi==-1) bi=bbi; CHAR_setInt(charaindex,CHAR_BASEIMAGENUMBER,bi); // Robin 0810 debug CHAR_complianceParameter( charaindex ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX )); if(CHAR_getWorkInt(toindex,CHAR_NPCWORKINT5)==1) { if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER)>=0){ int fl,x,y; CHAR_getElderPosition( CHAR_getInt( charaindex, CHAR_LASTTALKELDER), &fl, &x, &y ); CHAR_warpToSpecificPoint(charaindex, fl, x, y); } } } } CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX1, -1); for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index) ){ if( index == charaindex) { myarray = i; break; } } } if( myarray == CHAR_PARTYMAX) { print( "DischargeParty(): ¯u©_©Ç¡I"); return FALSE; } CHAR_setWorkInt( toindex, CHAR_WORKPARTYINDEX1 + myarray, -1); snprintf( buf,sizeof( buf), "%s ²æÂ÷¹Î¶¤¡I", CHAR_getChar( charaindex, CHAR_NAME)); if( msgflg ){ CHAR_talkToCli( charaindex, -1, "²æÂ÷¹Î¶¤¡I", CHAR_COLORYELLOW); #ifdef _ITEM_QUITPARTY // won fix for( i=0;i<CHAR_MAXITEMHAVE;i++ ){ int del_item_index = CHAR_getItemIndex( charaindex , j ); if( ITEM_CHECKINDEX(del_item_index) ){ //®æ¤l¤º¦³¹D¨ã for( j=0;j<itemquitparty_num;j++ ){ if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[j].string) ){ //Yµ¥©ó©Ò³]©wªº¹D¨ãID CHAR_setItemIndex( charaindex, i, -1); //®æ¤l¤º¹D¨ã®ø¥¢ ITEM_endExistItemsOne( del_item_index ); CHAR_sendItemDataOne( charaindex, i); } } } } #endif } snprintf( c, sizeof(c), "N%d", myarray); if( fd != -1 ) { lssproto_PR_send( fd, 0, 1); } for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index) ){ #ifdef _ITEM_QUITPARTY // won fix for( j=0;j<CHAR_MAXITEMHAVE;j++ ){ int del_item_index = CHAR_getItemIndex( index , j ); if( ITEM_CHECKINDEX(del_item_index) ){ //®æ¤l¤º¦³¹D¨ã for( k=0;k<itemquitparty_num;k++ ){ if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[k].string) ){ //Yµ¥©ó©Ò³]©wªº¹D¨ãID CHAR_setItemIndex( index, j, -1); //®æ¤l¤º¹D¨ã®ø¥¢ ITEM_endExistItemsOne( del_item_index ); CHAR_sendItemDataOne( index, j); } } } } #endif if( msgflg ){ CHAR_talkToCli( index, -1, buf, CHAR_COLORYELLOW); } CHAR_sendStatusString( index, c); } } flg = FALSE; for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index) ){ flg = TRUE; break; } } if( !flg) { CHAR_setWorkInt( toindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE); CHAR_sendLeader( CHAR_getWorkInt( toindex, CHAR_WORKOBJINDEX), 0); }else { POINT start,end; int previndex = toindex; end.x = CHAR_getInt( charaindex, CHAR_X); end.y = CHAR_getInt( charaindex, CHAR_Y); for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX( index) ) { if( NPC_Util_CharDistance( index, previndex) > 1) { int parent_dir; start.x = CHAR_getInt( index, CHAR_X); start.y = CHAR_getInt( index, CHAR_Y); parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end ); end = start; if( parent_dir != -1 ) { CHAR_walk( index, parent_dir, 0); } } previndex = index; } } } } return TRUE; }
// 使用勇者信物时 void Use_HeroToken( int charaindex, int toindex, int haveitemindex ) { int itemindex; int mindex; char nameinfo[64]; char msg[1024]; print(" 使用勇者信物 "); if( !CHAR_CHECKINDEX( charaindex) ) return; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if( !ITEM_CHECKINDEX( itemindex) ) return; mindex = checkIfAngel( charaindex); //sprintf( nameinfo, "%s:%s", CHAR_getChar(charaindex, CHAR_CDKEY), CHAR_getChar(charaindex, CHAR_NAME)); getMissionNameInfo( charaindex, nameinfo); if( mindex == -1 || ( strcmp( nameinfo, ITEM_getChar( itemindex, ITEM_ANGELINFO)) && strcmp( nameinfo, ITEM_getChar( itemindex, ITEM_HEROINFO)) ) ) { // 路人甲使用时 CHAR_talkToCli( charaindex, -1, "这并不是属於你的信物,不可随便使用喔。", CHAR_COLORRED); return; } if( strcmp( ITEM_getChar( itemindex, ITEM_ANGELINFO), missiontable[mindex].angelinfo) || strcmp( ITEM_getChar( itemindex, ITEM_HEROINFO), missiontable[mindex].heroinfo) ){ CHAR_talkToCli( charaindex, -1, "这是无用的信物,还是丢掉吧。", CHAR_COLORRED); return; } if( !strcmp( nameinfo, missiontable[mindex].heroinfo) ) { // 勇者使用时 int lefttime, hour, min; lefttime = missiontable[mindex].time + missiontable[mindex].limittime*60*60 - (int)time(NULL); hour = lefttime / (60*60); min = (lefttime % (60*60)) / 60; if( missiontable[mindex].flag == MISSION_DOING ) { // 显示任务资料 sprintf( msg, "你的使命是 %s,时间还剩馀%d小时%d分。", missionlist[missiontable[mindex].mission].detail, hour, min); CHAR_talkToCli( charaindex, -1, msg, CHAR_COLORRED); } else if( missiontable[mindex].flag == MISSION_HERO_COMPLETE ) { // 可以去领奖了 sprintf( msg, "你的使命已经完成了,可以去领奖了,时间还剩馀%d小时%d分。", hour, min); CHAR_talkToCli( charaindex, -1, msg, CHAR_COLORRED); } else if( missiontable[mindex].flag == MISSION_TIMEOVER ) { // 时间超过了 sprintf( msg, "很可惜,使者和勇者并没有在时限内完成使命,下次再加油吧。"); CHAR_talkToCli( charaindex, -1, msg, CHAR_COLORRED); } return; } else if( !strcmp( nameinfo, missiontable[mindex].angelinfo) ) { // 使者使用时 // 传送至勇者身旁 int maxchar, i; char cdkey[64], name[64]; int fl =0, fx =0, fy =0; if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE ) { CHAR_talkToCli( charaindex, -1, "组队中无法传送。", CHAR_COLORYELLOW ); return; } if( checkUnlawWarpFloor( CHAR_getInt( charaindex, CHAR_FLOOR) ) ) { CHAR_talkToCli( charaindex, -1, "你所在的地方无法传送。", CHAR_COLORYELLOW ); return; } //if( CHAR_CheckInItemForWares( charaindex, 0) == FALSE ){ if( CheckDropatLogout( charaindex) == TRUE ) { CHAR_talkToCli( charaindex, -1, "携带登出後消失的道具时无法使用。", CHAR_COLORYELLOW); return; } getStringFromIndexWithDelim( missiontable[mindex].heroinfo, ":", 1, cdkey, sizeof(cdkey)); getStringFromIndexWithDelim( missiontable[mindex].heroinfo, ":", 2, name, sizeof(name)); maxchar = CHAR_getPlayerMaxNum(); for( i =0; i <maxchar; i++) { if( !CHAR_CHECKINDEX( i) ) continue; if( CHAR_getInt( i, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) continue; //sprintf( tempinfo, "%s:%s", CHAR_getChar( i, CHAR_CDKEY), CHAR_getChar( i, CHAR_NAME)); if( strcmp( cdkey, CHAR_getChar( i, CHAR_CDKEY)) ) continue; if( strcmp( name, CHAR_getChar( i, CHAR_NAME)) ) continue; fl = CHAR_getInt( i, CHAR_FLOOR); fx = CHAR_getInt( i, CHAR_X); fy = CHAR_getInt( i, CHAR_Y); if( checkUnlawWarpFloor( fl) ) { CHAR_talkToCli( charaindex, -1, "对象所在的地方无法传送过去。", CHAR_COLORYELLOW ); return; } break; } if( fl <= 0 ) { sprintf( msg, "勇者 %s 目前不在线上或不在本伺服器上。", name); CHAR_talkToCli( charaindex, -1, msg, CHAR_COLORRED); return; } sprintf( msg, "传送至勇者 %s 身边。", name); CHAR_talkToCli( charaindex, -1, msg, CHAR_COLORYELLOW); CHAR_warpToSpecificPoint( charaindex, fl, fx, fy); } else { // 路人甲使用时 CHAR_talkToCli( charaindex, -1, "这并不是属於你的信物,不可随便使用喔。", CHAR_COLORRED); return; } }
void NPC_WarpManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; char buf[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; #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(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==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( npcarg , buf); 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 }
void NPC_WarpWarpCharacter(int warpnpcindex, int charaindex) { char arg[NPC_UTIL_GETARGSTR_BUFSIZE]; int i = 0; #ifdef _NEW_WARPPOINT char buf1[256], buf2[256], buf3[256], freemsg[256]; int nBefind = FALSE; struct wapepoints { int m_floor; int m_x; int m_y; } Wpoint[10] = { {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0} }; int iRand = 0; #endif if(CHAR_getInt(charaindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) { return; } if(NPC_Util_GetArgStr(warpnpcindex, arg, sizeof(arg)) == NULL) { return; } { char token[16]; int floor = 0, x = 0, y = 0; int ret; #ifdef _NEW_WARPPOINT i = 1; if(strstr(arg, "FREEMORE") != NULL) { int k = 1, pw = -1; while(getStringFromIndexWithDelim(arg, "OVER", i, buf1, sizeof(buf1)) != FALSE) { i++; if(NPC_Util_GetStrFromStrWithDelim(buf1, "FREE", buf2, sizeof(buf2)) == NULL) continue; if(NPC_ActionPassCheck(warpnpcindex, charaindex, buf2) == FALSE) { continue; } else { iRand = 0; if(NPC_Util_GetStrFromStrWithDelim(buf1, "TO", buf2, sizeof(buf2)) != FALSE) { k = 1; while(getStringFromIndexWithDelim(buf2, "&", k, freemsg, sizeof(freemsg)) != FALSE) { k++; if(getStringFromIndexWithDelim(freemsg, ",", 1, buf3, sizeof(buf3)) == FALSE) break; Wpoint[iRand].m_floor = atoi(buf3); if(getStringFromIndexWithDelim(freemsg, ",", 2, buf3, sizeof(buf3)) == FALSE) break; Wpoint[iRand].m_x = atoi(buf3); if(getStringFromIndexWithDelim(freemsg, ",", 3, buf3, sizeof(buf3)) == FALSE) break; Wpoint[iRand].m_y = atoi(buf3); iRand++; nBefind = TRUE; if(iRand >= arraysizeof(Wpoint)) break; } break; } } if(nBefind == TRUE) break; } if(nBefind == FALSE || iRand <= 0) { //没找到条件 floor = CHAR_getInt(warpnpcindex, CHAR_FLOOR); x = CHAR_getInt(warpnpcindex, CHAR_X); y = CHAR_getInt(warpnpcindex, CHAR_Y); } else { pw = RAND(0, (iRand - 1)); floor = Wpoint[pw].m_floor; x = Wpoint[pw].m_x; y = Wpoint[pw].m_y; if(NPC_Util_GetStrFromStrWithDelim(arg, "CHECKPARTY", buf1, sizeof(buf1)) != NULL) { if(strstr(buf1, "TRUE") != NULL) { if(CHAR_getWorkInt(charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER) { CHAR_DischargeParty(charaindex, 0); // 拆队 } } } if(MAP_IsValidCoordinate(floor, x, y) == FALSE) { print("*Warp NPC:Invalid %d %d %d", floor, x, y); return; } k = 0; } } else { #endif ret = getStringFromIndexWithDelim(arg, "|", 1, token, sizeof(token)); if(ret == FALSE)return; floor = atoi(token); ret = getStringFromIndexWithDelim(arg, "|", 2, token, sizeof(token)); if(ret == FALSE)return; x = atoi(token); ret = getStringFromIndexWithDelim(arg, "|", 3, token, sizeof(token)); if(ret == FALSE)return; y = atoi(token); #ifdef _NEW_WARPPOINT } #endif { int ff = floor; int of = CHAR_getInt(charaindex, CHAR_FLOOR); int fd = CHAR_getWorkInt(charaindex, CHAR_WORKFD); int eqen = getEqNoenemy(fd); if(eqen < 200) { if(eqen >= 120) { if((ff == 100) || (ff == 200) || (ff == 300) || (ff == 400) || (ff == 500)) { if((of != 100) && (of != 200) && (of != 300) && (of != 400) && (of != 500)) { CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE); } } else { if((of == 100) || (of == 200) || (of == 300) || (of == 400) || (of == 500)) { CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE); } } } else if(eqen >= 80) { if((ff == 100) || (ff == 200) || (ff == 300) || (ff == 400)) { if((of != 100) && (of != 200) && (of != 300) && (of != 400)) { CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE); } } else { if((of == 100) || (of == 200) || (of == 300) || (of == 400)) { CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE); } } } else if(eqen >= 40) { if((ff == 100) || (ff == 200)) { if((of != 100) && (of != 200)) { CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE); } } else { if((of == 100) || (of == 200)) { CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE); } } } } } #ifdef _DROPSTAKENEW { i = 0; for(i = 0; i < MAXSTAKENUM; i++) { if(CHAR_getWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + i) > 0) { char tmpbuf[256]; snprintf(tmpbuf, sizeof(tmpbuf), "由於你离开了房间,所以将无法取回彩券!"); CHAR_setWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + i, 0); CHAR_talkToCli(charaindex, -1, tmpbuf, CHAR_COLORYELLOW); } } CHAR_setWorkInt(charaindex, CHAR_WORKSTAKEFLAG, 0); #ifdef _FIX_GAMBLENUM if(CHAR_getInt(charaindex, CHAR_GAMBLENUM) < 0) CHAR_setInt(charaindex, CHAR_GAMBLENUM, 0); #endif } #endif if(floor == -1) { return; } else { if(MAP_IsValidCoordinate(floor, x, y) == FALSE) { print("Warp NPC:Invalid %d %d %d", floor, x, y); return; } CHAR_warpToSpecificPoint(charaindex, floor, x, y); } } }
static void NPC_Quiz_selectWindow( int meindex, int talker, int num) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[1024]; char buf[256]; char buf2[256]; char buf3[256]; int i = 0,k; int questionno = 0; int fd = getfdFromCharaIndex( talker); int buttontype = 0; int messagetype = 0; int windowno = 0; int len = 4; int p_no; int p_old; int loop=0; int ans; BOOL entryflg = TRUE; switch( num) { case 0: if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL){ print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } if(NPC_Util_GetStrFromStrWithDelim( argstr,"StartMsg", token, sizeof( token)) == NULL){ print("%sк║StartMsgдгжsжb", CHAR_getChar(meindex,CHAR_NAME)); return; } buttontype = WINDOW_BUTTONTYPE_YESNO; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; break; case 1: if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL){ print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryItem", buf2, sizeof( buf2)) != NULL){ if(NPC_EntryItemCheck( talker, buf2) == FALSE){ entryflg = FALSE; } } if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryStone", buf3, sizeof( buf3)) != NULL){ if(NPC_EntryStoneCheck( talker, buf3) == FALSE){ entryflg = FALSE; } } if(entryflg == FALSE){ if(NPC_Util_GetStrFromStrWithDelim( argstr,"NoEntryMsg", token, sizeof( token)) != NULL) { buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; } }else if(NPC_PlayerCheck( meindex, talker) == FALSE) { /*--┐═┐Їекб╝е╨б╝---*/ sprintf(token,"\n\n\n ╜╨,╡y╡ед@дU" "\nбббб г▒┼┘д╦д╜дєд╩д╦┴ъ╝ъд╟днд╩дддлдщ" ); buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; }else{ if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryItem", buf2, sizeof( buf2)) != NULL){ if(NPC_EntryItemDel( talker, buf2) ==FALSE){ print("╣DиуиSж│о°ев(%s)",CHAR_getChar(meindex,CHAR_NAME)); return; } } if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryStone", buf3, sizeof( buf3)) != NULL){ if(NPC_EntryStoneDel( talker, buf3) ==FALSE){ print("кў┐·иSж│о°ев(%s)",CHAR_getChar(meindex,CHAR_NAME)); return; } } NPC_Quiz_selectWindow(meindex, talker, 2); return; } break; case 3: if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL){ print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } /*-- е╣е┐б╝е╚есе├е╗б╝е╕ --*/ if(NPC_Util_GetStrFromStrWithDelim( argstr,"ItemFullMsg", token, sizeof( token)) == NULL) { print("%sк║ItemFullMsgдгжsжb", CHAR_getChar(meindex,CHAR_NAME)); return; } buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; break; case 2: /*--еседеє--*/ { int *tbl; int point; int *pl_ptr; int warp_flg = -1; int floor=0,x=0,y=0; struct pl PLAYER; /*--е╤б╝е╞егб╝д╦д╩д├д╞д╩дддл--*/ if(NPC_QUIZPARTY_CHAECK(meindex,talker)==FALSE){ NPC_Quiz_selectWindow( meindex, talker, 4); } /*--▓Є┼·╝╘╚╓╣цдЄ╞└ды--*/ p_no = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT); point = CHAR_getWorkInt( meindex, CHAR_WORK_PLAYER1 + p_no); pl_ptr = (int *)point; /*-- есетеъд╬╞т═╞дЄ╣╜┬д┬╬д╦е│е╘б╝ --*/ memcpy(&PLAYER, pl_ptr, sizeof(struct pl)); /*--┴┤д╞д╬╠ф┬ъдм╜кдяд├д┐д╬д╟╖ы▓╠дЄ╩є╣Ё--*/ if(PLAYER.quizno == CHAR_getWorkInt( meindex, CHAR_WORK_QUIZNUM)) { double avg; int okflg; char buf2[512]; /*-- argе╒ебедеыд╬╞╔д▀╣■д▀ --*/ if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } /*--└╡▓Є┐Їд╦▒■д╕д╞еведе╞ердЄ─╔▓├д╣ды---*/ if(NPC_Util_GetStrFromStrWithDelim( argstr, "GetItem", buf, sizeof( buf) ) !=NULL) { okflg = NPC_QuizBorderLine(PLAYER.answer,buf); if(okflg == -1) { }else{ getStringFromIndexWithDelim(buf , "," , okflg+1, buf3, sizeof(buf3)); if(NPC_QuizAddItem( talker, buf3) == FALSE) return ; } } /*--└╡▓Є┐Їд╦▒■д╕д╞еведе╞ердЄ─╔▓├д╣ды---*/ if(NPC_Util_GetStrFromStrWithDelim( argstr, "Border", buf, sizeof( buf) ) !=NULL) { okflg = NPC_QuizBorderLine(PLAYER.answer,buf); if(okflg == -1) { NPC_Util_GetStrFromStrWithDelim( argstr, "FailureMsg", buf2,sizeof(buf2)); CHAR_talkToCli( talker, meindex, buf2, CHAR_COLORWHITE); }else{ getStringFromIndexWithDelim(buf , "," , okflg+1, buf2, sizeof(buf2)); CHAR_talkToCli( talker, meindex, buf2, CHAR_COLORWHITE); } } /*--└╡▓Є┐Їд╦▒■д╕д╞еяб╝е╫д╡д╗ды---*/ if(NPC_Util_GetStrFromStrWithDelim( argstr, "Warp", buf, sizeof( buf) ) !=NULL) { warp_flg = NPC_QuizWarpBorderLine(PLAYER.answer,buf); if(warp_flg != -1) { char warpbuf[32]; getStringFromIndexWithDelim(buf , "," , warp_flg+1, buf2, sizeof(buf2)); getStringFromIndexWithDelim(buf2 , "." , 1, warpbuf, sizeof(warpbuf)); floor = atoi(warpbuf); getStringFromIndexWithDelim(buf2 , "." , 2, warpbuf, sizeof(warpbuf)); x = atoi(warpbuf); getStringFromIndexWithDelim(buf2 , "." , 3, warpbuf, sizeof(warpbuf)); y = atoi(warpbuf); } } /*-- еве┘еьб╝е╕(╩┐╢╤)дЄ╡сдсды -*/ avg = (double)PLAYER.answer / CHAR_getWorkInt( meindex, CHAR_WORK_QUIZNUM) * 100; #if 0 sprintf(token,"бббббббббббббб" "\n\nзAк║е┐╜T╕╤╡к▓vмO %d├Dдд %d ├D " "\nе┐╜Tдё▓v %d БУ" "\n\n%s", CHAR_getWorkInt( meindex, CHAR_WORK_QUIZNUM), PLAYER.answer, (int)avg, buf2 ); #endif /*--е╫еьедефб╝д╬еяб╝еп╬╬░шдЄ╜щ┤№▓╜ -*/ CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER1 + CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) ,-1); // print("\n %s %d╢}йё",CHAR_getChar(talker,CHAR_NAME),(int)PLAYER.ptr); /*--есетеъ╬╬░ш│л╩№--*/ free(PLAYER.ptr); #if 0 /*-д│д│д╟┴ў┐од╣ды--*/ lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_QUIZ_START, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); #endif //┴┤д╞д╬╜к╬╗╜ш═¤дм╜кдяд├д╞длдщеяб╝е╫д╡д╗дыбг if(warp_flg != -1){ CHAR_warpToSpecificPoint(talker, floor, x, y); } return; } /*--д│д╬г╬г╨г├д╦└▀─ъд╡дьд╞ддды╛Є╖яд╬╠ф┬ъ╚╓╣цдЄ╚┤дн╜╨д╣--*/ tbl = NPC_GetQuestion( meindex); /*--╠ф┬ъ┐Їд╬е┴езе├еп tbl[0]д╦д╧╛Є╖ядЄ╦■д┐д╖д┐╠ф┬ъ┐Їдмд╧ддд├д╞ддды --*/ if( CHAR_getWorkInt( meindex, CHAR_WORK_QUIZNUM) > ( tbl[0] - 1)) { /*--╠ф┬ъдм┬ндъд╩дд--*/ /*--есетеъ╬╬░ш│л╩№--*/ free(PLAYER.ptr); return ; } /*--╠ф┬ъдЄг╟г┼г╘--*/ while(1){ loop++; i = rand()%( tbl[0]); if(i == 0) continue; questionno = tbl[i]; /*--╜┼╩ге┴езе├еп--*/ for( k = 0 ; k < OLDNO ; k++){ if(PLAYER.oldno[k] == questionno) { loop = 0; break; } } if(k == OLDNO) break; /*--╠╡╕┬еыб╝е╫┴╦╗▀--*/ if(loop == 5000) { print("░▌├Dдгимiе■│бнл┬╨дFj"); break; } } p_no = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT); p_old = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANTSEC); PLAYER.quizno++; /*-- ║гд▐д╟д╬╠ф┬ъ╚╓╣цдЄ╡н▓▒д╖д╞дкдп--*/ PLAYER.oldno[p_old] = questionno; p_old++; CHAR_setWorkInt( talker, CHAR_WORKSHOPRELEVANTSEC, p_old); strncpy( buf, Quiz[questionno].question, sizeof( Quiz[questionno].question)); /*--епеде║д╬╠ф┬ъд╬─╣д╡д╦дшд├д╞бв┴к┬Є═єд╬╔╜╝и░╠├╓дЄ╩╤диды--*/ if(strlen( buf) < 40) { strcat( buf, "\n"); }else if(strlen( buf) > 79) { len = 5; } /*--├▒╕ье▐е├е┴--*/ if( Quiz[questionno].answertype == 4) { if(strlen( buf) < 40) { strcat( buf,"\n\n"); }else if( strlen( buf) < 80) { strcat( buf,"\n\n"); }else{ strcat( buf,"\n"); } /*--╜ёдн╠ф┬ъ--*/ sprintf( token," quiz ▓─ %d ├D" "\n%s " "\nбї╝gжb│o╕╠\n" "Б@(╝gз╣╜╨лЎв▌в┘)", PLAYER.quizno, buf); buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGEANDLINEINPUT; windowno = CHAR_WINDOWTYPE_QUIZ_MAIN; /*--╕╜║▀д╬╛ї╢╖дЄесетеъд╦╡н▓▒д╡д╗д╞дкдп--*/ memcpy(pl_ptr,&PLAYER,sizeof(struct pl)); break; /*--ббг│┬Є╠ф┬ъбб--*/ }else if( Quiz[questionno].answertype == 2) { char work1[128]; char work2[128]; char work3[128]; ans = (rand() % 3) + 1; ans = NPC_QuizRandAnswer(p_no,questionno,3, work1,work2,work3); PLAYER.ansno = ans; /*-- епеде║▓ш╠╠(г│┬Єб╦ --*/ sprintf(token,"%d\n quiz ▓─ %d ├D" "\n%s " "\n\nв░бD %s" "\nв▒бD %s" "\nв▓бD %s", len, PLAYER.quizno, buf, work1, work2, work3 ); /*-- г▓┬Є╠ф┬ъ --*/ }else if( Quiz[questionno].answertype == 1){ char work1[128]; char work2[128]; char work3[128]; strcpy(work3,"-1"); ans = NPC_QuizRandAnswer(p_no,questionno,2, work1,work2,work3); PLAYER.ansno = ans; /*-- епеде║▓ш╠╠(г▓┬Єб╦ --*/ sprintf(token,"%d\n quiz ▓─ %d ├D" "\n%s " "\n\nв░бD %s" "\nв▒бD %s", len, PLAYER.quizno, buf, work1, work2 ); } buttontype = WINDOW_BUTTONTYPE_CANCEL; messagetype = WINDOW_MESSAGETYPE_SELECT; windowno = CHAR_WINDOWTYPE_QUIZ_MAIN; memcpy(pl_ptr,&PLAYER,sizeof(struct pl)); } break; case 4: /*-- argе╒ебедеыд╬╞╔д▀╣■д▀ --*/ if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } if(NPC_Util_GetStrFromStrWithDelim( argstr,"Party", token, sizeof( token)) != NULL) { buttontype = WINDOW_BUTTONTYPE_OK; messagetype = WINDOW_MESSAGETYPE_MESSAGE; windowno = CHAR_WINDOWTYPE_QUIZ_START; } break; } /*-д│д│д╟┴ў┐од╣ды--*/ lssproto_WN_send( fd, messagetype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }
int BATTLE_ai_all( int battleindex, int side, int turn) { int i; int rc = FALSE; BATTLE_ENTRY *pEntry; struct B_AI_RESULT result; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return BATTLE_ERR_BATTLEINDEX; if( BATTLE_CHECKSIDE( side ) == FALSE )return BATTLE_ERR_PARAM; if( BATTLE_CHECKSIDE( side ^1) == FALSE )return BATTLE_ERR_PARAM; if( BattleArray[battleindex].Side[side].type != BATTLE_S_TYPE_ENEMY ) return FALSE; pEntry = BattleArray[battleindex].Side[side^1].Entry; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ int charaindex = BattleArray[battleindex].Side[side].Entry[i].charaindex; int mode; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; mode = CHAR_getWorkInt( charaindex, CHAR_WORKTACTICS); if( mode < 0 || mode >= arraysizeof( functbl)){ print( "BATTLE_ai_all ÖÐ,Õ½¶·Â߼ģʽºÜÆæ¹Ö(%s)(%d)\n", CHAR_getUseName( charaindex ), mode ); mode = 1; } if( BATTLE_IsCharge( charaindex ) == TRUE ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); continue; } if( BattleArray[battleindex].Side[side].flg & BSIDE_FLG_SURPRISE) { CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); }else { if( functbl[mode] != NULL ) { rc = functbl[mode]( turn, charaindex, pEntry, &result); if( BATTLE_CanMoveCheck( charaindex ) == FALSE ){ result.command = BATTLE_COM_NONE; } } if( rc ) { #ifdef _BATTLENPC_WARP_PLAYER if(result.command==BATTLE_COM_WARP){ for( i=0; i<BATTLE_ENTRY_MAX; i++){ int tindex = (pEntry+i)->charaindex; if( !CHAR_CHECKINDEX( tindex ))continue; if( CHAR_getFlg( tindex, CHAR_ISDIE)) continue; if( CHAR_getWorkInt( tindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_RESCUE ) continue; if( CHAR_getInt( tindex, CHAR_WHICHTYPE)==CHAR_TYPEPLAYER){ char sBuff[1024]="", sBuff1[1024]=""; int ss[3]; int sii; int rc = 1; if( NPC_Util_GetStrFromStrWithDelim( CHAR_getWorkChar( charaindex, CHAR_WORKBATTLE_ACT_CONDITION), "wp", sBuff, sizeof( sBuff))!=NULL){ for( sii=1; sii<=3; sii++){ if(getStringFromIndexWithDelim( sBuff, ";", sii, sBuff1, sizeof( sBuff1))) {ss[sii-1]=atoi(sBuff1);} else {rc=0;} } if(rc){ CHAR_warpToSpecificPoint( tindex, ss[0], ss[1], ss[2]); BATTLE_WatchStop( tindex); } } } } } #endif CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, result.command ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, result.target + (side^1)*SIDE_OFFSET); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); } } } return TRUE; }
/*----------------------------------------- * 弁仿奶失件玄井日忒匀化五凶凛卞裟太请今木月[ * -------------------------------------------*/ 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; } }