?? item.c
字號:
readindex++; } return TRUE;}void ITEM_getDefaultItemSetting(ITEM_Item* itm){ int i; memset( itm, 0 , sizeof( ITEM_Item ));#ifdef _SIMPLIFY_ITEMSTRING for(i = 0; i < arraysizeof( ITEM_setintdata) ; i ++ ){ itm->data[ITEM_setintdata[i].table] = ITEM_setintdata[i].defaults; } for(i = 0; i < arraysizeof( ITEM_setchardata) ; i ++ ){ strcpysafe( itm->string[ITEM_setchardata[i].table].string, sizeof( itm->string[ITEM_setchardata[i].table].string), ITEM_setchardata[i].defaults); }#else for(i=0;i<ITEM_DATAINTNUM;i++) itm->data[i] = ITEM_setintdata[i].defaults; for(i=0;i<ITEM_DATACHARNUM;i++) strcpysafe(itm->string[i].string, sizeof(itm->string[i].string), ITEM_setchardata[i].defaults);#endif strcpysafe( itm->string[ITEM_WATCHFUNC].string, sizeof(itm->string[ITEM_WATCHFUNC].string), "ITEM_DeleteTimeWatched" ); for(i=0;i<ITEM_WORKDATAINTNUM;i++){ itm->workint[i] = -1; }}#ifdef _SIMPLIFY_ITEMSTRINGvoid ITEM_getDefaultItemData( int itemID, ITEM_Item* itm){ int i;// memset( itm, 0 , sizeof( ITEM_Item )); for(i=0;i<ITEM_DATAINTNUM;i++){ itm->data[i] = ITEMTBL_getInt( itemID, i); } for(i=0;i<ITEM_DATACHARNUM;i++){ strcpysafe( itm->string[i].string, sizeof( itm->string[i].string), ITEMTBL_getChar( itemID, i) ); } for(i=0;i<ITEM_WORKDATAINTNUM;i++){ itm->workint[i] = -1; } strcpysafe( itm->string[ITEM_WATCHFUNC].string, sizeof( itm->string[ITEM_WATCHFUNC].string), "ITEM_DeleteTimeWatched" );}#endifstatic int ITEM_getRandomValue( char* string,int* randomwidth, int num ){ int minvalue; int maxvalue; char token[64]; int ret;#if 1 *randomwidth = 0; ret = getStringFromIndexWithDelim( string,",",num -1,token, sizeof( token)); if( ret == FALSE ) { return 0; } minvalue = atoi( token); ret = getStringFromIndexWithDelim( string,",",num ,token, sizeof( token)); if( ret == FALSE ) { return minvalue; } maxvalue = atoi( token); *randomwidth = ABS( maxvalue - minvalue); return min( minvalue, maxvalue);#else minvalue = atoi( string ); startmax = index( string,',' ); if( startmax != NULL ){ maxvalue = atoi(startmax+1); *randomwidth = ABS(maxvalue - minvalue); return min(minvalue,maxvalue); } *randomwidth = 0; return minvalue;#endif}static int ITEM_isstring1or0( char* string,int* randomwidth, int num ){ char token[64]; int ret; ret = getStringFromIndexWithDelim( string,",",num -1,token, sizeof( token)); if( ret == FALSE ) { return FALSE; } return isstring1or0( token);}static char* ITEM_checkString( char* string ){#define ITEM_STRINGLEN 64 if( strlen(string) >= ITEM_STRINGLEN ) print( "Over %d:[%s]\n",ITEM_STRINGLEN ,string ); return string;#undef ITEM_STRINGLEN}BOOL ITEM_readItemConfFile( char* filename ){ FILE* f; char line[512]; char token[64]; int linenum=0; int i; int maxid=0, itemid; int ret; int intdata[ITEM_DATAINTNUM]; f = fopen(filename,"r"); if( f == NULL ){ print( "不能打開文件\n"); return FALSE; }#ifdef _ITEMSET2_ITEM#define ITEM_ID_TOKEN_INDEX 17#else#ifdef _ITEM_MAXUSERNUM#define ITEM_ID_TOKEN_INDEX 15#endif#endif while( fgets( line, sizeof( line ), f ) ){ linenum ++; if( line[0] == '#' )continue; /* comment */ if( line[0] == '\n' )continue; /* none */ chomp( line ); ret = getStringFromIndexWithDelim( line, ",", ITEM_ID_TOKEN_INDEX, token, sizeof(token)); if( ret == FALSE ){ fprint("文件秩序錯誤:%s 第:%d行\n",filename,linenum); continue; } itemid = atoi( token); if( itemid > maxid ){ maxid = itemid; } } if( maxid <=0 ) { print( "最大ID錯誤\n"); fclose(f); return FALSE; } if( fseek( f, 0, SEEK_SET ) == -1 ){ fprint( "搜索錯誤\n" ); fclose(f); return FALSE; }#ifdef _IMPOROVE_ITEMTABLE ITEM_tblen = linenum+1; print( "物品數 %d - 大小:%d\n", linenum, sizeof(ITEM_table)); if( ITEM_TransformList != NULL ) freeMemory( ITEM_TransformList); defitemtbls = (maxid+1); ITEM_TransformList = allocateMemory( sizeof(sITEM_transformList) * defitemtbls ); for( i = 0 ; i < (maxid+1); i ++ ) { ITEM_TransformList[i].use = FALSE; }#else print( "物品最大ID %d", maxid); ITEM_tblen = maxid + 1;#endif#ifdef _ITEMTBL_STAIC for( i = 0 ; i < 28000 ; i ++ ) { ITEM_tbl[i].use = FALSE; }#else if( ITEM_tbl != NULL ) freeMemory( ITEM_tbl); ITEM_tbl = allocateMemory( sizeof(ITEM_table) * ITEM_tblen ); if( ITEM_tbl == NULL ){ fprint( "無法分配內存 %d\n" , sizeof(ITEM_table)*ITEM_tblen ); fclose( f ); return FALSE; } for( i = 0 ; i < ITEM_tblen ; i ++ ) { ITEM_tbl[i].use = FALSE; }#endif 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' , ' ' );{ char buf[256]; for( i = 0; i < strlen( line); i ++) { if( line[i] != ' ' ) { break; } strcpy( buf, &line[i]); } if( i != 0 ) { strcpy( line, buf); }}{ char token[256]; int ret; int readpos = 1; BOOL dataerror = FALSE; ITEM_Item itm; ITEM_getDefaultItemSetting(&itm); for( i=0 ; i< ITEM_DATAINTNUM ; i++ ) { intdata[i] = 0; } itemid = 0; for( i = 0 ; i < arraysizeof( ITEM_itemconfentries) ; i ++ ){ ret = getStringFromIndexWithDelim( line,",",readpos,token, sizeof(token)); if( ret == FALSE ) {#ifdef _Item_ReLifeAct { char buf[256]; char buf1[256]; sscanf( line,"%s,%s", buf, buf1); print("[ITEM data Error] tbl=%d:%s line:%d[%s]\n", readpos, ITEM_itemconfentries[i].entryname, linenum, line); }#else fprint("Syntax Error tki:%d file:%s line:%d[%s]\n", i , filename,linenum,line);#endif dataerror = TRUE; break; } if( readpos == ITEM_ID_TOKEN_INDEX ) itemid = atoi( token); readpos ++; if( strlen( token ) != 0 ) { switch(ITEM_itemconfentries[i].type){ case ITEM_INTENTRY: itm.data[ITEM_itemconfentries[i].index] = atoi( token ); break; case ITEM_CHARENTRY: strcpysafe( itm.string[ITEM_itemconfentries[i].index].string, sizeof(itm.string[ITEM_itemconfentries[i].index].string), token); break; case ITEM_INTFUNC: { int (*intfunction)(char*,int*, int ); intfunction = ITEM_itemconfentries[i].func; itm.data[ITEM_itemconfentries[i].index] = intfunction(line, &intdata[ITEM_itemconfentries[i].index],readpos); if( intfunction == ITEM_getRandomValue) readpos ++; } break; case ITEM_CHARFUNC: { char* (*charfunction)(char* ); charfunction = ITEM_itemconfentries[i].func; strcpysafe( itm.string[ITEM_itemconfentries[i].index].string, sizeof(itm.string[ITEM_itemconfentries[i].index].string), charfunction( token)); break; } default: break; } } } if( !dataerror) {#ifdef _IMPOROVE_ITEMTABLE int ListNum = itemid; itemid = totalitemtbls;#endif if( itemid >= ITEM_tblen ){ print( "ITEM_tbl full:%d err !!\n" , itemid ); }else if( ITEM_tbl[itemid].use == TRUE ) { fprint( "Duplicate Itemid %d.ignore\n" , itemid ); }else{ if( itm.string[ITEM_SECRETNAME].string[0] == '\0') { fprint( "ERROR: ID %d item doesn't have secretname\n" ,itemid ); memcpy( &itm.string[ITEM_SECRETNAME].string, &itm.string[ITEM_NAME].string, sizeof(itm.string[ITEM_NAME].string)); }{ int attacknum_min, attacknum_max; attacknum_min = itm.data[ITEM_ATTACKNUM_MIN]; attacknum_max = itm.data[ITEM_ATTACKNUM_MAX]; if( attacknum_min == 0 ) attacknum_min = attacknum_max; itm.data[ITEM_ATTACKNUM_MIN] = min( attacknum_min, attacknum_max); itm.data[ITEM_ATTACKNUM_MAX] = max( attacknum_min, attacknum_max);} memcpy( &ITEM_tbl[itemid].itm, &itm, sizeof(ITEM_Item)); ITEM_tbl[itemid].use = TRUE; for( i=0 ; i< ITEM_DATAINTNUM ; i++ ){ ITEM_tbl[itemid].randomdata[i] = intdata[i]; }#ifdef _IMPOROVE_ITEMTABLE if( ITEM_TransformList[ ListNum].use != 0 ){ ITEM_tbl[itemid].use = TRUE; ITEM_TransformList[ ListNum].use = 0; }else { ITEM_TransformList[ ListNum].Si = totalitemtbls; ITEM_TransformList[ ListNum].use = TRUE; } totalitemtbls++;#endif } }} } fclose(f); return TRUE;}CHAR_EquipPlace ITEM_getEquipPlace( int charaindex, int itmid ){ ITEM_CATEGORY cat; cat = ITEM_getInt( itmid , ITEM_TYPE ); switch( cat ){ case ITEM_FIST: case ITEM_SPEAR: case ITEM_AXE: case ITEM_CLUB:// case ITEM_SHIELD: case ITEM_BOOMERANG: case ITEM_BREAKTHROW: case ITEM_BOUNDTHROW:#ifdef _PROFESSION_SKILL // WON ADD 人物職業技能 { int i=0; // 勇士職業技能二刀流 for( i=0; i<CHAR_SKILLMAXHAVE; i++ ){ char *skill_name; // 技能ID int skillid = CHAR_getCharSkill( charaindex, i); int Pskillid = PROFESSION_SKILL_getskillArray( skillid); if( Pskillid <= 0 ) continue; // 技能名稱 skill_name = PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_FUNCNAME); if( skill_name == NULL ) continue; // 二刀流 if( (strcmp( skill_name , "PROFESSION_DUAL_WEAPON" )) == 0 ){ int get_item = BATTLE_GetWepon( charaindex ); if( get_item != ITEM_BOW ){ int right_hand = CHAR_getItemIndex( charaindex, CHAR_ARM ); int left_hand = CHAR_getItemIndex( charaindex, CHAR_EQSHIELD ); if( right_hand < 0 ) return CHAR_ARM; else{ if( left_hand < 0 ) return CHAR_EQSHIELD; else return CHAR_ARM; } } } } }#endif return CHAR_ARM; break; case ITEM_HELM: return CHAR_HEAD; break; case ITEM_ARMOUR: return CHAR_BODY; break; case ITEM_BRACELET: case ITEM_MUSIC: case ITEM_NECKLACE: case ITEM_RING: case ITEM_BELT: case ITEM_EARRING: case ITEM_NOSERING: case ITEM_AMULET: return CHAR_DECORATION1; break; case ITEM_BOW:#ifdef _ITEM_EQUITSPACE if( CHAR_getItemIndex( charaindex, CHAR_EQSHIELD ) > 0 ) return -1;#endif return CHAR_ARM; break;#ifdef _ITEM_EQUITSPACE case ITEM_WBELT: return CHAR_EQBELT; break; case ITEM_WSHIELD: if( BATTLE_GetWepon( charaindex ) != ITEM_BOW ) return CHAR_EQSHIELD; break; case ITEM_WSHOES: return CHAR_EQSHOES; break;#endif#ifdef _EQUIT_NEWGLOVE case ITEM_WGLOVE: return CHAR_EQGLOVE; break;#endif default: break; } return -1;}#define ITEMSTRINGBUFSIZ 512static char ITEM_itemStatusStringBuffer[ITEMSTRINGBUFSIZ];char* ITEM_makeItemStatusString( int haveitemindex, int itemindex ){ char escapename[256]; char escapeeffectstring[256]; char paramshow[256]; int leaklevel; int itemcolor = 0; int flg; char INGNAME0[4]; char INGNAME1[4];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -