📄 npc_airplane.c
字号:
dir = RAND( 0,7);
}
dir = NPC_Util_SuberiWalk( meindex, dir);
if( dir >= 0 && dir <= 7) break;
}
#endif
if( dir >= 0 && dir <= 7 ) {
/* 汹仁 */
ret = CHAR_walk( meindex, dir, 0);
if( ret == CHAR_WALKSUCCESSED ) {
/* 愤坌互褪卅日醮棉毛汹井六月 */
int i;
int mefl=CHAR_getInt( meindex, CHAR_FLOOR);
for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1);
int fl = CHAR_getInt( toindex, CHAR_FLOOR);
int xx = CHAR_getInt( toindex, CHAR_X);
int yy = CHAR_getInt( toindex, CHAR_Y);
if( CHAR_CHECKINDEX(toindex) &&
(mefl==fl) && (abs(xx-end.x)+abs(yy-end.y)<10) ) {
int parent_dir;
/* 阂及匏 午]褪及汹五蟆及匏 井日 轾毛菲户月 */
/* 汹仁 */
start.x = xx;
start.y = yy;
parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end );
/* 弘仿犯奴它旦左皿扑亦件汹五毛 蜇允月啃卞]
* 戚及阂反蟆及阂及 毛馨丹方丹卞允月
*/
end = start;
if( parent_dir != -1 ) {
CHAR_walk( toindex, parent_dir, 0);
}
}
}
}
}
}
/**************************************
* 戚及桦赭毛本永玄允月
**************************************/
static int NPC_AirSetPoint( int meindex, char *argstr)
{
char buf[4096];
char buf2[256];
char buf3[256];
int floor,warpx,warpy;
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( "npcair:nothing route \n");
return FALSE;
}
ret = getStringFromIndexWithDelim( buf, ";",
CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT),
buf2, sizeof(buf2));
if( ret == FALSE ) return FALSE;
// Arminius: add floor
ret = getStringFromIndexWithDelim( buf2, ",", 1,
buf3, sizeof(buf3));
if( ret == FALSE) return FALSE;
floor = atoi(buf3);
ret = getStringFromIndexWithDelim( buf2, ",", 2,
buf3, sizeof(buf3));
if( ret == FALSE) return FALSE;
CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOX, atoi( buf3));
warpx = atoi(buf3);
ret = getStringFromIndexWithDelim( buf2, ",", 3,
buf3, sizeof(buf3));
if( ret == FALSE) return FALSE;
CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOY, atoi( buf3));
warpy = atoi(buf3);
if (floor!=CHAR_getInt(meindex, CHAR_FLOOR)) {
int i;
CHAR_warpToSpecificPoint(meindex, floor, warpx, warpy);
for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX(toindex) ) {
CHAR_warpToSpecificPoint(toindex, floor, warpx, warpy);
}
}
CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOX, warpx);
CHAR_setWorkInt( meindex, NPC_WORK_ROUTETOY, warpy);
}
return TRUE;
}
/**************************************
* route 寞井日] 蟆互丐匀凶日公木毛
* 惫寞及午仇卞本永玄允月[
**************************************/
static void NPC_AirSetDestPoint( 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_AirCheckDeniedItem( 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_AirCheckAllowItem( int meindex, int charaindex, BOOL pickupmode)
{
char buf[1024];
BOOL found = TRUE;
BOOL pickup = FALSE;
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
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_AirCheckLevel( 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;
}
#ifdef _NPC_AIRLEVEL
static BOOL NPC_AirCheckMaxLevel( int meindex, int charaindex, char *argstr)
{
int level;
/* 卅仃木壬中仃卅中娄醒及民尼永弁 */
level = NPC_Util_GetNumFromStrWithDelim( argstr, "maxlevel");
if( level == -1 ) {
return TRUE;
}
if( CHAR_getInt( charaindex, CHAR_LV) < level ) return TRUE;
return FALSE;
}
#endif
/**************************************
* 豢嗯毛民尼永弁允月
* -1 蛲 0动晓” ]井勾 邰Stone
**************************************/
static int NPC_AirCheckStone( 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_AirSendMsg( int meindex, int talkerindex, int tablenum)
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf[256];
char msg[256];
if( tablenum < 0 || tablenum >= arraysizeof( airmsg)) return;
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
if( NPC_Util_GetStrFromStrWithDelim( argstr, airmsg[tablenum].option, buf, sizeof( buf))
!= NULL )
{
strcpy( msg, buf);
}
else {
snprintf( msg, sizeof(msg),airmsg[tablenum].defaultmsg);
}
CHAR_talkToCli( talkerindex, meindex, msg, CHAR_COLORYELLOW);
}
/**************************************
* 伙□玄 □皮伙及禾奶件玄及醒毛潸 允月
**************************************/
static int NPC_AirGetRoutePointNum( 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( "npcair: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_AirCheckJoinParty( int meindex, int charaindex, BOOL msgflg)
{
//int fd;
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
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_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_GETTINGON);
return FALSE;
}
/* 天□化不分匀凶日分户 */
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) != CHAR_PARTY_NONE) {
if( msgflg) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_NOTPARTY);
return FALSE;
}
/* 由□ 奴及谛醒毛民尼永弁允月 */
if( CHAR_getEmptyPartyArray( meindex) == -1 ) {
if( msgflg) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_OVERPARTY);
return FALSE;
}
/* 失奶 丞及民尼永弁毛允月(嗟鞅失奶 丞) */
if( !NPC_AirCheckDeniedItem( meindex, charaindex, argstr)) {
if( msgflg) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_DENIEDITEM);
return FALSE;
}
#ifdef _ITEM_CHECKWARES
if( CHAR_CheckInItemForWares( charaindex, 0) == FALSE ) {
CHAR_talkToCli( charaindex, -1, "无法携带货物上机。", CHAR_COLORYELLOW);
return FALSE;
}
#endif
/* 失奶 丞及民尼永弁毛允月( 邰失奶 丞) */
if( !NPC_AirCheckAllowItem( meindex, charaindex, FALSE)) {
if( msgflg) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_ALLOWITEM);
return FALSE;
}
#ifdef _NPC_AIRDELITEM
if( !NPC_AirCheckDelItem( meindex, charaindex, FALSE) ){ //若是没扣除了道具
if( msgflg ) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_DELITEM);
return FALSE;
}
#endif
/* 伊矛伙及民尼永弁毛允月 */
if( !NPC_AirCheckLevel( meindex, charaindex, argstr)) {
if( msgflg) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_LEVEL);
return FALSE;
}
#ifdef _NPC_AIRLEVEL
if( !NPC_AirCheckMaxLevel( meindex, charaindex, argstr)) {
if( msgflg) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_MAXLEVEL);
return FALSE;
}
#endif
/* 奶矛件玄 井民尼永弁允月 */
// if( CHAR_getInt( charaindex, CHAR_NOWEVENT) != 0 ||
// CHAR_getInt( charaindex, CHAR_NOWEVENT2) != 0 ||
// CHAR_getInt( charaindex, CHAR_NOWEVENT3) != 0 )
// {
// if( msgflg) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_MSG_EVENT);
// return FALSE;
// }
/* 豢嗯及民尼永弁毛允月 云嗯毛潸月及匹] 蔽民尼永弁卞允月仇午″ */
ret = NPC_AirCheckStone( meindex, charaindex, argstr);
if( ret == -1 ) {
if( msgflg) NPC_AirSendMsg( meindex, charaindex, NPC_AIR_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;
}
#ifdef _NPC_AIRDELITEM //上飞机时,检查是否要扣除道具
BOOL NPC_AirCheckDelItem( int meindex, int charaindex, BOOL pickupmode)
{
char buf[1024];
BOOL found = TRUE;
BOOL pickup = FALSE;
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
if( NPC_Util_GetStrFromStrWithDelim( argstr, "delitem", 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) {
CHAR_DelItem( charaindex, j);
break;
}
}
}
if( j == CHAR_MAXITEMHAVE) {
found = FALSE;
break;
}
}
}
return found;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -