ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
83   •   Посмотреть все темы

🔒 Готовые решения для чатов (старая версия с фреймами)

 

458
ridz @ridz
Последовательный вывод одного фото через установленный интервал времени из общего числа случайных фото
Предварительно установите информер с параметром randfotos (возможное число 1-20)
Не ставьте второй информер если он уже у вас стоит!!! просто добавьте параметр
<script src=index.php?inc=informer&getmsg=1&inchat=1&lastreg=15&counter=1&birthday=1&randfotos=20></script>

Более подробно как ставить информер смотреть здесь https://vmeste.eu/forum?pid=5680#p5680
После этого в нужное место поставьте код
<div id = "randfoto"></div>
<script>
html="";
time=5;// задержка смены фото в секундах
var i=0;
function randfotoshow()
{ foto=i_randfotos[i];
if(!i_randfotos.length) {html+="Нет фотографий!"} else {html="<a href=?inc=gallery&foto="+foto[0]+" target=_blank title='Дата: "+foto[1]+"\nГалерея: "+foto[2]+"\nПодпись: "+foto[3]+"'><img height='90' src=gallery/trumb/"+foto[0]+".jpg border=0></a> ";
i++;}
if (i==i_randfotos.length) {i=0};
document.getElementById('randfoto').innerHTML=html;
if(i_randfotos.length) {window.setTimeout("randfotoshow()", 1000*time)}
}
randfotoshow();
</script>

Желательно установить одинаковую высоту всех фото (отмечено красным)
Вариант с небольшим эффектом появления и исчезновения фото и ник под фото со ссылкой на анкету
<div align="center" id="randfoto" ></div>
<script>
html="";
time=3;// задержка смены фото в секундах
widthmax=180;//максимальная ширина фото
height=90;//высота фото

var i=0;
var width="";
function randfotoshow()
{ if (i==i_randfotos.length) {i=0};foto=i_randfotos[i];
if(!i_randfotos.length) {html+="Нет фотографий!"} else {html="<a href=?inc=gallery&foto="+foto[0]+" target=_blank title='Дата: "+foto[1]+"\nГалерея: "+foto[2]+"\nПодпись: "+foto[3]+"'><img id="+i+" height="+height+" onload=\"imgonload(this.id);\" style=\"visibility: hidden\" src=gallery/trumb/"+foto[0]+".jpg border=0></a><br /><a title='"+foto[2]+"\nАнкета' href=?inc=info&nick="+foto[2]+" target=_blank>"+foto[2]+"</a>";
}
document.getElementById('randfoto').innerHTML=html;}
function imgonload(id) {
width=document.getElementById(id).width;
if (width>widthmax) width=widthmax;
document.getElementById(id).width=0 ;
document.getElementById(id).style.visibility = "visible";
imgshowplus(id);i++;}
function imgshowplus(id)
{ if (document.getElementById(id).width!=width) {
document.getElementById(id).width+=1;
window.setTimeout("imgshowplus("+id+")", 10) }
else {window.setTimeout("imgshowminus("+id+")",1000*time)}
}
function imgshowminus(id)
{ if (document.getElementById(id).width!=0) {
document.getElementById(id).width-=1;
window.setTimeout("imgshowminus("+id+")", 10) }
else {randfotoshow()}
}
randfotoshow();
</script>

Добавлено красным ограничение ширины для слишком длинных фото и желаемая высота фоток
Как это работает можно посмотреть тут **********

2536
удалён @crigon
Кнопки как в VOC
by admiral

I. вкл/откл скролинга - https://vmeste.eu/forum?pid=170797#p170797
===========
II. фильтр:
1. Где нибудь между <head> и </head> вставляем скрипт вывода и переключения кнопки:
<script language="JavaScript">
<!--
if (document.images)
{
chat_filter_on = new Image(24,24);
chat_filter_on.src ="ссылка на картинку отключеного фильтра";

chat_filter_off = new Image(24,24);
chat_filter_off.src ="ссылка на картинку включеного фильтра";;
}

ss=0;
function click_filter()
{
if (ss==0) {
alert('Фильтр [ВКЛЮЧЕН] - выключив его, в общем канале Вы будете получать все сообщения.');

document.all('filter_img').src = chat_filter_on.src;
document.all('filter_img').alt = 'Фильтр [ВКЛЮЧЕН] - выключив его, в общем канале Вы будете получать все сообщения.';

parent.symbols[0] = '<p style="display: none">';
ss=1;
parent.loadframes();
} else {
alert('Фильтр [выключен] - включив его, в общем канале Вы будете получать сообщения, адресованные ЛИЧНО вам.');

document.all('filter_img').src = chat_filter_off.src;
document.all('filter_img').alt = 'Фильтр [выключен] - включив его, в общем канале Вы будете получать сообщения, адресованные ЛИЧНО вам.';

parent.symbols[0]="";
ss=0;
parent.loadframes();
}
}
//-->
</script>

2. В нужном месте фрейма вставляем саму кнопку:
<a href="#" onclick="click_filter();return false"><img border="0" name="filter_img" id="filter_img" alt="Фильтр [выключен] - включив его, в общем канале Вы будете получать сообщения, адресованные ЛИЧНО вам." src="ссылка на картинку отключеного фильтра" width="20" height="24"></a>

===========
III. кнопка очистки окна сообщений:
вставляем туда где хотим видеть нашу кнопку очистки окна сообщений:
<a href="#" onClick="parent.left.document.getElementsByTagName('body')[0].innerHTML=''; return false;"><img src="ссылка на кнопку очистки окна сообщений" width="23" height="24" border="0" alt="Очистить общий канал?"></a>

