Esempio n. 1
0
int NPC_Lua_NLG_DischargeParty(lua_State *_NLL)
{
	CheckEx(_NLL, 1);
	CheckIndexNull(_NLL, 1);
	int TM_index = (int)lua_tointeger(_NLL, 1);

	BOOL TM_Ret = CHAR_DischargeParty( TM_index, 0);

	LRetBool(_NLL, TM_Ret);
}
Esempio n. 2
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;
}
Esempio n. 3
0
/**************************************
 * ���������
 **************************************/
void NPC_BusLoop( int meindex)
{
	int	i;
	switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {
	  case 0:
	    /* ����ƹ�����ݣ�����ë������������ */
		/* ���޻������׼�ƥ����  ���� */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 
			+ CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) 
			< NowTime.tv_sec)
		{
			/* SE   ����  Ѩ��ƹ������̫   */
			if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) {
				CHAR_sendSEoArroundCharacter( 
								CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y),
								60,
								TRUE);
			}
			/* ��  �����ݼ�����������*/
			for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
				int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i);
				if( CHAR_CHECKINDEX( partyindex)) {
					NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START);
				}
			}
			
			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
			/* ��������Ѽ�������ë���ʻ�պ������ */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);
		}
		return;
	  case 1:
	  	/* ���� */
	  	NPC_Bus_walk( meindex);
	  case 2:
		/* �����Ȼ�����ƹ���� */
		/* ���޻������׼�ƥ����  ���� */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 
			+ (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3)
			< NowTime.tv_sec)
		{
			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
			/* ��������Ѽ�������ë���ʻ�պ������ */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);
		
		}
		return;
	  case 3:
		/* �����ƻ��֣��ͷ���ʧ������  �����м��б��
		 * ���Ƴ��ƥ��������ë��ľ��֧��
		 */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3
			< NowTime.tv_sec)
		{
			char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];

			NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
			/* ��������Ѽ�������ë�������� */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 
						NPC_BUS_WAITINGMODE_WAITTIME);
			
			/* ������������ */
			{
				int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX);
				CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r));
				//print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
			}
			/* �����Ի�׷º�  �� */
			CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 
							CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1);

			/* �ݺ��̼�����Ʃ� */
			/* ��Ի��  ����   */
			if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1)  {
				/* �����������  �κ��̼�����ë  �� */
				int num = NPC_BusGetRoutePointNum( meindex, argstr);
				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1);
			}
			else {
				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, 
							CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1);
			}
			/* �ݼ����̼�������  ë���������� */
			NPC_BusSetPoint( meindex, argstr);
			/* ������ë  ������ */
			NPC_BusSetDestPoint( meindex, argstr);
			/* �ɡ�  ū  ������  ë���� */
			CHAR_DischargeParty( meindex, 0);
		    /* �ػ�������ë������ */
		    CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
			/* ƹ��������ʧ */
			CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
		}
		return;
	  default:
	    break;
	}
}
Esempio n. 4
0
/**************************************
 * 伙□皿楮醒
 **************************************/
