?? npc_warpman.c
字號:
if( eqnum >= 0 ) {
sprintf(buf1,"TALKEVENT%d", eqnum);
}
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
while( getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf,sizeof( buf)) != FALSE){
if( strstr(buf, buf1) != NULL) {
strcpy( npcarg , buf);
tenflg = TRUE;
break;
}
talkNo++;
}
if( tenflg == FALSE ) {
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
}else {
#endif
if( select != WINDOW_BUTTONTYPE_YES ) {
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE){
NPC_ERR_DiSP( meindex, talkerindex, 1);
return;
}
#ifdef _NEW_WARPMAN
}
#else
NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf));
GetRand_WarpPoint( buf, &fl, &x, &y );
#endif
#ifdef _NEW_WARPMAN
switch( seqno) {
case WARP_MAN:
if( select != WINDOW_BUTTONTYPE_YES )
return;
if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ){
NPC_ERR_DiSP( meindex, talkerindex, 1);
return;
}
#else
if( select != WINDOW_BUTTONTYPE_YES) return;
if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE)
return;
#endif
#ifdef _NEW_WARPMAN
break;
case NEW_WARPMAN:
if( select != WINDOW_BUTTONTYPE_YES ){
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CancelMsg", buff2, sizeof( buff2) ) != NULL) {
CHAR_talkToCli( talkerindex, meindex, buff2, CHAR_COLORYELLOW);
}
return;
}
checkp=TRUE;
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECKPARTY", buff2, sizeof( buff2) ) != NULL) {
if( strstr( buff2, "FALSE") != NULL ) {
checkp = FALSE;
}
}
if( checkp==TRUE && NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ) {
NPC_ERR_DiSP( meindex, talkerindex, 1);
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
break;
case NEW_WARPMAN_END:
return;
break;
}
#endif
if( Action_RunDoEventAction( meindex, talkerindex, npcarg) == FALSE ){
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
CHAR_complianceParameter( talkerindex );
CHAR_send_P_StatusString( talkerindex ,
CHAR_P_STRING_ATK|CHAR_P_STRING_DEF|
CHAR_P_STRING_CHARM|CHAR_P_STRING_QUICK|
CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE|
CHAR_P_STRING_WIND|CHAR_P_STRING_EARTH
);
if( CHAR_getWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE){
return ;
}
if(CHAR_getWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD) <= 0){
CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );
#ifdef _NEW_WARPMAN
NPC_WarpMsg( meindex, talkerindex, npcarg);
#else
if( fl == 0 && x == 0 && y == 0 ) {
}else {
CHAR_warpToSpecificPoint(talkerindex, fl, x,y);
}
#endif
}else {
if(CHAR_getInt(talkerindex,CHAR_GOLD) <
CHAR_getWorkInt(talkerindex,CHAR_WORKSHOPRELEVANTTRD)){
NPC_ERR_DiSP( meindex, talkerindex, 2);
return ;
}
CHAR_DelGold( talkerindex, CHAR_getWorkInt(talkerindex,CHAR_WORKSHOPRELEVANTTRD ));
CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );
#ifdef _NEW_WARPMAN
NPC_WarpMsg( meindex, talkerindex, npcarg);
#else
if( fl == 0 && x == 0 && y == 0 ) {
}else {
CHAR_warpToSpecificPoint(talkerindex, fl, x,y);
}
#endif
}
#ifdef _NEW_WARPMAN
NPC_NpcWarpMsg( meindex, talkerindex, npcarg);
#else
}
#endif
}
BOOL NPC_BigSmallLastCheck(int point1,int mypoint,int flg)
{
if(flg==0){
if(point1==mypoint) {
return TRUE;
}
}else if(flg==1){
if(mypoint < point1) {
return TRUE;
}
}else if(flg==2){
if(mypoint > point1) {
return TRUE;
}
}
return FALSE;
}
BOOL NPC_GetDuelPointCheck(int meindex,int talker)
{
int fdid = getFdidFromCharaIndex( talker);
char dbkey[256];
if( fdid == -1 ) return FALSE;
CHAR_makeDBKey( talker, dbkey, sizeof( dbkey));
saacproto_DBGetEntryRank_send( acfd, DB_DUELPOINT, dbkey, fdid,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
return TRUE;
}
void NPC_GetDuelRank(int rank,int fdid,int objindex)
{
int talker;
int meindex;
rank++;
talker = getCharindexFromFdid( fdid);
if( talker == -1 ) return;
meindex= OBJECT_getIndex( objindex);
if( !CHAR_CHECKINDEX( meindex)) return;
CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANTSEC,rank);
NPC_WarpMan_selectWindow( meindex, talker,0,-1);
}
BOOL NPC_PARTY_CHAECK(int meindex,int talker)
{
if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){
return FALSE;
}
return TRUE;
}
void NPC_ERR_DiSP(int meindex,int talker,int errNO)
{
char token[1024];
int i=0;
int otherindex;
int fd = getfdFromCharaIndex( talker);
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
return ;
}
if(errNO==1){
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "PartyMsg",token, sizeof( token))==NULL) {
sprintf(token,"\n\n 無法加入團隊。 "
"\n\n 請解散團隊 。 ");
}
if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE)==CHAR_PARTY_CLIENT){
}else{
for( i=0 ; i < CHAR_PARTYMAX ;i++){
otherindex=CHAR_getWorkInt(talker,CHAR_WORKPARTYINDEX1+i);
if(otherindex != -1){
fd = getfdFromCharaIndex( otherindex);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_ERR,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
}
return ;
}
}else if (errNO==2){
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "MoneyMsg", token, sizeof( token))==NULL){
sprintf(token,"\n\n 似乎金錢不足唷。 "
"\n\n 請存好錢後,再過來。");
}
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_ERR,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
int NPC_FloorUse(int charaindex,int floor)
{
int i;
int players=0;
int playernum = CHAR_getPlayerMaxNum();
for( i=0 ; i< playernum ; i++ ){
if( CHAR_getCharUse(i) == FALSE )continue;
if(CHAR_getInt(i,CHAR_FLOOR)==floor){
players++;
}
}
return players;
}
int NPC_FloorUseOtherFloor(int warp, char *buf)
{
int i,j=1;
int players=0;
int playernum = CHAR_getPlayerMaxNum();
char buf2[32];
int floor;
for( i=0 ; i< playernum ; i++ ){
if( CHAR_getCharUse(i) == FALSE )continue;
j=1;
while(getStringFromIndexWithDelim(buf,",",j,buf2,sizeof(buf2))!= FALSE){
j++;
floor = atoi(buf2);
if(CHAR_getInt(i,CHAR_FLOOR) == floor && warp != floor) {
players++;
}
}
}
return players;
}
BOOL NPC_WarpMsg(int meindex,int talker,char *arg)
{
char buf[256];
int fl=0,x=0,y=0;
int parent=-1;
int pmode;
int subindex;
int i;
if( NPC_Util_GetStrFromStrWithDelim( arg, "WARP", buf, sizeof( buf)) == NULL )
return FALSE;
GetRand_WarpPoint( buf, &fl, &x, &y );
if( fl == 0 && x == 0 && y == 0 ) {
return TRUE;
}else {
if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
print( "Warp NPC:1.Invalid warpman ERR" );
return FALSE;
}
}
#ifdef _TIME_TICKET
if( check_TimeTicketMap( fl) ) {
int havei, itemi;
CHAR_setWorkInt( talker, CHAR_WORKTICKETTIME, 0);
CHAR_setWorkInt( talker, CHAR_WORKTICKETTIMESTART, 0);
for( havei = CHAR_STARTITEMARRAY ; havei < CHAR_MAXITEMHAVE ; havei++ ){
itemi = CHAR_getItemIndex( talker, havei);
if( !ITEM_CHECKINDEX( itemi) ) continue;
if( strcmp( ITEM_getChar( itemi, ITEM_USEFUNC), "ITEM_timeticket") ) continue;
//if( ITEM_getInt( itemi ,ITEM_ID) != 20646 ) continue;
CHAR_talkToCli( talker, -1, "自動使用門票。", CHAR_COLORYELLOW);
ITEM_timeticketEx( talker, talker, havei, 1);
break;
}
if( havei == CHAR_MAXITEMHAVE ) {
CHAR_talkToCli( talker, -1, "請先準備專用門票才可進入。", CHAR_COLORYELLOW);
return FALSE;
}
}
#endif
pmode = CHAR_getWorkInt( talker, CHAR_WORKPARTYMODE );
switch( pmode ){
case 1:
parent = talker;
break;
case 2:
parent = CHAR_getWorkInt( talker, CHAR_WORKPARTYINDEX1 );
break;
default:
CHAR_warpToSpecificPoint(talker, fl, x,y);
return TRUE;
}
if( parent < 0 )
return TRUE;
for( i = 0; i < CHAR_PARTYMAX; i ++ ){
subindex = CHAR_getWorkInt( parent, CHAR_WORKPARTYINDEX1+i );
if( CHAR_CHECKINDEX( subindex ) == FALSE )continue;
if( fl==0 && x==0 && y==0 ) {
}else {
CHAR_warpToSpecificPoint( subindex, fl, x, y );
}
}
return TRUE;
}
#ifdef _NEW_WARPMAN
static void NPC_NewWarpMan_selectWindow( int meindex, int toindex, int num,int select,char *TalkStr)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[1024];
int buttontype = 0, windowtype = 0, windowno = 0;
char buf[NPC_UTIL_GETARGSTR_BUFSIZE],buf1[256];
int fd = getfdFromCharaIndex( toindex);
BOOL tenflg =FALSE;
int talkNo=1,RunType=-1;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
return ;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf1, sizeof( buf1)) != NULL ){
if( CHAR_getWorkInt( meindex, NPC_TIME_MODE) <= 0 ) {
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "Time_Msg", token, sizeof( token) ) != NULL) {
CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW);
}
return;
}
}
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
sprintf( buf1,"TALKEVENT");
//尋找多種條件 FREE
while(getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf,sizeof( buf)) != FALSE) {
if(strstr(buf, buf1) != NULL) {
//檢查對話 暗語
RunType = CheckWarpMsg( meindex, toindex, buf , TalkStr);
if( RunType > 1 ) {
return;
}else if( RunType != 0 ) {
talkNo++;
continue;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -