Помощь с Lua-скриптами
|
|
Havcom | Пятница, 10.07.2020, 18:45 | Сообщение # 496 |
Painkiller
Сообщений: 3029
Награды: 65
Репутация: 375
Статус: Offline
| NecroBloom, эта папка лежит в архиве Lscripts
|
|
| |
Jourgensen | Пятница, 10.07.2020, 19:24 | Сообщение # 497 |
Перфекционист
Сообщений: 377
Награды: 22
Репутация: 105
Статус: Offline
| NecroBloom, зачем тебе они? Ты собираешься делать мод?
Открытый контент для Painkiller и NecroVisioN
|
|
| |
Havcom | Пятница, 10.07.2020, 21:43 | Сообщение # 498 |
Painkiller
Сообщений: 3029
Награды: 65
Репутация: 375
Статус: Offline
| NecroBloom, Все файлы лежат в архиве, а у тебя в папках только заменяемые файлы, в которых скорее всего были какие-то изменения.
|
|
| |
NecroBloom | Воскресенье, 12.07.2020, 20:14 | Сообщение # 499 |
Новичок
Сообщений: 13
Награды: 0
Репутация: 0
Статус: Offline
| Всем привет, я решил что буду писать туториалы по Lua скриптингу. Чуть позже начну. Я буду писать, только то, что сам знаю. Добавлено (12.07.2020, 20:17) --------------------------------------------- Итак, начнём! Добавлено (12.07.2020, 20:23) --------------------------------------------- По старинке наша первая программа на Lua просто напечатает «Hello World»:
В качестве немного более сложного примера следующая программа определяет функцию для вычисления факториала данного числа, запрашивает у пользователя число и печатает его факториал:
Код -- defines a factorial function function fact (n) if n == 0 then return 1 else return n * fact(n-1) end end
print("enter a number:") a = io.read("*number") -- read a number print(fact(a))
На сегодня всё! Удачи!
|
|
| |
STR_Paragor | Понедельник, 13.07.2020, 17:08 | Сообщение # 500 |
Охотник
Сообщений: 64
Награды: 0
Репутация: 10
Статус: Offline
| NecroBloom, туториалы это всё очень хорошо конечно, но зачем копировать с учебников или других сайтов? Это может сделать каждый, тем более грамотно и с полезными примерами. То что ты написал вообще никому не нужно, тем более для программирования на игре Painkiller. Если ты сам в этом плохо разбираешься, то учить вот этому не нужно, не делай этого пожалуйста. У тебя есть пример с рекурсией, которая высчитывает факториал числа. Рекурсия может и пригодиться, но зачем факториал находить не понятно, вместо этого лучше было бы привести пример где это действительно может пригодиться. К примеру как написать скрипты для оружия чтобы по разному стреляло, как работают скрипты в Painkiller, как отрисовывается интерфейс и тому подобное, надо чтобы примеры решали какие нибудь задачи. И ещё одно, ты даже не указал где можно опробовать написать такую программу чтобы самому поэксперементировать с программированием на Lua, так же хотя бы нужно объяснить базовый синстаксис язык, какие типы переменных бывают и как что определяется
|
|
| |
Havcom | Понедельник, 13.07.2020, 20:54 | Сообщение # 501 |
Painkiller
Сообщений: 3029
Награды: 65
Репутация: 375
Статус: Offline
| STR_Paragor, не мешай юнному дарованию раскрывать себя))
|
|
| |
Painkiller-Ivan | Четверг, 18.03.2021, 03:24 | Сообщение # 502 |
| Нужна помощь по устранению махинаторского способа получения карточек таро из Буха в Крещенном кровью. Насколько известно, их получение достигается заходом на доску карт дополнения, выходом в главное меню и заходом на доску карт оригинальной кампании, где мы увидим колоду из 23 штук (24-я, которая "Божественное вмешательство", не будет доступна). Наглядное тому видео.
Я взял скрипт из PK reload 4.0 (актуально и на 4.1) для оригинала, который спрашивает игрока стереть "награбленное" добро, когда начинает новую игру с наличием хотя бы одной таро (на чистой версии 1.64 аск срабатывал только, если денег у игрока больше, чем ничего; в моде же работают два условия - код ниже).
Код PainMenu.lua
if not ask and (Game.PlayerMoney > 0 or Game.CardsAvailable[1]) then ask = true end
Это решение является, на первый взгляд, сдерживающим фактором, но легко обходящим - абузеры не знают совести, будут жать "Нет". Хотелось бы доработать условие спроса, при котором бы игра не запоминала, что мы заходили в Бух и открывали буховский мэджикборд, а значит, при первом запуске КК нас будут спрашивать только за золото (если таковое зарабатывалось "на стороне").
Сообщение отредактировал Painkiller-Ivan - Четверг, 18.03.2021, 03:39 |
|
| |
C-Dragon | Пятница, 19.03.2021, 06:11 | Сообщение # 503 |
Охотник
Сообщений: 54
Награды: 0
Репутация: 1
Статус: Offline
| Painkiller-Ivan, зачем тебе это?
|
|
| |
Painkiller-Ivan | Пятница, 19.03.2021, 12:26 | Сообщение # 504 |
| C-Dragon, мне как игроку, заботящемуся о честном прохождении, не устраивало попустительство халяве, она наблюдается в хавкомовском моде, славящемся античитерной системой по отношению к своим читам (да что там к читам - к редактору уровней!), но даже она несовершенна.
Видимо, в файле MagicBoard.lua функция "function MagicBoard:Setup()" не хочет перезагружать статус доски, поскольку игра думает, что мы находимся в аддоне, когда на самом деле уже оттуда вышли и находимся в основной.
Код function MagicBoard:Setup() MagicBoard_LoadStatus()
if Game.AddOn then for i, o in MagicCards.timeCards do if o.index < 25 then Game.CardsAvailable[o.index] = true end end for i, o in MagicCards.permCards do if o.index < 25 and o.index ~= 23 then Game.CardsAvailable[o.index] = true end end end
В 4-й строке (не пустая) кода выше, как видишь, переменная Game.AddOn, в ней всё и происходит: открывает в аддоновской кампании доступ к картам в начале игры (классические только), обменивается доступными картами с доской Крещёного кровью (что неправильно). Если попробовать заставить игру думать, что мы не в аддоне, то допишем скрипт:
Код ... if Game.AddOn then for i, o in MagicCards.timeCards do if o.index < 25 then Game.CardsAvailable[o.index] = true end end for i, o in MagicCards.permCards do if o.index < 25 and o.index ~= 23 then Game.CardsAvailable[o.index] = true end end elseif not Game.AddOn then -- если игровой процесс не в аддоне for i, o in MagicCards.timeCards do if o.index < 25 then Game.CardsAvailable[o.index] = true end end for i, o in MagicCards.permCards do if o.index < 25 and o.index ~= 23 then Game.CardsAvailable[o.index] = true end end end
Но оператор not в строке "elseif not Game.AddOn then" не предотвращает обмен картами из аддона, оригинальная доска почему-то помнит их из другой доски (если посещал ту ранее). Зато меняя значение с "true" на "false" в переменных "Game.CardsAvailable[o.index]", можно решить проблему с предварительной выдачей карт навсегда, правда, пройдя уровень оригинала, никакую уже не получишь.
|
|
| |
Havcom | Пятница, 19.03.2021, 13:08 | Сообщение # 505 |
Painkiller
Сообщений: 3029
Награды: 65
Репутация: 375
Статус: Offline
| Цитата Painkiller-Ivan ( ) Я взял скрипт из PK reload 4.0 (актуально и на 4.1) Я не нашел в своей модификации такое условие, это первое.
Второе, выдача карт в аддоне была задумана самими разработчиками. А их удаление уже прописано в старте новой кампании по желанию игрока.
|
|
| |
Painkiller-Ivan | Пятница, 19.03.2021, 14:14 | Сообщение # 506 |
| Цитата Havcom ( ) Я не нашел в своей модификации такое условие, это первое. Конечно, не нашли, я взял образец "if not ask and Game.CardsAvailable[1] then ask = true end" и слегка его модифицировал, добавив вырезанный вами "Game.PlayerMoney > 0" (новая игра обычно не сбрасывала прогресс при отсутствии "Game.CardsAvailable[1]").
Цитата Havcom ( ) Второе, выдача карт в аддоне была задумана самими разработчиками. А их удаление уже прописано в старте новой кампании по желанию игрока. Правильно, что выдаётся в аддоне, но неправильно, что выдаётся в оригинале, - вот в чём прикол. Удаления в старте новой кампании и не нужно бы, если доска из первой кампании изначально пуста, то и удалять нечего.Добавлено (21.03.2021, 00:04) --------------------------------------------- Исправил "задумку" разработчиков. Теперь игроку больше не выдаются все карты таро с начала оригинальной кампании, зайдя предварительно на доску карт "За пределами ада". Смотрим.
Чтобы не говорили, что в оригинале заранее отключена выдача, я для убедительности записал видео с выдачей через чит-код pkallcards (раскомментированный), ибо так быстрее заполучить желанное (Ссылка) Ну и для проверки использовал pkperfect (тоже раскомментированный), для быстрого прохождения уровней (этот метод не отличается от обычного в том плане, что задание для карты выполнимо).
|
|
| |