![]() |
[Сервис чатов | Знакомства | Хостинг PHP | Хостинг радио | Загрузка картинок | Рейтинг чатов | Платежная система] |
Вы не зашли.
Кланы - вот оно, долгожданное (только для платных чатов)
Функции администрации
- в параметрах можно установить стоимость создания клана в пунктах
- и минимальную стоимость для вступления в один из кланов
- в модерации новая ссылка на вирт. кланы
- через эту ссылку можно выбрать любого главу клана, удалить его клан или просто отредактировать
Функции пользователей
- набрав допущенное число пунктов каждый пользователь может основать свой клан
- он может указать своё число пунктов для вступления в клан
- он может редактировать название, описание, а также загружать иконку (до 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=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=clan/"+clan[0]+".jpg>");
На этом всё! Наслаждайтесь новой функцией сервиса - Кланы.
Если у вас есть обосновынные улучшения по кланам, скрипт может быть усовершенствован!

Неактивен
Добавление тега [img]для форумов
Открываем шаблон форума, forum.inc, и находим участок кода:
/* Для вывода кнопок тегов */
var tags="";
for(i=0;i<atags.length;i++) {tag=atags[i][0]; accesskey=tag[0];
if(!tag) tags+=atags[i][1]+" ";
else if(atags[i][1].substr(1,4)=='font') tags+="<option value="+tag+" style="+atags[i][2]+">"+tag;
else tags+="<input class=ok type='button' accesskey="+accesskey+" value=' ["+tag+"] ' onclick=ftags('["+tag+"]','[/"+tag+"]') style="+atags[i][2]+"> ";
}
tags+="<input class=ok type=button value=' [img] ' onclick=ftags('[img]','[/img]')> ";
tags+="<input class=ok type=button value='RU' onclick='translateall();' > ";
tags+="<input class=ok type=button value='Ñìàéëû' onclick='document.getElementById(\"smiles\").innerHTML=smiles;' > ";
- добавляем красное!
Теперь находим этот участок кода:
/* Фильтрирует текст - смайлы, теги, ссылки, картинки */
/* img_max - макс. картинок к отображению в одном сообщении вместо ссылок */
var message_img_max=10; /* сообщение */
var signature_img_max=0; /* подпись */
function filter(text,img_max) {
var img_c=0;
for(k=0;k<atags.length;k++) {
if(!atags[k][0]) continue;
tag1='['+atags[k][0]+']'; btag1='[/'+atags[k][0]+']';
btag2=atags[k][1].split(" ")[0].split(">");btag2=btag2[0].substr(1);
tag2=atags[k][1];btag2='</'+btag2+'>';
max=0;while (text.indexOf(tag1)>=0 && max<10) {text = text.replace(tag1, tag2);max++;}
max=0;while (text.indexOf(btag1)>=0 && max<10) {text = text.replace(btag1, btag2);max++;}
}
a=text.split('<br>').join(' <br> ').split(' ');
for(k=0;k<a.length;k++) {
if(a[k].match(/^\[img\]http:\/\/[0-9a-z.\/_-]+\.(gif|jpg|jpeg|bmp|png)\[\/img\]$/i) && img_c<img_max) {src=a[k].replace('[img]','').replace('[/img]',''); a[k]='<a href='+src+' target=_chat><img src='+src+' border=0 style=position:relative;></a>';img_c++;}
else if(a[k].substr(0,7)=='http://') a[k]='<a href='+a[k]+' target=_chat>'+a[k]+'</a>';
for(j=0;j<sm.length;j++) if(a[k]==sm[j][0]) a[k]='<img src='+smdir+sm[j][1]+'>';
}
text=a.join(' ');
return text;
}
- а в этом участке кода мы изменяем допустимое число картинок на 10 и строчку с преобразованием картинки.
Так как добавили новый тег, необходимо разширить таблицу формы ответа, почти в самом низу находим:
/* Отображение формы для создания тем, сообщений и их редактирования */
if(closedtopic==1 && moderator==0) wr("<center><a name=sendmess></a><b>Эта тема закрыта, вы не можете здесь отправить сообщение!</b></center><br>");
else if(forum>0 && topic>0 && f_f[fa][8]==2 && moderator==0) wr("<center><a name=sendmess></a><b>Этот раздел только для модераторов!</b></center><br>");
else if(forum>0 && topic==0 && (f_f[fa][8]==1 || f_f[fa][8]==2) && moderator==0) wr("<center><a name=sendmess></a><b> Создание тем в этом разделе только для модераторов!</b></center><br>");
else
if(forum>0 && mynick && myid) {
wr("<form name=form action='' method='post'>");
wr("<input name=nick type=hidden value="+mynick+"><input name=id type=hidden value="+myid+">");
wr("<table width=540 align=center >");
if(topic==0) {if(editmessage) atitle="Редактировать тему"; else atitle="Создать новую тему";}
else {if(editmessage) atitle="Редактировать сообщение"; else atitle="Написать ответ";}
wr("<tr><td class=title><a name=sendmess></a>"+atitle);
if(editmessage) wr("<input name=toedit type=hidden value=1>");
if(topic==0 || edittopic) wr("<tr><td>Заголовок<br><input name=newtopic class=text style='width:100%;' maxlength=50 value='"+edittopic+"'>");
wr("<tr><td>Текст сообщения<br>"+tags+"<textarea style='width:100%;' rows=10 name=message class=text>"+editmessage+"</textarea><div id=smiles> </div>");
wr("<tr><td><input type=submit value=Отправить class=ok></table>");
wr("</form>");
}
- здесь мы установили ширину на 540 вместо стандартного 500.
Эти изменения уже внесены в стандартный шаблон.
Неактивен
Супербан - бан по параметрам системы
В чате в админке вы можете найти новую фишку - боркировать по системному ключу составленному по на параметрах системы.
Есть 2 вида банов: по жёсткому и лёгкому ключу.
Лёгкий ключ содержит 2 числа вида 12345-1234 и является менее эффективным.
Жёсткий ключ очень эффективный и использует только первое число, но может заблокировать сразу до 5% всех ваших пользователей. (используйте только в крайних мерах)
Для жёсткого бана установка не требуется, он будет работать всегда.
Установка ключа для лёгкого бана
В шаблоне титульника чата после <form ...> вставьте эту строчку:
<script>if(i_aidn) document.write("<input type=hidden name=i_aidn value="+i_aidn+">");</script>
- на титульнике до этой строчки должен быть загружен информер (по-умолчанию так и есть)
Если вы зайдёте в чат и вид ключа будет состоять из 2х цифр, например 12345-1234, значит вы всё сделали правильно!
PS> Крайне не рекомендуется использовать бан по жёсткому ключу,
так как таким баном может быть заблокированно до 5% всех посетителей.
Неактивен
Очередная серия обновлений
1. Теперь вещи из магазина в анкете можно отображать по-странично и в обратной последовательности
http://live-co.com/viewtopic.php?pid=54760#p54760
2. Добавление полей в анкету
Вы можете использовать 10 произвольных полей от field1 до field10, а для вывода естествено от %field1% до %field10%
Учтите что ссумарная длина всех полей не может привысить 2000 символов и автоматически укорачивается, во избежания неприятностей используйте параметр maxlength. Например:
<input name=field1 value='%field1%' maxlength=100> - в этом поле пользователь не сможет указать более 100 символов!
3. Изменение шаблона регистрации
Теперь шаблона для формы regform.inc больше нет, он автоматически был вписан в основной шаблон регистрации, а при удачной регистрации форма просто скрывается через яву скрипт!
Также были произведены улучшения в стандартном шаблоне и исправлена ошибка вывода картинки кода при ошибки в регистрации.
4. Изменение меню в главной админке
Управление баном из раздела модерации перенесено в раздел пользователи.
5. Запоминание игнора в браузере через Cookie
В скриптах чата в разделе Функции (общие), находим функции игнора и меняем на эти:
/* Функции добавлиния игнора в массив и проверки */
var ign = new Array('');
ign=getcookie(parent.chatlogin.replace("-","_")+"_mpign").split(",");
function ign_sel(nick) {ok=ign_ok(nick);
for(var i=0;i<ign.length;i++) {if(ok && nick==ign[i]) ign[i]=null; if(!ok && !ign[i]) break;}
if(!ok) ign[i]=nick;
setcookie(parent.chatlogin.replace("-","_")+"_mpign",escape(ign.join(",")),1000000);
}
function ign_ok(nick){for(var i=0;i<ign.length;i++) if(nick==ign[i]) return 1;}
Для тех у кого нет функций setcookie getcookie их также нужно установить в этом разделе!
Также найдите функцию f() вывода сообщений и измените красную строчку!
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;
готово!
Неактивен
Движок новостей на 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=parent.getcookie("lastnew");
var c=0;
for(var i in news) if(i>lastnew) {parent.wr(news[i]);lastnew=i;c++;}
parent.setcookie('lastnew',lastnew,10000000000);
if(c>0) alert('Для вас есть '+c+' новых новости!');
PS. в скриптах должны быть функции getcookie и setcookie (просто не у всех есть)
Также можно выводить эти новости для определённого статуса или ника, добавляем красное:
только для одного ника
for(var i in news) if(i>lastnew && parent.mynick=='НИК') {parent.wr(news[i]);lastnew=i;c++;}
или parent.status==1 - только для админов
for(var i in news) if(i>lastnew && parent.status==1) {parent.wr(news[i]);lastnew=i;c++;}
Неактивен
Некоторые обновления
1. Доставка сообщений в фрейм сообщений теперь происходит с интервалом в 0.150 сек, было 0.100
(увеличен для снижения нагрузки на сервер)
2. В информере теперь можно выводить список ников онлайн разделяя их по полу, подробнее (выводится переменная пола)
http://live-co.com/viewtopic.php?pid=5680#p5680
3. Запрет на добавление себя в игнор, с красивым курсором
В скриптах чата в разделе функции вывода никлиста, в функции format() добавим красную строчку после указаной!
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;\">";
if(nick == mynick) set_ign = "<img src="+ign_img+" style='cursor: not-allowed;' title='себя игнорировать нельзя'>";
4. Вывод в никлист иконки обручённых в загсе а также иконки клана
Установка
1. редактируем irc.html, добавляем красное
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);
}
2. Переходим в скрипты чата -> Настройки никлиста и статусов (добавляем красное)
/* [Настройки - никлиста и статусов] */
/* Значок привата */
var privat_s='@';
/* Стандартная иконка */
var icon1='http://live-co.com/img/ico/0.gif';
/* Вывод иконки обручённых в загсе */
var love1='<img src=http://mpchat.com/blank/img/love.gif border=0>';
3. Далее в скриптах чата -> [Функция - вывода сообщений и команд] (добавляем красное)
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(cmd==5) {kill=var9; timeout=var10;}
else if(cmd==6 || cmd==7) {
inchat=text; mw=var9; st=var10; icon=var11; status=var12; love=var13; clan=var14;
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];
}
чуть ниже в коде
/* Вывод входа юзера в чат и добавление в нклист через 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>";
wr(set_time+"<font color=red>К нам приходит "+set_nick+". Поприветствуем!</font><br>");
}
add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan);
}
а это немного ниже нужно полностью заменить
/* Сообщение о смене статуса участника и его изменение */
if(cmd==8) {
status=text;
for(var i=0;i<us.length;i++)
if(us[i]!= null && us[i][0]==nick){
us[i][5]=status;
if(icqtxt[status]) wr(set_time+"<font size=2 color="+colornick+"><b>"+set_nick+":</b></font> <i>"+icqtxt[status]+"</i><br>");
var obj=parent.users.document.getElementById("!"+nick);
while(obj.cells.length) obj.deleteCell(0);format(i,obj);
}}
и ещё ниже
/* Функция перехода в комнаты */
if(cmd==10) {
oldroom=room; setroom=text;
if(loaded==1) {
for(var i = 0;i<us.length;i++ ) if(us[i]!=null && us[i][0]==nick) {
us[i][6]=setroom;
update(oldroom,-1);update(setroom,1);
}
if(nick==mynick) {
myroom=setroom;
if(roomlog==1) {
parent.left.document.body.innerHTML="Подождите, осуществляется переход в другую комнату ...";
window.setTimeout("loadframes();",2000);
window.setTimeout("setstyle(rooms[myroom][2]);",4000);
return;
}
ucc=new Array();
parent.left.document.body.innerHTML="";
parent.users.document.getElementById('users').innerHTML=userlist;
window.setTimeout("for(var i=0;i<us.length;i++) if(us[i]!=null) add(us[i][0],us[i][1],us[i][2],us[i][3],us[i][4],us[i][5],'','',us[i][6],us[i][7],us[i][8]);",500);
setstyle(rooms[myroom][2]);
}
else {
for(var i = 0;i<us.length;i++ ) if(us[i]!=null && us[i][0]==nick) {
if(myroom==setroom) {add(us[i][0],us[i][1],us[i][2],us[i][3],us[i][4],us[i][5],'','',us[i][6],us[i][7],us[i][8]);}
else {var obj=parent.users.document.getElementById("!"+nick); if(obj) parent.users.document.getElementById('ul').deleteRow(obj.rowIndex); seprules(-1,us[i][2],us[i][3]);}
}}}
towr="";
if(nick==mynick && loaded==1) towr=set_time+"<i>Вы перешли в комнату -> <b>"+rooms[setroom][0]+"</b>.</i><br>";
else if(myroom==setroom) towr=set_time+"<i><a href='' onclick=\"parent.tonick('"+nick+": '); return false;\"><font color="+colornick+">"+nick+"</font></a> приходит к нам из комнаты -> <b>"+rooms[oldroom][0]+"</b>.</i><br>";
else if(myroom==oldroom) towr=set_time+"<i>"+nick+" уходит в комнату -> <b>"+rooms[setroom][0]+"</b>.</i><br>";
if(nick==mynick) myhistory+=towr;
wr(towr);
}
4. Опять в скриптах -> [Функции - формирования никлиста] (добавляем красное в 4х местах)
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(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(room==myroom) {
nickid="!"+nick;
obj=parent.users.document.getElementById(nickid);
ul=parent.users.document.getElementById('ul');
ul.deleteRow(obj.rowIndex);
seprules(-1,st,mw);
}}
/* Добавление ника в таблицу участников */
function format(i,tr){
if(us[i]==null) return "";
nick=us[i][0];
color=us[i][1];
stat=us[i][2];
stat2=us[i][5];
mw_u=us[i][3];
icon=us[i][4];
love=us[i][7];
clan=us[i][8];
set_nick=setgn(11,nick);
set_privat=privat_s;
if(icon_on) {
if((icon=="")||(icon==0)) icon="<img src="+icon1+" border=0>";
else icon="<img src="+icon+" border=0>";
set_privat=icon;
}
if(stn[stat]==null) st=''; else st=stn[stat];
if(stn2[stat2]==null) icqst=''; else icqst=stn2[stat2];
mw=mw_n;
if(mw_u=='0') mw=mw_m;
if(mw_u=='1') mw=mw_w;
set_love=""; if(love) set_love=" <a href=index.php?inc=info&nick="+love+" title='Обручены с "+love+"' target=_blank>"+love1+"</a>";
set_clan=""; if(clan>0) set_clan=" <a href=index.php?inc=clan&clan="+clan+" title='Находится в клане' target=_blank><img src=clan/"+clan+".gif border=0></a>";
/* Определение игнора */
ign_st="off";
ign_img=ign_imgoff;
if(ign_ok(us[i][0])) {ign_st="on"; ign_img=ign_imgon;}
/* Определение частей никлиста */
set_privat="<a href='' onclick=\"parent.ptonick('"+nick+": '); return false;\">"+set_privat+"</a>";
set_nick="<a href='' onclick=\"parent.tonick('"+nick+": '); return false;\"><font color="+color+">"+set_nick+"</font></a>";
set_nick=set_nick+set_love+set_clan;
set_st=st;
set_icqst=icqst;
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_mw="<a href=index.php?inc=info&nick="+us[i][0]+" onclick=\"parent.wo(this.href,'Анкета','400','320','yes');return false;\" target="+us[i][0]+">"+mw+"</a>";
/* Добавление ячеек в таблицу */
tr.insertCell(0).innerHTML=set_privat;
tr.insertCell(1).innerHTML=set_nick; tr.cells[1].width="100%";
tr.insertCell(2).innerHTML=set_st;
tr.insertCell(3).innerHTML=set_icqst;
tr.insertCell(4).innerHTML=set_ign;
tr.insertCell(5).innerHTML=set_mw;
}
5. Для токо чтобы бот отображался с иконками
В скриптах чата - Общие функции, находим этот код и добавляем красное:
/* Добавления в никлист бота-робота, ниже структура */
room_r=0;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;}
}
Обновление можно выполнять пошагово!
Неактивен
Новый вариант смены движков при проблемах с кешированием трафика!
Так как у некоторых пользователей провайдеры, антивирусы и фаерволы блокируют трафик, им предлагается сменить движок на ажакс, но к сожалению он не такой быстрый и стабильный как непрерывный движок!
К счастью был добавлен вариант загрузки чата через порт 88 - нестандартный порт который скорее всего не будет кешироваться проверками антивируса! Желающие могут попробовать установить этот вариант смены движка для тестирования!
Установка
Открываем скрипты чата, в самом низу "Подготовка фреймов и загрузка сообщений" меняем красную строчку:
/* [Подготовка фреймов и загрузка сообщений] */
var userlist="<table id=ul width=100%></table>";
function loadframes() {
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(interval) window.clearInterval(interval);
/* Подготовка фрейма привата */
if(parent.privatok==1) {
parent.privat.document.write(privatframe);
parent.privat.document.body.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();
parent.users.document.getElementById('users').innerHTML=userlist;
/* Загрузка фрейма сообщений */
parent.left.location.href="irc.html?"+myid;
/* Загрузка актуального стиля, если был изменён */
if(mystyle) window.setTimeout("setstyle(mystyle);",3000);
/* Проверка непрерывного соединения */
if(ajaxon) {ajax(1); return;}
interval=window.setTimeout('if(confirm("Ваш компьютер не может работать с потоковым движком чата. Нажмите ОК для перехода на другой движок чата или Отмена для дальнейших действий.")) ajax(1); else if(confirm("Нажмите ОК чтобы узнать причину или Отмена для продолжения загрузки потокового движка.")) parent.left.location.href="index.php?inc=problem";',10000);
}
}
var interval=window.setInterval("loadframes()",100);
на этот код:
interval=window.setTimeout(
'if(location.port!=88 && confirm("Проблема потокового соединение через стандартный порт. Нажмите ОК для перехода на другой порт или Отмена для дальнейших действий.")) location.href="http://"+location.hostname+":88"+location.pathname+"?"+yourkey; '+
'else if(confirm("Нажмите OK если хотите перейти на ажакс движок чата или Отмена для дальнейших действий.")) ajax(1); '+
'else if(confirm("Нажмите ОК чтобы узнать о проблеме с движками или Отмена для продолжения загрузки потокового движка.")) parent.left.location.href="index.php?inc=problem";'
,1000*10); /* Время для проверки потокового движка 10 сек */Вы можете отказаться от предоставления выбора движка на первой стадии, т.е. при проблеме с основным движком сделать мгновенный переход на 88й порт, но учтите что пользователи, у которых закрыт 88й порт через фаервол, не смогут воспользоваться выбором предоставления ажакс движка!
Код с переходом на 88й порт без подтверждения:
interval=window.setTimeout(
'if(location.port!=88) location.href="http://"+location.hostname+":88"+location.pathname+"?"+yourkey; '+
'else if(confirm("Нажмите OK если хотите перейти на ажакс движок чата или Отмена для дальнейших действий.")) ajax(1); '+
'else if(confirm("Нажмите ОК чтобы узнать о проблеме с движками или Отмена для продолжения загрузки потокового движка.")) parent.left.location.href="index.php?inc=problem";'
,1000*10); /* Время для проверки потокового движка 10 сек */Неактивен
Определения ключей супербана при регистрации ника
Существует проблема, пользователь заблокированный по ключу может флудить в гостевой на форуме и в галереи зарегистрировав новый ник. Наилучший способ предотвратить это, это поставить гостевую только для зарегистрированных, а саму регистрацию настроить так чтобы для нового ника уже был определён ключ.
Открываем шаблон регистрации, добавляем красное и изменяем синию строчку кода на новую:
<html>
<head>
<title>Регистрация</title>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<link rel=STYLESHEET type=text/css href=style.css>
</head>
<script src=http://mpchat.com/chat/?inc=informer></script>
<body class=reg-body>
<center>
<b>Регистрация</b><br><br>
<font color=ff0000>
<script>
/* вывод ошибки при неудачной регистрации */
if(err==1) document.write('Слишком много зарегистрированных, обратитесь к админу!');
if(err==2) document.write('Вы забыли заполнить одно из обязательных полей!');
if(err==3) document.write('Ошибка синтаксиса или длинны ника.');
if(err==4) document.write('Не используйте латиницу и кирилицу одновременно!');
if(err==5) document.write('Извините, но такой участник уже зарегистрирован.');
if(err==6) document.write('Неправильно указан email.');
if(err==7) document.write('Код введён неверно или устарел, попробуйте ещё раз!');
if(err==8) document.write('Слишком много данных, максимально 2000 символов!');
if(err==9) document.write('Регистрация невозможна, обратитесь к админу!');
</script>
</font>
<form action='' method=post id=regform>
<script>if(i_aidn) document.write("<input type=hidden name=i_aidn value="+i_aidn+">");</script>
Логин 3-15 букв или цифр<br><br>
<b>Логин</b><br>
<input name=nick type=text class=text><br>
<b>E-mail</b><br>
<input name=email type=text class=text><br>
<b>Пароль</b><br>
<input name=pass type=password class=text><br>
%code%<br>
<input type=text name=code class=text><br>
<input name=subscribe type=checkbox > - рассылка<br>
<input type=submit name=done value=Регистрация class=ok>
</form>
<font color=336699>
<script>
/* скрыть форму при удачной регистрации (id=regform) */
if(regok>0) document.getElementById('regform').style.display='none';
/* вывод сообщения об удачной регистрации */
if(regok==1) document.write('Регистрация завершенна!');
if(regok==2) document.write('Регистрация завершенна, дождитесь подтверждения регистрации админом!');
if(regok==3) document.write('Регистрация завершенна, вам отправлено письмо для подтверждения регистрации!');
/* Через 3 секунды после удачной регистрации перенаправить в чат */
var timewait=3;
if(regok==1 && nick && id) {
document.write('<br>Вы будете перенаправлены в чат автоматически!');
document.write('<form id=joinform action=./ method=post target=_top style="display:inline;">');
if(i_aidn) document.write('<input type=hidden name=i_aidn value='+i_aidn+'>');
if(nick) document.write('<input type=hidden name=nick value='+nick+'>');
if(nick) document.write('<input type=hidden name=id value='+id+'>');
document.write('</form>');
window.setTimeout('document.getElementById("joinform").submit();',1000*timewait);
}
</script>
</font>
</center>
</body>
</html>
Если у Вас очень старый шаблон, просто востановите стандартный!
Неактивен
Некоторые обновления галереи и другое
1. Теперь вы можете скачивать шаблоны и другие выбранные файлы вашего чата через Web-FTP сразу архивом.
Просто отметьте файлы которые хотите скачать и нажмите скачать. Системные файлы вида .sys и другие скачать невозможно!
2. Удалены скрипты ?inc=lastreg (последние зарегистрированные) и ?inc=users (пользователи в чате)
Они не требуется так как обычно эта информация отображается через информер на главной странице.
Если вам всё-таки хочется отображать эту информацию в отдельных файлах, вы можете создать новые файлы:
(файлы нужно создавать в главной директории чата)
lastreg.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>
<script src=index.php?inc=informer&lastreg=10></script>
<center>
<script>
html="<b>10 новичков</b><br><br><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];
html+="<tr><td><a href=?inc=info&nick="+i_nick+" target=_blank><font color="+i_color+">"+i_nick+"</font></a>";
}
html+="</table>";
document.write(html);
</script>
</center>
</body>
</html>inchat.html (т.к. users.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>
<script src=index.php?inc=informer&inchat=1></script>
<center>
<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];
if(i_mw=='1') {uw+="<tr><td><a href=?inc=info&nick="+i_nick+" target=_blank><font color="+i_color+">"+i_nick+"</font></a>";uwc++;}
else if(i_mw=='0') {um+="<tr><td><a href=?inc=info&nick="+i_nick+" target=_blank><font color="+i_color+">"+i_nick+"</font></a>";umc++;}
else {un+="<tr><td><a href=?inc=info&nick="+i_nick+" 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="<b>Сейчас в чате</b><br><br><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><br>Всего в чате: "+i_inusers.length;
document.write(html);
</script>
</center>
</body>
</html>3. Уже давно из-за блокировки окон в новых чатах привызове пользователей вместо окна с музыкой просто алерт окошко. Сейчас для всех старых чатов автоматически был скопирован фаил mid.html и изменён в скриптах, а старый фаил http://mpchat.com/mid.php был удалён.
4. Модификация галереи, теперь для всех минифоток выводится подробная информация, такие как оценки, число коментариев и дата последнего коментария. Также модераторы теперь могут удалять сразу несколько комментариев отметив их галочками.
Установка
а) Открываем шаблон галереи gallery.inc, чуть ниже середины находим там 2 строки кода указанные чёрным и добавляем новую функцию указанную синим цветом:
/* Функция формирования информации о фотографии */
function fotoinfo(x) {
var info="";
if(x[3]) info+=x[3]+"<br>";
info+="<a href=?inc=gallery&gallery="+x[2]+">"+x[2]+"</a>";
if(gal_upload>0) info+=" [<a href='?inc=info&nick="+x[2]+"' target='"+x[2]+"'>?</a>]";
info+="<br>"+x[1]+"<br>";
if(x[4]>0) info+="Оценка: "+(Math.round(x[5]/x[4]*10)/10)+" ("+x[4]+")<br>";
if(x[6]>0) info+="<font style='cursor:pointer;' title='Последний: "+x[7]+"'>Коментариев: "+x[6]+"</font><br>";
return info;
}
/* Печатает ссылку на галерею с всеми фотографиями */
wr("<a href=?inc=gallery><b>Галерея чата ("+gal_c+")</b></a><br><br>");
б) Немного ниже находим такой код и добавляем в него синее, а оранжевое можно убрать:
if(!afoto) {
/* Печатает мини-фотографии выбранной галереи или последние добавления */
if(!g_f.length) wr("<font color=red>Фотографии не найденны!</font><br><br>");
else {
var sites=Math.ceil(gal_ac/gal_ps);
var links=genlinks("?inc=gallery&gallery="+gallery+"&site=",sites,site);
var tr=5;
var atr=0;
wr(links+"<br><br><table>");
for(var i=0;i<g_f.length;i++) {if(atr==0) wr("<tr>");atr++;if(atr==5) atr=0;
if(moderator==1) todel="<a href='?inc=gallery&gallery="+gallery+"&delfoto="+g_f[i][0]+"' onclick='return confirm(\"Вы действительно хотите удалить эту фотографию?\");' class=low>удалить</a><br>"; else todel="";
wr("<td align=center><a href='?inc=gallery&gallery="+gallery+"&foto="+g_f[i][0]+"'><img src=gallery/trumb/"+g_f[i][0]+".jpg border=0 title='Дата: "+g_f[i][1]+"\r\nГалерея: "+g_f[i][2]+"\r\nПодпись: "+g_f[i][3]+"\r\n' ></a><br>"+fotoinfo(g_f[i])+todel+"</td>");
}
wr("</table><br>"+links+"<br><br>");
}
в) Ещё немного ниже код был значительно изменён, добавьте синее, а красный видоизменённый код нужно заменить полностью:
/* Выводим выбранную фотографию */
if(afoto) {
if(moderator==1) todel="<a href='?inc=gallery&gallery="+gallery+"&delfoto="+afoto[0]+"' onclick='return confirm(\"Вы действительно хотите удалить эту фотографию?\");'>Удалить фотографию</a><br>"; else todel="";
if(pfoto) prev="<a href='?inc=gallery&gallery="+gallery+"&foto="+pfoto[0]+"'><img src=gallery/trumb/"+pfoto[0]+".jpg border=0></a><br>"+fotoinfo(pfoto); else prev="";
if(nfoto) next="<a href='?inc=gallery&gallery="+gallery+"&foto="+nfoto[0]+"'><img src=gallery/trumb/"+nfoto[0]+".jpg border=0></a><br>"+fotoinfo(nfoto); else next="";
wr("<table><tr><td width=120 align=center valign=top>"+prev+"<td align=center><img src=gallery/image/"+afoto[0]+".jpg><br>"+fotoinfo(afoto)+todel+"</td><td width=120 align=center valign=top>"+next+"</td></tr></table><br><br>");
wr("<a href=#sendmess>Добавить сообщение</a><br><br>");
/* Подготовка коментариев и ссылок страниц */
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]);
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+"</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);
/* Вывод коментариев */
if(sites>0) {
if(moderator==1) wr("<form name=postsform action='' method=post style=display:inline>");
wr(links+'<br><br>');
wr(all_posts);
wr(links+'<br><br>');
if(moderator==1) wr("<input type=submit value='Удалить выбранные сообщения' class=ok></form>");
}
Ну вот и готово! Если ваша галерея после этого не заработает толучше всего просто востановить весь шаблон!.
Также обратите внимание на нижестоящий текст!
Оценка и кол-во коментариев будет выводиться только для тех фоток для которых будут добавлены или удалены коментарии начиная с момента обновления! (произойдёт новый пересчёт)
Так как галерея была переделана в информер добавлена дополнительная информация о фотках.
Последовательнось элементов массивов lastfotos/randfotos была изменена, подробнее в описании информера: http://live-co.com/viewtopic.php?pid=5680#p5680
ВНИМАНИЕ!!! Недавно в теме про готовые решения для чата был выложен способ выводить оценки и число коментариев для мини-фоток в галереи. Если вы установили это обновление, срочно уберите его так в нём используется множество одновременных ajax запросов, что вызывает не только лишную нагрузку на сервер, но и пользователи просматривающие галерею будут заблокированны фаерволом сервера!!!
Неактивен
Некоторые обновления
Шаблон поиска пользователей
Теперь в каждом чате появилась возможность редактировать шаблон поиска пользоателей search.inc
Доработка WAP и мобильной версии чата
Была доработана WAP2.0 версия чата, а также мобильная версия чата с 3мя движками на выбор.
Подробнее описано тут внизу: http://mpchat.com/?to=irc
Массовое удаление сообщений в гостевой через чекбоксы
Внимание!!! Если не сделать это обновление, то вы вообще не сможете удалять сообщения в гостевой!
Открываем шаблон гостевой gb.inc находим этот код, добавляем синее и изменяем красное!
/* Подготовка сообщений и ссылок */
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]);
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+"</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);
/* Вывод сообщений */
if(sites>0) {
if(moderator==1) wr("<form name=postsform action='' method=post style=display:inline>");
wr(links+'<br><br>');
wr(all_posts);
wr(links+'<br><br>');
if(moderator==1) wr("<input type=submit value='Удалить выбранные сообщения' class=ok></form>");
}
Неактивен
Улучшенный фильтр BB-тегов и другое
Для начала обратите внимание на последнее неоглашённое обновление, в частности связанное с удалением сообщений в гостевой:
http://live-co.com/viewtopic.php?pid=182241#p182241
Новый фильтр для сообщений форума, галереи, гостевой
Что нового:
- исправлены ошибки преобразования тегов, и вложенных тегов - тег code теперь не меняет содержимое, даже если внутри другие теги - исправлено автоматическое преобразование ссылок - ББ кнопки теперь полностью редактируемые - из стандарта удалены старые цветовые теги, тут на форуме в установке они ещё есть - добавлены новые BB-теги, примеры [url=адрес]название ссылки[/url] [url]адрес[/url] - линкование url [email=адрес]название[/email] [email]адрес[/email] - линкование email [color=цвет_шрифта] [size=размер_шрифта] [font=название_шрифт] - для шрифтов [left] [center] [right] - для выравнивания текста и картинок [sub] [sup] - заниженный и завышенный текст [hr] - горизонтальная черта
Пример: http://mpchat.com/chat/?inc=forum&f … 98#post198
Установка фильтра в шаблоны forum.inc, gallery.inc, gb.inc (для всех одинаково)
Внимание!!! Этот код приведён таким образом что старые теги цветов [red] [blue] [green] и т.д. для правильного отображения уже написанных сообщений также будут обрабатываться, но в стандартном шаблоне по умолчанию эти строки за ненадобностью отсутствуют. Также этот код на форуме в отличии от стандартного шаблона был спецально обработан для правильно отображения!!! Если вам не нужны старые цветовые коды и вы не производили особых настроек в скриптах шаблона, лучше заменять код из стандартного шаблона.
Установка для всех:
1. Находим этот код:
/* 0 - название тега без [], 1 - замена тега HTML, 2 - стиль кнопок */
var i=0;
var atags=new Array();
atags[i]=new Array('b','<b>','font-weight:bold');i++;
atags[i]=new Array('i','<i>','font-style:italic');i++;
atags[i]=new Array('u','<u>','text-decoration:underline');i++;
atags[i]=new Array('s','<s>','text-decoration:line-through');i++;
atags[i]=new Array('','<select class=ok onchange=\'ftags("["+this.value+"]","[/"+this.value+"]")\'>','');i++;
atags[i]=new Array('black','<font color=black>','color:black');i++;
atags[i]=new Array('red','<font color=red>','color:red');i++;
atags[i]=new Array('blue','<font color=blue>','color:blue');i++;
atags[i]=new Array('green','<font color=green>','color:green');i++;
atags[i]=new Array('orange','<font color=orange>','color:orange');i++;
atags[i]=new Array('yellow','<font color=yellow>','color:yellow');i++;
atags[i]=new Array('purple','<font color=purple>','color:purple');i++;
atags[i]=new Array('gray','<font color=gray>','color:gray');i++;
atags[i]=new Array('','</select>','');i++;
atags[i]=new Array('code','<div style="background-color:dddddd; border: 1px solid #000; margin:2px;padding:8px;overflow:scroll;width:500px;"><pre>','');i++;
atags[i]=new Array('quote','<div style="background-color:eeeeee; border: 1px solid #000; margin:2px;padding:8px;">','');i++;
/* Для вывода кнопок тегов */
var tags="";
for(i=0;i<atags.length;i++) {tag=atags[i][0]; accesskey=tag[0];
if(!tag) tags+=atags[i][1]+" ";
else if(atags[i][1].substr(1,4)=='font') tags+="<option value="+tag+" style="+atags[i][2]+">"+tag;
else tags+="<input class=ok type=button accesskey="+accesskey+" value=' ["+tag+"] ' onclick=ftags('["+tag+"]','[/"+tag+"]') style="+atags[i][2]+"> ";
}
tags+="<input class=ok type=button value=' [img]' onclick=ftags('[img]','[/img]')> ";
tags+="<input class=ok type=button value='RU' onclick='translateall();' > ";
tags+="<input class=ok type=button value='Смайлы' onclick='document.getElementById(\"smiles\").innerHTML=smiles;' > ";И заменяем на этот:
/* Обработчик BB-тегов, ненужные закоментировать (шаблон, замена, повторно) */
var etags=new Array(); var i=0;
etags[i]=new Array(/\[b\](.*?)\[\/b\]/g,'<b>$1</b>');i++;
etags[i]=new Array(/\[i\](.*?)\[\/i\]/g,'<i>$1</i>');i++;
etags[i]=new Array(/\[u\](.*?)\[\/u\]/g,'<u>$1</u>');i++;
etags[i]=new Array(/\[s\](.*?)\[\/s\]/g,'<s>$1</s>');i++;
//etags[i]=new Array(/\[black\](.*?)\[\/black\]/g,'<font color=black>$1</font>');i++;
etags[i]=new Array(/\[color=(#?[a-z0-9]{3,10})\](.*?)\[\/color\]/g,'<font color="$1">$2</font>',1);i++;
etags[i]=new Array(/\[size=([1-9]{1})\](.*?)\[\/size\]/g,'<font size="$1">$2</font>',1);i++;
etags[i]=new Array(/\[font=([A-z ]{3,20})\](.*?)\[\/font\]/g,'<font color="$1">$2</font>',1);i++;
etags[i]=new Array(/\[sub\](.*?)\[\/sub\]/g,'<sub>$1</sub>');i++;
etags[i]=new Array(/\[sup\](.*?)\[\/sup\]/g,'<sup>$1</sup>');i++;
etags[i]=new Array(/\[hr\]/g,'<hr>');i++;
etags[i]=new Array(/\[left\](.*?)\[\/left\]/g,'<div style="float:left;padding: 4px 10px;">$1</div>');i++;
etags[i]=new Array(/\[right\](.*?)\[\/right\]/g,'<div style="float:right;padding: 4px 10px;">$1</div>');i++;
etags[i]=new Array(/\[center\](.*?)\[\/center\]/g,'<center>$1</center>');i++;
etags[i]=new Array(/\[img\](https?:\/\/[^ "]+?)\[\/img\]/,'<img src="$1" border=0 style="position:relative;">',1);i++; //одноразовая замена для лимита
etags[i]=new Array(/\[url=((ftp|https?):\/\/[^ "]+?)\](.*?)\[\/url\]/g,'<a href="$1" target=_blank>$3</a>');i++;
etags[i]=new Array(/\[url\]((ftp|https?):\/\/[^ "]+?)\[\/url\]/g,'<a href="$1" target=_blank>$1</a>');i++;
etags[i]=new Array(/\[email=([A-z0-9._-]+\@[A-z0-9.-]+?)\](.*?)\[\/email\]/g,'<a href="mailto:$1" target=_blank>$2</a>');i++;
etags[i]=new Array(/\[email\]([A-z0-9._-]+\@[A-z0-9.-]+?)\[\/email\]/g,'<a href="mailto:$1" target=_blank>$1</a>');i++;
etags[i]=new Array(/\[quote\](.*?)\[\/quote\]/g,'<div style="background-color:eeeeee; border: 1px solid #000; margin:2px;padding:8px;">$1</div>',1);i++;
etags[i]=new Array(/\[quote=([^\]]{2,30})\](.*?)\[\/quote\]/g,'<div style="background-color:eeeeee; border: 1px solid #000; margin:2px;padding:8px;"><b>$1</b> пишет:<br><br>$2</div>',1);i++;
etags[i]=new Array(/\[code\](.*?)\[\/code\]/g,'<div style="background-color:dddddd; border: 1px solid #000; margin:2px;padding:8px;"><b>Код:</b><br><br><div style="width:100%;overflow:auto;white-space:nowrap;">$1<br><br></div></div>',1);i++;
/* Для вывода кнопок BB-тегов */
var tags="";
tags+="<input title=жирный class=ok type=button value=' B ' onclick=ftags('[b]','[/b]') style='font-weight:bold'> ";
tags+="<input title=курсив class=ok type=button value=' I ' onclick=ftags('[i]','[/i]') style='font-style:italic'> ";
tags+="<input title=подчеркнуть class=ok type=button value=' U ' onclick=ftags('[u]','[/u]') style='text-decoration:underline'> ";
tags+="<input title=зачеркнуть class=ok type=button value=' S ' onclick=ftags('[s]','[/s]') style='text-decoration:line-through'> ";
tags+="<select class=ok onchange='if(this.value) ftags(\"[color=\"+this.value+\"]\",\"[/color]\"); this.value=\"\";'><option value=''>-=цвет=-</option>";
tags+="<option value=black style='color:black'>черный</option>";
tags+="<option value=red style='color:red'>красный</option>";
tags+="<option value=blue style='color:blue'>синий</option>";
tags+="<option value=green style='color:green'>зелёный</option>";
tags+="<option value=orange style='color:orange'>оранжевый</option>";
tags+="<option value=yellow style='color:yellow'>желтый</option>";
tags+="<option value=purple style='color:purple'>фиолетовый</option>";
tags+="<option value=gray style='color:gray'>серый</option>";
tags+="</select> ";
tags+="<input title=влево class=ok type=button value=' « ' onclick=ftags('[left]','[/left]') style='font-weight:bold'> ";
tags+="<input title='по-центру' class=ok type=button value=' o ' onclick=ftags('[center]','[/center]') style='font-weight:bold'> ";
tags+="<input title=вправо class=ok type=button value=' » ' onclick=ftags('[right]','[/right]') style='font-weight:bold'> ";
tags+="<input title=черта class=ok type=button value='—' onclick=put('[hr]') style='font-weight:bold'> ";
tags+="<input title=код class=ok type=button value=' # ' onclick=ftags('[co'+'de]','[/co'+'de]') style='font-weight:bold'> ";
tags+="<input title=цитата class=ok type=button value='“ „' onclick=ftags('[qu'+'ote]','[/qu'+'ote]') style='font-weight:bold'> ";
tags+="<input title=адрес class=ok type=button value='Url' onclick=ftags('[url]','[/url]')> ";
tags+="<input title=картинка class=ok type=button value='Img' onclick=ftags('[img]','[/img]')> ";
tags+="<input title='на русский' class=ok type=button value='Ru' onclick='translateall();' > ";
tags+="<input class=ok type=button value='Смайлы' onclick='var obj=document.getElementById(\"smiles\"); if(obj.innerHTML) obj.innerHTML=\"\"; else obj.innerHTML=smiles;' > ";- обратите внимание на то что в гостевой и галерее кнопка тега img не выводится, вы можете удалить или закоментировать эту строчку с кнопкой
2. Находим этот код:
/* Фильтрирует текст - смайлы, теги, ссылки, картинки */
/* img_max - макс. картинок к отображению в одном сообщении вместо ссылок */
var message_img_max=10; /* сообщение */
var signature_img_max=0; /* подпись */
function filter(text,img_max) {
var img_c=0;
for(k=0;k<atags.length;k++) {
if(!atags[k][0]) continue;
tag1='['+atags[k][0]+']'; btag1='[/'+atags[k][0]+']';
btag2=atags[k][1].split(" ")[0].split(">");btag2=btag2[0].substr(1);
tag2=atags[k][1];btag2='</'+btag2+'>';
if(tag1=="[quote]") while(text.search(/\[quote=([^\]]{2,30})\](.*)\[\/quote\]/)>=0) text = text.replace(/\[quote=([^\]]{2,30})\](.*)\[\/quote\]/,tag2+'<b>$1</b> пишет:<br><br>$2'+btag2);
max=0;while (text.indexOf(tag1)>=0 && max<10) {text = text.replace(tag1, tag2);max++;}
max=0;while (text.indexOf(btag1)>=0 && max<10) {text = text.replace(btag1, btag2);max++;}
}
a=text.split('<').join(' <').split('>').join('> ').split(" ");
for(k=0;k<a.length;k++) {
if(a[k].match(/^\[img\]http:\/\/[0-9a-z.\/_-]+\.(gif|jpg|jpeg|bmp|png)\[\/img\]$/i) && img_c<img_max) {src=a[k].replace('[img]','').replace('[/img]',''); a[k]='<a href='+src+' target=_chat><img src='+src+' border=0 style=position:relative;></a>';img_c++;}
else if(a[k].substr(0,7)=='http://') a[k]='<a href='+a[k]+' target=_chat>'+a[k]+'</a>';
for(j=0;j<sm.length;j++) if(a[k]==sm[j][0]) a[k]='<img src='+smdir+sm[j][1]+'>';
}
text=a.join(' ');
return text;
}И заменяем на этот:
/* Фильтрирует текст - смайлы, теги, ссылки, картинки */
/* img_max - макс. картинок к отображению в одном сообщении вместо ссылок */
var message_img_max=10; /* сообщение */
var signature_img_max=0; /* подпись */
function filter(text,img_max) { var img_c=0;
a=text.split('['+'code]'); for(k=1;k<a.length;k++) {a1=a[k].split('['+'/code]');a1[0]=a1[0].replace(/\[/g,'&'+'#91;'); a[k]=a1.join('['+'/code]');} text=a.join('['+'code]'); //подготовка для code
for(k=0;k<etags.length;k++) {
if(etags[k][2])
while(text.search(etags[k][0])>=0) {
if(etags[k][1].search("<img")!=-1) {if(img_c<img_max) img_c++; else break; }
text = text.replace(etags[k][0],etags[k][1]);
}
else text = text.replace(etags[k][0],etags[k][1]);
}
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(' '); //замена смайлов
return text;
}- в гостевой и галерее число разрешённых картинок 0, установите message_img_max=0, если не хотите использовать!
Также обратите внимание на небольшую новую ошибку при использовании нового фильтра:
http://live-co.com/viewtopic.php?pid=188142#p188142
Возможность транслировать мышкой выделенный текст на русский при нажакии на RU
почти в самом верху шаблонов найдите этот код:
function translateall(){
msg=document.form.message.value;
for (i=0; i<engRegSmall.length; i++) {msg = msg.replace(engRegSmall[i], rusSmall[i])}
for (i=0; i<engRegBig.length; i++) {msg = msg.replace(engRegBig[i], rusBig[i])}
document.form.message.value=msg;
}и замените на этот код:
/* Транслирует на русский весь или только выделенный текст */
function translate(msg) {
for (i=0; i<engRegSmall.length; i++) {msg = msg.replace(engRegSmall[i], rusSmall[i])}
for (i=0; i<engRegBig.length; i++) {msg = msg.replace(engRegBig[i], rusBig[i])}
return msg;
}
function translateall(){
var obj=document.getElementsByName("message")[0]; obj.focus();
var pos1 = obj.selectionStart, pos2 = obj.selectionEnd;
if(typeof(pos1)=="number") {
obj.value = obj.value.substring(0, pos1) + translate(obj.value.substring(pos1, pos2)) + obj.value.substring(pos2, obj.value.length);
obj.setSelectionRange(pos2,pos2);
}
else if(document.selection) {
var range=document.selection.createRange();
if(range.text) range.text=translate(range.text);
else obj.value=translate(obj.value);
range.select();
}
else {obj.value=translate(obj.value);}
}Неактивен
Некоторые обновления
1. В параметрах -> Основные настройки, внизу появилось новое поле в котором можно указать имена скриптов после чего эти скрипты будут автоматически добавляться в шаблон титульника! (в шаблоне в место добавления необходимо прописать %include%, подробнее в описании шаблона титульника)
2. В титульник больше не выводятся переменные mynick и myid необходимые для проверки авторизации, теперь они всегда выводятся внутри информера и вы сможете использовать их например в других хтмл документах!
Внимание!!! Если у вас пропала форма входа, это значит что на титульнике скрипт информера находится ниже вывода формы, поднимите его на верх!!!
3. В скрипте форума добавлен обработчик ошибок, ранее критические ошибки не отображали форум и были на английском языке!
Обработчик ошибок нужно установить всем кто использует форум!!!
В шаблоне форума forum.inc просто добавьте этот обработчик в начало скриптов, после открытия тега <script>
/* Обработчик ошибок */
if(error==1) alert('Ошибка авторизации!');
if(error==2) alert('Вы заблокированы модератором!');
if(error==3) alert('Попытка флуда - не пишите так часто!');
if(error==4) alert('Нельзя писать в закрытой теме!');
if(error==5) alert('Нет доступа!');
if(error==6) alert('Нет доступа - только для авторизованных!');
if(error==7) alert('Нет доступа - только для модераторов!');
if(error==8) alert('Тема не найдена!');
if(error==9) alert('Раздел форума не найден!');
4. В шаблонах reg, mail, feedback - защитный код картинки теперь формируется за счёт переменной xcode через явускрипт!
<script>document.write('<img src=index.php?inc=code&xcode='+xcode+'><input type=hidden name=xcode value='+xcode+'>');</script>
(обновление выполнено автоматически)
5. Для уменьшения спама в гостевой, теперь гости смогут отправить сообщение толко если правильно укажут код на картинке.
Внимание!!! Всем кто разрешил в параметрах писать гостям необходимо в шаблоне гостевой произвести эти изменения:
а) Добавьте новую ошибку под номером 8 в обработчик ошибок (вверху скриптов щаблона):
if(error==8) error="<font color=red>Неверно введён код, попробуйте ещё раз!</font>";
б) В самом низу шаблона гостевой сразу перед кнопкой Отправить добавьте эту строчку!
<script>if(xcode && !myid) document.write('<img src=index.php?inc=code&xcode='+xcode+' title="для незарегистрированных" align=absmiddle><input type=hidden name=xcode value='+xcode+'> <input type=text name=code class=text size=10>');</script>
6. В скриптах чата в разделе настройки, графичекие ники и градиент текст выведены в отдельные файлы, красным показано что добавлено:
/* Граф. ники: 0 - выкл, 1 - вкл, позиции в списке - это номера функций "cmd" от 0-10(11-никлист) */
var use_gn=1;
var gnok=new Array(1,1,1,0,0,0,1,0,0,0,0,1);
/* для добавления граф. ников (img/flash), пример: gna['nick']='image.gif'; */
var gna = new Array;
document.write('<scr'+'ipt src=gn.js?'+Math.random()+'></scr'+'ipt>');
/* Градиент текста: 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=http://mpchat.com/blank/gradient.js></"+"script>");
/* для добавления градиента тексту, пример ниже */
var gra = new Array;
document.write('<scr'+'ipt src=gr.js?'+Math.random()+'></scr'+'ipt>');
(строки с графниками градиентом можно размещать в файлах, gn.js и gr.js)
7. В чаты по умолчанию введена навая функция - Тотальный(полный) игнор, включает игнор у всех пользователей для определённого ника (изначально скрипт написал ridz)
В скриптах чата в разделе /* [НАСТРОЙКИ] */ добавить и прописать ники людей которые могут ставить такой игнор!
/* Ники установщиков тотального игнора (/ignore): ignorer['nick']=1; */
var ignorer = new Array();
ignorer['adm']=1;
ниже в разделе функция вывода сообщений f()
после /* Проверка пользовательских команд для простого сообщения */
if(cmd==0) {
if(text.substr(0,7)=="/ignore" && ignorer[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.ignorer[parent.mynick]) document.write("<option value='/ignore '>полный игнор");
Повторная отправка этой же команды на заигноренный ник снимает игнор , проверить действительно ли установился игнор можно нажав кнопку обновления в чате - иконка игнора должна измениться. Сообщение об установке/снятии тотального игнора видит только человек его установивший.
(также учтите что эта команда действуте только для тех то уже в чате, новопришедшии смогут увидеть сообщения заигнорированного)
Неактивен
Проведены некоторые обновления для статусов и другие
- установка назначения пунктов по отдельности - за время, сообщения, викторину, рефералов
- назначение статусов по времени, сообщ. , рефералам
- разграничение прав на бан по времени
Изменения можно увидеть в админке, в настройке статусов и в параметрах в поле для указания пунктов за достижения!
ВНИМАНИЕ!!!
В параметрах необходимо указать новые значиния для назначения пунктов, после сохранения параметров проверьте результат сохранения, возможно с 1го раза не получится из-за обновления структуры в чате!
Следующим планируется ввести в магазин настройку градиента и загрузку граф. ников за пункты!
Неактивен
Улучшение магазина, добавление функций
(это обновление также поможет и бесплатным чатам, функции можно устанавливать вручную)
Теперь в магазине в разделе Дополнительно, пользователи могут не только купить пункты, но и потратить их на различные функции в чате!
1. Загрузить графический ник. (можно установить свои параметры допустимых картинок)
2. Настроить градиент текста в чате.
3. Настроить градиент ника в чате.
4. установить своё личное приветствие используя %nick% в качестве ника
5. установить своё личное прощание используя %nick% в качестве ника
6. установить невидимость в чате (в никлисте, и сообщение о приходе)
Для всех функций вы можете указать в параметрах цену в пунктах, срок годности в днях и возможность премодерации!
При создании товаров в описании теперь можно скрывать текст тегами [hide], т.е. этот текст будет виден только после покупки вещи пользователем!!! (таким образом можно продавать много чего интересного)
Установка (сначало лучше сохранить код старых скриптов чата)
Для того чтобы использовать все эти функции в чате, необходимо выполнить следующее обновление:
1. открываем фаил скриптов чата в разделе настройки, и там где строки с граф. ником и градиентом должно быть так:
(синее добавлено)
/* Граф. ники: 0 - выкл, 1 - вкл, позиции в списке - это номера функций "cmd" от 0-10(11-никлист) */
var use_gn=1;
var gnok=new Array(1,1,1,0,0,0,1,0,0,0,0,1);
/* для добавления граф. ников (img/flash) используйте фаил gn.js */
var gna = new Array;
document.write('<scr'+'ipt src=gn.js?'+Math.random()+'></scr'+'ipt>');
/* Градиент: 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=http://mpchat.com/blank/gradient.js></"+"script>");
/* Градиент текста */
/* для добавления градиента тексту используйте фаил gr.js */
var gra = new Array;
document.write('<scr'+'ipt src=gr.js?'+Math.random()+'></scr'+'ipt>');
/* Градиент ника */
var grna = new Array;
grna['adm'] = new Array('#ff0000','#00ff00','#0000ff');
/* Личный текст приветствия при входе в чат, используйте %nick% для расположения ника */
var tadda = new Array;
tadda['adm']="К нам приходит %nick%. Всем привет!";
/* Личный текст прощания входе в чат, используйте %nick% для расположения ника */
var tdela = new Array;
tdela['adm']="От нас уходит %nick%. Всем пока!";
2. далее открываем вкладку общие функции, находим там функцию обработки графического ника и заменяем её на новую:
/* Функция добавления граф. ника или градиента для ника */
function setgn(cmd,nick){
if(use_gn!=1) return nick;
var set_out=nick;
if(gna[nick]!=null && gna[nick] && gnok[cmd]==1) {
if(gna[nick].match(/^[0-9a-z.:\/_-]+\.(swf)$/i)) set_out='<embed src='+gna[nick]+'>';
else set_out='<img src='+gna[nick]+' border=0>';
}
else if(use_gr==1 && grna[nick]!=null && grna[nick] && grok[cmd]==1) set_out=gr(nick,grna[nick]);
return set_out;
}
3. для того чтобы обрабатывались личные приветствия и прощания, необходимо во вкладке функции обработки сообщений f() найти и обновить соответствующие части кода:
/* Вывод входа юзера в чат и добавление в нклист через 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>";
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>";
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);
}
Ну а если вы хотите пойти лёгким путём, просто востановите стандартные скрипты, но прийдётся делать все настройки заново!
Возможные ошибки после обновления
1. функции не работают
- Если вы используете файлы gn.js / gr.js убедитесь в том что в них нет строк
var gna=new Array; или var gra=new Array; ,
а если они есть то удалите их!
2. не выводится никлист или не выводятся сообщения о входе
- Проверьте последнюю часть обновления и сверьте со своим старым кодом, обратите внимание на эту строчку
add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan);
она должна быть такая же как ваша старая!
3. чат совсем не грузится
- Это означает что вы допустили ошибки при обновлении!
(ошибки возникают потому что вы не сделали какое либо обновление)
Неактивен
Теперь партнёры мпчата могут выводить свой доход прямо в пейзону одним нажатием.
Нужно указать свой емеил в файле pz.dat
Подробнее описано внизу: http://mpchat.com/?to=partner
Неактивен