Четверг, 22.04.2021, 20:23


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

  • Страница 34 из 34
  • «
  • 1
  • 2
  • 32
  • 33
  • 34
Форум » Модификации Painkiller » Разработка модификаций и контента к ним » Помощь с Lua-скриптами (Задаем вопросы, отвечаем.)
Помощь с Lua-скриптами
HavcomПятница, 10.07.2020, 18:45 | Сообщение # 496
Painkiller
Сообщений: 2808
Награды: 64
Репутация: 357
Статус: Online
NecroBloom, эта папка лежит в архиве Lscripts
 
JourgensenПятница, 10.07.2020, 19:24 | Сообщение # 497
Перфекционист
Сообщений: 329
Награды: 22
Репутация: 99
Статус: Offline
NecroBloom, зачем тебе они? Ты собираешься делать мод?

Открытый контент для Painkiller и NecroVisioN
 
HavcomПятница, 10.07.2020, 21:43 | Сообщение # 498
Painkiller
Сообщений: 2808
Награды: 64
Репутация: 357
Статус: Online
NecroBloom, Все файлы лежат в архиве, а у тебя в папках только заменяемые файлы, в которых скорее всего были какие-то изменения.
 
NecroBloomВоскресенье, 12.07.2020, 20:14 | Сообщение # 499
Новичок
Сообщений: 13
Награды: 0
Репутация: 0
Статус: Offline
hello Всем привет, я решил что буду писать туториалы по Lua скриптингу. Чуть позже начну. Я буду писать, только то, что сам знаю.  angel

Добавлено (12.07.2020, 20:17)
---------------------------------------------
Итак, начнём!  ;)

Добавлено (12.07.2020, 20:23)
---------------------------------------------
По старинке наша первая программа на Lua просто напечатает «Hello World»:



Код
print("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))

На сегодня всё! Удачи!  bye
 
STR_ParagorПонедельник, 13.07.2020, 17:08 | Сообщение # 500
Охотник
Сообщений: 59
Награды: 0
Репутация: 10
Статус: Offline
NecroBloom, туториалы это всё очень хорошо конечно, но зачем копировать с учебников или других сайтов? Это может сделать каждый, тем более грамотно и с полезными примерами. То что ты написал вообще никому не нужно, тем более для программирования на игре Painkiller. Если ты сам в этом плохо разбираешься, то учить вот этому не нужно, не делай этого пожалуйста. 
У тебя есть пример с рекурсией, которая высчитывает факториал числа. Рекурсия может и пригодиться, но зачем факториал находить не понятно, вместо этого лучше было бы привести пример где это действительно может пригодиться. К примеру как написать скрипты для оружия чтобы по разному стреляло, как работают скрипты в Painkiller, как отрисовывается интерфейс и тому подобное, надо чтобы примеры решали какие нибудь задачи.
И ещё одно, ты даже не указал где можно опробовать написать такую программу чтобы самому поэксперементировать с программированием на Lua, так же хотя бы нужно объяснить базовый синстаксис язык, какие  типы переменных бывают и как что определяется
 
HavcomПонедельник, 13.07.2020, 20:54 | Сообщение # 501
Painkiller
Сообщений: 2808
Награды: 64
Репутация: 357
Статус: Online
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
Охотник
Сообщений: 41
Награды: 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
Сообщений: 2808
Награды: 64
Репутация: 357
Статус: Online
Цитата 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 (тоже раскомментированный), для быстрого прохождения уровней (этот метод не отличается от обычного в том плане, что задание для карты выполнимо).

 
Форум » Модификации Painkiller » Разработка модификаций и контента к ним » Помощь с Lua-скриптами (Задаем вопросы, отвечаем.)
  • Страница 34 из 34
  • «
  • 1
  • 2
  • 32
  • 33
  • 34
Поиск: