PainkilleR

Фан-клуб

ОПРОС

Оцените этот сайт

menuleft3
menuleft4

Помощь с Lua-скриптами

В чём ошибка?

Как правильно?
[signature]
--------------------
{signature}
[/signature]
[fast]Цитировать[/fast] Жалоба
#0
4044410
Посетители +
  • публикаций
  • комментариев
Цитата Evgeniy ()
Чтобы изучить основные возможности написанных Хавкомом программ,времени много не потребуется.В дальнейшем понадобятся только желание,фантазия и немного свободного времени.
Цитата Jourgensen ()
Havcom, и много у тебя таких?
facepalm
Цитировать Жалоба
Jourgensen
Модераторы
  • публикаций
  • комментариев
Да, я не в танке. Хоть бы рассказали чтоль, нежели фэйспалмить.
Цитировать Жалоба
Модераторы
  • публикаций
  • комментариев
4044410, Ты ошибся,этот по праву принадлежит тебе.

Jourgensen, Так что тебе объяснить-то?
Цитировать Жалоба
Jourgensen
Модераторы
  • публикаций
  • комментариев
Ну, про программы написанные Хавом.
Цитировать Жалоба
Модераторы
  • публикаций
  • комментариев
Если вкратце,для создания карт под Пэйнкиллер можно использовать различные программы по 3D-моделированию.Autodesk 3DS Max и Autodesk Maya - самые яркие представители.По сути,сами программы отличаются немногим,разве что вторая имеет больший арсенал для работы с анимацией,а также некоторые отличия в интерфейсе и инструментарии.
Вся фишка в том,что под 3DS Max интернет битком набит всевозможными книгами и видеоуроками,в то время как Майя очень в этом плане ограничена.
Если есть желание,на сайте в меню можно найти небольшие уроки по программе 3DS Max(изначально советую попробовать именно её),а также попросту скачать эту программу и,если повезёт,втянуться в картостроительство.


Вот,собственно,и уроки.


И,кстати,начинаем оффтопить,товарищи.
Цитировать Жалоба
Jourgensen
Модераторы
  • публикаций
  • комментариев
Спасибо! Так это Хав написал 3DS Max?!
Цитировать Жалоба
Модераторы
  • публикаций
  • комментариев
Не за что.

Цитата Jourgensen ()
Так это Хав написал 3DS Max?!

Я бы ему в ноги кланялся,если бы так и было.Но нет,3DS Max написала компания Autodesk.


Цитата Evgeniy ()
написанных Хавкомом программ

Цитата Jourgensen ()
и много у тебя таких?

Дико извиняюсь,не написанных,а указанных,названных и т.д.Ввёл в заблуждение.
Цитировать Жалоба
Jourgensen
Модераторы
  • публикаций
  • комментариев
Да ничего страшного. Я уж тут думал, что Хав какой-нибудь гений программинга. =)
Цитировать Жалоба
nonnamed
Посетители +
  • публикаций
  • комментариев
Играл я значит на рекурринг евиле.И банши меня ударил.И тут выскочела такая вот ошибочка:

./Data/LScripts/Templates/Monsters/Banshee/Banshee.lua:112:OnUpdate
./Data/LScripts/Classes/CActor.lua:256:Update
./Data/LScripts/Main/GObjects.lua:100:?
:-1:foreachi
./Data/LScripts/Main/GObjects.lua:120:Update
./Data/LScripts/Main/Game.lua:509:Tick
./Data/LScripts/Main/Game.lua:1699:Game_Tick

в чем тут ошибка?
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
nonnamed, у тебя на комне установлен рекурринг евил! Вот в чём ошибка.
Цитировать Жалоба
Jourgensen
Модераторы
  • публикаций
  • комментариев
Тут не одна ошибка. Их несколько. Перезапусти уровень, и если при ударе Банши будет то же самое, открывай скрипты указанные в ошибке и исправляй. Скорее всего игру глюкануло.
Цитировать Жалоба
nonnamed
Посетители +
  • публикаций
  • комментариев
Jourgensen, уже исправил
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Jourgensen, вообще-то ошибка здесь одна.

nonnamed, молодец.
Цитировать Жалоба
Jourgensen
Модераторы
  • публикаций
  • комментариев
Так копаться приходится сразу в темплейтах, классах, и майне.

Добавлено (30.08.2015, 22:32)
---------------------------------------------
Недавно начал разбираться в игровых ресурсах Street Fighter X Tekken. Выпотрошил все скрипты из архивов, но большинство из них оказались зашифрованными. Полдня пытался расшифровать их. В итоге со словами: "Да клал я болт на тебя" завалился спать. Сможет кто-нибудь помочь, кто отлично знает алгоритмы шифрования lua?

Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Я тут написал скрипт для мододелов. Точнее, я переписал старый скрипт. Так вот, я переписал скрипт на патроны, которые даются при взятии мегапака. Суть в том, что теперь стало намного лече добавлять патроны, которые будет давать мегапак для новых оружий.

Как, собственно, теперь добавлять патроны:
В CPlayer.lua в новую таблицу GiveMegaPackAmmo достаточно добавить соответствующие строки, например:

Shotgun = 10,

Вот и вся проблема. В отличии от того, что приходилось прописывать раньше для каждого вида патрона:

player.Ammo.Shotgun = player.Ammo.Shotgun + 10 * AmmoDifficultyModifier[Game.Difficulty] * Game.AmmoFoundFactor

Может для кого-то это и незначительно, но мне бы это точно сэкономило кучу времени.

Скачать: https://yadi.sk/d/GDFTefPKkhfzm
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
TranZit, Гениально!!! facepalm
Бросай уже писать скрипты для мододелов.
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Havcom, а я ничуть не удивлён твоей реакцией :)
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Кстати, TranZit, раз уж ты такой молодец и хорошо во всём разбираешься, то скажи, для чего нужны переменные AmmoDifficultyModifier[Game.Difficulty] и Game.AmmoFoundFactor?
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Havcom, обо всём по порядку:
Цитата
раз уж ты такой молодец и хорошо во всём разбираешься
Но-но, положительного мнение я о себе никогда не говорю — это должны решить другие люди; лично для себя в Lua я разбираюсь не очень, не смотря даже на то, что самостоятельно написал скрипт на бег; тем более не считаю себя специалистом в программировании. А ты наверняка с сарказмом это сказал, как ты обычно и любишь.

Цитата Havcom ()
AmmoDifficultyModifier[Game.Difficulty]
Эта переменная отвечает за количество выдаваемых патронов, в зависимости от уровня сложности игры. Чем выше сложность, тем меньше патронов выдадут. Либо реверс.

Цитата Havcom ()
Game.AmmoFoundFactor
А это отвечает за количество выдаваемых патронов при взятой или не взятой на уровень карты Таро «Пополнение». Если игрок не взял карту на уровень, значение этой переменной будет равно единице, то ничего не поменяется; если же будет взята карта на уровень, тогда переменная примет значение два, а это даст удвоенную выдачу патронов.

А ты сам небось три дня ответ искал?
Цитировать Жалоба
UnSlayeRLBarsik
Модераторы
  • публикаций
  • комментариев
TranZit, Ты главное в каталог файлов не лезь с такими вот исправлениями или обновлениями. Да честно если уж делаешь какой-то фикс, то делай больше чем 1 исправление.
Havcom, Да пускай пишет, плохо от этого никому не будет.
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
TranZit, молодец. Я думал, ты не справишься. Теперь обо всём по порядку:

Цитата TranZit ()
лично для себя в Lua я разбираюсь не очень
Если ты плохо разбираешься, то зачем тогда пишешь скрипты для мододелов чуть выше?

Цитата TranZit ()
А ты наверняка с сарказмом это сказал, как ты обычно и любишь.
Да ну, нет, просто стало интересно. А то ты предлагаешь внести исправления, которые вызовут баги в игре. Так держать thumb

UnSlayeR, ..................... Хотя нет, отставить :D
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Цитата UnSlayeR ()
Ты главное в каталог файлов не лезь с такими вот исправлениями или обновлениями.
Ну не, такое в каталоге файлов будет глупо смотреться.

Цитата UnSlayeR ()
Havcom, Да пускай пишет, плохо от этого никому не будет.
Действительно. Кому надо — воспользуется, кому не надо — пройдёт мимо.

Цитата Havcom ()
Я думал, ты не справишься.
Кто бы сомневался.
Цитата Havcom ()
Если ты плохо разбираешься, то зачем тогда пишешь скрипты для мододелов чуть выше?
Может, чтобы повысить свои знания, не?

Цитата Havcom ()
А то ты предлагаешь внести исправления, которые вызовут баги в игре.
Да? и какие же?
Цитировать Жалоба
Havcom
Мастера
  • публикаций
  • комментариев
Цитата TranZit ()
Да? и какие же?

Например карта таро на увеличение патронов перестанет работать.
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Havcom, а вот и нихрена, я это предусмотрел. Вот скрипт из MegaPack:

Код
local gmpa = player.s_SubClass.GiveMegaPackAmmo
if player then
for k,v in player.Ammo do
player.Ammo [k]= player.Ammo [k]+ gmpa [k]* AmmoDifficultyModifier[Game.Difficulty] * Game.AmmoFoundFactor
end


Посмотри скрипты прежде, чем заявлять о багах.
Цитировать Жалоба
Painkiller-Ivan
Посетители +
  • публикаций
  • комментариев
TranZit, обнови-ка материал, в документе MegaPack.CItem смещены строки (если заглянуть в архив, из правого окна станет понятно, что писалось с MiniCommander, потому такой беспорядок).

Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Painkiller-Ivan, смещение строк из-за дурацкого блокнота, я открывал через NotePad++ и всё прекрасно отображалось.
Цитировать Жалоба
Jourgensen
Модераторы
  • публикаций
  • комментариев
Иногда у многих возникала проблема при создании своей отдельной альтернативной ветки уровней. Казалось бы, что все не так сложно, но как добавить свою ветку уровней со своим определенным сюжетом и режимом игры в других частях отдельно от оригинала и аддона? Ведь там все немного иначе. Поэтому я решил все это разложить по полочкам и добавить в соответствующую тему на нашем форуме, авось да кому-нибудь пригодится.

Обозначения:
[X]- название вашего режима игры
[Y]- название вашей новой ветки уровней
[Z]- название ветки уже изначально имеющихся уровней в игре
[N]- уникальная цифра чаптера по которой игра определяет какие уровни необходимо загружать
[V]- уникальное имя контрольных точек и автосохранений. Пример можете посмотреть в функции Levels_GetLevelName(dir)

[spoiler]uSpoileri9O1qFl
i9O1qF'
i9O1qF'
i9O1qF'
i9O1qF')).val('[\–] Спойлер');$(
i9O1qF'
i9O1qF'
i9O1qF')).val('[+] Спойлер');$(
i9O1qF'[+] Спойлер?
Код
--------------------------------------------------
LScripts/HUD/Menu/GameMenu.lua

items =
{
--
[X]=
{
text = TXT.Menu.[X],
desc = "",
x = -1,
y = 380,
fontBigSize = 45,
action = "PainMenu:SignAPact(1,true)",
sndLightOn = "menu/menu/option-light-on_main",
},
--
}
--------------------------------------------------
LScripts/HUD/Menu/MainMenu.lua

items =
{
SignAPact =
{
text = TXT.Menu.SignAPact,
desc = TXT.MenuDesc.SignAPact,
x    = -1,
y    = 210,
action = "PainMenu:ActivateScreen(GameMenu)",
sndLightOn = "menu/menu/option-light-on_main",
},
--
}
--------------------------------------------------
LScripts/HUD/Menu/NewGameMenu.lua

NewGameMenu =
{
--
backAction = "PainMenu:ActivateScreen(GameMenu)",
--
}
--------------------------------------------------
LScripts/HUD/Levels.lua

[Y]=
{
{
{ map directory, name, sketch, card cond, card index, min. level },
},
}
--======================================================================
function Levels_FillMap()
if not Game then return end
------------------------------
if Game. [X]then
Levels =
[Y]else Levels =
[Z]end
------------------------------
local current_set = false
--
end
--======================================================================
function Levels_GetNextLevel(name)
if name == nil then return nil end
if not Game then return end
------------------------------   
if Game. [X]then
Levels =
[Y]else Levels =
[Z]end
------------------------------
local ret = false
--
end
--======================================================================
function Levels_GetLevelName(dir)
if dir == nil then return nil end
if not Game then return end
------------------------------   
if Game. [X]then
Levels =
[Y]else
Levels =
[Z]end
------------------------------
for i=1,table.getn(Levels) do
for j=1,table.getn(Levels[i]) do
if Levels[i][j][1] == dir then
return "C"..string.format("%02d",i).."E"..string.format("%02d",j).." - "..Levels[i][j][2]
------------------------------
else
return "[V]"..string.format("%02d",i).."[V]"..string.format("%02d",j).." - "..Levels[i][j][2]
------------------------------
end
end
end
end
--======================================================================
function Levels_GetLevelByDir(dir)
if dir == nil then return nil, nil end
------------------------------
for i=1,table.getn([Y]) do
for j=1,table.getn([Y][i]) do
if [Y][i][j][1] == dir then
return j,i
end
end
end
------------------------------
end
--======================================================================
function Levels_GetSketchByDir(dir)
if dir == nil then return nil end
------------------------------
for i=1,table.getn([Y]) do
for j=1,table.getn([Y][i]) do
if [Y][i][j][1] == dir then
return "HUD/Map/"..[Y][i][j][3]
end
end
end
------------------------------
end
--------------------------------------------------
LScripts/HUD/PainMenu.lua

----------------
--======================================================================
function PainMenu:SignAPact(mode,[X])
WORLD.SwitchToState(2)
--
------------------------------
local add = "false"
if  [X]then add = "true" end
------------------------------
if not mode or mode == 1 then
if Game.GameInProgress then
PainMenu:AskYesNo(Languages.Texts[686], 'Game.GameInProgress = false; Game.LevelStarted = false; Game:ClearLevelsStats(false); PainMenu:SignAPact(2,'..add..')', 'PainMenu:ActivateScreen(GameMenu)' )
else PainMenu:SignAPact(2,[X])
end
--
if ask then
PainMenu:AskYesNo(Languages.Texts[636], "Game. [X]= "..add.."; Game.GameInProgress = false; Game.LevelStarted = false; if Game then Game. [X]= "..add.."; Game:ClearLevelsStats(true) end; PainMenu:ActivateScreen(NewGameMenu)", "Game. [X]= "..add.."; Game.GameInProgress = false; Game.LevelStarted = false; PainMenu:ActivateScreen(NewGameMenu)" )
else
Game.GameInProgress = false
Game.LevelStarted = false
Game. [X]=
[X]PainMenu:ActivateScreen(NewGameMenu)
end
end
end
--------------------------------------------------
LScripts/Main/Game.lua

Game =
{
Active = false,
------------------------------
[X]= false,
------------------------------
--
}
--======================================================================
function Game:LoadLevel(name)
Lev:Apply()
if not PrecacheDisabled then
Cache:PrecacheLevel(name)
end
------------------------------
if string.find(name,"C[N]L",1,true) == 1 then
Lev. [X]= true
end
if Lev. [X]then
Game. [X]= true
else
Game. [X]= false
end
if Game. [X]then
Levels =
[Y]else
Levels =
[Z]end
------------------------------
--
end
--======================================================================
function Game:GetCurrentLevelState()
local new = {}
------------------------------
new. [X]= Game.
[X]------------------------------
return new
end
--======================================================================
function Game:SetCurrentLevelState(state)
--
------------------------------
Game. [X]= state.
[X]------------------------------
end
[/spoiler]
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Думаю, большинство знают о существовании такого бага, как краш игры при покупке карты Таро стоимостью, равной золоту у игрока (или меньше на одну или две монеты). В своей «лаборатории» мне удалось придумать обходной путь во избежание этого краша. Думаю, кому-нибудь да пригодится.

[spoiler]uSpoilerVoTh6Cl
VoTh6C'
VoTh6C'
VoTh6C'
VoTh6C')).val('[\–] Скрипт');$(
VoTh6C'
VoTh6C'
VoTh6C')).val('[+] Скрипт');$(
VoTh6C'[+] СкриптData/LScripts/HUD/MagicBoard.lua:

function MagicBoard:Setup()
    ...
    local cards,cards1,cards2 = nil

    for _,v in pairs(MagicCards.permCards) do
        if rawequal(v.cost,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then
            if Game.CardsAvailable[v.index] == true then
                cards = true
            end
        elseif rawequal(v.cost + 1,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then
            if Game.CardsAvailable[v.index] == true then
                cards1 = true
            end
        elseif rawequal(v.cost + 2,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then
            if Game.CardsAvailable[v.index] == true then
                cards2 = true
            end
        end
    end
 
    for _,v in pairs(MagicCards.timeCards) do
        if rawequal(v.cost,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then
            if Game.CardsAvailable[v.index] == true then
                cards = true
            end
        elseif rawequal(v.cost + 1,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then
            if Game.CardsAvailable[v.index] == true then
                cards1 = true
            end
        elseif rawequal(v.cost + 2,Game.PlayerMoney) == true and Game.PlayerMoney > 0 then
            if Game.CardsAvailable[v.index] == true then
                cards2 = true
            end
        end
    end

    if Game then
        if cards == true then
            Game.PlayerMoney = Game.PlayerMoney + 3
            MBOARD.SetCashCheat(Game.PlayerMoney + 3)
        elseif cards1 == true then
            Game.PlayerMoney = Game.PlayerMoney + 2
            MBOARD.SetCashCheat(Game.PlayerMoney + 2)
        elseif cards2 == true then
            Game.PlayerMoney = Game.PlayerMoney + 1
            MBOARD.SetCashCheat(Game.PlayerMoney + 1)
        end
    end

    ...
end[/spoiler]=Скрипт
Цитировать Жалоба
Jourgensen
Модераторы
  • публикаций
  • комментариев
Достаточно просто взять и вытащить модуль MagicBoard.lua из запакованного архива и оставить в каталоге с игрой. Все отлично работает и никаких крашев. Вот нафига ты общее количество золото плюсишь? Плевать на три, на две, или одну единицу. Просто ЗАЧЕМ? И вот эта твоя писанина ни к чему.
Цитировать Жалоба
TranZit
Мастера
  • публикаций
  • комментариев
Цитата
Достаточно просто взять и вытащить модуль MagicBoard.lua из запакованного архива и оставить в каталоге с игрой. Все отлично работает и никаких крашев.
По-прежнему игра крашится. И не у меня одного. Такое в принципе невозможно. Напрямую исправить этот баг можно единственным способом: залезть в движок.
Цитата Jourgensen ()
Вот нафига ты общее количество золото плюсишь?
При входе на доску активируется написанный мною скрипт, который сравнивает цену каждой карты с количеством золота у игрока. Если они оказываются равными, происходит одно из следующих действий: 1) если цена карты и деньги у игрока равны, то скрипт прибавляет к деньгам игрока три монеты, поскольку краш может произойти не только, если цена карты равна золоту у игрока, но и если золота на одну или две монеты больше; 2) если золото превышает цену карты на одну монету, скрипт прибавляет к деньгам игрока две монеты; 3) если же золото превышает цену карты на две монету, тогда к деньгам игрока прибавляются одна монета. В всех случаях золото всегда будет превышать цену любой карты на три монеты, что никогда не позволит игре крашнуться в этот момент.
Цитата Jourgensen ()
И вот эта твоя писанина ни к чему.
Как раз таки наоборот. Я хотя бы делаю, а не просто сижу на мягком месте, не пишу ерунды и не наговариваю на других.
Цитировать Жалоба

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своей новости.

Мы в ВК

***
Фан группа по игре
Большая группа по игре
Первая группа по игре
menuright2
menuright3
menuright4
Сайт работает под управлением DataLife Engine.
© PainkillerClub.ru 2011-2023 | © Design by Мария Андрюшечкина.