예제 #1
0
BOOL NPC_DoormanInit( int meindex )
{
	char	arg1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *arg;
    char dname[1024];

	/* ¥¤¥Ù¥ó¥È¤Î¥¿¥¤¥×ÀßÄê */
	CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE,CHAR_EVENT_NPC);

    CHAR_setInt( meindex , CHAR_HP , 0 );
    CHAR_setInt( meindex , CHAR_MP , 0 );
    CHAR_setInt( meindex , CHAR_MAXMP , 0 );
    CHAR_setInt( meindex , CHAR_STR , 0 );
    CHAR_setInt( meindex , CHAR_TOUGH, 0 );
    CHAR_setInt( meindex , CHAR_LV , 0 );

    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPETOWNPEOPLE );
    CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );  /*   ·â¤µ¤ì¤Ê¤¤¤è¤ó */

	arg = NPC_Util_GetArgStr( meindex, arg1, sizeof( arg1));

    if(!getStringFromIndexWithDelim( arg, "|", 3, dname, sizeof(dname ))){
        print("RINGO: ³]©w¬ÝªùªÌ®É»Ý­nªùªº¦W¦r­ò¡I:%s:\n",
              arg );
        return FALSE;
    }
    print( "RINGO: Doorman create: arg: %s dname: %s\n",arg,dname);
    CHAR_setWorkChar( meindex , CHAR_WORKDOORMANDOORNAME , dname );

    return TRUE;
}
예제 #2
0
int NPC_DoormanInit( int meindex )
{
	char	arg[NPC_UTIL_GETARGSTR_BUFSIZE];
    char dname[1024];

	/* 奶矛件玄及正奶皿涩烂 */
	CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE,CHAR_EVENT_NPC);

    CHAR_setInt( meindex , CHAR_HP , 0 );
    CHAR_setInt( meindex , CHAR_MP , 0 );
    CHAR_setInt( meindex , CHAR_MAXMP , 0 );
    CHAR_setInt( meindex , CHAR_STR , 0 );
    CHAR_setInt( meindex , CHAR_TOUGH, 0 );
    CHAR_setInt( meindex , CHAR_LV , 0 );

    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPETOWNPEOPLE );
    CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );  /*   猾今木卅中方氏 */

	NPC_Util_GetArgStr( meindex, arg, sizeof( arg));

    if(!getStringFromIndexWithDelim( arg, "|", 3, dname, sizeof(dname ))){
        print("RINGO: 设定看门者时需要门的名字唷!:%s:\n",
              arg );
        return FALSE;
    }
    print( "RINGO: Doorman create: arg: %s dname: %s\n",arg,dname);
    CHAR_setWorkChar( meindex , CHAR_WORKDOORMANDOORNAME , dname );

    return TRUE;
}
예제 #3
0
/*


  井凶曰屯〔

  伉伉□旦  匹反2潘  及仇午分引〔

 NPCARGUMENT:  0分勻凶日仇午分引0}1分勻凶日仇午分引1及賄曰  〔  

 橇謫反3勾丐曰}賜卞褡墊允月〔

 橇謫0「 失奶玉伉件弘〔仇及橇謫匹talk今木月午}
 >方仁五凶}幻僕幻僕方〔中井卞手}歹仄互鰻  及井凶曰屯元扎〔=匹
 橇謫1卞啖墊〔
 橇謫1「talk今木凶日}
 >公卅凶互及冗戈卅日壬}熔午夫五井尹卞}雄  卅蛻暱毛夫午勾} 今內仃方丹〔
        公及蛻暱毛及冗戈井? yes/no=yes匹橇謫2尺〔no匹
        >匹反}今日壬元扎〔=匹橇謫0尺
        
 橇謫2「 talk今木凶日}
 >公卅凶卞鰻  及蛻暱>幻僕幻僕=毛鰻噩仄凶〔  及勾亢卞  濠卅手及午仄化
        域戲  濠卞允月屯仄〔今日壬元扎〔=
        午中勻化熔毛蛹日仄}蛻暱白仿弘毛馨笛允月〔
        匹橇謫0卞手升月〔



 
 Talked:

 if(     卞反卅仄化井日1坌凶勻化中月井〞){
   橇謫0卞手升月〔
 }
   
 switch(橇謫){
 case 0:  質  〔橇謫1尺〔break;
 case 1:  質  〔橇謫2尺〔break;
 case 2:  質  〔橇謫0尺〔break;
 } 

 }

 
 
 

 



 */
BOOL NPC_StoryTellerInit( int meindex )
{
    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESTORYTELLER );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );
    CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );

    return TRUE;
}
예제 #4
0
int NPC_WarpInit(int charaindex) {
  char arg[NPC_UTIL_GETARGSTR_BUFSIZE];
  int ret;
  int floor = -1, x = -1, y = -1;
  char token[128];

  CHAR_setInt(charaindex, CHAR_WHICHTYPE, CHAR_TYPEWARP);
  if(NPC_Util_GetArgStr(charaindex, arg, sizeof(arg)) == NULL) {
    print("\n GetArgStr ERR!!");
    return FALSE;
  }
#ifdef _NEW_WARPPOINT
  if(strstr(arg, "FREEMORE") != NULL) {
    CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
  } else {
#endif
    return FALSE;
    ret = getStringFromIndexWithDelim(arg, "|", 1, token, sizeof(token));
    if(ret) floor = atoi(token);
    ret = getStringFromIndexWithDelim(arg, "|", 2, token, sizeof(token));
    if(ret) x = atoi(token);
    ret = getStringFromIndexWithDelim(arg, "|", 3, token, sizeof(token));
    if(ret) y = atoi(token);
    if(MAP_IsValidCoordinate(floor, x, y) == FALSE) {
      NPC_WarpsetNeverMake(charaindex);
      //print( "Warp NPC:Invalid arg:%s\n", arg );
      print("Warp Npc Err:%d:%d:%d->(%s)\n",
            CHAR_getInt(charaindex, CHAR_FLOOR),
            CHAR_getInt(charaindex, CHAR_X),
            CHAR_getInt(charaindex, CHAR_Y),
            arg);
      return FALSE;
    }
    ret = getStringFromIndexWithDelim(arg, "|", 4, token, sizeof(token));
    if(ret == TRUE) {
      int day;
      day = NPC_TimeWarpCheck(charaindex, token, 0);
      if(day == 0) {
        CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NIGHT);
      } else if(day == 1) {
        CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_MORNING);
      } else if(day == 2) {
        CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NOON);
      } else {
        CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
      }
    } else {
      CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
    }
