?? title.c
字號:
#include "version.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#ifdef _REDHAT_V9
#include <errno.h>
#endif
#include "title.h"
#include "char.h"
#include "char_base.h"
#include "item.h"
#include "skill.h"
#include "buf.h"
#include "util.h"
#include "configfile.h"
/*====================憊寞 ====================*/
static int TITLE_IntCheck( int charaindex,int elem, int *data, int flg);
static int TITLE_WorkIntCheck( int charaindex,int elem, int *data, int flg);
static int TITLE_ItemCheck( int charaindex,int elem, int *data, int flg);
static int TITLE_ItemEquipCheck( int charaindex,int elem, int *data, int flg);
static int TITLE_SkillCheck( int charaindex,int elem, int *data, int flg);
static int TITLE_SexCheck( int charaindex,int elem, int *data, int flg);
typedef enum
{
TITLE_FUNCTYPENONE, /* 楮醒戲岳仄卅中 */
TITLE_FUNCTYPEUSERFUNC, /* definefunction 毛銀勻化 蟆毛綜月
* 楮醒及婁醒反
* int 平乓仿奶件犯永弁旦
* buf 蟆尺及田永白央
* buflen 公及田永白央及贏今
*/
TITLE_USEFUNCTYPENUM
}TITLE_USEFUNCTYPE;
typedef struct tagTITLE_Table
{
int index; /* 蛙犯□正午詢晶毛潸月兇戶[
* 仇及 寞匹手勻化addtitle午井支月
*/
char name[32];
TITLE_USEFUNCTYPE functype;
void (*definefunction)(int,char* buf,int buflen);
}TITLE_Table;
/* 銀尹月由仿丟□正
* STR,TGH,MAXMP]ATK,DEF
* LEVEL,CLASS,SKILL,ITEM,FIREREG,ICEREG,THUNDERREG
* KANJILV,TALKCNT,WALKCNT,DEADCNT,LOGINCNT,BASEIMAGENUMBER
* GOLD
*/
typedef struct tagTITLE_Compare {
char compare[8];;
} TITLE_COMPARE;
TITLE_COMPARE TITLE_compare[] = { {"<="}, {">="},{"<>"}, {">"},{"<"},{"="}};
typedef struct tagTITLE_PARAM
{
int element;
int (*checkfunc)( int charaindex,int elem, int *data, int flg );
char *paramname;
}TITLE_PARAM;
TITLE_PARAM TITLE_param[] =
{
/**** 仇仇井日 ****/
{ -1, TITLE_ItemCheck, "ITEM" },
{ -1, TITLE_ItemEquipCheck,"EQUIPITEM" },
{ -1, NULL, "EQUIPEVENT" },
/**** 仇仇引匹反 凳仄卅中匹仁分今中[ ****/
{ -1, TITLE_SkillCheck, "SKILL" },
{ CHAR_STR, TITLE_IntCheck, "STR" },
{ CHAR_TOUGH, TITLE_IntCheck, "TGH" },
{ CHAR_MAXMP, TITLE_IntCheck, "MAXMP" },
{ CHAR_WORKFIXSTR, TITLE_WorkIntCheck, "ATK" },
{ CHAR_WORKFIXTOUGH, TITLE_WorkIntCheck, "DEF" },
{ CHAR_LV, TITLE_IntCheck, "LEVEL" },
{ CHAR_TALKCOUNT, TITLE_IntCheck, "TALKCNT" },
{ CHAR_WALKCOUNT, TITLE_IntCheck, "WALKCNT" },
{ CHAR_DEADCOUNT, TITLE_IntCheck, "DEADCNT" },
{ CHAR_LOGINCOUNT, TITLE_IntCheck, "LOGINCNT" },
{ CHAR_BASEBASEIMAGENUMBER,TITLE_IntCheck, "BASEIMAGENUMBER" },
{ CHAR_GOLD, TITLE_IntCheck, "GOLD" },
{ -1, TITLE_SexCheck, "SEX" },
};
#define TITLE_PARAMSIZE 20
typedef struct tagTITLE_configTable
{
int paramindex[20]; /* TITLE_param尺及驕儂 */
int param[20][TITLE_PARAMSIZE]; /* 笠襖 */
int compareflg[20]; /* ><=羈升丹允月井 */
int title;
BOOL equipcheckflg; /*
* 失奶 丞啖 奶矛件玄匹反仇及白仿弘及 勻化中月
* 手及仄井腹綢仄卅中[
*/
}TITLE_CONFIGTABLE;
typedef struct tagTITLE_configbuf
{
int title;
int flg;
}TITLE_CONFIGBUF;
static TITLE_CONFIGTABLE *TITLE_ConfigTable;
static TITLE_Table *TITLE_table;
static TITLE_CONFIGBUF *TITLE_configbuf;
static int TITLE_titlenum;
static int TITLE_titlecfgnum;
/*------------------------------------------------------------
* index 寞井日TITLE_table及驕儂毛 月
------------------------------------------------------------*/
int TITLE_getTitleIndex( int index)
{
int i;
if( index < 0 ) return -1;
for( i = 0; i < TITLE_titlenum; i ++ ) {
if( TITLE_table[i].index == index ) {
return( i);
}
}
return -1;
}
/* 田永白央及扔奶術 */
#define TITLESTRINGBUFSIZ 256
/* 弁仿奶失件玄卞葦六月旦平伙犯□正及 儂 及田永白央 */
static char TITLE_statusStringBuffer[TITLESTRINGBUFSIZ];
/*------------------------------------------------------------
* 弁仿奶失件玄卞葦六月憊寞及 儂 毛綜月
* 婁醒
* title Title* 旦平伙
* charaindex int 仇及憊寞毛 勻化中月平乓仿及奶件犯永弁旦
* 忒曰襖
* char*
------------------------------------------------------------*/
char* TITLE_makeTitleStatusString( int charaindex,int havetitleindex )
{
int attach;
int index;
/* 楮醒 尺及奶件犯永弁旦井日犯□正毛綜岳允月 */
index = CHAR_getCharHaveTitle( charaindex,havetitleindex );
#if 0
if( TITLE_CHECKTABLEINDEX( index ) == FALSE ){
TITLE_statusStringBuffer[0] = '\0';
return TITLE_statusStringBuffer;
}
#endif
attach = TITLE_getTitleIndex( index);
if( attach == -1 ) {
TITLE_statusStringBuffer[0] = '\0';
return TITLE_statusStringBuffer;
}
switch( TITLE_table[attach].functype ){
case TITLE_FUNCTYPENONE:
snprintf( TITLE_statusStringBuffer,
sizeof(TITLE_statusStringBuffer ),"%s" ,
TITLE_table[attach].name );
break;
case TITLE_FUNCTYPEUSERFUNC:
{
char string[256]={""};
void (*function)(int,char* buf,int buflen);
function = TITLE_table[attach].definefunction;
if( function )
function( charaindex,string,sizeof(string) );
strcpysafe( TITLE_statusStringBuffer,
sizeof(TITLE_statusStringBuffer ),string );
}
break;
default:
TITLE_statusStringBuffer[0] = '\0';
return TITLE_statusStringBuffer;
break;
}
return TITLE_statusStringBuffer;
}
/*------------------------------------------------------------
* 卅中憊寞及 儂 犯□正毛忒允
* 婁醒
* 卅仄
* 忒曰襖
* char*
------------------------------------------------------------*/
char* TITLE_makeSkillFalseString( void )
{
TITLE_statusStringBuffer[0]= '\0';
return TITLE_statusStringBuffer;
}
/*------------------------------------------------------------
* 隙爛今木兇 寞及憊寞毛馨笛允月[褐今卅勻化中兇日}馨笛仄卅中
* 婁醒
* charaindex int 平乓仿奶件犯永弁旦
* titleindex int 憊寞奶件犯永弁旦
* 忒曰襖
* 馨笛仄兇index
* 馨笛仄卅井勻兇 FALSE(0)
------------------------------------------------------------*/
BOOL TITLE_addtitle( int charaindex, int titleindex )
{
int i;
int firstfindempty=-1;
if( CHAR_CHECKINDEX(charaindex) == FALSE )return FALSE;
/*if( TITLE_CHECKTABLEINDEX(titleindex) == FALSE )return FALSE;*/
if( TITLE_getTitleIndex( titleindex) == -1 ) return FALSE;
for( i=0 ; i < CHAR_TITLEMAXHAVE ; i++ ){
if( CHAR_getCharHaveTitle( charaindex,i ) == titleindex )
/* 允匹卞 勻化中月井日窒手仄卅中 */
return FALSE;
if( firstfindempty == -1
&& CHAR_getCharHaveTitle(charaindex,i) == -1 ){
firstfindempty = i;
}
}
return CHAR_setCharHaveTitle( charaindex,firstfindempty,titleindex );
}
/*------------------------------------------------------------
* 隙爛今木兇 寞及憊寞互丐勻兇日綽輪允月[卅井勻兇日窒手仄卅中[
* 醒蜊丐勻兇日蟈 壅允[
* 婁醒
* charaindex int 平乓仿奶件犯永弁旦
* titleindex int 憊寞奶件犯永弁旦
* 忒曰襖
* 綽輪仄兇 TRUE(1)
* 綽輪仄卅井勻兇 FALSE(0)
------------------------------------------------------------*/
BOOL TITLE_deltitle( int charaindex, int titleindex )
{
int i;
BOOL del=FALSE;
int index;
if( CHAR_CHECKINDEX(charaindex) == FALSE )return FALSE;
/*if( TITLE_CHECKTABLEINDEX(titleindex) == FALSE )return FALSE;*/
index = TITLE_getTitleIndex( titleindex);
if( index == -1 ) return FALSE;
for( i=0 ; i < CHAR_TITLEMAXHAVE ; i++ )
if( CHAR_getCharHaveTitle( charaindex,i ) == titleindex ){
/* 憤坌互銀勻化中兇支勾卅日壬}公木手卅仄卞允月 */
if( CHAR_getInt(charaindex, CHAR_INDEXOFEQTITLE) == i ){
CHAR_setInt(charaindex, CHAR_INDEXOFEQTITLE, -1 );
}
/* 勻化中月井日壅允 */
CHAR_setCharHaveTitle( charaindex,i,-1);
del = TRUE;
}
return del;
}
/*------------------------------------------------------------
* 憊寞及賡渝祭毛允月[
* 婁醒
* filename char* 澀爛白央奶伙
* 忒曰襖
* 岳 TRUE(1)
* 撩 FALSE(0)
*------------------------------------------------------------*/
BOOL TITLE_initTitleName( char* filename )
{
FILE* f;
char line[256];
int linenum=0;
int title_readlen=0;
f = fopen(filename,"r");
if( f == NULL ){
errorprint;
return FALSE;
}
TITLE_titlenum=0;
/* 引內 躲卅墊互窒墊丐月井升丹井譬屯月 */
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
TITLE_titlenum++;
}
if( fseek( f, 0, SEEK_SET ) == -1 ){
fprint( "尋找錯誤\n" );
fclose(f);
return FALSE;
}
TITLE_table = allocateMemory( sizeof(struct tagTITLE_Table)
* TITLE_titlenum );
if( TITLE_table == NULL ){
fprint( "無法分配內存 %d\n" ,
sizeof(TITLE_table)*TITLE_titlenum);
fclose( f );
return FALSE;
}
/* 賡渝祭 */
{
int i;
for( i = 0; i < TITLE_titlenum; i ++ ) {
TITLE_table[i].index = -1;
TITLE_table[i].name[0] = '\0';
TITLE_table[i].functype = TITLE_FUNCTYPENONE;
TITLE_table[i].definefunction = NULL;
}
}
/* 引兇 心 允 */
linenum = 0;
while( fgets( line, sizeof( line ), f ) ){
linenum ++;
if( line[0] == '#' )continue; /* comment */
if( line[0] == '\n' )continue; /* none */
chomp( line );
/* 墊毛幫溥允月 */
/* 引內 tab 毛 " " 卞 五晶尹月 */
replaceString( line, '\t' , ' ' );
/* 燮 及旦矢□旦毛潸月[*/
{
int i;
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;
/* 夫午勾戶及玄□弁件毛葦月 */
ret = getStringFromIndexWithDelim( line,",",1,token,
sizeof(token));
if( ret==FALSE ){
fprint("文件語法錯誤:%s 第%d行\n",filename,linenum);
continue;
}
TITLE_table[title_readlen].index = atoi(token);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -