📄 char_data.c.bak
字号:
ret = getStringFromIndexWithDelim( line, " ", 1, token, sizeof(token));
if( ret==FALSE ){
fprint("Syntax Error file:%s line:%d\n",filename,linenum);
continue;
}else{
static struct CHAR_charareakindtbl
{
char* idstring;
CHAR_AREAKIND kind;
}CHAR_areakindtbl[]={
{"INV", CHAR_INVAREA,},
{"ITM", CHAR_CANNOTDROPAREA,},
{"MAG", CHAR_CANNOTMAGICAREA,},
};
int i;
for( i=0 ; i<arraysizeof(CHAR_areakindtbl) ; i++ )
if( strcmp( token,CHAR_areakindtbl[i].idstring )==0 ){
kind = CHAR_areakindtbl[i].kind;
break;
}
if( kind == -1 ){
print( "\n资料范围问题: %d...",linenum );
continue;
}
}
CHAR_invarea[invreadlen].kind = kind;
ret = getStringFromIndexWithDelim( line, " ", 2, token, sizeof(token));
if( ret==FALSE ){
fprint("哪件秩序错误:%s 第%d行\n",filename,linenum);
continue;
}else
CHAR_invarea[invreadlen].floor = atoi( token );
ret = getStringFromIndexWithDelim( line, " ", 3, token, sizeof(token));
if( ret ==FALSE){
fprint("文件秩序错误:%s 第%d行:%d\n", filename, linenum);
continue;
}else
getFourIntsFromString( token,&lx,&ly,&rx,&ry );
if( lx > rx )swap(lx,rx);
if( ly > ry )swap(ly,ry);
CHAR_invarea[invreadlen].area.x = lx;
CHAR_invarea[invreadlen].area.y = ly;
CHAR_invarea[invreadlen].area.width = rx-lx;
CHAR_invarea[invreadlen].area.height= ry-ly;
invreadlen ++;
}
}
fclose(f);
CHAR_invareanum = invreadlen;
print( "有效不可战斗有效数是 %d...", CHAR_invareanum );
#if 0
{
int i,j;
for( i=0; i <CHAR_invareanum ; i++ ) {
if( CHAR_invarea[i].kind == CHAR_CANNOTMAGICAREA ) {
print( "fl[%d](%d,%d)-(%d,%d)\n",
CHAR_invarea[i].floor,
CHAR_invarea[i].area.x,CHAR_invarea[i].area.y,
CHAR_invarea[i].area.width,
CHAR_invarea[i].area.height );
for( j = 0; j < sizeof( CHAR_invarea[i].work); j ++ ) {
if( CHAR_invarea[i].work[j] == -1 )break;
print( "mag[%d] ", CHAR_invarea[i].work[j]);
}
print( "\n");
}
}
}
#endif
#ifdef DEBUG
{
int i;
for( i=0; i <CHAR_invareanum ; i++ )
print( "kind(%d) %d(%d,%d)-(%d,%d)\n",
CHAR_invarea[i].kind,
CHAR_invarea[i].floor,
CHAR_invarea[i].area.x,CHAR_invarea[i].area.y,
CHAR_invarea[i].area.width,
CHAR_invarea[i].area.height );
}
#endif /*DEBUG*/
return TRUE;
}
BOOL CHAR_isInvincibleArea( int floor , int x, int y )
{
int i;
for( i=0 ; i<CHAR_invareanum ; i++ )
if( CHAR_invarea[i].kind == CHAR_INVAREA
&& CHAR_invarea[i].floor == floor
&& CoordinateInRect( &CHAR_invarea[i].area,x,y ) )
return TRUE;
return FALSE;
}
BOOL CHAR_isCannotMagicArea( int floor , int x, int y, int magicnum )
{
int i;
for( i=0 ; i<CHAR_invareanum ; i++ ) {
if( CHAR_invarea[i].kind == CHAR_CANNOTMAGICAREA
&& CHAR_invarea[i].floor == floor
&& CoordinateInRect( &CHAR_invarea[i].area,x,y ) )
{
int j;
for( j = 0;
j < sizeof(CHAR_invarea[i].work) &&
CHAR_invarea[i].work[j] != -1;
j ++ )
{
if( CHAR_invarea[i].work[j] == magicnum ) {
return TRUE;
}
}
}
}
return FALSE;
}
typedef struct tagCHAR_appearposition
{
int floor;
int x,y;
}CHAR_appearposition;
CHAR_appearposition* CHAR_appear;
int CHAR_appearnum;
BOOL CHAR_initAppearPosition( char* filename )
{
FILE* f;
char line[256];
int linenum=0;
int appearreadlen=0;
f = fopen(filename,"r");
if( f == NULL ){
errorprint;
return FALSE;
}
CHAR_appearnum=0;
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
CHAR_appearnum++;
}
if( fseek( f, 0, SEEK_SET ) == -1 ){
fprint( "Seek Error\n" );
fclose(f);
return FALSE;
}
CHAR_appear = allocateMemory( sizeof(CHAR_appearposition)
* CHAR_appearnum );
if( CHAR_appear == NULL ){
fprint( "Can't allocate Memory %d\n" ,
sizeof(CHAR_appearposition)*CHAR_appearnum);
fclose( f );
return FALSE;
}
{
int i;
for( i = 0; i < CHAR_appearnum; i ++ ) {
CHAR_appear[i].floor = 0;
CHAR_appear[i].x = 0;
CHAR_appear[i].y = 0;
}
}
linenum = 0;
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
replaceString( line, '\t' , ' ' );
deleteSequentChar( line, " " );
if( line[0] == ' ' )continue;
{
char token[256];
int ret;
/* 夫午勾户及玄□弁件毛苇月 */
ret = getStringFromIndexWithDelim( line," ",1,token,
sizeof(token));
if( ret==FALSE ){
fprint("Syntax Error file:%s line:%d\n",filename,linenum);
continue;
}
CHAR_appear[appearreadlen].floor = atoi(token);
ret = getStringFromIndexWithDelim( line," ",2,token,
sizeof(token));
if( ret==FALSE ){
fprint("Syntax Error file:%s line:%d\n",filename,linenum);
continue;
}
CHAR_appear[appearreadlen].x = atoi( token );
ret = getStringFromIndexWithDelim( line," ",3,token,
sizeof(token));
if( ret ==FALSE){
fprint("Syntax Error file:%s line:%d\n",filename,linenum);
continue;
}
CHAR_appear[appearreadlen].y = atoi( token );
appearreadlen ++;
}
}
fclose(f);
CHAR_appearnum = appearreadlen;
print( "有效显示位置范围数是 %d..", CHAR_appearnum );
#ifdef DEBUG
{
int i;
for( i=0; i <CHAR_appearnum ; i++ )
print( "Appear fl[%d] x[%d] y[%d]\n",
CHAR_appear[i].floor,
CHAR_appear[i].x,
CHAR_appear[i].y );
}
#endif
return TRUE;
}
BOOL CHAR_isAppearPosition( int floor, int *x, int *y)
{
int i;
for( i = 0; i < CHAR_appearnum; i ++ ) {
if( CHAR_appear[i].floor == floor ) {
*x = CHAR_appear[i].x;
*y = CHAR_appear[i].y;
return( TRUE);
}
}
return( FALSE);
}
BOOL CHAR_isCannotDropArea( int floor , int x, int y )
{
int i;
for( i=0 ; i<CHAR_invareanum ; i++ )
if( CHAR_invarea[i].kind == CHAR_CANNOTDROPAREA
&& CHAR_invarea[i].floor == floor
&& CoordinateInRect( &CHAR_invarea[i].area,x,y ) )
return TRUE;
return FALSE;
}
typedef struct tagEldersPosition
{
int floor;
int x;
int y;
}EldersPosition;
#define MAXELDERS 128
static EldersPosition elders[MAXELDERS]=
{
{ 1006,15,22 },
{ 2006,20,16 },
{ 3006,21,16 },
{ 4006,14,20 },
{ 7770, 9,10 },
#ifdef _DELBORNPLACE //Syu ADD 6.0 统一出生於新手村
// { 815,42,34 },
#endif
};
BOOL CHAR_getInitElderPosition( Char* ch,int hometown)
{
int index = 0;
int point;
#ifdef _DELBORNPLACE //Syu ADD 6.0 统一出生於新手村
if( getMuseum() )
index = hometown;
#else
if( hometown < 0 || hometown > 3 ) {
return FALSE;
}
index=hometown;
#endif
if( index >= arraysizeof( elders ) ){
return FALSE;
}
ch->data[CHAR_FLOOR] = elders[index].floor;
ch->data[CHAR_X] = elders[index].x;
ch->data[CHAR_Y] = elders[index].y;
ch->data[CHAR_LASTTALKELDER] = index;
point = ch->data[CHAR_SAVEPOINT];
#ifdef _DELBORNPLACE //Syu ADD 6.0 统一出生於新手村
if( getMuseum() ) {
ch->data[CHAR_FLOOR] = 815;
ch->data[CHAR_X] = 29;
ch->data[CHAR_Y] = 40;
ch->data[CHAR_LASTTALKELDER] = 35;
// point = point | (1<<35) ;
point = point | (1<<hometown) ;
}
else {
point = point | (1<<hometown) ;
}
#else
point = point | (1<<hometown) ;
#endif
#ifdef _MUSEUM
if( getMuseum() ) {
ch->data[CHAR_FLOOR] = 9000;
ch->data[CHAR_X] = 40;
ch->data[CHAR_Y] = 40;
}
#endif
ch->data[CHAR_SAVEPOINT] = point;
if( MAP_checkCoordinates( ch->data[CHAR_FLOOR], ch->data[CHAR_X],
ch->data[CHAR_Y] ) == FALSE ){
return FALSE;
}
return TRUE;
}
/*------------------------------------------------------------
* 巨伙母□及桦赭毛 月
* 娄醒
* elderindex int 巨伙母□奶件犯永弁旦
* fl int* 白夫失毛熬仃潸月桦赭
* x int* x毛熬仃潸月桦赭
* y int* y毛熬仃潸月桦赭
* 娄醒
* 岳 TRUE(1)
* 撩 FALSE(0)
------------------------------------------------------------*/
BOOL CHAR_getElderPosition( int elderindex, int* fl, int* x, int* y )
{
if( elderindex<0 || arraysizeof(elders)<=elderindex )return FALSE;
*fl = elders[elderindex].floor;
*x = elders[elderindex].x;
*y = elders[elderindex].y;
return TRUE;
}
/*------------------------------------------------------------
* 赢 NPC互愤坌及赓渝祭及午五卞}赢 卞踏五仇戈及分[
* 公及凶户及奶件正□白尼奶旦
* 娄醒
* index int 左□田□匹 撩 仄凶日FALSE 毛井尹允
* fl int 匏 及树
* x int
* y int
* NPC及伙□民件井日银歹木月及分[
------------------------------------------------------------*/
BOOL CHAR_ElderSetPosition( int elderindex ,int fl,int x ,int y)
{
if( elderindex < ELDERINDEXSTART ||
elderindex >= MAXELDERS ){
return FALSE;
}
elders[elderindex].floor = fl;
elders[elderindex].x = x;
elders[elderindex].y = y;
return TRUE;
}
void CHAR_setInitValues( Char* ch )
{
#ifndef _PROFESSION_SKILL // WON ADD 人物职业技能
static int CHAR_titleindextbl[] ={ 0,1,2,3,4,5,6 };
int elderindex;
int i;
BOOL magician=FALSE;
BOOL priest=FALSE;
elderindex = ch->data[CHAR_LASTTALKELDER];
if( 0 <= elderindex
&& elderindex < arraysizeof( CHAR_titleindextbl ) )
ch->indexOfHaveTitle[0] = CHAR_titleindextbl[elderindex];
for( i=0 ; i<CHAR_SKILLMAXHAVE ; i++ ){
static struct addIteTbl
{
int itemid[2];
}additemtbl[SKILL_NUM] = {
{ { 17, -1} },
{ { -1, -1} },
{ { -1, -1} },
{ { 17, -1} },
{ { 17, -1} },
{ { 17, -1} },
{ { 17, -1} },
{ { 17, -1} },
{ { 17, -1} },
{ { 17, -1} },
{ { -1, -1} },
{ { 17, -1} },
{ { 601, -1} },
{ { 101, -1} },
{ { 201, -1} },
{ { 300, -1} },
{ { 400, -1} },
{ { 501, -1} },
{ { 17, -1} },
};
if( ch->haveSkill[i].use ){
int j;
int skindex=ch->haveSkill[i].skill.data[SKILL_IDENTITY];
for( j=0 ; j<arraysizeof( additemtbl[0].itemid ); j++ )
CHAR_addItemToChar( ch, additemtbl[skindex].itemid[j] );
if( skindex == SKILL_MERCHANT )
ch->data[CHAR_GOLD] = 20;
if( skindex == SKILL_MAGICIAN )
magician = TRUE;
else if( skindex == SKILL_PRIEST )
priest = TRUE;
}
}
if( magician || priest ) CHAR_addItemToChar( ch, 802 );
#endif
}
#if 1
static int EnemyExpTbl[]={
0, // 0
2, // 1
4, // 2
6, // 3
8, // 4
10, // 5
12, // 6
14, // 7
16, // 8
18, // 9
20, // 10
26, // 11
32, // 12
38, // 13
44, // 14
50, // 15
60, // 16
70, // 17
80, // 18
90, // 19
100, // 20
115, // 21
130, // 22
145, // 23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -