Скрипты - Страница 249 - Форум HeroesWorld-а

Быстрая навигация по основным разделам форума:
Турниры
КАРТЫ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Герои Меча и Магии 5 - Картостроительство (Редактор карт) В этом разделе можно обсуждать все что касается редактора карт для Heroes of Might and Magic V. Так же здесь обсуждаем картостроительство.

Ответ
Страница 249 из 253
 
Опции темы
#3721
Старый 05.10.2022, 17:10
  #3721
^
Shiroyasha2910
📖
Регистрация: 07.07.2019
Сообщения: 26
Регистрация: 07.07.2019
Сообщения: 26
По умолчанию
Re: Скрипты

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

Вернул все как было, попробовал, похоже оно и при моем скрипте также работало. 
Shiroyasha2910 вне форума
Ответить с цитированием
#3722
Старый 06.10.2022, 10:10
  #3722
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
По умолчанию
Re: Скрипты

Тогда рекомендую добавить проверку if IsAIPlayer(number) then и только в случае истинности утверждения предлагать повышение
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3723
Старый 07.10.2022, 14:35
  #3723
^
Shiroyasha2910
📖
Регистрация: 07.07.2019
Сообщения: 26
Регистрация: 07.07.2019
Сообщения: 26
По умолчанию
Re: Скрипты

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

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

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

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

Shiroyasha2910 вне форума
Ответить с цитированием
#3724
Старый 07.10.2022, 16:43
  #3724
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
По умолчанию
Re: Скрипты

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

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

Почему я против проверки GetCurrentPlayer, потому что герои могут ходить не только на своём ходу
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3725
Старый 08.10.2022, 15:10
  #3725
^
Shiroyasha2910
📖
Регистрация: 07.07.2019
Сообщения: 26
Регистрация: 07.07.2019
Сообщения: 26
По умолчанию
Re: Скрипты

}{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 все нормально, почему-то на сайте пробел лишний не дает убрать.

Shiroyasha2910 вне форума
Ответить с цитированием
#3726
Старый 08.10.2022, 22:25
  #3726
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
По умолчанию
Re: Скрипты

Код будет очень круто прикреплять в блоке для кода, тогда будет подсветка синтаксиса, отдельное окно для кода и удобный шрифт
Миниатюры
Нажмите на изображение для увеличения
Название:  20221008_212415.jpg
Просмотров: 8
Размер:	21.2 Кбайт
ID:	68447  
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3727
Старый 22.10.2022, 03:34
  #3727
^
Shiroyasha2910
📖
Регистрация: 07.07.2019
Сообщения: 26
Регистрация: 07.07.2019
Сообщения: 26
По умолчанию
Re: Скрипты

Здравствуйте, решил сделать скрипт, где понадобится один триггер на несколько функции (их планируется 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
Shiroyasha2910 вне форума
Ответить с цитированием
#3728
Старый 22.10.2022, 10:02
  #3728
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 170
Регистрация: 24.04.2016
Сообщения: 170
По умолчанию
Re: Скрипты

Shiroyasha2910, для начала попробуем заменить false и true в переменных на 0(вместо false) и 1(вместо true). В переменных хранятся имена и числа, а true и false(not nil и nil) прописываются в функции-обработчики(GetObjectOwner, IsHeroAlive, HasArtifact, EnableHeroAI и т.д.)
Азгалор вне форума
Ответить с цитированием
#3729
Старый 22.10.2022, 20:39
  #3729
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
По умолчанию
Re: Скрипты

Не по коду, а чисто для понимания: любая переменная является глобальной, если она не объявлена как local или не является аргументом функции. Подход с капсом — 🤍

Вместо false желательно использовать nil, вместо true — 1. Кроме того, награда у вас начисляется только при наличии скилла, а переменная-флаг ставится в "ложь" при любом касании. То есть подход без навыка = больше никогда не получишь, даже если уже с навыком подойдёшь. Очевидно, смену флага стоит занести внутрь условного блока
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3730
Старый 23.10.2022, 01:23
  #3730
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 170
Регистрация: 24.04.2016
Сообщения: 170
По умолчанию
Re: Скрипты

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

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

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

Азгалор вне форума
Ответить с цитированием
#3731
Старый 23.10.2022, 15:57
  #3731
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 812
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 812
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

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

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 вне форума
Ответить с цитированием
#3732
Старый 23.10.2022, 20:56
  #3732
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 170
Регистрация: 24.04.2016
Сообщения: 170
По умолчанию
Re: Скрипты

Gerter, спасибо) Правда, пришлось чуток дописать чтобы счетчик не отображался после каждого боя, но теперь действительно работает так как нужно)
Азгалор вне форума
Ответить с цитированием
#3733
Старый 30.10.2022, 21:04
  #3733
^
Shiroyasha2910
📖
Регистрация: 07.07.2019
Сообщения: 26
Регистрация: 07.07.2019
Сообщения: 26
По умолчанию
Re: Скрипты

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

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

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

Shiroyasha2910 вне форума
Ответить с цитированием
#3734
Старый 30.10.2022, 22:28
  #3734
^
Grigoriy
 
Аватар для Grigoriy
📖
Регистрация: 02.11.2016
Сообщения: 110
Регистрация: 02.11.2016
Сообщения: 110
По умолчанию
Re: Скрипты

Shiroyasha2910

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

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

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


Такая хотелка хоть и реализуема, но вмещает в себя целый комплекс задач, начиная от отключения стандартного бонуса набора некромантских артефактов (если хочется, чтоб был именно свой бонус, а не сочетания своего и стандартного), прописыванием сложного боевого скрипта, а потом надо подвязывать этот боевой скрипт для героя с этими артефактами в скрипте обычном.
Grigoriy вне форума
Ответить с цитированием
#3735
Старый 31.10.2022, 01:20
  #3735
^
Shiroyasha2910
📖
Регистрация: 07.07.2019
Сообщения: 26
Регистрация: 07.07.2019
Сообщения: 26
По умолчанию
Re: Скрипты

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

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

Shiroyasha2910 вне форума
Ответить с цитированием
Ответ
Страница 249 из 253


Опции темы



Часовой пояс GMT +4, время: 07:32.


vBulletin v3.5.0, Copyright ©2000-2022, Jelsoft Enterprises Ltd. (Русский)

Яндекс цитирование    Top.Mail.Ru