Esempio n. 1
0
void PET_CHECKFreePetIsIt( int petindex)
{
	int petputtime, defmaxtime;
	defmaxtime = getPetdeletetime();
	petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME);

	if( NowTime.tv_sec < ( petputtime + getPetdeletetime() ) ) return;

#ifdef _PET_LOSTPET
//	CHAR_CharSaveLostPet( petindex, 0);
#endif

	LogPet(
			"系统",
			"Watchfunc",
			CHAR_getChar( petindex, CHAR_NAME),
			CHAR_getInt( petindex, CHAR_LV),
			"timeout_lost(系统清除-地上自由宠)",
			CHAR_getInt( petindex, CHAR_FLOOR),
			CHAR_getInt( petindex,CHAR_X ),
			CHAR_getInt( petindex,CHAR_Y ),
			CHAR_getChar( petindex, CHAR_UNIQUECODE)   // shan 2001/12/14
		);

	CHAR_CharaDelete(petindex);
}
Esempio n. 2
0
int PET_CleanPetdeletetime( int objmeindex)
{
	int		pindex;

	if( OBJECT_getType(objmeindex) != OBJTYPE_CHARA ) return 0;
	pindex = OBJECT_getIndex( objmeindex);
	if( CHAR_getInt( pindex, CHAR_WHICHTYPE) != CHAR_TYPEPET) return 0;
	if( CHAR_getInt( pindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) {
	}else if( CHAR_getWorkInt( pindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){
	}else {
#ifdef _PET_LOSTPET
//		CHAR_CharSaveLostPet( pindex, 0);
#endif
		LogPet(
			"系统",
			"Watchfunc",
			CHAR_getChar( pindex, CHAR_NAME),
			CHAR_getInt( pindex, CHAR_LV),
			"timeout_lost(系统清除-地上自由宠)",
			CHAR_getInt( pindex, CHAR_FLOOR),
			CHAR_getInt( pindex,CHAR_X ),
			CHAR_getInt( pindex,CHAR_Y ),
			CHAR_getChar( pindex, CHAR_UNIQUECODE)   // shan 2001/12/14
		);
		CHAR_CharaDelete(pindex);
		return 1;
	}
	return 0;
}
Esempio n. 3
0
BOOL ADDRESSBOOK_AutoaddAddressBook( int meindex, int toindex)
{
	int  hisblank;
	int	myblank;
	int	myaddindex, toaddindex;

	char *cdkey;

	myblank = ADDRESSBOOK_findBlankEntry( meindex );
	hisblank = ADDRESSBOOK_findBlankEntry( toindex );
	if( hisblank < 0 || myblank < 0) { //"¦W¤ù§X¤wº¡¡C"
			return FALSE;
	}
	
	cdkey = CHAR_getChar( toindex, CHAR_CDKEY);
	myaddindex = ADDRESSBOOK_getIndexInAddressbook( meindex, cdkey, 
								CHAR_getChar( toindex, CHAR_NAME));
	cdkey = CHAR_getChar( meindex, CHAR_CDKEY);
	toaddindex = ADDRESSBOOK_getIndexInAddressbook( toindex, cdkey, 
									CHAR_getChar(meindex, CHAR_NAME));
	if( myaddindex < 0 ){
		ADDRESSBOOK_entry   meae;
		ADDRESSBOOK_entry   hisentry;
		if( ADDRESSBOOK_makeEntryFromCharaindex(toindex,&hisentry) == FALSE ||
			ADDRESSBOOK_makeEntryFromCharaindex(meindex,&meae) == FALSE ){
			return FALSE;
		}
		CHAR_setAddressbookEntry( meindex, myblank,&hisentry );
		CHAR_setAddressbookEntry( toindex, hisblank,&meae );
		ADDRESSBOOK_sendAddressbookTableOne( meindex, myblank);
		ADDRESSBOOK_sendAddressbookTableOne( toindex , hisblank);
	}
	return TRUE;
}
Esempio n. 4
0
void mproto_Que_Send( int fd, int uid, int index, char* question)
{
	char buffer[65500], wheres[256];
	int checksum=0, floor, x, y;

	char *cdkey = CHAR_getChar( index, CHAR_CDKEY);
	char *charname = CHAR_getChar( index, CHAR_NAME);

	if( strlen( question) <= 0 ){
		CHAR_talkToCli( index, -1, "字串长度不足!", CHAR_COLORYELLOW);
		return;
	}
	memset( wheres, 0, sizeof( wheres));
	floor = CHAR_getInt( index, CHAR_FLOOR);
	x = CHAR_getInt( index, CHAR_X);
	y = CHAR_getInt( index, CHAR_Y);
	sprintf( wheres, "%d,%d,%d", floor, x, y);

	memset( buffer, 0, sizeof( buffer));
	strcpy(PersonalKey, MSPERSIONALKEY);
	checksum += util_mkint(buffer, uid);
	checksum += util_mkstring(buffer, cdkey);
	checksum += util_mkstring(buffer, charname);
	checksum += util_mkstring(buffer, question);
	checksum += util_mkstring(buffer, wheres);
	util_mkint(buffer, checksum);
	util_SendMesg(fd, MPROTO_QUE_SEND, buffer);
}
Esempio n. 5
0
BOOL NPC_PairRegister( int toindex)
{
	char *cdKey = CHAR_getChar( toindex, CHAR_CDKEY);
	char *name = CHAR_getChar( toindex, CHAR_NAME);
	int space=-1,i;
	int Psex = CHAR_getSexInt( CHAR_getInt( toindex, CHAR_BASEBASEIMAGENUMBER) );
	Psex = (Psex==1)?0:1;
	for( i=0; i<MAXPAIRNUMS; i++)	{
		if( PairList[Psex][i].use <= 0 ){
			if( space == -1 ) space = i;
			continue;
		}
		if( !strcmp( cdKey, PairList[Psex][i].cdKey) )
			break;
	}
	if( i>=MAXPAIRNUMS){
		if( space != -1 && CHAR_getWorkInt( toindex, CHAR_MYPAIRCODE) > 0 ){
			PairList[Psex][space].use = 1;
			PairList[Psex][space].forindex = -1;
			sprintf( PairList[Psex][space].cdKey, "%s", cdKey);
			sprintf( PairList[Psex][space].name, "%s", name);
			PairList[Psex][space].pindex = toindex;
			PairList[Psex][space].code = CHAR_getWorkInt( toindex, CHAR_MYPAIRCODE);

			CHAR_talkToCli( toindex, -1, "新增至配对名单。", CHAR_COLORYELLOW);
			return TRUE;
		}
	}
	return FALSE;
}
Esempio n. 6
0
int BATTLE_ItemUseDelete(
	int charaindex,
	int haveitemindex
)
{
	int itemindex;

    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);
	if( ITEM_CHECKINDEX( itemindex ) == FALSE ) return 0;
	{
		LogItem(
			CHAR_getChar( charaindex, CHAR_NAME ),
			CHAR_getChar( charaindex, CHAR_CDKEY ),
#ifdef _add_item_log_name  // WON ADD ¦bitemªºlog¤¤¼W¥[item¦WºÙ
			itemindex,
#else
       		ITEM_getInt( itemindex, ITEM_ID ),
#endif
			"BattleUse(¾Ô°«¤¤¨Ï¥Î±¼ªº¹D¨ã)",
	       	CHAR_getInt( charaindex,CHAR_FLOOR),
			CHAR_getInt( charaindex,CHAR_X ),
        	CHAR_getInt( charaindex,CHAR_Y ),
			ITEM_getChar( itemindex, ITEM_UNIQUECODE),
					ITEM_getChar( itemindex, ITEM_NAME),
					ITEM_getInt( itemindex, ITEM_ID)
		);
	}
	CHAR_DelItemMess( charaindex, haveitemindex, 0);

	return 0;
}
/*-----------------------------------------------
 * ¼¡²ó³«ºÅ»þ´Ö¡¤Éô²°¤ò¸À¤¦
 *----------------------------------------------*/
static void NPC_RoomAdminNew_DspNextAuction( int meindex, int talkerindex)
{
	char    msgbuf[2048];
	time_t  closetime;
	
	closetime = CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME);
	/* ¼¡¤Î³«ºÅ»þ´Ö¤¬·è¤Þ¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¡Ö·è¤Þ¤Ã¤Æ¤Þ¤»¤ó¡£¡×¥á¥Ã¥»¡¼¥¸*/
	if( closetime == 0 ) {
		snprintf( msgbuf, sizeof( msgbuf),
					NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION_NONE
				);
		CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
	}
	else {
		int     doorindex;
		char    argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
		char    explain[1024];      /*ÀâÌÀ*/
		char	buff[16];
		struct  tm tmwk;
		int     difftime;
		/* Éô²°¾ðÊó¤ò¼èÆÀ */
		doorindex = NPC_DoorSearchByName( 
					CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));
		NPC_Util_GetArgStr( doorindex, argstr, sizeof( argstr));
		getStringFromIndexWithDelim(argstr, "|" , 9 , explain,sizeof(explain));
		/* Éô²°¾ðÊó*/
		if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) {
			strcpy( buff, "¸¹«Ç");
		}
		else {
			buff[0] = '\0';
		}
		snprintf( msgbuf, sizeof( msgbuf),
					NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION1,
					explain,
					CHAR_getChar( doorindex, CHAR_NAME),
					buff
				);
		CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
		/* Äù¤áÀÚ¤ê»þ´Ö */
		memcpy( &tmwk, localtime( &closetime), sizeof( tmwk));
		difftime = closetime - NowTime.tv_sec;
		snprintf( msgbuf, sizeof( msgbuf),
					NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION2,
					tmwk.tm_hour,
					tmwk.tm_min,
					difftime / 3600,
					(difftime % 3600) / 60
				);
		CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
		
		/* ²¼¸Â¶â³Û */
		snprintf( msgbuf, sizeof( msgbuf),
					NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION3,
					CHAR_getWorkChar( doorindex, CHAR_WORKDOORGOLDLIMIT)
				);
		CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
	}
	
}
Esempio n. 8
0
static BOOL ADDRESSBOOK_makeEntryFromCharaindex( int charaindex,
												 ADDRESSBOOK_entry* ae)
{
	char *cdkey;

	if( !CHAR_CHECKINDEX(charaindex) ) return FALSE;

	memset( ae,0,sizeof(ADDRESSBOOK_entry) );
	cdkey = CHAR_getChar( charaindex, CHAR_CDKEY);
	if( cdkey == NULL ){
		print( "ADDRESSBOOK_makeEntryFromCharaindex:"
			   " strange! getcdkeyFromCharaIndex returns NULL!"
			   " charaindex: %d\n" , charaindex );
		return FALSE;
	}
	strcpysafe( ae->cdkey , sizeof( ae->cdkey ),cdkey);

	strcpysafe( ae->charname,sizeof( ae->charname),
				CHAR_getChar(charaindex,CHAR_NAME) );
	ae->level       = CHAR_getInt( charaindex , CHAR_LV );
	ae->duelpoint   = CHAR_getInt( charaindex, CHAR_DUELPOINT);
	ae->graphicsno  = CHAR_getInt( charaindex , CHAR_FACEIMAGENUMBER );
	ae->online = getServernumber();
	ae->use = TRUE;
	ae->transmigration = CHAR_getInt( charaindex, CHAR_TRANSMIGRATION);

	return TRUE;
}
Esempio n. 9
0
int BATTLE_ItemUseDelete(
	int charaindex,
	int haveitemindex
)
{
	int itemindex;

    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);
	if( ITEM_CHECKINDEX( itemindex ) == FALSE ) return 0;
	{
		LogItem(
			CHAR_getChar( charaindex, CHAR_NAME ),
			CHAR_getChar( charaindex, CHAR_CDKEY ),
#ifdef _add_item_log_name  // WON ADD ��item��log������item����
			itemindex,
#else
       		ITEM_getInt( itemindex, ITEM_ID ),
#endif
			"BattleUse(ս����ʹ�õ��ĵ���)",
	       	CHAR_getInt( charaindex,CHAR_FLOOR),
			CHAR_getInt( charaindex,CHAR_X ),
        	CHAR_getInt( charaindex,CHAR_Y ),
			ITEM_getChar( itemindex, ITEM_UNIQUECODE),
					ITEM_getChar( itemindex, ITEM_NAME),
					ITEM_getInt( itemindex, ITEM_ID)
		);
	}
	CHAR_DelItemMess( charaindex, haveitemindex, 0);

	return 0;
}
Esempio n. 10
0
void ChatRoom_Refresh ( int Num )
{
	int fd , i , RoomLeader = -1 ; 
	char token[2048] ;
	char token2[2096] ;
	char buf[64] ; 
	if ( ChatRoom[ Num ].useFlag == TRUE ) {
		sprintf ( token , "R|r%d|%s|%d|%s|p%d|" , 
			Num , 
			ChatRoom[ Num ].RoomName , 
			ChatRoom[ Num ].Maker , 
			CHAR_getChar ( ChatRoom[ Num ].Maker , CHAR_NAME ) , 
			ChatRoom[ Num ].NowPeople  );
		for ( i = 0 ; i < MAX_PPLINROOM ; i ++ ) {
			if ( ChatRoom[ Num ].MemberList[ i ] != -1 ) {
				sprintf( buf , "I%d|%s|%s|" , 
					ChatRoom[ Num ].MemberList[ i ] , 
					CHAR_getChar ( ChatRoom[ Num ].MemberList[ i ] , CHAR_NAME ) , 
					CHAR_getChar ( ChatRoom[ Num ].MemberList[ i ] , CHAR_OWNTITLE )  
					);
				strncat ( token , buf , sizeof ( buf ) ) ; 
			}
		}
	}
	for ( i = 0 ; i < MAX_PPLINROOM ; i ++ ) {
		if ( ChatRoom[ Num ].MemberList[ i ] != -1 ) {
			if ( CHAR_getWorkInt ( ChatRoom[ Num ].MemberList[ i ] , CHAR_WORKCHATROOMTYPE ) == 1 ) RoomLeader = 1;
			else RoomLeader = 0 ;
			sprintf ( token2 , "%s%d|" , token , RoomLeader ) ; 
			fd= getfdFromCharaIndex ( ChatRoom[ Num ].MemberList[ i ] );
			lssproto_CHATROOM_send ( fd , token2 ) ; 
		}
	}
}
Esempio n. 11
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;
}
Esempio n. 12
0
void NPC_DepotPet_Get( int meindex, int talker, int select, char *token)
{
	
	int petindex;
	int selectpet;
	int emptyindex;
	char szPet[128];
	int workindex[CHAR_MAXPOOLPETHAVE];
	int i;
	int cnt;

	selectpet = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) ;
	petindex = CHAR_getDepotPetIndex( talker, selectpet);
	if( !CHAR_CHECKINDEX( petindex) ) return;
	emptyindex = CHAR_getCharPetElement( talker);
	if( emptyindex == -1 ) {
		fprint( "err\n");
		return;
	}
	CHAR_setCharPet( talker, emptyindex, petindex);
	CHAR_setChar( petindex, CHAR_OWNERCHARANAME, CHAR_getChar( talker, CHAR_NAME));
	CHAR_setDepotPetIndex( talker, selectpet, -1);
	NPC_MaxGoldOver( meindex, talker, NPC_PETSHOP_MSG_POOLTHANKS, token);
	snprintf( szPet, sizeof( szPet ), "K%d", emptyindex);
	CHAR_sendStatusString( talker, szPet );
	snprintf( szPet, sizeof( szPet), "W%d",emptyindex);
	CHAR_sendStatusString( talker, szPet );
	for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
		workindex[i] = -1;
	}
	cnt = 0;
	for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
		int petindex = CHAR_getDepotPetIndex( talker, i);
		if( CHAR_CHECKINDEX( petindex) ) {
			workindex[cnt++] = petindex;
		}
	}
	for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
		CHAR_setDepotPetIndex( talker, i, workindex[i]);
	}
	LogPet(
		CHAR_getChar( talker, CHAR_NAME ),
		CHAR_getChar( talker, CHAR_CDKEY ),
		CHAR_getChar( petindex, CHAR_NAME),
		CHAR_getInt( petindex, CHAR_LV),
		"draw(ÁìÈ¡²Ö¿â³èÎï)",
		CHAR_getInt( talker,CHAR_FLOOR),
		CHAR_getInt( talker,CHAR_X ),
		CHAR_getInt( talker,CHAR_Y ),
		CHAR_getChar( petindex, CHAR_UNIQUECODE)   // shan 2001/12/14
	);
#ifdef _PET_EVOLUTION
	if( CHAR_getInt( petindex, CHAR_FUSIONBEIT) == 1 &&
		CHAR_getInt( petindex, CHAR_FUSIONRAISE) > 0 ){//¼ì²éÊÇ·ñΪÈںϳè
		CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, (int)time( NULL));
	}
#endif
}	
Esempio n. 13
0
void ITEM_useAddexp_Effect( charaindex, toindex, haveitemindex)
{
	int itemindex,power,vtime;
	//,pindex
	char *p = NULL, *arg;
	char szBuffer[1024]="";

	itemindex = CHAR_getItemIndex(charaindex,haveitemindex);

	// Àˬdª««~
	if(!ITEM_CHECKINDEX(itemindex)) return;
	arg = ITEM_getChar(itemindex, ITEM_ARGUMENT );

	if( (p = strstr( arg, "¼W" )) != NULL ){
        sscanf( p+2, "%d", &power );
	}
	if( (p = strstr( arg, "¤À" )) != NULL ){
		sscanf( p+2, "%d", &vtime );
	}
	if( p == NULL )return;
#ifdef _ITEM_ADDEXP2 // ´¼ªG®É¶¡¥i¥H²Ö¥[
	{
		int point;
		point = CHAR_getWorkInt( charaindex, CHAR_WORKITEM_ADDEXP)
					* (int)(CHAR_getWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME)/60);
		if( point >= 72000) {
			CHAR_talkToCli( charaindex, -1, "´¼¼z¤§ªG²Ö­p®É¶¡¤Î®ÄªG¤w¹F¤W­­¡C", CHAR_COLORYELLOW);
			return;
		}
		point += (power * vtime);
		point = min( point, 72000);
		vtime = (int)(point / power);
#ifdef _LOG_OTHER
		sprintf( szBuffer, "¨Ï¥Î´¼¼z¤§ªG %d\t²Ö¿n®ÄªG= ¤À¼Æ%d ¯à¤O%d¢H ®É¶¡%d¤À ",
				ITEM_getInt( itemindex, ITEM_ID ), point, power, vtime);
		LogOther( 
			CHAR_getChar( charaindex, CHAR_CDKEY),
			CHAR_getChar( charaindex, CHAR_NAME),
			szBuffer );
#endif
		//CHAR_setInt( charaindex, CHAR_ADDEXPPOWER, power);
		//CHAR_setInt( charaindex, CHAR_ADDEXPTIME,vtime*60 );

		//sprintf(szBuffer, "´ú¸Õ°T®§¡G¥Ø«e¤À¼Æ%d ®É¶¡%d¬í¡C", point, vtime*60);
		//CHAR_talkToCli(charaindex,-1,szBuffer,CHAR_COLORRED);
	}
#endif
	CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXP, power);
	CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME,vtime*60 );

	//²M°£¹D¨ã
	BATTLE_ItemUseDelete(charaindex,haveitemindex);
	//sprintf(szBuffer, "¾Ç²ß¸gÅ窺¯à¤O´£¤É¤F%d¢H", power);
	sprintf(szBuffer, "¾Ç²ß¸gÅ窺¯à¤O´£¤É¤F%d¢H¡A®É®Ä³Ñ¾l%d¤ÀÄÁ¡C", power, vtime);
	CHAR_talkToCli(charaindex,-1,szBuffer,CHAR_COLORYELLOW);

}
Esempio n. 14
0
void ITEM_useAddexp_Effect( charaindex, toindex, haveitemindex)
{
	int itemindex,power,vtime;
	//,pindex
	char *p = NULL, *arg;
	char szBuffer[1024]="";

	itemindex = CHAR_getItemIndex(charaindex,haveitemindex);

	// �����Ʒ
	if(!ITEM_CHECKINDEX(itemindex)) return;
	arg = ITEM_getChar(itemindex, ITEM_ARGUMENT );

	if( (p = strstr( arg, "��" )) != NULL ){
        sscanf( p+2, "%d", &power );
	}
	if( (p = strstr( arg, "��" )) != NULL ){
		sscanf( p+2, "%d", &vtime );
	}
	if( p == NULL )return;
#ifdef _ITEM_ADDEXP2 // �ǹ�ʱ������ۼ�
	{
		int point;
		point = CHAR_getWorkInt( charaindex, CHAR_WORKITEM_ADDEXP)
					* (int)(CHAR_getWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME)/60);
		if( point >= 72000) {
			CHAR_talkToCli( charaindex, -1, "�ǻ�֮���ۼ�ʱ�估Ч���Ѵ����ޡ�", CHAR_COLORYELLOW);
			return;
		}
		point += (power * vtime);
		point = min( point, 72000);
		vtime = (int)(point / power);
#ifdef _LOG_OTHER
		sprintf( szBuffer, "ʹ���ǻ�֮�� %d\t�ۻ�Ч��= ����%d ����%d�� ʱ��%d�� ",
				ITEM_getInt( itemindex, ITEM_ID ), point, power, vtime);
		LogOther(
			CHAR_getChar( charaindex, CHAR_CDKEY),
			CHAR_getChar( charaindex, CHAR_NAME),
			szBuffer );
#endif
		//CHAR_setInt( charaindex, CHAR_ADDEXPPOWER, power);
		//CHAR_setInt( charaindex, CHAR_ADDEXPTIME,vtime*60 );

		//sprintf(szBuffer, "����ѶϢ��Ŀǰ����%d ʱ��%d�롣", point, vtime*60);
		//CHAR_talkToCli(charaindex,-1,szBuffer,CHAR_COLORRED);
	}
#endif
	CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXP, power);
	CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME,vtime*60 );

	//�������
	BATTLE_ItemUseDelete(charaindex,haveitemindex);
	//sprintf(szBuffer, "ѧϰ���������������%d��", power);
	sprintf(szBuffer, "ѧϰ���������������%d����ʱЧʣ��%d���ӡ�", power, vtime);
	CHAR_talkToCli(charaindex,-1,szBuffer,CHAR_COLORYELLOW);

}
Esempio n. 15
0
BOOL NPC_CHECKFREEPETSKILL( int toindex, int petindex, int skillID)
{
	int skillindex=-1;
	char SCode[256];
	char Free[256];
	int i, petID;
	skillindex =  PETSKILL_getPetskillArray( skillID );
	memset( Free, 0, sizeof( Free));
	if( !PETSKILL_CHECKINDEX( skillindex) )	{
		return FALSE;
	}

	petID = CHAR_getInt( petindex, CHAR_PETID);
	sprintf( SCode, "%s", PETSKILL_getChar( skillindex, PETSKILL_KINDCODE));
	sprintf( Free, "%s", PETSKILL_getChar( skillindex, PETSKILL_FREE));

	//CHECK CODE
	if( !strcmp( SCode, "\0"))	{
		return TRUE;
	}

	for( i=0; i<arraysizeof( Code_skill); i++)	{
		if( Code_skill[i].PetId == petID )	{
			break;
		}
	}

	//找不到這只寵物
	if( i == arraysizeof( Code_skill) )	{
		{
			char buff1[256];
			sprintf( buff1, "%s不能學特殊技能!!", CHAR_getChar( petindex, CHAR_NAME));
			CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW);
		}
		return FALSE;

	}

	if( strstr( Code_skill[i].Code, SCode ) != NULL )	{
		if( NPC_SkillShopPetCheck( toindex, petindex, skillID) == FALSE )	{
			char buff1[256];
			sprintf( buff1, "%s現在還不能學%s!", CHAR_getChar( petindex, CHAR_NAME),
									PETSKILL_getChar( skillindex, PETSKILL_NAME) );
			CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW);
			return  FALSE;
		}
		return TRUE;
	}else	{
			char buff1[256];
			sprintf( buff1, "%s不能學%s!!", CHAR_getChar( petindex, CHAR_NAME),
						PETSKILL_getChar( skillindex, PETSKILL_NAME) );
			CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW);
	}
	return FALSE;
}
Esempio n. 16
0
static BOOL NPC_SimpleShopProcessSellMsg(char *msg, int shopindex,
                                         int playerindex )
{
    int sellwindowindex, itemtableindex,itemind, id;
    int price, tmpgold;
    char buf[64];
    if(!CHAR_CHECKINDEX(shopindex)||!CHAR_CHECKINDEX(playerindex))
        return -1;
    if( !getStringFromIndexWithDelim( msg,"|",4,buf,sizeof(buf) )){
        return -1;
    }
    sellwindowindex = atoi(buf);
    itemtableindex = sellwindowindex + CHAR_STARTITEMARRAY;
    itemind = CHAR_getItemIndex(playerindex,itemtableindex );
    if( ! ITEM_CHECKINDEX(itemind) ) return -1;

    price = ITEM_getInt( itemind, ITEM_COST );

    if( price <= 0 || price > NPC_SIMPLESHOPMAXBUYPRICE ){
        return -2;
    }
    price *= NPC_Util_sellRate(playerindex);

	CHAR_AddGold( playerindex, price );

	CHAR_sendStatusString( playerindex , "P");

    id = ITEM_getInt(itemind,ITEM_ID);
	{
		LogItem(
			CHAR_getChar( playerindex, CHAR_NAME ), /* ƽÅÒ·Â   */
			CHAR_getChar( playerindex, CHAR_CDKEY ),
#ifdef _add_item_log_name  // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ
			itemind,
#else
       		ITEM_getInt( itemind, ITEM_ID ),  /* ʧÄÌ  Ø©  į */
#endif
			"Sell",
			CHAR_getInt( playerindex,CHAR_FLOOR),
			CHAR_getInt( playerindex,CHAR_X ),
 	      	CHAR_getInt( playerindex,CHAR_Y ),
	        ITEM_getChar( itemind, ITEM_UNIQUECODE),
			ITEM_getChar( itemind, ITEM_NAME),
			ITEM_getInt( itemind, ITEM_ID)
		);
	}

    if( ! NPC_Util_moveItemToChar( shopindex,itemind,TRUE ) ){
        return -1;
    }
    NPC_Util_RemoveItemByID(shopindex,id,FALSE);
    return 1;
}
Esempio n. 17
0
BOOL NPC_DepotItem_gettItem( int meindex, int talkerindex, int num)
{
	int emptyindex;
	int itemindex;

	if( !CHAR_CheckDepotItem( talkerindex) ) return FALSE;

	if( (emptyindex=CHAR_findEmptyItemBox( talkerindex)) == -1 ) return FALSE;
	itemindex = CHAR_getDepotItemIndex( talkerindex, num);
	if( !ITEM_CHECKINDEX( itemindex) )return FALSE;

	CHAR_setDepotItemIndex( talkerindex, num, -1);
	CHAR_setItemIndex( talkerindex, emptyindex, itemindex);
	CHAR_sendItemDataOne( talkerindex, emptyindex);
	
	CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);

	LogItem(
		CHAR_getChar( talkerindex, CHAR_NAME ),
		CHAR_getChar( talkerindex, CHAR_CDKEY ),
#ifdef _add_item_log_name
		itemindex,
#else
		ITEM_getInt( itemindex, ITEM_ID),
#endif
		"Depot(取出道具)",
		CHAR_getInt( talkerindex,CHAR_FLOOR),
		CHAR_getInt( talkerindex,CHAR_X ),
 		CHAR_getInt( talkerindex,CHAR_Y ),
		ITEM_getChar( itemindex, ITEM_UNIQUECODE),
		ITEM_getChar( itemindex, ITEM_NAME),
		ITEM_getInt( itemindex, ITEM_ID) );

	{
		int i, cnt=0;
		int work[CHAR_MAXDEPOTITEMHAVE];
		for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) {
			work[i] = -1;
		}
		for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) {
			itemindex = CHAR_getDepotItemIndex( talkerindex, i);
			if( !ITEM_CHECKINDEX( itemindex)) continue;
			work[ cnt++] = itemindex;
		}
		for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) {
			CHAR_setDepotItemIndex( talkerindex, i, work[i]);
		}
	}


	return TRUE;
}
Esempio n. 18
0
void NPC_reCheckMyPetUnusual( int meindex, int toindex)//¼ì²é³èÎïÒì³£
{
	char *buf=NULL;
	int petindex,i;
	for( i=0; i<CHAR_MAXPETHAVE; i++)	{
		petindex = CHAR_getCharPet( toindex, i);
		if( !CHAR_CHECKINDEX( petindex) )continue;
		if( (buf=CHAR_getChar( petindex, CHAR_NAME)) == NULL ||
			strlen( buf) <= 0 ){
			char *PetNAME;
			int array, parry, petID;

			petID = CHAR_getInt( petindex, CHAR_PETID);
			array = ENEMY_getEnemyArrayFromTempNo( petID);

			if( !ENEMY_CHECKINDEX( array)){
				print("ANDY Pet(ID:%d) err Array:%d (file:%s %d) !! \n",
					petID, array, __FILE__, __LINE__ );
				continue;
			}
			parry = ENEMYTEMP_getEnemyTempArray( array);
			if( (PetNAME = ENEMYTEMP_getChar( parry, E_T_NAME)) == NULL ||
				strlen( PetNAME) <= 0 ){
				print("ANDY Pet(ID:%d) Array:%d err Name:%s (file:%s %d) !! \n",
					petID, array, (PetNAME==NULL)?"NULL":PetNAME, __FILE__, __LINE__ );
				continue;
			}
			char tempname[128];
			if(strstr(CHAR_getChar(petindex,CHAR_NAME),"*")!=NULL)
				sprintf(tempname,"*%s",ENEMYTEMP_getChar( parry, E_T_NAME));
			else
				sprintf(tempname,"%s",ENEMYTEMP_getChar( parry, E_T_NAME));
			CHAR_setChar( petindex, CHAR_NAME, tempname);
			CHAR_setChar( petindex, CHAR_USERPETNAME , "");
			//andy_log
			print("ANDY Pet(ID:%d) Name -> %s (%s:%s)(file:%s %d) !! \n",
				petID, PetNAME, CHAR_getUseName( toindex),
				CHAR_getChar( toindex, CHAR_CDKEY), __FILE__, __LINE__ );
		}
	}

	for( i=0; i<CHAR_MAXPETHAVE; i++){
		char szPet[256];
		petindex = CHAR_getCharPet(toindex, i);
		if( !CHAR_CHECKINDEX( petindex) )continue;
		CHAR_complianceParameter( petindex );
		snprintf( szPet, sizeof( szPet ), "K%d", i);
		CHAR_sendStatusString( toindex, szPet );
		snprintf( szPet, sizeof( szPet ), "W%d", i);
		CHAR_sendStatusString( toindex, szPet );
	}
}
Esempio n. 19
0
void pet_make( int charaindex, char* message )
{
    int  ret;
    char msgbuf[64];
    int  enemynum;
    int  enemyid;
    int  i;

    enemyid  = atoi(message);
    enemynum = ENEMY_getEnemyNum();

    for( i=0; i<enemynum; i++ ){
        if( ENEMY_getInt( i, ENEMY_ID) == enemyid){
            break;
        }
    }
    if(i==enemynum) return;

    ret = ENEMY_createPetFromEnemyIndex( charaindex, i);
    snprintf( msgbuf, sizeof( msgbuf), "哦~以你的能力足以配得上一只传说宠物,好吧!就是你了。");
    CHAR_talkToCli( charaindex, -1, msgbuf, CHAR_COLORYELLOW);
                
    for( i=0; i<CHAR_MAXPETHAVE; i++ ){
        if( CHAR_getCharPet( charaindex, i) == ret )break;
    }
  
    if( i==CHAR_MAXPETHAVE) i = 0;
    if( CHAR_CHECKINDEX( ret ) == TRUE ){
		CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV ));
    }
                                                                                                
    snprintf( msgbuf, sizeof( msgbuf ), "K%d", i );
    CHAR_sendStatusString( charaindex, msgbuf );
                     
    snprintf( msgbuf, sizeof( msgbuf ), "W%d", i );
    CHAR_sendStatusString( charaindex, msgbuf );
	
	for( i=0; i<CHAR_MAXPETHAVE; i++ )
		if( CHAR_getCharPet(charaindex, i) == ret )
			CHAR_send_K_StatusString(charaindex, i, CHAR_K_STRING_HP|CHAR_K_STRING_AI);
	
	LogPet(
		CHAR_getChar( charaindex, CHAR_NAME ), /* 平乓仿   */
		CHAR_getChar( charaindex, CHAR_CDKEY ),
		"凯恩",1,"PetMaker",
		CHAR_getInt( charaindex,CHAR_FLOOR),
		CHAR_getInt( charaindex,CHAR_X ),
		CHAR_getInt( charaindex,CHAR_Y ),
		CHAR_getChar( ret, CHAR_UNIQUECODE)   // shan 2001/12/14
	);
}
Esempio n. 20
0
BOOL NPC_reFindMyLostPet( int meindex, int toindex, char *buf)
{
	//µØÉÏ0 Áï³è 1 ³èÓÊ 2
	FILE *fp = NULL;
	char *CdKey=NULL;
	int lv=0, cost, ltime, count=0, i, type;
	char filename[256], line[2048], buf1[256];
	char petname[256], typebuf[256];
	char buf2[10][256]={"\n","\n","\n","\n","\n",
						"\n","\n","\n","\n","\n" };
	CdKey = CHAR_getChar( toindex, CHAR_CDKEY );
	if( CdKey == NULL ) return FALSE;
	sprintf( filename, "lostpet/%s.txt", CdKey);
	strcpy( buf, "==³èÎïÒÅʧ¼Í¼==\n");
	if( (fp=fopen( filename, "r")) == NULL ) return FALSE;

	while( fgets( line , sizeof( line ) , fp ) && count < 7){
		if( line == NULL ) continue;
		if( getStringFromIndexWithDelim( line, "|", 1, buf1, sizeof( buf1)) == FALSE ) continue;
		if( strcmp( CHAR_getChar( toindex, CHAR_CDKEY ), buf1 )) continue;
		if( getStringFromIndexWithDelim( line, "|", 6, buf1, sizeof( buf1)) == FALSE ) continue;
			ltime = atoi(buf1);
			ltime = time( NULL) - ltime;
			ltime = ltime/(60*60*24);
			if( ltime > 14 ) continue;//Ðø·Å14Ìì

		if( getStringFromIndexWithDelim( line, "|", 2, petname, sizeof( petname)) == FALSE ) continue;
		if( getStringFromIndexWithDelim( line, "|", 3, buf1, sizeof( buf1)) == FALSE ) continue;
		lv = atoi( buf1);
		if( getStringFromIndexWithDelim( line, "|", 4, buf1, sizeof( buf1)) == FALSE ) continue;
		cost = atoi( buf1);

		if( getStringFromIndexWithDelim( line, "#", 3, buf1, sizeof( buf1)) == FALSE ) continue;
		type = atoi( buf1);
		if( type == 1 ){
			strcpy( typebuf, "Áï³è");
		}else if( type == 2 ){
			strcpy( typebuf, "³èÓÊ");
		}else{
			strcpy( typebuf, "µØÉÏ");
		}

		sprintf( buf2[count++], "%s LV:%dʯ±Ò:%d(%dÌì%s)\n", petname, lv, cost, ltime, typebuf);
	}
	fclose( fp);
	for( i=0; i<7; i++){
		strcat( buf, buf2[i]);
	}
	if( count == 0 ) return FALSE;
	return TRUE;
}
Esempio n. 21
0
// CoolFish: Family Adv 2001/7/29
void AddFMAdv(int talker, int shiftbit)
{
	int fmadv = 0;
	char buf[256];
#ifdef _FMVER21
#else
	if (CHAR_getInt(talker, CHAR_FMINDEX) < 0)
		return;
	if (CHAR_getInt(talker, CHAR_FMLEADERFLAG) <= 0)
		return;
	if (strcmp(CHAR_getChar(talker, CHAR_FMNAME), "") == 0)
		return;
#endif
	if (shiftbit >= arraysizeof(FMAdvTbl))
		return;
	else
		fmadv = FMAdvTbl[shiftbit];
	if (fmadv <= 0)
		return;
	sprintf(buf, "%d", fmadv);
#ifdef _PERSONAL_FAME		// Arminius 8.30: 家族个人声望
	CHAR_earnFame(talker, fmadv);
#endif
#ifdef _FMVER21
	if (CHAR_getInt(talker, CHAR_FMLEADERFLAG) > 0
	    && CHAR_getInt(talker, CHAR_FMLEADERFLAG) != FMMEMBER_APPLY) {
		// CoolFish: 2001/10/03
		int fd = getfdFromCharaIndex(talker);
		saacproto_ACFixFMData_send(acfd,
					   CHAR_getChar(talker, CHAR_FMNAME),
					   CHAR_getInt(talker, CHAR_FMINDEX),
					   CHAR_getWorkInt(talker,
							   CHAR_WORKFMINDEXI),
					   FM_FIX_FMADV, buf, "",
					   // CoolFish: 2001/10/03
					   CHAR_getWorkInt(talker,
							   CHAR_WORKFMCHARINDEX),
					   CONNECT_getFdid(fd));
		// CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX), 0);
	}
#else
	saacproto_ACFixFMData_send(acfd,
				   CHAR_getChar(talker, CHAR_FMNAME),
				   CHAR_getInt(talker, CHAR_FMINDEX),
				   CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI),
				   FM_FIX_FMADV, buf, "",
				   CHAR_getWorkInt(talker,
						   CHAR_WORKFMCHARINDEX), 0);
#endif
}
Esempio n. 22
0
static BOOL NPC_PoolItemShop_DrawItem( int meindex, int talkerindex, int num)
{
	int emptyindex;
	int itemindex;
	int i;
	int cnt;
	int work[CHAR_MAXPOOLITEMHAVE];

	emptyindex = CHAR_findEmptyItemBox( talkerindex);
	if( emptyindex == -1 ) return FALSE;
	
	itemindex = CHAR_getPoolItemIndex( talkerindex, num);
	if( !ITEM_CHECKINDEX( itemindex)) {
		fprint( "err\n");
		return FALSE;
	}
	CHAR_setItemIndex( talkerindex, emptyindex, itemindex);
	CHAR_setPoolItemIndex( talkerindex, num, -1);
	CHAR_sendItemDataOne( talkerindex, emptyindex);
	for( i = 0; i < CHAR_MAXPOOLITEMHAVE; i ++ ) {
		work[i] = -1;
	}
	cnt = 0;
	for( i = 0; i < CHAR_MAXPOOLITEMHAVE; i ++ ) {
		itemindex = CHAR_getPoolItemIndex( talkerindex, i);
		if( ITEM_CHECKINDEX( itemindex)) {
			work[ cnt++] = itemindex;
		}
	}
	for( i = 0; i < CHAR_MAXPOOLITEMHAVE; i ++ ) {
		CHAR_setPoolItemIndex( talkerindex, i, work[i]);
	}
	LogItem(
		CHAR_getChar( talkerindex, CHAR_NAME ),
		CHAR_getChar( talkerindex, CHAR_CDKEY ),
#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名稱
		itemindex,
#else
		ITEM_getInt( itemindex, ITEM_ID),
#endif
		"draw(領取道具)",
		CHAR_getInt( talkerindex,CHAR_FLOOR),
		CHAR_getInt( talkerindex,CHAR_X ),
 		CHAR_getInt( talkerindex,CHAR_Y ),
		ITEM_getChar( itemindex, ITEM_UNIQUECODE),
		ITEM_getChar( itemindex, ITEM_NAME),
		ITEM_getInt( itemindex, ITEM_ID)
	);
	return TRUE;
}
/*-----------------------------------------------
 * ´ÉÍý¿ÍÍѤΥե¡¥¤¥ë¤Ë¥Ç¡¼¥¿¤ò½ñ¤­¹þ¤à
 *
 * ¥Õ¥¡¥¤¥ë̾¤Ï"©Ð¶¡ªº¦W¦r.room"
 * ¤ò»È¤¦¡£
 *
 * ¥Õ¥¡¥¤¥ë¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï¡¤
 * cdkey|charaname|passwd|expiretime
 *
 *
 * °ú¿ô¤Îflg ¤¬£±¤À¤Ã¤¿¤é½ñ¤­¹þ¤ß¡¤£°¤À¤Ã¤¿¤é¥Õ¥¡¥¤¥ëºï½ü
 * Ìá¤êÃÍ¡§TRUE¡§À®¸ù
 *         FALSE:²¿¤é¤«¤Î¼ºÇÔ
 *----------------------------------------------*/
static BOOL NPC_RoomAdminNew_WriteDataFile( int meindex, int pindex, 
											char *roomname,
											char *passwd, int flg)
{
	char    *cdkey;
	char    charaname[32*2];
	char    expiretime[64];
	char    filename[128];
	char    outbuf[1024];
	FILE    *fp_src;
	
	/* ¥Õ¥¡¥¤¥ë̾¤òÀ¸À® */
	strcpy( filename, NPC_ROOMADMINNEW_DATADIR);
	/*strcat( filename, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));*/
	strcat( filename, roomname);
	strcat( filename, NPC_ROOMADMINNEW_EXTENSION);

	if( flg) {
		/* Í¤·¤¿¿Í¤Î£Ã£Ä¥­¡¼ */
        //getcdkeyFromCharaIndex( pindex, cdkey, sizeof(cdkey ));
		cdkey = CHAR_getChar( pindex, CHAR_CDKEY);
		/* Í¤·¤¿¿Í¤Î¥­¥ã¥é̾ */
		makeEscapeString(  CHAR_getChar( pindex, CHAR_NAME),
							charaname, sizeof( charaname));
		/* ´ü¸ÂÀÚ¤ì»þ´Ö */
		snprintf( expiretime, sizeof( expiretime), "%d", 
					CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME)
					+ NPC_ROOMADMINNEW_2WEEK   /* £²½µ´Ö¸å */
					);

		/* ¥Ç¥ê¥ß¥¿¤Ç¤¯¤¯¤ë */
		snprintf( outbuf, sizeof( outbuf), "%s|%s|%s|%s|",
					cdkey, charaname, passwd, expiretime);
		fp_src = fopen( filename, "w");
		if( !fp_src) {
			print( "[%s:%d] File Open Error\n", __FILE__, __LINE__);
			return FALSE;
		}
		fputs( outbuf, fp_src);
		fclose( fp_src);
	}
	else {
		unlink( filename);
	}
	
	return TRUE;
	
}
Esempio n. 24
0
int NPC_DepotPet_CheckRepeat( int charaindex)
{
	int petindex1, petindex2;
	int i, j, find, ret = FALSE;
	int workindex[CHAR_MAXDEPOTPETHAVE], cnt =0;

	for( i =0; i <(CHAR_MAXDEPOTPETHAVE-1); i++)
	{
		petindex1 = CHAR_getDepotPetIndex( charaindex, i);
		if( !CHAR_CHECKINDEX( petindex1)) continue;
		find = 0;
		for( j =(i+1); j <CHAR_MAXDEPOTPETHAVE; j++)
		{
			petindex2 = CHAR_getDepotPetIndex( charaindex, j);
			if( !CHAR_CHECKINDEX( petindex2)) continue;
			if( petindex1 == petindex2 ) continue;
			if( !strcmp( CHAR_getChar( petindex1, CHAR_UNIQUECODE),
						CHAR_getChar( petindex2, CHAR_UNIQUECODE) ) )
			{
				print(" ÔÚ²Ö¿âÕÒµ½·Ç·¨³èÁË ");
				CHAR_setDepotPetIndex( charaindex, j, -1);
				NPC_DepotPet_CheckRepeat_del( charaindex, petindex2);
				find ++;
				ret = TRUE;
			}
		}
		if( find >0)
		{
			CHAR_setDepotPetIndex( charaindex, i, -1);
			NPC_DepotPet_CheckRepeat_del( charaindex, petindex1);
		}
	}

	for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
		workindex[i] = -1;
	}
	for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
		int pindex = CHAR_getDepotPetIndex( charaindex, i);
		if( CHAR_CHECKINDEX( pindex) ) {
			workindex[cnt++] = pindex;
		}
	}
	for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
		CHAR_setDepotPetIndex( charaindex, i, workindex[i]);
	}

	return ret;
}
Esempio n. 25
0
static void NPC_DengonWriteString( int meindex, int talker, int id, char *str )
{
    char buf[256];
    FILE *f;
    int line;
	struct  tm tm1;

    snprintf( buf,sizeof(buf), "%s%d_%d_%d",
              DENGONFILEDIR, CHAR_getInt( meindex, CHAR_FLOOR ),
              CHAR_getInt( meindex, CHAR_X ),
              CHAR_getInt( meindex, CHAR_Y ) );
    
    f = fopen( buf, "r+" );
    if( !f ) return;

    line = id%DENGONFILELINENUM;
    fseek( f, line*DENGONFILEENTRYSIZE, SEEK_SET );

    fprintf( f, "%010d:",id );
	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
    fprintf( f, "%s\n                             %2d/%02d %2d:%02d %s%c", 
    		str, 
    		tm1.tm_mon +1, tm1.tm_mday, tm1.tm_hour, tm1.tm_min,
    		CHAR_getChar( talker, CHAR_NAME),
    		'\0');
    fclose(f);
}
Esempio n. 26
0
BOOL NPC_getLostPetString( int meindex, int toindex)
{
	FILE *fp = NULL;
	char *CdKey=NULL;
	int count=0, i, ltime;
	char filename[256], line[2048], buf1[256];

	for( i=0; i<7; i++)
		strcpy( petstring[i], "");

	CdKey = CHAR_getChar( toindex, CHAR_CDKEY );
	if( CdKey == NULL ) return FALSE;
	sprintf( filename, "lostpet/%s.txt", CdKey);
	if( (fp=fopen( filename, "r")) == NULL ) return FALSE;

	while( fgets( line , sizeof( line ) , fp ) && count < 7){
		if(strlen( line) <= 0 ) continue;
//		if( getStringFromIndexWithDelim( line, "#", 2, buf1, sizeof( buf1)) == FALSE ) return FALSE;
// Terry fix ¶ÁȡʱûÓÐÅжÏʱ¼ä 2004/09/22
		if(getStringFromIndexWithDelim(line,"|",6,buf1,sizeof(buf1)) == FALSE) continue;
		ltime = atoi(buf1);
		ltime = time( NULL) - ltime;
		ltime = ltime/(60*60*24);
		if(ltime > 14) continue;//Ðø·Å14Ìì
// Terry end
		strcpy( petstring[count++], line);
	}

	fclose( fp);
	return TRUE;
}
Esempio n. 27
0
BOOL NPC_QuizItemFullCheck(int meindex,int talker)
{
    int i;
    int itemindex;
    char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
    char buf2[32];


    for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ) {
        itemindex = CHAR_getItemIndex( talker , i );
        if( !ITEM_CHECKINDEX( itemindex) ) {
            return TRUE;
        }
    }

    if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL)
    {
        print("GetArgstrErr:Quiz %s",CHAR_getChar( meindex, CHAR_NAME));
    }

    if(NPC_Util_GetStrFromStrWithDelim( argstr,"EntryItem",	buf2, sizeof( buf2)) != NULL)
    {
        if(NPC_EntryItemCheck( talker, buf2) == FALSE) {
            NPC_Quiz_selectWindow( meindex, talker, 3);
            return  FALSE;

        } else {
            return TRUE;
        }
    }


    return FALSE;

}
Esempio n. 28
0
void NPC_DepotItem_Depot_printWindow( int meindex, int talkerindex)
{
	char	itemstring[65536-1024];
	char	sendstring[65536];
	char	argstr1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *argstr;
	char	buff[1024];
	char	buff2[1024];
	char	buff3[1024];
	int fd;
	
	if( (fd = getfdFromCharaIndex( talkerindex)) == -1 )return;
	argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1));
	snprintf( sendstring, sizeof( sendstring), "1|%s|%s|%s|%s|",
			CHAR_getChar( meindex, CHAR_NAME),
			NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_DRAW, argstr, buff2, sizeof( buff2)),
			NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_ITEMFULL, argstr, buff, sizeof( buff)),
			NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_REALY, argstr, buff3, sizeof( buff3))
			);
	NPC_DepotItem_MakeDepotString( meindex, talkerindex, itemstring, sizeof( itemstring));
	strcat( sendstring, itemstring);
	lssproto_WN_send( fd, WINDOW_MESSAGETYPE_POOLITEMSHOPMAIN,
				WINDOW_BUTTONTYPE_NONE, 
				CHAR_WINDOWTYPE_DEPOTITEMSHOP_GET,
				CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
				sendstring);
	
	//print("\n NPC_DepotItem_Depot_printWindow:%s size:%d ", sendstring, strlen(sendstring));
}
Esempio n. 29
0
void NPC_DepotItem_Item_printWindow( int meindex, int talkerindex)
{
	char	itemstring[65536-1024];
	char	sendstring[65536];
	char	argstr1[NPC_UTIL_GETARGSTR_BUFSIZE];
	char *argstr;
	char	buff2[1024];
	char	buff3[1024];
	char	buff4[1024];
	int fd;
	
	if( (fd = getfdFromCharaIndex( talkerindex)) == -1 ){
		fprint( "err\n");
		return;
	}
	argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1));
	snprintf( sendstring, sizeof( sendstring), "0|%d|%s|%s|%s|%s|",
			CHAR_getfindEmptyDepotItem( talkerindex),
			CHAR_getChar( meindex, CHAR_NAME),
			NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_POOL, argstr, buff2, sizeof( buff2)),
			NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_POOLFULL, argstr, buff3, sizeof( buff3)),
			NPC_PoolItemShop_getMsg_noarg( NPC_POOLITEMSHOP_MSG_REALY, argstr, buff4, sizeof( buff4))
			);

	NPC_DepotItem_MakeItemString( meindex, talkerindex, itemstring, sizeof( itemstring));
	strcat( sendstring, itemstring);
	lssproto_WN_send( fd, WINDOW_MESSAGETYPE_POOLITEMSHOPMAIN,
				WINDOW_BUTTONTYPE_NONE, 
				CHAR_WINDOWTYPE_DEPOTITEMSHOP_ADD,
				CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), sendstring);
	
}
Esempio n. 30
0
/*********************************
*   Øƾ®ØêÈÕľÐ×Áݼ°ÖÊ  
*********************************/
void NPC_LuckyManTalked( int meindex , int talkerindex , char *szMes ,int color )
{

	char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
	char buf[256];
	char token[512];
	int cost;



	/*--  ¼°ó¡±åÖÐÔ¾®Éýµ¤¾®£¢--*/
	if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2) == FALSE) {
		/* ¨àºëØøÓÀÓñ¶¯  ¼°ÐÄ */
		if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;
	}
	
	/*--ɬÀð×ÑëÄÌ»ïë  ÐÄ  ÐÄ--*/
	if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL) {
		print("NPC_ExChange.c TypeCheck: GetArgStrErr\n");
		print("NPCName=%s\n", CHAR_getChar( meindex, CHAR_NAME));
		return;
	}


	NPC_Util_GetStrFromStrWithDelim( argstr,"Stone", buf, sizeof( buf));
	cost = NPC_GetMoney( meindex, talkerindex, buf);

	NPC_Util_GetStrFromStrWithDelim( argstr,"main_msg", buf, sizeof( buf));
	sprintf( token, buf, cost);
	
	NPC_LuckyMan_selectWindow( meindex, talkerindex, 2, token);

}