##############################################################
## Название мода: Подарки
## 
## Описание мода: Мод позволяет дарить подарки пользователям за очки сидирования
##
## Уровень инсталяции: простой
## Время установки: 5 минут
Сделать запросы в базу из файла bb_presents.sql
##############################################################

#
#-----[ Открыть ]------------------------------------------
#

init_bb.php

#
#-----[ найти ]------------------------------------------
#

define('BB_WORDS',                'bb_words');

#
#-----[ доавить перед ]-----------------------------------
#

define('BB_PRESENTS',			  'bb_presents');
define('BB_USERS_PRESENTS',   	  'bb_users_presents');

#
#-----[ открыть ]------------------------------------------
#

admin_board.php

#
#-----[ найти ]------------------------------------------
#

'SEED_BONUS_USER_REGDATE' => $new['seed_bonus_user_regdate'],

#
#-----[ AFTER, ADD ]-----------------------------------
#

'PRESENTS' => $new['presents'],

#
#-----[ OPEN ]------------------------------------------
#

admin_board.tpl

#
#-----[ найти ]------------------------------------------
#

<tr>
	<td><h4>{L_SEED_BONUS}</h4></td>
	<td>
		<label><input type="radio" name="seed_bonus_enabled" value="1" <!-- IF SEED_BONUS_ENABLED -->checked="checked"<!-- ENDIF --> />{L_ENABLED}</label>&nbsp;&nbsp;
		<label><input type="radio" name="seed_bonus_enabled" value="0" <!-- IF not SEED_BONUS_ENABLED -->checked="checked"<!-- ENDIF --> />{L_DISABLED}</label>
	</td>
</tr>

#
#-----[ после добавить ]-----------------------------------
#

<tr>
	<td><h4>{L_PRESENTS}</h4></td>
	<td>
		<label><input type="radio" name="presents" value="1" <!-- IF PRESENTS -->checked="checked"<!-- ENDIF --> />{L_ENABLED}</label>&nbsp;&nbsp;
		<label><input type="radio" name="presents" value="0" <!-- IF not PRESENTS -->checked="checked"<!-- ENDIF --> />{L_DISABLED}</label>
	</td>
</tr>

#
#-----[ открыть ]------------------------------------------
#

viewprofile.php

Найти:
	'GROUP_MEMBERSHIP'     => false,
	'TRAF_STATS'           => !(IS_AM || $profile_user_id),

Вставить после:
	'EDIT_PROF'			   => $profile_user_id,
	'SHOW_PRESENTS'		   => $bb_cfg['presents'],

#
#-----[ найти ]------------------------------------------
#

print_page('usercp_viewprofile.tpl');

#
#-----[ перед добавить ]-----------------------------------
#

if ($bb_cfg['seed_bonus_enabled'] && $bb_cfg['presents'])
{

	$template->assign_vars(array(
		'SHOW_USER_PRESENTS' => false,
	));
	$count = DB()->fetch_row("SELECT COUNT(present_id) as present FROM ". BB_USERS_PRESENTS ." WHERE user_id = {$profiledata['user_id']}");

	$start = isset($_REQUEST['start']) ? abs(intval($_REQUEST['start'])) : 0;

	if($count['present'])
	{
		$sql = DB()->fetch_rowset("SELECT pre.*, p.*, u.username, u.user_rank FROM ". BB_USERS_PRESENTS ." pre, ". BB_PRESENTS ." p, ". BB_USERS ." u WHERE pre.present_id = p.present_id AND pre.given_id = u.user_id AND pre.user_id = {$profiledata['user_id']} ORDER BY pre.time DESC LIMIT $start, 8");

		
		$template->assign_vars(array(
		'SHOW_USER_PRESENTS' => true,
		));
		$presentrow = array();
		foreach($sql as $row)
		{
			$presentrow[] = $row;
		}

		if (!$presentrow)
		{
			$template->assign_block_vars('not_present', array());
		}

		for ($j = 0; $j < count($presentrow); $j += 4)
		{
			$template->assign_block_vars('presentrow', array());

			for ($i = $j; $i < ($j + 4); $i++)
			{
				if( $i >= count($presentrow) )
				{
					$template->assign_block_vars('presentrow.not', array());
					continue;
				}
				
				if ($presentrow[$i]['given_hide'] && !IS_ADMIN)
				{
					$given_user = '<b>'. $lang['ANONYMOUS'] .'</b>';
				}
				elseif ($presentrow[$i]['given_hide'] && IS_ADMIN)
				{
					$given_user = profile_url(array('username' => "<b>[{$presentrow[$i]['username']}]</b>", 'user_id' => $presentrow[$i]['given_id'], 'user_rank' => $presentrow[$i]['user_rank']));
				}
				else
				{
					$given_user = profile_url(array('username' => "<b>{$presentrow[$i]['username']}</b>", 'user_id' => $presentrow[$i]['given_id'], 'user_rank' => $presentrow[$i]['user_rank']));
				}

				$template->assign_block_vars('presentrow.presentcol', array(
					'NAME'			=> $presentrow[$i]['present_name'],
					'PIC'			=> $presentrow[$i]['present_pic'],
					'PRICE'			=> $presentrow[$i]['present_price'],
					'ID'			=> $presentrow[$i]['present_id'],
					'GIVEN'			=> $given_user
				));
			}
		}

		generate_pagination(PROFILE_URL . $profiledata['user_id'], $count['present'], 8, $start, false, 'presents');
	}
}

#
#-----[ открыть ]------------------------------------------
#

main.php

#
#-----[ FIND ]---------------------------------------
#

$lang['BONUS_RETURN'] = 'Вернуться к обмену Сид бонусов';

#
#-----[ AFTER, ADD ]-------------------------------------------
#

// Presents
$lang['PRESENTS'] = 'Подарки за СидБонус';
$lang['PRESENTS_OFF'] = 'Мод отключен администратором';
$lang['PRESENTS_CATALOG'] = 'Каталог подарков';
$lang['BAY_PRESENT'] = 'Купить подарок';
$lang['GIVE_PRESENT'] = 'Подарить подарок';
$lang['ADD_PRESENT'] = 'Добавить подарок';
$lang['CHANGING_PRESENT'] = 'Изменение подарка';
$lang['PRESENT'] = 'Подарок';
$lang['PRESENT_NAME'] = 'Название подарка';
$lang['PRESENT_PRICE'] = 'Цена подарка';
$lang['PRESENT_TYPE'] = 'Тип';
$lang['PRESENT_ACTIVE'] = 'Активный';
$lang['PRESENT_DESC'] = 'Описание подарка';
$lang['PRESENT_ERROR_PIC'] = 'Картинка отсутствует';
$lang['PRESENT_ERROR_NAME'] = 'Не указано название подарка';
$lang['PRESENT_ERROR_PRICE'] = 'Не указано цена подарка';
$lang['PRESENT_ERROR_TYPE'] = 'Не указан тип подарка';
$lang['ANONYMOUS'] = 'Аноним';
$lang['NAME'] = 'Название';
$lang['GIVE'] = 'Подарить';
$lang['ADD'] = 'Добавить';
$lang['PRESENT_MAKE_ANONYMOUS'] = 'Сделать подарок анонимным';
$lang['PRESENT_TO'] = 'Кому подарить';
$lang['PRESENT_WISH'] = 'Пожелание';
$lang['PRESENT_NOT_SELECT'] = 'Вы не выбрали подарок';
$lang['PRESENT_NO'] = 'Такого подарка не существует';
$lang['PRESENT_DELETE'] = 'Подарок удален';
$lang['PRESENT_NOT_SELECT_USER'] = 'Вы не выбрали кому подарите подарок';
$lang['PRESENT_NOT_FOUND_USER'] = 'Пользователь не найден';
$lang['PRESENT_NOT_YOURSELF'] = 'Нельзя себе делать подарки';
$lang['PRESENT_NOT_ANONYMOUS'] = 'Подарки можно дарить только пользователям';
$lang['PRESENT_NOT_BOT'] = 'Нельзя делать подарки боту';
$lang['PRESENT_TOO_HIGH'] = 'Этот подарок для вас слишком дорогой';
$lang['PRESENT_GIFTED'] = 'Подарок подарен пользователю';
$lang['PRESENT_NEW'] = 'У вас новый подарок';
$lang['PRESENT_COMMENT'] = 'Так же вам оставил пожелаение';
$lang['PRESENT_INCOGNITO'] = 'оставшийся неизвестным';
$lang['PRESENT_PRICE_MESS'] = '(у вас в наличии <b>%s</b>)';
$lang['PRESENT_MESSAGE'] = 'Пользователь %s подарил Вам подарок.%s[br][br]Вы его можете посмотреть в своём профиле перейдя по [url=%s]ссылке[/url].[br][br][align=right]Сообщение сгенерировано автоматически.[/align]';
$lang['PRESENT_BONUS'] = 'Описание подарка';
$lang['PRESENT_ADD'] = 'Подарок добавлен';
$lang['PRESENT_NO_ADD'] = 'Подарок не добавлен';
$lang['PRESENT_EDITED'] = 'Подарок изменен';
$lang['WRONG_FORMAT'] = 'Нн верный формат файла';

// Presents types
$lang['PRESENT_SPECITY_TYPE'] = 'Укажите тип';
$lang['PRESENT_TIMELESS'] = 'Вечные подарки';
$lang['PRESENT_BALOONS'] = 'Воздушные шары';
$lang['PRESENT_MASKS'] = 'Головные уборы и маски';
$lang['PRESENT_FOR_LOVERS'] = 'Для влюбленных';
$lang['PRESENT_FOR_GIRLS'] = 'Для девушек';
$lang['PRESENT_FOR_MEN'] = 'Для мужчин';
$lang['PRESENT_FOOD'] = 'Еда';
$lang['PRESENT_ANIMALS'] = 'Животные';
$lang['PRESENT_COMPUTERS'] = 'Компьютерная техника';
$lang['PRESENT_SUMMER'] = 'Летние подарки';
$lang['PRESENT_PRIVATE'] = 'Личный инструктор';
$lang['PRESENT_STUFFED_TOYS'] = 'Мягкие игрушки';
$lang['PRESENT_DRINKS'] = 'Напитки';
$lang['PRESENT_KISSES'] = 'Поцелуи';
$lang['PRESENT_OTHER'] = 'Разное';
$lang['PRESENT_SUNGLASSES'] = 'Солнцезащитные очки';
$lang['PRESENT_SPORT'] = 'Спорт';
$lang['PRESENT_STATUES'] = 'Статуэтки';
$lang['PRESENT_DECORATION'] = 'Украшения';
$lang['PRESENT_HOBBY'] = 'Хобби';
$lang['PRESENT_FLOWERS'] = 'Цветы';
$lang['PRESENT_NEW_YEAR'] = 'Новогодние подарки';

#
#-----[ FIND ]---------------------------------------
#

$lang['DELETE_IMAGE'] = 'Удалить изображение';

#
#-----[ BEFORE, ADD ]-------------------------------------------
#

$lang['SELECT_IMAGE'] = 'Выберите изображение';

#
#-----[ открыть  ]------------------------------------------
#
P.S. у меня работает без замены 
functions.php

#
#-----[ заменить функцию ]---------------------------------------
#

function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = true, $style = false)
{
	global $lang, $template;

// Pagination Mod
	$begin_end = 3;
	$from_middle = 1;
/*
	By default, $begin_end is 3, and $from_middle is 1, so on page 6 in a 12 page view, it will look like this:

	a, d = $begin_end = 3
	b, c = $from_middle = 1

 "begin"        "middle"           "end"
    |              |                 |
    |     a     b  |  c     d        |
    |     |     |  |  |     |        |
    v     v     v  v  v     v        v
    1, 2, 3 ... 5, 6, 7 ... 10, 11, 12

	Change $begin_end and $from_middle to suit your needs appropriately
*/

	$total_pages = ceil($num_items/$per_page);

	if ( $total_pages == 1 || $num_items == 0 )
	{
		return '';
	}

    if($style) $style = "#$style";

	$on_page = floor($start_item / $per_page) + 1;

	$page_string = '';
	if ( $total_pages > ((2*($begin_end + $from_middle)) + 2) )
	{
		$init_page_max = ( $total_pages > $begin_end ) ? $begin_end : $total_pages;
		for($i = 1; $i < $init_page_max + 1; $i++)
		{
			$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . $base_url . "&amp;start=" . ( ( $i - 1 ) * $per_page ) . $style .'">' . $i . '</a>';
			if ( $i <  $init_page_max )
			{
				$page_string .= ", ";
			}
		}
		if ( $total_pages > $begin_end )
		{
			if ( $on_page > 1  && $on_page < $total_pages )
			{
				$page_string .= ( $on_page > ($begin_end + $from_middle + 1) ) ? ' ... ' : ', ';

				$init_page_min = ( $on_page > ($begin_end + $from_middle) ) ? $on_page : ($begin_end + $from_middle + 1);

				$init_page_max = ( $on_page < $total_pages - ($begin_end + $from_middle) ) ? $on_page : $total_pages - ($begin_end + $from_middle);

				for($i = $init_page_min - $from_middle; $i < $init_page_max + ($from_middle + 1); $i++)
				{
					$page_string .= ($i == $on_page) ? '<b>' . $i . '</b>' : '<a href="' . $base_url . "&amp;start=" . ( ( $i - 1 ) * $per_page ) . $style .'">' . $i . '</a>';
					if ( $i <  $init_page_max + $from_middle )
					{
						$page_string .= ', ';
					}
				}
				$page_string .= ( $on_page < $total_pages - ($begin_end + $from_middle) ) ? ' ... ' : ', ';
			}
			else
			{
				$page_string .= '&nbsp;...&nbsp;';
			}
			for($i = $total_pages - ($begin_end - 1); $i < $total_pages + 1; $i++)
			{
				$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>'  : '<a href="' . $base_url . "&amp;start=" . ( ( $i - 1 ) * $per_page ) . $style .'">' . $i . '</a>';
				if( $i <  $total_pages )
				{
					$page_string .= ", ";
				}
			}
		}
	}
	else
	{
		for($i = 1; $i < $total_pages + 1; $i++)
		{
			$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . $base_url . "&amp;start=" . ( ( $i - 1 ) * $per_page ) . $style .'">' . $i . '</a>';
			if ( $i <  $total_pages )
			{
				$page_string .= ', ';
			}
		}
	}

	if ( $add_prevnext_text )
	{
		if ( $on_page > 1 )
		{
			$page_string = ' <a href="' . $base_url . "&amp;start=" . ( ( $on_page - 2 ) * $per_page ). $style .'">' . $lang['PREVIOUS'] . '</a>&nbsp;&nbsp;' . $page_string;
		}

		if ( $on_page < $total_pages )
		{
			$page_string .= '&nbsp;&nbsp;<a href="' . $base_url . "&amp;start=" . ( $on_page * $per_page ) . $style .'">' . $lang['NEXT'] . '</a>';
		}

	}

	$pagination = ($page_string) ? '<a class="menu-root" href="#pg-jump">'. $lang['GOTO_PAGE'] .'</a> :&nbsp;&nbsp;'. $page_string : '';
	$pagination = str_replace('&amp;start=0', '', $pagination);

	$template->assign_vars(array(
		'PAGINATION'   => $pagination,
		'PAGE_NUMBER'  => sprintf($lang['PAGE_OF'], ( floor($start_item/$per_page) + 1 ), ceil( $num_items / $per_page )),
		'PG_BASE_URL'  => $base_url,
		'PG_PER_PAGE'  => $per_page,
	));

	return $pagination;
}

#
#-----[ OPEN ]------------------------------------------
#

main.css

#
#-----[ ADD ]-------------------------------------------
#

#present {
	height:150px; position: relative;
	background:url(../images/gift_bg.png) repeat-x bottom;
	border: 1px solid #ccc;
}
#present .lblock {
	background:url(../images/left.png) no-repeat top right;
	width:85px; height:32px;
	line-height:35px; position:absolute;
	top:135px; left:-7px;
	color: #FFFFFF;
}
#present .rblock {
	color:#FFF; background:url(../images/right.png) no-repeat top left;
	font-weight: bold; width:72px; height:32px;
	line-height:35px; position:absolute;
	top:135px; right:-6px;
}
#present b { color: #FFFFFF; }
#present b:hover { color: #FF8000;}
#present b:active { color: #FF8000 !important; position: relative; top: 1px; }
#present a:hover, #present a:active {
	text-decoration: none !important;
}1px; }
#present a:hover, #present a:active {
	text-decoration: none !important;
}

#
#-----[ OPEN ]------------------------------------------
#

usercp_viewprofile.tpl

Найти:
		<p class="mrg_4"><div class="user_avatar">{AVATAR_IMG}</div></p>

Вставить перед:
		<!-- IF SHOW_PRESENTS -->
		<h4 class="cat border bw_TB"><a href="presents.php<!-- IF not EDIT_PROF -->?u={PROFILE_USER_ID}<!-- ENDIF -->">{L_GIVE_PRESENT}</a></h4>
		<!-- ENDIF -->


#
#-----[ найти ]------------------------------------------
#



</table><!--/user_profile-->

#
#-----[ после вставить ]-------------------------------------------
#

<!-- IF PAGINATION -->
<p class="small" style="padding: 1px 6px 5px;"><b>{PAGINATION}</b></p>
<!-- ENDIF -->
<!-- IF SHOW_PRESENTS && SHOW_USER_PRESENTS -->
<table class="bordered w100" width="100%">
   <tr><th class="thHead" colspan="4">{L_GIVE_PRESENT}</th></tr>
	<!-- BEGIN presentrow -->
	<tr>
		<!-- BEGIN presentcol -->
		<td class="row1 pad_10" width="25%">
		<div id="present" class="pad_10">
			<center><div style="color: #c80; font-size:14px;">{presentrow.presentcol.NAME}</div>
			<img src="styles/images/presents/{presentrow.presentcol.PIC}">
			<div class="lblock tLeft nowrap">&nbsp;&nbsp;&nbsp;{presentrow.presentcol.GIVEN}</div></center>
		</div>
		</td>
	    <!-- END presentcol -->
        <!-- BEGIN not -->
		<td class="row1" align="center" width="25%">&nbsp;</td>
		<!-- END not -->
	</tr>
    <!-- END presentrow -->
    <!-- BEGIN not_present -->
	<tr>
		<td colspan="3" class="row1 tCenter pad_8">{L_NONE}</td>
	</tr>
    <!-- END not_present -->
</table>
<!-- ENDIF -->

#
#-----[ SAVE/CLOSE ALL FILES ]--------------------------
#