#21 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

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

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

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

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

1. В файле irc.html изменений немного, так как теперь этот фрейм скрыт, вывод информации перед сообщениями будет чуть иначе.
Просто добавляем синюю строку для очистки фрейма сообщений и начальной загрузки содержимого, ниже из HTML её можно убрать:

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

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

2. Теперь в файле chat.inc вынесем iframe left наверх в скрытой форме и обновим DIV сообщений leftdiv, изменения показаны синим:

<!-- HIDDEN FRAMES -->
<iframe name=hidden width=0 height=0 style="display:none;"></iframe>
<iframe name=left width=0 height=0 style="display:none;"></iframe>


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

</div>

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

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

</div>

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

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

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

Далее в функции f() находим красное и меняем на document.getElementById("leftdiv")

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

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

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

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

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

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

/* [Подготовка фреймов и загрузка сообщений] */
var userlist="<table id=ul width=100%></table>";
function loadframes() {
if(document && parent.left && parent.left.document && document.getElementById('users') && document.getElementsByName('text0')[0]){
    /* Последняя стадия загрузки */
    if(interval) window.clearInterval(interval);
    /* Подготовка фрейма привата */
    if(parent.privatok==1) {document.getElementById("privatdiv").innerHTML='';}
    /* Обнуление переменных */
    loaded=0;
    scrolled=0;
    myhistory=myhistory1;
    for(var i=0;i<rooms.length;i++) rooms[i][1]=0;
    /* Подготовка таблицы никлиста */
    uc = 0;
    us = new Array();
    ucc= new Array();
    document.getElementById('users').innerHTML=userlist;
    /* Загрузка движка сообщений */
    document.getElementById("leftdiv").innerHTML='Загрузка ...';
    if(ajaxon) {ajax(1); return;}
   
    parent.left.location.href='irc.html?'+myid+'&r='+Math.random();
    /* Загрузка актуального стиля, если был изменён */
    if(mystyle) window.setTimeout("setstyle(mystyle);",3000);
    /* Проверка непрерывного соединения */
    interval=window.setTimeout(
    'if(location.port!=88 && confirm("Проблема потокового соединение через стандартный порт. Нажмите ОК для перехода на другой порт или Отмена для дальнейших действий.")) location.href="http://"+location.hostname+":88"+location.pathname+"?"+yourkey; '+
    'else if(confirm("Нажмите OK если хотите перейти на ажакс движок чата или Отмена для продолжения загрузки.")) ajax(1); '
    ,1000*15); /* Время для проверки потокового движка 15 сек */
}}
var interval=window.setInterval("loadframes()",100);

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


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#22 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Вебкамеры в чат (только для платников)

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

Внимание!!! В новых чатах вебкамеры установлены по умолчанию, достаточно их включить в скриптах: webcam=1

Установка для новой безфреймовой версии

1. В шаблоне чат внутри добавляем в любое место код для вывода вебок, а также в селекторе статусов добавляем статусы вебки - синии строки:

<div id=cams>
    <div id=mywebcam style="display:none;">&nbsp;</div>
</div>


<select style='float:right;' name=setstatus onchange="parent.gettime=new Date().getTime();parent.setstatus(this.value);">
<option value=0>свободен
<option value=1>работаю
<option value=2>в привате
<option value=3>читаю
<option value=4>скоро буду
<option value=5>меня нет

<script>if(webcam) document.write("<option value=98>вещаю публично");</script>
<script>if(webcam) document.write("<option value=99>вещаю приватно");</script>

</select>

2. В скриптах чата в Настройках никлиста и статусов, после списков stn stn2 icqtxt добавим этот код:


/* Включаем вебкамеры, прописываем статус 100 и загружаем модуль */
var webcam=1;
stn2[98] ="<img src=http://mpchat.com/blank/img/status/webcam.gif title='нажмите для просмотра публичного вещания' style='border:0;'>";
icqtxt[98]="меняю статус на -> вещаю публично <img src=http://mpchat.com/blank/img/status/webcam.gif title=публично>";
stn2[99] ="<img src=http://mpchat.com/blank/img/status/webcam2.gif title='нажмите для просмотра приватного вещания' style='border:0;'>";
icqtxt[99]="меняю статус на -> вещаю приватно <img src=http://mpchat.com/blank/img/status/webcam2.gif title=приватно>";

3. Далее в функции format /* [Функции - формирования никлиста] */   =>  /* Добавление ника в таблицу участников */ находим строку:

if(stn2[stat2]==null) icqst=''; else icqst=stn2[stat2];

ниже добавляем:


/* Включение вебкамер */
if(webcam) {
if(stat2==98) icqst="<a href=# onclick='loadvideo(\"webcam"+nick+"\",webcamhost,\""+nick+"\",0); return false;'>"+icqst+"</a>";
if(stat2==99) icqst="<a href=# onclick='parent.hidden.location.href=\"index.php?inc=write&"+ parent.yourkey+"&r="+Math.random()+"&text=/privat "+ nick +": privatcam\";return false;'>"+icqst+"</a>";
if(nick==mynick && loaded) {
    if(stat2==98) loadvideo("mywebcam",webcamhost,nick,1);
    else if(stat2==99) loadvideo("mywebcam",webcamhost,nick,1,privatcamkey);
    else loadvideo("mywebcam","");
}}

4. Далее ниже в скриптах чата в функции f() добавим синее после указанного кода:

/* Автоответчик */
if(loaded==1 && tonick==mynick && nick!=mynick) {
var autotext=document.fmsg.text0.value;
var obj=document.fmsg.autotext;
if(autotext && obj && obj.checked) {
parent.hidden.location.href='index.php?inc=write&'+parent.yourkey+'&text=/privat '+nick+': Автоответчик -> '+autotext+'&r='+Math.random();
}}

