Ñêðèïòû - Ñòðàíèöà 249 - Ôîðóì HeroesWorld-à

Áûñòðàÿ íàâèãàöèÿ ïî îñíîâíûì ðàçäåëàì ôîðóìà:
Òóðíèðû
ÊÀÐÒÛ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Ãåðîè Ìå÷à è Ìàãèè 5 - Êàðòîñòðîèòåëüñòâî (Ðåäàêòîð êàðò)  ýòîì ðàçäåëå ìîæíî îáñóæäàòü âñå ÷òî êàñàåòñÿ ðåäàêòîðà êàðò äëÿ Heroes of Might and Magic V. Òàê æå çäåñü îáñóæäàåì êàðòîñòðîèòåëüñòâî.

Îòâåò
Ñòðàíèöà 249 èç 261
 
Îïöèè òåìû
#3721
Ñòàðûé 05.10.2022, 17:10
  #3721
^
Shiroyasha2910
📖
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

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

Вернул все как было, попробовал, похоже оно и при моем скрипте также работало. 
Shiroyasha2910 âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#3722
Ñòàðûé 06.10.2022, 10:10
  #3722
^
}{0TT@6bI4
 
Àâàòàð äëÿ }{0TT@6bI4
📖
Ðåãèñòðàöèÿ: 05.09.2019
Àäðåñ: Ñåðåáðÿíûå Ãîðîäà, Àëü-Ñàôèð
Ñîîáùåíèÿ: 1980
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 05.09.2019
Àäðåñ: Ñåðåáðÿíûå Ãîðîäà, Àëü-Ñàôèð
Ñîîáùåíèÿ: 1980
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Тогда рекомендую добавить проверку 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
_________________
Ãðóïïà êàðòîñòðîèòåëåé
Òàì îòâåòû íà âîïðîñû, ðóêîâîäñòâà, ãàéäû è ïðî÷åå
Discord-ñåðâåð "Ãåðîè 5: S.T.A.L.K.E.R"
Ñåðâåð ïî ìîäèôèêàöèè "Ãåðîè 5: S.T.A.L.K.E.R"
_________________
}{0TT@6bI4 âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#3723
Ñòàðûé 07.10.2022, 14:35
  #3723
^
Shiroyasha2910
📖
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ïî óìîë÷àíèþ
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
Àäðåñ: Ñåðåáðÿíûå Ãîðîäà, Àëü-Ñàôèð
Ñîîáùåíèÿ: 1980
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 05.09.2019
Àäðåñ: Ñåðåáðÿíûå Ãîðîäà, Àëü-Ñàôèð
Ñîîáùåíèÿ: 1980
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Кстати, умная мысль. Можно и 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
_________________
Ãðóïïà êàðòîñòðîèòåëåé
Òàì îòâåòû íà âîïðîñû, ðóêîâîäñòâà, ãàéäû è ïðî÷åå
Discord-ñåðâåð "Ãåðîè 5: S.T.A.L.K.E.R"
Ñåðâåð ïî ìîäèôèêàöèè "Ãåðîè 5: S.T.A.L.K.E.R"
_________________
}{0TT@6bI4 âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#3725
Ñòàðûé 08.10.2022, 15:10
  #3725
^
Shiroyasha2910
📖
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ïî óìîë÷àíèþ
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
Àäðåñ: Ñåðåáðÿíûå Ãîðîäà, Àëü-Ñàôèð
Ñîîáùåíèÿ: 1980
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 05.09.2019
Àäðåñ: Ñåðåáðÿíûå Ãîðîäà, Àëü-Ñàôèð
Ñîîáùåíèÿ: 1980
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Код будет очень круто прикреплять в блоке для кода, тогда будет подсветка синтаксиса, отдельное окно для кода и удобный шрифт
Ìèíèàòþðû
Íàæìèòå íà èçîáðàæåíèå äëÿ óâåëè÷åíèÿ
Íàçâàíèå:  20221008_212415.jpg
Ïðîñìîòðîâ: 10
Ðàçìåð:	21.2 Êáàéò
ID:	68447  
__________________
Ñ óâàæåíèåì, }{0TT@6bI4
_________________
Ãðóïïà êàðòîñòðîèòåëåé
Òàì îòâåòû íà âîïðîñû, ðóêîâîäñòâà, ãàéäû è ïðî÷åå
Discord-ñåðâåð "Ãåðîè 5: S.T.A.L.K.E.R"
Ñåðâåð ïî ìîäèôèêàöèè "Ãåðîè 5: S.T.A.L.K.E.R"
_________________
Ñ óâàæåíèåì, }{0TT@6bI4
_________________
Ãðóïïà êàðòîñòðîèòåëåé
Òàì îòâåòû íà âîïðîñû, ðóêîâîäñòâà, ãàéäû è ïðî÷åå
Discord-ñåðâåð "Ãåðîè 5: S.T.A.L.K.E.R"
Ñåðâåð ïî ìîäèôèêàöèè "Ãåðîè 5: S.T.A.L.K.E.R"
_________________
}{0TT@6bI4 âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#3727
Ñòàðûé 22.10.2022, 03:34
  #3727
^
Shiroyasha2910
📖
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ïî óìîë÷àíèþ
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
Ñîîáùåíèÿ: 219
Ðåãèñòðàöèÿ: 24.04.2016
Ñîîáùåíèÿ: 219
Ïî óìîë÷àíèþ
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
Àäðåñ: Ñåðåáðÿíûå Ãîðîäà, Àëü-Ñàôèð
Ñîîáùåíèÿ: 1980
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 05.09.2019
Àäðåñ: Ñåðåáðÿíûå Ãîðîäà, Àëü-Ñàôèð
Ñîîáùåíèÿ: 1980
Âûñòàâêà íàãðàä
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

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

Вместо false желательно использовать nil, вместо true — 1. Кроме того, награда у вас начисляется только при наличии скилла, а переменная-флаг ставится в "ложь" при любом касании. То есть подход без навыка = больше никогда не получишь, даже если уже с навыком подойдёшь. Очевидно, смену флага стоит занести внутрь условного блока
__________________
Ñ óâàæåíèåì, }{0TT@6bI4
_________________
Ãðóïïà êàðòîñòðîèòåëåé
Òàì îòâåòû íà âîïðîñû, ðóêîâîäñòâà, ãàéäû è ïðî÷åå
Discord-ñåðâåð "Ãåðîè 5: S.T.A.L.K.E.R"
Ñåðâåð ïî ìîäèôèêàöèè "Ãåðîè 5: S.T.A.L.K.E.R"
_________________
Ñ óâàæåíèåì, }{0TT@6bI4
_________________
Ãðóïïà êàðòîñòðîèòåëåé
Òàì îòâåòû íà âîïðîñû, ðóêîâîäñòâà, ãàéäû è ïðî÷åå
Discord-ñåðâåð "Ãåðîè 5: S.T.A.L.K.E.R"
Ñåðâåð ïî ìîäèôèêàöèè "Ãåðîè 5: S.T.A.L.K.E.R"
_________________
}{0TT@6bI4 âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#3730
Ñòàðûé 23.10.2022, 01:23
  #3730
^
Àçãàëîð
 
Àâàòàð äëÿ Àçãàëîð
📖
Ðåãèñòðàöèÿ: 24.04.2016
Ñîîáùåíèÿ: 219
Ðåãèñòðàöèÿ: 24.04.2016
Ñîîáùåíèÿ: 219
Ïî óìîë÷àíèþ
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
Àäðåñ: Ñàíêò-Ïåòåðáóðã
Ñîîáùåíèÿ: 830
pegn0ly#9113
Âûñòàâêà íàãðàä
Ðåãèñòðàöèÿ: 16.07.2012
Àäðåñ: Ñàíêò-Ïåòåðáóðã
Ñîîáùåíèÿ: 830
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
Ñîîáùåíèÿ: 219
Ðåãèñòðàöèÿ: 24.04.2016
Ñîîáùåíèÿ: 219
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Gerter, спасибо) Правда, пришлось чуток дописать чтобы счетчик не отображался после каждого боя, но теперь действительно работает так как нужно)
Àçãàëîð âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#3733
Ñòàðûé 30.10.2022, 21:04
  #3733
