Dark Scripter
Извиняйте, но не все тут с СДК на ты, хотя пару лет назад я пробовал там чего-то сваять... Да и потом ради всего этого декомпилировать уровень, а затем обратно, ну его.
Artos
В общем и целом, все эти варианты (на данный момент) для меня малопонятны...
Stalker_Alex333
Ты вроде как не новичок ...
Не умеешь пользоваться нет-пакетами? Возьми готовую библиотеку (в том же Симбионе) и используй как обычные функции (считать таблицу -> поменять элемент -> вернуть измененную таблицу).
Не умеешь отловить момент записи актрских параметров (actor_binder:save) или спавн актора в игру (actor_binder:net_spawn)? Хм, ... тогда прежде чем воплощать свои задумки стОит поизычать то, от чего они заисят. Без этого только один вариант: 'сделайте мне то-то' ...
З.Ы. Все координаты (и позицию и поворот головы) снимал с помощью проги Position Informer, разве он может ошибаться? Или такие вещи лучше смотреть через rs_stats? Показать один из своих lc?
Во первых, поворот актора, и поворот головы(камеры), это разные вещи, и определяются разными методами. Position Informer, на сколько я знаю снимает дирекцию актора, rs_stats и метод device().cam_dir снимают дирекцию камеры. Сначала уточни для себя, какие координаты тебе требуются.
Во вторых, если дирекцию устанавливаешь там, где и положено (в dest_direction), то актор обязан поворачиваться по указанным координатам.
Вывод. Или не верно указываешь дирекцию, или указываешь её не там, не следует.
отредактировал(а) singapur22: 10-06-2011 18:48 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Dark Scripter
А можешь привести линки на 'acdc_un-23may2011 и ACDC_with_split_2011_03_13' (где скачать), а то как то пропустил сей факт, а любопытно (может что новенького?). :-)
(поиск по нету молчит ...)
Struck
Когда-то давно тут уже разбирались с 'this' и 'self' ...
Кратко: 'self' при использовании сей переменной в классе имеет значение юзердаты самомно класса, в котором используется. Точнее при создании (инициализации) самого класса эта переменная 'self' создается и ей присваивается то, что собственно и является классом (юзердатой класса).
Т.о. обрахаясь к ней из методов самого класса - ты обращаешься к классу (самому себе).
Область видимости ограничена самим классом, т.е. эта переменная недоступна 'из вне.
P.S. Наследование свойств класса само собою подразумевается, если новый класс создается на базе имеющегося.
Не путай(!) добавление 'своих'/новых методов в имеющийся класс с созжанием нового.
Struck Да, 'CUIScriptWnd' - это уже существующий (после запуска игры) класс, по которому (на базе которого) ты можешь создать свои классы, обзывая их как тебе удобно и добавлять свои методы (если потребно). Естественно 'твой' созданый класс наследует свойства его породившего.
Вызывая 'self' - ты НЕ создаешь ничего (о создании при инициализации класса уже написал выше!), а обращаешься каждый раз к одной и той же таблице, т.е. к таблице класса, которая едина для всего класса (это же собственно и есть класс!).
Иными словами: 'self' - это единый псевдоним для названий классов и обращаясь к нему, ты по сути обращаешься к классу по этому псевдониму. Само собою этот псевдоним доступен только изнутри класса. Извне - это уже обычная переменная.
Artos [left]все же лучше пытаться понять, чем продолжать исп. метод "тыка" на авось[/left**5031618d69873ce82a42**yellow]?
Т.е.
[code]name:__init() super()
[/code]
это и есть основа всего, далее идет лишь вызов методов и функций(последние я так понял для удобства, типа InitContols и InitCallbacks)
Struck
Сорри. но пока ты не поймешь разницы между классом и функцией - разговор будет китайца с чукчей ... :-(
Конечно лучше познавать, чем быть неучем, но место для подобного обучения явно неудачное. Для многих читающих подобные размусоливания являются мусором, а это означает - мешаем нормальномуу общению.
Постарайся прежде чем задавать вопрос(ы) - пару часиков поискать ответ(ы) самостоятельно!
Artos ну функция же сама по себе, от класса она не зависит
Мусором я думаю данный диалог-разжевывание не будет, ибо детальное устройство этих классов не знает тут никто кроме вас троих
почитал...вот что понял:
"Функции не могут создавать объекты. Классы могут создавать объекты, у каждого из которых есть свое состояние. Функции могут быть включены в классы, а классы нельзя никуда подключить. Класс может наследоваться от другого класса, а функция не может наследоваться ни от чего."
Верно ли моё суждение?
отредактировал(а) Struck: 10-06-2011 19:45 GMT3 час. Снова в строю.
Struck
Давай ещё раз попробу**5001618d69873ce82a42** = t})
a:f() --> 2
b:f() --> 5
c:f() --> 8
[/code]
На таблицу t и строки с setmetatable пока не обращай внимания.
Как видишь в конце кода идёт три вызова.
[code]
a:f()
b:f()
c:f()
[/code]
Все три раза вызывается одна и та же фунция
[code]
function t:f()
print(self.w)
end
[/code]
Но каждый раз вместо t в этой функции как бы "подставляются" вызывающие объекты. Сначала a, потом b и в конце c
И соответственно вместо self каждый раз будет "подставляется" этот же вызывающий объект.
Первый раз вызывали a:f(), значит вместо self "подставляется" вызывающий объект(таблица) a.
И напечатает (print(a.w)) - 2
Во второй раз вызывали b:f(), значит вместо self "подставляется" вызывающий объект(таблица) b.
И напечатает (print(b.w)) - 5
И наконец вызывали c:f(), значит вместо self "подставляется" вызывающий объект(таблица) c.
И напечатает (print(c.w)) - 8
Т.е. что получается?
Если в записи function t:f() мы можем вместо t каждый раз "подставлять" новый объект (вызывая a:f(), b:f() и c:f() "подставляется" соответственно a, b и c ),
то в строке print возникает вопрос - "Значение w какой из трёх таблиц нам нужно напечатать?"
Для этого и задаётся системная локальная (для этой функции) переменная self. Она то и принимает значение того объекта, который вызвал данную функцию.
отредактировал(а) Gun12: 10-06-2011 21:19 GMT3 час. Не стань номинантом премии Дарвина.
Struck
Вновь вспоминается басня дедушки Крылова о слепцах изучающих слона ...
На уровне слепого, ощупывающего хвост слона и делающего вывод о 'слон - длинный тонкий как змея' - твои рассуждения можно считать почти верными. :-)
Просто кто-то возразит, типа "Как же так, а как же я спавню объект в игру функцией спавна?", не подозревая, что этой функцией он просто вызывает соответствующие методы соотвествующего класса ...
Т.о. многое упирается и в понимание смысла краткой фразы, допускающей различные толкования. :-)
Struck Функция может быть двух типов. Обычная функция (в Lua, функция является типом значения), и функция класса (так называемый "метод"). Функция класса (метод) может быть вызван только внутри класса, или от объекта класса. В отличии от обычной функции, метод не может быть вызван отдельно от класса (непосредственно), так как производит те, или иные действия над самим объектом класса, или по крайней мере тесно на него завязан. Но в то же время могжет производить и независимые от класса действия. Всё зависит от его назначения.
отредактировал(а) singapur22: 10-06-2011 20:31 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Прошу помочь мне:
Сначала вывожу на худ вывожу свой скриптовый ПДА на экран. Потом отдельным классом вывожу поверх пда еще одно окно "maker".**5001618d69873ce82a42**n
amk.send_tip(type(t1))
else
log1("1")
end
local t2=t1.stalker_ed_logic
if t2 then
amk.send_tip(type(t2))
else
log1("2")
end
t2:SetText("Custom logic")[/code]
Если делать так, то приходят смски содержанием userdata,userdata и даже функция GetText возвращает Custom logic, но однако реально в эдит боксе ничеко не меняется
Ma$ter
Вспомни: "Каков вопрос - таков ответ".
Неужели непонятно, что кинув в топик огрызок некоего кода с вызовами сторонних скриптов и без какого-либо смысла в самом коде - ждать ответа стОит только от кашпировского ... или любителей погадать на кофейной гуще.
Если Вам чего то не хватает, то вы скажите что мне необходимо выложить, а то я могу долго гадать на кофейной чайной (я не люблю кофе) гуще что вам нужно.
Вспомни:"Каков ответ - таков и повторный вопрос"
Ma$ter
Видно у кого то из нас мозги набекрень ...
Мне то ничего НЕ нужно от твоих вопросов/ответов и НЕ давал я 'ответ', а дал комментарий к вопрошалке ... ;-)
Это вроде как тебе нужна помощь - так потрудись задать вопрос так, чтобы поняв его можно было бы ответ дать, а не заниматься вытягиванием из тебя того, что непонятно иль погадалками.
пока только можно сказать, что иль кодер написавший сей "код" не в себе иль спрашивает о чем-то ином, чем о коде ...
local t1=positioninformer.log_checker_full(get_hud()) --/ вероятно получается класс некоего худа
if t1 then
amk.send_tip(type(t1)) --/ вывод сообщения о том, что класс худа - это юзердата
else
log1("1") --/ ... иль не получен класс худа
end
local t2=t1.stalker_ed_logic --/ вероятно присваиваем t2 некий объект/метод/функцию из класса худа (иль из пустоты)
if t2 then
amk.send_tip(type(t2)) --/ вывод сообщения о типе: вероятно функция (или объект класса худа)
else
log1("2") --/ ... иль ничего не присвоили
end
t2:SetText("Custom logic") --/ глупая попытка применить метод класса к объекту или 'пустоте'
Далее погадалками заниматься желания не имею ... :-G Даже отформатировать текст кода не утруждаешь себя.
Gun12 Я пытался переопределить метатаблицу. Но у меня ничего не получилось. Может не так пытался, а может здесь это не возможно. Знать бы, на каком основании здесь вообще производится создание классов.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Выводов __index было очень много. Еле дождался, когда консоль поднялась на верх своёй страницы.
отредактировал(а) singapur22: 11-06-2011 09:29 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Struck По сути, киллером определяется объект (сталкер, мутант, аномалия). А определить, чем он его убил, автоматом, ножом, или с пинка, дело техники.
Я в данном направлении тесно ещё не работал, но полагаю, что сначала происходит событие хита. И если хит был критическим, вызывается событие смерти. Если это действительно так, то определение оружия лучше вешать именно на хит, с запоминанием во внешней переменной (или ячейке определённой таблицы), как типа оружия, так и сталкера(его id). И если после хита было вызвано событие смерти, и смерть поступила от того же объёкта (сталкера), выдавать сохранёный тип оружия туда, куда требуется.
отредактировал(а) singapur22: 11-06-2011 10:31 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.