#ifdef _NEW_WARPPOINT
  }
#endif
  CHAR_setFlg(charaindex, CHAR_ISVISIBLE, 0);
  CHAR_setFlg(charaindex, CHAR_ISOVERED, 1);
  CHAR_setFlg(charaindex, CHAR_ISATTACKED, 0);
  CHAR_setFlg(charaindex, CHAR_ISATTACK, 0);
  return TRUE;
}
예제 #5
0
int NPC_DoorRefreshOverFlg( int meind )
{
    if( !CHAR_CHECKINDEX(meind))return FALSE;
    if( NPC_Door_isOpen( meind ) ==1 ){
        CHAR_setFlg( meind , CHAR_ISOVERED , 1 );
    } else {
        CHAR_setFlg( meind , CHAR_ISOVERED , 0 );
    }
    return TRUE;
}
예제 #6
0
void CHAR_playerresurrect( int charaindex, int hp )
{
    CHAR_setInt(charaindex,CHAR_BASEIMAGENUMBER,
                CHAR_getInt(charaindex,CHAR_BASEBASEIMAGENUMBER));
    CHAR_setFlg(charaindex,CHAR_ISDIE,      0);
    CHAR_setFlg(charaindex,CHAR_ISATTACKED, 1);
    CHAR_setFlg(charaindex,CHAR_ISOVERED, 0);
    if( hp >= CHAR_getWorkInt(charaindex,CHAR_WORKMAXHP) )
        hp = CHAR_getWorkInt(charaindex,CHAR_WORKMAXHP);
    else if( hp <= 0 )
        hp = 1;
    CHAR_setInt(charaindex,CHAR_HP, hp);
}
예제 #7
0
void NPC_DoorPostOver( int meindex , int movedindex )
{
    if( CHAR_getWorkInt( meindex , CHAR_WORKDOORSOONFLG )){
        CHAR_setInt( meindex , CHAR_TALKCOUNT, 1 );
        CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );	/* 骚木卅仁允月 */
    }
}
예제 #8
0
BOOL NPC_OldmanInit( int meindex )
{

#if 0
    int     oldmanid=0, bornfl=0, bornx=0 ,borny=0;
    char*   npcarg;
    char    token[32]="";
/*    print( "長老的引數: '%s'\n" , CHAR_getChar(
                         meindex, CHAR_NPCARGUMENT ));*/
    npcarg = CHAR_getChar(meindex,CHAR_NPCARGUMENT);

    getStringFromIndexWithDelim( npcarg,"|",1,token,sizeof(token));
    oldmanid = atoi( token );
    getStringFromIndexWithDelim( npcarg,"|",2,token,sizeof(token));
    bornfl = atoi( token );
    getStringFromIndexWithDelim( npcarg,"|",3,token,sizeof(token));
    bornx = atoi( token );
    getStringFromIndexWithDelim( npcarg,"|",4,token,sizeof(token));
    borny = atoi( token );

    /* 贏  反ID毛創尹化雲仁瓜伉 */
    CHAR_setWorkInt( meindex , CHAR_WORKOLDMANID ,oldmanid );
    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEHEALER );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );
    CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );

    if( MAP_IsValidCoordinate( bornfl,bornx,borny )== TRUE
        /*  白夫失ID互中中井升丹井毛譬屯月  */
        &&
        CHAR_ElderSetPosition( oldmanid ,bornfl,bornx, borny ) 
        == TRUE ){
        /* 贏  及匏  毛賡渝祭允月卅曰 */
        return TRUE;
    }else{
        printf( "Invalid elder npcarg=%s\n", npcarg );
        
        /* 丐引曰卞褐邰卅巨仿□卅及匹}neverMake仄卅中〔
             莢巨仿□丟永本□斥請今六月 */
        return FALSE;
    }
#endif

	return FALSE;

}
예제 #9
0
/*
 * ½é´ü²½¤¹¤ë¡e
 */
BOOL NPC_SimpleShopInit( int meindex )
{
    unsigned int mlevel;
    char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE];
    char *npcarg;

    /* °ì²ó¼º  ¤·¤¿¤¢¤È¤Ï2Å٤Ⱥî¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë */
    int createindex = CHAR_getInt( meindex, CHAR_NPCCREATEINDEX );

/*    print("shopinit start\n" );*/
    if( NPC_CHECKCREATEINDEX(createindex) ){
        NPC_create[createindex].intdata[NPC_CREATETIME] = -1;
    }

    CHAR_setInt( meindex , CHAR_HP , 0 );
    CHAR_setInt( meindex , CHAR_MP , 0 );
    CHAR_setInt( meindex , CHAR_MAXMP , 0 );
    CHAR_setInt( meindex , CHAR_STR , 0 );
    CHAR_setInt( meindex , CHAR_TOUGH, 0 );
    CHAR_setInt( meindex , CHAR_LV , 0 );
    mlevel = ((100<<16)|(100<<0)); /* ¾å°Ì2¥Ð¥¤¥È¤¬  ¤¦¤È¤­¤Î    ¡b
                                    ²¼°Ì2¥Ð¥¤¥È¤¬  ¤ë¤È¤­¤Î    ¡e */
    CHAR_setInt( meindex, CHAR_MERCHANTLEVEL, mlevel );

    CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, -1 );

    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESHOP );
    CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );

    npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1));

    /* ¥¢¥¤  ¥à  ¤¿¤»¤ë¡e¼º  ¤·¤¿¤éreturn FALSE */
    if( ! NPC_SimpleShopFillItem( meindex,npcarg ) ){
        print( "SHOP INIT ERROR: npcarg=%s\n", npcarg );
        return FALSE;
    }

/*    print("shopinit end\n" );*/


    return TRUE;
}
예제 #10
0
BOOL NPC_AlldomanInit( int meindex )
{
	if( loadherolist == 0){
		loadherolist = 1;
		saacproto_UpdataStele_send ( acfd , "FirstLoad", "LoadHerolist" , "华义" , 0 , 0 , 0 , 999 ) ; 
	}
    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEALLDOMAN);
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );
    return TRUE;
}
예제 #11
0
BOOL NPC_SimpleShopInit( int meindex )
{
    unsigned int mlevel;
    char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];


    int createindex = CHAR_getInt( meindex, CHAR_NPCCREATEINDEX );

/*    print("shopinit start\n" );*/
    if( NPC_CHECKCREATEINDEX(createindex) ){
        NPC_create[createindex].intdata[NPC_CREATETIME] = -1;
    }

    CHAR_setInt( meindex , CHAR_HP , 0 );
    CHAR_setInt( meindex , CHAR_MP , 0 );
    CHAR_setInt( meindex , CHAR_MAXMP , 0 );
    CHAR_setInt( meindex , CHAR_STR , 0 );
    CHAR_setInt( meindex , CHAR_TOUGH, 0 );
    CHAR_setInt( meindex , CHAR_LV , 0 );
    mlevel = ((100<<16)|(100<<0)); /* ÏþÞË2ÌïÄÌÐþ»¥  µ¤ÎçÎå¼°    £ý
                                    ƱÞË2ÌïÄÌÐþ»¥  ÔÂÎçÎå¼°    £Û */
    CHAR_setInt( meindex, CHAR_MERCHANTLEVEL, mlevel );

    CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, -1 );

    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESHOP );
    CHAR_setFlg( meindex , CHAR_ISOVERED , 0 );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );

    NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg));

    if( ! NPC_SimpleShopFillItem( meindex,npcarg ) ){
        print( "SHOP INIT ERROR: npcarg=%s\n", npcarg );
        return FALSE;
    }

/*    print("shopinit end\n" );*/


    return TRUE;
}
예제 #12
0
/*********************************
* 賡渝質  
*********************************/
BOOL NPC_SysinfoInit( int meindex )
{
	int tmp;
	char	argstr1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *argstr;
    char	buff[128];

    argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1));

	CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 0);

	/* 由旦伐□玉本永玄 */
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "passwd", buff, sizeof( buff))
		== NULL)
	{
		strcpy( buff, NPC_SYSINFO_PASSWD_DEFAULT);
	}
	CHAR_setWorkChar( meindex, CHAR_WORKCHAR_PASSWD, buff);


	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "time");
	if( tmp == -1 ) tmp = NPC_SYSINFO_TIMELIMIT_DEFAULT;
	CHAR_setWorkInt( meindex, CHAR_WORK_TIMELIMIT, tmp);

    /* 丟永本□斥及縉潸   */
	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "msg_col");
	if( tmp < CHAR_COLORRED || tmp > CHAR_COLORWHITE )
		tmp = CHAR_COLORYELLOW;
	CHAR_setWorkInt( meindex, CHAR_WORK_MSGCOLOR, tmp);

	CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER, -1);
	CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNTIME, 0);
	CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNDSPTIME, 0);
    CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEOTHERNPC);
	CHAR_setFlg( meindex, CHAR_ISATTACKED, 0);

	return TRUE;
}
예제 #13
0
/*
 * 玉失日仄中涩烂毛允月卞反}仇仇匹
 * maxhp , maxmp , level , str , tough 毛0卞允月午方中[
 *
 */
int NPC_DoorInit( int meindex )
{
    char arg[NPC_UTIL_GETARGSTR_BUFSIZE];
    char settingdir[1024];
    char buf[256];

    NPC_Util_GetArgStr( meindex, arg, sizeof( arg));
    CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE,CHAR_EVENT_NPC);

    getStringFromIndexWithDelim(arg, "|" , 1 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOOROPENG , atoi( buf ));
    getStringFromIndexWithDelim(arg, "|" , 2 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSEG , atoi( buf ));
    getStringFromIndexWithDelim(arg, "|" , 3 , buf,sizeof(buf) );
    CHAR_setWorkChar( meindex , CHAR_WORKDOORNAME , buf );
    strcpysafe( settingdir,sizeof( settingdir) , buf );
    getStringFromIndexWithDelim(arg, "|" , 4 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORSWITCHCOUNT , atoi( buf ));
    getStringFromIndexWithDelim(arg, "|" , 5 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSETIME , atoi( buf ));

    CHAR_setInt( meindex , CHAR_MERCHANTLEVEL , atoi( buf ));
    getStringFromIndexWithDelim(arg, "|" , 6 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORSOONFLG , atoi( buf ));

    getStringFromIndexWithDelim(arg, "|" , 7 , buf,sizeof(buf) );
    CHAR_setWorkInt( meindex , CHAR_WORKDOORPASSFLG , atoi( buf ));
    CHAR_setWorkInt( meindex , CHAR_WORKDOORORIGINALGRAPHIC,
                     CHAR_getInt( meindex,CHAR_BASEIMAGENUMBER ));
    CHAR_setInt( meindex, CHAR_LV, 0 );
    if( getStringFromIndexWithDelim( arg , "|" , 8 , buf ,sizeof( buf ))){
        if( strncmp( buf , "title" ,5 ) == 0 ){
            print( "This is a title door:'%s'\n" , buf );
            CHAR_setWorkInt( meindex , CHAR_WORKDOORPASSFLG ,0 );
            CHAR_setWorkChar( meindex , CHAR_WORKDOORTITLE , buf );
            CHAR_setInt( meindex, CHAR_LV, 1 );
        } else if( isdigit( buf[0] )){
            if( getStringFromIndexWithDelim(arg, "|" , 8 , buf,sizeof(buf) ))
                CHAR_setWorkChar( meindex, CHAR_WORKDOORGOLDLIMIT, buf);
            if( getStringFromIndexWithDelim(arg, "|" , 10 , buf,sizeof(buf) ))
                CHAR_setWorkChar( meindex, CHAR_WORKDOORWEEK, buf);
            if( getStringFromIndexWithDelim(arg, "|" , 11 , buf,sizeof(buf) ))
                CHAR_setWorkChar( meindex, CHAR_WORKDOORHOUR, buf);
            if( getStringFromIndexWithDelim(arg, "|" , 12 , buf,sizeof(buf) ))
                CHAR_setWorkChar( meindex, CHAR_WORKDOORMINUTE, buf);
        }
    }

    CHAR_setInt( meindex , CHAR_HP , 0 );
    CHAR_setInt( meindex , CHAR_MP , 0 );
    CHAR_setInt( meindex , CHAR_MAXMP , 0 );
    CHAR_setInt( meindex , CHAR_STR , 0 );
    CHAR_setInt( meindex , CHAR_TOUGH, 0 );
    {
        int g = CHAR_getWorkInt( meindex , CHAR_WORKDOOROPENG );
        if( g >= 11900 && g <= 11915 ){
            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , 15 );
        } else if( g >= 11916 && g <= 11931 ){

            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , 16 );
        } else {
            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , -1 );
        }
        if(CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG )==2){
            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , -2 );
        }
        if( CHAR_getInt( meindex , CHAR_BASEIMAGENUMBER ) ==
            ROPEGRAPHIC ){
            CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID,-2 );
        }
    }

    {
        int closeg = CHAR_getWorkInt( meindex , CHAR_WORKDOORCLOSEG );
        int dir = -1;
        switch( closeg ){
            case 11900: dir = 6; break;  /* 霁及玉失 夫分曰仄凶 */
            case 11902: dir = 0; break;  /*          夫分曰丹尹 */
            case 11904: dir = 2; break;  /*          心亢丹尹 */
            case 11906: dir = 4; break;  /*          心亢仄凶 */

            case 11908: dir = 6; break;  /* 赢中霁及玉失 夫分曰仄凶 */
            case 11910: dir = 0; break;  /*              夫分曰丹尹 */
            case 11912: dir = 2; break;  /*              心亢丹尹 */
            case 11914: dir = 4; break;  /*              心亢仄凶 */

            case 11916: dir = 6; break;  /* 嗡及玉失 夫分曰仄凶 */
            case 11918: dir = 0; break;  /*          夫分曰丹尹 */
            case 11920: dir = 2; break;  /*          心亢丹尹 */
            case 11922: dir = 4; break;  /*          心亢仄凶 */

            case 11924: dir = 6; break;  /* 赢中嗡及玉失 夫分曰仄凶 */
            case 11926: dir = 0; break;  /*              夫分曰丹尹 */
            case 11928: dir = 2; break;  /*              心亢丹尹 */
            case 11930: dir = 4; break;  /*              心亢仄凶 */

            case 11958: dir = 2; break;  /* 赢中  及玉失 心亢丹尹 */
            case 11960: dir = 4; break;  /*              心亢仄凶 */
            case 11962: dir = 6; break;  /*              夫分曰仄凶 */
            case 11964: dir = 0; break;  /*              夫分曰丹尹 */

            case 11966: dir = 2; break;  /*   及玉失 心亢丹尹 */
            case 11968: dir = 4; break;  /*          心亢仄凶 */
            case 11970: dir = 6; break;  /*          夫分曰仄凶 */
            case 11972: dir = 0; break;  /*          夫分曰丹尹 */

            case 11978: dir = 2; break;  /* 赢中嗯及玉失 心亢丹尹 */
            case 11980: dir = 4; break;  /*              心亢仄凶 */
            case 11982: dir = 6; break;  /*              夫分曰仄凶 */
            case 11984: dir = 0; break;  /*              夫分曰丹尹 */

            case 11986: dir = 2; break;  /* 嗯及玉失 心亢丹尹 */
            case 11988: dir = 4; break;  /*          心亢仄凶 */
            case 11990: dir = 6; break;  /*          夫分曰仄凶 */
            case 11992: dir = 0; break;  /*          夫分曰丹尹 */

            default: break;
        }
        if( dir >= 0 )CHAR_setInt(meindex,CHAR_DIR,dir);
    }

    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEDOOR );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );
    CHAR_setInt( meindex , CHAR_WORKDOORSWITCHCURRENT , 0 );
    CHAR_setWorkInt( meindex, CHAR_WORKDOOREXPIRETIME, 0xffffffff);
    if( CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG ) == 1){
        NPC_ROOMINFO roominfo;
        if( NPC_RoomAdminNew_ReadFile( CHAR_getWorkChar( meindex, CHAR_WORKDOORNAME), &roominfo) == TRUE ){
            NPC_DoorSetPasswd( meindex, roominfo.passwd);
            CHAR_setWorkInt( meindex, CHAR_WORKDOOREXPIRETIME, roominfo.expire);
        }else {
            NPC_DoorSetPasswd( meindex, "8hda8iauia90494jasd9asodfasdf89" );
            if( getStringFromIndexWithDelim(arg, "|" , 13 , buf,sizeof(buf) ))
            if( strlen( buf) != 0 )
                NPC_DoorSetPasswd( meindex, buf );
        }
    }

    CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER , CHAR_getWorkInt(meindex, CHAR_WORKDOORCLOSEG));
    NPC_DoorRefreshOverFlg( meindex );
    CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_NPC);
    return TRUE;
}
예제 #14
0
/*-------------------------------------
	  ºÝ¤ËÂÑµ×  ¤Èµ¤  ¤ò²óÉü¤µ¤»¤ë¤È¤³¤í
---------------------------------------*/
void NPC_WindowHealerAllHeal( int talker,int mode )
{
	int i;
	int petindex;
	char petsend[64];	
	char msgbuf[64];

	/*--ÂÑµ×  ¤Î¤ß²óÉü--*/
	if(mode==1){
		/*--HP¤¬ÂÑµ×  ¤Ê¤Î¤Ç¤¢¤ë--*/
    	CHAR_setInt( talker , CHAR_HP ,CHAR_getWorkInt( talker, CHAR_WORKMAXHP ) );
	}else if(mode==2){
		/*--µ¤  ¤Î¤ß²óÉü--*/
		/*--MP¤¬µ¤  ¤Ê¤Î¤Ç¤¢¤ë--*/
    	CHAR_setInt( talker , CHAR_MP ,CHAR_getWorkInt( talker, CHAR_WORKMAXMP ) );
	}else if(mode==3){
    	/*--Á´²óÉü---*/
    	CHAR_setInt( talker , CHAR_HP ,CHAR_getWorkInt( talker, CHAR_WORKMAXHP ) );
    	CHAR_setInt( talker , CHAR_MP ,CHAR_getWorkInt( talker, CHAR_WORKMAXMP ) );
	}

	/*--¥Ú¥Ã¥È¤Ï¶³¤Þ¤±¤Ç²óÉü¤·¤Æ¤¢¹²¤ë--*/
	for(i=0;i<CHAR_MAXPETHAVE;i++){
    	petindex = CHAR_getCharPet(talker,i);

		if( petindex == -1  )  continue;

	   /*  ¥­¥ã¥é¤Î    ¥Á¥§¥Ã¥¯    */
		if( !CHAR_CHECKINDEX( talker ) )  continue;

		/*--²óÉü--*/
		CHAR_setFlg( petindex,CHAR_ISDIE,0 );
		CHAR_setInt( petindex , CHAR_HP ,CHAR_getWorkInt( petindex, CHAR_WORKMAXHP ) );
		CHAR_setInt( petindex , CHAR_MP ,CHAR_getWorkInt( petindex, CHAR_WORKMAXMP ) );

		/*--¥Ñ¥é¥á¡¼¥¿Ä´À°--*/
		CHAR_complianceParameter( petindex );
		sprintf( petsend, "K%d", i );
		CHAR_sendStatusString( talker , petsend );

	}

	/*--¥Ñ¥é¥á¡¼¥¿Á÷¤ê--*/
	CHAR_send_P_StatusString(talker,CHAR_P_STRING_HP);
	CHAR_send_P_StatusString(talker,CHAR_P_STRING_MP);


	/*---Ãç´Ö¤¬¤¤¤ì¤ÐÃç´Ö¤Ë¤âÁ÷¿®--*/
	if(CHAR_getWorkInt( talker, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE )
	{
		int	topartyarray = -1;
		int	oyaindex = CHAR_getWorkInt( talker	, CHAR_WORKPARTYINDEX1);

		if( CHAR_CHECKINDEX( oyaindex )) {
			int		i;
		
			/* ¼«Ê¬¤È¼£¤·¤¿¤ä¤Ä¤ÎÃç´Ö¤Î    ¤Î¾ì½ê¤ò¼è   */
			for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
				int workindex = CHAR_getWorkInt( oyaindex, CHAR_WORKPARTYINDEX1 +i);
		
				if( CHAR_CHECKINDEX( workindex) ) {
					if( workindex == talker ) {
						topartyarray = i;
						break;
					}
				}
			}
		
			for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
				int otherindex = CHAR_getPartyIndex( talker, i);
		
				/* Ãç´Ö¥Ñ¥é¥á¡¼¥¿¤òÁ÷¤ë */
				if( CHAR_CHECKINDEX( otherindex) ) {
					snprintf( msgbuf, sizeof( msgbuf), "N%d", topartyarray);
					if( otherindex != talker) {
						CHAR_sendStatusString( otherindex, msgbuf);
					}
				}
			}
		}
	}

}
예제 #15
0
/*-------------------------------------
	  端卞覲菁  午竣  毛莢汊今六月午仇欠
---------------------------------------*/
void NPC_WindowHealerAllHeal( int talker,int mode )
{
	int i;
	int petindex;
	char petsend[64];	
	char msgbuf[64];

	/*--覲菁  及心莢汊--*/
	if(mode==1){
		/*--HP互覲菁  卅及匹丐月--*/
    	CHAR_setInt( talker , CHAR_HP ,CHAR_getWorkInt( talker, CHAR_WORKMAXHP ) );
	}else if(mode==2){
		/*--竣  及心莢汊--*/
		/*--MP互竣  卅及匹丐月--*/
    	CHAR_setInt( talker , CHAR_MP ,CHAR_getWorkInt( talker, CHAR_WORKMAXMP ) );
	}else if(mode==3){
    	/*--蟈莢汊---*/
    	CHAR_setInt( talker , CHAR_HP ,CHAR_getWorkInt( talker, CHAR_WORKMAXHP ) );
    	CHAR_setInt( talker , CHAR_MP ,CHAR_getWorkInt( talker, CHAR_WORKMAXMP ) );
	}

	/*--矢永玄反雲引仃匹莢汊仄化丐僕月--*/
	for(i=0;i<CHAR_MAXPETHAVE;i++){
    	petindex = CHAR_getCharPet(talker,i);

		if( petindex == -1  )  continue;

	   /*  平乓仿及    民尼永弁    */
		if( !CHAR_CHECKINDEX( talker ) )  continue;

		/*--莢汊--*/
		CHAR_setFlg( petindex,CHAR_ISDIE,0 );
		CHAR_setInt( petindex , CHAR_HP ,CHAR_getWorkInt( petindex, CHAR_WORKMAXHP ) );
		CHAR_setInt( petindex , CHAR_MP ,CHAR_getWorkInt( petindex, CHAR_WORKMAXMP ) );

		/*--由仿丟□正譬幫--*/
		CHAR_complianceParameter( petindex );
		sprintf( petsend, "K%d", i );
		CHAR_sendStatusString( talker , petsend );

	}

	/*--由仿丟□正霜曰--*/
	CHAR_send_P_StatusString(talker,CHAR_P_STRING_HP);
	CHAR_send_P_StatusString(talker,CHAR_P_STRING_MP);


	/*---醮棉互中木壬醮棉卞手霜耨--*/
	if(CHAR_getWorkInt( talker, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE )
	{
		int	topartyarray = -1;
		int	oyaindex = CHAR_getWorkInt( talker	, CHAR_WORKPARTYINDEX1);

		if( CHAR_CHECKINDEX( oyaindex )) {
			int		i;
		
			/* 憤坌午慫仄凶支勾及醮棉及    及樺赭毛潸   */
			for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
				int workindex = CHAR_getWorkInt( oyaindex, CHAR_WORKPARTYINDEX1 +i);
		
				if( CHAR_CHECKINDEX( workindex) ) {
					if( workindex == talker ) {
						topartyarray = i;
						break;
					}
				}
			}
		
			for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
				int otherindex = CHAR_getPartyIndex( talker, i);
		
				/* 醮棉由仿丟□正毛霜月 */
				if( CHAR_CHECKINDEX( otherindex) ) {
					snprintf( msgbuf, sizeof( msgbuf), "N%d", topartyarray);
					if( otherindex != talker) {
						CHAR_sendStatusString( otherindex, msgbuf);
					}
				}
			}
		}
	}

}
예제 #16
0
/*------------------------------------------------------------
 * 啖  允月[
 * 娄醒
 *  index       int     平乓仿及奶件犯永弁旦
 *  dir         int       轾
 * 忒曰袄
 *  CHAR_WALKRET
 ------------------------------------------------------------*/
