164 lines
4.4 KiB
C
164 lines
4.4 KiB
C
#include "version.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "common.h"
|
|
#include "char_base.h"
|
|
#include "char.h"
|
|
#include "npcutil.h"
|
|
#include "npc_mic.h"
|
|
#include "saacproto_cli.h"
|
|
#include "lssproto_serv.h"
|
|
#include "battle.h"
|
|
|
|
enum {
|
|
CHAR_WORK_FLOOR = CHAR_NPCWORKINT1,
|
|
CHAR_WORK_LX = CHAR_NPCWORKINT2,
|
|
CHAR_WORK_LY = CHAR_NPCWORKINT3,
|
|
CHAR_WORK_RX = CHAR_NPCWORKINT4,
|
|
CHAR_WORK_RY = CHAR_NPCWORKINT5,
|
|
CHAR_WORK_MODE = CHAR_NPCWORKINT6,
|
|
CHAR_WORK_TYPE = CHAR_NPCWORKINT7,
|
|
CHAR_WORK_WIND = CHAR_NPCWORKINT8,
|
|
CHAR_WORK_FMFL = CHAR_NPCWORKINT9,
|
|
};
|
|
|
|
|
|
BOOL NPC_MicInit( int meindex )
|
|
{
|
|
int i;
|
|
int arg_param[8];
|
|
char argstr[256];
|
|
char buf[64];
|
|
|
|
|
|
NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr));
|
|
|
|
|
|
if( strstr(argstr, "FREE")!=NULL){
|
|
CHAR_setWorkInt(meindex,CHAR_WORK_TYPE,1);
|
|
}
|
|
if( strstr(argstr, "WIND")!=NULL){
|
|
CHAR_setWorkInt(meindex,CHAR_WORK_WIND,1);
|
|
}
|
|
|
|
|
|
if( strstr( argstr , "|" ) != NULL){
|
|
for( i = 1; i < 9; i ++ ) {
|
|
if( getStringFromIndexWithDelim(argstr, "|" , i , buf,sizeof(buf) )
|
|
== FALSE )
|
|
{
|
|
printf( "NPC_MIC:省略参数\n");
|
|
arg_param[i-1] = 0;
|
|
continue;
|
|
}
|
|
arg_param[i-1] = atoi(buf);
|
|
}
|
|
CHAR_setWorkInt( meindex, CHAR_WORK_FLOOR, arg_param[0]);
|
|
CHAR_setWorkInt( meindex, CHAR_WORK_LX, min( arg_param[1],arg_param[3]));
|
|
CHAR_setWorkInt( meindex, CHAR_WORK_LY, min( arg_param[2],arg_param[4]));
|
|
CHAR_setWorkInt( meindex, CHAR_WORK_RX, max( arg_param[1],arg_param[3]));
|
|
CHAR_setWorkInt( meindex, CHAR_WORK_RY, max( arg_param[2],arg_param[4]));
|
|
CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEMIC);
|
|
|
|
CHAR_setWorkInt( meindex, CHAR_WORK_FMFL, arg_param[7]);
|
|
return TRUE;
|
|
|
|
}else{
|
|
CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEMIC);
|
|
CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 1);
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
void NPC_MicTalked( int meindex , int talkerindex , char *msg ,int color )
|
|
{
|
|
|
|
int i;
|
|
int playernum;
|
|
int x,y;
|
|
char message[4096];
|
|
char buf[2048];
|
|
|
|
if( CHAR_getInt(talkerindex,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return;
|
|
if(CHAR_getWorkInt(meindex,CHAR_WORK_TYPE) == 0){
|
|
if(NPC_Util_isFaceToChara(talkerindex,meindex,1 ) ==FALSE) return;
|
|
}
|
|
|
|
snprintf( buf, sizeof( buf), "%s\n%s",
|
|
CHAR_getChar( talkerindex, CHAR_NAME),
|
|
msg);
|
|
|
|
// Robin 0621 族长广播
|
|
print(" MIC_FL:%d ", CHAR_getWorkInt( meindex, CHAR_WORK_FMFL ));
|
|
if( CHAR_getWorkInt( meindex, CHAR_WORK_FMFL ) != 0 )
|
|
{
|
|
#ifdef _FMVER21
|
|
if( CHAR_getInt( talkerindex, CHAR_FMLEADERFLAG ) == FMMEMBER_LEADER)
|
|
#else
|
|
if( CHAR_getInt( talkerindex, CHAR_FMLEADERFLAG ) == 1)
|
|
#endif
|
|
// && ( CHAR_getWorkInt( talkerindex, CHAR_WORKFMFLOOR) == CHAR_getWorkInt( meindex, CHAR_WORK_FLOOR ) ) )
|
|
{
|
|
print(" FMLeaderTalk_send:%s,%d,%d,%s ",
|
|
CHAR_getChar( talkerindex, CHAR_FMNAME), CHAR_getInt( talkerindex, CHAR_FMINDEX),
|
|
CHAR_getWorkInt( talkerindex, CHAR_WORKFMINDEXI), buf);
|
|
|
|
sprintf(message, "[族长广播]%s", buf);
|
|
saacproto_ACFMAnnounce_send( acfd,
|
|
CHAR_getChar( talkerindex, CHAR_FMNAME),
|
|
CHAR_getInt( talkerindex, CHAR_FMINDEX),
|
|
CHAR_getWorkInt( talkerindex, CHAR_WORKFMINDEXI),
|
|
message,
|
|
color
|
|
);
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
makeEscapeString( buf, message, sizeof(buf));
|
|
|
|
playernum = CHAR_getPlayerMaxNum();
|
|
|
|
for( i = 0; i < playernum; i ++ ) {
|
|
BOOL flg = FALSE;
|
|
if( CHAR_getCharUse(i) == FALSE ) continue;
|
|
if( CHAR_getInt( i, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER ) continue;
|
|
if( CHAR_getInt( i, CHAR_FLOOR) != CHAR_getWorkInt( meindex, CHAR_WORK_FLOOR) ){
|
|
continue;
|
|
}
|
|
if( CHAR_getWorkInt( meindex, CHAR_WORK_MODE) == 0 ) {
|
|
x = CHAR_getInt( i, CHAR_X);
|
|
y = CHAR_getInt( i, CHAR_Y);
|
|
if( x >= CHAR_getWorkInt( meindex, CHAR_WORK_LX) &&
|
|
x <= CHAR_getWorkInt( meindex, CHAR_WORK_RX) &&
|
|
y >= CHAR_getWorkInt( meindex, CHAR_WORK_LY) &&
|
|
y <= CHAR_getWorkInt( meindex, CHAR_WORK_RY)){
|
|
flg = TRUE;
|
|
}
|
|
}else {
|
|
flg = TRUE;
|
|
}
|
|
if( flg) {
|
|
CHAR_talkToCli( i, talkerindex, msg, CHAR_COLORYELLOW);
|
|
if( CHAR_getWorkInt( meindex, CHAR_WORK_WIND) == 1 ) {
|
|
if( CHAR_getWorkInt( i, CHAR_WORKBATTLEMODE)
|
|
== BATTLE_CHARMODE_NONE)
|
|
{
|
|
int fd = getfdFromCharaIndex( i);
|
|
if( fd != -1 ) {
|
|
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
|
|
WINDOW_BUTTONTYPE_OK,
|
|
CHAR_WINDOWTYPE_MICMESSAGE,
|
|
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
|
|
message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|