void NPC_AirLoop( int meindex)
{
	int	i;
	int npc_wave = CHAR_getWorkInt( meindex, NPC_WORK_RUNWAVE);
	switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {
	  case 0:
	    /* 謹切乒□玉及凜〕凜棉毛民尼永弁允月 */
		/* 凜棉互煩勻凶及匹〕請  允月 */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 
			+ CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) 
			< NowTime.tv_sec)
		{
			/* SE   日允  穴件乒旦及陲太   */
			if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) {
				//ANDY_reEdit
				CHAR_sendSEoArroundCharacter( 
								CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y),
								npc_wave,
								TRUE);
			}
			/* 請  允月凜及丟永本□斥*/
			for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
				int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i);
				if( CHAR_CHECKINDEX( partyindex)) {
					NPC_AirSendMsg( meindex, partyindex, NPC_AIR_MSG_START);
				}
			}
			
			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
			/* 伙□皿楮醒及裟請仄毛洶仁簧蘸卞允月 */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_LOOPTIME);
		}
		return;
	  case 1:
	  	/* 洶仁 */
	  	NPC_Air_walk( meindex);
	  case 2:
		/* 鞅引勻化中月乒□玉 */
		/* 凜棉互煩勻凶及匹〕請  允月 */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 
			+ (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3)
			< NowTime.tv_sec)
		{
			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
			/* 伙□皿楮醒及裟請仄毛洶仁簧蘸卞允月 */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_LOOPTIME);
		
		}
		return;
	  case 3:
		/* 讒邋仄化手〕弁仿奶失件玄及  樟謹切及啃卞〕
		 * 劑仄仇仇匹它尼奶玄毛中木化支月
		 */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3	< NowTime.tv_sec){
			char	argstr1[NPC_UTIL_GETARGSTR_BUFSIZE];
			char *argstr;
			argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1));
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_WAITINGMODE_WAITTIME);
			{
				int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX);
				CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r));
			}
			CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 
				CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1);
			if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1)  {
				int num = NPC_AirGetRoutePointNum( meindex, argstr);
				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1);
			}else {
				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, 
					CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1);
			}
			NPC_AirSetPoint( meindex, argstr);
			NPC_AirSetDestPoint( meindex, argstr);
			CHAR_DischargeParty( meindex, 0);
		    CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
			if ((CHAR_getWorkInt(meindex, NPC_WORK_ONEWAYFLG) == 1) &&
			    (CHAR_getWorkInt(meindex, NPC_WORK_ROUNDTRIP) == 1) ){
			  CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_LOOPTIME);
			  CHAR_setWorkInt( meindex, NPC_WORK_MODE, 1);
			} else
			  CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
		}
		return;
	  default:
	    break;
	}
}
Esempio n. 5
0
/**************************************
 * 伙□皿楮醒
 **************************************/
