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;
}
Example #2
0
/**************************************
 * 戚及樺赭毛本永玄允月
 **************************************/
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;
}
Example #3
0
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;
				}
			}
		}
	}
}
Example #4
0
//********* ��  �ݼ���     *********
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 );
		}
	}



}
Example #5
0
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;
}
Example #6
0
/*-----------------------------------------
 * �ͷ���ʧ��������߯�Ȼ������ݱ���̫���ľ�£�
 *
-------------------------------------------*/
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;
    }
}
Example #7
0
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);
}
Example #8
0
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);
			}
		}
	}
}
Example #9
0
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);

}
Example #10
0
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);
}
Example #11
0
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;
}
Example #12
0
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);
}
Example #13
0
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);
      }
    }
  }
}
Example #14
0
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;
	}
}
Example #15
0
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);
	}
}
Example #16
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);


	
}
Example #17
0
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;
}
Example #18
0
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);
}
Example #19
0
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;
}
Example #20
0
// 使用勇者信物时
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;
	}


}
Example #21
0
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
	}
Example #22
0
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);
    }
  }
}
Example #23
0
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);
}
Example #24
0
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;
	}
}