/* Разрешение на приватный просмотр вебкамеры */
if(webcam && cmd==1) {
if(text.indexOf("nocam")!=-1) text=text.replace("nocam","Просмотр не разрешен.");
if(text.indexOf("yescam")!=-1) {var key=text.split("yescam"); text=text.replace("yescam"+key[1],"Просмотр разрешен."); if(tonick==mynick) text+=" (<a href=# onclick='parent.loadvideo(\"webcam"+nick+"\",\""+webcamhost+"\",\""+nick+"\",0,\""+key[1]+"\"); return false;'>Начать просмотр</a>)";}
if(text.indexOf("privatcam")!=-1) {text=text.replace("privatcam","Прошу разрешить просмотр вещания."); if(tonick==mynick) text+=" (<a href=# onclick='parent.hidden.location.href = \"index.php?inc=write&"+ parent.yourkey+"&r="+Math.random()+"&text=/privat "+nick+": yescam\"+parent.privatcamkey;return false;'>Да</a> | <a href=# onclick='parent.hidden.location.href = \"index.php?inc=write&"+ parent.yourkey+"&r="+Math.random()+"&text=/privat "+nick+": nocam\";return false;'>Нет</a>)";}
}

5. Если вы используете автосмену статуса away(), то нужно добавить синюю строку в функции goaway() (в скриптах чата в разделе функции нижнего фрейма):

var gettime=new Date().getTime();
var laststatus=0;
function goaway() {
if(laststatus==98 || laststatus==99) return;

6. Чуть ниже в скриптах чата обновим функцию смены статуса setstatus()

/* Функция ручного изменения статуса */
var privatcamkey=0;
function setstatus(status) {
laststatus=status;
var addkey=""; privatcamkey=0;
if(status==99) {privatcamkey=Math.floor((Math.random()*1000000)+1);  addkey=" "+privatcamkey; }
parent.hidden.location.href='index.php?inc=write&'+parent.yourkey+'&text=/status '+status+addkey+'&r='+Math.random();
document.getElementsByName("setstatus")[0].value=status;
document.fmsg.text0.focus();
}

7. И сразу ниже добавляем функцию включения выключения вебкамер loadvideo()

/* Функция включения и выключения вебкамер */
function loadvideo(obj,host,share,rec,key) {
    var sharekey=""; if(share) sharekey=share; if(key) sharekey+="_"+key;
    var nickid=0; for(var i=0; i<sharekey.length; i++) nickid+=sharekey.charCodeAt(i)*(i+1);
    var camid="mpchat-"+chatlogin+"_"+nickid;
    var obj1=document.getElementById(obj);
    if(!obj1) {
        var obj1=document.createElement('DIV');obj1.id=obj;
        document.getElementById("cams").appendChild(obj1);
    }
    if(host=="") {var flashobj=document.getElementById("flash"+obj); if(flashobj) flashobj.close(); obj1.innerHTML="&nbsp;"; obj1.style.display="none"; return;}
    obj1.innerHTML="<div id=flash"+obj+"><a href=http://get.adobe.com/flashplayer/ target=_blank><font size=1>Установите Flash Player!</font></a><br></div><div id=closer"+obj+"></div>";
    var flashw=240; var flashh=180;
    var flashvars='host='+host+'&m=4&q=80&r=12&sharefile='+camid+'&sharelive='+camid+'&shareplay='+camid;
    if(rec==1) flashvars+='&rec=1';
    if(!(/MSIE/i).test(navigator.userAgent)) flashvars+='&buf=0.1';
    swfobject.embedSWF("webcam.swf?v3.57", "flash"+obj, flashw, flashh, "9", "http://mpchat.com/blank/expressInstall.swf", {}, {allowfullscreen:"true",wmode:"transparent",flashvars:flashvars},{});
    var stream="Просмотр"; var close="<a href=# onclick='loadvideo(\""+obj+"\",\"\"); return false;'><font size=1>закрыть</font></a>";
    if(rec) {stream="Вещание"; close="<a href=# onclick='gettime=new Date().getTime(); setstatus(0); return false;'><font size=1>закрыть</font></a>";}
    document.getElementById("closer"+obj).innerHTML+="<font size=1><b>"+stream+" #"+share+"</b></font> - "+close+"<br><br>";
    obj1.style.display="block";
}


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#23 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Мелкие доработки по использованию userid и не только (только для чатов 5й версии)

Внимание!!! Данное обновление является необходимым для решения проблем с открытием русских анкет через Firefox.
На данный момент были затронуты почти все скрипты и все места где было возможно сделать доступ по UserID.
Там где это не сделано, вероятно будет сделано со временем позже, и выложено в теме багов.

И так приступим:

1. Все md5 сессии и хеш ссылки теперь защищены секретным кодом, без данного кода злоумышленник не сможет вычислить md5-хеш и выполнять дейсткия от пользоватлелей.

2. Теперь загружаемые файлы через чат имеют приставку chat_, а через почту post_ (время для чистки таких файлов  после их загрузки теперь разное, 3 дня и 30 дней соответственно)

3. Шаблон search.inc открытие анкеты по ID изменяем синее:

for(var i=0;i<u.length;i++) document.write("<a href=?inc=info&userid="+u[i][3]+"  target=_blank><font color="+u[i][1]+">"+u[i][0]+"</font></a><br>");

4. Шаблон gb.inc открытие анкеты по ID изменяем синее:

posts[i]="<table  width=500 align=center style='table-layout:fixed;'><tr><td class=title align=left width=150>"+g_p[i][3]+"<td class=title align=right> #"+g_p[i][0]+"</tr><tr><td width=150 valign=top align=left 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&userid="+g_p[i][8] +" target=info>?</a>]<br>"+avator+"</td><td valign=top align=left style='padding:10px;word-wrap:break-word;'>"+message+"<tr><td align=left>"+g_p[i][6]+"<td align=right>"+mod+"</table><br>";

5. Шаблон forum.inc открытие анкеты по ID изменяем синее:

posts[i]="<table  width=90% align=center style='table-layout:fixed;'><tr><td class=title width=150 align=left><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><td class=title align=right> #"+num+"</td></tr><tr><td width=150 valign=top align=left style=padding-top:10px;><a href=# onclick='put(\""+f_p[i][1]+", \"); return false;'>"+f_p[i][1]+"</a> [<a href=?inc=info&userid="+f_p[i][13]+" target=info>?</a>]<br>"+avator+name+mw+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 align=left style='padding:10px; word-wrap: break-word;'>"+message+"<tr><td align=left>"+isonline+"<td align=right>"+mod+"</td></tr></table><br>";

6. Для форума выводим последнюю активную тему в списке форумов, добавляем синее в шаблоне forum.inc:

lasttopic=""; if(f_f[i][11]) lasttopic="<a href=?inc=forum&forum="+f_f[i][0]+"&topic="+f_f[i][11]+">"+f_f[i][12]+"</a><br>"+f_f[i][5]+" от "+f_f[i][4]+"";
forums[f_f[i][0]]="<tr><td width=20><div class="+icon+"></div></td><td align=left> <a href=?inc=forum&forum="+f_f[i][0]+" onclick='return access("+i+");'>"+f_f[i][1]+"</a><br>"+f_f[i][2]+moders+"</td><td align=center>"+f_f[i][6]+"</td><td align=center>"+f_f[i][7]+"</td><td>"+lasttopic+"</td></tr>";

7. Доступ к никам в галеереи по ID, в шаблоне gallery.inc меняем синее:
(все текущие базы были переведены с использованием ID)

if(gal_upload>0) info+=" [<a href='?inc=info&userid="+x[8]+"' target='"+x[2]+"'>?</a>]";

....

posts[i]="<table  width=500 align=center style='table-layout:fixed;'><tr><td class=title align=left width=150>"+g_p[i][3]+"</td><td class=title align=right> #"+g_p[i][0]+"</tr><tr><td width=150 valign=top align=left 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&userid="+g_p[i][10]+" target=info>?</a>]<br>"+avator+"</td><td valign=top align=left style='padding:10px;word-wrap:break-word;'>"+message+"</td></tr><tr><td align=left>"+g_p[i][6]+"</td><td align=right>"+mod+"</td></tr></table><br>";

8. Информер теперь также знает ID пользователей: (подробнее https://forum.vmeste.eu/viewtopic.php?pid=5680#p5680)
- в послед. зарегистрированных
- в именинниках
- в списке кто онлайн
- в последних сообщениях
- в выводе фотографий
- в выводе последних тем
(не реализовано только в списке забаненых и темах форума )

9. Внутри чата (шаблон chat.inc) теперь переменная yourkey содержит userid, кто использует yourkey, делать ничего не потребуется.
В противном случае можно составлять свои ссылки используя переменные userid и id.

10. Однако для использования userid в скриптах чата jscripts.dat, например для открытия анкеты по ID, следует найти все ниже указанные строки и добавить или изменить синее:

...

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,userid_r);loaded=0;}

...

function add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan,userid){
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,userid);
if (i==l) {uc++; update(room,1);}
if(room==myroom) {
nickid="!"+nick;
obj=document.getElementById(nickid);
var ul=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,userid) {
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=document.getElementById(nickid);
var ul=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];
userid=us[i][9];

...

set_mw="<a href=index.php?inc=info&userid="+userid+" onclick=\"parent.wo(this.href,'Анкета','400','320','yes');return false;\" target="+us[i][0]+">"+mw+"</a>";

...

function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12,var13,var14,userid) {

...

add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan,userid);

...

del(nick,colornick,st,mw,icon,status,inchat,time,room,userid);

...

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],us[i][9]);",500);

...

f(a[0]*1,a[1]*1,a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]);

...


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#24 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Добавление нового движка WebSocket (решение всех проблем с движками)
(Обновление доработано! Если вы уже установили данное обновление, переустановите его!)

Установка (выполнить нужно все 4 пункта)

1. В скрпитах чата jscripts.dat, сначала находим функцию onloaded() и изменяем строку на синюю:

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

2. Далее для чатов 5й версии заменим полностью функции disconnect() и loadengines() в скриптах jscripts.dat (для старых версий в irc2.html)
Синим показано добавленное или изменённое, а зелёным рекомендуемое для отладки: (можно полностью заменить функции)

/* [NEW ENGINES - обработка и функции новых движков] */
var engine="";
var engine_url="";
var engine_uri="";

/* Обработчик ошибок подключения */
function disconnect(type,error) {
    if(type=="io") {wr("<font color=red>Ошибка подключения к серверу "+error+", подождите окончания загрузки ...</font>"); }
    else if(type=="security") {return; wr("<font color=red>Ошибка безопасности при подключении к серверу "+error+", подождите окончания загрузки ...</font>"); }
    else if(!interval) {
        wr("<font color=red>По какой то причине Вы были отключены от сервера, переподключение через <b id=restarter>10</b> секунд ...</font>");
        interval=window.setInterval("var obj=document.getElementById('restarter'); obj.innerHTML=obj.innerHTML-1; if(obj.innerHTML<=0) loadframes();",1000);
    }
}



...


/* Определение и загрузка движков чата */
var ws="";
function loadengine() {
    //fix for reconnect
    if(ws) ws.onclose = function(e) {};
    if(engine=="postMessage") parent.left.location.href="about:blank";
    if(engine=="flash" && myObject) myObject.close();
    if(ajaxon) window.clearInterval(ajaxon);
    //load new engine
    var flashver=0; var ver = swfobject.getFlashPlayerVersion(); if(ver["major"]) flashver=ver['major'] +"."+ ver['minor'] +"."+ ver['release'];
    var browser=navigator.userAgent.match(/(Chrome|Firefox|Opera|Safari|MSIE|K-Meleon)( |\/)(\w+\.\w+)/i); if(!browser) var browser=new Array('','unknown','',0);
    if(!engine_on) {
        if(window.WebSocket && (!window.chrome || browser[3]>=16)) engine_on="WebSocket";
        else if(window.postMessage && window.chrome) engine_on="postMessage";
        else if(flashver) engine_on="flash";
        else engine_on="ajax";
    }
    wr("<font color=green>Браузер <b>"+browser[1]+"/"+browser[3]+"</b>, версия <b>Flash "+flashver+"</b>, движок <b>"+engine_on+"</b>, подключение ...</font>");
    engine=engine_on;

    engine_uri="/?sess="+myid+"&engine="+engine;
    engine_url="http://"+engine_host+":"+engine_port+engine_uri;
    if(engine=="WebSocket") {
        ws = new WebSocket("ws://"+engine_host+":"+engine_port+engine_uri);
        ws.onopen = function(e) {};
        ws.onmessage = function(e) {eval(e.data.replace(new RegExp('<scr'+'ipt>','gm'),'').replace(new RegExp('</scr'+'ipt>','gm'),''));};
        ws.onerror = function(e) {disconnect("io","websocket");};
        ws.onclose = function(e) {window.setTimeout("disconnect();",1000);};
    }

    if(engine=="postMessage") parent.left.location.href=engine_url+"&r="+Math.random();
    if(engine=="flash") {
        if(!document.getElementById('socket')) {var newdiv = document.createElement('div'); newdiv.setAttribute('id','socket'); document.body.appendChild(newdiv);}
        swfobject.embedSWF("socket.swf?"+Math.random(), "socket", "0", "0", "9", "expressInstall.swf", {scope:"myObject"}, {allowscriptaccess:"always"}); 
        window.onunload=function(){myObject.close();}
    }
    if(engine=="ajax")  {
        if(engine_path) engine_url="/"+engine_path+"?sess="+myid+"&engine="+engine;       
        if(ajaxon) window.clearInterval(ajaxon);
        ajax(engine_url+"&start=1&r="+Math.random());
        ajaxon=window.setInterval('ajax(engine_url+"&r="+Math.random());',10000);
    }
}

3. Ну этот шаг простой но рекомендуемый,  в chat.inc (в старых версиях irc2.html) там где грузятся сообщения, если там пусто, написать Загрузка..., так:

<!-- LEFT FRAME -->
<div id=leftdiv class=header-body style="position:absolute; overflow-y:scroll; padding-left:10px; left:0px; right:295px; top:45px; bottom:65px; border:1px gray solid;">
Загрузка ...
</div>

4. Возвращаемся к скриптам чатов jscripts.dat и перед движками, меняем красное на синее:
(в старых версиях возможны отличия которые нужно внимательно сравнить и вероятно оставить без изменения)

    /* Проверка непрерывного соединения */
    interval=window.setTimeout(
    'if(!ajaxon && confirm("Проблема подключения к потоковому движку на порту "+engine_port+". Нажмите OK если хотите перейти на Ajax движок или Отмена для продолжения загрузки.")) {engine_on="ajax"; loadframes();} '+
    'else alert("Не удалось подключиться к потоковому движку на порту "+engine_port+" или Ваш браузер просто не поддерживает новые технологии. Попробуйте использовать браузер Google Chrome.");'
    ,1000*10); /* Время для проверки потокового движка 10 сек */
    /* Загрузка движка сообщений */
    document.getElementById("leftdiv").innerHTML='Загрузка ...';
    loadengine();
}
var interval=window.setTimeout("if(confirm('Чат не был загружен в установленное время, вероятно некоторые элементы страницы грузятся очень долго, продолжить загрузку?')) loadframes();",10000);

на

    /* Проверка непрерывного соединения */
    interval=window.setTimeout(
    'if(engine_on!="ajax" && !ajaxon) {wr("<font color=red>Проблема подключения к потоковому движку на порту "+engine_port+". Пробуем подключиться через <b>ajax</b> движок ...</font>"); window.setTimeout("engine_on=\\"ajax\\"; loadframes();",5000);} ' +
    'else wr("<font color=red>Не удалось подключиться к движку чата, вероятно Ваш браузер просто не поддерживает новые технологии.<br>Попробуйте использовать новый современный браузер <a href=http://google.com/chrome target=_blank>Google Chrome</a>.</font>");'
    ,1000*10); /* Время для проверки потокового движка 10 сек */
    /* Загрузка движка сообщений */
    document.getElementById("leftdiv").innerHTML='Загрузка ...';
    loadengine();
}
var interval=window.setTimeout('wr("<font color=red>Чат не был загружен в установленное время, вероятно некоторые элементы страницы грузятся очень долго, <a href=# onclick=\'loadframes(); return false;\'>нажмите для продолжения</a> ...</font>");',10000);

Как работает новая система оповещения о проблемах и смены движков

Ддя начала следует сказать что теперь при отключении от чата, при плохой связи, или при перезагрузке севрера, больше нет алерта, а начинается отсчёт 10 секунд после которого окно автоматически переподключается! Вот пример:

По какой то причине Вы были отключены от сервера, переподключение через 10 секунд ...

Далее опишем саму процедуру проблемных подключений к чату:

1. Пользователь входит в чат и видит в окне сообщений слово:

Загрузка ...

2. Если сам чат не может загрузиться за 10 секунд, например много картинок или внешние файлы которые не грузятся, то пользователь увидит в окне:

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

3. Если пользователь ничего не нажмёт то чат ещё может сам загрузиться, если нажмёт, то сразу начнётся загрузка и подключение движка, т.е. стартанёт loadframes();

Загрузка ...
Браузер Chrome/23.0, версия Flash 11.5.31, движок WebSocket, подключение ...

4. Спустя 10 секунд, если сообщения не загрузились в окне будет так:

Загрузка ...
Браузер Chrome/23.0, версия Flash 11.5.31, движок WebSocket, подключение ...
Проблема подключения к потоковому движку на порту 7777. Пробуем подключиться через ajax движок ...

5. Ура!!! Ничего делать не нужно, через 5 секунд будет автоматическая загрузка ajax движка, окно выглядит так:

Загрузка ...
Браузер Chrome/23.0, версия Flash 11.5.31, движок ajax, подключение ...

6. В случае если и ajax движок не загрузится за 10 секунд, в окне будет так:

Загрузка ...
Браузер Chrome/23.0, версия Flash 11.5.31, движок ajax, подключение ...
Не удалось подключиться к движку чата, вероятно Ваш браузер просто не поддерживает новые технологии.
Попробуйте использовать новый современный браузер Google Chrome.

7. The End. Такое практически исключено, так как ажакс движок работает во всех браузерах, ну не считая конечно IE 5.

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


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#25 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Добавление LIVE уведомлений в чат

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

В скриптах чата jscripts.dat в функции f() в самом конце перед /* Конец функции f() */ добавляем этот код:

/* Функция вывода уведомлений */
if(cmd==11) {
    if(text=="post" && tonick==mynick) wr(set_time+"Уведомление: <i>У Вас новая почта от <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> с заголовком \"<a href=?inc=post&"+yourkey+"&read="+var10+" target=_blank>"+var9+"</a>\"</i><br>");
    if(text=="reg") wr(set_time+"Уведомление: <i>Зарегистрировался новый пользователь <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a>.</i><br>");
    if(text=="clan") wr(set_time+"Уведомление: <i>Пользователь <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> вступил в сообщество \""+var9+"\".</i><br>");
    if(text=="gallery") wr(set_time+"Уведомление: <i>Пользователь <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> добавил новую <a href=?inc=gallery&gallery="+nick+"&foto="+var9+" target=_blank>фотографию</a> в галерею.</i><br>");
    if(text=="gb") wr(set_time+"Уведомление: <i>Новое сообщение от <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> в <a href=?inc=gb target=_blank>гостевой</a>.</i><br>");
    if(text=="forum") wr(set_time+"Уведомление: <i>Новое сообщение от <a href=?inc=info&userid="+userid+" target=_blank><font color="+colornick+">"+set_nick+"</font></a> в теме форума \"<a href=?inc=forum&forum="+var11+"&topic="+var10+"&post="+var12+"#post"+var12+" target=_blank>"+var9+"</a>\"</i><br>");
}


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#26 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Поставим запятую в развитии mpchat - переход на UTF-8 (все чаты переведены на UTF-8)

Наступил новый год и была создана копия движка чата в кодировке UTF-8.
Все чаты с 31.01.13 работают только на UTF-8 кодировке, восстановление старых чатов больше не выполняется.


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#27 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Новая функция транслитерации текста в реальном времени
- данный транслит поддерживается всеми браузермани кроме IE<9
- пример можно увидеть в главном чате - кнопка TR, обновление только для безфреймовых чатов

1. в скриптах чата jscripts.dat в функциях нижнего фрейма находим такой код:

