static BOOL NPC_SimpleShopFillItem( int meindex, char *npcarg )
{
    char token[256], buf[16];
    int i,itemid, num;

    getStringFromIndexWithDelim( npcarg,"|",ITEMLISTTOKEN,token,
                                 sizeof(token) );

    for( i=1; i<=SIMPLESHOP_MAXINFINITITEM;i++ ){
        if( getStringFromIndexWithDelim( token,",",i,buf,sizeof(buf) )){
            itemid = atoi( buf );
            if( itemid == 0 ){
                NPC_Util_ReleaseHaveItemAll(meindex);
                return FALSE;
            }
            num=NPC_Util_countHaveItem(meindex,itemid);
            if( num < 0 ){
                return FALSE;/* æØ¿ÒئidئÉý¼°fatal err */
            }else if( num == 0 ){ /* ÊÖÔÈ»¯Ø¦¾®ÔÈÐ×ÈÕ  Ϻ */
                NPC_Util_createItemToChar( meindex,itemid, FALSE);

            }else if( num>=2 ){ /* ÊÖÇÐÔÊ¿º¼°èëÄþ´ÂÂÖ */
                NPC_Util_RemoveItemByID(meindex,itemid,FALSE);
            }
        }else{
            break;
        }
    }

    /* Óò¼ÔØÆÎåÍ͹´½ñľÐ×ÇÁÚرåÔÊÔ */
    //NPC_SimpleShopSetLeakLevel( meindex );

    return TRUE;
}
/*
 * Ź¤¬  ¸Â¤Ë  ¤Ã¤Æ¤¤¤ë¥¢¥¤  ¥à¤ò  ¤¿¤»¤ë¡e½é´ü²½»þ¤È¼è¤ê°ú¤­¤Î  
 * ¤Ë¸Æ¤Ö¡e
 */
static BOOL NPC_SimpleShopFillItem( int meindex, char *npcarg )
{
    char token[256], buf[16];
    int i,itemid, num;

    getStringFromIndexWithDelim( npcarg,"|",ITEMLISTTOKEN,token,
                                 sizeof(token) );

    for( i=1; i<=SIMPLESHOP_MAXINFINITITEM;i++ ){
        if( getStringFromIndexWithDelim( token,",",i,buf,sizeof(buf) )){
            itemid = atoi( buf );
            if( itemid == 0 ){
                NPC_Util_ReleaseHaveItemAll(meindex);
                return FALSE;
            }
            num=NPC_Util_countHaveItem(meindex,itemid);
            if( num < 0 ){
                return FALSE;/* ÉÔÀµ¤Êid¤Ê¤É¤Îfatal err */
            }else if( num == 0 ){ /* ¤â¤Ã¤Æ¤Ê¤«¤Ã¤¿¤é  ½¼ */
                NPC_Util_createItemToChar( meindex,itemid, FALSE);

            }else if( num>=2 ){ /* ¤â¤Á¤¹¤®¤Î¾ì¹çºï½ü */
                NPC_Util_RemoveItemByID(meindex,itemid,FALSE);
            }
        }else{
            break;
        }
    }

    /* °ì²ó¤·¤­¤Ù¤Ä¤µ¤ì¤¿¾õÂ֤ˤ¹¤ë */
    //NPC_SimpleShopSetLeakLevel( meindex );

    return TRUE;
}
Beispiel #3
0
void NPC_DoorLooked( int meindex , int lookedindex )
{
    int needkey;

    if( CHAR_getInt( meindex , CHAR_LV )){
        char token[32];
        char *p = CHAR_getWorkChar( meindex , CHAR_WORKDOORTITLE );
        int i,j,ok=FALSE;
        for(i = 0 ; ; i++ ){
            int r;
            r = getStringFromIndexWithDelim( p,":",2+i,token ,sizeof(token));
            if(r){
                int titleind = atoi( token );
                for(j=0;j<CHAR_TITLEMAXHAVE;j++){
                    if(CHAR_getCharHaveTitle( lookedindex , j ) == titleind ){
                        ok = TRUE;
                        break;
                    }
                    if( ok )break;
                }
            } else {
                break;
            }
            if( ok ) break;
        }
        if( ok ){
            NPC_DoorFlip( meindex , lookedindex );
        } else {
            char arg[512];
            char buf[512];
            NPC_Util_GetArgStr( meindex , arg,sizeof(arg));
            getStringFromIndexWithDelim( arg,"|" , 9 , buf,sizeof(buf));
            CHAR_talkToCli( lookedindex,-1,buf,CHAR_COLORWHITE);
        }
        return;
    }

    if( CHAR_getWorkInt( meindex, CHAR_WORKDOORORIGINALGRAPHIC)==
        ROPEGRAPHIC ){
        return;
    }
    if( CHAR_getInt( meindex , CHAR_DIR ) == -1 ){
        NPC_DoorFlip( meindex , lookedindex );
        return;
    }

    if( CHAR_getWorkInt( meindex , CHAR_WORKDOORSOONFLG ) == 0 &&
        NPC_Util_isBackContact( meindex , lookedindex ) == TRUE ){
        NPC_DoorFlip( meindex , lookedindex);
        return;
    }

    if( CHAR_getWorkInt( meindex, CHAR_WORKDOORPASSFLG)>=1 ){
        if( NPC_Door_isOpen( meindex ) ){
            NPC_DoorFlip( meindex , lookedindex );
            return;
        }
#define		NPC_DOOR_EXPIRE_MSG		"%s 的房间有效期限至 %d/%d %d:%d"
        else {
            if( CHAR_getWorkInt( meindex, CHAR_WORKDOOREXPIRETIME)
                != 0xffffffff ){
                struct tm tmwk;
                time_t	expire = CHAR_getWorkInt( meindex, CHAR_WORKDOOREXPIRETIME);
                char	msgbuf[128];

                NPC_ROOMINFO roominfo;
                /* 由旦午  躲渝蜃毛本永玄允月 */
                NPC_RoomAdminNew_ReadFile(
                        CHAR_getWorkChar( meindex, CHAR_WORKDOORNAME),
                        &roominfo);
                memcpy( &tmwk, localtime( &expire), sizeof( tmwk));
                snprintf( msgbuf, sizeof( msgbuf), NPC_DOOR_EXPIRE_MSG,
                          roominfo.charaname,
                          tmwk.tm_mon+1, tmwk.tm_mday,
                          tmwk.tm_hour, tmwk.tm_min);
                CHAR_talkToCli( lookedindex, meindex, msgbuf, CHAR_COLORWHITE);
            }
        }
#undef NPC_DOOR_EXPIRE_MSG
        return;
    }
    needkey = CHAR_getWorkInt( meindex , CHAR_WORKDOORKEYITEMID );
    if( needkey >= 0 ){
        if( NPC_Util_countHaveItem( lookedindex , needkey ) > 0 ){
            NPC_DoorFlip( meindex , lookedindex);
        } else {
            CHAR_talkToCli( lookedindex , -1 , NPC_DOOR_CANTOPENMSG , CHAR_COLORWHITE );
        }
    } else if( needkey == -1 ){
        NPC_DoorFlip(meindex , lookedindex );
    } else {
        CHAR_talkToCli( lookedindex , -1 , "这扇门似乎怎麽也打不开!" , CHAR_COLORWHITE);
    }
}