
Snusmumriken
13.10.2017
13:44:14
Точнее, уже написал )))

Sunatullaev
13.10.2017
13:44:34
А разве есть боты для этого.?

Snusmumriken
13.10.2017
13:45:19
Боты есть для всего подряд.
Например для этого: https://habrahabr.ru/company/croc/blog/335650/
Вот такая вот реклама в тысячах мест в секунду - это вообще норма, истинное предназначение ботов Какими бы благими целями люди бы не прикрывались - реально они пишут ботов для мегарассовых рассылок.

Google

Saphire
13.10.2017
13:46:35
>spacewar
Вижу пирата!


Snusmumriken
13.10.2017
13:46:58
Пирата?
Это специальная игра для разработчиков в стиме, appid 480.
Рядом болтаются сурцы с описанием "Как пользоваться стимом для чайников"
На самом деле, можно и любую другую игру заюзать для этих целей, только твоя прога будет падать на колбеке приглашения в катку от сотни тысяч друганов, с другим форматом запроса.
Ну прикинь, заюзал ты appid от другой игры, прописал колбеки: "Если приглашают - подключаться". А к чему подключаться, если 100500 друзей ломятся срочно с тобой загамать, когда ты только тестишь либу, и она несовместима с форматами игр в которые тебя приглашают?
Карочи, меня начинает заносить, приятных снов.
#ботживи (на самом деле нет :( )
Карочи, придётся писать dll-лину для lua. Зато она будет совместима с любыми играми, в которых есть луа )))
К счастью, стим существует под не очень большое количество платформ, а такая обёртка - не задействует ничего платформенного, это прям круто-круто.
Но всё таки не очень, потому что через luajit я могу вообще не париться на тему архитектур библиотек и всего такого.


Alexey
13.10.2017
14:43:21
Я работаю над реализацией mimi API в Lua-cURL.
libcurl предоставляет API
curl_mimpart_data() - установить данные
curl_mimpart_type() - установить Content-Type
curl_mimpart_name() - установить параметр name в заголовке Content-Disposition
При этом если передать NULL в качестве параметра то значение будет сброшено.
Я реалзовал метод в Lua как
part:data(str[,type[,name]]). Т.е. можно вызывать как
part:data('string') - только данные
part:data('string', 'text/plain') - данные и тип
part:data('string', 'text/plain', 'myname') - данные, тип и имя.
А так же part:name() и part:type()
Теперь вопрос как организовать сброс параметров
--- Случай 1
part:data('string1', 'text/plain', 'myname')
part:data('string1')
part:data('string1', nil, nil)
part:data('string1',nil, 'another')
--- Случай 1
part:name( 'myname')
part:type( 'text/plain')
part:data('string1')
Я думаю использовать false для того чтобы сбросить значение


Vadim
13.10.2017
20:21:22
ну, да, false как-то более явно (да и иначе не получатся фокусы (с использованием вариаций вызова) озвученные выше)

Snusmumriken
14.10.2017
07:41:02
Используй пустое значение.
function part:type(v)
-- nil в конце чтобы не было false
-- от результата логического выражения
self._mime = type(v) == 'string' and v or nil
end
И вот такой вызов:
part:data('string1',nil, 'another')
не должен ломать mime-type, то есть:
function part:data(data, mime, name)
return self:_request(
data or self._data,
mime or self._mime,
name or self._name
)
end
Ну, если не указано - выставлять то что было указано ранее, как дефолт, или ещё что-то такое.
Объекты вам дадены чтобы вы как раз могли хранить в них состояния, и стоит это использовать.


Alexey
14.10.2017
10:08:41
Там есть еще случаи
Я думаю что для сброса значения буду использовать false.
Но это не очень Lua-way мне кажется. Сброс по nil более естественный.
param:type() -- вполне естественно сбросить type
param:type(nil) -- тоже очевидно что пользователь хочет присаоить nil
Но если есть код
param:type(mimetypes.guesstype('test.xml'))
Тут уже не очевидно. Если тип определен - то установить его.
Но если нет то можно оставть текущий (не менять) или сбросить
значение в default.
В этом случае мне нравится по nil не менять значение, а оставить
прежнее. А если надо сбросить, то можно написать
param:type(mimetypes.guesstype('test.xml') or false)
Так же если param:type(nil) сбрасывает тип, то вполне очевидно
что param:data(nil) долже сбросить данные, так же как и
param:data(nil, nil, nil). Но последний вариант получается не
сбрасывает тип и имя. Что тоже не очень очевидно, но вполне
можно сказать, что для сброса конкретного элемента нужно
использовать специальную функцию.
Еще можно добавить специальные методы для сброса.
Но их нет в оригинальном API и я не очень хочу их добавлять.
Поэтому я думаю false для сброса вполне подходящая альтернатива
-- установить данные не менять тип и сбросить имя
part:data('hello', nil, false)
Т.е. установка nil не меняет текущего значения.
Единственное part:type() так же не будет сбрасывть значение,
т.к. я не люблю разную семантику для type() и type(nil)
PS. А в реальности не думаю что эта часть API будет часто использоваться
Более вероятно что MIMI объекты будут просто создаватся заново когда это
будет нужно, а не использоваться повторно
PPS. Еще я размышляю над API для curl_mimepart_data_cb и над форматом
тадлицы для постороения MIME объекта


Snusmumriken
14.10.2017
11:25:53
> param:data(nil, nil, nil). Но последний вариант получается не
сбрасывает тип и имя. Что тоже не очень очевидно, но вполне
можно сказать, что для сброса конкретного элемента нужно
использовать специальную функцию.
Различай nil и false.
function part:data(data, mime, name)
local tdata, tmime, tname = type(data), type(mime), type(name)
self._data = data == false and nil or tdata == 'string' and data or self._data
self._mime = mime == false and nil or tmime == 'string' and mime or self._mime
self._name = name == false and nil or tname == 'string' and name or self._name
return self:_request(
self._data,
self._mime,
self._name
)
end
param:data(nil, nil, nil) - ничего не сбросит
param:data() - тоже ничего не сбросит
param:data(nil, 'xml', nil) - заменит mime на xml
param:data(false, 'xml') - заменит mime на xml, удалит data
Если человек выставил false - ты видишь явное намеренье удалить.
Если человек ничего не выставил в функции с множеством аргументов - твоя задача помочь с выставлением дефолтных значений.
Если человек ничего не выставил в заполняющей функции с одним аргументом - он, вероятно, хочет уничтожить значение.


Philipp
14.10.2017
12:24:39
Комрады
Есть кто готов потратить 10 минут своего времени на помощь в моих поисках ошибки? От вас нужен луарокс и луасокет

annelin
14.10.2017
12:32:40
давай попробую

Google

annelin
14.10.2017
12:33:52
http://i.imgur.com/MdTs8vI.png

Vadim
14.10.2017
12:34:42
GDE OLEG

Philipp
14.10.2017
12:36:01
БЕЗНОГNМ

Snusmumriken
14.10.2017
19:48:18
Ничоси. С++-либы компилятся и цепляются!
Скоро ко мне можно будет обращаться за плюсовыми либами (не очень сложными)
Оно даже экспортится в табличку!
power = require'power'

Elias
14.10.2017
19:54:59
Это компилится в .dll, да?
И потом можно использовать независимо как обычный модуль?

Snusmumriken
14.10.2017
20:01:01
Ага.
Я просто хочу запилить взаимодействие с колбеками steamapi в dll-ку.
Просто так не получится, ибо колбеки там как c++-шаблоно-классо-макросы.

Elias
14.10.2017
20:06:01
Круто
Просто я всегда Lua из C++ напрямую запускал, и даже не думал, что Lua может запускать другой C++ код, не основной программы. :D
И возможно стоит самому делать такие модули, будет чуть лучше, наверное, чем просто регистрировать всё глобально в lua_State*
luacheck ругается на глобальные переменные, и наверное не зря. :)

Snusmumriken
14.10.2017
20:13:07
Ну, эта фигня не делает глобальных, а пушит табличку типа.

Elias
14.10.2017
20:22:13
Ага, вот это и хорошо
А то я хотел избавиться от всех глобальных переменных, и только C++ функции оставались таковыми

Snusmumriken
14.10.2017
20:24:01
Тут даже этого нет, так что..

Elias
14.10.2017
20:26:54
Ага
Просто я что-то только недавно задумался о том, что вообще нехорошо создавать столько глобальных вещей (переменных не делал, только классы и функции)
Но теперь перешёл полностью на модули и всё гораздо лучше стало в базе. Явно прослеживаются зависимости, красота
Мало того, Sublime может находить определения локальных функциях внутри загружаемых модулей, ещё один плюс.

Philipp
14.10.2017
20:28:28
Ну, в Луа желательно вообще не использовать глобальные переменные
(а классы и функции – переменные)

Elias
14.10.2017
20:29:46
Да, просто это от C++ пошло, мол классы - глобальные (почти)
Да и видел в разных играх, что так делали, например в Don't Starve. Но всё же успел прочувствовать минусы этого подхода

Philipp
14.10.2017
20:30:07
>Да, просто это от C++ пошло, мол классы - глобальные (почти)
Что?

Google

Elias
14.10.2017
20:30:57
Ну, в смысле если хедер включить куда-то, то сам класс будет в глобальной области видимости (если он не в namespace)
Я об этом

Philipp
14.10.2017
20:33:30
Он будет только в области видимости файла, в котором подключен

Elias
14.10.2017
20:35:18
Но пока что не решаюсь делать
local SomeClass = require 'SomeClass' внутри функций или даже if/else
Как-то нагляднее всё require'ить в самом начале модуля
Да, только хэдер может включать другие хэдеры, и в итоге можно получить от него сразу много классов и свободных функций.
Скорее Lua тут выигрывает в плане модулей, что можно классы и функции делать локальными в модуле и не получать "бонусов" при включении этого модуля в другие.
И ещё открыл для себя плагин Sublime, который постоянно проверяет редактируемый файл в luacheck и качество моей жизни возросло в разы. (Что-то там вроде Sublime Lua Linter)

Yuriy
14.10.2017
20:42:14

Snusmumriken
14.10.2017
21:03:28
Можешь в гите глянуть примерную структуру. Абсолютно все зависимости легко заметны.
https://bitbucket.org/MainTomato/tank-o-box/src/320e9861fa93?at=develop

Elias
14.10.2017
21:54:25
Да, хорошо и читаемо написано, мне нравится
Можно свою игру попиарить? Без кода, правда. :"D

Snusmumriken
14.10.2017
22:02:24
Да коэш
Намана : )
На чём пилишь?

Elias
14.10.2017
22:07:06
Движок на C++, юзаю SFML, но вся игровая логика на Lua

Saphire
14.10.2017
22:07:20
inb4 одна из этих к.. о..о неожиданно.
Почему например не SDL?

Elias
14.10.2017
22:09:29
Не очень понимаю, как должна продолжаться фраза после "к.." o_O
SFML мне нравится тем, что лучше сливается с C++ кодом, в то время как на SDL мне пришлось бы написать врапперов
+ я начал юзать SFML 5 лет назад, и он мне показался как-то проще для использования, хотя я знаю, что SDL более продвинутый и портабельный
Может когда-нибудь переберусь :)
https://i.imgur.com/pA2xl1R.gif
Ещё вот такую вещь пилил несколько лет, но потом осознал, что пока что не потяну игру такого масштаба, так что решил графику сделать меньше разрешения (в разы быстрее рисовать) + меньше объём игры.

Saphire
14.10.2017
22:17:24
Ну, те, что мимикрируют под всякие gameboy и т.д.
Типа Pico-8 и т.д.

Elias
14.10.2017
22:18:16
Ааа
Которые Piku-434230942
К счастью, нет :D

Google

Saphire
14.10.2017
22:18:47
С одной стороны они конечно интересные... Но блин, абсолютно мало места для чего-то реального.

Elias
14.10.2017
22:19:16
Ага
И в итоге код - это просто спагетти с нечитаемыми переменными в одну букву :D

Saphire
14.10.2017
22:19:45

Elias
14.10.2017
22:22:08
C++ загружает и обрабатывает тайл мапы + спавнит объекты, но всё остальное - Lua
В C++ находятся коллизии, например, а в Lua - реакция объектов на них
Мало того, паззлы, AI, катсцены, меню, etc. пишутся на Lua, а данные хранятся в JSON
В C++ по большей части low level вещи, либо те, которые лень в Lua перепиывать (особенно рендеринг)

Saphire
14.10.2017
22:22:52
Рендеринг даже в C/C++ - страшная вещь.
Кстати о двихках... надо бы пойти дальше попробовать "портировать" одну фигулинку с flash на canvas...
К сожалению у меня не хватает идей на нормальные вещи :с

Elias
14.10.2017
22:26:54
Ага
И вообще чем дальше, тем больше меня раздражает C++ и растёт моя любовь к Lua
Если бы мог, портировал бы всё на Love2D, чтобы больше не заморачиваться. Но я уже столько в своём движке полезных штук наделал, что не хочу это на Lua переписывать снова. :D
Даже не знаю, я вот всегда хотел сделать Зельду, что видно по играм, потом просто менял немного сеттинг, добавлял механику, и всё.
Так многие делают. X, but with Y

Saphire
14.10.2017
22:31:02
Гм... везёт.
А мне всё хочется симулятор космического строителя с симуляцией атмосферы...

Philipp
15.10.2017
18:36:21
Комрады. Знакомый обратился с просьбой посоветовать ему что-нибудь по веб-программированию для начинающих. То есть, человек вообще без какой-либо базы. Я самостоятельно советовать что-то боюсь, ибо вообще никогда не связывался с миром сайтов, но может из вас кто-нибудь что-нибудь подскажет? Буду премного благодарен

Tverd
15.10.2017
18:41:59
Если только сайты - пхп
Что нить для начинающих

LaCamarade
15.10.2017
18:56:33
* htmlbook.ru
К сожалению у меня не хватает идей на нормальные вещи :с
Я гейм-дизайном занимаюсь, если что, и, если хочешь -можешь присоединится в команду ко мне и моему другу (он тоже программист). Как бы идей у меня хватает, но как тех.специалист я слабый. Работаю над очень потенциально годной задумкой в данный момент...Вдруг интересно тебе будет...

Philipp
15.10.2017
19:07:34
* htmlbook.ru
Я чувствую, что сложновато для него будет. Всё-таки там база нужна

Mikhail
15.10.2017
19:15:39
годные задумки ))))

LaCamarade
15.10.2017
19:17:59

Google

Philipp
15.10.2017
19:18:32
Я бы без проблем помог ему с чем-то софтверным, но с вебом – беда

LaCamarade
15.10.2017
19:18:51

Mikhail
15.10.2017
19:19:21
я не смеюсь. просто у меня годных задумок десяток.
надо ВОПЛОЩАТЬ!

LaCamarade
15.10.2017
19:19:28

Philipp
15.10.2017
19:19:53

LaCamarade
15.10.2017
19:21:12

Mikhail
15.10.2017
19:22:26
ну так потихоньку перестаёте быть новичками )))
многие получают бОльшее удовольствие от прототипа, чем от доведения до конца.

Philipp
15.10.2017
19:23:10

LaCamarade
15.10.2017
19:23:28
На каком языке задумка? :)
Мы предполагаем Крайэнжн побаловаться - там встроенный визуальный скриптинг есть, но есть возможность подключить тот же луа. Если интересно попробовать побаловаться и попытаться сделать вместе с нами прототип игры, то приглашаю.

Mikhail
15.10.2017
19:23:30
хех. не связываться с техлидами )

Philipp
15.10.2017
19:23:56

LaCamarade
15.10.2017
19:25:04
Так и думал, что это отпугнет, хех, но душа просит :)

Philipp
15.10.2017
19:26:11
Да ну, маленькие-свои-ламповые проекты лучше

LaCamarade
15.10.2017
19:27:59
Я тоже о таких думал (исходя даже из логических соображений), но меня уводит постоянно в сторону чего-то большего...