/* Транслирует текст на русский по звучанию */
document.write("<"+"script src=http://mpchat.com/blank/translit.js></"+"script>");
function translit(msg){
if (document.fmsg.trans.value == 1 && 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;
}

и заменяем на такой

/* Транслирует текст на русский по звучанию */
var tr={'а':'a','б':'b','в':'v','г':'g','д':'d','е':'e','ё':'jo','ж':'zh','з':'z','и':'i','й':'j','к':'k','л':'l','м':'m','н':'n','о':'o','п':'p','р':'r','с':'s','т':'t','у':'u','ф':'f','х':'h','ц':'c','ш':'sh','щ':'w','ы':'y','ь':"'",'ъ':"''",'э':'je','ю':'ju','я':'ja'};
var enabletrans=0;
function checktrans() {
    var obj=document.getElementById('trbutton');
    if(enabletrans==1) {enabletrans=0; obj.style.fontWeight='normal';}
    else {enabletrans=1; obj.style.fontWeight='bold';}
    document.fmsg.text0.focus();

function autotrans(el,e) {
    var e=e || window.event;
    var code = e.which;
    if(typeof el.selectionStart != "number" || !((code>=65 && code<=123) || code==35 || code==39)) return true;
    var txt=String.fromCharCode(code);
    var pos=el.selectionStart;
    el.value=el.value.substr(0,el.selectionStart)+el.value.substr(el.selectionEnd);
    var pre=""; if(pos) {pre=el.value.substr(pos-1,1); if(tr[pre]) pre=tr[pre]; else pre="";}
    var pretxt = pre+txt; var r=""; var del=0;
    if(pretxt.length==2) for(k in tr) if(tr[k]==pretxt) {r=k; del=1; break;}
    if(!r) for(k in tr) if(tr[k]==txt) {r=k; break;}
    el.value=el.value.substr(0,pos-del)+r+el.value.substr(pos);
    pos=pos+1-del; el.setSelectionRange(pos, pos);
    return false;
}

2. далее чуть ниже в функции msg_send удаляем такую строку:

msg_text=translit(msg_text);

3. теперь открываем шаблон чата внутри chat.inc и перед <!-- CHAT FRAME --> добавляем:

<!-- TRANSLIT HELP -->
<script>
var out='<table id=trlist style="display:none; position:absolute; z-index:10; right:10px; bottom:55px; ">';
out+='<tr>'; for(i in tr) out+='<td>'+i+'</td>'; out+='</tr>';
out+='<tr>'; for(i in tr) out+='<td>'+tr[i]+'</td>'; out+='</tr>';
out+='</table>';
document.write(out);
</script>

4. ниже в любом месте добавляем кнопку TR

<input id=trbutton type=button onclick="checktrans();"  onmouseover="var obj=document.getElementById('trlist'); obj.style.display='inline-table';" onmouseout="var obj=document.getElementById('trlist'); obj.style.display='none';" value="TR" title="Включить автоматическую транслитерацию Ctrl+Alt">

5. ну и само поле ввода текста должно выглядеть так: (синее добавлено)

<input type=text name=text0 maxlength=500 style="width:400px;"  onkeypress="if(enabletrans) return autotrans(this,event);" onkeydown="if(event.ctrlKey && event.altKey) {checktrans(); return false;}">


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#28 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Переход на новый стабильный сервер WebCam видеотрансляций и исправление багов
- исправлено выключение микрофона если тихий звук, ранее постоянно вырубался звук если с микрофона шёл слабый сигнал
- качество звука по умолчанию теперь не 22khz, а 44khz, также добавлен параметр khz который позволяет менять на свою частоту: khz=22
- добавлен параметр buf, при использовании этого параметра происходит буферизация и звук не прерывается, если не использовать параметр, то бывают заикания звука 2-3 раза в минуту, оптимально buf=0.1 для всех кроме IE
- исправлена ошибка в IE при которой даже после закрытия просмотра/вещания, звук продолжал поступать в браузере
- по умолчанию функция loadvideo() теперь не в файле .js, а в скриптах чата jscripts.dat
- по умолчанию теперь флешка должна лежать в корне вашего чата и называться webcam.swf

Внимание!!! Почти все чаты были переведены автоматически, но те чаты которые не были похожи на стандартные, вероятно небыли переведены, поэтому если вебки не работают, пишите в эту тему, разберемся: https://forum.vmeste.eu/viewtopic.php?id=14553

Ручное обновление

1. В корне вашего чата должна лежать актуальная флешка webcam.swf версии 3.58, файл прикреплен к сообщению внизу.

2. Функция loadvideo, которая находится в скриптах, либо js библиотеке, была изменена так:
(синим показано добавленное или измененное, а красную решетку надо удалить)

/* Функция включения и выключения вебкамер */
function loadvideo(obj,host,share,rec,key) {
    var sharekey=""; if(share) sharekey=share; if(key) sharekey+="_"+key;
    var nickid=0; for(var i=0; i<sharekey.length; i++) nickid+=sharekey.charCodeAt(i)*(i+1);
    var camid="mpchat-"+chatlogin+"_"+nickid;
    var obj1=document.getElementById(obj);
    if(!obj1) {
        var obj1=document.createElement('DIV');obj1.id=obj;
        document.getElementById("cams").appendChild(obj1);
    }
    if(host=="") {var flashobj=document.getElementById("flash"+obj); if(flashobj && flashobj.close) flashobj.close(); obj1.innerHTML="&nbsp;"; obj1.style.display="none"; return;}
    obj1.innerHTML="<div id=flash"+obj+"><a href=http://get.adobe.com/flashplayer/ target=_blank><font size=1>Установите Flash Player!</font></a><br></div><div id=closer"+obj+"></div>";
    var flashw=240; var flashh=180;
    var flashvars='host='+host+'&m=4&q=80&r=12&sharefile='+camid+'&sharelive='+camid+'&shareplay=#'+camid;
    if(rec==1) flashvars+='&rec=1';
    if(!(/MSIE/i).test(navigator.userAgent)) flashvars+='&buf=0.1';
    swfobject.embedSWF("webcam.swf?v3.58", "flash"+obj, flashw, flashh, "9", "http://mpchat.com/blank/expressInstall.swf", {}, {allowfullscreen:"true",wmode:"transparent",flashvars:flashvars},{});
    var stream="Просмотр"; var close="<a href=# onclick='loadvideo(\""+obj+"\",\"\"); return false;'><font size=1>закрыть</font></a>";
    if(rec) {stream="Вещание"; close="<a href=# onclick='gettime=new Date().getTime(); setstatus(0); return false;'><font size=1>закрыть</font></a>";}
    document.getElementById("closer"+obj).innerHTML+="<font size=1><b>"+stream+" #"+share+"</b></font> - "+close+"<br><br>";
    obj1.style.display="block";
}

3. Кроме этого купленным чатам работающим через другой хостинг необходимо изменить сервер вещания в config.php на video1.myradio24.com и конечно не забыть загрузить новую флешку webcam.swf из прикрепленного архива ниже.
http://imgs.su/users/1/1378221662.rar


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#29 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Переход викторины на WebSocket с полным редактированием

В связи с тем что старый движок викторины значительно устарел, викторина была переведена на новый движок через WebSocket.
Старый движок больше не работает, поэтому всем кто использует викторину необходимо провести это обновление:

1. В файле стилей style.css меняем #gamecode на #gamediv:
(это действие выполнено автоматически, но можно проверить всё ли нормально)

/* стиль для игры - викторина */
#gamediv table {border-collapse:collapse;}
#gamediv td {padding:2px; font:18px Verdana;text-align:center; width:20px; height:15px;}

2. В файле chat.inc вырезаем iframe, находим такой кусок кода:
(это действие выполнено автоматически, но можно проверить всё ли нормально)

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

и заменяем на этот код:

<!-- GAME FRAME -->
<div id=gamediv class=header-body style="position:absolute; padding:10px 10px 0 10px; height:60px; left:0px; right:295px; top:45px; display:none; z-index:1; background-color:inherit; border:1px gray solid;">
</div
>

3. В скриптах чата jscripts.dat находим такой кусок кода:

/* Загружает викторину в верхушку чата */
var gameon=0;
function startgame(){
    if(gameon==0){
    gameframe.location.href='http://'+engine_host+':'+engine_port+'/?chat='+chatlogin;
    gameon=1; document.getElementById('gamediv').style.display="block";
  }
    else {
    gameframe.location.href='start.html';
    gameon=0; document.getElementById('gamediv').style.display="none";
    }
}

заменяем на новый код:

/* Загружает викторину в верхушку чата */
var gameon=0;
var gamews="";
function startgame() {
    if(gameon==0){
        if(!window.WebSocket) return false;
        gameon=1; document.getElementById('gamediv').style.display="block";
        document.getElementById('gamediv').innerHTML='Загрузка...';
        if(location.protocol=="https:") gamews = new WebSocket("wss://"+engine_host+":"+(engine_port+1)+"/?app=game&chat="+chatlogin+"&engine=WebSocket"); else
        gamews = new WebSocket("ws://"+engine_host+":"+engine_port+"/?app=game&chat="+chatlogin+"&engine=WebSocket");
        gamews.onmessage = function(e) {eval(e.data.replace(new RegExp('<scr'+'ipt>','gm'),'').replace(new RegExp('</scr'+'ipt>','gm'),''));};
    }
    else {
        gameon=0; document.getElementById('gamediv').style.display="none";
        if(gamews) {gamews.close(); gamews="";}
    }
}
function setgame(sec,word,ask) {
    if(ask) document.getElementById('gamediv').innerHTML='<div id=gameword></div><a href=? onclick="alert(\'Чтобы ответить на вопрос вы должны в течении указанного времени ввести предполагаемое слово или фразу в поле ввода чата поставив перед ним знак процента!  (Например:%ответ) Не забудьте включить транслит, если у вас нет русских букв! Рейтинг викторины находится в Топ100 участников. Более 100 000 вопросов не дадут вам скучать.\'); return false;">[?]</a> <font size=2 face=Verdana>'+ask+'</font>';
    var obj=document.getElementById('gameword'); if(!obj) return;
    var sym=''; var html='<table border=1><tr>';
    for(i=0;i<word.length;i++){
        sym=word.substr(i,1); if(sym==' ') sym='&nbsp;';
        html+='<td>'+sym+'</td>';
    }
    obj.innerHTML=html+'<td style=color:red>'+sec+'</td></tr></table>';
}

4. Это действие только для выкупленных чатов, добавляем в файле write.php синее:

$check=0; if($txt) $check=(int)file_get_contents("http://$config[engine_host]:$config[engine_port]/?app=game&chat=$chat&word=".urlencode($txt)."&hash=$config[engine_hash]",false,stream_context_create($opt));

Если вы всё сделали правильно, то викторина будет работать.


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#30 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Изменение тарифов и условий для чатов
Тарифы: http://mpchat.com/?to=money
Условия: http://mpchat.com/?to=recom

Что стало лучше:
1. Для чатов тарифа стандарт увеличен предел регистраций до 5000.
2. Выделяемое место для тарифа стандарт теперь вне зависимости от активности и уровня чата всегда 300мб. (ранее от 50-300)
3. Появилась удобная смена тарифа на странице заказов, с автоматическим пересчетом даты окончания продления.
4. Больше нет требования содержать чат в активном состоянии, это не на что не влияет. Но появилось общее требование оплачивать чат.
5. Отменен платёж за активацию чата. Теперь новые чаты получают 7 дней для теста, а затем можно продлить чат по любому из тарифов.

Что стало хуже:
1. Тариф Стандарт больше не является бесплатным, его стоимость теперь составляет 1 евро в месяц.
2. Мы больше не реагируем на жалобы из-за рекламных ссылок любых других чатов, каждый чат может и должен сам справляться с рекламным спамом используя различные методы блокировок. Связано это с тем, что обычно сами админы лишь косвенно виновны в распространении рекламы их чата и поэтому они не могут быть наказаны.

Что со старыми чатами?
Чтобы сделать переход для старых чатов более плавным, на данный момент действует временная отсрочка при которой старые чаты продолжают работать по старым условиям. Учтите что это условие сохранится не долго и рано или поздно придётся всем оплачивать чаты, поэтому рекомендуется зарание задуматься об оплате.


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#31 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Переход сервиса чатов на PHP 7.0

Работы по переходу удачно завершены, в процессе работ чаты продолжали работать.
Если вы обнаружите какие либо проблемы или ошибки, напишите в тему Bugs - ошибки.


Выкупленным чатам

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

1. В файле ini.php найдём в 2х разных строчках
$$nvars[$i]
заменим на
${$nvars[$i]}

2. В functions.php обновим полностью 2 функции:
function db_connect() и function output()

3. После функции db_connect() добавим новую функцию mysqli_result, она есть тут:
https://wiki.vmeste.eu/?page=88

4. Выполнить автозамену используя скрпит указанный в конце информации.
Для выполнения автозамены нужно раскомментировать одну строку.
https://wiki.vmeste.eu/?page=88

5. Переключаем на PHP7.0 в панели хостинга и тестируем чат.

PS> Если кто-то планирует обновляться полностью, то лучше дождаться первой версии Mpchat CMS, чат с уклоном на CMS систему. (ориентировочно 2017г)


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

#32 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 17964
На форуме: 1678 час.
Репутация: 1211 (99%) ±
Инфо  Вебсайт  Написать

Изменения в сервисе с целью перехода на Mpchat CMS 6 версию сервиса для совместимости

Около года назад были разработаны некоторые отдельные части системы, но по сей день они не интегрированы в сервис.
Чтобы поставить точку в старых разработках, я решил всё таки доделать и вставить данные новшества, обозвав новую версию Mpchat CMS v6.

ВНИМАНИЕ!  До исчезновения этой надписи, данная информация будет дополняться новыми изменениями.
Из-за большого кол-ва изменений для обновления выкупленного чата лучше заменять все PHP скрипты, а потом добавить свои правки.
Сейчас производится тестирование Альфа версии для новых чатов, старые чаты могут попробовать обновить все шаблоны. (без гарантий)
Последнее изменение: 10.12.2016


Особенности новой версии системы Mpchat CMS 6
- общий шаблонизатор для inc файлов putinclude() и компоненты CMS шаблонов
- добавлена переменная %loadtime% для всех шаблонов
- добавлена вставка переменных шаблонов (title|keys|description|...)
- новая динамическая система комментариев с MySQL (которая будет использоваться везде)
- api.js - базовый JS модуль для системы CMS (подключает JSLib.js мини аналог jQuery), содержит функции авторизации и комментариев
- общая динамическая система авторизации через Cookie (гостем или пользователем)
- легкий ключ (i_aidn) теперь генерируется через api.js и хранится в Cookie
- вход в чат теперь возможен просто перейдя по ссылке, вводить данные или использовать <form> больше ненужно
- используется корень системы в качестве базы для API <base href="./">
- Загружено за теперь ссумирует время информера и время шаблонного скрипта
- ошибки теперь выводятся в редактируемый шаблон error.inc
- зарезервирована переменная $r для выдачи API запросов или возврата в функциях
- вырезана возможность перехода на UTF-8 (давно все перешли)
- зарезервирована переменная $cfg массив в котором теперь хранятся все настройки
- изменены все участки кода работы с settings.sys, теперь для этого есть функция getconfig() и setconfig()
- новый файл настроек config.sys будет в формате json  (старый settings.sys был в текстовом)
- настройки анкеты теперь принимают input поле type=color, таким образом можно удобно выбирать цвет средствами браузера
- движок теперь не проверяет IP адрес по умолчанию, но можно настроить проверку IP провайдера, или как раньше жёскую проверку (не рекомендуется)
- движок теперь поддерживает Websocket соединения на стандартном порту 443 (тестируется), ajax планируется удалить совсем, если упадёт спрос!
- сервис больше не даёт выбор движка пользователю, даже в мобильной версии, поэтому необходимо исправить функцию loadframes() в mobile.inc
- галочка запомнить ник больше не нужна, запоминание через COOKIE активно всегда, поэтому вход одновременно несколькими никами больше не возможен, для второго ника нужно открыть другой браузер
- все скрипты более не нуждаются в параметрах сессий id и sess и переменных $sess, $id, %id% и %myid%, можно удалять из шаблонов и ссылок везде кроме скриптов jscripts.dat (там myid нужен для движка), а также определитель старой авторизации в informer.php, gb.inc, forum.inc, gallery.inc
- параметр engrus_on теперь включен всегда, т.е. совместное использование латиницы и кирилицы запрещено для всех


Шаблоны
index.inc - в шаблон добавлены вставки header и body, а также вставлено содержимое из файла index.html (удалён) вместо %include%
feedback.inc - в шаблон добавлены вставки header и body
top100.inc - в шаблон добавлены вставки header и body
search.inc - в шаблон добавлены вставки header и body
who.inc - в шаблон добавлены вставки header и body
reg.inc - в шаблон добавлены вставки header и body
mail.inc - в шаблон добавлены вставки header и body
gb.inc - шаблон гостевой полностью переписан с header и body и использованием новой библиотеки api.js с поддержкой новой системы комментариев и динамической авторизации (без перезагрузки страницы)
gallery.inc - шаблон галереи частично переписан с header и body и использованием новой библиотеки api.js с поддержкой новой системы комментариев и динамической авторизации (без перезагрузки страницы), кроме этого загрузка фото и ссылки на галереи теперь привязаны к ID пользователя
info.inc - в шаблон анкеты добавлен api.js и комментарии к анкете
error.inc - новый шаблон страницы ошибок, добавлены вставки header и body
exit.inc - новый шаблон страницы выхода из чата или выхода при бане, добавлены вставки header и body (переименован из exit.html)
prav.inc - новый шаблон страницы правил чата, добавлены вставки header и body (переименован из prav.html)
help.inc - новый шаблон страницы помощи чата, добавлены вставки header и body (переименован из help.html)

PHP файлы
informer.php - добавлена поддержка json и jsonp через json=1 и jsonp=varname соответственно, добавлены переменные авторизации
feedback.php - удалёна вставка JS переменных var mynick='$mpnick'; var myid='$id'; var xcode='';
top100.php - удалёна вставка JS переменных  var loadtime='$loadtime'; var mynick='$mpnick';\nvar myid='$id';\n
search.php - удалёна вставка JS переменных  var loadtime='$loadtime';
gb.php - СКРИПТ УСТАРЕЛ И БУДЕТ ПОЛНОСТЮ УДАЛЁН, а пока удалена вставка JS переменных  var loadtime='$loadtime';
reg.php - удалёна вставка JS переменных  var xcode='';
mail.php - удалёна вставка JS переменных var xcode='';
index_chat.php - СКРИПТ УДАЛЁН, функционал внедрён в ini.php


Изменения в скриптах и шаблонах чата для перехода на новую версию
(для чатов размещенных на сервисе  выполняются автоматически)

1. Переименовываем файл exit.html в exit.inc, а потом в скриптах чатов jscripts.dat и шаблоне чата chat.inc находим exit.html? и заменяем на ?inc=exit&
2. В шаблоне exit.inc заменим var nick=get['nick']; на var nick='%mynick%';
3. В шаблоне gallery.inc находим строку и заменяем 2 на 8.

info+="<a href=?inc=gallery&gallery="+x[2]+">"+x[2]+"</a>";

а также находим строку и заменяем 0 на 2

for(var i=0;i<g_g.length;i++) wr("<a href='?inc=gallery&gallery="+g_g[i][0]+"'>"+g_g[i][0]+"("+g_g[i][1]+")</a> ");

а также чуть ниже найдём похожую строку и добавим синее:

if(gallery) wr("<b>"+galleryname+"</b><br><br>");

ещё ниже найдём строку и заменим mynick на myuserid:

if(mynick) wr("<b>"+mynick+"</b> (<a href=?inc=gallery&gallery="+mynick+">моя галерея</a>)");

4. В шаблоне info.inc найдём gallery=%nick% и заменим на gallery=%userid%


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Неактивен

[ Generated in 0.010 seconds, 10 queries]