Esempio n. 1
0
/*------------------------------------------------------------
 * Map 奶矛件玄及 pre post毛质  允月
 * 娄醒
 *  index       int     昙欠丹午仄化中月平乓仿及奶件犯永弁旦
 *  mode        BOOL    TRUE及凛反}in  FALSE及凛反 out 卞覆杀
 * 忒曰袄卅仄
 ------------------------------------------------------------*/
static void MAP_dealprepostevent( int index, BOOL mode )
{
    int     map[2];
    int     i;
    int     damaged=FALSE;

    if( CHAR_getFlg(index,CHAR_ISFLYING) )
        /*    氏匹月支勾卞反窒手仄卅中  */
        return;

    if( !MAP_getMapDataFromCharIndex( index  ,  map ) ) return;

    for( i = 0 ; i < 2 ; i ++ ){
        /*  damage */
        int damage;
        damage = MAP_getImageInt(map[i],
                                 mode ? MAP_INTODAMAGE : MAP_OUTOFDAMAGE);
        if( damage != 0 ){
            /*  母丢□斥汹毛恳匹  蜇允月及匹  寞  木赘尹    */
            int opt[2]={SPR_kmydamY,-damage};
            damaged=TRUE;
            CHAR_setInt(index, CHAR_HP,
                        CHAR_getInt(index,CHAR_HP) + damage );
            CHAR_complianceParameter(index);
            /*  母丢□斥熬仃凶巨白尼弁玄请允    */
            CHAR_sendWatchEvent(CHAR_getWorkInt(index,CHAR_WORKOBJINDEX),
                                CHAR_ACTDAMAGE,opt,2,TRUE);
        }
    }
    if( damaged )
    	CHAR_sendStatusString(index,"M");
}
Esempio n. 2
0
/*------------------------------------------------------------
 * 甄  毛隙爛仄化}公仇及左皮斥尼弁玄卞嫖今互丐月井升丹井
 * 婁醒
 *  fl              int     白夫失
 *  x               int     x 甄  
 *  y               int     y 甄  
 * 忒曰襖
 *  嫖今互丐月  TRUE
 *  嫖今互卅中  FALSE
 ------------------------------------------------------------*/
BOOL MAP_haveHeight( int fl, int x, int y )
{
    int     map[2];

    /*  穴永皿犯□正毛  化仁月  */
    if( !MAP_getTileAndObjData( fl,x,y, &map[0], &map[1] ) )
        return FALSE;

    return MAP_getImageInt( map[1], MAP_HAVEHEIGHT );
}
Esempio n. 3
0
/*------------------------------------------------------------
 * 洶仃月井升丹井  蠅允月〔平乓仿互  氏匹中月井升丹井婁醒互丐月〔
 * 婁醒
 *  ff          int     floor
 *  fx          int     x甄  
 *  fy          int     y甄  
 *  isfly       int       氏匹中月井升丹井
 * 忒曰襖
 *  洶仃月      TRUE(1)
 *  洶仃卅中    FALSE(0)
 ------------------------------------------------------------*/
BOOL MAP_walkAbleFromPoint( int ff, int fx, int fy, BOOL isfly )
{
    int map[2];

    if( !MAP_getTileAndObjData( ff,fx,fy, &map[0], &map[1] ) ){
        return FALSE;
	}

    if( isfly ){
        int i;
        for( i = 0 ; i < 2 ; i ++ )
            if( MAP_getImageInt( map[i], MAP_HAVEHEIGHT ) == TRUE  ){
                return FALSE;
			}
        return TRUE;
    }else{
        switch( MAP_getImageInt( map[1], MAP_WALKABLE ) ){
        case 0:
            return FALSE;
            break;
        case 1:
            if( MAP_getImageInt( map[0], MAP_WALKABLE ) == 1 ){
                return TRUE;
			}else{
                return FALSE;
			}
            break;
        case 2:
            return TRUE;
            break;
        default:
            return FALSE;
            break;
        }
    }

    return FALSE;
}
Esempio n. 4
0
/*----------------------------------------
 * 旦  □正旦  祭煙及  凳毛允月
 * 婁醒
 *  index   int     平乓仿及奶件犯永弁旦
 *  map     int     穴永皿犯□正
 *  outof   BOOL    褡戈凜}轉仁凜井 TRUE 卅日壬 褡戈凜匹丐月〔
 * 忒曰襖
 *  由仿丟□正  祭毛仄凶    TRUE
 *  由仿丟□正  祭毛仄卅井勻凶  FALSE
  ----------------------------------------*/
static BOOL MAP_changeCharStatusFromMapDataAndTime( int index,
                                                    int map, BOOL outof)
{
#if 0
// 旦玄□件巨奶斥匹反銀歹卅中
    int i;
    int offset;
    BOOL    change=FALSE;
    static struct tagStatusInteractionOfBitAndDefine{
        int     mapdataindex;
        int     charadataindex;
    }statusInteraction[]={
        {MAP_INTOPOISON,        CHAR_POISON},
        {MAP_INTOPARALYSIS,     CHAR_PARALYSIS},
        {MAP_INTOSILENCE,       CHAR_SLEEP},
        {MAP_INTOSTONE,         CHAR_STONE},
        {MAP_INTODARKNESS,      CHAR_DRUNK},
        {MAP_INTOCONFUSION,     CHAR_CONFUSION},

        {MAP_OUTOFPOISON,       CHAR_POISON},
        {MAP_OUTOFPARALYSIS,    CHAR_PARALYSIS},
        {MAP_OUTOFSILENCE,      CHAR_SLEEP},
        {MAP_OUTOFSTONE,        CHAR_STONE},
        {MAP_OUTOFDARKNESS,     CHAR_DRUNK},
        {MAP_OUTOFCONFUSION,    CHAR_CONFUSION},
    };

    if( outof == FALSE )offset = 6;
    else                offset= 0;
    int     newdata;
    for( i = 0 ; i < 6 ; i ++ ){
        newdata = MAP_getImageInt(map,statusInteraction[i+offset].
                                  mapdataindex);
        if( newdata > 0 ){
            change=TRUE;
            /*  旦  □正旦及澀爛    */
            CHAR_setInt( index,
                         statusInteraction[i+offset].charadataindex,
                         CHAR_getInt(index,
                                     statusInteraction[i+offset].
                                     charadataindex ) + newdata );
        }
    }
    return change;
#else
	return FALSE;
#endif
}
Esempio n. 5
0
/*------------------------------------------------------------
 * Map 奶矛件玄及 pre post毛質  允月
 * 婁醒
 *  index       int     曇欠丹午仄化中月平乓仿及奶件犯永弁旦
 *  mode        BOOL    TRUE及凜反}in  FALSE及凜反 out 卞覆殺
 * 忒曰襖卅仄
 ------------------------------------------------------------*/
