?? char_data.c
字號:
#include "version.h"
#include <string.h>
#include <math.h>
#ifdef _REDHAT_V9
#include <errno.h>
#endif
#include "readmap.h"
#include "common.h"
#include "util.h"
#include "anim_tbl.h"
#include "battle.h"
#include "char.h"
#include "char_data.h"
#include "buf.h"
#include "item.h"
#include "log.h"
#include "pet.h"
#include "enemy.h"
#ifdef _PERSONAL_FAME // Arminius: 家族個人聲望
#include "char_base.h"
#include "configfile.h"
#endif
#include "defaultPlayer.h"
#include "defaultGroundEnemy.h"
#include "ls2data.dat"
// CoolFish: Family 2001/7/28
#include "family.h"
#include "saacproto_cli.h"
#ifdef _PET_LIMITLEVEL
void CHAR_CheckPetDoLimitlevel( int petindex , int toindex, int level);
#endif
typedef struct tagdefaultCharcterGet
{
int imagenumber;
Char* initchardata;
LevelUpPattern* lvpattern;
CHAR_ImageType imgtype;
}defaultCharacterGet;
static defaultCharacterGet CHAR_defaultCharacterGet[]=
{
/* CHAR_DEFAULTPLAYER */
//閡間襠ㄠ
{SPR_001em,&player,&lvplayer00,CHAR_IMAGETYPE_CHILDBOY},
{SPR_002em,&player,&lvplayer00,CHAR_IMAGETYPE_CHILDBOY},
{SPR_003em,&player,&lvplayer00,CHAR_IMAGETYPE_CHILDBOY},
{SPR_004em,&player,&lvplayer00,CHAR_IMAGETYPE_CHILDBOY},
//劑 ㄠ
{SPR_011em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_012em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_013em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_014em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
//劑 ㄡ
{SPR_021em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_022em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_023em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_024em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
//劑 ㄢ
{SPR_031em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_032em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_033em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
{SPR_034em,&player,&lvplayer00,CHAR_IMAGETYPE_BOY},
//斂 ㄠ
{SPR_041em,&player,&lvplayer00,CHAR_IMAGETYPE_MAN},
{SPR_042em,&player,&lvplayer00,CHAR_IMAGETYPE_MAN},
{SPR_043em,&player,&lvplayer00,CHAR_IMAGETYPE_MAN},
{SPR_044em,&player,&lvplayer00,CHAR_IMAGETYPE_MAN},
//斂 ㄡ
{SPR_051em,&player,&lvplayer00,CHAR_IMAGETYPE_MAN},
{SPR_052em,&player,&lvplayer00,CHAR_IMAGETYPE_MAN},
{SPR_053em,&player,&lvplayer00,CHAR_IMAGETYPE_MAN},
{SPR_054em,&player,&lvplayer00,CHAR_IMAGETYPE_MAN},
//閡間輝ㄠ
{SPR_061em,&player,&lvplayer00,CHAR_IMAGETYPE_CHILDGIRL},
{SPR_062em,&player,&lvplayer00,CHAR_IMAGETYPE_CHILDGIRL},
{SPR_063em,&player,&lvplayer00,CHAR_IMAGETYPE_CHILDGIRL},
{SPR_064em,&player,&lvplayer00,CHAR_IMAGETYPE_CHILDGIRL},
//劑輝ㄠ
{SPR_071em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_072em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_073em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_074em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
//劑輝ㄡ
{SPR_081em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_082em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_083em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_084em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
//劑輝ㄢ
{SPR_091em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_092em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_093em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
{SPR_094em,&player,&lvplayer00,CHAR_IMAGETYPE_GIRL},
//輝嶺ㄠ
{SPR_101em,&player,&lvplayer00,CHAR_IMAGETYPE_WOMAN},
{SPR_102em,&player,&lvplayer00,CHAR_IMAGETYPE_WOMAN},
{SPR_103em,&player,&lvplayer00,CHAR_IMAGETYPE_WOMAN},
{SPR_104em,&player,&lvplayer00,CHAR_IMAGETYPE_WOMAN},
//輝嶺ㄡ
{SPR_111em,&player,&lvplayer00,CHAR_IMAGETYPE_WOMAN},
{SPR_112em,&player,&lvplayer00,CHAR_IMAGETYPE_WOMAN},
{SPR_113em,&player,&lvplayer00,CHAR_IMAGETYPE_WOMAN},
{SPR_114em,&player,&lvplayer00,CHAR_IMAGETYPE_WOMAN},
{SPR_pet001,&player,&lvplayer00,CHAR_IMAGETYPE_DOG},
{SPR_pet002,&player,&lvplayer00,CHAR_IMAGETYPE_DOG},
{SPR_pet003,&player,&lvplayer00,CHAR_IMAGETYPE_DOG},
{SPR_pet004,&player,&lvplayer00,CHAR_IMAGETYPE_DOG},
{SPR_pet011,&player,&lvplayer00,CHAR_IMAGETYPE_DOG},
};
BOOL CHAR_getDefaultChar( Char* nc , int imagenumber )
{
int i, j;
int defcharaindex;
Char* defaultchar;
defaultchar = CHAR_defaultCharacterGet[arraysizeof(CHAR_defaultCharacterGet) - 1].initchardata;
memset( nc,0,sizeof(Char) );
defcharaindex = 0;
for( i = 0 ; i < arraysizeof( CHAR_defaultCharacterGet ) ; i ++ ){
if( CHAR_defaultCharacterGet[i].imagenumber == imagenumber ){
defaultchar = CHAR_defaultCharacterGet[i].initchardata;
defcharaindex = i;
break;
}
}
nc->data[CHAR_IMAGETYPE] = CHAR_defaultCharacterGet[defcharaindex].imgtype;
nc->use = TRUE;
#ifdef _CHAR_FIXDATADEF
for( j = 0 ; j < CHAR_DATAINTNUM ; j ++ ){
if( j < CHAR_INITDATA ) nc->data[j] = defaultchar->data[j];
else nc->data[j] = 0;
}
#else
for( j = 0 ; j < CHAR_DATAINTNUM ; j ++ )
nc->data[j] = defaultchar->data[j];
#endif
for( j = 0 ; j < arraysizeof( nc->flg ) ; j ++ )
nc->flg[j] = defaultchar->flg[j];
for( j = 0 ; j < CHAR_DATACHARNUM ; j ++ )
nc->string[j].string[0] = '\0';
for( j = 0 ; j < CHAR_MAXITEMHAVE ; j ++ )
nc->indexOfExistItems[j] = -1;
for( j = 0 ; j < CHAR_MAXPOOLITEMHAVE ; j ++ )
nc->indexOfExistPoolItems[j] = -1;
for( j = 0 ; j < CHAR_MAXPETSKILLHAVE ; j ++ )
nc->unionTable.indexOfPetskill[j] = -1;
for( j = 0 ; j < CHAR_MAXPOOLPETHAVE ; j ++ )
nc->indexOfPoolPet[j] = -1;
for( j = 0 ; j < CHAR_SKILLMAXHAVE ; j ++ )
nc->haveSkill[j].use = FALSE;
for( j = 0 ; j < CHAR_TITLEMAXHAVE ; j ++ )
nc->indexOfHaveTitle[j] = -1;
for( j=0 ; j<ADDRESSBOOK_MAX ;j++ )
memset( &nc->addressBook[j],0,sizeof(nc->addressBook[j]) );
for( j = 0 ; j < CHAR_WORKDATAINTNUM ; j ++ )
nc->workint[j] = 0;
for( j = 0 ; j < CHAR_WORKDATACHARNUM ; j ++ )
nc->workchar[j].string[0] = '\0';
nc->workint[CHAR_WORKFD] = -1;
nc->workint[CHAR_WORKCHATROOMNUM] = -1;
#ifdef _DEATH_CONTEND
nc->data[CHAR_PKLISTTEAMNUM] = -1;
nc->data[CHAR_PKLISTLEADER] = -1;
#endif
#ifdef _NPC_SEPARATEDATA
CHAR_getDefaultCharTempNum( nc);
#endif
return TRUE;
}
static int CHAR_playerImageNumber[]=
{
/* CHAR_DEFAULTPLAYER */
SPR_001em,SPR_002em,SPR_003em,SPR_004em,SPR_011em,SPR_012em,
SPR_013em,SPR_014em,SPR_021em,SPR_022em,SPR_023em,SPR_024em,
SPR_031em,SPR_032em,SPR_033em,SPR_034em,SPR_041em,SPR_042em,
SPR_043em,SPR_044em,SPR_051em,SPR_052em,SPR_053em,SPR_054em,
SPR_061em,SPR_062em,SPR_063em,SPR_064em,SPR_071em,SPR_072em,
SPR_073em,SPR_074em,SPR_081em,SPR_082em,SPR_083em,SPR_084em,
SPR_091em,SPR_092em,SPR_093em,SPR_094em,SPR_101em,SPR_102em,
SPR_103em,SPR_104em,SPR_111em,SPR_112em,SPR_113em,SPR_114em
};
BOOL CHAR_checkPlayerImageNumber( int imagenumber)
{
int i;
for( i = 0; i < arraysizeof( CHAR_playerImageNumber); i ++ ) {
if( imagenumber == CHAR_playerImageNumber[i] ) break;
}
if( i == arraysizeof( CHAR_playerImageNumber)) return FALSE;
else return TRUE;
}
/*------------------------------------------------------------
* 涌 颶 寞及民尼永弁
*
* 涌 颶 寞反動票及白巧□穴永玄匹瑁引勻化中月
* number = 窒諦 井
* CG_CHR_MAKE_FACE + (number*100) + ( 縉 number * 25) + ( 寞 * 5 ) + 軾 寞
*
------------------------------------------------------------*/
BOOL CHAR_checkFaceImageNumber( int imagenumber, int faceimagenumber)
{
int image = imagenumber - SPR_001em;
int number;
int color;
number = (faceimagenumber - CG_CHR_MAKE_FACE)/ 100*20;
color = ((faceimagenumber - CG_CHR_MAKE_FACE)% 100) / 25*5;
if( image != number + color ) return FALSE;
return TRUE;
}
// 平乓仿 颶 □皮伙[ㄠ 丐兇曰隸 ㄤ潘
int CHAR_eqimagetbl[][5]={
// 允匹 {{{{ 軺徇 鍵 菰
{ SPR_001em,SPR_001ax,SPR_001cl,SPR_001sp,SPR_001bw },
{ SPR_002em,SPR_002ax,SPR_002cl,SPR_002sp,SPR_002bw },
{ SPR_003em,SPR_003ax,SPR_003cl,SPR_003sp,SPR_003bw },
{ SPR_004em,SPR_004ax,SPR_004cl,SPR_004sp,SPR_004bw },
{ SPR_011em,SPR_011ax,SPR_011cl,SPR_011sp,SPR_011bw },
{ SPR_012em,SPR_012ax,SPR_012cl,SPR_012sp,SPR_012bw },
{ SPR_013em,SPR_013ax,SPR_013cl,SPR_013sp,SPR_013bw },
{ SPR_014em,SPR_014ax,SPR_014cl,SPR_014sp,SPR_014bw },
{ SPR_021em,SPR_021ax,SPR_021cl,SPR_021sp,SPR_021bw },
{ SPR_022em,SPR_022ax,SPR_022cl,SPR_022sp,SPR_022bw },
{ SPR_023em,SPR_023ax,SPR_023cl,SPR_023sp,SPR_023bw },
{ SPR_024em,SPR_024ax,SPR_024cl,SPR_024sp,SPR_024bw },
{ SPR_021em,SPR_021ax,SPR_021cl,SPR_021sp,SPR_021bw },
{ SPR_031em,SPR_031ax,SPR_031cl,SPR_031sp,SPR_031bw },
{ SPR_032em,SPR_032ax,SPR_032cl,SPR_032sp,SPR_032bw },
{ SPR_033em,SPR_033ax,SPR_033cl,SPR_033sp,SPR_033bw },
{ SPR_034em,SPR_034ax,SPR_034cl,SPR_034sp,SPR_034bw },
{ SPR_041em,SPR_041ax,SPR_041cl,SPR_041sp,SPR_041bw },
{ SPR_042em,SPR_042ax,SPR_042cl,SPR_042sp,SPR_042bw },
{ SPR_043em,SPR_043ax,SPR_043cl,SPR_043sp,SPR_043bw },
{ SPR_044em,SPR_044ax,SPR_044cl,SPR_044sp,SPR_044bw },
{ SPR_051em,SPR_051ax,SPR_051cl,SPR_051sp,SPR_051bw },
{ SPR_052em,SPR_052ax,SPR_052cl,SPR_052sp,SPR_052bw },
{ SPR_053em,SPR_053ax,SPR_053cl,SPR_053sp,SPR_053bw },
{ SPR_054em,SPR_054ax,SPR_054cl,SPR_054sp,SPR_054bw },
{ SPR_061em,SPR_061ax,SPR_061cl,SPR_061sp,SPR_061bw },
{ SPR_062em,SPR_062ax,SPR_062cl,SPR_062sp,SPR_062bw },
{ SPR_063em,SPR_063ax,SPR_063cl,SPR_063sp,SPR_063bw },
{ SPR_064em,SPR_064ax,SPR_064cl,SPR_064sp,SPR_064bw },
{ SPR_071em,SPR_071ax,SPR_071cl,SPR_071sp,SPR_071bw },
{ SPR_072em,SPR_072ax,SPR_072cl,SPR_072sp,SPR_072bw },
{ SPR_073em,SPR_073ax,SPR_073cl,SPR_073sp,SPR_073bw },
{ SPR_074em,SPR_074ax,SPR_074cl,SPR_074sp,SPR_074bw },
{ SPR_081em,SPR_081ax,SPR_081cl,SPR_081sp,SPR_081bw },
{ SPR_082em,SPR_082ax,SPR_082cl,SPR_082sp,SPR_082bw },
{ SPR_083em,SPR_083ax,SPR_083cl,SPR_083sp,SPR_083bw },
{ SPR_084em,SPR_084ax,SPR_084cl,SPR_084sp,SPR_084bw },
{ SPR_091em,SPR_091ax,SPR_091cl,SPR_091sp,SPR_091bw },
{ SPR_092em,SPR_092ax,SPR_092cl,SPR_092sp,SPR_092bw },
{ SPR_093em,SPR_093ax,SPR_093cl,SPR_093sp,SPR_093bw },
{ SPR_094em,SPR_094ax,SPR_094cl,SPR_094sp,SPR_094bw },
{ SPR_101em,SPR_101ax,SPR_101cl,SPR_101sp,SPR_101bw },
{ SPR_102em,SPR_102ax,SPR_102cl,SPR_102sp,SPR_102bw },
{ SPR_103em,SPR_103ax,SPR_103cl,SPR_103sp,SPR_103bw },
{ SPR_104em,SPR_104ax,SPR_104cl,SPR_104sp,SPR_104bw },
{ SPR_111em,SPR_111ax,SPR_111cl,SPR_111sp,SPR_111bw },
{ SPR_112em,SPR_112ax,SPR_112cl,SPR_112sp,SPR_112bw },
{ SPR_113em,SPR_113ax,SPR_113cl,SPR_113sp,SPR_113bw },
{ SPR_114em,SPR_114ax,SPR_114cl,SPR_114sp,SPR_114bw },
{ SPR_091em,SPR_091ax,SPR_091cl,SPR_091sp,SPR_091bw },
{ SPR_092em,SPR_092ax,SPR_092cl,SPR_092sp,SPR_092bw },
{ SPR_pet001,SPR_pet001,SPR_pet001,SPR_pet001,SPR_pet001},
{ SPR_pet002,SPR_pet002,SPR_pet002,SPR_pet002,SPR_pet002},
{ SPR_pet003,SPR_pet003,SPR_pet003,SPR_pet003,SPR_pet003},
{ SPR_pet004,SPR_pet004,SPR_pet004,SPR_pet004,SPR_pet004},
{ SPR_pet011,SPR_pet011,SPR_pet011,SPR_pet011,SPR_pet011},
{ SPR_121em,SPR_121ax,SPR_121cl,SPR_121sp,SPR_121bw },
{ SPR_122em,SPR_122ax,SPR_122cl,SPR_122sp,SPR_122bw },
{ SPR_131em,SPR_131ax,SPR_131cl,SPR_131sp,SPR_131bw },
{ SPR_132em,SPR_132ax,SPR_132cl,SPR_132sp,SPR_132bw },
{ SPR_133em,SPR_133ax,SPR_133cl,SPR_133sp,SPR_133bw },
{ SPR_141em,SPR_141ax,SPR_141cl,SPR_141sp,SPR_141bw },
{ SPR_142em,SPR_142ax,SPR_142cl,SPR_142sp,SPR_142bw },
{ SPR_151em,SPR_151ax,SPR_151cl,SPR_151sp,SPR_151bw },
{ SPR_152em,SPR_152ax,SPR_152cl,SPR_152sp,SPR_152bw },
{ SPR_161em,SPR_161ax,SPR_161cl,SPR_161sp,SPR_161bw },
{ SPR_162em,SPR_162ax,SPR_162cl,SPR_162sp,SPR_162bw },
};
/*------------------------------------------------------------
* 隸 午 颶 寞井日蕙仄中 颶 寞毛 月[
* 婁醒
* basebaseimagenumber int 葭卞卅月 颶 寞
* category ITEM_CATEGORY 失奶 丞及市 打伉
* 忒曰襖
* 蕙仄中 颶 寞[巨仿□及凜反}-1
------------------------------------------------------------*/
int CHAR_getNewImagenumberFromEquip( int basebaseimagenumber,
ITEM_CATEGORY category )
{
int i;
/* ITEM_CATEGORY 民尼永弁 */
if( category < 0 || category > arraysizeof(CHAR_eqimagetbl[0]) )
return -1;
for( i=0 ; i<arraysizeof(CHAR_eqimagetbl) ; i++ ){
if( CHAR_eqimagetbl[i][0] == basebaseimagenumber )
return CHAR_eqimagetbl[i][category];
}
return -1;
}
/*------------------------------------------------------------
* hash 襖毛菲戶月[
* 婁醒
* 忒曰襖
* 卅仄
------------------------------------------------------------*/
void CHAR_initSeekGraphicNumberFromString( void )
{
int i;
for( i = 0 ; i < arraysizeof( convertStringNumber ) ; i ++ )
convertStringNumber[i].hash = hashpjw(convertStringNumber[i].name);
}
/*------------------------------------------------------------
* 儂 井日 颶 寞毛 月[
* 婁醒
* string char* 儂
* 忒曰襖
* 巨仿□ -1
* 公木動陸分午弘仿白奴永弁 寞
------------------------------------------------------------*/
int CHAR_seekGraphicNumberFromString( char* string )
{
int hashvalue;
int i;
int ret;
/* 公及引引及醒儂分勻兇日公及引引忒允[ */
if( strtolchecknum( string, &ret,10,INT ) )return ret;
hashvalue = hashpjw( string );
for( i = 0 ; i < arraysizeof( convertStringNumber ); i ++ )
if( convertStringNumber[i].hash == hashvalue )
if( strcasecmp( convertStringNumber[i].name , string ) == 0 )
return convertStringNumber[i].graphicnumber;
return -1;
}
/*==================== 襯樺赭====================*/
/* 襯樺赭毛忡 允月 */
typedef struct tagCHAR_invinsibleArea
{
CHAR_AREAKIND kind;
int floor;
RECT area;
int work[10];
}CHAR_invincibleArea;
CHAR_invincibleArea* CHAR_invarea;
int CHAR_invareanum;
/*------------------------------------------------------------
* 襯樺赭及賡渝祭毛允月[
* 婁醒
* filename char* 澀爛白央奶伙
* 忒曰襖
* 岳 TRUE(1)
* 撩 FALSE(0)
*------------------------------------------------------------*/
BOOL CHAR_initInvinciblePlace( char* filename )
{
FILE* f;
char line[256];
int linenum=0;
int invreadlen=0;
f = fopen(filename,"r");
if( f == NULL ){
errorprint;
return FALSE;
}
CHAR_invareanum=0;
/* 引內 躲卅墊互窒墊丐月井升丹井譬屯月 */
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
CHAR_invareanum++;
}
if( fseek( f, 0, SEEK_SET ) == -1 ){
fprint( "Seek Error\n" );
fclose(f);
return FALSE;
}
CHAR_invarea = allocateMemory( sizeof(CHAR_invincibleArea)
* CHAR_invareanum );
if( CHAR_invarea == NULL ){
fprint( "Can't allocate Memory %d\n" ,
sizeof(CHAR_invincibleArea)*CHAR_invareanum);
fclose( f );
return FALSE;
}
/* 賡渝祭 */
{
int i;
for( i = 0; i < CHAR_invareanum; i ++ ) {
int j;
CHAR_invarea[i].kind = CHAR_AREAKIND_NONE;
CHAR_invarea[i].floor = 0;
CHAR_invarea[i].area.x = 0;
CHAR_invarea[i].area.y = 0;
CHAR_invarea[i].area.width = 0;
CHAR_invarea[i].area.height = 0;
for( j = 0; j < sizeof(CHAR_invarea[i].work); j ++ ) {
CHAR_invarea[i].work[j] = -1;
}
}
}
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;
int lx,ly,rx,ry;
CHAR_AREAKIND kind=-1;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -