Перейти к контенту

Язык Lua. Общие вопросы программирования


Malandrinus

Рекомендуемые сообщения

Artos, Gun12,

строка для возможности запускать скрипты из Сталкера (*.script) должна быть:

command.go.*.lua;*.macro;*.script=dofile $(FilePath)

По идее же сталкеровские скрипты не будут работать - содержимое lua_help.script не экспортировано. Или это можно как-то обойти?

Поделиться этим сообщением


Ссылка на сообщение
Есть таблица вида:

Тоесть не с числовыми индексами, как можно определить, что таблица не пустая, кроме как делать перебор вида for k,v in pairs()

Для таблиц с числовыми индексами есть table.getn, а как с этими быть? Вроде бы getn возвращает 0. (я правда #tbl так проверял, но это эквивалентно вроде)

А ты вообще по текстовым индексам-то к таблице обращаешься? а то может они тебе и не нужны.

 

Ну и ещё вопросец, возникла необходимость перебирать с большой скоростью (несколько раз в секунду) довольно большую таблицу (около 200 элементов). Таблица с нечисловыми индексами. Перебор делаю через pairs(), если я переделаю таблицу на числовые индексы и буду делать перебор по for i=1, #tbl do, она будет заметно быстрее перебираться? Или перебор таблицы сам по себе не особо много процессорного времени использует?

Пока сам не проверишь никто не скажет :) Пустые циклы for i=1, #tbl do быстрее pairs() аж на 30%. Выше же в теме приводили сравнение вроде и в разработке солянки тоже подобные вещи проскакивали. А если в цикле запрашивать те же серверные объекты, или вычисления какие делать, то может на процент, два будет быстрее.

Поделиться этим сообщением


Ссылка на сообщение

да там и skeleton_flags в net_ph_skeleton хорошо бы разбирать по аналогии с num_items

Поделиться этим сообщением


Ссылка на сообщение

xStream,

ну мне лично интересно посмотреть на изменение порядка чтения с grenade_mode у тебя :)

а со skeleton_flags в зависимости от значения флажка надо читать данные или нет. В all.spawn флажок всегда 0, а в живой игре не всегда.

 

Актуальная версия: или асдс универсальный или нет-пакеты Artos`а. Вроде только так.

Поделиться этим сообщением


Ссылка на сообщение

xStream,

ну хз, по идее он с универсального асдс последний раз делал.

 

кстати исправь копипасту net_base:_write :)

Поделиться этим сообщением


Ссылка на сообщение

xStream,

я так понимаю там будет не новый тип объектов, а несколько обычных? :)

Поделиться этим сообщением


Ссылка на сообщение

xStream,

(используется новый тип

объектов, описанный в конфигах, имеющие произвольную длину пакета)

Все-таки именно один объект? Или несколько, добавляемых по необходимости?

Поделиться этим сообщением


Ссылка на сообщение

xStream,

поменяй терминологию :) binder - это где-то рядом с object_binder и ко, а-ля bind_stalker.script

Ты же используешь скриптовый серверный класс

 

Ну и если интересно то то, что ты назвала unused_pad - это данные которые сохраняются/загружаются в object_binder:save/load

 

Ну и

Дело в том, что шейпы-параллелепипеды не имеют параметра поворота
неверно. Конечно же поворот там задается.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
Добавлено через 8 мин.:

abramcumner, ИМХО как раз наименование 'binder' вполне к месту.

Большинство привыкло биндерами называть биндеры клиентских объектов, хотя серверные объекты имеют аналогичные биндеры (которые, кстати, первичны) с аналогичными методами. Просто, при необходимости, нужно по контексту добавлять уточняющее: клиентский/серверный биндер иль биндер серверного объекта ...

Вообще-то там задается пара серверный/клиентский класс. Они оба биндеры? Тогда в bind_stalker.script задается биндер-биндер???

Там же даже по наследованию видно, что задается наследник серверного класса - зачем наследника называть биндером? Можно просто правильно употреблять термины.

 

И с 'unused_pad' ты что-то не то сказал. Никак 'unused_pad', который в "net_abstract", не может иметь отношение к object_binder:save/load ...

Ооо, знаток говорит, что не может, значит не может :) Ты бы хотя бы в игре проверил. А почему не может? Почему в серверном биндере не может быть данных клиентского биндера? :)

 

Добавлено через 3 мин.:

abramcumner, что такое bind в переводе с английского?

Переведи, пожалуйста.

 

Ты же когда пример приводила, видела же?

class "se_outfit" (cse_alife_item_custom_outfit)

Теперь наследование называется биндинг?

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

xStream,

:) Inheritance, inheritance, inheritance

Я тоже могу нагуглить пару английских слов. Скажи уж прямо, что ты имеешь ввиду.

 

Добавлено через 20 мин.:

Погуглил luabind - вот что нашел:

Inheritance can be used between lua-classes:

class 'derived' (lua_testclass)

Ты это имела ввиду?

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

xStream,

class "se_outfit" (cse_alife_item_custom_outfit)

Конкретно это является наследованием (пусть и от забинденного класса), а не биндингом. И семантически и по-всякому.

И se_outfit не является биндером.

Конкретно мне не нравится упоминание биндера здесь:

1) этот тип объектов должен иметь биндер (то есть то, что будет вызвано, когда объект появится в игре)

Завязка из class_registrator.script:

cs_register (object_factory, "CStalkerOutfit", "se_item.se_outfit", "E_STLK", "equ_stalker_s")

 

2) обязательно сделать метод биндера STATE_Write

Если что, здесь говорится именно про se_outfit

 

Ну и в сталкер-lua сложилась своя терминология биндеры это одно, клиентские и серверные классы другое. Зачем ее менять не понятно.

Никто не называет тот же game_object ни биндером, не забинденным классом и ни чем-либо со словом бинд

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

xStream,

я тоже не понимаю, почему ты предпочитаешь называть черное белым

И способ есть получше зажмуривания ;)

Ответь, пожалуйста, на вопрос:

Есть нечто, объявленное как class "XXX" (YYY). Чем является XXX? Биндером, наследником, чем-то другим?

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Andrey07071977,

а точно не биндером?

Пока код xStream хоть как-то прокомментировали 2 человека, тебя среди них не было. Ты его сначала прочитай.

 

Ну и конкретно сейчас рассматривается только один скрипт перепаковки пакетов.

Может назовем его "перерисовкой авосек" - какая разница как назвать

:)

 

По сравнению с предыдущей версией добавился только "биндер". Что еще обсуждать?

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение

cj ayho,

по-моему ты загнался :) Код корректно работает и с положительными и с отрицательными числами

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

cj ayho,

вместе с math.floor ни сколько не смущает. Возможно тебе нужно не математическое округление, а какое-то свое - тут хз.

Но для обычного математического именно так и надо.

Хинт: -1 > -2

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение

Потелепаю чуток...

Он думает, что раз для положительных "+ 0.5", то для отрицательных "- 0.5" :rofl2:

Поделиться этим сообщением


Ссылка на сообщение

Gun12,

уже было вроде в этой теме, что если хочешь гарантированно n цифр после запятой при выводе, то только string.format и прочие.

Если использовать функции типа вышеприведенной и выводить как число, будет работать не всегда.

Так что дело совсем не в скорости.

Поделиться этим сообщением


Ссылка на сообщение

cj ayho,

Так ты уж прочитай наконец-то описание math.floor :) Ну или ответ malandrinus'а.

Поделиться этим сообщением


Ссылка на сообщение

Gun12,

ну, например, функция bind есть в куче модулей. И это хорошо, что она одинаково называется.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Объясните мне, дураку, почему так получилось?

Ведь закономерность в моих исследованиях очевидна?!

А так похоже на криво реализованный бинарный поиск. А может так и хотели, следуя методике: неправильные данные на входе, неправильные данные на выходе. Нечего путать операции между собой.

 

Вообще-то уже давно пора посмотреть исходники lua и закрыть этот вопрос с таблицами.

Так и есть :)

/*
** Try to find a boundary in table `t'. A `boundary' is an integer index
** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil).
*/
int luaH_getn (Table *t) {
unsigned int j = t->sizearray;
if (j > 0 && ttisnil(&t->array[j - 1])) {
/* there is a boundary in the array part: (binary) search for it */
unsigned int i = 0;
while (j - i > 1) {
 unsigned int m = (i+j)/2;
 if (ttisnil(&t->array[m - 1])) j = m;
 else i = m;
}
return i;
}
/* else must find a boundary in hash part */
else if (isdummy(t->node)) /* hash part is empty? */
return j; /* that is easy... */
else return unbound_search(t, j);
}

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...