Ну а если подумать, предположения есть?arhi писал(а):Обнаружил следующее (возможно мой недочет, но не понял в чем)
При создании новой темы, если сразу создавать партию шахмат она не появляется, только в такой последовательности:
Создал тему - нажал редактировать - поставил галочку "создать новую партию". Тогда появляется
В чем проблема?
МОД Шахмат (chessmod 0.0.1)
-
- phpBB 1.4.4
- Сообщения: 111
- Стаж: 18 лет 3 месяца
- Забанен: Бессрочно
-
- phpBB 1.4.4
- Сообщения: 171
- Стаж: 18 лет 2 месяца
Я вот подумал, а ведь в моде ADR есть функция отправки личных сообщений противнику после своего очередного хода во время битвы.go писал(а):интересно теперь придется каждый раз обновлять страницу чтобы увидеть очередной ход соперника7
Может быть применить ее и в шахматах? Сейчас покопаюсь...
Добавлено спустя 2 часа 30 минут 15 секунд:
И пускай мои знания в php стремятся к нулю, но методом copy-paste владею не хуже VVVas'a
Вот что получилось:
Правим файл chess_posting.php (Прим. - у меня стоит первая версия "Шахмат")
1. Для тех, у кого стоит мод ADR
в конце функции function chess_posting_play (), перед строкой
redirect(append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id", true));
вставляем
Код: Выделить всё
include($phpbb_root_path . 'adr/includes/adr_functions_communicate.'.$phpEx);
$subject = $lang['Topic_Chess'];
$dest = ($chess_info['chess_p1_id'] == $userdata['user_id'] ? $chess_info['chess_p2_id'] : $chess_info['chess_p1_id']);
$message = sprintf("Ваш ход");
adr_send_pm ($dest , $subject , $message );
Код: Выделить всё
...
//$message = $lang['Chess_played'].'<br /><br />' . sprintf($lang['Click_return_topic'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">', '</a>');
//message_die(GENERAL_MESSAGE, $message);
}
}
// *** added by Zlodey ***
include($phpbb_root_path . 'adr/includes/adr_functions_communicate.'.$phpEx);
$subject = $lang['Topic_Chess'];
$dest = ($chess_info['chess_p1_id'] == $userdata['user_id'] ? $chess_info['chess_p2_id'] : $chess_info['chess_p1_id']);
$message = sprintf("Ваш ход");
adr_send_pm ($dest , $subject , $message );
// *** added by Zlodey ***
redirect(append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id", true));
}
function chess_posting_action ()
{
global $mode, $chess_delete, $confirm;
...
2. Для тех, у кого НЕ стоит мод ADR
делаем то же самое, только без строки
include($phpbb_root_path . 'adr/includes/adr_functions_communicate.'.$phpEx);
Код: Выделить всё
...
//$message = $lang['Chess_played'].'<br /><br />' . sprintf($lang['Click_return_topic'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">', '</a>');
//message_die(GENERAL_MESSAGE, $message);
}
}
// *** added by Zlodey ***
$subject = $lang['Topic_Chess'];
$dest = ($chess_info['chess_p1_id'] == $userdata['user_id'] ? $chess_info['chess_p2_id'] : $chess_info['chess_p1_id']);
$message = sprintf("Ваш ход");
adr_send_pm ($dest , $subject , $message );
// *** added by Zlodey ***
redirect(append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id", true));
}
function chess_posting_action ()
{
global $mode, $chess_delete, $confirm;
...
вставляем функцию отправки сообщений:
Код: Выделить всё
//
// функция отправки сообщений, выдранная из ADR
//
function adr_send_pm ( $dest_user , $subject , $message )
{
global $db , $phpbb_root_path , $phpEx , $lang, $user_ip, $board_config , $userdata;
$dest_user = intval($dest_user);
$msg_time = time();
$from_id = $userdata['user_id'];
$html_on = 1;
$bbcode_on = 1;
$smilies_on = 1;
include_once($phpbb_root_path . 'includes/functions_post.'.$phpEx);
include_once($phpbb_root_path . 'includes/bbcode.'.$phpEx);
$privmsg_subject = trim(strip_tags($subject));
$bbcode_uid = make_bbcode_uid();
$privmsg_message = trim(strip_tags($message));
// APM compliance
if ( defined('PRIVMSGA_TABLE'))
{
include_once($phpbb_root_path . 'includes/functions_messages.'.$phpEx);
send_pm( 0 , '' , $dest_user , $privmsg_subject, $privmsg_message, '' );
}
else
{
$sql = "SELECT user_id, user_notify_pm, user_email, user_lang, user_active
FROM " . USERS_TABLE . "
WHERE user_id = $dest_user ";
if ( !($result = $db->sql_query($sql)) )
{
$error = TRUE;
$error_msg = $lang['No_such_user'];
}
$to_userdata = $db->sql_fetchrow($result);
$sql = "SELECT COUNT(privmsgs_id) AS inbox_items, MIN(privmsgs_date) AS oldest_post_time
FROM " . PRIVMSGS_TABLE . "
WHERE ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
OR privmsgs_type = " . PRIVMSGS_READ_MAIL . "
OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )
AND privmsgs_to_userid = $dest_user ";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_MESSAGE, $lang['No_such_user']);
}
$sql_priority = ( SQL_LAYER == 'mysql' ) ? 'LOW_PRIORITY' : '';
if ( $inbox_info = $db->sql_fetchrow($result) )
{
if ( $inbox_info['inbox_items'] >= $board_config['max_inbox_privmsgs'] )
{
$sql = "SELECT privmsgs_id FROM " . PRIVMSGS_TABLE . "
WHERE ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
OR privmsgs_type = " . PRIVMSGS_READ_MAIL . "
OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )
AND privmsgs_date = " . $inbox_info['oldest_post_time'] . "
AND privmsgs_to_userid = $dest_user ";
if ( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not find oldest privmsgs (inbox)', '', __LINE__, __FILE__, $sql);
}
$old_privmsgs_id = $db->sql_fetchrow($result);
$old_privmsgs_id = $old_privmsgs_id['privmsgs_id'];
$sql = "DELETE $sql_priority FROM " . PRIVMSGS_TABLE . "
WHERE privmsgs_id = $old_privmsgs_id";
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs (inbox)'.$sql, '', __LINE__, __FILE__, $sql);
}
$sql = "DELETE $sql_priority FROM " . PRIVMSGS_TEXT_TABLE . "
WHERE privmsgs_text_id = $old_privmsgs_id";
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs text (inbox)', '', __LINE__, __FILE__, $sql);
}
}
}
$sql_info = "INSERT INTO " . PRIVMSGS_TABLE . "
(privmsgs_type, privmsgs_subject, privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip, privmsgs_enable_html, privmsgs_enable_bbcode, privmsgs_enable_smilies)
VALUES ( 1 , '" . str_replace("\'", "''", addslashes($privmsg_subject)) . "' , " . $from_id . ", " . $to_userdata['user_id'] . ", $msg_time, '$user_ip' , $html_on, $bbcode_on, $smilies_on)";
if ( !$db->sql_query($sql_info) )
{
message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs text (inbox)', '', __LINE__, __FILE__, $sql_info);
}
$privmsg_sent_id = $db->sql_nextid();
$sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text)
VALUES ($privmsg_sent_id, '" . $bbcode_uid . "', '" . str_replace("\'", "''", addslashes($privmsg_message)) . "')";
if ( !$db->sql_query($sql, END_TRANSACTION) )
{
message_die(GENERAL_ERROR, "Could not insert/update private message sent text.", "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . USERS_TABLE . "
SET user_new_privmsg = user_new_privmsg + 1, user_last_privmsg = " . time() . "
WHERE user_id = " . $to_userdata['user_id'];
if ( !$status = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not update private message new/read status for user', '', __LINE__, __FILE__, $sql);
}
if ( $to_userdata['user_notify_pm'] && !empty($to_userdata['user_email']) && $to_userdata['user_active'] )
{
// have the mail sender infos
$script_name = preg_replace('/^\/?(.*?)\/?$/', "\\1", trim($board_config['script_path']));
$script_name = ( $script_name != '' ) ? $script_name . '/privmsg.'.$phpEx : 'privmsg.'.$phpEx;
$server_name = trim($board_config['server_name']);
$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';
$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/';
include_once($phpbb_root_path . './includes/emailer.'.$phpEx);
$emailer = new emailer($board_config['smtp_delivery']);
if ( $board_config['version'] == '.0.5' || $board_config['version'] == '.0.6' || $board_config['version'] == '.0.7' || $board_config['version'] == '.0.8' || $board_config['version'] == '.0.9' )
{
$emailer->from($board_config['board_email']);
$emailer->replyto($board_config['board_email']);
$emailer->use_template('privmsg_notify', $to_userdata['user_lang']);
}
else
{
$email_headers = 'From: ' . $board_config['board_email'] . "\nReturn-Path: " . $board_config['board_email'] . "\n";
$emailer->use_template('privmsg_notify', $to_userdata['user_lang']);
$emailer->extra_headers($email_headers);
}
$emailer->email_address($to_userdata['user_email']);
$emailer->set_subject($lang['Notification_subject']);
$emailer->assign_vars(array(
'USERNAME' => $to_username,
'SITENAME' => $board_config['sitename'],
'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '',
'U_INBOX' => $server_protocol . $server_name . $server_port . $script_name . '?folder=inbox')
);
$emailer->send();
$emailer->reset();
}
}
return;
}

[/color]
-
- phpBB 1.4.4
- Сообщения: 171
- Стаж: 18 лет 2 месяца
вот еще одна мысль, как увидеть, что в шахматах твой ход, не заходя в саму тему.
К типу [Chess] (в русском варианте - [Шахматы]) рядом с названием темы будет добавляться [Мой ход], если соперник походил и теперь ваша очередь.
Для этого редактируем файл chess_viewforum.php
строку
заменяем на
естественно, строку
$topic_type .= $lang['Topic_Chess'] . ' [ Мой ход ] ';
можно отредактировать по своему вкусу.
Поскольку это мои первые строчки на php, то пришлось потыкаться над ними часа 2 методом проб и ошибок)).
Можно использовать как совместно с уведомлением через ЛС (мое предыдущее сообщение), так и отдельно
К типу [Chess] (в русском варианте - [Шахматы]) рядом с названием темы будет добавляться [Мой ход], если соперник походил и теперь ваша очередь.
Для этого редактируем файл chess_viewforum.php
строку
Код: Выделить всё
$topic_type .= $lang['Topic_Chess'] . ' ';
Код: Выделить всё
// *** replaced by Zlodey ***
// $topic_type .= $lang['Topic_Chess'] . ' ';
$user_id = $userdata['user_id'];
$sql = "SELECT chess_turn FROM " . CHESS_TABLE . " WHERE topic_id = $topic_id AND chess_p2_id != 0 LIMIT 1";
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, "Что-то не так", '', __LINE__, __FILE__, $sql);
}
$blablabla = $db->sql_fetchrow($result);
$chess_turn = $blablabla['chess_turn'];
if ( $chess_turn == $user_id )
{
$topic_type .= $lang['Topic_Chess'] . ' [ Мой ход ] ';
}
else {
$topic_type .= $lang['Topic_Chess'] . ' ';
}
// *** replaced by Zlodey ***
$topic_type .= $lang['Topic_Chess'] . ' [ Мой ход ] ';
можно отредактировать по своему вкусу.
Поскольку это мои первые строчки на php, то пришлось потыкаться над ними часа 2 методом проб и ошибок)).
Можно использовать как совместно с уведомлением через ЛС (мое предыдущее сообщение), так и отдельно
-
- phpBB 2.0.12
- Сообщения: 857
- Стаж: 18 лет 6 месяцев
- Поблагодарили: 1 раз
посел установки мода AbTrack BT-Tracker MOD
при нажатии на новую тему, или ответить, появляется такое
файл на месте, меняю стиль на silver, выдаёт
обе файла по путям лежат на своих местах...
в моде AbTrack BT-Tracker MOD требовалось только замена includes/template.php файла от eXtreme Styles...
как не странно, посты в быстром ответе отправляются...
что именно может вызвать такую ошибку?
при нажатии на новую тему, или ответить, появляется такое
Код: Выделить всё
Template->make_filename(): Error - template file not found: chess/templates/smartDark/chess_posting_body.tpl
Код: Выделить всё
Template->make_filename(): Error - template file not found: chess/templates/subSilver/chess_posting_body.tpl
в моде AbTrack BT-Tracker MOD требовалось только замена includes/template.php файла от eXtreme Styles...
как не странно, посты в быстром ответе отправляются...
что именно может вызвать такую ошибку?
-
- phpBB 2.0.0
- Сообщения: 227
- Стаж: 19 лет 9 месяцев
-
- phpBB 2.0.12
- Сообщения: 857
- Стаж: 18 лет 6 месяцев
- Поблагодарили: 1 раз
-
- phpBB 1.4.4
- Сообщения: 111
- Стаж: 18 лет 3 месяца
- Забанен: Бессрочно
-
- phpBB 1.4.4
- Сообщения: 111
- Стаж: 18 лет 3 месяца
- Забанен: Бессрочно
-
- phpBB 2.0.0
- Сообщения: 227
- Стаж: 19 лет 9 месяцев
-
- phpBB 1.4.4
- Сообщения: 111
- Стаж: 18 лет 3 месяца
- Забанен: Бессрочно
Я как раз хочу у себя убрать эту лишнюю ладью...Gosudar писал(а):пы.сы. себе хочешь лишнюю ладью поставить?
Я не очень понял
Код: Выделить всё
BK,,,,,BR,BR,;,,,,,B,,;,,B,,,,,B;,,B,,,,BN,;,,,,,,,;,,,,,,,W;W,W,,,,,W,WK;,,,WR,,WR,,
Добавлено спустя 3 минуты 11 секунд:
меня интересует черная ладья на F8
Добавлено спустя 1 минуту 43 секунды:
Ааа...понял...то есть запятая - это "пусто", а точка запятой - это чего?
Добавлено спустя 7 минут 20 секунд:
Судя по всему знак ";" означает перевод строки?

-
- phpBB 1.4.4
- Сообщения: 171
- Стаж: 18 лет 2 месяца
TiChoblin писал(а):кстати, почему нет кнопочки "сдаться"?
сделал то, что вы просили.rtrt писал(а):Кнопки "Предложить ничью" и "Сдаться" никто еще не прилепил???
алгоритм таков: под доской появляются две кнопочки (поскольку они в файле .tpl, то можете переместить их куда угодно). нажав на "Сдаюсь!" происходит вызов функции "пипец", которая записывает в базу данных сообщение о сдаче, и отключает возможность дальнейших ходов. плюс проверка условия, если кнопку нажал играющий белыми, то сообщение о сдаче пишется в его столбик ходов, в противном случае - в столбик черных.
в принципе всё предельно просто. не знаю, почему до сих пор никто это не сделал
а вот и сами изменения:
файл posting.php
после
Код: Выделить всё
case 'chess_delete':
case 'chess_join':
case 'chess_play':
Код: Выделить всё
//
// *** added by Zlodey ***
case 'pipez':
// *** added by Zlodey ***
//
после
Код: Выделить всё
chess_posting_action();
Код: Выделить всё
//
// *** added by Zlodey ***
if ($mode == "pipez")
{
chess_pipez();
redirect(append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id", true));
}
// *** added by Zlodey ***
//
файл chess_posting.php
перед
Код: Выделить всё
function chess_posting_entry ()
Код: Выделить всё
//
// *** added by Zlodey ***
// *** функция Пипец ***
function chess_pipez()
{
global $db, $userdata, $topic_id;
$username = $userdata['username'];
$user_id = $userdata['user_id'];
$sql = "SELECT chess_list_move , chess_p1_id FROM " . CHESS_TABLE . " WHERE topic_id = $topic_id LIMIT 1";
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, "Непонятный облом", '', __LINE__, __FILE__, $sql);
}
$temp1 = $db->sql_fetchrow($result);
$chess_list_move = $temp1['chess_list_move'];
$chess_p1_id = $temp1['chess_p1_id'];
if ( $chess_p1_id == $user_id )
{
$chess_list_move = explode( '|', $chess_list_move );
$chess_list_move[0] = $chess_list_move[0] . " <font color=red>" . $username . " сдался</font>";
$chess_list_move = implode( '|', $chess_list_move );
}
else
{
$chess_list_move = $chess_list_move . " <font color=red>" . $username . " сдался</font>";
}
$sql = "UPDATE " . CHESS_TABLE . " SET chess_closed = 1 , chess_turn = 0, chess_list_move = '$chess_list_move' WHERE topic_id = $topic_id LIMIT 1";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Непонятный облом", '', __LINE__, __FILE__, $sql);
}
}
// *** функция Пипец ***
// *** added by Zlodey ***
//
файл chess_viewtopic.php
после
Код: Выделить всё
'S_CHESS_ACTION' => append_sid("posting.$phpEx?mode=chess_play&" . POST_TOPIC_URL . "=$topic_id"),
Код: Выделить всё
//
// *** added by Zlodey ***
'S_PIPEZ_ACTION' => append_sid("posting.$phpEx?mode=pipez&" . POST_TOPIC_URL . "=$topic_id"),
// *** added by Zlodey ***
//
после
Код: Выделить всё
<input type='submit' name='chess_play' value='{L_CHESS_SUBMIT}' class='mainoption'><br /></span>
Код: Выделить всё
<!-- *** added by Zlodey *** -->
<table align=left><tr><td>
<input type=button name='pipez' onclick="window.open ('{S_PIPEZ_ACTION}')" value='Сдаюсь!'>
<input type=button name='nich' value='Ничья?'>
</table>
<!-- *** added by Zlodey *** -->
P.S. Кнопка "Ничья" пока не работает, поскольку функция ничьи еще не писалась. если будет время, постараюсь сделать до выходных
Добавлено спустя 4 минуты 43 секунды:
ах да, забыл сказать, что это для версии 0.0.1
У вас нет необходимых прав для просмотра вложений в этом сообщении.