Странносте тред

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
Хорошо вам, вы в программизм ушли. Я подгрузку страниц ниасилил и воткнул iframe. И всё равно вышло как-то плохо, потому что ну ёпт, это ж чат. Раньше чаты делали на полэкрана, сейчас чат больше в окошках в углу сторонним сервисом делают.
2136
 

Bayer

Знаток
⚖️
🏆
📜
💎
Хорошо вам, вы в программизм ушли. Я подгрузку страниц ниасилил и воткнул iframe. И всё равно вышло как-то плохо, потому что ну ёпт, это ж чат. Раньше чаты делали на полэкрана, сейчас чат больше в окошках в углу сторонним сервисом делают.
Посмотреть вложение 2136
С чатом гемор конечно, не хочется убить несколько часов на написание нечто похожее, но можно подключить какой нибудь chatbro и не париться.

Насчёт расположения элементов как на скрине к примеру мне более удобно это всё сделать на блоках, нежели фреймах, до сих пор особо не шарю как их разделять так как мне нужно. Намного проще накидать стили для div и расположить где хочу

Но наверное буду всё же чат писать свой, потому чо этот засранец который есть не хочет без фреймов загружаться, даже сам js код построен на подгрузке top.frames бла бла бла, можно конечно обмануть это вставить фрейм в блок, но зачем? =)) да и в добавок не понимаю какого хера 2 функции по сути чата это вывод сообщений в общий и в приватный используют столько повторных проверок и не нужных функций. (800 мать его строк в файле).
 
Последнее редактирование:

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
Не быть мне девелопером. Пока вы там кодите, у меня тут блинчики созревают.
1561064321402.png
 

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
В заявках почему-то укладываются полежать любые действия с базой. Внезапно обнаружилось:
SQL:
LOCK TABLES `bots` WRITE, `battle` WRITE, `logs` WRITE, `users` WRITE, `inventory` WRITE, `zayavka` WRITE, `effects` WRITE, `online` WRITE', * WRITE
Между Lock и Unlock естественно запросы в базу из подключаемых извне функций…
 

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
SQL:
SELECT * FROM `zayavka` WHERE " . (($level != null) ? " ((`t1min` <= '{$level}' OR `t1min` = '99') AND (`t1max` >= '{$level}' OR `t1max` = '99') " . (($razdel == 4) ? "AND (`t2min` <= '{$level}' OR `t2min` = '99') AND (`t2max` >= '{$level}' OR `t2max` = '99')" : "") . ") AND " : "") . " `level` = {$razdel} " . (($id != null) ? " AND `id` = {$id} " : "") . " ORDER BY `podan` DESC
Штабля? Какой гений мысли делал этот запрос?

Ну то есть как… Если разобрать, выходит 6 вариантов запроса в базу:
PHP:
/*
 * $level - заявки какого уровня мне показывать
 * $razdel - тип поединка
 *   1 - нубы
 *   2 - физы
 *   4 - группы
 *   5 - хаос
 *
 * if ($level AND $razdel==4 AND $id):
 * SELECT * FROM `zayavka` WHERE
 *   (`t1min` <= {$level} OR `t1min` = 99) AND
 *   (`t1max` >= {$level} OR `t1max` = 99) AND
 *   (`t2min` <= {$level} OR `t2min` = 99) AND
 *   (`t2max` >= {$level} OR `t2max` = 99) AND
 *   `level` = {$razdel} AND
 *   `id` = {$id}
 *
 * if ($level AND $razdel!=4 AND $id):
 * SELECT * FROM `zayavka` WHERE
 *   (`t1min` <= {$level} OR `t1min` = 99) AND
 *   (`t1max` >= {$level} OR `t1max` = 99) AND
 *   `level` = {$razdel} AND
 *   `id` = {$id}
 *
 * if ($level AND $razdel!=4 AND !$id):
 * SELECT * FROM `zayavka` WHERE
 *   (`t1min` <= {$level} OR `t1min` = 99) AND
 *   (`t1max` >= {$level} OR `t1max` = 99) AND
 *   `level` = {$razdel}
 * 
 * if ($level AND $razdel==4 AND !$id):
 * SELECT * FROM `zayavka` WHERE
 *   (`t1min` <= {$level} OR `t1min` = 99) AND
 *   (`t1max` >= {$level} OR `t1max` = 99) AND
 *   (`t2min` <= {$level} OR `t2min` = 99) AND
 *   (`t2max` >= {$level} OR `t2max` = 99) AND
 *   `level` = {$razdel}
 * 
 * if (!$level AND $id):
 * SELECT * FROM `zayavka` WHERE
 *   `level` = {$razdel}
 *   `id` = {$id}
 * 
 * if (!$level AND !$id):
 * SELECT * FROM `zayavka` WHERE
 *   `level` = {$razdel}
 *
 *  Пидорасы!
 */
Тот случай, когда кто-то очень экономил место в блокноте…
 
Последнее редактирование:

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
2141
Зашёл немного попилить от жары и безнадёги. Обновил. Посмотрел. Послал нахер. :(
p.s. блять, движки что, хранят заявки на поединок в текстовых файлах?!
p.s.s. нахера я вообще связался с БК1? не мог что-то новее взять?
p.s.s.s. ёбнул заявки новичков, ёбнулась вся боёвка и все заявки, потому что как минимум треть вызовов функций инклюдилась из заявок новичков
 
Последнее редактирование:

Bayer

Знаток
⚖️
🏆
📜
💎
Посмотреть вложение 2141
Зашёл немного попилить от жары и безнадёги. Обновил. Посмотрел. Послал нахер. :(
p.s. блять, движки что, хранят заявки на поединок в текстовых файлах?!
p.s.s. нахера я вообще связался с БК1? не мог что-то новее взять?
p.s.s.s. ёбнул заявки новичков, ёбнулась вся боёвка и все заявки, потому что как минимум треть вызовов функций инклюдилась из заявок новичков
Хех, в карягоподобных двигах такая же ерундовина.
Не пойму зачем только.

Также и с иконками квестовых ботов. Вообще странно зачем создавать таблицу в базе с ботами и одновременно использовать "файл-база"

Как не надо делать:

Код:
function qwest_showiconNPC() {
  global $user, $npc;

  $file = 'adata/qwest_NPC/npc.txt';

    if (is_file($file)) {
      $n_npc = unserialize(file_get_contents($file));       # Загружаем
    } else {
      $n_npc = $npc;
      file_put_contents($file, serialize($n_npc), LOCK_EX); # Сохраняем
    }
Что-то выходящее за грань понимания =)) Объясню: в двиге используется таблица с ботами, вдобавок есть array с ботами. и ко всему этому ещё и текстовый файл и каким-то чудо образом это все работает одновременно. В итоге производится целых 5 действий что бы вывести просто иконку =))

p.s. Надеюсь каждый кто прочёл понимает, что достаточно всего 1 строки с проверкой комнаты и бот_комнаты из базы =)
 

Bayer

Знаток
⚖️
🏆
📜
💎
ааааааааааааааАААААааааа

Объясните мне кто нибудь зачем вот это вот всё?
Код:
sql_query("LOCK TABLES
     `enterlog` WRITE,
     `keeper_info` WRITE,
     `chat` WRITE,
     `telegraph` WRITE,
     `private_matter` WRITE,
     `user_chronicle` WRITE,
     `clan_chronicle` WRITE,
     `bots` WRITE,
     `shop` WRITE,
     `berezka` WRITE,
     `inventory` WRITE,
     `battle` WRITE,
     `clans` WRITE,
     `users` WRITE,
     `quest_taken` WRITE,
     `magic` WRITE,
     `effects` WRITE,
      `actions` WRITE,
     `actions_priem` WRITE,
     `clans_wu_battlelogs` WRITE,
     `clans_wars_unions` WRITE,
     `dungeon_in` WRITE,
     `users_attakt` WRITE,
     ;");
А по окончанию боя :
sql_query("UNLOCK TABLES;");

Вот зачем так делать? Почему нельзя как нибудь header('location: fbattle.php'); die(); так прикрутить к страницам которые нельзя открыть пока в бою.... Разве просто ограничений в запросах и блока страницы мало?
 
Последнее редактирование:

Bayer

Знаток
⚖️
🏆
📜
💎
Теперь к чату:
Я тут накопал такую прекрасную функцию под названием "send_chat_mess", в ней уже всё что нужно есть.
И я вот не могу понять почему 1 строки типа : send_chat_mess($user_he['id'], $_GET['text'], 3, $user_he['room'], $he_parm); не достаточно было автору для отправки сообщений? Циферка "3" это параметр типа сообщения. Можно ещё строчки 4 накинуть что бы задать вид текста в чате, таймер там и прочее. Ну окей ещё строчки 4 для определения личного сообщения, определить можно как раз по типу сообщения(та циферка что я выделил), вроде достаточно, а тут 800 строк, из них половина это повторяющиеся выражения только каждый раз иначе как-то. Зачем? =))
 

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
Знакомо. В некоторых местах можно столкнуться с тем, что у тебя простыни кода, потому что в то время иначе писать было проблематично из-за ограничений языка. Вот, например, яваскрипт отображения поля для ввода логина. Куча (у всех практически) практически идентичного барахла:
JavaScript:
    function runmagic0(title, magic, name) {
        document.all("hint3").innerHTML = '<table width=100% cellspacing=1 cellpadding=0 bgcolor=CCC3AA><tr><td align=center><B>' + title + '</td><td width=20 align=right valign=top style="cursor: hand" onclick="closehint3();"><BIG><B>x</b></BIG></td></tr><tr><td colspan=2>' +
            '<form action="admin.php" method=POST><table width=100% cellspacing=0 cellpadding=2 bgcolor=FFF6DD><tr><td colspan=2><INPUT TYPE=hidden name=sd4 value="<?php echo @$user['id']; ?>"><INPUT TYPE=hidden NAME="use" value="' + magic + '">' +
            'Укажите логин персонажа:<small><BR>(можно щелкнуть по логину в чате)</TD></TR><TR><TD align=left><INPUT NAME="' + name + '">' +
            '</TD><TD width=30><INPUT TYPE="submit" value=" »» "></TD></TR></TABLE></FORM></td></tr></table>';
        document.all("hint3").style.visibility = "visible";
        document.all("hint3").style.left = 100;
        document.all("hint3").style.top = 100;
        document.all(name).focus();
        Hint3Name = name;
        Hint3Closed = false;
    }
Приходишь, берёшь это и заменяешь на что-то вроде
JavaScript:
function use(option) {
        document.getElementById(option).innerHTML = "<form method='post'><input placeholder='Имя персонажа' name='login'><button name='action' value='" + option + "' type='submit'>Ок</button><button>×</button></form>";
    }
И получаешь универсальный блок для ввода, если у тебя одно поле для ввода.
 

Bayer

Знаток
⚖️
🏆
📜
💎
И получаешь универсальный блок для ввода, если у тебя одно поле для ввода.
Можно ещё универсальней:
;)
Код:
function okoshko(url, title) {
    var common = getDialog();
    if(!common) return false;
    var html = '';
    html += '' +
   '<iframe frameborder="0" height="100%" src="' + url + '" width="100"></iframe>';
    Hint3Name = name;
    common.html(html);
    common.dialog('option', 'title', title);
    dialogOpen(common);
}
 

Bayer

Знаток
⚖️
🏆
📜
💎
Снова к чату. Как-то вот так пока получается:
Screenshot_14.png
Вроде работает, а строчек всего 10 =))
 

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
По отдельной странице на каждый запрос — это не слишком ли толсто?
 

Bayer

Знаток
⚖️
🏆
📜
💎
Код:
$chat_mass = sql_query("SELECT * FROM `chat` WHERE `id` >= '".@$user['chattime']."' AND (`send_incity` = '".$user['incity']."' OR `send_telepathy` = '".$user['login']."')");
$count_chatmess = mysql_num_rows($chat_mass);
if ($count_chatmess > 0) {
while($chat_math = mysql_fetch_array($chat_mass)){
$send_messid = $chat_math['id'];
$send_id = $chat_math['send_id'];
$send_login = $chat_math['send_login'];
$send_mess = $chat_math['send_mess'];
$send_type = $chat_math['send_type'];
$send_time = $chat_math['send_time'];

$mess = achat(1, 'Тут само сообщение полное отображение');
send_chat_mess($send_id, $mess, 3, номер комнаты, $he_parm);
}
}
Тут конечно не всё, но это основное для вывода сообщения. Только начал разбираться в этом мусоре
И это я ничего нового не написал, использовал лишь то что было уже в движке, только изменив порядок
 

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
Экранировать ошибки — зло. =)

В остальном, мы где-то рядом. :)
PHP:
$msg = filter_input(INPUT_POST,'msg');
if ($msg) db::c()->query('INSERT INTO `chat` (`uid`, `msg`) VALUES (?i, "?s")', $_SESSION['uid'], $msg);

