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

Отдельные статусы для каждой из комнат

 

1007
BETEPAH @BETEPAH
1. Все статусы во всех комнатах должны быть прописаны в массивах Администрация-Модерация-Скрипты в чате-Настройки
/* Вывод статусов ICQ */
var stn2= new Array();
stn2[0] ='<img src=http://russchat.ru/allday/ico/stat/01svob.png title="свободен">';

и
/* Сообщение о смене статусa ICQ */
var icqtxt= new Array();
icqtxt[0]='освободился';

2. Администрация-Модерация-Скрипты в чате-Настройки
добавляем
/* Покомнатные группы статусов statgroup[id комнаты]*/
var statgroup = new Array();
statgroup[0] ='<option value=0>свободен</option><option value=1>занят</option>';
statgroup[1] ='<option value=0>свободен</option><option value=3>играю</option>';
statgroup[2] ='<option value=0>свободен</option><option value=8>смотрю ТВ</option><option value=6>купаюсь</option>';
...

значение value= должно быть равно индексам (то, что указано в квадратных скобках) этого статуса в stn2 и icqtxt.
3. Администрация-Модерация-Скрипты в чате-Функция - вывода сообщений и команд
ищем /* Функция перехода в комнаты */ и добавляем синее:
...
ucc=new Array();
parent.left.document.body.innerHTML="";
setstatus(0); parent.users.document.setstatus.innerHTML=statgroup[setroom];
parent.users.document.getElementById('users').innerHTML=userlist;

Набросал на скорую руку, в чате не проверял, поэтому делайте бэкап своих файлов. Если будут ошибки, пишите.

Отредактировано BETEPAH - 12.10.2011
68
JIocT @JIocT
Сделал, вроде бы, все, как тут и написано: не работает. Не изменилось ничего, кроме того, что появился глюк при переходе по комнатам - пишет "в чате включен антифлудер, вы не можете писать чаще, чем разрешено админом!".

То есть, насколько я понял, нужно просто переписать старые статусы в /* [Настройки - никлиста и статусов] */ на новые и добавить туда же /* Покомнатные группы статусов statgroup[id комнаты]*/ ?
Или добавить все это в просто /* [НАСТРОЙКИ] */ , а старые статусы в Настройках никлиста и ст. удалить?

К тому же, надо же как-то менять селектор статусов во фрейме участников, разве нет?

1007
BETEPAH @BETEPAH
JIocT пишет:

К тому же, надо же как-то менять селектор статусов во фрейме участников, разве нет?

именно это и должна делать строка parent.users.document.setstatus.innerHTML=statgroup[setroom]; только надо ее повыше поднять, наверное.
Адрес чата тот же, где и кубик тестировали?

Отредактировано BETEPAH - 12.10.2011
1007
BETEPAH @BETEPAH
1. Все статусы во всех комнатах должны быть прописаны в массивах Администрация-Модерация-Скрипты в чате-Настройки никлиста и статусов
/* Вывод статусов ICQ */
var stn2= new Array();
stn2[0] ='<img src=http://russchat.ru/allday/ico/stat/01svob.png title="свободен">';

и
/* Сообщение о смене статусa ICQ */
var icqtxt= new Array();
icqtxt[0]='освободился';

2. Там же ниже добавляем
/* Покомнатные группы статусов statgroup[id комнаты]*/
var statgroup = new Array();
statgroup[0] ='<option value=0>свободен</option><option value=1>занят</option>';
statgroup[1] ='<option value=0>свободен</option><option value=3>играю</option>';
statgroup[2] ='<option value=0>свободен</option><option value=8>смотрю ТВ</option><option value=6>купаюсь</option>';
...

значение value= должно быть равно индексам (то, что указано в квадратных скобках) этого статуса в stn2 и icqtxt.
3. Администрация-Модерация-Скрипты в чате-Функция - вывода сообщений и команд
ищем /* Функция перехода в комнаты */ и добавляем синее:
...
if(nick==mynick) {
myroom=setroom;
if(roomlog==1) {
parent.left.document.body.innerHTML="Подождите, осуществляется переход в другую комнату ...";
window.setTimeout("loadframes();",2000);
mystyle=rooms[myroom][2];
window.setTimeout("setstyle(mystyle);",4000);
parent.users.document.getElementById('setstatus').innerHTML=statgroup[setroom];
return;

Здесь статус при переходе в комнату не меняется, поэтому, если человек заходит в комнату, в которой нет текущего статуса, в селекторе будет светится первая опция выбора, а фактически статус у человека останется старый. Если хотите чтоб статус менялся, нужно добавить в выделенную строку setstatus(0); но вся заковырка в том, что слишком много команд выполняется в единицу времени, поэтому срабатывает антифлудер. Можно поставить таймаут перед командой но в этом случае будет создаваться впечатление тормознутости чата. Вам решать. Вот строка с таймаутом
parent.users.document.getElementById('setstatus').innerHTML=statgroup[setroom]; window.setTimeout("setstatus(0);",6000);

4. Администрация-Фреймы-Фрейм участников добавить в селект id
<select class=ok id=setstatus name=setstatus onchange="parent.gettime=new Date().getTime();parent.setstatus(this.value);">

В чате проверил, работает.

Отредактировано BETEPAH - 12.10.2011
68
JIocT @JIocT
По-моему что-то неправильно делаю. Сделал вроде бы все как указано, опять ничего не изменилось, кроме того, что пропало сообщение антифлуда при переходе из комнаты в комнату.

Статусы по прежнему спокойно себе выбираются в любой из комнат, да и в селекторе с добавлением id ничего не изменилось...

1007
BETEPAH @BETEPAH
JIocT пишет:

Статусы по прежнему спокойно себе выбираются в любой из комнат, да и в селекторе с добавлением id ничего не изменилось...

У Вас выключена загрузка сообщений при переходе в другую комнату, вот в чем различие между нашими чатами.
Чтоб срабатывало и при выключенных сообщениях, добавьте еще в /* Функция перехода в комнаты */
ucc=new Array();
parent.left.document.body.innerHTML="";
parent.users.document.getElementById('setstatus').innerHTML=statgroup[setroom]; window.setTimeout("setstatus(0);",3000);
parent.users.document.getElementById('users').innerHTML=userlist;

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

Не забудьте убедиться, что фрейм участников берется не из кэша и id присутствует в нём. Если нет, то обновите фрейм или почистите кэш браузера.

68
JIocT @JIocT
Так, ну улучшение уже есть: вроде работает)

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

1007
BETEPAH @BETEPAH
JIocT пишет:

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

Ну, так оставьте в коде фрейма юзеров те статусы, которые у Вас в... "прихожей" 😀 должны быть 😉
Небольшое пояснение. Скрипт при переходе в другую комнату заменяет содержимое селекта во фрейме посетителей. При запуске этот скрипт не срабатывает. Если у Вас есть возможность входить в разные комнаты с титульной страницы, то нужно дописать скрипт и в этот фрейм. Примерный его код Вам писали на первой странице этой ветки.
что-то вроде
...
<center>Статус: <select onchange="parent.gettime=new Date().getTime();parent.setstatus(this.value);" name="setstatus" id="setstatus" class="ok">
<script>document.write(parent.statgroup[parent.myroom]);</script>
</select>
</center>
...

Отредактировано BETEPAH - 13.10.2011
68
JIocT @JIocT
Благодарю за пояснение) Все в порядке, огромное Вам человеческое спасибо! Если вдруг обнаружу какие-либо ошибки, то сообщу.

2
Олег @Кенмоккай
Сделал все как написано не работает, подскажите пожалуйста, может что не так делаю.
У меня во всех комнатах видит только те статусы которые прописаны в первой комнате.

Отредактировано Кенмоккай - 28.01.2014