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

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

7 лет назад
По моему коду выше: с двелами в подземке , которые перестраиваются в крестьянские дома, беда- они смещаются и стают недоступными... Как это решить?
Аватар пользователя
7 лет назад
гномьи двеллы перестраиваются? если так, то у них blocked tiles отличаются от прочих двеллов 1 уровня, поэтому такая проблема возникает. Точно не знаю как решить, либо изменять эти тайлы у гномьего двелла, либо не перестраивать, а уничтожать старый двелл(RazeBuilding) и создавать новый(CreateDwelling).
В ответ пользователю Gerter
7 лет назад
Gerter
гномьи двеллы перестраиваются?
Да, именно они.
Gerter
если так, то у них blocked tiles отличаются от прочих двеллов 1 уровня, поэтому такая проблема возникает. Точно не знаю как решить, либо изменять эти тайлы у гномьего двелла, либо не перестраивать, а уничтожать старый двелл(RazeBuilding) и создавать новый(CreateDwelling).

А вот как определить в моем коде, что это двелы 1 уровня? (Другие перестраиваются нормально)
Аватар пользователя
7 лет назад
Смени тайлы гномьим двеллингам. Я так делал в Плате за любовь.
Аватар пользователя
7 лет назад
В принципе, могу скинуть уже измененные файлы гномьих двеллингов.

Добавлено через 57 секунд
Так, как работает random?

Точнее,

random (3) - это какой промежуток? От 0 до 2 или от 0 до 3?
В ответ пользователю AstralLein
7 лет назад
AstralLein
Смени тайлы гномьим двеллингам. Я так делал в Плате за любовь.

Не получилось. Возвращаюсь к вопросу:
как определить в моем коде, что это двелы 1 уровня?
(Не обращайте внимание, что тут эльфийские строения)
function dwellings()
for i, dw_type in {"FAIRIE_TREE", "WOOD_GUARD_QUARTERS", "HIGH_CABINS", "PRESERVE_MILITARY_POST"} do
for j, dw in GetObjectNamesByType(dw_type) do
ELF_DWLS[dw] = "откл"
SetObjectEnabled(dw, nil)
Trigger(4, dw, "TransformDwelling")
end
end
startThread(dwellings2)
end

startThread(dwellings)

function dwellings2()
while 1 do
repeat
sleep()
until IsPlayerCurrent(1)
for dwelling, state in ELF_DWLS do
if state == "вкл" then
ELF_DWLS[dwelling] = "откл"
SetObjectEnabled(dwelling, nil)
Trigger(4, dwelling, "TransformDwelling")
end
end
repeat
sleep()
until not IsPlayerCurrent(1)
for dwelling, state in ELF_DWLS do
if state == "откл" then
ELF_DWLS[dwelling] = "вкл"
SetObjectEnabled(dwelling, 1)
Trigger(4, dwelling, nil)
end
end
end
end

function TransformDwelling(hero, hut)
if GetCurrentPlayer() == 1 then
QuestionBox (path.."transformd.txt" , 'transformnok("'..hut..'")' );
end
end

function transformnok(hut)
if not (GetPlayerResource(1, CRYSTAL) >= 15 and GetPlayerResource(1,GEM) >= 10) then
ShowFlyingSign(path.."nores.txt",hut,-1,10)
return
end
SetPlayerResource(1,CRYSTAL, (GetPlayerResource(1,CRYSTAL) - 15))
SetPlayerResource(1,GEM, (GetPlayerResource(1,GEM) - 10))
PlayVisualEffect('/Effects/_(Effect)/Spells/Bless.xdb#xpointer(/Effect)', hut)
sleep(5)
Trigger(4, hut, nil)
ELF_DWLS[hut] = nil
ReplaceDwelling(hut,TOWN_HEAVEN)
sleep(1)
SetObjectOwner(hut,1)
SetObjectEnabled(hut,true)
sleep(1)
return function()
end
end
Аватар пользователя
7 лет назад
random (3) - это какой промежуток? От 0 до 2 или от 0 до 3?
0-2

по двеллам - FORTRESS_DEFENDERS - это, если не ошибаюсь, тип гномьего 1 двелла
В ответ пользователю Gerter
Аватар пользователя
7 лет назад
Gerter
0-2

по двеллам - FORTRESS_DEFENDERS - это, если не ошибаюсь, тип гномьего 1 двелла

Спасибо)
7 лет назад
Попытался так записать, но ничего не происходит:
function TransformDwelling(hero, hut)
if GetCurrentPlayer() == 1 then
if hut =="FORTRESS_DEFENDERS" then
QuestionBox (path.."transform.txt" , 'transformnok("'..hut..'")' )
end
end
end
Аватар пользователя
7 лет назад
не, здесь hut - это имя объекта. По типу можно распределить в функции dwellings(), на объекты типа FORTRESS_DEFENDERS навешивать триггер отличный от остальных. Если проверять в самой функции трансформа, то как то так:
if contains(GetObjectNamesByType('FORTRESS_DEFENDERS'), hut) then
В ответ пользователю Gerter
7 лет назад
Gerter
не, здесь hut - это имя объекта. По типу можно распределить в функции dwellings(), на объекты типа FORTRESS_DEFENDERS навешивать триггер отличный от остальных. Если проверять в самой функции трансформа, то как то так:
if contains(GetObjectNamesByType('FORTRESS_DEFENDERS'), hut) then

Работает! Спасибо огромное :smile20:
Аватар пользователя
7 лет назад
Пытаюсь реализовать такую фишку:
1. В определенный момент сделать сохранение на карте через Save()
2. Запустить другую карту через WarpToMap()
3. С другой карты загрузить сделанный сейв.

