/*---------------------------------------------------------------------- * ¼«Ê¬¤Î¤ß²óÉü * °ú¿ô * 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; }
/*------------------------------------------------------------ * ¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë¡e * Ãç´Ö¤¬¤¤¤ì¤Ð¤½¤ÎÃç´Ö¤Ë¤â¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë¡e ------------------------------------------------------------*/ void CHAR_talkToCliAndParty( int talkedcharaindex,int talkcharaindex, char* message, CHAR_COLOR color ) { int i; /* ¤Þ¤º¼«Ê¬ */ CHAR_talkToCli( talkedcharaindex, talkcharaindex, message, color); for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getPartyIndex( talkedcharaindex, i); if( CHAR_CHECKINDEX( index) && index != talkedcharaindex) { CHAR_talkToCli( index, talkcharaindex, message, color); } } }
/*------------------------------------------------------------ * ¶õ¤¤¤Æ¤¤¤ë¥Ñ¡¼ ¥£ ¤òõ¤¹ * ¤Ê¤±¤ì¤Ð-1¤òÊÖ¤¹¡e ------------------------------------------------------------*/ int CHAR_getEmptyPartyArray( int charaindex) { int i = -1; int rc = FALSE; int toindex; if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ) { toindex = charaindex; } else { toindex = CHAR_getPartyIndex( charaindex, 0); } if( CHAR_CHECKINDEX( toindex)){ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { if( CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1) == -1 ) { rc = TRUE; break; } } } return( rc ? i: -1); }
/*------------------------------------- 端卞覲菁 午竣 毛莢汊今六月午仇欠 ---------------------------------------*/ 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); } } } } } }
/*------------------------------------------------------------ * ºÝ¤Ë¥Ñ¡¼ ¥£¤Ë ¤ë½è * * charaindex int ¼«Ê¬ * targetindex int ¤ëÁê¼ê¤Î¿Í ------------------------------------------------------------*/ void CHAR_JoinParty_Main( int charaindex, int targetindex) { int firstflg = FALSE; int i; char c[3]; char buf[64]; int toindex; int parray; /* ¿Æ¤¬¤¤¤¿¤é°ú¤ÃÄ¥¤ê½Ð¤¹ */ if( CHAR_getWorkInt( targetindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ) { toindex = targetindex; } else { toindex = CHAR_getPartyIndex( targetindex, 0); if( !CHAR_CHECKINDEX( toindex) ) { print( " %s:%d err\n", __FILE__, __LINE__); return; } } /* Áê¼ê¥Ñ¡¼ ¥£¤Î¿Í¿ô¤Ï ¤«¡ª */ parray = CHAR_getEmptyPartyArray( toindex) ; if( parray == -1 ) { print( "%s : %d err\n", __FILE__,__LINE__); return; } /* ²¿¤â ¤· ¿Æ¤Î»þ¤Ï¿Æ¤Ë¤Ê¤Ã¤¿CA¤òÁ÷¿®¤¹¤ë */ if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ) { CHAR_sendLeader( CHAR_getWorkInt( toindex, CHAR_WORKOBJINDEX), 1); /* Áê¼ê¤Î¾õÂ֤νñ¤´¹¤¨ */ /* ¿Æ¤Ë¤Ê¤ë */ CHAR_setWorkInt( toindex, CHAR_WORKPARTYMODE, 1); CHAR_setWorkInt( toindex, CHAR_WORKPARTYINDEX1, toindex); firstflg = TRUE; } CHAR_setWorkInt( toindex, parray + CHAR_WORKPARTYINDEX1, charaindex); CHAR_setWorkChar( charaindex, CHAR_WORKWALKARRAY, ""); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYMODE, CHAR_PARTY_CLIENT); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX1, toindex); if( firstflg ) { CHAR_sendStatusString( toindex, "N0"); } for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index)) { snprintf( c, sizeof(c), "N%d", i); CHAR_sendStatusString( charaindex, c); } } snprintf( buf,sizeof( buf), "%s ¥[¤J¹Î¶¤¡I", CHAR_getChar( charaindex, CHAR_NAME)); for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index)) { if( index != charaindex ) { snprintf( c, sizeof(c), "N%d", parray); CHAR_sendStatusString( index, c); CHAR_talkToCli( index, -1, buf, CHAR_COLORYELLOW); } else { CHAR_talkToCli( index, -1, "¥[¤J¹Î¶¤¡I", CHAR_COLORYELLOW); } } } }
/*------------------------------------- ºÝ¤ËÂÑµ× ¤Èµ¤ ¤ò²óÉü¤µ¤»¤ë¤È¤³¤í ---------------------------------------*/ 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 CHAR_Talk(int fd, int index, char *message, int color, int area) { char firstToken[64]; char messageeraseescape[512]; char *messagebody; int mesgvolume = 0; int lastvolume = 0; int fl, x, y; int stringlen; int micflg = 0; int fmindexi = CHAR_getWorkInt(index, CHAR_WORKFMINDEXI); int channel = CHAR_getWorkInt(index, CHAR_WORKFMCHANNEL); int quickchannel = CHAR_getWorkInt(index, CHAR_WORKFMCHANNELQUICK); { char *cdkey = CHAR_getChar(index, CHAR_CDKEY); char *charname = CHAR_getChar(index, CHAR_NAME); if(strlen(message) > 3) { if(CHAR_getWorkInt(index, CHAR_WORKFLG) & WORKFLG_DEBUGMODE) { // shan begin if(strstr(message, "[") && strstr(message, "]")) { } else { // original LogTalk(charname, cdkey, CHAR_getInt(index, CHAR_FLOOR), CHAR_getInt(index, CHAR_X), CHAR_getInt(index, CHAR_Y), message); } // end } } } //bg|0|r0|fc|d4B8|p0|bn|10|bt|10| // Nuke +1 08/27: For invalid message attack if(*message == 0) return; CHAR_getMessageBody(message, firstToken, sizeof(firstToken), &messagebody); // Nuke +1: For invalid message attack if(!messagebody) return; strcpysafe(messageeraseescape, sizeof(messageeraseescape), messagebody); makeStringFromEscaped(messageeraseescape); stringlen = strlen(messageeraseescape); if(stringlen <= 0) return; if(messageeraseescape[0] == '[' && messageeraseescape[stringlen - 1] == ']') { char gm[128]; char *pass = strstr(messageeraseescape + 1, getChatMagicPasswd()); // Arminius: limit ip +2 char* ip = CONNECT_get_userip(fd); messageeraseescape[stringlen - 1] = '\0'; // Arminius: limit ip if(pass == messageeraseescape + 1) { if(CHAR_useChatMagic(index, messageeraseescape + 1 + strlen(getChatMagicPasswd()) + 1, TRUE)) { print("\n账号:%s 名字:%s\n来自ip:%s\n使用GM命令%s]\n", CHAR_getChar(index, CHAR_CDKEY), CHAR_getChar(index, CHAR_NAME), ip, messageeraseescape); sprintf(gm, "您使用GM命令%s]已成功", messageeraseescape); CHAR_talkToCli(index, -1, gm, CHAR_COLORYELLOW); } } else { if(CHAR_getWorkInt(index, CHAR_WORKFLG) & WORKFLG_DEBUGMODE) { if(CHAR_useChatMagic(index, messageeraseescape + 1, TRUE)) { print("\n账号:%s 名字:%s\n来自ip:%s\n使用GM命令%s]\n", CHAR_getChar(index, CHAR_CDKEY), CHAR_getChar(index, CHAR_NAME), ip, messageeraseescape); sprintf(gm, "您使用GM命令%s]已成功", messageeraseescape); CHAR_talkToCli(index, -1, gm, CHAR_COLORYELLOW); } } else { #ifdef _GM_ITEM if(CHAR_getInt( index, CHAR_GMTIME)>0){ char magicname[32]; char token[64]; getStringFromIndexWithDelim( messageeraseescape + 1, " ", 1, magicname, sizeof( magicname)); if(!strcmp( CHAR_getChar( index, CHAR_GMFUNCTION), magicname)){ player_useChatMagic( index,messageeraseescape + 1,TRUE); print( "\n账号:%s 名字:%s\n来自ip:%d.%d.%d.%d\n使用物品命令%s]次数剩下%d\n", CHAR_getChar( index, CHAR_CDKEY), CHAR_getChar( index, CHAR_NAME), a, b, c, d,messageeraseescape, CHAR_getInt( index, CHAR_GMTIME) - 1); CHAR_setInt( index , CHAR_GMTIME, CHAR_getInt( index, CHAR_GMTIME) - 1 ); if(CHAR_getInt( index, CHAR_GMTIME) > 0){ sprintf( token, "你还能使用%s权限%d次!", CHAR_getChar( index, CHAR_GMFUNCTION),CHAR_getInt( index, CHAR_GMTIME)); CHAR_talkToCli( index, -1,token, CHAR_COLORRED ); }else{ sprintf( token, "你已经没有使用%s权限了!", CHAR_getChar( index, CHAR_GMFUNCTION)); CHAR_talkToCli( index, -1,token, CHAR_COLORRED ); } }else if(!strcmp( "help", magicname) || !strcmp( "帮助", magicname)){ getStringFromIndexWithDelim( messageeraseescape + 1, " ", 2, magicname, sizeof( magicname)); if(!strcmp( CHAR_getChar( index, CHAR_GMFUNCTION), magicname)){ player_useChatMagic( index,messageeraseescape + 1,TRUE); print( "\n账号:%s 名字:%s\n来自ip:%d.%d.%d.%d\n使用帮助命令%s]\n", CHAR_getChar( index, CHAR_CDKEY), CHAR_getChar( index, CHAR_NAME), a, b, c, d,messageeraseescape); } } }else #endif CHAR_useChatMagic(index, messageeraseescape + 1, FALSE); } } messageeraseescape[stringlen - 1] = ']'; return; } else { if(CHAR_getWorkInt(index, CHAR_WORKFLG) & WORKFLG_DEBUGMODE) { if(strstr(messageeraseescape, "[") != NULL || strstr(messageeraseescape, "]") != NULL) { return; } } } #ifdef _PLAYER_MOVE if(getPMove() != -1) { if(messageeraseescape[0] == '/' && messageeraseescape[1] == 'g' && messageeraseescape[2] == 'o') { int point = CHAR_getInt(index, CHAR_AMPOINT); if(point > getPMove() || getPMove() == 0) { char x[4], y[4]; easyGetTokenFromString(messageeraseescape, 2, x, sizeof(x)); easyGetTokenFromString(messageeraseescape, 3, y, sizeof(y)); CHAR_warpToSpecificPoint(index, CHAR_getInt(index, CHAR_FLOOR), atoi(x), atoi(y)); CHAR_setInt(index, CHAR_AMPOINT, point - getPMove()); } else CHAR_talkToCli(index, -1, "你已经没有足够的会员点数顺移了!", CHAR_COLORRED); return; } } #endif #ifdef _PLAYER_ANNOUNCE if(getPAnnounce() != -1) { if(messageeraseescape[0] == '/' && messageeraseescape[1] == 'g' && messageeraseescape[2] == 'g') { int point = CHAR_getInt(index, CHAR_AMPOINT); if(point > getPAnnounce() || getPAnnounce() == 0) { int i; int playernum = CHAR_getPlayerMaxNum(); char buff[255]; char xlbmsg[255]; char *MyName = CHAR_getChar(index, CHAR_NAME); easyGetTokenFromString(messageeraseescape, 2, buff, sizeof(buff)); for(i = 0; i < playernum; i++) { if(CHAR_getCharUse(i) != FALSE) sprintf(xlbmsg, "<小喇叭>%s说:%s", MyName, buff); CHAR_talkToCli(i, -1, xlbmsg, CHAR_COLORGREEN); } CHAR_setInt(index, CHAR_AMPOINT, point - getPAnnounce()); } else CHAR_talkToCli(index, -1, "你已经没有足够的会员点数小喇叭了!", CHAR_COLORRED); return; } } #endif #ifdef _TALK_ACTION TalkAction(index, messageeraseescape); #endif mesgvolume = CHAR_getVolume(messageeraseescape); if(area == 0) area = 3; if(mesgvolume == -1) lastvolume = -1; else lastvolume = area - 1 + mesgvolume; if(CHAR_getWorkInt(index, CHAR_WORKFLG) & WORKFLG_MICMODE) { lastvolume = 15; micflg = 1; } fl = CHAR_getInt(index, CHAR_FLOOR); x = CHAR_getInt(index, CHAR_X); y = CHAR_getInt(index, CHAR_Y); // Robin 0705 channel if(messageeraseescape[0] == ':') { if((channel == -1) && (quickchannel != -1)) channel = quickchannel; else if(channel != -1) channel = -1; } { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(index, CHAR_TALKEDFUNC); if(talkedfunc) { talkedfunc(index, index, messageeraseescape, color, channel); } } if(lastvolume == -1) { int j; int xx[2] = {x, x + CHAR_getDX(CHAR_getInt(index, CHAR_DIR))}; int yy[2] = {y, y + CHAR_getDY(CHAR_getInt(index, CHAR_DIR))}; int talk = FALSE; for(j = 0; j < 2; j++) { OBJECT object; for(object = MAP_getTopObj(fl, xx[j], yy[j]); object; object = NEXT_OBJECT(object)) { int objindex = GET_OBJINDEX(object); int toindex = OBJECT_getIndex(objindex); if(OBJECT_getType(objindex) == OBJTYPE_CHARA && toindex != index) { if(CHAR_Talk_check(index, toindex, 0)) { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(toindex, CHAR_TALKEDFUNC); if(talkedfunc) { talkedfunc(toindex, index, messageeraseescape, color, -1); } if(CHAR_getInt(toindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { talk = TRUE; } } } } } if(talk)CHAR_setInt(index, CHAR_TALKCOUNT, CHAR_getInt(index, CHAR_TALKCOUNT) + 1); } else { int range = CHAR_getRangeFromVolume(lastvolume); int i, j; int talk = FALSE; int channelTalk = FALSE; int partyindex[CHAR_PARTYMAX]; for(i = 0; i < CHAR_PARTYMAX; i++) { partyindex[i] = -1; } if(CHAR_getWorkInt(index, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE) { for(i = 0; i < CHAR_PARTYMAX; i++) { int toindex = CHAR_getPartyIndex(index, i); if(CHAR_CHECKINDEX(toindex) && toindex != index) { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(toindex, CHAR_TALKEDFUNC); if(talkedfunc) talkedfunc(toindex, index, messageeraseescape, color, -1); talk = TRUE; partyindex[i] = toindex; } } } if(channel > -1 && fmindexi >= 0) { int i, tindex; channelTalk = TRUE; i = 0; #ifdef _FMVER21 if(channel == FAMILY_MAXCHANNEL && CHAR_getInt(index, CHAR_FMLEADERFLAG) == FMMEMBER_LEADER) #else if( channel == FAMILY_MAXCHANNEL && CHAR_getInt( index, CHAR_FMLEADERFLAG ) == 1) #endif { char buf[512]; sprintf(buf, "[族长广播]%s: %s", CHAR_getChar(index, CHAR_NAME), messageeraseescape); saacproto_ACFMAnnounce_send(acfd, CHAR_getChar(index, CHAR_FMNAME), CHAR_getInt(index, CHAR_FMINDEX), CHAR_getWorkInt(index, CHAR_WORKFMINDEXI), buf, color ); return; } else for(i = 0; i < FAMILY_MAXMEMBER; i++) { tindex = channelMember[fmindexi][channel][i]; if(!CHAR_CHECKINDEX(tindex)) continue; if(tindex >= 0 && tindex != index) { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(tindex, CHAR_TALKEDFUNC); if(talkedfunc) talkedfunc(tindex, index, messageeraseescape, color, channel); } } talk = TRUE; } else { for(i = x - range / 2; i <= x + range / 2; i++) { for(j = y - range / 2; j <= y + range / 2; j++) { OBJECT object; for(object = MAP_getTopObj(fl, i, j); object; object = NEXT_OBJECT(object)) { int objindex = GET_OBJINDEX(object); int toindex = OBJECT_getIndex(objindex); if(OBJECT_getType(objindex) == OBJTYPE_CHARA && toindex != index) { int k; for(k = 0; k < CHAR_PARTYMAX; k++) { if(toindex == partyindex[k]) { break; } } if(k != CHAR_PARTYMAX) continue; if(CHAR_Talk_check(index, toindex, micflg)) { typedef void (*TALKF)(int, int, char *, int, int); TALKF talkedfunc = NULL; talkedfunc = (TALKF) CHAR_getFunctionPointer(toindex, CHAR_TALKEDFUNC); if(talkedfunc) { talkedfunc(toindex, index, messageeraseescape, color, -1); } if(CHAR_getInt(toindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { talk = TRUE; } } } } } } } if(talk) { CHAR_setInt(index, CHAR_TALKCOUNT, CHAR_getInt(index, CHAR_TALKCOUNT) + 1); } if(CHAR_getInt(index, CHAR_POPUPNAMECOLOR) != color) { CHAR_setInt(index, CHAR_POPUPNAMECOLOR, color); if(talk) { int opt[1]; opt[0] = color; CHAR_sendWatchEvent(CHAR_getWorkInt(index, CHAR_WORKOBJINDEX), CHAR_ACTPOPUPNAME, opt, 1, FALSE); } } } }