История изменений
Исправление LightDiver, (текущая версия) :
Я делаю пользовательский мод из двух частей:
-
Клиентская часть у пользователей на компе. В ней как раз тысяч 30 строк без единого комметария. Ее приходится запутывать и обфусцировать, чтобы не читерили.
-
Серверная часть у меня на компе, принимает команды от клиентской и отправляет сигналы обратно.
Это десяток эвентов различных, квесты со своей механикой - как на видео, например изучение испанского. Реализации валют для рейдов, системы репутаций, работа с фреймами игры, внутреигровая википедия.. И все, что вообще приходит в голову. Самое тяжкое было - как раз отрисовка интерфейса - приходилось все вот эти кнопки отдельным кодом оформлять. А вчера мне как бумкнуло что то в голове - я уже где то месяц пытался понять что такое ООП и нахрена его вообще кто то использует и тут до меня дошло.
Я до этого уже изобрел почти свою реализацию ООП для удобства, но чего то все время не хватало: я делал функцию, которая принимала в себя параметры и имя таблицы. В функции были шаблоны для работы:
function cepochkiQuestov(tabella,shablon,kont,lok,x,y,myNome)
if t_cQ[tabella][testQ[myNome]['puteshestvie']]['sh'] == "поди туда" then
--тут отработка шаблона "поди туда"
end
if t_cQ[tabella][testQ[myNome]['puteshestvie']]['sh'] == "добыча предметов" then
--код проверки на добычу предметов
end
end
В итоге формируем таблицу с квестами, а если нам нужно добавить новый квест - просто пишем новый модуль в функцию и все.
И вдрух как все фрагменты пазла сложились в голове и я внезапно понял как надо работать с ООП. Можно же сформировать объекты, определить им поведение, потом переназначать им наследование, менять некоторые функции без дублирования кода, без всего вот этого вот.
Это же какие возможности, работа с данными без постоянных проверок на существания таблиц - заворачиваем все проверки и обработки внутрь объекта и забываем об этом. Я тут себе еще и СУБД слегка пилить начал, хорошо хоть не далеко зашел, надо с ООП переписать.
function addDb(db,key,msg)
if nsDb == nil then
nsDb = {}
end
if nsDb[db] == nil then
nsDb[db] = {}
end
if nsDb[db][key] == nil then
nsDb[db][key] = {}
end
local test
local razmerDb = tablelength(nsDb[db][key])
if razmerDb > 0 then
for k,v in pairs(nsDb[db][key]) do
if v == msg then
test = 1
end
end
end
if test == nil then
local num = tostring(razmerDb+1)
nsDb[db][key][num] = msg
end
end
Вот, например, сделал я добавление данных в таблицу с проверками автоматическим созданием всего что нужно, но у меня была проблема с динамическими путями до данных. А ведь это решается наследованием и переназначением обработки в объекте! Да почему ж я раньше этого не знал то.
Исправление LightDiver, :
Я делаю пользовательский мод из двух частей:
-
Клиентская часть у пользователей на компе. В ней как раз тысяч 30 строк без единого комметария. Ее приходится запутывать и обфусцировать, чтобы не читерили.
-
Серверная часть у меня на компе, принимает команды от клиентской и отправляет сигналы обратно.
Это десяток эвентов различных, квесты со своей механикой - как на видео, например изучение испанского. Реализации валют для рейдов, системы репутаций, работа с фреймами игры.. И все, что вообще приходит в голову. Самое тяжкое было - как раз отрисовка интерфейса - приходилось все вот эти кнопки отдельным кодом оформлять. А вчера мне как бумкнуло что то в голове - я уже где то месяц пытался понять что такое ООП и нахрена его вообще кто то использует и тут до меня дошло.
Я до этого уже изобрел почти свою реализацию ООП для удобства, но чего то все время не хватало: я делал функцию, которая принимала в себя параметры и имя таблицы. В функции были шаблоны для работы:
function cepochkiQuestov(tabella,shablon,kont,lok,x,y,myNome)
if t_cQ[tabella][testQ[myNome]['puteshestvie']]['sh'] == "поди туда" then
--тут отработка шаблона "поди туда"
end
if t_cQ[tabella][testQ[myNome]['puteshestvie']]['sh'] == "добыча предметов" then
--код проверки на добычу предметов
end
end
В итоге формируем таблицу с квестами, а если нам нужно добавить новый квест - просто пишем новый модуль в функцию и все.
И вдрух как все фрагменты пазла сложились в голове и я внезапно понял как надо работать с ООП. Можно же сформировать объекты, определить им поведение, потом переназначать им наследование, менять некоторые функции без дублирования кода, без всего вот этого вот.
Это же какие возможности, работа с данными без постоянных проверок на существания таблиц - заворачиваем все проверки и обработки внутрь объекта и забываем об этом. Я тут себе еще и СУБД слегка пилить начал, хорошо хоть не далеко зашел, надо с ООП переписать.
function addDb(db,key,msg)
if nsDb == nil then
nsDb = {}
end
if nsDb[db] == nil then
nsDb[db] = {}
end
if nsDb[db][key] == nil then
nsDb[db][key] = {}
end
local test
local razmerDb = tablelength(nsDb[db][key])
if razmerDb > 0 then
for k,v in pairs(nsDb[db][key]) do
if v == msg then
test = 1
end
end
end
if test == nil then
local num = tostring(razmerDb+1)
nsDb[db][key][num] = msg
end
end
Вот, например, сделал я добавление данных в таблицу с проверками автоматическим созданием всего что нужно, но у меня была проблема с динамическими путями до данных. А ведь это решается наследованием и переназначением обработки в объекте! Да почему ж я раньше этого не знал то.
Исправление LightDiver, :
Я делаю пользовательский мод из двух частей:
-
Клиентская часть у пользователей на компе. В ней как раз тысяч 30 строк без единого комметария. Ее приходится запутывать и обфусцировать, чтобы не читерили.
-
Серверная часть у меня на компе, принимает команды от клиентской и отправляет сигналы обратно.
Это десяток эвентов различных, квесты со своей механикой - как на видео, например изучение испанского. Реализации валют для рейдов, системы репутаций, работа с фреймами игры.. И все, что вообще приходит в голову. Самое тяжкое было - как раз отрисовка интерфейса - приходилось все вот эти кнопки отдельным кодом оформлять. А вчера мне как бумкнуло что то в голове - я уже где то месяц пытался понять что такое ООП и нахрена его вообще кто то использует и тут до меня дошло.
Я до этого уже изобрел почти свою реализацию ООП для удобства, но чего то все время не хватало: я делал функцию, которая принимала в себя параметры и имя таблицы. В функции были шаблоны для работы:
function cepochkiQuestov(tabella,shablon,kont,lok,x,y,myNome)
if t_cQ[tabella][testQ[myNome]['puteshestvie']]['sh'] == "поди туда" then
--тут отработка шаблона "поди туда"
end
if t_cQ[tabella][testQ[myNome]['puteshestvie']]['sh'] == "добыча предметов" then
--код проверки на добычу предметов
end
end
В итоге формируем таблицу с квестами, а если нам нужно добавить новый квест - просто пишем новый модуль в функцию и все.
И вдрух как все фрагменты пазла сложились в голове и я внезапно понял как надо работать с ООП. Можно же сформировать объекты, определить им поведение, потом переназначать им наследование, менять некоторые функции без дублирования кода, без всего вот этого вот.
Это же какие возможности, работа с данными без постоянных проверок на существания таблиц - заворачиваем все проверки и обработки внутрь объекта и забываем об этом. Я тут себе еще и СУБД слегка пилить начал, хорошо хоть не далеко зашел, надо с ООП переписать.
Исходная версия LightDiver, :
Я делаю пользовательский мод из двух частей:
-
Клиентская часть у пользователей на компе. В ней как раз тысяч 30 строк без единого комметария. Ее приходится запутывать и обфусцировать, чтобы не читерили.
-
Серверная часть у меня на компе, принимает команды от клиентской и отправляет сигналы обратно.
Это десяток эвентов различных, квесты со своей механикой - как на видео, например изучение испанского. Реализации валют для рейдов, системы репутаций работа с фреймами игры.. И все, что вообще приходит в голову. Самое тяжкое было - как раз отрисовка интерфейса - приходилось все вот эти кнопки отдельным кодом оформлять. А вчера мне как бумкнуло что то в голове - я уже где то месяц пытался понять что такое ООП и нахрена его вообще кто то использует и тут до меня дошло.
Я до этого уже изобрел почти свою реализацию ООП для удобства, но чего то все время не хватало: я делал функцию, которая принимала в себя параметры и имя таблицы. В функции были шаблоны для работы:
function cepochkiQuestov(tabella,shablon,kont,lok,x,y,myNome)
if t_cQ[tabella][testQ[myNome]['puteshestvie']]['sh'] == "поди туда" then
--тут отработка шаблона "поди туда"
end
if t_cQ[tabella][testQ[myNome]['puteshestvie']]['sh'] == "добыча предметов" then
--код проверки на добычу предметов
end
end
В итоге формируем таблицу с квестами, а если нам нужно добавить новый квест - просто пишем новый модуль в функцию и все.
И вдрух как все фрагменты пазла сложились в голове и я внезапно понял как надо работать с ООП. Можно же сформировать объекты, определить им поведение, потом переназначать им наследование, менять некоторые функции без дублирования кода, без всего вот этого вот.
Это же какие возможности, работа с данными без постоянных проверок на существания таблиц - заворачиваем все проверки и обработки внутрь объекта и забываем об этом. Я тут себе еще и СУБД слегка пилить начал, хорошо хоть не далеко зашел, надо с ООП переписать.