void NPC_BusLoop( int meindex)
{
	int	i;
	switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {
	  case 0:
	    /* 谨切乒□玉及凛]凛棉毛民尼永弁允月 */
		/* 凛棉互烦匀凶及匹]请  允月 */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 
			+ CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) 
			< NowTime.tv_sec)
		{
			/* SE   日允  穴件乒旦及陲太   */
			if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) {
				CHAR_sendSEoArroundCharacter( 
								CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y),
								60,
								TRUE);
			}
			/* 请  允月凛及丢永本□斥*/
			for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
				int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i);
				if( CHAR_CHECKINDEX( partyindex)) {
					NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START);
				}
			}
			
			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
			/* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);
		}
		return;
	  case 1:
	  	/* 汹仁 */
	  	NPC_Bus_walk( meindex);
	  case 2:
		/* 鞅引匀化中月乒□玉 */
		/* 凛棉互烦匀凶及匹]请  允月 */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 
			+ (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3)
			< NowTime.tv_sec)
		{
			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
			/* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);
		
		}
		return;
	  case 3:
		/* 谗邋仄化手]弁仿奶失件玄及  樟谨切及啃卞]
		 * 剂仄仇仇匹它尼奶玄毛中木化支月
		 */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3
			< NowTime.tv_sec)
		{
			char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];

			NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
			/* 伙□皿楮醒及裟请仄毛赞仁允月 */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 
						NPC_BUS_WAITINGMODE_WAITTIME);
			
			/* 伙□玄瑁烂允月 */
			{
				int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX);
				CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r));
				//print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
			}
			/* 垫五窖曰白仿弘  凳 */
			CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 
							CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1);

			/* 戚禾奶件玄及譬濡 */
			/* 窖曰反  溃质   */
			if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1)  {
				/* 公及伙□玄及  嫖禾奶件玄醒毛  月 */
				int num = NPC_BusGetRoutePointNum( meindex, argstr);
				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1);
			}
			else {
				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, 
							CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1);
			}
			/* 戚及禾奶件玄及甄  毛本永玄允月 */
			NPC_BusSetPoint( meindex, argstr);
			/* 垫五燮毛  憎允月 */
			NPC_BusSetDestPoint( meindex, argstr);
			/* 由□  奴  仃月质  毛允月 */
			CHAR_DischargeParty( meindex, 0);
		    /* 蜇箕及凛棉毛本永玄 */
		    CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
			/* 乒□玉弁伉失 */
			CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
		}
		return;
	  default:
	    break;
	}
}
Esempio n. 6
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);
    }
  }
}
Esempio n. 7
0
int CHAR_die( int charaindex )
{
    CHAR_DischargeParty( charaindex, 0);
    {
        int bymonster = 0;
        int attackindex = CHAR_getWorkInt(charaindex,
                                          CHAR_WORKLASTATTACKCHARAINDEX);
        if( attackindex == -2  )
            bymonster = 0;
        else if( CHAR_CHECKINDEX(attackindex) == TRUE ) {
            if( CHAR_getInt(attackindex,CHAR_WHICHTYPE)
                    == CHAR_TYPEENEMY ) {
                bymonster = 1;
            } else {
                bymonster = 2;
            }
        }
        if( bymonster == 0 || bymonster == 1 ) {
            int i;
            for( i=0 ; i<CHAR_EQUIPPLACENUM ; i++ )
                CHAR_DropItem(charaindex,i);
        } else {
            int eqindex[CHAR_EQUIPPLACENUM];
            int itemhavenum=0;
            int i;

            for( i=0 ; i<CHAR_EQUIPPLACENUM ; i++ )
                if( ITEM_CHECKINDEX(CHAR_getItemIndex(charaindex,i)) )
                    eqindex[itemhavenum++] = i;

            if( itemhavenum >= 1 ) {
                int  randomindex = RAND(0,itemhavenum-1);
                CHAR_DropItem(charaindex,eqindex[randomindex]);

            }
        }

        CHAR_DropMoney(charaindex,
                       CHAR_getInt(charaindex,CHAR_GOLD)/2 );
        CHAR_setInt(charaindex,CHAR_GOLD,0);
    }
    CHAR_complianceParameter(charaindex);
    CHAR_sendCToArroundCharacter( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX) );
    CHAR_setInt(charaindex,CHAR_DEADCOUNT,
                CHAR_getInt(charaindex,CHAR_DEADCOUNT)+1);
    {
        int i;
        BOOL old=FALSE;
        for( i=0 ; i<arraysizeof(pShow); i++)
            if( CHAR_setInt( charaindex, pShow[i].paramindex, 0 ) > 0 ) {
                old = TRUE;
            }
        if( CHAR_setInt( charaindex, CHAR_POISON, 0 ) > 0 )old=TRUE;
        if( old )
            CHAR_sendCToArroundCharacter( CHAR_getInt(charaindex, CHAR_WORKOBJINDEX));
    }
    CHAR_sendStatusString( charaindex, "P");
    CHAR_sendStatusString( charaindex, "I");
    CHAR_setFlg(charaindex,CHAR_ISDIE,1);
    CHAR_setFlg(charaindex,CHAR_ISATTACKED,0);
    return 0;
}
Esempio n. 8
0
/**************************************
 * ¥ë¡¼¥×´Ø¿ô
 **************************************/
