| Помощь с Lua-скриптами | 
| 
				
			 | 
| 
| Jourgensen | Пятница, 10.07.2020, 19:24 | Сообщение # 496 |  |  Перфекционист Сообщений: 383 Награды: 22 Репутация: 105 Статус: Offline | NecroBloom, зачем тебе они? Ты собираешься делать мод? 
 Открытый контент для Painkiller и NecroVisioN
 |  |  |  |  | 
| 
| Havcom | Пятница, 10.07.2020, 21:43 | Сообщение # 497 |  |  Painkiller Сообщений: 3042 Награды: 65 Репутация: 375 Статус: Offline | NecroBloom, Все файлы лежат в архиве, а у тебя в папках только заменяемые файлы, в которых скорее всего были какие-то изменения. |  |  |  |  | 
| 
| NecroBloom | Воскресенье, 12.07.2020, 20:14 | Сообщение # 498 |  |  Новичок Сообщений: 13 Награды: 0 Репутация: 0 Статус: Offline |  Всем привет, я решил что буду писать туториалы по Lua скриптингу. Чуть позже начну. Я буду писать, только то, что сам знаю.  Добавлено (12.07.2020, 20:17)---------------------------------------------
 Итак, начнём!
  Добавлено (12.07.2020, 20:23)---------------------------------------------
 По старинке наша первая программа на Lua просто напечатает «Hello World»:
 
 
 В качестве немного более сложного примера следующая программа определяет функцию для вычисления факториала данного числа, запрашивает у пользователя число и печатает его факториал:
 
 
 Код -- defines a factorial functionfunction 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 | Сообщение # 499 |  |  Охотник Сообщений: 67 Награды: 0 Репутация: 10 Статус: Offline | NecroBloom, туториалы это всё очень хорошо конечно, но зачем копировать с учебников или других сайтов? Это может сделать каждый, тем более грамотно и с полезными примерами. То что ты написал вообще никому не нужно, тем более для программирования на игре Painkiller. Если ты сам в этом плохо разбираешься, то учить вот этому не нужно, не делай этого пожалуйста. У тебя есть пример с рекурсией, которая высчитывает факториал числа. Рекурсия может и пригодиться, но зачем факториал находить не понятно, вместо этого лучше было бы привести пример где это действительно может пригодиться. К примеру как написать скрипты для оружия чтобы по разному стреляло, как работают скрипты в Painkiller, как отрисовывается интерфейс и тому подобное, надо чтобы примеры решали какие нибудь задачи.
 И ещё одно, ты даже не указал где можно опробовать написать такую программу чтобы самому поэксперементировать с программированием на Lua, так же хотя бы нужно объяснить базовый синстаксис язык, какие  типы переменных бывают и как что определяется
 |  |  |  |  | 
| 
| Havcom | Понедельник, 13.07.2020, 20:54 | Сообщение # 500 |  |  Painkiller Сообщений: 3042 Награды: 65 Репутация: 375 Статус: Offline | STR_Paragor, не мешай юнному дарованию раскрывать себя)) |  |  |  |  | 
| 
| Painkiller-Ivan | Четверг, 18.03.2021, 03:24 | Сообщение # 501 |  | 
 
 
 
 
 | Нужна помощь по устранению махинаторского способа получения карточек таро из Буха в Крещенном кровью. Насколько известно, их получение достигается заходом на доску карт дополнения, выходом в главное меню и заходом на доску карт оригинальной кампании, где мы увидим колоду из 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 | Сообщение # 502 |  |  Охотник Сообщений: 56 Награды: 0 Репутация: 1 Статус: Offline | Painkiller-Ivan, зачем тебе это? |  |  |  |  | 
| 
| Painkiller-Ivan | Пятница, 19.03.2021, 12:26 | Сообщение # 503 |  | 
 
 
 
 
 | 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 | Сообщение # 504 |  |  Painkiller Сообщений: 3042 Награды: 65 Репутация: 375 Статус: Offline | Я не нашел в своей модификации такое условие, это первое.Цитата Painkiller-Ivan (  )  Я взял скрипт из PK reload 4.0 (актуально и на 4.1)
 Второе, выдача карт в аддоне была задумана самими разработчиками. А их удаление уже прописано в старте новой кампании по желанию игрока.
 |  |  |  |  | 
| 
| Painkiller-Ivan | Пятница, 19.03.2021, 14:14 | Сообщение # 505 |  | 
 
 
 
 
 | Конечно, не нашли, я взял образец "if not ask and Game.CardsAvailable[1] then ask = true end" и слегка его модифицировал, добавив вырезанный вами "Game.PlayerMoney > 0" (новая игра обычно не сбрасывала прогресс при отсутствии "Game.CardsAvailable[1]").Цитата Havcom (  )  Я не нашел в своей модификации такое условие, это первое.
 Правильно, что выдаётся в аддоне, но неправильно, что выдаётся в оригинале, - вот в чём прикол. Удаления в старте новой кампании и не нужно бы, если доска из первой кампании изначально пуста, то и удалять нечего.Цитата Havcom (  )  Второе, выдача карт в аддоне была задумана самими разработчиками. А их удаление уже прописано в старте новой кампании по желанию игрока.Добавлено (21.03.2021, 00:04)---------------------------------------------
 Исправил "задумку" разработчиков. Теперь игроку больше не выдаются все карты таро с начала оригинальной кампании, зайдя предварительно на доску карт "За пределами ада". Смотрим.
 
 Чтобы не говорили, что в оригинале заранее отключена выдача, я для убедительности записал видео с выдачей через чит-код pkallcards (раскомментированный), ибо так быстрее заполучить желанное
  (Ссылка) Ну и для проверки использовал pkperfect (тоже раскомментированный), для быстрого прохождения уровней (этот метод не отличается от обычного в том плане, что задание для карты выполнимо).
 |  |  |  |  | 
| 
| Glasya-Labolas | Понедельник, 17.02.2025, 20:32 | Сообщение # 506 |  |  Новичок Сообщений: 3 Награды: 0 Репутация: -17 Статус: Offline | Я написал небольшой скрипт на языке программирования Python, который позволяет узнать индексы нужных строк в файле «lscripts/Main/Lang_Russian». Он нужен по той причине, что в файле находится более тысячи строк текста, и искать нужную строку вручную опрометчиво, ведь проще запустит программу и найти номер нужной строки в автоматическом режиме. 
 Код на Python:
 path = "ПУТЬ К ФАЙЛУ"text = ""; numer=0;
 numers = []
 my_text = input("Найти строку: ")
 with open(path, "r", encoding="cp1251") as file:
 for line in file:
 if line.find(my_text) > 0:
 numers += [numer+1]
 numer += 1
 with open(path, "r", encoding="cp1251") as file:
 text = file.read()
 print("Количество: " + str(text.count(my_text)))
 print("Номера строк:" + str(numers))
 
 Painkiller – Division of Satan
 
 
 Сообщение отредактировал Glasya-Labolas - Вторник, 18.03.2025, 05:15 |  |  |  |  |