static void MAP_dealprepostevent( int index, BOOL mode )
{
    int     map[2];
    int     i;
    int     damaged=FALSE,statuschange=FALSE;

    if( CHAR_getFlg(index,CHAR_ISFLYING) )
        /*    氏匹月支勾卞反窒手仄卅中  */
        return;

    if( !MAP_getMapDataFromCharIndex( index  ,  map ) ) return;
    /*  damage */
    int damage;
    for( i = 0 ; i < 2 ; i ++ ){
        damage = MAP_getImageInt(map[i],
                                 mode ? MAP_INTODAMAGE : MAP_OUTOFDAMAGE);
        if( damage != 0 ){
            /*  母丟□斥洶毛懇匹  蜇允月及匹  寞  木贅尹    */
            int opt[2]={SPR_kmydamY,-damage};
            damaged=TRUE;
            CHAR_setInt(index, CHAR_HP,
                        CHAR_getInt(index,CHAR_HP) + damage );
            CHAR_complianceParameter(index);
            /*  母丟□斥熬仃凶巨白尼弁玄請允    */
            CHAR_sendWatchEvent(CHAR_getWorkInt(index,CHAR_WORKOBJINDEX),
                                CHAR_ACTDAMAGE,opt,2,TRUE);
        }
        if( MAP_changeCharStatusFromMapDataAndTime(
            index,map[i], mode ? TRUE : FALSE ) )
            statuschange=TRUE;
    }
    if( damaged )       CHAR_sendStatusString(index,"M");
    if( statuschange ){
        CHAR_sendCToArroundCharacter(index);
        CHAR_sendStatusString(index,"P");
    }

}
Esempio n. 6
0
int MAP_readBattleMapConfFile(char *filename) {
  FILE *file;
  char line[512];

  int i, j;
  int linenum = 0;
  int BattleMapNo[3], iRet, iWork, iPre[3], iFirst, iLast;

  file = fopen(filename, "r");
  if(file == NULL) {
    fprint("无法打开 %s\n", filename);
    return FALSE;
  }

  BattleMapNo[0] = 0;
  BattleMapNo[1] = 0;
  BattleMapNo[2] = 0;
  while(fgets(line, sizeof(line), file)) {
    char *p;
    linenum++;

    pohcd(line, " \t");
    dchop(line, " \t");

    if(line[0] == '#')continue;
    if(line[0] == '\n')continue;
    chomp(line);

    if(line[0] == '$') {
      iRet = sscanf(line + 1, "%d %d %d", &iPre[0], &iPre[1], &iPre[2]);
      BattleMapNo[0] = BattleMapNo[1] = BattleMapNo[2] = iPre[0];
      if(iRet < 1) {
        print("!!!!!错误 无法读取战斗地图(%s)( line %d )\n", filename, linenum);
      }
      for(i = 0; i < iRet; i++) {
        BattleMapNo[i] = iPre[i];
        if(BattleMapNo[i] < 0) {
          print("!!!!!错误 战斗地图号码为负值 (%s)( line %d )\n", filename, linenum);
        }
      }

      continue;

    }
    if(sscanf(line, "%d", &iWork) != 1) {
      continue;
    }
    if(iWork < 0) {
      print("!!!!!错误 金钱号码为负值 (%s)( line %d )\n", filename, linenum);
      continue;
    }
    iFirst = iWork;
    p = strstr(line, "to");
    if(p != NULL) {
      if(sscanf(p + 2, "%d", &iWork) != 1) {
        iLast = iFirst;
      } else {
        iLast = iWork;
      }
      if(iWork < 0) {
        print("!!!!!错误 金钱号码为负值 (%s)( line %d )\n", filename, linenum);
        continue;
      }
    } else {
      iLast = iFirst;
    }

    for(i = iFirst; i <= iLast; i++) {
      if(MAP_getImageInt(i, MAP_SETED_BATTLEMAP) > 0) {
        print("!!!!!错误 相同金钱重复设定了两次(%s)( line %d )(%d)(%d & %d)\n",
              filename, linenum, i,
              MAP_getImageInt(i, MAP_BATTLEMAP),
              BattleMapNo[0]);
      }

      if(IsValidImagenumber(i) == FALSE) {
        continue;
      }
      MAP_setImageInt(i, MAP_BATTLEMAP, BattleMapNo[0]);
      MAP_setImageInt(i, MAP_BATTLEMAP2, BattleMapNo[1]);
      MAP_setImageInt(i, MAP_BATTLEMAP3, BattleMapNo[2]);
      MAP_setImageInt(i, MAP_SETED_BATTLEMAP, 1);
    }

  }
  fclose(file);

  for(j = 0; j < arraysizeof(MAP_imgfilt); j++) {
    if(MAP_imgfilt[j] == -1)continue;
    if(MAP_getImageInt(j, MAP_SETED_BATTLEMAP) == 0) {
      print("!!!!!错误 金钱(%d)尚未设定 (%s)\n", j, filename);
    }
  }
  return TRUE;
}
Esempio n. 7
0
BOOL MAP_readBattleMapConfFile( char* filename )
{
    FILE*   file;
    char    line[512];

    int     i, j;
    int     linenum=0;
	int 	BattleMapNo[3], iRet, iWork, iPre[3],iFirst, iLast;

    file = fopen( filename , "r" );
    if( file == NULL ){
        fprint( "Can't open %s\n", filename );
        return FALSE;
    }

	BattleMapNo[0] = 0;
	BattleMapNo[1] = 0;
	BattleMapNo[2] = 0;
    while( fgets( line , sizeof( line ) , file ) ){
        char    *p;
        linenum++;

        pohcd( line, " \t" );
        dchop(line, " \t");

        if( line[0] == '#' )continue;
        if( line[0] == '\n' )continue;
        chomp( line );

		if( line[0] == '$' ){
			iRet = sscanf( line+1, "%d %d %d", &iPre[0], &iPre[1], &iPre[2] );
			BattleMapNo[0] = BattleMapNo[1] = BattleMapNo[2] = iPre[0];
			if( iRet < 1 ){
				print( "!!!!!ERROR µLªkŪ¨ú¾Ô°«¦a¹Ï(%s)( line %d )\n", filename, linenum );
			}
			for( i = 0; i < iRet; i ++ ){
				BattleMapNo[i] = iPre[i];
				if( BattleMapNo[i] < 0 ){
					print( "!!!!!ERROR ¾Ô°«¦a¹Ï¸¹½X¬°­t­È (%s)( line %d )\n", filename, linenum );
				}
			}

			continue;

		}
		if( sscanf( line, "%d", &iWork ) != 1 ){
			continue;
		}
		if( iWork < 0 ){
			print( "!!!!!ERROR ª÷¿ú¸¹½X¬°­t­È (%s)( line %d )\n", filename, linenum );
			continue;
		}
		iFirst = iWork;
		p = strstr( line, "to" );
		if( p != NULL ){
			if( sscanf( p+2, "%d", &iWork ) != 1 ){
				iLast = iFirst;
			}else{
				iLast = iWork;
			}
			if( iWork < 0 ){
				print( "!!!!!ERROR ª÷¿ú¸¹½X¬°­t­È (%s)( line %d )\n", filename, linenum );
				continue;
			}
		}else{
			iLast = iFirst;
		}

		for( i = iFirst; i <= iLast; i ++ ){
			if( MAP_getImageInt( i, MAP_SETED_BATTLEMAP ) > 0 ){
				print( "!!!!!Warning ¬Û¦Pª÷¿ú­«½Æ³]©w¤F¨â¦¸(%s)( line %d )(%d)(%d & %d)\n",
					filename, linenum, i,
					MAP_getImageInt( i, MAP_BATTLEMAP ),
					BattleMapNo[0] );
			}

			//   Áü  ¹æÀµ¤·¤¤¤«¡ª
			if( IsValidImagenumber( i ) == FALSE ){
				continue;
			}
			MAP_setImageInt( i, MAP_BATTLEMAP,  BattleMapNo[0] );
			MAP_setImageInt( i, MAP_BATTLEMAP2, BattleMapNo[1] );
			MAP_setImageInt( i, MAP_BATTLEMAP3, BattleMapNo[2] );
			MAP_setImageInt( i, MAP_SETED_BATTLEMAP, 1 );
		}

    }
    fclose( file );

	for( j = 0; j < arraysizeof( MAP_imgfilt ); j ++ ){
		if( MAP_imgfilt[j] == -1 )continue;
		if( MAP_getImageInt( j, MAP_SETED_BATTLEMAP ) == 0 ){
			print( "!!!!!Error ª÷¿ú(%d)©|¥¼³]©w (%s)\n", j, filename );
		}
	}
    return TRUE;
}