MainRadiotalkCustom
MPCHAT - CMS хостинг чатов для профессионалов
90   •   Посмотреть все темы

🔒 ОБНОВЛЕНИЯ и НОВЫЕ ФУНКЦИИ!

 

20090
Dimitry @Dimitry
Внимание!!! Некоторые сообщения в этой теме с течением времени могут быть обновлены.

20090
Dimitry @Dimitry
Функция: Меню во фрейм участников.
Вот кому надо меню справа , можете посмотреть в главном чате как оно работает, вот код:

<div id=news></div>
<div id=userslist>Загрузка...</div>
<div id=reklama></div>

<div align=center>
<a href=# onclick="load(1); return false;">Новости</a><br>
<a href=# onclick="load(2); return false;">Участники</a><br>
<a href=# onclick="load(3); return false;">Реклама</a><br>
</div>



<script>

var width='97%';
var bordercolor='gray';

var namealign='center';
var namecolor='white';
var namebgcolor='336699';

var textalign='left';
var textcolor='black';
var textbgcolor='white';

h_news='название';
t_news='текст';
h_users='<table><tr><td><font color='+namecolor+' face=Arial size=2><b>В чате:</td><td><font color='+namecolor+' face=Arial size=2><b><div id=count>0</div></td></tr></table>';
t_users='<div id=users>Загрузка...</div>';
h_reklama='назв. рекламы';
t_reklama='тут реклама';

function menu(id,name,text)
{
document.getElementById(id).innerHTML='<table align=center width='+width+' cellspacing=1 cellpadding=0 border=1 bordercolor='+bordercolor+'><tr><td width=100% height=19 bgcolor='+namebgcolor+' ><table border=0 width=100% cellspacing=0 cellpadding=0><tr><td width=99%><p align=center><b><font color='+namecolor+' face=Arial size=2><b>'+name+'</b></td><td><a href=# onclick="document.getElementById('+"'"+id+"'"+').innerHTML='+"''"+'; return false;"><img src=../blank/img/del.png border=0></a></td></tr></table></td></tr><tr><td><table border=0 width=100% cellspacing=3 cellpadding=0&nbsp; bgcolor='+textbgcolor+' ><tr><td> <font&nbsp; color='+textcolor+' face=Arial, Helvetica, sans-serif size=2 >'+text+'</font> </td></tr></table></td></tr> </table><br>';
}

function load(n)
{
if (n==1) menu('news',h_news,t_news);
if (n==2) menu('userslist',h_users ,t_users);
if (n==3) menu('reklama',h_reklama,t_reklama);
}
load(1);
load(2);
load(3);


</script>

Для установки сотрите старые дивы.
Сначало вы определяете менюшки с ID
<div id=news></div>
<div id=userslist>Загрузка...</div>
<div id=reklama></div>

Затем ниже ссылки на них с функцией load
<div align=center>
<a href=# onclick="load(1); return false;">Новости</a><br>
<a href=# onclick="load(2); return false;">Участники</a><br>
<a href=# onclick="load(3); return false;">Реклама</a><br>
</div>

Потом начинается часть Явы скрипт это настройка дизайна менюшек, потом текста(для вывода участников всё настроенно) и пару функций которых трогать ненадо.

Чтобы добавить новое меню, нужно добавть див, например: <div id=menu></div>
потом ссылку: <a href=# onclick="load(4); return false;">Меню</a><br>
затем:
h_menu='название';
t_menu='текст';
ну и наконец в функцию load : if (n==4) menu('menu',h_menu,t_menu);

Для того чтобы менюшки загружались сразу в самом нижу есть функции load() с номером меню. Т.е. если вы хотите чтобы ваше меню загрузилось просто добавьте ниже load(4);


Ну вот и всё, будут проблемы, спрашивайте!

20090
Dimitry @Dimitry
Информер - выводит различную информацию о чате и его состоянии используя JS

Главный плюс этого стрипта, это то что информацию можно выводить не только на страницах чата, но и к примеру на главной странице вашего сайта, т.е. где угодно!

Рекомендуется использовать загрузку информера не более 1 раза на странице!
Код загрузчика расположите как можно выше на вашей странице, желательно сразу после или до тега <body>.
Пример загрузчика информера:
<script src=index.php?inc=informer&getmsg=1&inchat=1&lastreg=15&lastregok=1&counter=1&birthday=1></script>

- красным указан разделитель & параметров, а жирным цифровые значения параметров.

Все доступные параметры которые вы можете использовать, указываете только те параметры, что необходимы:
getmsg= (1-запрос на вывод кол-ва написаных сообщений за день, 0-выключить)
inchat= (1-запрос на вывод ников в чате, 0-выключить)
counter= (1-запрос на включение счётчика, 0-выключить)
birthday= (1-запрос на вывод именинников,0-выключить)
lastreg= (n-число послед. зарегистр. ников, 1-для вывода кол-ва зарег-ных, 0-выключить)
lastregok= (1-выводить только подтвержденные последние зарегист. ники, 0-выключить)
lastban= (n-число последних строк из банлиста, 0-выключить)
lastmsgs= (n-число последних строк из истории сообщений, 0-выключить)
lastfotos= (n-число последних фото из галереи, 0-выключить)
randfotos= (n-число произвольных фото из галереи, 0-выключить)
lasttopics= (n-число последних тем форума)
forum= (ID-для вывода последних тем определённого форума, 0-вывод со всех форумов)


Если вам не нужна какая либо информация, не используйте эти параметры - это ускорит загрузку страницы!
(чтобы не использовать параметр уберите его из загрузчика, либо установить значение равное 0)

Всё что находится ниже, это код предназначенный для вывода информации из информера.
Вы можете менять код и вид как хотите!!!

Выводит основные показатели статистики
(требуются параметры информера: inchat=1,counter=1,lastreg=1)
<script>
html=
"IP адрес: "+i_ip+"<br>"+
"Создано за: "+i_runtime+" сек<br>"+
"Сообщений сегодня: "+i_msg+"<br>"+
"Всего пользователей: "+i_users+"<br>"+
"Сейчас в чате: "+i_inchat+"<br>"+
"Хостов сегодня: "+i_hosts1+"<br>"+
"Хостов всего: "+i_hosts+"<br>"+
"Хитов сегодня: "+i_hits1+"<br>"+
"Хитов всего: "+i_hits+"<br>"+
"";
document.write(html);
</script>

К примеру для удобства, так можно вывести число зарегистрированных:
Всего пользователей: <script>document.write(i_users);</script>

Выводит участников в чате (выводит разсортировав по полу в переменные uw,um,un)
(требуемые параметры информера: inchat=1)
<script>
uw="";um="";un="";uwc=0;umc=0;unc=0;
for(i=0;i<i_inusers.length;i++)
{
i_nick=i_inusers[i][0];  i_color=i_inusers[i][1];  i_mw=i_inusers[i][2];  i_stat= i_inusers[i][3]; i_room= i_inusers[i][4]; i_userid=i_inusers[i][5];
if(i_mw=='1') {uw+="<tr><td><a href=?inc=info&userid="+i_userid+" target=_blank><font color="+i_color+">"+i_nick+"</font></a>";uwc++;}
else if(i_mw=='0') {um+="<tr><td><a href=?inc=info&userid="+i_userid+" target=_blank><font color="+i_color+">"+i_nick+"</font></a>";umc++;}
else {un+="<tr><td><a href=?inc=info&userid="+i_userid+" target=_blank><font color="+i_color+">"+i_nick+"</font></a>";unc++;}
}
if(!uw) uw="<tr><td>нет таких</td></tr>";
if(!um) um="<tr><td>нет таких</td></tr>";
if(!un) un="<tr><td>нет таких</td></tr>";
html="<table> <tr><td align=center>Девушки "+uwc+"</td></tr> "+uw+"<tr><td align=center>Парни "+umc+"</td></tr>"+um+"<tr><td align=center>Неизвестно "+unc+"</td></tr>"+un+"</table>";
document.write(html);
</script>

Выводит последних 10 зарегистрированных (можно выводить от 1-20)
(требуемые параметры информера: lastreg=10)
<script>
html="Новички:<table>";
for(i=0;i<i_lastreg.length;i++)
{
i_nick=i_lastreg[i][0];  i_color=i_lastreg[i][1];  i_mw=i_lastreg[i][2];  i_stat= i_lastreg[i][3]; i_userid=i_lastreg[i][4];
html+="<tr><td><a href=?inc=info&userid="+i_userid+" target=_blank><font color="+i_color+">"+i_nick+"</font></a>";
}
html+="</table>";
document.write(html);
</script>

Выводит сегодняшних именинников
(требуемые параметры информера: birthday=1)
<script>
html="Именинники:<table>";
for(i=0;i<i_birthday.length;i++)
{
i_nick=i_birthday[i][0]; i_color=i_birthday[i][1]; i_mw=i_birthday[i][2]; i_stat= i_birthday[i][3]; i_userid=i_birthday[i][4];
html+="<tr><td><a href=?inc=info&userid="+i_userid+" target=_blank><font color="+i_color+">"+i_nick+"</font></a>";
}
html+="</table>";
document.write(html);
</script>

Выводит последние 10 сообщений в чате (возможно от 1-100)
(требуемые параметры информера: lastmsgs=10)
Используются номера переменных такие же как позиции в функции f() в скриптах чата начиная с 0.
<script>
for(var i=i_lastmsgs.length-1;i>=0;i--) {
msg=i_lastmsgs[i];if(!msg[6]) msg[6]="gray";if(!msg[7]) msg[7]="black";
document.write("<font color="+msg[6]+"><b>"+msg[2]+":</b></font> <font color="+msg[7]+">"+msg[4]+"</font> ("+msg[5]+") <br>");
}
</script>

- для вывода в другом порядке замените синее на for(var i=0; i<i_lastmsgs.length;i++) {

Выводит последние 10 строк забаненных (возможно любое положительное число)
(требуемые параметры информера: lastban=10)
<script>
html="<table><tr><td>Где<td>Выполнил<td>Заблокирован<td>Причина<td>Время<td>Осталось</tr>";
if(!i_lastban.length) html+="<tr><td colspan=6 align=center>Ничего не найдено!</td></tr>";
for(var i=i_lastban.length-1;i>=0;i--) {
ban=i_lastban[i];
html+="<tr><td>"+ban[0]+"<td><a href=?inc=info&userid="+ban[6]+" target=_blank>"+ban[1]+"</a><td><a href=?inc=info&userid="+ban[7]+" target=_blank>"+ban[2]+"</a><td>"+ban[3]+"<td>"+ban[4]+"<td>"+ban[5]+" мин</tr>";
}
html+="</table>";
document.write(html);
</script>

- для вывода в другом порядке замените синее на for(var i=0; i<i_lastban.length;i++) {

Выводит 10 последних фотографий из галереи (возможное число 1-20)
(требуемые параметры информера: lastfotos=10)
<script>
html="";
if(!i_lastfotos.length) html+="Нет фотографий!";
for(var i=i_lastfotos.length-1;i>=0;i--) {
foto=i_lastfotos[i];
html+="<a href=?inc=gallery&foto="+foto[0]+" target=_blank title='Дата: "+foto[1]+"\nГалерея: "+foto[2]+"\nПодпись: "+foto[3]+"'><img src=gallery/trumb/"+foto[0]+".jpg border=0></a> ";
}
document.write(html);
</script>

- для вывода в другом порядке замените синее на for(var i=0; i<i_lastfotos.length;i++) {

Выводит 10 произвольных фотографий из галереи (возможное число 1-20)
(требуемые параметры информера: randfotos=10)
<script>
html="";
if(!i_randfotos.length) html+="Нет фотографий!";
for(var i=0; i<i_randfotos.length;i++) {
foto=i_randfotos[i];
html+="<a href=?inc=gallery&foto="+foto[0]+" target=_blank title='Дата: "+foto[1]+"\nГалерея: "+foto[2]+"\nПодпись: "+foto[3]+"'><img src=gallery/trumb/"+foto[0]+".jpg border=0></a> ";
}
document.write(html);
</script>

- произвольные фотографии в целях экономии выбираются из последних 100, а не из всей галлереи

Выводит 10 последних активных тем форума (возможен вывод до 100 последних тем)
(требуемые параметры информера: lasttopics=10, forum=ID)
Вы можете вывести последние темы одного из разделов форума указав forum=ID.
Укажите вместо forum=0 - чтобы выводить последние темы со всего форума.
<script>
var html="<table width=90%><tr><td colspan=2 class=title>Последние активные темы на форуме</td><td width=100 class=title>Автор</td><td width=60 class=title align=center>Ответов</td><td width=150 class=title>Обновления</td></tr>";
for(var i=0;i<i_lasttopic.length;i++) html+="<tr><td>"+(i+1)+".</td><td><a href=?inc=forum&forum="+i_lasttopic[i][11]+"&topic="+i_lasttopic[i][0]+">"+i_lasttopic[i][1]+"</a><br>"+i_lasttopic[i][3]+"</td><td><a href=?inc=info&userid="+i_lasttopic[i][12]+" target=_blank>"+i_lasttopic[i][2]+"</a></td><td align=center>"+i_lasttopic[i][6]+"</td><td><a href=?inc=info&userid="+i_lasttopic[i][10]+" target=_blank>"+i_lasttopic[i][4]+"</a><br>"+i_lasttopic[i][5]+"</td></tr>";
html+="</table>";
document.write(html);
</script>

Загрузка скриптов в отдельный фаил

Вы можете создать любой HTML фаил и загрузив в него информер добавить любой из скриптов вывода, например список последних зарегистрированных или список кто в чате. Учтите что если вы создали фаил на другом домене, то для загрузки информера нужно указвать полный путь к нему, например:
<script src=http://mpchat.com/chat/index.php?inc=informer></script>

20090
Dimitry @Dimitry
Скриптик идеальной установки тегов в чате

В фильтрацию необходимо добавить:
#[b]^<b>^
#[u]^<u>^
#[i]^<i>^


потом, это вставляется в нижний фрейм:

<script>
function mptags(t1,t2) {
var obj=document.getElementsByName("text0")[0]; obj.focus();
var pos1 = obj.selectionStart, pos2 = obj.selectionEnd;
if(typeof(pos1)=="number") {
obj.value = obj.value.substring(0, pos1) + t1 + obj.value.substring(pos1, pos2) + t2 + obj.value.substring(pos2, obj.value.length);
var pos3=pos2+t1.length+t2.length; obj.setSelectionRange(pos3,pos3);
}
else if(document.selection) {
var range=document.selection.createRange();
range.text=t1+range.text+t2; range.select();
}
else obj.value += t1 + t2;
obj.focus();
}
</script>

а это кнопки для вставки тегов в поле ввода сообщения(ес-но, можно изменять по своему вкусу). Вставлять их можно куда угодно. Я вставил в фрейм участников:

<a href=javascript:mptags('[b]','[/b]'); target=chat>[b]</a>
<a href=javascript:mptags('[u]','[/u]'); target=chat>[u]</a>
<a href=javascript:mptags('[i]','[/i]'); target=chat>[i]</a>

или

<input type=button onclick="mptags('[b]','[/b]');" value=[b]>
<input type=button onclick="mptags('[u]','[/u]');" value=[u]>
<input type=button onclick="mptags('[i]','[/i]');" value=[i]>

Вопрос: Нафига это надо, ведь есть же встроенная функция SendTo() ?
Ответ: при использовании вышеприведенной функции, теги вставляются в ту часть сообщения, куда вы тыкнули мышкой, а не в конец. Так же, можно выделить часть сообщения и, нажатием одной кнопки, эта часть обрамится тегами.

Работает везде.

20090
Dimitry @Dimitry
Полезные функции

Получение переменных методом GET(через URL) в HTML

К примеру: index.html?chat=mychat&nick=mynick&id=a6d7e8c8a8d7f66d78s8a7
<script>
//GET viriables
var query=unescape(location.search.substr(1));
var badstr=new Array('<','>','"',"'",'`','%','#','\\');
for(i=0;i<badstr.length;i++) query=query.split(badstr[i]).join();
var get=new Array();
var a=query.split("&");
for(var i=0; i<a.length;i++) {var j=a[i].split("="); get[j[0]]=j[1];}

var chat=get['chat'];
var nick=get['nick'];
var id=get['id'];
</script>

Cookie через Javascript - запись и чтение

/* Функции чтения Cookie */
function getcookie(key) {
str=document.cookie;len=str.length; if(len==0) return "";
start=str.indexOf(key + "="); if(start==-1) return "";
start=start+key.length+1;
end=str.indexOf(";",start); if(end==-1) end=len;
return unescape(str.substring(start,end));
}

/* Функции записи Cookie */
function setcookie(key,str,min) {
if(!key) return;
if(!min) min=60*24*365;
var date = new Date();
date.setTime(date.getTime()+(min*60*1000));
document.cookie = key+"="+str+"; expires="+date.toGMTString()+"; path=/";
}

HTML include - в хтмл фаил вставляет другой хтмл или пхп фаил.
Работает как include() в пхп, но если данные функции отключенны у юзера работать не будет 😒
<script>
function include(id, url) {
var element = document.getElementById(id);
if (!element) {alert("Bad ID-element!");return;}
var req = false;
// For Safari, Firefox, and other non-MS browsers
if (window.XMLHttpRequest) {try {req = new XMLHttpRequest();} catch (e) {req = false;}}
// For Internet Explorer on Windows
else if (window.ActiveXObject) {try {req = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {try {req = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) { req = false;}}}
// If active supported
if (req) {req.open('GET', url, false); req.send(null);element.innerHTML = req.responseText;}
else element.innerHTML ="Include not supported!";
}
</script>

<span id="htmlsite">
<script>include("htmlsite", "file.html");</script>
</span>

20090
Dimitry @Dimitry
Форум для чатов
**********

На данный момент проходит разработка форума и для лучшего обозрения решил сделать сводку инфы о форуме.

Файлы и директории:
style.css - используется форумом для настройки стиля - без особых стилей форум будет отображаться неверно!
forum.inc - Шаблон форума, всё что выводится настраивается именно там через JS .. до любых мелочей (полная настройка)
forum/
forum/pid.sys - последний номер сообщения
forum/tid.sys - посл. номер темы
forum/forum.sys - список форумов
forum/online.sys - список ОНЛАЙН
forum/FID/forum.sys - список тем форума FID
forum/FID/TID.sys - список сообщений темы TID форума FID (хоть и .dat редактировать вручную несоветуется - ещё не решено)
forum/avator/ - аваторы участников

FID - номер форума, TID - номер темы

Функции:
В главной админке - добавление и удаление форумов (номер, название, описание, модераторы) также необходимо сразу удалить или добавить форум в нужное место в шаблоне!
wr(forums[1]);
wr(forums[2]);
...

Модераторские возможности:
- удаление тем в форуме
- удаление сообщений в темах
- редактирование всех сообщений/тем форума (оставляется сообщение отредактированно)
- закрытие и открытие тем форума
- закрепление(выделение) тем форума
- перенос тем
- настройка доступов к форумам


Обычные функции:
- возможны теги, смайлы и цитирование
- редактирование своей темы или сообщения

Отображения:
- отображение иконок у форумов и тем (новые, закрытые, закреплённые)
- аваторы
- участники онлаин и их расположение (форум, тема)
- общяя статистика кол-во сообщений и тем
- в форумах отображаются модераторы и кол. тем, сообщений, обновления (автор и дата)
- в темах кол. сообщений, автор, обновления
- в сообщениях время, номер, ссылка на пост, автор (кол. сообщений, ранг, аватор, ссылки), меню модерирования

Общая инфа о движке:
- обработчик forum.php 250 строк (8кб) - время обработки 0.006-0.01 сек
- шаблон forum.inc 200 строк (10кб) - время вывода от 0.01 (зависит от модема ( 😀 )
- форум не использует картинок, несмотря на это выглядит довольно таки хорошо.

Настройки

В шаблоне форума для настроек тега [img] вы можете найти следующие параметры:
/* img_max - макс. картинок к отображению в одном сообщении вместо ссылок */
var message_img_max=10; /* сообщение */
var signature_img_max=0; /* подпись */

20090
Dimitry @Dimitry
Функция меняет стиль всех документов и фреймов - мгновенно.

Если вы хотите менять общий стиль внутри всего чата и в скриптах чата уже есть функция setstyle():
(например установите этот код в фрейм участников)
<select onchange="mystyle=this.value; setstyle(mystyle);">
<option value='style.css'>-=стандарт=-</option>
<option value='style1.css'>Стиль 1</option>
<option value='style2.css'>Стиль 2</option>
</select>

Если вы хотите менять стиль не внутри чата, а на других страницах:
function setstyle(cssfile) {
if(!cssfile) return;
var obj=document.getElementsByTagName("link"); if(obj && obj[0]) obj[0].href=cssfile;
}

<select onchange="setstyle(this.value)">
<option value='style.css'>-=стандарт=-</option>
<option value='style1.css'>Стиль 1</option>
<option value='style2.css'>Стиль 2</option>
</select>

Нужно создавать стили с различными расцветками и фонами, например как в данном примере это файлы: style1.css и style2.css

20090
Dimitry @Dimitry
Галерея - что-то новое и невероятное 😀 (новый релиз)

Описание (просьба прочитать всё)

Параметры
- разрешение загрузки фотографий и указание макс. числа (у каждого пользователя своя галерея под названием его ника)
- установка максимальных размеров для фото и мини-фото (автоизменение)
- установка числа к отображению минифоток на одной странице
- назначение модераторов
- указание автоподписи фото (например в фото внизу справа будет пропечатываться адрес чата) - работает также и на фото в анкетах

Функции в главной админке
- галереи создаются и автоматически при добавлении фото
- добавление фото с подписью и указанием категории (галереи)
- редактирование фото, подписи и изменение галереи для неё
- удаление фото
- возможность переименовать и удалить галерею и всего содержимого
- обзор галерей с кол-вом фотографий
- обзор фотографий в галереи (мини-изображение и информация о фото)
- удобное модерирование (всегда находитесь в активной галерее)

Сама галерея
+ полная настройка вида через шаблон gallery.inc
- отображение последних фоток минифотками (отображение разделов)
- при просмотре фото - отображение пред. и след. минифотки, отображение подписи, оценки и коментариев со всеми наворотами
- добавление коментариев и оценки (оценить может каждый ник 1 раз при добавлении коментария)
- модерирование галереи при авторизации (удаление фото и коментариев по отдельности)
- загрузка пользователями фото(если включенно) с подписью , просмотр своей галереи и удаление своих фото каждым пользователем

Режимы загрузки и их различия (в параметрах)
1. Загрузка только админом
- отображаются все галереи
- отсутствие формы загрузки пользователями
2. Разрешенна загрузка пользователями
- список ВСЕХ галерей неотображается
- отображается АЛФАВИТ (по названиям галерей)
- отображается форма загрузки пользователями
- появляется модераторские возможности для пользователей к своим фотографиям

Ресурсоёмкость
Теоретически галерея не образует особой нагрузки и должна выдержать 10 000 фотографий. НО рекомендуется ограничиться 1000 (чтобы было всё стабильно) и не засорять её. 1000 фотографий 640х480 занимают примерно 50мб.

Установка - Если вы уже установили новую галерею - просто востановите стандартный шаблон gallery.inc чтобы небыло ошибок.

Новая установка:
1. Удалите вашу старую галерею gallery/ через webftp
2. Зайдите в главной админке в шаблон галереи и востановите стандартный фаил gallery.inc
3. В модерировании галереи нажмите установить.
4. Настройте параметры для галереи

Советы
1. Если у вас мало места делайте размеры фотографий меньше, запретите загрузку пользователями или просто оплатите чат для получения 100mb.
2. Если вы используете загрузку фотографий пользователями - можно запретить загрузку фото в анкету(убрав форму из шаблона) удалить эти фотографии и в анкете поставить ссылку на галереб пользователя (<a href=?inc=gallery&gallery=%nick%>Фотографии пользователя</a>)

Отображение числа фотографий в галереи у пользователей
Для отображения достаточно отредактировать шаблон анкеты info.inc
1. Составим вывод информации
Между <script> </script> добавим
gallery='%gallery%';
if(gallery>0) gallery='<a href=?inc=gallery&gallery=%nick% target=gallery>Моя галерея ('+gallery+')</a>'; else gallery="";

2. Отредактируем строку с обычной фотогр. , сообщение о фотках в галереии будет ниже (foto+"<br>"+gallery)
<tr><td>Фотографии</td><td><script>document.write(foto+"<br>"+gallery); </script></td></tr>

!!! Примечание !!!
Если загрузка пользователями выключенна, то число сразу приравнивается 0.
Следовательно строка: Моя галерея (число) - показанна не будет! (показывается только если есть фото)
Обновление счётчика числа фотографий происходит после загрузки пользователем или удаления его фотографии.
(Но не после удаления в админке админом, удаляйте под модератором в самой галерее!)

Чтобы счётчик у пользователя обновился он должен провести какие либо действия в галереи!

Всё - теперь можно приступить к заполнению галереи)

20090
Dimitry @Dimitry
Загрузка иконок пользователями и использование в качестве граф. ников

Чтобы использовать загрузку граф. ников через иконки в параметрах для иконок выберите подходящий размер, а в начале функции F() в скриптах нужно поставить:
if(cmd==6) gna[nick]=icon;
А до этой функции:
var icon_on=0;
var icon_on=0;
var pu = new Array;
function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12) {
if(ign_ok(nick) && cmd!=6 && cmd!=7) return 0;

/* Присвоение переменных */
if(cmd==5) {kill=var9; timeout=var10;}
else if(cmd==6 || cmd==7) {
inchat=text; mw=var9; st=var10; icon=var11; status=var12;
if(colornick=='') colornick=fontnick[0];
if(color=='') color=fonttext[0];
/* скрыть ник невидимки */
if(invisible[nick]) return;
}
else {
sizenick=var9;size=var10;facenick=var11;face=var12;
if(colornick=='') colornick=fontnick[0];
if(sizenick=='') sizenick=fontnick[1];
if(facenick=='') facenick=fontnick[2];
if(color=='') color=fonttext[0];
if(size=='') size=fonttext[1];
if(face=='') face=fonttext[2];
}

if(cmd==6) gna[nick]=icon;

...

Отключение граф. ников для пользователей

<input type=checkbox onclick="if(this.checked) parent.use_gn=1; else parent.use_gn=0;" checked> - граф. ники

20090
Dimitry @Dimitry
Функция скрытия/раскрытия отображения любого ХТМЛ

Для скрытия кода пользуемся стилями display:none; (скрыть) и display:block; (раскрыть)

<div id=hide1 style="display:none;">
Тут любой ХТМЛ код который поумолчанию скрытый
</div>
<a href=# onclick="obj=document.getElementById('hide1'); if(obj.style.display=='none') obj.style.display='block'; else obj.style.display='none'; return false;">показать/скрыть</a>

hide1 - это ID элемента который должен быть скрыт!

20090
Dimitry @Dimitry
Никлист - разделение по полам и статусам (обновлено для 4й версии)

Сейчас я раскажу подробно как сортировать никлист по полу и по статусам.

Пояснение:
if(mw=='0') - это мальчики
if(mw=='1') - это девочки
if(mw=='') - это пол невыбран
if(st=='1') - это статус 1 (обычно админ)
if(st=='2') - это статус 2 (обычно модератор)

Вступление:
Если Вы используете скрипты чата от 23.07.2013, то Вам можно активировать разделение по полам в редактировании скриптов в самом верху:
var useseparate=1;

А теперь для старых скриптов и для более тонкой настройки!


[1]. Обновление: Главная админка -> Скрипты в чате -> находим /* [Функции формирования никлиста] */

Раскоментируем строки убрав //

/* Функции добавления и удаления пользователей в массиве никлиста */
var uc = 0;
var us = new Array();
var ucc=new Array();
var index=0;
function separate(obj,c) {
if(ucc[obj+"c"]==null) ucc[obj+"c"]=c; else ucc[obj+"c"]+=c;
document.getElementById(obj+"c").innerHTML=ucc[obj+"c"];
if(c==1) return document.getElementById(obj).rowIndex+1;
}
function seprules(type,st,mw) {
if(!usesep) return;
//if(mw=='0') index=separate("man",type);
//else if(mw=='1') index=separate("woman",type);
//else if(mw=='') index=separate("noman",type);
}

[2].Установка
userlist="<table id=ul width=100%></table>";

меняем на (пример для разделения по полу)

userlist="<table id=ul width=100%>"+
"<tr id=woman><td colspan=5>Деффки</td><td id=womanc>0</td></tr>"+
"<tr id=man><td colspan=5>Пацаны</td><td id=manc>0</td></tr>"+
"<tr id=noman><td colspan=5>Нечто</td><td id=nomanc>0</td></tr>"+
"</table>";

У вас наверное возник вопрос, а что такое красное - это ID(может быть любое слово кроме users и ul), которое присваевается полю разделителя в таблице пользователей. Важно чтобы ID сортировки к примеру man имело счётчик manc.(т.е. всегда добавляется "c") И эти поля в функции seprules должны соответствовать ID в табличке! Настройте условия в этой финкции!!!

[3]. Дополнительно: Как использовать разделение без счётчиков?

Также как описанно выше, но из функции separate() нужно убрать строку:
document.getElementById(obj+"c").innerHTML=ucc[obj+"c"];

И табличка в функции loadframes() будет выглядит так:
userlist="<table id=ul width=100%>"+
"<tr id=woman><td colspan=6>Деффки</td></tr>"+
"<tr id=man><td colspan=6>Пацаны</td></tr>"+
"<tr id=noman><td colspan=6>Нечто</td></tr>"+
"</table>";

[4]. Дополнительно: Как использовать разделение по статусам или вместе?

Со статусами нужно прописать примерно так:
if(st=='1') index=separate("adm",type);
else if(st=='2') index=separate("mod",type);
else index=separate("other",type);

Последняя строка без if() чтобы все остальные статусы попали в поле other.

Совместное разделение:
if(st=='1') index=separate("adm",type);
else if(st=='2') index=separate("mod",type);
else if(mw=='0') index=separate("man",type);
else if(mw=='1') index=separate("woman",type);
else if(mw=='') index=separate("noman",type);

Также незабудьте настроить табличку около функции loadframes(), так чтобы все поля используемые в separate условиях там были!

Отредактировано Dimitry - 04.08.2007
20090
Dimitry @Dimitry
Модификация TOP-100

Редактирование рейтинга посетителей остаётся пока невозможным, но появились новые возможности!
1. Возможность вывода рейтинга по рефералам
2. Возможность выбора отображения некоторых параметров, в определённой последовательности.

Изменённые и нововведённые переменные
**********all=100&only=12345678&sort=ref
Оранжевое: all и означает максимальное число пользователей выводимое в рейтинге (all=1 - все пользователи)
Зелёное: новая переменная only(только) означает какие параметры и в какой последовательности выводить (1 указывать необязательно, автоматически первое, это ники)
Красное: sort и означает название поля по которому будет сортировка.

Значения по умолчанию для ссылки ?inc=top100
sort=onlinetime all=100 only=12345

Номера и имена полей
1 - nick - ники, всегда в первой колонке
2 - onlinetime- время онлайн
3 - msg - число сообщений
4 - activity - активность (высчитывается из 2 и 3)
5 - views - число просмотров анкеты
6 - ref - число приведённых пользователей (реф)
7 - gamewins - число отгаданных вопросов в викторине
8 - points - число набранных очков, за активность

Примеры ссылок

Лучшие 10 рефералов
?inc=top100&all=10&only=6

20 самых активных пользователя (с доп. выводом времени и числа сообщений)
?inc=top100&all=20&only=423&sort=activity

20 умнейших в викторине
?inc=top100&all=20&only=7

50 самых богатых по очкам
?inc=top100&all=50&only=8

20090
Dimitry @Dimitry
Звуковой сигнал при получении сообщения (обновлено 23.09.2016)

Разместите этот код в шаблоне чат внутри chat.inc и загрузите звук в sound1.mp3 в корень чата, или укажите другой путь к файлу.
<script>function sound(num) {var obj=document.getElementById("sound"+num); if(obj) obj.play();}</script>
<audio id=sound1 src='sound1.mp3' style='display:none;'></audio>

Тут первая строка это сам скрипт включающий звук, втокая сам проигрыватель с загруженным звуком.
Вы можете использовать несколько звуков установив несколько таких проигрывателей с id=sound1, sound2 и т.д.
Включение звуков выполняется функций sound(1); где номер это номер идентификатора звука.

Теперь осталось только пройти в скрипты и добавить строчку в функцию f() куданибуть до if(cmd==0) {
//включение звука для всех сообщений обращённых вам
if(tonick==mynick && loaded==1) sound(1);

или
//включение звука для всех приватных сообщений обращённых к вам
if(tonick==mynick && loaded==1 && (cmd==1 || cmd==2)) sound(1);

20090
Dimitry @Dimitry
Комнаты(и их использование) - редактирование через главную админку

Теперь настройка комнат проходит в главной админке в удобной форме!
Можно установить доступ по статусам а также разрешить только определённым модераторам модерирование в опред. комнатах!

Установка - если этого нет в фрейме участников
Для установки выбора комнат при входе в чат, код генерируется в главной админке автоматически!
Чтобы добавить форму выбора комнат в чате, добавим например в фрейм участников такой скрипт:
<script>
/* Форма для перехода по комнатам (видна если есть комнаты) */
if(parent.rooms.length>1) {
document.write("<center><select class=ok name=setroom onchange=\"parent.setmyroom(this.value);\">");
for(var i=0;i<parent.rooms.length;i++) {if(i==parent.myroom) sel="selected"; else sel="";
document.write("<option value="+i+" "+sel+">"+parent.rooms[i][0]+" (0)");
}
document.write("</select></center><br>");
}
</script>

- также в скриптах чата должна быть функция setmyroom!

20090
Dimitry @Dimitry
Переход автостатуса в онлайн - при написании сообщения

Если включен автостатус и вы напишете в чате, можно опятя автоматически поставить статус онлайн, но с задержкой в пару секунд!
Чтобы установить, найдите в Скриптах чата в разделе функции нижнего фрейма, функцию msg_send!
В конец этой функции просто добавьте:
if(away[laststatus]) window.setTimeout("setstatus(0);",2000);

- красным номер статуса онлайн, обычно 0

20090
Dimitry @Dimitry
Виртуальный магазин
(только для платных чатов)

Виртуальный магазин позволяет покупать и продавать вещи в виде картинок используя в виде валюты
заработанные пункты. Пункты назначаются за активное участие в чате, написанные сообщения,
проведённое время в чате и другое. Купленные вещи можно также дарить используя коментарий от своего имени.

Магазин ещё не протестирован на то какую нагрузку он вызывает поэтому число покупаемых предметов ограниченно до 100 для каждого пользователя. Админам и модераторам рекомендутся ставить высокие цены на вещи, чтобы их было купить труднее и интереснее - без захламления! Вирт. магазин вместе с вашей фантазией - сделают чат невероятно интересным. Если у вас есть вопросы и предложения, задавайте их на форуме.

Установка ссылки на магазин внутри чата
<a href=# onclick="parent.wo('index.php?inc=shop&'+parent.yourkey,'Магазин','700','500','yes');return false">Магазин</a>

Установка преобретённых вещей в анкету
<div id=shoptable align=center>У вас нет вещей из магазина!</div>
<script>
var obj=document.getElementById('shoptable');
var td=2; var max=10; var reverse=1;
function printitems(page) {
var is=0; if(items.length==0) return;
var wr="<table align=center>";
for(var i=0;i<items.length;i++) {
if(page*max<=i && (page+1)*max>i) {
if(is==0) wr+="<tr>";
var k=i; if(reverse) k=items.length-1-i;
wr+="<td align=center><img src=data/shop/"+items[k][0]+".jpg title='"+items[k][1]+"\n"+items[k][2]+" "+items[k][3]+"\n"+items[k][4]+"'></td>";
is++; if(is==td) is=0;
}}
wr+='</table>';
if(page>0) wr+="<a href=# onclick='printitems("+(page-1)+"); return false;'>Назад</a> ";
if(i>(page+1)*max) wr+="<a href=# onclick='printitems("+(page+1)+"); return false;'>Дальше</a>";
obj.innerHTML=wr;
}
printitems(0);
</script>

- где td это число вещей в ряду, max это число вещей к отображению на одной странице, а reverse (0-выкл, 1-вкл) отображение сначало новых вещей!

20090
Dimitry @Dimitry
Кланы - вот оно, долгожданное (только для платных чатов)

Функции администрации
- в параметрах можно установить стоимость создания клана в пунктах
- и минимальную стоимость для вступления в один из кланов
- в модерации новая ссылка на вирт. кланы
- через эту ссылку можно выбрать любого главу клана, удалить его клан или просто отредактировать

Функции пользователей
- набрав допущенное число пунктов каждый пользователь может основать свой клан
- он может указать своё число пунктов для вступления в клан
- он может редактировать название, описание, а также загружать иконку (до 20х20) и логотип (до 160х160) клана
- при загрузке изображений они автоматически уменьшаются, нет необходимости подбирать размеры
- каждый пользователь который не состоит в клане может вступить в любой клан заплатив взнос, а также покинуть его в любое время бесплатно

Отображение
- на главной странице отображается список/рейтинг всех кланов отсортированных по количиству народа в клане
- каждому клану при вступлении нового соклановца приписывается число пунктов взноса
- возможно сортировать каны по любым параметрам, название, дате, по админам, по взносам, пунктам, и людям
- на странице списка кланов доступны такие фенкции как удалить свой клан или вступить/покинуть другой клан
- при нажатии на клан отображается вся информация о клане включая лого, описание и ники всех соклановцев
- в АНКЕТЕ пользователя возможно отображать всю информацию о клане, кроме описания и ников соклановцев

PS. на данный момент никлист добавлению новых компанентов не поддаётся, т.е. установить иконку клана в никлист нельзя!

Установка и настройка кланов
1. Настроить в главной админке параметры пунктов для создания и вступления в кланы
2. Установите ссылку на кланы, например в нижний фрейм
<a href=# onclick="parent.wo('index.php?inc=clan&'+parent.yourkey,'Кланы','700','500','yes');return false" target=setting title=Кланы>Кланы</a>

3. Установите отображение клана в анкете участника. Для этого необходимо в "Шаблоны -> Анкета" добавить скрипт вывода информации о клане.
<tr><td>Клан:</td><td>
<script>
var wr='';
if(!clans.length) wr='нет';
for(var i=0;i<clans.length;i++) {clan=clans[i];
if(clan[7]) wr+='<img src=data/clan/'+clan[0]+'.gif> ';
wr+='<a href=?inc=clan&clan='+clan[0]+' target=_blank>'+clan[1]+' ('+clan[6]+')</a> ';
if(clan[3]=='%nick%') wr+='(админ)';
wr+='<br>';
break;
}
document.write(wr);
</script>
</td></tr>

- тут идёт определение являтся ли он админом, потом есть ли иконка у клана, потом выводит это всё вместе с названием, или пишет нет в случае если участник не состоит в клане! Если хотите выводить более одного клана, уберите красное!

Дополнительно: описание параметров выводимых в анкету - (для профи)
В анкету выводится массив clan, если участник не в клане, то он пустой.
Элементами массива: например clan[0] - это ID-номер клана.
0 - ID-номер клана
1 - название клана
2 - дата создания
3 - админ клана
4 - взнос клана
5 - пункты клана
6 - число соклановцев
7 - означает что есть иконка (clan/ID.gif)
8 - означает что есть лого (clan/ID.jpg)
При этом если проверить присутствие лого, то при желании можно вывести и его
if(clan[8]) document.write("<img src=data/clan/"+clan[0]+".jpg>");

На этом всё! Наслаждайтесь новой функцией сервиса - Кланы.
Если у вас есть обосновынные улучшения по кланам, скрипт может быть усовершенствован!

20090
Dimitry @Dimitry
Движок новостей на JS с выводом в фрейм сообщений

Данный движок информирует пользователя о новых новостях с помощью alert() и выводит только новые новости!

В скриптах чата находим данный участок:
/* Дозагрузка - выполняется после загрузки фрейма сообщений */
function onloaded() {
window.setTimeout('scrolled=1;',5000);
if(interval) window.clearTimeout(interval);
if(topic) wr(topic);

вместо красной строчки вставим движок новостей )
wr("<"+"script src=news.js?"+Math.random()+"></"+"script>");

А это сам фаил движка с новостями news.js
/* Не храните много строк с новостями (не более 10), удаляйте строки со старыми новостями, номер новости должен всегда увеличиваться */
var news=new Array();
news[3]="01.12.06 первая новость<br>";
news[4]="02.12.06 вторая новость<br>";

var lastnew=getcookie("lastnew");
var c=0;
for(var i in news) if(i>lastnew) {wr(news[i]);lastnew=i;c++;}
setcookie('lastnew',lastnew,10000000000);
if(c>0) alert('Для вас есть '+c+' новых новости!');

PS. в скриптах должны быть функции getcookie и setcookie (просто не у всех есть)

Также можно выводить эти новости для определённого статуса или ника, добавляем красное:
только для одного ника
for(var i in news) if(i>lastnew && mynick=='НИК') {wr(news[i]);lastnew=i;c++;}

или status==1 - только для админов
for(var i in news) if(i>lastnew && status==1) {wr(news[i]);lastnew=i;c++;}

20090
Dimitry @Dimitry
ПЕРЕХОД на безфреймовую версию ЧАСТЬ 1 (часть 2 ниже)

Новая безфреймовая 4я версия мпчата
(при проблемах пишем в эту тему https://vmeste.eu/forum?tid=14524)

Давно хотел избавиться от фреймов в мпчате и вот добрался. На данный момент старая версия остаётся полностью рабочей и
если вы не удалите старые файлы, то даже после перехода вы всё ещё сможете переключиться на неё! (не рекомендуется)

Преимущества
- отсутствие рекламного фрейма в бесплатных чатах (вместо него появится спойлер по центру который можно сразу закрыть)
- никаких фреймов кроме ифрейма сообщений и викторины, положение полей настраивается стилями
- весь дизайн внутри чата в одном шаблоне
- дизайн совместим с новым DOCTYPE за счёт которого во всех бразуерах всё отображается одинаково
- возможно удобное использование и добавление любых блоков (спойлеров) в любое место окна, также с наложением слоями
- удобная интеграция вебкамер (для платных чатов)
- все обновления будут проводиться только для новой версии

Переход на новую версию

1. Включить новую версию можно в параметрах в общих настройках.
Стандартные файлы необходимые для работы новой версии, шаблон чата (chat.inc) и новые Скрипты чата (jscripts.dat) уже созданы автоматически. Заходим в чат, всё работает!

Переход со старой версии

2. В указанные места шаблона чата chat.inc, убрав код по умолчанию, можно просто вставить свой код фреймов:
<!-- USERS FRAME -->
<div id=usersdiv style='position:absolute; overflow-y:auto; width:270px; top:45px; right:0px; bottom:65px; padding:10px; border:1px gray solid;'>
тут вставляется содержимое вашего фрейма участников users.html от <body> до </body>
</div>

<!-- CHAT FRAME -->
<div id=chatdiv style='position:absolute; width:100%; height:60px; left:0px; bottom:0px; padding-left:10px; border:1px gray solid;'>
тут вставляется содержимое вашего нижнего фрейма chat.html от <body> до </body>
</div>

3. Далее производим изменения вашего кода в вашблоне чата chat.inc:
- изменить в созданном chat.inc write на hidden, в строке должно получиться так:
<form action='index.php?inc=write' method=post target="hidden" name="fmsg" enctype="multipart/form-data" onsubmit="return (parent.msg_send());">

- изменить в chat.inc setroom на selectroom, в строке должно получиться так:
document.write("<select class=ok name=selectroom onchange=\"parent.setmyroom(this.value);\">");

4. Теперь скопируем содержимое ваших скриптов из scripts.dat в jscripts.dat (новый фаил скриптов) например через WebFTP

5. Далее производим изменения в jscripts.dat:
- найти и вырезать из скриптов все "parent.users." и "parent.chat."
- найти и изменить в скриптах все "write." на "hidden."
- находим функцию loadframes() и заменим 3 строки:
if(parent.users&&parent.left&&parent.privat&&parent.chat)
if(parent.users.document&&parent.left.document&&parent.privat.document&&parent.chat.document)
if(parent.users.document.getElementById('users')&&parent.chat.document.getElementsByName('text0')[0]){

на одну
if(parent.left && parent.left.document && document.getElementById('users') && document.getElementsByName('text0')[0]){

- чуть ниже находится код:
/* Подготовка фрейма привата */
if(parent.privatok==1) {
parent.privat.document.write(privatframe);
parent.privat.document.body.innerHTML='';}

меняем его на
/* Подготовка фрейма привата */
if(parent.privatok==1) {document.getElementById("privatdiv").innerHTML='';}

- теперь находим этот коментарий и обновляем строчку
/* - cmd=1 для обычного привата, фрейм или общее окно, cmd=2 приват в новом окне */
if(cmd==1 && privatok==1) {var obj=document.getElementById("privatdiv"); obj.innerHTML+="<div>"+towr+"</div>";obj.scrollTop=1000000;}

6. Дополнительные исправления в скриптах (также обязательные)
- для перехода по комнатам, в одном месте нужно изменить в скриптах setroom на selectroom, в строке должно получиться так:
obj=document.getElementsByName("selectroom")[0];

- исправление загрузки никлиста в IE, добавить в 2х местах "var" перед строкой ul=document.getElementById('ul'); чтобы получилось так:
var ul=document.getElementById('ul');

- исправляем включение викторины, обновите функцию startgame в скриптах
/* Загружаем викторину в верхушку чата */
var gameon=0;
function startgame(){
if(gameon==0){
parent.gameframe.location.href='http://'+domain+':7777/?chat='+chatlogin;
gameon=1; document.getElementById('gamediv').style.display="block";
}
else {
parent.gameframe.location.href='start.html';
gameon=0; document.getElementById('gamediv').style.display="none";
}
}

- исправляем скрол совместимость с DOCTYPE для IE, в скриптах находим функцию up и производим изменения синим:
/* Функции плавной прокрутки и включение дозагрузки */
var loaded=0;
var scrolled=0;
function up() {
if(loaded==0) onloaded();
var scr=parent.left.document.body;
if(parent.left.document.compatMode != 'BackCompat')
scr=parent.left.document.documentElement;
scr1=scr.scrollTop;
scr2=parent.left.innerHeight;
if(scr2==undefined) scr2=scr.clientHeight;

scr3=scr.scrollHeight;
if (scr1+scr2>=scr3) return;
if (scrolled==1) {if (scr1+scr2+250<scr3) return;}
parent.left.scroll (0, scr =1+Math.round (scr1+1*(scr3-scr2-scr1)/(1+slowscroll)));
setTimeout ('up()', 20);
}

(при обнаружении новых, список пополнится)

- исправление функции смены дизайнов для смены дизайна самого документа
/* Устанавливает другой стиль(дизайн) для всех фреймов чата */
function setstyle(cssfile) { if(!cssfile) return;
var obj=document.getElementsByTagName("link"); if(obj && obj[0]) obj[0].href=cssfile;
if(parent.frames.length) {for(i=0; i<parent.frames.length; i++) {obj=parent.frames[i].document.getElementsByTagName("link")[0];if(obj) obj.href=cssfile;}}
}

- исправление работы привата в отдельно-открытом окне, в шаблоне privat.inc в строчке изменяем на синее
<form name=fmsg action=index.php?inc=write&nick=%nick%&id=%id% method=post target=hidden onSubmit='leer_rus(text0.value);'>

7. Если всё работает и файлы mleft.html top.html chat.html users.html frames.inc вам ненужны, их можно удалить

20090
Dimitry @Dimitry
ПЕРЕХОД на безфреймовую версию ЧАСТЬ 2 (часть 1 выше)

Скрываем iframe с сообщениями left и выводим сообщения сразу в DIV (leftdiv)

Данное обновление только для чатов безфреймовой версии - исправляет баг google chrome,
при котором если поступают новые сообщения и вы производите выбор в select, то поле выбора сбрасывается.

Обновление затронет только 3 файла: irc.html(фрейм сообщений), chat.inc(шаблон внутри чата) и jscripts.dat(скрипты внутри чата)

1. В файле irc.html изменений немного, так как теперь этот фрейм скрыт, вывод информации перед сообщениями будет чуть иначе.
Просто добавляем синюю строку для очистки фрейма сообщений и начальной загрузки содержимого, ниже из HTML её можно убрать:
<!DOCTYPE html>
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<link rel=STYLESHEET type="text/css" href="style.css">
</head>
<script>
/* Функция - перенаправитель команд */
function f(var1,var2,var3,var4,var5,var6,var7,var8,var9,var10,var11,var12,var13,var14) {
parent.f(var1,var2,var3,var4,var5,var6,var7,var8,var9,var10,var11,var12,var13,var14);
}
/* Задаём изначальное содержимое перед сообщениями */
parent.document.getElementById("leftdiv").innerHTML="<center><font size=4><b>Мы приветствуем Вас в нашем чате!</b></font></center><br>";

</script>
<body onload="if(confirm('Извините, связь прервалась! Перезагрузить чат?')) parent.loadframes();">
<!--Этот фаил должен быть не больше 1кб, ниже будет загрузка JS-сообщений-->

2. Теперь в файле chat.inc вынесем iframe left наверх в скрытой форме и обновим DIV сообщений leftdiv, изменения показаны синим:
<!-- HIDDEN FRAMES -->
<iframe name=hidden width=0 height=0 style="display:none;"></iframe>
<iframe name=left width=0 height=0 style="display:none;"></iframe>


<!-- TOP FRAME -->
<div id=topdiv style="position:absolute; height:40px; left:0px; right:0px; top:0px; padding-left:10px; border:1px gray solid;">

</div>

<!-- GAME FRAME -->
<div id=gamediv style="position:absolute; height:60px; left:0px; right:295px; top:45px; display:none; z-index:1; border:1px gray solid;">
<iframe name=gameframe src=start.html style="position:absolute; width:100%; height:100%; border:0px;"></iframe>
</div>

<!-- LEFT FRAME -->
<div id=leftdiv style="position:absolute; overflow-y:scroll; padding-left:10px; left:0px; right:295px; top:45px; bottom:65px; border:1px gray solid;">

</div>

3. Ну и скрипты чата jscripts.dat, тут работы побольше, сначала находим функции up() и wr() и обновим их полностью:

/* Функции плавной прокрутки и включение дозагрузки */
var loaded=0;
var scrolled=0;
function up() {
if(loaded==0) onloaded();
var leftdiv=document.getElementById("leftdiv");
var left=leftdiv.scrollHeight-leftdiv.clientHeight-leftdiv.scrollTop;
if(left<=0 || (scrolled==1 && left>250)) return;
leftdiv.scrollTop=Math.ceil(leftdiv.scrollTop+left/(1+slowscroll));
setTimeout('up()',20);
}

/* Удаляет старое сообщ. печатает новое и прокручивает вниз */
function wr(text) {
var leftdiv=document.getElementById("leftdiv");
if(loaded==1 && maxmsgs>0) {
var count=leftdiv.getElementsByTagName('div').length;
if(maxmsgs<count) leftdiv.removeChild(leftdiv.getElementsByTagName('div')[0]);
}
var div=document.createElement('div'); div.innerHTML=text;
leftdiv.appendChild(div);
if(loaded==1) up();
}

Далее в функции f() находим красное и меняем на document.getElementById("leftdiv")
почти в начале функции
if(loaded==1) parent.left.document.getElementsByTagName("body")[0].innerHTML="";text="очищаю фрейм сообщений";}

почти в самом нижу
parent.left.document.body.innerHTML="Подождите, осуществляется переход в другую комнату ...";

ещё чуть ниже
parent.left.document.body.innerHTML="";

в результате получаем такие строки

if(loaded==1) document.getElementById("leftdiv").innerHTML="";text="очищаю фрейм сообщений";}
...
document.getElementById("leftdiv").innerHTML="Подождите, осуществляется переход в другую комнату ...";
...
document.getElementById("leftdiv").innerHTML="";

Ну и на последок нужно обновить пару строк в функциях loadframes() и ajax() - они находятся в самом низу скриптов, изменения синим:
if(ajaxon) {ajax(1); return;} - этот код был просто перемещён выше

/* [Подготовка фреймов и загрузка сообщений] */
var userlist="<table id=ul width=100%></table>";
function loadframes() {
if(document && parent.left && parent.left.document && document.getElementById('users') && document.getElementsByName('text0')[0]){
/* Последняя стадия загрузки */
if(interval) window.clearInterval(interval);
/* Подготовка фрейма привата */
if(parent.privatok==1) {document.getElementById("privatdiv").innerHTML='';}
/* Обнуление переменных */
loaded=0;
scrolled=0;
myhistory=myhistory1;
for(var i=0;i<rooms.length;i++) rooms[i][1]=0;
/* Подготовка таблицы никлиста */
uc = 0;
us = new Array();
ucc= new Array();
document.getElementById('users').innerHTML=userlist;
/* Загрузка движка сообщений */
document.getElementById("leftdiv").innerHTML='Загрузка ...';
if(ajaxon) {ajax(1); return;}

parent.left.location.href='irc.html?'+myid+'&r='+Math.random();
/* Загрузка актуального стиля, если был изменён */
if(mystyle) window.setTimeout("setstyle(mystyle);",3000);
/* Проверка непрерывного соединения */
interval=window.setTimeout(
'if(location.port!=88 && confirm("Проблема потокового соединение через стандартный порт. Нажмите ОК для перехода на другой порт или Отмена для дальнейших действий.")) location.href="http://"+location.hostname+":88"+location.pathname+"?"+yourkey; '+
'else if(confirm("Нажмите OK если хотите перейти на ажакс движок чата или Отмена для продолжения загрузки.")) ajax(1); '
,1000*15); /* Время для проверки потокового движка 15 сек */
}}
var interval=window.setInterval("loadframes()",100);

var ajaxon=0;
var http = null;
var ajaxreq=0;
function ajax(start) {
if(ajaxreq) return; ajaxreq=1;
var file="./ajax.html?sess="+myid+"&r="+Math.random(1);
if(start) {ajaxon=1; file+="&start=1";
document.getElementById("leftdiv").innerHTML="";
window.setInterval("ajax()",15000);
}
//Mozilla, Opera, Safari, IE7, else IE6
if (typeof XMLHttpRequest != 'undefined') {http = new XMLHttpRequest();}
else {
try {http = new ActiveXObject("Msxml2.XMLHTTP");}
catch(e) {try {http = new ActiveXObject("Microsoft.XMLHTTP");} catch(e) {http = null;}}
}
if (http) {
http.open('GET', file, true);
http.onreadystatechange = new Function("if(http.readyState != 4) return;parent.left.document.write(http.responseText);ajaxreq=0;");
http.send(null);
}}


В закрытой теме нельзя отправлять сообщения.