?? npc_warpman.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 "saacproto_cli.h"
#include "npc_warpman.h"
#include "map_deal.h"
#include "readmap.h"
#include "battle.h"
#include "npc_exchangeman.h"
#include "log.h"
#include "enemy.h"
#include "handletime.h"
#include "npc_eventaction.h"
static void NPC_WarpMan_selectWindow( int meindex, int toindex, int num,int select);
//ANDY_END
BOOL NPC_GetDuelPointCheck(int meindex,int talker);
BOOL NPC_PARTY_CHAECK( int meindex, int talkerindex);
void NPC_ERR_DiSP(int meindex,int talker,int errNO);
BOOL NPC_BigSmallLastCheck(int point1,int mypoint,int flg);
//BOOL NPC_ItemCheck(int meindex,int talker,int itemNo,int flg);
int NPC_FloorUse(int talker,int floor);
BOOL NPC_WarpMsg(int meindex,int talker,char *buf);
BOOL NPC_NpcWarpMsg(int meindex,int talker,char *arg);
int NPC_FloorUseOtherFloor(int charaindex, char *buf);
#ifdef _NPC_ADDLEVELUP
void NPC_LevelAndTransUp( int meindex, int charindex, int level, int skillpoint, int exp, int ridepet);
#endif
#define WARPMAN_STANDBY 3000
#define WARPMAN_WAIT 150
//ANDY_ADD
int CheckWarpMsg( int meindex, int talkerindex,char *npcarg ,char *TalkStr);
#ifdef _TREASURE_BOX
BOOL NPC_TreasureEventRunMsg( int meindex);
#endif
BOOL NPC_TreasureRandItemGet(int meidex,int talker,int rand_j,char *buf);
enum {
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT1,
NPC_TIME_BORN = CHAR_NPCWORKINT2,
NPC_TIME_DEAD = CHAR_NPCWORKINT3,
NPC_TIME_MODE = CHAR_NPCWORKINT4,
NPC_TIME_EVENTMODE = CHAR_NPCWORKINT6,// 1
NPC_TIME_EVENTTIME = CHAR_NPCWORKINT7,
NPC_TIME_EVENONBBI = CHAR_NPCWORKINT8,
NPC_TIME_EVENOFFDBBI = CHAR_NPCWORKINT9,
NPC_TIME_EVENTNUM = CHAR_NPCWORKINT10,
};
enum{
NPC_EVENTMODE_NONE,
NPC_EVENTMODE_OPEN,
NPC_EVENTMODE_EVENT,
};
#ifdef _NEW_WARPMAN
static void NPC_NewWarpMan_selectWindow( int meindex, int toindex, int num,int select,char *TalkStr);
enum {
WARP_MAN=0,
NEW_WARPMAN,
NEW_WARPMAN_END
};
#endif
#define TIMECHECKLOOP 20
// Robin 0518
//BOOL checkend = FALSE;
BOOL NPC_WarpManInit( int meindex )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buff2[256];
char buf[1024];
int fl,x,y;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("WarpMan:GetArgStrErr");
return FALSE;
}
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );
#ifdef _NEW_WARPMAN
if( strstr( npcarg,"NEWWARPMAN") ) {
//timeman 功能
CHAR_setWorkInt( meindex, NPC_TIME_MODE, 1);
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buff2, sizeof( buff2)) != NULL ){
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 60*1000);
}
#ifdef _TREASURE_BOX
CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_NONE);
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_BOX", buff2, sizeof( buff2)) != NULL ){
if( strstr( buff2, "ON") != NULL ){
CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT);
CHAR_setWorkInt( meindex, NPC_TIME_EVENTTIME, NowTime.tv_sec);
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_ONBBI", buff2, sizeof( buff2)) != NULL )
CHAR_setWorkInt( meindex, NPC_TIME_EVENONBBI, atoi( buff2));
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_OFFDBBI", buff2, sizeof( buff2)) != NULL )
CHAR_setWorkInt( meindex, NPC_TIME_EVENOFFDBBI, atoi( buff2));
CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0 );
}
}
#endif
return TRUE;
}else{
#endif
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){
char filename[256];
if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL )
print("\n Warpman Err -> file:%s", filename);
return FALSE;
}
getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
fl=atoi(buff2);
getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
x=atoi(buff2);
getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
y=atoi(buff2);
if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
char filename[256];
NPC_Util_CheckAssignArgFile( meindex, filename);
print( "\nWarp NPC: filename:%s\n 3.Invalid warpman ERR %d %d %d" , filename, fl , x , y );
return FALSE;
}
#ifdef _NEW_WARPMAN
}
#endif
return TRUE;
}
void NPC_WarpManTalked( int meindex , int talkerindex , char *szMes ,int color )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[256];
int RunType=-1;
CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2)==FALSE){
if(NPC_Util_isFaceToChara(talkerindex,meindex,1 )==FALSE) return;
}
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
return ;
}
#ifdef _NEW_WARPMAN
if( strstr( npcarg,"NEWWARPMAN") ) {
#ifdef _TREASURE_BOX
if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_OPEN )
return;
#endif
NPC_NewWarpMan_selectWindow( meindex ,talkerindex, 0, -1, szMes);
return;
}else {
if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE) {//有組隊
NPC_ERR_DiSP( meindex, talkerindex, 1);
return;
}
RunType = CheckWarpMsg( meindex, talkerindex, npcarg , szMes);
if( RunType !=0 ) {
if( RunType == 1 ) {
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_msg", token, sizeof(token)) != NULL) {
CHAR_talkToCli( talkerindex, meindex,token,CHAR_COLORWHITE);
}
}
return;
}
}
#else
if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE) {//有組隊
NPC_ERR_DiSP( meindex, talkerindex, 1);
return;
}
RunType = CheckWarpMsg( meindex, talkerindex, npcarg , szMes);
if( RunType !=0 ) {
if( RunType == 1 ) {
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_msg", token, sizeof(token)) != NULL) {
CHAR_talkToCli( talkerindex, meindex,token,CHAR_COLORWHITE);
}
}
return;
}
#endif
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD , 0 );
if(strstr(npcarg,"DR")!=NULL) {
CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTSEC , -1 );
if(NPC_GetDuelPointCheck(meindex,talkerindex)==FALSE) return;
}else{
NPC_WarpMan_selectWindow( meindex, talkerindex,0,-1);
}
}
static void NPC_WarpMan_selectWindow( int meindex, int toindex, int num,int select)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[1024];
char buf[256];
char buf2[1024];
char buf3[256];
int fl=0 ;
int money=100 ;
int fd = getfdFromCharaIndex( toindex);
char tmp[64];
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);
return ;
}
if(NPC_PARTY_CHAECK( meindex, toindex) == FALSE) {
NPC_ERR_DiSP( meindex, toindex, 1);
return;
}
if( CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) != 0 ) {
return;
}else {
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 1);
}
if(strstr(npcarg,"%4d")!=NULL){
int flwork = 0;
int work;
NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf));
getStringFromIndexWithDelim(buf,",",1,buf3,sizeof(buf3));
work = atoi( buf3);
fl = NPC_FloorUse( toindex, atoi(buf3));
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "Floor", buf3, sizeof( buf3)) != NULL){
flwork = NPC_FloorUseOtherFloor(work, buf3);
}
fl = fl +flwork;
}
NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf, sizeof( buf));
if( (NPC_ActionPassCheck(meindex,toindex,buf)==TRUE) || (strstr(buf,"ALLFREE")!=NULL) ){
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "FreeMsg", buf2, sizeof( buf2))==NULL) return;
CONNECT_set_pass(fd,TRUE);
CONNECT_set_first_warp(fd,TRUE);
if(strstr(buf2,"%4d") != NULL){
sprintf(token,buf2,fl);
}else{
strcpy(token,buf2);
}
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -1 );
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 2);
}else {
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "PayMsg", buf2, sizeof( buf2)) != NULL){
CONNECT_set_pass(fd,FALSE);
CONNECT_set_first_warp(fd,FALSE);
if(strstr(buf2,"%8d") != NULL){
NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));
if(strstr(tmp,"LV")!=NULL){
int level;
char buff2[32];
level = CHAR_getInt(toindex,CHAR_LV);
getStringFromIndexWithDelim(tmp,"*",2,buff2,sizeof(buff2));
money = level*atoi(buff2);
}else{
money=atoi(tmp);
}
if(strstr(buf2,"%4d") != NULL){
sprintf(token,buf2,fl,money);
}else{
sprintf(token,buf2,money);
}
}else if(strstr(buf2,"%4d") != NULL){
sprintf(token,buf2,fl);
NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));
if( strstr( tmp,"-" ) != NULL){
money=10000001;
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
return ;
}
}else{
strcpy(token,buf2);
NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));
if( strstr( tmp,"-" ) != NULL){
money=10000001;
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
return ;
}else{
money = atoi(tmp);
}
}
if(CHAR_getInt(toindex,CHAR_FLOOR)==117){
money=CHAR_getInt(toindex,CHAR_GOLD);
if (money>=10) money*=0.9;
else if( money == 0 ) {
CHAR_warpToSpecificPoint(toindex,117,225,13);
return;
}
}
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , money );
CONNECT_set_pass(fd,TRUE);
CONNECT_set_first_warp(fd,TRUE);
}else if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", token,sizeof(token)) !=NULL){
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -2 );
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, -1);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_YESNO,
CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
void NPC_WarpManWindowTalked( int meindex, int talkerindex,
int seqno, int select, char *data)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf[NPC_UTIL_GETARGSTR_BUFSIZE];
#ifdef _NEW_WARPMAN
BOOL checkp=TRUE;
char buf1[1024];
int talkNo = 1;
BOOL tenflg=FALSE;
#else
int fl,x,y;
#endif
char buff2[256];
int fd = getfdFromCharaIndex( talkerindex );
if( NPC_Util_CharDistance( talkerindex, meindex ) > 2)
return;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
return ;
}
if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) < 1 ) {
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
#ifdef _NEW_WARPMAN
if( seqno == NEW_WARPMAN ) {
int eqnum=0;
eqnum = CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT);
sprintf(buf1,"%s", "NOFREE");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -