Собственно проблемный участок кода:
if($irc_cmd == '/d')
{
$iii = 3;
$di = 40;
$plusi = 40;
do
{
$dpos = substr($txt, $iii, 1);
if ($dpos == 'd') {$di = $iii}
if ($dpos == '+') {$plusi = $iii}
$iii += 1;
} while (($dpos != '/') | ($iii != 30));
if ((substr($txt, $iii, 1) == '/') & ($di<$iii) & ($plusi < $iii))
{
$dcount = substr($txt, 3, $di-3);
$dnum = substr($txt, $di+1, $plusi-($di+1));
$dplus = substr($txt, $plusi+1, $iii-($plusi+1));
$iii = 0;
unset($dres);
$dicemessage = 'Бросок ' . $dcount . 'd' . $dnum . '+' . $dplus . ':';
$ores = 0;
do
{
$dres[] = mt_rand(1, $dnum);
$dicemessage = $dicemessage . $dres[$iii]+',';
$ores = $ores+$dres[$iii];
$iii += 1;
] while ($iii != $dcount);
$ores = $ores+$dplus;
$dicemessage = $dicemessage . ' Общий результат:' . $ores;
$this->send(new Message($type, $this->userid, $GLOBALS['fc_config']['liveSupportMode']?$this->roomid:null, 'test', $this->color));
}
$this->send(new Message($type, $this->userid, $GLOBALS['fc_config']['liveSupportMode']?$this->roomid:null, 'test', $this->color));
return 'ok';
}
Во всем файле описываются команды для чата по такому же типу.
После команды некоторое время висит, потом отвисает.
Тестовые сообщения:
$this->send(new Message($type, $this->userid, $GLOBALS['fc_config']['liveSupportMode']?$this->roomid:null, 'test', $this->color));
Не выводит. Вместо 'test' должна стоять переменная $dicemessage которая потом должна выводится в чат. Дело точно не в неправильной работе с функцией вывода в чат(проверял другой командой только со строкой вывода - все работало)
Значит ошибка в самом коде дайса. Буду очень благодарен помощи.
Спустя 12 минут, 45 секунд (5.11.2010 - 20:45) Invis1ble написал(а):
Ivancheg
Цитата |
} while (($dpos != '/') | ($iii != 30)); if ((substr($txt, $iii, 1) == '/') & ($di<$iii) & ($plusi < $iii)) |
вот этот кусок меня смущает... | и & - битовые операции, скорее всего там должно быть || и &&
Дальше я не углублялся в твой код, попробуй пока это поменять и сообщи о результатах
Спустя 3 минуты, 34 секунды (5.11.2010 - 20:49) Invis1ble написал(а):
Цитата |
$dicemessage = $dicemessage . $dres[$iii]+','; |
вот эта конструкция тоже по-ходу неправильная - ты к строковому типу данных применяешь арифметическую операцию..
Цитата |
$iii += 1; |
это делается так
$iii ++;хотя тут принципиальной разницы нет..
Вообще, тут всё очень запущено
Спустя 8 минут, 49 секунд (5.11.2010 - 20:58) Guest написал(а):
Цитата (Invis1ble @ 5.11.2010 - 17:45) | ||
Ivancheg
вот этот кусок меня смущает... | и & - битовые операции, скорее всего там должно быть || и && Дальше я не углублялся в твой код, попробуй пока это поменять и сообщи о результатах |
Битовые операции поменял, но дело оказалось в неправильном условии while. Теперь второе тестовое сообщение выдается. Но в if с обработчиком не попадает. Буду разбираться.
$dicemessage = $dicemessage . $dres[$iii]+',';
Забыл поменять.
Цитата |
Вообще, тут всё очень запущено |
Согласен, как не печально... Но данный скрипт очень необходим. Приходится в спешном порядке хоть как то изучать пхп.
Спустя 1 час, 4 минуты, 55 секунд (5.11.2010 - 22:03) Sanchopansa написал(а):
Вот участок кода что мне очень не нравиться...
ну во-первых
правим на
во-вторых:
Кто сказал что в массиве $dres есть уже индекс $iii?
потому как вот тут индекс не задается
do
{
$dres[] = mt_rand(1, $dnum);
$dicemessage = $dicemessage . $dres[$iii]+',';
$ores = $ores+$dres[$iii];
$iii += 1;
] while ($iii != $dcount);
ну во-первых
] while ($iii != $dcount);
правим на
} while ($iii != $dcount);
во-вторых:
Кто сказал что в массиве $dres есть уже индекс $iii?
$dicemessage = $dicemessage . $dres[$iii].',';
потому как вот тут индекс не задается
$dres[] = mt_rand(1, $dnum);
Спустя 26 минут, 42 секунды (5.11.2010 - 22:29) Invis1ble написал(а):
Sanchopansa
там вообще очень много ляпов, я не стал углубляться особо.. ))
там вообще очень много ляпов, я не стал углубляться особо.. ))