Архив сообщества
2011 — 2019
Аватар Kitmouse

Атмос под диктатом powder toy

Автор: Kitmouse · 10.12.2012, 12:16 · 40 сообщений

Сообщений в теме: 40

Krieg#28
Но с другой стороны отсчёт world.time может задерживаться вместе со всем бьёндом, надо будет попробовать какое-нибудь сторонее ПО с таймером подключить.
0
Elkrakko
Скопировать ссылку
ZLOFENIX#29
VilgO (10 December 2012 - 07:31) писал: писал:
Небось можно же запилить отдельный сервер для атмоса на плюсах на той же машине, а из сервера клиента каждый тик делать запросы.
Бвахаха, нет.
0

Скопировать ссылку
VilgO#30
ZLOFENIX (10 December 2012 - 10:59) писал: писал:
Бвахаха, нет.
В каком месте проблема? Можно ли вообще соединить сервер ссочки с чем-нибудь внешним?
0
Скопировать ссылку
Kitmouse#32
Сделать, типа внешняя программа - это клиент с особыми правами, заменяющими функции атмоса.
0
Есть идеи.
Скопировать ссылку
Kitmouse#34
Сделать клиент Не бьёнд! он будет получать и отправлять инфу как бьенд-клиент, таковым не являясь.
0
Есть идеи.
Скопировать ссылку
ZLOFENIX#35
Изображение
Но зачем при своем то клиенте(кстати обработка чего-либо у клиента - есть идиотизм, можно сразу стать победителем специальной олимпиады) таскать за собой труп бьйондосервера ?
Например, я - мудак и пишу свой клиент со своим сервером на крестах, мне норм.
0

Скопировать ссылку
Editor TEH Chaos-neutral#36
Внезапно, BYOND поддерживает соединения со внешними серверами. То, что говорится чуть выше вполне реализуется командами shell() и file(). Скажем, пишется какой-нибудь файл в определенном формате (трехмерная таблица атмоса, ага), затем через shell запускается программа-обработчик, которая обрабатывает файл, и он вводится обратно на сервер в обработанном виде, где применяется. Суть только вот в том, что лагать при нынешнем тикрейте (20 обновлений в секунду) будет просто пиздец как. Возьму пример с тайловым атмосом. Смотри, у нас 6 карт с атмосом, каждая 512*512. Чтобы записать файл, бъонду надо будет обратиться к каждому из них, и записать в таблицу их переменные давления, температуры, и компоновки (проценты). Получаем: 768 432 записей переменных НА ОДНУ КАРТУ. Всего-лишь на одну. Каждый раз надо будет обработать - 4 610 592 байта. Ладно, можно исключить космос, и взять просто станции и прочие объекты, тогда количество сокращается до ~1 500 000 байта (дереликт, станция, диджей станция и прочие).
Теперь, результат действия аналогичной программы без отвлекающих элементов.
Давай составим небольшую аналогичную программу.
Цитата
uses
  System.IO;

type
  Turf = record
    pressure, temperature, oxyproc: real;
    function GetOxygMass: real;
    begin
      result := pressure * oxyproc / 100;
    end;
    constructor Create;
    begin
      pressure := random(101, 105);
      temperature := random(20, 25);
      oxyproc := random(20, 25);
    end;
  end;

var
  Stream: StreamWriter;
  Map: array [1..512, 1..512] of Turf;

begin
  for var i := 1 to 512 do
  begin
    for var j := 1 to 512 do
      Map[i, j] := new Turf;
  end;
  Stream := &File.CreateText('C:\atmos.txt');
  Stream.Flush;
  for var i := 1 to 512 do
    begin
      for var j := 1 to 512 do
      begin
        Stream.WriteLine('x={0}', j);
        Stream.WriteLine('y={0}', i);
        Stream.WriteLine('p={0}', Map[j, i].pressure);
        Stream.WriteLine('t={0}', Map[j, i].temperature);
        Stream.WriteLine('o={0}', Map[j, i].GetOxygMass);
        Stream.WriteLine('#');
      end;
    end;
  writeln(concat('Время записи в файл: ', (Milliseconds / 1000).ToString), ' секунд');
end.
В качестве результата у меня:
Цитата
Время записи в файл: 0,953 секунд
А ты представь, что таких записей должно быть 20 штук в секунду? Вот и я о том же.
1
Скопировать ссылку
Krieg#37
Ну да, врятли через бьёнд можно передать кусок оперативной памяти другому приложению. Можно было бы писать эти матрицы в бд, но это, наверное, ещё дольше, с другой стороны какая-нибудь система апдейта для бд, которая бы не трогала значения, которые из тика в тик не изменяются, проблему бы решила.
0
Elkrakko
Скопировать ссылку
VilgO#38
Цитата
Смотри, у нас 6 карт с атмосом, каждая 512*512. Чтобы записать файл, бъонду надо будет обратиться к каждому из них, и записать в таблицу их переменные давления, температуры, и компоновки (проценты). Получаем: 768 432 записей переменных НА ОДНУ КАРТУ. Всего-лишь на одну. Каждый раз надо будет обработать - 4 610 592 байта. Ладно, можно исключить космос, и взять просто станции и прочие объекты, тогда количество сокращается до ~1 500 000 байта (дереликт, станция, диджей станция и прочие).
Вэйт, не обязательно всю станцию каждый раз заново в файл загонять. Достаточно передавать изменения - взрывы, открывшиеся/закрывшиеся двери, и прочее. Остальное-то уже есть. Бьондосервер должен вычислять, какие тайлы изменились и какие могут измениться в следующий тик. Первые - в файл, вторые - обновлять из файла.
0
Скопировать ссылку
ZLOFENIX#39
Editor TEH Chaos-neutral
Ты не учитываешь что ты пишешь ТЕКСТ, т.е. размер увеличивается еще заметней, вместо, например, 8 байт на 1 переменную(или 4, не помню сколько real жрет), у тебя выходит 2байта(x=)+байт*каждый_символ_числа(0.983745893749 хз длинну, но дофига)+1байт на перенос строки=дохуище.
Ну ты понел, т.е. в твоей реальности все еще хуже.
0

Скопировать ссылку
Kitmouse#40
Чем все время обмениваться файлами.. есть же редакторы памяти, которые вмешиваются даже в процесс, не расчитанный на такое (cheat engine, artmoney, трейнеры). Почему не сделать атмос-прогу с такими же возможностями?
0
Есть идеи.
Скопировать ссылку

Обратно в Идеи