Example #1
0
int MAGIC_DirectUse(
	int charaindex,
	int magicid,
	int toindex,
	int itemnum
)
{
	MAGIC_CALLFUNC func;
	int mp, ret, marray;
	int itemindex=-1;
#ifdef _MAGIC_NOCAST//沉默狀態無法施法
    if( CHAR_getWorkInt( charaindex, CHAR_WORKNOCAST ) > 0 ){
		CHAR_talkToCli(charaindex, -1, "沉默中無法吟唱咒術", CHAR_COLORYELLOW);
		return FALSE;
	}
#endif

	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER){
		itemindex = CHAR_getItemIndex( charaindex, itemnum);
		if( !ITEM_CHECKINDEX( itemindex) ){
			print("ANDY err MAGIC_DirectUse() itemindex:%d !\n", itemindex);
			return FALSE;
		}
	}else{
		itemindex = itemnum;
	}

	marray = MAGIC_getMagicArray( magicid );
	func = MAGIC_getMagicFuncPointer( MAGIC_getChar( marray, MAGIC_FUNCNAME ) );
	if( (mp = ITEM_getInt( itemindex, ITEM_MAGICUSEMP )) < 0 ){
	}
        // shan add begin
        if( CHAR_getInt( charaindex, CHAR_FMINDEX ) >= 1 ){
            // 光精
            if( CHAR_getInt( charaindex, CHAR_FMSPRITE ) == 0){
                if( (marray >=0 && marray <=31) )
                    mp *= MP_RATE;
            }
            // 暗精
            if( CHAR_getInt( charaindex, CHAR_FMSPRITE ) == 1){
                if( marray >=32 && marray <=81 )
                    mp *= MP_RATE;
            }
        }
	if( func ) {
		ret = func( charaindex, toindex, marray, mp );
	}
	else {
		ret = FALSE;
	}
	return ret;
}
Example #2
0
/*********************************
* watch質  
*********************************/
void NPC_ActionWatch( int meobjindex, int objindex, CHAR_ACTION act,
                    int x,int y,int dir, int* opt,int optlen )
{
	int		meindex;
	int		index;
	char	argstr1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *argstr;
	char	buf[64];
	int		i;
    struct  {
    	CHAR_ACTION		act;
    	char			*string;
    }searchtbl[] = {
	    { CHAR_ACTATTACK,	"attack"},
	    { CHAR_ACTDAMAGE,	"damage"},
		{ CHAR_ACTDOWN,		"down"},
		{ CHAR_ACTSIT,		"sit"},
		{ CHAR_ACTHAND,		"hand"},
		{ CHAR_ACTPLEASURE,	"pleasure"},
		{ CHAR_ACTANGRY,	"angry"},
		{ CHAR_ACTSAD,		"sad"},
		{ CHAR_ACTGUARD,	"guard"},
		{ CHAR_ACTNOD,		"nod"},
		{ CHAR_ACTTHROW,	"throw"},
    };
	
	if( OBJECT_getType( objindex) != OBJTYPE_CHARA) return;
	index = OBJECT_getIndex( objindex);
	/* 皿伊奶乩□卞及心  殺允月 */
	if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return;
    
    meindex = OBJECT_getIndex( meobjindex);
    
    /* 輊五寧勻化ㄠ弘伉永玉匹卅中午  殺仄卅中 */
    if( NPC_Util_isFaceToFace( meindex, index, 1 ) != TRUE ) return;
	
	argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1));
	
	for( i = 0; i < arraysizeof( searchtbl); i ++ ) {
		if( searchtbl[i].act == act) {
			if( NPC_Util_GetStrFromStrWithDelim( argstr, 
												searchtbl[i].string,
												buf, sizeof( buf))
		    	!= NULL )
			{
		    	CHAR_talkToCli( index, meindex ,buf , 
		    					CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR ));
				break;
			}
		}
	}
}
Example #3
0
void ITEM_useImprecate( int charaindex, int toNo, int haveitemindex )
{
	int i;
	int battleindex, attackNo,itemindex;
	char *arg;
	char buf[256];

	struct tagImprecate {
		char fun[256];
		int intfun;
	};
	struct tagImprecate ImList[3] ={
		{"©G",BD_KIND_CURSE},{"®¦",BD_KIND_BESTOW},{"¯¬",BD_KIND_WISHES} };

	if( !CHAR_CHECKINDEX( charaindex) ) return;
	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );

	if( (attackNo = BATTLE_Index2No( battleindex, charaindex )) < 0 ){
		print( "ANDY attackNo=%d\n", attackNo);
		return;
	}
    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);
    if(!ITEM_CHECKINDEX(itemindex)) return;

	arg = ITEM_getChar(itemindex, ITEM_ARGUMENT );
	if( arg == NULL ){
		print( "ANDY ITEM id:%d=>arg err\n", ITEM_getInt( itemindex, ITEM_ID));
		return;
	}

	for( i=0; i<3; i++)	{
		if( strstr( arg, ImList[i].fun ) != 0 )	{
			char buf1[256];
			int kind,powers, rounds, HealedEffect;

			if( NPC_Util_GetStrFromStrWithDelim( arg, ImList[i].fun, buf, sizeof( buf)) == NULL )continue;
			kind = ImList[i].intfun;
			if( getStringFromIndexWithDelim( buf,"x", 1, buf1, sizeof( buf1)) == FALSE ) continue;
			powers = atoi( buf1);
			if( getStringFromIndexWithDelim( buf,"x", 2, buf1, sizeof( buf1)) == FALSE ) continue;
			rounds = atoi( buf1);
			HealedEffect = SPR_hoshi;
			BATTLE_ImprecateRecovery(
				battleindex, attackNo, toNo, kind, powers,
				rounds, SPR_item3, HealedEffect );
			CHAR_setItemIndex(charaindex, haveitemindex ,-1);
			CHAR_sendItemDataOne( charaindex, haveitemindex);
			ITEM_endExistItemsOne( itemindex );
			break;
		}
	}
}
Example #4
0
static void NPC_PetFusion_selectWindow( int meindex, int toindex, int num,int select)
{
	char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *npcarg;
	char token[256];
	int buttontype = 0, windowtype = 0, windowno = 0;
	int fd = getfdFromCharaIndex( toindex);
	windowtype = WINDOW_MESSAGETYPE_MESSAGE;
	if( Action_PartyCheck( meindex, toindex) == FALSE)	{
		CHAR_talkToCli( toindex, meindex, "請一個一個來!", CHAR_COLORYELLOW);
		return;
	}
	//memset( npcarg, 0, sizeof( npcarg));
	if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)))==NULL){
		print("err NPC_MakePairMan: GetArgStrErr!!");
		return;
	}
	memset( token, 0, sizeof( token));

	switch( num){
	case WINDOW_START:
		if( NPC_Util_GetStrFromStrWithDelim( npcarg, "StartMsg", token, sizeof( token) ) == NULL){
			return;
		}
		buttontype = WINDOW_BUTTONTYPE_YESNO;
		windowno = WINDOW_TALKSTART;
		break;
	case WINDOW_SELECT:
		if( ActionNpc_CheckFree( meindex, toindex, npcarg) == FALSE )	{
			buttontype = WINDOW_BUTTONTYPE_OK;
			windowno = WINDOW_TALKEND;
		}else	{
			if( NPC_Util_GetStrFromStrWithDelim( npcarg, "SelectMsg", token, sizeof( token) ) == NULL){
				return;
			}
			windowtype = WINDOWS_MESSAGETYPE_PETFUSION;
			buttontype = WINDOW_BUTTONTYPE_YESNO;
			windowno = WINDOW_TALKSELECT;
		}
		break;
	case WINDOW_FUSION:
		//融合處理
		break;
	case WINDOW_WARP:
		break;
	case WINDOW_END:
		break;
	}
	CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, windowno);
	lssproto_WN_send( fd, windowtype, buttontype, windowno,
		CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);
}
Example #5
0
void NPC_DengonLooked( int meindex, int lookedindex )
{
    int maxid;
    char	buf[DENGONFILEENTRYSIZE*MESSAGEINONEWINDOW*2];
	if( NPC_Util_CharDistance( lookedindex, meindex ) > 1) return;
    maxid = CHAR_getWorkInt( meindex, CHAR_WORKDENGONMAXID );
    if( NPC_DengonReadString( meindex, maxid, NPC_sendbuf ) ){
        int fd;
        fd = getfdFromCharaIndex( lookedindex );
        if( fd == -1 )return;
        lssproto_WN_send(fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT,
        					WINDOW_BUTTONTYPE_OKCANCEL|
        					WINDOW_BUTTONTYPE_PREV,
        					CHAR_WINDOWTYPE_DENGON,
							CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
							makeEscapeString( NPC_sendbuf, buf, sizeof(buf)));
        					
        CHAR_setWorkInt( lookedindex, CHAR_WORKSHOPRELEVANT, maxid);
        
    }
    
}
Example #6
0
int MAGIC_Recovery( int charaindex, int toindex, int marray, int mp )
{
    int battlemode;
    if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE;
    battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE );
    if( battlemode == BATTLE_CHARMODE_INIT ) {
        return FALSE;
    }


    if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE;
    CHAR_setInt( charaindex, CHAR_MP,
                 CHAR_getInt( charaindex, CHAR_MP ) - mp );
    if( IsBATTLING( charaindex ) == TRUE ) {
#ifdef _PREVENT_TEAMATTACK	//¶÷»Ý²»µÃ ʹÓõз½
        int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );
        if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER &&
                BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ) {

            if( BATTLE_CheckSameSide( charaindex, toindex) == 0 ) { //²»Í¬±ß
                int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );
                BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) );
                CHAR_talkToCli( charaindex, -1, "¶÷»Ý¾«Áé..²»µÃÊ©Óè·ÇÍæ¼ÒµÐ·½¡£", CHAR_COLORYELLOW);
                return FALSE;
            }
        }
#endif
        if (toindex==22) {
            print("jinchao err\n");    // shan(¶ÔÈ«ÌåʹÓÃħ·¨µÄbug)£¬ÐÞ¸ÄÕßjinchao+2001/12/07
            return FALSE;
        }
        MAGIC_Recovery_Battle( charaindex, toindex, marray, mp );
    } else {
        if( CHAR_CHECKINDEX( toindex ) == FALSE )return FALSE;  // shan(¶ÔÈ«ÌåʹÓÃħ·¨µÄbug)£¬ÐÞ¸ÄÕßjinchao+2001/12/07
        MAGIC_Recovery_Field( charaindex, marray);
    }

    return TRUE;
}
Example #7
0
void CHAR_talkToFloor(int floor, int talkindex, char *message, CHAR_COLOR color) {
  int i = 0;
  int playernum = CHAR_getPlayerMaxNum();
  for(i = 0; i < playernum; i++) {
    if(CHAR_getCharUse(i) == FALSE) continue;
    if(!CHAR_CHECKINDEX(i))
      continue;
    if(CHAR_getInt(i, CHAR_FLOOR) == floor) {
      if(CHAR_getWorkInt(i, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE)
        CHAR_talkToCli(i, talkindex, message, color);
    }
  }
}
Example #8
0
int NPCS_getUserPartyAmount( int charaindex )
{
	int partys=0,pindex;
	int leaderindex=-1;

	leaderindex = charaindex;
	if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ){
		return 0;
	}else if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ){
		leaderindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1);
	}
	
	if( CHAR_getWorkInt( leaderindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ){
		int i;
		for( i=0; i<5; i++)	{
			pindex = CHAR_getWorkInt( leaderindex, CHAR_WORKPARTYINDEX1+i);
			if( !CHAR_CHECKINDEX( pindex) )
				partys++;
		}
	}
	return partys;
}
Example #9
0
/*-------------------------------------
伊矛伙民尼永弁
伊矛伙毛葦化澀爛伊矛伙方曰斕仃木壬    卞允月
  曰襖
	澀爛伊矛伙    		TRUE
	澀爛伊矛伙動曉卅日	FALSE
---------------------------------------*/
BOOL NPC_WindowHealerLevelCheck(int meindex,int talker)
{
		int level;
	
		level=CHAR_getWorkInt(meindex,CHAR_WORK_LEVEL);

		if(level > CHAR_getInt(talker,CHAR_LV)){
			return TRUE;
		}

		return FALSE;

}
Example #10
0
/*-----------------------------------------
竣  戊旦玄及煌遙
------------------------------------------*/
int NPC_WindowCostCheckMp(int meindex,int talker)
{
	int cost;
	double drate;
	int rate;
	
	rate=CHAR_getWorkInt(meindex,CHAR_WORK_MP);
	drate=(double) rate / 1000 ;
	cost=CHAR_getInt(talker,CHAR_LV);
	cost=(int)cost*drate;
	if(cost==0) cost=1;
	return cost;
}
Example #11
0
//--------------------------------------------------------------
//  µ¤À䤫¤éÉü³è¤ò»È¤Ã¤¿¾ì¹ç¤Î½è  
//--------------------------------------------------------------
// Àï    ¤Î¾ì¹ç
void ITEM_useRessurect(
	int charaindex, 	// »È¤Ã¤¿¿Í¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹
	int toNo, 			// »È¤ï¤ì¤ë¿Í¤Î  ¹æ
	int haveitemindex 	// »È¤¦¿Í¤Î¥¢¥¤  ¥à¤Î    ¹æ
)
{
	int itemindex, battleindex, attackNo, par = 0, pow = 0, ReceveEffect;
	char *pszP = NULL;


	// ¥¢¥¤  ¥à¤¬¤¢¤ë¤«¤É¤¦¤«
    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);
    if(!ITEM_CHECKINDEX(itemindex)) return;

	//------- ¤³¤³¤«¤é½è   -----------
	pszP = ITEM_getChar(itemindex, ITEM_ARGUMENT );

	if( strstr( pszP, "%" ) ){	// ¤³¤Î¾ì¹ç¤Ï¡ó·×»»
		par = 1;
	}

	if( sscanf( pszP, "%d", &pow ) != 1 ){
		// ²¿¥Ý¥¤¥ó¥È²óÉü¤¹¤ë¤«¡ª
		pow = 0;	// £°¤Î¾ì¹ç¤Ï´°Á´²óÉü
	}

	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );

	attackNo = BATTLE_Index2No( battleindex, charaindex );

	if( pow <= 0 ){
		ReceveEffect = SPR_fukkatu3;
	}else
	if( pow <= 100 ){
		ReceveEffect = SPR_fukkatu1;
	}else
	if( pow <= 300 ){
		ReceveEffect = SPR_fukkatu2;
	}else{
		ReceveEffect = SPR_fukkatu3;
	}

	// Á´°÷
	BATTLE_MultiRessurect( battleindex, attackNo, toNo,
		pow, par, SPR_item3, ReceveEffect );


	// Àï    ¤Ë¥¢¥¤  ¥à¤¬¾Ã¤¨¤¿¾ì¹ç¤Î¶¦ÄÌ½è  
	BATTLE_ItemUseDelete( charaindex, haveitemindex );

}
Example #12
0
//--------------------------------------------------------------
//  ��姾�������ë��������������
//--------------------------------------------------------------
// ��    ������
void ITEM_useRessurect(
	int charaindex, 	// �������м��̼������͵�
	int toNo, 			// ����ľ���м�  į
	int haveitemindex 	// �����м�ʧ��  ة��    į
)
{
	int itemindex, battleindex, attackNo, par = 0, pow = 0, ReceveEffect;
	char *pszP = NULL;


	// ʧ��  ة��ؤ�¾�������
    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);
    if(!ITEM_CHECKINDEX(itemindex)) return;

	//------- �������   -----------
	pszP = ITEM_getChar(itemindex, ITEM_ARGUMENT );

	if( strstr( pszP, "%" ) ){	// ���������ѻ�ң
		par = 1;
	}

	if( sscanf( pszP, "%d", &pow ) != 1 ){
		// �Ϻ��̼����������¾���
		pow = 0;	// �߼��������������
	}

	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );

	attackNo = BATTLE_Index2No( battleindex, charaindex );

	if( pow <= 0 ){
		ReceveEffect = SPR_fukkatu3;
	}else
	if( pow <= 100 ){
		ReceveEffect = SPR_fukkatu1;
	}else
	if( pow <= 300 ){
		ReceveEffect = SPR_fukkatu2;
	}else{
		ReceveEffect = SPR_fukkatu3;
	}

	// �幻
	BATTLE_MultiRessurect( battleindex, attackNo, toNo,
		pow, par, SPR_item3, ReceveEffect );


	// ��    ��ʧ��  ة����������������ɧ��
	BATTLE_ItemUseDelete( charaindex, haveitemindex );

}
Example #13
0
void NPC_TimeManTalked( int meindex , int talkerindex , char *msg ,int color )
{
	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
	char token[512];
	char buf[512];
	int tokennum=0;
	int i;


	if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2)==FALSE){
		if( NPC_Util_CharDistance( talkerindex ,meindex ) > 1) return;
	}

	if(CHAR_getInt(meindex,CHAR_BASEIMAGENUMBER)==9999){
		/*--壅尹化中月乒□玉--*/
		return;
	}

	if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
		print("GetArgStrErr");	
		return;
	}
	

	if( CHAR_getInt(talkerindex,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER )return;
	
	if( NPC_Util_charIsInFrontOfChar( talkerindex, meindex, 3 ) ==FALSE) return;




	if(CHAR_getWorkInt(meindex,E_INT_MODE)==0){
		/*--丢永本□斥毛忒允 */
		NPC_Util_GetStrFromStrWithDelim(argstr,"main_msg",buf,sizeof( buf) );
 	
 	}else{
		NPC_Util_GetStrFromStrWithDelim(argstr,"change_msg",buf,sizeof( buf) );
 	}

   	tokennum = 1;
   	/* 戊件穴匹嗉濠日木凶玄□弁件互窒仇丐月井醒尹月 */
	 for( i=0;buf[i]!='\0';i++ ){
          if( buf[i] == ',' ) tokennum++;
     }
 
    getStringFromIndexWithDelim( buf,",", rand()%tokennum+1,token, sizeof(token));
	/*--仄扎屯月--*/
	CHAR_talkToCli( talkerindex, meindex, token, CHAR_COLORWHITE );


}
Example #14
0
static int NPC_DengonReadString( int meindex, int id, char *str )
{
    char filename[256];
    snprintf(filename, sizeof(filename), "%s/%s/%d_%d_%d", getDataDir(), DENGONFILEDIR, CHAR_getInt(meindex, CHAR_FLOOR), CHAR_getInt(meindex, CHAR_X), CHAR_getInt(meindex, CHAR_Y));
    char readbuf[DENGONFILEENTRYSIZE*MESSAGEINONEWINDOW];

    FILE *f;
    int maxid, i, sendid, len;
    char *writeptr, *readptr;


    maxid = CHAR_getWorkInt( meindex, CHAR_WORKDENGONMAXID );
    if( id > maxid ) id = maxid;
    sendid = id - MESSAGEINONEWINDOW + 1;

    if( sendid < maxid - DENGONFILELINENUM + 1 ){
        sendid = maxid - DENGONFILELINENUM + 1;
    }

    if( sendid < 1 ) sendid = 1;

    writeptr = str;
	strcpy( writeptr, "                         传言板\n");
    len = strlen(writeptr);
    writeptr += len;

    f = fopen( filename, "r" );
    if( !f ) return FALSE;
{
	char	buf[DENGONFILEENTRYSIZE];
	int		wptr = 0;
	readbuf[0] = '\0';
	for( i = 0; i < MESSAGEINONEWINDOW; i ++ ) {
	    fseek( f, ((sendid+i)%DENGONFILELINENUM)*DENGONFILEENTRYSIZE, SEEK_SET );
	    fread( buf, sizeof(char),
	           DENGONFILEENTRYSIZE , f );
		memcpy( &readbuf[wptr], buf,sizeof( buf));
		wptr += DENGONFILEENTRYSIZE;
	}
}
    fclose(f);
    readptr = readbuf + DENGONFILECOUNTERSIZE;
    for( i=0;i<MESSAGEINONEWINDOW;i++ ){
        snprintf( writeptr, DENGONFILESTRINGSIZE, "%s\n", readptr );
        writeptr+= strlen(readptr)+1; 
        readptr+=DENGONFILEENTRYSIZE;
    }
    
    return TRUE;

}
void NPC_findRacePetIndex(int meindex, int floor)
{
	int i = 0, j = 0;
	time_t t1;
	time(&t1);

	if (CHAR_getWorkInt(meindex, NPC_WORK_FINDPETFLAG) == 0)
	{
		for (i = 0; i < CHAR_getCharNum(); i++)
		{
			if (CHAR_getInt(i, CHAR_FLOOR) == floor)
			{
				if (CHAR_getInt(i, CHAR_WHICHTYPE) == CHAR_PETRACEPET)
				{
					for (j = 0; j < PETRACEPETNUM; j++)
					{
						if (CHAR_getWorkInt(meindex, NPC_WORK_PET1 + j) == 0)
						{
							CHAR_setWorkInt(meindex, NPC_WORK_PET1 + j, i);
							CHAR_setWorkInt(i, CHAR_NPCWORKINT2, meindex);
							break;
						}
					}
				}
			}
		}
		if (CHAR_getWorkInt(meindex, NPC_WORK_PET1) > 0
			&& CHAR_getWorkInt(meindex, NPC_WORK_PET2) > 0
			&& CHAR_getWorkInt(meindex, NPC_WORK_PET3) > 0)
		{
			CHAR_setWorkInt(meindex, NPC_WORK_FINDPETFLAG, 1);
			CHAR_setWorkInt(meindex, NPC_WORK_STATE, NPC_State_WaitDropStake);
			CHAR_setInt(meindex, CHAR_LOOPINTERVAL, PETRACEMASTER_WAITDROPI_LOOPTIME);
			CHAR_setWorkInt(meindex, NPC_WORK_STATECHANGE, t1 + PETRACEDROPSTAKETIME);
		}
		else CHAR_setWorkInt(meindex, NPC_WORK_FINDPETFLAG, 0);
	}
}
Example #16
0
void NPC_PetFusionManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
	char npcarg1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *npcarg;
	if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )
    	return;
	if( select == WINDOW_BUTTONTYPE_NO || select == WINDOW_BUTTONTYPE_CANCEL ){
		CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
		return;
	}
	if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) != seqno )
		return;
	//memset( npcarg, 0, sizeof( npcarg));
	if((npcarg = NPC_Util_GetArgStr( meindex, npcarg1, sizeof(npcarg1)))==NULL){
		print("err NPC_MakePairMan: GetArgStrErr!!");
		return;
	}
	if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) != seqno )
		return;

	switch( seqno)	{
	case WINDOW_TALKSTART:
		NPC_PetFusion_selectWindow( meindex, talkerindex, WINDOW_SELECT, 0);
		break;
	case WINDOW_TALKSELECT:
		{
			if( NPC_DoPetFusion( meindex, talkerindex, data, sizeof( data)) == FALSE )
				return;
			return;
			NPC_PetFusion_selectWindow( meindex, talkerindex, WINDOW_FUSION, 0);
		}
		break;
	case WINDOW_RETURN:
		break;
	case WINDOW_TALKEND:
		break;
	}
}
Example #17
0
BOOL NPC_PairForage( int meindex, int toindex, char *arg, char *token)
{
	char buf1[256];
	int i;
	int codes = CHAR_getWorkInt( toindex, CHAR_MYPAIRCODE);
	int Psex = CHAR_getSexInt( CHAR_getInt( toindex, CHAR_BASEBASEIMAGENUMBER) );
	Psex = (Psex==1)?1:0;


	for( i=0; i<MAXPAIRNUMS; i++)	{//forindex
		char *name;
		char *cdKey;
		int fd;
		char buf[256];
		if( PairList[Psex][i].use <= 0 ) continue;
		if( !CHAR_CHECKINDEX( PairList[Psex][i].pindex) ) continue;
		if( CHAR_getWorkInt( PairList[Psex][i].pindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE )
			continue;
		if( codes != CHAR_getWorkInt( PairList[Psex][i].pindex, CHAR_MYPAIRCODE) ) continue;
		if( CHAR_getWorkInt( PairList[Psex][i].pindex, CHAR_MYPAIRFLG) > 0 ) continue;
		name = CHAR_getChar( PairList[Psex][i].pindex, CHAR_NAME);
		cdKey = CHAR_getChar( PairList[Psex][i].pindex, CHAR_CDKEY);
		if( strcmp( PairList[Psex][i].name, name) || strcmp( PairList[Psex][i].cdKey, cdKey) ){
			PairList[Psex][i].use = -1;
			PairList[Psex][i].forindex = -1;
			continue;
		}
		sprintf( token, "你的配对对象为: %s\n已送出邀请,请等候对方回应。", name);
		if( NPC_Util_GetStrFromStrWithDelim( arg, "InviteMsg", buf1, sizeof( buf1) ) == NULL){
			break;
		}
		PairList[Psex][i].forindex = toindex;
		fd = getfdFromCharaIndex( PairList[Psex][i].pindex);

		CHAR_setWorkInt( toindex, CHAR_MYPAIRFLG, 1);
		CHAR_setWorkInt( toindex, CHAR_MYPAIRINDEX, PairList[Psex][i].pindex);
		CHAR_setWorkInt( PairList[Psex][i].pindex, CHAR_MYPAIRFLG, 2);
		CHAR_setWorkInt( PairList[Psex][i].pindex, CHAR_MYPAIRINDEX, toindex);

		name = CHAR_getChar( toindex, CHAR_NAME);
		sprintf( buf, "%s:\n玩家%s\n%s", CHAR_getChar( meindex, CHAR_NAME),name, buf1);
		lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OKCANCEL, WINDOW_TALKPAIR,
				CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), buf);
		break;
	}
	if( i>= MAXPAIRNUMS )	{
		if( NPC_Util_GetStrFromStrWithDelim( arg, "NoPairMsg", buf1, sizeof( buf1) ) != NULL){
			sprintf( token, "%s",buf1);
		}else	{
			sprintf( token, "没有找到对象。");
		}
		if( CHAR_getWorkInt( toindex, CHAR_MYPAIRFLG) <= 0 )	{
			NPC_PairRegister( toindex);
		}
		return FALSE;
	}
	return TRUE;
}
Example #18
0
BOOL NPC_WarpAllMsg(int meindex,int toindex )
{
	int fl,x,y;
	int subindex=-1;
	int i;
	fl = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR );
	x = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X );
	y = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y );

	if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) != 1 )
		return FALSE;

	for( i = 0; i < CHAR_PARTYMAX; i ++ ){
		subindex = CHAR_getWorkInt( toindex, 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;
}
Example #19
0
int NPC_Lua_NLG_WalkMove(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_DIR = (int)lua_tointeger(_NLL, 2);

	POINT	start, end;
	
	end.x = CHAR_getInt( TM_Index, CHAR_X);
	end.y = CHAR_getInt( TM_Index, CHAR_Y);

	int TM_Ret = (int)CHAR_walk(TM_Index, TM_DIR, 0);

	if( TM_Ret == CHAR_WALKSUCCESSED )
	{
		int	i;
		int	mefl=CHAR_getInt( TM_Index, CHAR_FLOOR);
		int toindex = -1;
		int fl = 0;
		int xx = 0;
		int yy = 0;
		int	parent_dir;
	
		for( i = 1; i < CHAR_PARTYMAX; i ++ )
		{
			toindex = CHAR_getWorkInt( TM_Index, i + CHAR_WORKPARTYINDEX1);
			fl = CHAR_getInt( toindex, CHAR_FLOOR);
			xx = CHAR_getInt( toindex, CHAR_X);
			yy = CHAR_getInt( toindex, CHAR_Y);

			if( CHAR_CHECKINDEX(toindex) && (mefl==fl) && (abs(xx-end.x)+abs(yy-end.y)<10) )
			{

				start.x = xx;
				start.y = yy;
				parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end );

				end.x = start.x;
				end.y = start.y;

				if( parent_dir != -1 )
				{
					CHAR_walk( toindex, parent_dir, 0);
				}
			}
		}
	}
	LRetInt(_NLL, TM_Ret);
}
Example #20
0
void NPC_NPCEnemyLoop( int meindex )
{

	if( NowTime.tv_sec > CHAR_getWorkInt( meindex, CHAR_WORK_DIETIME) +
						 CHAR_getWorkInt( meindex, CHAR_WORK_REVIVALTIME)){
		Char	*ch;
		CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,	CHAR_getWorkInt( meindex, CHAR_WORK_BASEIMGBAK));
		print("bbi---->bi11");

		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
		CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY);
		MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y));
	    ch  = CHAR_getCharPointer( meindex);
	    if( ch != NULL ) {
			strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
						sizeof( ch->charfunctable[CHAR_LOOPFUNC]),	"");
			CHAR_constructFunctable( meindex);
//			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 0);
		}
	}
}
Example #21
0
static void NPC_Sysinfo_Move_Num( int meindex, int tindex, char *msg ){
	char	buff[256];
	int		work;
	buff[0] = buff[1] = 0;

	if( getStringFromIndexWithDelim( msg, " ", 2, buff, sizeof( buff)) == TRUE )
	{
		work = atoi( buff );
		if( work <= 0 ) {
			work = 1000; /* 赝癫 */
		}
		EnemyMoveNum = work;
		snprintf( buff, sizeof( buff), "让敌人同时%d动作。",
			EnemyMoveNum );
		CHAR_talkToCli( tindex, meindex, buff,
					CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));
	}else{
		snprintf( buff, sizeof( buff), "现在敌人同时在进行%d动作。",
			EnemyMoveNum );
		CHAR_talkToCli( tindex, meindex, buff,
					CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));
	}
}
Example #22
0
/*
 * int meindex : ÷Ò¼°index
 * int playerindex : ËüÄ̼þÓñËüëÇëÔÊÃóÒÁÄÌØÀ¡õ¼°index
 * char *str :
 */
static void NPC_SimpleShopNormalWindow( int meindex, int playerindex,
                                        char *str )
{
    int fd;
    int objindex;
    char tmp[512], *name;

    objindex = CHAR_getWorkInt(meindex,CHAR_WORKOBJINDEX);
    name = CHAR_getChar( meindex, CHAR_NAME );
    snprintf(tmp,sizeof(tmp),"W|%d|N|%s|123|%s", objindex, name, str );
    fd = getfdFromCharaIndex(playerindex);
    if( fd == -1 ) return;
    lssproto_TK_send(fd,-1,tmp,CHAR_COLORWHITE );
}
Example #23
0
static void NPC_Sysinfo_Born_Num( int meindex, int tindex, char *msg ){
	char	buff[256];
	int		work;
	buff[0] = buff[1] = 0;

	if( getStringFromIndexWithDelim( msg, " ", 2, buff, sizeof( buff)) == TRUE )
	{
		work = atoi( buff );
		if( work <= 0 ) {
			work = 2; /* 赝癫 */
		}
		one_loop_born = work;
		snprintf( buff, sizeof( buff), "敌人同时派出最高的%d。",
			one_loop_born );
		CHAR_talkToCli( tindex, meindex, buff,
					CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));
	}else{
		snprintf( buff, sizeof( buff), "现在敌人同时派出最高的%d。",
			one_loop_born );
		CHAR_talkToCli( tindex, meindex, buff,
					CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));
	}
}
Example #24
0
BOOL PetTalk_CheckMyType( int meindex, int toindex, int kosuu, int flg, int Type )	{
	int MyType=0,MyMaxType=0;
	switch( Type )	{
	case 0:	//HP
		MyType = CHAR_getInt( toindex, CHAR_HP);
		MyMaxType = CHAR_getWorkInt( toindex, CHAR_WORKMAXHP);
		MyMaxType = (MyMaxType * kosuu )/ 100;
		if( PetTalk_BigSmallLastCheck( MyMaxType, MyType , flg ) == TRUE )	{
			return TRUE;
		}
	break;
	}
	return FALSE;
}
Example #25
0
// shan add  errNO=1(���)
void NPC_ERR_DiSP1(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�볡��");
        }

        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 ;
        }
    }
}
Example #26
0
static void NPC_Sysinfo_SetSaacread( int meindex, int tindex, char *msg)
{
	int interval;
	char	msgbuf[256];
	char	buff[256];
	if( getStringFromIndexWithDelim( msg, " ", 2, buff, sizeof( buff)) == TRUE ) {
		interval = atoi( buff);
		if( interval > 0 ) {
			setSaacreadnum( (unsigned)interval);
		}
	}
	snprintf( msgbuf, sizeof(msgbuf),"Saacreadnum = %d ",getSaacreadnum());
	CHAR_talkToCli( tindex, meindex, msgbuf,
			CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));
}
Example #27
0
static void NPC_Sysinfo_TitleRestart( int meindex, int tindex, char *msg)
{
	int		rc;
	char	msgbuf[256];
	
	rc = TITLE_reinitTitleName();
	if( rc) {
		snprintf( msgbuf, sizeof(msgbuf),"讀取完畢。" );
	}
	else {
		snprintf( msgbuf, sizeof(msgbuf),"發生ERROR。" );
	}
	CHAR_talkToCli( tindex, meindex, msgbuf,
			CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));
}
Example #28
0
/*------------------------------------------------------------------------
 *----------------------------------------------------------------------*/
static void NPC_Sysinfo_SendMsg( int meindex, int pindex, int tblnum)
{
	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
	char	buff[128];

	NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
	if( NPC_Util_GetStrFromStrWithDelim( argstr, msgtable[tblnum].arg,buff, sizeof( buff)) == NULL )
	{
		strcpy( buff, msgtable[tblnum].defMsg);
	}
	if( buff[0] != '\0' ) {
		CHAR_talkToCli( pindex, meindex, buff,
						CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));
	}
}
Example #29
0
int MAGIC_Recovery( int charaindex, int toindex, int marray, int mp )
{
	int battlemode;
	if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE;
	battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE );
	if( battlemode == BATTLE_CHARMODE_INIT ){
		return FALSE;
	}


	if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE;
	CHAR_setInt( charaindex, CHAR_MP,
		CHAR_getInt( charaindex, CHAR_MP ) - mp );
	if( IsBATTLING( charaindex ) == TRUE ){
#ifdef _PREVENT_TEAMATTACK	//恩惠不得 使用敵方
		int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );
		if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER &&
			BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ){

			if( BATTLE_CheckSameSide( charaindex, toindex) == 0 ){//不同邊
				int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );
				BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) );
				CHAR_talkToCli( charaindex, -1, "恩惠精靈..不得施予非玩家敵方。", CHAR_COLORYELLOW);
				return FALSE;
			}
		}
#endif
		if (toindex==22){print("jinchao err\n");return FALSE;}  // shan(對全體使用魔法的bug),修改者jinchao+2001/12/07
		MAGIC_Recovery_Battle( charaindex, toindex, marray, mp );
	}else{
		if( CHAR_CHECKINDEX( toindex ) == FALSE )return FALSE;  // shan(對全體使用魔法的bug),修改者jinchao+2001/12/07
		MAGIC_Recovery_Field( charaindex, marray);
	}

	return TRUE;
}
Example #30
0
void NPC_NPCEnemyWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
	if( seqno == CHAR_WINDOWTYPE_NPCENEMY_START) {
		if( select == WINDOW_BUTTONTYPE_YES) {
#if 0
			print(" NPC_NPCEnemyWindowTalked ");
			if( CHAR_getWorkInt( meindex, CHAR_WORKEVENTTYPE) != CHAR_EVENT_ENEMY ) {
				print(" NPCEnemyError!! ");
				return;
			}
#endif
			NPC_NPCEnemy_BattleIn( meindex, talkerindex);
		}
	}
}