void NPC_BusLoop( int meindex)
{
	int	i;
	switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {
	  case 0:
	    /* ÂÔ¤Á¥â¡¼¥É¤Î»þ¡f»þ´Ö¤ò¥Á¥§¥Ã¥¯¤¹¤ë */
		/* »þ´Ö¤¬·Ð¤Ã¤¿¤Î¤Ç¡f½Ð  ¤¹¤ë */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 
			+ CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) 
			< NowTime.tv_sec)
		{
			/* SE   ¤é¤¹  ¥Þ¥ó¥â¥¹¤Î¶«¤Ó   */
			if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) {
				CHAR_sendSEoArroundCharacter( 
								CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y),
								60,
								TRUE);
			}
			/* ½Ð  ¤¹¤ë»þ¤Î¥á¥Ã¥»¡¼¥¸*/
			for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
				int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i);
				if( CHAR_CHECKINDEX( partyindex)) {
					NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START);
				}
			}
			
			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
			/* ¥ë¡¼¥×´Ø¿ô¤Î¸Æ½Ð¤·¤ò¬¤¤¯Â®Å٤ˤ¹¤ë */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);
		}
		return;
	  case 1:
	  	/* ¬¤¤¯ */
	  	NPC_Bus_walk( meindex);
	  case 2:
		/* »ß¤Þ¤Ã¤Æ¤¤¤ë¥â¡¼¥É */
		/* »þ´Ö¤¬·Ð¤Ã¤¿¤Î¤Ç¡f½Ð  ¤¹¤ë */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 
			+ (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3)
			< NowTime.tv_sec)
		{
			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
			/* ¥ë¡¼¥×´Ø¿ô¤Î¸Æ½Ð¤·¤ò¬¤¤¯Â®Å٤ˤ¹¤ë */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);
		
		}
		return;
	  case 3:
		/* ÅþÃ夷¤Æ¤â¡f¥¯¥é¥¤¥¢¥ó¥È¤Î  ¼ÌÂÔ¤Á¤Î°Ù¤Ë¡f
		 * ¾¯¤·¤³¤³¤Ç¥¦¥§¥¤¥È¤ò¤¤¤ì¤Æ¤ä¤ë
		 */
		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3
			< NowTime.tv_sec)
		{
			char	argstr1[NPC_UTIL_GETARGSTR_BUFSIZE];
			char *argstr;

			argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1));
			/* ¥ë¡¼¥×´Ø¿ô¤Î¸Æ½Ð¤·¤òÃÙ¤¯¤¹¤ë */
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 
						NPC_BUS_WAITINGMODE_WAITTIME);
			
			/* ¥ë¡¼¥È·èÄꤹ¤ë */
			{
				int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX);
				CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r));
				//print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
			}
			/* ¹Ô¤­µ¢¤ê¥Õ¥é¥°  ¹¹ */
			CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 
							CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1);

			/* ±­¥Ý¥¤¥ó¥È¤ÎÄ´Àá */
			/* µ¢¤ê¤Ï  ¼ì½è   */
			if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1)  {
				/* ¤½¤Î¥ë¡¼¥È¤Î  ¹â¥Ý¥¤¥ó¥È¿ô¤ò  ¤ë */
				int num = NPC_BusGetRoutePointNum( meindex, argstr);
				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1);
			}
			else {
				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, 
							CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1);
			}
			/* ±­¤Î¥Ý¥¤¥ó¥È¤ÎºÂ  ¤ò¥»¥Ã¥È¤¹¤ë */
			NPC_BusSetPoint( meindex, argstr);
			/* ¹Ô¤­Àè¤ò  ¼¨¤¹¤ë */
			NPC_BusSetDestPoint( meindex, argstr);
			/* ¥Ñ¡¼  ¥£  ¤±¤ë½è  ¤ò¤¹¤ë */
			CHAR_DischargeParty( meindex, 0);
		    /* ¸½ºß¤Î»þ´Ö¤ò¥»¥Ã¥È */
		    CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
			/* ¥â¡¼¥É¥¯¥ê¥¢ */
			CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
		}
		return;
	  default:
	    break;
	}
}
Esempio n. 9
0
/*-----------------------------------------
 * 弁仿奶失件玄井日忒匀化五凶凛卞裟太请今木月[
 *
-------------------------------------------*/
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;
	}
}