Перейти к содержанию

Сообщения от Скрипты

В ответ пользователю }{0TT@6bI4
3 года назад
}{0TT@6bI4
Мне кажется, дело в том, что зеленый и оранжевый игроки — компьютерные. И, предположу, в моём случае всё работает правильно и просто по механике MessageBoxForPlayers сообщения для компов перенаправляется игрокам. А в вашем случае... а вот и узнаем. Оставьте принт, но в number верните формулу подсчета номера игрока свою, старую

Вернул все как было, попробовал, похоже оно и при моем скрипте также работало. 
Аватар пользователя
3 года назад
Тогда рекомендую добавить проверку if IsAIPlayer(number) then и только в случае истинности утверждения предлагать повышение
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
3 года назад

}{0TT@6bI4
Тогда рекомендую добавить проверку if IsAIPlayer(number) then и только в случае истинности утверждения предлагать повышение

Короче говоря Азгалор посоветовал следующее:

"Попробуй короче в MessageBox, вместо GetObjectOwner(hero), вставить это GetPlayerFilter(GetCurrentPlayer())"

В итоге заработало, спасибо вам обоим за помощь.

Аватар пользователя
3 года назад
Кстати, умная мысль. Можно и GetPlayerFilter(GerObjectOwner(hero)). Думаю, это даже будет лучше

Дело в том, что фильтр игрока не совпадает с номером игрока:
1—1
2—2
3—4
4—8
...

Почему я против проверки GetCurrentPlayer, потому что герои могут ходить не только на своём ходу
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
3 года назад
}{0TT@6bI4
Кстати, умная мысль. Можно и GetPlayerFilter(GerObjectOwner(hero)). Думаю, это даже будет лучше

Дело в том, что фильтр игрока не совпадает с номером игрока:
1—1
2—2
3—4
4—8
...

Почему я против проверки GetCurrentPlayer, потому что герои могут ходить не только на своём ходу


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

function TeleportFinal(hero, object)
    if HasArtefact(hero,53) then
       if object == 'TeleportTreeOne' then
            SetObjectPosition(hero,51,316,-1,-1)
       elseif object == 'TeleportTreeTwo' then
            SetObjectPosition(hero,51,291,-1,-1)
       end
        RemoveArtefact(hero,53)
        Trigger (OBJECT_TOUCH_TRIGGER, object, nil)
    elseif IsAIPlayer(GetObjectOwner(hero)) then
    MessageBoxForPlayers(GetPlayerFilter(GetObjectOwne r(hero)),"Maps/Multiplayer/JoyPatriot/Teks/FinalTp.txt", nil)
    end
end

SetObjectEnabled("TeleportTreeOne",nil);
SetObjectEnabled("TeleportTreeTwo",nil);
Trigger(OBJECT_TOUCH_TRIGGER,"TeleportTreeOne","TeleportFinal");
Trigger(OBJECT_TOUCH_TRIGGER,"TeleportTreeTwo","TeleportFinal");

 

P.S

С Owner все нормально, почему-то на сайте пробел лишний не дает убрать.

Аватар пользователя
3 года назад
Код будет очень круто прикреплять в блоке для кода, тогда будет подсветка синтаксиса, отдельное окно для кода и удобный шрифт
Вложения 1
1 файл • Общий размер: 6,1 KB
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
3 года назад

Здравствуйте, решил сделать скрипт, где понадобится один триггер на несколько функции (их планируется 5, сейчас написаны 2), но после использования определенной функции, она должна переставать работать. Проблема в том, что попытался решить данный вопрос через проверку глобальных переменных, однако, столкнулся с тем, что они не работают, а именно вылазит ошибка, что значение false у них не найдено.

FORTUNATE_ADVENTURER_DONE = false -- так ведь делаются глобальные переменные, правильно?
ESTATES_DONE = false

function FORTUNATE_ADVENTURER (hero)
local playerID = GetObjectOwner(hero)
local art_1 = {1,5,8,12,14,18,19,20,27,31,32,34,55,56,57,58,60,6 1,62,64,65,66,70,74,75,80,87}
local art_2 = {2,4,9,16,17,21,23,25,35,36,37,38,40,41,42,43,52,6 3,71,82}
local art_3 = {6,11,13,15,22,33,39,44,45,46,47,48,49,50,51,59,67 ,68,69,76,77,78,79,81,83,85,86}
local id_1 = art_1[random(length(art_1))]
local id_2 = art_2[random(length(art_2))]
local id_3 = art_3[random(length(art_3))]
local LUCK = GetHeroSkillMastery(hero, SKILL_LUCK)
local Fortunate_adventurer = GetHeroSkillMastery(hero, PERK_FORTUNATE_ADVENTURER)
print(hero, playerID)
if Fortunate_adventurer == 1 then
if LUCK == 1 then
GiveArtifact(hero, id_1, 1)
elseif LUCK == 2 then
GiveArtifact(hero, id_2, 1)
elseif LUCK == 3 then
GiveArtifact(hero, id_3, 1)
end
end
FORTUNATE_ADVENTURER_DONE = true -- смена значения переменной
end
-----------------------------Dop_Golda------------------------------------------
function ESTATES (hero)
local number = GetObjectOwner(hero)
local playerID = number
local Gold = GetPlayerResource(number,6)
local ESTATE = GetHeroSkillMastery(hero, PERK_ESTATES)
print(hero,playerID)
if ESTATE == 1 then
SetPlayerResource(playerID, 6,Gold+8000)
end
ESTATES_DONE = true -- смена значения переменной
end

function pp (hero) -- главная функция
if not FORTUNATE_ADVENTURER_DONE then
FORTUNATE_ADVENTURER(hero)
end
if not ESTATES_DONE then
ESTATES(hero)
end
end

for i = 1,53 do
for x = 1,4 do
Trigger(OBJECT_TOUCH_TRIGGER,"PortalP" .. x.. "_" ..i,"pp")
end
end
Аватар пользователя
3 года назад
Shiroyasha2910, для начала попробуем заменить false и true в переменных на 0(вместо false) и 1(вместо true). В переменных хранятся имена и числа, а true и false(not nil и nil) прописываются в функции-обработчики(GetObjectOwner, IsHeroAlive, HasArtifact, EnableHeroAI и т.д.)
Аватар пользователя
3 года назад
Не по коду, а чисто для понимания: любая переменная является глобальной, если она не объявлена как local или не является аргументом функции. Подход с капсом — 🤍

Вместо false желательно использовать nil, вместо true — 1. Кроме того, награда у вас начисляется только при наличии скилла, а переменная-флаг ставится в "ложь" при любом касании. То есть подход без навыка = больше никогда не получишь, даже если уже с навыком подойдёшь. Очевидно, смену флага стоит занести внутрь условного блока
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
3 года назад

Привет! В общем, как-то обращался по поводу создания счётчика убитых существ, имею такой скрипт: 

function Duncan_Revenge( combatIndex )
if GetSavedCombatArmyHero( combatIndex, 1 ) == "Duncan" then
if GetSavedCombatArmyCreaturesCount( combatIndex, 0, 112 ) >= 1 then
n_stacks = GetSavedCombatArmyCreaturesCount( combatIndex, 0 );
for i = 0,(n_stacks-1) do
local revenge_target, count, died = GetSavedCombatArmyCreatureInfo( combatIndex, 0, i );
if revenge_target == 112 and died >= 1 then
enemieskilledcounter = enemieskilledcounter + died;
ShowFlyingSign({GetMapDataPath().."Duncan_Counter.txt"; showcounter=enemieskilledcounter}, "Duncan", 1, 10)
end
end
end
end
end

Скрипт-то работает, но очень напрягает что сообщение с убитыми выдаётся несколько раз. Как я понимаю, из-за нескольких стеков. Можно ли как-то скрипт поправить чтобы сообщение выдавалось только один раз сразу по всем убитым?

Аватар пользователя
3 года назад

Сначала посчитать все возможные потери по стекам, а потом вывести сообщение, если они есть.

local enemieskilledcounter = 0            
n_stacks = GetSavedCombatArmyCreaturesCount( combatIndex, 0 );
for i = 0,(n_stacks-1) do
local revenge_target, count, died = GetSavedCombatArmyCreatureInfo( combatIndex, 0, i );
if revenge_target == 112 and died >= 1 then
enemieskilledcounter = enemieskilledcounter + died;
end
end
if enemieskilledcounter > 0 then
ShowFlyingSign({GetMapDataPath().."Duncan_Counter.txt"; showcounter=enemieskilledcounter}, "Duncan", 1, 10)
end
Нет войне.
В ответ пользователю Gerter
Аватар пользователя
3 года назад
Gerter, спасибо) Правда, пришлось чуток дописать чтобы счетчик не отображался после каждого боя, но теперь действительно работает так как нужно)
3 года назад

Я тут почти закончил делать карту, но столкнулся с проблемой сделать свой бонус для сета артефактов, а именно, я вообще не представляю как подобное делать. Задумка такая, если у героя будут артефакты: шлем некроманта, проклятое кольцо, кольцо сломленного духа и амулет некроманта, то:

Гарантирует герою, что в начале боя все существа в армии противника окажутся под действием заклинаний «Замедление», «Неудача», «Слабость» и «Проклятие». Эффект действует на протяжении 10 ходов.

Помогите пожалуйста

В ответ пользователю Shiroyasha2910
Аватар пользователя
3 года назад
Shiroyasha2910

Я тут почти закончил делать карту, но столкнулся с проблемой сделать свой бонус для сета артефактов, а именно, я вообще не представляю как подобное делать. Задумка такая, если у героя будут артефакты: шлем некроманта, проклятое кольцо, кольцо сломленного духа и амулет некроманта, то:

Гарантирует герою, что в начале боя все существа в армии противника окажутся под действием заклинаний «Замедление», «Неудача», «Слабость» и «Проклятие». Эффект действует на протяжении 10 ходов.

Помогите пожалуйста


Такая хотелка хоть и реализуема, но вмещает в себя целый комплекс задач, начиная от отключения стандартного бонуса набора некромантских артефактов (если хочется, чтоб был именно свой бонус, а не сочетания своего и стандартного), прописыванием сложного боевого скрипта, а потом надо подвязывать этот боевой скрипт для героя с этими артефактами в скрипте обычном.
Моя кампания:
"Упорство самурая"

Мои карты:

Сценарий "Ответный удар"
Сценарий "Воронье отчаяние"
Сценарий "Дикий шторм"
В ответ пользователю Grigoriy
3 года назад
Grigoriy
Такая хотелка хоть и реализуема, но вмещает в себя целый комплекс задач, начиная от отключения стандартного бонуса набора некромантских артефактов (если хочется, чтоб был именно свой бонус, а не сочетания своего и стандартного), прописыванием сложного боевого скрипта, а потом надо подвязывать этот боевой скрипт для героя с этими артефактами в скрипте обычном.

Отключать стандартный бонус не нужно, проверка на наличие артефактов очень легкая, а вторая часть действительно выглядит очень сложной, хочешь написать, что лучше пока забыть об этом?

Статистика

Приветствуем новейшего участника: recijeb