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

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

 

458
ridz @ridz
Исправление кодировки русских ников в Mozilla Firefox и Opera при выходе из чата на странице exit.html
Админка - -=Дизайн=- - HTML докуметы - exit.html - найдите
<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'];
var act=get['act'];
var timeout=get['timeout'];
var grund=unescape(get['grund']);
</script>

и замените на
<script>
//GET viriables
var href=location.search.substr(1);
var abcr = new Array("А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я","а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
var abci = new Array("%C0","%C1","%C2","%C3","%C4","%C5","%A8","%C6","%C7","%C8","%C9","%CA","%CB","%CC","%CD","%CE","%CF","%D0","%D1","%D2","%D3","%D4","%D5","%D6","%D7","%D8","%D9","%DA","%DB","%DC","%DD","%DE","%DF","%E0","%E1","%E2","%E3","%E4","%E5","%B8","%E6","%E7","%E8","%E9","%EA","%EB","%EC","%ED","%EE","%EF","%F0","%F1","%F2","%F3","%F4","%F5","%F6","%F7","%F8","%F9","%FA","%FB","%FC","%FD","%FE","%FF");
for (i=0; i<abci.length; i++) { while (href.split(abci[i]).length>1) href = href.replace(abci[i], abcr[i] )};
var query=unescape(href);
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'];
var act=get['act'];
var timeout=get['timeout'];
var grund=unescape(get['grund']);
</script>

Пояснение: надпись при выходе Пока Òåñò! Приходи ещё! замениться на Пока рони! Приходи ещё!

458
ridz @ridz
Список кто в чате с индикатором говорливости
Скрипт для титульника (можно заменить стандартный )
необходимые параметры информера &lastmsgs=100&inchat=1 про информер читать тут https://vmeste.eu/forum?pid=5680#p5680
<script language="JavaScript" type="text/javascript">
function s_f(i, ii) { return ii[0]- i[0];};
var c = [],c_sr,html="";
var color_m='1E90FF';//фон индикатора для парней
var color_w='FF69B4';//фон индикатора для девушек
var color_n='CCCCCC';//фон индикатора для бесполых
var color_nn='000000';//цвет ника у кого он отсутствует
var w_info=100;//длина индикатора
var h_info=5;//высота индикатора
var color_info='787878';//цвет индикатора
for(i=0;i<i_inusers.length;i++)
{ i_nick=i_inusers[i][0];
i_mw=i_inusers[i][2];i_color=i_inusers[i][1];if (i_color=='')i_color=color_nn;c[i]=new Array(0,i_nick,color_n,i_color);if(i_mw=='0')c[i][2]=color_m;if(i_mw=='1')c[i][2]=color_w;
for(var r=0; r<i_lastmsgs.length;r++) {if (i_lastmsgs[r][2]==i_nick) c[i][0]++;}};
c.sort(s_f);
for(i=0;i<c.length;i++){html+="<a href=?inc=info&nick="+c[i][1]+" target=_blank title='посмотреть анкету "+c[i][1]+"' style=\"color: #"+c[i][3]+"; text-decoration: none\">"+c[i][1]+"</a><div style=\"width: "+w_info+"px; background-color: #"+c[i][2]+"; border: #000000 1px solid;font-size: "+h_info+"px\" ><div style=\"width: "+parseInt(c[i][0]*(w_info/100))+"px; background-color: #"+color_info+"; height: "+h_info+"px;vertical-align: middle; border-right: #000000 1px solid;;font-size: "+h_info+"px \" ></div></div>"};
document.write(html);
if(i_inchat==0) document.write("никого нет<br>");
</script>

Первым по списку идёт самый говорливый на данный момент из тех кто присутствует в чате, далее по убыванию.
Вариант 2.
Добавлено: запрет показа для ников (пропишите ники невидимок или другие ники в скрипте место указано красным или оставьте место ника пустым если вам некого скрывать &&c[i][1]!='' ) плюс строгая сортировка по полу в начале девушки , потом парни и бесполые. самые говорливые выше в своих группах.
<script language="JavaScript" type="text/javascript">
function s_f(i, ii) {if(i[2]==ii[2]) return ii[0]- i[0];
if(i[2]==color_w&&(ii[2]==color_m||ii[2]==color_n)) return -1;
if(i[2]==color_m&&ii[2]==color_w) return 1;
if(i[2]==color_m&&ii[2]==color_n) return -1;
if(i[2]==color_n&&(ii[2]==color_w||ii[2]==color_m)) return 1;
}

var c = [],c_sr,html="";
var color_m='1E90FF';//фон индикатора для парней
var color_w='FF69B4';//фон индикатора для девушек
var color_n='CCCCCC';//фон индикатора для бесполых
var color_nn='000000';//цвет ника у кого он отсутствует
var w_info=100;//длина индикатора
var h_info=5;//высота индикатора
var color_info='787878';//цвет индикатора
for(i=0;i<i_inusers.length;i++)
{ i_nick=i_inusers[i][0];
i_mw=i_inusers[i][2];i_color=i_inusers[i][1];if (i_color=='')i_color=color_nn;c[i]=new Array(0,i_nick,color_n,i_color);if(i_mw=='0')c[i][2]=color_m;if(i_mw=='1')c[i][2]=color_w;
for(var r=0; r<i_lastmsgs.length;r++) {if (i_lastmsgs[r][2]==i_nick) c[i][0]++;}};
c.sort(s_f);
for(i=0;i<c.length;i++){if(c[i][1]!='НИК'&&c[i][1]!='ЕЩЁ_НИК'){html+="<a href=?inc=info&nick="+c[i][1]+" target=_blank title='посмотреть анкету "+c[i][1]+"' style=\"color: #"+c[i][3]+"; text-decoration: none\">"+c[i][1]+"</a><div style=\"width: "+w_info+"px; background-color: #"+c[i][2]+"; border: #000000 1px solid;font-size: "+h_info+"px\" ><div style=\"width: "+parseInt(c[i][0]*(w_info/100))+"px; background-color: #"+color_info+"; height: "+h_info+"px;vertical-align: middle; border-right: #000000 1px solid;;font-size: "+h_info+"px \" ></div></div>"}};
document.write(html);
if(i_inchat==0) document.write("никого нет<br>");
</script>

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

Отредактировано ridz - 07.02.2010
458
ridz @ridz
Кнопка вызова ника в чат в никлисте. вариант самой функции вызова можно посмотреть тут https://vmeste.eu/forum?pid=208880#p208880
Админка - -=Модерация=- Скрипты в чате-/* [Функции - формирования никлиста] */ - /* Определение частей никлиста */
найдите строку
set_nick=set_nick+set_love+set_clan;

и добавьте красное
set_call="&nbsp;<a href='#' onclick=\"parent.write.location.href = 'index.php?inc=write&"+ parent.yourkey+"&text=/call "+nick+": ';return false;\" title='Вызвать "+nick+" в чат!' target='_blank'>!</a>";
set_nick=set_nick+set_love+set_clan+set_call;

Кнопка вставки ника в окно сообщения + в никлисте
set_plus="<a title='"+nick+" в строку сообщения' href='#' onclick=\"parent.sendto('"+nick+": '); return false;\" ><font color="+color+">+</font></a>"

добавлять также
set_nick=set_nick+set_love+set_clan+set_call+set_plus;

Как вставить почту в никлист смотрите тут https://vmeste.eu/forum?pid=210438#p210438

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

/* Пауза после вызова */
var stop_call = 0;
var call_min = 5;//пауза в минутах
function call_pause(nick)
{ var pause=parseInt((stop_call-new Date().getTime())/1000);
if (pause>0) {parent.write.location.href = 'index.php?inc=write&'+ parent.yourkey+'&text=/privat '+mynick+': Вызов возможен через '+pause+' сек.';return false}
else {stop_call=new Date().getTime()+1000*60*call_min;parent.write.location.href = 'index.php?inc=write&'+ parent.yourkey+'&text=/call '+nick+': ';return false}}

set_call замените на
set_call="&nbsp;<a href='#' onclick=\"parent.call_pause('"+nick+"'); return false\" title='Вызвать "+nick+" в чат!' target='_blank'>!</a>";

ставить тудаже выше set_nick=set_nick+set_love+set_clan+set_call


Пояснение: В случае повторного вызова ранее указанного вами срока будет выводиться строка 17:26:24 » Ник: лично вам Ник: Вызов возможен через 295 сек. В нижнем фрейме желательно убрать строку
document.write("<option value='/call '>вызвать");

Отредактировано ridz - 17.01.2010
458
ridz @ridz
Чекбокс для отключения/включения сообщений викторины в логе
В нижний фрейм в форму
<input type="checkbox" name="game" title="Вкл./Откл. сообщений викторины " />

затем в скрипты чата добавить красное
/* Функция обработки сообщений викторины */
if(cmd==9) {
if(text=="end") text1="это слово уже угаданно или время вышло";
else if(text=="") text1="вы не угадали это слово";
else {
if(mynick==nick) text1='вы только что отгадали слово "'+text+'" и получаете пункт';
else text1='только что отгадал(а) слово "'+text+'"';
}
if(parent.chat.document.fmsg.game.checked||nick==mynick) wr(set_time+"<font size=2 color="+colornick+"><b>"+set_nick+":</b></font> <i>"+text1+"</i><br>");
}

Добавлено: возможность всегда видеть свои собственные результаты игры (зелёное ставить по желанию)

Отредактировано ridz - 25.02.2010
458
ridz @ridz
Индикация времени у забаненного, сколько ему ещё запрещано разговаривать.
для коротких банов например 3 минуты молчания, при условии конечно если забаненный не покинул чат, или его не выпнули дополнительно к бану молчания)))
чтоб забанненый мог определить когда ему уже можно писать сообщения
В скрипты чата в /* [Функции - общие] */ добавить
/* Функция индикация времени запрета говорить */
var kill_time;
function kill_timer(x)
{
if (x==0) {parent.chat.document.fmsg.text0.value="";clearTimeout(kill_time); return};
parent.chat.document.fmsg.text0.value=x+" сек. осталось до конца вашего молчания" ;
x--;
kill_time=setTimeout("kill_timer('"+x+"')",1000);
}

В /* [Функция - вывода сообщений и команд] */ добавить красное
/* Вывод сообщения об удалении '/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;
}
var kill_timeout=0;
if(text.length>0) text=" Причина: "+text+". ";
if(timeout>0) {
kill_timeout=timeout*60;
if(timeout<61) timeout="На "+timeout+" минут.";
if(timeout==1440) timeout="На день!";
if(timeout==10080) timeout="На неделю!";
if(timeout==43200) timeout="На месяц!";
if(timeout>1000000) timeout="Навсегда!";
}
if(loaded==1 && mynick==tonick) {kill_timer(kill_timeout);}
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>");
}

458
ridz @ridz
Вариант вывода последних активных тем форума с возможностью попасть на последнее сообщение в активной теме
(требуемые параметры информера: lasttopics=10)
Основной вариант и как ставить информер смотрите здесь https://vmeste.eu/forum?pid=5680#p5680
1.Вариант с подсказками на русском когда именно было последнее сообщение в теме (подсказка и есть ссылка на само сообщение)
Установите скрипт в нужное место
<script>
function plural(n,str1,str2,str3)
{ return ((((n%10)==1)&&((n%100)!=11))?str1 🙁 ((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?str2:str3))};
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++){
var today=new Date(),time_f="",lasttopic_url="";
var time_c=today.getTimezoneOffset()+180;//коррекция времени в минутах (если требуется)
var color_last="#FF0000"//цвет ссылки на последнее сообщение
var d = i_lasttopic[i][5];
d=d.replace(/(\d\d).(\d\d).(\d\d).+(\d\d).(\d\d)/, "$2/$1/20$3 $4:$5");
var time_msg =new Date(Date.parse(d));
var minutes = Math.floor((today.getTime()-time_msg.getTime())/60000)+time_c;
if (minutes > 24*60) {time_f=Math.floor(minutes/(24*60));time_f=time_f+" "+plural(time_f,'день','дня','дней')}
if (minutes < 24*60) {time_f=Math.floor(minutes/(60));time_f=time_f+" "+plural(time_f,'час','часа','часов')}
//if (minutes < 10) minutes = '0'+minutes;
if (minutes < 60) time_f=minutes+" "+plural(minutes,'минуту','минуты','минут')
time_f="<font color="+color_last+">"+time_f+" назад</font><br>"
var i_site=Math.floor(i_lasttopic[i][6]/10);
lasttopic_url="<a href=?inc=forum&forum="+i_lasttopic[i][11]+"&topic="+i_lasttopic[i][0]+"&site="+i_site+"#"+(Math.floor(i_lasttopic[i][6])+1)+" title='открыть сообщение "+i_lasttopic[i][4]+"' target=_blank >"+time_f+"</a>";
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>"+i_lasttopic[i][2]+"</td><td align=center>"+i_lasttopic[i][6]+"</td><td>"+i_lasttopic[i][4]+"<br>"+lasttopic_url+i_lasttopic[i][5]+"</td></tr>";}
html+="</table>";
document.write(html);
</script>

2. Этот пункт делать обязательно для обоих вариантов
Чтобы при открытии страницы на форуме она прокручивалась до нужного места замените в шаблоне форума зелёное на красное
Админка -=Шаблоны=- Форум
/* ЧАСТЬ ТРЕТЬЯ */
/* Отображение сообщений в теме */
.....
message=filter(f_p[i][2],message_img_max);
if(f_p[i][10]) message+="<div class=signature><hr></div>"+filter(f_p[i][10],signature_img_max);
posts[i]="<table width=90% align=center style='table-layout:fixed;'><tr><td class=title width=150><a name=post"+f_p[i][0]+" href=?inc=forum&forum="+forum+"&topic="+topic+"&post="+f_p[i][0]+"#post"+f_p[i][0]+" class=title>"+f_p[i][3]+"</a><td class=title align=right> #"+num+"</tr><tr><td width=150 valign=top style=padding-top:10px;><a href=# onclick='put(\""+f_p[i][1]+", \"); return false;'>"+f_p[i][1]+"</a> [<a href=?inc=info&nick="+f_p[i][1]+" target=info>?</a>]<br>"+avator+rang(f_p[i][1],f_p[i][7])+"Сообщений:"+f_p[i][7]+"<br> <a href=?inc=post&act=new&nick="+mynick+"&id="+myid+"&tonick="+f_p[i][1]+" target=pm><font class=low>Написать письмо</font></a><br><font class=low>"+f_p[i][6]+"</font>&nbsp;</td><td valign=top style='padding:10px; word-wrap: break-word;'>"+message+"<tr><td>"+isonline+"<td align=right>"+mod+"</td></tr></table><br>";
all_posts+=posts[i];
message=filter(f_p[i][2],message_img_max);
if(f_p[i][10]) message+="<div class=signature><hr></div>"+filter(f_p[i][10],signature_img_max);
posts[i]="<table width=90% align=center style='table-layout:fixed;'><tr><td class=title width=150><a name=post"+f_p[i][0]+" href=?inc=forum&forum="+forum+"&topic="+topic+"&post="+f_p[i][0]+"#post"+f_p[i][0]+" class=title>"+f_p[i][3]+"</a><td class=title align=right><a name="+num+">#"+num+"</a></tr><tr><td width=150 valign=top style=padding-top:10px;><a href=# onclick='put(\""+f_p[i][1]+", \"); return false;'>"+f_p[i][1]+"</a> [<a href=?inc=info&nick="+f_p[i][1]+" target=info>?</a>]<br>"+avator+rang(f_p[i][1],f_p[i][7])+"Сообщений:"+f_p[i][7]+"<br> <a href=?inc=post&act=new&nick="+mynick+"&id="+myid+"&tonick="+f_p[i][1]+" target=pm><font class=low>Написать письмо</font></a><br><font class=low>"+f_p[i][6]+"</font>&nbsp;</td><td valign=top style='padding:10px; word-wrap: break-word;'>"+message+"<tr><td>"+isonline+"<td align=right>"+mod+"</td></tr></table><br>";
all_posts+=posts[i];

3.Кому ненадо наворотов с подсказками на русском языке могут в стандарный скрипт "вывода последних сообщений с форума" добавить красное
пунтк 2. тоже нужно сделать. и тогда существующая ссылка откроет не начало темы а последнее сообщение в данной теме.
<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]+"&site="+Math.floor(i_lasttopic[i][6]/10)+"#"+(Math.floor(i_lasttopic[i][6])+1)+">"+i_lasttopic[i][1]+"</a><br>"+i_lasttopic[i][3]+"</td><td>"+i_lasttopic[i][2]+"</td><td align=center>"+i_lasttopic[i][6]+"</td><td>"+i_lasttopic[i][4]+"<br>"+i_lasttopic[i][5]+"</td></tr>";
html+="</table>";
document.write(html);
</script>

Примерно как выглядит тот и другой вариант смотрите на скриншоте

458
ridz @ridz
Ссылка на анкету у входящего в чат в строке входа юзера в чат(посмотреть кто пришёл)
Админка -=Модерация=- Скрипты в чате
добавить красное
/* Вывод входа юзера в чат и добавление в нклист через add() */
if(cmd==6) {
if(inchat=='0' && room==myroom) {
set_nick="<a href='' onclick=\"parent.tonick('"+nick+": '); return false;\"><font color="+colornick+">"+set_nick+"</font></a>";
set_nick+=" <a href=index.php?inc=info&nick="+nick+" onclick=\"parent.wo(this.href,'Анкета','400','320','yes');return false;\" target="+nick+" title='Посмотреть анкету "+nick+"'>?</a>";
tadd="К нам приходит %nick%. Поприветствуем!";
if(tadda[nick]!=null && tadda[nick]) tadd=tadda[nick].replace(nick,"%nick%");
if(tadd.search("%nick%")==-1) tadd="%nick% "+tadd; tadd=tadd.replace("%nick%",set_nick);
wr(set_time+"<font color=red>"+tadd+"</font><br>");
}
add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan);
}

Знак вопроса ? можно заменить на тег картинки.

Ссылка на почту в строке выхода ника(для отправки вышедшему из чата сообщения на почту)
добавить красное
/* Вывод выхода юзера из чата и удаление из никлиста через del() */
if(cmd==7) {
if(inchat=='1' && room==myroom) {
set_nick="<b>"+set_nick+"</b>";
set_nick+=" <a href=# title='Отправить сообщение "+nick+"' onclick=\"window.open('./index.php?inc=post&act=new&tonick="+nick+"&nick="+mynick+"&id="+myid+"','post','width=490,height=300,scrollbars');return false\">@</a>";
tdel="С нами прощается %nick% и уходит.";
if(tdela[nick]!=null && tdela[nick]) tdel=tdela[nick].replace(nick,"%nick%");
if(tdel.search("%nick%")==-1) tdel="%nick% "+tdel; tdel=tdel.replace("%nick%",set_nick);
wr(set_time+"<font color=red>"+tdel+"</font><br>");
}
del(nick,colornick,st,mw,icon,status,inchat,time,room);
}

Символ @ тоже можно заменить на тег картинки.

458
ridz @ridz
Реверс появления новых сообщений в логе чата и приватном фрейме
Пояснение: по стандарту новые сообщения появляются снизу и уходят вверх,
данное дополнение меняет порядок появления новых сообщений написанных чатланами -
новое сообщение появляется сверху старые уходят вниз нужный режим чатлане могут выбрать по своему желанию установив галочку в чекбоксе
1. установка кнопки выбора реверса В нижний фрейм в форму
Админка - -=Фреймы=- Фрейм чата нижн.
<input type="checkbox" name="updn" title="Новые сообщения сверху или снизу" onclick='parent.loadframes();' />

2. Админка -=Модерация=- Скрипты в чате
раздел /* [Функции - общие] */ заменить целиком следущие функции (красным отмечено новое изменёное или дополненное)
/* Функции плавной прокрутки и включение дозагрузки */
var loaded=0;
var scrolled=0;
function up () {
if(loaded==0) onloaded();
if(parent.chat.document.fmsg.updn.checked) {parent.left.scroll(0, 0);return};
var scr=parent.left.document.body;
if(parent.left.document.compatMode != 'BackCompat')
scr=parent.left.document.documentElement;
scr1=scr.scrollTop;
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 wr(text) {
var obj=parent.left.document;var count=obj.body.getElementsByTagName('DIV').length;
if(loaded==1 && maxmsgs>0) {
if(maxmsgs<count) if(parent.chat.document.fmsg.updn.checked){obj.body.removeChild(obj.body.getElementsByTagName('DIV')[(count-1)]);} else {obj.body.removeChild(obj.body.getElementsByTagName('DIV')[0]);}}
var div_new = obj.createElement("DIV");
div_new.innerHTML = text;
if(count==0||!parent.chat.document.fmsg.updn.checked){obj.body.appendChild(div_new);}
else {obj.body.insertBefore(div_new,obj.body.getElementsByTagName('DIV')[0])};

if(loaded==1) up();
}

3. Для приватно фрейма /* [Функция - вывода сообщений и команд] */
найдите /* - cmd=1 для обычного привата, фрейм или общее окно, cmd=2 приват в новом окне */ и замените всю фунцию (или добавьте/поменяйте красное)
/* - cmd=1 для обычного привата, фрейм или общее окно, cmd=2 приват в новом окне */
if(cmd==1 && privatok==1) {

var obj=parent.privat.document;
var count=obj.body.getElementsByTagName('div').length;
var div_new = obj.createElement("DIV");
div_new.innerHTML = towr;
if(count==0||!parent.chat.document.fmsg.updn.checked){obj.body.appendChild(div_new);parent.privat.scroll(0,1000000);}
else {obj.body.insertBefore(div_new,obj.body.getElementsByTagName('DIV')[0]);parent.privat.scroll(0, 0);};


}
else if(cmd==1) wr(towr);
else if(cmd==2) {
if(nick==mynick) pnick=tonick; else pnick=nick;
if(pu[pnick]==null || pu[pnick].closed) {
pt[pnick]="<div>"+towr+"</div>";
pu[pnick]=window.open("index.php?inc=privat&"+parent.yourkey+"&pnick="+pnick,"","scrollbars=no,width=500,height=400,noresize");
}
else {
pu[pnick].pframe.document.write("<div>"+towr+"</div><script>scroll(0,1000000);</"+"script>");
pu[pnick].document.fmsg.text0.focus();
}}}