static CHAR_WALKRET CHAR_walk_move( int charaindex, int dir )
{
    int     i;
    int     fx,fy,ff;
    int     ox,oy,of;
    int     objbuf[128];
    int     objbufindex=0;
    int     notover=FALSE;
    int     retvalue=CHAR_WALKSUCCESSED;

    if( !CHAR_CHECKINDEX( charaindex )) return CHAR_WALKSYSTEMERROR;
    ox = CHAR_getInt(charaindex,CHAR_X);
    oy = CHAR_getInt(charaindex,CHAR_Y);
    of = CHAR_getInt(charaindex,CHAR_FLOOR);
    CHAR_getCoordinationDir( dir,ox,oy,1,&fx,&fy);
    ff = of;

    if( CHAR_getInt( charaindex,CHAR_WHICHTYPE ) == CHAR_TYPEENEMY ){
        RECT    walkr;
        POINT   nextp;
        int npccreateindex;
        npccreateindex = CHAR_getInt( charaindex,CHAR_NPCCREATEINDEX );
        if( CHAR_isInvincibleArea( ff,fx,fy)) {
            CHAR_setInt(charaindex,CHAR_DIR,dir);
            retvalue = CHAR_WALKEXTEND;
            goto CHAR_AFTERWALK;
        }
        if( NPC_isBoundarySet( npccreateindex ) &&
            NPC_createGetRECT( npccreateindex,&walkr ) == TRUE )
        {
            nextp.x = fx;
            nextp.y = fy;
            if( PointInRect( &walkr,&nextp ) == FALSE ){
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALKEXTEND;
                goto CHAR_AFTERWALK;
            }
        }else{
            ;
        }
    }


    if( CHAR_getFlg( charaindex, CHAR_ISBIG ) == 1 ){
        static POINT offset[5]={
            { 0,-1},
            {-1, 0},
            { 0, 0},
            { 1, 0},
            { 0, 1},
        };
        int     k;
        for( k=0 ; k<5; k++ ){
            if( !MAP_walkAble( charaindex, ff, fx+offset[k].x,
                               fy+offset[k].y )){
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALK1357;
                goto CHAR_AFTERWALK;
            }
        }

    }else{
        if( CHAR_getDX(dir)*CHAR_getDY(dir) == 0 ){
            if( !MAP_walkAble( charaindex,ff, fx, fy ) ){
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALK1357;
                goto CHAR_AFTERWALK;
            }
        }else{
            int     xflg,yflg;
            if( !MAP_walkAble( charaindex,ff, fx, fy ) ){
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALK1357;
                goto CHAR_AFTERWALK;
            }

            xflg = MAP_walkAble( charaindex,of, ox+CHAR_getDX(dir), oy );
            yflg = MAP_walkAble( charaindex,of, ox, oy+CHAR_getDY(dir) );

            if( !xflg || !yflg ) {
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALK1357;
                goto CHAR_AFTERWALK;
            }
        }
    }
    objbufindex = CHAR_getSameCoordinateObjects( objbuf, arraysizeof( objbuf ), ff,fx,fy );
    for( i = 0 ; i < objbufindex ; i ++ ){
        int     objindex= objbuf[i];
        switch( OBJECT_getType(objindex) ){
        case OBJTYPE_CHARA:
            if( !CHAR_getFlg( OBJECT_getIndex(objindex),CHAR_ISOVERED) ){
            	if(!CHAR_CHECKINDEX(OBJECT_getIndex(objindex))){
	            	printf("自动删除一个问题对象!");
	        			endObjectOne(objindex);
	        			break;
	        		}
              notover= TRUE;
            }
            break;
        case OBJTYPE_ITEM:
            if( !ITEM_getInt( OBJECT_getIndex(objindex), ITEM_ISOVERED ) )
                notover= TRUE;
            break;
        case OBJTYPE_GOLD:
            break;
        default:
            break;
        }
    }
    if( notover == TRUE ){
        CHAR_setInt(charaindex,CHAR_DIR,dir);
        retvalue = CHAR_WALKHITOBJECT;
    }else{
        for( i = 0 ; i < objbufindex ; i ++ ){
            typedef void (*PREOFUNC)(int,int);
            PREOFUNC   pfunc=NULL;
            int     objindex=objbuf[i];
            switch( OBJECT_getType(objindex) ){
            case OBJTYPE_CHARA:
                pfunc = (PREOFUNC)CHAR_getFunctionPointer(
                    OBJECT_getIndex(objindex),
                    CHAR_PREOVERFUNC);
                break;
            case OBJTYPE_ITEM:
                pfunc = (PREOFUNC)ITEM_getFunctionPointer(
                    OBJECT_getIndex(objindex),
                    ITEM_PREOVERFUNC);
                break;
            case OBJTYPE_GOLD:
                break;
            default:
                break;
            }
            if( pfunc )pfunc( OBJECT_getIndex(objindex),charaindex );
        }

        CHAR_setInt(charaindex,CHAR_X,fx);
        CHAR_setInt(charaindex,CHAR_Y,fy);
        CHAR_setInt(charaindex,CHAR_FLOOR,ff);
        CHAR_setInt(charaindex,CHAR_DIR,dir);

        {
            int objindex;
            int ox,oy,of;
            objindex = CHAR_getWorkInt( charaindex,CHAR_WORKOBJINDEX );
            of = OBJECT_setFloor(objindex,
                                 CHAR_getInt(charaindex,CHAR_FLOOR));
            ox = OBJECT_setX(objindex,CHAR_getInt(charaindex,CHAR_X));
            oy = OBJECT_setY(objindex,CHAR_getInt(charaindex,CHAR_Y));
            if( !MAP_objmove( objindex, of,ox,oy,ff,fx,fy ) ){
                /*  仇氏卅氏升丹仄方丹手卅中    */
                fprint( "ERROR MAP_OBJMOVE objindex=%d(%s)\n",objindex,
                	CHAR_getUseName( charaindex ) );
            }
        }

        CHAR_setInt(charaindex,CHAR_WALKCOUNT,
                    CHAR_getInt(charaindex,CHAR_WALKCOUNT) + 1 );


        for( i = 0 ; i < objbufindex ; i ++ ){
            typedef void (*POSTOFUNC)(int,int);
            POSTOFUNC   pfunc=NULL;
            int     objindex=objbuf[i];

            switch( OBJECT_getType(objindex) ){
            case OBJTYPE_CHARA:
                pfunc = (POSTOFUNC)CHAR_getFunctionPointer(
                    OBJECT_getIndex(objindex),
                    CHAR_POSTOVERFUNC);
                break;
            case OBJTYPE_ITEM:
                pfunc = (POSTOFUNC)ITEM_getFunctionPointer( OBJECT_getIndex(objindex), ITEM_POSTOVERFUNC);
                break;
            case OBJTYPE_GOLD:
                break;
            default:
                break;
            }
            if( pfunc )pfunc( OBJECT_getIndex(objindex),charaindex );
        }
        objbufindex = CHAR_getSameCoordinateObjects(objbuf, arraysizeof(objbuf), of, ox, oy );
        for( i=0 ;i<objbufindex;i++){
            typedef void (*OFFFUNC)(int,int);
            OFFFUNC   ofunc=NULL;
            int     objindex = objbuf[i];

            switch( OBJECT_getType( objindex ) ){
            case OBJTYPE_CHARA:
                ofunc = (OFFFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex), CHAR_OFFFUNC);
                break;
            case OBJTYPE_ITEM:
                /*    卞窒手仄卅中  */
                break;
            case OBJTYPE_GOLD:
                /*    卞窒手仄卅中  */
                break;
            default:
                break;
            }
            if( ofunc )ofunc( OBJECT_getIndex(objindex), charaindex );

        }
    }