===========
IV. кнопка очистки привата в отдельном фрейме:
<a href="#" onClick="parent.privat.document.getElementsByTagName('body')[0].innerHTML=''; parent.privatframe=parent.mainframe; return false;"><img src="ссылка на кнопку очистки привата в отдельном фрейме" width="23" height="24" border="0" alt="Очистить приват?"></a>

458
ridz @ridz
Неразлучный бот ))) или бот всегда с вами в любой комнате
В скриптах чата добавьте красное
/* Добавления в никлист бота-робота, ниже структура */
room_r=myroom;status_r=0;inchat_r='1';
if(nick_r) {loaded=1; f(room_r,6,nick_r,'',inchat_r,'',color_r,'',mw_r,st_r,icon_r,status_r,love_r,clan_r);loaded=0;}
}

Если Бот пропадает проверьте стоят ли кавычки вокруг единички

458
ridz @ridz
Автоматическое уменьшение размера загружаемых изображений в чат через кнопку обзор (если размер превышает заданный вами)
1часть В скрипты чата
в /* [Функции - общие] */
добавить
/* Функция изменения загружаемой картинки */
var id_img = 0;
function imgminimum(obj)
{var imgmax = 500; // максимальный размер картинки
var h = obj.height;
var w = obj.width;
if (h>imgmax||w>imgmax){if (h>w) {obj.height=imgmax}else {obj.width=imgmax}};
if (!obj.id){var scr=parent.left.document.body;
if(parent.left.document.compatMode != 'BackCompat')
scr=parent.left.document.documentElement;
scr.scrollTop=scr.scrollHeight;
obj.id=id_img++;}
}

Красным добавлен скролинг(прокрутка лога сообщений вниз) после загрузки картинки

2 часть И после
/* [Функция - вывода сообщений и команд] */

var pu = new Array;
var pt = new Array;
function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12,var13,var14) {
if(ign_ok(nick) && cmd!=6 && cmd!=7) return;
if(nick==nick_r && room!=room_r) return;

добавить строку

text=text.replace("<img src=tmp","<img onload=parent.imgminimum(this) src=tmp");

Картинка будет в логе пропорциональна и размер по ширине и высоте не превысит указанный вами.

или добавить так

text=text.replace(/.br..img.src.(tmp.(.+\.jpg)).border.0..br./igm, "<img onload=parent.imgminimum(this) src=$1 border=0>");

тогда картинка будет в одной строке с ником.

458
ridz @ridz
Информер о входящих и выходящих из чата Если в чате несколько комнат информер поможет отследить кто в какое время и в какой комнате появился входя в чат или вышел из чата. Внимание!!! обязательно добавьте зелёное кто уже ставил скрипт.
Админка -=Фреймы=- Фрейм участников в удобное вам место добавить
<div id=addusers align=center></div>

Затем админка -=Модерация=- Скрипты в чате в разделе /* [Функции - формирования никлиста] */ /* Функции добавления и удаления пользователей в массиве никлиста */ добавить отмеченное красным
var npvnick = 0;
function add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan){
if(loaded==0) return;
var l=us.length;
for(var i = 0;i<l;i++ ) if(us[i]!=null && us[i][0]==nick)break;
us[i]=new Array(nick,colornick,st,mw,icon,status,room,love,clan);
if (i==l) {uc++; update(room,1);}
if (uc>npvnick&&nick!=nick_r){var pvnick = " в комнате "+rooms[room][0]+" появилась ";
if(mw=='0') pvnick=" в комнате "+rooms[room][0]+" появился ";
if(mw=='') pvnick=" в комнате "+rooms[room][0]+" появилось ";
var pvobj=parent.users.document.getElementById("addusers"); if(pvobj) pvobj.innerHTML=time+pvnick+nick;
npvnick=uc;
}

if(room==myroom) {
nickid="!"+nick;
obj=parent.users.document.getElementById(nickid);
ul=parent.users.document.getElementById('ul');
if(obj) ul.deleteRow(obj.rowIndex);
index=ul.rows.length;
seprules(1,st,mw);
var obj=ul.insertRow(index); obj.id=nickid;
format(i,obj);
}}

function del(nick,colornick,st,mw,icon,status,inchat,time,room) {
if(loaded==0) return;
for(var i=0; i<us.length; i++)
if( us[i] != null && us[i][0] == nick ) {uc--; update(us[i][6],-1); us[i] = null; break;}
if (uc<npvnick){var pvinick = " из чата вышла ";
if(mw=='0') pvinick=" из чата вышел ";
if(mw=='') pvinick=" из чата вышло ";
var pviobj=parent.users.document.getElementById("addusers"); if(pviobj) pviobj.innerHTML=time+pvinick+nick;
npvnick=uc;
}

if(room==myroom) {
nickid="!"+nick;
obj=parent.users.document.getElementById(nickid);
ul=parent.users.document.getElementById('ul');
ul.deleteRow(obj.rowIndex);
seprules(-1,st,mw);
}}

458
ridz @ridz
Музыкальные смайлы и (или) слова с возможностью отключения
В админке -=Модерация=- Скрипты в чате после
/* [Функция - вывода сообщений и команд] */

var pu = new Array;
var pt = new Array;
function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12,var13,var14) {
if(ign_ok(nick) && cmd!=6 && cmd!=7) return;
if(nick==nick_r && room!=room_r) return;
добавить
/* Музыкальные смайлы, пример для добавления melodysm[номер по порядку]=new Array(" код_смайла_или_слово ","ссылка_на_звук_mp3"); */
var melodysm = new Array();
melodysm[0]=new Array(" *1 ","Ссылка_на_mp3");
melodysm[1]=new Array(" *2 ","Ссылка_на_mp3");

var vse = melodysm.length;
for (var i=0; i<vse; i++) {regsm = new RegExp(melodysm[i][0].replace(/([\$\^\*\(\)\+\[\]\{\}\|\.\/\?\\])/g, '\\$1')); if(regsm.test(text)&&loaded!=0&&melodysmno==0) text+='<embed type="application/x-shockwave-flash" src="http://mpchat.com/blank/player.swf" allowfullscreen="false" flashvars="file='+melodysm[i][1]+'&autostart=true" width="0" height="0">';}

Кнопка отключения (ставиться по желанию если ненужна отмеченное выше красным убрать!)
в нижний фрейм установка галочки отключает звук
<input type=checkbox onclick="if(this.checked) {parent.melodysmno=1;} else {parent.melodysmno=0;}" title="Вкл-выкл муз. смайлы">

или второй вариант снимание галочки отключает звук
<input type=checkbox onclick="if(this.checked) {parent.melodysmno=0;} else {parent.melodysmno=1;}" title="Вкл-выкл муз. смайлы" checked>

и в скрипты чата в раздел /* [НАСТРОЙКИ] */ добавить
/* Отмена муз.смайлов */
var melodysmno=0;

Звуки желательно подбирать короткие на несколько секунд и с малым весом и сама ссылка должна прямая формата mp3

458
ridz @ridz
Функция тотальный игнор устанавливает игнор у всех находящихся в данный момент в чате на определённый ник. устанавливать могут только те кого вы назначите
В скриптах чата в разделе /* [НАСТРОЙКИ] */ добавить и прописать ники
/* Ники установщиков тотального игнора (/tignor): totalign['nick']=1; */
var totalign = new Array();
totalign['adm']=1;

ниже после /* Проверка пользовательских команд для простого сообщения */
if(cmd==0) {
if(text.substr(0,7)=="/tignor" && totalign[nick]){if (tonick&&mynick!=tonick&&loaded==1) {ign_sel(tonick)};if(nick!=mynick||!tonick) return;
if(ign_ok(tonick)) {text="Вы поставили тотальный игнор на ник "+tonick} else {text="Вы сняли тотальный игнор на ник "+tonick;} }

В нижний фрейм в селектор команд добавить
if(parent.totalign[parent.mynick]) document.write("<option value='/tignor '>заигнорировать ник");

Повторная отправка этой же команды на заигноренный ник снимает игнор , проверить действительно ли установился игнор можно нажав кнопку обновления в чате - иконка игнора должна измениться. Сообщение об установке/снятии тотального игнора видит только человек его установивший.
У кого на титульнике выведены последние сообщения и кто хочет скрыть строки об игноре добавьте в скрипт вывода последних сообщений красное
<table width=100%><tr><td class=title> Последние сообщения в чате</td></tr>
<tr><td>
<script>
for(var i=i_lastmsgs.length-1;i>=0;i--) {
msg=i_lastmsgs[i];
if (msg[4].substr(0,7)=="/tignor") continue;
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>
</td></tr>
</table>

458
ridz @ridz
Ограничение размера картинок загружаемых на форум
Админка -=Шаблоны=- Форум добавить
/* Функция изменения размера загружаемой картинки */
function imgminimum(obj)
{var imgmax = 500; // максимальный размер картинки в пикселях
var h = obj.height;
var w = obj.width;
if (h>imgmax||w>imgmax){if (h>w) {obj.height=imgmax}else {obj.width=imgmax}}
}

и красное в /* Обработчик BB-тегов, ненужные закоментировать (шаблон, замена, повторно) */
etags[i]=new Array(/\[img\](https?:\/\/[^ "]+?)\[\/img\]/,'<img src="$1" onload="imgminimum(this)" border=0 style="position:relative;">',1);i++;

458
ridz @ridz
Награды для галереи и гостевой награды для форума смотреть тут https://vmeste.eu/forum?pid=181335#p181335
Для галереи добавить красное
/* Подготовка коментариев и ссылок страниц */
var posts=new Array();
var all_posts="";
for(var i=0; i<g_p.length;i++) {
mod="";
if(g_p[i][8]) mod+="<i style='float:left;'>Оценка: "+g_p[i][8]+"</i>";
if(moderator==1) mod+="<input type=checkbox name='delpost["+g_p[i][9]+"]'><a href='?inc=gallery&gallery="+gallery+"&foto="+afoto[0]+"&site="+site+"&delpost="+g_p[i][9]+"' onclick='return confirm(\"Вы действительно хотите удалить это сообщение?\");'><font class=low>Удалить</font></a> | ";
mod+="<a href=# onclick='quote("+i+"); return false;'><font class=low>Цитировать</font></a>";
avator="";if(g_p[i][5]) avator="<img src='"+g_p[i][5]+"' style='margin-top:5px;margin-bottom:5px;'>";
message=filter(g_p[i][2],message_img_max);


var nagrada="";
var str = new Array();
str['Ник']='<img src="ссылка на награду" border="0" title="Пам пам пам">';
str['Ник_ещё']='<img src="ссылка на награду" border="0" title="Пам пам пам">';
if(str[g_p[i][1]]!=null) nagrada=str[g_p[i][1]];


posts[i]="<table width=500 align=center style='table-layout:fixed;'><tr><td class=title width=150>"+g_p[i][3]+"<td class=title align=right> #"+g_p[i][0]+"</tr><tr><td width=150 valign=top style=padding:10px;padding-left:4px;><a href=# onclick='put(\""+g_p[i][1]+", \"); return false;'><font color='"+g_p[i][4]+"'>"+g_p[i][1]+"</font></a> [<a href=?inc=info&nick="+g_p[i][1]+" target=info>?</a>]<br>"+avator+"<br>"+nagrada+"</td><td valign=top style='padding:10px;word-wrap:break-word;'>"+message+"<tr><td>"+g_p[i][6]+"<td align=right>"+mod+"</table><br>";
all_posts+=posts[i];
}
var links=genlinks("?inc=gallery&gallery="+gallery+"&foto="+afoto[0]+"&site=",sites,site,1);

Для гостевой красное

/* Подготовка сообщений и ссылок */
var posts=new Array();
var all_posts="";
for(var i=0; i<g_p.length;i++) {
mod="";
if(moderator==1) mod+="<input type=checkbox name='delpost["+g_p[i][9]+"]'><a href='?inc=gb&site="+site+"&delpost="+g_p[i][9]+"' onclick='return confirm(\"Вы действительно хотите удалить это сообщение?\");'><font class=low>Удалить</font></a> | ";
mod+="<a href=# onclick='quote("+i+"); return false;'><font class=low>Цитировать</font></a>";
avator="";if(g_p[i][5]) avator="<img src='"+g_p[i][5]+"' style='margin-top:5px;margin-bottom:5px;'>";
message=filter(g_p[i][2],message_img_max);


var nagrada="";
var str = new Array();
str['Ник']='<img src="ссылка на награду" border="0" title="Пам пам пам">';
str['Ник_ещё']='<img src="ссылка на награду" border="0" title="Пам пам пам">';
if(str[g_p[i][1]]!=null) nagrada=str[g_p[i][1]];


posts[i]="<table width=500 align=center style='table-layout:fixed;'><tr><td class=title width=150>"+g_p[i][3]+"<td class=title align=right> #"+g_p[i][0]+"</tr><tr><td width=150 valign=top style=padding:10px;padding-left:4px;><a href=# onclick='put(\""+g_p[i][1]+", \"); return false;'><font color='"+g_p[i][4]+"'>"+g_p[i][1]+"</font></a> [<a href=?inc=info&nick="+g_p[i][1]+" target=info>?</a>]<br>"+avator+"<br>"+nagrada+"</td><td valign=top style='padding:10px;word-wrap:break-word;'>"+message+"<tr><td>"+g_p[i][6]+"<td align=right>"+mod+"</table><br>";
all_posts+=posts[i];
}
var links=genlinks("?inc=gb&site=",sites,site,1);

строки с массивами подарков для удобства можно перенести в отдельный файл
var str = new Array();
str['Ник']='<img src="ссылка на награду" border="0" title="Пам пам пам">';
str['Ник_ещё']='<img src="ссылка на награду" border="0" title="Пам пам пам">';

поставив вверху страницы скрипт до тега </head>
<script src="ССЫЛКА_НА_ФАЙЛ" type="text/javascript"></script>

458
ridz @ridz
Skype - вывод ника плюс иконка состояния статуса скайпи в анкете
При нажатии на кнопку
открываеться скайпи-инфо этого человека -- плюс сама иконка показывает человек в скайпе или нет. Если ник не проставлен выводиться надпись Нету

В настройки в таблицу добавить код
<tr><td>Ваш ник в Skype</td><td><input name=field8 class=text size="40" maxlength=100 value='%field8%'></td></tr>

Код для анкеты
<tr><td>Мой ник в Skype</td><td>
<script type="text/javascript" src="http://download.skype.com/share/skypebuttons/js/skypeCheck.js"></script>
<script language="JavaScript">
if('%field8%'!=''&&'%field8%'!='-') {document.write('&nbsp;%field8%&nbsp;<a href="skype:%field8%?userinfo"><img src="http://mystatus.skype.com/smallclassic/%field8%" style="border: none;" width="114" height="20" alt="Мой статус" /></a>');}
else { document.write("Нету");}
</script>
</td></tr>

Если вы использовали field8 замените на другой
Чтобы иконка отображала реальный статус -- в настройках скайпа у данного человека должно стоять разрешение
инструменты - настройки - безопастность - дополнительно - галку на против "Показывать мой сетевой статус в Интернете"

458
ridz @ridz
Индивидуальные Приветствия для разных комнат (можно для одной) или разные картинки в разных комнатах
В админке - -=Фреймы=- Фрейм сообщений найдите строку
<center><font size=4><b>Мы приветствуем Вас в нашем чате!</b></font></center><br>
и замените на скрипт
<script language="JavaScript" type="text/javascript">
if (parent.myroom==0)document.write('<center><img src="Ссылка на картинку для нулевой комнаты" border="0" alt="" /></center><br />');
if (parent.myroom==1)document.write('<center><img src="Ссылка на картинку для первой комнаты" border="0" alt="" /></center><br />');
if (parent.myroom==2)document.write('<center><img src="Ссылка на картинку для второй комнаты" border="0" alt="" /></center><br />');
document.write("<center><b><font face='Monotype Corsiva' size=+3 color='blue'><font color=red>" + parent.mynick + "</font><br />Добро пожаловать в чат <font color=red>"+top.document.title+"</font>!</font></b></center><br />")
</script>

Если комнат больше добавить строки
if (parent.myroom==НОМЕР_КОМНАТЫ)document.write('<center><img src="Ссылка на картинку" border="0" alt="" /></center><br />');
если меньше то ненужные убрать
Для каждой комнаты появится своя картинка и в приветствии будет ник вошедшего и название вашего чата .

458
ridz @ridz
Автоматическое создание приватного фрейма или Функция плавного изменения размера высоты приватного фрейма плюс автоматическое переключение показа приватных сообщений или в приватном фрейме или в логе
При установке этого кода человек в чате получает выбор пользоваться приватным фреймом и самостоятельно настроить размер привата или отключить приватный фрейм и получать все сообщения в общем логе
В то место где вы хотите что были кнопки увеличения/создания умешения/убирания фрейма их можно увидеть на прикреплённом скрине поставьте скрипт (в любой фрейм)
Добавлено: скорость изменения размера (кто ставил менять полностью)
<script>
/* Функция автоматического создания приватного фрейма и плавного изменения размера его высоты */
document.write('<BUTTON onmousedown="privatbig(1)" onmouseup="privatbig()" onmouseout="privatbig()" title="увеличить или создать приват">&uarr;</BUTTON><BUTTON onmousedown="privatbig(-1)" onmouseup="privatbig()" onmouseout="privatbig()" title="уменьшить или убрать приват">&darr;</BUTTON>');
var timeprivat;
var step=10;//шаг прибавления(скорость)
function privatbig(x){
var obj=parent.document.getElementsByName('sets')[0];
var rows=obj.rows.split(',');
var newrow=Number(rows[rows.length-1]);
if (!x){clearTimeout(timeprivat);return}
newrow+=x*step;
if (newrow<5) {parent.privatok=0} else {parent.privatok=1};
var height=parent.left.document.body.clientHeight;
if (height-x*step<0){newrow+=height;rows[rows.length-1]=newrow;obj.rows=rows.join(',');return}
if (newrow<0){newrow=0;}
if (newrow>=0)
{rows[rows.length-1]=newrow;obj.rows=rows.join(',');timeprivat=setTimeout("privatbig("+x+")",5);}
};
</script>

Пояснение
Если высоту приватного фрейма уменьшить кнопкой "меньше" до нуля произойдёт автоматическое переключение показа приватных сообщений на общий лог и наоборот увеличивая размер кнопкой "больше" даже если у вас до этого небыло и вы устанавливали приватного фрейма он автоматически появиться и приватные сообщения пойдут в него.

Кто хочет может изменить кнопки отмечено красным на картинки
document.write('<img src="ссылка на картинку вверх" border="0" onmousedown="privatbig(1)" onmouseup="privatbig()" onmouseout="privatbig()" ><img src="ссылка на картинку вниз" border="0" onmousedown="privatbig(-1)" onmouseup="privatbig()" onmouseout="privatbig()" >');


Отредактировано ridz - 09.01.2010
458
ridz @ridz
Запрет на вызов при определённых статусах ICQ Благодарю за идею Глебон !
Админка -=Модерация=- Скрипты в чате раздел /* [Функция - вывода сообщений и команд] */
найдите
/* Вывод сообщения о вызове и сам вызов окном с музыкой '/call nick' */
if(cmd==4) {
if(tonick==mynick && loaded==1) alert("Вас вызывает в чат "+nick+"!");
wr(set_time+"<i>"+set_nick+" вызывает "+tonick+".</i><br>");
}

и замените полностью (или добавьте) на код
/* Вывод сообщения о вызове и сам вызов окном с музыкой '/call nick' */
if(cmd==4) {
stat2="";
for(var i=0;i<us.length;i++){if(us[i]!= null && us[i][0]==tonick)stat2=us[i][5];};
if(tonick==mynick && loaded==1&&stat2!=1&&stat2!=5) alert("Вас вызывает в чат "+nick+"!");
wr(set_time+"<i>"+set_nick+" вызывает "+tonick+".</i><br>");
if(stat2==1||stat2==5)wr(set_time+"<i>"+tonick+" отвечает "+set_nick+" меня нельзя вызвать! я "+stn2[stat2]+".</i><br>");
}

Пояснение в местах отмеченных красным поставьте свои номера статусов на которые хотите поставить запрет, также можно добавить ещё статусы через &&stat2!=номер или &&tonick!="НИК" для ника в первой отмеченной строке и так для статуса ||stat2==номер или для ника ||tonick=="НИК"во второй
сами номера можно узнать в /* Сообщение о смене статусa ICQ */

458
ridz @ridz
Способ загрузки индивидуальных аватаров для форума (для гостевой и галереи также найдите avator=""; и добавьте код)
Админка -=Шаблоны=- Форум добавить красное
/* ЧАСТЬ ТРЕТЬЯ */
/* Отображение сообщений в теме */
....
avator="";
var avatores = new Array;
avatores['Ник']='Ссылка на картинку его аватара';
avatores['Ещё_ник']='Ссылка на картинку его аватара';
if (avatores[f_p[i][1]]) f_p[i][8]=avatores[f_p[i][1]];

if(f_p[i][8]) avator="<img width='100' src="+f_p[i][8]+" style='margin-top:5px;margin-bottom:5px;'><br>";

а так можно сделать на форуме стандартный аватар, для тех кто не загрузил свой заменив
avator="";

на
avator="<img src='ССЫЛКА НА СТАНДАРТНЫЙ АВАТАР' style='margin-top:5px;margin-bottom:5px;'><br>";

код со стандартным аватором и заменой целиком
avator="<img src='ССЫЛКА НА СТАНДАРТНЫЙ АВАТАР' style='margin-top:5px;margin-bottom:5px;'><br>";
var avatores = new Array;
avatores['Ник']='Ссылка на картинку его аватара';
avatores['Ещё_ник']='Ссылка на картинку его аватара';
if (avatores[f_p[i][1]]) f_p[i][8]=avatores[f_p[i][1]];
if(f_p[i][8]) avator="<img width='100' src="+f_p[i][8]+" style='margin-top:5px;margin-bottom:5px;'><br>";

458
ridz @ridz
Внимание! в данном сообщении надо убирать пропуск в теге тут [hi de] и [/hi de]
Тег hide для форума скрытие информации от незарегистрированных и Тег видео для форума (для роликов с youtube) (тема тег видео перенесена перенесена и обновлена!!!)
Добавлен тег [play] для проигрывания mp3 файлов

Для незарегистрированных вместо сообщения будет текст → Скрытый текст только для зарегистрированных в том месте сообщения, где Вы истользовали этот тег ,а у зарегистрированных ссылка открывающая скрытый блок.
Админка -=Шаблоны=- Форум
Кнопка для вставки тега в /* Для вывода кнопок BB-тегов */ добавить
Кнопка скрытого текста
tags+="<input title='скрытый текст' class=ok type=button value='hide' onclick=ftags('[hi de]','[/hi de]')> ";

или Кнопка скрытого текста только для указанных ников
if (mynick=='Ник'||mynick=='Ник_ещё'||mynick=='И_ещё_Ник') tags+="<input title='скрытый текст' class=ok type=button value='hide' onclick=ftags('[hi de]','[/hi de]')> ";

Кнопка видео
tags+="<input title='видеоролик с youtube' class=ok type=button value='Video' onclick=ftags('[video]','[/video]')> ";

Кнопка для плеера mp3 файлов (автозапуск отключен у песен)
tags+="<input title='Плеер для mp3' class=ok type=button value='Mp3' onclick=ftags('[play]','[/play]')> ";

В функцию /* Фильтрирует текст - смайлы, теги, ссылки, картинки */ добавить красное (синим отмечена вставка тега видео cмотреть - ставить по желанию) зелёным проигрыватель mp3 (ставить по желанию)
/* Фильтрирует текст - смайлы, теги, ссылки, картинки */
/* img_max - макс. картинок к отображению в одном сообщении вместо ссылок */
var message_img_max=10; /* сообщение */
var signature_img_max=0; /* подпись */
var hide_div=0;
var video_max=3;//максимальное число видероликов в сообщении
function filter(text,img_max) { var img_c=0;var video_c=0;
....

text=" "+text+" "; text=text.replace(/( |>)((ftp|https?):\/\/[^ "]+?)(?= |<)/g,'$1<a href="$2" target=_blank>$2</a>'); //автозамена ссылок
a=text.split(" "); for(k=0;k<a.length;k++) {for(j=0;j<sm.length;j++) if(a[k]==sm[j][0]) a[k]='<img src='+smdir+sm[j][1]+'>';} text=a.join(' '); //замена смайлов

while(text.search(/\[hi de\](.*?)\[\/hi de\]/g)>=0){ t=text.split('[hi de]'); if(t[1]) {t2=t[1].split('[/hi de]');hide_div++; if(t2[0]&&mynick) { text=text.replace('[hi de]'+t2[0]+'[/hi de]','<a href=# onclick="obj=document.getElementById(\'s'+hide_div+'\'); obj.style.display=(obj.style.display==\'none\')? \'block\':\'none\'; return false;">→ Скрытый текст</a><div id=s'+hide_div+' style="display:none;">'+t2[0]+'</div>') } else {text=text.replace('[hi de]'+t2[0]+'[/hi de]','→ Скрытый текст только для зарегистрированных');}}};

while(text.search(/\[video\](.*?)\[\/video\]/g)>=0){t=text.split('[video]'); if(t[1]) {t2=t[1].split('[/video]');video_c++; if(t2[0]&&video_max>=video_c) { var ss2009=t2[0].replace("watch?v=", "v/");ss400='src="'+ss2009+'&hl=ru&fs=1"';text=text.replace('[video]'+t2[0]+'[/video]','<embed '+ss400+' type=application/x-shockwave-flash allowscriptaccess=always allowfullscreen=true width=300 height=250></embed>') } else {text=text.replace('[video]'+t2[0]+'[/video]','');}}};

while(text.search(/\[play\](.*?)\[\/play\]/g)>=0){t=text.split('[play]'); if(t[1]) {t2=t[1].split('[/play]'); if(t2[0]) {var autostart='false'; text=text.replace('[play]'+t2[0]+'[/play]','<embed type="application/x-shockwave-flash" src="http://mpchat.com/blank/player.swf" allowfullscreen="false" flashvars="file='+t2[0]+'&autostart='+autostart+'" width="250" height="20">');} else text=text.replace('[play]'+t2[0]+'[/play]','')}};

return text;
}

Кому нужен простой спойлер скрывающий информацию но доступный всем уберите &&mynick и → Скрытый текст только для зарегистрированных
width=300 height=250 - это размеры окна видео отрегулируйте сами если нужно

458
ridz @ridz
Запрет на капс
Мягкий запрет на капс для незарегистрированных (статусы можно добавить по желанию) плюс команда в нижнем фрейме на запрет капса
Мягкий - значит если первая буква в предложении заглавная она такой и остаёться всё остальное переводиться в нижний регистр.
Админка - скрипты чата - в раздел /* [НАСТРОЙКИ] */ добавить прописать ники установщиков запрета на Caps Losk
/* Ники установщиков запрета на Caps Losk(/caps): capser['nick']=1; */
var capslosk=0;
var capser = new Array();
capser['adm']=1;

В раздел /* [Функция - вывода сообщений и команд] */ добавить в
/* Проверка пользовательских команд для простого сообщения */
if(cmd==0) {
if(text.substr(0,5)=="/caps" && capser[nick]){if (tonick&&mynick==tonick&&loaded==1) {capslosk=1};if(nick!=mynick||!tonick) return;
text="Вы поставили запрет на капс для ника "+tonick;}

В раздел /* [Функции - нижнего фрейма] */ добавить после
/* Обрабатывает строку ввода текста для отправления */
var gettime=0;
var oldmsg="";
function msg_send(){
var form=parent.chat.document.fmsg;
var msg=form.text0.value;
var caps = /(\S)(.+)/g;
var ras = /\.|\!/;
function replacer(str, p1, p2, offset, s)
{ return p1+p2.toLowerCase()};
a=msg.split(ras);
if(capslosk==1||parent.regist != 1) {for(k=0;k<a.length;k++){nn=a[k].replace(caps, replacer);msg=msg.replace(a[k], nn);}};

В нижний фрейм в селектор добавить
if(parent.capser[parent.mynick]) document.write("<option value='/caps '>запретить капс");

Примечание! сообщение о запрете капсить видит только ник, который ставит запрет.

458
ridz @ridz
Запрет показа более одного сообщения о бане если несколько модеров одновременно выкидывают\банят одного человека
Запрет действует в течении указанного вами времени (достаточно 1 -3 минут) отключается только вывод сообщения о бане, сами баны работают как обычно, плюс сообщения о банах не видят входящие по новой в чат , модератор посылающий бан после первого видит своё сообщение с пометкой "Сообщение скрыто"
В скрипты чата в раздел /* [НАСТРОЙКИ] */ добавить
/* Запрет на одновременный вывод сообщения о бане несколькими модераторами */
var bantonick="";
var bantimer=1;//в течении скольких мин. баны одному и томуже нику не будут показываться
var bantimerId;
var vihodban="";

В раздел /* [Функция - вывода сообщений и команд] */ добавить/изменить красное
/* Вывод сообщения об удалении '/kill nick' и сам процесс */

if(cmd==5) {
if(tonick==mynick && loaded==1 && kill!=6 && kill!=7) {
if((kill==1)||(kill==2)||(kill==3)) {
act="kill";
setcookie(parent.chatlogin.replace("-","_")+"_mpban",tonick,timeout);
}
if(kill==4) act="window";
if(kill==5) act="prav";
parent.location.href="exit.html?"+parent.yourkey+"&act="+act+"&timeout="+timeout+"&grund="+text;
}
if(text.length>0) text=" Причина: "+text+". ";
if(timeout>0) {
if(timeout<61) timeout="На "+timeout+" минут.";
if(timeout==1440) timeout="На день!";
if(timeout==10080) timeout="На неделю!";
if(timeout==43200) timeout="На месяц!";
if(timeout>1000000) timeout="Навсегда!";
}

if (kill!=6 && kill!=7) vihodban=tonick;
if (bantonick==tonick)text="Сообщение скрыто";
if ((bantonick!=tonick||nick==mynick)&& loaded==1){
wr(set_time+"<i><a href='' onclick=\"parent.tonick('"+nick+": '); return false;\"><font color="+colornick+">"+set_nick+"</font></a> "+deltxt[kill]+" "+tonick+".</i> "+timeout+text+"<br>");}
if (bantonick!=tonick&& loaded==1){bantonick=tonick;clearTimeout(bantimerId);bantimerId=setTimeout("bantonick=null",1000*60*bantimer);};

}

/* Вывод выхода юзера из чата и удаление из никлиста через del() */
if(cmd==7) {
if(inchat=='1' && room==myroom&&nick!=vihodban) {
wr(set_time+"<font color=red>С нами прощается <b>"+set_nick+"</b> и уходит.</font><br>");
}
del(nick,colornick,st,mw,icon,status,inchat,time,room);
}

Зелёным добавлено отмена сообщения о выходе забаненного ника.

458
ridz @ridz
Модерирование сообщений в общем логе чата
Скрипт адаптирован под бесфреймовую версию чата
Дополнено!!!
можно удалять все строки определённого ника или все строки указанные ссылками по времени или по указанным словам!!!

Назначенные вами ники смогут удалять (скрывать) строки общего лога, без перезагрузки чата, удалённые строки при нажатии кнопки обновить или перезахода в чат непоявляются.
В скриптах чата в разделе /* [НАСТРОЙКИ] */ добавить и прописать ники
/* Ники удаляющих строки лога (/remove): remover['nick']=1; */
var remover = new Array();
remover['adm']=1;

Код поставить ниже после /* Проверка пользовательских команд для простого сообщения */
if(cmd==0) {
if(text.substr(0,7)=="/remove" && remover[nick]) {
var timeremovez;
text=text.replace("/remove", "");
timeremovez = text.match(/см\.\s(\d\d.\d\d.\d\d)|\S+/g);
if (timeremovez!=null) {
var obj=document.getElementById("leftdiv");var div=obj.getElementsByTagName('div');
for (var i=0; i<timeremovez.length; i++) {
for (var k=0; k<div.length; k++) {if (div[k].innerHTML.search(timeremovez[i])>=0){obj.removeChild(div[k]);k--;}}}};
if(nick!=mynick||timeremovez==null) return;
text='Вы удалили сообщение/я с '+timeremovez;
}

В нижний фрейм в селектор команд добавить

if(remover[mynick]) document.write("<option value='/remove '>стереть");

Иструкция по использованию: В общем логе чата нажать на время той строки, корорую хотите стереть (должна произойти вставка в окно ввода текста вида см. 08:22:33 ), укажите также все остальные строки какие хотите стереть,затем в селекторе команд нижнего фрейма выберите команду стереть и отправьте сообщение.
Если выбрать ник и отправить команду стереть сотрутся все сообщения этого ника!!!
Можно также просто написать слово или слова через пробел, удаляться все строки с этим словом/словами
Сообщение об удалении строки видит только человек отправивший команду на стирание, если время не вставлено или имеет в вашем чате иной формат, сообщения об удалении никто не увидит и само удаление не будет сделано.

458
ridz @ridz
Модифицированный Топ100 с чередованием фона строк и выделением особым цветом строки с личным ником (для удобства определения личного рейтинга)
Можно использовать как замену стандартного топ100.
Если ник находиться в чате или на титульнике с сохранённым паролём и открывает топ100 его ник будет подсвечен, чтобы можно было быстрее себя увидеть.
админка |-Дополнительно-| .::WebFTP::.' на фтп чата в корне создать файл с именем top100.html
Код содержимого файла
<html>
<head>
<META http-equiv=Content-Type content='text/html; charset=windows-1251'>
<link rel=STYLESHEET type=text/css href=style.css>
</head>
<body class=top100-body>
<center>
<div id="htmlsite" >Пожалуйста подождите, идёт загрузка!!!</div>
<script>
function doSomething(e) {
var targ;
if (!e) var e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) targ = targ.parentNode;
return targ
}
document.getElementById('htmlsite').onclick=function(e){
if (doSomething(e).href.split('top100').length > 1 )
{ url=doSomething(e).href.replace("top100.html","") ;
include("htmlsite", url);return false}};

function include(id, url) {
var element = document.getElementById(id);
if (!element) {alert("Bad ID-element!");return;}
element.innerHTML ="Пожалуйста подождите, идёт загрузка!!!";
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!";
var dtd = "Участник";
if(parent.mynick) dtd=parent.mynick;
if(window.opener) dtd=opener.parent.mynick;
dtd=">"+dtd+"<";
var trl = element.getElementsByTagName("tr");
for (var i=0; i< trl.length; i++){
var color = '#7FFFD4';//цвет нечётных строк
if (i%2==0)color = '#00BFFF';//цвет чётных строк
if (trl[i].innerHTML.split(dtd).length > 1){color = '#FFD700';};//цвет выделения ника

for (var k=0; k< trl[i].cells.length; k++){trl[i].cells[k].style.backgroundColor=color; if (trl[i].cells[k].innerHTML==0) {trl[i].cells[k].innerHTML="0";} } };
}
var starturl="./?inc=top100&all=100&only=12345678&sort=3";//начальные параметры топ100
include("htmlsite", starturl);
</script>
</center>
</body>
</html>

Измените цвета по своему вкусу отмечено красным а также установите начальные параметры топ100 отмечено синим подробнее о параметрах и сортировке топ100 смотреть тут https://vmeste.eu/forum?pid=48413#p48413
Зелёным отмечена добавка нуля в пустые строки (ставить по желанию)

Код кнопки для использования модифицированной версии топ100 внутри чата или на титульнике для открытия модифицированной версии топ100 отдельным окном.
<a href=# onclick="window.open('top100.html','top100','width=700,height=500,resizable=yes,scrollbars=yes,status=yes');return false" target=top100 title=Топ100!>Топ100!</a>

'700','500' размеры окна отрегулируйте сами если нужно.

Код кнопки для титульника (стандарт) открытие топ100 во фрейме титульника
<a href=top100.html target=iframe>Top100</a><br>

как это может выглядеть смотрите скрин.

458
ridz @ridz
Прямые ссылки на статистику сообщений чата текущего года и месяца с возможностью бесконечного формирования ссылок на месяц << назад или вперёд >>
Поставьте скрипт в то место где вы хотите увидеть ссылки
<script language="JavaScript" type="text/javascript">
document.write('<a href="#" onclick="write_today(-1);return false" title="месяц назад" ><<</a>');
document.write(' <font color="#B22222"><b>Статистика</b></font> ');
document.write('<a href="#" onclick="write_today(1);return false" title="месяц вперёд" >>></a>');
document.write('<div id="stat" align="center" ></div>');
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();
var month_rus = new Array('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');
function write_today(x)
{ var month_new = month+x;
if (month_new>=0&&month_new<12) { month = month_new};
if (month_new==-1) { month = 11;year--};
if (month_new==12) { month = 0;year++};
document.getElementById('stat').innerHTML='<a href="./?inc=stat&date='+year+'-'+(month+1)+'" target="_blank" title="Статистика сообщений за '+month_rus[month]+' месяц '+year+'г.">'+month_rus[month]+'</a> <a href="./?inc=stat&date='+year+'" target="_blank" title="Статистика сообщений за '+year+'г.">'+year+'</a>';
}
write_today(0);
</script>

скрин


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