227 lines
6.3 KiB
C
227 lines
6.3 KiB
C
#include "version.h"
|
|
#include <string.h>
|
|
#include "object.h"
|
|
#include "char_base.h"
|
|
#include "char.h"
|
|
#include "util.h"
|
|
#include "npcutil.h"
|
|
#include "npc_oldman.h"
|
|
#include "title.h"
|
|
#include "char_data.h"
|
|
#include "readmap.h"
|
|
#include "lssproto_serv.h"
|
|
#include "log.h"
|
|
#include "handletime.h"
|
|
|
|
|
|
|
|
|
|
|
|
enum {
|
|
E_INT_GRAPHIC = CHAR_NPCWORKINT1, /* 褥蟆及 飓 */
|
|
E_INT_GRAPHIC2 = CHAR_NPCWORKINT2, /* 褥 及 飓 */
|
|
E_INT_BORN = CHAR_NPCWORKINT3, /* 藕戏凛棉 */
|
|
E_INT_DEAD = CHAR_NPCWORKINT4, /* 壅尹月凛棉*/
|
|
E_INT_MODE = CHAR_NPCWORKINT5, /* 蜇箕及乒□玉 */
|
|
E_INT_NOWGRAPHIC = CHAR_NPCWORKINT6, /* 蜇箕及弘仿白奴永弁瓜件田□ */
|
|
|
|
};
|
|
|
|
|
|
typedef struct {
|
|
char arg[32];
|
|
int born;
|
|
int dead;
|
|
}NPC_TimeMan;
|
|
|
|
|
|
#define YOAKE 700
|
|
#define NICHIBOTU 300
|
|
#define SHOUGO 125
|
|
#define YONAKA 500
|
|
|
|
static NPC_TimeMan TimeTble[] = {
|
|
|
|
{"ALLNIGHT", NICHIBOTU+1, YOAKE}, /* 脐 互请化中卅中凛 */
|
|
{"ALLNOON", YOAKE+1, NICHIBOTU},/* 脐 互请化中月凛 */
|
|
{"AM", YONAKA+1, SHOUGO}, /* AM 凛及心 */
|
|
{"PM", SHOUGO+1, YONAKA}, /* PM 凛及心 */
|
|
{"FORE", YOAKE+1, SHOUGO}, /* 脐 互匹化井日恳诟引匹 */
|
|
{"AFTER", SHOUGO+1, NICHIBOTU},/* 恳诟井日脐 互释戈引匹 */
|
|
{"EVNING", NICHIBOTU+1, YONAKA}, /* 脐 互释氏匹井日蕞 引匹 */
|
|
{"MORNING", YONAKA+1, YOAKE}, /* 蕞 井日脐 互哝月引匹 */
|
|
{"FREE", 0, 1024},
|
|
};
|
|
|
|
|
|
|
|
|
|
BOOL NPC_TimeManInit( int meindex )
|
|
{
|
|
|
|
int i=0;
|
|
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|
char buf[32];
|
|
|
|
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
|
|
print("GetArgStrErr");
|
|
return FALSE;
|
|
}
|
|
|
|
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPETOWNPEOPLE );
|
|
if( NPC_Util_GetStrFromStrWithDelim( argstr, "change_no", buf, sizeof( buf)) != NULL ){
|
|
if(strstr(buf,"CLS")!=NULL){
|
|
CHAR_setWorkInt( meindex,E_INT_GRAPHIC2, 9999 );
|
|
}else{
|
|
CHAR_setWorkInt( meindex,E_INT_GRAPHIC2, atoi(buf) );
|
|
}
|
|
}else{
|
|
CHAR_setWorkInt( meindex,E_INT_GRAPHIC2, 9999 );
|
|
}
|
|
|
|
CHAR_setWorkInt( meindex, E_INT_GRAPHIC, CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER) );
|
|
|
|
if( NPC_Util_GetStrFromStrWithDelim( argstr, "time", buf, sizeof( buf)) != NULL ){
|
|
for(i=0 ; i<9 ; i++){
|
|
if(strstr(buf,TimeTble[i].arg) != NULL){
|
|
CHAR_setWorkInt( meindex, E_INT_BORN, TimeTble[i].born);
|
|
CHAR_setWorkInt( meindex, E_INT_DEAD, TimeTble[i].dead);
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
void NPC_TimeManTalked( int meindex , int talkerindex , char *msg ,int color )
|
|
{
|
|
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|
char token[512];
|
|
char buf[512];
|
|
int tokennum=0;
|
|
int i;
|
|
|
|
|
|
if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2)==FALSE){
|
|
if( NPC_Util_CharDistance( talkerindex ,meindex ) > 1) return;
|
|
}
|
|
|
|
if(CHAR_getInt(meindex,CHAR_BASEIMAGENUMBER)==9999){
|
|
/*--壅尹化中月乒□玉--*/
|
|
return;
|
|
}
|
|
|
|
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
|
|
print("GetArgStrErr");
|
|
return;
|
|
}
|
|
|
|
|
|
if( CHAR_getInt(talkerindex,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER )return;
|
|
|
|
if( NPC_Util_charIsInFrontOfChar( talkerindex, meindex, 3 ) ==FALSE) return;
|
|
|
|
|
|
|
|
|
|
if(CHAR_getWorkInt(meindex,E_INT_MODE)==0){
|
|
/*--丢永本□斥毛忒允 */
|
|
NPC_Util_GetStrFromStrWithDelim(argstr,"main_msg",buf,sizeof( buf) );
|
|
|
|
}else{
|
|
NPC_Util_GetStrFromStrWithDelim(argstr,"change_msg",buf,sizeof( buf) );
|
|
}
|
|
|
|
tokennum = 1;
|
|
/* 戊件穴匹嗉濠日木凶玄□弁件互窒仇丐月井醒尹月 */
|
|
for( i=0;buf[i]!='\0';i++ ){
|
|
if( buf[i] == ',' ) tokennum++;
|
|
}
|
|
|
|
getStringFromIndexWithDelim( buf,",", rand()%tokennum+1,token, sizeof(token));
|
|
/*--仄扎屯月--*/
|
|
CHAR_talkToCli( talkerindex, meindex, token, CHAR_COLORWHITE );
|
|
|
|
|
|
}
|
|
|
|
/** 引歹曰卞窒井互粟仇匀凶午五卞裟壬木月*/
|
|
void NPC_TimeManWatch( int meobjindex, int objindex, CHAR_ACTION act,
|
|
int x,int y,int dir, int* opt,int optlen )
|
|
{
|
|
int meindex=0;
|
|
int index;
|
|
LSTIME nowlstime;
|
|
int born;
|
|
int dead;
|
|
|
|
if( OBJECT_getType( objindex) != OBJTYPE_CHARA) return;
|
|
index = OBJECT_getIndex( objindex);
|
|
|
|
if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return;
|
|
|
|
meindex = OBJECT_getIndex( meobjindex);
|
|
born = CHAR_getWorkInt( meindex , E_INT_BORN );
|
|
dead = CHAR_getWorkInt( meindex , E_INT_DEAD );
|
|
|
|
// print("now_hour=%d",nowlstime.hour);
|
|
|
|
/* 凛棉毛苇化橇谪毛瑁户月 */
|
|
if(born < dead){
|
|
RealTimeToLSTime( NowTime.tv_sec, &nowlstime);
|
|
if( (born < nowlstime.hour) && (dead > nowlstime.hour) ){
|
|
if(CHAR_getWorkInt(meindex,E_INT_NOWGRAPHIC)
|
|
==CHAR_getWorkInt( meindex, E_INT_GRAPHIC)) return;
|
|
|
|
CHAR_setInt(meindex,CHAR_BASEIMAGENUMBER,
|
|
CHAR_getWorkInt( meindex, E_INT_GRAPHIC));
|
|
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
|
|
CHAR_setWorkInt(meindex,E_INT_MODE,0);
|
|
CHAR_setWorkInt(meindex,E_INT_NOWGRAPHIC,
|
|
CHAR_getInt(meindex,CHAR_BASEIMAGENUMBER));
|
|
}else{
|
|
/*-壅尹化中月--*/
|
|
if(CHAR_getWorkInt(meindex,E_INT_NOWGRAPHIC)
|
|
==CHAR_getWorkInt( meindex, E_INT_GRAPHIC2)) return;
|
|
|
|
CHAR_setInt(meindex,CHAR_BASEIMAGENUMBER,
|
|
CHAR_getWorkInt( meindex, E_INT_GRAPHIC2));
|
|
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
|
|
CHAR_setWorkInt(meindex,E_INT_MODE,1);
|
|
CHAR_setWorkInt(meindex,E_INT_NOWGRAPHIC,
|
|
CHAR_getInt(meindex,CHAR_BASEIMAGENUMBER));
|
|
|
|
}
|
|
}else{
|
|
RealTimeToLSTime( NowTime.tv_sec, &nowlstime);
|
|
if( (born < nowlstime.hour && 1024 > nowlstime.hour)
|
|
|| ( 0 < nowlstime.hour && dead > nowlstime.hour)
|
|
){
|
|
if(CHAR_getWorkInt(meindex,E_INT_NOWGRAPHIC)
|
|
==CHAR_getWorkInt( meindex, E_INT_GRAPHIC)) return;
|
|
|
|
CHAR_setInt(meindex,CHAR_BASEIMAGENUMBER,
|
|
CHAR_getWorkInt( meindex, E_INT_GRAPHIC));
|
|
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
|
|
CHAR_setWorkInt(meindex,E_INT_MODE,0);
|
|
CHAR_setWorkInt(meindex,E_INT_NOWGRAPHIC,
|
|
CHAR_getInt(meindex,CHAR_BASEIMAGENUMBER));
|
|
}else{
|
|
if(CHAR_getWorkInt(meindex,E_INT_NOWGRAPHIC)
|
|
==CHAR_getWorkInt( meindex, E_INT_GRAPHIC2)) return;
|
|
|
|
CHAR_setInt(meindex,CHAR_BASEIMAGENUMBER,
|
|
CHAR_getWorkInt( meindex, E_INT_GRAPHIC2));
|
|
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
|
|
CHAR_setWorkInt(meindex,E_INT_MODE,1);
|
|
CHAR_setWorkInt(meindex,E_INT_NOWGRAPHIC,
|
|
CHAR_getInt(meindex,CHAR_BASEIMAGENUMBER));
|
|
}
|
|
}
|
|
|
|
}
|
|
|