^
Shiroyasha2910
📖
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

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

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

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

Shiroyasha2910 âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#3734
Ñòàðûé 30.10.2022, 22:28
  #3734
^
Grigoriy
 
Àâàòàð äëÿ Grigoriy
📖
Ðåãèñòðàöèÿ: 02.11.2016
Ñîîáùåíèÿ: 134
Ðåãèñòðàöèÿ: 02.11.2016
Ñîîáùåíèÿ: 134
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

Shiroyasha2910

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

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

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


Такая хотелка хоть и реализуема, но вмещает в себя целый комплекс задач, начиная от отключения стандартного бонуса набора некромантских артефактов (если хочется, чтоб был именно свой бонус, а не сочетания своего и стандартного), прописыванием сложного боевого скрипта, а потом надо подвязывать этот боевой скрипт для героя с этими артефактами в скрипте обычном.
Grigoriy âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
#3735
Ñòàðûé 31.10.2022, 01:20
  #3735
^
Shiroyasha2910
📖
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ðåãèñòðàöèÿ: 07.07.2019
Ñîîáùåíèÿ: 46
Ïî óìîë÷àíèþ
Re: Ñêðèïòû

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

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

Shiroyasha2910 âíå ôîðóìà
Îòâåòèòü ñ öèòèðîâàíèåì
Îòâåò
Ñòðàíèöà 249 èç 261


Îïöèè òåìû



×àñîâîé ïîÿñ GMT +4, âðåìÿ: 07:30.


vBulletin v3.5.0, Copyright ©2000-2024, Jelsoft Enterprises Ltd. (Ðóññêèé)

ßíäåêñ öèòèðîâàíèå    Top.Mail.Ru