/********************************* * ¤·¤«¤±¤é¤ì¤¿»þ¤Î½è *********************************/ void NPC_LuckyManTalked( int meindex , int talkerindex , char *szMes ,int color ) { char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buf[256]; char token[512]; int cost; /*-- ¤ÎÁ°¤Ë¤¤¤ë¤«¤É¤¦¤«¡ª--*/ if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2) == FALSE) { /* £±¥°¥ê¥Ã¥É°Ê ¤Î¤ß */ if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return; } /*--ÀßÄê¥Õ¥¡¥¤¥ë¤ò ¤ß ¤ß--*/ if((argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)))== NULL) { print("NPC_ExChange.c TypeCheck: GetArgStrErr\n"); print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME)); return; } NPC_Util_GetStrFromStrWithDelim( argstr,"Stone", buf, sizeof( buf)); cost = NPC_GetMoney( meindex, talkerindex, buf); NPC_Util_GetStrFromStrWithDelim( argstr,"main_msg", buf, sizeof( buf)); sprintf( token, buf, cost); NPC_LuckyMan_selectWindow( meindex, talkerindex, 2, token); }
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; }
void NPC_LuckyDisp(int meindex,int talker) { char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buf[16]; char token[1024]; char buf2[512]; int i = 1; /*--ÀßÄê¥Õ¥¡¥¤¥ë¤ò ¤ß ¤ß--*/ if((argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)))== NULL) { print("NPC_Savepoint.c Init: GetArgStrErr"); return; } /*--±¿¤ò¸«¤ë--*/ sprintf( buf, "luck%d", CHAR_getInt( talker, CHAR_LUCK)); NPC_Util_GetStrFromStrWithDelim( argstr, buf, buf2, sizeof( buf2)); while(getStringFromIndexWithDelim( buf2, ",", i, token, sizeof( token)) != FALSE) { i++; } i--; i = rand()%i + 1; /*--¥é¥ó¥À¥à¤Ç¥á¥Ã¥»¡¼¥¸¤ò ¼¨¤µ¤»¤ë--*/ getStringFromIndexWithDelim( buf2,",", i, token, sizeof( token)); NPC_LuckyMan_selectWindow( meindex, talker, 1, token); }
/********************************* * 賡渝質 *********************************/ BOOL NPC_FmLetterInit( int meindex ) { char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buf[1024]; //int i; //char secondToken[1024]; // Robin test // print(" fmleter_Init "); argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); if( NPC_Util_GetStrFromStrWithDelim( argstr, "conff", buf, sizeof( buf)) == NULL ) { print( "fmletter:沒有指定設定的檔案 。\n"); return FALSE; } /* 賡渝凜卞澀爛犯□正毛民尼永弁仄化支月 */ if( !NPC_FmLetter_readData( meindex, -1, TRUE) ) { return FALSE; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWINDOWMAN ); return TRUE; }
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; }
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; }
/********************************* * Øƾ®ØêÈÕľÐ×Áݼ°ÖÊ *********************************/ void NPC_LuckyManTalked( int meindex , int talkerindex , char *szMes ,int color ) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[256]; char token[512]; int cost; /*-- ¼°ó¡±åÖÐÔ¾®Éýµ¤¾®£¢--*/ if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2) == FALSE) { /* ¨àºëØøÓÀÓñ¶¯ ¼°ÐÄ */ if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return; } /*--ɬÀð×ÑëÄÌ»ïë ÐÄ ÐÄ--*/ if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("NPC_ExChange.c TypeCheck: GetArgStrErr\n"); print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME)); return; } NPC_Util_GetStrFromStrWithDelim( argstr,"Stone", buf, sizeof( buf)); cost = NPC_GetMoney( meindex, talkerindex, buf); NPC_Util_GetStrFromStrWithDelim( argstr,"main_msg", buf, sizeof( buf)); sprintf( token, buf, cost); NPC_LuckyMan_selectWindow( meindex, talkerindex, 2, token); }
BOOL NPC_WarpManInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; char buff2[256]; char buf[1024]; int fl,x,y; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("WarpMan:GetArgStrErr"); return FALSE; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN ); #ifdef _NEW_WARPMAN if( strstr( npcarg,"NEWWARPMAN") ) { //timeman 功能 CHAR_setWorkInt( meindex, NPC_TIME_MODE, 1); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buff2, sizeof( buff2)) != NULL ){ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 60*1000); } #ifdef _TREASURE_BOX CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_NONE); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_BOX", buff2, sizeof( buff2)) != NULL ){ if( strstr( buff2, "ON") != NULL ){ CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT); CHAR_setWorkInt( meindex, NPC_TIME_EVENTTIME, NowTime.tv_sec); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_ONBBI", buff2, sizeof( buff2)) != NULL ) CHAR_setWorkInt( meindex, NPC_TIME_EVENONBBI, atoi( buff2)); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_OFFDBBI", buff2, sizeof( buff2)) != NULL ) CHAR_setWorkInt( meindex, NPC_TIME_EVENOFFDBBI, atoi( buff2)); CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0 ); } } #endif return TRUE; }else{ #endif if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){ char filename[256]; if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL ) print("\n Warpman Err -> file:%s", filename); return FALSE; } getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2)); fl=atoi(buff2); getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2)); x=atoi(buff2); getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2)); y=atoi(buff2); if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){ char filename[256]; NPC_Util_CheckAssignArgFile( meindex, filename); print( "\nWarp NPC: filename:%s\n 3.Invalid warpman ERR %d %d %d" , filename, fl , x , y ); return FALSE; } #ifdef _NEW_WARPMAN } #endif return TRUE; }
void NPC_SimpleShopTalked( int meindex, int talker, char *msg, int color ) { #define SHOPRANGE 3 char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE], token[NPC_UTIL_GETARGSTR_LINEMAX]; if( CHAR_getInt( talker,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER ){ return; } if( NPC_Util_charIsInFrontOfChar( talker, meindex, SHOPRANGE ) && ! CHAR_getFlg( talker,CHAR_ISDIE ) ){ NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)); getStringFromIndexWithDelim( npcarg,"|", OPENSHOPTOKEN,token, sizeof(token)); if( NPC_SimpleShopOpenShopOrNot( msg, token ) && NPC_Util_isFaceToFace( meindex, talker, SHOPRANGE ) ){ CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, talker ); NPC_SimpleShopOpenShopWindow( meindex, talker, npcarg ); }else{ int tokennum; int i; char tmp[NPC_UTIL_GETARGSTR_LINEMAX]; getStringFromIndexWithDelim( npcarg,"|", MSGTOKEN,token, sizeof(token)); tokennum = 1; for( i=0;token[i]!='\0';i++ ){ if( token[i] == ',' ) tokennum++; } getStringFromIndexWithDelim( token,",", rand()%tokennum+1,tmp, sizeof(tmp)); CHAR_talkToCli( talker, meindex, tmp, CHAR_COLORWHITE ); } } }
/********************************* * ½é´ü½è *********************************/ BOOL NPC_WindowmanInit( int meindex ) { char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buf[1024]; //int i; //char secondToken[1024]; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); if( NPC_Util_GetStrFromStrWithDelim( argstr, "conff", buf, sizeof( buf)) == NULL ) { print( "windowman:¨S¦³«ü©w³]©wªºÀÉ®× ¡C\n"); return FALSE; } /* ½é´ü»þ¤ËÀßÄê¥Ç¡¼¥¿¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤ä¤ë */ if( !NPC_Windowman_readData( meindex, -1, TRUE) ) { return FALSE; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWINDOWMAN ); return TRUE; }
void NPC_NPCEnemyWatch( int meobjindex, int objindex, CHAR_ACTION act, int x,int y,int dir, int* opt,int optlen ) { int born, dead; int meindex, index; char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; if( OBJECT_getType( objindex) != OBJTYPE_CHARA) return; index = OBJECT_getIndex( objindex); if( !CHAR_CHECKINDEX( index) ) return; if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return; meindex = OBJECT_getIndex( meobjindex); if( !CHAR_CHECKINDEX( meindex) ) return; if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1))) == NULL ){ print("WarpMan:GetArgStrErr"); return; } if( !strstr( npcarg,"NEWNPCENEMY") ) return; if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) == FALSE ) return; NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) ); }
void NPC_NPCEnemyTalked( int meindex , int talkerindex , char *szMes , int color ) { char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; char buf[256]; if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof( npcarg1))) == NULL ) { print("Can't GetArgStr !!"); return; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf, sizeof( buf)) != NULL ){ if( CHAR_getWorkInt( meindex, NPC_TIME_MODE) <= 0 ) { if( NPC_Util_GetStrFromStrWithDelim( npcarg, "Time_Msg", buf, sizeof( buf) ) != NULL) { CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORYELLOW); } return; } } if( !NPC_Util_charIsInFrontOfChar( talkerindex, meindex, 1 )) return; if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) >= 1 ) { NPC_NPCEnemy_Encount( meindex, talkerindex, 1); } }
void NPC_DepotItem_Depot_printWindow( int meindex, int talkerindex) { char itemstring[65536-1024]; char sendstring[65536]; char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buff[1024]; char buff2[1024]; char buff3[1024]; int fd; if( (fd = getfdFromCharaIndex( talkerindex)) == -1 )return; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); snprintf( sendstring, sizeof( sendstring), "1|%s|%s|%s|%s|", CHAR_getChar( meindex, CHAR_NAME), NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_DRAW, argstr, buff2, sizeof( buff2)), NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_ITEMFULL, argstr, buff, sizeof( buff)), NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_REALY, argstr, buff3, sizeof( buff3)) ); NPC_DepotItem_MakeDepotString( meindex, talkerindex, itemstring, sizeof( itemstring)); strcat( sendstring, itemstring); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_POOLITEMSHOPMAIN, WINDOW_BUTTONTYPE_NONE, CHAR_WINDOWTYPE_DEPOTITEMSHOP_GET, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), sendstring); //print("\n NPC_DepotItem_Depot_printWindow:%s size:%d ", sendstring, strlen(sendstring)); }
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 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 NPC_QuizItemFullCheck(int meindex,int talker) { int i; int itemindex; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf2[32]; for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ) { itemindex = CHAR_getItemIndex( talker , i ); if( !ITEM_CHECKINDEX( itemindex) ) { return TRUE; } } if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME)); } if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryItem", buf2, sizeof( buf2)) != NULL) { if(NPC_EntryItemCheck( talker, buf2) == FALSE) { NPC_Quiz_selectWindow( meindex, talker, 3); return FALSE; } else { return TRUE; } } return FALSE; }
BOOL NPC_NPCEnemy_BattleIn( int meindex, int charaindex) { int gym; int ret; char buf[256]; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; memset( argstr, 0, sizeof( argstr)); NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); gym = NPC_Util_GetNumFromStrWithDelim( argstr, "gym"); if( gym > 0 ){ ret = BATTLE_CreateVsEnemy( charaindex, 2, meindex); }else{ ret = BATTLE_CreateVsEnemy( charaindex, 1, meindex); } if( ret == 0 ) { BattleArray[CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX)].WinFunc = NPC_NPCEnemy_Dying; if( NPC_Util_GetStrFromStrWithDelim( argstr, "startmsg", buf, sizeof( buf)) != NULL ){ CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW ); } if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf))!= NULL ){ if( atoi( buf) == 0 ) { NPC_NPCEnemy_StealItem( argstr, meindex, charaindex); } } } return ( ret == 0 ) ?TRUE:FALSE ; }
/********************************* * �ƾ�����ľ���ݼ��� *********************************/ void NPC_ActionTalked( int meindex , int talkerindex , char *szMes , int color ) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[64]; /* �����������帲�ƻ����� ɱ���� */ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* ��������� ���� */ if( !NPC_Util_charIsInFrontOfChar( talkerindex, meindex, 1 )) return; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); if( NPC_Util_GetStrFromStrWithDelim( argstr, "normal", buf, sizeof( buf)) != NULL ) { CHAR_talkToCli( talkerindex, meindex ,buf , 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 NPC_RidermanInit( int meindex ) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024]; //int i; //char secondToken[1024]; // Robin test // print(" riderman_Init "); NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); if( NPC_Util_GetStrFromStrWithDelim( argstr, "conff", buf, sizeof( buf))== NULL ) { print( "riderman:没有指定设定的档案 。\n"); return FALSE; } /* 赓渝凛卞涩烂犯□正毛民尼永弁仄化支月 */ if( !NPC_Riderman_readData( meindex, -1, TRUE) ) { return FALSE; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWINDOWMAN ); return TRUE; }
void NPC_LuckyDisp(int meindex,int talker) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[16]; char token[1024]; char buf2[512]; int i = 1; /*--ɬÀð×ÑëÄÌ»ïë ÐÄ ÐÄ--*/ if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) { print("NPC_Savepoint.c Init: GetArgStrErr"); return; } /*--ÞÑëÎÔÂ--*/ sprintf( buf, "luck%d", CHAR_getInt( talker, CHAR_LUCK)); NPC_Util_GetStrFromStrWithDelim( argstr, buf, buf2, sizeof( buf2)); while(getStringFromIndexWithDelim( buf2, ",", i, token, sizeof( token)) != FALSE) { i++; } i--; i = rand()%i + 1; /*--·Â¼þĸةƥ¶ªÓÀ±¾¡õ³âë Ô÷½ñÁùÔÂ--*/ getStringFromIndexWithDelim( buf2,",", i, token, sizeof( token)); NPC_LuckyMan_selectWindow( meindex, talker, 1, token); }
BOOL NPC_NewNpcManInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("TRANSER_MAN: GetArgStrErr!!"); return FALSE; } { int i; for( i=0; i<48; i++){ if( i == 0 ){ checkPc[i][0]=30000; checkPc[i][1]=30024; checkPc[i][2]=100000; }else{ checkPc[i][0] = checkPc[i-1][0] + 25; checkPc[i][1] = checkPc[i-1][1] + 25; checkPc[i][2] = checkPc[i-1][2] + 5; } // print("ANDY checkPc:%d[%d,%d,%d]\n", i, checkPc[i][0], checkPc[i][1], checkPc[i][2]); } } CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_NEWNPCMAN); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return TRUE; }
/* *��������ëGET���£� */ void NPC_WarpPointGet(int meindex,int talker,int *fl,int *x,int *y,int judge) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char *strbuf[2] = {"WinWarp","LoseWarp"}; char buf[64]; char buf2[32]; /*--ɬ�ð����̻�ë �� ��--*/ if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){ print("NPC_janken Init: GetArgStrErr"); return ; } /*--��������ë�� --*/ NPC_Util_GetStrFromStrWithDelim( argstr, strbuf[judge], buf, sizeof( buf)); getStringFromIndexWithDelim(buf,",",1,buf2,sizeof(buf2)); *fl=atoi(buf2); getStringFromIndexWithDelim(buf,",",2,buf2,sizeof(buf2)); *x=atoi(buf2); getStringFromIndexWithDelim(buf,",",3,buf2,sizeof(buf2)); *y=atoi(buf2); }
/*------------------------------------------------------------------------ * 婁醒井日丟永本□斥毛潸 允月 *----------------------------------------------------------------------*/ static char *NPC_Sysinfo_GetMsg( int meindex, char *msgindexstr, char *out,int outlen, int num ) { char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char *work; char *buff; char *cret = NULL; int worklen; worklen = strlen( msgindexstr)+3; work = (char *)calloc( 1, worklen * sizeof( char)); buff = (char *)calloc( 1, outlen * sizeof( char)); argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); snprintf( work, worklen, "%s%d", msgindexstr, num); if( NPC_Util_GetStrFromStrWithDelim( argstr, work, buff, outlen) != NULL ) { strcpy( out, buff); cret = out; } free( work); free( buff); return( cret); }
void NPC_DepotItem_Item_printWindow( int meindex, int talkerindex) { char itemstring[65536-1024]; char sendstring[65536]; char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buff2[1024]; char buff3[1024]; char buff4[1024]; int fd; if( (fd = getfdFromCharaIndex( talkerindex)) == -1 ){ fprint( "err\n"); return; } argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); snprintf( sendstring, sizeof( sendstring), "0|%d|%s|%s|%s|%s|", CHAR_getfindEmptyDepotItem( talkerindex), CHAR_getChar( meindex, CHAR_NAME), NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_POOL, argstr, buff2, sizeof( buff2)), NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_POOLFULL, argstr, buff3, sizeof( buff3)), NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_REALY, argstr, buff4, sizeof( buff4)) ); NPC_DepotItem_MakeItemString( meindex, talkerindex, itemstring, sizeof( itemstring)); strcat( sendstring, itemstring); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_POOLITEMSHOPMAIN, WINDOW_BUTTONTYPE_NONE, CHAR_WINDOWTYPE_DEPOTITEMSHOP_ADD, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), sendstring); }
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; }
/* * 苇日木凶[反卅允分仃[ */ void NPC_MsgLooked( int meindex , int lookedindex ) { char arg[NPC_UTIL_GETARGSTR_BUFSIZE]; NPC_Util_GetArgStr( meindex, arg, sizeof( arg)); CHAR_talkToCli( lookedindex , -1 , arg , CHAR_COLORWHITE ); }
static void NPC_TranserMan_selectWindow( int meindex, int toindex, int num,int select) { char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; char token[256]; int buttontype = 0, windowtype = 0, windowno = 0; int fd = getfdFromCharaIndex( toindex); windowtype = WINDOW_MESSAGETYPE_MESSAGE; if(NPC_Util_isFaceToFace( meindex ,toindex , 2) == FALSE) { if(NPC_Util_isFaceToChara( toindex, meindex, 1) == FALSE) return; } //memset( npcarg, 0, sizeof( npcarg)); if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)))==NULL){ print("TRANSER_MAN: GetArgStrErr!!"); return; } memset( token, 0, sizeof( token)); switch( num) { case WINDOW_START: if( NPC_Util_GetStrFromStrWithDelim( npcarg, "START_MSG", token, sizeof( token) ) == NULL) { print("TranserMan Get START_MSG ERROR !"); return; } CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, WINDOW_START); buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = NPC_TRANSERMAN_SELECT; break; case WINDOW_SELECT: if( TranserMan_GetMenuStr( meindex, toindex, npcarg, token) == FALSE ) { print( "TranserMan GetMenu ERROR !!"); return; } windowtype = WINDOW_MESSAGETYPE_SELECT; buttontype = WINDOW_BUTTONTYPE_CANCEL; windowno = NPC_TRANSERMAN_WARP; break; case WINDOW_WARP: if( ActionNpc_CheckMenuFree( meindex, toindex, npcarg, select) == FALSE ){ memset( token, 0, sizeof( token)); if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FAIL_MSG", token, sizeof( token) ) != NULL) { CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW); } } return; case WINDOW_END: break; } lssproto_WN_send( fd, windowtype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); }
int NPC_WarpInit(int charaindex) { char arg[NPC_UTIL_GETARGSTR_BUFSIZE]; int ret; int floor = -1, x = -1, y = -1; char token[128]; CHAR_setInt(charaindex, CHAR_WHICHTYPE, CHAR_TYPEWARP); if(NPC_Util_GetArgStr(charaindex, arg, sizeof(arg)) == NULL) { print("\n GetArgStr ERR!!"); return FALSE; } #ifdef _NEW_WARPPOINT if(strstr(arg, "FREEMORE") != NULL) { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } else { #endif return FALSE; ret = getStringFromIndexWithDelim(arg, "|", 1, token, sizeof(token)); if(ret) floor = atoi(token); ret = getStringFromIndexWithDelim(arg, "|", 2, token, sizeof(token)); if(ret) x = atoi(token); ret = getStringFromIndexWithDelim(arg, "|", 3, token, sizeof(token)); if(ret) y = atoi(token); if(MAP_IsValidCoordinate(floor, x, y) == FALSE) { NPC_WarpsetNeverMake(charaindex); //print( "Warp NPC:Invalid arg:%s\n", arg ); print("Warp Npc Err:%d:%d:%d->(%s)\n", CHAR_getInt(charaindex, CHAR_FLOOR), CHAR_getInt(charaindex, CHAR_X), CHAR_getInt(charaindex, CHAR_Y), arg); return FALSE; } ret = getStringFromIndexWithDelim(arg, "|", 4, token, sizeof(token)); if(ret == TRUE) { int day; day = NPC_TimeWarpCheck(charaindex, token, 0); if(day == 0) { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NIGHT); } else if(day == 1) { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_MORNING); } else if(day == 2) { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NOON); } else { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } } else { CHAR_setWorkInt(charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } #ifdef _NEW_WARPPOINT } #endif CHAR_setFlg(charaindex, CHAR_ISVISIBLE, 0); CHAR_setFlg(charaindex, CHAR_ISOVERED, 1); CHAR_setFlg(charaindex, CHAR_ISATTACKED, 0); CHAR_setFlg(charaindex, CHAR_ISATTACK, 0); return TRUE; }
/*----------------------------------------- * �ͷ���ʧ��������߯�Ȼ������ݱ���̫���ľ�£� * -------------------------------------------*/ void NPC_FMPKManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { int datanum = -1, fl, x, y; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024], buff2[256]; if (NPC_Util_GetArgStr(meindex, npcarg, sizeof(npcarg)) == NULL) { print("GetArgStrErr"); return; } NPC_Util_GetStrFromStrWithDelim(npcarg, "WARP", buf, sizeof(buf)); getStringFromIndexWithDelim(buf, ",", 1, buff2, sizeof(buff2)); fl = atoi(buff2); getStringFromIndexWithDelim(buf, ",", 2, buff2, sizeof(buff2)); x = atoi(buff2); getStringFromIndexWithDelim(buf, ",", 3, buff2, sizeof(buff2)); y = atoi(buff2); makeStringFromEscaped( data); // print("meindex:%d seqno:%d select:%d data:%s\n", meindex, seqno, select, data); datanum = atoi( data); switch( seqno) { /*--��Ԫ��Ի�� --*/ case CHAR_WINDOWTYPE_FMPKMAN_START: if (datanum == 1) NPC_FMPKMan_selectWindow(meindex, talkerindex, 1, -1); else if (datanum == 2) NPC_FMPKMan_selectWindow(meindex, talkerindex, 2, -1); break; case CHAR_WINDOWTYPE_FMPKMAN_VIEW: break; case CHAR_WINDOWTYPE_FMPKMAN_LEAVEPK: if (select == WINDOW_BUTTONTYPE_YES) { if (CHAR_getWorkInt(talkerindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return; // shan add if(NPC_PARTY_CHAECK1( meindex, talkerindex)==FALSE) { NPC_ERR_DiSP1( meindex, talkerindex, 1); return; } CHAR_setWorkInt(talkerindex, CHAR_WORKWARPCHECK, FALSE); CHAR_warpToSpecificPoint(talkerindex, fl, x, y); } break; default: break; } }