При загрузке сейва, неважно, руками или через Load() игра вылетает, без каких-либо ошибок, просто вылет на рабочий стол. Мб кто-нибудь знает, это задуманная механика или как-то можно исправить?

Сделанный руками сейв или автосейв при этом загружается абсолютно нормально. Думал, дело в том, что сейв нужно прописать в ресурсах карты, но это ничего не меняет(
7 лет назад
Вот код:
Ornel=0
Ornel_d=0
--
Gl=0
Gl_d=0
--
Dug=0
Dug_d=0
--
Airi=0
Airi_d=0

Mive=0
Mive_d=0

function DeathHavenHero(hero)
if hero== Ornella then
Ornel_d=1
Ornel=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath(Ornella,0)
print("Глория убита")
end
if hero==Glen then
Gl_d=1
Gl=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath(Glen,0)
end
--
if hero=="Orrin" then
Dug_d=1
Dug=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath("Orrin",0)
end

if hero=="Ving" then
Airi_d=1
Airi=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath("Ving",0)
end
if hero=="Maeve" then
Mive_d=1
Mive=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath("Maeve",0)
end
end

Trigger (PLAYER_REMOVE_HERO_TRIGGER, PLAYER_2, "DeathHavenHero")

dayd={8,7,6,5}

function NewDay()
if GetDate(MONTH)==2 and GetDate(WEEK)==2 then
coef={1.5,2,2.5,3}
end
if Ornel_d==1 and GetDate(DAY)-Ornel== dayd[diff] then
MakeHeroReturnToTavernAfterDeath(Ornella,1,1)
Ornel_d=0
print("Глория готова")
end

if Gl_d==1 and GetDate(DAY)- Gl== dayd[diff] then
MakeHeroReturnToTavernAfterDeath(Glen,1,1)
Gl_d=0
print("Глен готов")
end

if Dug_d==1 and GetDate(DAY)- Dug== dayd[diff] then
MakeHeroReturnToTavernAfterDeath("Orrin",1,1)
Dug_d=0
print("Дугал готов")
end

if Airi_d==1 and GetDate(DAY)- Airi== dayd[diff] then
MakeHeroReturnToTavernAfterDeath("Ving",1,1)
Airi_d=0
print("Айрис готова")
end

if Mive_d==1 and GetDate(DAY)- Mive== dayd[diff] then
MakeHeroReturnToTavernAfterDeath("Maeve",1,1)
Mive_d=0
print("Мив готова")
end
end

Trigger(0,"NewDay")

Попытался сделать так, чтобы герои возрождались в таверне спустя время, но теперь ни один герой не возрождается. В консоле ошибок нет... В чем собственно ошибка?
В ответ пользователю AlekseyS
Аватар пользователя
7 лет назад
AlekseyS
Вот код:
Ornel=0
Ornel_d=0
--
Gl=0
Gl_d=0
--
Dug=0
Dug_d=0
--
Airi=0
Airi_d=0

Mive=0
Mive_d=0

function DeathHavenHero(hero)
if hero== Ornella then
Ornel_d=1
Ornel=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath(Ornella,0)
print("Глория убита")
end
if hero==Glen then
Gl_d=1
Gl=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath(Glen,0)
end
--
if hero=="Orrin" then
Dug_d=1
Dug=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath("Orrin",0)
end

if hero=="Ving" then
Airi_d=1
Airi=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath("Ving",0)
end
if hero=="Maeve" then
Mive_d=1
Mive=GetDate(DAY)
MakeHeroReturnToTavernAfterDeath("Maeve",0)
end
end

Trigger (PLAYER_REMOVE_HERO_TRIGGER, PLAYER_2, "DeathHavenHero")

dayd={8,7,6,5}

function NewDay()
if GetDate(MONTH)==2 and GetDate(WEEK)==2 then
coef={1.5,2,2.5,3}
end
if Ornel_d==1 and GetDate(DAY)-Ornel== dayd[diff] then
MakeHeroReturnToTavernAfterDeath(Ornella,1,1)
Ornel_d=0
print("Глория готова")
end

if Gl_d==1 and GetDate(DAY)- Gl== dayd[diff] then
MakeHeroReturnToTavernAfterDeath(Glen,1,1)
Gl_d=0
print("Глен готов")
end

if Dug_d==1 and GetDate(DAY)- Dug== dayd[diff] then
MakeHeroReturnToTavernAfterDeath("Orrin",1,1)
Dug_d=0
print("Дугал готов")
end

if Airi_d==1 and GetDate(DAY)- Airi== dayd[diff] then
MakeHeroReturnToTavernAfterDeath("Ving",1,1)
Airi_d=0
print("Айрис готова")
end

if Mive_d==1 and GetDate(DAY)- Mive== dayd[diff] then
MakeHeroReturnToTavernAfterDeath("Maeve",1,1)
Mive_d=0
print("Мив готова")
end
end

Trigger(0,"NewDay")

Попытался сделать так, чтобы герои возрождались в таверне спустя время, но теперь ни один герой не возрождается. В консоле ошибок нет... В чем собственно ошибка?
Функция MakeHeroReturnToTavernAfterDeath только устанавливает внутренний флаг героя, чтобы он сразу после смерти возвращался в таверну. У вас в момент смерти флаг стоит в состоянии по умолчанию, то есть "не возвращать в таверну". После прошедшего срока установка флага в положение "возвращать" не создаст героя чудесным образом ни у кого в таверне хотя бы потому, что игра даже не понимает, в таверну какого игрока класть этого героя, он ведь мертв и никому не принадлежит.

Если нужно возрождение героев после некоторого срока после их смерти, можно зарезервировать их за игроком и выставлять по мере необходимости функцией DeployReserveHero.

Статистика

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

Сейчас на сайте 6 пользователей 1371 гостей