458
ridz @ridz
Предпросмотр набранного сообщения (для стандартных галереи, форума и гостевой)
Позволяет проверить как будет выглядеть набранное сообщение до его отправки.

Кнопка ставить в шаблонах в /* Для вывода кнопок BB-тегов */ в любое удобное вам место, например в конец этого списка кнопок
tags+="<input title='Просмотр набранного сообщения' class=ok type=button value='Предпросмотр' onclick='view_mess();' > ";

Функция просмотра набранного сообщения ставить в любое пустое место скриптов , например над строкой /* Для вывода кнопок BB-тегов */

/* Функция просмотра набранного сообщения*/
var smiles_value = "";
function view_mess()
{
var mess = document.form.message;
var mess_value = document.form.message.value;
mess_value=filter(mess_value,message_img_max);
mess_value=mess_value.replace(/\r?\n/g, '<br />');
var obj=document.getElementById("smiles");
if (mess.style.display != "none") {smiles_value=obj.innerHTML;mess.style.display = "none";obj.align="";obj.style.padding='10px';obj.style.border='#7897BB solid 1px';obj.innerHTML=mess_value;}
else {obj.style.padding='';obj.style.border='';obj.align="center";obj.innerHTML=smiles_value;mess.style.display = "block";};
}

458
ridz @ridz
Сообщение об установке игнора алертом и приватно
Заменить в скриптах чата в /* Определение частей никлиста */
set_ign="<img src="+ign_img+" style='border:0px; cursor:pointer;' title='игнор' onclick=\" parent.ign_sel('"+nick+"'); if(parent.ign_ok('"+nick+"')) this.src=parent.ign_imgon; else this.src=parent.ign_imgoff;\">";

на
set_ign="<img src="+ign_img+" style='border:0px; cursor:pointer;' title='игнор' onclick=\" parent.ign_sel('"+nick+"'); if(parent.ign_ok('"+nick+"')) {this.src=parent.ign_imgon;alert('Вы поставили игнор на ник "+nick+"');parent.write.location.href = 'index.php?inc=write&'+ parent.yourkey+'&text=/privat "+nick+": Вы в игноре!';} else {this.src=parent.ign_imgoff;alert('Вы сняли игнор с ника "+nick+"');parent.write.location.href = 'index.php?inc=write&'+ parent.yourkey+'&text=/privat "+nick+": Игнор снят!';}\">";

Установка предупреждения при открытии ссылок, которые посылают в лог чата
В скриптах чата перед!!! строкой /* Добавление граф ников, градиента и формат времени */
Добавить
text = text.replace(/(href[^>]+)/mig, '$1 onclick =\'if(!confirm("Ссылка может быть потенциально опасной! Открыть ссылку?")) return false;\'');

458
ridz @ridz
Как сделать "теги" ? Теги в данном случае это кодовые слова типа /любовь которые потом заменяются на картинку или иной текст
В описанном ниже способе теги вставляются прямо со страницы тегов в чат. в окно набора сообщения и в самом логе потом можно нажать на картинку и снова вставить в сообщение код тега.
Обьяснение:
1. Создаём файл в котором будут показаны все наши теги и их замена, то есть во что превратиться кодовое слово в логе чата.
Админка , |-Дополнительно-|, .::WebFTP::.
заходим на фтп чата ищем маленький зелёный плюсик на белом стилизованном листке с всплывающей надписью создать новый файл ,
нажимаем вписываем имя файла tegs.html жмём создать и ищем имя нового файла в списке , нажимаем на имя файла tegs.html (именно на имя а не на иконку этого файла) появлются три надписи нам нужно изменить нажимаем изменить .
Вставить код:
<html>
<head>
<META http-equiv=Content-Type content='text/html; charset=windows-1251'>
<title>Теги</title>
<link rel=STYLESHEET type=text/css href=style.css>
<script>function put(smile) { opener.sendto(smile); return false;}</script>
</head>
<body>
<a href=# onclick="return put(' /любовь ');" title=' /любовь '>/любовь <img src='http://imgs.su/bigsmile2/36.gif' border='0'></a><br />
</body>
</html>

добавить по образцу все прочие теги
<a href=# onclick="return put(' /ТЕГ ');" title=' /ТЕГ '>/ТЕГ <img src='ССЫЛКА НА КАРТИНКУ' border='0'></a><br />

2.
Нужно прописать замену тега в фильтрации чата.
Админка ,-=Модерация=-, Фильтрация чата
Пример замены:
/любовь^<a href=# onclick="top.sendto(' /любовь '); return false;"><img src=http://imgs.su/bigsmile2/36.gif border=0></a>^

также прописать замену для всех остальных тегов.
3.
Код кнопки в нижний фрейм для открытия страницы с тегами.
<a href=# onclick="parent.wo('tegs.html','tegs','200','450','yes');return false" target=tegs title=Теги>Теги</a>

458
ridz @ridz
Вывод статуса в никлисте в зависимости от пола
Админка -=Модерация=- Скрипты в чате
В /* [Настройки - никлиста и статусов] */ прописать статусы для девушек (пример)
/* Вывод статусов для девушек*/
var stn_w= new Array();
stn_w[0] ='';
stn_w[1] ='адм';
stn_w[2] ='мод+';
stn_w[3] ='мод';
stn_w[4] ='рулёз';
stn_w[5] ='бывалая';
stn_w[6] ='посетительница';
stn_w[7] ='новенькая';

Затем /* [Функции - формирования никлиста] */ /* Добавление ника в таблицу участников */ добавить строку отмечено красным

if(stn[stat]==null) st=''; else st=stn[stat];
if(stn_w[stat]&&mw_u=='1') st=stn_w[stat];
if(stn2[stat2]==null) icqst=''; else icqst=stn2[stat2];

2536
удалён @crigon
Ссылка "переключиться на 88 порт"

<a href="javascript:void(0);" onclick="if(parent.location.port!=88) { parent.location.href='http://'+parent.location.hostname+':88'+parent.location.pathname+'?'+parent.yourkey; }">переключиться на 88 порт</a>

Отредактировано crigon - 14.04.2010
2536
удалён @crigon
Форма получения информации об участнике чата
от Бабенко Арсений @ 2006-05-13

Установка:

Заходим в администрацию -> "-=Дизайн=-">"HTML документы">"info">"создать">пишем код:

<html>
<head>
<LINK REL=stylesheet HREF="style.css" TYPE="text/css">
</head>
<body onload=javascript:infoform.nick.focus();><center>
<p><b>Получение информации об участнике чата</b><br>
<br>
<form name=infoform method=post action=index.php>
<input type=hidden name=inc value=info><br>
<b>Ник участника</b><br>
<input class=text type=text name=nick><br>
<input type=submit value="Получить" class=ok></form></center>
</body>
</html>

жмём "Сохранить".

Ссылка на форму будет
**********чат-логин/info.html
при адресе чата **********чат-логин

при другом адресе чата адрес корректируем.

Страны в выплывающем меню для анкеты
от Q-Tec

<script>if('%land%'==1) ;print='<select name=land>';print+='<option value=->-</option>';print+='<option value=Albania>Albania</option><option value=Andorra>Andorra</option><option value=Austria>Austria</option><option value=Belarus>Belarus</option><option value=Belgium>Belgium</option><option value=Bosnia and Herzegovina>Bosnia and Herzegovina</option><option value=Bulgaria>Bulgaria</option><option value=Croatia>Croatia</option><option value=Czech Republic>Czech Republic</option><option value=Denmark>Denmark</option><option value=Estonia>Estonia</option><option value=Finland>Finland</option><option value=France>France</option><option value=Germany>Germany</option><option value=Greece>Greece</option><option value=Hungary>Hungary</option><option value=Iceland>Iceland</option><option value=Ireland>Ireland</option><option value=Italy>Italy</option><option value=Latvia>Latvia</option><option value=Liechtenstein>Liechtenstein</option><option value=Lithuania>Lithuania</option><option value=Luxembourg>Luxembourg</option><option value=Macedonia>Macedonia</option><option value=Malta>Malta</option><option value=Moldova>Moldova</option><option value=Monaco>Monaco</option><option value=Netherlands>Netherlands</option><option value=Norway>Norway</option><option value=Poland>Poland</option><option value=Portugal>Portugal</option><option value=Romania>Romania</option><option value=Russia>Russia</option><option value=San Marino>San Marino</option><option value=Slovakia>Slovakia</option><option value=Slovenia>Slovenia</option><option value=Spain>Spain</option><option value=Sweden>Sweden</option><option value=Switzerland>Switzerland</option><option value=Ukraine>Ukraine</option><option value=United Kingdom>United Kingdom</option>';print+='</select>';document.write(print);</script>
Скрипт, позволяющий перенести в анкету аватар с форума
от Ванька.RU

Новая ячейка в анкете(В любое место):
<script>
var avator='%avator%';
if(avator!='') document.write('<tr><td>Аватар на форуме:</td><td><img src='+avator+'></td></tr>');
</script>

<script type="text/javascript" src="src=?inc=set"></script> добавлять не нужно!!!

Скрипт, скрывающий анкету у не зарегистрированного пользователя
от Ванька.RU

Вариант I (плохой)

<script language="JavaScript" type="text/javascript">
if('%mw%' == '-') alert('Пользователь не зарегистрирован !');
if('%mw%' == '-') javascript:window.close();
</script>

При нажатии на анкету вылетает алерт, при нажатии на ОК, анкета закрывается.

Вариант II

Добавить перед </body>
<script type="text/javascript">
if('%regdate%' == 'незарегистр.') {
document.getElementsByTagName("table")[0].style.display = 'none';
document.write('Пользователь не зарегистрирован !'); }
</script>

(для шаблона анкеты по-умолчанию)

Отредактировано crigon - 19.04.2010
2536
удалён @crigon
Скрипт для ваших личных тегов ... не используя фильтрацию как у ridz
от Mister X

Нус приступимс 😀

Для начало создадим сам тег ( возьмем в пример тег прощания /bye ) ... для этого идем в гл. админку ==> скрипты в чате там открываем /* [Функция - вывода сообщений и команд] */ и находим там /* Проверка пользовательских команд для простого сообщения */ и в самом низу этой функции перед последней скобкой " } " пишем свой тег :

if(text.substr(0,4)=="/bye" ) {
is_tag=1;
text="<font color=#00FF00><b><i>*** "+nick+"</b></i></font> <font color=#00FFFF>И</font><font color=#09DADA>С</font><font color=#12B5B5>Ч</font><font color=#1B9999>Е</font><font color=#248B8B>З</font><font color=#1D6666>А</font><font color=#164141>Е</font><font color=#103030>Т ...</font> <text="+text+"> " +text.substr(4,55);}

обратите внимание на три выделенных цифры ... цифры синего цвета прячут сам тег " /bye " ( цифра должна соответствовать количеству знаков в теге у нас их 4 ) а цифра красного цвета обозначает сколько знаков можно написать после тега ( в нашем случае это не больше 55 ) .

Когда будите писать сам тег не в коем случае не переносите строчку клавишей Enter . Строчка должна быть непрерывной . пробелы ставить моно

дальше что бы тег отображался как надо прокручиваем ниже и находим там /* Вывод простого сообщения */ и добавляем все что отмечено красным цветом

/* Вывод простого сообщения */

var is_html_tag_open=0;
if(cmd==0) {
symbol=symbols[0];if(nick==mynick) symbol=symbols[1];if(tonick==mynick || text.split(" "+mynick+":").length>1) {is_html_tag_open=1; symbol=symbols[2];};
set_nick=" <a href='' onclick=\"parent.tonick('"+nick+": '); return false;\"><font size="+sizenick+" color="+colornick+" face='"+facenick+"'>"+set_nick+":</font></a> ";
set_text=" <font size="+size+" color="+color+" face='"+face+"'>" +set_text+"</font> ";
if(is_tag==0) {
if(loaded){nomers++;}
if(nomers==soobwenie&&nomerp<povtor&&room == 0){wr(topic);nomers=0;nomerp++;}

towr=set_time+symbol+set_nick+set_text+"<br>";
} else {
towr=set_time+symbol+set_text+"<br>";
};
if(is_html_tag_open==1){
towr+="</font>";
};

if(nick==mynick || tonick==mynick) myhistory+=towr;
wr(towr);
}

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

458
ridz @ridz
Опубликовано admiral идея народная )))
Скрипт в зависимости от пола в анкете выводит любую вашу картинку, если пользователь не загрузил фото:

1. Открываем Шаблоны - Анкета

2. Находим строку вывода фотографии в анкете (у вас она может отличатся от стандартного):

<tr><td>Фотография</td><td><script>document.write(foto);</script></td></tr>

3. Заменяем эту строку на следующий скрипт:

<script>
if('%foto%'=='-' && '%mw%'==0) document.write('<tr><td>Фотогалерея</td><td><img border=0 src=img/male.gif width=150 height=150 border=0>');
if('%foto%'=='-' && '%mw%'==1) document.write('<tr><td>Фотогалерея</td><td><img border=0 src=img/female.gif width=150 height=150 border=0>');
if('%foto%'=='-' && '%mw%'=='-') document.write('<tr><td>Фотогалерея</td><td><img border=0 src=img/nullmale.gif width=150 height=150 border=0>');
if('%foto%'!='-' && '%mw%'!='-') document.write('<tr><td>Фотогалерея</td><td><a href=%foto% target=_blank title=\'Посмотреть в полном размере\'><img src=%foto% width=150 border=0></a>');
</script>

Синим выделены ссылки до картинок;
Красным выделены размеры, высота, ширина картинок;
Воопще ссылки на картинки можете оформлять по своему желанию и умению.

Описание скрипта:
1. Первая строка скрипта выводит картинку за место фотографии, если пользователь не загружал фото в анкету и он мужского пола;
2. Вторая строка скрипта выводит картинку за место фотографии, если пользователь не загружал фото в анкету и он женского пола;
3. Третья строка скрипта выводит картинку за место фотографии, если пользователь не загружал фото в анкету и он бесполый;
4. Если пользователь загрузил свою фотографию - выводит в анкете фотографию пользователя

458
ridz @ridz
Градиент многоцветный (количество цветов от нуля и выше!!!)
На фтп чата создать файл gradient.js
Содержимое файла:
function color_return(a, b) {
a || (a = "#000000");
b || (b = a);
var c = parseInt(a.substring(a.length - 6, a.length - 4), 16),
d = parseInt(a.substring(a.length - 4, a.length - 2), 16),
e = parseInt(a.substring(a.length - 2, a.length), 16),
f = parseInt(b.substring(b.length - 6, b.length - 4), 16),
g = parseInt(b.substring(b.length - 4, b.length - 2), 16),
h = parseInt(b.substring(b.length - 2, b.length), 16);
c = parseInt((c + f) / 2);
d = parseInt((d + g) / 2);
e = parseInt((e + h) / 2);
return "#" + c.toString(16).replace(/^(.)$/, "0$1") + d.toString(16).replace(/^(.)$/, "0$1") + e.toString(16).replace(/^(.)$/, "0$1")
};

function gr(m, c) {
c || (c = []);
m || (m = "");
var g = document.createElement("div");
g.innerHTML = m;
var d = [],
k = 0;
(function (f) {
f = f.childNodes;
for (var h = 0, n = f.length; h < n; h++) {
var e = f[h];
if (e.nodeType == 3) {
d.push([e, e.data]);
k += e.data.replace(/\s/g,'').length
} else e.hasChildNodes() && arguments.callee(e)
}
})(g);
for (var a = 1; k > c.length;) {
var b = color_return(c[a - 1], c[a]);
c.splice(a, 0, b);
a += 2;
if (a > c.length - 1) a = 1
}
for (b = a = 0; b < d.length; b++) {
for (var l = document.createDocumentFragment(), i = 0; i < d[b][1].length; i++) {
var j = document.createElement("font");
j.color = c[a]
d[b][1][i]!=' '&&a++;
j.appendChild(document.createTextNode(d[b][1][i]));
l.appendChild(j)
}
d[b][0].parentNode.replaceChild(l, d[b][0])
}
return g.innerHTML
};

Далее измените ссылку отмечено красным в скриптах чата на ссылку вновь созданного файла, раздел /* [НАСТРОЙКИ] */
/* Градиент: 0 - выкл, 1 - вкл, позиции в списке - это номера функций "cmd" от 0-10(11-никлист) */
var use_gr=1;
var grok=new Array(1,1,1,0,0,0,1,0,0,0,0,0);
if(use_gr==1) document.write("<"+"script src=**********></"+"script>");

Добавление цветов пример: gra['adm']=new Array("#FF0000","#00FF00","#0000FF","#00FF00","#0000FF");
P.S. Скрипт работает и с прежними трёхцветными данными!

Отредактировано ridz - 03.06.2010
458
ridz @ridz
Копирайт с ежегодным обновлением(новый год вписываеться автоматически)
<script language="JavaScript" type="text/javascript">
var begin = "2008";//год создания чата
var date = new Date();
var new_year = date.getFullYear();
var chat = "Странный чат";//название чата
var avtor = "Ridz and Ko" ;//создатели
document.write("Copyright \""+chat+"\" © "+begin+"-"+new_year+" | Powered by "+avtor )
</script>

Скриншот:

458
ridz @ridz
Действия (или новый вариант быстрых фраз)
Всё ставиться в форму нижнего фрейма.
Скрипт
<script language="JavaScript" type="text/javascript">
function converter(x)
{ var abcr = new Array("А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я","а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
var abci = new Array("%C0","%C1","%C2","%C3","%C4","%C5","%A8","%C6","%C7","%C8","%C9","%CA","%CB","%CC","%CD","%CE","%CF","%D0","%D1","%D2","%D3","%D4","%D5","%D6","%D7","%D8","%D9","%DA","%DB","%DC","%DD","%DE","%DF","%E0","%E1","%E2","%E3","%E4","%E5","%B8","%E6","%E7","%E8","%E9","%EA","%EB","%EC","%ED","%EE","%EF","%F0","%F1","%F2","%F3","%F4","%F5","%F6","%F7","%F8","%F9","%FA","%FB","%FC","%FD","%FE","%FF");
for (i=0; i<abcr.length; i++) { while (x.split(abcr[i]).length>1) x = x.replace(abcr[i], abci[i] )};
return x;
}


function action_cmd(x)
{ if(!x) return;
var nick=parent.chat.document.fmsg.tonick.value;
var text=parent.chat.document.fmsg.text0.value;
var arr = new Array();
arr[1]="кружится в танце с "+nick+" *77";
arr[2]="обнимает "+nick+" *081";
arr[3]="наказывает "+nick+" *733";
arr[4]="дарит букет роз "+nick+" *4";
arr[5]="шепчет на ухо "+nick+" *311";
arr[6]="наливает "+nick+" *363";
arr[7]="говорит привет! "+nick+" *69";
arr[8]="нагло лапает "+nick+" *153";
arr[9]="жестко насилует "+nick+" *45";
arr[10]="шепчет на ухо: Я люблю тебя "+nick+" *25";
arr[11]="кидает помидорами в "+nick+" *695";
arr[12]="прощается с "+nick+" *476";
arr[13]="целует "+nick+" *16";
arr[14]="в изумлении от "+nick+" *21";
parent.write.location.href = 'index.php?inc=write&'+ parent.yourkey+'&text= '+encodeURIComponent(arr[x]+" "+text);
parent.chat.document.fmsg.text0.value='';
parent.chat.document.fmsg.ddd.value='';
}
</script>

Пояснение: arr[1]="кружится в танце с "+nick+" *77"; -- 1 - номер команды для селектора , кружится в танце с - текст команды , +nick+ ник к которому идёт обращение - можно без ника , *77 код смайла или смайлов как они у вас прописаны через пропуск.

Далее сам селектор выбора действий (пример):
<select class=text3 name="ddd" size="1" onchange="action_cmd(this.value);">
<option value=''>Действия</option>
<option value='7'>Привет</option>
<option value='2'>Обнимаю</option>
<option value='1'>Танец</option>
<option value='4'>Розы</option>
<option value='10'>Люблю тебя</option>
<option value='5'>Шептать</option>
<option value='6'>Наливать</option>
<option value='11'>Кидать</option>
<option value='3'>Наказать</option>
<option value='8'>Лапать</option>
<option value='9'>Насиловать</option>
<option value='12'>Прощается</option>
<option value='13'>Поцелуй</option>
<option value='14'>Изумление</option>

</select>

Пояснение: можно в начале написать текст и ник к которому хотите обратиться они добавяться к "команде" которую вы выберите , но можно и без этого - просто выбрать в селекторе нужную команду и текст команды автоматически напечатаеться в логе чата.
Небольшое дополнение: ротация команд в селекторе и кнопка для отправки команды если она Вам подходит.(ставиться по желанию)
Пояснение: команды по порядку высвечиваються в селекторе через определённый промежуток, чтобы воспользоваться командой достаточно нажать на кнопку "Go".
Ставить кнопку и скрипт сразу после селектора
Кнопка:
<a href=# class=ok onclick="action_cmd(parent.chat.document.fmsg.ddd.value);return false" title='Применить действие'>Go</a>

Скрипт:
<script language="JavaScript" type="text/javascript">
function rotate() {
menu = document.fmsg.ddd;
chosen = menu.selectedIndex;
menu.selectedIndex= (chosen == (menu.length-1)) ? 0 : chosen + 1;
setTimeout("rotate()",10000);//Время ротации самих команд
}
setTimeout("rotate()",15000);//Включение ротации после входа в чат
</script>

458
ridz @ridz
Вариант видео для панели юзеров (тема перенесена) иные варианты видео ищите поиском по тегу [video]
это ставим во фрейм участников
<div id=video ></div>

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

var pu = 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 0;
if(nick=='ВАШ НИК') {t=text.split('[video]'); if(t[1]) {t2=t[1].split('[/video]'); if(t2[0]) { var ss2009=t2[0].replace("watch?v=", "v/");ss400='src="'+ss2009+'&hl=ru&fs=1"';parent.users.video.innerHTML='<embed '+ss400+' type=application/x-shockwave-flash allowscriptaccess=always allowfullscreen=true width=300 height=250></embed>';text=text.replace('[video]'+t2[0]+'[/video]','Видеоролик загружен') } else {parent.users.video.innerHTML='';text=text.replace('[video][/video]','Конец просмотра');}}}

код команды отключения показа [video][/video]

установка [video]ссылка на ролик[/video]

эти параметры отрегулируйте сами width=300 height=250 по ширине вашего фрейма участников


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