void NPC_DepotPet_Get( int meindex, int talker, int select, char *token) { int petindex; int selectpet; int emptyindex; char szPet[128]; int workindex[CHAR_MAXPOOLPETHAVE]; int i; int cnt; selectpet = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) ; petindex = CHAR_getDepotPetIndex( talker, selectpet); if( !CHAR_CHECKINDEX( petindex) ) return; emptyindex = CHAR_getCharPetElement( talker); if( emptyindex == -1 ) { fprint( "err\n"); return; } CHAR_setCharPet( talker, emptyindex, petindex); CHAR_setChar( petindex, CHAR_OWNERCHARANAME, CHAR_getChar( talker, CHAR_NAME)); CHAR_setDepotPetIndex( talker, selectpet, -1); NPC_MaxGoldOver( meindex, talker, NPC_PETSHOP_MSG_POOLTHANKS, token); snprintf( szPet, sizeof( szPet ), "K%d", emptyindex); CHAR_sendStatusString( talker, szPet ); snprintf( szPet, sizeof( szPet), "W%d",emptyindex); CHAR_sendStatusString( talker, szPet ); for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) { workindex[i] = -1; } cnt = 0; for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) { int petindex = CHAR_getDepotPetIndex( talker, i); if( CHAR_CHECKINDEX( petindex) ) { workindex[cnt++] = petindex; } } for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) { CHAR_setDepotPetIndex( talker, i, workindex[i]); } LogPet( CHAR_getChar( talker, CHAR_NAME ), CHAR_getChar( talker, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "draw(ÁìÈ¡²Ö¿â³èÎï)", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); #ifdef _PET_EVOLUTION if( CHAR_getInt( petindex, CHAR_FUSIONBEIT) == 1 && CHAR_getInt( petindex, CHAR_FUSIONRAISE) > 0 ){//¼ì²éÊÇ·ñΪÈںϳè CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, (int)time( NULL)); } #endif }
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_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_JankenInit( int meindex ) { //����������� CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEJANKEN ); 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; }
void NPC_NowEndEventSetFlgCls(int talker,int shiftbit) { int point=0; int array; int shift; if(shiftbit==-1) return; array = shiftbit / 32; shift = shiftbit % 32; if(NPC_NowEventCheckFlg(talker,shiftbit)==TRUE){ point = CHAR_getInt( talker, CHAR_NOWEVENT+array); point = point ^ (1<<shift); CHAR_setInt(talker,CHAR_NOWEVENT+array,point); } if(NPC_EventCheckFlg(talker,shiftbit)==TRUE){ point = CHAR_getInt( talker, CHAR_ENDEVENT+array); point = point ^ (1<<shift); CHAR_setInt(talker,CHAR_ENDEVENT+array,point); } }
/********************************* * �ƾ�����ľ���ݼ��� *********************************/ void NPC_BusTalked( int meindex , int talkerindex , char *szMes , int color ) { int i; int partyflg = FALSE; /* �����������帲�ƻ����� ɱ���� */ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* ���м��ɡ� ū ��� ��������Ʃ���� */ for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX(index)){ if( index == talkerindex) { partyflg = TRUE; } } } if( !partyflg ) { //NPC_BusCheckJoinParty( meindex, talkerindex, TRUE); } else { if( CHAR_getWorkInt( meindex, NPC_WORK_MODE) == 0 ) { int i; // #define NPC_BUS_DEBUGROUTINTG "routingtable:" if( strstr( szMes, "����" ) || strstr( szMes, "����" ) || strstr( szMes, "Go" ) || strstr( szMes, "go" )) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* ��������Ѽ�������ë���ʻ�պ������ */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); /* SE ���� Ѩ��ƹ������̫ */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* �� �����ݼ�����������*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START); } } } } } }
/********************************* * 仄井仃日木凶凛及质 *********************************/ void NPC_BusTalked( int meindex , int talkerindex , char *szMes , int color ) { int i; int partyflg = FALSE; /* 皿伊奶乩□卞覆仄化分仃 杀允月 */ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* 愤坌及由□ 奴 昙菸 井升丹井譬屯月 */ for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX(index)){ if( index == talkerindex) { partyflg = TRUE; } } } if( !partyflg ) { //NPC_BusCheckJoinParty( meindex, talkerindex, TRUE); } else { if( CHAR_getWorkInt( meindex, NPC_WORK_MODE) == 0 ) { int i; // #define NPC_BUS_DEBUGROUTINTG "routingtable:" if( strstr( szMes, "出发" ) || strstr( szMes, "出发" ) || strstr( szMes, "Go" ) || strstr( szMes, "go" )) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); /* SE 日允 穴件乒旦及陲太 */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* 请 允月凛及丢永本□斥*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START); } } } } } }
/*---------------------------------------------------------------------- * ¼«Ê¬¤Î¤ß²óÉü * °ú¿ô * charaindex int ¼«Ê¬¤Îindex * magicindex int ËâË¡¤Îindex *---------------------------------------------------------------------*/ int MAGIC_Recovery_Field( int charaindex, int magicindex) { char *magicarg; float power; int workhp; int prevhp; char msgbuf[64]; #ifdef _TYPE_TOXICATION if( CHAR_CanCureFlg( charaindex, "HP") == FALSE ) return TRUE; #endif magicarg = MAGIC_getChar( magicindex, MAGIC_OPTION ); power = atoi( magicarg ); power = RAND( (power*0.9), (power*1.1) ); #ifndef _MAGIC_REHPAI power *= GetRecoveryRate( charaindex ); #endif prevhp = CHAR_getInt( charaindex, CHAR_HP ); workhp = prevhp + (int)power; CHAR_setInt( charaindex, CHAR_HP, min( workhp, CHAR_getWorkInt( charaindex, CHAR_WORKMAXHP ) ) ); CHAR_send_P_StatusString( charaindex , CHAR_P_STRING_HP|CHAR_P_STRING_MP); if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE ) { int mypartyarray = -1; int oyaindex = CHAR_getWorkInt( charaindex, 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 == charaindex ) { mypartyarray = i; break; } } } if( mypartyarray != -1 ) { for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getPartyIndex( charaindex, i); if( CHAR_CHECKINDEX( index) ) { if( index != charaindex) { CHAR_send_N_StatusString( index, mypartyarray, CHAR_N_STRING_HP|CHAR_N_STRING_MP); } } } } } } snprintf( msgbuf, sizeof( msgbuf), "@¤[¤O¦^´_%d", min( workhp, CHAR_getWorkInt( charaindex, CHAR_WORKMAXHP)) - prevhp); CHAR_talkToCli( charaindex, -1, msgbuf, CHAR_COLORWHITE); return TRUE; }
/* 奶矛件玄蔽 * 申永玄白仿弘毛 化月分仃及質 */ void NPC_EventSetFlg(int talker,int shiftbit) { int point=0; int array; int shift; #ifdef _TEACHER_SYSTEM int iGetFame = 0; #endif /*-- -1反白仿弘卞楮溢互卅中奶矛件玄 -*/ if(shiftbit==-1) return; array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_ENDEVENT+array); // Arminius 8.24 prevent wash dp if (!(point & (1 << shift))) { // CoolFish: Family Adv 2001/8/4 AddFMAdv(talker, shiftbit); #ifdef _TEACHER_SYSTEM if(shiftbit < arraysizeof(FMAdvTbl)) iGetFame = FMAdvTbl[shiftbit]; #endif } #ifdef _TEACHER_SYSTEM iGetFame /= 20; // 導師獲得學生所得聲望的 5% (1/20) // 檢查所得的聲望有沒有大於0 if(iGetFame > 0){ // 檢查有沒有導師 if(strlen(CHAR_getChar(talker,CHAR_TEACHER_ID)) > 0 && strlen(CHAR_getChar(talker,CHAR_TEACHER_NAME)) > 0){ int iPlayernum = CHAR_getPlayerMaxNum(),i; char szMsg[128]; // 檢查導師在不在線上 for(i=0;i<iPlayernum;i++){ if(CHAR_getCharUse(i) == FALSE) continue; if(strcmp(CHAR_getChar(talker,CHAR_TEACHER_ID),CHAR_getChar(i,CHAR_CDKEY)) == 0 && strcmp(CHAR_getChar(talker,CHAR_TEACHER_NAME),CHAR_getChar(i,CHAR_NAME)) == 0){ float fGetFame = (float)iGetFame/100; // 導師在線上 CHAR_setWorkInt(i,CHAR_WORK_GET_TEACHER_FAME,CHAR_getWorkInt(i,CHAR_WORK_GET_TEACHER_FAME) + iGetFame); sprintf(szMsg,"獲得學生 %s %.2f 點聲望",CHAR_getChar(talker,CHAR_NAME),fGetFame); CHAR_talkToCli(i,-1,szMsg,CHAR_COLORYELLOW); break; } } } } #endif point = point | (1 << shift); CHAR_setInt( talker, CHAR_ENDEVENT+array, point); }
/*-- --*/ void NPC_CharmUp(int meindex,int talker) { int cost; int i; int petindex; char petsend[64]; /*--云嗯毛蛹日仄引仄斤丹--*/ cost = NPC_CharmCost( meindex, talker); CHAR_setInt( talker, CHAR_GOLD, CHAR_getInt( talker, CHAR_GOLD) - cost); CHAR_send_P_StatusString( talker, CHAR_P_STRING_GOLD); /*-- 互ㄠㄟㄟ动晓卞卅月桦宁反雄娄卞ㄠㄟㄟ卞允月--*/ if(CHAR_getInt( talker, CHAR_CHARM) + CHARMHEAL >= 100) { CHAR_setInt( talker, CHAR_CHARM, 100); }else{ /*-- 毛本永玄--*/ CHAR_setInt(talker, CHAR_CHARM, (CHAR_getInt( talker, CHAR_CHARM) + CHARMHEAL)); } /*--旦 □正旦及凳蕙--*/ CHAR_complianceParameter( talker ); CHAR_send_P_StatusString( talker, CHAR_P_STRING_CHARM); /*--矢永玄及由仿丢□正毛凳蕙--*/ for( i = 0 ; i < CHAR_MAXPETHAVE ; i++){ petindex = CHAR_getCharPet( talker, i); if( petindex == -1 ) continue; /* 平乓仿及 民尼永弁 */ if( !CHAR_CHECKINDEX( talker ) ) continue; /*--由仿丢□正譬帮--*/ CHAR_complianceParameter( petindex ); sprintf( petsend, "K%d", i ); CHAR_sendStatusString( talker , petsend ); } }
/********************************* * âÙÓåÖÊ *********************************/ BOOL NPC_PetShopInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[256]; double rate; int intrate; // int cost; int tmp; /*--ÕýÄÌÃóɬÀÃ--*/ CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESTONESHOP ); if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL){ print("GetArgStrErr"); return FALSE; } /*--ÒÁ¡õÐþë炙§±å·¤Ê¢½ñÁù»¯ÔÆÈÊ*/ if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_rate", buf, sizeof( buf)) != NULL){ rate = atof( buf); intrate = ( int)( rate *1000); CHAR_setWorkInt( meindex , CHAR_WORK_NOMALRATE ,intrate ); }else{ CHAR_setWorkInt( meindex , CHAR_WORK_NOMALRATE ,1000 ); } /*--µ©Ê¸ÆËÅÒ»ïÒÁ¡õÐþÊÖ·¤Ê¢½ñÁù»¯ÔÆÈÊ--*/ if(NPC_Util_GetStrFromStrWithDelim( npcarg, "special_rate", buf, sizeof( buf)) !=NULL) { rate = atof( buf); intrate = ( int)( rate *1000); CHAR_setWorkInt( meindex , CHAR_WORK_SPECIALRATE ,intrate ); }else{ CHAR_setWorkInt( meindex , CHAR_WORK_SPECIALRATE ,1200 ); } // Øê ľàÅ·¤Ê¢ //cost = NPC_Util_GetNumFromStrWithDelim( npcarg, "pool_cost"); //if( cost == -1 ) cost = NPC_PETSHOP_POOLCOST_DEFAULT; //CHAR_setWorkInt( meindex, CHAR_WORK_POOLCOST, cost); // Øê ľ»¥Çë Ô¾®Éýµ¤¾®Ã«·¤Ê¢ tmp = NPC_Util_GetNumFromStrWithDelim( npcarg, "pool_flg"); if( tmp != 1 ) tmp = 0; CHAR_setWorkInt( meindex, CHAR_WORK_POOLFLG, tmp); return TRUE; }
BOOL NPC_MakePairManInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; int i; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("err NPC_MakePairMan: GetArgStrErr!!"); return FALSE; } CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_MAKEPAIR); CHAR_setInt( meindex, CHAR_LOOPINTERVAL, MAKEPAIR_STANDBY); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); CHAR_setWorkInt( meindex, NPC_WORK_PAIRTEAMS, 0); for( i=0; i<MAXPAIRNUMS; i++) { PairList[0][i].use = -1; PairList[0][i].forindex = -1; PairList[1][i].use = -1; PairList[1][i].forindex = -1; } return TRUE; }
/********************************* * ������ *********************************/ BOOL NPC_BodyLanInit( int meindex ) { char szP[256], szArg[4096]; char buf[256]; int i, needSeq; CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEEVENT ); if( NPC_Util_GetArgStr( meindex, szArg, sizeof( szArg ) ) == NULL ){ print( "npc_bodylan.c:û������(%s)\n", CHAR_getChar(meindex,CHAR_NPCARGUMENT) ); return FALSE; } // �ˡ�������ë���� if( NPC_Util_GetStrFromStrWithDelim( szArg, "Act", szP, sizeof( szP ) ) == NULL ){ print( "npc_bodylan:������������δ�趨(%s)\n", szArg ); return FALSE; } for( i = 0 ; ; i ++ ){ // ۢئ�� if( getStringFromIndexWithDelim( szP, ",", i, buf, sizeof( buf)) != FALSE ){ needSeq = atoi(buf); // Ѩ�̹ϵ��� ���ճ����ƥ if( needSeq < 0 ){ if( i <= 0 ){ print( "npc_bodylan:��������δ�趨(%s)\n", szArg ); } // ��ë������ CHAR_setWorkInt( meindex, BODYLAN_E_COMMANDNUM, i ); break; }else{ // ������ƻ������� } }else{ if( i <= 0 ){ print( "npc_bodylan:��������δ�趨(%s)\n", szArg ); } // ��ë������ CHAR_setWorkInt( meindex, BODYLAN_E_COMMANDNUM, i ); break; } } return TRUE; }
void NPC_NowEventSetFlgCls(int talker,int shiftbit) { int point=0; int array; int shift; if(shiftbit==-1) return; if(shiftbit<=255){ array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_NOWEVENT+array); point = point ^ (1<<shift); CHAR_setInt(talker,CHAR_NOWEVENT+array,point); } else if(shiftbit<=510){ array = (shiftbit-255) / 32; shift = (shiftbit-255) % 32; point = CHAR_getInt( talker, CHAR_NOWEVENT9+array); point = point ^ (1<<shift); CHAR_setInt(talker,CHAR_NOWEVENT9+array,point); } }
void NPC_DoorOpen(int meindex , int doindex ) { CHAR_setWorkInt( meindex , CHAR_WORKDOORCLOSETIME, NowTime.tv_sec + CHAR_getInt( meindex , CHAR_MERCHANTLEVEL)); CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , CHAR_getWorkInt( meindex,CHAR_WORKDOOROPENG )); NPC_DoorRefreshOverFlg( meindex ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX )); if( doindex >= 0 ) CHAR_talkToCli( doindex , -1, NPC_DOOR_OPENMSG ,CHAR_COLORWHITE); }
/********************************* * 賡渝質 *********************************/ BOOL NPC_ActionInit( int meindex ) { char *argstr; int tmp; //argstr = NPC_Util_GetArgStr( meindex, pu_npcarg, sizeof( pu_npcarg)); tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "msgcol"); if( tmp == -1 ) tmp = NPC_ACTION_MSGCOLOR_DEFAULT; CHAR_setWorkInt( meindex, CHAR_WORK_MSGCOLOR, tmp); CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEACTION ); return TRUE; }
BOOL NPC_PetFusionManInit( int meindex ) { char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *npcarg; if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)))==NULL){ print("err NPC_PetFusionManInit: GetArgStrErr!!"); return FALSE; } CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_PETFUSIONMAN); //CHAR_setInt( meindex, CHAR_LOOPINTERVAL, MAKEPAIR_STANDBY); //CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); //CHAR_setWorkInt( meindex, NPC_WORK_PAIRTEAMS, 0); return TRUE; }
//GM禁言 void mproto_NoTalk_Recv(int fd,char* uid,int userfdid,int nTime) { int fd_charaindex; int clifd=getfdFromFdid(userfdid); print("clifd =%d\n",clifd); if (clifd == -1) return ; if (uid == NULL ) return ; fd_charaindex=CONNECT_getCharaindex(clifd); if (!CHAR_CHECKINDEX(fd_charaindex)) return; CHAR_setInt( fd_charaindex,CHAR_SILENT, nTime ); CHAR_setWorkInt( fd_charaindex, CHAR_WORKLOGINTIME, (int)NowTime.tv_sec ); CHAR_talkToCli( fd_charaindex, -1, "由於捣乱,被GM禁言10到30分钟", CHAR_COLORYELLOW); CHAR_setWorkInt(fd_charaindex, CHAR_WORKTALKCOUNT, 0 ); }
/********************************* * ������ *********************************/ BOOL NPC_ActionInit( int meindex ) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; int tmp; tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "msgcol"); if( tmp == -1 ) tmp = NPC_ACTION_MSGCOLOR_DEFAULT; CHAR_setWorkInt( meindex, CHAR_WORK_MSGCOLOR, tmp); CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEACTION ); return TRUE; }
BOOL NPC_PetRacePetInit( int meindex ) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[256]; int showstopx, showstopy; int routenum = 0, i = 0; NPC_Util_GetArgStr(meindex, argstr, sizeof(argstr)); for (i = 1; i <= routenum; i++) { char routetostring[64]; snprintf(routetostring, sizeof(routetostring), "routeto"); if (NPC_Util_GetStrFromStrWithDelim(argstr, routetostring, buf, sizeof(buf)) == NULL) { print("Init_npcracepet: Didn't set route\n"); return FALSE; } } showstopx = NPC_Util_GetNumFromStrWithDelim(argstr, "showstopx"); showstopy = NPC_Util_GetNumFromStrWithDelim(argstr, "showstopy"); if (showstopx < 0 || showstopx > 100 || showstopy < 0 || showstopy > 100) return FALSE; CHAR_setInt(meindex, CHAR_WHICHTYPE, CHAR_PETRACEPET); CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_Wait); CHAR_setWorkInt(meindex, NPC_WORK_ROUTEPOINT, 2); CHAR_setWorkInt(meindex, NPC_WORK_WAITFLAG, 1); CHAR_setWorkInt(meindex, NPC_WORK_FLOOR, CHAR_getInt(meindex, CHAR_FLOOR)); CHAR_setWorkInt(meindex, NPC_WORK_X, CHAR_getInt(meindex, CHAR_X)); CHAR_setWorkInt(meindex, NPC_WORK_Y, CHAR_getInt(meindex, CHAR_Y)); CHAR_setWorkInt(meindex, NPC_WORK_DIR, CHAR_getInt(meindex, CHAR_DIR)); CHAR_setWorkInt(meindex, NPC_WORK_STOPX, showstopx); CHAR_setWorkInt(meindex, NPC_WORK_STOPY, showstopy); CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEPET_WAIT_LOOPTIME); NPC_PetRacePetSetPoint(meindex, argstr); 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; }
/********************************* * ½é´ü½è *********************************/ 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 NPC_TownPeopleInit( int meindex ) { //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 , 1 ); return TRUE; }
BOOL NPC_VipshopInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("TRANSER_MAN: GetArgStrErr!!"); return FALSE; } CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TRANSERMANS); //CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NEWNPCMAN_STANDBY); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return TRUE; }
/* 奶矛件玄 * 申永玄白仿弘毛 化月分仃及質 */ void NPC_NowEventSetFlg(int talker,int shiftbit) { int point=0; int array; int shift; /*-- -1反白仿弘卞楮溢互卅中奶矛件玄 -*/ if(shiftbit==-1) return; array = shiftbit / 32; shift = shiftbit % 32; point = CHAR_getInt( talker, CHAR_NOWEVENT+array); point = point | (1 << shift); point = CHAR_setInt( talker, CHAR_NOWEVENT+array,point); }
BOOL NPC_SignBoardInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; /*--正奶皿涩烂--*/ CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEMSG ); if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("GetArgStrErr"); return FALSE; } return TRUE; }
BOOL NPC_DengonInit( int meindex ) { char filename[256], tmp[256]; FILE *f; int i,j; int id, maxid; CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEDENGON ); snprintf( filename,sizeof(filename), "%s%d_%d_%d", DENGONFILEDIR, CHAR_getInt( meindex, CHAR_FLOOR ), CHAR_getInt( meindex, CHAR_X ), CHAR_getInt( meindex, CHAR_Y ) ); if( ! (f=fopen( filename, "r" )) ){ f = fopen( filename, "w" ); if( f ){ }else{ print( "ERROR:Can't create Dengonfile %s!\n",filename ); return FALSE; } for( j = 0; j < DENGONFILELINENUM; j++ ){ fwrite( "0000000000:", sizeof(char), DENGONFILECOUNTERSIZE, f); for( i=0;i<DENGONFILESTRINGSIZE;i++ ){ fwrite( "\0", sizeof(char),1, f ); } fwrite( "\n", sizeof(char), 1, f); } } id =0; maxid = 0; for( i = 0; i < DENGONFILELINENUM; i++ ){ fseek( f, i*DENGONFILEENTRYSIZE, SEEK_SET ); fread( tmp, sizeof(char), DENGONFILECOUNTERSIZE, f ); tmp[DENGONFILECOUNTERSIZE-1] = '\0'; if( (id=atoi(tmp)) > maxid ) { maxid = id; } } CHAR_setWorkInt( meindex, CHAR_WORKDENGONMAXID, maxid ); fclose(f); return TRUE; }
/********************************* * ������ *********************************/ BOOL NPC_FMPKManInit( int meindex ) { char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024]; char buff2[256]; int fl, x, y, meid; if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL) { print("FMPKMan:GetArgStrErr"); return FALSE; } /*--������ɬ�ý�ľ�����¾�----*/ /*--������ɬ�ý�ľ��ئ��ľ��NPCë����ئ�г��������--*/ if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL) { print("FMPKMan Err is %s",npcarg); print("FMPKMan Err"); return FALSE; } /*--������ɬ�ý�ľ���л��ַ������ƻ�ئ��ľ������Ƿ��NPCë����ئ��--*/ 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 ) { print( "FMWarp NPC:Invalid warpman ERR" ); return FALSE; } meid = NPC_Util_GetNumFromStrWithDelim(npcarg, "ID"); if ((meid < 0) || (meid >= MAX_SCHEDULEMAN)) { print("FMPKMAN NPC: Init error Invalid ID:%d", meid); return FALSE; } CHAR_setWorkInt(meindex, NPC_WORK_ID, meid); /*--������ɬ��--*/ CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN ); return TRUE; }
/*---------------------------------------- * 旦 □正旦 祭煙及 凳毛允月 * 婁醒 * index int 平乓仿及奶件犯永弁旦 * map int 穴永皿犯□正 * outof BOOL 褡戈凜}轉仁凜井 TRUE 卅日壬 褡戈凜匹丐月〔 * 忒曰襖 * 由仿丟□正 祭毛仄凶 TRUE * 由仿丟□正 祭毛仄卅井勻凶 FALSE ----------------------------------------*/ static BOOL MAP_changeCharStatusFromMapDataAndTime( int index, int map, BOOL outof) { #if 0 // 旦玄□件巨奶斥匹反銀歹卅中 int i; int offset; BOOL change=FALSE; static struct tagStatusInteractionOfBitAndDefine{ int mapdataindex; int charadataindex; }statusInteraction[]={ {MAP_INTOPOISON, CHAR_POISON}, {MAP_INTOPARALYSIS, CHAR_PARALYSIS}, {MAP_INTOSILENCE, CHAR_SLEEP}, {MAP_INTOSTONE, CHAR_STONE}, {MAP_INTODARKNESS, CHAR_DRUNK}, {MAP_INTOCONFUSION, CHAR_CONFUSION}, {MAP_OUTOFPOISON, CHAR_POISON}, {MAP_OUTOFPARALYSIS, CHAR_PARALYSIS}, {MAP_OUTOFSILENCE, CHAR_SLEEP}, {MAP_OUTOFSTONE, CHAR_STONE}, {MAP_OUTOFDARKNESS, CHAR_DRUNK}, {MAP_OUTOFCONFUSION, CHAR_CONFUSION}, }; if( outof == FALSE )offset = 6; else offset= 0; int newdata; for( i = 0 ; i < 6 ; i ++ ){ newdata = MAP_getImageInt(map,statusInteraction[i+offset]. mapdataindex); if( newdata > 0 ){ change=TRUE; /* 旦 □正旦及澀爛 */ CHAR_setInt( index, statusInteraction[i+offset].charadataindex, CHAR_getInt(index, statusInteraction[i+offset]. charadataindex ) + newdata ); } } return change; #else return FALSE; #endif }