732 lines
22 KiB
C
732 lines
22 KiB
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!!无法以团队加入唷!"},
|
||
{ "msg_overparty", "PAON!!人数已满。"},
|
||
{ "msg_denieditem", "PAPAON!!我可不要这个道具!"},
|
||
{ "msg_allowitem", "哇喔~(想要那个道具啊!)"},
|
||
{ "msglevel", "PAPAON!!你的等级还不够唷!"},
|
||
{ "msg_stone", "PAPAON!!金钱不足唷!"},
|
||
{ "msg_event", "PAON!!你无法加入唷!"},
|
||
{ "msg_start", "哇喔~(出发进行)"},
|
||
{ "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
|
||
|
||
/* 谨切凛棉犯白巧伙玄 */
|
||
#define NPC_BUS_WAITTIME_DEFAULT 180
|
||
|
||
#define NPC_BUS_WAITINGMODE_WAITTIME 5000
|
||
|
||
/*********************************
|
||
* 赓渝质
|
||
*********************************/
|
||
BOOL NPC_BusInit( int meindex )
|
||
{
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
|
||
int i;
|
||
char buf[256];
|
||
int routenum;
|
||
int waittime;
|
||
int seflg;
|
||
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
|
||
/* 卅仃木壬中仃卅中娄醒及民尼永弁 */
|
||
routenum = NPC_Util_GetNumFromStrWithDelim( argstr, "routenum");//行驶路线数量
|
||
|
||
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;
|
||
}
|
||
|
||
|
||
/*********************************
|
||
* 仄井仃日木凶凛及质
|
||
*********************************/
|
||
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_BusLoop( int meindex)
|
||
{
|
||
int i;
|
||
switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {
|
||
case 0:
|
||
/* 谨切乒□玉及凛]凛棉毛民尼永弁允月 */
|
||
/* 凛棉互烦匀凶及匹]请 允月 */
|
||
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:
|
||
/* 谗邋仄化手]弁仿奶失件玄及 樟谨切及啃卞]
|
||
* 剂仄仇仇匹它尼奶玄毛中木化支月
|
||
*/
|
||
if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3
|
||
< NowTime.tv_sec)
|
||
{
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
|
||
|
||
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);
|
||
|
||
/* 戚禾奶件玄及譬濡 */
|
||
/* 窖曰反 溃质 */
|
||
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);
|
||
/* 由□ 奴 仃月质 毛允月 */
|
||
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;
|
||
|
||
/* 汹仁楮溢 */
|
||
/* 谗邋仄凶凛及质 */
|
||
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 - 1024 * 20];
|
||
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
|
||
if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP ) == 1 ) {
|
||
add *= -1;
|
||
}
|
||
CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT,
|
||
CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +add);
|
||
if( NPC_BusSetPoint( meindex, argstr) == FALSE ) {
|
||
/* 卞谗邋*/
|
||
/* 谨切乒□玉卞允月 */
|
||
CHAR_setWorkInt( meindex, NPC_WORK_MODE,3);
|
||
|
||
/* 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_END);
|
||
}
|
||
}
|
||
/* 蜇箕及凛棉毛本永玄 */
|
||
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
|
||
return;
|
||
}
|
||
else {
|
||
return;
|
||
}
|
||
}
|
||
/*-------------------------------------------------------*/
|
||
/* 汹井六月质 */
|
||
|
||
/* 轾毛菲户月 */
|
||
dir = NPC_Util_getDirFromTwoPoint( &start,&end );
|
||
|
||
/* 漆中月桦赭及谨 由□ 奴汹五匹银丹 */
|
||
end.x = CHAR_getInt( meindex, CHAR_X);
|
||
end.y = CHAR_getInt( meindex, CHAR_Y);
|
||
|
||
/* 夫匀井井匀凶凛及啃及质 */
|
||
for( i = 0; i < 100; i ++ ) {
|
||
if( dir < 0 ) {
|
||
dir = RAND( 0,7);
|
||
}
|
||
dir = NPC_Util_SuberiWalk( meindex, dir);
|
||
if( dir >= 0 && dir <= 7) break;
|
||
}
|
||
|
||
if( dir >= 0 && dir <= 7 ) {
|
||
/* 汹仁 */
|
||
ret = CHAR_walk( meindex, dir, 0);
|
||
|
||
if( ret == CHAR_WALKSUCCESSED ) {
|
||
/* 愤坌互褪卅日醮棉毛汹井六月 */
|
||
int i;
|
||
for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
|
||
int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1);
|
||
if( CHAR_CHECKINDEX(toindex) ) {
|
||
int parent_dir;
|
||
/* 阂及匏 午]褪及汹五蟆及匏 井日 轾毛菲户月 */
|
||
/* 汹仁 */
|
||
start.x = CHAR_getInt( toindex, CHAR_X);
|
||
start.y = CHAR_getInt( toindex, CHAR_Y);
|
||
parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end );
|
||
/* 弘仿犯奴它旦左皿扑亦件汹五毛 蜇允月啃卞]
|
||
* 戚及阂反蟆及阂及 毛馨丹方丹卞允月
|
||
*/
|
||
end = start;
|
||
if( parent_dir != -1 ) {
|
||
CHAR_walk( toindex, parent_dir, 0);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/**************************************
|
||
* 戚及桦赭毛本永玄允月
|
||
**************************************/
|
||
static int NPC_BusSetPoint( int meindex, char *argstr)
|
||
{
|
||
char buf[4096];
|
||
char buf2[256];
|
||
char buf3[256];
|
||
int ret;
|
||
char routetostring[64];
|
||
|
||
snprintf( routetostring, sizeof( routetostring), "routeto%d",
|
||
CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, routetostring,buf, sizeof(buf))
|
||
== NULL )
|
||
{
|
||
print( "npcbus:nothing route \n");
|
||
return FALSE;
|
||
}
|
||
ret = getStringFromIndexWithDelim( buf, ";",
|
||
CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT),
|
||
buf2, sizeof(buf2));
|
||
|
||
if( ret == FALSE ) return FALSE;
|
||
|
||
ret = getStringFromIndexWithDelim( buf2, ",", 1,
|
||
buf3, sizeof(buf3));
|
||
if( ret == FALSE) return FALSE;
|
||
CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOX, atoi( buf3));
|
||
|
||
ret = getStringFromIndexWithDelim( buf2, ",", 2,
|
||
buf3, sizeof(buf3));
|
||
if( ret == FALSE) return FALSE;
|
||
CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOY, atoi( buf3));
|
||
return TRUE;
|
||
}
|
||
/**************************************
|
||
* route 寞井日] 蟆互丐匀凶日公木毛
|
||
* 惫寞及午仇卞本永玄允月[
|
||
**************************************/
|
||
static void NPC_BusSetDestPoint( int meindex, char *argstr)
|
||
{
|
||
char buf[256];
|
||
char routename[256];
|
||
|
||
snprintf( routename, sizeof( routename), "routename%d",
|
||
CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, routename, buf, sizeof( buf))
|
||
!= NULL )
|
||
{
|
||
CHAR_setChar( meindex, CHAR_OWNTITLE, buf);
|
||
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
|
||
}
|
||
}
|
||
/**************************************
|
||
* 隙烂今木凶失奶 丞毛 匀化中月井民尼永弁允月
|
||
* 匀化中凶日分户
|
||
**************************************/
|
||
static BOOL NPC_BusCheckDeniedItem( int meindex, int charaindex, char *argstr)
|
||
{
|
||
char buf[1024];
|
||
BOOL found = TRUE;
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "denieditem", buf, sizeof( buf))
|
||
!= NULL )
|
||
{
|
||
int i;
|
||
int ret;
|
||
for( i = 1; ; i ++) {
|
||
int itemid;
|
||
char buf2[64];
|
||
int j;
|
||
ret = getStringFromIndexWithDelim( buf, ",", i, buf2, sizeof(buf2));
|
||
if( ret == FALSE ) break;
|
||
itemid = atoi( buf2);
|
||
for( j = 0; j < CHAR_MAXITEMHAVE; j ++) {
|
||
int itemindex = CHAR_getItemIndex( charaindex, j);
|
||
if( ITEM_CHECKINDEX( itemindex)) {
|
||
if( ITEM_getInt( itemindex, ITEM_ID) == itemid) {
|
||
found = FALSE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return found;
|
||
}
|
||
/**************************************
|
||
* 隙烂今木凶失奶 丞毛 匀化中月井民尼永弁允月
|
||
* 匀化中卅中午分户
|
||
**************************************/
|
||
BOOL NPC_BusCheckAllowItem( int meindex, int charaindex, BOOL pickupmode)
|
||
{
|
||
char buf[1024];
|
||
BOOL found = TRUE;
|
||
BOOL pickup = FALSE;
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
|
||
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "pickupitem", buf, sizeof( buf))!= NULL ){
|
||
pickup = TRUE;
|
||
}
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "allowitem", buf, sizeof( buf))!= NULL ){
|
||
int i;
|
||
int ret;
|
||
for( i = 1; ; i ++) {
|
||
int itemid;
|
||
char buf2[64];
|
||
int j;
|
||
BOOL getflg;
|
||
ret = getStringFromIndexWithDelim( buf, ",", i, buf2, sizeof(buf2));
|
||
if( ret == FALSE ) break;
|
||
itemid = atoi( buf2);
|
||
getflg = FALSE;
|
||
for( j = 0; j < CHAR_MAXITEMHAVE; j ++) {
|
||
int itemindex = CHAR_getItemIndex( charaindex, j);
|
||
if( ITEM_CHECKINDEX( itemindex)) {
|
||
if( ITEM_getInt( itemindex, ITEM_ID) == itemid) {
|
||
if( pickupmode && pickup && !getflg) {
|
||
CHAR_DelItem( charaindex, j);
|
||
getflg = TRUE;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if( j == CHAR_MAXITEMHAVE) {
|
||
found = FALSE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return found;
|
||
}
|
||
|
||
/**************************************
|
||
* 隙烂今木凶伊矛伙动晓井民尼永弁允月
|
||
**************************************/
|
||
static BOOL NPC_BusCheckLevel( int meindex, int charaindex, char *argstr)
|
||
{
|
||
int level;
|
||
|
||
/* 卅仃木壬中仃卅中娄醒及民尼永弁 */
|
||
level = NPC_Util_GetNumFromStrWithDelim( argstr, "needlevel");
|
||
if( level == -1 ) {
|
||
return TRUE;
|
||
}
|
||
if( CHAR_getInt( charaindex, CHAR_LV) >= level ) return TRUE;
|
||
|
||
return FALSE;
|
||
}
|
||
/**************************************
|
||
* 豢嗯毛民尼永弁允月
|
||
* -1 蛲 0动晓” ]井勾 邰Stone
|
||
**************************************/
|
||
static int NPC_BusCheckStone( int meindex, int charaindex, char *argstr)
|
||
{
|
||
int gold;
|
||
|
||
/* 卅仃木壬中仃卅中娄醒及民尼永弁 */
|
||
gold = NPC_Util_GetNumFromStrWithDelim( argstr, "needstone");
|
||
if( gold == -1 ) {
|
||
return 0;
|
||
}
|
||
if( CHAR_getInt( charaindex, CHAR_GOLD) >= gold ) return gold;
|
||
|
||
return -1;
|
||
}
|
||
/**************************************
|
||
* 丢永本□斥毛霜月
|
||
* 娄醒及丢永本□斥互卅仃木壬犯白巧伙玄丢永本□斥毛霜月
|
||
**************************************/
|
||
static void NPC_BusSendMsg( int meindex, int talkerindex, int tablenum)
|
||
{
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
|
||
char buf[256];
|
||
char msg[256];
|
||
if( tablenum < 0 || tablenum >= arraysizeof( busmsg)) return;
|
||
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, busmsg[tablenum].option, buf, sizeof( buf))
|
||
!= NULL )
|
||
{
|
||
strcpy( msg, buf);
|
||
}
|
||
else {
|
||
snprintf( msg, sizeof(msg),busmsg[tablenum].defaultmsg);
|
||
}
|
||
CHAR_talkToCli( talkerindex, meindex, msg, CHAR_COLORYELLOW);
|
||
}
|
||
/**************************************
|
||
* 伙□玄 □皮伙及禾奶件玄及醒毛潸 允月
|
||
**************************************/
|
||
static int NPC_BusGetRoutePointNum( int meindex, char *argstr )
|
||
{
|
||
int i;
|
||
char buf[4096];
|
||
char buf2[256];
|
||
int ret;
|
||
char routetostring[64];
|
||
|
||
snprintf( routetostring, sizeof( routetostring), "routeto%d",
|
||
CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, routetostring,buf, sizeof(buf))
|
||
== NULL )
|
||
{
|
||
print( "npcbus:nothing route \n");
|
||
return -1;
|
||
}
|
||
for( i = 1; ; i ++ ) {
|
||
ret = getStringFromIndexWithDelim( buf, ";", i, buf2, sizeof(buf2));
|
||
if( ret == FALSE) break;
|
||
}
|
||
return( i -1);
|
||
}
|
||
BOOL NPC_BusCheckJoinParty( int meindex, int charaindex, BOOL msgflg)
|
||
{
|
||
//int fd;
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
|
||
int ret;
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
|
||
/* ㄠ弘伉永玉动 及心 */
|
||
if( !NPC_Util_charIsInFrontOfChar( charaindex, meindex, 1 )) return FALSE;
|
||
/* 昙乐反蛐 允月 */
|
||
if( CHAR_getWorkInt( meindex, NPC_WORK_MODE) != 0 ) {
|
||
if( msgflg) NPC_BusSendMsg( meindex, charaindex, NPC_BUS_MSG_GETTINGON);
|
||
return FALSE;
|
||
}
|
||
/* 天□化不分匀凶日分户 */
|
||
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) != CHAR_PARTY_NONE) {
|
||
if( msgflg) NPC_BusSendMsg( meindex, charaindex, NPC_BUS_MSG_NOTPARTY);
|
||
return FALSE;
|
||
}
|
||
/* 由□ 奴及谛醒毛民尼永弁允月 */
|
||
if( CHAR_getEmptyPartyArray( meindex) == -1 ) {
|
||
if( msgflg) NPC_BusSendMsg( meindex, charaindex, NPC_BUS_MSG_OVERPARTY);
|
||
return FALSE;
|
||
}
|
||
/* 失奶 丞及民尼永弁毛允月(嗟鞅失奶 丞) */
|
||
if( !NPC_BusCheckDeniedItem( meindex, charaindex, argstr)) {
|
||
if( msgflg) NPC_BusSendMsg( meindex, charaindex, NPC_BUS_MSG_DENIEDITEM);
|
||
return FALSE;
|
||
}
|
||
#ifdef _ITEM_CHECKWARES
|
||
if( CHAR_CheckInItemForWares( charaindex, 0) == FALSE ) {
|
||
CHAR_talkToCli( charaindex, -1, "无法携带货物上车。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
#endif
|
||
/* 失奶 丞及民尼永弁毛允月( 邰失奶 丞) */
|
||
if( !NPC_BusCheckAllowItem( meindex, charaindex, FALSE)) {
|
||
if( msgflg) NPC_BusSendMsg( meindex, charaindex, NPC_BUS_MSG_ALLOWITEM);
|
||
return FALSE;
|
||
}
|
||
/* 伊矛伙及民尼永弁毛允月 */
|
||
if( !NPC_BusCheckLevel( meindex, charaindex, argstr)) {
|
||
if( msgflg) NPC_BusSendMsg( meindex, charaindex, NPC_BUS_MSG_LEVEL);
|
||
return FALSE;
|
||
}
|
||
/* 奶矛件玄 井民尼永弁允月 */
|
||
// if( CHAR_getInt( charaindex, CHAR_NOWEVENT) != 0 ||
|
||
// CHAR_getInt( charaindex, CHAR_NOWEVENT2) != 0 ||
|
||
// CHAR_getInt( charaindex, CHAR_NOWEVENT3) != 0 )
|
||
// {
|
||
// if( msgflg) NPC_BusSendMsg( meindex, charaindex, NPC_BUS_MSG_EVENT);
|
||
// return FALSE;
|
||
// }
|
||
/* 豢嗯及民尼永弁毛允月 云嗯毛潸月及匹] 蔽民尼永弁卞允月仇午″ */
|
||
ret = NPC_BusCheckStone( meindex, charaindex, argstr);
|
||
if( ret == -1 ) {
|
||
if( msgflg) NPC_BusSendMsg( meindex, charaindex, NPC_BUS_MSG_GOLD);
|
||
return FALSE;
|
||
}
|
||
if( ret != 0 ) {
|
||
char msgbuf[128];
|
||
/* 豢嗯毛午月 */
|
||
CHAR_setInt( charaindex, CHAR_GOLD,
|
||
CHAR_getInt( charaindex, CHAR_GOLD) - ret);
|
||
/* 霜耨 */
|
||
CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_GOLD);
|
||
snprintf( msgbuf, sizeof( msgbuf), "支付了%d Stone!", ret);
|
||
CHAR_talkToCli( charaindex, -1, msgbuf, CHAR_COLORYELLOW);
|
||
}
|
||
/* 由□ 奴卞 月 */
|
||
//CHAR_JoinParty_Main( charaindex, meindex);
|
||
|
||
//fd = getfdFromCharaIndex( charaindex );
|
||
|
||
//lssproto_PR_send( fd, 1, 1);
|
||
|
||
|
||
return TRUE;
|
||
}
|