CHAR_AFTERWALK:
    if( retvalue == CHAR_WALK1357 || retvalue == CHAR_WALKHITOBJECT ){
	    {
	        int     opt[2] = { ox, oy};
	        CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex,
	                                             CHAR_WORKOBJINDEX),
	                             CHAR_ACTWALK,opt,2,TRUE );
	    }
        CHAR_setWorkChar( charaindex, CHAR_WORKWALKARRAY, "");
		if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) {
		    CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX),
    		                     CHAR_ACTWARP,NULL,0,TRUE);
		}
    }else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){

		BOOL	flg = FALSE;
		int		par;
		int		count;
		CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1 );
		if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE ){
			CHAR_sendCharaAtWalk( charaindex, of,ox,oy,CHAR_getDX(dir), CHAR_getDY(dir));
		}

	    {
	        int     opt[2] = { ox, oy};
	        CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex,
	                                             CHAR_WORKOBJINDEX),
	                             CHAR_ACTWALK,opt,2,TRUE );
	    }
		if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) {
			CHAR_sendMapAtWalk( charaindex, of,
								ox,oy,
								CHAR_getInt( charaindex, CHAR_X),
								CHAR_getInt( charaindex, CHAR_Y));
		}
		count = CHAR_getWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT);
		if( count > 0 ) {
			CHAR_setWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT, count -1);
			if( count -1 == 0 ) {
				CHAR_talkToCli( charaindex, -1, "道具的效力已到。", CHAR_COLORWHITE);
			}
		}
		par = ENCOUNT_getEncountPercentMin( charaindex, of,ox,oy);
		if( par != -1 ) {
			if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN) != par ){
				flg = TRUE;
				CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, par);
			}
		}

		par = ENCOUNT_getEncountPercentMax( charaindex, of,ox,oy);
		if( par != -1 ) {
			if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX) != par ){
				flg = TRUE;
				CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX, par);
			}
		}
		// Arminius 7.12 login announce
		/*
		{
		  int enfd = getfdFromCharaIndex( charaindex );
		  if (CONNECT_get_announced(enfd)==0) {
		    // Robin 0720
		    //AnnounceToPlayer(charaindex);
		    AnnounceToPlayerWN( enfd );
		    CONNECT_set_announced(enfd,1);
		  }
		}
		*/
		// Arminius 6.22 check Encounter
		// Nuke 0622: Provide No Enemy function
		{
		  int enfd = getfdFromCharaIndex( charaindex );
		  int eqen = getEqNoenemy( enfd );	// Arminius 7.2: Ra's amulet
		  int noen = getNoenemy(enfd);

          // Arminius 7.31 cursed stone
      if (getStayEncount(enfd)>0) {
			  clearStayEncount(enfd);
		  }
		  //print("\n enfd=%d,eqen=%d,noen=%d", enfd, eqen, noen);

		  // Arminius 7.2 Ra's amulet
		  if (eqen>=200) {
		    noen=1;
		  } else if (eqen>=120) {
		    if ((ff==100)||(ff==200)||(ff==300)||(ff==400)||(ff==500)) noen=1;
		  } else if (eqen>=80) {
		    if ((ff==100)||(ff==200)||(ff==300)||(ff==400)) noen=1;
		  } else if (eqen>=40) {
		    if ((ff==100)||(ff==200)) noen=1;
		  }


		  //print("\n noen=%d", noen);
		  if (noen==0) {
				int maxep = CHAR_getWorkInt(charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX);
		    int minep = CHAR_getWorkInt(charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN);
		    int cep = CONNECT_get_CEP(enfd);

		    if (cep<minep) cep=minep;
		    if (cep>maxep) cep=maxep;
		    if (CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE)==BATTLE_CHARMODE_NONE) {
				int entflag=1;
				{
					int objindex,index;
					OBJECT obj;
					for ( obj = MAP_getTopObj( ff, fx, fy); obj; obj = NEXT_OBJECT( obj)) {
						objindex = GET_OBJINDEX( obj);
						if (OBJECT_getType( objindex) == OBJTYPE_CHARA) {
							int etype;
							index = OBJECT_getIndex( objindex);
							if (!CHAR_CHECKINDEX( index)) continue;
							if( CHAR_getInt( index, CHAR_WHICHTYPE) == CHAR_TYPENPCENEMY &&
								CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE) == CHAR_EVENT_ENEMY )	{
								CHAR_setInt( charaindex, CHAR_X, ox);
								CHAR_setInt( charaindex, CHAR_Y, oy);
								lssproto_XYD_send( getfdFromCharaIndex(charaindex),
								CHAR_getInt( charaindex, CHAR_X ),
								CHAR_getInt( charaindex, CHAR_Y ),
								CHAR_getInt( charaindex, CHAR_DIR ) );
								break;
							}
							etype = CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE);
							if (etype!=CHAR_EVENT_NONE) {
								if (etype==CHAR_EVENT_WARP) entflag=0;
							}
						}
					}
				}
