?? npc_bus.c
字號:
#include "version.h"
#include <string.h>
#include "char.h"
#include "object.h"
#include "char_base.h"
#include "npcutil.h"
#include "lssproto_serv.h"
#include "npc_bus.h"
#include "handletime.h"
/*
* 田旦心兇中卅儀毛允月NPC
*/
enum {
NPC_WORK_ROUTETOX = CHAR_NPCWORKINT1, /* 升仇尺" 甄 */
NPC_WORK_ROUTETOY = CHAR_NPCWORKINT2, /* 升仇尺" 甄 */
NPC_WORK_ROUTEPOINT = CHAR_NPCWORKINT3, /* 漆窒 井 */
NPC_WORK_ROUNDTRIP = CHAR_NPCWORKINT4, /* 墊五井窖曰井 ㄟ“墊五 ㄠ“窖曰 */
NPC_WORK_MODE = CHAR_NPCWORKINT5,
NPC_WORK_CURRENTROUTE = CHAR_NPCWORKINT6,
NPC_WORK_ROUTEMAX = CHAR_NPCWORKINT7,
NPC_WORK_WAITTIME = CHAR_NPCWORKINT8,
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT9,
NPC_WORK_SEFLG = CHAR_NPCWORKINT10,
};
/* 蛐 丟永本□斥及enum */
enum {
NPC_BUS_MSG_GETTINGON,
NPC_BUS_MSG_NOTPARTY,
NPC_BUS_MSG_OVERPARTY,
NPC_BUS_MSG_DENIEDITEM,
NPC_BUS_MSG_ALLOWITEM,
NPC_BUS_MSG_LEVEL,
NPC_BUS_MSG_GOLD,
NPC_BUS_MSG_EVENT,
NPC_BUS_MSG_START,
NPC_BUS_MSG_END,
};
typedef struct {
char option[32];
char defaultmsg[128];
}NPC_BUS_MSG;
NPC_BUS_MSG busmsg[] = {
{ "msg_gettingon", "PAON!(你無法於中途加入我們唷!)"},
{ "msg_notparty", "PAPAON!!無法以團(tuán)隊(duì)加入唷!"},
{ "msg_overparty", "PAON!!人數(shù)已滿。"},
{ "msg_denieditem", "PAPAON!!我可不要這個道具!"},
{ "msg_allowitem", "哇喔~(想要那個道具啊!)"},
{ "msglevel", "PAPAON!!你的等級還不夠唷!"},
{ "msg_stone", "PAPAON!!金錢不足唷!"},
{ "msg_event", "PAON!!你無法加入唷!"},
{ "msg_start", "哇喔~(出發(fā)進(jìn)行)"},
{ "msg_end", "哇喔~(到羅)"}
};
static int NPC_BusSetPoint( int meindex, char *argstr);
static void NPC_BusSetDestPoint( int meindex, char *argstr);
static BOOL NPC_BusCheckDeniedItem( int meindex, int charaindex, char *argstr);
static BOOL NPC_BusCheckLevel( int meindex, int charaindex, char *argstr);
static int NPC_BusCheckStone( int meindex, int charaindex, char *argstr);
static void NPC_BusSendMsg( int meindex, int talkerindex, int tablenum);
static int NPC_BusGetRoutePointNum( int meindex, char *argstr );
static void NPC_Bus_walk( int meindex);
#define NPC_BUS_LOOPTIME 200
/* 謹(jǐn)切凜棉犯白巧伙玄 */
#define NPC_BUS_WAITTIME_DEFAULT 180
#define NPC_BUS_WAITINGMODE_WAITTIME 5000
/*********************************
* 賡渝質(zhì)
*********************************/
BOOL NPC_BusInit( int meindex )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
int i;
char buf[256];
int routenum;
int waittime;
int seflg;
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
/* 卅仃木壬中仃卅中婁醒及民尼永弁 */
routenum = NPC_Util_GetNumFromStrWithDelim( argstr, "routenum");//行駛路線數(shù)量
if( routenum == -1 ) {
print( "npcbus:nothing routenum \n");
return FALSE;
}
CHAR_setWorkInt( meindex, NPC_WORK_ROUTEMAX, routenum);
for( i = 1; i <= routenum; i ++ ) {
char routetostring[64];
snprintf( routetostring, sizeof( routetostring), "routeto%d", i);
if( NPC_Util_GetStrFromStrWithDelim( argstr, routetostring,buf, sizeof(buf))
== NULL )
{
print( "npcbus:nothing route to \n");
return FALSE;
}
}
waittime = NPC_Util_GetNumFromStrWithDelim( argstr, "waittime");
if( waittime == -1 ) waittime = NPC_BUS_WAITTIME_DEFAULT;
CHAR_setWorkInt( meindex, NPC_WORK_WAITTIME, waittime);
seflg = NPC_Util_GetNumFromStrWithDelim( argstr, "seflg");
if( seflg == -1 ) seflg = TRUE;
CHAR_setWorkInt( meindex, NPC_WORK_SEFLG, seflg);
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEBUS );
CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, 2);
CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 0);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, 0);
CHAR_setInt( meindex, CHAR_LOOPINTERVAL,
NPC_BUS_WAITINGMODE_WAITTIME);
/* 蜇箕及凜棉毛本永玄 */
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
for( i = 0; i < CHAR_PARTYMAX; i ++) {
CHAR_setWorkInt( meindex, CHAR_WORKPARTYINDEX1 + i, -1);
}
/* 伙□玄瑁爛允月 */
{
int rev;
int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r));
//print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
/* 欠旦正□玄 */
rev = NPC_Util_GetNumFromStrWithDelim( argstr, "reverse");
if( rev == 1 ) {
int num = NPC_BusGetRoutePointNum( meindex, argstr);
if( num <= 0 ) {
print( "npcbus:真奇怪!\n");
return FALSE;
}
CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1);
CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 1);
}
/* 伙□玄毛本永玄允月 */
NPC_BusSetPoint( meindex, argstr);
/* 墊五燮毛 憎允月 */
NPC_BusSetDestPoint( meindex, argstr);
}
return TRUE;
}
/*********************************
* 仄井仃日木兇凜及質(zhì)
*********************************/
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, "出發(fā)" ) ||
strstr( szMes, "出發(fā)" ) ||
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);
}
}
}
}
#if 0
else if( strstr( szMes, "停止" ) ||
strstr( szMes, "停止" ) ||
strstr( szMes, "stop" ) ||
strstr( szMes, "Stop" ))
{
CHAR_setWorkInt( meindex, NPC_WORK_MODE,2);
/* 伙□皿楮醒及奶件正□田伙毛聶仁允月 */
CHAR_setInt( meindex, CHAR_LOOPINTERVAL,
NPC_BUS_WAITINGMODE_WAITTIME);
/* 蜇箕及凜棉毛本永玄 */
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
}
else if( strstr( szMes, NPC_BUS_DEBUGROUTINTG )) {
/* 犯田永弘迕 */
char *p = strstr( szMes,NPC_BUS_DEBUGROUTINTG);
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
if( p) {
int a = atoi( p+strlen(NPC_BUS_DEBUGROUTINTG));
if( a <0 ) a = 1;
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, a);
}
//print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
/* 伙□玄毛本永玄允月 */
NPC_BusSetPoint( meindex, argstr);
}
#endif
}
}
/**************************************
* 伙□皿楮醒
**************************************/
void NPC_BusLoop( int meindex)
{
int i;
switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {
case 0:
/* 謹(jǐn)切乒□玉及凜]凜棉毛民尼永弁允月 */
/* 凜棉互煩勻兇及匹]請 允月 */
if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME)
+ CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME)
< NowTime.tv_sec)
{
/* 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);
}
}
CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
/* 伙□皿楮醒及裟請仄毛洶仁簧蘸卞允月 */
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);
}
return;
case 1:
/* 洶仁 */
NPC_Bus_walk( meindex);
case 2:
/* 鞅引勻化中月乒□玉 */
/* 凜棉互煩勻兇及匹]請 允月 */
if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME)
+ (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3)
< NowTime.tv_sec)
{
CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);
/* 伙□皿楮醒及裟請仄毛洶仁簧蘸卞允月 */
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);
}
return;
case 3:
/* 讒邋仄化手]弁仿奶失件玄及 樟謹(jǐn)切及啃卞]
* 劑仄仇仇匹它尼奶玄毛中木化支月
*/
if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3
< NowTime.tv_sec)
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
/* 伙□皿楮醒及裟請仄毛贊仁允月 */
CHAR_setInt( meindex, CHAR_LOOPINTERVAL,
NPC_BUS_WAITINGMODE_WAITTIME);
/* 伙□玄瑁爛允月 */
{
int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r));
//print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
}
/* 墊五窖曰白仿弘 凳 */
CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP,
CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1);
/* 戚禾奶件玄及譬濡 */
/* 窖曰反 潰質(zhì) */
if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1) {
/* 公及伙□玄及 嫖禾奶件玄醒毛 月 */
int num = NPC_BusGetRoutePointNum( meindex, argstr);
CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1);
}
else {
CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT,
CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1);
}
/* 戚及禾奶件玄及甄 毛本永玄允月 */
NPC_BusSetPoint( meindex, argstr);
/* 墊五燮毛 憎允月 */
NPC_BusSetDestPoint( meindex, argstr);
/* 由□ 奴 仃月質(zhì) 毛允月 */
CHAR_DischargeParty( meindex, 0);
/* 蜇箕及凜棉毛本永玄 */
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
/* 乒□玉弁伉失 */
CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);
}
return;
default:
break;
}
}
/**************************************
* 洶仁[
**************************************/
static void NPC_Bus_walk( int meindex)
{
POINT start, end;
int dir;
int ret;
int i;
/* 洶仁楮溢 */
/* 讒邋仄兇凜及質(zhì) */
start.x = CHAR_getInt( meindex, CHAR_X);
start.y = CHAR_getInt( meindex, CHAR_Y);
end.x = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOX);
end.y = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOY);
/* 讒邋仄兇及匹戚及禾奶件玄卞 */
if( start.x == end.x && start.y == end.y ) {
int add = 1;
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP ) == 1 ) {
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -