int MemberMan_GetMenuStr( int meindex, int toindex, char *npcarg, char *token, int num) { char buf1[1024], buf2[256], buf3[256]; BOOL FINDS=0; int talkNo=num; if( npcarg == NULL ) return FALSE; if( NPC_Util_GetStrFromStrWithDelim( npcarg, "MenuHead", buf1, sizeof( buf1) ) == NULL){ print("MemberMan Get MenuHead ERROR!"); return FALSE; } int MemberPoin = CHAR_getInt(toindex, CHAR_MEMBERORDER); sprintf( token,"%s %d \n", buf1,MemberPoin); //printf(token); while( getStringFromIndexWithDelim( npcarg,"}",talkNo, buf1, sizeof( buf1)) != FALSE ) { talkNo++; if (talkNo>(num+7)) { FINDS = 2; break; } memset( buf2, 0, sizeof( buf2)); if( NPC_Util_GetStrFromStrWithDelim( buf1, "MenuStr", buf2, sizeof( buf2)) == NULL ) continue; FINDS = 1; sprintf( buf3, " %s\n", buf2); strcat( token, buf3); } return FINDS; }
void NPC_SysinfoTalked( int meindex, int tindex, char *msg, int color) { char *msgwk; char *buff; int len; int msgno; len = strlen( msg)+1; msgwk = calloc( 1, sizeof(char)*len); buff = calloc( 1, sizeof(char)*len); strcpy( msgwk, msg); /* 旦矢□旦毛引午户月 */ deleteSequentChar( msgwk, " "); if( CHAR_getWorkInt( meindex, CHAR_WORK_MODE) == 0 ) { msgno = 0; if( strncmp( msgwk, cmd_msg[NPC_SYSINFO_MSG_STARTINFO].msg, strlen( cmd_msg[NPC_SYSINFO_MSG_STARTINFO].msg)) == 0) { if( getStringFromIndexWithDelim( msgwk, " ", 2, buff, len) == TRUE ) { if( strcmp( buff, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_PASSWD)) == 0 ) { CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 1); CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER, tindex); CHAR_setWorkInt( meindex, CHAR_WORK_TIME, NowTime.tv_sec); CHAR_talkToCli( tindex, meindex, "已移到指令模式。按下help即会出现说明档。", CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR)); CHAR_talkToCli( tindex, meindex, "可以在enemystate 中了解敌人的产生和行动数。", CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR)); } } } if( CHAR_getWorkInt( meindex, CHAR_WORK_MODE ) == 0 ) { NPC_Sysinfo_SendMsg( meindex, tindex, NPC_SYSINFO_ARG_DEF_MSG); } }else { if( tindex == CHAR_getWorkInt( meindex, CHAR_WORK_PLAYER)) { int i; for( i = NPC_SYSINFO_MSG_ENDINFO; i < NPC_SYSINFO_MSG_NUM; i ++ ) { if( strncmp( msgwk, cmd_msg[i].msg, strlen( cmd_msg[i].msg)) == 0) { if( functbl[i] != NULL ) { functbl[i]( meindex, tindex, msgwk); } break; } } CHAR_setWorkInt( meindex, CHAR_WORK_TIME, NowTime.tv_sec); } else { NPC_Sysinfo_SendMsg( meindex, tindex, NPC_SYSINFO_ARG_DEF_MSG); } } free( msgwk); free( buff); }
/*------------------------------------------------------------------------ * shutdown丟永本□斥質 *----------------------------------------------------------------------*/ static void NPC_Sysinfo_Msg_Shutdown( int meindex, int tindex, char *msg) { char buff[10]; int hun; /* 賡及丟永本□斥霜耨 */ NPC_Sysinfo_SendMsg( meindex, tindex, NPC_SYSINFO_ARG_SHUTDOWN_MSG); /* 凜棉本永玄 */ CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNTIME, NowTime.tv_sec); /* 孺蜃凜棉潸 */ if( getStringFromIndexWithDelim( msg, " ", 2, buff, sizeof( buff)) == TRUE ) { hun = atoi( buff); if( hun <= 0 ) { hun = NPC_SYSINFO_SHUTDOWNLIMIT_DEFAULT; } } else { hun = NPC_SYSINFO_SHUTDOWNLIMIT_DEFAULT; } CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNLIMIT, hun); CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNDSPTIME,0); }
/*------------------------------------------------------------------------ * 丟永本□斥市仿□毛 凳允月 *----------------------------------------------------------------------*/ static void NPC_Sysinfo_Msg_Msgcol( int meindex, int tindex, char *msg) { char buff[64]; typedef struct { int color; char str[10]; }SYSINFO_COLSET; SYSINFO_COLSET colset[] = { { 249, "red"}, { 250, "green"}, { 251, "yellow"}, { 252, "blue"}, { 253, "purple"}, { 254, "cyan"}, { 255, "white"}, }; if( getStringFromIndexWithDelim( msg, " ", 2, buff, sizeof( buff)) == TRUE ) { int i; for( i = 0; i < 7; i ++ ) { if( strstr( buff, colset[i].str) != NULL ) { CHAR_setWorkInt( meindex, CHAR_WORK_MSGCOLOR, colset[i].color); CHAR_talkToCli( tindex, meindex, "已改變訊息的顏色。", CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR)); break; } } } }
int NPC_DoormanInit( int meindex ) { char arg[NPC_UTIL_GETARGSTR_BUFSIZE]; char dname[1024]; /* 奶矛件玄及正奶皿涩烂 */ CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE,CHAR_EVENT_NPC); CHAR_setInt( meindex , CHAR_HP , 0 ); CHAR_setInt( meindex , CHAR_MP , 0 ); CHAR_setInt( meindex , CHAR_MAXMP , 0 ); CHAR_setInt( meindex , CHAR_STR , 0 ); CHAR_setInt( meindex , CHAR_TOUGH, 0 ); CHAR_setInt( meindex , CHAR_LV , 0 ); CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPETOWNPEOPLE ); CHAR_setFlg( meindex , CHAR_ISOVERED , 0 ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); /* 猾今木卅中方氏 */ NPC_Util_GetArgStr( meindex, arg, sizeof( arg)); if(!getStringFromIndexWithDelim( arg, "|", 3, dname, sizeof(dname ))){ print("RINGO: 设定看门者时需要门的名字唷!:%s:\n", arg ); return FALSE; } print( "RINGO: Doorman create: arg: %s dname: %s\n",arg,dname); CHAR_setWorkChar( meindex , CHAR_WORKDOORMANDOORNAME , dname ); return TRUE; }
/************************************** * ϶�ý�ľ��ʧ�� ةë �Ȼ����¾������������� * �Ȼ������շֻ� **************************************/ static BOOL NPC_BusCheckDeniedItem( int meindex, int charaindex, char *argstr) { char buf[1024]; BOOL found = TRUE; if( NPC_Util_GetStrFromStrWithDelim( argstr, "denieditem", buf, sizeof( buf)) != NULL ) { int i; int ret; for( i = 1; ; i ++) { int itemid; char buf2[64]; int j; ret = getStringFromIndexWithDelim( buf, ",", i, buf2, sizeof(buf2)); if( ret == FALSE ) break; itemid = atoi( buf2); for( j = 0; j < CHAR_MAXITEMHAVE; j ++) { int itemindex = CHAR_getItemIndex( charaindex, j); if( ITEM_CHECKINDEX( itemindex)) { if( ITEM_getInt( itemindex, ITEM_ID) == itemid) { found = FALSE; break; } } } } } return found; }
BOOL NPC_PetSkillShopInit( int meindex ) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char msg[256]; CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESTONESHOP ); if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){ print("GetArgStrErr"); return FALSE; } if( NPC_Util_GetStrFromStrWithDelim( argstr, "pet_skill", msg, sizeof( msg)) != NULL){ char buf[256], filename[256]; int k=1, skillID, skillarray; while( getStringFromIndexWithDelim( msg, ",", k, buf, sizeof( buf) ) ){ k++; skillID=atoi(buf); skillarray = PETSKILL_getPetskillArray( skillID); if( PETSKILL_CHECKINDEX( skillarray) == FALSE ) continue; if( PETSKILL_getInt( skillarray, PETSKILL_ILLEGAL) == 1){ if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL ){ print("PetSkillShop illegal skill:[%d-%s] ->file:%s", skillID, PETSKILL_getChar( skillarray, PETSKILL_NAME), filename ); } } } }else{ return FALSE; } return TRUE; }
static int NPC_Riderman_restoreButtontype( char *data ) { int ret = 0; int rc; int i; char buff[1024]; for( i = 1; ; i ++ ) { rc = getStringFromIndexWithDelim( data, "|", i, buff, sizeof( buff ) ); if( rc == FALSE) break; if( strcasecmp( buff, "ok") == 0 ) { ret |= WINDOW_BUTTONTYPE_OK; } else if( strcasecmp( buff, "cancel") == 0 ) { ret |= WINDOW_BUTTONTYPE_CANCEL; } else if( strcasecmp( buff, "yes") == 0 ) { ret |= WINDOW_BUTTONTYPE_YES; } else if( strcasecmp( buff, "no") == 0 ) { ret |= WINDOW_BUTTONTYPE_NO; } else if( strcasecmp( buff, "prev") == 0 ) { ret |= WINDOW_BUTTONTYPE_PREV; } else if( strcasecmp( buff, "next") == 0 ) { ret |= WINDOW_BUTTONTYPE_NEXT; } } if( ret == 0 ) { ret = atoi( data); } return ret; }
/* 蝈衬平乓仿毛 NO_BODY 卞允月井升丹井 */ static void NPC_Sysinfo_All_NoBody( int meindex, int tindex, char *msg ){ char buff[256]; buff[0] = buff[1] = 0; if( getStringFromIndexWithDelim( msg, " ", 2, buff, sizeof( buff)) == TRUE ) { if( strncmp( buff, "on", strlen( buff ) ) == 0 ){ all_nobody = 1; snprintf( buff, sizeof( buff), "已开启all_nobody 。" ); CHAR_talkToCli( tindex, meindex, buff, CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR)); }else if( strncmp( buff, "off", strlen( buff ) ) == 0 ){ all_nobody = 0; snprintf( buff, sizeof( buff), "已关闭all_nobody 。" ); CHAR_talkToCli( tindex, meindex, buff, CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR)); } }else if( all_nobody == 0 ){ snprintf( buff, sizeof( buff), "all_nobody 关闭着。" ); CHAR_talkToCli( tindex, meindex, buff, CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR)); }else{ snprintf( buff, sizeof( buff), "all_nobody 开启着。" ); CHAR_talkToCli( tindex, meindex, buff, CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR)); } }
/* * 仄井仃日木凶午五反NPCARGUMENT毛公及引引 允〔 */ void NPC_TownPeopleTalked( int index, int talker, char *msg, int color ) { char arg1[NPC_UTIL_GETARGSTR_BUFSIZE], token[NPC_UTIL_GETARGSTR_LINEMAX]; char *arg; int i, tokennum; /* 3弘伉永玉動 及樺寧分仃忒蠶允月 */ if( CHAR_getInt(talker,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER && NPC_Util_charIsInFrontOfChar( talker, index, 3 ) ){ arg = NPC_Util_GetArgStr( index, arg1, sizeof( arg1)); tokennum = 1; /* 戊件穴匹嗉濠日木凶玄□弁件互窒仇丐月井醒尹月 */ for( i=0;arg[i]!='\0';i++ ){ if( arg[i] == ',' ) tokennum++; } /* 仿件母丞匹升木毛韻月井瑁戶化}公及玄□弁件毛潸曰分允 */ getStringFromIndexWithDelim( arg,",", rand()%tokennum+1,token, sizeof(token)); CHAR_talkToCli( talker, index, token, CHAR_COLORWHITE ); } }
BOOL NPCS_HandleCheckFreeMess( int npcobjindex, int charaindex, int charobjindex, char *CheckfreeMess) { BOOL ReCall = FALSE; BOOL Enable = FALSE; char buf1[1024], buf2[256]; int i=1; //主條件判斷 while( getStringFromIndexWithDelim( CheckfreeMess, "OVER", i, buf1, sizeof( buf1)) != FALSE ){ i++; if( NPC_Util_GetStrFromStrWithDelim( buf1, "FREE", buf2, sizeof( buf2)) == NULL ) continue; if( NPCS_FreePassCheck( charaindex, buf2) == TRUE ){ if( NPC_Util_GetStrFromStrWithDelim( buf1, "FreeMess", buf2, sizeof( buf2)) == NULL ) continue; Enable = TRUE; if( NPCS_RunDoEventAction( charaindex, buf1) == FALSE ) return FALSE; //事件處理 NPCS_NpcstalkToCli( charaindex, npcobjindex, buf2, CHAR_COLORYELLOW); break; } } if( Enable == FALSE ){//所有條件不成立 NPCS_NpcstalkToCli( charaindex, npcobjindex, "條件不足!", CHAR_COLORYELLOW); return FALSE; } if( ReCall == TRUE ){ //判斷是否recall } return TRUE; }
BOOL NPC_getLostPetString( int meindex, int toindex) { FILE *fp = NULL; char *CdKey=NULL; int count=0, i, ltime; char filename[256], line[2048], buf1[256]; for( i=0; i<7; i++) strcpy( petstring[i], ""); CdKey = CHAR_getChar( toindex, CHAR_CDKEY ); if( CdKey == NULL ) return FALSE; sprintf( filename, "lostpet/%s.txt", CdKey); if( (fp=fopen( filename, "r")) == NULL ) return FALSE; while( fgets( line , sizeof( line ) , fp ) && count < 7){ if(strlen( line) <= 0 ) continue; // if( getStringFromIndexWithDelim( line, "#", 2, buf1, sizeof( buf1)) == FALSE ) return FALSE; // Terry fix ¶ÁȡʱûÓÐÅжÏʱ¼ä 2004/09/22 if(getStringFromIndexWithDelim(line,"|",6,buf1,sizeof(buf1)) == FALSE) continue; ltime = atoi(buf1); ltime = time( NULL) - ltime; ltime = ltime/(60*60*24); if(ltime > 14) continue;//Ðø·Å14Ìì // Terry end strcpy( petstring[count++], line); } fclose( fp); return TRUE; }
/*----------------------------------------------- * ¼¡²ó³«ºÅ»þ´Ö¡¤Éô²°¤ò¸À¤¦ *----------------------------------------------*/ static void NPC_RoomAdminNew_DspNextAuction( int meindex, int talkerindex) { char msgbuf[2048]; time_t closetime; closetime = CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME); /* ¼¡¤Î³«ºÅ»þ´Ö¤¬·è¤Þ¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¡Ö·è¤Þ¤Ã¤Æ¤Þ¤»¤ó¡£¡×¥á¥Ã¥»¡¼¥¸*/ if( closetime == 0 ) { snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION_NONE ); CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); } else { int doorindex; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char explain[1024]; /*ÀâÌÀ*/ char buff[16]; struct tm tmwk; int difftime; /* Éô²°¾ðÊó¤ò¼èÆÀ */ doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM)); NPC_Util_GetArgStr( doorindex, argstr, sizeof( argstr)); getStringFromIndexWithDelim(argstr, "|" , 9 , explain,sizeof(explain)); /* Éô²°¾ðÊó*/ if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) { strcpy( buff, "¸¹«Ç"); } else { buff[0] = '\0'; } snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION1, explain, CHAR_getChar( doorindex, CHAR_NAME), buff ); CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); /* Äù¤áÀÚ¤ê»þ´Ö */ memcpy( &tmwk, localtime( &closetime), sizeof( tmwk)); difftime = closetime - NowTime.tv_sec; snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION2, tmwk.tm_hour, tmwk.tm_min, difftime / 3600, (difftime % 3600) / 60 ); CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); /* ²¼¸Â¶â³Û */ snprintf( msgbuf, sizeof( msgbuf), NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION3, CHAR_getWorkChar( doorindex, CHAR_WORKDOORGOLDLIMIT) ); CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR); } }
BOOL TranserMan_GetMenuStr( int meindex, int toindex, char *npcarg, char *token) { char buf1[1024], buf2[256], buf3[256]; BOOL FINDS=FALSE; int talkNo=1; if( npcarg == NULL ) return FALSE; if( NPC_Util_GetStrFromStrWithDelim( npcarg, "MenuHead", buf1, sizeof( buf1) ) == NULL){ print("TranserMan Get MenuHead ERROR!"); return FALSE; } sprintf( token, "%s\n", buf1); while( getStringFromIndexWithDelim( npcarg,"}",talkNo, buf1, sizeof( buf1)) != FALSE ) { talkNo++; memset( buf2, 0, sizeof( buf2)); if( NPC_Util_GetStrFromStrWithDelim( buf1, "MenuStr", buf2, sizeof( buf2)) == NULL ) continue; FINDS = TRUE; sprintf( buf3, " %s\n", buf2); strcat( token, buf3); } return FINDS; }
static BOOL NPC_SimpleShopProcessBuyMsg(char *msg, int shopindex, int playerindex ) { int shopwindowindex, itemtableindex,itemind; int price, tmpgold; char buf[64]; if(!CHAR_CHECKINDEX(shopindex)||!CHAR_CHECKINDEX(playerindex)) return -1; if( !getStringFromIndexWithDelim( msg,"|",4,buf,sizeof(buf) )){ return -1; } shopwindowindex = atoi(buf); itemtableindex=NPC_ShopWindowIndexToItemTableIndex( shopindex, shopwindowindex ); itemind = CHAR_getItemIndex(shopindex,itemtableindex ); if( ! ITEM_CHECKINDEX(itemind) ) return -1; price = ITEM_getInt( itemind, ITEM_COST ) * NPC_Util_buyRate(playerindex); tmpgold = CHAR_getInt(playerindex,CHAR_GOLD); if( tmpgold < price ){ return -2; } if( ! NPC_Util_moveItemToChar(playerindex,itemind,TRUE ) ){ return -3; } CHAR_AddGold( playerindex, price ); CHAR_sendStatusString( playerindex , "P"); return 1; }
BOOL VipShop_GetMenuStr( int meindex, int toindex, char *npcarg, char *token,int index ) { char buf1[1024], buf2[32], buf3[36]; BOOL FINDS=FALSE; int talkNo=index*7+1; if( npcarg == NULL ) return FALSE; sprintf( token, "你当前的积分是:%d %d/%d页\n",sasql_ampoint(CHAR_getUseID(toindex),0,0), index+1, page); while( getStringFromIndexWithDelim( npcarg,"}",talkNo, buf1, sizeof( buf1)) != FALSE ) { talkNo++; memset( buf2, 0, sizeof( buf2)); if( NPC_Util_GetStrFromStrWithDelim( buf1, "MenuStr", buf2, sizeof( buf2)) == NULL ) continue; FINDS = TRUE; sprintf( buf3, " %s", buf2); if(strlen(buf3)<10) strcat( buf3, " \n"); else strcat( buf3, "\n"); strcat( token, buf3); if(talkNo>(index*7+8))return FINDS; } return FINDS; }
BOOL NPC_FreePetSkillShopInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char msg[256]; CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_FREESKILLSHOP ); CHAR_setWorkInt( meindex, CHAR_WORK_SKILLSELECT, 0); if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("GetArgStrErr NO arg !!"); return FALSE; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "pet_skill", msg, sizeof( msg)) != NULL){ char buf[256], filename[256]; int k=1, skillID, skillarray; while( getStringFromIndexWithDelim( msg, ",", k, buf, sizeof( buf) ) ){ k++; skillID=atoi(buf); skillarray = PETSKILL_getPetskillArray( skillID); if( PETSKILL_CHECKINDEX( skillarray) == FALSE ) continue; if( PETSKILL_getInt( skillarray, PETSKILL_ILLEGAL) == 1){ if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL ){ print("\n宠物技能不规范:[%d-%s] ->文件:%s\n", skillID, PETSKILL_getChar( skillarray, PETSKILL_NAME), filename ); } } } }else{ return FALSE; } return TRUE; }
BOOL NPC_DoormanInit( int meindex ) { char arg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *arg; char dname[1024]; /* ¥¤¥Ù¥ó¥È¤Î¥¿¥¤¥×ÀßÄê */ CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE,CHAR_EVENT_NPC); CHAR_setInt( meindex , CHAR_HP , 0 ); CHAR_setInt( meindex , CHAR_MP , 0 ); CHAR_setInt( meindex , CHAR_MAXMP , 0 ); CHAR_setInt( meindex , CHAR_STR , 0 ); CHAR_setInt( meindex , CHAR_TOUGH, 0 ); CHAR_setInt( meindex , CHAR_LV , 0 ); CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPETOWNPEOPLE ); CHAR_setFlg( meindex , CHAR_ISOVERED , 0 ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); /* ·â¤µ¤ì¤Ê¤¤¤è¤ó */ arg = NPC_Util_GetArgStr( meindex, arg1, sizeof( arg1)); if(!getStringFromIndexWithDelim( arg, "|", 3, dname, sizeof(dname ))){ print("RINGO: ³]©w¬ÝªùªÌ®É»Ýnªùªº¦W¦rò¡I:%s:\n", arg ); return FALSE; } print( "RINGO: Doorman create: arg: %s dname: %s\n",arg,dname); CHAR_setWorkChar( meindex , CHAR_WORKDOORMANDOORNAME , dname ); return TRUE; }
BOOL NPC_WindowHealerInit( int meindex ) { char *npcarg; char buf2[256]; int range=1; int rate; double drate; CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEHEALER ); npcarg = CHAR_getChar(meindex,CHAR_NPCARGUMENT); /*--荚汊允月午五及云嗯毛潸月伊矛伙毛筏盛--*/ if(getStringFromIndexWithDelim(npcarg,"|",1,buf2,sizeof(buf2))!=FALSE){ CHAR_setWorkInt(meindex,CHAR_WORK_LEVEL,atoi(buf2)); }else{ return FALSE; } if(getStringFromIndexWithDelim(npcarg, "|", 2, buf2, sizeof( buf2)) != FALSE ){ drate = atof(buf2); if(drate==0) { rate=500; }else{ rate=(int) (drate * RATE); } CHAR_setWorkInt(meindex,CHAR_WORK_HP,rate); } if(getStringFromIndexWithDelim(npcarg, "|", 3, buf2, sizeof( buf2)) != FALSE ){ drate = atof(buf2); if(drate==0){ rate=2000; }else{ rate=(int)( drate * RATE); } CHAR_setWorkInt(meindex,CHAR_WORK_MP,rate); } if(getStringFromIndexWithDelim(npcarg, "|", 4, buf2, sizeof( buf2)) != FALSE ){ range=atoi(buf2); if(range == 0){ range=1; } } CHAR_setWorkInt(meindex,CHAR_WORK_RANGE,range); return TRUE; }
int MAPPOINT_setMapWarpGoal( int ps, char *buf) { char buf1[256]; if( MAPPOINT_CHECKINDEX( ps) ){ print(" 放置传送点获得 :%s!!\n", buf); return -1; } memset( buf1, 0, sizeof( buf1)); if( getStringFromIndexWithDelim( buf, ",", 1, buf1, sizeof(buf1)) ==FALSE ) return -1;//原点 MapWarppoint[ps].floor = atoi( buf1); if( getStringFromIndexWithDelim( buf, ",", 2, buf1, sizeof(buf1)) ==FALSE ) return -1;//原点 MapWarppoint[ps].x = atoi( buf1); if( getStringFromIndexWithDelim( buf, ",", 3, buf1, sizeof(buf1)) ==FALSE ) return -1;//原点 MapWarppoint[ps].y = atoi( buf1); return 1; }
BOOL NPC_OldmanInit( int meindex ) { #if 0 int oldmanid=0, bornfl=0, bornx=0 ,borny=0; char* npcarg; char token[32]=""; /* print( "長老的引數: '%s'\n" , CHAR_getChar( meindex, CHAR_NPCARGUMENT ));*/ npcarg = CHAR_getChar(meindex,CHAR_NPCARGUMENT); getStringFromIndexWithDelim( npcarg,"|",1,token,sizeof(token)); oldmanid = atoi( token ); getStringFromIndexWithDelim( npcarg,"|",2,token,sizeof(token)); bornfl = atoi( token ); getStringFromIndexWithDelim( npcarg,"|",3,token,sizeof(token)); bornx = atoi( token ); getStringFromIndexWithDelim( npcarg,"|",4,token,sizeof(token)); borny = atoi( token ); /* 贏 反ID毛創尹化雲仁瓜伉 */ CHAR_setWorkInt( meindex , CHAR_WORKOLDMANID ,oldmanid ); CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEHEALER ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); CHAR_setFlg( meindex , CHAR_ISOVERED , 0 ); if( MAP_IsValidCoordinate( bornfl,bornx,borny )== TRUE /* 白夫失ID互中中井升丹井毛譬屯月 */ && CHAR_ElderSetPosition( oldmanid ,bornfl,bornx, borny ) == TRUE ){ /* 贏 及匏 毛賡渝祭允月卅曰 */ return TRUE; }else{ printf( "Invalid elder npcarg=%s\n", npcarg ); /* 丐引曰卞褐邰卅巨仿□卅及匹}neverMake仄卅中〔 莢巨仿□丟永本□斥請今六月 */ return FALSE; } #endif return FALSE; }
int VipShop_ShowMenulist( char *npcarg ) { char buf1[1024]; int talkNo=1; while( getStringFromIndexWithDelim( npcarg,"}",talkNo, buf1, sizeof( buf1)) != FALSE ) { talkNo++; } return (talkNo-3)/7+1; }
/*------------------------------------------------------------------------ * 隙爛今木凶丟永本□斥 儂 毛霜耨允月 *----------------------------------------------------------------------*/ static void NPC_Sysinfo_Msg_SendMsg( int meindex, int tindex, char *msg) { char buff[512]; if( getStringFromIndexWithDelim( msg, " ", 2, buff, sizeof( buff)) == TRUE ) { NPC_Sysinfo_SendMsgToAll( meindex, buff); } }
BOOL PetTalk_AddItem(int meindex, int talker, char *buf) { int itemID,k=1,itemindex=-1; int spaceNum=5,i; char buff3[256], msgbuf[64], token[256]; int ret; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; for( i = spaceNum ; i < CHAR_MAXITEMHAVE ; i++ ){ itemindex=CHAR_getItemIndex( talker , i ); if( itemindex == -1 ) { spaceNum = i+1; break; } } if( i == CHAR_MAXITEMHAVE ) { snprintf( msgbuf,sizeof( msgbuf), "主人,你的物品栏已经满了!!"); CHAR_talkToCli( talker, meindex, msgbuf, CHAR_COLORWHITE); return FALSE; } } k=1; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; itemID = atoi( buff3); if( itemID ) itemindex = ITEM_makeItemAndRegist( itemID); if(itemindex == -1) continue; ret = CHAR_addItemSpecificItemIndex( talker, itemindex); if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) { ITEM_endExistItemsOne( itemindex); print ("\n ret error!!"); return FALSE; } sprintf( token,"拿到%s",ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talker, -1,token,CHAR_COLORWHITE); CHAR_sendItemDataOne( talker, ret); } return TRUE; }
BOOL NPC_SkillShopWarp( int meindex, int talkindex) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char data[1024], buf1[256], buf2[256]; int i=1, j=1; BOOL EvFlg=FALSE; struct { int FLOOR; int X; int Y; }Points[MAXNPCPOINT]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("GetArgStrErr"); return FALSE; } for( i=0;i<MAXNPCPOINT;i++) { Points[i].FLOOR = -1; Points[i].X = -1; Points[i].Y = -1; } //WARP //NPC_POINT if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NPC_POINT", data, sizeof( data)) != NULL ) { int where=0; i=1; j=0; while( getStringFromIndexWithDelim( data, ";", i, buf1, sizeof( buf1)) != FALSE ) { i++; getStringFromIndexWithDelim( buf1, ",", 1, buf2, sizeof( buf2)); Points[j].FLOOR = atoi( buf2); getStringFromIndexWithDelim( buf1, ",", 2, buf2, sizeof( buf2)); Points[j].X = atoi( buf2); getStringFromIndexWithDelim( buf1, ",", 3, buf2, sizeof( buf2)); Points[j].Y = atoi( buf2); j++; if( j >= MAXNPCPOINT ) break; } where = RAND( 0, i-1); CHAR_warpToSpecificPoint( meindex, Points[where].FLOOR, Points[where].X, Points[where].Y); EvFlg = TRUE; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", data, sizeof( data)) != NULL ) { int P_Floor,P_X,P_Y; getStringFromIndexWithDelim( data, ",", 1, buf2, sizeof( buf2)); P_Floor = atoi( buf2); getStringFromIndexWithDelim( data, ",", 2, buf2, sizeof( buf2)); P_X = atoi( buf2); getStringFromIndexWithDelim( data, ",", 3, buf2, sizeof( buf2)); P_Y = atoi( buf2); CHAR_warpToSpecificPoint( talkindex, P_Floor, P_X, P_Y); EvFlg = TRUE; } return EvFlg; }
/************************************************ * ½é´ü½èÍý ************************************************/ BOOL NPC_RoomAdminNewInit( int meindex ) { int i; char buf[256]; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; /* ¼«Ê¬¤Î´É³í¤ÎÁ´Éô¤Î¥É¥¢¤¬½ÐÍè¾å¤¬¤ë¤Þ¤Ç¤³¤ÎNPC¤ÏºîÀ®¤µ¤ì¤Ê¤¤ */ for( i = 3; ; i ++ ) { if( getStringFromIndexWithDelim(argstr, "|" , i , buf,sizeof(buf) )) { if( NPC_DoorSearchByName( buf) < 0 ) { print( "admin not created.¦b±K½Xªù°µ¦n¤§«e¥ýµ¥«Ý¡C\n"); return FALSE; } } else{ break; } } NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); /* ½é´ü²½½èÍý */ /* type¥»¥Ã¥È */ CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEROOMADMIN); /* ͸úÈϰϼèÆÀ */ getStringFromIndexWithDelim(argstr, "|" , 1 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKINT_RANGE , atoi( buf )); /* ¼«Ê¬¤Î̾Á°¼èÆÀ */ if( !getStringFromIndexWithDelim(argstr, "|" , 2 , buf,sizeof(buf) )) { print( "arg err.admin not created.\n"); return( FALSE); } CHAR_setWorkChar( meindex , CHAR_WORKCHAR_MYNAME , buf); /* ɽ¼¨ÍÑ¡ÖÄùÀÚ¡©Ê¬Á°¡×½é´ü²½ */ CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, 0); /* ¼¡¤Îʪ·ï¤È¥ª¡¼¥¯¥·¥ç¥ó³«ºÅ»þ´Ö¤ò¥»¥Ã¥È */ NPC_RoomAdminNew_SetNextAuction( meindex); return TRUE; }
int NPC_getNextTitle( int meindex, int toindex, char *arg, int title, int select) { char buf[NPC_UTIL_GETARGSTR_BUFSIZE], buf1[1024], buf2[256]; int toID=0; memset( buf, 0, sizeof( buf)); if( getStringFromIndexWithDelim( arg, "PSYCHOMETRICS", 2, buf, sizeof( buf)) == FALSE ) return -1; if( getStringFromIndexWithDelim( buf , "}", title, buf1, sizeof( buf1)) == FALSE ) return -1; if( select == WINDOW_BUTTONTYPE_YES ) { if( NPC_Util_GetStrFromStrWithDelim( buf1, "YESFOR", buf2, sizeof( buf2 )) == NULL) return -1; }else { if( NPC_Util_GetStrFromStrWithDelim( buf1, "NOFOR", buf2, sizeof( buf2) ) == NULL) return -1; } toID = atoi( buf2); return toID; }
void NPC_TimeManTalked( int meindex , int talkerindex , char *msg ,int color ) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char token[512]; char buf[512]; int tokennum=0; int i; /*--目の前にいるかどうか?--*/ if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2)==FALSE){ /* 1グリッド以内のみ */ if( NPC_Util_CharDistance( talkerindex ,meindex ) > 1) return; } if(CHAR_getInt(meindex,CHAR_BASEIMAGENUMBER)==9999){ /*--消えているモード--*/ return; } if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){ print("GetArgStrErr"); return; } if( CHAR_getInt(talkerindex,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER )return; if( NPC_Util_charIsInFrontOfChar( talkerindex, meindex, 3 ) ==FALSE) return; if(CHAR_getWorkInt(meindex,E_INT_MODE)==0){ /*--メッセージを返す */ NPC_Util_GetStrFromStrWithDelim(argstr,"main_msg",buf,sizeof( buf) ); }else{ /*グラフィックNOを変えただけなので、違うメッセージを返す */ NPC_Util_GetStrFromStrWithDelim(argstr,"change_msg",buf,sizeof( buf) ); } tokennum = 1; /* コンマで区切られたトークンが何こあるか数える */ for( i=0;buf[i]!='\0';i++ ){ if( buf[i] == ',' ) tokennum++; } /* ランダムでどれを喋るか決めて、そのトークンを取りだす */ getStringFromIndexWithDelim( buf,",", rand()%tokennum+1,token, sizeof(token)); /*--しゃべる--*/ CHAR_talkToCli( talkerindex, meindex, token, CHAR_COLORWHITE ); }
BOOL NPCS_FreeBigSmallCheck( int charaindex,char* buf) { char buff1[128], buff2[128], Head[128]; int kosuu,temp=-1,flg=0; memset( Head, 0, sizeof( Head)); if( strstr( buf, "=" ) != NULL ){ strcpy( Head, "="); flg = uEQUAL; if( strstr( buf, ">") != NULL ){ strcat( Head, ">"); flg = uBIGEQUALt; }else if( strstr( buf, "<") != NULL ){ strcat( Head, "<"); flg = uSMALLEQUALt; }else if( strstr( buf, "!") != NULL ) { strcat( Head, "!"); flg = uNEQUAL; } }else if(strstr( buf, "<") != NULL){ strcpy( Head, "<"); flg = uSMALLTHAN; }else if(strstr( buf, ">") != NULL){ strcpy( Head, ">"); flg = uBIGTHAN; } Head[ strlen( Head)+1] = 0; getStringFromIndexWithDelim( buf, Head, 2, buff2, sizeof(buff2)); getStringFromIndexWithDelim( buf, Head, 1, buff1, sizeof(buff1)); if( strstr( buff2, "*") != NULL ){ char buff3[128]; getStringFromIndexWithDelim( buff2, "*", 1, buff3, sizeof(buff3)); temp = atoi( buff3); getStringFromIndexWithDelim( buff2, "*", 2, buff3, sizeof(buff3)); kosuu = atoi( buff3); }else { kosuu = atoi( buff2); temp = 1; } return NPCS_ArgumentFreeCheck( charaindex, buff1, kosuu, flg, temp); }
void NPC_Util_RandomToken(char *in, char *out, int outbufsize ) { int tokennum; int i; tokennum = 1; for( i=0;in[i]!='\0';i++ ){ if( in[i] == ',' ) tokennum++; } getStringFromIndexWithDelim(in,",", rand()%tokennum+1,out,outbufsize ); }