#ifdef _ENEMY_ACTION
				if( rand()%(120*getEnemyAction()) < cep ){
#else
		      if (rand()%120<cep){	// Arminius 6.28 lower encounter prob.
#endif
					if (entflag) {
#ifdef _Item_MoonAct
						if( getEqRandenemy( enfd) > 0 )	{
							int Rnum=0;
							int RandEnemy = getEqRandenemy( enfd);
							Rnum = RAND(0,100);
							if( Rnum > RandEnemy )	{
#endif
								//encounter!!
								cep = minep;
								lssproto_EN_recv(enfd,
								CHAR_getInt(charaindex,CHAR_X),
								CHAR_getInt(charaindex,CHAR_Y));
#ifdef _Item_MoonAct
							}
						}else{
								cep = minep;
								lssproto_EN_recv(enfd,
								CHAR_getInt(charaindex,CHAR_X),
								CHAR_getInt(charaindex,CHAR_Y));
						}
#endif
					}
		      } else {
		        if (cep<maxep) cep++;
		      }
		    }
		    CONNECT_set_CEP(enfd, cep);
		  }
		}
		if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE )!= CHAR_PARTY_CLIENT ){
			CHAR_setFlg( charaindex, CHAR_ISWARP, 0);
		}
    }
    else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ||
예제 #17
0
BOOL NPC_PetMakerInit( int meindex )
{
    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEPETMAKER );
    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );
    return TRUE;
}
예제 #18
0
BOOL NPC_WarpInit( int charaindex )
{
	char arg1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *arg;
    int ret;
    int floor=-1,x=-1,y=-1;
    char    token[128];

#ifdef _RECORD_NPCMAN_ //紀錄
	char evtype[256];
	char evtime[256];
	char argfile[256];

	if( NPC_Util_CheckAssignArgFile( charaindex, argfile) == NULL )
		sprintf( argfile, "NULL");
#endif

	CHAR_setInt( charaindex, CHAR_WHICHTYPE , CHAR_TYPEWARP );
    if((arg = NPC_Util_GetArgStr( charaindex, arg1, sizeof( arg1))) == NULL )	{
		print("\n GetArgStr ERR!!");
		return FALSE;
	}
#ifdef _NEW_WARPPOINT
	if( strstr( arg, "FREEMORE") != NULL )	{
#ifdef _RECORD_NPCMAN_ //紀錄
		sprintf( evtype, "FREE");
		sprintf( evtime, "NULL");
#endif
		CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
	}else	{
#endif
#ifdef _MAP_WARPPOINT
		return FALSE;
#endif
#ifdef _RECORD_NPCMAN_ //紀錄
		sprintf( evtype, "NONE");
#endif
		ret=getStringFromIndexWithDelim(arg,"|", 1,token,sizeof(token));
		if( ret ) floor = atoi( token );
		ret=getStringFromIndexWithDelim(arg,"|", 2,token,sizeof(token));
		if( ret ) x = atoi( token );
		ret=getStringFromIndexWithDelim(arg,"|", 3,token,sizeof(token));
		if( ret ) y = atoi( token );
		if( MAP_IsValidCoordinate( floor,x,y )== FALSE ){
			NPC_WarpsetNeverMake( charaindex );
			//print( "Warp NPC:Invalid arg:%s\n", arg );
			print( "Warp Npc Err:%d:%d:%d->(%s)\n",
        		CHAR_getInt( charaindex, CHAR_FLOOR ),
        		CHAR_getInt( charaindex, CHAR_X ),
        		CHAR_getInt( charaindex, CHAR_Y ),
        		arg );
			return FALSE;
		}
		ret=getStringFromIndexWithDelim(arg,"|",4,token,sizeof(token));
		if(ret==TRUE){
			int day;
			day=NPC_TimeWarpCheck(charaindex,token,0);
				if(day==0){
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "N");
#endif
					CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NIGHT);
				}else if(day==1){
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "M");
#endif
					CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_MORNING);
				}else if(day==2){
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "A");
#endif
					CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NOON);
				}else{
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "NULL");
#endif
					CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
				}
		}else{
#ifdef _RECORD_NPCMAN_ //紀錄
					sprintf( evtime, "NULL");
#endif
			CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP);
		}
