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; }
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; }
/* 井凶曰屯〔 伉伉□旦 匹反2潘 及仇午分引〔 NPCARGUMENT: 0分勻凶日仇午分引0}1分勻凶日仇午分引1及賄曰 〔 橇謫反3勾丐曰}賜卞褡墊允月〔 橇謫0「 失奶玉伉件弘〔仇及橇謫匹talk今木月午} >方仁五凶}幻僕幻僕方〔中井卞手}歹仄互鰻 及井凶曰屯元扎〔=匹 橇謫1卞啖墊〔 橇謫1「talk今木凶日} >公卅凶互及冗戈卅日壬}熔午夫五井尹卞}雄 卅蛻暱毛夫午勾} 今內仃方丹〔 公及蛻暱毛及冗戈井? yes/no=yes匹橇謫2尺〔no匹 >匹反}今日壬元扎〔=匹橇謫0尺 橇謫2「 talk今木凶日} >公卅凶卞鰻 及蛻暱>幻僕幻僕=毛鰻噩仄凶〔 及勾亢卞 濠卅手及午仄化 域戲 濠卞允月屯仄〔今日壬元扎〔= 午中勻化熔毛蛹日仄}蛻暱白仿弘毛馨笛允月〔 匹橇謫0卞手升月〔 Talked: if( 卞反卅仄化井日1坌凶勻化中月井〞){ 橇謫0卞手升月〔 } switch(橇謫){ case 0: 質 〔橇謫1尺〔break; case 1: 質 〔橇謫2尺〔break; case 2: 質 〔橇謫0尺〔break; } } */ BOOL NPC_StoryTellerInit( int meindex ) { CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESTORYTELLER ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); CHAR_setFlg( meindex , CHAR_ISOVERED , 0 ); return TRUE; }
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; }
int NPC_DoorRefreshOverFlg( int meind ) { if( !CHAR_CHECKINDEX(meind))return FALSE; if( NPC_Door_isOpen( meind ) ==1 ){ CHAR_setFlg( meind , CHAR_ISOVERED , 1 ); } else { CHAR_setFlg( meind , CHAR_ISOVERED , 0 ); } return TRUE; }
void CHAR_playerresurrect( int charaindex, int hp ) { CHAR_setInt(charaindex,CHAR_BASEIMAGENUMBER, CHAR_getInt(charaindex,CHAR_BASEBASEIMAGENUMBER)); CHAR_setFlg(charaindex,CHAR_ISDIE, 0); CHAR_setFlg(charaindex,CHAR_ISATTACKED, 1); CHAR_setFlg(charaindex,CHAR_ISOVERED, 0); if( hp >= CHAR_getWorkInt(charaindex,CHAR_WORKMAXHP) ) hp = CHAR_getWorkInt(charaindex,CHAR_WORKMAXHP); else if( hp <= 0 ) hp = 1; CHAR_setInt(charaindex,CHAR_HP, hp); }
void NPC_DoorPostOver( int meindex , int movedindex ) { if( CHAR_getWorkInt( meindex , CHAR_WORKDOORSOONFLG )){ CHAR_setInt( meindex , CHAR_TALKCOUNT, 1 ); CHAR_setFlg( meindex , CHAR_ISOVERED , 0 ); /* 骚木卅仁允月 */ } }
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; }
/* * ½é´ü²½¤¹¤ë¡e */ BOOL NPC_SimpleShopInit( int meindex ) { unsigned int mlevel; char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; /* °ì²ó¼º ¤·¤¿¤¢¤È¤Ï2Å٤Ⱥî¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë */ int createindex = CHAR_getInt( meindex, CHAR_NPCCREATEINDEX ); /* print("shopinit start\n" );*/ if( NPC_CHECKCREATEINDEX(createindex) ){ NPC_create[createindex].intdata[NPC_CREATETIME] = -1; } 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 ); mlevel = ((100<<16)|(100<<0)); /* ¾å°Ì2¥Ð¥¤¥È¤¬ ¤¦¤È¤¤Î ¡b ²¼°Ì2¥Ð¥¤¥È¤¬ ¤ë¤È¤¤Î ¡e */ CHAR_setInt( meindex, CHAR_MERCHANTLEVEL, mlevel ); CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, -1 ); CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESHOP ); CHAR_setFlg( meindex , CHAR_ISOVERED , 0 ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)); /* ¥¢¥¤ ¥à ¤¿¤»¤ë¡e¼º ¤·¤¿¤éreturn FALSE */ if( ! NPC_SimpleShopFillItem( meindex,npcarg ) ){ print( "SHOP INIT ERROR: npcarg=%s\n", npcarg ); return FALSE; } /* print("shopinit end\n" );*/ return TRUE; }
BOOL NPC_AlldomanInit( int meindex ) { if( loadherolist == 0){ loadherolist = 1; saacproto_UpdataStele_send ( acfd , "FirstLoad", "LoadHerolist" , "华义" , 0 , 0 , 0 , 999 ) ; } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEALLDOMAN); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); return TRUE; }
BOOL NPC_SimpleShopInit( int meindex ) { unsigned int mlevel; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; int createindex = CHAR_getInt( meindex, CHAR_NPCCREATEINDEX ); /* print("shopinit start\n" );*/ if( NPC_CHECKCREATEINDEX(createindex) ){ NPC_create[createindex].intdata[NPC_CREATETIME] = -1; } 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 ); mlevel = ((100<<16)|(100<<0)); /* ÏþÞË2ÌïÄÌÐþ»¥ µ¤ÎçÎå¼° £ý ƱÞË2ÌïÄÌÐþ»¥ ÔÂÎçÎå¼° £Û */ CHAR_setInt( meindex, CHAR_MERCHANTLEVEL, mlevel ); CHAR_setWorkInt( meindex, CHAR_WORKSHOPCLIENTINDEX, -1 ); CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESHOP ); CHAR_setFlg( meindex , CHAR_ISOVERED , 0 ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)); if( ! NPC_SimpleShopFillItem( meindex,npcarg ) ){ print( "SHOP INIT ERROR: npcarg=%s\n", npcarg ); return FALSE; } /* print("shopinit end\n" );*/ return TRUE; }
/********************************* * 賡渝質 *********************************/ BOOL NPC_SysinfoInit( int meindex ) { int tmp; char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buff[128]; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 0); /* 由旦伐□玉本永玄 */ if( NPC_Util_GetStrFromStrWithDelim( argstr, "passwd", buff, sizeof( buff)) == NULL) { strcpy( buff, NPC_SYSINFO_PASSWD_DEFAULT); } CHAR_setWorkChar( meindex, CHAR_WORKCHAR_PASSWD, buff); tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "time"); if( tmp == -1 ) tmp = NPC_SYSINFO_TIMELIMIT_DEFAULT; CHAR_setWorkInt( meindex, CHAR_WORK_TIMELIMIT, tmp); /* 丟永本□斥及縉潸 */ tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "msg_col"); if( tmp < CHAR_COLORRED || tmp > CHAR_COLORWHITE ) tmp = CHAR_COLORYELLOW; CHAR_setWorkInt( meindex, CHAR_WORK_MSGCOLOR, tmp); CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER, -1); CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNTIME, 0); CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNDSPTIME, 0); CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEOTHERNPC); CHAR_setFlg( meindex, CHAR_ISATTACKED, 0); return TRUE; }
/* * 玉失日仄中涩烂毛允月卞反}仇仇匹 * maxhp , maxmp , level , str , tough 毛0卞允月午方中[ * */ int NPC_DoorInit( int meindex ) { char arg[NPC_UTIL_GETARGSTR_BUFSIZE]; char settingdir[1024]; char buf[256]; NPC_Util_GetArgStr( meindex, arg, sizeof( arg)); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE,CHAR_EVENT_NPC); getStringFromIndexWithDelim(arg, "|" , 1 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOOROPENG , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 2 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSEG , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 3 , buf,sizeof(buf) ); CHAR_setWorkChar( meindex , CHAR_WORKDOORNAME , buf ); strcpysafe( settingdir,sizeof( settingdir) , buf ); getStringFromIndexWithDelim(arg, "|" , 4 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORSWITCHCOUNT , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 5 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSETIME , atoi( buf )); CHAR_setInt( meindex , CHAR_MERCHANTLEVEL , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 6 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORSOONFLG , atoi( buf )); getStringFromIndexWithDelim(arg, "|" , 7 , buf,sizeof(buf) ); CHAR_setWorkInt( meindex , CHAR_WORKDOORPASSFLG , atoi( buf )); CHAR_setWorkInt( meindex , CHAR_WORKDOORORIGINALGRAPHIC, CHAR_getInt( meindex,CHAR_BASEIMAGENUMBER )); CHAR_setInt( meindex, CHAR_LV, 0 ); if( getStringFromIndexWithDelim( arg , "|" , 8 , buf ,sizeof( buf ))){ if( strncmp( buf , "title" ,5 ) == 0 ){ print( "This is a title door:'%s'\n" , buf ); CHAR_setWorkInt( meindex , CHAR_WORKDOORPASSFLG ,0 ); CHAR_setWorkChar( meindex , CHAR_WORKDOORTITLE , buf ); CHAR_setInt( meindex, CHAR_LV, 1 ); } else if( isdigit( buf[0] )){ if( getStringFromIndexWithDelim(arg, "|" , 8 , buf,sizeof(buf) )) CHAR_setWorkChar( meindex, CHAR_WORKDOORGOLDLIMIT, buf); if( getStringFromIndexWithDelim(arg, "|" , 10 , buf,sizeof(buf) )) CHAR_setWorkChar( meindex, CHAR_WORKDOORWEEK, buf); if( getStringFromIndexWithDelim(arg, "|" , 11 , buf,sizeof(buf) )) CHAR_setWorkChar( meindex, CHAR_WORKDOORHOUR, buf); if( getStringFromIndexWithDelim(arg, "|" , 12 , buf,sizeof(buf) )) CHAR_setWorkChar( meindex, CHAR_WORKDOORMINUTE, buf); } } 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 ); { int g = CHAR_getWorkInt( meindex , CHAR_WORKDOOROPENG ); if( g >= 11900 && g <= 11915 ){ CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , 15 ); } else if( g >= 11916 && g <= 11931 ){ CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , 16 ); } else { CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , -1 ); } if(CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG )==2){ CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID , -2 ); } if( CHAR_getInt( meindex , CHAR_BASEIMAGENUMBER ) == ROPEGRAPHIC ){ CHAR_setWorkInt( meindex , CHAR_WORKDOORKEYITEMID,-2 ); } } { int closeg = CHAR_getWorkInt( meindex , CHAR_WORKDOORCLOSEG ); int dir = -1; switch( closeg ){ case 11900: dir = 6; break; /* 霁及玉失 夫分曰仄凶 */ case 11902: dir = 0; break; /* 夫分曰丹尹 */ case 11904: dir = 2; break; /* 心亢丹尹 */ case 11906: dir = 4; break; /* 心亢仄凶 */ case 11908: dir = 6; break; /* 赢中霁及玉失 夫分曰仄凶 */ case 11910: dir = 0; break; /* 夫分曰丹尹 */ case 11912: dir = 2; break; /* 心亢丹尹 */ case 11914: dir = 4; break; /* 心亢仄凶 */ case 11916: dir = 6; break; /* 嗡及玉失 夫分曰仄凶 */ case 11918: dir = 0; break; /* 夫分曰丹尹 */ case 11920: dir = 2; break; /* 心亢丹尹 */ case 11922: dir = 4; break; /* 心亢仄凶 */ case 11924: dir = 6; break; /* 赢中嗡及玉失 夫分曰仄凶 */ case 11926: dir = 0; break; /* 夫分曰丹尹 */ case 11928: dir = 2; break; /* 心亢丹尹 */ case 11930: dir = 4; break; /* 心亢仄凶 */ case 11958: dir = 2; break; /* 赢中 及玉失 心亢丹尹 */ case 11960: dir = 4; break; /* 心亢仄凶 */ case 11962: dir = 6; break; /* 夫分曰仄凶 */ case 11964: dir = 0; break; /* 夫分曰丹尹 */ case 11966: dir = 2; break; /* 及玉失 心亢丹尹 */ case 11968: dir = 4; break; /* 心亢仄凶 */ case 11970: dir = 6; break; /* 夫分曰仄凶 */ case 11972: dir = 0; break; /* 夫分曰丹尹 */ case 11978: dir = 2; break; /* 赢中嗯及玉失 心亢丹尹 */ case 11980: dir = 4; break; /* 心亢仄凶 */ case 11982: dir = 6; break; /* 夫分曰仄凶 */ case 11984: dir = 0; break; /* 夫分曰丹尹 */ case 11986: dir = 2; break; /* 嗯及玉失 心亢丹尹 */ case 11988: dir = 4; break; /* 心亢仄凶 */ case 11990: dir = 6; break; /* 夫分曰仄凶 */ case 11992: dir = 0; break; /* 夫分曰丹尹 */ default: break; } if( dir >= 0 )CHAR_setInt(meindex,CHAR_DIR,dir); } CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEDOOR ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); CHAR_setInt( meindex , CHAR_WORKDOORSWITCHCURRENT , 0 ); CHAR_setWorkInt( meindex, CHAR_WORKDOOREXPIRETIME, 0xffffffff); if( CHAR_getWorkInt( meindex , CHAR_WORKDOORPASSFLG ) == 1){ NPC_ROOMINFO roominfo; if( NPC_RoomAdminNew_ReadFile( CHAR_getWorkChar( meindex, CHAR_WORKDOORNAME), &roominfo) == TRUE ){ NPC_DoorSetPasswd( meindex, roominfo.passwd); CHAR_setWorkInt( meindex, CHAR_WORKDOOREXPIRETIME, roominfo.expire); }else { NPC_DoorSetPasswd( meindex, "8hda8iauia90494jasd9asodfasdf89" ); if( getStringFromIndexWithDelim(arg, "|" , 13 , buf,sizeof(buf) )) if( strlen( buf) != 0 ) NPC_DoorSetPasswd( meindex, buf ); } } CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER , CHAR_getWorkInt(meindex, CHAR_WORKDOORCLOSEG)); NPC_DoorRefreshOverFlg( meindex ); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_NPC); return TRUE; }
/*------------------------------------- ºÝ¤ËÂÑµ× ¤Èµ¤ ¤ò²óÉü¤µ¤»¤ë¤È¤³¤í ---------------------------------------*/ void NPC_WindowHealerAllHeal( int talker,int mode ) { int i; int petindex; char petsend[64]; char msgbuf[64]; /*--ÂÑµ× ¤Î¤ß²óÉü--*/ if(mode==1){ /*--HP¤¬ÂÑµ× ¤Ê¤Î¤Ç¤¢¤ë--*/ CHAR_setInt( talker , CHAR_HP ,CHAR_getWorkInt( talker, CHAR_WORKMAXHP ) ); }else if(mode==2){ /*--µ¤ ¤Î¤ß²óÉü--*/ /*--MP¤¬µ¤ ¤Ê¤Î¤Ç¤¢¤ë--*/ CHAR_setInt( talker , CHAR_MP ,CHAR_getWorkInt( talker, CHAR_WORKMAXMP ) ); }else if(mode==3){ /*--Á´²óÉü---*/ CHAR_setInt( talker , CHAR_HP ,CHAR_getWorkInt( talker, CHAR_WORKMAXHP ) ); CHAR_setInt( talker , CHAR_MP ,CHAR_getWorkInt( talker, CHAR_WORKMAXMP ) ); } /*--¥Ú¥Ã¥È¤Ï¶³¤Þ¤±¤Ç²óÉü¤·¤Æ¤¢¹²¤ë--*/ for(i=0;i<CHAR_MAXPETHAVE;i++){ petindex = CHAR_getCharPet(talker,i); if( petindex == -1 ) continue; /* ¥¥ã¥é¤Î ¥Á¥§¥Ã¥¯ */ if( !CHAR_CHECKINDEX( talker ) ) continue; /*--²óÉü--*/ CHAR_setFlg( petindex,CHAR_ISDIE,0 ); CHAR_setInt( petindex , CHAR_HP ,CHAR_getWorkInt( petindex, CHAR_WORKMAXHP ) ); CHAR_setInt( petindex , CHAR_MP ,CHAR_getWorkInt( petindex, CHAR_WORKMAXMP ) ); /*--¥Ñ¥é¥á¡¼¥¿Ä´À°--*/ CHAR_complianceParameter( petindex ); sprintf( petsend, "K%d", i ); CHAR_sendStatusString( talker , petsend ); } /*--¥Ñ¥é¥á¡¼¥¿Á÷¤ê--*/ CHAR_send_P_StatusString(talker,CHAR_P_STRING_HP); CHAR_send_P_StatusString(talker,CHAR_P_STRING_MP); /*---Ãç´Ö¤¬¤¤¤ì¤ÐÃç´Ö¤Ë¤âÁ÷¿®--*/ if(CHAR_getWorkInt( talker, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE ) { int topartyarray = -1; int oyaindex = CHAR_getWorkInt( talker , CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX( oyaindex )) { int i; /* ¼«Ê¬¤È¼£¤·¤¿¤ä¤Ä¤ÎÃç´Ö¤Î ¤Î¾ì½ê¤ò¼è */ for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int workindex = CHAR_getWorkInt( oyaindex, CHAR_WORKPARTYINDEX1 +i); if( CHAR_CHECKINDEX( workindex) ) { if( workindex == talker ) { topartyarray = i; break; } } } for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int otherindex = CHAR_getPartyIndex( talker, i); /* Ãç´Ö¥Ñ¥é¥á¡¼¥¿¤òÁ÷¤ë */ if( CHAR_CHECKINDEX( otherindex) ) { snprintf( msgbuf, sizeof( msgbuf), "N%d", topartyarray); if( otherindex != talker) { CHAR_sendStatusString( otherindex, msgbuf); } } } } } }
/*------------------------------------- 端卞覲菁 午竣 毛莢汊今六月午仇欠 ---------------------------------------*/ void NPC_WindowHealerAllHeal( int talker,int mode ) { int i; int petindex; char petsend[64]; char msgbuf[64]; /*--覲菁 及心莢汊--*/ if(mode==1){ /*--HP互覲菁 卅及匹丐月--*/ CHAR_setInt( talker , CHAR_HP ,CHAR_getWorkInt( talker, CHAR_WORKMAXHP ) ); }else if(mode==2){ /*--竣 及心莢汊--*/ /*--MP互竣 卅及匹丐月--*/ CHAR_setInt( talker , CHAR_MP ,CHAR_getWorkInt( talker, CHAR_WORKMAXMP ) ); }else if(mode==3){ /*--蟈莢汊---*/ CHAR_setInt( talker , CHAR_HP ,CHAR_getWorkInt( talker, CHAR_WORKMAXHP ) ); CHAR_setInt( talker , CHAR_MP ,CHAR_getWorkInt( talker, CHAR_WORKMAXMP ) ); } /*--矢永玄反雲引仃匹莢汊仄化丐僕月--*/ for(i=0;i<CHAR_MAXPETHAVE;i++){ petindex = CHAR_getCharPet(talker,i); if( petindex == -1 ) continue; /* 平乓仿及 民尼永弁 */ if( !CHAR_CHECKINDEX( talker ) ) continue; /*--莢汊--*/ CHAR_setFlg( petindex,CHAR_ISDIE,0 ); CHAR_setInt( petindex , CHAR_HP ,CHAR_getWorkInt( petindex, CHAR_WORKMAXHP ) ); CHAR_setInt( petindex , CHAR_MP ,CHAR_getWorkInt( petindex, CHAR_WORKMAXMP ) ); /*--由仿丟□正譬幫--*/ CHAR_complianceParameter( petindex ); sprintf( petsend, "K%d", i ); CHAR_sendStatusString( talker , petsend ); } /*--由仿丟□正霜曰--*/ CHAR_send_P_StatusString(talker,CHAR_P_STRING_HP); CHAR_send_P_StatusString(talker,CHAR_P_STRING_MP); /*---醮棉互中木壬醮棉卞手霜耨--*/ if(CHAR_getWorkInt( talker, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE ) { int topartyarray = -1; int oyaindex = CHAR_getWorkInt( talker , CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX( oyaindex )) { int i; /* 憤坌午慫仄凶支勾及醮棉及 及樺赭毛潸 */ for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int workindex = CHAR_getWorkInt( oyaindex, CHAR_WORKPARTYINDEX1 +i); if( CHAR_CHECKINDEX( workindex) ) { if( workindex == talker ) { topartyarray = i; break; } } } for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int otherindex = CHAR_getPartyIndex( talker, i); /* 醮棉由仿丟□正毛霜月 */ if( CHAR_CHECKINDEX( otherindex) ) { snprintf( msgbuf, sizeof( msgbuf), "N%d", topartyarray); if( otherindex != talker) { CHAR_sendStatusString( otherindex, msgbuf); } } } } } }
/*------------------------------------------------------------ * 啖 允月[ * 娄醒 * index int 平乓仿及奶件犯永弁旦 * dir int 轾 * 忒曰袄 * CHAR_WALKRET ------------------------------------------------------------*/ static CHAR_WALKRET CHAR_walk_move( int charaindex, int dir ) { int i; int fx,fy,ff; int ox,oy,of; int objbuf[128]; int objbufindex=0; int notover=FALSE; int retvalue=CHAR_WALKSUCCESSED; if( !CHAR_CHECKINDEX( charaindex )) return CHAR_WALKSYSTEMERROR; ox = CHAR_getInt(charaindex,CHAR_X); oy = CHAR_getInt(charaindex,CHAR_Y); of = CHAR_getInt(charaindex,CHAR_FLOOR); CHAR_getCoordinationDir( dir,ox,oy,1,&fx,&fy); ff = of; if( CHAR_getInt( charaindex,CHAR_WHICHTYPE ) == CHAR_TYPEENEMY ){ RECT walkr; POINT nextp; int npccreateindex; npccreateindex = CHAR_getInt( charaindex,CHAR_NPCCREATEINDEX ); if( CHAR_isInvincibleArea( ff,fx,fy)) { CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALKEXTEND; goto CHAR_AFTERWALK; } if( NPC_isBoundarySet( npccreateindex ) && NPC_createGetRECT( npccreateindex,&walkr ) == TRUE ) { nextp.x = fx; nextp.y = fy; if( PointInRect( &walkr,&nextp ) == FALSE ){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALKEXTEND; goto CHAR_AFTERWALK; } }else{ ; } } if( CHAR_getFlg( charaindex, CHAR_ISBIG ) == 1 ){ static POINT offset[5]={ { 0,-1}, {-1, 0}, { 0, 0}, { 1, 0}, { 0, 1}, }; int k; for( k=0 ; k<5; k++ ){ if( !MAP_walkAble( charaindex, ff, fx+offset[k].x, fy+offset[k].y )){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALK1357; goto CHAR_AFTERWALK; } } }else{ if( CHAR_getDX(dir)*CHAR_getDY(dir) == 0 ){ if( !MAP_walkAble( charaindex,ff, fx, fy ) ){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALK1357; goto CHAR_AFTERWALK; } }else{ int xflg,yflg; if( !MAP_walkAble( charaindex,ff, fx, fy ) ){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALK1357; goto CHAR_AFTERWALK; } xflg = MAP_walkAble( charaindex,of, ox+CHAR_getDX(dir), oy ); yflg = MAP_walkAble( charaindex,of, ox, oy+CHAR_getDY(dir) ); if( !xflg || !yflg ) { CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALK1357; goto CHAR_AFTERWALK; } } } objbufindex = CHAR_getSameCoordinateObjects( objbuf, arraysizeof( objbuf ), ff,fx,fy ); for( i = 0 ; i < objbufindex ; i ++ ){ int objindex= objbuf[i]; switch( OBJECT_getType(objindex) ){ case OBJTYPE_CHARA: if( !CHAR_getFlg( OBJECT_getIndex(objindex),CHAR_ISOVERED) ){ if(!CHAR_CHECKINDEX(OBJECT_getIndex(objindex))){ printf("自动删除一个问题对象!"); endObjectOne(objindex); break; } notover= TRUE; } break; case OBJTYPE_ITEM: if( !ITEM_getInt( OBJECT_getIndex(objindex), ITEM_ISOVERED ) ) notover= TRUE; break; case OBJTYPE_GOLD: break; default: break; } } if( notover == TRUE ){ CHAR_setInt(charaindex,CHAR_DIR,dir); retvalue = CHAR_WALKHITOBJECT; }else{ for( i = 0 ; i < objbufindex ; i ++ ){ typedef void (*PREOFUNC)(int,int); PREOFUNC pfunc=NULL; int objindex=objbuf[i]; switch( OBJECT_getType(objindex) ){ case OBJTYPE_CHARA: pfunc = (PREOFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex), CHAR_PREOVERFUNC); break; case OBJTYPE_ITEM: pfunc = (PREOFUNC)ITEM_getFunctionPointer( OBJECT_getIndex(objindex), ITEM_PREOVERFUNC); break; case OBJTYPE_GOLD: break; default: break; } if( pfunc )pfunc( OBJECT_getIndex(objindex),charaindex ); } CHAR_setInt(charaindex,CHAR_X,fx); CHAR_setInt(charaindex,CHAR_Y,fy); CHAR_setInt(charaindex,CHAR_FLOOR,ff); CHAR_setInt(charaindex,CHAR_DIR,dir); { int objindex; int ox,oy,of; objindex = CHAR_getWorkInt( charaindex,CHAR_WORKOBJINDEX ); of = OBJECT_setFloor(objindex, CHAR_getInt(charaindex,CHAR_FLOOR)); ox = OBJECT_setX(objindex,CHAR_getInt(charaindex,CHAR_X)); oy = OBJECT_setY(objindex,CHAR_getInt(charaindex,CHAR_Y)); if( !MAP_objmove( objindex, of,ox,oy,ff,fx,fy ) ){ /* 仇氏卅氏升丹仄方丹手卅中 */ fprint( "ERROR MAP_OBJMOVE objindex=%d(%s)\n",objindex, CHAR_getUseName( charaindex ) ); } } CHAR_setInt(charaindex,CHAR_WALKCOUNT, CHAR_getInt(charaindex,CHAR_WALKCOUNT) + 1 ); for( i = 0 ; i < objbufindex ; i ++ ){ typedef void (*POSTOFUNC)(int,int); POSTOFUNC pfunc=NULL; int objindex=objbuf[i]; switch( OBJECT_getType(objindex) ){ case OBJTYPE_CHARA: pfunc = (POSTOFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex), CHAR_POSTOVERFUNC); break; case OBJTYPE_ITEM: pfunc = (POSTOFUNC)ITEM_getFunctionPointer( OBJECT_getIndex(objindex), ITEM_POSTOVERFUNC); break; case OBJTYPE_GOLD: break; default: break; } if( pfunc )pfunc( OBJECT_getIndex(objindex),charaindex ); } objbufindex = CHAR_getSameCoordinateObjects(objbuf, arraysizeof(objbuf), of, ox, oy ); for( i=0 ;i<objbufindex;i++){ typedef void (*OFFFUNC)(int,int); OFFFUNC ofunc=NULL; int objindex = objbuf[i]; switch( OBJECT_getType( objindex ) ){ case OBJTYPE_CHARA: ofunc = (OFFFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex), CHAR_OFFFUNC); break; case OBJTYPE_ITEM: /* 卞窒手仄卅中 */ break; case OBJTYPE_GOLD: /* 卞窒手仄卅中 */ break; default: break; } if( ofunc )ofunc( OBJECT_getIndex(objindex), charaindex ); } } CHAR_AFTERWALK: if( retvalue == CHAR_WALK1357 || retvalue == CHAR_WALKHITOBJECT ){ { int opt[2] = { ox, oy}; CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX), CHAR_ACTWALK,opt,2,TRUE ); } CHAR_setWorkChar( charaindex, CHAR_WORKWALKARRAY, ""); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX), CHAR_ACTWARP,NULL,0,TRUE); } }else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){ BOOL flg = FALSE; int par; int count; CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1 ); if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE ){ CHAR_sendCharaAtWalk( charaindex, of,ox,oy,CHAR_getDX(dir), CHAR_getDY(dir)); } { int opt[2] = { ox, oy}; CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX), CHAR_ACTWALK,opt,2,TRUE ); } if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) { CHAR_sendMapAtWalk( charaindex, of, ox,oy, CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y)); } count = CHAR_getWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT); if( count > 0 ) { CHAR_setWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT, count -1); if( count -1 == 0 ) { CHAR_talkToCli( charaindex, -1, "道具的效力已到。", CHAR_COLORWHITE); } } par = ENCOUNT_getEncountPercentMin( charaindex, of,ox,oy); if( par != -1 ) { if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN) != par ){ flg = TRUE; CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, par); } } par = ENCOUNT_getEncountPercentMax( charaindex, of,ox,oy); if( par != -1 ) { if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX) != par ){ flg = TRUE; CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX, par); } } // Arminius 7.12 login announce /* { int enfd = getfdFromCharaIndex( charaindex ); if (CONNECT_get_announced(enfd)==0) { // Robin 0720 //AnnounceToPlayer(charaindex); AnnounceToPlayerWN( enfd ); CONNECT_set_announced(enfd,1); } } */ // Arminius 6.22 check Encounter // Nuke 0622: Provide No Enemy function { int enfd = getfdFromCharaIndex( charaindex ); int eqen = getEqNoenemy( enfd ); // Arminius 7.2: Ra's amulet int noen = getNoenemy(enfd); // Arminius 7.31 cursed stone if (getStayEncount(enfd)>0) { clearStayEncount(enfd); } //print("\n enfd=%d,eqen=%d,noen=%d", enfd, eqen, noen); // Arminius 7.2 Ra's amulet if (eqen>=200) { noen=1; } else if (eqen>=120) { if ((ff==100)||(ff==200)||(ff==300)||(ff==400)||(ff==500)) noen=1; } else if (eqen>=80) { if ((ff==100)||(ff==200)||(ff==300)||(ff==400)) noen=1; } else if (eqen>=40) { if ((ff==100)||(ff==200)) noen=1; } //print("\n noen=%d", noen); if (noen==0) { int maxep = CHAR_getWorkInt(charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX); int minep = CHAR_getWorkInt(charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN); int cep = CONNECT_get_CEP(enfd); if (cep<minep) cep=minep; if (cep>maxep) cep=maxep; if (CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE)==BATTLE_CHARMODE_NONE) { int entflag=1; { int objindex,index; OBJECT obj; for ( obj = MAP_getTopObj( ff, fx, fy); obj; obj = NEXT_OBJECT( obj)) { objindex = GET_OBJINDEX( obj); if (OBJECT_getType( objindex) == OBJTYPE_CHARA) { int etype; index = OBJECT_getIndex( objindex); if (!CHAR_CHECKINDEX( index)) continue; if( CHAR_getInt( index, CHAR_WHICHTYPE) == CHAR_TYPENPCENEMY && CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE) == CHAR_EVENT_ENEMY ) { CHAR_setInt( charaindex, CHAR_X, ox); CHAR_setInt( charaindex, CHAR_Y, oy); lssproto_XYD_send( getfdFromCharaIndex(charaindex), CHAR_getInt( charaindex, CHAR_X ), CHAR_getInt( charaindex, CHAR_Y ), CHAR_getInt( charaindex, CHAR_DIR ) ); break; } etype = CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE); if (etype!=CHAR_EVENT_NONE) { if (etype==CHAR_EVENT_WARP) entflag=0; } } } } #ifdef _ENEMY_ACTION if( rand()%(120*getEnemyAction()) < cep ){ #else if (rand()%120<cep){ // Arminius 6.28 lower encounter prob. #endif if (entflag) { #ifdef _Item_MoonAct if( getEqRandenemy( enfd) > 0 ) { int Rnum=0; int RandEnemy = getEqRandenemy( enfd); Rnum = RAND(0,100); if( Rnum > RandEnemy ) { #endif //encounter!! cep = minep; lssproto_EN_recv(enfd, CHAR_getInt(charaindex,CHAR_X), CHAR_getInt(charaindex,CHAR_Y)); #ifdef _Item_MoonAct } }else{ cep = minep; lssproto_EN_recv(enfd, CHAR_getInt(charaindex,CHAR_X), CHAR_getInt(charaindex,CHAR_Y)); } #endif } } else { if (cep<maxep) cep++; } } CONNECT_set_CEP(enfd, cep); } } if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE )!= CHAR_PARTY_CLIENT ){ CHAR_setFlg( charaindex, CHAR_ISWARP, 0); } } else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ||
BOOL NPC_PetMakerInit( int meindex ) { CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEPETMAKER ); CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 ); return TRUE; }
BOOL NPC_WarpInit( int charaindex ) { char arg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *arg; int ret; int floor=-1,x=-1,y=-1; char token[128]; #ifdef _RECORD_NPCMAN_ //紀錄 char evtype[256]; char evtime[256]; char argfile[256]; if( NPC_Util_CheckAssignArgFile( charaindex, argfile) == NULL ) sprintf( argfile, "NULL"); #endif CHAR_setInt( charaindex, CHAR_WHICHTYPE , CHAR_TYPEWARP ); if((arg = NPC_Util_GetArgStr( charaindex, arg1, sizeof( arg1))) == NULL ) { print("\n GetArgStr ERR!!"); return FALSE; } #ifdef _NEW_WARPPOINT if( strstr( arg, "FREEMORE") != NULL ) { #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtype, "FREE"); sprintf( evtime, "NULL"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); }else { #endif #ifdef _MAP_WARPPOINT return FALSE; #endif #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtype, "NONE"); #endif 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){ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "N"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NIGHT); }else if(day==1){ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "M"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_MORNING); }else if(day==2){ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "A"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP_NOON); }else{ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "NULL"); #endif CHAR_setWorkInt( charaindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_WARP); } }else{ #ifdef _RECORD_NPCMAN_ //紀錄 sprintf( evtime, "NULL"); #endif 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 ); #ifdef _RECORD_NPCMAN_ //紀錄 { FILE *fp=NULL; char filename[256]; sprintf( filename,"./data/npc/%s", "mapwarp.txt"); if( (fp = fopen( filename, "a+")) != NULL ) { fprintf( fp, "%s:%s:%d,%d,%d:%d,%d,%d:%s\n", evtype, evtime, CHAR_getInt( charaindex, CHAR_FLOOR), CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y), floor, x, y, argfile ); fclose( fp); }else { } } #endif return TRUE; }
int CHAR_die( int charaindex ) { CHAR_DischargeParty( charaindex, 0); { int bymonster = 0; int attackindex = CHAR_getWorkInt(charaindex, CHAR_WORKLASTATTACKCHARAINDEX); if( attackindex == -2 ) bymonster = 0; else if( CHAR_CHECKINDEX(attackindex) == TRUE ) { if( CHAR_getInt(attackindex,CHAR_WHICHTYPE) == CHAR_TYPEENEMY ) { bymonster = 1; } else { bymonster = 2; } } if( bymonster == 0 || bymonster == 1 ) { int i; for( i=0 ; i<CHAR_EQUIPPLACENUM ; i++ ) CHAR_DropItem(charaindex,i); } else { int eqindex[CHAR_EQUIPPLACENUM]; int itemhavenum=0; int i; for( i=0 ; i<CHAR_EQUIPPLACENUM ; i++ ) if( ITEM_CHECKINDEX(CHAR_getItemIndex(charaindex,i)) ) eqindex[itemhavenum++] = i; if( itemhavenum >= 1 ) { int randomindex = RAND(0,itemhavenum-1); CHAR_DropItem(charaindex,eqindex[randomindex]); } } CHAR_DropMoney(charaindex, CHAR_getInt(charaindex,CHAR_GOLD)/2 ); CHAR_setInt(charaindex,CHAR_GOLD,0); } CHAR_complianceParameter(charaindex); CHAR_sendCToArroundCharacter( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX) ); CHAR_setInt(charaindex,CHAR_DEADCOUNT, CHAR_getInt(charaindex,CHAR_DEADCOUNT)+1); { int i; BOOL old=FALSE; for( i=0 ; i<arraysizeof(pShow); i++) if( CHAR_setInt( charaindex, pShow[i].paramindex, 0 ) > 0 ) { old = TRUE; } if( CHAR_setInt( charaindex, CHAR_POISON, 0 ) > 0 )old=TRUE; if( old ) CHAR_sendCToArroundCharacter( CHAR_getInt(charaindex, CHAR_WORKOBJINDEX)); } CHAR_sendStatusString( charaindex, "P"); CHAR_sendStatusString( charaindex, "I"); CHAR_setFlg(charaindex,CHAR_ISDIE,1); CHAR_setFlg(charaindex,CHAR_ISATTACKED,0); return 0; }
BOOL NPC_BlackMarketInit( int meindex) { CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEWINDOWMAN); CHAR_setFlg( meindex, CHAR_ISATTACKED , 0); return TRUE; }