function show_messages()
{
    $chat = db::c()->query('
SELECT
`msg`,
`msgdate`,
(SELECT `login` FROM `users` WHERE `users`.`id` = `uid`) AS `from`,
`type`
FROM `chat` ORDER BY `id` ASC LIMIT 50');

    while ($message = $chat->fetch_assoc()) {
        $d = new DateTime($message['msgdate']);
        $m = htmlspecialchars($message['msg']);
        if ($message['type'] == 'sys') { /* Системка */
            echo sprintf('<span style="color:maroon;background:#faa;">%s %s</span>', $d->format('H:i'),$m)." <br>";
        } elseif ($message['type'] == 'sms') { /* Телеграмма */
            echo sprintf('<span style="color:darkgreen;background:#afa;">[Телеграмма]: %s %s</span>', $d->format('H:i'),$m)." <br>";
        } else echo sprintf('%s [%s]: %s', $d->format('H:i'),$message['from'],$m)." <br>";
    }
}
show_messages();
Меня останавливает только то, что я не умею в аякс, а перезагружать страницу по каждому сообщению — зло.
 

oxy

Постигающий
🏆
📜
💎
ааааааааааааааАААААааааа

Объясните мне кто нибудь зачем вот это вот всё?
Код:
sql_query("LOCK TABLES
     `enterlog` WRITE,
     `keeper_info` WRITE,
     `chat` WRITE,
     `telegraph` WRITE,
     `private_matter` WRITE,
     `user_chronicle` WRITE,
     `clan_chronicle` WRITE,
     `bots` WRITE,
     `shop` WRITE,
     `berezka` WRITE,
     `inventory` WRITE,
     `battle` WRITE,
     `clans` WRITE,
     `users` WRITE,
     `quest_taken` WRITE,
     `magic` WRITE,
     `effects` WRITE,
      `actions` WRITE,
     `actions_priem` WRITE,
     `clans_wu_battlelogs` WRITE,
     `clans_wars_unions` WRITE,
     `dungeon_in` WRITE,
     `users_attakt` WRITE,
     ;");
А по окончанию боя :
sql_query("UNLOCK TABLES;");

Вот зачем так делать? Почему нельзя как нибудь header('location: fbattle.php'); die(); так прикрутить к страницам которые нельзя открыть пока в бою.... Разве просто ограничений в запросах и блока страницы мало?
это сделано на тот случай когда два идиота с одной и с другой стороны зажимают ентер в бою, и получается что в те доли секунды когда только начинает работать код уже прилетают изменения и они не учитываются. Например 0,0001 секунда у противника 100% хп, 0,0005 ты нажимаешь удар и начинает работать fbattle, в 0,0004 он отвечает другому противнику, дорабатывает скрипт размена и в 0,0006 обновляет данные что у тебя уже не 100% хп а 85. Но так как код уже получил старые значения он думает что у тебя по прежнему 100% хп и минусует дамаг от этого. Единственное конечно делать полную блокировку на всю базу идея так себе, я бы делал блокировку на уровне боя, а именно игроков в бою
 

Bayer

Знаток
⚖️
🏆
📜
💎
это сделано на тот случай когда два идиота с одной и с другой стороны зажимают ентер в бою, и получается что в те доли секунды когда только начинает работать код уже прилетают изменения и они не учитываются. Например 0,0001 секунда у противника 100% хп, 0,0005 ты нажимаешь удар и начинает работать fbattle, в 0,0004 он отвечает другому противнику, дорабатывает скрипт размена и в 0,0006 обновляет данные что у тебя уже не 100% хп а 85. Но так как код уже получил старые значения он думает что у тебя по прежнему 100% хп и минусует дамаг от этого. Единственное конечно делать полную блокировку на всю базу идея так себе, я бы делал блокировку на уровне боя, а именно игроков в бою
Хех, вроде понял, но не понял почему это так работает =)
Входе чтения сообразил одну мысль, что можно сделать некую подготовку перед началом боя - небольшую прогрузку функций и страницы по микротайму, соответственно пока не появились возможности ударов то ничего и не нажмется.
Но сдаётся мне что на моменте написания боевой системы на аяксе и node.js(да, он более гибок) я забью огромный болт... =)
 

Bayer

Знаток
⚖️
🏆
📜
💎
Потихоньку переношу "админские кнопки" на команды через чат.
Screenshot_23.png

Нужно наверное через "/" и видимость сообщения в чате убрать
 

Bayer

Знаток
⚖️
🏆
📜
💎
Добавил возможность тайма молчи.
Теперь разобраться бы почему сообщения через слеш чат не принимает...
 

Вложения

Insallah

Бекапы… Какие бекапы?
🏆
📜
💎
Я тонко намекаю, что посыл темы — именно странные, дикие, всратые решения на которые мы натыкаемся, а не дневник разработчика. ;)
 

Bayer

Знаток
⚖️
🏆
📜
💎
Я тонко намекаю, что посыл темы — именно странные, дикие, всратые решения на которые мы натыкаемся, а не дневник разработчика. ;)
:oops: Заигрался =(
Но их скоро будет много, до боевки добрался, тут что то жёсткое прям)
 
Сверху