#ifdef _NEW_WARPPOINT
	}
#endif
    CHAR_setFlg( charaindex,CHAR_ISVISIBLE, 0 );
    CHAR_setFlg( charaindex,CHAR_ISOVERED,1 );
    CHAR_setFlg( charaindex,CHAR_ISATTACKED,0 );
    CHAR_setFlg( charaindex,CHAR_ISATTACK,0 );

#ifdef _RECORD_NPCMAN_ //紀錄
	{
		FILE *fp=NULL;
		char filename[256];
		sprintf( filename,"./data/npc/%s", "mapwarp.txt");
		if( (fp = fopen( filename, "a+")) != NULL ) {
			fprintf( fp, "%s:%s:%d,%d,%d:%d,%d,%d:%s\n",
				evtype, evtime,
				CHAR_getInt( charaindex, CHAR_FLOOR),
				CHAR_getInt( charaindex, CHAR_X),
				CHAR_getInt( charaindex, CHAR_Y),
				floor, x, y, argfile );
			fclose( fp);
		}else {
		}
	}
#endif
    return TRUE;
}
예제 #19
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;
}
예제 #20
0
BOOL NPC_BlackMarketInit( int meindex)
{
	CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEWINDOWMAN);
	CHAR_setFlg( meindex, CHAR_ISATTACKED , 0);
	return TRUE;
}